static CPU_SET_INFO( m6509 ) { m6509_Regs *cpustate = get_safe_token(device); switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ case CPUINFO_INT_INPUT_STATE + M6509_IRQ_LINE: m6509_set_irq_line(cpustate, M6509_IRQ_LINE, info->i); break; case CPUINFO_INT_INPUT_STATE + M6509_SET_OVERFLOW:m6509_set_irq_line(cpustate, M6509_SET_OVERFLOW, info->i); break; case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: m6509_set_irq_line(cpustate, INPUT_LINE_NMI, info->i); break; case CPUINFO_INT_PC: PCW = info->i; break; case CPUINFO_INT_REGISTER + M6509_PC: cpustate->pc.w.l = info->i; break; case CPUINFO_INT_SP: S = info->i; break; case CPUINFO_INT_REGISTER + M6509_S: cpustate->sp.b.l = info->i; break; case CPUINFO_INT_REGISTER + M6509_P: cpustate->p = info->i; break; case CPUINFO_INT_REGISTER + M6509_A: cpustate->a = info->i; break; case CPUINFO_INT_REGISTER + M6509_X: cpustate->x = info->i; break; case CPUINFO_INT_REGISTER + M6509_Y: cpustate->y = info->i; break; case CPUINFO_INT_REGISTER + M6509_PC_BANK: cpustate->pc_bank.b.h2 = info->i; break; case CPUINFO_INT_REGISTER + M6509_IND_BANK: cpustate->ind_bank.b.h2 = info->i; break; case CPUINFO_INT_REGISTER + M6509_EA: cpustate->ea.w.l = info->i; break; case CPUINFO_INT_REGISTER + M6509_ZP: cpustate->zp.w.l = info->i; break; } }
void m6509_set_reg (int regnum, unsigned val) { switch( regnum ) { case M6509_PC: m6509.pc.w.l = val; break; case M6509_S: m6509.sp.b.l = val; break; case M6509_P: m6509.p = val; break; case M6509_A: m6509.a = val; break; case M6509_X: m6509.x = val; break; case M6509_Y: m6509.y = val; break; case M6509_PC_BANK: m6509.pc_bank.b.h2 = val; break; case M6509_IND_BANK: m6509.ind_bank.b.h2 = val; break; case M6509_EA: m6509.ea.d = val; break; case M6509_ZP: m6509.zp.b.l = val; break; case M6509_NMI_STATE: m6509_set_nmi_line( val ); break; case M6509_IRQ_STATE: m6509_set_irq_line( 0, val ); break; case M6509_SO_STATE: m6509_set_irq_line( M6509_SET_OVERFLOW, val ); break; default: if( regnum <= REG_SP_CONTENTS ) { unsigned offset = S + 2 * (REG_SP_CONTENTS - regnum); if( offset < 0x1ff ) { WRMEM( offset, val & 0xfff ); WRMEM( offset + 1, (val >> 8) & 0xff ); } }
static void m6509_set_info(UINT32 state, union cpuinfo *info) { switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ case CPUINFO_INT_INPUT_STATE + M6509_IRQ_LINE: m6509_set_irq_line(M6509_IRQ_LINE, info->i); break; case CPUINFO_INT_INPUT_STATE + M6509_SET_OVERFLOW:m6509_set_irq_line(M6509_SET_OVERFLOW, info->i); break; case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: m6509_set_irq_line(INPUT_LINE_NMI, info->i); break; case CPUINFO_INT_PC: PCW = info->i; change_pc(PCD); break; case CPUINFO_INT_REGISTER + M6509_PC: m6509.pc.w.l = info->i; break; case CPUINFO_INT_SP: S = info->i; break; case CPUINFO_INT_REGISTER + M6509_S: m6509.sp.b.l = info->i; break; case CPUINFO_INT_REGISTER + M6509_P: m6509.p = info->i; break; case CPUINFO_INT_REGISTER + M6509_A: m6509.a = info->i; break; case CPUINFO_INT_REGISTER + M6509_X: m6509.x = info->i; break; case CPUINFO_INT_REGISTER + M6509_Y: m6509.y = info->i; break; case CPUINFO_INT_REGISTER + M6509_PC_BANK: m6509.pc_bank.b.h2 = info->i; break; case CPUINFO_INT_REGISTER + M6509_IND_BANK: m6509.ind_bank.b.h2 = info->i; break; case CPUINFO_INT_REGISTER + M6509_EA: m6509.ea.w.l = info->i; break; case CPUINFO_INT_REGISTER + M6509_ZP: m6509.zp.w.l = info->i; break; /* --- the following bits of info are set as pointers to data or functions --- */ case CPUINFO_PTR_IRQ_CALLBACK: m6509.irq_callback = info->irqcallback; break; case CPUINFO_PTR_M6502_READINDEXED_CALLBACK: m6509.rdmem_id = (read8_handler) info->f; break; case CPUINFO_PTR_M6502_WRITEINDEXED_CALLBACK: m6509.wrmem_id = (write8_handler) info->f; break; } }