// license:BSD-3-Clause // copyright-holders:Luca Elia /*************************************************************************** -= SunA 8 Bit Games =- driver by Luca Elia (l.elia@tin.it) Main CPU: Encrypted Z80 (Epoxy Module) Sound CPU: Z80 [Music] + Z80 [4 Bit PCM, Optional] Sound Chips: AY8910 + YM3812/YM2203 + DAC x 4 [Optional] + Samples [Optional] -------------------------------------------------------------------------------------- Year + Game Game PCB Epoxy CPU Samples Notes -------------------------------------------------------------------------------------- 88 Hard Head KRB-14 60138-0083 S562008 Yes Encryption + Protection 88 Rough Ranger K030087 ? S562008 Yes Not Encrypted 89 Spark Man KRB-16 60136-081 T568009 Yes Encryption + Protection 90 Star Fighter KRB-17 60484-0082 T568009 Yes Encryption + Protection 91 Hard Head 2 ? ? T568009 - Encryption + Protection 92 Brick Zone KRB-19 70523-0084 Yes - Encryption + Protection -------------------------------------------------------------------------------------- Notes: - hardhea2: in test mode press P1&P2 button 2 to see a picture of each level - Rough Ranger default dipswitch settings are based on the settings listed in the Sharp Image licensed Rough Ranger manual / NOTICE sheet dated 8-5-88 - rranger video: http://www.nicovideo.jp/watch/sm15788808 (not perfect: fireball masking, lev. 5; masking/missing legs, lev. 10) - hardhead video: https://youtu.be/zamQvXr9_xs - starfigh video: http://youtu.be/SIwV7wjvnHM (missing starfield effect!) - brickzn video: http://youtu.be/yfU1C7A3iZI (recorded from v6.0, Joystick version) ***************************************************************************/ #include "emu.h" #include "includes/suna8.h" #include "cpu/z80/z80.h" #include "machine/watchdog.h" #include "sound/2203intf.h" #include "sound/3812intf.h" #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/volt_reg.h" #include "speaker.h" #define SUNA8_MASTER_CLOCK XTAL(24'000'000) /*************************************************************************** ROMs Decryption ***************************************************************************/ /*************************************************************************** Hard Head ***************************************************************************/ void suna8_state::init_hardhead() { uint8_t *rom = memregion("maincpu")->base(); for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[8] = { 1,1,0,1,1,1,1,0 }; int table = ((i & 0x0c00) >> 10) | ((i & 0x4000) >> 12); if (swaptable[table]) rom[i] = bitswap<8>(rom[i], 7,6,5,3,4,2,1,0) ^ 0x58; } m_bank0d->set_base(memregion("maincpu")->base()); m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /* Non encrypted bootleg */ void suna8_state::init_hardhedb() { m_bank0d->set_base(memregion("maincpu")->base() + 0x48000); m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /*************************************************************************** Brick Zone ***************************************************************************/ uint8_t *suna8_state::brickzn_decrypt() { uint8_t *RAM = memregion("maincpu")->base(); size_t size = memregion("maincpu")->bytes(); uint8_t *decrypt = auto_alloc_array(machine(), uint8_t, size); int i; /* Opcodes and data */ for (i = 0; i < 0x50000; i++) { static const uint8_t opcode_swaptable[8] = { 1,1,1,0,0,1,1,0 }; static const uint8_t data_swaptable[16] = { 1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1 }; int opcode_swap = opcode_swaptable[((i & 0x00c) >> 2) | ((i & 0x040) >> 4)]; int data_swap = (i >= 0x8000) ? 0 : data_swaptable[(i & 0x003) | ((i & 0x008) >> 1) | ((i & 0x400) >> 7)]; uint8_t x = RAM[i]; if (data_swap) { x = bitswap<8>(x, 7,6,5,4,3,2,0,1); RAM[i] = bitswap<8>(x, 7,2,3,4,5,6,1,0) ^ 0x10; } if (opcode_swap) x ^= 0x80; if (opcode_swap || data_swap) x = bitswap<8>(x, 7,2,3,4,5,6,1,0) ^ 0x10; decrypt[i] = x; // Alternate data decryption, activated at run-time. Store in higher banks. if (i >= 0x10000) RAM[i+0x40000] = RAM[i] ^ 0x44; } return decrypt; } void suna8_state::init_brickzn_common() { m_decrypt = brickzn_decrypt(); // Non-banked opcodes m_bank0d->set_base(m_decrypt); // Data banks: 00-0f normal data decryption, 10-1f alternate data decryption: m_bank1->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000); // Opcode banks: 00-1f normal opcode decryption: m_bank1d->configure_entries(0, 16, m_decrypt + 0x10000, 0x4000); m_bank1d->configure_entries(16, 16, m_decrypt + 0x10000, 0x4000); } void suna8_state::init_brickzn() { init_brickzn_common(); // !!!!!! PATCHES !!!!!! // To do: ROM banking should be disabled here m_decrypt[0x11cc] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x11cd] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x11ce] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x335b] = 0xc9; // RET Z -> RET (to avoid: jp $C800) // NMI enable / source?? m_decrypt[0x1442] = 0xc9; // HALT -> RET m_decrypt[0x24C6] = 0x00; // HALT -> NOP m_decrypt[0x25A4] = 0x00; // HALT -> NOP } void suna8_state::init_brickznv5() { init_brickzn_common(); // !!!!!! PATCHES !!!!!! // To do: ROM banking should be disabled here m_decrypt[0x11bb] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x11bc] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x11bd] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x3349] = 0xc9; // RET Z -> RET (to avoid: jp $C800) // NMI enable / source?? m_decrypt[0x1431] = 0xc9; // HALT -> RET m_decrypt[0x24b5] = 0x00; // HALT -> NOP m_decrypt[0x2593] = 0x00; // HALT -> NOP } void suna8_state::init_brickznv4() { init_brickzn_common(); // !!!!!! PATCHES !!!!!! // To do: ROM banking should be disabled here m_decrypt[0x1190] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x1191] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x1192] = 0x00; // LD ($C040),A -> NOP m_decrypt[0x3337] = 0xc9; // RET Z -> RET (to avoid: jp $C800) // NMI enable / source?? m_decrypt[0x1406] = 0xc9; // HALT -> RET m_decrypt[0x2487] = 0x00; // HALT -> NOP m_decrypt[0x256c] = 0x00; // HALT -> NOP } void suna8_state::init_brickzn11() { m_bank1->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000); } /*************************************************************************** Hard Head 2 ***************************************************************************/ void suna8_state::init_hardhea2() { uint8_t *RAM = memregion("maincpu")->base(); size_t size = memregion("maincpu")->bytes(); uint8_t *decrypt = auto_alloc_array(machine(), uint8_t, size); m_bank0d->set_base(decrypt); /* Address lines scrambling */ memcpy(decrypt, RAM, size); for (int i = 0x00000; i < 0x50000; i++) { /* 0x1000 to scramble: dump screen rom10: 0y, 1y, 2n, 3n 0y,1y,2n,3n 4n?,5n, 6n, 7n 4n,5n,6n,7n 8?, 9n, an, bn 8n,9n,an,bn cy, dy, ey?, cy,dy,en,fn rom11: n rom12: n rom13: 0?, 1y, 2n, 3n ?,?,?,? (palettes) 4n, 5n, 6n, 7? ?,?,n,n (intro anim) 8?, 9n?,an, bn y,y,?,? (player anims) cn, dy, en, fn y,y,n,n */ static const uint8_t swaptable[0x50] = { 1,1,1,1,0,0,1,1, 0,0,0,0,0,0,0,0, // 8000-ffff not used 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0 }; int addr = i; if (swaptable[(i & 0xff000) >> 12]) addr = (addr & 0xf0000) | bitswap<16>(addr, 15,14,13,12,11,10,9,8,6,7,5,4,3,2,1,0); RAM[i] = decrypt[addr]; } /* Opcodes */ for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[32] = { 1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1, 1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0 }; static const uint8_t xortable[32] = { 0x04,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x04,0x45,0x00,0x04,0x00,0x04,0x00,0x00, 0x04,0x45,0x00,0x04,0x00,0x04,0x00,0x00,0x04,0x04,0x00,0x04,0x00,0x04,0x00,0x00 }; int table = (i & 1) | ((i & 0x400) >> 9) | ((i & 0x7000) >> 10); uint8_t x = RAM[i]; x = bitswap<8>(x, 7,6,5,3,4,2,1,0) ^ 0x41 ^ xortable[table]; if (swaptable[table]) x = bitswap<8>(x, 5,6,7,4,3,2,1,0); decrypt[i] = x; } /* Data */ for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[8] = { 1,1,0,1,0,1,1,0 }; if (swaptable[(i & 0x7000) >> 12]) RAM[i] = bitswap<8>(RAM[i], 5,6,7,4,3,2,1,0) ^ 0x41; } m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); membank("bank2")->configure_entries(0, 2, auto_alloc_array(machine(), uint8_t, 0x2000 * 2), 0x2000); } void suna8_state::init_hardhea2b() { // no address scramble? // code/data split in first ROM? m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); membank("bank2")->configure_entries(0, 2, auto_alloc_array(machine(), uint8_t, 0x2000 * 2), 0x2000); } /*************************************************************************** Star Fighter ***************************************************************************/ void suna8_state::init_starfigh() { uint8_t *RAM = memregion("maincpu")->base(); size_t size = memregion("maincpu")->bytes(); uint8_t *decrypt = auto_alloc_array(machine(), uint8_t, size); m_bank0d->set_base(decrypt); /* Address lines scrambling */ memcpy(decrypt, RAM, size); for (int i = 0; i < 0x50000; i++) { static const uint8_t swaptable[0x50] = { 1,1,1,1, 1,1,0,0, 0,0,0,0, 0,0,0,0, // 8000-ffff not used 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0 // bank $0e, 9c80 (boss 1) and 8350 (first wave) }; int addr = i; if (swaptable[(i & 0xff000) >> 12]) addr = bitswap<24>(addr, 23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,6,7,5,4,3,2,1,0); RAM[i] = decrypt[addr]; } /* Opcodes */ for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[32] = { 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; static const uint8_t xortable[32] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x41,0x01,0x00,0x00,0x00,0x00, 0x01,0x01,0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; int table = (i & 0x7c00) >> 10; uint8_t x = RAM[i]; x = bitswap<8>(x, 5,6,7,3,4,2,1,0) ^ 0x45 ^ xortable[table]; if (swaptable[table]) x = bitswap<8>(x, 5,6,7,4,3,2,1,0) ^ 0x04; decrypt[i] = x; } /* Data */ for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[8] = { 1,1,0,1,0,1,1,0 }; if (swaptable[(i & 0x7000) >> 12]) RAM[i] = bitswap<8>(RAM[i], 5,6,7,4,3,2,1,0) ^ 0x45; } // !!!!!! PATCHES !!!!!! decrypt[0x07c0] = 0xc9; // c080 bit 7 protection check // decrypt[0x083e] = 0x00; // sound latch disabling // decrypt[0x083f] = 0x00; // "" // decrypt[0x0840] = 0x00; // "" // decrypt[0x0cef] = 0xc9; // rombank latch check, corrupt d12d decrypt[0x2696] = 0xc9; // work ram writes disable, corrupt next routine decrypt[0x4e9a] = 0x00; // work ram writes disable, flip background sprite m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /*************************************************************************** Spark Man ***************************************************************************/ void suna8_state::init_sparkman() { uint8_t *RAM = memregion("maincpu")->base(); size_t size = memregion("maincpu")->bytes(); uint8_t *decrypt = auto_alloc_array(machine(), uint8_t, size); m_bank0d->set_base(decrypt); /* Address lines scrambling */ memcpy(decrypt, RAM, size); for (int i = 0; i < 0x50000; i++) { static const uint8_t swaptable[0x50] = { 1,1,1,1, 0,0,1,1, 0,0,0,0, 0,0,0,0, // 8000-ffff not used 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0 // bank $0e, $8xxx, $9xxx (hand in title screen) }; int addr = i; if (swaptable[(i & 0xff000) >> 12]) addr = bitswap<24>(addr, 23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,7,8,6,5,4,3,2,1,0); RAM[i] = decrypt[addr]; } /* Opcodes */ for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[32] = { 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1, 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }; static const uint8_t xortable[32] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00 }; int table = (i & 0x7c00) >> 10; uint8_t x = RAM[i]; x = bitswap<8>(x, 5,6,7,3,4,2,1,0) ^ 0x44 ^ xortable[table]; if (swaptable[table]) x = bitswap<8>(x, 5,6,7,4,3,2,1,0) ^ 0x04; decrypt[i] = x; } /* Data */ for (int i = 0; i < 0x8000; i++) { static const uint8_t swaptable[8] = { 1,1,1,0,1,1,0,1 }; if (swaptable[(i & 0x7000) >> 12]) RAM[i] = bitswap<8>(RAM[i], 5,6,7,4,3,2,1,0) ^ 0x44; } // !!!!!! PATCHES !!!!!! // c083 bit 7 protection decrypt[0x0ee0] = 0x00; decrypt[0x0ee1] = 0x00; decrypt[0x0ee2] = 0x00; // c083 bit 7 protection decrypt[0x1ac3] = 0x00; decrypt[0x1ac4] = 0x00; decrypt[0x1ac5] = 0x00; m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /*************************************************************************** Protection ***************************************************************************/ /*************************************************************************** Hard Head ***************************************************************************/ READ8_MEMBER(suna8_state::hardhead_protection_r) { uint8_t protection_val = m_protection_val; if (protection_val & 0x80) return ((~offset & 0x20) ? 0x20 : 0) | ((protection_val & 0x04) ? 0x80 : 0) | ((protection_val & 0x01) ? 0x04 : 0); else return ((~offset & 0x20) ? 0x20 : 0) | (((offset ^ protection_val) & 0x01) ? 0x84 : 0); } WRITE8_MEMBER(suna8_state::hardhead_protection_w) { if (data & 0x80) m_protection_val = data; else m_protection_val = offset & 1; } /*************************************************************************** Memory Maps - Main CPU ***************************************************************************/ /*************************************************************************** Hard Head ***************************************************************************/ READ8_MEMBER(suna8_state::hardhead_ip_r) { switch (*m_hardhead_ip) { case 0: return ioport("P1")->read(); case 1: return ioport("P2")->read(); case 2: return ioport("DSW1")->read(); case 3: return ioport("DSW2")->read(); default: logerror("CPU #0 - PC %04X: Unknown IP read: %02X\n", m_maincpu->pc(), *m_hardhead_ip); return 0xff; } } /* 765- ---- Unused (eg. they go into hardhead_flipscreen_w) ---4 ---- ---- 3210 ROM Bank */ WRITE8_MEMBER(suna8_state::hardhead_bankswitch_w) { int bank = data & 0x0f; if (data & ~0xef) logerror("CPU #0 - PC %04X: unknown bank bits: %02X\n",m_maincpu->pc(),data); m_bank1->set_entry(bank); } /* 765- ---- ---4 3--- Coin Lockout ---- -2-- Flip Screen ---- --10 */ WRITE8_MEMBER(suna8_state::hardhead_flipscreen_w) { flip_screen_set(data & 0x04); machine().bookkeeping().coin_lockout_w(0, data & 0x08); machine().bookkeeping().coin_lockout_w(1, data & 0x10); } void suna8_state::hardhead_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM map(0xc000, 0xd7ff).ram(); // RAM map(0xd800, 0xd9ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); // Palette map(0xda00, 0xda00).ram().r(this, FUNC(suna8_state::hardhead_ip_r)).share("hardhead_ip"); // Input Port Select map(0xda80, 0xda80).r(m_soundlatch2, FUNC(generic_latch_8_device::read)).w(this, FUNC(suna8_state::hardhead_bankswitch_w)); // ROM Banking map(0xdb00, 0xdb00).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // To Sound CPU map(0xdb80, 0xdb80).w(this, FUNC(suna8_state::hardhead_flipscreen_w)); // Flip Screen + Coin Lockout map(0xdc00, 0xdc00).noprw(); // <- R (after bank select) map(0xdc80, 0xdc80).noprw(); // <- R (after bank select) map(0xdd00, 0xdd00).noprw(); // <- R (after ip select) map(0xdd80, 0xddff).rw(this, FUNC(suna8_state::hardhead_protection_r), FUNC(suna8_state::hardhead_protection_w)); // Protection map(0xe000, 0xffff).ram().w(this, FUNC(suna8_state::suna8_spriteram_w)).share("spriteram"); // Sprites } void suna8_state::hardhead_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).nopr(); // ? IRQ Ack } /*************************************************************************** Rough Ranger ***************************************************************************/ /* 76-- ---- Coin Lockout --5- ---- Flip Screen ---4 ---- ROM Bank ---- 3--- ---- -210 ROM Bank */ WRITE8_MEMBER(suna8_state::rranger_bankswitch_w) { int bank = data & 0x07; if ((~data & 0x10) && (bank >= 4)) bank += 4; if (data & ~0xf7) logerror("CPU #0 - PC %04X: unknown bank bits: %02X\n",m_maincpu->pc(),data); m_bank1->set_entry(bank); flip_screen_set(data & 0x20); machine().bookkeeping().coin_lockout_w(0, data & 0x40); machine().bookkeeping().coin_lockout_w(1, data & 0x80); } /* 7--- ---- 1 -> Garbled title (another romset?) -654 ---- ---- 3--- 1 -> No sound (soundlatch full?) ---- -2-- ---- --1- 1 -> Interlude screens ---- ---0 */ READ8_MEMBER(suna8_state::rranger_soundstatus_r) { m_soundlatch2->read(space, offset); return 0x02; } WRITE8_MEMBER(suna8_state::sranger_prot_w) { /* check code at 0x2ce2 (in sranger), protection is so dire that I can't even exactly estabilish if what I'm doing can be considered or not a kludge... -AS */ m_maincpu->space(AS_PROGRAM).write_byte(0xcd99,0xff); } void suna8_state::rranger_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM map(0xc000, 0xc000).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // To Sound CPU map(0xc002, 0xc002).w(this, FUNC(suna8_state::rranger_bankswitch_w)); // ROM Banking map(0xc002, 0xc002).portr("P1"); // P1 (Inputs) map(0xc003, 0xc003).portr("P2"); // P2 map(0xc004, 0xc004).r(this, FUNC(suna8_state::rranger_soundstatus_r)); // Latch Status? map(0xc200, 0xc200).nopr().w(this, FUNC(suna8_state::sranger_prot_w));// Protection? map(0xc280, 0xc280).nopw(); // ? NMI Ack map(0xc280, 0xc280).portr("DSW1"); // DSW 1 map(0xc2c0, 0xc2c0).portr("DSW2"); // DSW 2 map(0xc600, 0xc7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); // Palette map(0xc800, 0xdfff).ram(); // Work RAM map(0xe000, 0xffff).ram().w(this, FUNC(suna8_state::suna8_spriteram_w)).share("spriteram"); // Sprites } void suna8_state::rranger_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).nopr(); // ? IRQ Ack } /*************************************************************************** Brick Zone ***************************************************************************/ /* C140: 7--- ---- Finish Stage (Cheat) -654 3--- ---- -2-- Must flip rapidly? ---- --1- ---- ---0 Use Cheat 1 and 2 (driver config) */ READ8_MEMBER(suna8_state::brickzn_cheats_r) { static uint8_t bit2 = 0; bit2 = 1 - bit2; // see code at 2b48 return (ioport("CHEATS")->read() & (~(1 << 2))) | (bit2 << 2); } /* (C060 in newer sets) C040: 7654 32-- Protection (e.g. select output of multi_w, newer sets only) ---- --1- Sprite RAM Bank ---- ---0 Flip Screen */ WRITE8_MEMBER(suna8_state::brickzn_sprbank_w) { m_protection_val = data; flip_screen_set(data & 0x01); m_spritebank = (data >> 1) & 1; logerror("CPU #0 - PC %04X: protection_val = %02X\n",m_maincpu->pc(),data); // if (data & ~0x03) logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",m_maincpu->pc(),data); } /* (C040 in newer sets) C060: 7654 ---- ---- 3210 ROM Bank */ WRITE8_MEMBER(suna8_state::brickzn_rombank_w) { int bank = data & 0x0f; if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",m_maincpu->pc(),data); m_bank1->set_entry(bank + (m_bank1->entry() & 0x10)); if(m_bank1d) m_bank1d->set_entry(m_bank1->entry()); m_rombank = data; } /* (C0A0 in newer sets) C080: 7654 3--- ---- -2-- Coin Counter ---- --1- Start 2 Led ---- ---0 Start 1 Led */ WRITE8_MEMBER(suna8_state::brickzn_leds_w) { m_leds[0] = BIT(data, 0); m_leds[1] = BIT(data, 1); machine().bookkeeping().coin_counter_w(0, data & 0x04); logerror("CPU #0 - PC %04X: leds = %02X\n",m_maincpu->pc(),data); if (data & ~0x07) logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",m_maincpu->pc(),data); } /* C0A0: 7654 321- ---- ---0 Palette RAM Bank */ WRITE8_MEMBER(suna8_state::brickzn_palbank_w) { m_palettebank = data & 0x01; logerror("CPU #0 - PC %04X: palettebank = %02X\n",m_maincpu->pc(),data); if (data & ~0x01) logerror("CPU #0 - PC %04X: unknown palettebank bits: %02X\n",m_maincpu->pc(),data); } void suna8_state::brickzn11_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM map(0xc000, 0xc000).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // To Sound CPU map(0xc040, 0xc040).w(this, FUNC(suna8_state::brickzn_sprbank_w)); // Sprite RAM Bank + Flip Screen + Protection map(0xc060, 0xc060).w(this, FUNC(suna8_state::brickzn_rombank_w)); // ROM Bank map(0xc080, 0xc080).w(this, FUNC(suna8_state::brickzn_leds_w)); // Leds map(0xc0a0, 0xc0a0).w(this, FUNC(suna8_state::brickzn_palbank_w)); // Palette RAM Bank // AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(brickzn_prot2_w ) // Protection 2 map(0xc100, 0xc100).portr("P1"); // P1 (Buttons) map(0xc101, 0xc101).portr("P2"); // P2 (Buttons) map(0xc102, 0xc102).portr("DSW1"); // DSW 1 map(0xc103, 0xc103).portr("DSW2"); // DSW 2 map(0xc108, 0xc108).portr("SPIN1"); // P1 (Spinner) map(0xc10c, 0xc10c).portr("SPIN2"); // P2 (Spinner) map(0xc140, 0xc140).r(this, FUNC(suna8_state::brickzn_cheats_r)); // Cheats / Debugging Inputs map(0xc600, 0xc7ff).rw(this, FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)).share("paletteram"); // Palette (Banked) map(0xc800, 0xdfff).ram().share("wram"); // Work RAM map(0xe000, 0xffff).rw(this, FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } /* (newer sets only) C0A0: Palette RAM Bank C0A0: Sound Latch (optionally scrambled) C0A0: Leds */ WRITE8_MEMBER(suna8_state::brickzn_multi_w) { int protselect = m_protection_val & 0xfc; if ((protselect == 0x88) || (protselect == 0x8c)) { brickzn_palbank_w(space, offset, data, mem_mask); } else if (protselect == 0x90) { /* 0d brick hit NO! 25? 2c side wall hit OK 3b paddle hit OK 44 death OK? 53 death OK? 56 coin in OK? 70 monster hit NO? 58? */ uint8_t remap = (m_remap_sound ? bitswap<8>(data, 7,6,3,4,5,2,1,0) : data); m_soundlatch->write(space, 0, remap); logerror("CPU #0 - PC %04X: soundlatch = %02X (->%02X)\n",m_maincpu->pc(),data,remap); } else if (protselect == 0x04) { brickzn_leds_w(space, offset, data, mem_mask); } else if (protselect == 0x80) { // disables rom banking? // see code at 11b1: logerror("CPU #0 - PC %04X: rombank_disable = %02X\n",m_maincpu->pc(),data); } else { logerror("CPU #0 - PC %04X: ignore = %02X\n",m_maincpu->pc(),data); } if ((m_protection_val & 0x1f) == 0x1c) { // controls opcode decryption // see code at 71b, 45b7, 7380, 7a6b //printf("CPU #0 - PC %04X: alt op-decrypt tog = %02X\n",m_maincpu->pc(),data); m_prot_opcode_toggle ^= 1; if (m_prot_opcode_toggle == 0) { m_bank0d->set_base(m_decrypt); } else { m_bank0d->set_base(memregion("maincpu")->base()); } } } /* (newer sets only) C0C0: two protection values written in rapid succession */ WRITE8_MEMBER(suna8_state::brickzn_prot2_w) { // Disable work RAM write, see code at 96a: if ((m_prot2 ^ data) == 0x24) m_maincpu->space(AS_PROGRAM).unmap_write(0xc800, 0xdfff); else m_maincpu->space(AS_PROGRAM).install_ram(0xc800, 0xdfff, m_wram); m_remap_sound = ((m_prot2 ^ data) == 0xf8) ? 1 : 0; // Select alternate data decryption, see code at 787e: m_bank1->set_entry((m_bank1->entry() & 0x0f) + ((m_prot2 == (data | 0xdc)) ? 0x10 : 0)); if(m_bank1d) m_bank1d->set_entry(m_bank1->entry()); m_prot2_prev = m_prot2; m_prot2 = data; logerror("CPU #0 - PC %04X: unknown = %02X\n",m_maincpu->pc(),data); } // (newer sets only) Disable palette RAM writes, see code at 4990: WRITE8_MEMBER(suna8_state::brickzn_enab_palram_w) { m_paletteram_enab = 1; } WRITE8_MEMBER(suna8_state::brickzn_disab_palram_w) { m_paletteram_enab = 0; } void suna8_state::brickzn_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM // c000 writes before reading buttons // c010 writes? map(0xc040, 0xc040).w(this, FUNC(suna8_state::brickzn_rombank_w)); // ROM Bank map(0xc060, 0xc060).w(this, FUNC(suna8_state::brickzn_sprbank_w)); // Sprite RAM Bank + Flip Screen + Protection // c080 writes? // c090 writes? map(0xc0a0, 0xc0a0).w(this, FUNC(suna8_state::brickzn_multi_w)); // Palette RAM Bank / Sound Latch / ... map(0xc0c0, 0xc0c0).w(this, FUNC(suna8_state::brickzn_prot2_w)); // Protection 2 map(0xc100, 0xc100).portr("P1"); // P1 (Buttons) map(0xc101, 0xc101).portr("P2"); // P2 (Buttons) map(0xc102, 0xc102).portr("DSW1"); // DSW 1 map(0xc103, 0xc103).portr("DSW2"); // DSW 2 map(0xc108, 0xc108).portr("SPIN1"); // P1 (Spinner) map(0xc10c, 0xc10c).portr("SPIN2"); // P2 (Spinner) map(0xc140, 0xc140).r(this, FUNC(suna8_state::brickzn_cheats_r)); // Cheats / Debugging Inputs // c144 reads? // c14a reads? map(0xc600, 0xc7ff).rw(this, FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)).share("paletteram"); // Palette (Banked) map(0xc800, 0xdfff).ram().share("wram"); // Work RAM map(0xe000, 0xffff).rw(this, FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } void suna8_state::decrypted_opcodes_map(address_map &map) { map(0x0000, 0x7fff).bankr("bank0d"); map(0x8000, 0xbfff).bankr("bank1d"); } void suna8_state::brickzn_io_map(address_map &map) { map(0x0000, 0x0000).w(this, FUNC(suna8_state::brickzn_disab_palram_w)); // Disable Palette RAM map(0x00a1, 0x00a1).w(this, FUNC(suna8_state::brickzn_enab_palram_w)); // Enable Palette RAM } /*************************************************************************** Hard Head 2 ***************************************************************************/ /* Probably wrong: */ WRITE8_MEMBER(suna8_state::hardhea2_nmi_w) { m_nmi_enable = data & 0x01; // if (data & ~0x01) logerror("CPU #0 - PC %04X: unknown nmi bits: %02X\n",m_maincpu->pc(),data); } /* 7654 321- ---- ---0 Flip Screen */ WRITE8_MEMBER(suna8_state::hardhea2_flipscreen_w) { flip_screen_set(data & 0x01); if (data & ~0x01) logerror("CPU #0 - PC %04X: unknown flipscreen bits: %02X\n",m_maincpu->pc(),data); } WRITE8_MEMBER(suna8_state::hardhea2_leds_w) { m_leds[0] = BIT(data, 0); m_leds[1] = BIT(data, 1); machine().bookkeeping().coin_counter_w(0, data & 0x04); if (data & ~0x07) logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",m_maincpu->pc(),data); } /* 7654 32-- ---- --1- Sprite RAM Bank ---- ---0 Sprite RAM Bank? */ WRITE8_MEMBER(suna8_state::hardhea2_spritebank_w) { m_spritebank = (data >> 1) & 1; if (data & ~0x02) logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",m_maincpu->pc(),data); } /* 7654 ---- ---- 3210 ROM Bank */ WRITE8_MEMBER(suna8_state::hardhea2_rombank_w) { int bank = data & 0x0f; if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",m_maincpu->pc(),data); m_bank1->set_entry(bank); m_rombank = data; } WRITE8_MEMBER(suna8_state::hardhea2_spritebank_0_w) { m_spritebank = 0; } WRITE8_MEMBER(suna8_state::hardhea2_spritebank_1_w) { m_spritebank = 1; } WRITE8_MEMBER(suna8_state::hardhea2_rambank_0_w) { membank("bank2")->set_entry(0); } WRITE8_MEMBER(suna8_state::hardhea2_rambank_1_w) { membank("bank2")->set_entry(1); } void suna8_state::hardhea2_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM map(0xc000, 0xc000).portr("P1"); // P1 (Inputs) map(0xc001, 0xc001).portr("P2"); // P2 map(0xc002, 0xc002).portr("DSW1"); // DSW 1 map(0xc003, 0xc003).portr("DSW2"); // DSW 2 map(0xc080, 0xc080).portr("BUTTONS"); // vblank? map(0xc200, 0xc200).w(this, FUNC(suna8_state::hardhea2_spritebank_w)); // Sprite RAM Bank map(0xc280, 0xc280).w(this, FUNC(suna8_state::hardhea2_rombank_w)); // ROM Bank (?mirrored up to c2ff?) // *** Protection map(0xc28c, 0xc28c).w(this, FUNC(suna8_state::hardhea2_rombank_w)); // Protection *** map(0xc300, 0xc300).w(this, FUNC(suna8_state::hardhea2_flipscreen_w)); // Flip Screen map(0xc380, 0xc380).w(this, FUNC(suna8_state::hardhea2_nmi_w)); // ? NMI related ? map(0xc400, 0xc400).w(this, FUNC(suna8_state::hardhea2_leds_w)); // Leds + Coin Counter map(0xc480, 0xc480).nopw(); // ~ROM Bank map(0xc500, 0xc500).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // To Sound CPU // *** Protection map(0xc50f, 0xc50f).w(this, FUNC(suna8_state::hardhea2_spritebank_1_w)); map(0xc508, 0xc508).w(this, FUNC(suna8_state::hardhea2_spritebank_0_w)); map(0xc507, 0xc507).w(this, FUNC(suna8_state::hardhea2_rambank_1_w)); map(0xc522, 0xc522).w(this, FUNC(suna8_state::hardhea2_rambank_0_w)); map(0xc556, 0xc556).w(this, FUNC(suna8_state::hardhea2_rambank_1_w)); map(0xc528, 0xc528).w(this, FUNC(suna8_state::hardhea2_rambank_0_w)); map(0xc560, 0xc560).w(this, FUNC(suna8_state::hardhea2_rambank_1_w)); map(0xc533, 0xc533).w(this, FUNC(suna8_state::hardhea2_rambank_0_w)); // Protection *** map(0xc600, 0xc7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); // Palette map(0xc800, 0xdfff).bankrw("bank2"); // Work RAM (Banked) map(0xe000, 0xffff).rw(this, FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } /*************************************************************************** Star Fighter ***************************************************************************/ /* C280-C2FF: 76-- ---- --5- ---- Disable Sound Latch Writes ---4 ---- ---- 3210 ROM Bank (Latched) */ WRITE8_MEMBER(suna8_state::starfigh_rombank_latch_w) { logerror("CPU #0 - PC %04X: rom bank latch %04X = %02X\n",m_maincpu->pc(), 0xc280 + offset, data); m_rombank_latch = data; } /* C500: Sound Latch */ WRITE8_MEMBER(suna8_state::starfigh_sound_latch_w) { if ( !(m_rombank_latch & 0x20) ) m_soundlatch->write(space, 0, data); } /* C080: */ READ8_MEMBER(suna8_state::starfigh_cheats_r) { return ioport("CHEATS")->read(); } /* C380-C3FF: */ WRITE8_MEMBER(suna8_state::starfigh_spritebank_latch_w) { // bit 1 = disable RAM writes. See code at 2696, 4e8f m_spritebank_latch = (data >> 2) & 1; m_nmi_enable = (data >> 5) & 1; // see code at 1c2, 491, 4aa, 4e9b if (data & ~0x04) logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",m_maincpu->pc(),data); } /* C200: */ WRITE8_MEMBER(suna8_state::starfigh_spritebank_w) { m_spritebank = m_spritebank_latch; } /* C400: 7654 ---- ---- 3--- Gfx banking (bosses) ---- -2-- Coin Counter ---- --1- Start 2 Led ---- ---0 Start 1 Led Writes to C400 also set ROM bank from latch */ WRITE8_MEMBER(suna8_state::starfigh_leds_w) { m_leds[0] = BIT(data, 0); m_leds[1] = BIT(data, 1); machine().bookkeeping().coin_counter_w(0, data & 0x04); m_gfxbank = (data & 0x08) ? 4 : 0; if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",m_maincpu->pc(),data); // ROM Bank: int bank = m_rombank_latch & 0x0f; m_bank1->set_entry(bank); m_rombank = m_rombank_latch; logerror("CPU #0 - PC %04X: rom bank = %02X\n",m_maincpu->pc(), m_rombank); } void suna8_state::starfigh_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM map(0xc000, 0xc000).portr("P1"); // P1 (Inputs) map(0xc001, 0xc001).portr("P2"); // P2 map(0xc002, 0xc002).portr("DSW1"); // DSW 1 map(0xc003, 0xc003).portr("DSW2"); // DSW 2 map(0xc080, 0xc080).r(this, FUNC(suna8_state::starfigh_cheats_r)); // Cheats? map(0xc200, 0xc200).w(this, FUNC(suna8_state::starfigh_spritebank_w)); // Sprite RAM Bank map(0xc280, 0xc2ff).w(this, FUNC(suna8_state::starfigh_rombank_latch_w)); // ROM Bank Latch (?mirrored up to c2ff?) map(0xc300, 0xc300).w(this, FUNC(suna8_state::hardhea2_flipscreen_w)); // Flip Screen map(0xc380, 0xc3ff).w(this, FUNC(suna8_state::starfigh_spritebank_latch_w)); // Sprite RAM Bank Latch map(0xc400, 0xc47f).w(this, FUNC(suna8_state::starfigh_leds_w)); // Leds + Coin Counter + ROM Bank // c480 write? map(0xc500, 0xc500).w(this, FUNC(suna8_state::starfigh_sound_latch_w)); // To Sound CPU (can be disabled) // (c522 + R & 0x1f) write? map(0xc600, 0xc7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); // Palette map(0xc800, 0xdfff).ram(); // Work RAM map(0xe000, 0xffff).rw(this, FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } /*************************************************************************** Spark Man ***************************************************************************/ /* C200: 765432-- ------1- Sprite RAM Bank (Inverted by Sprite Bank Latch) -------0 Sprite "chip" "" */ WRITE8_MEMBER(suna8_state::sparkman_spritebank_w) { m_spritebank = ((data >> 1) & 0x01) | ((data << 1) & 0x02); if ((m_spritebank_latch >> 1) & 0x01) m_spritebank ^= 0x03; logerror("CPU #0 - PC %04X: spritebank = %02X (%X)\n",m_maincpu->pc(),data,m_spritebank); } /* C280: 76-- ---- --5- ---- Disable Sound Latch Writes ---4 ---- ---- 3210 ROM Bank (Latched) */ WRITE8_MEMBER(suna8_state::sparkman_rombank_latch_w) { m_rombank_latch = data; logerror("CPU #0 - PC %04X: rom bank latch %04X = %02X\n",m_maincpu->pc(), 0xc280 + offset, data); } /* C300: 76-- ---- --5- ---- Invert Sprite Chip and Bank ---4 ---- Almost Always On? ---- 321- ---- ---0 Flip Screen */ WRITE8_MEMBER(suna8_state::sparkman_spritebank_latch_w) { flip_screen_set(data & 0x01); m_spritebank_latch = (data >> 4) & 0x03; logerror("CPU #0 - PC %04X: spritebank latch = %02X\n",m_maincpu->pc(),data); } /* C380: 76------ --5----- NMI Enable ---4321- -------0 Work RAM Writes Disable */ WRITE8_MEMBER(suna8_state::sparkman_write_disable_w) { m_write_disable = (data >> 0) & 1; // bit 0 = disable RAM writes. See code at b48, d4d m_nmi_enable = (data >> 5) & 1; // see code at 66 if (data & ~0x21) logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",m_maincpu->pc(),data); } // RAM writes can be disabled WRITE8_MEMBER(suna8_state::suna8_wram_w) { if (!m_write_disable) m_wram[offset] = data; } /* C400: 7654 32-- ---- --1- Start 2 Led ---- ---0 Start 1 Led Writes to C400 also set ROM bank from latch */ WRITE8_MEMBER(suna8_state::sparkman_rombank_w) { m_leds[0] = BIT(data, 0); m_leds[1] = BIT(data, 1); if (data & ~0x03) logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",m_maincpu->pc(),data); // ROM Bank: int bank = m_rombank_latch & 0x0f; m_bank1->set_entry(bank); m_rombank = m_rombank_latch; logerror("CPU #0 - PC %04X: rom bank = %02X\n",m_maincpu->pc(), m_rombank); } /* C480: 7654321- -------0 Coin Counter */ WRITE8_MEMBER(suna8_state::sparkman_coin_counter_w) { machine().bookkeeping().coin_counter_w(0, data & 0x01); } // To do: implement this, affects the duration of copyright screen READ8_MEMBER(suna8_state::sparkman_c0a3_r) { return (m_screen->frame_number() & 1) ? 0x80 : 0; } void suna8_state::sparkman_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM map(0xc000, 0xc000).portr("P1"); // P1 (Inputs) map(0xc001, 0xc001).portr("P2"); // P2 map(0xc002, 0xc002).portr("DSW1"); // DSW 1 map(0xc003, 0xc003).portr("DSW2"); // DSW 2 map(0xc080, 0xc080).portr("BUTTONS"); // Buttons map(0xc0a3, 0xc0a3).r(this, FUNC(suna8_state::sparkman_c0a3_r)); // ??? map(0xc200, 0xc27f).w(this, FUNC(suna8_state::sparkman_spritebank_w)); // Sprite RAM Bank map(0xc280, 0xc2ff).w(this, FUNC(suna8_state::sparkman_rombank_latch_w)); // ROM Bank Latch map(0xc300, 0xc37f).w(this, FUNC(suna8_state::sparkman_spritebank_latch_w)); // Sprite RAM Bank Latch (Invert) + Flip Screen map(0xc380, 0xc3ff).w(this, FUNC(suna8_state::sparkman_write_disable_w)); // Work RAM Writes Disable + NMI Enable map(0xc400, 0xc47f).w(this, FUNC(suna8_state::sparkman_rombank_w)); // ROM Bank + Leds map(0xc480, 0xc480).w(this, FUNC(suna8_state::sparkman_coin_counter_w)); // Coin Counter map(0xc500, 0xc57f).w(this, FUNC(suna8_state::starfigh_sound_latch_w)); // To Sound CPU (can be disabled) map(0xc600, 0xc7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); // Palette map(0xc800, 0xdfff).ram().w(this, FUNC(suna8_state::suna8_wram_w)).share("wram"); // RAM map(0xe000, 0xffff).rw(this, FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } /*************************************************************************** Memory Maps - Sound CPU(s) ***************************************************************************/ /*************************************************************************** Hard Head ***************************************************************************/ void suna8_state::hardhead_sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0xa000, 0xa001).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); map(0xa002, 0xa003).w("aysnd", FUNC(ay8910_device::address_data_w)); map(0xc000, 0xc7ff).ram(); // RAM map(0xc800, 0xc800).r("ymsnd", FUNC(ym3812_device::status_port_r)); // ? unsure map(0xd000, 0xd000).w(m_soundlatch2, FUNC(generic_latch_8_device::write)); // map(0xd800, 0xd800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU } void suna8_state::hardhead_sound_io_map(address_map &map) { map.global_mask(0xff); map(0x01, 0x01).nopr(); // ? IRQ Ack } /*************************************************************************** Rough Ranger ***************************************************************************/ void suna8_state::rranger_sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM map(0xa000, 0xa001).w("ym1", FUNC(ym2203_device::write)); // Samples + Music map(0xa002, 0xa003).w("ym2", FUNC(ym2203_device::write)); // Music + FX map(0xc000, 0xc7ff).ram(); // RAM map(0xd000, 0xd000).w(m_soundlatch2, FUNC(generic_latch_8_device::write)); // To Sound CPU map(0xd800, 0xd800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU } /*************************************************************************** Brick Zone ***************************************************************************/ void suna8_state::brickzn_sound_map(address_map &map) { map(0x0000, 0xbfff).rom(); // ROM map(0xc000, 0xc001).w("ymsnd", FUNC(ym3812_device::write)); map(0xc002, 0xc003).w("aysnd", FUNC(ay8910_device::address_data_w)); map(0xe000, 0xe7ff).ram(); // RAM map(0xf000, 0xf000).w(m_soundlatch2, FUNC(generic_latch_8_device::write)); // To PCM CPU map(0xf800, 0xf800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU } /* PCM Z80, 4 DACs (4 bits per sample), NO RAM !! */ void suna8_state::brickzn_pcm_map(address_map &map) { map(0x0000, 0xffff).rom(); // ROM } void suna8_state::brickzn_pcm_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).r(m_soundlatch2, FUNC(generic_latch_8_device::read)); // From Sound CPU map(0x00, 0x00).w("ldac", FUNC(dac_byte_interface::write)); map(0x01, 0x01).w("rdac", FUNC(dac_byte_interface::write)); map(0x02, 0x02).w("ldac2", FUNC(dac_byte_interface::write)); map(0x03, 0x03).w("rdac2", FUNC(dac_byte_interface::write)); } /*************************************************************************** Input Ports ***************************************************************************/ #define JOY(_n_) \ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(_n_) \ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(_n_) \ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START##_n_ ) \ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN##_n_ ) /*************************************************************************** Hard Head ***************************************************************************/ static INPUT_PORTS_START( hardhead ) PORT_START("P1") // Player 1 - $da00 (ip = 0) JOY(1) PORT_START("P2") // Player 2 - $da00 (ip = 1) JOY(2) PORT_START("DSW1") // DSW 1 - $da00 (ip = 2) PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0e, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:2,3,4") PORT_DIPSETTING( 0x0e, "No Bonus" ) PORT_DIPSETTING( 0x0c, "10K" ) PORT_DIPSETTING( 0x0a, "20K" ) PORT_DIPSETTING( 0x08, "50K" ) PORT_DIPSETTING( 0x06, "50K, Every 50K" ) PORT_DIPSETTING( 0x04, "100K, Every 50K" ) PORT_DIPSETTING( 0x02, "100K, Every 100K" ) PORT_DIPSETTING( 0x00, "200K, Every 100K" ) PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,6,7") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x50, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x80, 0x80, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") //DSW 2 - $da00 (ip = 3) PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) PORT_DIPNAME( 0x18, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:4,5") PORT_DIPSETTING( 0x18, "2" ) PORT_DIPSETTING( 0x10, "3" ) PORT_DIPSETTING( 0x08, "4" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0xe0, 0x60, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7,8") PORT_DIPSETTING( 0xe0, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0xc0, DEF_STR( Very_Easy) ) PORT_DIPSETTING( 0xa0, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x80, "Moderate" ) PORT_DIPSETTING( 0x60, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x40, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x20, DEF_STR( Very_Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END /*************************************************************************** Rough Ranger ***************************************************************************/ static INPUT_PORTS_START( rranger ) PORT_START("P1") // Player 1 - $c002 JOY(1) PORT_START("P2") // Player 2 - $c003 JOY(2) PORT_START("DSW1") //DSW 1 - $c280 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x38, 0x20, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4,5,6") PORT_DIPSETTING( 0x30, "10K" ) PORT_DIPSETTING( 0x28, "30K" ) PORT_DIPSETTING( 0x20, "50K" ) PORT_DIPSETTING( 0x18, "50K, Every 50K" ) PORT_DIPSETTING( 0x10, "100K, Every 50K" ) PORT_DIPSETTING( 0x08, "100K, Every 100K" ) PORT_DIPSETTING( 0x00, "100K, Every 200K" ) PORT_DIPSETTING( 0x38, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7,8") PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x80, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x40, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_START("DSW2") // DSW 2 - $c2c0 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x08, DEF_STR( Yes ) ) PORT_DIPNAME( 0x30, 0x20, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6") PORT_DIPSETTING( 0x30, "2" ) PORT_DIPSETTING( 0x20, "3" ) PORT_DIPSETTING( 0x10, "4" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END /*************************************************************************** Brick Zone ***************************************************************************/ static INPUT_PORTS_START( brickzn ) PORT_START("P1") // Player 1 Joystick - $c100 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_CONFNAME( 0x04, 0x04, "Select First Stage" ) PORT_CONFSETTING( 0x04, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_CONFNAME( 0x08, 0x08, "Cheat 1" ) // ??? PORT_CONFSETTING( 0x08, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_START("P2") // Player 2 Joystick - $c101 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_CONFNAME( 0x04, 0x04, "Select Next Stage" ) PORT_CONFSETTING( 0x04, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_CONFNAME( 0x08, 0x08, "Cheat 2" ) // ??? PORT_CONFSETTING( 0x08, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_START("DSW1") // DSW 1 - $c102 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW-A:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x38, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW-A:4,5,6") PORT_DIPSETTING( 0x38, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x30, DEF_STR( Very_Easy) ) PORT_DIPSETTING( 0x28, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x20, "Moderate" ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_SERVICE_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW-A:7" ) PORT_NAME( "Service / Invulnerability" ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW-A:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // DSW 2 - $c103 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW-B:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW-B:2") PORT_DIPSETTING( 0x02, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW-B:3") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) PORT_DIPNAME( 0x38, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW-B:4,5,6") PORT_DIPSETTING( 0x30, "10K" ) PORT_DIPSETTING( 0x28, "30K" ) PORT_DIPSETTING( 0x18, "50K, Every 50K" ) PORT_DIPSETTING( 0x20, "50K" ) PORT_DIPSETTING( 0x10, "100K, Every 50K" ) PORT_DIPSETTING( 0x08, "100K, Every 100K" ) PORT_DIPSETTING( 0x00, "200K, Every 100K" ) PORT_DIPSETTING( 0x38, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW-B:7,8") PORT_DIPSETTING( 0x80, "2" ) PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x40, "4" ) PORT_DIPSETTING( 0x00, "5" ) PORT_START("SPIN1") // Player 1 Spinner - $c108 PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1) PORT_START("SPIN2") // Player 2 Spinner - $c10c PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2) PORT_START("CHEATS") // Cheats / Debugging Inputs - $c140 PORT_CONFNAME( 0x01, 0x00, "0: Use Cheat 1&2 Setting" ) PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_CONFNAME( 0x02, 0x02, "1: Unused?" ) PORT_CONFSETTING( 0x02, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) // Must flip rapidly PORT_CONFNAME( 0x08, 0x08, "3: Unused?" ) PORT_CONFSETTING( 0x08, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_CONFNAME( 0x10, 0x10, "4: Unused?" ) PORT_CONFSETTING( 0x10, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_CONFNAME( 0x20, 0x20, "5: Unused?" ) PORT_CONFSETTING( 0x20, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_CONFNAME( 0x40, 0x40, "6: Unused?" ) PORT_CONFSETTING( 0x40, DEF_STR( Off ) ) PORT_CONFSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Finish Stage (Cheat)") INPUT_PORTS_END static INPUT_PORTS_START( brickznv6 ) PORT_INCLUDE(brickzn) PORT_MODIFY("DSW2") // DSW 2 - $c103 PORT_DIPNAME( 0x18, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW-B:4,5") PORT_DIPSETTING( 0x18, "None" ) PORT_DIPSETTING( 0x10, "10K" ) PORT_DIPSETTING( 0x08, "30K" ) PORT_DIPSETTING( 0x00, "50K" ) PORT_DIPNAME( 0x20, 0x20, "Display" ) PORT_DIPLOCATION("SW-B:6") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x20, DEF_STR( Yes ) ) INPUT_PORTS_END /*************************************************************************** Hard Head 2 ***************************************************************************/ static INPUT_PORTS_START( hardhea2 ) PORT_START("P1") // Player 1 - $c000 JOY(1) PORT_START("P2") // Player 2 - $c001 JOY(2) PORT_START("DSW1") // DSW 1 - $c002 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x38, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6") PORT_DIPSETTING( 0x38, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x30, DEF_STR( Very_Easy) ) PORT_DIPSETTING( 0x28, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x20, "Moderate" ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_SERVICE_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // DSW 2 - $c003 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) PORT_DIPNAME( 0x38, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6") PORT_DIPSETTING( 0x30, "10K" ) PORT_DIPSETTING( 0x28, "30K" ) PORT_DIPSETTING( 0x18, "50K, Every 50K" ) PORT_DIPSETTING( 0x20, "50K" ) PORT_DIPSETTING( 0x10, "100K, Every 50K" ) PORT_DIPSETTING( 0x08, "100K, Every 100K" ) PORT_DIPSETTING( 0x00, "200K, Every 100K" ) PORT_DIPSETTING( 0x38, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7,8") PORT_DIPSETTING( 0x80, "2" ) PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x40, "4" ) PORT_DIPSETTING( 0x00, "5" ) PORT_START("BUTTONS") // Buttons - $c080 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_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END /*************************************************************************** Star Fighter ***************************************************************************/ static INPUT_PORTS_START( starfigh ) PORT_START("P1") // Player 1 - $c000 JOY(1) PORT_START("P2") // Player 2 - $c001 JOY(2) PORT_START("DSW1") // DSW 1 - $c002 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x38, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6") PORT_DIPSETTING( 0x38, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x30, DEF_STR( Very_Easy) ) PORT_DIPSETTING( 0x28, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x18, "Moderate" ) PORT_DIPSETTING( 0x10, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_SERVICE_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // DSW 2 - $c003 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) PORT_DIPNAME( 0x38, 0x18, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6") PORT_DIPSETTING( 0x30, "10K" ) PORT_DIPSETTING( 0x28, "30K" ) PORT_DIPSETTING( 0x18, "50K, Every 50K" ) PORT_DIPSETTING( 0x20, "50K" ) PORT_DIPSETTING( 0x10, "100K, Every 50K" ) PORT_DIPSETTING( 0x08, "100K, Every 100K" ) PORT_DIPSETTING( 0x00, "200K, Every 100K" ) PORT_DIPSETTING( 0x38, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7,8") PORT_DIPSETTING( 0x80, "2" ) PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x40, "4" ) PORT_DIPSETTING( 0x00, "5" ) PORT_START("CHEATS") // ??? - $c080 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_CONFNAME( 0x08, 0x08, "3: Copyright Screen Color + ?" ) // also changes a table PORT_CONFSETTING( 0x08, "Green" ) PORT_CONFSETTING( 0x00, "Blue" ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") // 0 = skip color cycling (red) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // read in protection check, see code at 787 INPUT_PORTS_END /*************************************************************************** Spark Man ***************************************************************************/ static INPUT_PORTS_START( sparkman ) PORT_START("P1") // Player 1 - $c000 JOY(1) PORT_START("P2") // Player 2 - $c001 JOY(2) PORT_START("DSW1") // DSW 1 - $c002 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x38, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6") PORT_DIPSETTING( 0x20, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x30, DEF_STR( Very_Easy) ) PORT_DIPSETTING( 0x28, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x38, "Moderate" ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_SERVICE_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") // DSW 2 - $c003 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6") PORT_DIPSETTING( 0x38, "10K" ) PORT_DIPSETTING( 0x28, "30K" ) PORT_DIPSETTING( 0x18, "50K, Every 50K" ) PORT_DIPSETTING( 0x20, "50K" ) PORT_DIPSETTING( 0x10, "100K, Every 50K" ) PORT_DIPSETTING( 0x08, "100K, Every 100K" ) PORT_DIPSETTING( 0x00, "200K, Every 100K" ) PORT_DIPSETTING( 0x30, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7,8") PORT_DIPSETTING( 0x80, "2" ) PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x40, "4" ) PORT_DIPSETTING( 0x00, "5" ) PORT_START("BUTTONS") // Buttons - $c080 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // P1 bomb PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // P2 bomb 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_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // protection INPUT_PORTS_END /*************************************************************************** Graphics Layouts ***************************************************************************/ /* 8x8x4 tiles (2 bitplanes per ROM) */ static const gfx_layout layout_8x8x4 = { 8,8, RGN_FRAC(1,2), 4, { RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4, 0, 4 }, { 3,2,1,0, 11,10,9,8}, { STEP8(0,16) }, 8*8*2 }; static GFXDECODE_START( gfx_suna8 ) GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 16*2 ) // [0] Sprites (brickzn has 2 palette RAMs) GFXDECODE_END static GFXDECODE_START( gfx_suna8_x2 ) GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 16*2 ) // [0] Sprites GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0, 16*2 ) // [1] Sprites (sparkman has 2 sprite "chips") GFXDECODE_END /*************************************************************************** Machine Drivers ***************************************************************************/ /* In games with only 2 CPUs, port A&B of the AY8910 are used for sample playing. */ /*************************************************************************** Hard Head ***************************************************************************/ /* 1 x 24 MHz crystal */ MACHINE_CONFIG_START(suna8_state::hardhead) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(hardhead_map) MCFG_DEVICE_IO_MAP(hardhead_io_map) MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) /* No NMI */ MCFG_DEVICE_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(hardhead_sound_map) MCFG_DEVICE_IO_MAP(hardhead_sound_io_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(suna8_state, irq0_line_hold, 4*60) /* No NMI */ /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(59.10) /* verified on pcb */ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) MCFG_SCREEN_UPDATE_DRIVER(suna8_state, screen_update_suna8) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_suna8) MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_text) /* sound hardware */ SPEAKER(config, "speaker").front_center(); MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_DEVICE_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) MCFG_DEVICE_ADD("aysnd", AY8910, SUNA8_MASTER_CLOCK / 16) /* verified on pcb */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, suna8_state, suna8_play_samples_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, suna8_state, suna8_samples_number_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.3) MCFG_DEVICE_ADD("samples", SAMPLES) MCFG_SAMPLES_CHANNELS(1) MCFG_SAMPLES_START_CB(suna8_state, sh_start) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) MACHINE_CONFIG_END /*************************************************************************** Rough Ranger ***************************************************************************/ /* 1 x 24 MHz crystal */ /* 2203 + 8910 */ MACHINE_CONFIG_START(suna8_state::rranger) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */ MCFG_DEVICE_PROGRAM_MAP(rranger_map) MCFG_DEVICE_IO_MAP(rranger_io_map) // MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) /* IRQ & NMI ! */ MCFG_DEVICE_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(rranger_sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(suna8_state, irq0_line_hold, 4*60) /* NMI = retn */ MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(59.1) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) MCFG_SCREEN_UPDATE_DRIVER(suna8_state, screen_update_suna8) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_suna8) MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_text) /* sound hardware */ SPEAKER(config, "speaker").front_center(); MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_DEVICE_ADD("ym1", YM2203, SUNA8_MASTER_CLOCK / 16) /* verified on pcb */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, suna8_state, rranger_play_samples_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, suna8_state, suna8_samples_number_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.9) MCFG_DEVICE_ADD("ym2", YM2203, SUNA8_MASTER_CLOCK / 16) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.9) MCFG_DEVICE_ADD("samples", SAMPLES) MCFG_SAMPLES_CHANNELS(1) MCFG_SAMPLES_START_CB(suna8_state, sh_start) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) MACHINE_CONFIG_END /*************************************************************************** Brick Zone ***************************************************************************/ /* 1 x 24 MHz crystal */ MACHINE_RESET_MEMBER(suna8_state,brickzn) { m_protection_val = m_prot2 = m_prot2_prev = 0xff; m_paletteram_enab = 1; // for brickzn11 m_remap_sound = 0; m_bank1->set_entry(0); if(m_bank1d) m_bank1d->set_entry(0); } MACHINE_CONFIG_START(suna8_state::brickzn11) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* SUNA PROTECTION BLOCK */ MCFG_DEVICE_PROGRAM_MAP(brickzn11_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) // nmi breaks ramtest but is needed! MCFG_DEVICE_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4) /* Z0840006PSC - 6MHz (measured) */ MCFG_DEVICE_PROGRAM_MAP(brickzn_sound_map) MCFG_DEVICE_ADD("pcm", Z80, SUNA8_MASTER_CLOCK / 4) /* Z0840006PSC - 6MHz (measured) */ MCFG_DEVICE_PROGRAM_MAP(brickzn_pcm_map) MCFG_DEVICE_IO_MAP(brickzn_pcm_io_map) MCFG_MACHINE_RESET_OVERRIDE(suna8_state, brickzn ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) // we're using PORT_VBLANK MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) MCFG_SCREEN_UPDATE_DRIVER(suna8_state, screen_update_suna8) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_suna8) MCFG_PALETTE_ADD("palette", 256 * 2) // 2 x Palette RAM MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_brickzn) /* sound hardware */ SPEAKER(config, "speaker").front_center(); MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_DEVICE_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) // 3MHz (measured) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) MCFG_DEVICE_ADD("aysnd", AY8910, SUNA8_MASTER_CLOCK / 16) // 1.5MHz (measured) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.33) MCFG_DEVICE_ADD("ldac", DAC_4BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.17) // unknown DAC MCFG_DEVICE_ADD("rdac", DAC_4BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.17) // unknown DAC MCFG_DEVICE_ADD("ldac2", DAC_4BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.17) // unknown DAC MCFG_DEVICE_ADD("rdac2", DAC_4BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.17) // unknown DAC MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT) MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT) MCFG_SOUND_ROUTE(0, "ldac2", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac2", -1.0, DAC_VREF_NEG_INPUT) MCFG_SOUND_ROUTE(0, "rdac2", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac2", -1.0, DAC_VREF_NEG_INPUT) MACHINE_CONFIG_END MACHINE_CONFIG_START(suna8_state::brickzn) brickzn11(config); MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(brickzn_map) MCFG_DEVICE_IO_MAP(brickzn_io_map) MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MACHINE_CONFIG_END /*************************************************************************** Hard Head 2 ***************************************************************************/ /* 1 x 24 MHz crystal */ TIMER_DEVICE_CALLBACK_MEMBER(suna8_state::hardhea2_interrupt) { int scanline = param; if(scanline == 240) m_maincpu->set_input_line(0, HOLD_LINE); if(scanline == 112 && m_nmi_enable) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } MACHINE_RESET_MEMBER(suna8_state,hardhea2) { address_space &space = m_maincpu->space(AS_PROGRAM); hardhea2_rambank_0_w(space,0,0); } MACHINE_CONFIG_START(suna8_state::hardhea2) brickzn(config); MCFG_DEVICE_REMOVE("maincpu") MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* SUNA T568009 */ MCFG_DEVICE_PROGRAM_MAP(hardhea2_map) MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", suna8_state, hardhea2_interrupt, "screen", 0, 1) MCFG_MACHINE_RESET_OVERRIDE(suna8_state,hardhea2) MCFG_PALETTE_MODIFY("palette") MCFG_PALETTE_ENTRIES(256) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MACHINE_CONFIG_END MACHINE_CONFIG_START(suna8_state::hardhea2b) hardhea2(config); MCFG_DEVICE_REMOVE("maincpu") MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) //bootleg clock not verified (?) MCFG_DEVICE_PROGRAM_MAP(hardhea2_map) MACHINE_CONFIG_END /*************************************************************************** Star Fighter ***************************************************************************/ MACHINE_CONFIG_START(suna8_state::starfigh) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */ MCFG_DEVICE_PROGRAM_MAP(starfigh_map) MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", suna8_state, hardhea2_interrupt, "screen", 0, 1) /* The sound section is identical to that of hardhead */ MCFG_DEVICE_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */ MCFG_DEVICE_PROGRAM_MAP(hardhead_sound_map) MCFG_DEVICE_IO_MAP(hardhead_sound_io_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(suna8_state, irq0_line_hold, 4*60) /* No NMI */ /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) MCFG_SCREEN_UPDATE_DRIVER(suna8_state, screen_update_suna8) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_suna8) MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_starfigh) /* sound hardware */ SPEAKER(config, "speaker").front_center(); MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_DEVICE_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) MCFG_DEVICE_ADD("aysnd", AY8910, SUNA8_MASTER_CLOCK / 16) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, suna8_state, suna8_play_samples_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, suna8_state, suna8_samples_number_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) MCFG_DEVICE_ADD("samples", SAMPLES) MCFG_SAMPLES_CHANNELS(1) MCFG_SAMPLES_START_CB(suna8_state, sh_start) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) MACHINE_CONFIG_END /*************************************************************************** Spark Man ***************************************************************************/ MACHINE_CONFIG_START(suna8_state::sparkman) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */ MCFG_DEVICE_PROGRAM_MAP(sparkman_map) MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", suna8_state, hardhea2_interrupt, "screen", 0, 1) MCFG_DEVICE_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */ MCFG_DEVICE_PROGRAM_MAP(hardhead_sound_map) MCFG_DEVICE_IO_MAP(hardhead_sound_io_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(suna8_state, irq0_line_hold, 4*60) /* No NMI */ /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) MCFG_SCREEN_UPDATE_DRIVER(suna8_state, screen_update_suna8) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_suna8_x2) // 2 sprite "chips" MCFG_PALETTE_ADD("palette", 512) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_sparkman) /* sound hardware */ SPEAKER(config, "speaker").front_center(); MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_DEVICE_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) MCFG_DEVICE_ADD("aysnd", AY8910, SUNA8_MASTER_CLOCK / 16) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, suna8_state, suna8_play_samples_w)) // two sample roms MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, suna8_state, suna8_samples_number_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.3) MCFG_DEVICE_ADD("samples", SAMPLES) MCFG_SAMPLES_CHANNELS(1) MCFG_SAMPLES_START_CB(suna8_state, sh_start) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) MACHINE_CONFIG_END /*************************************************************************** ROMs Loading ***************************************************************************/ /*************************************************************************** Hard Head Location Type File ID Checksum ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L5 27C256 P1 1327 [ main program ] K5 27C256 P2 50B1 [ main program ] J5 27C256 P3 CF73 [ main program ] I5 27C256 P4 DE86 [ main program ] D5 27C256 P5 94D1 [ background ] A5 27C256 P6 C3C7 [ motion obj. ] L7 27C256 P7 A7B8 [ main program ] K7 27C256 P8 5E53 [ main program ] J7 27C256 P9 35FC [ main program ] I7 27C256 P10 8F9A [ main program ] D7 27C256 P11 931C [ background ] A7 27C256 P12 2EED [ motion obj. ] H9 27C256 P13 5CD2 [ snd program ] M9 27C256 P14 5576 [ sound data ] Note: Game No. KRB-14 PCB No. 60138-0083 Main processor - Custom security block (battery backed) CPU No. S562008 Sound processor - Z80 - YM3812 - AY-3-8910 24 MHz crystal ***************************************************************************/ // The sample rom is from srange with 1 byte changed (first byte is FF here, instead of 77) // (laugh sound used when scoring a goal at the end of level 1) ROM_START( hardhead ) ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "p1", 0x00000, 0x8000, CRC(c6147926) SHA1(8d1609aaeac344c6aec102e92d34caab22a8ec64) ) // 1988,9,14 ROM_LOAD( "p2", 0x10000, 0x8000, CRC(faa2cf9a) SHA1(5987f146b58fcbc3aaa9c010d86022b5172bcfb4) ) ROM_LOAD( "p3", 0x18000, 0x8000, CRC(3d24755e) SHA1(519a179594956f7c3ddfaca362c42b453c928e25) ) ROM_LOAD( "p4", 0x20000, 0x8000, CRC(0241ac79) SHA1(b3c3b98fb29836cbc9fd35ac49e02bfefd3b0c79) ) ROM_LOAD( "p7", 0x28000, 0x8000, CRC(beba8313) SHA1(20aa4e07ec560a89d07ec73cc93311ceaed899a3) ) ROM_LOAD( "p8", 0x30000, 0x8000, CRC(211a9342) SHA1(85bdafe1a2c683eea391cc663caabd958fdf5197) ) ROM_LOAD( "p9", 0x38000, 0x8000, CRC(2ad430c4) SHA1(286a5b1042e077c3ae741d01311d4c91f8f87054) ) ROM_LOAD( "p10", 0x40000, 0x8000, CRC(b6894517) SHA1(e114a5f92b83d98215aab6e2cd943a110d118f56) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "p13", 0x0000, 0x8000, CRC(493c0b41) SHA1(994a334253e905c39ec912765e8b0f4b1be900bc) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "p5", 0x00000, 0x8000, CRC(e9aa6fba) SHA1(f286727541f08b136a7d45e13975652bdc8fd663) ) ROM_RELOAD( 0x08000, 0x8000 ) ROM_LOAD( "p6", 0x10000, 0x8000, CRC(15d5f5dd) SHA1(4441344701fcdb2be55bdd76a8a5fd59f5de813c) ) ROM_RELOAD( 0x18000, 0x8000 ) ROM_LOAD( "p11", 0x20000, 0x8000, CRC(055f4c29) SHA1(0eee5db50504a3d37d9291ccd29863ba71da85e1) ) ROM_RELOAD( 0x28000, 0x8000 ) ROM_LOAD( "p12", 0x30000, 0x8000, CRC(9582e6db) SHA1(a2b34d740e07bd35a3184365e7f3ab7476075d70) ) ROM_RELOAD( 0x38000, 0x8000 ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "p14", 0x0000, 0x8000, CRC(41314ac1) SHA1(1ac9213b0ac4ce9fe6256e93875672e128a5d069) ) ROM_END ROM_START( hardheadb ) ROM_REGION( 0x48000+0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1_27512.l6", 0x48000, 0x8000, CRC(bb4aa9ac) SHA1(da6310a1034cf610139d74fc30dd13e5fbd1d8dd) ) // 1988,9,14 (already decrypted) ROM_CONTINUE( 0x00000, 0x8000 ) ROM_LOAD( "p2", 0x10000, 0x8000, CRC(faa2cf9a) SHA1(5987f146b58fcbc3aaa9c010d86022b5172bcfb4) ) ROM_LOAD( "p3", 0x18000, 0x8000, CRC(3d24755e) SHA1(519a179594956f7c3ddfaca362c42b453c928e25) ) ROM_LOAD( "p4", 0x20000, 0x8000, CRC(0241ac79) SHA1(b3c3b98fb29836cbc9fd35ac49e02bfefd3b0c79) ) ROM_LOAD( "p7", 0x28000, 0x8000, CRC(beba8313) SHA1(20aa4e07ec560a89d07ec73cc93311ceaed899a3) ) ROM_LOAD( "p8", 0x30000, 0x8000, CRC(211a9342) SHA1(85bdafe1a2c683eea391cc663caabd958fdf5197) ) ROM_LOAD( "p9", 0x38000, 0x8000, CRC(2ad430c4) SHA1(286a5b1042e077c3ae741d01311d4c91f8f87054) ) ROM_LOAD( "p10", 0x40000, 0x8000, CRC(b6894517) SHA1(e114a5f92b83d98215aab6e2cd943a110d118f56) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "p13", 0x0000, 0x8000, CRC(493c0b41) SHA1(994a334253e905c39ec912765e8b0f4b1be900bc) ) // ROM_LOAD( "2_13_9h.rom", 0x00000, 0x8000, CRC(1b20e5ec) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "p5", 0x00000, 0x8000, CRC(e9aa6fba) SHA1(f286727541f08b136a7d45e13975652bdc8fd663) ) ROM_RELOAD( 0x08000, 0x8000 ) ROM_LOAD( "p6", 0x10000, 0x8000, CRC(15d5f5dd) SHA1(4441344701fcdb2be55bdd76a8a5fd59f5de813c) ) ROM_RELOAD( 0x18000, 0x8000 ) ROM_LOAD( "p11", 0x20000, 0x8000, CRC(055f4c29) SHA1(0eee5db50504a3d37d9291ccd29863ba71da85e1) ) ROM_RELOAD( 0x28000, 0x8000 ) ROM_LOAD( "p12", 0x30000, 0x8000, CRC(9582e6db) SHA1(a2b34d740e07bd35a3184365e7f3ab7476075d70) ) ROM_RELOAD( 0x38000, 0x8000 ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "p14", 0x0000, 0x8000, CRC(41314ac1) SHA1(1ac9213b0ac4ce9fe6256e93875672e128a5d069) ) ROM_END /*************************************************************************** Roms for Hard Head from Suna Electronics '88 The Main Board ---> 2 x Z80 1 x AY-3-8910A 1 x Yamaha YM3812 1 x Xtal 24.000 Mhz One of the Z80 is attached in a daughter board... with discrete circuits and 3 pals... Look at the daughter board: |-------------------------------------------------------------------| | |--------| |---------------| | | | 74LS74 | | PAL 16L8A-2CN | | | |--------| |------Green----| | | |---------| | | |--------| | 74LS244 | |---------------| | | | 74LS74 | |---------| |-------------------| | PAL 16L8A-2CN | | | |--------| | Zilog Z80 | |------Blue-----| | | |-------------------| | | |--------| |---------| |---------------| | | | 74LS74 | | 74LS244 | | PAL 16L8A-2CN | | | |--------| |---------| |------Red------| | | | | |--------| |--------| | | | 74LS00 | | 74LS08 | | | |--------| |--------| | | | |-------------------------------------------------------------------| ***************************************************************************/ ROM_START( hardheadb2 ) ROM_REGION( 0x48000+0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "9_1.6l", 0x00000, 0x8000, CRC(750e6aee) SHA1(ec8f61a1a3d95ef0e3748968f6da73e972763493) ) // = 1_27512.l6 [1/2] (hardheadb) 1988,9,14 (already decrypted) ROM_RELOAD( 0x48000, 0x8000 ) // remove protection patches at 83a, 85c, 881 (79 c9 -> b9 c8) to pass rom test ROM_LOAD( "10_2.6k", 0x10000, 0x8000, CRC(8fcc1248) SHA1(5da0b7dc63f7bc00e81e9e5bac02ee6b0076ffaa) ) // = 2_27256.k6 (pop_hh) ROM_LOAD( "11_3.6j", 0x18000, 0x8000, CRC(42c3264a) SHA1(cdad7953a2da1eccbe5abd55b7a8898c25f39f56) ) ROM_LOAD( "12_4.6h", 0x20000, 0x8000, CRC(acf85bcf) SHA1(70e8e4682ff738b0881bbcf84decb2a04946f675) ) ROM_LOAD( "3_7.7l", 0x28000, 0x8000, CRC(ee0ae9cc) SHA1(e188fb19e600f646a741685ba811309827f0f331) ) // ~ p7 77.603149% ROM_LOAD( "4_8.7k", 0x30000, 0x8000, CRC(177ed8cd) SHA1(ac2c7c6fe84f892d60e6ed17b93a3b95c2b561e2) ) // ~ 8_27256.k8 (pop_hh) 97.894287% ROM_LOAD( "5_9.7j", 0x38000, 0x8000, CRC(e4eea730) SHA1(be0a05cc31c55aa84f393024fe08a7cae1554db7) ) ROM_LOAD( "6_10.7h", 0x40000, 0x8000, CRC(84fc6574) SHA1(ab33e6c656f25e65bb08d0a2689693df83cab43d) ) // = 10_27256.i8 (pop_hh) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "2_13.9h", 0x00000, 0x8000, CRC(1b20e5ec) SHA1(b943a9666536b357434f3e7140df959d3c78908b) ) // ~ p13 79.528809% ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "13_5.6d", 0x00000, 0x8000, CRC(e9aa6fba) SHA1(f286727541f08b136a7d45e13975652bdc8fd663) ) // = p5 ROM_RELOAD( 0x08000, 0x8000 ) ROM_LOAD( "14_6.6a", 0x10000, 0x8000, CRC(ae24b92a) SHA1(8f7b1180b8762548853ca0c53d7913cfe17acc48) ) ROM_RELOAD( 0x18000, 0x8000 ) ROM_LOAD( "7_11.7d", 0x20000, 0x8000, CRC(3751b99d) SHA1(dc4082e481a79f0389e59b4b38698df8f7b94053) ) // = 11_27256.d8 (pop_hh) ROM_RELOAD( 0x28000, 0x8000 ) ROM_LOAD( "8_12.7a", 0x30000, 0x8000, CRC(9582e6db) SHA1(a2b34d740e07bd35a3184365e7f3ab7476075d70) ) // = p12 ROM_RELOAD( 0x38000, 0x8000 ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "1_14.11m", 0x00000, 0x8000, CRC(41314ac1) SHA1(1ac9213b0ac4ce9fe6256e93875672e128a5d069) ) // = p14 ROM_END ROM_START( pop_hh ) ROM_REGION( 0x48000+0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1_27512.l6", 0x48000, 0x8000, CRC(bb4aa9ac) SHA1(da6310a1034cf610139d74fc30dd13e5fbd1d8dd) ) // 1988,9,14 (already decrypted) ROM_CONTINUE( 0x00000, 0x8000 ) ROM_LOAD( "2_27256.k6", 0x10000, 0x8000, CRC(8fcc1248) SHA1(5da0b7dc63f7bc00e81e9e5bac02ee6b0076ffaa) ) ROM_LOAD( "p3", 0x18000, 0x8000, CRC(3d24755e) SHA1(519a179594956f7c3ddfaca362c42b453c928e25) ) // 3_27256.j6 ROM_LOAD( "p4", 0x20000, 0x8000, CRC(0241ac79) SHA1(b3c3b98fb29836cbc9fd35ac49e02bfefd3b0c79) ) // 4_27256.i6 ROM_LOAD( "p7", 0x28000, 0x8000, CRC(beba8313) SHA1(20aa4e07ec560a89d07ec73cc93311ceaed899a3) ) // 7_27256.l8 ROM_LOAD( "8_27256.k8", 0x30000, 0x8000, CRC(87a8b4b4) SHA1(83d30cf184c5dccdf2666c0ef9e078541d6a146e) ) ROM_LOAD( "p9", 0x38000, 0x8000, CRC(2ad430c4) SHA1(286a5b1042e077c3ae741d01311d4c91f8f87054) ) // 9_27256.j8 ROM_LOAD( "10_27256.i8", 0x40000, 0x8000, CRC(84fc6574) SHA1(ab33e6c656f25e65bb08d0a2689693df83cab43d) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "p13", 0x0000, 0x8000, CRC(493c0b41) SHA1(994a334253e905c39ec912765e8b0f4b1be900bc) ) // 13_27256.i10 ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "p5", 0x00000, 0x8000, CRC(e9aa6fba) SHA1(f286727541f08b136a7d45e13975652bdc8fd663) ) // 5_27256.d6 ROM_RELOAD( 0x08000, 0x8000 ) ROM_LOAD( "p6", 0x10000, 0x8000, CRC(15d5f5dd) SHA1(4441344701fcdb2be55bdd76a8a5fd59f5de813c) ) // 6_27256.a6 ROM_RELOAD( 0x18000, 0x8000 ) ROM_LOAD( "11_27256.d8", 0x20000, 0x8000, CRC(3751b99d) SHA1(dc4082e481a79f0389e59b4b38698df8f7b94053) ) ROM_RELOAD( 0x28000, 0x8000 ) ROM_LOAD( "p12", 0x30000, 0x8000, CRC(9582e6db) SHA1(a2b34d740e07bd35a3184365e7f3ab7476075d70) ) // 12_27256.a8 ROM_RELOAD( 0x38000, 0x8000 ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "p14", 0x0000, 0x8000, CRC(41314ac1) SHA1(1ac9213b0ac4ce9fe6256e93875672e128a5d069) ) // 14_27256.m11 ROM_END /*************************************************************************** Rough Ranger / Super Ranger (SunA 1988) K030087 24MHz 6 7 8 9 - 10 11 12 13 sw1 sw2 6264 5 6116 4 6116 6116 3 6116 14 2 6116 Z80A 1 6116 8910 6116 6116 2203 15 Epoxy CPU 6116 --------------------------- Super Ranger by SUNA (1988) --------------------------- Location Type File ID Checksum ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ E2 27C256 1 28C0 [ main program ] F2 27C256 2 73AD [ main program ] H2 27C256 3 8B7A [ main program ] I2 27C512 4 77BE [ main program ] J2 27C512 5 6121 [ main program ] P5 27C256 6 BE0E [ background ] P6 27C256 7 BD5A [ background ] P7 27C256 8 4605 [ motion obj. ] P8 27C256 9 7097 [ motion obj. ] P9 27C256 10 3B9F [ background ] P10 27C256 11 2AE8 [ background ] P11 27C256 12 8B6D [ motion obj. ] P12 27C256 13 927E [ motion obj. ] J13 27C256 14 E817 [ snd program ] E13 27C256 15 54EE [ sound data ] Note: Game model number K030087 Hardware: Main processor - Custom security block (battery backed) CPU No. S562008 Sound processor - Z80 - YM2203C - AY-3-8910 All versions come with roms simply numbered 1 through 15 even if the data is different per version. ***************************************************************************/ ROM_START( rranger ) // Sharp Image License but distributed by CAPCOM U.S.A. Inc. PCB came with ROM 1 labeled as 01 CAPCOM // PCB have been see with ROM 1 simply labled as 1 in either RED and BLUE print. ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "01_capcom.e2", 0x00000, 0x8000, CRC(ff1868cf) SHA1(54175111d8e39894ff11a779057f0bc061d63912) ) // V 2.0 1988,4,15 ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(57543643) SHA1(59c7717321314678e61b50767e168eb2a73147d3) ) // sldh - Sharp Image license ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(42c4fdbf) SHA1(fd8b267d5098b640e731942b922149866ece1dc6) ) // sldh - Sharp Image license ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END ROM_START( rrangerb ) // protection is patched out in this set. ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1.e2", 0x00000, 0x8000, CRC(4fb4f096) SHA1(c5ac3e04080cdcf570769918587e8cf8d455fc30) ) // sldh - V 2.0 1988,4,15 ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(57543643) SHA1(59c7717321314678e61b50767e168eb2a73147d3) ) // sldh - Sharp Image license ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(42c4fdbf) SHA1(fd8b267d5098b640e731942b922149866ece1dc6) ) // sldh - Sharp Image license ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END ROM_START( sranger ) ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1.e2", 0x00000, 0x8000, CRC(4eef1ede) SHA1(713074400e27f6983f97ce73e522a1d687961317) ) // sldh - V 2.0 1988,4,15 ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(4f11fef3) SHA1(f48f3051a5ab681da0fd0a7107ea0c833993247a) ) // sldh - Newer / updated graphics ?? ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(1b204d6b) SHA1(8649d552dff08bb01ac7ca6cb873124e05646041) ) // sldh - Newer / updated graphics ?? ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END ROM_START( srangerb ) ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "r1bt", 0x00000, 0x8000, CRC(40635e7c) SHA1(741290ad640e941774d496a329cd29198ab83463) ) // NYWACORPORATION LTD 88-1-07 ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_LOAD( "r5bt", 0x28000, 0x8000, BAD_DUMP CRC(f7f391b5) SHA1(a0a8de1d9d7876f5c4b26e34d5e54ec79529c2da) ) // wrong length ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(4f11fef3) SHA1(f48f3051a5ab681da0fd0a7107ea0c833993247a) ) // sldh - Newer / updated graphics ?? ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(1b204d6b) SHA1(8649d552dff08bb01ac7ca6cb873124e05646041) ) // sldh - Newer / updated graphics ?? ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END ROM_START( srangero ) ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1.e2", 0x00000, 0x8000, CRC(2287d3fc) SHA1(cc2dab587ca50fc4371d2861ac842cd81370f868) ) // 88,2,28 RANGER ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(ffe13cc4) SHA1(811a749fcb4f9a575374af593b79d3927f74d301) ) ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(13f1faab) SHA1(901df4bd1d42483679edae5e1a0b2b8b3a429d05) ) ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END ROM_START( srangerw ) // same program as srangero, 2 different gfx roms ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1.e2", 0x00000, 0x8000, CRC(2287d3fc) SHA1(cc2dab587ca50fc4371d2861ac842cd81370f868) ) // 88,2,28 RANGER ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(312ecda6) SHA1(db11259e10da5f7f2b7b306482a08835597dbde4) ) // sldh - WDK license ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(8731abc6) SHA1(05c13b359106b4ead1326f2e53d0585a2f0019ac) ) // sldh - WDK license ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END ROM_START( srangern ) // same program as srangero, 2 different gfx roms ROM_REGION( 0x48000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "1.e2", 0x00000, 0x8000, CRC(2287d3fc) SHA1(cc2dab587ca50fc4371d2861ac842cd81370f868) ) // 88,2,28 RANGER ROM_LOAD( "2.f2", 0x10000, 0x8000, CRC(ff65af29) SHA1(90f9a0c862e2a9da0343446a325961ab29d26b4b) ) ROM_LOAD( "3.h2", 0x18000, 0x8000, CRC(64e09436) SHA1(077f0d38d489562532d5f7678434a85ca04d373c) ) ROM_LOAD( "4.i2", 0x30000, 0x8000, CRC(4346fae6) SHA1(a9f000e4427a1e9902627402dce14dc8ee04dbf8) ) ROM_CONTINUE( 0x20000, 0x8000 ) ROM_LOAD( "5.j2", 0x38000, 0x8000, CRC(6a7ca1c3) SHA1(0f0b508e9b20909e9efa07b42d67732082b6940b) ) ROM_CONTINUE( 0x28000, 0x8000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "14.j13", 0x0000, 0x8000, CRC(11c83aa1) SHA1(d1f75096528b220a3f858eac62e3b4111fa013de) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "15.e13", 0x0000, 0x8000, CRC(28c2c87e) SHA1(ec0d92140ef44df822f2229e79b915e051caa033) ) ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "6.p5", 0x00000, 0x8000, CRC(af534075) SHA1(ce6e927702666d2588d6cdb3991463065a4e8084) ) // sldh - NOVA license ROM_LOAD( "7.p6", 0x08000, 0x8000, CRC(9f35dbfa) SHA1(8a8f158ad7f0bc6b43eaa95959af3ab58cf14d6d) ) ROM_LOAD( "8.p7", 0x10000, 0x8000, CRC(f400db89) SHA1(a07b226af40cac5a20739bb8f4226909724fda86) ) ROM_LOAD( "9.p8", 0x18000, 0x8000, CRC(fa2a11ea) SHA1(ea29ade1254caa2a3bd4b4816fe338f238025284) ) ROM_LOAD( "10.p9", 0x20000, 0x8000, CRC(a4916537) SHA1(9defc8b22ba5119d8c3efb3eb1e28e835adffec2) ) // sldh - NOVA license ROM_LOAD( "11.p10", 0x28000, 0x8000, CRC(19037a7b) SHA1(a6843b0220bab5c47307a0c761d5bd638716aef0) ) ROM_LOAD( "12.p11", 0x30000, 0x8000, CRC(c59c0ec7) SHA1(80003f3e33610a84f6e194918276d5f60145b00e) ) ROM_LOAD( "13.p12", 0x38000, 0x8000, CRC(9809fee8) SHA1(b7e0664702d0c1f77247d7c76a381b24687a09ea) ) ROM_END /*************************************************************************** Brick Zone SUNA ELECTRONICS IND CO., LTD CPU Z0840006PSC (ZILOG) Chrystal : 24.000 MHz Sound CPU : Z084006PSC (ZILOG) + AY3-8910A Warning ! This game has a 'SUNA' protection block :-( - (c) 1992 Suna Electronics 2 * Z80B AY-3-8910 YM3812 24 MHz crystal Large epoxy(?) module near the cpu's. ***************************************************************************/ ROM_START( brickzn ) ROM_REGION( 0x50000 + 0x40000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "p9.m7", 0x00000, 0x08000, CRC(bd7a3c01) SHA1(05fb2836f1c8d8818847ccb76e7b477f13a9929b) ) // V6.0 1992,3,16 ROM_LOAD( "p8.k7", 0x10000, 0x20000, CRC(ec3e266d) SHA1(4441a5ae88e51353f6d1eb22c00becb0a7ecea6e) ) ROM_LOAD( "p7.i7", 0x30000, 0x20000, CRC(4dd88631) SHA1(0dbcaf3420dad82c3ed94d231948fe69b044b786) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "10.o8", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) ) // BRICK MUSIC XILINX PROGRAM 3020 1991,11,14 MUSIC PROGRAM V 2,0 1990.12.14 ROM_REGION( 0x10000, "pcm", 0 ) /* PCM Z80 Code */ ROM_LOAD( "11.n10", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) ) ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "p5.m5", 0x00000, 0x20000, CRC(ca59e2f7) SHA1(dbb9f2b316a44f760768f0430798e0c4e9e8f3ff) ) ROM_LOAD( "p4.l5", 0x20000, 0x20000, CRC(cc8fb330) SHA1(fd263f65b81acbfc00fe339c461068ab160c04af) ) ROM_LOAD( "p3.k5", 0x40000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) ) ROM_LOAD( "p2.i5", 0x60000, 0x20000, CRC(592d45ce) SHA1(8ce9236b7deba6cf00999680314ac04eff624a6d) ) ROM_LOAD( "p1.h5", 0x80000, 0x20000, CRC(7a6bb583) SHA1(ff7018c07182fce0ff6954bbe3b08fa5105f6be0) ) ROM_LOAD( "p6.h7", 0xa0000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) ) ROM_END ROM_START( brickznv5 ) ROM_REGION( 0x50000 + 0x40000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "brickzon.009", 0x00000, 0x08000, CRC(1ea68dea) SHA1(427152a26b062c5e77089de49c1da69369d4d557) ) // V5.0 1992,3,3 ROM_LOAD( "brickzon.008", 0x10000, 0x20000, CRC(c61540ba) SHA1(08c0ede591b229427b910ca6bb904a6146110be8) ) ROM_LOAD( "brickzon.007", 0x30000, 0x20000, CRC(ceed12f1) SHA1(9006726b75a65455afb1194298bade8fa2207b4a) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "brickzon.010", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) ) // BRICK MUSIC XILINX PROGRAM 3020 1991,11,14 MUSIC PROGRAM V 2,0 1990.12.14 ROM_REGION( 0x10000, "pcm", 0 ) /* PCM Z80 Code */ ROM_LOAD( "brickzon.011", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) ) ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "brickzon.005", 0x00000, 0x20000, CRC(118f8392) SHA1(598fa4df3ae348ec9796cd6d90c3045bec546da3) ) ROM_LOAD( "brickzon.004", 0x20000, 0x20000, CRC(2be5f335) SHA1(dc870a3c5303cb2ea1fea4a25f53db016ed5ecee) ) ROM_LOAD( "brickzon.003", 0x40000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) ) ROM_LOAD( "brickzon.002", 0x60000, 0x20000, CRC(241f0659) SHA1(71b577bf7097b3b367d068df42f991d515f9003a) ) ROM_LOAD( "brickzon.001", 0x80000, 0x20000, CRC(6970ada9) SHA1(5cfe5dcf25af7aff67ee5d78eb963d598251025f) ) ROM_LOAD( "brickzon.006", 0xa0000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) ) ROM_END ROM_START( brickznv4 ) ROM_REGION( 0x50000 + 0x40000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "39", 0x00000, 0x08000, CRC(043380bd) SHA1(7eea7cc7d754815df233879b4a9d3d88eac5b28d) ) // V3.0 1992,1,23 ROM_LOAD( "38", 0x10000, 0x20000, CRC(e16216e8) SHA1(e88ae97e8a632823d5f1fe500954b6f6542407d5) ) ROM_LOAD( "brickzon.007", 0x30000, 0x20000, CRC(ceed12f1) SHA1(9006726b75a65455afb1194298bade8fa2207b4a) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "brickzon.010", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) ) // BRICK MUSIC XILINX PROGRAM 3020 1991,11,14 MUSIC PROGRAM V 2,0 1990.12.14 ROM_REGION( 0x10000, "pcm", 0 ) /* PCM Z80 Code */ ROM_LOAD( "brickzon.011", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) ) ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "35", 0x00000, 0x20000, CRC(b463dfcf) SHA1(35c8a4a0c5b62a087a2cb70bc5b7815f5bb2d973) ) ROM_LOAD( "brickzon.004", 0x20000, 0x20000, CRC(2be5f335) SHA1(dc870a3c5303cb2ea1fea4a25f53db016ed5ecee) ) ROM_LOAD( "brickzon.003", 0x40000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) ) ROM_LOAD( "32", 0x60000, 0x20000, CRC(32dbf2dd) SHA1(b9ab8b93a062b871b7f824e4be2f214cc832d585) ) ROM_LOAD( "brickzon.001", 0x80000, 0x20000, CRC(6970ada9) SHA1(5cfe5dcf25af7aff67ee5d78eb963d598251025f) ) ROM_LOAD( "brickzon.006", 0xa0000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) ) ROM_END ROM_START( brickzn11 ) ROM_REGION( 0x50000 + 0x40000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "9.bin", 0x00000, 0x08000, CRC(24f88cfd) SHA1(dfa7313ab6696042bab2e6cc8ff97b331d526c6b) ) // V1.1 1992,1,13 ROM_LOAD( "8.bin", 0x10000, 0x20000, CRC(e2c7f7ac) SHA1(43377daf6957829ef9bb7a81708c2f18f5d7ced6) ) ROM_LOAD( "7.bin", 0x30000, 0x20000, CRC(7af5b25c) SHA1(9e98e99bdc5be1602144c83f40b2ccf6b90a729a) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "10.bin", 0x00000, 0x10000, CRC(494adf0f) SHA1(eb28ccf0c5f38c2299f55e379ff73ba84bb793c6) ) // NO PROGRAM MUSIC PROGRAM V 2.4 1990.12.14 ROM_REGION( 0x10000, "pcm", 0 ) /* PCM Z80 Code */ ROM_LOAD( "11.bin", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) ) ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(e9f73ba1) SHA1(4b5e294ae160ba3ca28b8956a797330234ace576) ) ROM_LOAD( "4.bin", 0x20000, 0x20000, CRC(2be5f335) SHA1(dc870a3c5303cb2ea1fea4a25f53db016ed5ecee) ) ROM_LOAD( "3.bin", 0x40000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) ) ROM_LOAD( "2.bin", 0x60000, 0x20000, CRC(0e994fbf) SHA1(62e059a5ca5f7199e597841f94519a466affe098) ) ROM_LOAD( "1.bin", 0x80000, 0x20000, CRC(6970ada9) SHA1(5cfe5dcf25af7aff67ee5d78eb963d598251025f) ) ROM_LOAD( "6.bin", 0xa0000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) ) ROM_END /*************************************************************************** Hard Head 2 These ROMS are all 27C512 ROM 1 is at Location 1N ROM 2 ..............1o ROM 3 ..............1Q ROM 4...............3N ROM 5.............. 4N ROM 6...............4o ROM 7...............4Q ROM 8...............6N ROM 10..............H5 ROM 11..............i5 ROM 12 .............F7 ROM 13..............H7 ROM 15..............N10 These ROMs are 27C256 ROM 9...............F5 ROM 14..............C8 Game uses 2 Z80B processors and a Custom Sealed processor (assumed) Labeled "SUNA T568009" Sound is a Yamaha YM3812 and a AY-3-8910A 3 RAMS are 6264LP- 10 and 5) HM6116K-90 rams (small package) 24 MHz ***************************************************************************/ ROM_START( hardhea2 ) ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "hrd-hd9", 0x00000, 0x08000, CRC(69c4c307) SHA1(0dfde1dcda51b5b1740aff9e96cb877a428a3e04) ) // V 2.0 1991,2,12 ROM_LOAD( "hrd-hd10", 0x10000, 0x10000, CRC(77ec5b0a) SHA1(2d3e24c208904a7884e585e08e5818fd9f8b5391) ) ROM_LOAD( "hrd-hd11", 0x20000, 0x10000, CRC(12af8f8e) SHA1(1b33a060b70900042fdae00f7dec325228d566f5) ) ROM_LOAD( "hrd-hd12", 0x30000, 0x10000, CRC(35d13212) SHA1(2fd03077b89ec9e55d2758b7f9cada970f0bdd91) ) ROM_LOAD( "hrd-hd13", 0x40000, 0x10000, CRC(3225e7d7) SHA1(2da9d1ce182dab8d9e09772e6899676b84c7458c) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "hrd-hd14", 0x00000, 0x08000, CRC(79a3be51) SHA1(30bc67cd3a936615c6931f8e15953425dff59611) ) ROM_REGION( 0x10000, "pcm", 0 ) /* PCM Z80 Code */ ROM_LOAD( "hrd-hd15", 0x00000, 0x10000, CRC(bcbd88c3) SHA1(79782d598d9d764de70c54fc07ff9bf0f7d13d62) ) ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "hrd-hd1", 0x00000, 0x10000, CRC(7e7b7a58) SHA1(1a74260dda64aafcb046c8add92a54655bbc74e4) ) ROM_LOAD( "hrd-hd2", 0x10000, 0x10000, CRC(303ec802) SHA1(533c29d9bb54415410c5d3c5af234b8b040190de) ) ROM_LOAD( "hrd-hd3", 0x20000, 0x10000, CRC(3353b2c7) SHA1(a3ec0fc2a97e7e0bc72fafd5897cb1dd4cd32197) ) ROM_LOAD( "hrd-hd4", 0x30000, 0x10000, CRC(dbc1f9c1) SHA1(720c729d7825635584632d033b4b46eea2fb1291) ) ROM_LOAD( "hrd-hd5", 0x40000, 0x10000, CRC(f738c0af) SHA1(7dda657acd1d6fb7064e8dbd5ce386e9eae3d36a) ) ROM_LOAD( "hrd-hd6", 0x50000, 0x10000, CRC(bf90d3ca) SHA1(2d0533d93fc5155fe879c1890bc7bc4581308e16) ) ROM_LOAD( "hrd-hd7", 0x60000, 0x10000, CRC(992ce8cb) SHA1(21c0dd227138ec64003c7cb090855ec27d41719e) ) ROM_LOAD( "hrd-hd8", 0x70000, 0x10000, CRC(359597a4) SHA1(ae024dd61c5d12813a661abe8ea63ae6112ddc9c) ) ROM_END ROM_START( hardhea2b ) ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "9.f5", 0x00000, 0x10000, CRC(3f31ece3) SHA1(224e9bc60a71ede9d194e9c696c2259a55f16e7d) ) ROM_LOAD( "10.h5", 0x10000, 0x10000, CRC(98b34813) SHA1(8aa9cab73480e4526d30880f99332e7cb716ce81) ) ROM_LOAD( "11.i5", 0x20000, 0x10000, CRC(12af8f8e) SHA1(1b33a060b70900042fdae00f7dec325228d566f5) ) ROM_LOAD( "12.f7", 0x30000, 0x10000, CRC(35d13212) SHA1(2fd03077b89ec9e55d2758b7f9cada970f0bdd91) ) ROM_LOAD( "13.h7", 0x40000, 0x10000, CRC(044f956f) SHA1(9361d383b14fc0f4f718d46db7fcac56647405a6) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "14.c6", 0x00000, 0x08000, CRC(79a3be51) SHA1(30bc67cd3a936615c6931f8e15953425dff59611) ) ROM_REGION( 0x10000, "pcm", 0 ) /* PCM Z80 Code */ ROM_LOAD( "15.m10", 0x00000, 0x10000, CRC(bcbd88c3) SHA1(79782d598d9d764de70c54fc07ff9bf0f7d13d62) ) ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "1.n1", 0x00000, 0x10000, CRC(7e7b7a58) SHA1(1a74260dda64aafcb046c8add92a54655bbc74e4) ) ROM_LOAD( "2.o1", 0x10000, 0x10000, CRC(303ec802) SHA1(533c29d9bb54415410c5d3c5af234b8b040190de) ) ROM_LOAD( "3.q1", 0x20000, 0x10000, CRC(3353b2c7) SHA1(a3ec0fc2a97e7e0bc72fafd5897cb1dd4cd32197) ) ROM_LOAD( "4.n3", 0x30000, 0x10000, CRC(dbc1f9c1) SHA1(720c729d7825635584632d033b4b46eea2fb1291) ) ROM_LOAD( "5.n4", 0x40000, 0x10000, CRC(f738c0af) SHA1(7dda657acd1d6fb7064e8dbd5ce386e9eae3d36a) ) ROM_LOAD( "6.o4", 0x50000, 0x10000, CRC(bf90d3ca) SHA1(2d0533d93fc5155fe879c1890bc7bc4581308e16) ) ROM_LOAD( "7.q4", 0x60000, 0x10000, CRC(992ce8cb) SHA1(21c0dd227138ec64003c7cb090855ec27d41719e) ) ROM_LOAD( "8.n6", 0x70000, 0x10000, CRC(359597a4) SHA1(ae024dd61c5d12813a661abe8ea63ae6112ddc9c) ) ROM_END /*************************************************************************** Star Fighter ***************************************************************************/ ROM_START( starfigh ) ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "starfgtr.l1", 0x00000, 0x08000, CRC(f93802c6) SHA1(4005b06b69dd440dfb6385766386a1168e73288f) ) // V.1 ROM_LOAD( "starfgtr.j1", 0x10000, 0x10000, CRC(fcfcf08a) SHA1(65fe1666aa5092f820b337bcbcbed7accdec440d) ) ROM_LOAD( "starfgtr.i1", 0x20000, 0x10000, CRC(6935fcdb) SHA1(f47812f6716ccf52dd7ab8522c29e059f1e38f31) ) ROM_LOAD( "starfgtr.l3", 0x30000, 0x10000, CRC(50c072a4) SHA1(e48ec5a786ef245e5b2b72390824b6b7c449a74b) ) // 0xxxxxxxxxxxxxxx = 0xFF (ROM Test: OK) ROM_LOAD( "starfgtr.j3", 0x40000, 0x10000, CRC(3fe3c714) SHA1(ccc9a33cf29c0e43ae8ab91f08438a89c777c186) ) // clear text here ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "starfgtr.m8", 0x0000, 0x8000, CRC(ae3b0691) SHA1(41e004d09522cf7ddce6e4adc68841ad5553264a) ) ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ ROM_LOAD( "starfgtr.q10", 0x0000, 0x8000, CRC(fa510e94) SHA1(e2742385a4ba152dbc89534e4350d1d9ad49730f) ) ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) /* Sprites */ // bitplanes 0-1 ROM_LOAD( "starfgtr.e4", 0x00000, 0x10000, CRC(54c0ca3d) SHA1(87f785502beb8a52d47bd48275d695ee303054f8) ) // banks 00-03 ROM_LOAD( "starfgtr.d4", 0x10000, 0x10000, CRC(4313ba40) SHA1(3c41f99dc40136517f172b3525987d8909f877c3) ) // banks 04-07 ROM_COPY( "gfx1", 0x00000, 0x20000, 0x20000 ) // banks 08-0f == 00-07 ROM_LOAD( "starfgtr.b4", 0x40000, 0x10000, CRC(ad8d0f21) SHA1(ffdb407c7fe76b5f290de6bbed2fec34e40daf3f) ) // banks 10-13 ROM_LOAD( "starfgtr.a4", 0x50000, 0x10000, CRC(6d8f74c8) SHA1(c40b77e27bd29d6c3a9b4d43189933c10543786b) ) // banks 14-17 ROM_COPY( "gfx1", 0x40000, 0x60000, 0x20000 ) // banks 18-1f == 10-17 // bitplanes 2-3 ROM_LOAD( "starfgtr.e6", 0x80000, 0x10000, CRC(ceff00ff) SHA1(5e7df7f33f36f4bc511be48266eaec274dfb8706) ) ROM_LOAD( "starfgtr.d6", 0x90000, 0x10000, CRC(7aaa358a) SHA1(56d75f4abe626de7923d5bcc9ad18c02ce162907) ) ROM_COPY( "gfx1", 0x80000, 0xa0000, 0x20000 ) ROM_LOAD( "starfgtr.b6", 0xc0000, 0x10000, CRC(47d6049c) SHA1(cae0795a19cb6bb8bdabc10c200aa6f8d78dd347) ) ROM_LOAD( "starfgtr.a6", 0xd0000, 0x10000, CRC(4a33f6f3) SHA1(daa0a1a43b1b60e2f05b9934fdd6b5f285a0b93a) ) ROM_COPY( "gfx1", 0xc0000, 0xe0000, 0x20000 ) ROM_END /*************************************************************************** Spark Man Suna Electronics IND. CO., LTD 1989 KRB-16 60136-0081 Pinout = JAMMA Game uses a Custom Sealed processor labeled "SUNA T568009" and a z80 processor for sound Sound is a Yamaha YM3812 and a AY-3-8910A 24mhz crystal ***************************************************************************/ ROM_START( sparkman ) ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "sparkman.e7", 0x00000, 0x08000, CRC(d89c5780) SHA1(177f0ae21c00575a7eb078e86f3a790fc95211e4) ) // "SPARK MAN MAIN PROGRAM 1989,8,12 K.H.T (SUNA ELECTRPNICS) V 2.0 SOULE KOREA" ROM_LOAD( "10.g7", 0x10000, 0x10000, CRC(48b4a31e) SHA1(771d1f1a2ce950ce2b661a4081471e98a7a7d53e) ) ROM_LOAD( "12.g8", 0x20000, 0x10000, CRC(b8a4a557) SHA1(10251b49fb44fb1e7c71fde8fe9544df29d27346) ) ROM_LOAD( "11.i7", 0x30000, 0x10000, CRC(f5f38e1f) SHA1(25f0abbac1298fad1f8e7202db05e48c3598bc88) ) ROM_LOAD( "13.i8", 0x40000, 0x10000, CRC(e54eea25) SHA1(b8ea884ee1a24953b6406f2d1edf103700f542d2) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "14.h11", 0x00000, 0x08000, CRC(06822f3d) SHA1(d30592cecbcd4dbf67e5a8d9c151d60b3232a54d) ) ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (0) */ // bitplanes 0-1 ROM_LOAD( "p3.u1", 0x00000, 0x10000, CRC(39dbd414) SHA1(03fe938ed1191329b6a2f7ed54c6ef69273998df) ) // banks 00-03 ROM_LOAD( "p2.t1", 0x10000, 0x10000, CRC(2e474203) SHA1(a407126d92e529568129d5246f89d51330ff5d32) ) // banks 04-07 ROM_FILL( 0x20000, 0x10000, 0xFF ) ROM_FILL( 0x30000, 0x10000, 0xFF ) ROM_LOAD( "p1.r1", 0x40000, 0x08000, CRC(7115cfe7) SHA1(05fde6279a1edc97e79b1ff3f72b2da400a6a409) ) // banks 10,11 ROM_FILL( 0x50000, 0x10000, 0xFF ) ROM_FILL( 0x60000, 0x10000, 0xFF ) ROM_FILL( 0x70000, 0x10000, 0xFF ) // bitplanes 2-3 ROM_LOAD( "p6.u2", 0x80000, 0x10000, CRC(e6551db9) SHA1(bed2a9ba72895f3ba876b4e0a41c33ea8a3c5af2) ) ROM_LOAD( "p5.t2", 0x90000, 0x10000, CRC(0df5da2a) SHA1(abbd5ba22b30f17d203ecece7afafa0cbe78352c) ) ROM_FILL( 0xa0000, 0x10000, 0xFF ) ROM_FILL( 0xb0000, 0x10000, 0xFF ) ROM_LOAD( "p4.r2", 0xc0000, 0x08000, CRC(6904bde2) SHA1(c426fa0c29b1874c729b981467f219c422f863aa) ) ROM_FILL( 0xd0000, 0x10000, 0xFF ) ROM_FILL( 0xe0000, 0x10000, 0xFF ) ROM_FILL( 0xf0000, 0x10000, 0xFF ) ROM_REGION( 0x100000, "gfx2", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (1) */ // bitplanes 0-1 ROM_LOAD( "p7.u4", 0x00000, 0x10000, CRC(17c16ce4) SHA1(b4127e9aedab69193bef1d85e68003e225913417) ) // banks 00-03 (alt gfx) ROM_COPY( "gfx2", 0x00000, 0x10000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x20000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x30000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x40000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x50000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x60000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x70000, 0x10000 ) // bitplanes 2-3 ROM_LOAD( "p8.u6", 0x80000, 0x10000, CRC(414222ea) SHA1(e05f0504c6e735c73027312a85cc55fc98728e53) ) ROM_COPY( "gfx2", 0x80000, 0x90000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xa0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xb0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xc0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xd0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xe0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xf0000, 0x10000 ) ROM_REGION( 0x8000 * 2, "samples", 0 ) /* Samples */ ROM_LOAD( "15.b10", 0x0000, 0x8000, CRC(46c7d4d8) SHA1(99f38cc044390ee4646498667ad2bf536ce91e8f) ) ROM_LOAD( "16.b11", 0x8000, 0x8000, CRC(d6823a62) SHA1(f8ce748aa7bdc9c95799dd111fd872717e46d416) ) ROM_END ROM_START( sparkmana ) ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "p9.7f", 0x00000, 0x08000, CRC(b114cb2b) SHA1(4f79bf65ef17147004f7a8d1d6a58dac0293cdc7) ) // sparkman.e7 99.972534% (9 bytes differ, version string is the same) ROM_LOAD( "10.g7", 0x10000, 0x10000, CRC(48b4a31e) SHA1(771d1f1a2ce950ce2b661a4081471e98a7a7d53e) ) ROM_LOAD( "12.g8", 0x20000, 0x10000, CRC(b8a4a557) SHA1(10251b49fb44fb1e7c71fde8fe9544df29d27346) ) ROM_LOAD( "11.i7", 0x30000, 0x10000, CRC(f5f38e1f) SHA1(25f0abbac1298fad1f8e7202db05e48c3598bc88) ) ROM_LOAD( "13.i8", 0x40000, 0x10000, CRC(e54eea25) SHA1(b8ea884ee1a24953b6406f2d1edf103700f542d2) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ ROM_LOAD( "14.h11", 0x00000, 0x08000, CRC(06822f3d) SHA1(d30592cecbcd4dbf67e5a8d9c151d60b3232a54d) ) ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (0) */ // bitplanes 0-1 ROM_LOAD( "p3.u1", 0x00000, 0x10000, CRC(39dbd414) SHA1(03fe938ed1191329b6a2f7ed54c6ef69273998df) ) // banks 00-03 ROM_LOAD( "p2.t1", 0x10000, 0x10000, CRC(2e474203) SHA1(a407126d92e529568129d5246f89d51330ff5d32) ) // banks 04-07 ROM_FILL( 0x20000, 0x10000, 0xFF ) ROM_FILL( 0x30000, 0x10000, 0xFF ) ROM_LOAD( "p1.r1", 0x40000, 0x08000, CRC(7115cfe7) SHA1(05fde6279a1edc97e79b1ff3f72b2da400a6a409) ) // banks 10,11 ROM_FILL( 0x50000, 0x10000, 0xFF ) ROM_FILL( 0x60000, 0x10000, 0xFF ) ROM_FILL( 0x70000, 0x10000, 0xFF ) // bitplanes 2-3 ROM_LOAD( "p6.u2", 0x80000, 0x10000, CRC(e6551db9) SHA1(bed2a9ba72895f3ba876b4e0a41c33ea8a3c5af2) ) ROM_LOAD( "p5.t2", 0x90000, 0x10000, CRC(0df5da2a) SHA1(abbd5ba22b30f17d203ecece7afafa0cbe78352c) ) ROM_FILL( 0xa0000, 0x10000, 0xFF ) ROM_FILL( 0xb0000, 0x10000, 0xFF ) ROM_LOAD( "p4.r2", 0xc0000, 0x08000, CRC(6904bde2) SHA1(c426fa0c29b1874c729b981467f219c422f863aa) ) ROM_FILL( 0xd0000, 0x10000, 0xFF ) ROM_FILL( 0xe0000, 0x10000, 0xFF ) ROM_FILL( 0xf0000, 0x10000, 0xFF ) ROM_REGION( 0x100000, "gfx2", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (1) */ // bitplanes 0-1 ROM_LOAD( "p7.u4", 0x00000, 0x10000, CRC(17c16ce4) SHA1(b4127e9aedab69193bef1d85e68003e225913417) ) // banks 00-03 (alt gfx) ROM_COPY( "gfx2", 0x00000, 0x10000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x20000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x30000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x40000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x50000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x60000, 0x10000 ) ROM_COPY( "gfx2", 0x00000, 0x70000, 0x10000 ) // bitplanes 2-3 ROM_LOAD( "p8.u6", 0x80000, 0x10000, CRC(414222ea) SHA1(e05f0504c6e735c73027312a85cc55fc98728e53) ) ROM_COPY( "gfx2", 0x80000, 0x90000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xa0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xb0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xc0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xd0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xe0000, 0x10000 ) ROM_COPY( "gfx2", 0x80000, 0xf0000, 0x10000 ) ROM_REGION( 0x8000 * 2, "samples", 0 ) /* Samples */ ROM_LOAD( "15.b10", 0x0000, 0x8000, CRC(46c7d4d8) SHA1(99f38cc044390ee4646498667ad2bf536ce91e8f) ) ROM_LOAD( "16.b11", 0x8000, 0x8000, CRC(d6823a62) SHA1(f8ce748aa7bdc9c95799dd111fd872717e46d416) ) ROM_END /*************************************************************************** Games Drivers ***************************************************************************/ void suna8_state::init_suna8() { m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } GAME( 1988, sranger, 0, rranger, rranger, suna8_state, init_suna8, ROT0, "SunA", "Super Ranger (v2.0)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, rranger, sranger, rranger, rranger, suna8_state, init_suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, rrangerb, sranger, rranger, rranger, suna8_state, init_suna8, ROT0, "bootleg", "Rough Ranger (v2.0, bootleg)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, srangero, sranger, rranger, rranger, suna8_state, init_suna8, ROT0, "SunA", "Super Ranger (older)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, srangern, sranger, rranger, rranger, suna8_state, init_suna8, ROT0, "SunA (NOVA license)", "Super Ranger (older, NOVA license)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, srangerw, sranger, rranger, rranger, suna8_state, init_suna8, ROT0, "SunA (WDK license)", "Super Ranger (older, WDK license)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, srangerb, sranger, rranger, rranger, suna8_state, init_suna8, ROT0, "bootleg (NYWA)", "Super Ranger (older, bootleg)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1988, hardhead, 0, hardhead, hardhead, suna8_state, init_hardhead, ROT0, "SunA", "Hard Head", 0 ) GAME( 1988, hardheadb, hardhead, hardhead, hardhead, suna8_state, init_hardhedb, ROT0, "bootleg", "Hard Head (bootleg, set 1)", 0 ) GAME( 1988, hardheadb2,hardhead, hardhead, hardhead, suna8_state, init_hardhedb, ROT0, "bootleg", "Hard Head (bootleg, set 2)", MACHINE_NOT_WORKING ) GAME( 1988, pop_hh, hardhead, hardhead, hardhead, suna8_state, init_hardhedb, ROT0, "bootleg", "Popper (Hard Head bootleg)", 0 ) GAME( 1989, sparkman, 0, sparkman, sparkman, suna8_state, init_sparkman, ROT0, "SunA", "Spark Man (v2.0, set 1)", 0 ) GAME( 1989, sparkmana, sparkman, sparkman, sparkman, suna8_state, init_sparkman, ROT0, "SunA", "Spark Man (v2.0, set 2)", 0 ) GAME( 1990, starfigh, 0, starfigh, starfigh, suna8_state, init_starfigh, ROT90, "SunA", "Star Fighter (v1)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1991, hardhea2, 0, hardhea2, hardhea2, suna8_state, init_hardhea2, ROT0, "SunA", "Hard Head 2 (v2.0)", 0 ) GAME( 1991, hardhea2b, hardhea2, hardhea2b,hardhea2, suna8_state, init_hardhea2b, ROT0, "bootleg", "Hard Head 2 (v2.0, bootleg)", MACHINE_NOT_WORKING ) GAME( 1992, brickzn, 0, brickzn, brickznv6,suna8_state, init_brickzn, ROT90, "SunA", "Brick Zone (v6.0, Joystick)", 0 ) GAME( 1992, brickznv5, brickzn, brickzn, brickzn, suna8_state, init_brickznv5, ROT90, "SunA", "Brick Zone (v5.0, Joystick)", 0 ) GAME( 1992, brickznv4, brickzn, brickzn, brickzn, suna8_state, init_brickznv4, ROT90, "SunA", "Brick Zone (v4.0, Spinner)", 0 ) GAME( 1992, brickzn11, brickzn, brickzn11,brickzn, suna8_state, init_brickzn11, ROT90, "SunA", "Brick Zone (v1.1, Spinner)", 0 )