summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/r2dx_v33.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/r2dx_v33.cpp')
-rw-r--r--src/mame/drivers/r2dx_v33.cpp1090
1 files changed, 0 insertions, 1090 deletions
diff --git a/src/mame/drivers/r2dx_v33.cpp b/src/mame/drivers/r2dx_v33.cpp
deleted file mode 100644
index d1ec01a7755..00000000000
--- a/src/mame/drivers/r2dx_v33.cpp
+++ /dev/null
@@ -1,1090 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, David Haywood
-/*
-
-Raiden 2 / DX V33 Version
-
-Raiden 2 / DX checks if there's the string "RAIDEN" at start-up inside the eeprom, otherwise it dies.
-Then it puts settings at 0x9e08 and 0x9e0a (bp 91acb)
-
- the 333 ROM is a 0x10000 byte table (bytes values?)
- followed by a 0x400 bytes (word values)?
- the remaining space is 0xff
-
- Notes:
-
- Zero Team 2000
- - EEPROM contains high scores, but they don't get restored? (original bug?)
-
- New Zero Team
- - 2 Player only. Service mode only shows 2 Players, and the code confirms that the options
- for three and four players have been removed from this version.
- - Stages 3 and 1 are swapped, this is correct.
-
- Raiden 2 New / Raiden DX
- - This is a 2-in-1 board. The current game to boot is stored in the EEPROM.
- If you wish to change game then on powerup you must hold down all 4 (P1) joystick
- directions simultaneously along with either button 1 or button 2.
- Obviously this is impossible with a real joystick!
-
- It is also impossible in MAME unless you enable -joystick_contradictory
- to disable MAME from preventing opposing joystick directions being pressed
- and you'll most likely have to remap some keys too because 5 buttons at the
- same time is beyond the limits of most keyboards.
-
- We currently use a default EEPROM for each game as this is most likely how
- it shipped, the game changing is an undocumented secret.
-
- - The sound is awful, this is just how it is.
-
- - In Raiden 2 New stages 5 and 1 are swapped, and the intro is missing, this is
- correct.
-
-*/
-
-/* Rom structure notes
-
- Raiden 2 New/DX (hardware can bank upper/lower half of rom to switch fixed areas)
-
- 000000-02ffff : 0xff fill, inaccessible by hardware
- 030000-0fffff : 'Fixed' ROM data for Raiden 2
- 100000-1fffff : Banked ROM data for Raiden 2 (16x 0x10000 banks)
-
- 200000-22ffff : 0xff fill, inaccessible by hardware
- 230000-2fffff : 'Fixed' ROM data for Raiden DX
- 300000-3fffff : Banked ROM data for Raiden DX (16x 0x10000 banks)
-
- New Zero Team /Zero Team 2000
-
- 000000-01ffff : 0xff fill, inaccessible by hardware?
- 020000-0fffff : Fixed ROM data for Zero Team
- (no banking)
-
-*/
-
-#include "emu.h"
-#include "includes/raiden2.h"
-
-#include "cpu/nec/nec.h"
-#include "cpu/z80/z80.h"
-#include "machine/eepromser.h"
-#include "sound/3812intf.h"
-//#include "sound/ym2151.h"
-#include "sound/okim6295.h"
-#include "machine/r2crypt.h"
-
-#include "speaker.h"
-
-
-class r2dx_v33_state : public raiden2_state
-{
-public:
- r2dx_v33_state(const machine_config &mconfig, device_type type, const char *tag) :
- raiden2_state(mconfig, type, tag),
- m_r2dxbank(0),
- m_r2dxgameselect(0),
- m_eeprom(*this, "eeprom"),
- m_math(*this, "math"),
- m_okibank(*this, "okibank")
- {
- }
-
- void nzerotea(machine_config &config);
- void rdx_v33(machine_config &config);
- void zerotm2k(machine_config &config);
-
- void init_rdx_v33();
- void init_nzerotea();
- void init_zerotm2k();
-
-private:
-
- void angle_w(offs_t offset, u16 data, u16 mem_mask);
- void dx_w(offs_t offset, u16 data, u16 mem_mask);
- void dy_w(offs_t offset, u16 data, u16 mem_mask);
- void sdistl_w(offs_t offset, u16 data, u16 mem_mask);
- void sdisth_w(offs_t offset, u16 data, u16 mem_mask);
- u16 angle_r();
- u16 dist_r();
- u16 sin_r();
- u16 cos_r();
-
- void tile_bank_w(u8 data);
- u16 rdx_v33_unknown_r();
- void mcu_xval_w(u16 data);
- void mcu_yval_w(u16 data);
- void mcu_table_w(offs_t offset, u16 data);
- void mcu_table2_w(offs_t offset, u16 data);
- void mcu_prog_w(u16 data);
- void mcu_prog_w2(u16 data);
- void mcu_prog_offs_w(u16 data);
- void rdx_v33_eeprom_w(u8 data);
- void zerotm2k_eeprom_w(u16 data);
- void r2dx_rom_bank_w(u16 data);
-
- void tilemapdma_w(address_space &space, u16 data);
- void paldma_w(address_space &space, u16 data);
- u16 r2dx_debug_r();
-
- DECLARE_MACHINE_RESET(r2dx_v33);
- DECLARE_MACHINE_RESET(nzeroteam);
-
- void nzerotea_map(address_map &map);
- void nzeroteam_base_map(address_map &map);
- void r2dx_oki_map(address_map &map);
- void rdx_v33_map(address_map &map);
- void zerotm2k_map(address_map &map);
-
- virtual void machine_start() override;
-
- void r2dx_setbanking();
-
- int m_r2dxbank;
- int m_r2dxgameselect;
-
- u16 m_dx, m_dy, m_angle;
- u32 m_sdist;
- u16 m_mcu_prog[0x800];
- int m_mcu_prog_offs;
- u16 m_mcu_xval, m_mcu_yval;
- u16 m_mcu_data[9];
-
- optional_device<eeprom_serial_93cxx_device> m_eeprom;
- required_region_ptr<u8> m_math;
-
- optional_memory_bank m_okibank;
-};
-
-void r2dx_v33_state::machine_start()
-{
- common_save_state();
-
- save_item(NAME(m_r2dxbank));
- save_item(NAME(m_r2dxgameselect));
- save_item(NAME(m_dx));
- save_item(NAME(m_dy));
- save_item(NAME(m_angle));
- save_item(NAME(m_sdist));
- save_item(NAME(m_mcu_prog));
- save_item(NAME(m_mcu_prog_offs));
- save_item(NAME(m_mcu_xval));
- save_item(NAME(m_mcu_yval));
- save_item(NAME(m_mcu_data));
-}
-
-void r2dx_v33_state::tile_bank_w(u8 data)
-{
- int new_bank;
- new_bank = ((data & 0x10)>>4);
- if (new_bank != m_bg_bank)
- {
- m_bg_bank = new_bank;
- m_background_layer->mark_all_dirty();
- }
-
- new_bank = 2 + ((data & 0x20)>>5);
- if (new_bank != m_mid_bank)
- {
- m_mid_bank = new_bank;
- m_midground_layer->mark_all_dirty();
- }
-
- new_bank = 4 | (data & 3);
- if (new_bank != m_fg_bank)
- {
- m_fg_bank = new_bank;
- m_foreground_layer->mark_all_dirty();
- }
-}
-
-void r2dx_v33_state::r2dx_setbanking()
-{
- m_mainbank[0]->set_entry(m_r2dxgameselect*0x10 + m_r2dxbank);
- m_mainbank[1]->set_entry(m_r2dxgameselect);
-}
-
-void r2dx_v33_state::rdx_v33_eeprom_w(u8 data)
-{
- m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
- m_eeprom->di_write((data & 0x20) >> 5);
- m_eeprom->cs_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
-
- // 0x40 - coin counter 1?
- // 0x80 - coin counter 2?
-
- // 0x04 is active in Raiden DX mode, it could be part of the rom bank (which half of the rom to use) or the FG tile bank (or both?)
- // the bit gets set if it reads RAIDENDX from the EEPROM
- m_r2dxgameselect = (data & 0x04) >> 2;
-
- m_tx_bank = m_r2dxgameselect;
- m_text_layer->mark_all_dirty();
-
- r2dx_setbanking();
-
- m_okibank->set_entry(data&3);
-}
-
-/* new zero team uses the copd3 protection... and uploads a 0x400 byte table, probably the mcu code, encrypted */
-
-void r2dx_v33_state::mcu_prog_w(u16 data)
-{
- m_mcu_prog[m_mcu_prog_offs*2] = data;
-}
-
-void r2dx_v33_state::mcu_prog_w2(u16 data)
-{
- m_mcu_prog[m_mcu_prog_offs*2+1] = data;
-
- // both new zero team and raiden2/dx v33 version upload the same table..
-#if 0
- {
- char tmp[64];
- FILE *fp;
- sprintf(tmp,"cop3_%s.data", machine().system().name);
-
- fp=fopen(tmp, "w+b");
- if (fp)
- {
- fwrite(m_mcu_prog, 0x400, 2, fp);
- fclose(fp);
- }
- }
-#endif
-}
-
-void r2dx_v33_state::mcu_prog_offs_w(u16 data)
-{
- m_mcu_prog_offs = data;
-}
-
-u16 r2dx_v33_state::rdx_v33_unknown_r()
-{
- return machine().rand();
-}
-
-
-/* something sent to the MCU for X/Y global screen calculating ... */
-void r2dx_v33_state::mcu_xval_w(u16 data)
-{
- m_mcu_xval = data;
- //popmessage("%04x %04x",m_mcu_xval,m_mcu_yval);
-}
-
-void r2dx_v33_state::mcu_yval_w(u16 data)
-{
- m_mcu_yval = data;
- //popmessage("%04x %04x",m_mcu_xval,m_mcu_yval);
-}
-
-
-/* 0x400-0x407 seems some DMA hook-up, 0x420-0x427 looks like some x/y sprite calculation routine */
-void r2dx_v33_state::mcu_table_w(offs_t offset, u16 data)
-{
- m_mcu_data[offset] = data;
-
- //popmessage("%04x %04x %04x %04x | %04x %04x %04x %04x",m_mcu_data[0/2],m_mcu_data[2/2],m_mcu_data[4/2],m_mcu_data[6/2],m_mcu_data[8/2],m_mcu_data[0xa/2],m_mcu_data[0xc/2],m_mcu_data[0xe/2]);
-}
-
-void r2dx_v33_state::mcu_table2_w(offs_t offset, u16 data)
-{
-// printf("mcu_table2_w %04x\n", data);
-
- m_mcu_data[offset+4] = data;
-
- //popmessage("%04x %04x %04x %04x | %04x %04x %04x %04x",m_mcu_data[0/2],m_mcu_data[2/2],m_mcu_data[4/2],m_mcu_data[6/2],m_mcu_data[8/2],m_mcu_data[0xa/2],m_mcu_data[0xc/2],m_mcu_data[0xe/2]);
-}
-
-void r2dx_v33_state::r2dx_rom_bank_w(u16 data)
-{
- //printf("rom bank %04x\n", data);
- m_r2dxbank = data & 0xf;
- r2dx_setbanking();
-
-}
-
-void r2dx_v33_state::angle_w(offs_t offset, u16 data, u16 mem_mask)
-{
- COMBINE_DATA(&m_angle);
-}
-
-void r2dx_v33_state::dx_w(offs_t offset, u16 data, u16 mem_mask)
-{
- COMBINE_DATA(&m_dx);
-}
-
-void r2dx_v33_state::dy_w(offs_t offset, u16 data, u16 mem_mask)
-{
- COMBINE_DATA(&m_dy);
-}
-
-u16 r2dx_v33_state::angle_r()
-{
- return m_math[((m_dy & 0xff) << 8) | (m_dx & 0xff)];
-}
-
-u16 r2dx_v33_state::dist_r()
-{
- return sqrt(double(m_sdist));
-}
-
-u16 r2dx_v33_state::sin_r()
-{
- int off = 65536 + (m_angle & 0xff)*4;
- return (m_math[off+0]) | (m_math[off+1] << 8);
-}
-
-u16 r2dx_v33_state::cos_r()
-{
- int off = 65536 + (m_angle & 0xff)*4;
- return (m_math[off+2]) | (m_math[off+3] << 8);
-}
-
-void r2dx_v33_state::sdistl_w(offs_t offset, u16 data, u16 mem_mask)
-{
- m_sdist = (m_sdist & (0xffff0000 | u16(~mem_mask))) | (data & mem_mask);
-}
-
-void r2dx_v33_state::sdisth_w(offs_t offset, u16 data, u16 mem_mask)
-{
- m_sdist = (m_sdist & (0x0000ffff | (u16(~mem_mask)) << 16)) | ((data & mem_mask) << 16);
-}
-
-// these DMA operations seem to use hardcoded addresses on this hardware
-void r2dx_v33_state::tilemapdma_w(address_space &space, u16 data)
-{
- int src = 0xd000;
-
- for (int i = 0; i < 0x2800 / 2; i++)
- {
- u16 tileval = space.read_word(src);
- src += 2;
- m_videoram_private_w(space, i, tileval, 0xffff);
- }
-}
-
-void r2dx_v33_state::paldma_w(address_space &space, u16 data)
-{
- int src = 0x1f000;
-
- for (int i = 0; i < 0x1000 / 2; i++)
- {
- u16 palval = space.read_word(src);
- src += 2;
- m_palette->write16(i, palval);
- }
-}
-
-u16 r2dx_v33_state::r2dx_debug_r()
-{
- // read once on startup, needed for player collisions to work
- return 0xffff;
-}
-
-void r2dx_v33_state::rdx_v33_map(address_map &map)
-{
- map(0x00000, 0x003ff).ram(); // vectors copied here
-
- map(0x00400, 0x00401).w(FUNC(r2dx_v33_state::tilemapdma_w)); // tilemaps to private buffer
- map(0x00402, 0x00403).w(FUNC(r2dx_v33_state::paldma_w)); // palettes to private buffer
-
- map(0x00404, 0x00405).w(FUNC(r2dx_v33_state::r2dx_rom_bank_w));
- map(0x00406, 0x00406).w(FUNC(r2dx_v33_state::tile_bank_w));
-
- map(0x00420, 0x00421).w(FUNC(r2dx_v33_state::dx_w));
- map(0x00422, 0x00423).w(FUNC(r2dx_v33_state::dy_w));
- map(0x00424, 0x00425).w(FUNC(r2dx_v33_state::sdistl_w));
- map(0x00426, 0x00427).w(FUNC(r2dx_v33_state::sdisth_w));
- map(0x00428, 0x00429).w(FUNC(r2dx_v33_state::angle_w));
-
- map(0x00430, 0x00431).r(FUNC(r2dx_v33_state::angle_r));
- map(0x00432, 0x00433).r(FUNC(r2dx_v33_state::dist_r));
- map(0x00434, 0x00435).r(FUNC(r2dx_v33_state::sin_r));
- map(0x00436, 0x00437).r(FUNC(r2dx_v33_state::cos_r));
-
- map(0x00600, 0x0063f).rw("crtc", FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
- //map(0x00640, 0x006bf).rw("obj", FUNC(seibu_encrypted_sprite_device::read), FUNC(seibu_encrypted_sprite_device::write));
- map(0x0068e, 0x0068f).w(m_spriteram, FUNC(buffered_spriteram16_device::write));
- map(0x006b0, 0x006b1).w(FUNC(r2dx_v33_state::mcu_prog_w)); // could be encryption key uploads just like raiden2.cpp ?
- map(0x006b2, 0x006b3).w(FUNC(r2dx_v33_state::mcu_prog_w2));
-// map(0x006b4, 0x006b5).nopw();
-// map(0x006b6, 0x006b7).nopw();
- map(0x006bc, 0x006bd).w(FUNC(r2dx_v33_state::mcu_prog_offs_w));
-// map(0x006be, 0x006bf).nopw();
-
- // sprite protection not 100% verified as the same
- map(0x006c0, 0x006c1).rw(FUNC(r2dx_v33_state::sprite_prot_off_r), FUNC(r2dx_v33_state::sprite_prot_off_w));
- map(0x006c2, 0x006c3).rw(FUNC(r2dx_v33_state::sprite_prot_src_seg_r), FUNC(r2dx_v33_state::sprite_prot_src_seg_w));
- map(0x006c6, 0x006c7).w(FUNC(r2dx_v33_state::sprite_prot_dst1_w));
-
- map(0x006d8, 0x006d9).w(FUNC(r2dx_v33_state::sprite_prot_x_w));
- map(0x006da, 0x006db).w(FUNC(r2dx_v33_state::sprite_prot_y_w));
- map(0x006dc, 0x006dd).rw(FUNC(r2dx_v33_state::sprite_prot_maxx_r), FUNC(r2dx_v33_state::sprite_prot_maxx_w));
- map(0x006de, 0x006df).w(FUNC(r2dx_v33_state::sprite_prot_src_w));
-
- map(0x00700, 0x00700).w(FUNC(r2dx_v33_state::rdx_v33_eeprom_w));
- map(0x00740, 0x00741).r(FUNC(r2dx_v33_state::r2dx_debug_r));
- map(0x00744, 0x00745).portr("INPUT");
- map(0x0074c, 0x0074d).portr("SYSTEM");
- map(0x00762, 0x00763).r(FUNC(r2dx_v33_state::sprite_prot_dst1_r));
-
- map(0x00780, 0x00780).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // single OKI chip on this version
-
- map(0x00800, 0x00fff).ram(); // copies eeprom here?
- map(0x01000, 0x0bfff).ram();
-
- map(0x0c000, 0x0cfff).ram().share("spriteram");
- map(0x0d000, 0x0d7ff).ram(); //.w(FUNC(r2dx_v33_state::background_w)).share("back_data");
- map(0x0d800, 0x0dfff).ram(); //.w(FUNC(r2dx_v33_state::foreground_w).share("fore_data");
- map(0x0e000, 0x0e7ff).ram(); //.w(FUNC(r2dx_v33_state::midground_w).share("mid_data");
- map(0x0e800, 0x0f7ff).ram(); //.w(FUNC(r2dx_v33_state::text_w).share("text_data");
- map(0x0f800, 0x0ffff).ram(); /* Stack area */
- map(0x10000, 0x1efff).ram();
- map(0x1f000, 0x1ffff).ram(); //.w(m_palette, FUNC(palette_device::write16)).share("palette");
-
- map(0x20000, 0x2ffff).bankr("mainbank1").nopw();
- map(0x30000, 0xfffff).bankr("mainbank2").nopw();
-}
-
-
-void r2dx_v33_state::nzeroteam_base_map(address_map &map)
-{
- map(0x00000, 0x003ff).ram(); //stack area
-
- map(0x00400, 0x00401).w(FUNC(r2dx_v33_state::tilemapdma_w)); // tilemaps to private buffer
- map(0x00402, 0x00403).w(FUNC(r2dx_v33_state::paldma_w)); // palettes to private buffer
- // 0x404 is bank on r2dx, this doesn't need it
- // map(0x00406, 0x00406).w(FUNC(r2dx_v33_state::tile_bank_w)); // not the same?
-
- map(0x00406, 0x00407).noprw(); // always 6022, supposed to be the tile bank but ignores the actual value???
-
- map(0x00420, 0x00421).w(FUNC(r2dx_v33_state::dx_w));
- map(0x00422, 0x00423).w(FUNC(r2dx_v33_state::dy_w));
- map(0x00424, 0x00425).w(FUNC(r2dx_v33_state::sdistl_w));
- map(0x00426, 0x00427).w(FUNC(r2dx_v33_state::sdisth_w));
- map(0x00428, 0x00429).w(FUNC(r2dx_v33_state::angle_w));
-
- map(0x00430, 0x00431).r(FUNC(r2dx_v33_state::angle_r));
- map(0x00432, 0x00433).r(FUNC(r2dx_v33_state::dist_r));
- map(0x00434, 0x00435).r(FUNC(r2dx_v33_state::sin_r));
- map(0x00436, 0x00437).r(FUNC(r2dx_v33_state::cos_r));
-
- map(0x00600, 0x0063f).rw("crtc", FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
- //map(0x00640, 0x006bf)rw("obj", FUNC(seibu_encrypted_sprite_device::read), FUNC(seibu_encrypted_sprite_device::write));
- map(0x0068e, 0x0068f).w(m_spriteram, FUNC(buffered_spriteram16_device::write));
- map(0x006b0, 0x006b1).w(FUNC(r2dx_v33_state::mcu_prog_w));
- map(0x006b2, 0x006b3).w(FUNC(r2dx_v33_state::mcu_prog_w2));
-// map(0x006b4, 0x006b5).nopw();
-// map(0x006b6, 0x006b7).nopw();
- map(0x006bc, 0x006bd).w(FUNC(r2dx_v33_state::mcu_prog_offs_w));
-// map(0x006d8, 0x006d9).w(FUNC(r2dx_v33_state::bbbbll_w)); // scroll?
-// map(0x006dc, 0x006dd).r(FUNC(r2dx_v33_state::nzerotea_unknown_r));
-// map(0x006de, 0x006df).w(FUNC(r2dx_v33_state::mcu_unkaa_w)); // mcu command related?
-// map(0x00700, 0x00700).w(FUNC(r2dx_v33_state::rdx_v33_eeprom_w));
-
-// map(0x00762, 0x00763).r(FUNC(r2dx_v33_state::nzerotea_unknown_r));
-
- map(0x00780, 0x0079f).lrw8(
- NAME([this] (offs_t offset) { return m_seibu_sound->main_r(offset >> 1); }),
- NAME([this] (offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); })).umask16(0x00ff);
-
- map(0x00800, 0x00fff).ram();
- map(0x01000, 0x0bfff).ram();
-
- map(0x0c000, 0x0cfff).ram().share("spriteram");
- map(0x0d000, 0x0d7ff).ram(); //.w(FUNC(r2dx_v33_state::background_w)).share("back_data");
- map(0x0d800, 0x0dfff).ram(); //.w(FUNC(r2dx_v33_state::foreground_w)).share("fore_data");
- map(0x0e000, 0x0e7ff).ram(); //.w(FUNC(r2dx_v33_state::midground_w)).share("mid_data");
- map(0x0e800, 0x0f7ff).ram(); //.w(FUNC(r2dx_v33_state::text_w)).share("text_data");
- map(0x0f800, 0x0ffff).ram(); /* Stack area */
- map(0x10000, 0x1efff).ram();
- map(0x1f000, 0x1ffff).ram(); //.w("palette", FUNC(palette_device::write)).share("palette");
-
- map(0x20000, 0xfffff).rom().region("maincpu", 0x20000);
-}
-
-void r2dx_v33_state::nzerotea_map(address_map &map)
-{
- nzeroteam_base_map(map);
- map(0x00740, 0x00741).portr("DSW");
- map(0x00744, 0x00745).portr("INPUT");
- map(0x0074c, 0x0074d).portr("SYSTEM");
-}
-
-void r2dx_v33_state::zerotm2k_eeprom_w(u16 data)
-{
-// printf("zerotm2k_eeprom_w %04x\n", data);
-
- m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE);
- m_eeprom->di_write((data & 0x04) >> 2);
- m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-void r2dx_v33_state::zerotm2k_map(address_map &map)
-{
- nzeroteam_base_map(map);
- map(0x00740, 0x00741).portr("P3_P4");
- map(0x00744, 0x00745).portr("INPUT");
- map(0x0074c, 0x0074d).portr("SYSTEM");
- map(0x00748, 0x00749).w(FUNC(r2dx_v33_state::zerotm2k_eeprom_w));
-}
-
-
-
-static INPUT_PORTS_START( rdx_v33 )
- PORT_START("SYSTEM")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE2 )
- PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_SERVICE_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW1:7" )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("INPUT")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN2 )
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( nzerotea )
- SEIBU_COIN_INPUTS_INVERT /* coin inputs read through sound cpu */
-
- PORT_START("SYSTEM")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("INPUT")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
- // The P3_P4 port is never read in this version
-
- PORT_START("DSW") // taken from zeroteam, except last dip is service mode
- PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2,!3")
- PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!4,!5,!6")
- PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0018, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x0040, 0x0040, "Starting Coin" ) PORT_DIPLOCATION("SW1:!7")
- PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x0000, "X 2" )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:!8")
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:!1,!2")
- PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x0200, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x0100, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )
- PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:!3,!4")
- PORT_DIPSETTING( 0x0c00, "2" )
- PORT_DIPSETTING( 0x0800, "4" )
- PORT_DIPSETTING( 0x0400, "3" )
- PORT_DIPSETTING( 0x0000, "1" )
- PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!5,!6")
- PORT_DIPSETTING( 0x3000, "1000000" )
- PORT_DIPSETTING( 0x2000, "2000000" )
- PORT_DIPSETTING( 0x1000, "Every 1000000" )
- PORT_DIPSETTING( 0x0000, "No Extend" )
- PORT_DIPNAME( 0x4000, 0x4000, "Demo Sound" ) PORT_DIPLOCATION("SW2:!7")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
- PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW2:!8" )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( zerotm2k )
- SEIBU_COIN_INPUTS_INVERT /* coin inputs read through sound cpu */
-
- PORT_MODIFY("COIN")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(4)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(4)
-
- PORT_START("SYSTEM")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START3 )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START4 )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("INPUT")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
-
- PORT_START("P3_P4")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
-INPUT_PORTS_END
-
-
-MACHINE_RESET_MEMBER(r2dx_v33_state,r2dx_v33)
-{
- bank_reset(0,6,2,0);
-}
-
-MACHINE_RESET_MEMBER(r2dx_v33_state,nzeroteam)
-{
- bank_reset(0,2,1,0);
-}
-
-void r2dx_v33_state::r2dx_oki_map(address_map &map)
-{
- map(0x00000, 0x3ffff).bankr("okibank");
-}
-
-void r2dx_v33_state::rdx_v33(machine_config &config)
-{
- /* basic machine hardware */
- V33(config, m_maincpu, 32000000/2); // ?
- m_maincpu->set_addrmap(AS_PROGRAM, &r2dx_v33_state::rdx_v33_map);
- m_maincpu->set_vblank_int("screen", FUNC(r2dx_v33_state::interrupt));
-
- MCFG_MACHINE_RESET_OVERRIDE(r2dx_v33_state,r2dx_v33)
-
- EEPROM_93C46_16BIT(config, m_eeprom);
-
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
- screen.set_refresh_hz(55.47); /* verified on pcb */
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(500)); /* not accurate */
- screen.set_size(44*8, 34*8);
- screen.set_visarea(0*8, 40*8-1, 0, 30*8-1);
- screen.set_screen_update(FUNC(r2dx_v33_state::screen_update));
-
- GFXDECODE(config, m_gfxdecode, m_palette, r2dx_v33_state::gfx_raiden2);
- PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
-
- seibu_crtc_device &crtc(SEIBU_CRTC(config, "crtc", 0));
- crtc.layer_en_callback().set(FUNC(r2dx_v33_state::tilemap_enable_w));
- crtc.layer_scroll_callback().set(FUNC(r2dx_v33_state::tile_scroll_w));
-
- BUFFERED_SPRITERAM16(config, m_spriteram);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- okim6295_device &oki(OKIM6295(config, "oki", XTAL(28'636'363)/28, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
- oki.set_addrmap(0, &r2dx_v33_state::r2dx_oki_map);
- oki.add_route(ALL_OUTPUTS, "mono", 0.5);
-}
-
-void r2dx_v33_state::nzerotea(machine_config &config)
-{
- /* basic machine hardware */
- V33(config, m_maincpu, XTAL(32'000'000)/2); /* verified on pcb */
- m_maincpu->set_addrmap(AS_PROGRAM, &r2dx_v33_state::nzerotea_map);
- m_maincpu->set_vblank_int("screen", FUNC(r2dx_v33_state::interrupt));
-
- MCFG_MACHINE_RESET_OVERRIDE(r2dx_v33_state,nzeroteam)
-
- z80_device &audiocpu(Z80(config, "audiocpu", XTAL(28'636'363)/8));
- audiocpu.set_addrmap(AS_PROGRAM, &r2dx_v33_state::zeroteam_sound_map);
- audiocpu.set_irq_acknowledge_callback("seibu_sound", FUNC(seibu_sound_device::im0_vector_cb));
-
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
- screen.set_refresh_hz(55.47); /* verified on pcb */
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(500)); /* not accurate */
- screen.set_size(44*8, 34*8);
- screen.set_visarea(0*8, 40*8-1, 0, 32*8-1);
- screen.set_screen_update(FUNC(r2dx_v33_state::screen_update));
-
- GFXDECODE(config, m_gfxdecode, m_palette, r2dx_v33_state::gfx_raiden2);
- PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
-
- seibu_crtc_device &crtc(SEIBU_CRTC(config, "crtc", 0));
- crtc.layer_en_callback().set(FUNC(r2dx_v33_state::tilemap_enable_w));
- crtc.layer_scroll_callback().set(FUNC(r2dx_v33_state::tile_scroll_w));
-
- BUFFERED_SPRITERAM16(config, m_spriteram);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(28'636'363)/8));
- ymsnd.irq_handler().set("seibu_sound", FUNC(seibu_sound_device::fm_irqhandler));
- ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
-
- okim6295_device &oki(OKIM6295(config, "oki", XTAL(28'636'363)/28, okim6295_device::PIN7_HIGH));
- oki.add_route(ALL_OUTPUTS, "mono", 0.40);
-
- SEIBU_SOUND(config, m_seibu_sound, 0);
- m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
- m_seibu_sound->set_rom_tag("audiocpu");
- m_seibu_sound->set_rombank_tag("seibu_bank1");
- m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
- m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
-}
-
-void r2dx_v33_state::zerotm2k(machine_config &config)
-{
- nzerotea(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &r2dx_v33_state::zerotm2k_map);
-
- EEPROM_93C46_16BIT(config, m_eeprom);
-}
-
-void r2dx_v33_state::init_rdx_v33()
-{
- init_blending(raiden_blended_colors);
- static const int spri[5] = { 0, 1, 2, 3, -1 };
- m_cur_spri = spri;
-
- m_mainbank[0]->configure_entries( 0, 0x10, memregion("maincpu")->base() + 0x100000, 0x010000); // 0x20000 - 0x2ffff bank for Raiden 2
- m_mainbank[0]->configure_entries(0x10, 0x10, memregion("maincpu")->base() + 0x300000, 0x010000); // 0x20000 - 0x2ffff bank for Raiden DX
- m_mainbank[1]->configure_entries( 0, 2, memregion("maincpu")->base() + 0x030000, 0x200000);
-
- raiden2_decrypt_sprites(machine());
-
-// sensible defaults if booting as R2
- m_mainbank[0]->set_entry(0);
- m_mainbank[1]->set_entry(0);
-
- m_okibank->configure_entries(0, 4, memregion("oki")->base(), 0x40000);
- m_okibank->set_entry(0);
-
-}
-
-void r2dx_v33_state::init_nzerotea()
-{
- init_blending(zeroteam_blended_colors);
- static const int spri[5] = { -1, 0, 1, 2, 3 };
- m_cur_spri = spri;
-
- zeroteam_decrypt_sprites(machine());
-}
-
-void r2dx_v33_state::init_zerotm2k()
-{
- init_blending(zeroteam_blended_colors);
- static const int spri[5] = { -1, 0, 1, 2, 3 };
- m_cur_spri = spri;
-
- // no sprite encryption(!)
-
- // BG tile rom has 2 lines swapped
- u8 *src = memregion("gfx2")->base()+0x100000;
- const int len = 0x080000;
-
- std::vector<u8> buffer(len);
- for (int i = 0; i < len; i ++)
- buffer[i] = src[bitswap<32>(i,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,5,6,4,3,2,1,0)];
- memcpy(src, &buffer[0], len);
-}
-
-/*
-
-Raiden DX
-Seibu Kaihatsu, 1993/1996
-
-Note! PCB seems like an updated version. It uses _entirely_ SMD technology and
-is smaller than the previous hardware. I guess the game is still popular, so
-Seibu re-manufactured it using newer technology to meet demand.
-Previous version hardware is similar to Heated Barrel/Legionnaire/Seibu Cup Soccer etc.
-It's possible that the BG and OBJ ROMs from this set can be used to complete the
-previous (incomplete) dump that runs on the V30 hardware, since most GFX chips are the same.
-
-PCB ID: (C) 1996 JJ4-China-Ver2.0 SEIBU KAIHATSU INC., MADE IN JAPAN
-CPU : NEC 70136AL-16 (V33)
-SOUND : Oki M6295
-OSC : 28.636360MHz
-RAM : CY7C199-15 (28 Pin SOIC, x11)
- Breakdown of RAM locations...
- (x2 near SIE150)
- (x3 near SEI252)
- (x2 near SEI0200)
- (x4 near SEI360)
-
-DIPs : 8 position (x1)
- 1-6 OFF (NOT USED)
- 7 OFF = Normal Mode , ON = Test/Setting Mode
- 8 OFF = Normal Screen, ON = FLIP Screen
-
-OTHER : Controls are 8-way + 3 Buttons
- Atmel 93C46 EEPROM (SOIC8)
- PALCE16V8 (x1, near BG ROM, SOIC20)
- SEIBU SEI360 SB06-1937 (160 pin PQFP)
- SEIBI SIE150 (100 pin PQFP, Note SIE, not a typo)
- SEIBU SEI252 (208 pin PQFP)
- SEIBU SEI333 (208 pin PQFP)
- SEIBU SEI0200 TC110G21AF (100 pin PQFP)
-
- Note: Most of the custom SEIBU chips are the same as the ones used on the
- previous version hardware.
-
-ROMs : (filename is PCB label, extension is PCB 'u' location)
-
- ROM ROM Probably Byte
-Filename Label Type Used... Note C'sum
----------------------------------------------------------------------------------
-PCM.099 RAIDEN-X SOUND LH538100 (SOP32) Oki Samples 0 8539h
-FIX.613 RAIDEN-X FIX LH532048 (SOP40) ? (BG?) 1 182Dh
-COPX_D3.357 RAIDEN-X 333 LH530800A (SOP32) Protection? 2 CEE4h
-PRG.223 RAIDEN-X CHR-4A1 MX23C3210 (SOP44) V33 program 3 F276h
-OBJ1.724 RAIDEN-X CHR1 MX23C3210 (SOP44) Motion Objects 4 4148h
-OBJ2.725 RAIDEN-X CHR2 MX23C3210 (SOP44) Motion Objects 4 00C3h
-BG.612 RAIDEN-X CHR3 MX23C3210 (SOP44) Backgrounds 5 3280h
-
-
-Notes
-0. Located near Oki M6295
-1. Located near SEI0200 and BG ROM
-2. Located near SEI333
-3. Located near V33 and SEI333
-4. Located near V33 and SEI252
-5. Located near FIX ROM and SEI0200
-
-*/
-
-
-ROM_START( r2dx_v33 )
- ROM_REGION( 0x400000, "maincpu", 0 ) /* v33 main cpu */
- ROM_LOAD("prg.223", 0x000000, 0x400000, CRC(b3dbcf98) SHA1(30d6ec2090531c8c579dff74c4898889902d7d87) )
-
- ROM_REGION( 0x040000, "gfx1", 0 ) /* chars */
- ROM_LOAD( "fix.613", 0x000000, 0x040000, CRC(3da27e39) SHA1(3d446990bf36dd0a3f8fadb68b15bed54904c8b5) )
-
- ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
- ROM_LOAD( "bg.612", 0x000000, 0x400000, CRC(162c61e9) SHA1(bd0a6a29804b84196ba6bf3402e9f30a25da9269) )
-
- ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
- ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
- ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
-
- ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "pcm.099", 0x00000, 0x100000, CRC(97ca2907) SHA1(bfe8189300cf72089d0beaeab8b1a0a1a4f0a5b6) )
-
- ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
- ROM_LOAD( "copx_d3.357", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "raidendx_eeprom-r2dx_v33.bin", 0x0000, 0x0080, CRC(0b34c0ca) SHA1(20612d5a1d819d3997ea47e8de7a194ec61b537d) ) // for booting as Raiden DX
-ROM_END
-
-ROM_START( r2dx_v33_r2 )
- ROM_REGION( 0x400000, "maincpu", 0 ) /* v33 main cpu */
- ROM_LOAD("prg.223", 0x000000, 0x400000, CRC(b3dbcf98) SHA1(30d6ec2090531c8c579dff74c4898889902d7d87) )
-
- ROM_REGION( 0x040000, "gfx1", 0 ) /* chars */
- ROM_LOAD( "fix.613", 0x000000, 0x040000, CRC(3da27e39) SHA1(3d446990bf36dd0a3f8fadb68b15bed54904c8b5) )
-
- ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
- ROM_LOAD( "bg.612", 0x000000, 0x400000, CRC(162c61e9) SHA1(bd0a6a29804b84196ba6bf3402e9f30a25da9269) )
-
- ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
- ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
- ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
-
- ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "pcm.099", 0x00000, 0x100000, CRC(97ca2907) SHA1(bfe8189300cf72089d0beaeab8b1a0a1a4f0a5b6) )
-
- ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
- ROM_LOAD( "copx_d3.357", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "raidenii_eeprom-r2dx_v33.bin", 0x0000, 0x0080, CRC(ba454777) SHA1(101c5364e8664d17bfb1e759515d135a2673d67e) ) // for booting as Raiden 2
-ROM_END
-
-// uses dipswitches
-ROM_START( nzeroteam ) /* V33 SYSTEM TYPE_B hardware, uses SEI333 (AKA COPX-D3) for protection */
- ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
- ROM_LOAD16_BYTE("seibu_1.u0224", 0x000000, 0x80000, CRC(ce1bcaf4) SHA1(1c340575e440b716caca8605cc5e1221060e3714) )
- ROM_LOAD16_BYTE("seibu_2.u0226", 0x000001, 0x80000, CRC(03f6e32d) SHA1(5363f20d515ff84346aa15f7b9d95c5805d81285) )
-
- ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
- ROM_LOAD( "copx-d3.bin", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* Not from this set, but same data as Zero Team 2000 & Raiden II New */
-
- ROM_REGION( 0x20000, "audiocpu", 0 ) /* 64k code for sound Z80 */
- ROM_LOAD( "seibu_3.u01019", 0x000000, 0x08000, CRC(7ec1fbc3) SHA1(48299d6530f641b18764cc49e283c347d0918a47) ) /* Same as some of other Zero Team sets */
- ROM_CONTINUE( 0x010000, 0x08000 ) /* banked stuff */
- ROM_COPY( "audiocpu", 0x0000, 0x018000, 0x08000 )
-
- ROM_REGION( 0x020000, "gfx1", 0 ) /* chars */
- ROM_LOAD16_BYTE( "seibu_5.u0616", 0x000000, 0x010000, CRC(ce68ba3c) SHA1(52830533711ec906bf4fe9d06e065ec80b25b4da) )
- ROM_LOAD16_BYTE( "seibu_6.u0617", 0x000001, 0x010000, CRC(cf44aea7) SHA1(e8d622fd5c10133fa563402daf0690fdff297f94) )
-
- ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
- ROM_LOAD( "back-1", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) ) /* Same as "MUSHA BACK-1" of other Zero Team sets */
- ROM_LOAD( "back-2", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) ) /* Same as "MUSHA BACK-2" of other Zero Team sets */
-
- ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
- ROM_LOAD32_WORD( "obj-1", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) ) /* Same as "MUSHA OBJ-1" of other Zero Team sets */
- ROM_LOAD32_WORD( "obj-2", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) ) /* Same as "MUSHA OBJ-2" of other Zero Team sets */
-
- ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "seibu_4.u099", 0x00000, 0x40000, CRC(48be32b1) SHA1(969d2191a3c46871ee8bf93088b3cecce3eccf0c) ) /* Same as other Zero Team sets */
-
- ROM_REGION( 0x200, "pld", 0 ) /* PLDs */
- ROM_LOAD( "sysv33b-1.u0222.bin", 0x000, 0x117, CRC(f514a11f) SHA1(dd83ee1f511915d3d5f65375f34583be7fa1158b) )
- ROM_LOAD( "sysv33b-2.u0227.bin", 0x000, 0x117, CRC(d9f4612f) SHA1(0c507b28dc0f50a67cc12d63092067dc3f7f4679) )
-ROM_END
-
-ROM_START( nzeroteama ) /* V33 SYSTEM TYPE_B hardware, uses SEI333 (AKA COPX-D3) for protection */
- ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
- ROM_LOAD16_BYTE("prg1", 0x000000, 0x80000, CRC(3c7d9410) SHA1(25f2121b6c2be73f11263934266901ed5d64d2ee) )
- ROM_LOAD16_BYTE("prg2", 0x000001, 0x80000, CRC(6cba032d) SHA1(bf5d488cd578fff09e62e3650efdee7658033e3f) )
-
- ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
- ROM_LOAD( "copx-d3.bin", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* Not from this set, but same data as Zero Team 2000 & Raiden II New */
-
- ROM_REGION( 0x20000, "audiocpu", 0 ) /* 64k code for sound Z80 */
- ROM_LOAD( "sound", 0x000000, 0x08000, CRC(7ec1fbc3) SHA1(48299d6530f641b18764cc49e283c347d0918a47) ) /* Same as some of other Zero Team sets */
- ROM_CONTINUE( 0x010000, 0x08000 ) /* banked stuff */
- ROM_COPY( "audiocpu", 0x0000, 0x018000, 0x08000 )
-
- ROM_REGION( 0x020000, "gfx1", 0 ) /* chars */
- ROM_LOAD16_BYTE( "fix1", 0x000000, 0x010000, CRC(0c4895b0) SHA1(f595dbe5a19edb8a06ea60105ee26b95db4a2619) )
- ROM_LOAD16_BYTE( "fix2", 0x000001, 0x010000, CRC(07d8e387) SHA1(52f54a6a4830592784cdf643a5f255aa3db53e50) )
-
- ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
- ROM_LOAD( "back-1", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) ) /* Same as "MUSHA BACK-1" of other Zero Team sets */
- ROM_LOAD( "back-2", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) ) /* Same as "MUSHA BACK-2" of other Zero Team sets */
-
- ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
- ROM_LOAD32_WORD( "obj-1", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) ) /* Same as "MUSHA OBJ-1" of other Zero Team sets */
- ROM_LOAD32_WORD( "obj-2", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) ) /* Same as "MUSHA OBJ-2" of other Zero Team sets */
-
- ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "6.pcm", 0x00000, 0x40000, CRC(48be32b1) SHA1(969d2191a3c46871ee8bf93088b3cecce3eccf0c) ) /* Same as other Zero Team sets */
-
- ROM_REGION( 0x200, "pld", 0 ) /* PLDs */
- ROM_LOAD( "sysv33b-1.u0222.bin", 0x000, 0x117, CRC(f514a11f) SHA1(dd83ee1f511915d3d5f65375f34583be7fa1158b) )
- ROM_LOAD( "sysv33b-2.u0227.bin", 0x000, 0x117, CRC(d9f4612f) SHA1(0c507b28dc0f50a67cc12d63092067dc3f7f4679) )
-ROM_END
-
-
-// uses a 93c46a eeprom
-ROM_START( zerotm2k ) /* V33 SYSTEM TYPE_C VER2 hardware, uses SEI333 (AKA COPX-D3) for protection */
- ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
- ROM_LOAD( "mt28f800b1.u0230", 0x000000, 0x100000, CRC(6ab49d8c) SHA1(d94ec9a46ff98a76c3372369246733268474de99) ) /* SMT rom, PCB silkscreened PRG01 */
- /* PCB has unpopulated socket space for two 27C040 at u0224 silkscreened PRG0 & u0226 silkscreened PRG1) */
-
- ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
- ROM_LOAD( "mx27c1000mc.u0366", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* PCB silkscreened 333ROM */
-
- ROM_REGION( 0x20000, "audiocpu", 0 ) /* 64k code for sound Z80 */
- ROM_LOAD( "syz-02.u019", 0x000000, 0x08000, CRC(55371073) SHA1(f6e182fa64630595dc8c25ac820e12983cfbed12) ) /* PCB silkscreened SOUND */
- ROM_CONTINUE( 0x010000, 0x08000 ) /* banked stuff */
- ROM_COPY( "audiocpu", 0x0000, 0x018000, 0x08000 )
-
- ROM_REGION( 0x020000, "gfx1", 0 ) /* chars */
- ROM_LOAD16_BYTE( "syz-04.u0616", 0x000000, 0x010000, CRC(3515a45f) SHA1(a25a7e23a5d9cf5a95a0d0e828848a8d223bdf51) ) /* PCB silkscreened FIX E */
- ROM_LOAD16_BYTE( "syz-03.u0617", 0x000001, 0x010000, CRC(02fbf9d7) SHA1(6eb4db1f89c9b003e7eed7bf39e6065b1c99447f) ) /* PCB silkscreened FIX O */
-
- ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
- ROM_LOAD( "szy-05.u0614", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) ) /* PCB silkscreened BG12, Same as "MUSHA BACK-1" */
- ROM_LOAD( "mt28f400b1.u0619", 0x100000, 0x080000, CRC(266acee6) SHA1(2a9da66c313a7536c7fb393134b9df0bb122cb2b) ) /* SMT rom, PCB silkscreened BG3 */
- /* PCB has an unpopulated socket rom space for a LH535A00D at u0615 for alt BG3 location */
-
- ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (NOT encrypted) */
- ROM_LOAD32_WORD( "musha_obj-1a.u0729", 0x000000, 0x200000, CRC(9b2cf68c) SHA1(cd8cb277091bfa125fd0f68410de39f72f1c7047) ) /* PCB silkscreened OBJ1 */
- ROM_LOAD32_WORD( "musha_obj-2a.u0730", 0x000002, 0x200000, CRC(fcabee05) SHA1(b2220c0311b3bd2fd44fb56fff7c27bed0816fe9) ) /* PCB silkscreened OBJ2 */
- /* PCB has unpopulated rom space for two SMT roms at u0734 & u0736 for alt OBJ1 & OBJ2 locations) */
-
- ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "szy-01.u099", 0x00000, 0x40000, CRC(48be32b1) SHA1(969d2191a3c46871ee8bf93088b3cecce3eccf0c) ) /* PCB silkscreened PCM, Same as other Zero Team sets */
-ROM_END
-
-// 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
-// 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
-GAME( 1996, r2dx_v33, 0, rdx_v33, rdx_v33, r2dx_v33_state, init_rdx_v33, ROT270, "Seibu Kaihatsu", "Raiden II New / Raiden DX (newer V33 PCB) (Raiden DX EEPROM)", MACHINE_SUPPORTS_SAVE)
-GAME( 1996, r2dx_v33_r2, r2dx_v33, rdx_v33, rdx_v33, r2dx_v33_state, init_rdx_v33, ROT270, "Seibu Kaihatsu", "Raiden II New / Raiden DX (newer V33 PCB) (Raiden II EEPROM)", MACHINE_SUPPORTS_SAVE)
-
-// 'V33 system type_b' - uses V33 CPU, COPX-D3 external protection rom, but still has the proper sound system, DSW for settings
-GAME( 1997, nzeroteam, zeroteam, nzerotea, nzerotea, r2dx_v33_state, init_nzerotea, ROT0, "Seibu Kaihatsu", "New Zero Team (V33 SYSTEM TYPE_B hardware)", MACHINE_SUPPORTS_SAVE)
-GAME( 1997, nzeroteama, zeroteam, nzerotea, nzerotea, r2dx_v33_state, init_nzerotea, ROT0, "Seibu Kaihatsu (Haoyunlai Trading Company license)", "New Zero Team (V33 SYSTEM TYPE_B hardware, China?)", MACHINE_SUPPORTS_SAVE) // license text translated from title screen
-
-// 'V33 SYSTEM TYPE_C' - uses V33 CPU, basically the same board as TYPE_C VER2
-// there is a version of New Zero Team on "V33 SYSTEM TYPE_C" board with EEPROM rather than dipswitches like Zero Team 2000
-
-// '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
-GAME( 2000, zerotm2k, zeroteam, zerotm2k, zerotm2k, r2dx_v33_state, init_zerotm2k, ROT0, "Seibu Kaihatsu", "Zero Team 2000", MACHINE_SUPPORTS_SAVE)
-
-// there is also a 'Raiden 2 2000' on unknown hardware.