tmc600: Implemented TMC-700 real time clock. [Curt Coder]

This commit is contained in:
Curt Coder 2017-11-12 20:59:20 +02:00
parent 52ca12c3d6
commit 23d1473dac
3 changed files with 28 additions and 6 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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;
}
}
}