summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/melps4/m58846.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/melps4/m58846.c')
-rw-r--r--src/emu/cpu/melps4/m58846.c49
1 files changed, 21 insertions, 28 deletions
diff --git a/src/emu/cpu/melps4/m58846.c b/src/emu/cpu/melps4/m58846.c
index 824969f8cd6..17161da2fb5 100644
--- a/src/emu/cpu/melps4/m58846.c
+++ b/src/emu/cpu/melps4/m58846.c
@@ -50,9 +50,7 @@ offs_t m58846_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *o
void m58846_device::device_start()
{
melps4_cpu_device::device_start();
-
- m_timer[0] = timer_alloc(0);
- m_timer[1] = timer_alloc(1);
+ m_timer = timer_alloc(0);
}
@@ -66,7 +64,7 @@ void m58846_device::device_reset()
melps4_cpu_device::device_reset();
// timer 1 runs continuously
- reset_timer1();
+ reset_timer();
}
@@ -75,37 +73,30 @@ void m58846_device::device_reset()
// timers
//-------------------------------------------------
-void m58846_device::reset_timer1()
+void m58846_device::reset_timer()
{
// reset 7-bit prescaler
attotime base = attotime::from_ticks(6 * 128, unscaled_clock());
- m_timer[0]->adjust(base);
+ m_timer->adjust(base);
}
void m58846_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- switch (id)
- {
- // timer 1
- case 0:
- m_irqflag[1] = true;
- m_possible_irq = true;
- reset_timer1();
- break;
-
- // timer 2
- case 1:
- break;
-
- default:
- assert_always(FALSE, "Unknown id in m58846_device::device_timer");
- break;
- }
+ if (id != 0)
+ return;
+
+ // timer 1 overflow
+ m_irqflag[1] = true;
+ m_possible_irq = true;
+ reset_timer();
}
void m58846_device::write_v(UINT8 data)
{
// d0: enable timer 1 irq
+ // d1: enable timer 2 irq? (TODO)
+ // d2: ?
+ // d3: timer 2 enable?
m_tmr_irq_enabled[0] = (data & 1) ? true : false;
m_possible_irq = true;
@@ -121,7 +112,7 @@ void m58846_device::write_v(UINT8 data)
void m58846_device::execute_one()
{
// handle one opcode
- switch (m_op & 0xf0)
+ switch (m_op & 0x1f0)
{
case 0x30: op_sey(); break;
case 0x70: op_sp(); break;
@@ -131,7 +122,7 @@ void m58846_device::execute_one()
case 0xc0: case 0xd0: case 0xe0: case 0xf0: op_lxy(); break;
default:
- switch (m_op & 0xfc)
+ switch (m_op & 0x1fc)
{
case 0x20: op_szb(); break;
case 0x4c: op_sb(); break;
@@ -156,11 +147,11 @@ void m58846_device::execute_one()
case 0x03: op_dey(); break;
case 0x04: op_di(); break;
case 0x05: op_ei(); break;
+ case 0x09: op_tabe(); break; // undocumented
case 0x0a: op_am(); break;
case 0x0b: op_ose(); break;
case 0x0c: op_tya(); break;
case 0x0f: op_cma(); break;
- // 0x18 RAR undocumented?
case 0x10: op_cls(); break;
case 0x11: op_clds(); break;
@@ -169,6 +160,8 @@ void m58846_device::execute_one()
case 0x15: op_sd(); break;
case 0x16: op_tepa(); break;
case 0x17: op_ospa(); break;
+ case 0x18: op_rl(); break; // undocumented
+ case 0x19: op_rr(); break; // undocumented
case 0x1a: op_teab(); break;
case 0x1b: op_osab(); break;
case 0x1c: op_tba(); break;
@@ -203,10 +196,10 @@ void m58846_device::execute_one()
break;
}
- break; // 0xff
+ break; // 0x1ff
}
- break; // 0xfc
+ break; // 0x1fc
} // big switch
}