diff options
Diffstat (limited to 'src/emu/machine/r10788.c')
-rw-r--r-- | src/emu/machine/r10788.c | 240 |
1 files changed, 120 insertions, 120 deletions
diff --git a/src/emu/machine/r10788.c b/src/emu/machine/r10788.c index 10f46ab621a..128314903fe 100644 --- a/src/emu/machine/r10788.c +++ b/src/emu/machine/r10788.c @@ -41,7 +41,7 @@ #include "emu.h" #include "machine/r10788.h" -#define VERBOSE 0 +#define VERBOSE 0 #if VERBOSE #define LOG(x) logerror x #else @@ -57,10 +57,10 @@ const device_type R10788 = &device_creator<r10788_device>; r10788_device::r10788_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, R10788, "Rockwell 10788", tag, owner, clock, "r10788", __FILE__), - m_ktr(0), m_kts(0), m_kla(0), m_klb(0), m_mask_a(15), m_mask_b(15), m_ker(0), - m_io_counter(0), m_scan_counter(0), - m_display(*this) + : device_t(mconfig, R10788, "Rockwell 10788", tag, owner, clock, "r10788", __FILE__), + m_ktr(0), m_kts(0), m_kla(0), m_klb(0), m_mask_a(15), m_mask_b(15), m_ker(0), + m_io_counter(0), m_scan_counter(0), + m_display(*this) { } @@ -69,22 +69,22 @@ r10788_device::r10788_device(const machine_config &mconfig, const char *tag, dev */ void r10788_device::device_start() { - m_display.resolve(); - - save_item(NAME(m_reg)); - save_item(NAME(m_ktr)); - save_item(NAME(m_kts)); - save_item(NAME(m_kla)); - save_item(NAME(m_klb)); - save_item(NAME(m_mask_a)); - save_item(NAME(m_mask_b)); - save_item(NAME(m_ker)); - save_item(NAME(m_io_counter)); - save_item(NAME(m_scan_counter)); - - m_timer = timer_alloc(TIMER_DISPLAY); - // recurring timer every 36 cycles - m_timer->adjust(clocks_to_attotime(36), 0, clocks_to_attotime(36)); + m_display.resolve(); + + save_item(NAME(m_reg)); + save_item(NAME(m_ktr)); + save_item(NAME(m_kts)); + save_item(NAME(m_kla)); + save_item(NAME(m_klb)); + save_item(NAME(m_mask_a)); + save_item(NAME(m_mask_b)); + save_item(NAME(m_ker)); + save_item(NAME(m_io_counter)); + save_item(NAME(m_scan_counter)); + + m_timer = timer_alloc(TIMER_DISPLAY); + // recurring timer every 36 cycles + m_timer->adjust(clocks_to_attotime(36), 0, clocks_to_attotime(36)); } /** @@ -93,14 +93,14 @@ void r10788_device::device_start() void r10788_device::device_reset() { memset(m_reg, 0x00, sizeof(m_reg)); - m_ktr = 0; - m_kts = 0; - m_kla = 0; - m_klb = 0; - m_mask_a = 15; - m_mask_b = 15; - m_ker = 0; - m_scan_counter = 0; + m_ktr = 0; + m_kts = 0; + m_kla = 0; + m_klb = 0; + m_mask_a = 15; + m_mask_b = 15; + m_ker = 0; + m_scan_counter = 0; } @@ -113,19 +113,19 @@ void r10788_device::device_reset() */ void r10788_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - UINT8 data; - switch (id) - { - case TIMER_DISPLAY: - data = (m_reg[0][m_scan_counter] & m_mask_a) + - 16 * (m_reg[1][m_scan_counter] & m_mask_b); - LOG(("%s: scan counter:%2d data:%02x\n", __FUNCTION__, m_scan_counter, data)); - m_display(m_scan_counter, data, 0xff); - break; - default: - LOG(("%s: invalid timer id:%d\n", __FUNCTION__, id)); - } - m_scan_counter = (m_scan_counter + 1) % 16; + UINT8 data; + switch (id) + { + case TIMER_DISPLAY: + data = (m_reg[0][m_scan_counter] & m_mask_a) + + 16 * (m_reg[1][m_scan_counter] & m_mask_b); + LOG(("%s: scan counter:%2d data:%02x\n", __FUNCTION__, m_scan_counter, data)); + m_display(m_scan_counter, data, 0xff); + break; + default: + LOG(("%s: invalid timer id:%d\n", __FUNCTION__, id)); + } + m_scan_counter = (m_scan_counter + 1) % 16; } /************************************* @@ -142,87 +142,87 @@ void r10788_device::device_timer(emu_timer &timer, device_timer_id id, int param WRITE8_MEMBER( r10788_device::io_w ) { - assert(offset < 16); - switch (offset) - { - case KTR: // Transfer Keyboard Return - LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); - m_ktr = data; - break; - case KTS: // Transfer Keyboard Strobe - LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); - m_kts = data; - break; - case KLA: // Load Display Register A - LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); - m_kla = data; - m_reg[0][m_io_counter] = m_kla; - break; - case KLB: // Load Display Register B - LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); - m_klb = data; - m_reg[1][m_io_counter] = m_kla; - break; - case KDN: // Turn On Display - LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); - m_mask_a = 15; - m_mask_b = 15; - break; - case KAF: // Turn Off A - LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); - m_mask_a = 0; - m_mask_b &= ~3; - break; - case KBF: // Turn Off B - LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); - m_mask_b &= ~12; - break; - case KER: // Reset Keyboard Error - LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); - m_ker = 10; - break; - } + assert(offset < 16); + switch (offset) + { + case KTR: // Transfer Keyboard Return + LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); + m_ktr = data; + break; + case KTS: // Transfer Keyboard Strobe + LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); + m_kts = data; + break; + case KLA: // Load Display Register A + LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); + m_kla = data; + m_reg[0][m_io_counter] = m_kla; + break; + case KLB: // Load Display Register B + LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); + m_klb = data; + m_reg[1][m_io_counter] = m_kla; + break; + case KDN: // Turn On Display + LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); + m_mask_a = 15; + m_mask_b = 15; + break; + case KAF: // Turn Off A + LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); + m_mask_a = 0; + m_mask_b &= ~3; + break; + case KBF: // Turn Off B + LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); + m_mask_b &= ~12; + break; + case KER: // Reset Keyboard Error + LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); + m_ker = 10; + break; + } } READ8_MEMBER( r10788_device::io_r ) { - assert(offset < 16); - UINT8 data = 0xf; - switch (offset) - { - case KTR: // Transfer Keyboard Return - data = m_ktr; - LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); - break; - case KTS: // Transfer Keyboard Strobe - data = m_kts; - LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); - break; - case KLA: // Load Display Register A - m_kla = m_reg[0][m_io_counter]; - data = m_kla; - LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); - break; - case KLB: // Load Display Register B - m_klb = m_reg[1][m_io_counter]; - data = m_klb; - LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); - // FIXME: does it automagically increment at KLB write? - m_io_counter = (m_io_counter + 1) % 16; - break; - case KDN: // Turn On Display - LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); - break; - case KAF: // Turn Off A - LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); - break; - case KBF: // Turn Off B - LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); - break; - case KER: // Reset Keyboard Error - LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); - break; - } - return data; + assert(offset < 16); + UINT8 data = 0xf; + switch (offset) + { + case KTR: // Transfer Keyboard Return + data = m_ktr; + LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); + break; + case KTS: // Transfer Keyboard Strobe + data = m_kts; + LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); + break; + case KLA: // Load Display Register A + m_kla = m_reg[0][m_io_counter]; + data = m_kla; + LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); + break; + case KLB: // Load Display Register B + m_klb = m_reg[1][m_io_counter]; + data = m_klb; + LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); + // FIXME: does it automagically increment at KLB write? + m_io_counter = (m_io_counter + 1) % 16; + break; + case KDN: // Turn On Display + LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); + break; + case KAF: // Turn Off A + LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); + break; + case KBF: // Turn Off B + LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); + break; + case KER: // Reset Keyboard Error + LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); + break; + } + return data; } |