⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opcode4.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        WORD src = get_word(srca);
        regs.sr = src;
        MakeFromSR();
}}}}
void op_46fa(void) /* MV2SR */
{
{if (!regs.s) { regs.pc -= 2; Exception(8,0); } else
{{      CPTR srca = m68k_getpc();
        srca += (LONG)(WORD)nextiword();
{       WORD src = get_word(srca);
        regs.sr = src;
        MakeFromSR();
}}}}}
void op_46fb(void) /* MV2SR */
{
{if (!regs.s) { regs.pc -= 2; Exception(8,0); } else
{{      CPTR srca = get_disp_ea(m68k_getpc());
{       WORD src = get_word(srca);
        regs.sr = src;
        MakeFromSR();
}}}}}
void op_46fc(void) /* MV2SR */
{
{if (!regs.s) { regs.pc -= 2; Exception(8,0); } else
{{      WORD src = nextiword();
        regs.sr = src;
        MakeFromSR();
}}}}
void op_4800(void) /* NBCD */
{
        ULONG srcreg = (opcode & 7);
{{      BYTE src = regs.d[srcreg].B.l;
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        regs.d[srcreg].B.l = newv;
}}}}
void op_4810(void) /* NBCD */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg];
        BYTE src = get_byte(srca);
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}
void op_4818(void) /* NBCD */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg];
        BYTE src = get_byte(srca);
{       regs.a[srcreg] += areg_byteinc[srcreg];
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}}
void op_4820(void) /* NBCD */
{
        ULONG srcreg = (opcode & 7);
{{      regs.a[srcreg] -= areg_byteinc[srcreg];
{       CPTR srca = regs.a[srcreg];
        BYTE src = get_byte(srca);
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}}
void op_4828(void) /* NBCD */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
        BYTE src = get_byte(srca);
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}
void op_4830(void) /* NBCD */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = get_disp_ea(regs.a[srcreg]);
{       BYTE src = get_byte(srca);
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}}
void op_4838(void) /* NBCD */
{
{{      CPTR srca = (LONG)(WORD)nextiword();
        BYTE src = get_byte(srca);
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}
void op_4839(void) /* NBCD */
{
{{      CPTR srca = nextilong();
        BYTE src = get_byte(srca);
{       UWORD newv_lo = - (src & 0xF) - (regs.x ? 1 : 0);
        UWORD newv_hi = - (src & 0xF0);
        UWORD newv;
        if (newv_lo > 9) { newv_lo-=6; newv_hi-=0x10; }
        newv = newv_hi + (newv_lo & 0xF);       CFLG = regs.x = (newv_hi & 0x1F0) > 0x90;
        if (CFLG) newv -= 0x60;
        if (((BYTE)(newv)) != 0) ZFLG = 0;
        NFLG = ((BYTE)(newv)) < 0;
        put_byte(srca,newv);
}}}}
void op_4840(void) /* SWAP */
{
        ULONG srcreg = (opcode & 7);
{{      LONG src = regs.d[srcreg].D;
{       ULONG dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16);
        CLEARFLGS;
        ZFLG = ((LONG)(dst)) == 0;
        NFLG = ((LONG)(dst)) < 0;
        regs.d[srcreg].D = (dst);
}}}}
void op_4850(void) /* PEA */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg];
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_4868(void) /* PEA */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_4870(void) /* PEA */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = get_disp_ea(regs.a[srcreg]);
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_4878(void) /* PEA */
{
{{      CPTR srca = (LONG)(WORD)nextiword();
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_4879(void) /* PEA */
{
{{      CPTR srca = nextilong();
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_487a(void) /* PEA */
{
{{      CPTR srca = m68k_getpc();
        srca += (LONG)(WORD)nextiword();
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_487b(void) /* PEA */
{
{{      CPTR srca = get_disp_ea(m68k_getpc());
{       regs.a[7] -= 4;
{       CPTR dsta = regs.a[7];
        put_long(dsta,srca);
}}}}}
void op_4880(void) /* EXT */
{
        ULONG srcreg = (opcode & 7);
{{      LONG src = regs.d[srcreg].D;
{       UWORD dst = (WORD)(BYTE)src;
        CLEARFLGS;
        ZFLG = ((WORD)(dst)) == 0;
        NFLG = ((WORD)(dst)) < 0;
        regs.d[srcreg].W.l = dst;
}}}}
void op_4890(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{       CPTR srca = regs.a[dstreg];
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_word(srca, regs.d[movem_index1[dmask]].D); srca += 2; dmask = movem_next[dmask]; MC68000_ICount -= 4; }
        while (amask) { put_word(srca, regs.a[movem_index1[amask]]); srca += 2; amask = movem_next[amask]; MC68000_ICount -= 4; }
}}}}
void op_48a0(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{{      CPTR srca = regs.a[dstreg];
{       UWORD amask = mask & 0xff, dmask = (mask >> 8) & 0xff;
        while (amask) { srca -= 2; put_word(srca, regs.a[movem_index2[amask]]); amask = movem_next[amask]; MC68000_ICount -= 4; }
	while (dmask) { srca -= 2; put_word(srca, regs.d[movem_index2[dmask]].D); dmask = movem_next[dmask]; MC68000_ICount -= 4; }
        regs.a[dstreg] = srca;
}}}}}
void op_48a8(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{       CPTR srca = regs.a[dstreg] + (LONG)(WORD)nextiword();
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_word(srca, regs.d[movem_index1[dmask]].D); srca += 2; dmask = movem_next[dmask]; MC68000_ICount -= 4; }
        while (amask) { put_word(srca, regs.a[movem_index1[amask]]); srca += 2; amask = movem_next[amask]; MC68000_ICount -= 4; }
}}}}
void op_48b0(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{       CPTR srca = get_disp_ea(regs.a[dstreg]);
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_word(srca, regs.d[movem_index1[dmask]].D); srca += 2; dmask = movem_next[dmask]; MC68000_ICount -= 4; }
        while (amask) { put_word(srca, regs.a[movem_index1[amask]]); srca += 2; amask = movem_next[amask]; MC68000_ICount -= 4; }
}}}}
void op_48b8(void) /* MVMLE */
{
{       UWORD mask = nextiword();
{       CPTR srca = (LONG)(WORD)nextiword();
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_word(srca, regs.d[movem_index1[dmask]].D); srca += 2; dmask = movem_next[dmask]; MC68000_ICount -= 4; }
        while (amask) { put_word(srca, regs.a[movem_index1[amask]]); srca += 2; amask = movem_next[amask]; MC68000_ICount -= 4; }
}}}}
void op_48b9(void) /* MVMLE */
{
{       UWORD mask = nextiword();
{       CPTR srca = nextilong();
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_word(srca, regs.d[movem_index1[dmask]].D); srca += 2; dmask = movem_next[dmask]; MC68000_ICount -= 4; }
        while (amask) { put_word(srca, regs.a[movem_index1[amask]]); srca += 2; amask = movem_next[amask]; MC68000_ICount -= 4; }
}}}}
void op_48c0(void) /* EXT */
{
        ULONG srcreg = (opcode & 7);
{{      LONG src = regs.d[srcreg].D;
{       ULONG dst = (LONG)(WORD)src;
        CLEARFLGS;
        ZFLG = ((LONG)(dst)) == 0;
        NFLG = ((LONG)(dst)) < 0;
        regs.d[srcreg].D = (dst);
}}}}
void op_48d0(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{       CPTR srca = regs.a[dstreg];
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_long(srca, regs.d[movem_index1[dmask]].D); srca += 4; dmask = movem_next[dmask]; MC68000_ICount -= 8; }
        while (amask) { put_long(srca, regs.a[movem_index1[amask]]); srca += 4; amask = movem_next[amask]; MC68000_ICount -= 8; }
}}}}
void op_48e0(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{{      CPTR srca = regs.a[dstreg];
{       UWORD amask = mask & 0xff, dmask = (mask >> 8) & 0xff;
        while (amask) { srca -= 4; put_long(srca, regs.a[movem_index2[amask]]); amask = movem_next[amask]; MC68000_ICount -= 8; }
	while (dmask) { srca -= 4; put_long(srca, regs.d[movem_index2[dmask]].D); dmask = movem_next[dmask]; MC68000_ICount -= 8; }
        regs.a[dstreg] = srca;
}}}}}
void op_48e8(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{       CPTR srca = regs.a[dstreg] + (LONG)(WORD)nextiword();
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_long(srca, regs.d[movem_index1[dmask]].D); srca += 4; dmask = movem_next[dmask]; MC68000_ICount -= 8; }
        while (amask) { put_long(srca, regs.a[movem_index1[amask]]); srca += 4; amask = movem_next[amask]; MC68000_ICount -= 8; }
}}}}
void op_48f0(void) /* MVMLE */
{
        ULONG dstreg = opcode & 7;
{       UWORD mask = nextiword();
{       CPTR srca = get_disp_ea(regs.a[dstreg]);
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_long(srca, regs.d[movem_index1[dmask]].D); srca += 4; dmask = movem_next[dmask]; MC68000_ICount -= 8; }
        while (amask) { put_long(srca, regs.a[movem_index1[amask]]); srca += 4; amask = movem_next[amask]; MC68000_ICount -= 8; }
}}}}
void op_48f8(void) /* MVMLE */
{
{       UWORD mask = nextiword();
{       CPTR srca = (LONG)(WORD)nextiword();
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_long(srca, regs.d[movem_index1[dmask]].D); srca += 4; dmask = movem_next[dmask]; MC68000_ICount -= 8; }
        while (amask) { put_long(srca, regs.a[movem_index1[amask]]); srca += 4; amask = movem_next[amask]; MC68000_ICount -= 8; }
}}}}
void op_48f9(void) /* MVMLE */
{
{       UWORD mask = nextiword();
{       CPTR srca = nextilong();
{       UWORD dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
	while (dmask) { put_long(srca, regs.d[movem_index1[dmask]].D); srca += 4; dmask = movem_next[dmask]; MC68000_ICount -= 8; }
        while (amask) { put_long(srca, regs.a[movem_index1[amask]]); srca += 4; amask = movem_next[amask]; MC68000_ICount -= 8; }
}}}}
void op_49c0(void) /* EXT */
{
        ULONG srcreg = (opcode & 7);
{{      LONG src = regs.d[srcreg].D;
{       ULONG dst = (LONG)(BYTE)src;
        regs.d[srcreg].D = (dst);
        CLEARFLGS;
	if ( (LONG)dst <= 0 )
		{
		if ( dst == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRUE ;
		}
}}}}
void op_4a00(void) /* TST */
{
        ULONG srcreg = (opcode & 7);
{{      BYTE src = regs.d[srcreg].B.l;
        CLEARFLGS;
	if ( src <= 0 )
		{
		if ( src == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRUE ;
		}
}}}
void op_4a10(void) /* TST */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg];
        BYTE src = get_byte(srca);
        CLEARFLGS;
	if ( src <= 0 )
		{
		if ( src == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRUE ;
		}
}}}
void op_4a18(void) /* TST */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg];
        BYTE src = get_byte(srca);
{       regs.a[srcreg] += areg_byteinc[srcreg];
        CLEARFLGS;
	if ( src <= 0 )
		{
		if ( src == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRUE ;
		}
}}}}
void op_4a20(void) /* TST */
{
        ULONG srcreg = (opcode & 7);
{{      regs.a[srcreg] -= areg_byteinc[srcreg];
{       CPTR srca = regs.a[srcreg];
        BYTE src = get_byte(srca);
        CLEARFLGS;
	if ( src <= 0 )
		{
		if ( src == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRUE ;
		}
}}}}
void op_4a28(void) /* TST */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = regs.a[srcreg] + (LONG)(WORD)nextiword();
        BYTE src = get_byte(srca);
        CLEARFLGS;
	if ( src <= 0 )
		{
		if ( src == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRUE ;
		}
}}}
void op_4a30(void) /* TST */
{
        ULONG srcreg = (opcode & 7);
{{      CPTR srca = get_disp_ea(regs.a[srcreg]);
{       BYTE src = get_byte(srca);
        CLEARFLGS;
	if ( src <= 0 )
		{
		if ( src == 0 )
			ZFLG = ZTRUE ;
		else
			NFLG = NTRU

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -