+++ /dev/null
-#include "mapinc.h"\r
-\r
-static uint8 mul[2];\r
-static uint8 regie;\r
-#define tkcom1 mapbyte1[1]\r
-#define tkcom2 mapbyte1[2]\r
-#define tkcom3 mapbyte1[3]\r
-\r
-#define prgb mapbyte2\r
-#define chr mapbyte3\r
-\r
-static uint16 names[4];\r
-static uint8 tekker;\r
-\r
-static DECLFR(tekread)\r
-{\r
-// FCEU_printf("READ READ READ: $%04x, $%04x, $%04x\n",A,X.PC,tekker);\r
- switch(A)\r
- {\r
- case 0x5000:return(tekker);\r
- case 0x5800:return(mul[0]*mul[1]);\r
- case 0x5801:return((mul[0]*mul[1])>>8);\r
- case 0x5803:return(regie);\r
- default:break;\r
- }\r
- return(X.DB);\r
-}\r
-\r
-static void mira(void)\r
-{\r
- int x;\r
- if(tkcom1&0x40) // Name tables are ROM-only\r
- {\r
- for(x=0;x<4;x++)\r
- setntamem(CHRptr[0]+(((names[x])&CHRmask1[0])<<10), 0, x);\r
- }\r
- else // Name tables can be RAM or ROM.\r
- {\r
- for(x=0;x<4;x++)\r
- {\r
- if(((tkcom3&0x80)==(names[x]&0x80))) // RAM selected.\r
- setntamem(NTARAM + ((names[x]&0x1)<<10),1,x);\r
- else\r
- setntamem(CHRptr[0]+(((names[x])&CHRmask1[0])<<10), 0, x);\r
- }\r
- }\r
-}\r
-\r
-static void tekprom(void)\r
-{\r
- switch(tkcom1&3)\r
- {\r
- case 1: // 16 KB\r
- ROM_BANK16(0x8000,prgb[0]);\r
- ROM_BANK16(0xC000,prgb[2]);\r
- break;\r
-\r
- case 2: //2 = 8 KB ??\r
- ROM_BANK8(0x8000,prgb[0]);\r
- ROM_BANK8(0xa000,prgb[1]);\r
- ROM_BANK8(0xc000,prgb[2]);\r
- ROM_BANK8(0xe000,~0);\r
- break;\r
- }\r
-}\r
-\r
-static void tekvrom(void)\r
-{\r
- int x;\r
- switch(tkcom1&0x18)\r
- {\r
- case 0x00: // 8KB\r
- setchr8(chr[0]);\r
- break;\r
- case 0x08: // 4KB\r
- for(x=0;x<8;x+=4)\r
- setchr4(x<<10,chr[x]);\r
- break;\r
- case 0x10: // 2KB\r
- for(x=0;x<8;x+=2)\r
- setchr2(x<<10,chr[x]);\r
- break;\r
- case 0x18: // 1KB\r
- for(x=0;x<8;x++)\r
- setchr1(x<<10,chr[x]);\r
- break;\r
- }\r
-}\r
-\r
-static DECLFW(Mapper211_write)\r
-{\r
- if(A==0x5800) mul[0]=V;\r
- else if(A==0x5801) mul[1]=V;\r
- else if(A==0x5803) regie=V;\r
-\r
- A&=0xF007;\r
- if(A>=0x8000 && A<=0x8003)\r
- {\r
- prgb[A&3]=V;\r
- tekprom();\r
- }\r
- else if(A>=0x9000 && A<=0x9007)\r
- {\r
- chr[A&7]=V;\r
- tekvrom();\r
- }\r
- else if(A>=0xb000 && A<=0xb007)\r
- {\r
- names[A&3]=V&3;\r
- mira();\r
- }\r
- else switch(A)\r
- {\r
- case 0xc002:IRQa=0;X6502_IRQEnd(FCEU_IQEXT);break;\r
- case 0xc003:\r
- case 0xc004:if(!IRQa) {IRQa=1;IRQCount=IRQLatch;} break;\r
- case 0xc005:IRQCount=IRQLatch=V;\r
- X6502_IRQEnd(FCEU_IQEXT);break;\r
- case 0xd000: tkcom1=V; mira(); break;\r
- case 0xd001: tkcom3=V; mira(); break;\r
- }\r
-}\r
-\r
-static void Mapper211_hb(void)\r
-{\r
- if(IRQCount) IRQCount--;\r
- if(!IRQCount)\r
- {\r
- if(IRQa) X6502_IRQBegin(FCEU_IQEXT);\r
- IRQa=0;\r
- }\r
-}\r
-static void togglie()\r
-{\r
- tekker^=0xFF;\r
-}\r
-\r
-void Mapper211_init(void)\r
-{\r
- tekker=0xFF;\r
- MapperReset=togglie;\r
- SetWriteHandler(0x5000,0xffff,Mapper211_write);\r
- SetReadHandler(0x5000,0x5fff,tekread);\r
- GameHBIRQHook=Mapper211_hb;\r
-}\r
-\r