diff options
Diffstat (limited to 'src/mame/drivers/controlid.cpp')
-rw-r--r-- | src/mame/drivers/controlid.cpp | 69 |
1 files changed, 50 insertions, 19 deletions
diff --git a/src/mame/drivers/controlid.cpp b/src/mame/drivers/controlid.cpp index 79e1bbcde32..5308bfbc65e 100644 --- a/src/mame/drivers/controlid.cpp +++ b/src/mame/drivers/controlid.cpp @@ -44,54 +44,83 @@ public: void controlidx628(machine_config &config); private: + virtual void machine_start() override; + DECLARE_WRITE8_MEMBER(p0_w); + DECLARE_READ8_MEMBER(p1_r); DECLARE_WRITE8_MEMBER(p1_w); + DECLARE_READ8_MEMBER(p2_r); + DECLARE_READ8_MEMBER(p3_r); DECLARE_WRITE8_MEMBER(p3_w); DECLARE_PALETTE_INIT(controlidx628); void io_map(address_map &map); - void prog_map(address_map &map); required_device<nt7534_device> m_lcdc; - uint8_t p0_data; - uint8_t p1_data; - uint8_t p3_data; + uint8_t m_p0_data; + uint8_t m_p1_data; + uint8_t m_p3_data; }; +void controlidx628_state::machine_start() +{ + m_p0_data = 0xff; + m_p1_data = 0xff; + m_p3_data = 0xff; + + save_item(NAME(m_p0_data)); + save_item(NAME(m_p1_data)); + save_item(NAME(m_p3_data)); +} + /************************* * Memory map information * *************************/ -void controlidx628_state::prog_map(address_map &map) -{ - map(0x0000, 0x1fff).rom(); -} - void controlidx628_state::io_map(address_map &map) { map(0x8000, 0xffff).ram(); } -WRITE8_MEMBER( controlidx628_state::p0_w ) +WRITE8_MEMBER(controlidx628_state::p0_w) { - p0_data = data; + m_p0_data = data; } -WRITE8_MEMBER( controlidx628_state::p1_w ) +READ8_MEMBER(controlidx628_state::p1_r) { - if ((BIT(p1_data, 6) == 0) && (BIT(data, 6) == 1)) // on raising-edge of bit 6 + // P1.1 is used for serial I/O; P1.4 and P1.5 are also used bidirectionally + return 0xcd; +} + +WRITE8_MEMBER(controlidx628_state::p1_w) +{ + if ((BIT(m_p1_data, 6) == 0) && (BIT(data, 6) == 1)) // on raising-edge of bit 6 { - m_lcdc->write(space, BIT(data, 7), p0_data); + m_lcdc->write(space, BIT(data, 7), m_p0_data); } - p1_data = data; + // P1.0 is also used as a serial I/O clock + m_p1_data = data; +} + +READ8_MEMBER(controlidx628_state::p2_r) +{ + // Low nibble used for input + return 0xf0; +} + +READ8_MEMBER(controlidx628_state::p3_r) +{ + // P3.3 (INT1) and P3.4 (T0) used bidirectionally + return 0xff; } -WRITE8_MEMBER( controlidx628_state::p3_w ) +WRITE8_MEMBER(controlidx628_state::p3_w) { - p3_data = data; + m_p3_data = data; } /************************* @@ -115,11 +144,13 @@ PALETTE_INIT_MEMBER(controlidx628_state, controlidx628) MACHINE_CONFIG_START(controlidx628_state::controlidx628) // basic machine hardware - MCFG_DEVICE_ADD("maincpu", I80C32, XTAL(11'059'200)) // Actually the board has an Atmel AT89S52 MCU. - MCFG_DEVICE_PROGRAM_MAP(prog_map) + MCFG_DEVICE_ADD("maincpu", AT89S52, XTAL(11'059'200)) MCFG_DEVICE_IO_MAP(io_map) MCFG_MCS51_PORT_P0_OUT_CB(WRITE8(*this, controlidx628_state, p0_w)) + MCFG_MCS51_PORT_P1_IN_CB(READ8(*this, controlidx628_state, p1_r)) MCFG_MCS51_PORT_P1_OUT_CB(WRITE8(*this, controlidx628_state, p1_w)) + MCFG_MCS51_PORT_P2_IN_CB(READ8(*this, controlidx628_state, p2_r)) + MCFG_MCS51_PORT_P3_IN_CB(READ8(*this, controlidx628_state, p3_r)) MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(*this, controlidx628_state, p3_w)) // video hardware |