?? cpue.c
字號:
#include "sysdeps.h"#include "shared.h"#include "memory.h"#include "custom.h"#include "newcpu.h"#include "cputbl.h"void op_e000(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign; }} NFLG = sign != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e008(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; cnt &= 63; if (!cnt) { CFLG = 0; } else { int carry = 0; for(;cnt;--cnt){ carry=val&1; val >>= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e010(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; int carry = 0; cnt &= 63; for(;cnt;--cnt){ carry=val&1; val >>= 1; if((Shptr->regs).x) val |= cmask; (Shptr->regs).x = carry != 0; } CFLG = (Shptr->regs).x; NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e018(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&1; val = (ULONG)val >> 1; if(carry) val |= cmask; } CFLG = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e020(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ BYTE cnt = (Shptr->regs).d[srcreg];{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign; }} NFLG = sign != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e028(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ BYTE cnt = (Shptr->regs).d[srcreg];{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; cnt &= 63; if (!cnt) { CFLG = 0; } else { int carry = 0; for(;cnt;--cnt){ carry=val&1; val >>= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e030(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ BYTE cnt = (Shptr->regs).d[srcreg];{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; int carry = 0; cnt &= 63; for(;cnt;--cnt){ carry=val&1; val >>= 1; if((Shptr->regs).x) val |= cmask; (Shptr->regs).x = carry != 0; } CFLG = (Shptr->regs).x; NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e038(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ BYTE cnt = (Shptr->regs).d[srcreg];{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&1; val = (ULONG)val >> 1; if(carry) val |= cmask; } CFLG = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e040(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign; }} NFLG = sign != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e048(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; cnt &= 63; if (!cnt) { CFLG = 0; } else { int carry = 0; for(;cnt;--cnt){ carry=val&1; val >>= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e050(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; int carry = 0; cnt &= 63; for(;cnt;--cnt){ carry=val&1; val >>= 1; if((Shptr->regs).x) val |= cmask; (Shptr->regs).x = carry != 0; } CFLG = (Shptr->regs).x; NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e058(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&1; val = (ULONG)val >> 1; if(carry) val |= cmask; } CFLG = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e060(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ WORD cnt = (Shptr->regs).d[srcreg];{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign; }} NFLG = sign != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e068(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ WORD cnt = (Shptr->regs).d[srcreg];{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; cnt &= 63; if (!cnt) { CFLG = 0; } else { int carry = 0; for(;cnt;--cnt){ carry=val&1; val >>= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e070(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ WORD cnt = (Shptr->regs).d[srcreg];{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; int carry = 0; cnt &= 63; for(;cnt;--cnt){ carry=val&1; val >>= 1; if((Shptr->regs).x) val |= cmask; (Shptr->regs).x = carry != 0; } CFLG = (Shptr->regs).x; NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e078(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ WORD cnt = (Shptr->regs).d[srcreg];{ WORD data = (Shptr->regs).d[dstreg];{ UWORD val = data; ULONG cmask = 0x8000; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&1; val = (ULONG)val >> 1; if(carry) val |= cmask; } CFLG = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xffff; (Shptr->regs).d[dstreg] |= (val) & 0xffff;}}}}}void op_e080(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign; }} NFLG = sign != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e088(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; cnt &= 63; if (!cnt) { CFLG = 0; } else { int carry = 0; for(;cnt;--cnt){ carry=val&1; val >>= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e090(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; int carry = 0; cnt &= 63; for(;cnt;--cnt){ carry=val&1; val >>= 1; if((Shptr->regs).x) val |= cmask; (Shptr->regs).x = carry != 0; } CFLG = (Shptr->regs).x; NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e098(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&1; val = (ULONG)val >> 1; if(carry) val |= cmask; } CFLG = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e0a0(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ LONG cnt = (Shptr->regs).d[srcreg];{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=val&1; val = ((ULONG)val >> 1) | sign; }} NFLG = sign != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e0a8(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ LONG cnt = (Shptr->regs).d[srcreg];{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; cnt &= 63; if (!cnt) { CFLG = 0; } else { int carry = 0; for(;cnt;--cnt){ carry=val&1; val >>= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e0b0(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ LONG cnt = (Shptr->regs).d[srcreg];{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; int carry = 0; cnt &= 63; for(;cnt;--cnt){ carry=val&1; val >>= 1; if((Shptr->regs).x) val |= cmask; (Shptr->regs).x = carry != 0; } CFLG = (Shptr->regs).x; NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e0b8(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 3584) >> 9); ULONG dstreg = (opcode & 7) >> 0;{{ LONG cnt = (Shptr->regs).d[srcreg];{ LONG data = (Shptr->regs).d[dstreg];{ ULONG val = data; ULONG cmask = 0x80000000; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&1; val = (ULONG)val >> 1; if(carry) val |= cmask; } CFLG = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] = (val);}}}}}void op_e0d0(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{ CPTR dataa = (Shptr->regs).a[srcreg]; WORD data = get_word(dataa); VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}void op_e0d8(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{ CPTR dataa = (Shptr->regs).a[srcreg]; WORD data = get_word(dataa);{ (Shptr->regs).a[srcreg] += 2; VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}}void op_e0e0(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{ (Shptr->regs).a[srcreg] -= 2;{ CPTR dataa = (Shptr->regs).a[srcreg]; WORD data = get_word(dataa); VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}}void op_e0e8(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{ CPTR dataa = (Shptr->regs).a[srcreg] + (LONG)(WORD)nextiword(); WORD data = get_word(dataa); VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}void op_e0f0(ULONG opcode){ ULONG srcreg = (LONG)(BYTE)((opcode & 7) >> 0);{{ CPTR dataa = (Shptr->regs).a[srcreg]; dataa = get_disp_ea (dataa, nextiword());{ WORD data = get_word(dataa); VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}}void op_e0f8(ULONG opcode){{{ CPTR dataa = (LONG)(WORD)nextiword(); WORD data = get_word(dataa); VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}void op_e0f9(ULONG opcode){{{ CPTR dataa = nextilong(); WORD data = get_word(dataa); VFLG = 0;{ UWORD val = data; ULONG cmask = 0x8000; ULONG sign = cmask & val; CFLG=(Shptr->regs).x=val&1; val = (val >> 1) | sign; NFLG = sign != 0; ZFLG = val == 0; put_word(dataa,val);}}}}void op_e100(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; ULONG sign = cmask & val; cnt &= 63; VFLG = 0; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ CFLG=(Shptr->regs).x=(val&cmask)!=0; val <<= 1; if ((val&cmask)!=sign)VFLG=1; }} NFLG = (val&cmask) != 0; ZFLG = val == 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e108(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data; ULONG cmask = 0x80; int carry = 0; cnt &= 63; if (!cnt) { CFLG = 0; } else { for(;cnt;--cnt){ carry=val&cmask; val <<= 1; } CFLG = (Shptr->regs).x = carry!=0;} NFLG = (val & cmask) != 0; ZFLG = val == 0; VFLG = 0; (Shptr->regs).d[dstreg] &= ~0xff; (Shptr->regs).d[dstreg] |= (val) & 0xff;}}}}}void op_e110(ULONG opcode){ ULONG srcreg = imm8_table[(opcode & 3584) >> 9]; ULONG dstreg = (opcode & 7) >> 0;{{ ULONG cnt = srcreg;{ BYTE data = (Shptr->regs).d[dstreg];{ UBYTE val = data;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -