|
|
| version 1.1, 2004/08/01 05:31:32 | version 1.5, 2004/08/18 17:15:35 |
|---|---|
| Line 10 | Line 10 |
| #include "compiler.h" | #include "compiler.h" |
| #include "z80core.h" | #include "z80core.h" |
| #include "z80c.h" | #include "z80c.h" |
| #include "x1_io.h" | |
| #include "z80c.mcr" | #include "z80c.mcr" |
| static BYTE CPUCALL _cb_rlc(BYTE v) { | static REG8 CPUCALL _cb_rlc(REG8 v) { |
| BYTE ret; | REG8 ret; |
| R_Z80F = v >> 7; | R_Z80F = v >> 7; |
| ret = (v << 1) | R_Z80F; | ret = (v << 1) | R_Z80F; |
| R_Z80F |= ZSPtable[ret]; | R_Z80F |= ZSPtable[(UINT8)ret]; |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_rrc(BYTE v) { | static REG8 CPUCALL _cb_rrc(REG8 v) { |
| BYTE ret; | REG8 ret; |
| 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 |= ZSPtable[(UINT8)ret]; |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_rl(BYTE v) { | static REG8 CPUCALL _cb_rl(REG8 v) { |
| BYTE ret; | REG8 ret; |
| ret = (v << 1) | (R_Z80F & 1); | ret = (v << 1) | (R_Z80F & 1); |
| R_Z80F = ZSPtable[ret] | (v >> 7); | R_Z80F = ZSPtable[(UINT8)ret] | (v >> 7); |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_rr(BYTE v) { | static REG8 CPUCALL _cb_rr(REG8 v) { |
| BYTE ret; | REG8 ret; |
| ret = (v >> 1) | (R_Z80F << 7); | ret = (v >> 1) | (R_Z80F << 7); |
| R_Z80F = ZSPtable[ret] | (v & 1); | R_Z80F = ZSPtable[(UINT8)ret] | (v & 1); |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_sla(BYTE v) { | static REG8 CPUCALL _cb_sla(REG8 v) { |
| BYTE ret; | REG8 ret; |
| ret = (v << 1); | ret = (v << 1); |
| R_Z80F = ZSPtable[ret] | (v >> 7); | R_Z80F = ZSPtable[(UINT8)ret] | (v >> 7); |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_sra(BYTE v) { | static REG8 CPUCALL _cb_sra(REG8 v) { |
| BYTE ret; | REG8 ret; |
| ret = (((char)v) / 2); | ret = (((SINT8)v) >> 1); |
| R_Z80F = ZSPtable[ret] | (v & 1); | R_Z80F = ZSPtable[(UINT8)ret] | (v & 1); |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_sll(BYTE v) { | static REG8 CPUCALL _cb_sll(REG8 v) { |
| BYTE ret; | REG8 ret; |
| ret = (v << 1) | 1; | ret = (v << 1) | 1; |
| R_Z80F = ZSPtable[ret] | (v >> 7); | R_Z80F = ZSPtable[(UINT8)ret] | (v >> 7); |
| return(ret); | return(ret); |
| } | } |
| static BYTE CPUCALL _cb_srl(BYTE v) { | static REG8 CPUCALL _cb_srl(REG8 v) { |
| BYTE ret; | REG8 ret; |
| ret = v >> 1; | ret = v >> 1; |
| R_Z80F = ZSPtable[ret] | (v & 1); | R_Z80F = ZSPtable[ret] | (v & 1); |
| Line 89 static BYTE CPUCALL _cb_srl(BYTE v) { | Line 88 static BYTE CPUCALL _cb_srl(BYTE v) { |
| } | } |
| static BYTE (CPUCALL * rolsft_proc[8])(BYTE value) = { | static REG8 (CPUCALL * rolsft_proc[8])(REG8 value) = { |
| _cb_rlc, _cb_rrc, _cb_rl, _cb_rr, | _cb_rlc, _cb_rrc, _cb_rl, _cb_rr, |
| _cb_sla, _cb_sra, _cb_sll, _cb_srl}; | _cb_sla, _cb_sra, _cb_sll, _cb_srl}; |
| static BYTE *cb_reg[8] = { | static UINT8 *cb_reg[8] = { |
| &R_Z80B, &R_Z80C, &R_Z80D, &R_Z80E, | &R_Z80B, &R_Z80C, &R_Z80D, &R_Z80E, |
| &R_Z80H, &R_Z80L, NULL, &R_Z80A}; | &R_Z80H, &R_Z80L, NULL, &R_Z80A}; |
| void z80c_cb(void) { | void z80c_cb(void) { |
| BYTE op; | UINT op; |
| BYTE *reg; | UINT8 *reg; |
| BYTE xhl; | REG8 xhl; |
| int bit; | UINT bit; |
| R_Z80R++; | R_Z80R++; |
| GET_PC_BYTE(op); | GET_PC_BYTE(op); |
| Line 142 void z80c_cb(void) { | Line 141 void z80c_cb(void) { |
| } | } |
| } | } |
| else { | else { |
| xhl = Z80_RDMEM(R_Z80HL); | xhl = mem_read8(R_Z80HL); |
| switch(op & 0xc0) { | switch(op & 0xc0) { |
| case 0x00: | case 0x00: |
| Z80_COUNT(15); | Z80_COUNT(15); |
| Line 175 void z80c_cb(void) { | Line 174 void z80c_cb(void) { |
| xhl |= 1 << bit; | xhl |= 1 << bit; |
| break; | break; |
| } | } |
| Z80_WRMEM(R_Z80HL, xhl); | mem_write8(R_Z80HL, xhl); |
| } | } |
| } | } |
| void z80c_ixcb(void) { | void z80c_ixcb(void) { |
| BYTE op; | UINT op; |
| WORD adrs; | UINT adrs; |
| BYTE xi; | REG8 xi; |
| int bit; | UINT bit; |
| R_Z80R++; | R_Z80R++; |
| adrs = __CBW(Z80_RDMEM(R_Z80PC++)) + R_Z80IX; | adrs = LOW16(mem_read8s(R_Z80PC++) + R_Z80IX); |
| xi = Z80_RDMEM(adrs); | xi = mem_read8(adrs); |
| GET_PC_BYTE(op); | GET_PC_BYTE(op); |
| bit = (op >> 3) & 7; | bit = (op >> 3) & 7; |
| switch(op & 0xc0) { | switch(op & 0xc0) { |
| Line 223 void z80c_ixcb(void) { | Line 222 void z80c_ixcb(void) { |
| xi |= 1 << bit; | xi |= 1 << bit; |
| break; | break; |
| } | } |
| Z80_WRMEM(adrs, xi); | mem_write8(adrs, xi); |
| } | } |
| void z80c_iycb(void) { | void z80c_iycb(void) { |
| BYTE op; | UINT op; |
| WORD adrs; | UINT adrs; |
| BYTE xi; | REG8 xi; |
| int bit; | UINT bit; |
| R_Z80R++; | R_Z80R++; |
| adrs = __CBW(Z80_RDMEM(R_Z80PC++)) + R_Z80IY; | adrs = LOW16(mem_read8s(R_Z80PC++) + R_Z80IY); |
| xi = Z80_RDMEM(adrs); | xi = mem_read8(adrs); |
| GET_PC_BYTE(op); | GET_PC_BYTE(op); |
| bit = (op >> 3) & 7; | bit = (op >> 3) & 7; |
| switch(op & 0xc0) { | switch(op & 0xc0) { |
| Line 270 void z80c_iycb(void) { | Line 269 void z80c_iycb(void) { |
| xi |= 1 << bit; | xi |= 1 << bit; |
| break; | break; |
| } | } |
| Z80_WRMEM(adrs, xi); | mem_write8(adrs, xi); |
| } | } |