- uint16 cswap = (regs[0xf] & 0x80) << 5;\r
- uint16 pswap = (regs[0xd]&1)?((regs[0xf] & 0x40) << 8):0;\r
- uint16 pbase = (regs[0]&0xf0)<<4;\r
- uint16 cbase = (((regs[0]&0x0f)<<8)|(regs[0xc]<<1)|((regs[0xd]&0xf8)>>3))<<3;\r
- uint16 pmask = 0x3f>>(regs[0xb]&0xf);\r
-\r
- setchr1(cswap^0x0000,cbase|(regc[0]&(~1)));\r
- setchr1(cswap^0x0400,cbase|(regc[0]|1));\r
- setchr1(cswap^0x0800,cbase|(regc[1]&(-1)));\r
- setchr1(cswap^0x0c00,cbase|(regc[1]|1));\r
- setchr1(cswap^0x1000,cbase|(regc[2]));\r
- setchr1(cswap^0x1400,cbase|(regc[3]));\r
- setchr1(cswap^0x1800,cbase|(regc[4]));\r
- setchr1(cswap^0x1c00,cbase|(regc[5]));\r
-\r
- if(regs[0xd]&2)\r
- {\r
- setprg8(pswap^0x8000, pbase|(regs[0x7]&pmask)|(regs[0xa]&(~pmask)));\r
- setprg8( 0xA000, pbase|(regs[0x8]&pmask)|(regs[0xa]&(~pmask)));\r
- setprg8(pswap^0xC000, pbase|(regs[0x9]&pmask)|(regs[0xa]&(~pmask)));\r
- setprg8( 0xE000, pbase|regs[0xa]);\r
- }\r
- else\r
- {\r
- setprg8(pswap^0x8000, pbase|(regs[0x7]&pmask)|(regs[0xa]&(~pmask)));\r
- setprg8( 0xA000, pbase|(regs[0x8]&pmask)|(regs[0xa]&(~pmask)));\r
- setprg8(pswap^0xC000, pbase|((~1)&pmask)|(regs[0xa]&(~pmask)));\r
- setprg8( 0xE000, pbase|((~0)&pmask)|(regs[0xa]&(~pmask)));\r
- }\r
+ uint8 bankmode = cpu410x[0xb] & 7;\r
+ uint8 mask = (bankmode == 0x7)?(0xff):(0x3f >> bankmode);\r
+ uint32 block = ((cpu410x[0x0] & 0xf0) << 4) + (cpu410x[0xa] & (~mask));\r
+ uint32 pswap = (mmc3cmd & 0x40) << 8;\r
+\r
+// uint8 bank0 = (cpu410x[0xb] & 0x40)?(~1):(cpu410x[0x7]);\r
+// uint8 bank1 = cpu410x[0x8];\r
+// uint8 bank2 = (cpu410x[0xb] & 0x40)?(cpu410x[0x9]):(~1);\r
+// uint8 bank3 = ~0;\r
+ uint8 bank0 = cpu410x[0x7^inv_hack];\r
+ uint8 bank1 = cpu410x[0x8^inv_hack];\r
+ uint8 bank2 = (cpu410x[0xb] & 0x40)?(cpu410x[0x9]):(~1);\r
+ uint8 bank3 = ~0;\r