mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
tmc600: Implemented TMC-700 real time clock. [Curt Coder]
This commit is contained in:
parent
52ca12c3d6
commit
23d1473dac
@ -90,7 +90,6 @@ Notes:
|
||||
|
||||
TODO
|
||||
|
||||
- real time clock
|
||||
- connect expansion bus
|
||||
|
||||
*/
|
||||
@ -98,6 +97,13 @@ Notes:
|
||||
#include "emu.h"
|
||||
#include "includes/tmc600.h"
|
||||
|
||||
READ8_MEMBER( tmc600_state::rtc_r )
|
||||
{
|
||||
m_rtc_int = m_vismac_reg_latch >> 3;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( tmc600_state::printer_w )
|
||||
{
|
||||
m_centronics->write_data0(BIT(data, 0));
|
||||
@ -125,7 +131,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( tmc600_io_map, AS_IO, 8, tmc600_state )
|
||||
AM_RANGE(0x03, 0x03) AM_DEVWRITE(CDP1852_KB_TAG, cdp1852_device, write)
|
||||
AM_RANGE(0x04, 0x04) AM_DEVWRITE(CDP1852_TMC700_TAG, cdp1852_device, write)
|
||||
AM_RANGE(0x05, 0x05) AM_WRITE(vismac_data_w)
|
||||
AM_RANGE(0x05, 0x05) AM_READWRITE(rtc_r, vismac_data_w)
|
||||
// AM_RANGE(0x06, 0x06) AM_WRITE(floppy_w)
|
||||
AM_RANGE(0x07, 0x07) AM_WRITE(vismac_register_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -236,6 +242,13 @@ WRITE_LINE_MEMBER( tmc600_state::q_w )
|
||||
m_cassette->output(state ? +1.0 : -1.0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( tmc600_state::sc_w )
|
||||
{
|
||||
if (data == COSMAC_STATE_CODE_S3_INTERRUPT) {
|
||||
m_maincpu->int_w(CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Machine Drivers */
|
||||
|
||||
static MACHINE_CONFIG_START( tmc600 )
|
||||
@ -247,6 +260,7 @@ static MACHINE_CONFIG_START( tmc600 )
|
||||
MCFG_COSMAC_EF2_CALLBACK(READLINE(tmc600_state, ef2_r))
|
||||
MCFG_COSMAC_EF3_CALLBACK(READLINE(tmc600_state, ef3_r))
|
||||
MCFG_COSMAC_Q_CALLBACK(WRITELINE(tmc600_state, q_w))
|
||||
MCFG_COSMAC_SC_CALLBACK(WRITE8(tmc600_state, sc_w))
|
||||
|
||||
// sound and video hardware
|
||||
MCFG_FRAGMENT_ADD(tmc600_video)
|
||||
|
@ -61,6 +61,7 @@ public:
|
||||
|
||||
virtual void video_start() override;
|
||||
|
||||
DECLARE_READ8_MEMBER( rtc_r );
|
||||
DECLARE_WRITE8_MEMBER( printer_w );
|
||||
DECLARE_WRITE8_MEMBER( vismac_register_w );
|
||||
DECLARE_WRITE8_MEMBER( vismac_data_w );
|
||||
@ -69,6 +70,7 @@ public:
|
||||
DECLARE_READ_LINE_MEMBER( ef2_r );
|
||||
DECLARE_READ_LINE_MEMBER( ef3_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( q_w );
|
||||
DECLARE_WRITE8_MEMBER( sc_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( prd_w );
|
||||
|
||||
uint8_t get_color(uint16_t pma);
|
||||
@ -78,6 +80,7 @@ public:
|
||||
int m_vismac_color_latch; // color latch
|
||||
bool m_blink; // cursor blink
|
||||
int m_frame;
|
||||
bool m_rtc_int;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(blink_tick);
|
||||
CDP1869_CHAR_RAM_READ_MEMBER(tmc600_char_ram_r);
|
||||
|
@ -72,10 +72,15 @@ WRITE_LINE_MEMBER( tmc600_state::prd_w )
|
||||
if (state) {
|
||||
m_frame++;
|
||||
|
||||
if (m_frame == 32) {
|
||||
m_frame = 0;
|
||||
|
||||
m_blink = !m_blink;
|
||||
switch (m_frame)
|
||||
{
|
||||
case 31:
|
||||
m_frame = 0;
|
||||
m_blink = !m_blink;
|
||||
// fallthru
|
||||
case 15:
|
||||
m_maincpu->int_w(m_rtc_int);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user