// license:BSD-3-Clause // copyright-holders:Phil Stroffolino, Nicola Salmoria /*************************************************************************** Homedata Games driver by Phil Stroffolino and Nicola Salmoria *1987 X77 Mahjong Hourouki Part1 -Seisyun Hen- *1987 X72 Mahjong Hourouki Gaiden *1988 X73 Mahjong Joshi Pro-wres -Give up 5 byou mae- *1988 A74 Mahjong Hourouki Okite *1988 X80 Mahjong Clinic *1988 M81 Mahjong Rokumeikan *1988 E82 The Last Apostle Puppetshow *1988 J82 Reikai Doushi / Chinese Exorcist *1989 X83 Mahjong Kojin Kyouju (Private Teacher) 1989 S88 Battle Cry (not released in Japan) *1989 X90 Mahjong Vitamin C *1989 X91 Mahjong Yougo no Kiso Tairyoku *1990 X02 Mahjong Lemon Angel *1991 X07 Mahjong Kinjirareta Asobi -Ike Ike Kyoushi no Yokubou- Games from other companies: *1991 M15 Mahjong Ikagadesuka (c) Mitchell *19?? Mahjong Jogakuen (c) Windom These games use only tilemaps for graphics. These tilemaps are organized into two pages (a visible page and a backbuffer) which are automatically swapped by the hardware at vblank. Some of the tiles are written directly by the CPU, others are written by a "blitter" which unpacks RLE data from a ROM. In games using the uPD7807CW, the coprocessor manages input ports and sound/music. Notes: - To access service mode in the older mahjong games, keep F2 pressed during boot. Service mode doesn't work in hourouki because it needs an additional "check" ROM. - The "help" button some games ask you to press is the start button. - The games can change visible area at runtime. The meaning of the control registers isn't understood, but it supported enough to give the correct visible area to all games. mjkinjas sets the registers to values different from all the other games; it also has a 11MHz xtal instead of the 9MHz of all the others, so the two things are probably related. - the ROM for the uPD7807 is divided in 4 0x10000 banks. The first three just contain a simple sample player, followed by the PCM data. The fourth bank contains the main program. The program literally changes banks under its own feet. However, the portions of code executed while the bank switch happens are identical in all banks, so it still works with MAME's standard MRA8_BANK handling. TODO: - Dip switches! They might be right for mjhokite, but I haven't verified the other games. - In the newer mahjong games, the second bank of dips is read in reverse order. - In mjikaga bit 2 of bankswitch_w() and bit 7 of pteacher_blitter_bank_w() might have some other function, since the ROMs are smaller. - wrong gfx in mrokumei at the beginning of a game. It is selecting the wrong gfx bank; the bank handling seems correct in all other games, so I don't know what's wrong here. - mjikaga shows some imperfections with horizontal placement of the screen. - in attract mode, hourouki draws a horizontal black bar on the bottom right side of the display. ---------------------------------------------------------------------------- Mahjong Hourouki (c)1987 Home Data Board: A77-PWB-A-(A) CPU: 68B09E Z80-A Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 ---------------------------------------------------------------------------- Mahjong Hourouki Gaiden (c)1987 Home Data Board: A77-PWB-A-(A) CPU: 68B09E Z80-A Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 ---------------------------------------------------------------------------- Mahjong Hourouki Okite (c)1988 Homedata Almost same board as "Mahjong Clinic" Board: X77-PWB-A-(A) A74 PWB-B CPU: Hitachi HD68B09EP (location 14G), Sharp LH0080A (Z80A, location 10K) Sound: SN76489 DAC? OSC: 16.000MHz (OSC1) 9.000MHz (OSC2) Custom: HOMEDATA GX61A01 102 8728KK (100pin PQFP, location 8C) ---------------------------------------------------------------------------- Mahjong Rokumeikan (c)1988 Home Data Board: A74-PWB-A-(A) (main) A74 PWB-B (sub) CPU: 68B09E Z80-A Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Reikai Doushi (Chinese Exorcist) aka Last Apostle Puppet Show (US) (c)1988 HOME DATA CPU : 68B09E SOUND : YM2203 OSC. : 16.000MHz 9.000MHz ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Mahjong Kojinkyouju (Private Teacher) (c)1989 HOME DATA Board: X73-PWB-A(C) CPU: 6809 uPC324C Sound: SN76489 OSC: 16.000MHz 9.000MHz ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Mahjong Joshi Pro-wres -Give up 5 byou mae- (c)1988 HOME DATA Board: X73-PWB-A(C) CPU: 6809 uPC324C Sound: SN76489 OSC: 16.000MHz 9.000MHz ROM: 28 pin mask rom devices are 1mbit, 32 pin are 2mbit. ---------------------------------------------------------------------------- Mahjong Vitamin C (c)1989 Home Data Board: X73-PWB-A(A) Board: X83-PWB-AC(A) CPU: 68B09E uPD7807CW(?) Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 Note: Manual dips are completely wrong, this actually matches pteacher ---------------------------------------------------------------------------- Mahjong-yougo no Kisotairyoku (c)1989 Home Data Board: X83-PWB-A(A) CPU: 68B09E uPD7807CW(?) Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 ---------------------------------------------------------------------------- Mahjong Kinjirareta Asobi (c)1990 Home Data Board: X83-PWB-A(A) CPU: 68B09E uPD7807CW Sound: SN76489AN DAC OSC: 11.000MHz 16.000MHz Custom: GX61A01 Note: seems likely above 11mhz crystal was a repair ---------------------------------------------------------------------------- Mahjong Jogakuen (c)19?? Windom Board: X83-PWB-A(A) CPU: 68B09E uPD7807CW(?) Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Mahjong Lemon Angel (c)1990 Homedata Board: X83-PWB-A(A) CPU: Fujitsu MBL68B09E (16G) (surface scratched 64pin DIP device on location 12G) [probably uPD7807CW] Sound: SN76489 OSC: 16.0000MHz (XTAL1) 9.000MHz (XTAL2) Custom: HOMEDATA GX61A01 102 8842KK ---------------------------------------------------------------------------- Mahjong Ikagadesuka (c)1991 Mitchell Board: X83-PWB-A(A) CPU: 68B09E uPD7807CW Sound: SN76489AN DAC OSC: 9.000MHz 16.000MHz Custom: GX61A01 ***************************************************************************/ #include "emu.h" #include "includes/homedata.h" #include "cpu/m6809/m6809.h" #include "cpu/upd7810/upd7810.h" #include "cpu/z80/z80.h" #include "sound/dac.h" #include "sound/volt_reg.h" #include "screen.h" #include "speaker.h" INTERRUPT_GEN_MEMBER(homedata_state::homedata_irq) { m_vblank = 1; device.execute().set_input_line(M6809_FIRQ_LINE, HOLD_LINE); } /******************************************************************************** Older Mahjong games: single CPU, handling SN76489 + DAC and inputs ********************************************************************************/ READ8_MEMBER(homedata_state::mrokumei_keyboard_r) { int res = 0x3f,i; /* offset 0 is player 1, offset 1 player 2 (not supported) */ if (offset == 0) { for (i = 0; i < 5; i++) { if (m_keyb & (1 << i)) { res = m_keys[i]->read() & 0x3f; break; } } } if (offset == 0) { /* bit 7: visible page * bit 6: vblank * other bits are inputs */ res |= m_visible_page << 7; if (m_vblank) res |= 0x40; m_vblank = 0; } return res; } WRITE8_MEMBER(homedata_state::mrokumei_keyboard_select_w) { m_keyb = data; } WRITE8_MEMBER(homedata_state::mrokumei_sound_bank_w) { /* bit 0 = ROM bank bit 2 = ROM or soundlatch */ m_mrokumei_soundbank->set_bank(data & 7); } WRITE8_MEMBER(homedata_state::mrokumei_sound_cmd_w) { m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } /******************************************************************************** Reikai Doushi: slave uPD7807, handling YM2203 + DAC and inputs ********************************************************************************/ READ8_MEMBER(homedata_state::reikaids_upd7807_porta_r) { return m_upd7807_porta; } WRITE8_MEMBER(homedata_state::reikaids_upd7807_porta_w) { m_upd7807_porta = data; } WRITE8_MEMBER(homedata_state::reikaids_upd7807_portc_w) { /* port C layout: 7 coin counter 6 to main CPU (data) 5 YM2203 write clock 4 YM2203 read clock 3 YM2203 address (0 = register select 1 = data) 2 to main CPU (status) 1 \ ROM bank 0 / */ // logerror("%s: port C wr %02x (STATUS %d DATA %d)\n", machine().describe_context(), data, BIT(data, 2), BIT(data, 6)); m_audiobank->set_entry(data & 0x03); machine().bookkeeping().coin_counter_w(0, ~data & 0x80); if (BIT(m_upd7807_portc, 5) && !BIT(data, 5)) /* write clock 1->0 */ m_ymsnd->write(BIT(data, 3), m_upd7807_porta); if (BIT(m_upd7807_portc, 4) && !BIT(data, 4)) /* read clock 1->0 */ m_upd7807_porta = m_ymsnd->read(BIT(data, 3)); m_upd7807_portc = data; } READ8_MEMBER(homedata_state::reikaids_io_r) { int res = ioport("IN2")->read(); // bit 4 = coin, bit 5 = service res |= BIT(m_upd7807_portc, 2) * 0x01; // bit 0 = upd7807 status res |= BIT(m_upd7807_portc, 6) * 0x02; // bit 1 = upd7807 data if (m_vblank) res |= 0x04; // bit 2 = vblank res |= m_visible_page * 0x08; // bit 3 = visible page m_vblank = 0; //logerror("%s: io_r %02x\n", machine().describe_context(), res); return res; } /******************************************************************************** Newer Mahjong games: slave uPD7807, handling SN76489 + DAC and inputs ********************************************************************************/ READ8_MEMBER(homedata_state::pteacher_io_r) { /* bit 6: !vblank * bit 7: visible page * other bits seem unused */ int res = (m_visible_page ^ 1) << 7; if (!m_vblank) res |= 0x40; m_vblank = 0; return res; } READ8_MEMBER(homedata_state::pteacher_keyboard_r) { int dips = ioport("DSW")->read(); // logerror("%s: keyboard_r with port A = %02x\n",machine().describe_context(),upd7807_porta); if (m_upd7807_porta & 0x80) { /* player 1 + dip switches */ int row = (m_upd7807_porta & 0x07); return m_keys[row]->read() | (((dips >> row) & 1) << 5); // 0-5 } if (m_upd7807_porta & 0x08) // TODO: this works fine with dips 7-8 of the 1st bank, but then expects dips 1-4 of the 2nd bank in inverted order { /* player 2 + dip switches */ int row = ((m_upd7807_porta >> 4) & 0x07) + 6; return m_keys[row]->read() | (((dips >> row) & 1) << 5); // 6-11 } return 0xff; } READ8_MEMBER(homedata_state::pteacher_upd7807_porta_r) { if (!BIT(m_upd7807_portc, 6)) m_upd7807_porta = m_soundlatch->read(); else logerror("%s: read PA with PC *not* clear\n", machine().describe_context()); return m_upd7807_porta; } WRITE8_MEMBER(homedata_state::pteacher_upd7807_porta_w) { m_upd7807_porta = data; } WRITE8_MEMBER(homedata_state::pteacher_upd7807_portc_w) { /* port C layout: 7 coin counter 6 enable message from main CPU on port A 5 clock latch for 76489 command 4 3 \ ROM bank 2 / 1 input (service) 0 input (coin) */ // logerror("%s: port C wr %02x\n", machine().describe_context(), data); m_audiobank->set_entry((data & 0x0c) >> 2); machine().bookkeeping().coin_counter_w(0, ~data & 0x80); if (BIT(m_upd7807_portc, 5) && !BIT(data, 5)) /* clock 1->0 */ m_sn->write(m_upd7807_porta); m_upd7807_portc = data; } /********************************************************************************/ WRITE8_MEMBER(homedata_state::bankswitch_w) { int last_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; /* last bank is fixed and is #0 for us, other banks start from #1 (hence data+1 below)*/ if (data < last_bank) m_mainbank->set_entry(data + 1); else m_mainbank->set_entry(0); } /********************************************************************************/ void homedata_state::mrokumei_map(address_map &map) { map(0x0000, 0x3fff).ram().w(FUNC(homedata_state::mrokumei_videoram_w)).share("videoram"); map(0x4000, 0x5fff).ram(); map(0x6000, 0x6fff).ram(); /* work ram */ map(0x7000, 0x77ff).ram(); /* hourouki expects this to act as RAM */ map(0x7800, 0x7800).ram(); /* only used to store the result of the ROM check */ map(0x7801, 0x7802).r(FUNC(homedata_state::mrokumei_keyboard_r)); // also vblank and active page map(0x7803, 0x7803).portr("IN0"); // coin, service map(0x7804, 0x7804).portr("DSW1"); // DSW1 map(0x7805, 0x7805).portr("DSW2"); // DSW2 map(0x7ff0, 0x7ffd).writeonly().share("vreg"); map(0x7ffe, 0x7ffe).nopr(); // ??? read every vblank, value discarded map(0x8000, 0x8000).w(FUNC(homedata_state::mrokumei_blitter_start_w)); // in some games also ROM bank switch to access service ROM map(0x8001, 0x8001).w(FUNC(homedata_state::mrokumei_keyboard_select_w)); map(0x8002, 0x8002).w(FUNC(homedata_state::mrokumei_sound_cmd_w)); map(0x8003, 0x8003).w(m_sn, FUNC(sn76489a_device::write)); map(0x8006, 0x8006).w(FUNC(homedata_state::homedata_blitter_param_w)); map(0x8007, 0x8007).w(FUNC(homedata_state::mrokumei_blitter_bank_w)); map(0x8000, 0xffff).rom(); } void homedata_state::mrokumei_sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); // TODO: might be that the entire area is sound_bank_w map(0xfffc, 0xfffd).nopw(); /* stack writes happen here, but there's no RAM */ map(0x8080, 0x8080).w(FUNC(homedata_state::mrokumei_sound_bank_w)); map(0xffbf, 0xffbf).w(FUNC(homedata_state::mrokumei_sound_bank_w)); // hourouki mirror } void homedata_state::mrokumei_sound_io_map(address_map &map) { map(0x0000, 0xffff).r(m_mrokumei_soundbank, FUNC(address_map_bank_device::read8)); /* read address is 16-bit */ map(0x0040, 0x0040).mirror(0xff00).w("dac", FUNC(dac_byte_interface::data_w)); /* write address is only 8-bit */ // hourouki mirror... map(0x007f, 0x007f).mirror(0xff00).w("dac", FUNC(dac_byte_interface::data_w)); /* write address is only 8-bit */ } void homedata_state::mrokumei_sound_banked_map(address_map &map) { map(0x00000, 0x1ffff).mirror(0x20000).rom().region("audiocpu", 0); map(0x40000, 0x40000).mirror(0x3ffff).r(m_soundlatch, FUNC(generic_latch_8_device::read)); } /********************************************************************************/ void homedata_state::reikaids_map(address_map &map) { map(0x0000, 0x3fff).ram().w(FUNC(homedata_state::reikaids_videoram_w)).share("videoram"); map(0x4000, 0x5fff).ram(); map(0x6000, 0x6fff).ram(); /* work RAM */ map(0x7800, 0x7800).ram(); /* behaves as normal RAM */ map(0x7801, 0x7801).portr("IN0"); map(0x7802, 0x7802).portr("IN1"); map(0x7803, 0x7803).r(FUNC(homedata_state::reikaids_io_r)); // coin, blitter, upd7807 map(0x7ff0, 0x7ffd).writeonly().share("vreg"); map(0x7ffe, 0x7ffe).w(FUNC(homedata_state::reikaids_blitter_bank_w)); map(0x7fff, 0x7fff).w(FUNC(homedata_state::reikaids_blitter_start_w)); map(0x8000, 0x8000).w(FUNC(homedata_state::bankswitch_w)); map(0x8002, 0x8002).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x8005, 0x8005).w(FUNC(homedata_state::reikaids_gfx_bank_w)); map(0x8006, 0x8006).w(FUNC(homedata_state::homedata_blitter_param_w)); map(0x8000, 0xbfff).bankr("mainbank"); map(0xc000, 0xffff).rom(); } void homedata_state::reikaids_upd7807_map(address_map &map) { map(0x0000, 0xfeff).bankr("audiobank"); /* External ROM (Banked) */ } /**************************************************************************/ void homedata_state::pteacher_base_map(address_map &map) { map(0x0000, 0x3fff).ram().w(FUNC(homedata_state::mrokumei_videoram_w)).share("videoram"); map(0x4000, 0x5eff).ram(); map(0x5f00, 0x5fff).ram(); map(0x6000, 0x6fff).ram(); /* work ram */ map(0x7800, 0x7800).ram(); /* behaves as normal RAM */ map(0x7801, 0x7801).r(FUNC(homedata_state::pteacher_io_r)); // vblank, visible page map(0x7ff0, 0x7ffd).writeonly().share("vreg"); map(0x7fff, 0x7fff).w(FUNC(homedata_state::pteacher_blitter_start_w)); map(0x8000, 0x8000).w(FUNC(homedata_state::bankswitch_w)); map(0x8002, 0x8002).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x8005, 0x8005).w(FUNC(homedata_state::pteacher_blitter_bank_w)); map(0x8006, 0x8006).w(FUNC(homedata_state::homedata_blitter_param_w)); map(0x8007, 0x8007).w(FUNC(homedata_state::pteacher_gfx_bank_w)); map(0x8000, 0xbfff).bankr("mainbank"); map(0xc000, 0xffff).rom(); } void homedata_state::pteacher_map(address_map &map) { pteacher_base_map(map); map(0x7ff2, 0x7ff2).r(m_mainlatch, FUNC(generic_latch_8_device::read)); } void homedata_state::pteacher_upd7807_map(address_map &map) { map(0x0000, 0x0000).w(m_mainlatch, FUNC(generic_latch_8_device::write)); map(0x0000, 0xfeff).bankr("audiobank"); /* External ROM (Banked) */ } /**************************************************************************/ /* it seems that Mahjong Jogakuen runs on the same board as the others, but with just these two addresses swapped. Instead of creating a new MachineDriver, I just fix them here. */ void homedata_state::jogakuen_map(address_map &map) { pteacher_map(map); map(0x8005, 0x8005).w(FUNC(homedata_state::pteacher_gfx_bank_w)); map(0x8007, 0x8007).w(FUNC(homedata_state::pteacher_blitter_bank_w)); } /**************************************************************************/ void homedata_state::mjikaga_map(address_map &map) { pteacher_base_map(map); map(0x7802, 0x7802).r(m_mainlatch, FUNC(generic_latch_8_device::read)); } void homedata_state::mjikaga_upd7807_map(address_map &map) { map(0x0123, 0x0123).w(m_mainlatch, FUNC(generic_latch_8_device::write)); map(0x0000, 0xfeff).bankr("audiobank"); /* External ROM (Banked) */ } /**************************************************************************/ static INPUT_PORTS_START( mjhokite ) PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:7" ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:6,5") PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x10, 0x10, "Initial Score" ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x10, "1000" ) PORT_DIPSETTING( 0x00, "2000" ) PORT_DIPNAME( 0xe0, 0x80, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:3,2,1") PORT_DIPSETTING( 0xe0, "1 (easiest)" ) PORT_DIPSETTING( 0xc0, "2" ) PORT_DIPSETTING( 0xa0, "3" ) PORT_DIPSETTING( 0x80, "4" ) PORT_DIPSETTING( 0x60, "5" ) PORT_DIPSETTING( 0x40, "6" ) PORT_DIPSETTING( 0x20, "7" ) PORT_DIPSETTING( 0x00, "8 (hardest)" ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x00, "Girl Voice" ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:6" ) PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:5" ) PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:4" ) PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:3" ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:2" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:1" ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_DIPNAME( 0x02, 0x02, "Freeze?" ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT ) // doesn't work in all games PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("KEY1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_START("KEY2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY4") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END static INPUT_PORTS_START( reikaids ) PORT_START("IN0") // 0x7801 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Punch") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Kick") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Jump / Defense") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("IN1") // 0x7802 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Punch") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Kick") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Jump / Defense") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN2") // 0x7803 PORT_BIT( 0x01, IP_ACTIVE_HIGH,IPT_CUSTOM ) /* coprocessor status */ PORT_BIT( 0x02, IP_ACTIVE_HIGH,IPT_CUSTOM ) /* coprocessor data */ PORT_BIT( 0x04, IP_ACTIVE_HIGH,IPT_CUSTOM ) /* vblank */ PORT_BIT( 0x08, IP_ACTIVE_HIGH,IPT_CUSTOM ) /* visible page */ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x01, DEF_STR( On ) ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:2,3") PORT_DIPSETTING( 0x06, "20k then every 60k" ) PORT_DIPSETTING( 0x04, "30k then every 80k" ) PORT_DIPSETTING( 0x02, "20k" ) PORT_DIPSETTING( 0x00, "30k" ) PORT_DIPNAME( 0x18, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,5") PORT_DIPSETTING( 0x18, "2" ) PORT_DIPSETTING( 0x10, "3" ) PORT_DIPSETTING( 0x08, "4" ) PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) PORT_DIPNAME( 0x20, 0x20, "Time" ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x20, "60" ) PORT_DIPSETTING( 0x00, "45" ) PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x10, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:6,7,8") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x60, DEF_STR( 1C_5C ) ) INPUT_PORTS_END static INPUT_PORTS_START( battlcry ) PORT_INCLUDE( reikaids ) PORT_MODIFY("DSW1") // According to manual these DSW #s should be reversed PORT_DIPNAME( 0x07, 0x07, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x02, "Up To Stage 1" ) PORT_DIPSETTING( 0x06, "Up To Stage 2" ) PORT_DIPSETTING( 0x01, "Up To Stage 3" ) PORT_DIPSETTING( 0x05, "Up To Stage 4" ) PORT_DIPSETTING( 0x03, "Up To Stage 5" ) PORT_DIPSETTING( 0x07, "Up To Stage 6" ) PORT_DIPNAME( 0x18, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,5") PORT_DIPSETTING( 0x18, "1" ) PORT_DIPSETTING( 0x10, "2" ) PORT_DIPSETTING( 0x08, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x20, 0x20, "Time" ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x20, "90" ) PORT_DIPSETTING( 0x00, "120" ) PORT_DIPNAME( 0x40, 0x40, "Test Mode" ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, "Unused - Leave OFF" ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_MODIFY("DSW2") PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x04, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, "Background Music" ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:6,7,8") PORT_DIPSETTING( 0x80, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0xc0, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) INPUT_PORTS_END static INPUT_PORTS_START( mj_keyboard ) PORT_START("KEY0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY4") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY5") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY6") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY7") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY8") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY9") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY10") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("KEY11") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* dip switch (handled separately) */ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( pteacher ) PORT_START("DSW") /* dip switches (handled by pteacher_keyboard_r) */ PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0002, 0x0000, "In-Game BGM") PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x0000, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x000c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x0008, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x0010, 0x0010, "Female Voices" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW1:6" ) //SW1:6,7,8 are difficulty PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW1:7" ) PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW1:8" ) PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_SERVICE_DIPLOC(0x0200, IP_ACTIVE_LOW, "SW2:3" ) PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW2:2" ) PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW2:1" ) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_INCLUDE( mj_keyboard ) INPUT_PORTS_END static INPUT_PORTS_START( mjjoship ) PORT_INCLUDE( pteacher ) // Manual wrong for this game - it's an incomplete version of the // pteacher set, with no service mode and start score instead of // girl voices. Coins stated in manual in same place but do nothing PORT_MODIFY("DSW") // SW1 PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW1:2" ) PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" ) PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" ) PORT_DIPNAME( 0x0010, 0x0010, "Player Start Score" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x0010, "1000" ) PORT_DIPSETTING( 0x0000, "2000" ) // SW2 PORT_DIPUNUSED_DIPLOC( 0x0100, 0x0100, "SW2:4" ) PORT_DIPUNUSED_DIPLOC( 0x0200, 0x0200, "SW2:3" ) INPUT_PORTS_END static INPUT_PORTS_START( jogakuen ) PORT_START("DSW") /* dip switches (handled by pteacher_keyboard_r) */ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0003, 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( 0x0004, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) PORT_DIPNAME( 0x0010, 0x0010, "In-Game BGM" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPNAME( 0x0020, 0x0020, "Gal Strip Voice" ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_SERVICE( 0x0800, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:1") PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:2,3,4") // not sure about the sequence here PORT_DIPSETTING( 0x0300, DEF_STR( Easiest ) ) // 'Easy 4' in test mode PORT_DIPSETTING( 0x0200, DEF_STR( Very_Easy ) ) // 'Easy 3' in test mode PORT_DIPSETTING( 0x0100, DEF_STR( Easier ) ) // 'Easy 2' in test mode PORT_DIPSETTING( 0x0000, DEF_STR( Easy ) ) // 'Easy 1' in test mode PORT_DIPSETTING( 0x0700, DEF_STR( Normal ) ) // 'Normal 0' in test mode PORT_DIPSETTING( 0x0600, DEF_STR( Hard ) ) // 'Hard 1' in test mode PORT_DIPSETTING( 0x0500, DEF_STR( Harder ) ) // 'Hard 2' in test mode PORT_DIPSETTING( 0x0400, DEF_STR( Hardest ) ) // 'Hard 3' in test mode PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_INCLUDE( mj_keyboard ) INPUT_PORTS_END static INPUT_PORTS_START( mjikaga ) PORT_START("DSW") /* dip switches (handled by pteacher_keyboard_r) */ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0020, 0x0020, "In-Game BGM" ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x0000, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0800, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x0400, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_SERVICE( 0x0100, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:4") PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_INCLUDE( mj_keyboard ) INPUT_PORTS_END /**************************************************************************/ static const gfx_layout char_layout = { 8,8, RGN_FRAC(1,1), 4, { 0, 1, 2, 3 }, { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 }, { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, 32*8 }; static GFXDECODE_START( gfx_mrokumei ) GFXDECODE_ENTRY( "gfx1", 0, char_layout, 0x6000, 0x100 ) GFXDECODE_ENTRY( "gfx2", 0, char_layout, 0x7000, 0x100 ) GFXDECODE_END static const gfx_layout tile_layout = { 8,8, RGN_FRAC(1,1), 8, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64 }, 64*8 }; static GFXDECODE_START( gfx_reikaids ) GFXDECODE_ENTRY( "gfx1", 0, tile_layout, 0x6000, 0x20 ) GFXDECODE_ENTRY( "gfx2", 0, tile_layout, 0x4000, 0x20 ) GFXDECODE_ENTRY( "gfx3", 0, tile_layout, 0x2000, 0x20 ) GFXDECODE_ENTRY( "gfx4", 0, tile_layout, 0x0000, 0x20 ) GFXDECODE_END static GFXDECODE_START( gfx_pteacher ) GFXDECODE_ENTRY( "gfx1", 0, tile_layout, 0x0000, 0x40 ) GFXDECODE_ENTRY( "gfx2", 0, tile_layout, 0x4000, 0x40 ) GFXDECODE_END static const gfx_layout tile_layout_4bpp_hi = { 8,8, RGN_FRAC(1,1), 4, { 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64 }, 64*8 }; static const gfx_layout tile_layout_4bpp_lo = { 8,8, RGN_FRAC(1,1), 4, { 0, 1, 2, 3 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64 }, 64*8 }; static GFXDECODE_START( gfx_lemnangl ) GFXDECODE_ENTRY( "gfx1", 0, tile_layout_4bpp_hi, 0x0000, 0x200 ) GFXDECODE_ENTRY( "gfx1", 0, tile_layout_4bpp_lo, 0x2000, 0x200 ) GFXDECODE_ENTRY( "gfx2", 0, tile_layout_4bpp_lo, 0x4000, 0x200 ) GFXDECODE_ENTRY( "gfx2", 0, tile_layout_4bpp_hi, 0x6000, 0x200 ) GFXDECODE_END MACHINE_START_MEMBER(homedata_state,homedata) { save_item(NAME(m_visible_page)); save_item(NAME(m_flipscreen)); save_item(NAME(m_blitter_bank)); save_item(NAME(m_blitter_param_count)); save_item(NAME(m_blitter_param)); save_item(NAME(m_vblank)); save_item(NAME(m_keyb)); } MACHINE_START_MEMBER(homedata_state,reikaids) { uint8_t *ROM = memregion("maincpu")->base(); m_mainbank->configure_entries(0, 8, &ROM[0xc000], 0x4000); m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x10000); MACHINE_START_CALL_MEMBER(homedata); save_item(NAME(m_upd7807_porta)); save_item(NAME(m_upd7807_portc)); save_item(NAME(m_reikaids_which)); save_item(NAME(m_gfx_bank)); } MACHINE_START_MEMBER(homedata_state,pteacher) { uint8_t *ROM = memregion("maincpu")->base(); m_mainbank->configure_entries(0, 4, &ROM[0xc000], 0x4000); m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x10000); MACHINE_START_CALL_MEMBER(homedata); save_item(NAME(m_upd7807_porta)); save_item(NAME(m_upd7807_portc)); save_item(NAME(m_gfx_bank)); } MACHINE_RESET_MEMBER(homedata_state,homedata) { m_visible_page = 0; m_flipscreen = 0; m_blitter_bank = 0; m_blitter_param_count = 0; m_blitter_param[0] = 0; m_blitter_param[1] = 0; m_blitter_param[2] = 0; m_blitter_param[3] = 0; m_vblank = 0; m_keyb = 0; } MACHINE_RESET_MEMBER(homedata_state,mrokumei) { MACHINE_RESET_CALL_MEMBER(homedata); m_mrokumei_soundbank->set_bank(0); } MACHINE_RESET_MEMBER(homedata_state,pteacher) { address_space &space = m_maincpu->space(AS_PROGRAM); /* on reset, ports are set as input (high impedance), therefore 0xff output */ pteacher_upd7807_portc_w(space, 0, 0xff); MACHINE_RESET_CALL_MEMBER(homedata); m_upd7807_porta = 0; m_gfx_bank[0] = 0; m_gfx_bank[1] = 0; } MACHINE_RESET_MEMBER(homedata_state,reikaids) { address_space &space = m_maincpu->space(AS_PROGRAM); /* on reset, ports are set as input (high impedance), therefore 0xff output */ reikaids_upd7807_portc_w(space, 0, 0xff); MACHINE_RESET_CALL_MEMBER(homedata); m_reikaids_which = m_priority; // m_priority is set in DRIVER_INIT m_upd7807_porta = 0; m_gfx_bank[0] = 0; m_gfx_bank[1] = 0; // this is not used by reikaids } void homedata_state::mrokumei(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, 16000000/8); /* 2MHz ? */ m_maincpu->set_addrmap(AS_PROGRAM, &homedata_state::mrokumei_map); m_maincpu->set_vblank_int("screen", FUNC(homedata_state::homedata_irq)); /* also triggered by the blitter */ Z80(config, m_audiocpu, 16000000/4); /* 4MHz ? */ m_audiocpu->set_addrmap(AS_PROGRAM, &homedata_state::mrokumei_sound_map); m_audiocpu->set_addrmap(AS_IO, &homedata_state::mrokumei_sound_io_map); ADDRESS_MAP_BANK(config, m_mrokumei_soundbank).set_map(&homedata_state::mrokumei_sound_banked_map).set_options(ENDIANNESS_LITTLE, 8, 19, 0x10000); MCFG_MACHINE_START_OVERRIDE(homedata_state,homedata) MCFG_MACHINE_RESET_OVERRIDE(homedata_state,mrokumei) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(59); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 32*8); // visible area can be changed at runtime screen.set_visarea(0*8, 54*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(homedata_state::screen_update_mrokumei)); screen.screen_vblank().set(FUNC(homedata_state::screen_vblank)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_mrokumei); PALETTE(config, m_palette, FUNC(homedata_state::mrokumei_palette), 0x8000); MCFG_VIDEO_START_OVERRIDE(homedata_state,mrokumei) /* sound hardware */ SPEAKER(config, "speaker").front_center(); GENERIC_LATCH_8(config, m_soundlatch); SN76489A(config, m_sn, 16000000/4); // SN76489AN actually m_sn->add_route(ALL_OUTPUTS, "speaker", 0.5); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); } /**************************************************************************/ void homedata_state::reikaids(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, 16_MHz_XTAL/8); /* MC68B09EP 2MHz ? */ m_maincpu->set_addrmap(AS_PROGRAM, &homedata_state::reikaids_map); m_maincpu->set_vblank_int("screen", FUNC(homedata_state::homedata_irq)); /* also triggered by the blitter */ upd7807_device &audiocpu(UPD7807(config, m_audiocpu, 9_MHz_XTAL)); /* 9MHz ? */ audiocpu.set_addrmap(AS_PROGRAM, &homedata_state::reikaids_upd7807_map); audiocpu.pa_in_cb().set(FUNC(homedata_state::reikaids_upd7807_porta_r)); audiocpu.pa_out_cb().set(FUNC(homedata_state::reikaids_upd7807_porta_w)); audiocpu.pb_out_cb().set("dac", FUNC(dac_byte_interface::data_w)); audiocpu.pc_out_cb().set(FUNC(homedata_state::reikaids_upd7807_portc_w)); audiocpu.pt_in_cb().set(m_soundlatch, FUNC(generic_latch_8_device::read)); config.set_maximum_quantum(attotime::from_hz(30000)); // very high interleave required to sync for startup tests MCFG_MACHINE_START_OVERRIDE(homedata_state,reikaids) MCFG_MACHINE_RESET_OVERRIDE(homedata_state,reikaids) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(59); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(256, 256); screen.set_visarea(0, 255, 16, 256-1-16); screen.set_screen_update(FUNC(homedata_state::screen_update_reikaids)); screen.screen_vblank().set(FUNC(homedata_state::screen_vblank)); screen.screen_vblank().append([this] (int state) { if (state) m_audiocpu->pulse_input_line(UPD7810_INTF1, m_audiocpu->minimum_quantum_time()); }); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_reikaids); PALETTE(config, m_palette, FUNC(homedata_state::reikaids_palette), 0x8000); MCFG_VIDEO_START_OVERRIDE(homedata_state,reikaids) /* sound hardware */ SPEAKER(config, "speaker").front_center(); GENERIC_LATCH_8(config, m_soundlatch); YM2203(config, m_ymsnd, 16_MHz_XTAL/4); /* 4 MHz */ m_ymsnd->port_a_read_callback().set_ioport("DSW1"); m_ymsnd->port_b_read_callback().set_ioport("DSW2"); m_ymsnd->add_route(0, "speaker", 0.25); m_ymsnd->add_route(1, "speaker", 0.25); m_ymsnd->add_route(2, "speaker", 0.25); m_ymsnd->add_route(3, "speaker", 1.0); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); } /**************************************************************************/ void homedata_state::pteacher(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, 16000000/8); /* 2MHz ? */ m_maincpu->set_addrmap(AS_PROGRAM, &homedata_state::pteacher_map); m_maincpu->set_vblank_int("screen", FUNC(homedata_state::homedata_irq)); /* also triggered by the blitter */ upd7807_device &audiocpu(UPD7807(config, m_audiocpu, 9000000)); /* 9MHz ? */ audiocpu.set_addrmap(AS_PROGRAM, &homedata_state::pteacher_upd7807_map); audiocpu.pa_in_cb().set(FUNC(homedata_state::pteacher_upd7807_porta_r)); audiocpu.pa_out_cb().set(FUNC(homedata_state::pteacher_upd7807_porta_w)); audiocpu.pb_out_cb().set("dac", FUNC(dac_byte_interface::data_w)); audiocpu.pc_in_cb().set_ioport("COIN"); audiocpu.pc_out_cb().set(FUNC(homedata_state::pteacher_upd7807_portc_w)); audiocpu.pt_in_cb().set(FUNC(homedata_state::pteacher_keyboard_r)); config.set_maximum_quantum(attotime::from_hz(6000)); // should be enough MCFG_MACHINE_START_OVERRIDE(homedata_state,pteacher) MCFG_MACHINE_RESET_OVERRIDE(homedata_state,pteacher) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(59); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 32*8); // visible area can be changed at runtime screen.set_visarea(0*8, 54*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(homedata_state::screen_update_pteacher)); screen.screen_vblank().set(FUNC(homedata_state::screen_vblank)); screen.screen_vblank().append([this] (int state) { if (state) m_audiocpu->pulse_input_line(UPD7810_INTF1, m_audiocpu->minimum_quantum_time()); }); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_pteacher); PALETTE(config, m_palette, FUNC(homedata_state::pteacher_palette), 0x8000); MCFG_VIDEO_START_OVERRIDE(homedata_state,pteacher) /* sound hardware */ SPEAKER(config, "speaker").front_center(); GENERIC_LATCH_8(config, m_soundlatch); GENERIC_LATCH_8(config, m_mainlatch); SN76489A(config, m_sn, 16000000/4); // SN76489AN actually m_sn->add_route(ALL_OUTPUTS, "speaker", 0.5); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); } void homedata_state::jogakuen(machine_config &config) { pteacher(config); m_maincpu->set_addrmap(AS_PROGRAM, &homedata_state::jogakuen_map); } void homedata_state::mjkinjas(machine_config &config) { pteacher(config); m_audiocpu->set_clock(11000000); /* 11MHz ? */ } void homedata_state::lemnangl(machine_config &config) { pteacher(config); /* video hardware */ m_gfxdecode->set_info(gfx_lemnangl); MCFG_VIDEO_START_OVERRIDE(homedata_state,lemnangl) } void homedata_state::mjikaga(machine_config &config) { lemnangl(config); /* Mahjong Ikagadesuka is different as well. */ m_maincpu->set_addrmap(AS_PROGRAM, &homedata_state::mjikaga_map); m_audiocpu->set_addrmap(AS_PROGRAM, &homedata_state::mjikaga_upd7807_map); config.set_maximum_quantum(attotime::from_hz(9000)); // boost synch a bit more, otherwise the game fails to start } static INPUT_PORTS_START( mirderby ) INPUT_PORTS_END void homedata_state::cpu0_map(address_map &map) { map(0x0000, 0x7fff).rom(); } void homedata_state::cpu1_map(address_map &map) { map(0x0000, 0x3fff).ram(); // videoram map(0x4000, 0x5fff).ram(); map(0x6000, 0x6fff).ram(); /* work ram */ map(0x7000, 0x77ff).ram(); //0x7ff0 onward is the blitter map(0x7ffe, 0x7ffe).nopr(); //watchdog map(0x8000, 0xffff).rom(); } READ8_MEMBER(homedata_state::mirderby_prot_r) { m_prot_data&=0x7f; return m_prot_data++; } WRITE8_MEMBER(homedata_state::mirderby_prot_w) { m_prot_data = data; } void homedata_state::cpu2_map(address_map &map) { map(0x0000, 0x3fff).ram().w(FUNC(homedata_state::mrokumei_videoram_w)).share("videoram"); map(0x4000, 0x5fff).ram(); map(0x6000, 0x6fff).ram(); /* work ram */ map(0x7000, 0x77ff).ram(); map(0x7800, 0x7800).rw(FUNC(homedata_state::mirderby_prot_r), FUNC(homedata_state::mirderby_prot_w)); // protection check? (or sound comms?) map(0x7ffe, 0x7ffe).nopr(); //watchdog map(0x8000, 0xffff).rom(); } static const gfx_layout mirderbychar_layout = { 8,8, RGN_FRAC(1,1), 4, { 0, 1, 2, 3 }, { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 }, { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, 32*8 }; static GFXDECODE_START( gfx_mirderby ) GFXDECODE_ENTRY( "gfx1", 0, mirderbychar_layout, 0x0000, 0x10 ) GFXDECODE_ENTRY( "gfx2", 0, mirderbychar_layout, 0x0000, 0x10 ) GFXDECODE_END /* Miracle Derby - Ascot - has the same GX61A01 custom (blitter?) as homedata.cpp and a 'similar' CPU setup (this has more CPUs) and similar board / rom numbering (X**-) The drivers can probably be merged later, although the current per-game handling of the blitter in homedata.cpp should be looked at. Notes from Stefan Lindberg: Eprom "x70_a04.5g" had wires attached to it, pin 2 and 16 was joined and pin 1,32,31,30 was joined, i removed them and read the eprom as the type it was (D27c1000D). Measured frequencies: MBL68B09E = 2mhz MBL68B09E = 2mhz z80 = 4mhz YM2203 = 2mhz See included PCB pics. Roms: Name Size CRC32 Chip Type --------------------------------------------------------------------------------- x70a07.8l 256 0x7d4c9712 82s129 x70a08.7l 256 0xc4e77174 82s129 x70a09.6l 256 0xd0187957 82s129 x70_a03.8g 32768 0x4e298b2d 27c256 x70_a04.5g 131072 0x14392fdb D27c1000D x70_a11.1g 32768 0xb394eef7 27c256 x70_b02.12e 32768 0x76c9bb6f 27c256 x70_c01.14e 65536 0xd79d072d 27c512 */ /* clocks are 16mhz and 9mhz */ void homedata_state::mirderby(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, 16000000/8); /* 2 Mhz */ m_maincpu->set_addrmap(AS_PROGRAM, &homedata_state::cpu2_map); z80_device &cpu0(Z80(config, "cpu0", 16000000/4)); /* 4 Mhz */ cpu0.set_disable(); cpu0.set_addrmap(AS_PROGRAM, &homedata_state::cpu0_map); mc6809e_device &cpu1(MC6809E(config, "cpu1", 16000000/8)); /* 2 Mhz */ cpu1.set_addrmap(AS_PROGRAM, &homedata_state::cpu1_map); cpu1.set_disable(); //cpu1.set_vblank_int("screen", FUNC(homedata_state::mirderby_irq)); config.set_maximum_quantum(attotime::from_hz(6000)); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(59); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 32*8); screen.set_visarea(0*8, 54*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(homedata_state::screen_update_mirderby)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_mirderby); PALETTE(config, m_palette, FUNC(homedata_state::mirderby_palette), 0x8000); MCFG_VIDEO_START_OVERRIDE(homedata_state,mirderby) /* sound hardware */ SPEAKER(config, "speaker").front_center(); YM2203(config, m_ymsnd, 2000000); m_ymsnd->add_route(0, "speaker", 0.25); m_ymsnd->add_route(1, "speaker", 0.25); m_ymsnd->add_route(2, "speaker", 0.25); m_ymsnd->add_route(3, "speaker", 1.0); } /**************************************************************************/ ROM_START( hourouki ) ROM_REGION( 0x010000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x77f01.bin", 0x08000, 0x8000, CRC(cd3197b8) SHA1(7dad9ce57a83d675a8a9a4e06df360c22100fe4b) ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "x77a10.bin", 0x00000, 0x20000, CRC(dc1d616b) SHA1(93b8dfe1566556e9621c0d5f3998b31874f74a28) ) ROM_REGION( 0x20000, "gfx1", 0 ) ROM_LOAD( "x77a03.bin", 0, 0x20000, CRC(5960cde8) SHA1(857b56b304423102a5f1fc88ba4a2386d012bf4d) ) ROM_REGION( 0x40000, "gfx2", 0 ) ROM_LOAD( "x77a04.bin", 0x00000, 0x20000, CRC(fd348e59) SHA1(df0eb4d24e3e778e7a06b7fd7fa4e077fa0ebf82) ) ROM_LOAD( "x77a05.bin", 0x20000, 0x20000, CRC(3f76c8af) SHA1(2b41a9a06f8ccbb9f3879c742fa8af4424837fb2) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x77e06.bin", 0x00000, 0x8000, CRC(63607fe5) SHA1(50c756d741117bd0ea8a877bcb1f025e02cc6d29) ) ROM_LOAD16_BYTE( "x77e07.bin", 0x00001, 0x8000, CRC(79fcfc57) SHA1(4311a6bd8aa2dcad2b4fa5a9091c27dd74df62eb) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x77a08.bin", 0x0000, 0x20000, CRC(22bde229) SHA1(8b44fa895f77b5c95d798172225a030fa0c04126) ) ROM_END ROM_START( mhgaiden ) ROM_REGION( 0x010000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x72e01.bin", 0x08000, 0x8000, CRC(98cfa53e) SHA1(dd08f5f9ff9d4a9e01e531247fcb17a8407ca8b6) ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "x72b10.bin", 0x00000, 0x20000, CRC(00ebbc45) SHA1(9e7ade202bf37a86153a38d705ae26a72732d2bb) ) ROM_REGION( 0x20000, "gfx1", 0 ) ROM_LOAD( "x72b03.bin", 0, 0x20000, CRC(9019936f) SHA1(5b98ad1b4c0b141bc84fc17bea49784883c5775a) ) ROM_REGION( 0x40000, "gfx2", 0 ) ROM_LOAD( "x72b04.bin", 0x00000, 0x20000, CRC(37e3e779) SHA1(7011159dee2c643c3fd6ffbbd0849f63933279ad) ) ROM_LOAD( "x72b05.bin", 0x20000, 0x20000, CRC(aa5ce6f6) SHA1(d97b08fce68a69b1445d5ab28c0c97fabb5f264b) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x72c06.bin", 0x00000, 0x8000, CRC(b57fb589) SHA1(21b2fc33b9045a4ffa9e4b0bd598fd3416c0adbf) ) ROM_LOAD16_BYTE( "x72c07.bin", 0x00001, 0x8000, CRC(2aadb285) SHA1(90af8541092fbb116b6d6eaf1511b49a2f9bceaf) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x72b08.bin", 0x0000, 0x20000, CRC(be312d23) SHA1(f2c18d6372c2f819248976c67abe0ddcd5cc1de1) ) ROM_END ROM_START( mjhokite ) ROM_REGION( 0x010000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "a74_g01.6g", 0x08000, 0x8000, CRC(409cc501) SHA1(6e9ab81198a5a54489cca8b6dcafb67995351207) ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "a74_a10.11k", 0x00000, 0x20000, CRC(2252f3ec) SHA1(018aaad087354b05b120aa42db572ed13f690f88) ) ROM_REGION( 0x20000, "gfx1", 0 ) ROM_LOAD( "a74_a03.1g", 0, 0x20000, CRC(bf801b74) SHA1(fd9b7a4590fdeba90423a7ceccd8dfbb8826460b) ) ROM_REGION( 0x80000, "gfx2", 0 ) ROM_LOAD( "a74_a040.bin", 0x00000, 0x20000, CRC(b7a4ddbd) SHA1(70b9e44da7f32120fe86b23e431c3ae1eb36ef1a) ) ROM_LOAD( "a74_a050.bin", 0x20000, 0x20000, CRC(c1718d39) SHA1(e37e2338b7e9409d9d542d30f363d07c7a873602) ) ROM_LOAD( "a74_a041.bin", 0x40000, 0x20000, CRC(c6a6407d) SHA1(7421f4ae8b2959d16114cadc9098156e5a97b36f) ) ROM_LOAD( "a74_a051.bin", 0x60000, 0x20000, CRC(74522b81) SHA1(6bd9655005f36887bec7c127f467e765447acd8f) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "a74_a06.1l", 0x00000, 0x8000, CRC(df057dd3) SHA1(0afae441b43a87e04511b8e652d2b03f48d8f705) ) ROM_LOAD16_BYTE( "a74_a07.1m", 0x00001, 0x8000, CRC(3c230167) SHA1(5d57f614bf07baa8b5c96f1d14241ff7c66806c1) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "a74_a08.13a", 0x0000, 0x20000, CRC(dffdd855) SHA1(91469a997a6a9f74f1b84c127f30f5b0e2f974ac) ) ROM_END ROM_START( mjclinic ) ROM_REGION( 0x010000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x80_g01.6g", 0x08000, 0x8000, CRC(787b4fb5) SHA1(d1708979d209113b604f6d0973fe14a0c4348351) ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "x80_a10.11k", 0x00000, 0x20000, CRC(afedbadf) SHA1(e2f101b59c0d23f9dc9b057c41d496fc3223cbb8) ) ROM_REGION( 0x20000, "gfx1", 0 ) ROM_LOAD( "x80_a03.1g", 0, 0x20000, CRC(34b63c89) SHA1(98383ce8e464ecc53677c060338cc03aa6238a0e) ) ROM_REGION( 0x80000, "gfx2", 0 ) ROM_LOAD( "x80_a040.bin", 0x00000, 0x20000, CRC(6f18a8cf) SHA1(af8de2bd8b2157ceaa8192ead51ac4489c464ab2) ) ROM_LOAD( "x80_a050.bin", 0x20000, 0x20000, CRC(6b1ec3a9) SHA1(dc7a857bb102325ebf2522369a231260c2e02c89) ) ROM_LOAD( "x80_a041.bin", 0x40000, 0x20000, CRC(f70bb001) SHA1(3b29bb0bd155e97d3ccc72a8a07046c676c8452d) ) ROM_LOAD( "x80_a051.bin", 0x60000, 0x20000, CRC(c7469cb8) SHA1(bcf7021667e943991865fdbc9620f00b09e1db3e) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x80_a06.1l", 0x00000, 0x8000, CRC(c1f9b2fb) SHA1(abe17e2b3b880f91564e32c246116c33e2884889) ) ROM_LOAD16_BYTE( "x80_a07.1m", 0x00001, 0x8000, CRC(e3120152) SHA1(b4a778a9b91e204e2c068dff9a40bd29eccf04a5) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x80_a08.13a", 0x0000, 0x20000, CRC(174e8ec0) SHA1(a5075fe4bba9403ef9e0636d5f3f66aad8b2bc54) ) ROM_END ROM_START( mjclinica ) ROM_REGION( 0x010000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x80_f01.6g", 0x08000, 0x8000, CRC(cd814ec0) SHA1(55b2c9519fc98f71a2731c3851ce56ee8e57bd66) ) // labeled f01 instead of g01. Earlier version? ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "x80_a10.11k", 0x00000, 0x20000, CRC(afedbadf) SHA1(e2f101b59c0d23f9dc9b057c41d496fc3223cbb8) ) ROM_REGION( 0x20000, "gfx1", 0 ) ROM_LOAD( "x80_a03.1g", 0, 0x20000, CRC(34b63c89) SHA1(98383ce8e464ecc53677c060338cc03aa6238a0e) ) ROM_REGION( 0x80000, "gfx2", 0 ) ROM_LOAD( "x80_a040.bin", 0x00000, 0x20000, CRC(6f18a8cf) SHA1(af8de2bd8b2157ceaa8192ead51ac4489c464ab2) ) ROM_LOAD( "x80_a050.bin", 0x20000, 0x20000, CRC(6b1ec3a9) SHA1(dc7a857bb102325ebf2522369a231260c2e02c89) ) ROM_LOAD( "x80_a041.bin", 0x40000, 0x20000, CRC(f70bb001) SHA1(3b29bb0bd155e97d3ccc72a8a07046c676c8452d) ) ROM_LOAD( "x80_a051.bin", 0x60000, 0x20000, CRC(c7469cb8) SHA1(bcf7021667e943991865fdbc9620f00b09e1db3e) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x80_a06.1l", 0x00000, 0x8000, CRC(c1f9b2fb) SHA1(abe17e2b3b880f91564e32c246116c33e2884889) ) ROM_LOAD16_BYTE( "x80_a07.1m", 0x00001, 0x8000, CRC(e3120152) SHA1(b4a778a9b91e204e2c068dff9a40bd29eccf04a5) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x80_a08.13a", 0x0000, 0x20000, CRC(174e8ec0) SHA1(a5075fe4bba9403ef9e0636d5f3f66aad8b2bc54) ) ROM_END ROM_START( mrokumei ) ROM_REGION( 0x010000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "m81d01.bin", 0x08000, 0x8000, CRC(6f81a78a) SHA1(5e16327b04b065ed4e39a147b18711902dba6384) ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "m81a10.bin", 0x00000, 0x20000, CRC(0866b2d3) SHA1(37a726830476e372db906382e1d0601c461c7c10) ) ROM_REGION( 0x20000, "gfx1", 0 ) ROM_LOAD( "m81a03.bin", 0, 0x20000, CRC(4f96e6d2) SHA1(9e6375ee543215691b28c914a8374c1d75c6681f) ) ROM_REGION( 0x80000, "gfx2", 0 ) ROM_LOAD( "m81a40.bin", 0x00000, 0x20000, CRC(f07c6a91) SHA1(1e8b07817bb3661211b22c8c0ee35424b3ee8774) ) ROM_LOAD( "m81a50.bin", 0x20000, 0x20000, CRC(5ef0d7f2) SHA1(9d0af693b95d941c4b5702c483aee9d33c2fb886) ) ROM_LOAD( "m81a41.bin", 0x40000, 0x20000, CRC(9332b879) SHA1(fc70a6acf816564c1c90c2f9aa644f702a38eae1) ) ROM_LOAD( "m81a51.bin", 0x60000, 0x20000, CRC(dda3ae30) SHA1(a0ba05cc46a4b2869ddf544c538e40a40f3babd5) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "m81b06.bin", 0x00000, 0x8000, CRC(96665d39) SHA1(9173791831555e69b8938d85340a08dd73012f8d) ) ROM_LOAD16_BYTE( "m81b07.bin", 0x00001, 0x8000, CRC(14f39690) SHA1(821f9de1b28b9d7844fc1b002c7ee3bbdda7f905) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "m81a08.bin", 0x0000, 0x20000, CRC(dba706b9) SHA1(467c8c3e12cd64002d2516dd117bc87d03448f49) ) ROM_END ROM_START( lastapos ) ROM_REGION( 0x02c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "e82a01.j14", 0x010000, 0x01c000, CRC(236475ae) SHA1(e14176682fda9195b2919868134ee8491f59badd) ) ROM_CONTINUE( 0x00c000, 0x004000) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x82a04.e20", 0x000000, 0x040000, CRC(52c9028a) SHA1(9d5e37b2f741d5c0e64ba3d674a72330058b96f2) ) ROM_REGION( 0x200000, "gfx1", 0 ) ROM_LOAD( "x82a13.d2", 0x000000, 0x80000, CRC(954c8844) SHA1(94e09009d0ad40a62f2a92cd5bd500ffe2c4650a) ) ROM_LOAD( "x82a14.d1", 0x080000, 0x80000, CRC(a748305e) SHA1(ee01025820a0915621d2c056d65e67a84a5f724c) ) ROM_LOAD( "x82a15.f2", 0x100000, 0x80000, CRC(c50f7047) SHA1(13fcd1abaf88c759e747cf5f2c94a522276945c9) ) ROM_LOAD( "x82a16.f1", 0x180000, 0x80000, CRC(b270094a) SHA1(edd4f7e3fd082c12758d82ea6eba2a060398b9ef) ) ROM_REGION( 0x200000, "gfx2", 0 ) ROM_LOAD( "x82a09.d5", 0x000000, 0x80000, CRC(c496b187) SHA1(8ec4e09469c9f425681671f5ddb2d2d8768af42b) ) ROM_LOAD( "x82a10.d4", 0x080000, 0x80000, CRC(4243fe28) SHA1(01260543a6f61f46ba56840c1b96ecedf637451c) ) ROM_LOAD16_BYTE( "e82a12.f4", 0x100000, 0x20000, CRC(0e2cdd40) SHA1(254b4f1f986ad5fd9437a5c8bbaf6683d9edf02b) ) ROM_LOAD16_BYTE( "e82a11.f5", 0x100001, 0x20000, CRC(141ced2e) SHA1(90b5be2e488ad2793750225ab20c1649d709b578) ) ROM_REGION( 0x80000, "gfx3", 0 ) ROM_LOAD( "x82a08.d6", 0x000000, 0x80000, CRC(51cfd790) SHA1(208f00b1ccf420fe891dd30684481bf871c1aa63) ) ROM_REGION( 0x80000, "gfx4", 0 ) ROM_LOAD( "x82a05.d8", 0x000000, 0x80000, CRC(fb65e0e0) SHA1(d560091cfad17af6539913db1279c62a680de4fc) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "e82a18.e12", 0x00000, 0x8000, CRC(1f52a7aa) SHA1(55bbba5bfad1eee4872939d23ac643aa3074b3cf) ) ROM_LOAD16_BYTE( "e82a17.e9", 0x00001, 0x8000, CRC(f91d77a1) SHA1(a650a68e7e75719819fd04dda86d7fc8849dfe7d) ) ROM_REGION( 0x040000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x82a02.e19", 0x00000, 0x040000, CRC(90fe700f) SHA1(bf7f9955a2cb1af43a272bf3366ff8c09ff6f7e6) ) ROM_REGION( 0x0100, "user2", 0 ) ROM_LOAD( "x82a19.l4", 0x0000, 0x0100, CRC(7ed947b4) SHA1(40c74a17976fab5d7f9da367083764934bb87281) ) // N82S129AN - priority (not used) ROM_END ROM_START( reikaids ) ROM_REGION( 0x02c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "j82c01.j14", 0x010000, 0x01c000, CRC(50fcc451) SHA1(ad717b8300f0903ef136569cf933b8af0e67eb6b) ) ROM_CONTINUE( 0x00c000, 0x004000) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x82a04.e20", 0x000000, 0x040000, CRC(52c9028a) SHA1(9d5e37b2f741d5c0e64ba3d674a72330058b96f2) ) ROM_REGION( 0x200000, "gfx1", 0 ) ROM_LOAD( "x82a13.d2", 0x000000, 0x80000, CRC(954c8844) SHA1(94e09009d0ad40a62f2a92cd5bd500ffe2c4650a) ) ROM_LOAD( "x82a14.d1", 0x080000, 0x80000, CRC(a748305e) SHA1(ee01025820a0915621d2c056d65e67a84a5f724c) ) ROM_LOAD( "x82a15.f2", 0x100000, 0x80000, CRC(c50f7047) SHA1(13fcd1abaf88c759e747cf5f2c94a522276945c9) ) ROM_LOAD( "x82a16.f1", 0x180000, 0x80000, CRC(b270094a) SHA1(edd4f7e3fd082c12758d82ea6eba2a060398b9ef) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD( "x82a09.d5", 0x000000, 0x80000, CRC(c496b187) SHA1(8ec4e09469c9f425681671f5ddb2d2d8768af42b) ) ROM_LOAD( "x82a10.d4", 0x080000, 0x80000, CRC(4243fe28) SHA1(01260543a6f61f46ba56840c1b96ecedf637451c) ) ROM_REGION( 0x080000, "gfx3", 0 ) ROM_LOAD( "x82a08.d6", 0x000000, 0x80000, CRC(51cfd790) SHA1(208f00b1ccf420fe891dd30684481bf871c1aa63) ) ROM_REGION( 0x080000, "gfx4", 0 ) ROM_LOAD( "x82a05.d8", 0x000000, 0x80000, CRC(fb65e0e0) SHA1(d560091cfad17af6539913db1279c62a680de4fc) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "e82a18.e12", 0x00000, 0x8000, CRC(1f52a7aa) SHA1(55bbba5bfad1eee4872939d23ac643aa3074b3cf) ) ROM_LOAD16_BYTE( "e82a17.e9", 0x00001, 0x8000, CRC(f91d77a1) SHA1(a650a68e7e75719819fd04dda86d7fc8849dfe7d) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x82a02.e19", 0x00000, 0x040000, CRC(90fe700f) SHA1(bf7f9955a2cb1af43a272bf3366ff8c09ff6f7e6) ) ROM_REGION( 0x0100, "user2", 0 ) ROM_LOAD( "x82a19.l4", 0x0000, 0x0100, CRC(7ed947b4) SHA1(40c74a17976fab5d7f9da367083764934bb87281) ) // N82S129AN - priority (not used) ROM_END ROM_START( battlcry ) ROM_REGION( 0x02c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "s88e01.j13", 0x010000, 0x01c000, CRC(b08438fe) SHA1(41a0fcdabee449081840848c45983984d7153d1b) ) ROM_CONTINUE( 0x00c000, 0x004000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "s88b04.f20", 0x000000, 0x040000, CRC(c54b5a5e) SHA1(421082af349b170d74f5214d8b5eed44db472749) ) ROM_REGION( 0x200000, "gfx1", 0 ) ROM_LOAD( "s88c13.e2", 0x000000, 0x80000, CRC(8103f007) SHA1(fcc51e57a1df572ad00000e03db1f5f949dea619) ) ROM_LOAD( "s88c14.e1", 0x080000, 0x80000, CRC(a7b5fafb) SHA1(7a9448bf13ee680c99bc19a6fac7a14d6ce8ddfc) ) ROM_LOAD( "s88c15.f2", 0x100000, 0x80000, CRC(597d833b) SHA1(d0c22981b105c1b4b37eae64964af8b683cc4687) ) ROM_LOAD( "s88c16.f1", 0x180000, 0x80000, CRC(9ca1c1a1) SHA1(30bbb47503631295a16bdd77a5bc08681dd7c63e) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD( "s88c09.e5", 0x000000, 0x80000, CRC(8f77ac3e) SHA1(5903a167ddf69284035967876ef46d7d09582574) ) ROM_LOAD( "s88c10.e4", 0x080000, 0x80000, CRC(cb44371e) SHA1(96ac9aa0034152ba88afc373475928ad6d9ecd29) ) ROM_REGION( 0x080000, "gfx3", 0 ) ROM_LOAD( "s88c08.e6", 0x000000, 0x80000, CRC(a989cfc2) SHA1(11c39a2ddd5e4be150d2f2ce332e312907df2377) ) ROM_REGION( 0x080000, "gfx4", 0 ) ROM_LOAD( "s88c05.e7", 0x000000, 0x80000, CRC(e7f13340) SHA1(05b0f3ca369c95d4fd50cd9617fc044ad7bdf0d3) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "s88b18.f10", 0x00000, 0x8000, CRC(fa432edc) SHA1(55c01b6a1175539facdfdd0c3c49d878a59156a4) ) ROM_LOAD16_BYTE( "s88b17.f9", 0x00001, 0x8000, CRC(7c55568e) SHA1(1e599cd00abe7b67bcb0c8d3f0c467a99ef79658) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "s88b02.f19", 0x00000, 0x040000, CRC(7044a542) SHA1(8efaa512f62fe9a37d2474c435c549118c019d67) ) ROM_REGION( 0x0100, "user2", 0 ) ROM_LOAD( "s88a19.l5", 0x0000, 0x0100, CRC(c8ead41e) SHA1(d1e733691de9f9b71c9724de73086d36f381fc74) ) // priority (not used) ROM_END ROM_START( battlcryc ) ROM_REGION( 0x02c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "s88c01.j14", 0x010000, 0x01c000, CRC(4aa6d637) SHA1(e10c6c4a6adeb3b4837ebe5ff0a49ec1204b2e54) ) // 27C1000 ROM_CONTINUE( 0x00c000, 0x004000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "s88b04.f20", 0x000000, 0x040000, CRC(c54b5a5e) SHA1(421082af349b170d74f5214d8b5eed44db472749) ) ROM_REGION( 0x200000, "gfx1", 0 ) ROM_LOAD( "s88c13.e2", 0x000000, 0x80000, CRC(8103f007) SHA1(fcc51e57a1df572ad00000e03db1f5f949dea619) ) ROM_LOAD( "s88c14.e1", 0x080000, 0x80000, CRC(a7b5fafb) SHA1(7a9448bf13ee680c99bc19a6fac7a14d6ce8ddfc) ) ROM_LOAD( "s88c15.f2", 0x100000, 0x80000, CRC(597d833b) SHA1(d0c22981b105c1b4b37eae64964af8b683cc4687) ) ROM_LOAD( "s88c16.f1", 0x180000, 0x80000, CRC(9ca1c1a1) SHA1(30bbb47503631295a16bdd77a5bc08681dd7c63e) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD( "s88c09.e5", 0x000000, 0x80000, CRC(8f77ac3e) SHA1(5903a167ddf69284035967876ef46d7d09582574) ) ROM_LOAD( "s88c10.e4", 0x080000, 0x80000, CRC(cb44371e) SHA1(96ac9aa0034152ba88afc373475928ad6d9ecd29) ) ROM_REGION( 0x080000, "gfx3", 0 ) ROM_LOAD( "s88c08.e6", 0x000000, 0x80000, CRC(a989cfc2) SHA1(11c39a2ddd5e4be150d2f2ce332e312907df2377) ) ROM_REGION( 0x080000, "gfx4", 0 ) ROM_LOAD( "s88c05.e7", 0x000000, 0x80000, CRC(e7f13340) SHA1(05b0f3ca369c95d4fd50cd9617fc044ad7bdf0d3) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "s88b18.f10", 0x00000, 0x8000, CRC(fa432edc) SHA1(55c01b6a1175539facdfdd0c3c49d878a59156a4) ) ROM_LOAD16_BYTE( "s88b17.f9", 0x00001, 0x8000, CRC(7c55568e) SHA1(1e599cd00abe7b67bcb0c8d3f0c467a99ef79658) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "s88b02.f19", 0x00000, 0x040000, CRC(7044a542) SHA1(8efaa512f62fe9a37d2474c435c549118c019d67) ) ROM_REGION( 0x0100, "user2", 0 ) ROM_LOAD( "s88a19.l5", 0x0000, 0x0100, CRC(c8ead41e) SHA1(d1e733691de9f9b71c9724de73086d36f381fc74) ) // priority (not used) ROM_END ROM_START( battlcryp ) // prototype presented at AOU 1989 ROM_REGION( 0x02c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "s88_b01.ic31", 0x010000, 0x01c000, CRC(8dae51b5) SHA1(52a4ec602c9c5bb185dd66b4b98dbfaa91189ced) ) // 27C1000 ROM_CONTINUE( 0x00c000, 0x004000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code, identical to the released game but split in 27C1000 ROMs */ ROM_LOAD( "s88_b04_1.ic32", 0x000000, 0x020000, CRC(9995c869) SHA1(9b68d1a15499fed216966ef3a3b68e6381dc01ad) ) ROM_LOAD( "s88_b04_2.ic55", 0x020000, 0x020000, CRC(aaa2dabe) SHA1(5928c5d265a5d6e521285a8ba29e70ed1887a5c9) ) ROM_REGION( 0x200000, "gfx1", 0 ) /* identical to the released game but split in 27C1000 ROMs */ ROM_LOAD16_BYTE( "s88_b13_1.v30", 0x000000, 0x20000, CRC(913e11df) SHA1(766b9cb1a39697db88f25a9ffc58724699ab9283) ) ROM_LOAD16_BYTE( "s88_b13_2.v31", 0x000001, 0x20000, CRC(16069926) SHA1(502795838740b7d8641ae3308b7c56f540a9719b) ) ROM_LOAD16_BYTE( "s88_b13_3.v32", 0x040000, 0x20000, CRC(95fc246f) SHA1(7b5d24cb7529aa4064f6bafa75172e3ce63d17c1) ) ROM_LOAD16_BYTE( "s88_b13_4.v33", 0x040001, 0x20000, CRC(0eeb1374) SHA1(cae2890248b502888836d73d2d2067fae1a4d589) ) ROM_LOAD16_BYTE( "s88_b14_1.v34", 0x080000, 0x20000, CRC(61beb857) SHA1(29d390b7f844905ad07e8c6b9fb87b3f7e01cae0) ) ROM_LOAD16_BYTE( "s88_b14_2.v35", 0x080001, 0x20000, CRC(4a1fec65) SHA1(7f69cdb7e2140114a40562865bf9bdd3df4d2205) ) ROM_LOAD16_BYTE( "s88_b14_3.v36", 0x0c0000, 0x20000, CRC(2c95a5b4) SHA1(2e2e5206b20b1f3c9323e2e4c78ea29e3dabb1b8) ) ROM_LOAD16_BYTE( "s88_b14_4.v37", 0x0c0001, 0x20000, CRC(96f713a3) SHA1(97fd143341e267344dd40df71a586bc25540aa95) ) ROM_LOAD16_BYTE( "s88_b15_1.v38", 0x100000, 0x20000, CRC(e106bc68) SHA1(1e049bf3c705db33b4629d3f8da3011a2aaaf7dd) ) ROM_LOAD16_BYTE( "s88_b15_2.v39", 0x100001, 0x20000, CRC(cb6d7f09) SHA1(334d89ffe74f067820ef34a68ff70a2b2d0480a7) ) ROM_LOAD16_BYTE( "s88_b15_3.v3a", 0x140000, 0x20000, CRC(4bc06e17) SHA1(681b994f090799e68922c2de2a0c7d2ccceec5dc) ) ROM_LOAD16_BYTE( "s88_b15_4.v3b", 0x140001, 0x20000, CRC(ffeb09c3) SHA1(667893d589634cddb87fd459dceb0fd7bb151730) ) ROM_LOAD16_BYTE( "s88_b16_1.v3c", 0x180000, 0x20000, CRC(bf6fc926) SHA1(3c084d5e742cfd093246e05b1c9537af944ff080) ) ROM_LOAD16_BYTE( "s88_b16_2.v3d", 0x180001, 0x20000, CRC(5b3afa9c) SHA1(08e65108ba2ae8e9f01104961d9c5462b5607ad5) ) ROM_LOAD16_BYTE( "s88_b16_3.v3e", 0x1c0000, 0x20000, CRC(df7a54e8) SHA1(a76a5f80a43b54800eb56fe5c20fb2b582b6d737) ) ROM_LOAD16_BYTE( "s88_b16_4.v3f", 0x1c0001, 0x20000, CRC(fdbff33d) SHA1(10f4ebc1f7e42063b5ee10cb2e2f6b904bff4bc8) ) ROM_REGION( 0x100000, "gfx2", 0 ) /* identical to the released game but split in 27C1000 ROMs */ ROM_LOAD16_BYTE( "s88_b09_1.v20", 0x000000, 0x20000, CRC(bfa2d6d3) SHA1(a10c9433c3215a80a74a8e46bd92595811073237) ) ROM_LOAD16_BYTE( "s88_b09_2.v21", 0x000001, 0x20000, CRC(e1430cf9) SHA1(ec9b373b050f34219791f6309166a2d3abc43bc9) ) ROM_LOAD16_BYTE( "s88_b09_3.v22", 0x040000, 0x20000, CRC(54cb22c7) SHA1(5c705fc13f7c866ecf3f51bd115c3dc58884a545) ) ROM_LOAD16_BYTE( "s88_b09_4.v23", 0x040001, 0x20000, CRC(544f313d) SHA1(cec44c863737e80a2909f0b84d05802048bcb7a3) ) ROM_LOAD16_BYTE( "s88_b10_1.v24", 0x080000, 0x20000, CRC(9bc86933) SHA1(56fdc99636262683bd6651b4ab021a5e34524c76) ) ROM_LOAD16_BYTE( "s88_b10_2.v25", 0x080001, 0x20000, CRC(43e3ba91) SHA1(ddd69c0513c865ea1322784b275622bc41464c9b) ) ROM_LOAD16_BYTE( "s88_b10_3.v26", 0x0c0000, 0x20000, CRC(d3672c33) SHA1(27c81d2c2257c613975e0b8dc41753c85305ddce) ) ROM_LOAD16_BYTE( "s88_b10_4.v27", 0x0c0001, 0x20000, CRC(ae73723e) SHA1(49e1ab0a2626149f5986bbecf531685375b3695a) ) ROM_REGION( 0x080000, "gfx3", 0 ) /* identical to the released game but split in 27C1000 ROMs */ ROM_LOAD16_BYTE( "s88_b08_1.v10", 0x000000, 0x20000, CRC(5132cd98) SHA1(8999aa64ff6f5c483ae71aab4699fe6ee3169382) ) ROM_LOAD16_BYTE( "s88_b08_2.v11", 0x000001, 0x20000, CRC(fa661846) SHA1(745a15b801479e451fdb513ec4f334f438ba92c8) ) ROM_LOAD16_BYTE( "s88_b08_3.v12", 0x040000, 0x20000, CRC(caabbf44) SHA1(d1957121012797372a93689a34ab8f0c3a5130af) ) ROM_LOAD16_BYTE( "s88_b08_4.v13", 0x040001, 0x20000, CRC(257aacde) SHA1(0ac577864eedc2f778224f91235a011110a7006a) ) ROM_REGION( 0x080000, "gfx4", 0 ) /* identical to the released game but split in 27C1000 ROMs */ ROM_LOAD16_BYTE( "s88_b05_1.v00", 0x000000, 0x20000, CRC(913e11df) SHA1(766b9cb1a39697db88f25a9ffc58724699ab9283) ) ROM_LOAD16_BYTE( "s88_b05_2.v01", 0x000001, 0x20000, CRC(16069926) SHA1(502795838740b7d8641ae3308b7c56f540a9719b) ) ROM_LOAD16_BYTE( "s88_b05_3.v02", 0x040000, 0x20000, CRC(3bca50bd) SHA1(b9b8c19ea4e6ff09c3032c18d246ed496552741e) ) ROM_LOAD16_BYTE( "s88_b05_4.v03", 0x040001, 0x20000, CRC(c526d508) SHA1(fa7ec24a9f6fdaaf1a1b32b4b383e8738ad1c7d1) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "s88_b18", 0x00000, 0x8000, CRC(fa432edc) SHA1(55c01b6a1175539facdfdd0c3c49d878a59156a4) ) // 27c256 ROM_LOAD16_BYTE( "s88_b17", 0x00001, 0x8000, CRC(7c55568e) SHA1(1e599cd00abe7b67bcb0c8d3f0c467a99ef79658) ) // 27c256 ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data, identical to the released game but split in 27C1000 ROMs */ ROM_LOAD( "s88_b02_1.ic28", 0x00000, 0x020000, CRC(93d8c8ec) SHA1(bb1fcf4d32db6885d0c78416211c20decc48d266) ) ROM_LOAD( "s88_b02_2.ic27", 0x20000, 0x020000, CRC(8918327b) SHA1(445c0252ec8e71423e77c75190f9524a90f918a9) ) ROM_REGION( 0x0100, "user2", 0 ) ROM_LOAD( "s88_a19.ic42", 0x0000, 0x0100, CRC(c8ead41e) SHA1(d1e733691de9f9b71c9724de73086d36f381fc74) ) // 82s129, priority (not used) ROM_END ROM_START( mjkojink ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x83j01.16e", 0x010000, 0xc000, CRC(91f90376) SHA1(d452f538f4a1b774640ced49f0ab2784b112e8ba) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x83b02.9g", 0x00000, 0x40000, CRC(46a11578) SHA1(4ff7797808610b4bb0550be71acc49bbd8556fad) ) ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD32_BYTE( "x83b14.1f", 0, 0x40000, CRC(2bcd7557) SHA1(1263a038a294fb521bdf315e8ac1198a42f68415) ) ROM_LOAD32_BYTE( "x83b15.3f", 1, 0x40000, CRC(7d780e22) SHA1(f887f1a8e5fb65e560cb4987ae21a0c9100ebff0) ) ROM_LOAD32_BYTE( "x83b16.4f", 2, 0x40000, CRC(5420a3f2) SHA1(0161eb2218d3e9cc018c3c2623de58855ab1a608) ) ROM_LOAD32_BYTE( "x83b17.6f", 3, 0x40000, CRC(96bcdf83) SHA1(5568c15016a9cd68909aaf29a0bbe6659fdcefc9) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "x83b10.1c", 0, 0x40000, CRC(500bfeea) SHA1(cf60f6158611bfb360c7c97597a9d416530bec9e) ) ROM_LOAD32_BYTE( "x83b11.3c", 1, 0x40000, CRC(2ef77717) SHA1(7d09dc3d73acaf910141598959fdc3501e17ddde) ) ROM_LOAD32_BYTE( "x83b12.4c", 2, 0x40000, CRC(2035009d) SHA1(8a2aadcc49ac7e68dfabe5ea66b607459a89045d) ) ROM_LOAD32_BYTE( "x83b13.6c", 3, 0x40000, CRC(53800df2) SHA1(5f18052a2d6afd27ff898ab597bb4e92fad238d7) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x83a19.4k", 0x00000, 0x8000, CRC(d29c9ef0) SHA1(c4e2c0c3c9c7abee1a965d6842956cdf98a76ad4) ) ROM_LOAD16_BYTE( "x83a18.3k", 0x00001, 0x8000, CRC(c3351952) SHA1(036be91ca428c5df016dd777bd658cb00f44ee3c) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x83b03.12e", 0x0000, 0x40000, CRC(4ba8b5ec) SHA1(cee77583f2f7b7fdba7e0f17e4d1244891488d36) ) ROM_END ROM_START( mjjoship ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x73_l01.16e", 0x010000, 0xc000, CRC(df950025) SHA1(3dc22c0a8cf03cff7310fbff36f83804019a5337) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x73_b02.9g", 0x00000, 0x20000, CRC(6b01503b) SHA1(2e1575dac0b9b7c7233a3b8262a99a10e24ec813) ) ROM_RELOAD( 0x20000, 0x20000 ) ROM_REGION( 0x80000, "gfx1", 0 ) ROM_LOAD32_BYTE( "x73a14.1f", 0, 0x20000, CRC(42f429a5) SHA1(41f64258a65b56f818f8a6ecddab606d0bdc11ab) ) ROM_LOAD32_BYTE( "x73a15.3f", 1, 0x20000, CRC(2d827236) SHA1(d392dc64f136fd2ef19a2874758ad7804741882a) ) ROM_IGNORE( 0x20000 ) ROM_LOAD32_BYTE( "x73a16.4f", 2, 0x20000, CRC(c606cd02) SHA1(d316f11ad56359c8ae74858a84b373dd06934888) ) ROM_IGNORE( 0x20000 ) ROM_LOAD32_BYTE( "x73a17.6f", 3, 0x20000, CRC(2c0fdbc9) SHA1(3ae5b590db4705deeaeff93680a10ca980e6264f) ) ROM_IGNORE( 0x20000 ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "x73a10.1c", 0, 0x40000, CRC(e6663a99) SHA1(361503c16e32977c8f6b9c5ff981002ac0f97426) ) ROM_LOAD32_BYTE( "x73a11.3c", 1, 0x40000, CRC(d8a35ebe) SHA1(b6e12db38ddd6dcefa8335b92c0a6e269a6a1e9a) ) ROM_LOAD32_BYTE( "x73a12.4c", 2, 0x40000, CRC(f3b6ad98) SHA1(d91eeffd18684300809c99fa93d4ac0188530ff7) ) ROM_LOAD32_BYTE( "x73a13.6c", 3, 0x40000, CRC(30ff8c5f) SHA1(e51d89f6b5db0d8e2c22a046337993f962f6ba8c) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x73_c19.4k", 0x00000, 0x8000, CRC(f4bdce8a) SHA1(e3168d6aa6f8cd24b497706a117c77353d1c6ef3) ) ROM_LOAD16_BYTE( "x73_c18.3k", 0x00001, 0x8000, CRC(1ab265cc) SHA1(24dced438a28ea9eb2f06c8859c5c07f4d975bfd) ) ROM_REGION( 0x20000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x73a03.12e", 0x0000, 0x20000, CRC(fd32eb8c) SHA1(584afb1ed2da776a4ff9c0b9eb2906c914b28928) ) ROM_END ROM_START( vitaminc ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x90e01.bin", 0x010000, 0xc000, CRC(bc982525) SHA1(30f5e9ab27f799b895a3d979109e331603d94249) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x90a02.bin", 0x00000, 0x40000, CRC(811f540a) SHA1(21993e99835a8995da28c24565b8e5dcc7aeb23e) ) ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD32_BYTE( "x90a14.bin", 0, 0x40000, CRC(4b49d182) SHA1(2658175a23641cf6a4c989940ec2ce31b64ad53e) ) ROM_LOAD32_BYTE( "x90a15.bin", 1, 0x40000, CRC(5e9016c2) SHA1(5255c1f05f1308ba6fe8b6655eb251a6e4a30a37) ) ROM_LOAD32_BYTE( "x90a16.bin", 2, 0x40000, CRC(b8843000) SHA1(6d7b02334603f6abd64edcba8fd2f082839c4811) ) ROM_LOAD32_BYTE( "x90a17.bin", 3, 0x40000, CRC(d74a843c) SHA1(0a0236390f47bb96bf39baaba9961130b26f70d7) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "x90a10.bin", 0, 0x40000, CRC(ee9fa36f) SHA1(c8864af92553f44180158dc1b34c9e1b81dfcd7f) ) ROM_LOAD32_BYTE( "x90a11.bin", 1, 0x40000, CRC(b77d9ef4) SHA1(bb49b0dc28385c7052ff65ffc2c8446b37081965) ) ROM_LOAD32_BYTE( "x90a12.bin", 2, 0x40000, CRC(da6a65d1) SHA1(3ab3a9e9c76dfc02579bf2fc390c23d24fe5a901) ) ROM_LOAD32_BYTE( "x90a13.bin", 3, 0x40000, CRC(4da4553b) SHA1(da6fd2cfd5b027afe7e900f90128a25779acb15f) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x90b19.bin", 0x00000, 0x8000, CRC(d0022cfb) SHA1(f384964a09fe6c1f8a993f5da67d81a23df22879) ) ROM_LOAD16_BYTE( "x90b18.bin", 0x00001, 0x8000, CRC(fe1de95d) SHA1(e94282065b3c69de7c9ea214c752745c18c38cb7) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x90a03.bin", 0x0000, 0x40000, CRC(35d5b4e6) SHA1(1ea4d03946aad33d33a817f83d20e7ad8faace6d) ) ROM_END ROM_START( mjyougo ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x91c01.bin", 0x010000, 0xc000, CRC(e28e8c21) SHA1(8039d764fb48269f0cab549c5a8861c05ecb1ef1) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x91a02.bin", 0x00000, 0x40000, CRC(995b1399) SHA1(262f3d7ccffdaa578466d390d790f89186b3c993) ) ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD32_BYTE( "x91a14.bin", 0, 0x40000, CRC(b165fbe8) SHA1(eaad2fb26aedd07c4ec0a8bf91cb10f32c76cb83) ) ROM_LOAD32_BYTE( "x91a15.bin", 1, 0x40000, CRC(9b60bf2e) SHA1(13c1efbdc1f9f88f0d51dfd76c0128a490f63527) ) ROM_LOAD32_BYTE( "x91a16.bin", 2, 0x40000, CRC(db4a1655) SHA1(f57c7faaf7632a13af4a7b18aa8f81a2042e4eb8) ) ROM_LOAD32_BYTE( "x91a17.bin", 3, 0x40000, CRC(4f35ec3b) SHA1(5bf2d9eed69cc5e9358d95c0fba8b2b916274288) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "x91a10.bin", 0, 0x40000, CRC(cb364158) SHA1(5255756bfa1145b2773720a39e88fdb67f26e2e5) ) ROM_LOAD32_BYTE( "x91a11.bin", 1, 0x40000, CRC(f3655577) SHA1(14eb0eda35015718f2e08da10d00ac8a381b4400) ) ROM_LOAD32_BYTE( "x91a12.bin", 2, 0x40000, CRC(149e8f86) SHA1(660c05deabb0ce43b2f5b936c035df1a2b029fc6) ) ROM_LOAD32_BYTE( "x91a13.bin", 3, 0x40000, CRC(59f7a140) SHA1(daad9433742b6292c8299935483f07f171436d17) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x91a19.bin", 0x00000, 0x8000, CRC(f63493df) SHA1(0e436bffb03fa6218363ee205c4fe5f4e16a24cc) ) ROM_LOAD16_BYTE( "x91a18.bin", 0x00001, 0x8000, CRC(b3541265) SHA1(d8e79c2856bb81e9ad9b79c012d64663a8997bbd) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x91a03.bin", 0x0000, 0x40000, CRC(4863caa2) SHA1(6ef511cb4d184d4705eb0fd3eb3d82daad49564a) ) ROM_END ROM_START( mjkinjas ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x07c01.bin", 0x010000, 0xc000, CRC(e6534904) SHA1(59c092f0369fc893763ad4b96551e0b4c2430a6a) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x07a02.bin", 0x00000, 0x40000, CRC(31396a5b) SHA1(c444f0a651da70c050a4c69bd09c31fc80dbf1de) ) ROM_REGION( 0x200000, "gfx1", 0 ) ROM_LOAD32_BYTE( "x07a14.bin", 0, 0x80000, CRC(02829ede) SHA1(227d2bcbaafab19ab2c3ff9dad17a0792d114466) ) ROM_LOAD32_BYTE( "x07a15.bin", 1, 0x80000, CRC(9c8b55db) SHA1(2142c0a6a6b89b2e07ac50be5c5af159610a1922) ) ROM_LOAD32_BYTE( "x07a16.bin", 2, 0x80000, CRC(7898a340) SHA1(a04d71c5b964509d591659f8f09ea5f38080c0ae) ) ROM_LOAD32_BYTE( "x07a17.bin", 3, 0x80000, CRC(bf1f6540) SHA1(94465a2dc20bc2b35d5518a485025b721ef87c49) ) ROM_REGION( 0x200000, "gfx2", 0 ) ROM_LOAD32_BYTE( "x07a10.bin", 0, 0x80000, CRC(3bfab66e) SHA1(149d90d6fd1357b407bd9f2fe495ee28d55c9122) ) ROM_LOAD32_BYTE( "x07a11.bin", 1, 0x80000, CRC(e8f610e3) SHA1(52970a56e67f6b36e1693c06207cbf14ebb96931) ) ROM_LOAD32_BYTE( "x07a12.bin", 2, 0x80000, CRC(911f0972) SHA1(90b511725de3a226326ddc39106071230f3d3bc6) ) ROM_LOAD32_BYTE( "x07a13.bin", 3, 0x80000, CRC(59be4c77) SHA1(1ba858c6b1e91753204e10738ca685a4df550d64) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x07a19.bin", 0x00000, 0x8000, CRC(7acabdf8) SHA1(90e39c1dd3e32c057ab8bfcd82d022231a06847c) ) ROM_LOAD16_BYTE( "x07a18.bin", 0x00001, 0x8000, CRC(d247bd5a) SHA1(298d62395ea7c687ed509863aaf3d8b758743cd8) ) ROM_REGION( 0x80000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x07a03.bin", 0x0000, 0x80000, CRC(f5ff3e72) SHA1(e3489a3b8988677866aadd41cb99f146217022ce) ) ROM_END ROM_START( jogakuen ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "a01.bin", 0x010000, 0xc000, CRC(a189490a) SHA1(0d9f6389d4b16c3b885cdc8be20b19db25812aad) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "a02.bin", 0x00000, 0x40000, CRC(033add6c) SHA1(fc6b9333722228ba4270b1ba520e32e624b251c2) ) ROM_REGION( 0x200000, "gfx1", 0 ) ROM_LOAD32_BYTE( "a14.bin", 0, 0x80000, CRC(27ad91d7) SHA1(6d96b030a7f1f8c90fb31582b72acbbc759d1e2f) ) ROM_LOAD32_BYTE( "a15.bin", 1, 0x80000, CRC(e3b2753b) SHA1(c7923da2a718b70c4359d2726e8f8744f55e0389) ) ROM_LOAD32_BYTE( "a16.bin", 2, 0x80000, CRC(6e2c61fc) SHA1(57b33614b4968d5f88741ff0a52c9a1f28a14da7) ) ROM_LOAD32_BYTE( "a17.bin", 3, 0x80000, CRC(2f79d467) SHA1(b82df890cb12c33f6cc58676c02595be7614fd12) ) ROM_REGION( 0x200000, "gfx2", 0 ) ROM_LOAD32_BYTE( "a10.bin", 0, 0x80000, CRC(a453759a) SHA1(62b7a41ea97bc808f3250505a9ffeaf53f1b9308) ) ROM_LOAD32_BYTE( "a11.bin", 1, 0x80000, CRC(252cf007) SHA1(7b3dd558ca00f6855ac037f30e348265a9778f7d) ) ROM_LOAD32_BYTE( "a12.bin", 2, 0x80000, CRC(5db85eb5) SHA1(01291b98676a8f5116739f66e517fe05f806514a) ) ROM_LOAD32_BYTE( "a13.bin", 3, 0x80000, CRC(fe04d5b7) SHA1(965c095ce4f8f494d91370fe798be9214c2195f2) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "a19.bin", 0x00000, 0x8000, CRC(9a3d9d5e) SHA1(1ab20fc5b7ab1c2508c76b0051923446c409e074) ) ROM_LOAD16_BYTE( "a18.bin", 0x00001, 0x8000, CRC(3289edd4) SHA1(7db4fbda8a22c64dc29ce6b4b63204cebd641351) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "a03.bin", 0x0000, 0x40000, CRC(bb1507ab) SHA1(465f45c9cae2d4e064b784cc5ba25b60839e4b5f) ) ROM_END ROM_START( lemnangl ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "x02_d01.16e", 0x010000, 0xc000, CRC(4c2fae05) SHA1(86516399bd1eb1565b446dfa0f9a974bde6f9af2) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "x02a02.9g", 0x00000, 0x40000, CRC(e9aa8c80) SHA1(6db1345e20d53d8c69cebcac3b2a973fbcaa0e63) ) ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD32_BYTE( "x02a14.1f", 0, 0x40000, CRC(4aa2397b) SHA1(5716de828e5e8735d5e6be0f7cfa95c52b37418a) ) ROM_LOAD32_BYTE( "x02a15.3f", 1, 0x40000, CRC(d01986e2) SHA1(5889d771d5e13a12e650ee2e4885616373dcf828) ) ROM_LOAD32_BYTE( "x02a16.4f", 2, 0x40000, CRC(16fca216) SHA1(e6715888053748a6da93dc087535da8e0b1ba702) ) ROM_LOAD32_BYTE( "x02a17.6f", 3, 0x40000, CRC(7a6a96e7) SHA1(732e6f5ce0cac966aa8b6cfed3f39bb3ea30f57e) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "x02a10.1c", 0, 0x40000, CRC(e7164f57) SHA1(06f80ff72f12f2d821899c73051315bfa7b9bf7a) ) ROM_LOAD32_BYTE( "x02a11.3c", 1, 0x40000, CRC(73fb5d3d) SHA1(99a26ae495e6768756c354330a6a859cfd1b9781) ) ROM_LOAD32_BYTE( "x02a12.4c", 2, 0x40000, CRC(fc3a254a) SHA1(bf8172c00446b348b4432c71d92e8567ba50ab98) ) ROM_LOAD32_BYTE( "x02a13.6c", 3, 0x40000, CRC(9f63e7e0) SHA1(4bd8077a3700ccbc4c4a358342b1f9fd4cba8f10) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "x02_b19.5k", 0x00000, 0x8000, CRC(f75959bc) SHA1(59a1debc28263a7f5f9b775817232fffc6e63ac4) ) ROM_LOAD16_BYTE( "x02_b18.3k", 0x00001, 0x8000, CRC(3f1510b1) SHA1(a9892beb3d911ee91d7dd276d9c84d14ba3253d8) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "x02a03.12e", 0x0000, 0x40000, CRC(02ef0378) SHA1(6223a019fc7794872dd49151952c56892295a779) ) ROM_END ROM_START( mjikaga ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "m15a01.bin", 0x010000, 0xc000, CRC(938cc4fb) SHA1(f979c6eee0b72bf53be8c7ebbc4e1dc05bd447d4) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "m15a02.bin", 0x00000, 0x40000, CRC(375933dd) SHA1(e813f02e53dc892714cd0e81301606600b72535c) ) ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD32_BYTE( "m15a14.bin", 0, 0x40000, CRC(a685c452) SHA1(819486730cdd89572f5c6b6176e9694cf99a4264) ) ROM_LOAD32_BYTE( "m15a15.bin", 1, 0x40000, CRC(44153914) SHA1(f8149c2e5412eb2a93dd16bfcb4f618aeddf3ff9) ) ROM_LOAD32_BYTE( "m15a16.bin", 2, 0x40000, CRC(a4b0b8ac) SHA1(f6fd54c8c7ded3f7502c07b208e5f317669bc3f0) ) ROM_LOAD32_BYTE( "m15a17.bin", 3, 0x40000, CRC(bb9cb2ef) SHA1(4df3eb57b46cb3ca25d938bb54205487b2c06b6d) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "m15a10.bin", 0, 0x40000, CRC(0aeed38e) SHA1(9becd3d5d32ca9678e9211480139c3a1beabb98d) ) ROM_LOAD32_BYTE( "m15a11.bin", 1, 0x40000, CRC(a305e6e6) SHA1(a2c978050e70deb0244c660db800cba42eb3e2d0) ) ROM_LOAD32_BYTE( "m15a12.bin", 2, 0x40000, CRC(946b3f55) SHA1(17451cbd7b0c828444aaf2ff170f3a7104596c1d) ) ROM_LOAD32_BYTE( "m15a13.bin", 3, 0x40000, CRC(d9196955) SHA1(fa8fddbcd91b12d6cb918c0761ea478969a5a795) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "m15a19.bin", 0x00000, 0x8000, CRC(2f247acf) SHA1(468fee5a16c98751524e21ad0f608fc85c95ab86) ) ROM_LOAD16_BYTE( "m15a18.bin", 0x00001, 0x8000, CRC(2648ca07) SHA1(e4f5ed62b014a6e397ce611c2c592f795d112219) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "m15a03.bin", 0x0000, 0x40000, CRC(07e2e8f8) SHA1(61eed47c4136733059c1d96e98cadb8ac9078f95) ) ROM_END ROM_START( mjprivat ) ROM_REGION( 0x01c000, "maincpu", 0 ) /* 6809 Code */ ROM_LOAD( "311d01.16e", 0x010000, 0xc000, CRC(3b4f4676) SHA1(e308febb9c8d35b495b83b37daff7c56deba78fb) ) ROM_CONTINUE( 0x00c000, 0x4000 ) ROM_REGION( 0x40000, "audiocpu", 0) /* uPD7807 code */ ROM_LOAD( "311a02.9g", 0x00000, 0x40000, CRC(ae1d360a) SHA1(26a1e8d654ea2e4393a5267f0d9dab62149b4112) ) ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD32_BYTE( "311a14.1f", 0, 0x40000, CRC(e8741ece) SHA1(ba380c287236668d8ed8583fb9735ed88d2eb41b) ) ROM_LOAD32_BYTE( "311a15.3f", 1, 0x40000, CRC(51a5c226) SHA1(d527cc542a507fda6b55aec51e76a2dd019b9560) ) ROM_LOAD32_BYTE( "311a16.4f", 2, 0x40000, CRC(f4419416) SHA1(0e8aa0ef51e449354dce3c8563c5eee230039dc6) ) ROM_LOAD32_BYTE( "311a17.6f", 3, 0x40000, CRC(1edf5715) SHA1(717181ef596aac6fb556da75ac495f44b763840e) ) ROM_REGION( 0x100000, "gfx2", 0 ) ROM_LOAD32_BYTE( "311a10.1c", 0, 0x40000, CRC(6b15a5fc) SHA1(db19c4c8fae31357bd72821a74b277b7f9abccb4) ) ROM_LOAD32_BYTE( "311a11.3c", 1, 0x40000, CRC(b5faaf51) SHA1(7c6c72101d677d5f2e41ea6dc6490828f41d844c) ) ROM_LOAD32_BYTE( "311a12.4c", 2, 0x40000, CRC(ab26bb73) SHA1(3645d3f6767b0bcb43ce2e3b2ef3bdca37d446cf) ) ROM_LOAD32_BYTE( "311a13.6c", 3, 0x40000, CRC(f2f8f9a0) SHA1(d6b5dd68c85f9d506147f5ffeb60bdfad2bf0195) ) ROM_REGION( 0x010000, "proms", 0 ) /* static palette */ ROM_LOAD16_BYTE( "311a19.4k", 0x00000, 0x8000, CRC(dbb5569a) SHA1(e23a32667adc8eade7555adbac18dac268f08d3e) ) ROM_LOAD16_BYTE( "311a18.3k", 0x00001, 0x8000, CRC(a5ca7723) SHA1(d074c5c09a50abdb2b0ffdeacfc077a91b9204bf) ) ROM_REGION( 0x40000, "blit_rom", 0 ) /* blitter data */ ROM_LOAD( "311b03.12e", 0x0000, 0x40000, CRC(5722c341) SHA1(694e63261d91da48c0ed14a44fbc6c9c74b055d9) ) ROM_END ROM_START( mirderby ) ROM_REGION( 0x8000, "cpu0", 0 ) /* Z80 Code */ ROM_LOAD( "x70_a11.1g", 0x2000, 0x6000, CRC(b394eef7) SHA1(a646596d09b90eda44aaf8ccbf8f3fccfd3d5dad) ) // first 0x6000 bytes are blank! ROM_CONTINUE(0x0000, 0x2000) // main z80 code is here ROM_REGION( 0x10000, "cpu1", 0 ) /* M6809 code */ ROM_LOAD( "x70_c01.14e", 0x00000, 0x10000, CRC(d79d072d) SHA1(8e189931de9c4eb520c1ec2d0898d8eaba0f01b5) ) ROM_REGION( 0x10000, "maincpu", 0 ) /* M6809 code */ ROM_LOAD( "x70_b02.12e", 0x8000, 0x8000, CRC(76c9bb6f) SHA1(dd8893f3082d33d366247295e9531f8879c219c5) ) ROM_REGION( 0x8000, "gfx1", 0 ) // horse gfx ROM_LOAD( "x70_a03.8g", 0x0000, 0x8000, CRC(4e298b2d) SHA1(ae78327d1f30c8d19ef772b82803dab4d6b7b919)) ROM_REGION( 0x20000, "gfx2", 0 ) // fonts etc. ROM_LOAD( "x70_a04.5g", 0x0000, 0x20000, CRC(14392fdb) SHA1(dafdce473b2d2ebbdbf49fbd12f85c1ad69b2877) ) ROM_REGION( 0x300, "proms", 0 ) /* colours */ ROM_LOAD( "x70a07.8l", 0x000, 0x100, CRC(7d4c9712) SHA1(fe2a89841fdf5e4fd6cd41478ad2f29d28bed54d) ) ROM_LOAD( "x70a08.7l", 0x100, 0x100, CRC(c4e77174) SHA1(ada238ded69f01b4daeb0159a2c5c422977bb95e) ) ROM_LOAD( "x70a09.6l", 0x200, 0x100, CRC(d0187957) SHA1(6b36c1bccad24708cfa2fc78da08313f9bcfdbc0) ) ROM_END void homedata_state::init_reikaids() { m_priority = 0; } void homedata_state::init_battlcry() { m_priority = 1; /* priority and initial value for bank write */ } void homedata_state::init_mirderby() { } GAME( 1987, hourouki, 0, mrokumei, mjhokite, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Hourouki Part 1 - Seisyun Hen (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1987, mhgaiden, 0, mrokumei, mjhokite, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Hourouki Gaiden (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, mjhokite, 0, mrokumei, mjhokite, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Hourouki Okite (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, mjclinic, 0, mrokumei, mjhokite, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Clinic (Japan, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, mjclinica, mjclinic, mrokumei, mjhokite, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Clinic (Japan, set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, mrokumei, 0, mrokumei, mjhokite, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Rokumeikan (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1988, lastapos, 0, reikaids, reikaids, homedata_state, init_reikaids, ROT0, "Home Data", "The Last Apostle Puppetshow", MACHINE_SUPPORTS_SAVE ) GAME( 1988, reikaids, lastapos, reikaids, reikaids, homedata_state, init_reikaids, ROT0, "Home Data", "Reikai Doushi (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, battlcry, 0, reikaids, battlcry, homedata_state, init_battlcry, ROT0, "Home Data", "Battlecry (Version E)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1989, battlcryc, battlcry, reikaids, battlcry, homedata_state, init_battlcry, ROT0, "Home Data", "Battlecry (Version C)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1989, battlcryp, battlcry, reikaids, battlcry, homedata_state, init_battlcry, ROT0, "Home Data", "Battlecry (Prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1989, mjkojink, 0, pteacher, pteacher, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Kojinkyouju (Private Teacher) (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, mjjoship, 0, pteacher, mjjoship, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Joshi Pro-wres -Give up 5 byou mae- (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, vitaminc, 0, pteacher, pteacher, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Vitamin C (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, mjyougo, 0, pteacher, pteacher, homedata_state, empty_init, ROT0, "Home Data", "Mahjong-yougo no Kisotairyoku (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, mjkinjas, 0, mjkinjas, pteacher, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Kinjirareta Asobi (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1992?,jogakuen, 0, jogakuen, jogakuen, homedata_state, empty_init, ROT0, "Windom", "Mahjong Jogakuen (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, lemnangl, 0, lemnangl, pteacher, homedata_state, empty_init, ROT0, "Home Data", "Mahjong Lemon Angel (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, mjprivat, 0, lemnangl, pteacher, homedata_state, empty_init, ROT0, "Matoba", "Mahjong Private (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1991?,mjikaga, 0, mjikaga, mjikaga, homedata_state, empty_init, ROT0, "Mitchell", "Mahjong Ikaga Desu ka (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, mirderby, 0, mirderby, mirderby, homedata_state, init_mirderby, ROT0, "Home Data?", "Miracle Derby - Ascot", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )