mirror of
https://github.com/holub/mame
synced 2025-05-21 13:18:56 +03:00
Normalized m37710 local CPU state pointers to to 'cpustate'.
Removed need for cpunum in the timers.
This commit is contained in:
parent
593e334f08
commit
5cfad18a84
@ -57,7 +57,7 @@
|
||||
|
||||
#define M37710_DEBUG (0) // enables verbose logging for peripherals, etc.
|
||||
|
||||
static void m37710_set_irq_line(m37710i_cpu_struct *m37710i_cpu, int line, int state);
|
||||
static void m37710_set_irq_line(m37710i_cpu_struct *cpustate, int line, int state);
|
||||
|
||||
/* interrupt control mapping */
|
||||
|
||||
@ -260,20 +260,20 @@ static const char *const m37710_tnames[8] =
|
||||
|
||||
static TIMER_CALLBACK( m37710_timer_cb )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = ptr;
|
||||
m37710i_cpu_struct *cpustate = ptr;
|
||||
int which = param;
|
||||
int curirq = M37710_LINE_TIMERA0 - which;
|
||||
|
||||
cpu_push_context(m37710i_cpu->device);
|
||||
timer_adjust_oneshot(m37710i_cpu->timers[which], m37710i_cpu->reload[which], param);
|
||||
cpu_push_context(cpustate->device);
|
||||
timer_adjust_oneshot(cpustate->timers[which], cpustate->reload[which], param);
|
||||
|
||||
m37710i_cpu->m37710_regs[m37710_irq_levels[curirq]] |= 0x04;
|
||||
m37710_set_irq_line(m37710i_cpu, curirq, PULSE_LINE);
|
||||
cpu_triggerint(m37710i_cpu->device);
|
||||
cpustate->m37710_regs[m37710_irq_levels[curirq]] |= 0x04;
|
||||
m37710_set_irq_line(cpustate, curirq, PULSE_LINE);
|
||||
cpu_triggerint(cpustate->device);
|
||||
cpu_pop_context();
|
||||
}
|
||||
|
||||
static void m37710_external_tick(m37710i_cpu_struct *m37710i_cpu, int timer, int state)
|
||||
static void m37710_external_tick(m37710i_cpu_struct *cpustate, int timer, int state)
|
||||
{
|
||||
// we only care if the state is "on"
|
||||
if (!state)
|
||||
@ -282,18 +282,18 @@ static void m37710_external_tick(m37710i_cpu_struct *m37710i_cpu, int timer, int
|
||||
}
|
||||
|
||||
// check if enabled
|
||||
if (m37710i_cpu->m37710_regs[0x40] & (1<<timer))
|
||||
if (cpustate->m37710_regs[0x40] & (1<<timer))
|
||||
{
|
||||
if ((m37710i_cpu->m37710_regs[0x56+timer] & 0x3) == 1)
|
||||
if ((cpustate->m37710_regs[0x56+timer] & 0x3) == 1)
|
||||
{
|
||||
if (m37710i_cpu->m37710_regs[0x46+(timer*2)] == 0xff)
|
||||
if (cpustate->m37710_regs[0x46+(timer*2)] == 0xff)
|
||||
{
|
||||
m37710i_cpu->m37710_regs[0x46+(timer*2)] = 0;
|
||||
m37710i_cpu->m37710_regs[0x46+(timer*2)+1]++;
|
||||
cpustate->m37710_regs[0x46+(timer*2)] = 0;
|
||||
cpustate->m37710_regs[0x46+(timer*2)+1]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
m37710i_cpu->m37710_regs[0x46+(timer*2)]++;
|
||||
cpustate->m37710_regs[0x46+(timer*2)]++;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -303,40 +303,39 @@ static void m37710_external_tick(m37710i_cpu_struct *m37710i_cpu, int timer, int
|
||||
}
|
||||
}
|
||||
|
||||
static void m37710_recalc_timer(m37710i_cpu_struct *m37710i_cpu, running_machine *machine, int timer)
|
||||
static void m37710_recalc_timer(m37710i_cpu_struct *cpustate, running_machine *machine, int timer)
|
||||
{
|
||||
int cpunum = cpunum_get_active();
|
||||
int tval;
|
||||
static const int tcr[8] = { 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d };
|
||||
attotime time;
|
||||
static const int tscales[4] = { 2, 16, 64, 512 };
|
||||
|
||||
// check if enabled
|
||||
if (m37710i_cpu->m37710_regs[0x40] & (1<<timer))
|
||||
if (cpustate->m37710_regs[0x40] & (1<<timer))
|
||||
{
|
||||
#if M37710_DEBUG
|
||||
mame_printf_debug("Timer %d (%s) is enabled\n", timer, m37710_tnames[timer]);
|
||||
#endif
|
||||
|
||||
// set the timer's value
|
||||
tval = m37710i_cpu->m37710_regs[0x46+(timer*2)] | (m37710i_cpu->m37710_regs[0x47+(timer*2)]<<8);
|
||||
tval = cpustate->m37710_regs[0x46+(timer*2)] | (cpustate->m37710_regs[0x47+(timer*2)]<<8);
|
||||
|
||||
// check timer's mode
|
||||
// modes are slightly different between timer groups A and B
|
||||
if (timer < 5)
|
||||
{
|
||||
switch (m37710i_cpu->m37710_regs[0x56+timer] & 0x3)
|
||||
switch (cpustate->m37710_regs[0x56+timer] & 0x3)
|
||||
{
|
||||
case 0: // timer mode
|
||||
time = attotime_mul(ATTOTIME_IN_HZ(cpu_get_clock(machine->activecpu)), tscales[m37710i_cpu->m37710_regs[tcr[timer]]>>6]);
|
||||
time = attotime_mul(ATTOTIME_IN_HZ(cpu_get_clock(machine->activecpu)), tscales[cpustate->m37710_regs[tcr[timer]]>>6]);
|
||||
time = attotime_mul(time, tval + 1);
|
||||
|
||||
#if M37710_DEBUG
|
||||
mame_printf_debug("Timer %d in timer mode, %f Hz\n", timer, 1.0 / attotime_to_double(time));
|
||||
#endif
|
||||
|
||||
timer_adjust_oneshot(m37710i_cpu->timers[timer], time, cpunum);
|
||||
m37710i_cpu->reload[timer] = time;
|
||||
timer_adjust_oneshot(cpustate->timers[timer], time, timer);
|
||||
cpustate->reload[timer] = time;
|
||||
break;
|
||||
|
||||
case 1: // event counter mode
|
||||
@ -360,18 +359,18 @@ static void m37710_recalc_timer(m37710i_cpu_struct *m37710i_cpu, running_machine
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (m37710i_cpu->m37710_regs[0x56+timer] & 0x3)
|
||||
switch (cpustate->m37710_regs[0x56+timer] & 0x3)
|
||||
{
|
||||
case 0: // timer mode
|
||||
time = attotime_mul(ATTOTIME_IN_HZ(cpu_get_clock(machine->activecpu)), tscales[m37710i_cpu->m37710_regs[tcr[timer]]>>6]);
|
||||
time = attotime_mul(ATTOTIME_IN_HZ(cpu_get_clock(machine->activecpu)), tscales[cpustate->m37710_regs[tcr[timer]]>>6]);
|
||||
time = attotime_mul(time, tval + 1);
|
||||
|
||||
#if M37710_DEBUG
|
||||
mame_printf_debug("Timer %d in timer mode, %f Hz\n", timer, 1.0 / attotime_to_double(time));
|
||||
#endif
|
||||
|
||||
timer_adjust_oneshot(m37710i_cpu->timers[timer], time, cpunum);
|
||||
m37710i_cpu->reload[timer] = time;
|
||||
timer_adjust_oneshot(cpustate->timers[timer], time, timer);
|
||||
cpustate->reload[timer] = time;
|
||||
break;
|
||||
|
||||
case 1: // event counter mode
|
||||
@ -396,7 +395,7 @@ static void m37710_recalc_timer(m37710i_cpu_struct *m37710i_cpu, running_machine
|
||||
}
|
||||
}
|
||||
|
||||
static UINT8 m37710_internal_r(m37710i_cpu_struct *m37710i_cpu, int offset)
|
||||
static UINT8 m37710_internal_r(m37710i_cpu_struct *cpustate, int offset)
|
||||
{
|
||||
#if M37710_DEBUG
|
||||
if (offset > 1)
|
||||
@ -406,147 +405,147 @@ static UINT8 m37710_internal_r(m37710i_cpu_struct *m37710i_cpu, int offset)
|
||||
switch (offset)
|
||||
{
|
||||
case 2: // p0
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT0);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT0);
|
||||
break;
|
||||
case 3: // p1
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT1);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT1);
|
||||
break;
|
||||
case 6: // p2
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT2);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT2);
|
||||
break;
|
||||
case 7: // p3
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT3);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT3);
|
||||
break;
|
||||
case 0xa: // p4
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT4);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT4);
|
||||
break;
|
||||
case 0xb: // p5
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT5);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT5);
|
||||
break;
|
||||
case 0xe: // p6
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT6);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT6);
|
||||
break;
|
||||
case 0xf: // p7
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT7);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT7);
|
||||
break;
|
||||
case 0x12: // p8
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_PORT8);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_PORT8);
|
||||
break;
|
||||
|
||||
case 0x20:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC0_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC0_L);
|
||||
break;
|
||||
case 0x21:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC0_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC0_H);
|
||||
break;
|
||||
case 0x22:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC1_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC1_L);
|
||||
break;
|
||||
case 0x23:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC1_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC1_H);
|
||||
break;
|
||||
case 0x24:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC2_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC2_L);
|
||||
break;
|
||||
case 0x25:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC2_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC2_H);
|
||||
break;
|
||||
case 0x26:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC3_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC3_L);
|
||||
break;
|
||||
case 0x27:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC3_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC3_H);
|
||||
break;
|
||||
case 0x28:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC4_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC4_L);
|
||||
break;
|
||||
case 0x29:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC4_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC4_H);
|
||||
break;
|
||||
case 0x2a:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC5_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC5_L);
|
||||
break;
|
||||
case 0x2b:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC5_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC5_H);
|
||||
break;
|
||||
case 0x2c:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC6_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC6_L);
|
||||
break;
|
||||
case 0x2d:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC6_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC6_H);
|
||||
break;
|
||||
case 0x2e:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC7_L);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC7_L);
|
||||
break;
|
||||
case 0x2f:
|
||||
return memory_read_byte_8le(m37710i_cpu->io, M37710_ADC7_H);
|
||||
return memory_read_byte_8le(cpustate->io, M37710_ADC7_H);
|
||||
break;
|
||||
case 0x35:
|
||||
return 0xff; // UART control
|
||||
break;
|
||||
|
||||
case 0x70: // A/D IRQ control
|
||||
return m37710i_cpu->m37710_regs[offset] | 8;
|
||||
return cpustate->m37710_regs[offset] | 8;
|
||||
break;
|
||||
}
|
||||
|
||||
return m37710i_cpu->m37710_regs[offset];
|
||||
return cpustate->m37710_regs[offset];
|
||||
}
|
||||
|
||||
static void m37710_internal_w(m37710i_cpu_struct *m37710i_cpu, int offset, UINT8 data)
|
||||
static void m37710_internal_w(m37710i_cpu_struct *cpustate, int offset, UINT8 data)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
case 2: // p0
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT0, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT0, data);
|
||||
return;
|
||||
break;
|
||||
case 3: // p1
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT1, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT1, data);
|
||||
return;
|
||||
break;
|
||||
case 6: // p2
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT2, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT2, data);
|
||||
return;
|
||||
break;
|
||||
case 7: // p3
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT3, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT3, data);
|
||||
return;
|
||||
break;
|
||||
case 0xa: // p4
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT4, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT4, data);
|
||||
return;
|
||||
break;
|
||||
case 0xb: // p5
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT5, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT5, data);
|
||||
return;
|
||||
break;
|
||||
case 0xe: // p6
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT6, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT6, data);
|
||||
return;
|
||||
break;
|
||||
case 0xf: // p7
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT7, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT7, data);
|
||||
return;
|
||||
break;
|
||||
case 0x12: // p8
|
||||
memory_write_byte_8le(m37710i_cpu->io, M37710_PORT8, data);
|
||||
memory_write_byte_8le(cpustate->io, M37710_PORT8, data);
|
||||
return;
|
||||
break;
|
||||
|
||||
case 0x40: // count start
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if ((data & (1<<i)) && !(m37710i_cpu->m37710_regs[offset] & (1<<i)))
|
||||
if ((data & (1<<i)) && !(cpustate->m37710_regs[offset] & (1<<i)))
|
||||
{
|
||||
m37710i_cpu->m37710_regs[offset] |= (1<<i);
|
||||
m37710_recalc_timer(m37710i_cpu, m37710i_cpu->device->machine, i);
|
||||
cpustate->m37710_regs[offset] |= (1<<i);
|
||||
m37710_recalc_timer(cpustate, cpustate->device->machine, i);
|
||||
}
|
||||
}
|
||||
|
||||
m37710i_cpu->m37710_regs[offset] = data;
|
||||
cpustate->m37710_regs[offset] = data;
|
||||
|
||||
return;
|
||||
break;
|
||||
@ -556,29 +555,29 @@ static void m37710_internal_w(m37710i_cpu_struct *m37710i_cpu, int offset, UINT8
|
||||
break;
|
||||
}
|
||||
|
||||
m37710i_cpu->m37710_regs[offset] = data;
|
||||
cpustate->m37710_regs[offset] = data;
|
||||
|
||||
#if M37710_DEBUG
|
||||
if (offset >= 0x1e && offset <= 0x40)
|
||||
logerror("m37710_internal_w %x to %02x: %s = %x\n", data, (int)offset, m37710_rnames[(int)offset], m37710i_cpu->m37710_regs[offset]);
|
||||
logerror("m37710_internal_w %x to %02x: %s = %x\n", data, (int)offset, m37710_rnames[(int)offset], cpustate->m37710_regs[offset]);
|
||||
#endif
|
||||
}
|
||||
|
||||
static READ16_HANDLER( m37710_internal_word_r )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = (m37710i_cpu_struct *)space->cpu->token;
|
||||
m37710i_cpu_struct *cpustate = (m37710i_cpu_struct *)space->cpu->token;
|
||||
|
||||
if (mem_mask == 0xffff)
|
||||
{
|
||||
return (m37710_internal_r(m37710i_cpu, offset*2) | m37710_internal_r(m37710i_cpu, (offset*2)+1)<<8);
|
||||
return (m37710_internal_r(cpustate, offset*2) | m37710_internal_r(cpustate, (offset*2)+1)<<8);
|
||||
}
|
||||
else if (mem_mask == 0xff00)
|
||||
{
|
||||
return m37710_internal_r(m37710i_cpu, (offset*2)+1)<<8;
|
||||
return m37710_internal_r(cpustate, (offset*2)+1)<<8;
|
||||
}
|
||||
else if (mem_mask == 0x00ff)
|
||||
{
|
||||
return m37710_internal_r(m37710i_cpu, (offset*2));
|
||||
return m37710_internal_r(cpustate, (offset*2));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -586,56 +585,56 @@ static READ16_HANDLER( m37710_internal_word_r )
|
||||
|
||||
static WRITE16_HANDLER( m37710_internal_word_w )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = (m37710i_cpu_struct *)space->cpu->token;
|
||||
m37710i_cpu_struct *cpustate = (m37710i_cpu_struct *)space->cpu->token;
|
||||
|
||||
if (mem_mask == 0xffff)
|
||||
{
|
||||
m37710_internal_w(m37710i_cpu, (offset*2), data & 0xff);
|
||||
m37710_internal_w(m37710i_cpu, (offset*2)+1, data>>8);
|
||||
m37710_internal_w(cpustate, (offset*2), data & 0xff);
|
||||
m37710_internal_w(cpustate, (offset*2)+1, data>>8);
|
||||
}
|
||||
else if (mem_mask == 0xff00)
|
||||
{
|
||||
m37710_internal_w(m37710i_cpu, (offset*2)+1, data>>8);
|
||||
m37710_internal_w(cpustate, (offset*2)+1, data>>8);
|
||||
}
|
||||
else if (mem_mask == 0x00ff)
|
||||
{
|
||||
m37710_internal_w(m37710i_cpu, (offset*2), data & 0xff);
|
||||
m37710_internal_w(cpustate, (offset*2), data & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
extern void (*const m37710i_opcodes_M0X0[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes42_M0X0[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes89_M0X0[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern uint m37710i_get_reg_M0X0(m37710i_cpu_struct *m37710i_cpu, int regnum);
|
||||
extern void m37710i_set_reg_M0X0(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val);
|
||||
extern void m37710i_set_line_M0X0(m37710i_cpu_struct *m37710i_cpu, int line, int state);
|
||||
extern int m37710i_execute_M0X0(m37710i_cpu_struct *m37710i_cpu, int cycles);
|
||||
extern void (*const m37710i_opcodes_M0X0[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes42_M0X0[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes89_M0X0[])(m37710i_cpu_struct *cpustate);
|
||||
extern uint m37710i_get_reg_M0X0(m37710i_cpu_struct *cpustate, int regnum);
|
||||
extern void m37710i_set_reg_M0X0(m37710i_cpu_struct *cpustate, int regnum, uint val);
|
||||
extern void m37710i_set_line_M0X0(m37710i_cpu_struct *cpustate, int line, int state);
|
||||
extern int m37710i_execute_M0X0(m37710i_cpu_struct *cpustate, int cycles);
|
||||
|
||||
extern void (*const m37710i_opcodes_M0X1[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes42_M0X1[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes89_M0X1[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern uint m37710i_get_reg_M0X1(m37710i_cpu_struct *m37710i_cpu, int regnum);
|
||||
extern void m37710i_set_reg_M0X1(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val);
|
||||
extern void m37710i_set_line_M0X1(m37710i_cpu_struct *m37710i_cpu, int line, int state);
|
||||
extern int m37710i_execute_M0X1(m37710i_cpu_struct *m37710i_cpu, int cycles);
|
||||
extern void (*const m37710i_opcodes_M0X1[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes42_M0X1[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes89_M0X1[])(m37710i_cpu_struct *cpustate);
|
||||
extern uint m37710i_get_reg_M0X1(m37710i_cpu_struct *cpustate, int regnum);
|
||||
extern void m37710i_set_reg_M0X1(m37710i_cpu_struct *cpustate, int regnum, uint val);
|
||||
extern void m37710i_set_line_M0X1(m37710i_cpu_struct *cpustate, int line, int state);
|
||||
extern int m37710i_execute_M0X1(m37710i_cpu_struct *cpustate, int cycles);
|
||||
|
||||
extern void (*const m37710i_opcodes_M1X0[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes42_M1X0[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes89_M1X0[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern uint m37710i_get_reg_M1X0(m37710i_cpu_struct *m37710i_cpu, int regnum);
|
||||
extern void m37710i_set_reg_M1X0(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val);
|
||||
extern void m37710i_set_line_M1X0(m37710i_cpu_struct *m37710i_cpu, int line, int state);
|
||||
extern int m37710i_execute_M1X0(m37710i_cpu_struct *m37710i_cpu, int cycles);
|
||||
extern void (*const m37710i_opcodes_M1X0[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes42_M1X0[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes89_M1X0[])(m37710i_cpu_struct *cpustate);
|
||||
extern uint m37710i_get_reg_M1X0(m37710i_cpu_struct *cpustate, int regnum);
|
||||
extern void m37710i_set_reg_M1X0(m37710i_cpu_struct *cpustate, int regnum, uint val);
|
||||
extern void m37710i_set_line_M1X0(m37710i_cpu_struct *cpustate, int line, int state);
|
||||
extern int m37710i_execute_M1X0(m37710i_cpu_struct *cpustate, int cycles);
|
||||
|
||||
extern void (*const m37710i_opcodes_M1X1[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes42_M1X1[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const m37710i_opcodes89_M1X1[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern uint m37710i_get_reg_M1X1(m37710i_cpu_struct *m37710i_cpu, int regnum);
|
||||
extern void m37710i_set_reg_M1X1(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val);
|
||||
extern void m37710i_set_line_M1X1(m37710i_cpu_struct *m37710i_cpu, int line, int state);
|
||||
extern int m37710i_execute_M1X1(m37710i_cpu_struct *m37710i_cpu, int cycles);
|
||||
extern void (*const m37710i_opcodes_M1X1[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes42_M1X1[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const m37710i_opcodes89_M1X1[])(m37710i_cpu_struct *cpustate);
|
||||
extern uint m37710i_get_reg_M1X1(m37710i_cpu_struct *cpustate, int regnum);
|
||||
extern void m37710i_set_reg_M1X1(m37710i_cpu_struct *cpustate, int regnum, uint val);
|
||||
extern void m37710i_set_line_M1X1(m37710i_cpu_struct *cpustate, int line, int state);
|
||||
extern int m37710i_execute_M1X1(m37710i_cpu_struct *cpustate, int cycles);
|
||||
|
||||
void (*const *const m37710i_opcodes[4])(m37710i_cpu_struct *m37710i_cpu) =
|
||||
void (*const *const m37710i_opcodes[4])(m37710i_cpu_struct *cpustate) =
|
||||
{
|
||||
m37710i_opcodes_M0X0,
|
||||
m37710i_opcodes_M0X1,
|
||||
@ -643,7 +642,7 @@ void (*const *const m37710i_opcodes[4])(m37710i_cpu_struct *m37710i_cpu) =
|
||||
m37710i_opcodes_M1X1,
|
||||
};
|
||||
|
||||
void (*const *const m37710i_opcodes2[4])(m37710i_cpu_struct *m37710i_cpu) =
|
||||
void (*const *const m37710i_opcodes2[4])(m37710i_cpu_struct *cpustate) =
|
||||
{
|
||||
m37710i_opcodes42_M0X0,
|
||||
m37710i_opcodes42_M0X1,
|
||||
@ -651,7 +650,7 @@ void (*const *const m37710i_opcodes2[4])(m37710i_cpu_struct *m37710i_cpu) =
|
||||
m37710i_opcodes42_M1X1,
|
||||
};
|
||||
|
||||
void (*const *const m37710i_opcodes3[4])(m37710i_cpu_struct *m37710i_cpu) =
|
||||
void (*const *const m37710i_opcodes3[4])(m37710i_cpu_struct *cpustate) =
|
||||
{
|
||||
m37710i_opcodes89_M0X0,
|
||||
m37710i_opcodes89_M0X1,
|
||||
@ -659,7 +658,7 @@ void (*const *const m37710i_opcodes3[4])(m37710i_cpu_struct *m37710i_cpu) =
|
||||
m37710i_opcodes89_M1X1,
|
||||
};
|
||||
|
||||
uint (*const m37710i_get_reg[4])(m37710i_cpu_struct *m37710i_cpu, int regnum) =
|
||||
uint (*const m37710i_get_reg[4])(m37710i_cpu_struct *cpustate, int regnum) =
|
||||
{
|
||||
m37710i_get_reg_M0X0,
|
||||
m37710i_get_reg_M0X1,
|
||||
@ -667,7 +666,7 @@ uint (*const m37710i_get_reg[4])(m37710i_cpu_struct *m37710i_cpu, int regnum) =
|
||||
m37710i_get_reg_M1X1,
|
||||
};
|
||||
|
||||
void (*const m37710i_set_reg[4])(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val) =
|
||||
void (*const m37710i_set_reg[4])(m37710i_cpu_struct *cpustate, int regnum, uint val) =
|
||||
{
|
||||
m37710i_set_reg_M0X0,
|
||||
m37710i_set_reg_M0X1,
|
||||
@ -675,7 +674,7 @@ void (*const m37710i_set_reg[4])(m37710i_cpu_struct *m37710i_cpu, int regnum, ui
|
||||
m37710i_set_reg_M1X1,
|
||||
};
|
||||
|
||||
void (*const m37710i_set_line[4])(m37710i_cpu_struct *m37710i_cpu, int line, int state) =
|
||||
void (*const m37710i_set_line[4])(m37710i_cpu_struct *cpustate, int line, int state) =
|
||||
{
|
||||
m37710i_set_line_M0X0,
|
||||
m37710i_set_line_M0X1,
|
||||
@ -683,7 +682,7 @@ void (*const m37710i_set_line[4])(m37710i_cpu_struct *m37710i_cpu, int line, int
|
||||
m37710i_set_line_M1X1,
|
||||
};
|
||||
|
||||
int (*const m37710i_execute[4])(m37710i_cpu_struct *m37710i_cpu, int cycles) =
|
||||
int (*const m37710i_execute[4])(m37710i_cpu_struct *cpustate, int cycles) =
|
||||
{
|
||||
m37710i_execute_M0X0,
|
||||
m37710i_execute_M0X1,
|
||||
@ -693,19 +692,19 @@ int (*const m37710i_execute[4])(m37710i_cpu_struct *m37710i_cpu, int cycles) =
|
||||
|
||||
/* internal functions */
|
||||
|
||||
INLINE void m37710i_push_8(m37710i_cpu_struct *m37710i_cpu, uint value)
|
||||
INLINE void m37710i_push_8(m37710i_cpu_struct *cpustate, uint value)
|
||||
{
|
||||
m37710_write_8(REG_S, value);
|
||||
REG_S = MAKE_UINT_16(REG_S-1);
|
||||
}
|
||||
|
||||
INLINE void m37710i_push_16(m37710i_cpu_struct *m37710i_cpu, uint value)
|
||||
INLINE void m37710i_push_16(m37710i_cpu_struct *cpustate, uint value)
|
||||
{
|
||||
m37710i_push_8(m37710i_cpu, value>>8);
|
||||
m37710i_push_8(m37710i_cpu, value&0xff);
|
||||
m37710i_push_8(cpustate, value>>8);
|
||||
m37710i_push_8(cpustate, value&0xff);
|
||||
}
|
||||
|
||||
INLINE uint m37710i_get_reg_p(m37710i_cpu_struct *m37710i_cpu)
|
||||
INLINE uint m37710i_get_reg_p(m37710i_cpu_struct *cpustate)
|
||||
{
|
||||
return (FLAG_N&0x80) |
|
||||
((FLAG_V>>1)&0x40) |
|
||||
@ -717,7 +716,7 @@ INLINE uint m37710i_get_reg_p(m37710i_cpu_struct *m37710i_cpu)
|
||||
((FLAG_C>>8)&1);
|
||||
}
|
||||
|
||||
void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu)
|
||||
void m37710i_update_irqs(m37710i_cpu_struct *cpustate)
|
||||
{
|
||||
int curirq, pending = LINE_IRQ;
|
||||
int wantedIRQ, curpri;
|
||||
@ -737,16 +736,16 @@ void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu)
|
||||
// this IRQ is set
|
||||
if (m37710_irq_levels[curirq])
|
||||
{
|
||||
// logerror("line %d set, level %x curpri %x IPL %x\n", curirq, m37710i_cpu->m37710_regs[m37710_irq_levels[curirq]] & 7, curpri, m37710i_cpu->ipl);
|
||||
// logerror("line %d set, level %x curpri %x IPL %x\n", curirq, cpustate->m37710_regs[m37710_irq_levels[curirq]] & 7, curpri, cpustate->ipl);
|
||||
// it's maskable, check if the level works
|
||||
if ((m37710i_cpu->m37710_regs[m37710_irq_levels[curirq]] & 7) > curpri)
|
||||
if ((cpustate->m37710_regs[m37710_irq_levels[curirq]] & 7) > curpri)
|
||||
{
|
||||
// also make sure it's acceptable for the current CPU level
|
||||
if ((m37710i_cpu->m37710_regs[m37710_irq_levels[curirq]] & 7) > m37710i_cpu->ipl)
|
||||
if ((cpustate->m37710_regs[m37710_irq_levels[curirq]] & 7) > cpustate->ipl)
|
||||
{
|
||||
// mark us as the best candidate
|
||||
wantedIRQ = curirq;
|
||||
curpri = m37710i_cpu->m37710_regs[m37710_irq_levels[curirq]] & 7;
|
||||
curpri = cpustate->m37710_regs[m37710_irq_levels[curirq]] & 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -762,7 +761,7 @@ void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu)
|
||||
|
||||
if (wantedIRQ != -1)
|
||||
{
|
||||
if (INT_ACK) INT_ACK(m37710i_cpu->device, wantedIRQ);
|
||||
if (INT_ACK) INT_ACK(cpustate->device, wantedIRQ);
|
||||
|
||||
// make sure we're running to service the interrupt
|
||||
CPU_STOPPED &= ~STOP_LEVEL_WAI;
|
||||
@ -770,27 +769,27 @@ void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu)
|
||||
// indicate we're servicing it now
|
||||
if (m37710_irq_levels[wantedIRQ])
|
||||
{
|
||||
m37710i_cpu->m37710_regs[m37710_irq_levels[wantedIRQ]] &= ~8;
|
||||
cpustate->m37710_regs[m37710_irq_levels[wantedIRQ]] &= ~8;
|
||||
}
|
||||
|
||||
// auto-clear if it's an internal line
|
||||
if (wantedIRQ <= 12)
|
||||
{
|
||||
m37710_set_irq_line(m37710i_cpu, wantedIRQ, CLEAR_LINE);
|
||||
m37710_set_irq_line(cpustate, wantedIRQ, CLEAR_LINE);
|
||||
}
|
||||
|
||||
// let's do it...
|
||||
// push PB, then PC, then status
|
||||
CLK(8);
|
||||
// mame_printf_debug("taking IRQ %d: PC = %06x, SP = %04x, IPL %d\n", wantedIRQ, REG_PB | REG_PC, REG_S, m37710i_cpu->ipl);
|
||||
m37710i_push_8(m37710i_cpu, REG_PB>>16);
|
||||
m37710i_push_16(m37710i_cpu, REG_PC);
|
||||
m37710i_push_8(m37710i_cpu, m37710i_cpu->ipl);
|
||||
m37710i_push_8(m37710i_cpu, m37710i_get_reg_p(m37710i_cpu));
|
||||
// mame_printf_debug("taking IRQ %d: PC = %06x, SP = %04x, IPL %d\n", wantedIRQ, REG_PB | REG_PC, REG_S, cpustate->ipl);
|
||||
m37710i_push_8(cpustate, REG_PB>>16);
|
||||
m37710i_push_16(cpustate, REG_PC);
|
||||
m37710i_push_8(cpustate, cpustate->ipl);
|
||||
m37710i_push_8(cpustate, m37710i_get_reg_p(cpustate));
|
||||
|
||||
// set I to 1, set IPL to the interrupt we're taking
|
||||
FLAG_I = IFLAG_SET;
|
||||
m37710i_cpu->ipl = curpri;
|
||||
cpustate->ipl = curpri;
|
||||
// then PB=0, PC=(vector)
|
||||
REG_PB = 0;
|
||||
REG_PC = m37710_read_8(m37710_irq_vectors[wantedIRQ]) |
|
||||
@ -804,7 +803,7 @@ void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu)
|
||||
|
||||
static CPU_RESET( m37710 )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = device->token;
|
||||
m37710i_cpu_struct *cpustate = device->token;
|
||||
|
||||
/* Start the CPU */
|
||||
CPU_STOPPED = 0;
|
||||
@ -833,7 +832,7 @@ static CPU_RESET( m37710 )
|
||||
IRQ_DELAY = 0;
|
||||
|
||||
/* Set the function tables to emulation mode */
|
||||
m37710i_set_execution_mode(m37710i_cpu, EXECUTION_MODE_M0X0);
|
||||
m37710i_set_execution_mode(cpustate, EXECUTION_MODE_M0X0);
|
||||
|
||||
FLAG_Z = ZFLAG_CLEAR;
|
||||
REG_S = 0x1ff;
|
||||
@ -871,34 +870,34 @@ static CPU_SET_CONTEXT( m37710 )
|
||||
}
|
||||
|
||||
/* Set the Program Counter */
|
||||
static void m37710_set_pc(m37710i_cpu_struct *m37710i_cpu, unsigned val)
|
||||
static void m37710_set_pc(m37710i_cpu_struct *cpustate, unsigned val)
|
||||
{
|
||||
REG_PC = MAKE_UINT_16(val);
|
||||
m37710_jumping(REG_PB | REG_PC);
|
||||
}
|
||||
|
||||
/* Get the current Stack Pointer */
|
||||
static unsigned m37710_get_sp(m37710i_cpu_struct *m37710i_cpu)
|
||||
static unsigned m37710_get_sp(m37710i_cpu_struct *cpustate)
|
||||
{
|
||||
return REG_S;
|
||||
}
|
||||
|
||||
/* Set the Stack Pointer */
|
||||
static void m37710_set_sp(m37710i_cpu_struct *m37710i_cpu, unsigned val)
|
||||
static void m37710_set_sp(m37710i_cpu_struct *cpustate, unsigned val)
|
||||
{
|
||||
REG_S = MAKE_UINT_16(val);
|
||||
}
|
||||
|
||||
/* Get a register */
|
||||
static unsigned m37710_get_reg(m37710i_cpu_struct *m37710i_cpu, int regnum)
|
||||
static unsigned m37710_get_reg(m37710i_cpu_struct *cpustate, int regnum)
|
||||
{
|
||||
return FTABLE_GET_REG(m37710i_cpu, regnum);
|
||||
return FTABLE_GET_REG(cpustate, regnum);
|
||||
}
|
||||
|
||||
/* Set a register */
|
||||
static void m37710_set_reg(m37710i_cpu_struct *m37710i_cpu, int regnum, unsigned value)
|
||||
static void m37710_set_reg(m37710i_cpu_struct *cpustate, int regnum, unsigned value)
|
||||
{
|
||||
FTABLE_SET_REG(m37710i_cpu, regnum, value);
|
||||
FTABLE_SET_REG(cpustate, regnum, value);
|
||||
}
|
||||
|
||||
/* Load a CPU state */
|
||||
@ -912,9 +911,9 @@ void m37710_state_save(void *file)
|
||||
}
|
||||
|
||||
/* Set an interrupt line */
|
||||
static void m37710_set_irq_line(m37710i_cpu_struct *m37710i_cpu, int line, int state)
|
||||
static void m37710_set_irq_line(m37710i_cpu_struct *cpustate, int line, int state)
|
||||
{
|
||||
FTABLE_SET_LINE(m37710i_cpu, line, state);
|
||||
FTABLE_SET_LINE(cpustate, line, state);
|
||||
}
|
||||
|
||||
/* Set the callback that is called when servicing an interrupt */
|
||||
@ -930,17 +929,17 @@ void m37710_set_irq_callback(cpu_irq_callback callback)
|
||||
|
||||
static CPU_DISASSEMBLE( m37710 )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = device->token;
|
||||
m37710i_cpu_struct *cpustate = device->token;
|
||||
|
||||
return m7700_disassemble(buffer, (pc&0xffff), pc>>16, oprom, FLAG_M, FLAG_X);
|
||||
}
|
||||
|
||||
static STATE_POSTLOAD( m37710_restore_state )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = (m37710i_cpu_struct *)param;
|
||||
m37710i_cpu_struct *cpustate = (m37710i_cpu_struct *)param;
|
||||
|
||||
// restore proper function pointers
|
||||
m37710i_set_execution_mode(m37710i_cpu, (FLAG_M>>4) | (FLAG_X>>4));
|
||||
m37710i_set_execution_mode(cpustate, (FLAG_M>>4) | (FLAG_X>>4));
|
||||
|
||||
// make sure the memory system can keep up
|
||||
m37710i_jumping(REG_PB | REG_PC);
|
||||
@ -948,74 +947,74 @@ static STATE_POSTLOAD( m37710_restore_state )
|
||||
|
||||
static CPU_INIT( m37710 )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = device->token;
|
||||
m37710i_cpu_struct *cpustate = device->token;
|
||||
int i;
|
||||
|
||||
memset(m37710i_cpu, 0, sizeof(m37710i_cpu));
|
||||
memset(cpustate, 0, sizeof(cpustate));
|
||||
|
||||
INT_ACK = irqcallback;
|
||||
m37710i_cpu->device = device;
|
||||
m37710i_cpu->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
|
||||
m37710i_cpu->io = memory_find_address_space(device, ADDRESS_SPACE_IO);
|
||||
cpustate->device = device;
|
||||
cpustate->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
|
||||
cpustate->io = memory_find_address_space(device, ADDRESS_SPACE_IO);
|
||||
|
||||
m37710i_cpu->ICount = 0;
|
||||
cpustate->ICount = 0;
|
||||
|
||||
m37710i_cpu->source = 0;
|
||||
m37710i_cpu->destination = 0;
|
||||
cpustate->source = 0;
|
||||
cpustate->destination = 0;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
m37710i_cpu->timers[0] = timer_alloc(device->machine, m37710_timer_cb, m37710i_cpu);
|
||||
cpustate->timers[i] = timer_alloc(device->machine, m37710_timer_cb, cpustate);
|
||||
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->a);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->b);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->ba);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->bb);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->x);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->y);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->s);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->pc);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->ppc);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->pb);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->db);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->d);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_e);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_m);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_x);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_n);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_v);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_d);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_i);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_z);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->flag_c);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->line_irq);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->ipl);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->ir);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->im);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->im2);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->im3);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->im4);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->irq_delay);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->irq_level);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->stopped);
|
||||
state_save_register_item_array("M377xx", device->tag, 0, m37710i_cpu->m37710_regs);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[0].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[0].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[1].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[1].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[2].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[2].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[3].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[3].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[4].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[4].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[5].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[5].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[6].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[6].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[7].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, m37710i_cpu->reload[7].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->a);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->b);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->ba);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->bb);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->x);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->y);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->s);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->pc);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->ppc);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->pb);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->db);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->d);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_e);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_m);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_x);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_n);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_v);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_d);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_i);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_z);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->flag_c);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->line_irq);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->ipl);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->ir);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->im);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->im2);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->im3);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->im4);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->irq_delay);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->irq_level);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->stopped);
|
||||
state_save_register_item_array("M377xx", device->tag, 0, cpustate->m37710_regs);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[0].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[0].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[1].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[1].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[2].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[2].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[3].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[3].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[4].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[4].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[5].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[5].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[6].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[6].attoseconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[7].seconds);
|
||||
state_save_register_item("M377xx", device->tag, 0, cpustate->reload[7].attoseconds);
|
||||
|
||||
state_save_register_postload(device->machine, m37710_restore_state, m37710i_cpu);
|
||||
state_save_register_postload(device->machine, m37710_restore_state, cpustate);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@ -1024,40 +1023,40 @@ static CPU_INIT( m37710 )
|
||||
|
||||
static CPU_SET_INFO( m37710 )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = device->token;
|
||||
m37710i_cpu_struct *cpustate = device->token;
|
||||
|
||||
switch (state)
|
||||
{
|
||||
/* --- the following bits of info are set as 64-bit signed integers --- */
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_ADC: m37710_set_irq_line(m37710i_cpu, M37710_LINE_ADC, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_IRQ0: m37710_set_irq_line(m37710i_cpu, M37710_LINE_IRQ0, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_IRQ1: m37710_set_irq_line(m37710i_cpu, M37710_LINE_IRQ1, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_IRQ2: m37710_set_irq_line(m37710i_cpu, M37710_LINE_IRQ2, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_ADC: m37710_set_irq_line(cpustate, M37710_LINE_ADC, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_IRQ0: m37710_set_irq_line(cpustate, M37710_LINE_IRQ0, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_IRQ1: m37710_set_irq_line(cpustate, M37710_LINE_IRQ1, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_IRQ2: m37710_set_irq_line(cpustate, M37710_LINE_IRQ2, info->i); break;
|
||||
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA0TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA1TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA2TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA3TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA4TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERB0TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERB1TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERB2TICK: m37710_external_tick(m37710i_cpu, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA0TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA1TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA2TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA3TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERA4TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERB0TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERB1TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
case CPUINFO_INT_INPUT_STATE + M37710_LINE_TIMERB2TICK: m37710_external_tick(cpustate, state - CPUINFO_INT_INPUT_STATE - M37710_LINE_TIMERA0TICK, info->i); break;
|
||||
|
||||
case CPUINFO_INT_PC: REG_PB = info->i & 0xff0000; m37710_set_pc(m37710i_cpu, info->i & 0xffff); break;
|
||||
case CPUINFO_INT_SP: m37710_set_sp(m37710i_cpu, info->i); break;
|
||||
case CPUINFO_INT_PC: REG_PB = info->i & 0xff0000; m37710_set_pc(cpustate, info->i & 0xffff); break;
|
||||
case CPUINFO_INT_SP: m37710_set_sp(cpustate, info->i); break;
|
||||
|
||||
case CPUINFO_INT_REGISTER + M37710_PC: m37710_set_reg(m37710i_cpu, M37710_PC, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_S: m37710_set_reg(m37710i_cpu, M37710_S, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_P: m37710_set_reg(m37710i_cpu, M37710_P, info->i&0xff); m37710i_cpu->ipl = (info->i>>8)&0xff; break;
|
||||
case CPUINFO_INT_REGISTER + M37710_A: m37710_set_reg(m37710i_cpu, M37710_A, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_X: m37710_set_reg(m37710i_cpu, M37710_X, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_Y: m37710_set_reg(m37710i_cpu, M37710_Y, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_PB: m37710_set_reg(m37710i_cpu, M37710_PB, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_DB: m37710_set_reg(m37710i_cpu, M37710_DB, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_D: m37710_set_reg(m37710i_cpu, M37710_D, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_E: m37710_set_reg(m37710i_cpu, M37710_E, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_NMI_STATE: m37710_set_reg(m37710i_cpu, M37710_NMI_STATE, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_IRQ_STATE: m37710_set_reg(m37710i_cpu, M37710_IRQ_STATE, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_PC: m37710_set_reg(cpustate, M37710_PC, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_S: m37710_set_reg(cpustate, M37710_S, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_P: m37710_set_reg(cpustate, M37710_P, info->i&0xff); cpustate->ipl = (info->i>>8)&0xff; break;
|
||||
case CPUINFO_INT_REGISTER + M37710_A: m37710_set_reg(cpustate, M37710_A, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_X: m37710_set_reg(cpustate, M37710_X, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_Y: m37710_set_reg(cpustate, M37710_Y, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_PB: m37710_set_reg(cpustate, M37710_PB, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_DB: m37710_set_reg(cpustate, M37710_DB, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_D: m37710_set_reg(cpustate, M37710_D, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_E: m37710_set_reg(cpustate, M37710_E, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_NMI_STATE: m37710_set_reg(cpustate, M37710_NMI_STATE, info->i); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_IRQ_STATE: m37710_set_reg(cpustate, M37710_IRQ_STATE, info->i); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1073,7 +1072,7 @@ ADDRESS_MAP_END
|
||||
|
||||
CPU_GET_INFO( m37710 )
|
||||
{
|
||||
m37710i_cpu_struct *m37710i_cpu = (device != NULL) ? device->token : NULL;
|
||||
m37710i_cpu_struct *cpustate = (device != NULL) ? device->token : NULL;
|
||||
|
||||
switch (state)
|
||||
{
|
||||
@ -1106,21 +1105,21 @@ CPU_GET_INFO( m37710 )
|
||||
|
||||
case CPUINFO_INT_PREVIOUSPC: info->i = REG_PPC; break;
|
||||
case CPUINFO_INT_PC: info->i = (REG_PB | REG_PC); break;
|
||||
case CPUINFO_INT_SP: info->i = m37710_get_sp(m37710i_cpu); break;
|
||||
case CPUINFO_INT_SP: info->i = m37710_get_sp(cpustate); break;
|
||||
|
||||
case CPUINFO_INT_REGISTER + M37710_PC: info->i = m37710_get_reg(m37710i_cpu, M37710_PC); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_S: info->i = m37710_get_reg(m37710i_cpu, M37710_S); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_P: info->i = m37710_get_reg(m37710i_cpu, M37710_P) | (m37710i_cpu->ipl<<8); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_A: info->i = m37710_get_reg(m37710i_cpu, M37710_A); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_B: info->i = m37710_get_reg(m37710i_cpu, M37710_B); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_X: info->i = m37710_get_reg(m37710i_cpu, M37710_X); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_Y: info->i = m37710_get_reg(m37710i_cpu, M37710_Y); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_PB: info->i = m37710_get_reg(m37710i_cpu, M37710_PB); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_DB: info->i = m37710_get_reg(m37710i_cpu, M37710_DB); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_D: info->i = m37710_get_reg(m37710i_cpu, M37710_D); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_E: info->i = m37710_get_reg(m37710i_cpu, M37710_E); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_NMI_STATE: info->i = m37710_get_reg(m37710i_cpu, M37710_NMI_STATE); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_IRQ_STATE: info->i = m37710_get_reg(m37710i_cpu, M37710_IRQ_STATE); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_PC: info->i = m37710_get_reg(cpustate, M37710_PC); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_S: info->i = m37710_get_reg(cpustate, M37710_S); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_P: info->i = m37710_get_reg(cpustate, M37710_P) | (cpustate->ipl<<8); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_A: info->i = m37710_get_reg(cpustate, M37710_A); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_B: info->i = m37710_get_reg(cpustate, M37710_B); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_X: info->i = m37710_get_reg(cpustate, M37710_X); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_Y: info->i = m37710_get_reg(cpustate, M37710_Y); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_PB: info->i = m37710_get_reg(cpustate, M37710_PB); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_DB: info->i = m37710_get_reg(cpustate, M37710_DB); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_D: info->i = m37710_get_reg(cpustate, M37710_D); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_E: info->i = m37710_get_reg(cpustate, M37710_E); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_NMI_STATE: info->i = m37710_get_reg(cpustate, M37710_NMI_STATE); break;
|
||||
case CPUINFO_INT_REGISTER + M37710_IRQ_STATE: info->i = m37710_get_reg(cpustate, M37710_IRQ_STATE); break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(m37710); break;
|
||||
@ -1132,7 +1131,7 @@ CPU_GET_INFO( m37710 )
|
||||
case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(m37710); break;
|
||||
case CPUINFO_PTR_BURN: info->burn = NULL; break;
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(m37710); break;
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m37710i_cpu->ICount; break;
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &cpustate->ICount; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = ADDRESS_MAP_NAME(m37710_internal_map); break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = NULL; break;
|
||||
@ -1147,36 +1146,36 @@ CPU_GET_INFO( m37710 )
|
||||
|
||||
case CPUINFO_STR_FLAGS:
|
||||
sprintf(info->s, "%c%c%c%c%c%c%c%c",
|
||||
m37710i_cpu->flag_n & NFLAG_SET ? 'N':'.',
|
||||
m37710i_cpu->flag_v & VFLAG_SET ? 'V':'.',
|
||||
m37710i_cpu->flag_m & MFLAG_SET ? 'M':'.',
|
||||
m37710i_cpu->flag_x & XFLAG_SET ? 'X':'.',
|
||||
m37710i_cpu->flag_d & DFLAG_SET ? 'D':'.',
|
||||
m37710i_cpu->flag_i & IFLAG_SET ? 'I':'.',
|
||||
m37710i_cpu->flag_z == 0 ? 'Z':'.',
|
||||
m37710i_cpu->flag_c & CFLAG_SET ? 'C':'.');
|
||||
cpustate->flag_n & NFLAG_SET ? 'N':'.',
|
||||
cpustate->flag_v & VFLAG_SET ? 'V':'.',
|
||||
cpustate->flag_m & MFLAG_SET ? 'M':'.',
|
||||
cpustate->flag_x & XFLAG_SET ? 'X':'.',
|
||||
cpustate->flag_d & DFLAG_SET ? 'D':'.',
|
||||
cpustate->flag_i & IFLAG_SET ? 'I':'.',
|
||||
cpustate->flag_z == 0 ? 'Z':'.',
|
||||
cpustate->flag_c & CFLAG_SET ? 'C':'.');
|
||||
break;
|
||||
|
||||
case CPUINFO_STR_REGISTER + M37710_PC: sprintf(info->s, "PC:%04X", m37710i_cpu->pc); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_PB: sprintf(info->s, "PB:%02X", m37710i_cpu->pb>>16); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_DB: sprintf(info->s, "DB:%02X", m37710i_cpu->db>>16); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_D: sprintf(info->s, "D:%04X", m37710i_cpu->d); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_S: sprintf(info->s, "S:%04X", m37710i_cpu->s); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_PC: sprintf(info->s, "PC:%04X", cpustate->pc); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_PB: sprintf(info->s, "PB:%02X", cpustate->pb>>16); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_DB: sprintf(info->s, "DB:%02X", cpustate->db>>16); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_D: sprintf(info->s, "D:%04X", cpustate->d); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_S: sprintf(info->s, "S:%04X", cpustate->s); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_P: sprintf(info->s, "P:%04X",
|
||||
(m37710i_cpu->flag_n&0x80) |
|
||||
((m37710i_cpu->flag_v>>1)&0x40) |
|
||||
m37710i_cpu->flag_m |
|
||||
m37710i_cpu->flag_x |
|
||||
m37710i_cpu->flag_d |
|
||||
m37710i_cpu->flag_i |
|
||||
((!m37710i_cpu->flag_z)<<1) |
|
||||
((m37710i_cpu->flag_c>>8)&1) | (m37710i_cpu->ipl<<8)); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_E: sprintf(info->s, "E:%d", m37710i_cpu->flag_e); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_A: sprintf(info->s, "A:%04X", m37710i_cpu->a | m37710i_cpu->b); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_B: sprintf(info->s, "B:%04X", m37710i_cpu->ba | m37710i_cpu->bb); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_X: sprintf(info->s, "X:%04X", m37710i_cpu->x); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_Y: sprintf(info->s, "Y:%04X", m37710i_cpu->y); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_IRQ_STATE: sprintf(info->s, "IRQ:%X", m37710i_cpu->line_irq); break;
|
||||
(cpustate->flag_n&0x80) |
|
||||
((cpustate->flag_v>>1)&0x40) |
|
||||
cpustate->flag_m |
|
||||
cpustate->flag_x |
|
||||
cpustate->flag_d |
|
||||
cpustate->flag_i |
|
||||
((!cpustate->flag_z)<<1) |
|
||||
((cpustate->flag_c>>8)&1) | (cpustate->ipl<<8)); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_E: sprintf(info->s, "E:%d", cpustate->flag_e); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_A: sprintf(info->s, "A:%04X", cpustate->a | cpustate->b); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_B: sprintf(info->s, "B:%04X", cpustate->ba | cpustate->bb); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_X: sprintf(info->s, "X:%04X", cpustate->x); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_Y: sprintf(info->s, "Y:%04X", cpustate->y); break;
|
||||
case CPUINFO_STR_REGISTER + M37710_IRQ_STATE: sprintf(info->s, "IRQ:%X", cpustate->line_irq); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -100,12 +100,12 @@ void m37710_state_load(void *file);
|
||||
|
||||
#undef M37710_CALL_DEBUGGER
|
||||
|
||||
#define M37710_CALL_DEBUGGER(x) debugger_instruction_hook(m37710i_cpu->device, x)
|
||||
#define m37710_read_8(addr) memory_read_byte_16le(m37710i_cpu->program, addr)
|
||||
#define m37710_write_8(addr,data) memory_write_byte_16le(m37710i_cpu->program, addr,data)
|
||||
#define m37710_read_8_immediate(A) memory_read_byte_16le(m37710i_cpu->program, A)
|
||||
#define m37710_read_16(addr) memory_read_word_16le(m37710i_cpu->program, addr)
|
||||
#define m37710_write_16(addr,data) memory_write_word_16le(m37710i_cpu->program, addr,data)
|
||||
#define M37710_CALL_DEBUGGER(x) debugger_instruction_hook(cpustate->device, x)
|
||||
#define m37710_read_8(addr) memory_read_byte_16le(cpustate->program, addr)
|
||||
#define m37710_write_8(addr,data) memory_write_byte_16le(cpustate->program, addr,data)
|
||||
#define m37710_read_8_immediate(A) memory_read_byte_16le(cpustate->program, A)
|
||||
#define m37710_read_16(addr) memory_read_word_16le(cpustate->program, addr)
|
||||
#define m37710_write_16(addr,data) memory_write_word_16le(cpustate->program, addr,data)
|
||||
#define m37710_jumping(A)
|
||||
#define m37710_branching(A)
|
||||
|
||||
|
@ -104,13 +104,13 @@ struct _m37710i_cpu_struct
|
||||
const address_space *program;
|
||||
const address_space *io;
|
||||
uint stopped; /* Sets how the CPU is stopped */
|
||||
void (*const *opcodes)(m37710i_cpu_struct *m37710i_cpu); /* opcodes with no prefix */
|
||||
void (*const *opcodes42)(m37710i_cpu_struct *m37710i_cpu); /* opcodes with 0x42 prefix */
|
||||
void (*const *opcodes89)(m37710i_cpu_struct *m37710i_cpu); /* opcodes with 0x89 prefix */
|
||||
uint (*get_reg)(m37710i_cpu_struct *m37710i_cpu, int regnum);
|
||||
void (*set_reg)(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val);
|
||||
void (*set_line)(m37710i_cpu_struct *m37710i_cpu, int line, int state);
|
||||
int (*execute)(m37710i_cpu_struct *m37710i_cpu, int cycles);
|
||||
void (*const *opcodes)(m37710i_cpu_struct *cpustate); /* opcodes with no prefix */
|
||||
void (*const *opcodes42)(m37710i_cpu_struct *cpustate); /* opcodes with 0x42 prefix */
|
||||
void (*const *opcodes89)(m37710i_cpu_struct *cpustate); /* opcodes with 0x89 prefix */
|
||||
uint (*get_reg)(m37710i_cpu_struct *cpustate, int regnum);
|
||||
void (*set_reg)(m37710i_cpu_struct *cpustate, int regnum, uint val);
|
||||
void (*set_line)(m37710i_cpu_struct *cpustate, int line, int state);
|
||||
int (*execute)(m37710i_cpu_struct *cpustate, int cycles);
|
||||
|
||||
// on-board peripheral stuff
|
||||
UINT8 m37710_regs[128];
|
||||
@ -122,51 +122,51 @@ struct _m37710i_cpu_struct
|
||||
extern uint m37710i_adc_tbl[];
|
||||
extern uint m37710i_sbc_tbl[];
|
||||
|
||||
extern void (*const *const m37710i_opcodes[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const *const m37710i_opcodes2[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern void (*const *const m37710i_opcodes3[])(m37710i_cpu_struct *m37710i_cpu);
|
||||
extern uint (*const m37710i_get_reg[])(m37710i_cpu_struct *m37710i_cpu,int regnum);
|
||||
extern void (*const m37710i_set_reg[])(m37710i_cpu_struct *m37710i_cpu,int regnum, uint val);
|
||||
extern void (*const m37710i_set_line[])(m37710i_cpu_struct *m37710i_cpu,int line, int state);
|
||||
extern int (*const m37710i_execute[])(m37710i_cpu_struct *m37710i_cpu, int cycles);
|
||||
extern void (*const *const m37710i_opcodes[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const *const m37710i_opcodes2[])(m37710i_cpu_struct *cpustate);
|
||||
extern void (*const *const m37710i_opcodes3[])(m37710i_cpu_struct *cpustate);
|
||||
extern uint (*const m37710i_get_reg[])(m37710i_cpu_struct *cpustate,int regnum);
|
||||
extern void (*const m37710i_set_reg[])(m37710i_cpu_struct *cpustate,int regnum, uint val);
|
||||
extern void (*const m37710i_set_line[])(m37710i_cpu_struct *cpustate,int line, int state);
|
||||
extern int (*const m37710i_execute[])(m37710i_cpu_struct *cpustate, int cycles);
|
||||
|
||||
#define REG_A m37710i_cpu->a /* Accumulator */
|
||||
#define REG_B m37710i_cpu->b /* Accumulator hi byte */
|
||||
#define REG_BA m37710i_cpu->ba /* Secondary Accumulator */
|
||||
#define REG_BB m37710i_cpu->bb /* Secondary Accumulator hi byte */
|
||||
#define REG_X m37710i_cpu->x /* Index X Register */
|
||||
#define REG_Y m37710i_cpu->y /* Index Y Register */
|
||||
#define REG_S m37710i_cpu->s /* Stack Pointer */
|
||||
#define REG_PC m37710i_cpu->pc /* Program Counter */
|
||||
#define REG_PPC m37710i_cpu->ppc /* Previous Program Counter */
|
||||
#define REG_PB m37710i_cpu->pb /* Program Bank */
|
||||
#define REG_DB m37710i_cpu->db /* Data Bank */
|
||||
#define REG_D m37710i_cpu->d /* Direct Register */
|
||||
#define FLAG_M m37710i_cpu->flag_m /* Memory/Accumulator Select Flag */
|
||||
#define FLAG_X m37710i_cpu->flag_x /* Index Select Flag */
|
||||
#define FLAG_N m37710i_cpu->flag_n /* Negative Flag */
|
||||
#define FLAG_V m37710i_cpu->flag_v /* Overflow Flag */
|
||||
#define FLAG_D m37710i_cpu->flag_d /* Decimal Mode Flag */
|
||||
#define FLAG_I m37710i_cpu->flag_i /* Interrupt Mask Flag */
|
||||
#define FLAG_Z m37710i_cpu->flag_z /* Zero Flag (inverted) */
|
||||
#define FLAG_C m37710i_cpu->flag_c /* Carry Flag */
|
||||
#define LINE_IRQ m37710i_cpu->line_irq /* Status of the IRQ line */
|
||||
#define REG_IR m37710i_cpu->ir /* Instruction Register */
|
||||
#define REG_IM m37710i_cpu->im /* Immediate load value */
|
||||
#define REG_IM2 m37710i_cpu->im2 /* Immediate load target */
|
||||
#define REG_IM3 m37710i_cpu->im3 /* Immediate load target */
|
||||
#define REG_IM4 m37710i_cpu->im4 /* Immediate load target */
|
||||
#define INT_ACK m37710i_cpu->int_ack /* Interrupt Acknowledge function pointer */
|
||||
#define CLOCKS m37710i_cpu->ICount /* Clock cycles remaining */
|
||||
#define IRQ_DELAY m37710i_cpu->irq_delay /* Delay 1 instruction before checking IRQ */
|
||||
#define CPU_STOPPED m37710i_cpu->stopped /* Stopped status of the CPU */
|
||||
#define REG_A cpustate->a /* Accumulator */
|
||||
#define REG_B cpustate->b /* Accumulator hi byte */
|
||||
#define REG_BA cpustate->ba /* Secondary Accumulator */
|
||||
#define REG_BB cpustate->bb /* Secondary Accumulator hi byte */
|
||||
#define REG_X cpustate->x /* Index X Register */
|
||||
#define REG_Y cpustate->y /* Index Y Register */
|
||||
#define REG_S cpustate->s /* Stack Pointer */
|
||||
#define REG_PC cpustate->pc /* Program Counter */
|
||||
#define REG_PPC cpustate->ppc /* Previous Program Counter */
|
||||
#define REG_PB cpustate->pb /* Program Bank */
|
||||
#define REG_DB cpustate->db /* Data Bank */
|
||||
#define REG_D cpustate->d /* Direct Register */
|
||||
#define FLAG_M cpustate->flag_m /* Memory/Accumulator Select Flag */
|
||||
#define FLAG_X cpustate->flag_x /* Index Select Flag */
|
||||
#define FLAG_N cpustate->flag_n /* Negative Flag */
|
||||
#define FLAG_V cpustate->flag_v /* Overflow Flag */
|
||||
#define FLAG_D cpustate->flag_d /* Decimal Mode Flag */
|
||||
#define FLAG_I cpustate->flag_i /* Interrupt Mask Flag */
|
||||
#define FLAG_Z cpustate->flag_z /* Zero Flag (inverted) */
|
||||
#define FLAG_C cpustate->flag_c /* Carry Flag */
|
||||
#define LINE_IRQ cpustate->line_irq /* Status of the IRQ line */
|
||||
#define REG_IR cpustate->ir /* Instruction Register */
|
||||
#define REG_IM cpustate->im /* Immediate load value */
|
||||
#define REG_IM2 cpustate->im2 /* Immediate load target */
|
||||
#define REG_IM3 cpustate->im3 /* Immediate load target */
|
||||
#define REG_IM4 cpustate->im4 /* Immediate load target */
|
||||
#define INT_ACK cpustate->int_ack /* Interrupt Acknowledge function pointer */
|
||||
#define CLOCKS cpustate->ICount /* Clock cycles remaining */
|
||||
#define IRQ_DELAY cpustate->irq_delay /* Delay 1 instruction before checking IRQ */
|
||||
#define CPU_STOPPED cpustate->stopped /* Stopped status of the CPU */
|
||||
|
||||
#define FTABLE_GET_REG m37710i_cpu->get_reg
|
||||
#define FTABLE_SET_REG m37710i_cpu->set_reg
|
||||
#define FTABLE_SET_LINE m37710i_cpu->set_line
|
||||
#define FTABLE_GET_REG cpustate->get_reg
|
||||
#define FTABLE_SET_REG cpustate->set_reg
|
||||
#define FTABLE_SET_LINE cpustate->set_line
|
||||
|
||||
#define SRC m37710i_cpu->source /* Source Operand */
|
||||
#define DST m37710i_cpu->destination /* Destination Operand */
|
||||
#define SRC cpustate->source /* Source Operand */
|
||||
#define DST cpustate->destination /* Destination Operand */
|
||||
|
||||
#define STOP_LEVEL_WAI 1
|
||||
#define STOP_LEVEL_STOP 2
|
||||
@ -176,15 +176,15 @@ extern int (*const m37710i_execute[])(m37710i_cpu_struct *m37710i_cpu, int cycle
|
||||
#define EXECUTION_MODE_M1X0 2
|
||||
#define EXECUTION_MODE_M1X1 3
|
||||
|
||||
INLINE void m37710i_set_execution_mode(m37710i_cpu_struct *m37710i_cpu, uint mode)
|
||||
INLINE void m37710i_set_execution_mode(m37710i_cpu_struct *cpustate, uint mode)
|
||||
{
|
||||
m37710i_cpu->opcodes = m37710i_opcodes[mode];
|
||||
m37710i_cpu->opcodes42 = m37710i_opcodes2[mode];
|
||||
m37710i_cpu->opcodes89 = m37710i_opcodes3[mode];
|
||||
cpustate->opcodes = m37710i_opcodes[mode];
|
||||
cpustate->opcodes42 = m37710i_opcodes2[mode];
|
||||
cpustate->opcodes89 = m37710i_opcodes3[mode];
|
||||
FTABLE_GET_REG = m37710i_get_reg[mode];
|
||||
FTABLE_SET_REG = m37710i_set_reg[mode];
|
||||
FTABLE_SET_LINE = m37710i_set_line[mode];
|
||||
m37710i_cpu->execute = m37710i_execute[mode];
|
||||
cpustate->execute = m37710i_execute[mode];
|
||||
}
|
||||
|
||||
/* ======================================================================== */
|
||||
@ -312,7 +312,7 @@ INLINE void m37710i_set_execution_mode(m37710i_cpu_struct *m37710i_cpu, uint mod
|
||||
#define CFLAG_AS_1() ((FLAG_C>>8)&1)
|
||||
|
||||
/* update IRQ state (internal use only) */
|
||||
void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu);
|
||||
void m37710i_update_irqs(m37710i_cpu_struct *cpustate);
|
||||
|
||||
/* ======================================================================== */
|
||||
/* ================================== CPU ================================= */
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user