// 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_led[0] = BIT(data, 0);
m_led[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_led[0] = BIT(data, 0);
m_led[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_led[0] = BIT(data, 0);
m_led[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_led[0] = BIT(data, 0);
m_led[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 )