diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2019-02-14 14:31:48 -0500 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2019-02-14 14:31:48 -0500 |
commit | e993c0f7957d02519e20cff8c20c116ee57c7417 (patch) | |
tree | 737c5f7a86f0d576950766c4a5dabbfbe40ddf3a | |
parent | 9aa0a78c9844d6eed57739b1addc41dc07507dd3 (diff) |
crt9028: Add more handler stubs (nw)
-rw-r--r-- | src/devices/video/crt9028.cpp | 155 | ||||
-rw-r--r-- | src/devices/video/crt9028.h | 15 |
2 files changed, 168 insertions, 2 deletions
diff --git a/src/devices/video/crt9028.cpp b/src/devices/video/crt9028.cpp index 342449a54d5..8126e5c6344 100644 --- a/src/devices/video/crt9028.cpp +++ b/src/devices/video/crt9028.cpp @@ -77,6 +77,7 @@ crt9028_device::crt9028_device(const machine_config &mconfig, device_type type, , m_wide_gfx_pattern(wide_gfx_pattern) , m_thin_gfx_seg{thin_gfx_seg1, thin_gfx_seg2, thin_gfx_seg3, thin_gfx_seg4} , m_thin_gfx_dots{thin_gfx_dots1, thin_gfx_dots2, thin_gfx_dots3, thin_gfx_dots4} + , m_address_register(0) { // Mostly unused now (void)m_hsync_delay; @@ -166,6 +167,8 @@ void crt9028_device::device_resolve_objects() void crt9028_device::device_start() { m_space = &space(0); + + save_item(NAME(m_address_register)); } @@ -180,12 +183,121 @@ u32 crt9028_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c //------------------------------------------------- +// chip_reset - software reset command +//------------------------------------------------- + +void crt9028_device::chip_reset() +{ + logerror("%s: Chip reset\n", machine().describe_context()); +} + + +//------------------------------------------------- +// status_r - read status register +//------------------------------------------------- + +u8 crt9028_device::status_r() +{ + return 0x80; +} + + +//------------------------------------------------- +// filadd_w - set fill address register +//------------------------------------------------- + +void crt9028_device::filadd_w(u8 data) +{ + logerror("%s: Fill address = %03X\n", machine().describe_context(), data << 4); +} + + +//------------------------------------------------- +// tosadd_w - set top of screen address register +//------------------------------------------------- + +void crt9028_device::tosadd_w(u8 data) +{ + logerror("%s: Top of screen address = %03X\n", machine().describe_context(), data << 4); +} + + +//------------------------------------------------- +// curlo_w - set cursor low register +//------------------------------------------------- + +void crt9028_device::curlo_w(u8 data) +{ + logerror("%s: Cursor low = %02X\n", machine().describe_context(), data); +} + + +//------------------------------------------------- +// curhi_w - set cursor high/scroll register +//------------------------------------------------- + +void crt9028_device::curhi_w(u8 data) +{ + logerror("%s: Cursor high = %02X\n", machine().describe_context(), data); +} + + +//------------------------------------------------- +// attdat_w - set attribute data register +//------------------------------------------------- + +void crt9028_device::attdat_w(u8 data) +{ + logerror("%s: Attribute data = %02X\n", machine().describe_context(), data); +} + + +//------------------------------------------------- +// mode_w - set mode register +//------------------------------------------------- + +void crt9028_device::mode_w(u8 data) +{ + logerror("%s: Auto increment %sabled\n", machine().describe_context(), BIT(data, 7) ? "en" : "dis"); +} + + +//------------------------------------------------- +// character_r - read character from memory +//------------------------------------------------- + +u8 crt9028_device::character_r() +{ + return 0; +} + + +//------------------------------------------------- +// character_w - write character to memory +//------------------------------------------------- + +void crt9028_device::character_w(u8 data) +{ + logerror("%s: Character = %02X\n", machine().describe_context(), data); +} + + +//------------------------------------------------- // read - read from data or status register //------------------------------------------------- u8 crt9028_device::read(offs_t offset) { - return 0xff; + if (BIT(offset, 0)) + return status_r(); + else if (m_address_register == 0xe) + return character_r(); + else + { + if (!machine().side_effects_disabled()) + logerror("Read from unknown or write-only register %X\n", m_address_register); + return 0; + } } @@ -195,7 +307,46 @@ u8 crt9028_device::read(offs_t offset) void crt9028_device::write(offs_t offset, u8 data) { - logerror("%s: Writing %02X to %s register\n", machine().describe_context(), data, BIT(offset, 0) ? "address" : "data"); + if (BIT(offset, 0)) + m_address_register = data & 0x0f; + else switch (m_address_register) + { + case 0x6: + chip_reset(); + break; + + case 0x8: + tosadd_w(data); + break; + + case 0x9: + curlo_w(data); + break; + + case 0xa: + curhi_w(data); + break; + + case 0xb: + filadd_w(data); + break; + + case 0xc: + attdat_w(data); + break; + + case 0xd: + character_w(data); + break; + + case 0xe: + mode_w(data); + break; + + default: + logerror("%s: Unknown register %X = %02X\n", machine().describe_context(), m_address_register, data); + break; + } } diff --git a/src/devices/video/crt9028.h b/src/devices/video/crt9028.h index 723558859c6..f0696519ed9 100644 --- a/src/devices/video/crt9028.h +++ b/src/devices/video/crt9028.h @@ -75,6 +75,18 @@ protected: virtual space_config_vector memory_space_config() const override; private: + // register helpers + void chip_reset(); + u8 status_r(); + void filadd_w(u8 data); + void tosadd_w(u8 data); + void curlo_w(u8 data); + void curhi_w(u8 data); + void attdat_w(u8 data); + void mode_w(u8 data); + u8 character_r(); + void character_w(u8 data); + // address space for display memory const address_space_config m_space_config; address_space *m_space; @@ -106,6 +118,9 @@ private: const u8 m_wide_gfx_pattern; const u16 m_thin_gfx_seg[4]; const u8 m_thin_gfx_dots[4]; + + // internal state + u8 m_address_register; }; // ======================> crt9028_000_device |