Previous 199869 Revisions Next

r46589 Tuesday 22nd March, 2016 at 11:26:57 UTC by hap
SM511: added undocumented opcodes
[src/devices/cpu/sm510]sm510.cpp sm510.h sm510op.cpp sm511core.cpp

trunk/src/devices/cpu/sm510/sm510.cpp
r255100r255101
1919  - callback for lcd screen as MAME bitmap (when needed)
2020  - LCD bs pin blink mode via Y register (0.5s off, 0.5s on)
2121  - LB/SBM is correct?
22  - SM511 unknown opcodes
22  - SM511 undocumented/guessed opcodes:
23    * $01 is guessed as DIV to ACC transfer, unknown which bits
24    * $5d is certainly CEND
25    * $65 is certainly IDIV, but not sure if it behaves same as on SM510
2326
2427*/
2528
trunk/src/devices/cpu/sm510/sm510.h
r255100r255101
260260   void op_skip();
261261   void op_cend();
262262   void op_idiv();
263   void op_dta();
263264
264265   void op_illegal();
265266};
trunk/src/devices/cpu/sm510/sm510op.cpp
r255100r255101
450450   m_div = 0;
451451}
452452
453void sm510_base_device::op_dta()
454{
455   // DTA: transfer divider low bits to ACC
456   m_acc = BITSWAP16(m_div,0,0,0,0, 0,0,0,0, 0,0,0,0, 7,8,9,10) & 0xf;
457}
458
453459void sm510_base_device::op_illegal()
454460{
455461   logerror("%s unknown opcode $%02X at $%04X\n", tag(), m_op, m_prev_pc);
trunk/src/devices/cpu/sm510/sm511core.cpp
r255100r255101
6363
6464void sm511_device::get_opcode_param()
6565{
66   // XXX?, LBL, PRE, TL, TML and prefix opcodes are 2 bytes
67   if (m_op == 0x01 || (m_op >= 0x5f && m_op <= 0x61) || (m_op & 0xf0) == 0x70 || (m_op & 0xfc) == 0x68)
66   // LBL, PRE, TL, TML and prefix opcodes are 2 bytes
67   if ((m_op >= 0x5f && m_op <= 0x61) || (m_op & 0xf0) == 0x70 || (m_op & 0xfc) == 0x68)
6868   {
6969      m_icount--;
7070      m_param = m_program->read_byte(m_pc);
r255100r255101
102102         switch (m_op)
103103         {
104104      case 0x00: op_rot(); break;
105//      case 0x01: op_xxx(); break; // ?
105      case 0x01: op_dta(); break; // guessed
106106      case 0x02: op_sbm(); break;
107107      case 0x03: op_atpl(); break;
108108      case 0x08: op_add(); break;
r255100r255101
119119      case 0x5a: op_ta0(); break;
120120      case 0x5b: op_tabl(); break;
121121      case 0x5c: op_atx(); break;
122//      case 0x5d: op_cend(); break;
122      case 0x5d: op_cend(); break;
123123      case 0x5e: op_tal(); break;
124124      case 0x5f: op_lbl(); break;
125125
r255100r255101
127127      case 0x62: op_wr(); break;
128128      case 0x63: op_ws(); break;
129129      case 0x64: op_incb(); break;
130//      case 0x65: op_idiv(); break;
130      case 0x65: op_idiv(); break;
131131      case 0x66: op_rc(); break;
132132      case 0x67: op_sc(); break;
133133      case 0x6c: op_decb(); break;


Previous 199869 Revisions Next


© 1997-2024 The MAME Team