summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sm510/sm5acore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sm510/sm5acore.cpp')
-rw-r--r--src/devices/cpu/sm510/sm5acore.cpp95
1 files changed, 49 insertions, 46 deletions
diff --git a/src/devices/cpu/sm510/sm5acore.cpp b/src/devices/cpu/sm510/sm5acore.cpp
index ab402e535ba..04989bef418 100644
--- a/src/devices/cpu/sm510/sm5acore.cpp
+++ b/src/devices/cpu/sm510/sm5acore.cpp
@@ -3,6 +3,9 @@
/*
Sharp SM5A MCU core implementation
+
+ TODO:
+ - confirm SM5A mnemonics
*/
@@ -12,9 +15,9 @@
// MCU types
-DEFINE_DEVICE_TYPE(SM5A, sm5a_device, "sm5a", "SM5A")
-DEFINE_DEVICE_TYPE(SM5L, sm5l_device, "sm5l", "SM5L")
-DEFINE_DEVICE_TYPE(KB1013VK12, kb1013vk12_device, "kb1013vk1_2", "KB1013VK1-2")
+DEFINE_DEVICE_TYPE(SM5A, sm5a_device, "sm5a", "SM5A") // 1.8K ROM, 5x13x4 RAM, shift registers for LCD
+DEFINE_DEVICE_TYPE(SM5L, sm5l_device, "sm5l", "SM5L") // low-power version of SM5A
+DEFINE_DEVICE_TYPE(KB1013VK12, kb1013vk12_device, "kb1013vk1_2", "KB1013VK1-2") // Soviet-era clone of SM5A
// internal memory maps
@@ -71,75 +74,75 @@ void sm5a_device::execute_one()
{
switch (m_op & 0xf0)
{
- case 0x20: op_lax(); break; // LC
- case 0x30: op_adx(); break; // AS/A10
- case 0x40: op_lb(); break; // LAS
- case 0x70: op_ssr(); break; // LP
+ case 0x20: op_lax(); break;
+ case 0x30: op_adx(); break;
+ case 0x40: op_lb(); break;
+ case 0x70: op_ssr(); break;
case 0x80: case 0x90: case 0xa0: case 0xb0:
- op_tr(); break; // BR (LP+this=JMP)
+ op_tr(); break;
case 0xc0: case 0xd0: case 0xe0: case 0xf0:
- op_trs(); break; // CBR/CZP (LP+this=CAL)
+ op_trs(); break;
default:
switch (m_op & 0xfc)
{
- case 0x04: op_rm(); break; // BM0
- case 0x0c: op_sm(); break; // BM1
- case 0x10: op_exc(); break; // XM/XE
- case 0x14: op_exci(); break; // XI/XEI
- case 0x18: op_lda(); break; // LE
- case 0x1c: op_excd(); break; // XD/XED
- case 0x54: op_tmi(); break; // SM1
+ case 0x04: op_rm(); break;
+ case 0x0c: op_sm(); break;
+ case 0x10: op_exc(); break;
+ case 0x14: op_exci(); break;
+ case 0x18: op_lda(); break;
+ case 0x1c: op_excd(); break;
+ case 0x54: op_tmi(); break;
default:
switch (m_op)
{
- case 0x00: op_skip(); break; // NOP
- case 0x01: op_atr(); break; // OAR
- case 0x02: op_sbm(); break; // *BS1
+ case 0x00: op_skip(); break;
+ case 0x01: op_atr(); break;
+ case 0x02: op_sbm(); break;
case 0x03: op_atbp(); break;
- case 0x08: op_add(); break; // AM
- case 0x09: op_add11(); break; // AC
- case 0x0a: op_coma(); break; // COM
- case 0x0b: op_exbla(); break; // XL
-
- case 0x50: op_tal(); break; // SI1
- case 0x51: op_tb(); break; // SI0
- case 0x52: op_tc(); break; // SCO
- case 0x53: op_tam(); break; // SAM
- case 0x58: op_tis(); break; // TIM
+ case 0x08: op_add(); break;
+ case 0x09: op_add11(); break;
+ case 0x0a: op_coma(); break;
+ case 0x0b: op_exbla(); break;
+
+ case 0x50: op_tal(); break;
+ case 0x51: op_tb(); break;
+ case 0x52: op_tc(); break;
+ case 0x53: op_tam(); break;
+ case 0x58: op_tis(); break;
case 0x59: op_ptw(); break;
- case 0x5a: op_ta0(); break; // SAO
- case 0x5b: op_tabl(); break; // SAL
+ case 0x5a: op_ta0(); break;
+ case 0x5b: op_tabl(); break;
case 0x5c: op_tw(); break;
case 0x5d: op_dtw(); break;
- case 0x5f: op_lbl(); break; // LAF
+ case 0x5f: op_lbl(); break;
case 0x60: op_comcn(); break;
case 0x61: op_pdtw(); break;
case 0x62: op_wr(); break;
case 0x63: op_ws(); break;
- case 0x64: op_incb(); break; // INC
- case 0x65: op_idiv(); break; // SYN
- case 0x66: op_rc(); break; // CLC
- case 0x67: op_sc(); break; // STC
- case 0x68: op_rmf(); break; // CLL
- case 0x69: op_smf(); break; // LD0
- case 0x6a: op_kta(); break; // ICD
- case 0x6b: op_rbm(); break; // *BS0
- case 0x6c: op_decb(); break; // DEC
- case 0x6d: op_comcb(); break; // CMS
- case 0x6e: op_rtn0(); break; // RT
- case 0x6f: op_rtn1(); break; // RTS
+ case 0x64: op_incb(); break;
+ case 0x65: op_idiv(); break;
+ case 0x66: op_rc(); break;
+ case 0x67: op_sc(); break;
+ case 0x68: op_rmf(); break;
+ case 0x69: op_smf(); break;
+ case 0x6a: op_kta(); break;
+ case 0x6b: op_rbm(); break;
+ case 0x6c: op_decb(); break;
+ case 0x6d: op_comcb(); break;
+ case 0x6e: op_rtn0(); break;
+ case 0x6f: op_rtn1(); break;
// extended opcodes
case 0x5e:
m_op = m_op << 8 | m_param;
switch (m_param)
{
- case 0x00: op_cend(); break; // HLT
- case 0x04: op_dta(); break; // LDF
+ case 0x00: op_cend(); break;
+ case 0x04: op_dta(); break;
default: op_illegal(); break;
}