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. |