| 93 | } |
| 94 | |
| 95 | static void CSync(void) { |
| 96 | static const uint8 midx[8] = { 0, 1, 2, 0, 3, 4, 5, 0 }; |
| 97 | uint8 mask = 0xff >> midx[ppu201x[0xa] & 7]; |
| 98 | uint32 block = ((cpu410x[0x0] & 0x0f) << 11) + ((ppu201x[0x8] & 0x70) << 4) + (ppu201x[0xa] & (~mask)); |
| 99 | uint32 cswap = (mmc3cmd & 0x80) << 5; |
| 100 | |
| 101 | uint8 bank0 = ppu201x[0x6] & (~1); |
| 102 | uint8 bank1 = ppu201x[0x6] | 1; |
| 103 | uint8 bank2 = ppu201x[0x7] & (~1); |
| 104 | uint8 bank3 = ppu201x[0x7] | 1; |
| 105 | uint8 bank4 = ppu201x[0x2]; |
| 106 | uint8 bank5 = ppu201x[0x3]; |
| 107 | uint8 bank6 = ppu201x[0x4]; |
| 108 | uint8 bank7 = ppu201x[0x5]; |
| 109 | |
| 110 | setchr1(0x0000 ^ cswap, block | (bank0 & mask)); |
| 111 | setchr1(0x0400 ^ cswap, block | (bank1 & mask)); |
| 112 | setchr1(0x0800 ^ cswap, block | (bank2 & mask)); |
| 113 | setchr1(0x0c00 ^ cswap, block | (bank3 & mask)); |
| 114 | setchr1(0x1000 ^ cswap, block | (bank4 & mask)); |
| 115 | setchr1(0x1400 ^ cswap, block | (bank5 & mask)); |
| 116 | setchr1(0x1800 ^ cswap, block | (bank6 & mask)); |
| 117 | setchr1(0x1c00 ^ cswap, block | (bank7 & mask)); |
| 118 | |
| 119 | setmirror((mirror ^ 1) & 1); |
| 120 | } |
| 121 | |
| 122 | static void Sync(void) { |
| 123 | PSync(); |