////////////////////////////////////////////////////////////////////////// // Mapper068 SunSoft (After Burner II) // ////////////////////////////////////////////////////////////////////////// void Mapper068::Reset() { reg[0] = reg[1] = reg[2] = reg[3] = 0; coin = 0; SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 ); } #if 0 BYTE Mapper068::ExRead( WORD addr ) { if( addr == 0x4020 ) { DEBUGOUT( "RD $4020:%02X\n", coin ); return coin; } return addr>>8; } void Mapper068::ExWrite( WORD addr, BYTE data ) { if( addr == 0x4020 ) { DEBUGOUT( "WR $4020:%02X\n", data ); coin = data; } } #endif void Mapper068::Write( WORD addr, BYTE data ) { switch( addr & 0xF000 ) { case 0x8000: SetVROM_2K_Bank( 0, data ); break; case 0x9000: SetVROM_2K_Bank( 2, data ); break; case 0xA000: SetVROM_2K_Bank( 4, data ); break; case 0xB000: SetVROM_2K_Bank( 6, data ); break; case 0xC000: reg[2] = data; SetBank(); break; case 0xD000: reg[3] = data; SetBank(); break; case 0xE000: reg[0] = (data & 0x10)>>4; reg[1] = data & 0x03; SetBank(); break; case 0xF000: SetPROM_16K_Bank( 4, data ); break; } } void Mapper068::SetBank() { if( reg[0] ) { switch( reg[1] ) { case 0: SetVROM_1K_Bank( 8, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 9, (INT)reg[3]+0x80 ); SetVROM_1K_Bank( 10, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 11, (INT)reg[3]+0x80 ); break; case 1: SetVROM_1K_Bank( 8, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 9, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 10, (INT)reg[3]+0x80 ); SetVROM_1K_Bank( 11, (INT)reg[3]+0x80 ); break; case 2: SetVROM_1K_Bank( 8, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 9, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 10, (INT)reg[2]+0x80 ); SetVROM_1K_Bank( 11, (INT)reg[2]+0x80 ); break; case 3: SetVROM_1K_Bank( 8, (INT)reg[3]+0x80 ); SetVROM_1K_Bank( 9, (INT)reg[3]+0x80 ); SetVROM_1K_Bank( 10, (INT)reg[3]+0x80 ); SetVROM_1K_Bank( 11, (INT)reg[3]+0x80 ); break; } } else { switch( reg[1] ) { case 0: SetVRAM_Mirror( VRAM_VMIRROR ); break; case 1: SetVRAM_Mirror( VRAM_HMIRROR ); break; case 2: SetVRAM_Mirror( VRAM_MIRROR4L ); break; case 3: SetVRAM_Mirror( VRAM_MIRROR4H ); break; } } } void Mapper068::SaveState( LPBYTE p ) { p[0] = reg[0]; p[1] = reg[1]; p[2] = reg[2]; p[3] = reg[3]; } void Mapper068::LoadState( LPBYTE p ) { reg[0] = p[0]; reg[1] = p[1]; reg[2] = p[2]; reg[3] = p[3]; }