diff --git a/src/mess/drivers/hh_hmcs40.c b/src/mess/drivers/hh_hmcs40.c index b2fae28c13c..3cc7227e5ad 100644 --- a/src/mess/drivers/hh_hmcs40.c +++ b/src/mess/drivers/hh_hmcs40.c @@ -22,8 +22,8 @@ *41 HD38800A 1982, Gakken Puck Monster *51 HD38800A 1981, Actronics(Hanzawa) Twinvader @70 HD38800A 1982, Coleco Galaxian - @73 HD38800A 1982, Bandai(Mattel) Star Hawk - @77 HD38800A 1982, Bandai Frisky Tom + @73 HD38800A 1982, Bandai(Mattel) Star Hawk (PT-317B) + @77 HD38800A 1982, Bandai Frisky Tom (PT-327A) @88 HD38800A 1984, Tomy Tron (THN-02) @01 HD38800B 1982, Gakken Crazy Kong @@ -31,7 +31,7 @@ *24 HD38800B 1982, Actronics(Hanzawa) Wanted G-Man *29 HD38800B 1984, Tomy Portable 6000 Bombman *35 HD38800B 1983, Bandai Gundam vs Gelgoog Zaku - *43 HD38800B 1983, Bandai Dokodemo Dorayaki Doraemon + @43 HD38800B 1983, Bandai Dokodemo Dorayaki Doraemon (PT-412) @09 HD38820A 1980, Mattel World Championship Baseball @13 HD38820A 1981, Entex Galaxian 2 @@ -47,7 +47,7 @@ @61 HD38820A 1983, Coleco Ms. Pac-Man @69 HD38820A 1983, Gakken Dig Dug @70 HD38820A 1983, Parker Brothers Q*Bert - @85 HD38820A 1984, Bandai Machine Man + @85 HD38820A 1984, Bandai Machine Man (PT-438) (* denotes not yet emulated by MESS, @ denotes it's in this driver) @@ -1041,6 +1041,97 @@ MACHINE_CONFIG_END +/*************************************************************************** + + Bandai Dokodemo Dorayaki Doraemon (FL LSI Game Push Up) (manufactured in Japan) + * PCB label Kaken Corp PT-412 FL-Doreamon(in katakana) + * Hitachi HD38800B43 MCU + * cyan/red/blue VFD display Futaba DM-71 + + NOTE!: MESS external artwork is recommended + +***************************************************************************/ + +class bdoramon_state : public hh_hmcs40_state +{ +public: + bdoramon_state(const machine_config &mconfig, device_type type, const char *tag) + : hh_hmcs40_state(mconfig, type, tag) + { } + + DECLARE_WRITE8_MEMBER(plate_w); + DECLARE_WRITE16_MEMBER(grid_w); +}; + +// handlers + +WRITE8_MEMBER(bdoramon_state::plate_w) +{ + // R0x-R3x(,D0-D3): vfd matrix plate + int shift = offset * 4; + m_plate = (m_plate & ~(0xf << shift)) | (data << shift); + + // update display + UINT8 grid = BITSWAP8(m_grid,0,1,2,3,4,5,7,6); + UINT32 plate = BITSWAP24(m_plate,23,22,21,20,11,19,18,17,16,15,14,13,12,10,9,8,7,6,5,4,3,2,1,0); + display_matrix(19, 8, plate, grid); +} + +WRITE16_MEMBER(bdoramon_state::grid_w) +{ + // D7: speaker out + m_speaker->level_w(data >> 7 & 1); + + // D8-D15: vfd matrix grid + m_grid = data >> 8 & 0xff; + + // D0-D3: plate 15-18 (update display there) + plate_w(space, 4, data & 0xf); +} + + +// config + +static INPUT_PORTS_START( bdoramon ) + PORT_START("IN.0") // INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + + PORT_START("IN.1") // INT1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + + PORT_START("IN.2") // port D + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0xff8f, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( bdoramon, bdoramon_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", HD38800, 400000) // approximation + MCFG_HMCS40_WRITE_R_CB(0, WRITE8(bdoramon_state, plate_w)) + MCFG_HMCS40_WRITE_R_CB(1, WRITE8(bdoramon_state, plate_w)) + MCFG_HMCS40_WRITE_R_CB(2, WRITE8(bdoramon_state, plate_w)) + MCFG_HMCS40_WRITE_R_CB(3, WRITE8(bdoramon_state, plate_w)) + MCFG_HMCS40_WRITE_D_CB(WRITE16(bdoramon_state, grid_w)) + MCFG_HMCS40_READ_D_CB(IOPORT("IN.2")) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_hh_hmcs40_test) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + + /*************************************************************************** Bandai Machine Man (FL Flat Type) (manufactured in Japan) @@ -2936,6 +3027,13 @@ ROM_START( zackman ) ROM_END +ROM_START( bdoramon ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800b43", 0x0000, 0x1000, CRC(9387ca42) SHA1(8937e208934b34bd9f49700aa50287dfc8bda76c) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + + ROM_START( machiman ) ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "hd38820a85", 0x0000, 0x1000, CRC(894b4954) SHA1(cab49638a326b031aa548301beb16f818759ef62) ) @@ -3063,6 +3161,7 @@ CONS( 1982, bfriskyt, 0, 0, bfriskyt, bfriskyt, driver_device, 0, "Banda CONS( 1981, packmon, 0, 0, packmon, packmon, driver_device, 0, "Bandai", "Packri Monster", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) CONS( 1982, msthawk, 0, 0, msthawk, msthawk, driver_device, 0, "Bandai (Mattel license)", "Star Hawk (Mattel)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) CONS( 1983, zackman, 0, 0, zackman, zackman, driver_device, 0, "Bandai", "Zackman", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) +CONS( 1983, bdoramon, 0, 0, bdoramon, bdoramon, driver_device, 0, "Bandai", "Dokodemo Dorayaki Doraemon", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) CONS( 1984, machiman, 0, 0, machiman, machiman, driver_device, 0, "Bandai", "Machine Man", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) CONS( 1981, alnattck, 0, 0, alnattck, alnattck, driver_device, 0, "Coleco", "Alien Attack", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) diff --git a/src/mess/mess.lst b/src/mess/mess.lst index 5c6823b96dc..6c889c96d7c 100644 --- a/src/mess/mess.lst +++ b/src/mess/mess.lst @@ -2188,6 +2188,7 @@ bfriskyt // Bandai packmon // Bandai msthawk // Bandai/Mattel zackman // Bandai +bdoramon // Bandai machiman // Bandai alnattck // Coleco cdkong // Coleco