djboy.cpp : Fix tags, Minor cleanup, Add generic_latch_8_device for comms (#3383)

* djboy.cpp : Fix tags, Minor cleanup

* djboy.cpp : Build fixes

* djboy.cpp : Fix build

* djboy.cpp : Add stereo sound output, Because PCB has stereo sound output connector and OKI is connected per each output
(Set "Stereo Output" dip on for stereo sound)

* djboy.cpp : Cleanup OKI ROM loading

* djboy.cpp : Fix tags

* Revert DIP, Because it's doesn't effect on software

* djboy.cpp Cleanup gfxdecode

* djboy.cpp : Fix sound output level

* djboy.cpp : Minor cleanups
This commit is contained in:
cam900 2018-04-01 00:40:48 +09:00 committed by ajrhacker
parent a36110f707
commit 35703af070
2 changed files with 149 additions and 209 deletions

View File

@ -151,37 +151,23 @@ Notes:
/* KANEKO BEAST state */
WRITE8_MEMBER(djboy_state::beast_data_w)
{
m_data_to_beast = data;
m_z80_to_beast_full = 1;
m_beast_int0_l = 0;
m_beast->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
}
READ8_MEMBER(djboy_state::beast_data_r)
{
m_beast_to_z80_full = 0;
return m_data_to_z80;
}
READ8_MEMBER(djboy_state::beast_status_r)
{
return (!m_beast_to_z80_full << 2) | (m_z80_to_beast_full << 3);
return (m_slavelatch->pending_r() ? 0x0 : 0x4) | (m_beastlatch->pending_r() ? 0x8 : 0x0);
}
/******************************************************************************/
WRITE8_MEMBER(djboy_state::trigger_nmi_on_cpu0)
WRITE8_MEMBER(djboy_state::trigger_nmi_on_mastercpu)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_mastercpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
WRITE8_MEMBER(djboy_state::cpu0_bankswitch_w)
WRITE8_MEMBER(djboy_state::mastercpu_bankswitch_w)
{
data ^= m_bankxor;
membank("bank1")->set_entry(data);
membank("bank4")->set_entry(0); /* unsure if/how this area is banked */
m_masterbank->set_entry(data);
m_masterbank_l->set_entry(0); /* unsure if/how this area is banked */
}
/******************************************************************************/
@ -192,35 +178,12 @@ WRITE8_MEMBER(djboy_state::cpu0_bankswitch_w)
* ---x---- screen flip
* ----xxxx bank
*/
WRITE8_MEMBER(djboy_state::cpu1_bankswitch_w)
WRITE8_MEMBER(djboy_state::slavecpu_bankswitch_w)
{
m_videoreg = data;
switch (data & 0xf)
{
/* bs65.5y */
case 0x00:
case 0x01:
case 0x02:
case 0x03:
membank("bank2")->set_entry((data & 0xf));
break;
/* bs101.6w */
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0c:
case 0x0d:
case 0x0e:
case 0x0f:
membank("bank2")->set_entry((data & 0xf) - 4);
break;
default:
break;
}
if ((data & 0xc) != 4)
m_slavebank->set_entry((data & 0xf));
}
WRITE8_MEMBER(djboy_state::coin_count_w)
@ -231,78 +194,72 @@ WRITE8_MEMBER(djboy_state::coin_count_w)
/******************************************************************************/
WRITE8_MEMBER(djboy_state::trigger_nmi_on_sound_cpu2)
WRITE8_MEMBER(djboy_state::soundcpu_bankswitch_w)
{
m_soundlatch->write(space, 0, data);
m_cpu2->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
} /* trigger_nmi_on_sound_cpu2 */
WRITE8_MEMBER(djboy_state::cpu2_bankswitch_w)
{
membank("bank3")->set_entry(data); // shall we check data<0x07?
m_soundbank->set_entry(data); // shall we check data<0x07?
}
/******************************************************************************/
void djboy_state::cpu0_am(address_map &map)
void djboy_state::mastercpu_am(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xafff).bankr("bank4");
map(0x8000, 0xafff).bankr("master_bank_l");
map(0xb000, 0xbfff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_r), FUNC(kaneko_pandora_device::spriteram_w));
map(0xc000, 0xdfff).bankr("bank1");
map(0xc000, 0xdfff).bankr("master_bank");
map(0xe000, 0xefff).ram().share("share1");
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xffff).ram();
}
void djboy_state::cpu0_port_am(address_map &map)
void djboy_state::mastercpu_port_am(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).w(this, FUNC(djboy_state::cpu0_bankswitch_w));
map(0x00, 0x00).w(this, FUNC(djboy_state::mastercpu_bankswitch_w));
}
/******************************************************************************/
void djboy_state::cpu1_am(address_map &map)
void djboy_state::slavecpu_am(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank2");
map(0x8000, 0xbfff).bankr("slave_bank");
map(0xc000, 0xcfff).ram().w(this, FUNC(djboy_state::djboy_videoram_w)).share("videoram");
map(0xd000, 0xd3ff).ram().w(this, FUNC(djboy_state::djboy_paletteram_w)).share("paletteram");
map(0xd400, 0xd8ff).ram();
map(0xe000, 0xffff).ram().share("share1");
}
void djboy_state::cpu1_port_am(address_map &map)
void djboy_state::slavecpu_port_am(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).w(this, FUNC(djboy_state::cpu1_bankswitch_w));
map(0x02, 0x02).w(this, FUNC(djboy_state::trigger_nmi_on_sound_cpu2));
map(0x04, 0x04).rw(this, FUNC(djboy_state::beast_data_r), FUNC(djboy_state::beast_data_w));
map(0x00, 0x00).w(this, FUNC(djboy_state::slavecpu_bankswitch_w));
map(0x02, 0x02).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x04, 0x04).r(m_slavelatch, FUNC(generic_latch_8_device::read)).w(m_beastlatch, FUNC(generic_latch_8_device::write));
map(0x06, 0x06).w(this, FUNC(djboy_state::djboy_scrolly_w));
map(0x08, 0x08).w(this, FUNC(djboy_state::djboy_scrollx_w));
map(0x0a, 0x0a).w(this, FUNC(djboy_state::trigger_nmi_on_cpu0));
map(0x0a, 0x0a).w(this, FUNC(djboy_state::trigger_nmi_on_mastercpu));
map(0x0c, 0x0c).r(this, FUNC(djboy_state::beast_status_r));
map(0x0e, 0x0e).w(this, FUNC(djboy_state::coin_count_w));
}
/******************************************************************************/
void djboy_state::cpu2_am(address_map &map)
void djboy_state::soundcpu_am(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank3");
map(0x8000, 0xbfff).bankr("sound_bank");
map(0xc000, 0xdfff).ram();
}
void djboy_state::cpu2_port_am(address_map &map)
void djboy_state::soundcpu_port_am(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).w(this, FUNC(djboy_state::cpu2_bankswitch_w));
map(0x00, 0x00).w(this, FUNC(djboy_state::soundcpu_bankswitch_w));
map(0x02, 0x03).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0x04, 0x04).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x06, 0x06).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x07, 0x07).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x06, 0x06).rw("oki_l", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x07, 0x07).rw("oki_r", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
/******************************************************************************/
@ -317,12 +274,11 @@ WRITE8_MEMBER(djboy_state::beast_p0_w)
{
if (!BIT(m_beast_p0, 1) && BIT(data, 1))
{
m_beast_to_z80_full = 1;
m_data_to_z80 = m_beast_p1;
m_slavelatch->write(space, 0, m_beast_p1);
}
if (BIT(data, 0) == 1)
m_z80_to_beast_full = 0;
m_beastlatch->acknowledge_w(space, 0, data); // TODO : Acknowloge at here too?
m_beast_p0 = data;
}
@ -330,7 +286,7 @@ WRITE8_MEMBER(djboy_state::beast_p0_w)
READ8_MEMBER(djboy_state::beast_p1_r)
{
if (BIT(m_beast_p0, 0) == 0)
return m_data_to_beast;
return m_beastlatch->read(space, 0);
else
return 0; // ?
}
@ -339,8 +295,7 @@ WRITE8_MEMBER(djboy_state::beast_p1_w)
{
if (data == 0xff)
{
m_beast_int0_l = 1;
m_beast->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
m_beastlatch->acknowledge_w(space, 0, data);
}
m_beast_p1 = data;
@ -350,9 +305,9 @@ READ8_MEMBER(djboy_state::beast_p2_r)
{
switch ((m_beast_p0 >> 2) & 3)
{
case 0: return ioport("IN1")->read();
case 1: return ioport("IN2")->read();
case 2: return ioport("IN0")->read();
case 0: return m_port_in[1]->read();
case 1: return m_port_in[2]->read();
case 2: return m_port_in[0]->read();
default: return 0xff;
}
}
@ -365,8 +320,8 @@ WRITE8_MEMBER(djboy_state::beast_p2_w)
READ8_MEMBER(djboy_state::beast_p3_r)
{
uint8_t dsw = 0;
uint8_t dsw1 = ~ioport("DSW1")->read();
uint8_t dsw2 = ~ioport("DSW2")->read();
uint8_t dsw1 = ~m_port_dsw[0]->read();
uint8_t dsw2 = ~m_port_dsw[1]->read();
switch ((m_beast_p0 >> 5) & 3)
{
@ -375,13 +330,13 @@ READ8_MEMBER(djboy_state::beast_p3_r)
case 2: dsw = (BIT(dsw2, 6) << 3) | (BIT(dsw2, 2) << 2) | (BIT(dsw1, 6) << 1) | BIT(dsw1, 2); break;
case 3: dsw = (BIT(dsw2, 7) << 3) | (BIT(dsw2, 3) << 2) | (BIT(dsw1, 7) << 1) | BIT(dsw1, 3); break;
}
return (dsw << 4) | (m_beast_int0_l << 2) | (m_beast_to_z80_full << 3);
return (dsw << 4) | (m_beastlatch->pending_r() ? 0x0 : 0x4) | (m_slavelatch->pending_r() ? 0x8 : 0x0);
}
WRITE8_MEMBER(djboy_state::beast_p3_w)
{
m_beast_p3 = data;
m_cpu1->set_input_line(INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
m_slavecpu->set_input_line(INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
}
/* Program/data maps are defined in the 8051 core */
@ -473,16 +428,10 @@ static const gfx_layout tile_layout =
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{
0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4,
8*32+0*4,8*32+1*4,8*32+2*4,8*32+3*4,8*32+4*4,8*32+5*4,8*32+6*4,8*32+7*4
},
{
0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32,
16*32+0*32,16*32+1*32,16*32+2*32,16*32+3*32,16*32+4*32,16*32+5*32,16*32+6*32,16*32+7*32
},
4*8*32
{ STEP4(0,1) },
{ STEP8(0,4), STEP8(4*8*8,4) },
{ STEP8(0,4*8), STEP8(4*8*8*2,4*8) },
16*16*4
};
static GFXDECODE_START( djboy )
@ -498,37 +447,30 @@ TIMER_DEVICE_CALLBACK_MEMBER(djboy_state::djboy_scanline)
int scanline = param;
if(scanline == 240) // vblank-out irq
m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xfd);
m_mastercpu->set_input_line_and_vector(0, HOLD_LINE, 0xfd);
/* Pandora "sprite end dma" irq? TODO: timing is clearly off, attract mode relies on this */
if(scanline == 64)
m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
m_mastercpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
void djboy_state::machine_start()
{
uint8_t *MAIN = memregion("maincpu")->base();
uint8_t *CPU1 = memregion("cpu1")->base();
uint8_t *CPU2 = memregion("cpu2")->base();
uint8_t *MASTER = memregion("mastercpu")->base();
uint8_t *SLAVE = memregion("slavecpu")->base();
uint8_t *SOUND = memregion("soundcpu")->base();
membank("bank1")->configure_entries(0, 4, &MAIN[0x00000], 0x2000);
membank("bank1")->configure_entries(4, 28, &MAIN[0x10000], 0x2000);
membank("bank2")->configure_entries(0, 2, &CPU1[0x00000], 0x4000);
membank("bank2")->configure_entries(2, 10, &CPU1[0x10000], 0x4000);
membank("bank3")->configure_entries(0, 3, &CPU2[0x00000], 0x4000);
membank("bank3")->configure_entries(3, 5, &CPU2[0x10000], 0x4000);
membank("bank4")->configure_entry(0, &MAIN[0x10000]); /* unsure if/how this area is banked */
m_masterbank->configure_entries(0, 32, &MASTER[0x00000], 0x2000);
m_slavebank->configure_entries(0, 4, &SLAVE[0x00000], 0x4000);
m_slavebank->configure_entries(8, 8, &SLAVE[0x10000], 0x4000);
m_soundbank->configure_entries(0, 8, &SOUND[0x00000], 0x4000);
m_masterbank_l->configure_entry(0, &MASTER[0x08000]); /* unsure if/how this area is banked */
save_item(NAME(m_videoreg));
save_item(NAME(m_scrollx));
save_item(NAME(m_scrolly));
/* Kaneko BEAST */
save_item(NAME(m_data_to_beast));
save_item(NAME(m_data_to_z80));
save_item(NAME(m_beast_to_z80_full));
save_item(NAME(m_z80_to_beast_full));
save_item(NAME(m_beast_int0_l));
save_item(NAME(m_beast_p0));
save_item(NAME(m_beast_p1));
save_item(NAME(m_beast_p2));
@ -540,27 +482,23 @@ void djboy_state::machine_reset()
m_videoreg = 0;
m_scrollx = 0;
m_scrolly = 0;
m_beast_int0_l = 1;
m_beast_to_z80_full = 0;
m_z80_to_beast_full = 0;
}
MACHINE_CONFIG_START(djboy_state::djboy)
MCFG_CPU_ADD("maincpu", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(cpu0_am)
MCFG_CPU_IO_MAP(cpu0_port_am)
MCFG_CPU_ADD("mastercpu", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(mastercpu_am)
MCFG_CPU_IO_MAP(mastercpu_port_am)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", djboy_state, djboy_scanline, "screen", 0, 1)
MCFG_CPU_ADD("cpu1", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(cpu1_am)
MCFG_CPU_IO_MAP(cpu1_port_am)
MCFG_CPU_ADD("slavecpu", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(slavecpu_am)
MCFG_CPU_IO_MAP(slavecpu_port_am)
MCFG_CPU_VBLANK_INT_DRIVER("screen", djboy_state, irq0_line_hold)
MCFG_CPU_ADD("cpu2", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(cpu2_am)
MCFG_CPU_IO_MAP(cpu2_port_am)
MCFG_CPU_ADD("soundcpu", Z80, 6000000)
MCFG_CPU_PROGRAM_MAP(soundcpu_am)
MCFG_CPU_IO_MAP(soundcpu_port_am)
MCFG_CPU_VBLANK_INT_DRIVER("screen", djboy_state, irq0_line_hold)
MCFG_CPU_ADD("beast", I80C51, 6000000)
@ -574,7 +512,12 @@ MACHINE_CONFIG_START(djboy_state::djboy)
MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(djboy_state, beast_p3_w))
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
MCFG_GENERIC_LATCH_8_ADD("slavelatch")
MCFG_GENERIC_LATCH_8_ADD("beastlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("beast", INPUT_LINE_IRQ0))
MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(57.5)
@ -591,35 +534,36 @@ MACHINE_CONFIG_START(djboy_state::djboy)
MCFG_DEVICE_ADD("pandora", KANEKO_PANDORA, 0)
MCFG_KANEKO_PANDORA_GFXDECODE("gfxdecode")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI))
MCFG_SOUND_ADD("ymsnd", YM2203, 3000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
MCFG_OKIM6295_ADD("oki1", 12000000 / 8, PIN7_LOW)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_OKIM6295_ADD("oki_l", 12000000 / 8, PIN7_LOW)
MCFG_DEVICE_ROM("oki")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
MCFG_OKIM6295_ADD("oki2", 12000000 / 8, PIN7_LOW)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_OKIM6295_ADD("oki_r", 12000000 / 8, PIN7_LOW)
MCFG_DEVICE_ROM("oki")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
MACHINE_CONFIG_END
ROM_START( djboy )
ROM_REGION( 0x48000, "maincpu", 0 )
ROM_LOAD( "bs64.4b", 0x00000, 0x08000, CRC(b77aacc7) SHA1(78100d4695738a702f13807526eb1bcac759cce3) )
ROM_CONTINUE( 0x10000, 0x18000 )
ROM_LOAD( "bs100.4d", 0x28000, 0x20000, CRC(081e8af8) SHA1(3589dab1cf31b109a40370b4db1f31785023e2ed) )
ROM_REGION( 0x40000, "mastercpu", 0 )
ROM_LOAD( "bs64.4b", 0x00000, 0x20000, CRC(b77aacc7) SHA1(78100d4695738a702f13807526eb1bcac759cce3) )
ROM_LOAD( "bs100.4d", 0x20000, 0x20000, CRC(081e8af8) SHA1(3589dab1cf31b109a40370b4db1f31785023e2ed) )
ROM_REGION( 0x38000, "cpu1", 0 )
ROM_LOAD( "bs65.5y", 0x00000, 0x08000, CRC(0f1456eb) SHA1(62ed48c0d71c1fabbb3f6ada60381f57f692cef8) )
ROM_CONTINUE( 0x10000, 0x08000 )
ROM_LOAD( "bs101.6w", 0x18000, 0x20000, CRC(a7c85577) SHA1(8296b96d5f69f6c730b7ed77fa8c93496b33529c) )
ROM_REGION( 0x30000, "slavecpu", 0 )
ROM_LOAD( "bs65.5y", 0x00000, 0x10000, CRC(0f1456eb) SHA1(62ed48c0d71c1fabbb3f6ada60381f57f692cef8) )
ROM_LOAD( "bs101.6w", 0x10000, 0x20000, CRC(a7c85577) SHA1(8296b96d5f69f6c730b7ed77fa8c93496b33529c) )
ROM_REGION( 0x24000, "cpu2", 0 ) /* sound */
ROM_LOAD( "bs200.8c", 0x00000, 0x0c000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_CONTINUE( 0x10000, 0x14000 )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* sound */
ROM_LOAD( "bs200.8c", 0x00000, 0x20000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_REGION( 0x1000, "beast", 0 ) /* MSM80C51F microcontroller */
ROM_LOAD( "beast.9s", 0x00000, 0x1000, CRC(ebe0f5f3) SHA1(6081343c9b4510c4c16b71f6340266a1f76170ac) ) /* Internal ROM image */
@ -635,27 +579,21 @@ ROM_START( djboy )
ROM_LOAD( "bs004.1s", 0x000000, 0x80000, CRC(2f1392c3) SHA1(1bc3030b3612766a02133eef0b4d20013c0495a4) )
ROM_LOAD( "bs005.1u", 0x080000, 0x80000, CRC(46b400c4) SHA1(35f4823364bbff1fc935994498d462bbd3bc6044) )
ROM_REGION( 0x40000, "oki1", 0 ) /* OKI-M6295 samples */
ROM_LOAD( "bs203.5j", 0x000000, 0x40000, CRC(805341fb) SHA1(fb94e400e2283aaa806814d5a39d6196457dc822) )
ROM_REGION( 0x40000, "oki2", 0 ) /* OKI-M6295 samples */
ROM_REGION( 0x40000, "oki", 0 ) /* OKI-M6295 samples */
ROM_LOAD( "bs203.5j", 0x000000, 0x40000, CRC(805341fb) SHA1(fb94e400e2283aaa806814d5a39d6196457dc822) )
ROM_END
ROM_START( djboya )
ROM_REGION( 0x48000, "maincpu", 0 )
ROM_LOAD( "bs19s.rom", 0x00000, 0x08000, CRC(17ce9f6c) SHA1(a0c1832b05dc46991e8949067ca0278f5498835f) )
ROM_CONTINUE( 0x10000, 0x18000 )
ROM_LOAD( "bs100.4d", 0x28000, 0x20000, CRC(081e8af8) SHA1(3589dab1cf31b109a40370b4db1f31785023e2ed) )
ROM_REGION( 0x40000, "mastercpu", 0 )
ROM_LOAD( "bs19s.rom", 0x00000, 0x20000, CRC(17ce9f6c) SHA1(a0c1832b05dc46991e8949067ca0278f5498835f) )
ROM_LOAD( "bs100.4d", 0x20000, 0x20000, CRC(081e8af8) SHA1(3589dab1cf31b109a40370b4db1f31785023e2ed) )
ROM_REGION( 0x38000, "cpu1", 0 )
ROM_LOAD( "bs15s.rom", 0x00000, 0x08000, CRC(e6f966b2) SHA1(f9df16035a8b09d87eb70315b216892e25d99b03) )
ROM_CONTINUE( 0x10000, 0x08000 )
ROM_LOAD( "bs101.6w", 0x18000, 0x20000, CRC(a7c85577) SHA1(8296b96d5f69f6c730b7ed77fa8c93496b33529c) )
ROM_REGION( 0x30000, "slavecpu", 0 )
ROM_LOAD( "bs15s.rom", 0x00000, 0x10000, CRC(e6f966b2) SHA1(f9df16035a8b09d87eb70315b216892e25d99b03) )
ROM_LOAD( "bs101.6w", 0x10000, 0x20000, CRC(a7c85577) SHA1(8296b96d5f69f6c730b7ed77fa8c93496b33529c) )
ROM_REGION( 0x24000, "cpu2", 0 ) /* sound */
ROM_LOAD( "bs200.8c", 0x00000, 0x0c000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_CONTINUE( 0x10000, 0x14000 )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* sound */
ROM_LOAD( "bs200.8c", 0x00000, 0x20000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_REGION( 0x1000, "beast", 0 ) /* MSM80C51F microcontroller */
ROM_LOAD( "beast.9s", 0x00000, 0x1000, CRC(ebe0f5f3) SHA1(6081343c9b4510c4c16b71f6340266a1f76170ac) ) /* Internal ROM image */
@ -671,27 +609,21 @@ ROM_START( djboya )
ROM_LOAD( "bs004.1s", 0x000000, 0x80000, CRC(2f1392c3) SHA1(1bc3030b3612766a02133eef0b4d20013c0495a4) )
ROM_LOAD( "bs005.1u", 0x080000, 0x80000, CRC(46b400c4) SHA1(35f4823364bbff1fc935994498d462bbd3bc6044) )
ROM_REGION( 0x40000, "oki1", 0 ) /* OKI-M6295 samples */
ROM_LOAD( "bs203.5j", 0x000000, 0x40000, CRC(805341fb) SHA1(fb94e400e2283aaa806814d5a39d6196457dc822) )
ROM_REGION( 0x40000, "oki2", 0 ) /* OKI-M6295 samples */
ROM_REGION( 0x40000, "oki", 0 ) /* OKI-M6295 samples */
ROM_LOAD( "bs203.5j", 0x000000, 0x40000, CRC(805341fb) SHA1(fb94e400e2283aaa806814d5a39d6196457dc822) )
ROM_END
ROM_START( djboyj )
ROM_REGION( 0x48000, "maincpu", 0 )
ROM_LOAD( "bs12.4b", 0x00000, 0x08000, CRC(0971523e) SHA1(f90cd02cedf8632f4b651de7ea75dc8c0e682f6e) )
ROM_CONTINUE( 0x10000, 0x18000 )
ROM_LOAD( "bs100.4d", 0x28000, 0x20000, CRC(081e8af8) SHA1(3589dab1cf31b109a40370b4db1f31785023e2ed) )
ROM_REGION( 0x40000, "mastercpu", 0 )
ROM_LOAD( "bs12.4b", 0x00000, 0x20000, CRC(0971523e) SHA1(f90cd02cedf8632f4b651de7ea75dc8c0e682f6e) )
ROM_LOAD( "bs100.4d", 0x20000, 0x20000, CRC(081e8af8) SHA1(3589dab1cf31b109a40370b4db1f31785023e2ed) )
ROM_REGION( 0x38000, "cpu1", 0 )
ROM_LOAD( "bs13.5y", 0x00000, 0x08000, CRC(5c3f2f96) SHA1(bb7ee028a2d8d3c76a78a29fba60bcc36e9399f5) )
ROM_CONTINUE( 0x10000, 0x08000 )
ROM_LOAD( "bs101.6w", 0x18000, 0x20000, CRC(a7c85577) SHA1(8296b96d5f69f6c730b7ed77fa8c93496b33529c) )
ROM_REGION( 0x30000, "slavecpu", 0 )
ROM_LOAD( "bs13.5y", 0x00000, 0x10000, CRC(5c3f2f96) SHA1(bb7ee028a2d8d3c76a78a29fba60bcc36e9399f5) )
ROM_LOAD( "bs101.6w", 0x10000, 0x20000, CRC(a7c85577) SHA1(8296b96d5f69f6c730b7ed77fa8c93496b33529c) )
ROM_REGION( 0x24000, "cpu2", 0 ) /* sound */
ROM_LOAD( "bs200.8c", 0x00000, 0x0c000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_CONTINUE( 0x10000, 0x14000 )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* sound */
ROM_LOAD( "bs200.8c", 0x00000, 0x20000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_REGION( 0x1000, "beast", 0 ) /* MSM80C51F microcontroller */
ROM_LOAD( "beast.9s", 0x00000, 0x1000, CRC(ebe0f5f3) SHA1(6081343c9b4510c4c16b71f6340266a1f76170ac) ) /* Internal ROM image */
@ -707,10 +639,7 @@ ROM_START( djboyj )
ROM_LOAD( "bs004.1s", 0x000000, 0x80000, CRC(2f1392c3) SHA1(1bc3030b3612766a02133eef0b4d20013c0495a4) )
ROM_LOAD( "bs005.1u", 0x080000, 0x80000, CRC(46b400c4) SHA1(35f4823364bbff1fc935994498d462bbd3bc6044) )
ROM_REGION( 0x40000, "oki1", 0 ) /* OKI-M6295 samples */
ROM_LOAD( "bs-204.5j", 0x000000, 0x40000, CRC(510244f0) SHA1(afb502d46d268ad9cd209ae1da72c50e4e785626) )
ROM_REGION( 0x40000, "oki2", 0 ) /* OKI-M6295 samples */
ROM_REGION( 0x40000, "oki", 0 ) /* OKI-M6295 samples */
ROM_LOAD( "bs-204.5j", 0x000000, 0x40000, CRC(510244f0) SHA1(afb502d46d268ad9cd209ae1da72c50e4e785626) )
ROM_END

View File

@ -16,18 +16,27 @@ class djboy_state : public driver_device
{
public:
djboy_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_paletteram(*this, "paletteram"),
m_maincpu(*this, "maincpu"),
m_cpu1(*this, "cpu1"),
m_cpu2(*this, "cpu2"),
m_beast(*this, "beast"),
m_pandora(*this, "pandora"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch")
{ }
: driver_device(mconfig, type, tag)
, m_videoram(*this, "videoram")
, m_paletteram(*this, "paletteram")
, m_masterbank(*this, "master_bank")
, m_slavebank(*this, "slave_bank")
, m_soundbank(*this, "sound_bank")
, m_masterbank_l(*this, "master_bank_l")
, m_port_in(*this, "IN%u", 0)
, m_port_dsw(*this, "DSW%u", 1)
, m_mastercpu(*this, "mastercpu")
, m_slavecpu(*this, "slavecpu")
, m_soundcpu(*this, "soundcpu")
, m_beast(*this, "beast")
, m_pandora(*this, "pandora")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
, m_slavelatch(*this, "slavelatch")
, m_beastlatch(*this, "beastlatch")
{
}
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
@ -35,6 +44,14 @@ public:
/* ROM banking */
uint8_t m_bankxor;
required_memory_bank m_masterbank;
required_memory_bank m_slavebank;
required_memory_bank m_soundbank;
required_memory_bank m_masterbank_l;
required_ioport_array<3> m_port_in;
required_ioport_array<2> m_port_dsw;
/* video-related */
tilemap_t *m_background;
@ -43,35 +60,29 @@ public:
uint8_t m_scrolly;
/* Kaneko BEAST state */
uint8_t m_data_to_beast;
uint8_t m_data_to_z80;
uint8_t m_beast_to_z80_full;
uint8_t m_z80_to_beast_full;
uint8_t m_beast_int0_l;
uint8_t m_beast_p0;
uint8_t m_beast_p1;
uint8_t m_beast_p2;
uint8_t m_beast_p3;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_cpu1;
required_device<cpu_device> m_cpu2;
required_device<cpu_device> m_mastercpu;
required_device<cpu_device> m_slavecpu;
required_device<cpu_device> m_soundcpu;
required_device<cpu_device> m_beast;
required_device<kaneko_pandora_device> m_pandora;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
required_device<generic_latch_8_device> m_slavelatch;
required_device<generic_latch_8_device> m_beastlatch;
DECLARE_WRITE8_MEMBER(beast_data_w);
DECLARE_READ8_MEMBER(beast_data_r);
DECLARE_READ8_MEMBER(beast_status_r);
DECLARE_WRITE8_MEMBER(trigger_nmi_on_cpu0);
DECLARE_WRITE8_MEMBER(cpu0_bankswitch_w);
DECLARE_WRITE8_MEMBER(cpu1_bankswitch_w);
DECLARE_WRITE8_MEMBER(trigger_nmi_on_mastercpu);
DECLARE_WRITE8_MEMBER(mastercpu_bankswitch_w);
DECLARE_WRITE8_MEMBER(slavecpu_bankswitch_w);
DECLARE_WRITE8_MEMBER(coin_count_w);
DECLARE_WRITE8_MEMBER(trigger_nmi_on_sound_cpu2);
DECLARE_WRITE8_MEMBER(cpu2_bankswitch_w);
DECLARE_WRITE8_MEMBER(soundcpu_bankswitch_w);
DECLARE_READ8_MEMBER(beast_p0_r);
DECLARE_WRITE8_MEMBER(beast_p0_w);
DECLARE_READ8_MEMBER(beast_p1_r);
@ -94,10 +105,10 @@ public:
DECLARE_WRITE_LINE_MEMBER(screen_vblank_djboy);
TIMER_DEVICE_CALLBACK_MEMBER(djboy_scanline);
void djboy(machine_config &config);
void cpu0_am(address_map &map);
void cpu0_port_am(address_map &map);
void cpu1_am(address_map &map);
void cpu1_port_am(address_map &map);
void cpu2_am(address_map &map);
void cpu2_port_am(address_map &map);
void mastercpu_am(address_map &map);
void mastercpu_port_am(address_map &map);
void slavecpu_am(address_map &map);
void slavecpu_port_am(address_map &map);
void soundcpu_am(address_map &map);
void soundcpu_port_am(address_map &map);
};