raidendx banking (nw)

This commit is contained in:
Olivier Galibert 2014-09-05 11:09:41 +00:00
parent b1ff6e282b
commit 31f567bad8

View File

@ -744,9 +744,7 @@ WRITE16_MEMBER(raiden2_state::cop_cmd_w)
// raidendx only // raidendx only
case 0x7e05: case 0x7e05:
space.write_dword(0x470, (space.read_dword(cop_regs[4]) & 0x30) << 6); space.write_byte(0x470, space.read_byte(cop_regs[4]));
// Actually, wherever the bank selection actually is
// And probably 8 bytes too, but they zero all the rest
break; break;
case 0xa100: case 0xa100:
@ -1010,17 +1008,16 @@ WRITE16_MEMBER(raiden2_state::raidendx_cop_bank_2_w)
{ {
COMBINE_DATA(&cop_bank); COMBINE_DATA(&cop_bank);
if(ACCESSING_BITS_8_15) { int new_bank = 4 | ((cop_bank >> 4) & 3);
int new_bank = 4 | ((cop_bank >> 10) & 3);
if(new_bank != fg_bank) { if(new_bank != fg_bank) {
fg_bank = new_bank; fg_bank = new_bank;
foreground_layer->mark_all_dirty(); foreground_layer->mark_all_dirty();
} }
/* probably bit 3 is from 6c9 */ /* mainbank2 coming from 6c9 ? */
/* TODO: this doesn't work! */ int bb = cop_bank >> 12;
membank("mainbank")->set_entry(8 | (cop_bank & 0x7000) >> 12); membank("mainbank1")->set_entry(bb + 16);
} membank("mainbank2")->set_entry(3);
} }
@ -1257,7 +1254,8 @@ MACHINE_RESET_MEMBER(raiden2_state,raiden2)
common_reset(); common_reset();
sprcpt_init(); sprcpt_init();
membank("mainbank")->set_entry(1); membank("mainbank1")->set_entry(2);
membank("mainbank2")->set_entry(3);
prg_bank = 0; prg_bank = 0;
//cop_init(); //cop_init();
@ -1268,7 +1266,8 @@ MACHINE_RESET_MEMBER(raiden2_state,raidendx)
common_reset(); common_reset();
sprcpt_init(); sprcpt_init();
membank("mainbank")->set_entry(8); membank("mainbank1")->set_entry(16);
membank("mainbank2")->set_entry(3);
prg_bank = 0x08; prg_bank = 0x08;
@ -1282,7 +1281,8 @@ MACHINE_RESET_MEMBER(raiden2_state,zeroteam)
mid_bank = 1; mid_bank = 1;
sprcpt_init(); sprcpt_init();
membank("mainbank")->set_entry(1); membank("mainbank1")->set_entry(2);
membank("mainbank2")->set_entry(3);
prg_bank = 0; prg_bank = 0;
//cop_init(); //cop_init();
@ -1294,10 +1294,6 @@ MACHINE_RESET_MEMBER(raiden2_state,xsedae)
fg_bank = 2; fg_bank = 2;
mid_bank = 1; mid_bank = 1;
sprcpt_init(); sprcpt_init();
//membank("mainbank")->set_entry(1);
//cop_init();
} }
READ16_MEMBER(raiden2_state::raiden2_sound_comms_r) READ16_MEMBER(raiden2_state::raiden2_sound_comms_r)
@ -1313,8 +1309,10 @@ WRITE16_MEMBER(raiden2_state::raiden2_sound_comms_w)
WRITE16_MEMBER(raiden2_state::raiden2_bank_w) WRITE16_MEMBER(raiden2_state::raiden2_bank_w)
{ {
if(ACCESSING_BITS_8_15) { if(ACCESSING_BITS_8_15) {
int bb = (~data >> 15) & 1;
logerror("select bank %d %04x\n", (data >> 15) & 1, data); logerror("select bank %d %04x\n", (data >> 15) & 1, data);
membank("mainbank")->set_entry(!((data >> 15) & 1)); membank("mainbank1")->set_entry(bb*2);
membank("mainbank2")->set_entry(bb*2+1);
prg_bank = ((data >> 15) & 1); prg_bank = ((data >> 15) & 1);
} }
} }
@ -1598,7 +1596,8 @@ static ADDRESS_MAP_START( raiden2_mem, AS_PROGRAM, 16, raiden2_state )
AM_RANGE(0x10000, 0x1efff) AM_RAM AM_RANGE(0x10000, 0x1efff) AM_RAM
AM_RANGE(0x1f000, 0x1ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x1f000, 0x1ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("mainbank") AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("mainbank1")
AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("mainbank2")
AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000) AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -1636,7 +1635,8 @@ static ADDRESS_MAP_START( zeroteam_mem, AS_PROGRAM, 16, raiden2_state )
AM_RANGE(0x0f000, 0x0ffff) AM_RAM AM_SHARE("sprites") AM_RANGE(0x0f000, 0x0ffff) AM_RAM AM_SHARE("sprites")
AM_RANGE(0x10000, 0x1ffff) AM_RAM AM_RANGE(0x10000, 0x1ffff) AM_RAM
AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("mainbank") AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("mainbank1")
AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("mainbank2")
AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000) AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -3306,25 +3306,27 @@ ROM_END
DRIVER_INIT_MEMBER(raiden2_state,raiden2) DRIVER_INIT_MEMBER(raiden2_state,raiden2)
{ {
membank("mainbank")->configure_entries(0, 2, memregion("mainprg")->base(), 0x20000); membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
raiden2_decrypt_sprites(machine()); raiden2_decrypt_sprites(machine());
} }
DRIVER_INIT_MEMBER(raiden2_state,raidendx) DRIVER_INIT_MEMBER(raiden2_state,raidendx)
{ {
membank("mainbank")->configure_entries(0, 0x10, memregion("mainprg")->base(), 0x20000); membank("mainbank1")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000);
membank("mainbank2")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000);
raiden2_decrypt_sprites(machine()); raiden2_decrypt_sprites(machine());
} }
DRIVER_INIT_MEMBER(raiden2_state,xsedae) DRIVER_INIT_MEMBER(raiden2_state,xsedae)
{ {
/* doesn't have banking */ /* doesn't have banking */
//membank("mainbank")->configure_entries(0, 2, memregion("mainprg")->base(), 0x20000);
} }
DRIVER_INIT_MEMBER(raiden2_state,zeroteam) DRIVER_INIT_MEMBER(raiden2_state,zeroteam)
{ {
membank("mainbank")->configure_entries(0, 2, memregion("mainprg")->base(), 0x20000); membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
zeroteam_decrypt_sprites(machine()); zeroteam_decrypt_sprites(machine());
} }