From 14282a25fecb617781f514c6cc0c054637f44846 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 17 Jan 2018 12:45:41 -0500 Subject: tv912.cpp: Add TMS9927 and refresh rate switch (nw) --- src/mame/drivers/tv912.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/tv912.cpp b/src/mame/drivers/tv912.cpp index d0efaa834d2..75eb5549149 100644 --- a/src/mame/drivers/tv912.cpp +++ b/src/mame/drivers/tv912.cpp @@ -17,7 +17,7 @@ //#include "bus/rs232/rs232.h" //#include "machine/ay31015.h" #include "machine/bankdev.h" -//#include "video/tms9927.h" +#include "video/tms9927.h" #include "screen.h" #define CHAR_WIDTH 14 @@ -28,12 +28,18 @@ public: tv912_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_crtc(*this, "crtc") , m_bankdev(*this, "bankdev") , m_dispram_bank(*this, "dispram") , m_p_chargen(*this, "chargen") + , m_sw2(*this, "SW2") { } DECLARE_WRITE8_MEMBER(p2_w); + DECLARE_READ8_MEMBER(crtc_r); + DECLARE_WRITE8_MEMBER(crtc_w); + DECLARE_READ8_MEMBER(keyboard_r); + DECLARE_WRITE8_MEMBER(output_40c); u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -43,16 +49,56 @@ private: virtual void machine_reset() override; required_device m_maincpu; + required_device m_crtc; required_device m_bankdev; required_memory_bank m_dispram_bank; required_region_ptr m_p_chargen; + required_ioport m_sw2; std::unique_ptr m_dispram; }; WRITE8_MEMBER(tv912_state::p2_w) { + // P20-P23: Address Signals (4MSBS) m_bankdev->set_bank(data & 0x0f); + + // P24: +4Hz Flasher + // P25: -DCR + // P26: -PTR RDY + // P27: -HALF DUPLEX +} + +READ8_MEMBER(tv912_state::crtc_r) +{ + return m_crtc->read(space, bitswap<4>(offset, 5, 4, 1, 0)); +} + +WRITE8_MEMBER(tv912_state::crtc_w) +{ + m_crtc->write(space, bitswap<4>(offset, 5, 4, 1, 0), data); +} + +READ8_MEMBER(tv912_state::keyboard_r) +{ + u8 result = 0xff; + + if (!BIT(m_sw2->read(), 0)) + result &= 0x7f; + + return result; +} + +WRITE8_MEMBER(tv912_state::output_40c) +{ + // Bit 5: +FORCE BLANK + // Bit 4: +SEL LPT + // Bit 3: -BREAK + // Bit 2: -RQS + // Bit 1: +BEEP + + // Bit 0: +PG SEL + m_dispram_bank->set_entry(BIT(data, 0)); } u32 tv912_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -83,14 +129,25 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bank_map, 0, 8, tv912_state ) AM_RANGE(0x000, 0x0ff) AM_MIRROR(0x300) AM_RAM - //AM_RANGE(0x400, 0x403) AM_MIRROR(0x3c0) AM_SELECT(0x030) AM_READWRITE(crtc_r, crtc_w) + AM_RANGE(0x400, 0x403) AM_MIRROR(0x3c0) AM_SELECT(0x030) AM_READWRITE(crtc_r, crtc_w) + AM_RANGE(0x40c, 0x40f) AM_MIRROR(0x3f0) AM_READ(keyboard_r) + AM_RANGE(0x40c, 0x40c) AM_MIRROR(0x3f0) AM_WRITE(output_40c) AM_RANGE(0x800, 0xfff) AM_RAMBANK("dispram") ADDRESS_MAP_END +static INPUT_PORTS_START( switches ) + PORT_START("SW2") + PORT_DIPNAME(0x01, 0x01, "Refresh Rate") PORT_DIPLOCATION("S2:4") + PORT_DIPSETTING(0x00, "50 Hz") + PORT_DIPSETTING(0x01, "60 Hz") +ADDRESS_MAP_END + static INPUT_PORTS_START( tv912b ) + PORT_INCLUDE(switches) INPUT_PORTS_END static INPUT_PORTS_START( tv912c ) + PORT_INCLUDE(switches) INPUT_PORTS_END MACHINE_CONFIG_START(tv912_state::tv912) @@ -98,6 +155,7 @@ MACHINE_CONFIG_START(tv912_state::tv912) MCFG_CPU_PROGRAM_MAP(prog_map) MCFG_CPU_IO_MAP(io_map) MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(tv912_state, p2_w)) + MCFG_MCS48_PORT_T1_IN_CB(DEVREADLINE("crtc", tms9927_device, bl_r)) MCFG_DEVICE_ADD("bankdev", ADDRESS_MAP_BANK, 0) MCFG_DEVICE_PROGRAM_MAP(bank_map) @@ -108,6 +166,10 @@ MACHINE_CONFIG_START(tv912_state::tv912) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_23_814MHz, 105 * CHAR_WIDTH, 0, 80 * CHAR_WIDTH, 270, 0, 240) MCFG_SCREEN_UPDATE_DRIVER(tv912_state, screen_update) + + MCFG_DEVICE_ADD("crtc", TMS9927, XTAL_23_814MHz) + MCFG_TMS9927_CHAR_WIDTH(CHAR_WIDTH) + MCFG_TMS9927_VSYN_CALLBACK(INPUTLINE("maincpu", MCS48_INPUT_IRQ)) MACHINE_CONFIG_END /************************************************************************************************************** -- cgit v1.2.3