|
|
| version 1.3, 2004/08/08 14:00:56 | version 1.7, 2008/06/02 20:07:32 |
|---|---|
| Line 1 | Line 1 |
| //---------------------------------------------------------------------------- | /* ----------------------------------------------------------------------- |
| // | * |
| // Z80C : Z80 Engine - GENERIC | * Z80C : Z80 Engine - GENERIC |
| // | * |
| // Copyright by Studio Milmake 1999-2000,2004 | * Copyright by Studio Milmake 1999-2000,2004 |
| // | * |
| //---------------------------------------------------------------------------- | *------------------------------------------------------------------------ */ |
| #include "compiler.h" | #include "compiler.h" |
| #include "z80core.h" | #include "z80core.h" |
| Line 19 static REG8 CPUCALL _cb_rlc(REG8 v) { | Line 18 static REG8 CPUCALL _cb_rlc(REG8 v) { |
| R_Z80F = v >> 7; | R_Z80F = v >> 7; |
| ret = (v << 1) | R_Z80F; | ret = (v << 1) | R_Z80F; |
| R_Z80F |= ZSPtable[ret]; | R_Z80F |= z80szp_flag[(UINT8)ret]; |
| return(ret); | return(ret); |
| } | } |
| Line 29 static REG8 CPUCALL _cb_rrc(REG8 v) { | Line 28 static REG8 CPUCALL _cb_rrc(REG8 v) { |
| R_Z80F = v & 1; | R_Z80F = v & 1; |
| ret = (v >> 1) | (R_Z80F << 7); | ret = (v >> 1) | (R_Z80F << 7); |
| R_Z80F |= ZSPtable[ret]; | R_Z80F |= z80szp_flag[(UINT8)ret]; |
| return(ret); | return(ret); |
| } | } |
| Line 38 static REG8 CPUCALL _cb_rl(REG8 v) { | Line 37 static REG8 CPUCALL _cb_rl(REG8 v) { |
| REG8 ret; | REG8 ret; |
| ret = (v << 1) | (R_Z80F & 1); | ret = (v << 1) | (R_Z80F & 1); |
| R_Z80F = ZSPtable[ret] | (v >> 7); | R_Z80F = z80szp_flag[(UINT8)ret] | (v >> 7); |
| return(ret); | return(ret); |
| } | } |
| Line 47 static REG8 CPUCALL _cb_rr(REG8 v) { | Line 46 static REG8 CPUCALL _cb_rr(REG8 v) { |
| REG8 ret; | REG8 ret; |
| ret = (v >> 1) | (R_Z80F << 7); | ret = (v >> 1) | (R_Z80F << 7); |
| R_Z80F = ZSPtable[ret] | (v & 1); | R_Z80F = z80szp_flag[(UINT8)ret] | (v & 1); |
| return(ret); | return(ret); |
| } | } |
| Line 56 static REG8 CPUCALL _cb_sla(REG8 v) { | Line 55 static REG8 CPUCALL _cb_sla(REG8 v) { |
| REG8 ret; | REG8 ret; |
| ret = (v << 1); | ret = (v << 1); |
| R_Z80F = ZSPtable[ret] | (v >> 7); | R_Z80F = z80szp_flag[(UINT8)ret] | (v >> 7); |
| return(ret); | return(ret); |
| } | } |
| Line 64 static REG8 CPUCALL _cb_sra(REG8 v) { | Line 63 static REG8 CPUCALL _cb_sra(REG8 v) { |
| REG8 ret; | REG8 ret; |
| ret = (((char)v) / 2); | ret = (((SINT8)v) >> 1); |
| R_Z80F = ZSPtable[ret] | (v & 1); | R_Z80F = z80szp_flag[(UINT8)ret] | (v & 1); |
| return(ret); | return(ret); |
| } | } |
| Line 74 static REG8 CPUCALL _cb_sll(REG8 v) { | Line 73 static REG8 CPUCALL _cb_sll(REG8 v) { |
| REG8 ret; | REG8 ret; |
| ret = (v << 1) | 1; | ret = (v << 1) | 1; |
| R_Z80F = ZSPtable[ret] | (v >> 7); | R_Z80F = z80szp_flag[(UINT8)ret] | (v >> 7); |
| return(ret); | return(ret); |
| } | } |
| Line 83 static REG8 CPUCALL _cb_srl(REG8 v) { | Line 82 static REG8 CPUCALL _cb_srl(REG8 v) { |
| REG8 ret; | REG8 ret; |
| ret = v >> 1; | ret = v >> 1; |
| R_Z80F = ZSPtable[ret] | (v & 1); | R_Z80F = z80szp_flag[ret] | (v & 1); |
| return(ret); | return(ret); |
| } | } |
| Line 116 void z80c_cb(void) { | Line 115 void z80c_cb(void) { |
| *reg = rolsft_proc[bit](*reg); | *reg = rolsft_proc[bit](*reg); |
| break; | break; |
| case 0x40: // bit | case 0x40: /* bit */ |
| R_Z80F &= C_FLAG; | R_Z80F &= C_FLAG; |
| if ((*reg) & (1 << bit)) { | if ((*reg) & (1 << bit)) { |
| if (bit != 7) { | if (bit != 7) { |
| Line 131 void z80c_cb(void) { | Line 130 void z80c_cb(void) { |
| } | } |
| break; | break; |
| case 0x80: // reset | case 0x80: /* reset */ |
| (*reg) &= ~(1 << bit); | (*reg) &= ~(1 << bit); |
| break; | break; |
| case 0xc0: // set | case 0xc0: /* set */ |
| (*reg) |= 1 << bit; | (*reg) |= 1 << bit; |
| break; | break; |
| } | } |
| Line 148 void z80c_cb(void) { | Line 147 void z80c_cb(void) { |
| xhl = rolsft_proc[bit](xhl); | xhl = rolsft_proc[bit](xhl); |
| break; | break; |
| case 0x40: // bit | case 0x40: /* bit */ |
| Z80_COUNT(12); | Z80_COUNT(12); |
| R_Z80F &= C_FLAG; | R_Z80F &= C_FLAG; |
| if (xhl & (1 << bit)) { | if (xhl & (1 << bit)) { |
| Line 164 void z80c_cb(void) { | Line 163 void z80c_cb(void) { |
| } | } |
| return; | return; |
| case 0x80: // reset | case 0x80: /* reset */ |
| Z80_COUNT(15); | Z80_COUNT(15); |
| xhl &= ~(1 << bit); | xhl &= ~(1 << bit); |
| break; | break; |
| case 0xc0: // set | case 0xc0: /* set */ |
| Z80_COUNT(15); | Z80_COUNT(15); |
| xhl |= 1 << bit; | xhl |= 1 << bit; |
| break; | break; |
| Line 196 void z80c_ixcb(void) { | Line 195 void z80c_ixcb(void) { |
| xi = rolsft_proc[bit](xi); | xi = rolsft_proc[bit](xi); |
| break; | break; |
| case 0x40: // bit | case 0x40: /* bit */ |
| Z80_COUNT(20); | Z80_COUNT(20); |
| R_Z80F &= C_FLAG; | R_Z80F &= C_FLAG; |
| if (xi & (1 << bit)) { | if (xi & (1 << bit)) { |
| Line 212 void z80c_ixcb(void) { | Line 211 void z80c_ixcb(void) { |
| } | } |
| return; | return; |
| case 0x80: // reset | case 0x80: /* reset */ |
| Z80_COUNT(23); | Z80_COUNT(23); |
| xi &= ~(1 << bit); | xi &= ~(1 << bit); |
| break; | break; |
| case 0xc0: // set | case 0xc0: /* set */ |
| Z80_COUNT(23); | Z80_COUNT(23); |
| xi |= 1 << bit; | xi |= 1 << bit; |
| break; | break; |
| Line 243 void z80c_iycb(void) { | Line 242 void z80c_iycb(void) { |
| xi = rolsft_proc[bit](xi); | xi = rolsft_proc[bit](xi); |
| break; | break; |
| case 0x40: // bit | case 0x40: /* bit */ |
| Z80_COUNT(20); | Z80_COUNT(20); |
| R_Z80F &= C_FLAG; | R_Z80F &= C_FLAG; |
| if (xi & (1 << bit)) { | if (xi & (1 << bit)) { |
| Line 259 void z80c_iycb(void) { | Line 258 void z80c_iycb(void) { |
| } | } |
| return; | return; |
| case 0x80: // reset | case 0x80: /* reset */ |
| Z80_COUNT(23); | Z80_COUNT(23); |
| xi &= ~(1 << bit); | xi &= ~(1 << bit); |
| break; | break; |
| case 0xc0: // set | case 0xc0: /* set */ |
| Z80_COUNT(23); | Z80_COUNT(23); |
| xi |= 1 << bit; | xi |= 1 << bit; |
| break; | break; |