| version 1.1, 2004/08/01 05:31:32 | version 1.6, 2004/08/20 23:01:16 | 
| 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 |= z80szp_flag[(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 |= z80szp_flag[(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 = z80szp_flag[(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 = z80szp_flag[(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 = z80szp_flag[(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 = z80szp_flag[(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 = z80szp_flag[(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 = z80szp_flag[ret] | (v & 1); | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  |  | 
| 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); | 
 | } | } | 
 |  |  |