Example #1
0
void m6502_set_reg (int regnum, unsigned val)
{
	switch( regnum )
	{
		case REG_PC: PCW = val; change_pc16(PCD); break;
		case M6502_PC: m6502.pc.w.l = val; break;
		case REG_SP: S = val; break;
		case M6502_S: m6502.sp.b.l = val; break;
		case M6502_P: m6502.p = val; break;
		case M6502_A: m6502.a = val; break;
		case M6502_X: m6502.x = val; break;
		case M6502_Y: m6502.y = val; break;
		case M6502_EA: m6502.ea.w.l = val; break;
		case M6502_ZP: m6502.zp.w.l = val; break;
		case M6502_NMI_STATE: m6502_set_irq_line( IRQ_LINE_NMI, val ); break;
		case M6502_IRQ_STATE: m6502_set_irq_line( 0, val ); break;
		case M6502_SO_STATE: m6502_set_irq_line( M6502_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 );
				}
			}
Example #2
0
void s2650_set_reg(int regnum, unsigned val)
{
	switch( regnum )
	{
		case REG_PC:
			S.page = val & PAGE;
			S.iar = val & PMSK;
			change_pc16(S.page + S.iar);
			break;
		case S2650_PC: S.page = val & PAGE; S.iar = val & PMSK; break;
		case REG_SP: S.psu = (S.psu & ~SP) | (val & SP); break;
		case S2650_PS: S.psl = val & 0xff; S.psu = val >> 8; break;
		case S2650_R0: S.reg[0] = val; break;
		case S2650_R1: S.reg[1] = val; break;
		case S2650_R2: S.reg[2] = val; break;
		case S2650_R3: S.reg[3] = val; break;
		case S2650_R1A: S.reg[4] = val; break;
		case S2650_R2A: S.reg[5] = val; break;
		case S2650_R3A: S.reg[6] = val; break;
		case S2650_HALT: S.halt = val; break;
		case S2650_IRQ_STATE: s2650_set_irq_line(0, val); break;
		case S2650_SI: s2650_set_sense(val); break;
		case S2650_FO: s2650_set_flag(val); break;
		default:
			if( regnum <= REG_SP_CONTENTS )
			{
				unsigned offset = (REG_SP_CONTENTS - regnum);
				if( offset < 8 )
					S.ras[offset] = val;
			}
    }
}
Example #3
0
void konami_set_reg(int regnum, unsigned val)
{
	switch( regnum )
	{
		case REG_PC:
		case KONAMI_PC: PC = val; change_pc16(PC); break;
		case REG_SP:
		case KONAMI_S: S = val; break;
		case KONAMI_CC: CC = val; CHECK_IRQ_LINES; break;
		case KONAMI_U: U = val; break;
		case KONAMI_A: A = val; break;
		case KONAMI_B: B = val; break;
		case KONAMI_X: X = val; break;
		case KONAMI_Y: Y = val; break;
		case KONAMI_DP: DP = val; break;
		case KONAMI_NMI_STATE: konami.nmi_state = val; break;
		case KONAMI_IRQ_STATE: konami.irq_state[KONAMI_IRQ_LINE] = val; break;
		case KONAMI_FIRQ_STATE: konami.irq_state[KONAMI_FIRQ_LINE] = val; break;
		default:
			if( regnum <= REG_SP_CONTENTS )
			{
				unsigned offset = S + 2 * (REG_SP_CONTENTS - regnum);
				if( offset < 0xffff )
				{
					WM( offset, (val >> 8) & 0xff );
					WM( offset+1, val & 0xff );
				}
			}
Example #4
0
void CZ80_FASTCALL Cz80_Set_PC(cz80_struc *cpu, u32 val)
{
#ifdef CZ80_USE_MAME_CHANGE_PC
    change_pc16(val);
#endif
    cpu->PC = (u8*)&mame4all_cz80_rom[val];
}
Example #5
0
/****************************************************************************
 * Set all registers to given values
 ****************************************************************************/
void konami_set_context(void *src)
{
	if( src )
		konami = *(konami_Regs*)src;
    change_pc16(PC);    /* TS 971002 */

    CHECK_IRQ_LINES;
}
Example #6
0
void m6502_set_context (void *src)
{
	if( src )
	{
		m6502 = *(m6502_Regs*)src;
		change_pc16(PCD);
	}
}
Example #7
0
INLINE void M_CALL(UINT16 addr)
{
	push(R.PC.b.l);
	push((R.PC.b.h & 0x0f) | (R.PSW & 0xf0));
	R.PC.w.l = addr;
	#ifdef MESS
		change_pc16(addr);
	#endif

}
Example #8
0
void s2650_set_context(void *src)
{
	if( src )
	{
		S = *(s2650_Regs*)src;
		S.page = S.page & PAGE;
		S.iar = S.iar & PMSK;
        change_pc16(S.page + S.iar);
	}
}
Example #9
0
static void jmp(void)
{
	UINT8 i=M_RDOP(R.PC.w.l);
	UINT16 oldpc,newpc;

	oldpc = R.PC.w.l-1;
	R.PC.w.l = i | R.A11;
#ifdef MESS
	change_pc16(R.PC.w.l);
#endif
	newpc = R.PC.w.l;
	if (newpc == oldpc) { if (i8039_ICount > 0) i8039_ICount = 0; } /* speed up busy loop */
	else if (newpc == oldpc-1 && M_RDOP(newpc) == 0x00)	/* NOP - Gyruss */
		{ if (i8039_ICount > 0) i8039_ICount = 0; }
}
Example #10
0
void m6502_reset(void *param)
{
	m6502.subtype = SUBTYPE_6502;
    m6502.insn = insn6502;

	/* wipe out the rest of the m6502 structure */
	/* read the reset vector into PC */
    PCL = RDMEM(M6502_RST_VEC);
    PCH = RDMEM(M6502_RST_VEC+1);
	m6502.sp.d = 0x0100 | (m6502.sp.b.l);	/* stack pointer (always 100 - 1FF) */
	m6502.p = F_T|F_I|F_Z;	/* set T, I and Z flags */
	m6502.pending_irq = 0;	/* nonzero if an IRQ is pending */
	m6502.after_cli = 0;	/* pending IRQ and last insn cleared I */
	m6502.irq_callback = NULL;

	change_pc16(PCD);
}
Example #11
0
void m6502_reset(void *param)
{
	/* wipe out the rest of the m6502 structure */
	/* read the reset vector into PC */
	PCL = RDMEM(M6502_RST_VEC);
	PCH = RDMEM(M6502_RST_VEC+1);

	m6502.sp.d = 0x01ff;	/* stack pointer starts at page 1 offset FF */
	m6502.p = F_T|F_I|F_Z|F_B|(P&F_D);	/* set T, I and Z flags */
	m6502.pending_irq = 0;	/* nonzero if an IRQ is pending */
	m6502.after_cli = 0;	/* pending IRQ and last insn cleared I */
	m6502.irq_callback = NULL;
	m6502.irq_state = 0;
	m6502.nmi_state = 0;

	change_pc16(PCD);
}
Example #12
0
void m65ce02_reset (void *param)
{
	c65_map=(void(*)(int a, int x, int y, int z))param;
	m65ce02.insn = insn65ce02;

	/* wipe out the rest of the m65ce02 structure */
	/* read the reset vector into PC */
	/* reset z index and b bank */
	PCL = RDMEM(M65CE02_RST_VEC);
	PCH = RDMEM(M65CE02_RST_VEC+1);

	m65ce02.sp.d = 0x01ff;
	m65ce02.p = F_T|F_I|F_Z;	/* set T, I and Z flags */
	m65ce02.pending_irq = 0;	/* nonzero if an IRQ is pending */
	m65ce02.after_cli = 0;		/* pending IRQ and last insn cleared I */
	m65ce02.irq_callback = NULL;

	change_pc16(PCD);
}
Example #13
0
static void retr(void)
{
	UINT8 i=pull();
	R.PC.w.l = ((i & 0x0f) << 8) | pull();
	#ifdef MESS
		change_pc16(R.PC.w.l);
	#endif
//	R.A11 = R.A11ff;	/* NS990113 */
	R.PSW = (R.PSW & 0x0f) | (i & 0xf0);	/* Stack is already changed by pull */
	regPTR = ((M_By) ? 24 : 0);

	R.irq_executing = I8039_NO_INT;

	/* Take an interrupt if a request is still being made */
	if (R.irq_state == I8039_EXTERNAL_INT) {
		R.irq_extra_cycles += Ext_IRQ();			/* Service External IRQ */
	}
	else if (R.pending_irq == I8039_TIMCNT_INT) {
		R.irq_extra_cycles += Timer_IRQ();			/* Service pending Timer/Counter IRQ */
	}
}
Example #14
0
	static void jmp_7(void)	 	 { UINT8 i=M_RDOP(R.PC.w.l); R.PC.w.l = i | 0x700 | R.A11; change_pc16(R.PC.w.l); }
Example #15
0
/****************************************************************************
 * Set program counter
 ****************************************************************************/
void konami_set_pc(unsigned val)
{
	PC = val;
	change_pc16(PC);
}
Example #16
0
	static void jmpp_xa(void)	 { UINT16 addr = (R.PC.w.l & 0xf00) | R.A; R.PC.w.l = (R.PC.w.l & 0xf00) | M_RDMEM(addr); change_pc16(R.PC.w.l); }
Example #17
0
	static void jni(void)	 	 { UINT8 i=M_RDMEM_OPCODE(); if (R.irq_state == I8039_EXTERNAL_INT) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; change_pc16(R.PC.w.l); } else ADJUST_CYCLES }
Example #18
0
	static void jt_1(void)	 	 { UINT8 i=M_RDMEM_OPCODE(); if (test_r(1))  { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; change_pc16(R.PC.w.l); } else ADJUST_CYCLES }
Example #19
0
	static void djnz_r7(void)	{ UINT8 i=M_RDMEM_OPCODE(); R7--; if (R7 != 0) { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; change_pc16(R.PC.w.l); } else ADJUST_CYCLES }
Example #20
0
	static void ret(void)	 { R.PC.w.l = ((pull() & 0x0f) << 8); R.PC.w.l |= pull(); change_pc16(R.PC.w.l); }
Example #21
0
	static void jtf(void)	 	 { UINT8 i=M_RDMEM_OPCODE(); if (R.t_flag)	 { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; change_pc16(R.PC.w.l); R.t_flag = 0; } else ADJUST_CYCLES }
Example #22
0
	static void jz(void)	 	 { UINT8 i=M_RDMEM_OPCODE(); if (R.A == 0)	 { R.PC.w.l = ((R.PC.w.l-1) & 0xf00) | i; change_pc16(R.PC.w.l); } else ADJUST_CYCLES }