summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/sed1330.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/sed1330.cpp')
-rw-r--r--src/devices/video/sed1330.cpp46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/devices/video/sed1330.cpp b/src/devices/video/sed1330.cpp
index 75eefb18c9d..73e92561e33 100644
--- a/src/devices/video/sed1330.cpp
+++ b/src/devices/video/sed1330.cpp
@@ -33,9 +33,9 @@
#define INSTRUCTION_HDOT_SCR 0x5a
#define INSTRUCTION_OVLAY 0x5b
#define INSTRUCTION_CSRW 0x46
-#define INSTRUCTION_CSRR 0x47 // unimplemented
+#define INSTRUCTION_CSRR 0x47
#define INSTRUCTION_MWRITE 0x42
-#define INSTRUCTION_MREAD 0x43 // unimplemented
+#define INSTRUCTION_MREAD 0x43
#define CSRDIR_RIGHT 0x00
@@ -235,7 +235,8 @@ device_memory_interface::space_config_vector sed1330_device::memory_space_config
READ8_MEMBER( sed1330_device::status_r )
{
- LOG("SED1330 Status Read: %s\n", m_bf ? "busy" : "ready");
+ if (!machine().side_effects_disabled())
+ LOG("SED1330 Status Read: %s\n", m_bf ? "busy" : "ready");
return m_bf << 6;
}
@@ -280,11 +281,44 @@ WRITE8_MEMBER( sed1330_device::command_w )
READ8_MEMBER( sed1330_device::data_r )
{
- uint8_t data = readbyte(m_csr);
+ uint8_t data = 0;
- LOG("SED1330 Memory Read %02x from %04x\n", data, m_csr);
+ switch (m_ir)
+ {
+ case INSTRUCTION_MREAD:
+ data = readbyte(m_csr);
+ if (!machine().side_effects_disabled())
+ {
+ LOG("SED1330 Memory Read %02x from %04x\n", data, m_csr);
+ increment_csr();
+ }
+ break;
+
+ case INSTRUCTION_CSRR:
+ switch (m_pbc)
+ {
+ case 0:
+ data = m_csr & 0xff;
+ break;
+
+ case 1:
+ data = (m_csr & 0xff00) >> 8;
+ break;
- increment_csr();
+ default:
+ logerror("SED1330 Invalid parameter byte %02x\n", data);
+ }
+ if (!machine().side_effects_disabled())
+ {
+ LOG("SED1330 Cursor Byte %d Read %02x\n", m_pbc, data);
+ m_pbc++;
+ }
+ break;
+
+ default:
+ logerror("SED1330 Unsupported instruction %02x\n", m_ir);
+ break;
+ }
return data;
}