diff options
Diffstat (limited to 'src/emu/cpu/se3208/se3208.c')
-rw-r--r-- | src/emu/cpu/se3208/se3208.c | 208 |
1 files changed, 104 insertions, 104 deletions
diff --git a/src/emu/cpu/se3208/se3208.c b/src/emu/cpu/se3208/se3208.c index aa25186196b..9f32390ff03 100644 --- a/src/emu/cpu/se3208/se3208.c +++ b/src/emu/cpu/se3208/se3208.c @@ -31,27 +31,27 @@ struct se3208_state_t int icount; }; -#define FLAG_C 0x0080 -#define FLAG_V 0x0010 -#define FLAG_S 0x0020 -#define FLAG_Z 0x0040 - -#define FLAG_M 0x0200 -#define FLAG_E 0x0800 -#define FLAG_AUT 0x1000 -#define FLAG_ENI 0x2000 -#define FLAG_NMI 0x4000 - -#define CLRFLAG(f) se3208_state->SR&=~(f); -#define SETFLAG(f) se3208_state->SR|=(f); -#define TESTFLAG(f) (se3208_state->SR&(f)) - -#define EXTRACT(val,sbit,ebit) (((val)>>sbit)&((1<<((ebit-sbit)+1))-1)) -#define SEX8(val) ((val&0x80)?(val|0xFFFFFF00):(val&0xFF)) -#define SEX16(val) ((val&0x8000)?(val|0xFFFF0000):(val&0xFFFF)) -#define ZEX8(val) ((val)&0xFF) -#define ZEX16(val) ((val)&0xFFFF) -#define SEX(bits,val) ((val)&(1<<(bits-1))?((val)|(~((1<<bits)-1))):(val&((1<<bits)-1))) +#define FLAG_C 0x0080 +#define FLAG_V 0x0010 +#define FLAG_S 0x0020 +#define FLAG_Z 0x0040 + +#define FLAG_M 0x0200 +#define FLAG_E 0x0800 +#define FLAG_AUT 0x1000 +#define FLAG_ENI 0x2000 +#define FLAG_NMI 0x4000 + +#define CLRFLAG(f) se3208_state->SR&=~(f); +#define SETFLAG(f) se3208_state->SR|=(f); +#define TESTFLAG(f) (se3208_state->SR&(f)) + +#define EXTRACT(val,sbit,ebit) (((val)>>sbit)&((1<<((ebit-sbit)+1))-1)) +#define SEX8(val) ((val&0x80)?(val|0xFFFFFF00):(val&0xFF)) +#define SEX16(val) ((val&0x8000)?(val|0xFFFF0000):(val&0xFFFF)) +#define ZEX8(val) ((val)&0xFF) +#define ZEX16(val) ((val)&0xFFFF) +#define SEX(bits,val) ((val)&(1<<(bits-1))?((val)|(~((1<<bits)-1))):(val&((1<<bits)-1))) //Precompute the instruction decoding in a big table typedef void (*_OP)(se3208_state_t *se3208_state, UINT16 Opcode); @@ -157,7 +157,7 @@ INLINE UINT32 AddWithFlags(se3208_state_t *se3208_state, UINT32 a,UINT32 b) return r; } -INLINE UINT32 SubWithFlags(se3208_state_t *se3208_state, UINT32 a,UINT32 b) //a-b +INLINE UINT32 SubWithFlags(se3208_state_t *se3208_state, UINT32 a,UINT32 b) //a-b { UINT32 r=a-b; CLRFLAG(FLAG_Z|FLAG_C|FLAG_V|FLAG_S); @@ -547,7 +547,7 @@ INST(POP) se3208_state->SR=PopVal(se3208_state); if(Set&(1<<10)) { - se3208_state->PC=PopVal(se3208_state)-2; //PC automatically incresases by 2 + se3208_state->PC=PopVal(se3208_state)-2; //PC automatically incresases by 2 } } @@ -1488,7 +1488,7 @@ static _OP DecodeOp(UINT16 Opcode) case 5: case 6: case 7: - case 8: //arith + case 8: //arith case 9: case 10: case 11: @@ -1565,7 +1565,7 @@ static _OP DecodeOp(UINT16 Opcode) break; } break; - case 1: //Jumps + case 1: //Jumps switch(EXTRACT(Opcode,8,11)) { case 0x0: @@ -1605,7 +1605,7 @@ static _OP DecodeOp(UINT16 Opcode) case 2: if(Opcode&(1<<11)) return LDI; - else //SP Ops + else //SP Ops { if(Opcode&(1<<10)) { @@ -1803,7 +1803,7 @@ static CPU_EXIT( se3208 ) static void set_irq_line(se3208_state_t *se3208_state, int line,int state) { - if(line==INPUT_LINE_NMI) //NMI + if(line==INPUT_LINE_NMI) //NMI se3208_state->NMI=state; else se3208_state->IRQ=state; @@ -1817,23 +1817,23 @@ static CPU_SET_INFO( se3208 ) switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + SE3208_INT: set_irq_line(se3208_state, 0, info->i); break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(se3208_state, INPUT_LINE_NMI, info->i); break; + case CPUINFO_INT_INPUT_STATE + SE3208_INT: set_irq_line(se3208_state, 0, info->i); break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(se3208_state, INPUT_LINE_NMI, info->i); break; case CPUINFO_INT_REGISTER + SE3208_PC: - case CPUINFO_INT_PC: se3208_state->PC = info->i; break; + case CPUINFO_INT_PC: se3208_state->PC = info->i; break; case CPUINFO_INT_REGISTER + SE3208_SP: - case CPUINFO_INT_SP: se3208_state->SP = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_ER: se3208_state->ER = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_SR: se3208_state->SR = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R0: se3208_state->R[ 0] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R1: se3208_state->R[ 1] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R2: se3208_state->R[ 2] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R3: se3208_state->R[ 3] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R4: se3208_state->R[ 4] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R5: se3208_state->R[ 5] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R6: se3208_state->R[ 6] = info->i; break; - case CPUINFO_INT_REGISTER + SE3208_R7: se3208_state->R[ 7] = info->i; break; + case CPUINFO_INT_SP: se3208_state->SP = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_ER: se3208_state->ER = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_SR: se3208_state->SR = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R0: se3208_state->R[ 0] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R1: se3208_state->R[ 1] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R2: se3208_state->R[ 2] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R3: se3208_state->R[ 3] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R4: se3208_state->R[ 4] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R5: se3208_state->R[ 5] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R6: se3208_state->R[ 6] = info->i; break; + case CPUINFO_INT_REGISTER + SE3208_R7: se3208_state->R[ 7] = info->i; break; } } @@ -1845,63 +1845,63 @@ CPU_GET_INFO( se3208 ) switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(se3208_state_t); break; - case CPUINFO_INT_INPUT_LINES: info->i = 1; break; - case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break; - case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_LITTLE; break; - case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break; - case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break; - case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 2; break; - case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 2; break; - case CPUINFO_INT_MIN_CYCLES: info->i = 1; break; - case CPUINFO_INT_MAX_CYCLES: info->i = 1; break; - - case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 32; break; - case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 32; break; - case CPUINFO_INT_ADDRBUS_SHIFT + AS_PROGRAM: info->i = 0; break; - case CPUINFO_INT_DATABUS_WIDTH + AS_DATA: info->i = 0; break; - case CPUINFO_INT_ADDRBUS_WIDTH + AS_DATA: info->i = 0; break; - case CPUINFO_INT_ADDRBUS_SHIFT + AS_DATA: info->i = 0; break; - case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 0; break; - case CPUINFO_INT_ADDRBUS_WIDTH + AS_IO: info->i = 0; break; - case CPUINFO_INT_ADDRBUS_SHIFT + AS_IO: info->i = 0; break; - - case CPUINFO_INT_INPUT_STATE + SE3208_INT: info->i = se3208_state->IRQ; break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = se3208_state->NMI; break; - - case CPUINFO_INT_PREVIOUSPC: info->i = se3208_state->PPC; break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(se3208_state_t); break; + case CPUINFO_INT_INPUT_LINES: info->i = 1; break; + case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break; + case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_LITTLE; break; + case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break; + case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break; + case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 2; break; + case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 2; break; + case CPUINFO_INT_MIN_CYCLES: info->i = 1; break; + case CPUINFO_INT_MAX_CYCLES: info->i = 1; break; + + case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 32; break; + case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 32; break; + case CPUINFO_INT_ADDRBUS_SHIFT + AS_PROGRAM: info->i = 0; break; + case CPUINFO_INT_DATABUS_WIDTH + AS_DATA: info->i = 0; break; + case CPUINFO_INT_ADDRBUS_WIDTH + AS_DATA: info->i = 0; break; + case CPUINFO_INT_ADDRBUS_SHIFT + AS_DATA: info->i = 0; break; + case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 0; break; + case CPUINFO_INT_ADDRBUS_WIDTH + AS_IO: info->i = 0; break; + case CPUINFO_INT_ADDRBUS_SHIFT + AS_IO: info->i = 0; break; + + case CPUINFO_INT_INPUT_STATE + SE3208_INT: info->i = se3208_state->IRQ; break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = se3208_state->NMI; break; + + case CPUINFO_INT_PREVIOUSPC: info->i = se3208_state->PPC; break; case CPUINFO_INT_PC: - case CPUINFO_INT_REGISTER + SE3208_PC: info->i = se3208_state->PC; break; + case CPUINFO_INT_REGISTER + SE3208_PC: info->i = se3208_state->PC; break; case CPUINFO_INT_REGISTER + SE3208_SP: - case CPUINFO_INT_SP: info->i = se3208_state->SP; break; - case CPUINFO_INT_REGISTER + SE3208_SR: info->i = se3208_state->SR; break; - case CPUINFO_INT_REGISTER + SE3208_ER: info->i = se3208_state->ER; break; - case CPUINFO_INT_REGISTER + SE3208_R0: info->i = se3208_state->R[ 0]; break; - case CPUINFO_INT_REGISTER + SE3208_R1: info->i = se3208_state->R[ 1]; break; - case CPUINFO_INT_REGISTER + SE3208_R2: info->i = se3208_state->R[ 2]; break; - case CPUINFO_INT_REGISTER + SE3208_R3: info->i = se3208_state->R[ 3]; break; - case CPUINFO_INT_REGISTER + SE3208_R4: info->i = se3208_state->R[ 4]; break; - case CPUINFO_INT_REGISTER + SE3208_R5: info->i = se3208_state->R[ 5]; break; - case CPUINFO_INT_REGISTER + SE3208_R6: info->i = se3208_state->R[ 6]; break; - case CPUINFO_INT_REGISTER + SE3208_R7: info->i = se3208_state->R[ 7]; break; + case CPUINFO_INT_SP: info->i = se3208_state->SP; break; + case CPUINFO_INT_REGISTER + SE3208_SR: info->i = se3208_state->SR; break; + case CPUINFO_INT_REGISTER + SE3208_ER: info->i = se3208_state->ER; break; + case CPUINFO_INT_REGISTER + SE3208_R0: info->i = se3208_state->R[ 0]; break; + case CPUINFO_INT_REGISTER + SE3208_R1: info->i = se3208_state->R[ 1]; break; + case CPUINFO_INT_REGISTER + SE3208_R2: info->i = se3208_state->R[ 2]; break; + case CPUINFO_INT_REGISTER + SE3208_R3: info->i = se3208_state->R[ 3]; break; + case CPUINFO_INT_REGISTER + SE3208_R4: info->i = se3208_state->R[ 4]; break; + case CPUINFO_INT_REGISTER + SE3208_R5: info->i = se3208_state->R[ 5]; break; + case CPUINFO_INT_REGISTER + SE3208_R6: info->i = se3208_state->R[ 6]; break; + case CPUINFO_INT_REGISTER + SE3208_R7: info->i = se3208_state->R[ 7]; break; /* --- the following bits of info are returned as pointers to data or functions --- */ - case CPUINFO_FCT_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(se3208); break; - case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(se3208); break; - case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(se3208); break; - case CPUINFO_FCT_EXIT: info->exit = CPU_EXIT_NAME(se3208); break; - case CPUINFO_FCT_EXECUTE: info->execute = CPU_EXECUTE_NAME(se3208);break; - case CPUINFO_FCT_BURN: info->burn = NULL; break; - case CPUINFO_FCT_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(se3208); break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &se3208_state->icount; break; + case CPUINFO_FCT_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(se3208); break; + case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(se3208); break; + case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(se3208); break; + case CPUINFO_FCT_EXIT: info->exit = CPU_EXIT_NAME(se3208); break; + case CPUINFO_FCT_EXECUTE: info->execute = CPU_EXECUTE_NAME(se3208);break; + case CPUINFO_FCT_BURN: info->burn = NULL; break; + case CPUINFO_FCT_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(se3208); break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &se3208_state->icount; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ - case CPUINFO_STR_NAME: strcpy(info->s, "SE3208"); break; - case CPUINFO_STR_FAMILY: strcpy(info->s, "Advanced Digital Chips Inc."); break; - case CPUINFO_STR_VERSION: strcpy(info->s, "1.00"); break; - case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; - case CPUINFO_STR_CREDITS: strcpy(info->s, "Copyright Miguel Angel Horna, all rights reserved."); break; + case CPUINFO_STR_NAME: strcpy(info->s, "SE3208"); break; + case CPUINFO_STR_FAMILY: strcpy(info->s, "Advanced Digital Chips Inc."); break; + case CPUINFO_STR_VERSION: strcpy(info->s, "1.00"); break; + case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; + case CPUINFO_STR_CREDITS: strcpy(info->s, "Copyright Miguel Angel Horna, all rights reserved."); break; case CPUINFO_STR_FLAGS: sprintf(info->s, "%c%c%c%c %c%c%c%c%c", @@ -1920,19 +1920,19 @@ CPU_GET_INFO( se3208 ) break; - case CPUINFO_STR_REGISTER + SE3208_PC: sprintf(info->s, "PC :%08X", se3208_state->PC); break; - case CPUINFO_STR_REGISTER + SE3208_SR: sprintf(info->s, "SR :%08X", se3208_state->SR); break; - case CPUINFO_STR_REGISTER + SE3208_ER: sprintf(info->s, "ER :%08X", se3208_state->ER); break; - case CPUINFO_STR_REGISTER + SE3208_SP: sprintf(info->s, "SP :%08X", se3208_state->SP); break; - case CPUINFO_STR_REGISTER + SE3208_R0: sprintf(info->s, "R0 :%08X", se3208_state->R[ 0]); break; - case CPUINFO_STR_REGISTER + SE3208_R1: sprintf(info->s, "R1 :%08X", se3208_state->R[ 1]); break; - case CPUINFO_STR_REGISTER + SE3208_R2: sprintf(info->s, "R2 :%08X", se3208_state->R[ 2]); break; - case CPUINFO_STR_REGISTER + SE3208_R3: sprintf(info->s, "R3 :%08X", se3208_state->R[ 3]); break; - case CPUINFO_STR_REGISTER + SE3208_R4: sprintf(info->s, "R4 :%08X", se3208_state->R[ 4]); break; - case CPUINFO_STR_REGISTER + SE3208_R5: sprintf(info->s, "R5 :%08X", se3208_state->R[ 5]); break; - case CPUINFO_STR_REGISTER + SE3208_R6: sprintf(info->s, "R6 :%08X", se3208_state->R[ 6]); break; - case CPUINFO_STR_REGISTER + SE3208_R7: sprintf(info->s, "R7 :%08X", se3208_state->R[ 7]); break; - case CPUINFO_STR_REGISTER + SE3208_PPC: sprintf(info->s, "PPC :%08X", se3208_state->PPC); break; + case CPUINFO_STR_REGISTER + SE3208_PC: sprintf(info->s, "PC :%08X", se3208_state->PC); break; + case CPUINFO_STR_REGISTER + SE3208_SR: sprintf(info->s, "SR :%08X", se3208_state->SR); break; + case CPUINFO_STR_REGISTER + SE3208_ER: sprintf(info->s, "ER :%08X", se3208_state->ER); break; + case CPUINFO_STR_REGISTER + SE3208_SP: sprintf(info->s, "SP :%08X", se3208_state->SP); break; + case CPUINFO_STR_REGISTER + SE3208_R0: sprintf(info->s, "R0 :%08X", se3208_state->R[ 0]); break; + case CPUINFO_STR_REGISTER + SE3208_R1: sprintf(info->s, "R1 :%08X", se3208_state->R[ 1]); break; + case CPUINFO_STR_REGISTER + SE3208_R2: sprintf(info->s, "R2 :%08X", se3208_state->R[ 2]); break; + case CPUINFO_STR_REGISTER + SE3208_R3: sprintf(info->s, "R3 :%08X", se3208_state->R[ 3]); break; + case CPUINFO_STR_REGISTER + SE3208_R4: sprintf(info->s, "R4 :%08X", se3208_state->R[ 4]); break; + case CPUINFO_STR_REGISTER + SE3208_R5: sprintf(info->s, "R5 :%08X", se3208_state->R[ 5]); break; + case CPUINFO_STR_REGISTER + SE3208_R6: sprintf(info->s, "R6 :%08X", se3208_state->R[ 6]); break; + case CPUINFO_STR_REGISTER + SE3208_R7: sprintf(info->s, "R7 :%08X", se3208_state->R[ 7]); break; + case CPUINFO_STR_REGISTER + SE3208_PPC: sprintf(info->s, "PPC :%08X", se3208_state->PPC); break; } } |