summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sm510/sm500core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sm510/sm500core.cpp')
-rw-r--r--src/devices/cpu/sm510/sm500core.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/devices/cpu/sm510/sm500core.cpp b/src/devices/cpu/sm510/sm500core.cpp
index 54c2143b3d7..11cc9759115 100644
--- a/src/devices/cpu/sm510/sm500core.cpp
+++ b/src/devices/cpu/sm510/sm500core.cpp
@@ -6,6 +6,8 @@
TODO:
- EXKSA, EXKFA opcodes
+ - SM500 data book suggests that R1 divider output is selectable, but how?
+ - ACL doesn't work right?
*/
@@ -85,8 +87,10 @@ void sm500_device::device_reset()
// SM500 specific
op_idiv();
+ m_1s = true;
m_cb = 0;
m_rsub = false;
+ m_r = 0xf;
}
@@ -99,6 +103,25 @@ offs_t sm500_device::disasm_disassemble(std::ostream &stream, offs_t pc, const u
}
+//-------------------------------------------------
+// buzzer controller
+//-------------------------------------------------
+
+void sm500_device::clock_melody()
+{
+ // R1 buzzer from divider, R2-R4 generic outputs
+ u8 out = m_div >> 2 & 1;
+ out = (out & ~m_r) | (~m_r & 0xe);
+
+ // output to R pins
+ if (out != m_r_out)
+ {
+ m_write_r(0, out, 0xff);
+ m_r_out = out;
+ }
+}
+
+
//-------------------------------------------------
// execute