📄 opcode4.c
字号:
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 + -