trunk/src/mame/drivers/r2dx_v33.c
r32660 | r32661 | |
39 | 39 | |
40 | 40 | */ |
41 | 41 | |
| 42 | /* Rom structure notes |
| 43 | |
| 44 | Raiden 2 New/DX (hardware can bank upper/lower half of rom to switch fixed areas) |
| 45 | |
| 46 | 000000-02ffff : 0xff fill, inaccessible by hardware |
| 47 | 030000-0fffff : 'Fixed' ROM data for Raiden 2 |
| 48 | 100000-1fffff : Banked ROM data for Raiden 2 (16x 0x10000 banks) |
| 49 | |
| 50 | 200000-22ffff : 0xff fill, inaccessible by hardware |
| 51 | 230000-2fffff : 'Fixed' ROM data for Raiden DX |
| 52 | 300000-3fffff : Banked ROM data for Raiden DX (16x 0x10000 banks) |
| 53 | |
| 54 | New Zero Team /Zero |
| 55 | |
| 56 | 000000-01ffff : 0xff fill, inaccessible by hardware? |
| 57 | 020000-0fffff : Fixed ROM data for Zero Team |
| 58 | (no banking) |
| 59 | |
| 60 | */ |
| 61 | |
42 | 62 | #include "emu.h" |
43 | 63 | #include "cpu/nec/nec.h" |
44 | 64 | #include "cpu/z80/z80.h" |
r32660 | r32661 | |
110 | 130 | UINT32 screen_update_rdx_v33(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
111 | 131 | INTERRUPT_GEN_MEMBER(rdx_v33_interrupt); |
112 | 132 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri); |
| 133 | |
| 134 | protected: |
| 135 | virtual void machine_start(); |
113 | 136 | }; |
114 | 137 | |
| 138 | void r2dx_v33_state::machine_start() |
| 139 | { |
| 140 | raiden2_state::machine_start(); |
| 141 | |
| 142 | save_item(NAME(m_r2dxbank)); |
| 143 | save_item(NAME(m_r2dxgameselect)); |
| 144 | save_item(NAME(m_r2dx_angle)); |
| 145 | save_item(NAME(r2dx_i_dx)); |
| 146 | save_item(NAME(r2dx_i_dy)); |
| 147 | save_item(NAME(r2dx_i_angle)); |
| 148 | save_item(NAME(r2dx_i_sdist)); |
| 149 | } |
| 150 | |
115 | 151 | WRITE16_MEMBER(r2dx_v33_state::tile_bank_w) |
116 | 152 | { |
117 | 153 | if(ACCESSING_BITS_0_7) { |
r32660 | r32661 | |
139 | 175 | void r2dx_v33_state::r2dx_setbanking(void) |
140 | 176 | { |
141 | 177 | membank("bank1")->set_entry(m_r2dxgameselect*0x20 + m_r2dxbank + 16); |
142 | | membank("bank2")->set_entry(m_r2dxgameselect*0x20 + 3); |
143 | 178 | membank("bank3")->set_entry(m_r2dxgameselect); |
144 | 179 | } |
145 | 180 | |
r32660 | r32661 | |
251 | 286 | |
252 | 287 | WRITE16_MEMBER(r2dx_v33_state::r2dx_rom_bank_w) |
253 | 288 | { |
254 | | printf("rom bank %04x %04x\n", data, mem_mask); |
| 289 | //printf("rom bank %04x %04x\n", data, mem_mask); |
255 | 290 | m_r2dxbank = data & 0xf; |
256 | 291 | r2dx_setbanking(); |
257 | 292 | |
r32660 | r32661 | |
400 | 435 | AM_RANGE(0x1f000, 0x1ffff) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
401 | 436 | |
402 | 437 | AM_RANGE(0x20000, 0x2ffff) AM_ROM AM_ROMBANK("bank1") AM_WRITENOP |
403 | | AM_RANGE(0x30000, 0x3ffff) AM_ROM AM_ROMBANK("bank2") AM_WRITENOP |
404 | | AM_RANGE(0x40000, 0xfffff) AM_ROM AM_ROMBANK("bank3") AM_WRITENOP |
| 438 | AM_RANGE(0x30000, 0xfffff) AM_ROM AM_ROMBANK("bank3") AM_WRITENOP |
405 | 439 | ADDRESS_MAP_END |
406 | 440 | |
407 | 441 | |
r32660 | r32661 | |
813 | 847 | cur_spri = spri; |
814 | 848 | |
815 | 849 | membank("bank1")->configure_entries(0, 0x40, memregion("mainprg")->base(), 0x10000); |
816 | | membank("bank2")->configure_entries(0, 0x40, memregion("mainprg")->base(), 0x10000); |
817 | 850 | |
818 | | membank("bank3")->configure_entry(0, memregion("mainprg")->base()+0x040000); // 0x40000 - 0xfffff bank for Raiden 2 |
819 | | membank("bank3")->configure_entry(1, memregion("mainprg")->base()+0x240000); // 0x40000 - 0xfffff bank for Raiden DX |
| 851 | membank("bank3")->configure_entry(0, memregion("mainprg")->base()+0x030000); // 0x30000 - 0xfffff bank for Raiden 2 |
| 852 | membank("bank3")->configure_entry(1, memregion("mainprg")->base()+0x230000); // 0x30000 - 0xfffff bank for Raiden DX |
820 | 853 | |
821 | 854 | |
822 | 855 | raiden2_decrypt_sprites(machine()); |
823 | 856 | |
824 | 857 | // sensible defaults if booting as R2 |
825 | | membank("bank1")->set_entry(2); |
826 | | membank("bank2")->set_entry(3); |
| 858 | membank("bank1")->set_entry(0); |
827 | 859 | membank("bank3")->set_entry(0); |
828 | 860 | |
829 | 861 | |
830 | 862 | membank("okibank")->configure_entries(0, 4, memregion("oki")->base(), 0x40000); |
831 | 863 | membank("okibank")->set_entry(0); |
832 | | // sensible defaults if booting as RDX - we set now set this later.. |
833 | | // membank("bank1")->set_entry(0x20+16); |
834 | | // membank("bank2")->set_entry(0x20+3); |
835 | | // membank("bank3")->set_entry(1); |
836 | 864 | |
837 | | |
838 | | |
839 | | |
840 | 865 | } |
841 | 866 | |
842 | 867 | DRIVER_INIT_MEMBER(r2dx_v33_state,nzerotea) |
r32660 | r32661 | |
1053 | 1078 | |
1054 | 1079 | // newer PCB, with V33 CPU and COPD3 protection, but weak sound hardware. - was marked as Raiden DX New in the rom dump, but boots as Raiden 2 New version, the rom contains both |
1055 | 1080 | // is there a switching method? for now I've split it into 2 sets with different EEPROM, the game checks that on startup and runs different code depending on what it finds |
1056 | | GAME( 1996, r2dx_v33, 0, rdx_v33, rdx_v33, r2dx_v33_state, rdx_v33, ROT270, "Seibu Kaihatsu", "Raiden II New / Raiden DX (newer V33 PCB) (Raiden DX EEPROM)", 0) |
1057 | | GAME( 1996, r2dx_v33_r2, r2dx_v33, rdx_v33, rdx_v33, r2dx_v33_state, rdx_v33, ROT270, "Seibu Kaihatsu", "Raiden II New / Raiden DX (newer V33 PCB) (Raiden II EEPROM)", 0) |
| 1081 | GAME( 1996, r2dx_v33, 0, rdx_v33, rdx_v33, r2dx_v33_state, rdx_v33, ROT270, "Seibu Kaihatsu", "Raiden II New / Raiden DX (newer V33 PCB) (Raiden DX EEPROM)", GAME_SUPPORTS_SAVE) |
| 1082 | GAME( 1996, r2dx_v33_r2, r2dx_v33, rdx_v33, rdx_v33, r2dx_v33_state, rdx_v33, ROT270, "Seibu Kaihatsu", "Raiden II New / Raiden DX (newer V33 PCB) (Raiden II EEPROM)", GAME_SUPPORTS_SAVE) |
1058 | 1083 | |
1059 | 1084 | // 'V33 system type_b' - uses V33 CPU, COPX-D3 external protection rom, but still has the proper sound system, DSW for settings |
1060 | | GAME( 1997, nzeroteam, zeroteam, nzerotea, nzerotea, r2dx_v33_state, nzerotea, ROT0, "Seibu Kaihatsu", "New Zero Team", 0) |
| 1085 | GAME( 1997, nzeroteam, zeroteam, nzerotea, nzerotea, r2dx_v33_state, nzerotea, ROT0, "Seibu Kaihatsu (Haoyunlai Trading Company license)", "New Zero Team (V33 SYSTEM TYPE_B hardware)", GAME_SUPPORTS_SAVE) // license text translated from title screen |
1061 | 1086 | |
| 1087 | // 'V33 SYSTEM TYPE_C' - uses V33 CPU, basically the same board as TYPE_C VER2 |
| 1088 | // there is a version of New Zero Team on "V33 SYSTEM TYPE_C" board with EEPROM rather than dipswitches like Zero Team 2000 |
| 1089 | |
1062 | 1090 | // 'V33 SYSTEM TYPE_C VER2' - uses V33 CPU, COPX-D3 external protection rom, but still has the proper sound system, unencrypted sprites, EEPROM for settings. PCB also seen without 'VER2', looks the same |
1063 | | GAME( 2000, zerotm2k, zeroteam, zerotm2k, zerotm2k, r2dx_v33_state, zerotm2k, ROT0, "Seibu Kaihatsu", "Zero Team 2000", 0) |
| 1091 | GAME( 2000, zerotm2k, zeroteam, zerotm2k, zerotm2k, r2dx_v33_state, zerotm2k, ROT0, "Seibu Kaihatsu", "Zero Team 2000", GAME_SUPPORTS_SAVE) |
| 1092 | |
| 1093 | // there is also a 'Raiden 2 2000' on unknown hardware. |