diff options
Diffstat (limited to 'src/emu/cpu/nec/v25.c')
-rw-r--r-- | src/emu/cpu/nec/v25.c | 300 |
1 files changed, 150 insertions, 150 deletions
diff --git a/src/emu/cpu/nec/v25.c b/src/emu/cpu/nec/v25.c index 6a32dec72c2..39501514750 100644 --- a/src/emu/cpu/nec/v25.c +++ b/src/emu/cpu/nec/v25.c @@ -76,11 +76,11 @@ static void do_prefetch(v25_state_t *nec_state, int previous_ICount) int diff = previous_ICount - (int) nec_state->icount; /* The implementation is not accurate, but comes close. - * It does not respect that the V30 will fetch two bytes - * at once directly, but instead uses only 2 cycles instead - * of 4. There are however only very few sources publicly - * available and they are vague. - */ + * It does not respect that the V30 will fetch two bytes + * at once directly, but instead uses only 2 cycles instead + * of 4. There are however only very few sources publicly + * available and they are vague. + */ while (nec_state->prefetch_count<0) { nec_state->prefetch_count++; @@ -215,32 +215,32 @@ static CPU_EXIT( v25 ) static void nec_interrupt(v25_state_t *nec_state, unsigned int_num, INTSOURCES source) { - UINT32 dest_seg, dest_off; + UINT32 dest_seg, dest_off; - i_pushf(nec_state); + i_pushf(nec_state); nec_state->TF = nec_state->IF = 0; nec_state->MF = nec_state->mode_state; switch(source) { - case BRKN: /* force native mode */ + case BRKN: /* force native mode */ nec_state->MF = 1; break; - case BRKS: /* force secure mode */ + case BRKS: /* force secure mode */ if (nec_state->config->v25v35_decryptiontable) nec_state->MF = 0; else logerror("%06x: BRKS executed with no decryption table\n",PC(nec_state)); break; - case INT_IRQ: /* get vector */ + case INT_IRQ: /* get vector */ int_num = (*nec_state->irq_callback)(nec_state->device, 0); break; default: break; } - dest_off = read_mem_word(int_num*4); - dest_seg = read_mem_word(int_num*4+2); + dest_off = read_mem_word(int_num*4); + dest_seg = read_mem_word(int_num*4+2); PUSH(Sreg(PS)); PUSH(nec_state->ip); @@ -271,19 +271,19 @@ static void nec_trap(v25_state_t *nec_state) } #define INTERRUPT(source, vector, priority) \ - if(pending & (source)) { \ - nec_state->IRQS = vector; \ - nec_state->ISPR |= (1 << (priority)); \ - nec_state->pending_irq &= ~(source); \ - if(nec_state->bankswitch_irq & (source)) \ - nec_bankswitch(nec_state, priority); \ - else \ - nec_interrupt(nec_state, vector, source); \ - break; /* break out of loop */ \ + if(pending & (source)) { \ + nec_state->IRQS = vector; \ + nec_state->ISPR |= (1 << (priority)); \ + nec_state->pending_irq &= ~(source); \ + if(nec_state->bankswitch_irq & (source)) \ + nec_bankswitch(nec_state, priority); \ + else \ + nec_interrupt(nec_state, vector, source); \ + break; /* break out of loop */ \ } /* interrupt sources subject to priority control */ -#define SOURCES (INTTU0 | INTTU1 | INTTU2 | INTD0 | INTD1 | INTP0 | INTP1 | INTP2 \ +#define SOURCES (INTTU0 | INTTU1 | INTTU2 | INTD0 | INTD1 | INTP0 | INTP1 | INTP2 \ | INTSER0 | INTSR0 | INTST0 | INTSER1 | INTSR1 | INTST1 | INTTB) static void external_int(v25_state_t *nec_state) @@ -374,7 +374,7 @@ static void set_irq_line(v25_state_t *nec_state, int irqline, int state) break; case INPUT_LINE_NMI: if (nec_state->nmi_state == state) return; - nec_state->nmi_state = state; + nec_state->nmi_state = state; if (state != CLEAR_LINE) { nec_state->pending_irq |= NMI_IRQ; @@ -551,7 +551,7 @@ static CPU_EXECUTE( v25 ) prev_ICount = nec_state->icount; nec_instruction[fetchop(nec_state)](nec_state); do_prefetch(nec_state, prev_ICount); - } + } } /* Wrappers for the different CPU types */ @@ -562,8 +562,8 @@ static CPU_INIT( v25 ) v25_init(device, irqcallback); nec_state->fetch_xor = 0; nec_state->chip_type=V20_TYPE; - nec_state->prefetch_size = 4; /* 3 words */ - nec_state->prefetch_cycles = 4; /* four cycles per byte */ + nec_state->prefetch_size = 4; /* 3 words */ + nec_state->prefetch_cycles = 4; /* four cycles per byte */ } static CPU_INIT( v35 ) @@ -573,8 +573,8 @@ static CPU_INIT( v35 ) v25_init(device, irqcallback); nec_state->fetch_xor = BYTE_XOR_LE(0); nec_state->chip_type=V30_TYPE; - nec_state->prefetch_size = 6; /* 3 words */ - nec_state->prefetch_cycles = 2; /* two cycles per byte / four per word */ + nec_state->prefetch_size = 6; /* 3 words */ + nec_state->prefetch_cycles = 2; /* two cycles per byte / four per word */ } @@ -591,12 +591,12 @@ static CPU_SET_INFO( v25 ) switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(nec_state, 0, info->i); break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(nec_state, INPUT_LINE_NMI, info->i); break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP0: set_irq_line(nec_state, NEC_INPUT_LINE_INTP0, info->i); break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP1: set_irq_line(nec_state, NEC_INPUT_LINE_INTP1, info->i); break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP2: set_irq_line(nec_state, NEC_INPUT_LINE_INTP2, info->i); break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_POLL: set_irq_line(nec_state, NEC_INPUT_LINE_POLL, info->i); break; + case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(nec_state, 0, info->i); break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(nec_state, INPUT_LINE_NMI, info->i); break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP0: set_irq_line(nec_state, NEC_INPUT_LINE_INTP0, info->i); break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP1: set_irq_line(nec_state, NEC_INPUT_LINE_INTP1, info->i); break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP2: set_irq_line(nec_state, NEC_INPUT_LINE_INTP2, info->i); break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_POLL: set_irq_line(nec_state, NEC_INPUT_LINE_POLL, info->i); break; case CPUINFO_INT_PC: case CPUINFO_INT_REGISTER + NEC_PC: @@ -610,7 +610,7 @@ static CPU_SET_INFO( v25 ) nec_state->ip = info->i & 0x0000f; } break; - case CPUINFO_INT_REGISTER + NEC_IP: nec_state->ip = info->i; break; + case CPUINFO_INT_REGISTER + NEC_IP: nec_state->ip = info->i; break; case CPUINFO_INT_SP: if( info->i - (Sreg(SS)<<4) < 0x10000 ) { @@ -622,19 +622,19 @@ static CPU_SET_INFO( v25 ) Wreg(SP) = info->i & 0x0000f; } break; - case CPUINFO_INT_REGISTER + NEC_SP: Wreg(SP) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_FLAGS: ExpandFlags(info->i); break; - case CPUINFO_INT_REGISTER + NEC_AW: Wreg(AW) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_CW: Wreg(CW) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_DW: Wreg(DW) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_BW: Wreg(BW) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_BP: Wreg(BP) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_IX: Wreg(IX) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_IY: Wreg(IY) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_ES: Sreg(DS1) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_CS: Sreg(PS) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_SS: Sreg(SS) = info->i; break; - case CPUINFO_INT_REGISTER + NEC_DS: Sreg(DS0) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_SP: Wreg(SP) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_FLAGS: ExpandFlags(info->i); break; + case CPUINFO_INT_REGISTER + NEC_AW: Wreg(AW) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_CW: Wreg(CW) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_DW: Wreg(DW) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_BW: Wreg(BW) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_BP: Wreg(BP) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_IX: Wreg(IX) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_IY: Wreg(IY) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_ES: Sreg(DS1) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_CS: Sreg(PS) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_SS: Sreg(SS) = info->i; break; + case CPUINFO_INT_REGISTER + NEC_DS: Sreg(DS0) = info->i; break; } } @@ -652,106 +652,106 @@ static CPU_GET_INFO( v25v35 ) switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(v25_state_t); break; - case CPUINFO_INT_INPUT_LINES: info->i = 1; break; - case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0xff; 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 = 2; break; - case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 1; break; - case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 8; break; - case CPUINFO_INT_MIN_CYCLES: info->i = 1; break; - case CPUINFO_INT_MAX_CYCLES: info->i = 80; break; - - case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 16; break; - case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 20; 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 = 16; break; - case CPUINFO_INT_ADDRBUS_WIDTH + AS_IO: info->i = 17; break; - case CPUINFO_INT_ADDRBUS_SHIFT + AS_IO: info->i = 0; break; - - case CPUINFO_INT_INPUT_STATE + 0: info->i = (nec_state->pending_irq & INT_IRQ) ? ASSERT_LINE : CLEAR_LINE; break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = nec_state->nmi_state; break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP0: info->i = nec_state->intp_state[0]; break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP1: info->i = nec_state->intp_state[1]; break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP2: info->i = nec_state->intp_state[2]; break; - case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_POLL: info->i = nec_state->poll_state; break; - - case CPUINFO_INT_PREVIOUSPC: /* not supported */ break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(v25_state_t); break; + case CPUINFO_INT_INPUT_LINES: info->i = 1; break; + case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0xff; 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 = 2; break; + case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 1; break; + case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 8; break; + case CPUINFO_INT_MIN_CYCLES: info->i = 1; break; + case CPUINFO_INT_MAX_CYCLES: info->i = 80; break; + + case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 16; break; + case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 20; 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 = 16; break; + case CPUINFO_INT_ADDRBUS_WIDTH + AS_IO: info->i = 17; break; + case CPUINFO_INT_ADDRBUS_SHIFT + AS_IO: info->i = 0; break; + + case CPUINFO_INT_INPUT_STATE + 0: info->i = (nec_state->pending_irq & INT_IRQ) ? ASSERT_LINE : CLEAR_LINE; break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = nec_state->nmi_state; break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP0: info->i = nec_state->intp_state[0]; break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP1: info->i = nec_state->intp_state[1]; break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_INTP2: info->i = nec_state->intp_state[2]; break; + case CPUINFO_INT_INPUT_STATE + NEC_INPUT_LINE_POLL: info->i = nec_state->poll_state; break; + + case CPUINFO_INT_PREVIOUSPC: /* not supported */ break; case CPUINFO_INT_PC: - case CPUINFO_INT_REGISTER + NEC_PC: info->i = ((Sreg(PS)<<4) + nec_state->ip); break; - case CPUINFO_INT_REGISTER + NEC_IP: info->i = nec_state->ip; break; - case CPUINFO_INT_SP: info->i = (Sreg(SS)<<4) + Wreg(SP); break; - case CPUINFO_INT_REGISTER + NEC_SP: info->i = Wreg(SP); break; - case CPUINFO_INT_REGISTER + NEC_FLAGS: info->i = CompressFlags(); break; - case CPUINFO_INT_REGISTER + NEC_AW: info->i = Wreg(AW); break; - case CPUINFO_INT_REGISTER + NEC_CW: info->i = Wreg(CW); break; - case CPUINFO_INT_REGISTER + NEC_DW: info->i = Wreg(DW); break; - case CPUINFO_INT_REGISTER + NEC_BW: info->i = Wreg(BW); break; - case CPUINFO_INT_REGISTER + NEC_BP: info->i = Wreg(BP); break; - case CPUINFO_INT_REGISTER + NEC_IX: info->i = Wreg(IX); break; - case CPUINFO_INT_REGISTER + NEC_IY: info->i = Wreg(IY); break; - case CPUINFO_INT_REGISTER + NEC_ES: info->i = Sreg(DS1); break; - case CPUINFO_INT_REGISTER + NEC_CS: info->i = Sreg(PS); break; - case CPUINFO_INT_REGISTER + NEC_SS: info->i = Sreg(SS); break; - case CPUINFO_INT_REGISTER + NEC_DS: info->i = Sreg(DS0); break; - case CPUINFO_INT_REGISTER + NEC_PENDING: info->i = nec_state->pending_irq; break; + case CPUINFO_INT_REGISTER + NEC_PC: info->i = ((Sreg(PS)<<4) + nec_state->ip); break; + case CPUINFO_INT_REGISTER + NEC_IP: info->i = nec_state->ip; break; + case CPUINFO_INT_SP: info->i = (Sreg(SS)<<4) + Wreg(SP); break; + case CPUINFO_INT_REGISTER + NEC_SP: info->i = Wreg(SP); break; + case CPUINFO_INT_REGISTER + NEC_FLAGS: info->i = CompressFlags(); break; + case CPUINFO_INT_REGISTER + NEC_AW: info->i = Wreg(AW); break; + case CPUINFO_INT_REGISTER + NEC_CW: info->i = Wreg(CW); break; + case CPUINFO_INT_REGISTER + NEC_DW: info->i = Wreg(DW); break; + case CPUINFO_INT_REGISTER + NEC_BW: info->i = Wreg(BW); break; + case CPUINFO_INT_REGISTER + NEC_BP: info->i = Wreg(BP); break; + case CPUINFO_INT_REGISTER + NEC_IX: info->i = Wreg(IX); break; + case CPUINFO_INT_REGISTER + NEC_IY: info->i = Wreg(IY); break; + case CPUINFO_INT_REGISTER + NEC_ES: info->i = Sreg(DS1); break; + case CPUINFO_INT_REGISTER + NEC_CS: info->i = Sreg(PS); break; + case CPUINFO_INT_REGISTER + NEC_SS: info->i = Sreg(SS); break; + case CPUINFO_INT_REGISTER + NEC_DS: info->i = Sreg(DS0); break; + case CPUINFO_INT_REGISTER + NEC_PENDING: info->i = nec_state->pending_irq; 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(v25); break; - case CPUINFO_FCT_INIT: /* set per-CPU */ break; - case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(v25); break; - case CPUINFO_FCT_EXIT: info->exit = CPU_EXIT_NAME(v25); break; - case CPUINFO_FCT_EXECUTE: info->execute = CPU_EXECUTE_NAME(v25); break; - case CPUINFO_FCT_BURN: info->burn = NULL; break; - case CPUINFO_FCT_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(v25); break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &nec_state->icount; break; + case CPUINFO_FCT_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(v25); break; + case CPUINFO_FCT_INIT: /* set per-CPU */ break; + case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(v25); break; + case CPUINFO_FCT_EXIT: info->exit = CPU_EXIT_NAME(v25); break; + case CPUINFO_FCT_EXECUTE: info->execute = CPU_EXECUTE_NAME(v25); break; + case CPUINFO_FCT_BURN: info->burn = NULL; break; + case CPUINFO_FCT_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(v25); break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &nec_state->icount; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ - case CPUINFO_STR_NAME: strcpy(info->s, "NEC"); break; - case CPUINFO_STR_FAMILY: strcpy(info->s, "NEC V-Series"); break; - case CPUINFO_STR_VERSION: strcpy(info->s, "2.0"); break; - case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; - case CPUINFO_STR_CREDITS: strcpy(info->s, "Bryan McPhail (V25/V35 support added by Alex W. Jackson)"); break; + case CPUINFO_STR_NAME: strcpy(info->s, "NEC"); break; + case CPUINFO_STR_FAMILY: strcpy(info->s, "NEC V-Series"); break; + case CPUINFO_STR_VERSION: strcpy(info->s, "2.0"); break; + case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; + case CPUINFO_STR_CREDITS: strcpy(info->s, "Bryan McPhail (V25/V35 support added by Alex W. Jackson)"); break; case CPUINFO_STR_FLAGS: - flags = CompressFlags(); - sprintf(info->s, "%c %d %c%c%c%c%c%c%c%c%c%c%c%c", - flags & 0x8000 ? 'N':'S', - (flags & 0x7000) >> 12, - flags & 0x0800 ? 'O':'.', - flags & 0x0400 ? 'D':'.', - flags & 0x0200 ? 'I':'.', - flags & 0x0100 ? 'T':'.', - flags & 0x0080 ? 'S':'.', - flags & 0x0040 ? 'Z':'.', - flags & 0x0020 ? '1':'.', - flags & 0x0010 ? 'A':'.', - flags & 0x0008 ? '0':'.', - flags & 0x0004 ? 'P':'.', - flags & 0x0002 ? '.':'I', - flags & 0x0001 ? 'C':'.'); - break; - - case CPUINFO_STR_REGISTER + NEC_PC: sprintf(info->s, "PC:%05X", (Sreg(PS)<<4) + nec_state->ip); break; - case CPUINFO_STR_REGISTER + NEC_IP: sprintf(info->s, "IP:%04X", nec_state->ip); break; - case CPUINFO_STR_REGISTER + NEC_SP: sprintf(info->s, "SP:%04X", Wreg(SP)); break; - case CPUINFO_STR_REGISTER + NEC_FLAGS: sprintf(info->s, "F:%04X", CompressFlags()); break; - case CPUINFO_STR_REGISTER + NEC_AW: sprintf(info->s, "AW:%04X", Wreg(AW)); break; - case CPUINFO_STR_REGISTER + NEC_CW: sprintf(info->s, "CW:%04X", Wreg(CW)); break; - case CPUINFO_STR_REGISTER + NEC_DW: sprintf(info->s, "DW:%04X", Wreg(DW)); break; - case CPUINFO_STR_REGISTER + NEC_BW: sprintf(info->s, "BW:%04X", Wreg(BW)); break; - case CPUINFO_STR_REGISTER + NEC_BP: sprintf(info->s, "BP:%04X", Wreg(BP)); break; - case CPUINFO_STR_REGISTER + NEC_IX: sprintf(info->s, "IX:%04X", Wreg(IX)); break; - case CPUINFO_STR_REGISTER + NEC_IY: sprintf(info->s, "IY:%04X", Wreg(IY)); break; - case CPUINFO_STR_REGISTER + NEC_ES: sprintf(info->s, "DS1:%04X", Sreg(DS1)); break; - case CPUINFO_STR_REGISTER + NEC_CS: sprintf(info->s, "PS:%04X", Sreg(PS)); break; - case CPUINFO_STR_REGISTER + NEC_SS: sprintf(info->s, "SS:%04X", Sreg(SS)); break; - case CPUINFO_STR_REGISTER + NEC_DS: sprintf(info->s, "DS0:%04X", Sreg(DS0)); break; + flags = CompressFlags(); + sprintf(info->s, "%c %d %c%c%c%c%c%c%c%c%c%c%c%c", + flags & 0x8000 ? 'N':'S', + (flags & 0x7000) >> 12, + flags & 0x0800 ? 'O':'.', + flags & 0x0400 ? 'D':'.', + flags & 0x0200 ? 'I':'.', + flags & 0x0100 ? 'T':'.', + flags & 0x0080 ? 'S':'.', + flags & 0x0040 ? 'Z':'.', + flags & 0x0020 ? '1':'.', + flags & 0x0010 ? 'A':'.', + flags & 0x0008 ? '0':'.', + flags & 0x0004 ? 'P':'.', + flags & 0x0002 ? '.':'I', + flags & 0x0001 ? 'C':'.'); + break; + + case CPUINFO_STR_REGISTER + NEC_PC: sprintf(info->s, "PC:%05X", (Sreg(PS)<<4) + nec_state->ip); break; + case CPUINFO_STR_REGISTER + NEC_IP: sprintf(info->s, "IP:%04X", nec_state->ip); break; + case CPUINFO_STR_REGISTER + NEC_SP: sprintf(info->s, "SP:%04X", Wreg(SP)); break; + case CPUINFO_STR_REGISTER + NEC_FLAGS: sprintf(info->s, "F:%04X", CompressFlags()); break; + case CPUINFO_STR_REGISTER + NEC_AW: sprintf(info->s, "AW:%04X", Wreg(AW)); break; + case CPUINFO_STR_REGISTER + NEC_CW: sprintf(info->s, "CW:%04X", Wreg(CW)); break; + case CPUINFO_STR_REGISTER + NEC_DW: sprintf(info->s, "DW:%04X", Wreg(DW)); break; + case CPUINFO_STR_REGISTER + NEC_BW: sprintf(info->s, "BW:%04X", Wreg(BW)); break; + case CPUINFO_STR_REGISTER + NEC_BP: sprintf(info->s, "BP:%04X", Wreg(BP)); break; + case CPUINFO_STR_REGISTER + NEC_IX: sprintf(info->s, "IX:%04X", Wreg(IX)); break; + case CPUINFO_STR_REGISTER + NEC_IY: sprintf(info->s, "IY:%04X", Wreg(IY)); break; + case CPUINFO_STR_REGISTER + NEC_ES: sprintf(info->s, "DS1:%04X", Sreg(DS1)); break; + case CPUINFO_STR_REGISTER + NEC_CS: sprintf(info->s, "PS:%04X", Sreg(PS)); break; + case CPUINFO_STR_REGISTER + NEC_SS: sprintf(info->s, "SS:%04X", Sreg(SS)); break; + case CPUINFO_STR_REGISTER + NEC_DS: sprintf(info->s, "DS0:%04X", Sreg(DS0)); break; } } @@ -765,16 +765,16 @@ CPU_GET_INFO( v25 ) switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 8; break; - case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 8; break; + case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 8; break; + case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 8; break; /* --- the following bits of info are returned as pointers to data or functions --- */ - case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(v25); break; + case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(v25); break; /* --- the following bits of info are returned as NULL-terminated strings --- */ - case CPUINFO_STR_NAME: strcpy(info->s, "V25"); break; + case CPUINFO_STR_NAME: strcpy(info->s, "V25"); break; - default: CPU_GET_INFO_CALL(v25v35); break; + default: CPU_GET_INFO_CALL(v25v35); break; } } @@ -788,16 +788,16 @@ CPU_GET_INFO( v35 ) switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 16; break; - case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 16; break; + case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 16; break; + case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 16; break; /* --- the following bits of info are returned as pointers to data or functions --- */ - case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(v35); break; + case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(v35); break; /* --- the following bits of info are returned as NULL-terminated strings --- */ - case CPUINFO_STR_NAME: strcpy(info->s, "V35"); break; + case CPUINFO_STR_NAME: strcpy(info->s, "V35"); break; - default: CPU_GET_INFO_CALL(v25v35); break; + default: CPU_GET_INFO_CALL(v25v35); break; } } |