| version 1.2, 2004/08/04 02:30:35 | version 1.3, 2004/08/08 14:00:56 | 
| Line 1 | Line 1 | 
 |  |  | 
| #define MCR_Z80INF(reg) {                                                                                       \ | #define MCR_Z80INF(reg) {                                                                                               \ | 
| (reg) = iocore_inp(R_Z80BC);                                                            \ | (reg) = iocore_inp(R_Z80BC);                                                                    \ | 
| R_Z80F &= C_FLAG;                                                                                       \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| R_Z80F |= ZSPtable[(reg)];                                                                      \ | R_Z80F |= ZSPtable[(reg)];                                                                              \ | 
| } | } | 
|  |  | 
| #define MCR_Z80OUT(reg) {                                                                                       \ | #define MCR_Z80OUT(reg) {                                                                                               \ | 
| iocore_out(R_Z80BC, (reg));                                                                     \ | iocore_out(R_Z80BC, (reg));                                                                             \ | 
| } | } | 
|  |  | 
| #define MCR_SBC_W(reg) {                                                                                        \ | #define MCR_SBC_W(reg) {                                                                                                \ | 
| DWORD tmp;                                                                                              \ | UINT32 tmp;                                                                                                             \ | 
| tmp = (DWORD)R_Z80HL - (DWORD)(reg)                                             \ | tmp = R_Z80HL - (reg) - (R_Z80F & 1);                                                   \ | 
| - (DWORD)(R_Z80F & 1);          \ | R_Z80F = N_FLAG;                                                                                                \ | 
| R_Z80F = N_FLAG;                                                                                \ | if (tmp & 0xffff0000) {                                                                                 \ | 
| if (tmp & 0xffff0000) {                                                                 \ | R_Z80F |= C_FLAG;                                                                                       \ | 
| R_Z80F |= C_FLAG;                                                                       \ | }                                                                                                                               \ | 
| }                                                                                                               \ | if (!(tmp & 0x0000ffff)) {                                                                              \ | 
| if (!(tmp & 0x0000ffff)) {                                                              \ | R_Z80F |= Z_FLAG;                                                                               \ | 
| R_Z80F |= Z_FLAG;                                                                       \ | }                                                                                                                               \ | 
| }                                                                                                               \ | else if (tmp & 0x00008000) {                                                                    \ | 
| else if (tmp & 0x00008000) {                                                    \ | R_Z80F |= S_FLAG;                                                                                       \ | 
| R_Z80F |= S_FLAG;                                                                       \ | }                                                                                                                               \ | 
| }                                                                                                               \ | R_Z80F |= ((((R_Z80HL) ^ tmp) & ((R_Z80HL) ^ (reg)))                    \ | 
| R_Z80F |= ((((R_Z80HL) ^ tmp) & ((R_Z80HL) ^ (reg)))    \ | >> 13) & V_FLAG;        \ | 
| >> 13) & V_FLAG;        \ | R_Z80F |= ((R_Z80HL ^ tmp ^ (reg)) >> 8) & H_FLAG;                              \ | 
| R_Z80F |= ((R_Z80HL ^ tmp ^ (reg)) >> 8) & H_FLAG;              \ | R_Z80HL = (UINT16)tmp;                                                                                  \ | 
| R_Z80HL = (WORD)tmp;                                                                    \ | } | 
| } |  | 
|  | #define MCR_NEG {                                                                                                               \ | 
| #define MCR_NEG {                                                                                                       \ | UINT res;                                                                                                               \ | 
| DWORD   res;                                                                                    \ | res = 0 - R_Z80A;                                                                                               \ | 
| res = 0 - (DWORD)R_Z80A;                                                                \ | R_Z80F = z80szc_flag[res & 0x1ff] | N_FLAG;                                             \ | 
| R_Z80F = z80szc_flag[res & 0x1ff] | N_FLAG;                             \ | R_Z80F |= (res ^ R_Z80A) & H_FLAG;                                                              \ | 
| R_Z80F |= (res ^ R_Z80A) & H_FLAG;                                              \ | R_Z80F |= ((res & R_Z80A) >> 5) & V_FLAG;                                               \ | 
| R_Z80F |= ((res & R_Z80A) >> 5) & V_FLAG;                               \ | R_Z80A = (UINT8)res;                                                                                    \ | 
| R_Z80A = (BYTE)res;                                                                             \ | } | 
| } |  | 
|  | #define MCR_RETN {                                                                                                              \ | 
| #define MCR_RETN {                                                                                                      \ | Z80_IFF &= ~((1 << IFF_NMI) | (1 << IFF_IRQ));                                  \ | 
| Z80_IFF &= ~((1 << IFF_NMI) | (1 << IFF_IRQ));                  \ | MCR_RET                                                                                                                 \ | 
| MCR_RET                                                                                                 \ | } | 
| } |  | 
|  | #define MCR_IM(mode) {                                                                                                  \ | 
| #define MCR_IM(mode) {                                                                                          \ | R_Z80IM = (mode);                                                                                               \ | 
| R_Z80IM = (mode);                                                                               \ | } | 
| } |  | 
|  | #define MCR_ADC_W(reg) {                                                                                                \ | 
| #define MCR_ADC_W(reg) {                                                                                        \ | UINT32 tmp;                                                                                                             \ | 
| DWORD tmp;                                                                                              \ | tmp = R_Z80HL + (reg) + (R_Z80F & 1);                                                   \ | 
| tmp = (DWORD)R_Z80HL + (DWORD)(reg)                                             \ | R_Z80F = (UINT8)(tmp >> 16);                                                                    \ | 
| + (DWORD)(R_Z80F & 1);          \ | if (!(tmp & 0x0000ffff)) {                                                                              \ | 
| R_Z80F = (BYTE)(tmp >> 16);                                                             \ | R_Z80F |= Z_FLAG;                                                                                       \ | 
| if (!(tmp & 0x0000ffff)) {                                                              \ | }                                                                                                                               \ | 
| R_Z80F |= Z_FLAG;                                                                       \ | else if (tmp & 0x00008000) {                                                                    \ | 
| }                                                                                                               \ | R_Z80F |= S_FLAG;                                                                                       \ | 
| else if (tmp & 0x00008000) {                                                    \ | }                                                                                                                               \ | 
| R_Z80F |= S_FLAG;                                                                       \ | R_Z80F |= (((tmp ^ (reg)) & (tmp ^ R_Z80HL)) >> 13) & V_FLAG;   \ | 
| }                                                                                                               \ | R_Z80F |= ((R_Z80HL ^ tmp ^ (reg)) >> 8) & H_FLAG;                              \ | 
| R_Z80F |= (((tmp ^ (reg)) & (tmp ^ R_Z80HL))                    \ | (reg) = (UINT16)tmp;                                                                                    \ | 
| >> 13) & V_FLAG;        \ | } | 
| R_Z80F |= ((R_Z80HL ^ tmp ^ (reg)) >> 8) & H_FLAG;              \ |  | 
| (reg) = (WORD)tmp;                                                                              \ | #define MCR_RETI {                                                                                                              \ | 
| } | Z80_IFF &= ~(1 << IFF_IRQ);                                                                             \ | 
|  | MCR_RET                                                                                                                 \ | 
| #define MCR_RETI {                                                                                                      \ | } | 
| Z80_IFF &= ~(1 << IFF_IRQ);                                                             \ |  | 
| MCR_RET                                                                                                 \ | #define MCR_LD_RA {                                                                                                             \ | 
| } | R_Z80R = R_Z80A;                                                                                                \ | 
|  | R_Z80R2 = R_Z80A;                                                                                               \ | 
| #define MCR_LD_RA {                                                                                                     \ | } | 
| R_Z80R = R_Z80A;                                                                                \ |  | 
| R_Z80R2 = R_Z80A;                                                                               \ |  | 
| } | #define MCR_LD_AI {                                                                                                             \ | 
|  | R_Z80A = R_Z80I;                                                                                                \ | 
|  | R_Z80F &= C_FLAG;                                                                                               \ | 
| #define MCR_LD_AI {                                                                                                     \ | R_Z80F |= z80szc_flag[R_Z80I];                                                                  \ | 
| R_Z80A = R_Z80I;                                                                                \ | if (!(Z80_IFF & (1 << IFF_IFLAG))) {                                                    \ | 
| R_Z80F &= C_FLAG;                                                                               \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| R_Z80F |= z80szc_flag[R_Z80I];                                                  \ | }                                                                                                                               \ | 
| if (!(Z80_IFF & (1 << IFF_IFLAG))) {                                    \ | } | 
| R_Z80F |= V_FLAG;                                                                       \ |  | 
| }                                                                                                               \ | #define MCR_LD_AR {                                                                                                             \ | 
| } | R_Z80A = (R_Z80R & 0x7f) | (R_Z80R2 & 0x80);                                    \ | 
|  | R_Z80F &= C_FLAG;                                                                                               \ | 
| #define MCR_LD_AR {                                                                                                     \ | R_Z80F |= z80szc_flag[R_Z80A];                                                                  \ | 
| R_Z80A = (R_Z80R & 0x7f) | (R_Z80R2 & 0x80);                    \ | if (!(Z80_IFF & (1 << IFF_IFLAG))) {                                                    \ | 
| R_Z80F &= C_FLAG;                                                                               \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| R_Z80F |= z80szc_flag[R_Z80A];                                                  \ | }                                                                                                                               \ | 
| if (!(Z80_IFF & (1 << IFF_IFLAG))) {                                    \ | } | 
| R_Z80F |= V_FLAG;                                                                       \ |  | 
| }                                                                                                               \ |  | 
| } | #define MCR_RRD {                                                                                                               \ | 
|  | REG8 tmp;                                                                                                               \ | 
|  | tmp = mem_read8(R_Z80HL);                                                                               \ | 
| #define MCR_RRD {                                                                                                       \ | mem_write8(R_Z80HL, (REG8)((tmp >> 4) | (R_Z80A << 4)));                \ | 
| BYTE tmp;                                                                                               \ | R_Z80A = (R_Z80A & 0xf0) | (tmp & 0x0f);                                                \ | 
| tmp = Z80_RDMEM(R_Z80HL);                                                               \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| Z80_WRMEM(R_Z80HL, (tmp >> 4) | (R_Z80A << 4));                 \ | R_Z80F |= ZSPtable[R_Z80A];                                                                             \ | 
| R_Z80A = (R_Z80A & 0xf0) | (tmp & 0x0f);                                \ | } | 
| R_Z80F &= C_FLAG;                                                                               \ |  | 
| R_Z80F |= ZSPtable[R_Z80A];                                                             \ | #define MCR_RLD {                                                                                                               \ | 
| } | REG8 tmp;                                                                                                               \ | 
|  | tmp = mem_read8(R_Z80HL);                                                                               \ | 
| #define MCR_RLD {                                                                                                       \ | mem_write8(R_Z80HL, (REG8)((tmp << 4) + (R_Z80A & 0x0f)));              \ | 
| BYTE tmp;                                                                                               \ | R_Z80A = (R_Z80A & 0xf0) | (tmp >> 4);                                                  \ | 
| tmp = Z80_RDMEM(R_Z80HL);                                                               \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| Z80_WRMEM(R_Z80HL, (tmp << 4) + (R_Z80A & 0x0f));               \ | R_Z80F |= ZSPtable[R_Z80A];                                                                             \ | 
| R_Z80A = (R_Z80A & 0xf0) | (tmp >> 4);                                  \ | } | 
| R_Z80F &= C_FLAG;                                                                               \ |  | 
| R_Z80F |= ZSPtable[R_Z80A];                                                             \ |  | 
| } | #define MCR_Z80IN0 {                                                                                                    \ | 
|  | REG8 tmp;                                                                                                               \ | 
|  | tmp = iocore_inp(R_Z80BC);                                                                              \ | 
| #define MCR_Z80IN0 {                                                                                            \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| BYTE tmp;                                                                                               \ | R_Z80F |= ZSPtable[tmp];                                                                                \ | 
| tmp = iocore_inp(R_Z80BC);                                                              \ | } | 
| R_Z80F &= C_FLAG;                                                                               \ |  | 
| R_Z80F |= ZSPtable[tmp];                                                                \ |  | 
| } | #define MCR_LDI {                                                                                                               \ | 
|  | REG8 tmp;                                                                                                               \ | 
|  | tmp = mem_read8(R_Z80HL++);                                                                             \ | 
| #define MCR_LDI {                                                                                                       \ | mem_write8(R_Z80DE++, tmp);                                                                             \ | 
| BYTE tmp;                                                                                               \ | R_Z80F &= 0xe9;                                                                                                 \ | 
| tmp = Z80_RDMEM(R_Z80HL++);                                                             \ | R_Z80BC--;                                                                                                              \ | 
| Z80_WRMEM(R_Z80DE++, tmp);                                                              \ | if (R_Z80BC) {                                                                                                  \ | 
| R_Z80F &= 0xe9;                                                                                 \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| R_Z80BC--;                                                                                              \ | }                                                                                                                               \ | 
| if (R_Z80BC) {                                                                                  \ | } | 
| R_Z80F |= V_FLAG;                                                                       \ |  | 
| }                                                                                                               \ | #define MCR_CPI {                                                                                                               \ | 
| } | REG8 tmp;                                                                                                               \ | 
|  | REG8 diff;                                                                                                              \ | 
| #define MCR_CPI {                                                                                                       \ | tmp = mem_read8(R_Z80HL++);                                                                             \ | 
| BYTE tmp, diff;                                                                                 \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| tmp = Z80_RDMEM(R_Z80HL++);                                                             \ | diff = R_Z80A - tmp;                                                                                    \ | 
| R_Z80F &= C_FLAG;                                                                               \ | R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                                               \ | 
| diff = R_Z80A - tmp;                                                                    \ | R_Z80F |= z80szc_flag[LOW8(diff)];                                                              \ | 
| R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                               \ | R_Z80F |= N_FLAG;                                                                                               \ | 
| R_Z80F |= z80szc_flag[diff];                                                    \ | R_Z80BC--;                                                                                                              \ | 
| R_Z80F |= N_FLAG;                                                                               \ | if (R_Z80BC) {                                                                                                  \ | 
| R_Z80BC--;                                                                                              \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| if (R_Z80BC) {                                                                                  \ | }                                                                                                                               \ | 
| R_Z80F |= V_FLAG;                                                                       \ | } | 
| }                                                                                                               \ |  | 
| } | #define MCR_INI {                                                                                                               \ | 
|  | REG8 tmp;                                                                                                               \ | 
| #define MCR_INI {                                                                                                       \ | tmp = iocore_inp(R_Z80BC);                                                                              \ | 
| BYTE tmp;                                                                                               \ | mem_write8(R_Z80HL++, tmp);                                                                             \ | 
| tmp = iocore_inp(R_Z80BC);                                                              \ | R_Z80F = N_FLAG;                                                                                                \ | 
| Z80_WRMEM(R_Z80HL++, tmp);                                                              \ | R_Z80B--;                                                                                                               \ | 
| R_Z80F = N_FLAG;                                                                                \ | if (!R_Z80B) {                                                                                                  \ | 
| R_Z80B--;                                                                                               \ | R_Z80F |= Z_FLAG;                                                                                       \ | 
| if (!R_Z80B) {                                                                                  \ | }                                                                                                                               \ | 
| R_Z80F |= Z_FLAG;                                                                       \ | } | 
| }                                                                                                               \ |  | 
| } | #define MCR_OUTI {                                                                                                              \ | 
|  | REG8 tmp;                                                                                                               \ | 
| #define MCR_OUTI {                                                                                                      \ | tmp = mem_read8(R_Z80HL++);                                                                             \ | 
| BYTE tmp;                                                                                               \ | R_Z80F = N_FLAG;                                                                                                \ | 
| tmp = Z80_RDMEM(R_Z80HL++);                                                             \ | R_Z80B--;                                                                                                               \ | 
| R_Z80F = N_FLAG;                                                                                \ | if (!R_Z80B) {                                                                                                  \ | 
| R_Z80B--;                                                                                               \ | R_Z80F |= Z_FLAG;                                                                                       \ | 
| if (!R_Z80B) {                                                                                  \ | }                                                                                                                               \ | 
| R_Z80F |= Z_FLAG;                                                                       \ | iocore_out(R_Z80BC, tmp);                                                                               \ | 
| }                                                                                                               \ | } | 
| iocore_out(R_Z80BC, tmp);                                                               \ |  | 
| } | #define MCR_LDD {                                                                                                               \ | 
|  | REG8 tmp;                                                                                                               \ | 
| #define MCR_LDD {                                                                                                       \ | tmp = mem_read8(R_Z80HL--);                                                                             \ | 
| BYTE tmp;                                                                                               \ | mem_write8(R_Z80DE--, tmp);                                                                             \ | 
| tmp = Z80_RDMEM(R_Z80HL--);                                                             \ | R_Z80F &= 0xe9;                                                                                                 \ | 
| Z80_WRMEM(R_Z80DE--, tmp);                                                              \ | R_Z80BC--;                                                                                                              \ | 
| R_Z80F &= 0xe9;                                                                                 \ | if (R_Z80BC) {                                                                                                  \ | 
| R_Z80BC--;                                                                                              \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| if (R_Z80BC) {                                                                                  \ | }                                                                                                                               \ | 
| R_Z80F |= V_FLAG;                                                                       \ | } | 
| }                                                                                                               \ |  | 
| } | #define MCR_CPD {                                                                                                               \ | 
|  | REG8 tmp;                                                                                                               \ | 
| #define MCR_CPD {                                                                                                       \ | REG8 diff;                                                                                                              \ | 
| BYTE tmp, diff;                                                                                 \ | tmp = mem_read8(R_Z80HL--);                                                                             \ | 
| tmp = Z80_RDMEM(R_Z80HL--);                                                             \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| R_Z80F &= C_FLAG;                                                                               \ | diff = R_Z80A - tmp;                                                                                    \ | 
| diff = R_Z80A - tmp;                                                                    \ | R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                                               \ | 
| R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                               \ | R_Z80F |= z80szc_flag[LOW8(diff)];                                                              \ | 
| R_Z80F |= z80szc_flag[diff];                                                    \ | R_Z80F |= N_FLAG;                                                                                               \ | 
| R_Z80F |= N_FLAG;                                                                               \ | R_Z80BC--;                                                                                                              \ | 
| R_Z80BC--;                                                                                              \ | if (R_Z80BC) {                                                                                                  \ | 
| if (R_Z80BC) {                                                                                  \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| R_Z80F |= V_FLAG;                                                                       \ | }                                                                                                                               \ | 
| }                                                                                                               \ | } | 
| } |  | 
|  | #define MCR_IND {                                                                                                               \ | 
| #define MCR_IND {                                                                                                       \ | REG8 tmp;                                                                                                               \ | 
| BYTE tmp;                                                                                               \ | tmp = iocore_inp(R_Z80BC);                                                                              \ | 
| tmp = iocore_inp(R_Z80BC);                                                              \ | mem_write8(R_Z80HL--, tmp);                                                                             \ | 
| Z80_WRMEM(R_Z80HL--, tmp);                                                              \ | R_Z80F = N_FLAG;                                                                                                \ | 
| R_Z80F = N_FLAG;                                                                                \ | R_Z80B--;                                                                                                               \ | 
| R_Z80B--;                                                                                               \ | if (!R_Z80B) {                                                                                                  \ | 
| if (!R_Z80B) {                                                                                  \ | R_Z80F |= Z_FLAG;                                                                                       \ | 
| R_Z80F |= Z_FLAG;                                                                       \ | }                                                                                                                               \ | 
| }                                                                                                               \ | } | 
| } |  | 
|  | #define MCR_OUTD {                                                                                                              \ | 
| #define MCR_OUTD {                                                                                                      \ | REG8 tmp;                                                                                                               \ | 
| BYTE tmp;                                                                                               \ | tmp = mem_read8(R_Z80HL--);                                                                             \ | 
| tmp = Z80_RDMEM(R_Z80HL--);                                                             \ | R_Z80F = N_FLAG;                                                                                                \ | 
| R_Z80F = N_FLAG;                                                                                \ | R_Z80B--;                                                                                                               \ | 
| R_Z80B--;                                                                                               \ | if (!R_Z80B) {                                                                                                  \ | 
| if (!R_Z80B) {                                                                                  \ | R_Z80F |= Z_FLAG;                                                                                       \ | 
| R_Z80F |= Z_FLAG;                                                                       \ | }                                                                                                                               \ | 
| }                                                                                                               \ | iocore_out(R_Z80BC, tmp);                                                                               \ | 
| iocore_out(R_Z80BC, tmp);                                                               \ | } | 
| } |  | 
|  | #define MCR_LDIR {                                                                                                              \ | 
| #define MCR_LDIR {                                                                                                      \ | REG8 tmp;                                                                                                               \ | 
| BYTE tmp;                                                                                               \ | tmp = mem_read8(R_Z80HL++);                                                                             \ | 
| tmp = Z80_RDMEM(R_Z80HL++);                                                             \ | mem_write8(R_Z80DE++, tmp);                                                                             \ | 
| Z80_WRMEM(R_Z80DE++, tmp);                                                              \ | R_Z80F &= 0xe9;                                                                                                 \ | 
| R_Z80F &= 0xe9;                                                                                 \ | R_Z80BC--;                                                                                                              \ | 
| R_Z80BC--;                                                                                              \ | if (R_Z80BC) {                                                                                                  \ | 
| if (R_Z80BC) {                                                                                  \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| R_Z80F |= V_FLAG;                                                                       \ | Z80_COUNT(5);                                                                                           \ | 
| Z80_COUNT(5);                                                                           \ | R_Z80PC -= 2;                                                                                           \ | 
| R_Z80PC -= 2;                                                                           \ | }                                                                                                                               \ | 
| }                                                                                                               \ | } | 
| } |  | 
|  | #define MCR_CPIR {                                                                                                              \ | 
| #define MCR_CPIR {                                                                                                      \ | REG8 tmp;                                                                                                               \ | 
| BYTE tmp, diff;                                                                                 \ | REG8 diff;                                                                                                              \ | 
| tmp = Z80_RDMEM(R_Z80HL++);                                                             \ | tmp = mem_read8(R_Z80HL++);                                                                             \ | 
| R_Z80F &= C_FLAG;                                                                               \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| diff = R_Z80A - tmp;                                                                    \ | diff = R_Z80A - tmp;                                                                                    \ | 
| R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                               \ | R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                                               \ | 
| R_Z80F |= z80szc_flag[diff];                                                    \ | R_Z80F |= z80szc_flag[LOW8(diff)];                                                              \ | 
| if (!diff) {                                                                                    \ | if (!diff) {                                                                                                    \ | 
| R_Z80F |= N_FLAG;                                                                       \ | R_Z80F |= N_FLAG;                                                                                       \ | 
| if (--R_Z80BC) {                                                                        \ | if (--R_Z80BC) {                                                                                        \ | 
| R_Z80F |= V_FLAG;                                                               \ | R_Z80F |= V_FLAG;                                                                               \ | 
| }                                                                                                       \ | }                                                                                                                       \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| else {                                                                                                  \ | else {                                                                                                                  \ | 
| if (--R_Z80BC) {                                                                        \ | if (--R_Z80BC) {                                                                                        \ | 
| R_Z80F |= V_FLAG;                                                               \ | R_Z80F |= V_FLAG;                                                                               \ | 
| Z80_COUNT(5);                                                                   \ | Z80_COUNT(5);                                                                                   \ | 
| R_Z80PC -= 2;                                                                   \ | R_Z80PC -= 2;                                                                                   \ | 
| }                                                                                                       \ | }                                                                                                                       \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| } | } | 
|  |  | 
| #define MCR_INIR {                                                                                                      \ | #define MCR_INIR {                                                                                                              \ | 
| BYTE tmp;                                                                                               \ | REG8 tmp;                                                                                                               \ | 
| tmp = iocore_inp(R_Z80BC);                                                              \ | tmp = iocore_inp(R_Z80BC);                                                                              \ | 
| Z80_WRMEM(R_Z80HL++, tmp);                                                              \ | mem_write8(R_Z80HL++, tmp);                                                                             \ | 
| if (--R_Z80B) {                                                                                 \ | if (--R_Z80B) {                                                                                                 \ | 
| R_Z80F = N_FLAG;                                                                        \ | R_Z80F = N_FLAG;                                                                                        \ | 
| Z80_COUNT(5);                                                                           \ | Z80_COUNT(5);                                                                                           \ | 
| R_Z80PC -= 2;                                                                           \ | R_Z80PC -= 2;                                                                                           \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| else {                                                                                                  \ | else {                                                                                                                  \ | 
| R_Z80F = (N_FLAG | Z_FLAG);                                                     \ | R_Z80F = (N_FLAG | Z_FLAG);                                                                     \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| } | } | 
|  |  | 
| #define MCR_OTIR {                                                                                                      \ | #define MCR_OTIR {                                                                                                              \ | 
| BYTE tmp;                                                                                               \ | REG8 tmp;                                                                                                               \ | 
| tmp = Z80_RDMEM(R_Z80HL++);                                                             \ | tmp = mem_read8(R_Z80HL++);                                                                             \ | 
| if (--R_Z80B) {                                                                                 \ | if (--R_Z80B) {                                                                                                 \ | 
| R_Z80F = N_FLAG;                                                                        \ | R_Z80F = N_FLAG;                                                                                        \ | 
| Z80_COUNT(5);                                                                           \ | Z80_COUNT(5);                                                                                           \ | 
| R_Z80PC -= 2;                                                                           \ | R_Z80PC -= 2;                                                                                           \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| else {                                                                                                  \ | else {                                                                                                                  \ | 
| R_Z80F = (N_FLAG | Z_FLAG);                                                     \ | R_Z80F = (N_FLAG | Z_FLAG);                                                                     \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| iocore_out(R_Z80BC, tmp);                                                               \ | iocore_out(R_Z80BC, tmp);                                                                               \ | 
| } | } | 
|  |  | 
| #define MCR_LDDR {                                                                                                      \ | #define MCR_LDDR {                                                                                                              \ | 
| BYTE tmp;                                                                                               \ | REG8 tmp;                                                                                                               \ | 
| tmp = Z80_RDMEM(R_Z80HL--);                                                             \ | tmp = mem_read8(R_Z80HL--);                                                                             \ | 
| Z80_WRMEM(R_Z80DE--, tmp);                                                              \ | mem_write8(R_Z80DE--, tmp);                                                                             \ | 
| R_Z80F &= 0xe9;                                                                                 \ | R_Z80F &= 0xe9;                                                                                                 \ | 
| R_Z80BC--;                                                                                              \ | R_Z80BC--;                                                                                                              \ | 
| if (R_Z80BC) {                                                                                  \ | if (R_Z80BC) {                                                                                                  \ | 
| R_Z80F |= V_FLAG;                                                                       \ | R_Z80F |= V_FLAG;                                                                                       \ | 
| Z80_COUNT(5);                                                                           \ | Z80_COUNT(5);                                                                                           \ | 
| R_Z80PC -= 2;                                                                           \ | R_Z80PC -= 2;                                                                                           \ | 
| }                                                                                                               \ | }                                                                                                                               \ | 
| } | } | 
|  |  | 
| #define MCR_CPDR {                                                                                                      \ | #define MCR_CPDR {                                                                                                              \ | 
| BYTE tmp, diff;                                                                                 \ | REG8 tmp;                                                                                                               \ | 
| tmp = Z80_RDMEM(R_Z80HL--);                                                             \ | REG8 diff;                                                                                                              \ | 
| R_Z80F &= C_FLAG;                                                                               \ | tmp = mem_read8(R_Z80HL--);                                                                             \ | 
| diff = R_Z80A - tmp;                                                                    \ | R_Z80F &= C_FLAG;                                                                                               \ | 
| R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                               \ | diff = R_Z80A - tmp;                                                                                    \ | 
| R_Z80F |= z80szc_flag[diff];                                                    \ | R_Z80F |= (diff ^ R_Z80A ^ tmp) & H_FLAG;                                               \ | 
| if (!diff) {                                                                                    \ | R_Z80F |= z80szc_flag[LOW8(diff)];                                                              \ | 
| R_Z80F |= N_FLAG;                                                                       \ | if (!diff) {                                                                                                    \ | 
| if (--R_Z80BC) {                                                                        \ | R_Z80F |= N_FLAG;                                                                                       \ | 
| R_Z80F |= V_FLAG;                                                               \ | if (--R_Z80BC) {                                                                                        \ | 
| }                                                                                                       \ | R_Z80F |= V_FLAG;                                                                               \ | 
| }                                                                                                               \ | }                                                                                                                       \ | 
| else {                                                                                                  \ | }                                                                                                                               \ | 
| if (--R_Z80BC) {                                                                        \ | else {                                                                                                                  \ | 
| R_Z80F |= V_FLAG;                                                               \ | if (--R_Z80BC) {                                                                                        \ | 
| Z80_COUNT(5);                                                                   \ | R_Z80F |= V_FLAG;                                                                               \ | 
| R_Z80PC -= 2;                                                                   \ | Z80_COUNT(5);                                                                                   \ | 
| }                                                                                                       \ | R_Z80PC -= 2;                                                                                   \ | 
| }                                                                                                               \ | }                                                                                                                       \ | 
| } | }                                                                                                                               \ | 
|  | } | 
| #define MCR_INDR {                                                                                                      \ |  | 
| REG8 tmp;                                                                                                       \ | #define MCR_INDR {                                                                                                              \ | 
| tmp = iocore_inp(R_Z80BC);                                                                      \ | REG8 tmp;                                                                                                               \ | 
| Z80_WRMEM(R_Z80HL--, tmp);                                                                      \ | tmp = iocore_inp(R_Z80BC);                                                                              \ | 
| if (--R_Z80B) {                                                                                         \ | mem_write8(R_Z80HL--, tmp);                                                                             \ | 
| R_Z80F = N_FLAG;                                                                                \ | if (--R_Z80B) {                                                                                                 \ | 
| Z80_COUNT(5);                                                                                   \ | R_Z80F = N_FLAG;                                                                                        \ | 
| R_Z80PC -= 2;                                                                                   \ | Z80_COUNT(5);                                                                                           \ | 
| }                                                                                                                       \ | R_Z80PC -= 2;                                                                                           \ | 
| else {                                                                                                          \ | }                                                                                                                               \ | 
| R_Z80F = (N_FLAG | Z_FLAG);                                                             \ | else {                                                                                                                  \ | 
| }                                                                                                                       \ | R_Z80F = (N_FLAG | Z_FLAG);                                                                     \ | 
| } | }                                                                                                                               \ | 
|  | } | 
| #define MCR_OTDR {                                                                                                      \ |  | 
| REG8 tmp;                                                                                                       \ | #define MCR_OTDR {                                                                                                              \ | 
| tmp = Z80_RDMEM(R_Z80HL--);                                                                     \ | REG8 tmp;                                                                                                               \ | 
| if (--R_Z80B) {                                                                                         \ | tmp = mem_read8(R_Z80HL--);                                                                             \ | 
| R_Z80F = N_FLAG;                                                                                \ | if (--R_Z80B) {                                                                                                 \ | 
| Z80_COUNT(5);                                                                                   \ | R_Z80F = N_FLAG;                                                                                        \ | 
| R_Z80PC -= 2;                                                                                   \ | Z80_COUNT(5);                                                                                           \ | 
| }                                                                                                                       \ | R_Z80PC -= 2;                                                                                           \ | 
| else {                                                                                                          \ | }                                                                                                                               \ | 
| R_Z80F = (N_FLAG | Z_FLAG);                                                             \ | else {                                                                                                                  \ | 
| }                                                                                                                       \ | R_Z80F = (N_FLAG | Z_FLAG);                                                                     \ | 
| iocore_out(R_Z80BC, tmp);                                                                       \ | }                                                                                                                               \ | 
|  | iocore_out(R_Z80BC, tmp);                                                                               \ | 
 | } | } | 
 |  |  |