mirror of
https://github.com/holub/mame
synced 2025-05-24 06:30:04 +03:00
Pointer-ified the sc61860 core.
This commit is contained in:
parent
dcdfd96f1a
commit
bf7875e7ee
@ -39,7 +39,8 @@
|
||||
/****************************************************************************
|
||||
* The 61860 registers.
|
||||
****************************************************************************/
|
||||
typedef struct
|
||||
typedef struct _sc61860_state sc61860_state;
|
||||
struct _sc61860_state
|
||||
{
|
||||
sc61860_cpu_core *config;
|
||||
UINT8 ram[0x60]; // internal special ram
|
||||
@ -55,22 +56,24 @@ typedef struct
|
||||
|
||||
const device_config *device;
|
||||
const address_space *program;
|
||||
} SC61860_Regs;
|
||||
int icount;
|
||||
};
|
||||
|
||||
static int sc61860_ICount = 0;
|
||||
|
||||
static SC61860_Regs sc61860;
|
||||
|
||||
UINT8 *sc61860_internal_ram(void) { return sc61860.ram; }
|
||||
UINT8 *sc61860_internal_ram(const device_config *device)
|
||||
{
|
||||
sc61860_state *cpustate = device->token;
|
||||
return cpustate->ram;
|
||||
}
|
||||
|
||||
static TIMER_CALLBACK(sc61860_2ms_tick)
|
||||
{
|
||||
if (--sc61860.timer.count == 0)
|
||||
sc61860_state *cpustate = ptr;
|
||||
if (--cpustate->timer.count == 0)
|
||||
{
|
||||
sc61860.timer.count = 128;
|
||||
sc61860.timer.t512ms = !sc61860.timer.t512ms;
|
||||
cpustate->timer.count = 128;
|
||||
cpustate->timer.t512ms = !cpustate->timer.t512ms;
|
||||
}
|
||||
sc61860.timer.t2ms = !sc61860.timer.t2ms;
|
||||
cpustate->timer.t2ms = !cpustate->timer.t2ms;
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@ -81,63 +84,53 @@ static TIMER_CALLBACK(sc61860_2ms_tick)
|
||||
|
||||
static CPU_RESET( sc61860 )
|
||||
{
|
||||
sc61860.timer.t2ms=0;
|
||||
sc61860.timer.t512ms=0;
|
||||
sc61860.timer.count=256;
|
||||
sc61860.pc=0;
|
||||
sc61860_state *cpustate = device->token;
|
||||
cpustate->timer.t2ms=0;
|
||||
cpustate->timer.t512ms=0;
|
||||
cpustate->timer.count=256;
|
||||
cpustate->pc=0;
|
||||
}
|
||||
|
||||
static CPU_INIT( sc61860 )
|
||||
{
|
||||
sc61860.config = (sc61860_cpu_core *) device->static_config;
|
||||
timer_pulse(device->machine, ATTOTIME_IN_HZ(500), NULL, 0, sc61860_2ms_tick);
|
||||
sc61860.device = device;
|
||||
sc61860.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
|
||||
}
|
||||
|
||||
static CPU_GET_CONTEXT( sc61860 )
|
||||
{
|
||||
if( dst )
|
||||
*(SC61860_Regs*)dst = sc61860;
|
||||
}
|
||||
|
||||
static CPU_SET_CONTEXT( sc61860 )
|
||||
{
|
||||
if( src )
|
||||
{
|
||||
sc61860 = *(SC61860_Regs*)src;
|
||||
}
|
||||
sc61860_state *cpustate = device->token;
|
||||
cpustate->config = (sc61860_cpu_core *) device->static_config;
|
||||
timer_pulse(device->machine, ATTOTIME_IN_HZ(500), cpustate, 0, sc61860_2ms_tick);
|
||||
cpustate->device = device;
|
||||
cpustate->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
|
||||
}
|
||||
|
||||
static CPU_EXECUTE( sc61860 )
|
||||
{
|
||||
sc61860_ICount = cycles;
|
||||
sc61860_state *cpustate = device->token;
|
||||
|
||||
cpustate->icount = cycles;
|
||||
|
||||
do
|
||||
{
|
||||
sc61860.oldpc = sc61860.pc;
|
||||
cpustate->oldpc = cpustate->pc;
|
||||
|
||||
debugger_instruction_hook(device, sc61860.pc);
|
||||
debugger_instruction_hook(device, cpustate->pc);
|
||||
|
||||
sc61860_instruction();
|
||||
sc61860_instruction(cpustate);
|
||||
|
||||
/* Are we in HLT-mode? */
|
||||
/*if (sc61860.c & 4)
|
||||
/*if (cpustate->c & 4)
|
||||
{
|
||||
if ((sc61860.config && sc61860.config->ina && (sc61860.config->ina()!=0)) || sc61860.timer.t512ms)
|
||||
if ((cpustate->config && cpustate->config->ina && (cpustate->config->ina(cpustate)!=0)) || cpustate->timer.t512ms)
|
||||
{
|
||||
sc61860.c&=0xfb;
|
||||
if (sc61860.config->outc) sc61860.config->outc(sc61860.c);
|
||||
cpustate->c&=0xfb;
|
||||
if (cpustate->config->outc) cpustate->config->outc(cpustate->c);
|
||||
}
|
||||
sc61860_ICount-=4;
|
||||
cpustate->icount-=4;
|
||||
}
|
||||
else if(sc61860.c & 8) {}
|
||||
else if(cpustate->c & 8) {}
|
||||
|
||||
else sc61860_instruction();*/
|
||||
else sc61860_instruction(cpustate);*/
|
||||
|
||||
} while (sc61860_ICount > 0);
|
||||
} while (cpustate->icount > 0);
|
||||
|
||||
return cycles - sc61860_ICount;
|
||||
return cycles - cpustate->icount;
|
||||
}
|
||||
|
||||
|
||||
@ -147,18 +140,19 @@ static CPU_EXECUTE( sc61860 )
|
||||
|
||||
static CPU_SET_INFO( sc61860 )
|
||||
{
|
||||
sc61860_state *cpustate = device->token;
|
||||
switch (state)
|
||||
{
|
||||
|
||||
case CPUINFO_INT_PC:
|
||||
case CPUINFO_INT_REGISTER + SC61860_PC: sc61860.pc = info->i; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_PC: cpustate->pc = info->i; break;
|
||||
case CPUINFO_INT_SP:
|
||||
case CPUINFO_INT_REGISTER + SC61860_R: sc61860.r = info->i & 0x7F; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_DP: sc61860.dp = info->i; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_P: sc61860.p = info->i & 0x7F; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_Q: sc61860.q = info->i & 0x7F; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_CARRY: sc61860.carry = info->i; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_ZERO: sc61860.zero = info->i; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_R: cpustate->r = info->i & 0x7F; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_DP: cpustate->dp = info->i; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_P: cpustate->p = info->i & 0x7F; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_Q: cpustate->q = info->i & 0x7F; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_CARRY: cpustate->carry = info->i; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_ZERO: cpustate->zero = info->i; break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,10 +164,11 @@ static CPU_SET_INFO( sc61860 )
|
||||
|
||||
CPU_GET_INFO( sc61860 )
|
||||
{
|
||||
sc61860_state *cpustate = (device != NULL) ? device->token : NULL;
|
||||
switch (state)
|
||||
{
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(sc61860); break;
|
||||
case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(sc61860_state); break;
|
||||
case CPUINFO_INT_INPUT_LINES: info->i = 0; break;
|
||||
case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break;
|
||||
case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_BIG; break;
|
||||
@ -194,28 +189,28 @@ CPU_GET_INFO( sc61860 )
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break;
|
||||
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break;
|
||||
|
||||
case CPUINFO_INT_PREVIOUSPC: info->i = sc61860.oldpc; break;
|
||||
case CPUINFO_INT_PREVIOUSPC: info->i = cpustate->oldpc; break;
|
||||
|
||||
case CPUINFO_INT_PC:
|
||||
case CPUINFO_INT_REGISTER + SC61860_PC: info->i = sc61860.pc; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_PC: info->i = cpustate->pc; break;
|
||||
case CPUINFO_INT_SP:
|
||||
case CPUINFO_INT_REGISTER + SC61860_R: info->i = sc61860.r; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_DP: info->i = sc61860.dp; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_P: info->i = sc61860.p; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_Q: info->i = sc61860.q; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_CARRY: info->i = sc61860.carry; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_ZERO: info->i = sc61860.zero; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_R: info->i = cpustate->r; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_DP: info->i = cpustate->dp; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_P: info->i = cpustate->p; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_Q: info->i = cpustate->q; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_CARRY: info->i = cpustate->carry; break;
|
||||
case CPUINFO_INT_REGISTER + SC61860_ZERO: info->i = cpustate->zero; 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(sc61860); break;
|
||||
case CPUINFO_PTR_GET_CONTEXT: info->getcontext = CPU_GET_CONTEXT_NAME(sc61860); break;
|
||||
case CPUINFO_PTR_SET_CONTEXT: info->setcontext = CPU_SET_CONTEXT_NAME(sc61860); break;
|
||||
case CPUINFO_PTR_GET_CONTEXT: info->getcontext = CPU_GET_CONTEXT_NAME(dummy); break;
|
||||
case CPUINFO_PTR_SET_CONTEXT: info->setcontext = CPU_SET_CONTEXT_NAME(dummy); break;
|
||||
case CPUINFO_PTR_INIT: info->init = CPU_INIT_NAME(sc61860); break;
|
||||
case CPUINFO_PTR_RESET: info->reset = CPU_RESET_NAME(sc61860); break;
|
||||
case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(sc61860); break;
|
||||
case CPUINFO_PTR_BURN: info->burn = NULL; break;
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(sc61860); break;
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &sc61860_ICount; break;
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &cpustate->icount; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "SC61860"); break;
|
||||
@ -225,25 +220,25 @@ CPU_GET_INFO( sc61860 )
|
||||
case CPUINFO_STR_CORE_CREDITS: strcpy(info->s, "Copyright Peter Trauner, all rights reserved."); break;
|
||||
|
||||
case CPUINFO_STR_FLAGS:
|
||||
sprintf(info->s, "%c%c", sc61860.zero?'Z':'.', sc61860.carry ? 'C':'.');
|
||||
sprintf(info->s, "%c%c", cpustate->zero?'Z':'.', cpustate->carry ? 'C':'.');
|
||||
break;
|
||||
|
||||
case CPUINFO_STR_REGISTER + SC61860_PC: sprintf(info->s, "PC:%.4x", sc61860.pc);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_DP: sprintf(info->s, "DP:%.4x", sc61860.dp);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_P: sprintf(info->s, "P:%.2x", sc61860.p);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_Q: sprintf(info->s, "Q:%.2x", sc61860.q);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_R: sprintf(info->s, "R:%.2x", sc61860.r);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_I: sprintf(info->s, "I:%.2x", sc61860.ram[I]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_J: sprintf(info->s, "J:%.2x", sc61860.ram[J]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_K: sprintf(info->s, "K:%.2x", sc61860.ram[K]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_L: sprintf(info->s, "L:%.2x", sc61860.ram[L]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_V: sprintf(info->s, "V:%.2x", sc61860.ram[V]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_W: sprintf(info->s, "W:%.2x", sc61860.ram[W]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_H: sprintf(info->s, "W:%.2x", sc61860.h);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_BA: sprintf(info->s, "BA:%.2x%.2x", sc61860.ram[B], sc61860.ram[A]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_X: sprintf(info->s, "X: %.2x%.2x", sc61860.ram[XH], sc61860.ram[XL]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_Y: sprintf(info->s, "Y: %.2x%.2x", sc61860.ram[YH], sc61860.ram[YL]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_CARRY: sprintf(info->s, "Carry: %d", sc61860.carry);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_ZERO: sprintf(info->s, "Zero: %d", sc61860.zero);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_PC: sprintf(info->s, "PC:%.4x", cpustate->pc);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_DP: sprintf(info->s, "DP:%.4x", cpustate->dp);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_P: sprintf(info->s, "P:%.2x", cpustate->p);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_Q: sprintf(info->s, "Q:%.2x", cpustate->q);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_R: sprintf(info->s, "R:%.2x", cpustate->r);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_I: sprintf(info->s, "I:%.2x", cpustate->ram[I]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_J: sprintf(info->s, "J:%.2x", cpustate->ram[J]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_K: sprintf(info->s, "K:%.2x", cpustate->ram[K]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_L: sprintf(info->s, "L:%.2x", cpustate->ram[L]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_V: sprintf(info->s, "V:%.2x", cpustate->ram[V]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_W: sprintf(info->s, "W:%.2x", cpustate->ram[W]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_H: sprintf(info->s, "W:%.2x", cpustate->h);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_BA: sprintf(info->s, "BA:%.2x%.2x", cpustate->ram[B], cpustate->ram[A]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_X: sprintf(info->s, "X: %.2x%.2x", cpustate->ram[XH], cpustate->ram[XL]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_Y: sprintf(info->s, "Y: %.2x%.2x", cpustate->ram[YH], cpustate->ram[YL]);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_CARRY: sprintf(info->s, "Carry: %d", cpustate->carry);break;
|
||||
case CPUINFO_STR_REGISTER + SC61860_ZERO: sprintf(info->s, "Zero: %d", cpustate->zero);break;
|
||||
}
|
||||
}
|
||||
|
@ -41,20 +41,20 @@
|
||||
typedef struct _sc61860_cpu_core sc61860_cpu_core;
|
||||
struct _sc61860_cpu_core
|
||||
{
|
||||
int (*reset)(void);
|
||||
int (*brk)(void);
|
||||
int (*x)(void);
|
||||
int (*ina)(void);
|
||||
void (*outa)(int);
|
||||
int (*inb)(void);
|
||||
void (*outb)(int);
|
||||
void (*outc)(int);
|
||||
int (*reset)(const device_config *device);
|
||||
int (*brk)(const device_config *device);
|
||||
int (*x)(const device_config *device);
|
||||
int (*ina)(const device_config *device);
|
||||
void (*outa)(const device_config *device, int);
|
||||
int (*inb)(const device_config *device);
|
||||
void (*outb)(const device_config *device, int);
|
||||
void (*outc)(const device_config *device, int);
|
||||
};
|
||||
|
||||
CPU_DISASSEMBLE( sc61860 );
|
||||
|
||||
/* this is though for power on/off of the sharps */
|
||||
UINT8 *sc61860_internal_ram(void);
|
||||
UINT8 *sc61860_internal_ram(const device_config *device);
|
||||
|
||||
CPU_GET_INFO( sc61860 );
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,144 +1,144 @@
|
||||
|
||||
static void sc61860_instruction(void)
|
||||
static void sc61860_instruction(sc61860_state *cpustate)
|
||||
{
|
||||
int oper=READ_OP();
|
||||
int oper=READ_OP(cpustate);
|
||||
if ((oper&0xc0)==0x80) {
|
||||
sc61860_load_imm_p(oper&0x3f);sc61860_ICount-=2;
|
||||
sc61860_load_imm_p(cpustate, oper&0x3f);cpustate->icount-=2;
|
||||
} else if ((oper&0xe0)==0xe0) {
|
||||
sc61860_call(READ_OP()|((oper&0x1f)<<8));sc61860_ICount-=7;
|
||||
sc61860_call(cpustate, READ_OP(cpustate)|((oper&0x1f)<<8));cpustate->icount-=7;
|
||||
} else {
|
||||
switch(oper) {
|
||||
case 0: sc61860_load_imm(I, READ_OP());sc61860_ICount-=4;break;
|
||||
case 1: sc61860_load_imm(J, READ_OP());sc61860_ICount-=4;break;
|
||||
case 2: sc61860_load_imm(A, READ_OP());sc61860_ICount-=4;break;
|
||||
case 3: sc61860_load_imm(B, READ_OP());sc61860_ICount-=4;break;
|
||||
case 4: sc61860_inc_load_dp(XL);sc61860_ICount-=6;break;
|
||||
case 5: sc61860_dec_load_dp(XL);sc61860_ICount-=6;break;
|
||||
case 6: sc61860_inc_load_dp(YL);sc61860_ICount-=6;break;
|
||||
case 7: sc61860_dec_load_dp(YL);sc61860_ICount-=6;break;
|
||||
case 8: sc61860_copy(sc61860.ram[I]);break;
|
||||
case 9: sc61860_exchange(sc61860.ram[I]);break;
|
||||
case 10: sc61860_copy(sc61860.ram[J]);break;
|
||||
case 11: sc61860_exchange(sc61860.ram[J]);break;
|
||||
case 12: sc61860_add_bcd_a();sc61860_ICount-=7;break;
|
||||
case 13: sc61860_sub_bcd_a();sc61860_ICount-=7;break;
|
||||
case 14: sc61860_add_bcd();sc61860_ICount-=7;break;
|
||||
case 15: sc61860_sub_bcd();sc61860_ICount-=7;break;
|
||||
case 16: sc61860_load_dp();sc61860_ICount-=8;break;
|
||||
case 17: sc61860_load_dl();sc61860_ICount-=5;break;
|
||||
case 18: sc61860_load_imm_p(READ_OP());sc61860_ICount-=4;break;
|
||||
case 19: sc61860_load_imm_q(READ_OP());sc61860_ICount-=4;break;
|
||||
case 20: sc61860_add_word();sc61860_ICount-=5;break;
|
||||
case 21: sc61860_sub_word();sc61860_ICount-=5;break;
|
||||
case 24: sc61860_copy_ext(sc61860.ram[I]);break;
|
||||
case 25: sc61860_exchange_ext(sc61860.ram[I]);break;
|
||||
case 26: sc61860_copy_ext(sc61860.ram[J]);break;
|
||||
case 27: sc61860_exchange_ext(sc61860.ram[J]);break;
|
||||
case 28: sc61860_shift_right_nibble();sc61860_ICount-=5;break;
|
||||
case 29: sc61860_shift_left_nibble();sc61860_ICount-=5;break;
|
||||
case 30: sc61860_fill();sc61860_ICount-=5;break;
|
||||
case 31: sc61860_fill_ext();sc61860_ICount-=4;break;
|
||||
case 32: sc61860_store_p();sc61860_ICount-=2;break;
|
||||
case 33: sc61860_store_q();sc61860_ICount-=2;break;
|
||||
case 34: sc61860_store_r();sc61860_ICount-=2;break;
|
||||
case 36: sc61860_inc_load_dp_load();sc61860_ICount-=7;break;
|
||||
case 37: sc61860_dec_load_dp_load();sc61860_ICount-=7;break;
|
||||
case 38: sc61860_inc_load_dp_store();sc61860_ICount-=7;break;
|
||||
case 39: sc61860_dec_load_dp_store();sc61860_ICount-=7;break;
|
||||
case 40: sc61860_jump_rel_plus(!sc61860.zero);sc61860_ICount-=4;break;
|
||||
case 41: sc61860_jump_rel_minus(!sc61860.zero);sc61860_ICount-=4;break;
|
||||
case 42: sc61860_jump_rel_plus(!sc61860.carry);sc61860_ICount-=4;break;
|
||||
case 43: sc61860_jump_rel_minus(!sc61860.carry);sc61860_ICount-=4;break;
|
||||
case 44: sc61860_jump_rel_plus(TRUE);sc61860_ICount-=4;break;
|
||||
case 45: sc61860_jump_rel_minus(TRUE);sc61860_ICount-=4;break;
|
||||
case 47: sc61860_loop();sc61860_ICount-=7;break;
|
||||
case 48: sc61860_load_imm_p(sc61860.ram[A]);sc61860_ICount-=2;break;
|
||||
case 49: sc61860_load_imm_q(sc61860.ram[A]);sc61860_ICount-=2;break;
|
||||
case 50: sc61860_load_r();sc61860_ICount-=2;break;
|
||||
case 52: sc61860_push();sc61860_ICount-=3;break;
|
||||
case 53: sc61860_copy_int(sc61860.ram[I]);break;
|
||||
case 55: sc61860_return();sc61860_ICount-=4;break;
|
||||
case 56: sc61860_jump_rel_plus(sc61860.zero);sc61860_ICount-=4;break;
|
||||
case 57: sc61860_jump_rel_minus(sc61860.zero);sc61860_ICount-=4;break;
|
||||
case 58: sc61860_jump_rel_plus(sc61860.carry);sc61860_ICount-=4;break;
|
||||
case 59: sc61860_jump_rel_minus(sc61860.carry);sc61860_ICount-=4;break;
|
||||
case 64: sc61860_inc(I);sc61860_ICount-=4;break;
|
||||
case 65: sc61860_dec(I);sc61860_ICount-=4;break;
|
||||
case 66: sc61860_inc(A);sc61860_ICount-=4;break;
|
||||
case 67: sc61860_dec(A);sc61860_ICount-=4;break;
|
||||
case 68: sc61860_add(sc61860.p,sc61860.ram[A]);sc61860_ICount-=3;break;
|
||||
case 69: sc61860_sub(sc61860.p,sc61860.ram[A]);sc61860_ICount-=3;break;
|
||||
case 70: sc61860_and(sc61860.p,sc61860.ram[A]);sc61860_ICount-=3;break;
|
||||
case 71: sc61860_or(sc61860.p,sc61860.ram[A]);sc61860_ICount-=3;break;
|
||||
case 72: sc61860_inc(K);sc61860_ICount-=4;break;
|
||||
case 73: sc61860_dec(K);sc61860_ICount-=4;break;
|
||||
case 74: sc61860_inc(V);sc61860_ICount-=4;break;
|
||||
case 75: sc61860_dec(V);sc61860_ICount-=4;break;
|
||||
case 76: sc61860_in_a();sc61860_ICount-=2;break;
|
||||
case 77: /*nopw*/;sc61860_ICount-=2;break;
|
||||
case 78: sc61860_wait();sc61860_ICount-=6;break;
|
||||
case 79: sc61860_wait_x(FALSE);sc61860_ICount-=1;break;
|
||||
case 80: sc61860_inc_p();sc61860_ICount-=2;break;
|
||||
case 81: sc61860_dec_p();sc61860_ICount-=2;break;
|
||||
case 82: sc61860_store_ext(A);sc61860_ICount-=2;break;
|
||||
case 83: sc61860_store_ext(sc61860.p);sc61860_ICount-=2;break;
|
||||
case 84: sc61860_load_imm(sc61860.p, READ_OP());sc61860_ICount-=3/*?*/;break; // undocumented
|
||||
case 85: sc61860_load_ext(sc61860.p);sc61860_ICount-=3;break;
|
||||
case 86: sc61860_load_imm(sc61860.p, READ_OP());sc61860_ICount-=3/*?*/;break; // undocumented
|
||||
case 87: sc61860_load_ext(A);sc61860_ICount-=3;break;
|
||||
case 88: sc61860_swap();sc61860_ICount-=2;break;
|
||||
case 89: sc61860_load();sc61860_ICount-=2;break;
|
||||
case 90: sc61860_rotate_left();sc61860_ICount-=2;break;
|
||||
case 91: sc61860_pop();sc61860_ICount-=2;break;
|
||||
case 93: sc61860_out_a();sc61860_ICount-=3;break;
|
||||
case 95: sc61860_out_f();sc61860_ICount-=3;break;
|
||||
case 96: sc61860_and(sc61860.p,READ_OP());sc61860_ICount-=4;break;
|
||||
case 97: sc61860_or(sc61860.p,READ_OP());sc61860_ICount-=4;break;
|
||||
case 98: sc61860_test(sc61860.p,READ_OP());sc61860_ICount-=4;break;
|
||||
case 99: sc61860_cmp(sc61860.p,READ_OP());sc61860_ICount-=4;break;
|
||||
case 100: sc61860_and(A,READ_OP());sc61860_ICount-=4;break;
|
||||
case 101: sc61860_or(A,READ_OP());sc61860_ICount-=4;break;
|
||||
case 102: sc61860_test(A,READ_OP());sc61860_ICount-=4;break;
|
||||
case 103: sc61860_cmp(A,READ_OP());sc61860_ICount-=4;break;
|
||||
case 105: sc61860_execute_table_call();sc61860_ICount-=3;break;
|
||||
case 107: sc61860_test_special();sc61860_ICount-=4;break;
|
||||
case 111: sc61860_wait_x(TRUE);sc61860_ICount-=1;break;
|
||||
case 112: sc61860_add(sc61860.p,READ_OP());sc61860_ICount-=4;break;
|
||||
case 113: sc61860_sub(sc61860.p,READ_OP());sc61860_ICount-=4;break;
|
||||
case 116: sc61860_add(A,READ_OP());sc61860_ICount-=4;break;
|
||||
case 117: sc61860_sub(A,READ_OP());sc61860_ICount-=4;break;
|
||||
case 120: sc61860_call(READ_OP_ARG_WORD());sc61860_ICount-=8;break;
|
||||
case 121: sc61860_jump(1);sc61860_ICount-=6;break;
|
||||
case 122: sc61860_prepare_table_call();sc61860_ICount-=9;break;
|
||||
case 124: sc61860_jump(!sc61860.zero);sc61860_ICount-=6;break;
|
||||
case 125: sc61860_jump(!sc61860.carry);sc61860_ICount-=6;break;
|
||||
case 126: sc61860_jump(sc61860.zero);sc61860_ICount-=6;break;
|
||||
case 127: sc61860_jump(sc61860.carry);sc61860_ICount-=6;break;
|
||||
case 192: sc61860_inc(J);sc61860_ICount-=4;break;
|
||||
case 193: sc61860_dec(J);sc61860_ICount-=4;break;
|
||||
case 194: sc61860_inc(B);sc61860_ICount-=4;break;
|
||||
case 195: sc61860_dec(B);sc61860_ICount-=4;break;
|
||||
case 196: sc61860_add_carry();sc61860_ICount-=3;break;
|
||||
case 197: sc61860_sub_carry();sc61860_ICount-=3;break;
|
||||
case 199: sc61860_cmp(sc61860.p,sc61860.ram[A]);sc61860_ICount-=3;break;
|
||||
case 200: sc61860_inc(L);sc61860_ICount-=4;break;
|
||||
case 201: sc61860_dec(L);sc61860_ICount-=4;break;
|
||||
case 202: sc61860_inc(W);sc61860_ICount-=4;break;
|
||||
case 203: sc61860_dec(W);sc61860_ICount-=4;break;
|
||||
case 204: sc61860_in_b();sc61860_ICount-=2;break;
|
||||
case 206: /*nopt*/;sc61860_ICount-=3;break;
|
||||
case 208: sc61860_set_carry();sc61860_ICount-=2;break;
|
||||
case 209: sc61860_reset_carry();sc61860_ICount-=4;break;
|
||||
case 210: sc61860_rotate_right();sc61860_ICount-=2;break;
|
||||
case 212: sc61860_and_ext();sc61860_ICount-=6;break;
|
||||
case 213: sc61860_or_ext();sc61860_ICount-=6;break;
|
||||
case 214: sc61860_test_ext();sc61860_ICount-=6;break;
|
||||
case 216: sc61860_leave();sc61860_ICount-=2;break;
|
||||
case 218: sc61860_exam(A, B);sc61860_ICount-=3;break;
|
||||
case 219: sc61860_exam(A, sc61860.p);sc61860_ICount-=3;break;
|
||||
case 221: sc61860_out_b();sc61860_ICount-=2;break;
|
||||
case 223: sc61860_out_c();sc61860_ICount-=2;break;
|
||||
default: logerror("sc61860 illegal opcode at %.4x %.2x\n",sc61860.pc-1, oper);
|
||||
case 0: sc61860_load_imm(cpustate, I, READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 1: sc61860_load_imm(cpustate, J, READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 2: sc61860_load_imm(cpustate, A, READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 3: sc61860_load_imm(cpustate, B, READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 4: sc61860_inc_load_dp(cpustate, XL);cpustate->icount-=6;break;
|
||||
case 5: sc61860_dec_load_dp(cpustate, XL);cpustate->icount-=6;break;
|
||||
case 6: sc61860_inc_load_dp(cpustate, YL);cpustate->icount-=6;break;
|
||||
case 7: sc61860_dec_load_dp(cpustate, YL);cpustate->icount-=6;break;
|
||||
case 8: sc61860_copy(cpustate, cpustate->ram[I]);break;
|
||||
case 9: sc61860_exchange(cpustate, cpustate->ram[I]);break;
|
||||
case 10: sc61860_copy(cpustate, cpustate->ram[J]);break;
|
||||
case 11: sc61860_exchange(cpustate, cpustate->ram[J]);break;
|
||||
case 12: sc61860_add_bcd_a(cpustate);cpustate->icount-=7;break;
|
||||
case 13: sc61860_sub_bcd_a(cpustate);cpustate->icount-=7;break;
|
||||
case 14: sc61860_add_bcd(cpustate);cpustate->icount-=7;break;
|
||||
case 15: sc61860_sub_bcd(cpustate);cpustate->icount-=7;break;
|
||||
case 16: sc61860_load_dp(cpustate);cpustate->icount-=8;break;
|
||||
case 17: sc61860_load_dl(cpustate);cpustate->icount-=5;break;
|
||||
case 18: sc61860_load_imm_p(cpustate, READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 19: sc61860_load_imm_q(cpustate, READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 20: sc61860_add_word(cpustate);cpustate->icount-=5;break;
|
||||
case 21: sc61860_sub_word(cpustate);cpustate->icount-=5;break;
|
||||
case 24: sc61860_copy_ext(cpustate, cpustate->ram[I]);break;
|
||||
case 25: sc61860_exchange_ext(cpustate, cpustate->ram[I]);break;
|
||||
case 26: sc61860_copy_ext(cpustate, cpustate->ram[J]);break;
|
||||
case 27: sc61860_exchange_ext(cpustate, cpustate->ram[J]);break;
|
||||
case 28: sc61860_shift_right_nibble(cpustate);cpustate->icount-=5;break;
|
||||
case 29: sc61860_shift_left_nibble(cpustate);cpustate->icount-=5;break;
|
||||
case 30: sc61860_fill(cpustate);cpustate->icount-=5;break;
|
||||
case 31: sc61860_fill_ext(cpustate);cpustate->icount-=4;break;
|
||||
case 32: sc61860_store_p(cpustate);cpustate->icount-=2;break;
|
||||
case 33: sc61860_store_q(cpustate);cpustate->icount-=2;break;
|
||||
case 34: sc61860_store_r(cpustate);cpustate->icount-=2;break;
|
||||
case 36: sc61860_inc_load_dp_load(cpustate);cpustate->icount-=7;break;
|
||||
case 37: sc61860_dec_load_dp_load(cpustate);cpustate->icount-=7;break;
|
||||
case 38: sc61860_inc_load_dp_store(cpustate);cpustate->icount-=7;break;
|
||||
case 39: sc61860_dec_load_dp_store(cpustate);cpustate->icount-=7;break;
|
||||
case 40: sc61860_jump_rel_plus(cpustate, !cpustate->zero);cpustate->icount-=4;break;
|
||||
case 41: sc61860_jump_rel_minus(cpustate, !cpustate->zero);cpustate->icount-=4;break;
|
||||
case 42: sc61860_jump_rel_plus(cpustate, !cpustate->carry);cpustate->icount-=4;break;
|
||||
case 43: sc61860_jump_rel_minus(cpustate, !cpustate->carry);cpustate->icount-=4;break;
|
||||
case 44: sc61860_jump_rel_plus(cpustate, TRUE);cpustate->icount-=4;break;
|
||||
case 45: sc61860_jump_rel_minus(cpustate, TRUE);cpustate->icount-=4;break;
|
||||
case 47: sc61860_loop(cpustate);cpustate->icount-=7;break;
|
||||
case 48: sc61860_load_imm_p(cpustate, cpustate->ram[A]);cpustate->icount-=2;break;
|
||||
case 49: sc61860_load_imm_q(cpustate, cpustate->ram[A]);cpustate->icount-=2;break;
|
||||
case 50: sc61860_load_r(cpustate);cpustate->icount-=2;break;
|
||||
case 52: sc61860_push(cpustate);cpustate->icount-=3;break;
|
||||
case 53: sc61860_copy_int(cpustate, cpustate->ram[I]);break;
|
||||
case 55: sc61860_return(cpustate);cpustate->icount-=4;break;
|
||||
case 56: sc61860_jump_rel_plus(cpustate, cpustate->zero);cpustate->icount-=4;break;
|
||||
case 57: sc61860_jump_rel_minus(cpustate, cpustate->zero);cpustate->icount-=4;break;
|
||||
case 58: sc61860_jump_rel_plus(cpustate, cpustate->carry);cpustate->icount-=4;break;
|
||||
case 59: sc61860_jump_rel_minus(cpustate, cpustate->carry);cpustate->icount-=4;break;
|
||||
case 64: sc61860_inc(cpustate, I);cpustate->icount-=4;break;
|
||||
case 65: sc61860_dec(cpustate, I);cpustate->icount-=4;break;
|
||||
case 66: sc61860_inc(cpustate, A);cpustate->icount-=4;break;
|
||||
case 67: sc61860_dec(cpustate, A);cpustate->icount-=4;break;
|
||||
case 68: sc61860_add(cpustate, cpustate->p,cpustate->ram[A]);cpustate->icount-=3;break;
|
||||
case 69: sc61860_sub(cpustate, cpustate->p,cpustate->ram[A]);cpustate->icount-=3;break;
|
||||
case 70: sc61860_and(cpustate, cpustate->p,cpustate->ram[A]);cpustate->icount-=3;break;
|
||||
case 71: sc61860_or(cpustate, cpustate->p,cpustate->ram[A]);cpustate->icount-=3;break;
|
||||
case 72: sc61860_inc(cpustate, K);cpustate->icount-=4;break;
|
||||
case 73: sc61860_dec(cpustate, K);cpustate->icount-=4;break;
|
||||
case 74: sc61860_inc(cpustate, V);cpustate->icount-=4;break;
|
||||
case 75: sc61860_dec(cpustate, V);cpustate->icount-=4;break;
|
||||
case 76: sc61860_in_a(cpustate);cpustate->icount-=2;break;
|
||||
case 77: /*nopw*/;cpustate->icount-=2;break;
|
||||
case 78: sc61860_wait(cpustate);cpustate->icount-=6;break;
|
||||
case 79: sc61860_wait_x(cpustate, FALSE);cpustate->icount-=1;break;
|
||||
case 80: sc61860_inc_p(cpustate);cpustate->icount-=2;break;
|
||||
case 81: sc61860_dec_p(cpustate);cpustate->icount-=2;break;
|
||||
case 82: sc61860_store_ext(cpustate, A);cpustate->icount-=2;break;
|
||||
case 83: sc61860_store_ext(cpustate, cpustate->p);cpustate->icount-=2;break;
|
||||
case 84: sc61860_load_imm(cpustate, cpustate->p, READ_OP(cpustate));cpustate->icount-=3/*?*/;break; // undocumented
|
||||
case 85: sc61860_load_ext(cpustate, cpustate->p);cpustate->icount-=3;break;
|
||||
case 86: sc61860_load_imm(cpustate, cpustate->p, READ_OP(cpustate));cpustate->icount-=3/*?*/;break; // undocumented
|
||||
case 87: sc61860_load_ext(cpustate, A);cpustate->icount-=3;break;
|
||||
case 88: sc61860_swap(cpustate);cpustate->icount-=2;break;
|
||||
case 89: sc61860_load(cpustate);cpustate->icount-=2;break;
|
||||
case 90: sc61860_rotate_left(cpustate);cpustate->icount-=2;break;
|
||||
case 91: sc61860_pop(cpustate);cpustate->icount-=2;break;
|
||||
case 93: sc61860_out_a(cpustate);cpustate->icount-=3;break;
|
||||
case 95: sc61860_out_f(cpustate);cpustate->icount-=3;break;
|
||||
case 96: sc61860_and(cpustate, cpustate->p,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 97: sc61860_or(cpustate, cpustate->p,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 98: sc61860_test(cpustate, cpustate->p,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 99: sc61860_cmp(cpustate, cpustate->p,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 100: sc61860_and(cpustate, A,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 101: sc61860_or(cpustate, A,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 102: sc61860_test(cpustate, A,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 103: sc61860_cmp(cpustate, A,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 105: sc61860_execute_table_call(cpustate);cpustate->icount-=3;break;
|
||||
case 107: sc61860_test_special(cpustate);cpustate->icount-=4;break;
|
||||
case 111: sc61860_wait_x(cpustate, TRUE);cpustate->icount-=1;break;
|
||||
case 112: sc61860_add(cpustate, cpustate->p,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 113: sc61860_sub(cpustate, cpustate->p,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 116: sc61860_add(cpustate, A,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 117: sc61860_sub(cpustate, A,READ_OP(cpustate));cpustate->icount-=4;break;
|
||||
case 120: sc61860_call(cpustate, READ_OP_ARG_WORD(cpustate));cpustate->icount-=8;break;
|
||||
case 121: sc61860_jump(cpustate, 1);cpustate->icount-=6;break;
|
||||
case 122: sc61860_prepare_table_call(cpustate);cpustate->icount-=9;break;
|
||||
case 124: sc61860_jump(cpustate, !cpustate->zero);cpustate->icount-=6;break;
|
||||
case 125: sc61860_jump(cpustate, !cpustate->carry);cpustate->icount-=6;break;
|
||||
case 126: sc61860_jump(cpustate, cpustate->zero);cpustate->icount-=6;break;
|
||||
case 127: sc61860_jump(cpustate, cpustate->carry);cpustate->icount-=6;break;
|
||||
case 192: sc61860_inc(cpustate, J);cpustate->icount-=4;break;
|
||||
case 193: sc61860_dec(cpustate, J);cpustate->icount-=4;break;
|
||||
case 194: sc61860_inc(cpustate, B);cpustate->icount-=4;break;
|
||||
case 195: sc61860_dec(cpustate, B);cpustate->icount-=4;break;
|
||||
case 196: sc61860_add_carry(cpustate);cpustate->icount-=3;break;
|
||||
case 197: sc61860_sub_carry(cpustate);cpustate->icount-=3;break;
|
||||
case 199: sc61860_cmp(cpustate, cpustate->p,cpustate->ram[A]);cpustate->icount-=3;break;
|
||||
case 200: sc61860_inc(cpustate, L);cpustate->icount-=4;break;
|
||||
case 201: sc61860_dec(cpustate, L);cpustate->icount-=4;break;
|
||||
case 202: sc61860_inc(cpustate, W);cpustate->icount-=4;break;
|
||||
case 203: sc61860_dec(cpustate, W);cpustate->icount-=4;break;
|
||||
case 204: sc61860_in_b(cpustate);cpustate->icount-=2;break;
|
||||
case 206: /*nopt*/;cpustate->icount-=3;break;
|
||||
case 208: sc61860_set_carry(cpustate);cpustate->icount-=2;break;
|
||||
case 209: sc61860_reset_carry(cpustate);cpustate->icount-=4;break;
|
||||
case 210: sc61860_rotate_right(cpustate);cpustate->icount-=2;break;
|
||||
case 212: sc61860_and_ext(cpustate);cpustate->icount-=6;break;
|
||||
case 213: sc61860_or_ext(cpustate);cpustate->icount-=6;break;
|
||||
case 214: sc61860_test_ext(cpustate);cpustate->icount-=6;break;
|
||||
case 216: sc61860_leave(cpustate);cpustate->icount-=2;break;
|
||||
case 218: sc61860_exam(cpustate, A, B);cpustate->icount-=3;break;
|
||||
case 219: sc61860_exam(cpustate, A, cpustate->p);cpustate->icount-=3;break;
|
||||
case 221: sc61860_out_b(cpustate);cpustate->icount-=2;break;
|
||||
case 223: sc61860_out_c(cpustate);cpustate->icount-=2;break;
|
||||
default: logerror("sc61860 illegal opcode at %.4x %.2x\n",cpustate->pc-1, oper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user