diff options
Diffstat (limited to 'src/mame/video/tmc600.cpp')
-rw-r--r-- | src/mame/video/tmc600.cpp | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/src/mame/video/tmc600.cpp b/src/mame/video/tmc600.cpp index ac1e739476e..93c86807181 100644 --- a/src/mame/video/tmc600.cpp +++ b/src/mame/video/tmc600.cpp @@ -5,50 +5,24 @@ WRITE8_MEMBER( tmc600_state::vismac_register_w ) { - m_vismac_reg_latch = data; + m_vismac_reg_latch = data >> 4; } WRITE8_MEMBER( tmc600_state::vismac_data_w ) { uint16_t ma = m_maincpu->get_memory_address(); - switch (m_vismac_reg_latch) + switch (m_vismac_reg_latch & 0x07) { - case 0x20: - // character color latch - m_vismac_color_latch = data; - break; - - case 0x30: - // background color latch - m_vismac_bkg_latch = data & 0x07; - - m_vis->out3_w(space, ma, data); - break; - - case 0x40: - m_vis->out4_w(space, ma, data); - break; - - case 0x50: - m_vis->out5_w(space, ma, data); - break; - - case 0x60: - m_vis->out6_w(space, ma, data); - break; - - case 0x70: - m_vis->out7_w(space, ma, data); - break; + case 2: m_vismac_color_latch = data & 0x0f; break; + case 3: m_vis->out3_w(space, ma, data); break; + case 4: m_vis->out4_w(space, ma, data); break; + case 5: m_vis->out5_w(space, ma, data); break; + case 6: m_vis->out6_w(space, ma, data); break; + case 7: m_vis->out7_w(space, ma, data); break; } } -TIMER_DEVICE_CALLBACK_MEMBER(tmc600_state::blink_tick) -{ - m_blink = !m_blink; -} - uint8_t tmc600_state::get_color(uint16_t pma) { uint16_t pageaddr = pma & TMC600_PAGE_RAM_MASK; @@ -56,7 +30,7 @@ uint8_t tmc600_state::get_color(uint16_t pma) if (BIT(color, 3) && m_blink) { - color = m_vismac_bkg_latch; + color ^= 0x07; } return color; @@ -93,15 +67,28 @@ CDP1869_PCB_READ_MEMBER( tmc600_state::tmc600_pcb_r ) return BIT(color, 0); } +WRITE_LINE_MEMBER( tmc600_state::prd_w ) +{ + if (state) { + m_frame++; + + if (m_frame == 32) { + m_frame = 0; + + m_blink = !m_blink; + } + } +} + void tmc600_state::video_start() { // allocate memory m_color_ram.allocate(TMC600_PAGE_RAM_SIZE); - // register for state saving + // state saving save_item(NAME(m_vismac_reg_latch)); save_item(NAME(m_vismac_color_latch)); - save_item(NAME(m_vismac_bkg_latch)); + save_item(NAME(m_frame)); save_item(NAME(m_blink)); } @@ -125,7 +112,6 @@ GFXDECODE_END MACHINE_CONFIG_START( tmc600_video ) // video hardware MCFG_CDP1869_SCREEN_PAL_ADD(CDP1869_TAG, SCREEN_TAG, cdp1869_device::DOT_CLK_PAL) - MCFG_TIMER_DRIVER_ADD_PERIODIC("blink", tmc600_state, blink_tick, attotime::from_hz(2)) MCFG_GFXDECODE_ADD("gfxdecode", CDP1869_TAG":palette", tmc600) @@ -136,6 +122,7 @@ MACHINE_CONFIG_START( tmc600_video ) MCFG_CDP1869_CHAR_PCB_READ_OWNER(tmc600_state, tmc600_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(tmc600_state, tmc600_char_ram_r) MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PRD_CALLBACK(WRITELINE(tmc600_state, prd_w)) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END |