📄 opcodee.c
字号:
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 8) {
CFLG=regs.x = cnt == 8 ? val & 1 : 0;
val = 0;
} else {
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
val <<= cnt;
}}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e110(void) /* ROXL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
ULONG carry;
cnt &= 63;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(regs.x) val |= 1;
regs.x = carry != 0;
}
CFLG = regs.x;
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e118(void) /* ROL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
ULONG carry;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(carry) val |= 1;
}
CFLG = carry!=0;
}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e120(void) /* ASL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ BYTE cnt = regs.d[srcreg].D;
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
cnt &= 63;
VFLG = 0;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 8) {
VFLG = val != 0;
CFLG=regs.x = cnt == 8 ? val & 1 : 0;
val = 0;
} else {
ULONG mask = aslmask_ubyte[cnt];
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
VFLG = (val & mask) != mask && (val & mask) != 0;
val <<= cnt;
}}
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e128(void) /* LSL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ BYTE cnt = regs.d[srcreg].D;
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 8) {
CFLG=regs.x = cnt == 8 ? val & 1 : 0;
val = 0;
} else {
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
val <<= cnt;
}}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e130(void) /* ROXL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ BYTE cnt = regs.d[srcreg].D;
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
ULONG carry;
cnt &= 63;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(regs.x) val |= 1;
regs.x = carry != 0;
}
CFLG = regs.x;
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e138(void) /* ROL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ BYTE cnt = regs.d[srcreg].D;
{ BYTE data = regs.d[dstreg].D;
{ UBYTE val = data;
ULONG cmask = 0x80;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
ULONG carry;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(carry) val |= 1;
}
CFLG = carry!=0;
}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].B.l = val;
}}}}}
void op_e140(void) /* ASL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
cnt &= 63;
VFLG = 0;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 16) {
VFLG = val != 0;
CFLG=regs.x = cnt == 16 ? val & 1 : 0;
val = 0;
} else {
ULONG mask = aslmask_uword[cnt];
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
VFLG = (val & mask) != mask && (val & mask) != 0;
val <<= cnt;
}}
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e148(void) /* LSL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 16) {
CFLG=regs.x = cnt == 16 ? val & 1 : 0;
val = 0;
} else {
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
val <<= cnt;
}}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e150(void) /* ROXL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG carry;
cnt &= 63;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(regs.x) val |= 1;
regs.x = carry != 0;
}
CFLG = regs.x;
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e158(void) /* ROL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
ULONG carry;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(carry) val |= 1;
}
CFLG = carry!=0;
}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e160(void) /* ASL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ WORD cnt = regs.d[srcreg].D;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
cnt &= 63;
VFLG = 0;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 16) {
VFLG = val != 0;
CFLG=regs.x = cnt == 16 ? val & 1 : 0;
val = 0;
} else {
ULONG mask = aslmask_uword[cnt];
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
VFLG = (val & mask) != mask && (val & mask) != 0;
val <<= cnt;
}}
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e168(void) /* LSL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ WORD cnt = regs.d[srcreg].D;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 16) {
CFLG=regs.x = cnt == 16 ? val & 1 : 0;
val = 0;
} else {
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
val <<= cnt;
}}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e170(void) /* ROXL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ WORD cnt = regs.d[srcreg].D;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG carry;
cnt &= 63;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(regs.x) val |= 1;
regs.x = carry != 0;
}
CFLG = regs.x;
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e178(void) /* ROL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ WORD cnt = regs.d[srcreg].D;
{ WORD data = regs.d[dstreg].D;
{ UWORD val = data;
ULONG cmask = 0x8000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
ULONG carry;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(carry) val |= 1;
}
CFLG = carry!=0;
}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].W.l = val;
}}}}}
void op_e180(void) /* ASL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
cnt &= 63;
VFLG = 0;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 32) {
VFLG = val != 0;
CFLG=regs.x = cnt == 32 ? val & 1 : 0;
val = 0;
} else {
ULONG mask = aslmask_ulong[cnt];
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
VFLG = (val & mask) != mask && (val & mask) != 0;
val <<= cnt;
}}
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e188(void) /* LSL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 32) {
CFLG=regs.x = cnt == 32 ? val & 1 : 0;
val = 0;
} else {
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
val <<= cnt;
}}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e190(void) /* ROXL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
ULONG carry;
cnt &= 63;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(regs.x) val |= 1;
regs.x = carry != 0;
}
CFLG = regs.x;
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e198(void) /* ROL */
{
ULONG srcreg = imm8_table[((opcode >> 9) & 7)];
ULONG dstreg = opcode & 7;
{{ ULONG cnt = srcreg;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
ULONG carry;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(carry) val |= 1;
}
CFLG = carry!=0;
}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e1a0(void) /* ASL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ LONG cnt = regs.d[srcreg].D;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
cnt &= 63;
VFLG = 0;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 32) {
VFLG = val != 0;
CFLG=regs.x = cnt == 32 ? val & 1 : 0;
val = 0;
} else {
ULONG mask = aslmask_ulong[cnt];
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
VFLG = (val & mask) != mask && (val & mask) != 0;
val <<= cnt;
}}
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e1a8(void) /* LSL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ LONG cnt = regs.d[srcreg].D;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
if (cnt >= 32) {
CFLG=regs.x = cnt == 32 ? val & 1 : 0;
val = 0;
} else {
CFLG=regs.x=(val << (cnt-1)) & cmask ? 1 : 0;
val <<= cnt;
}}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e1b0(void) /* ROXL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ LONG cnt = regs.d[srcreg].D;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
ULONG carry;
cnt &= 63;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(regs.x) val |= 1;
regs.x = carry != 0;
}
CFLG = regs.x;
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e1b8(void) /* ROL */
{
ULONG srcreg = ((opcode >> 9) & 7);
ULONG dstreg = opcode & 7;
{{ LONG cnt = regs.d[srcreg].D;
{ LONG data = regs.d[dstreg].D;
{ ULONG val = data;
ULONG cmask = 0x80000000;
cnt &= 63;
if (!cnt) { CFLG = 0; } else {
ULONG carry;
for(;cnt;--cnt){
carry=val&cmask; val <<= 1;
if(carry) val |= 1;
}
CFLG = carry!=0;
}
NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0;
regs.d[dstreg].D = (val);
}}}}}
void op_e1d0(void) /* ASLW */
{
ULONG srcreg = (opcode & 7);
{{ CPTR dataa = regs.a[srcreg];
WORD data = get_word(dataa);
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}
void op_e1d8(void) /* ASLW */
{
ULONG srcreg = (opcode & 7);
{{ CPTR dataa = regs.a[srcreg];
WORD data = get_word(dataa);
{ regs.a[srcreg] += 2;
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}}
void op_e1e0(void) /* ASLW */
{
ULONG srcreg = (opcode & 7);
{{ regs.a[srcreg] -= 2;
{ CPTR dataa = regs.a[srcreg];
WORD data = get_word(dataa);
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}}
void op_e1e8(void) /* ASLW */
{
ULONG srcreg = (opcode & 7);
{{ CPTR dataa = regs.a[srcreg] + (LONG)(WORD)nextiword();
WORD data = get_word(dataa);
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}
void op_e1f0(void) /* ASLW */
{
ULONG srcreg = (opcode & 7);
{{ CPTR dataa = get_disp_ea(regs.a[srcreg]);
{ WORD data = get_word(dataa);
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}}
void op_e1f8(void) /* ASLW */
{
{{ CPTR dataa = (LONG)(WORD)nextiword();
WORD data = get_word(dataa);
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}
void op_e1f9(void) /* ASLW */
{
{{ CPTR dataa = nextilong();
WORD data = get_word(dataa);
VFLG = 0;
{ UWORD val = data;
ULONG cmask = 0x8000;
ULONG sign = cmask & val;
CFLG=regs.x=(val&cmask)!=0; val <<= 1;
if ((val&cmask)!=sign) VFLG=1;
NFLG = (val&cmask) != 0;
ZFLG = val == 0;
put_word(dataa,val);
}}}}
void op_e2d0(void) /* LSRW */
{
ULONG srcreg = (opcode & 7);
{{ CPTR dataa = regs.a[srcreg];
WORD data = get_word(dataa);
{ UWORD val = data;
ULONG carry = val&1;
val >>= 1;
CLEARVC;
ZFLG = ((WORD)(val)) == 0;
NFLG = ((WORD)(val)) < 0;
CFLG = regs.x = carry!=0;
put_word(dataa,val);
}}}}
void op_e2d8(void) /* LSRW */
{
ULONG srcreg = (opcode & 7);
{{ CPTR dataa = regs.a[srcreg];
WORD data = get_word(dataa);
{ regs.a[srcreg] += 2;
{ UWORD val = data;
ULONG carry = val&1;
val >>= 1;
CLEARVC;
ZFLG = ((WORD)(val)) == 0;
NFLG = ((WORD)(val)) < 0;
CFLG = regs.x = carry!=0;
put_word(dataa,val);
}}}}}
void op_e2e0(void) /* LSRW */
{
ULONG srcreg = (opcode & 7);
{{ regs.a[srcreg] -= 2;
{ CPTR dataa = regs.a[srcreg];
WORD data = get_word(dataa);
{ UWORD val = data;
ULONG carry = val&1;
val >>= 1;
CLEARVC;
ZFLG = ((WORD)(val)) == 0;
NFLG = ((WORD)(val)) < 0;
CFLG = regs.x = carry!=0;
put_word(dataa,val);
}}}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -