diff --git a/src/mame/drivers/fromanc2.cpp b/src/mame/drivers/fromanc2.cpp index 87e843d972d..8f83360fa03 100644 --- a/src/mame/drivers/fromanc2.cpp +++ b/src/mame/drivers/fromanc2.cpp @@ -158,6 +158,12 @@ WRITE8_MEMBER(fromanc2_state::fromanc2_subcpu_rombank_w) membank("bank2")->set_entry((data & 0x0c) >> 2); } +// custom handler allowing byte-smeared writes +WRITE16_MEMBER(fromanc2_state::uart_w) +{ + m_uart->ins8250_w(space, offset, data & 0xff); +} + /************************************* * @@ -257,8 +263,7 @@ static ADDRESS_MAP_START( fromanc4_main_map, AS_PROGRAM, 16, fromanc2_state ) AM_RANGE(0xe30000, 0xe30013) AM_WRITENOP // ??? AM_RANGE(0xe40000, 0xe40013) AM_WRITENOP // ??? - AM_RANGE(0xe50000, 0xe50009) AM_WRITENOP // EXT-COMM PORT ? - AM_RANGE(0xe5000c, 0xe5000d) AM_READNOP // EXT-COMM PORT ? + AM_RANGE(0xe50000, 0xe5000f) AM_DEVREAD8("uart", ns16550_device, ins8250_r, 0x00ff) AM_WRITE(uart_w) // EXT-COMM PORT ? ADDRESS_MAP_END @@ -624,11 +629,11 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_START( fromanc4 ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68000,32000000/2) /* 16.00 MHz */ + MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16.00 MHz */ MCFG_CPU_PROGRAM_MAP(fromanc4_main_map) MCFG_CPU_VBLANK_INT_DRIVER("lscreen", fromanc2_state, fromanc2_interrupt) - MCFG_CPU_ADD("audiocpu", Z80,32000000/4) /* 8.00 MHz */ + MCFG_CPU_ADD("audiocpu", Z80, XTAL_32MHz/4) /* 8.00 MHz */ MCFG_CPU_PROGRAM_MAP(fromanc2_sound_map) MCFG_CPU_IO_MAP(fromanc2_sound_io_map) @@ -636,6 +641,8 @@ static MACHINE_CONFIG_START( fromanc4 ) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") + MCFG_DEVICE_ADD("uart", NS16550, 2000000) // actual type is TL16C550CFN; clock unknown + /* video hardware */ MCFG_GFXDECODE_ADD("gfxdecode", "lpalette", fromancr) @@ -812,4 +819,4 @@ DRIVER_INIT_MEMBER(fromanc2_state,fromanc4) GAME( 1995, fromanc2, 0, fromanc2, fromanc2, fromanc2_state, fromanc2, ROT0, "Video System Co.", "Taisen Idol-Mahjong Final Romance 2 (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1995, fromancr, 0, fromancr, fromanc2, fromanc2_state, fromanc2, ROT0, "Video System Co.", "Taisen Mahjong Final Romance R (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, fromanc4, 0, fromanc4, fromanc4, fromanc2_state, fromanc4, ROT0, "Video System Co.", "Taisen Mahjong Final Romance 4 (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1998, fromanc4, 0, fromanc4, fromanc4, fromanc2_state, fromanc4, ROT0, "Video System Co.", "Taisen Mahjong Final Romance 4 (Japan)", MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/fromanc2.h b/src/mame/includes/fromanc2.h index 6e4c1e3c69e..6d6b29bee27 100644 --- a/src/mame/includes/fromanc2.h +++ b/src/mame/includes/fromanc2.h @@ -3,6 +3,7 @@ #include "machine/gen_latch.h" #include "machine/eepromser.h" +#include "machine/ins8250.h" class fromanc2_state : public driver_device { @@ -17,7 +18,8 @@ public: m_lpalette(*this, "lpalette"), m_rpalette(*this, "rpalette"), m_soundlatch(*this, "soundlatch"), - m_soundlatch2(*this, "soundlatch2") { } + m_soundlatch2(*this, "soundlatch2"), + m_uart(*this, "uart") { } /* memory pointers */ std::unique_ptr m_videoram[2][4]; @@ -48,6 +50,7 @@ public: required_device m_rpalette; required_device m_soundlatch; required_device m_soundlatch2; + optional_device m_uart; DECLARE_WRITE16_MEMBER(fromanc2_sndcmd_w); DECLARE_WRITE16_MEMBER(fromanc2_portselect_w); @@ -62,6 +65,7 @@ public: DECLARE_WRITE8_MEMBER(fromanc2_subcpu_nmi_clr); DECLARE_READ8_MEMBER(fromanc2_sndcpu_nmi_clr); DECLARE_WRITE8_MEMBER(fromanc2_subcpu_rombank_w); + DECLARE_WRITE16_MEMBER(uart_w); DECLARE_WRITE16_MEMBER(fromanc2_videoram_0_w); DECLARE_WRITE16_MEMBER(fromanc2_videoram_1_w); DECLARE_WRITE16_MEMBER(fromanc2_videoram_2_w);