This repository has been archived on 2025-10-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
chibi-pc09/emu/z80pack-1.9/z80sim/sim2.c
Amber 783d32a495 copy all local files to repo
cp/m files, sprites, circuit design
2020-05-15 09:07:45 -04:00

2512 lines
48 KiB
C

/*
* Z80SIM - a Z80-CPU simulator
*
* Copyright (C) 1987-2006 by Udo Munk
*
* History:
* 28-SEP-87 Development on TARGON/35 with AT&T Unix System V.3
* 11-JAN-89 Release 1.1
* 08-FEB-89 Release 1.2
* 13-MAR-89 Release 1.3
* 09-FEB-90 Release 1.4 Ported to TARGON/31 M10/30
* 20-DEC-90 Release 1.5 Ported to COHERENT 3.0
* 10-JUN-92 Release 1.6 long casting problem solved with COHERENT 3.2
* and some optimization
* 25-JUN-92 Release 1.7 comments in english
* 07-OCT-06 Release 1.8 modified to compile on modern POSIX OS's
*/
/*
* Like the function "cpu()" this one emulates multi byte opcodes
* starting with 0xcb
*/
#include "sim.h"
#include "simglb.h"
static int trap_cb(void);
static int op_srla(void), op_srlb(void), op_srlc(void);
static int op_srld(void), op_srle(void);
static int op_srlh(void), op_srll(void), op_srlhl(void);
static int op_slaa(void), op_slab(void), op_slac(void);
static int op_slad(void), op_slae(void);
static int op_slah(void), op_slal(void), op_slahl(void);
static int op_rlra(void), op_rlb(void), op_rlc(void);
static int op_rld(void), op_rle(void);
static int op_rlh(void), op_rll(void), op_rlhl(void);
static int op_rrra(void), op_rrb(void), op_rrc(void);
static int op_rrd(void), op_rre(void);
static int op_rrh(void), op_rrl(void), op_rrhl(void);
static int op_rrcra(void), op_rrcb(void), op_rrcc(void);
static int op_rrcd(void), op_rrce(void);
static int op_rrch(void), op_rrcl(void), op_rrchl(void);
static int op_rlcra(void), op_rlcb(void), op_rlcc(void);
static int op_rlcd(void), op_rlce(void);
static int op_rlch(void), op_rlcl(void), op_rlchl(void);
static int op_sraa(void), op_srab(void), op_srac(void);
static int op_srad(void), op_srae(void);
static int op_srah(void), op_sral(void), op_srahl(void);
static int op_sb0a(void), op_sb1a(void), op_sb2a(void), op_sb3a(void);
static int op_sb4a(void), op_sb5a(void), op_sb6a(void), op_sb7a(void);
static int op_sb0b(void), op_sb1b(void), op_sb2b(void), op_sb3b(void);
static int op_sb4b(void), op_sb5b(void), op_sb6b(void), op_sb7b(void);
static int op_sb0c(void), op_sb1c(void), op_sb2c(void), op_sb3c(void);
static int op_sb4c(void), op_sb5c(void), op_sb6c(void), op_sb7c(void);
static int op_sb0d(void), op_sb1d(void), op_sb2d(void), op_sb3d(void);
static int op_sb4d(void), op_sb5d(void), op_sb6d(void), op_sb7d(void);
static int op_sb0e(void), op_sb1e(void), op_sb2e(void), op_sb3e(void);
static int op_sb4e(void), op_sb5e(void), op_sb6e(void), op_sb7e(void);
static int op_sb0h(void), op_sb1h(void), op_sb2h(void), op_sb3h(void);
static int op_sb4h(void), op_sb5h(void), op_sb6h(void), op_sb7h(void);
static int op_sb0l(void), op_sb1l(void), op_sb2l(void), op_sb3l(void);
static int op_sb4l(void), op_sb5l(void), op_sb6l(void), op_sb7l(void);
static int op_sb0hl(void), op_sb1hl(void), op_sb2hl(void), op_sb3hl(void);
static int op_sb4hl(void), op_sb5hl(void), op_sb6hl(void), op_sb7hl(void);
static int op_rb0a(void), op_rb1a(void), op_rb2a(void), op_rb3a(void);
static int op_rb4a(void), op_rb5a(void), op_rb6a(void), op_rb7a(void);
static int op_rb0b(void), op_rb1b(void), op_rb2b(void), op_rb3b(void);
static int op_rb4b(void), op_rb5b(void), op_rb6b(void), op_rb7b(void);
static int op_rb0c(void), op_rb1c(void), op_rb2c(void), op_rb3c(void);
static int op_rb4c(void), op_rb5c(void), op_rb6c(void), op_rb7c(void);
static int op_rb0d(void), op_rb1d(void), op_rb2d(void), op_rb3d(void);
static int op_rb4d(void), op_rb5d(void), op_rb6d(void), op_rb7d(void);
static int op_rb0e(void), op_rb1e(void), op_rb2e(void), op_rb3e(void);
static int op_rb4e(void), op_rb5e(void), op_rb6e(void), op_rb7e(void);
static int op_rb0h(void), op_rb1h(void), op_rb2h(void), op_rb3h(void);
static int op_rb4h(void), op_rb5h(void), op_rb6h(void), op_rb7h(void);
static int op_rb0l(void), op_rb1l(void), op_rb2l(void), op_rb3l(void);
static int op_rb4l(void), op_rb5l(void), op_rb6l(void), op_rb7l(void);
static int op_rb0hl(void), op_rb1hl(void), op_rb2hl(void), op_rb3hl(void);
static int op_rb4hl(void), op_rb5hl(void), op_rb6hl(void), op_rb7hl(void);
static int op_tb0a(void), op_tb1a(void), op_tb2a(void), op_tb3a(void);
static int op_tb4a(void), op_tb5a(void), op_tb6a(void), op_tb7a(void);
static int op_tb0b(void), op_tb1b(void), op_tb2b(void), op_tb3b(void);
static int op_tb4b(void), op_tb5b(void), op_tb6b(void), op_tb7b(void);
static int op_tb0c(void), op_tb1c(void), op_tb2c(void), op_tb3c(void);
static int op_tb4c(void), op_tb5c(void), op_tb6c(void), op_tb7c(void);
static int op_tb0d(void), op_tb1d(void), op_tb2d(void), op_tb3d(void);
static int op_tb4d(void), op_tb5d(void), op_tb6d(void), op_tb7d(void);
static int op_tb0e(void), op_tb1e(void), op_tb2e(void), op_tb3e(void);
static int op_tb4e(void), op_tb5e(void), op_tb6e(void), op_tb7e(void);
static int op_tb0h(void), op_tb1h(void), op_tb2h(void), op_tb3h(void);
static int op_tb4h(void), op_tb5h(void), op_tb6h(void), op_tb7h(void);
static int op_tb0l(void), op_tb1l(void), op_tb2l(void), op_tb3l(void);
static int op_tb4l(void), op_tb5l(void), op_tb6l(void), op_tb7l(void);
static int op_tb0hl(void), op_tb1hl(void), op_tb2hl(void), op_tb3hl(void);
static int op_tb4hl(void), op_tb5hl(void), op_tb6hl(void), op_tb7hl(void);
int op_cb_handel(void)
{
register int t;
static int (*op_cb[256]) (void) = {
op_rlcb, /* 0x00 */
op_rlcc, /* 0x01 */
op_rlcd, /* 0x02 */
op_rlce, /* 0x03 */
op_rlch, /* 0x04 */
op_rlcl, /* 0x05 */
op_rlchl, /* 0x06 */
op_rlcra, /* 0x07 */
op_rrcb, /* 0x08 */
op_rrcc, /* 0x09 */
op_rrcd, /* 0x0a */
op_rrce, /* 0x0b */
op_rrch, /* 0x0c */
op_rrcl, /* 0x0d */
op_rrchl, /* 0x0e */
op_rrcra, /* 0x0f */
op_rlb, /* 0x10 */
op_rlc, /* 0x11 */
op_rld, /* 0x12 */
op_rle, /* 0x13 */
op_rlh, /* 0x14 */
op_rll, /* 0x15 */
op_rlhl, /* 0x16 */
op_rlra, /* 0x17 */
op_rrb, /* 0x18 */
op_rrc, /* 0x19 */
op_rrd, /* 0x1a */
op_rre, /* 0x1b */
op_rrh, /* 0x1c */
op_rrl, /* 0x1d */
op_rrhl, /* 0x1e */
op_rrra, /* 0x1f */
op_slab, /* 0x20 */
op_slac, /* 0x21 */
op_slad, /* 0x22 */
op_slae, /* 0x23 */
op_slah, /* 0x24 */
op_slal, /* 0x25 */
op_slahl, /* 0x26 */
op_slaa, /* 0x27 */
op_srab, /* 0x28 */
op_srac, /* 0x29 */
op_srad, /* 0x2a */
op_srae, /* 0x2b */
op_srah, /* 0x2c */
op_sral, /* 0x2d */
op_srahl, /* 0x2e */
op_sraa, /* 0x2f */
trap_cb, /* 0x30 */
trap_cb, /* 0x31 */
trap_cb, /* 0x32 */
trap_cb, /* 0x33 */
trap_cb, /* 0x34 */
trap_cb, /* 0x35 */
trap_cb, /* 0x36 */
trap_cb, /* 0x37 */
op_srlb, /* 0x38 */
op_srlc, /* 0x39 */
op_srld, /* 0x3a */
op_srle, /* 0x3b */
op_srlh, /* 0x3c */
op_srll, /* 0x3d */
op_srlhl, /* 0x3e */
op_srla, /* 0x3f */
op_tb0b, /* 0x40 */
op_tb0c, /* 0x41 */
op_tb0d, /* 0x42 */
op_tb0e, /* 0x43 */
op_tb0h, /* 0x44 */
op_tb0l, /* 0x45 */
op_tb0hl, /* 0x46 */
op_tb0a, /* 0x47 */
op_tb1b, /* 0x48 */
op_tb1c, /* 0x49 */
op_tb1d, /* 0x4a */
op_tb1e, /* 0x4b */
op_tb1h, /* 0x4c */
op_tb1l, /* 0x4d */
op_tb1hl, /* 0x4e */
op_tb1a, /* 0x4f */
op_tb2b, /* 0x50 */
op_tb2c, /* 0x51 */
op_tb2d, /* 0x52 */
op_tb2e, /* 0x53 */
op_tb2h, /* 0x54 */
op_tb2l, /* 0x55 */
op_tb2hl, /* 0x56 */
op_tb2a, /* 0x57 */
op_tb3b, /* 0x58 */
op_tb3c, /* 0x59 */
op_tb3d, /* 0x5a */
op_tb3e, /* 0x5b */
op_tb3h, /* 0x5c */
op_tb3l, /* 0x5d */
op_tb3hl, /* 0x5e */
op_tb3a, /* 0x5f */
op_tb4b, /* 0x60 */
op_tb4c, /* 0x61 */
op_tb4d, /* 0x62 */
op_tb4e, /* 0x63 */
op_tb4h, /* 0x64 */
op_tb4l, /* 0x65 */
op_tb4hl, /* 0x66 */
op_tb4a, /* 0x67 */
op_tb5b, /* 0x68 */
op_tb5c, /* 0x69 */
op_tb5d, /* 0x6a */
op_tb5e, /* 0x6b */
op_tb5h, /* 0x6c */
op_tb5l, /* 0x6d */
op_tb5hl, /* 0x6e */
op_tb5a, /* 0x6f */
op_tb6b, /* 0x70 */
op_tb6c, /* 0x71 */
op_tb6d, /* 0x72 */
op_tb6e, /* 0x73 */
op_tb6h, /* 0x74 */
op_tb6l, /* 0x75 */
op_tb6hl, /* 0x76 */
op_tb6a, /* 0x77 */
op_tb7b, /* 0x78 */
op_tb7c, /* 0x79 */
op_tb7d, /* 0x7a */
op_tb7e, /* 0x7b */
op_tb7h, /* 0x7c */
op_tb7l, /* 0x7d */
op_tb7hl, /* 0x7e */
op_tb7a, /* 0x7f */
op_rb0b, /* 0x80 */
op_rb0c, /* 0x81 */
op_rb0d, /* 0x82 */
op_rb0e, /* 0x83 */
op_rb0h, /* 0x84 */
op_rb0l, /* 0x85 */
op_rb0hl, /* 0x86 */
op_rb0a, /* 0x87 */
op_rb1b, /* 0x88 */
op_rb1c, /* 0x89 */
op_rb1d, /* 0x8a */
op_rb1e, /* 0x8b */
op_rb1h, /* 0x8c */
op_rb1l, /* 0x8d */
op_rb1hl, /* 0x8e */
op_rb1a, /* 0x8f */
op_rb2b, /* 0x90 */
op_rb2c, /* 0x91 */
op_rb2d, /* 0x92 */
op_rb2e, /* 0x93 */
op_rb2h, /* 0x94 */
op_rb2l, /* 0x95 */
op_rb2hl, /* 0x96 */
op_rb2a, /* 0x97 */
op_rb3b, /* 0x98 */
op_rb3c, /* 0x99 */
op_rb3d, /* 0x9a */
op_rb3e, /* 0x9b */
op_rb3h, /* 0x9c */
op_rb3l, /* 0x9d */
op_rb3hl, /* 0x9e */
op_rb3a, /* 0x9f */
op_rb4b, /* 0xa0 */
op_rb4c, /* 0xa1 */
op_rb4d, /* 0xa2 */
op_rb4e, /* 0xa3 */
op_rb4h, /* 0xa4 */
op_rb4l, /* 0xa5 */
op_rb4hl, /* 0xa6 */
op_rb4a, /* 0xa7 */
op_rb5b, /* 0xa8 */
op_rb5c, /* 0xa9 */
op_rb5d, /* 0xaa */
op_rb5e, /* 0xab */
op_rb5h, /* 0xac */
op_rb5l, /* 0xad */
op_rb5hl, /* 0xae */
op_rb5a, /* 0xaf */
op_rb6b, /* 0xb0 */
op_rb6c, /* 0xb1 */
op_rb6d, /* 0xb2 */
op_rb6e, /* 0xb3 */
op_rb6h, /* 0xb4 */
op_rb6l, /* 0xb5 */
op_rb6hl, /* 0xb6 */
op_rb6a, /* 0xb7 */
op_rb7b, /* 0xb8 */
op_rb7c, /* 0xb9 */
op_rb7d, /* 0xba */
op_rb7e, /* 0xbb */
op_rb7h, /* 0xbc */
op_rb7l, /* 0xbd */
op_rb7hl, /* 0xbe */
op_rb7a, /* 0xbf */
op_sb0b, /* 0xc0 */
op_sb0c, /* 0xc1 */
op_sb0d, /* 0xc2 */
op_sb0e, /* 0xc3 */
op_sb0h, /* 0xc4 */
op_sb0l, /* 0xc5 */
op_sb0hl, /* 0xc6 */
op_sb0a, /* 0xc7 */
op_sb1b, /* 0xc8 */
op_sb1c, /* 0xc9 */
op_sb1d, /* 0xca */
op_sb1e, /* 0xcb */
op_sb1h, /* 0xcc */
op_sb1l, /* 0xcd */
op_sb1hl, /* 0xce */
op_sb1a, /* 0xcf */
op_sb2b, /* 0xd0 */
op_sb2c, /* 0xd1 */
op_sb2d, /* 0xd2 */
op_sb2e, /* 0xd3 */
op_sb2h, /* 0xd4 */
op_sb2l, /* 0xd5 */
op_sb2hl, /* 0xd6 */
op_sb2a, /* 0xd7 */
op_sb3b, /* 0xd8 */
op_sb3c, /* 0xd9 */
op_sb3d, /* 0xda */
op_sb3e, /* 0xdb */
op_sb3h, /* 0xdc */
op_sb3l, /* 0xdd */
op_sb3hl, /* 0xde */
op_sb3a, /* 0xdf */
op_sb4b, /* 0xe0 */
op_sb4c, /* 0xe1 */
op_sb4d, /* 0xe2 */
op_sb4e, /* 0xe3 */
op_sb4h, /* 0xe4 */
op_sb4l, /* 0xe5 */
op_sb4hl, /* 0xe6 */
op_sb4a, /* 0xe7 */
op_sb5b, /* 0xe8 */
op_sb5c, /* 0xe9 */
op_sb5d, /* 0xea */
op_sb5e, /* 0xeb */
op_sb5h, /* 0xec */
op_sb5l, /* 0xed */
op_sb5hl, /* 0xee */
op_sb5a, /* 0xef */
op_sb6b, /* 0xf0 */
op_sb6c, /* 0xf1 */
op_sb6d, /* 0xf2 */
op_sb6e, /* 0xf3 */
op_sb6h, /* 0xf4 */
op_sb6l, /* 0xf5 */
op_sb6hl, /* 0xf6 */
op_sb6a, /* 0xf7 */
op_sb7b, /* 0xf8 */
op_sb7c, /* 0xf9 */
op_sb7d, /* 0xfa */
op_sb7e, /* 0xfb */
op_sb7h, /* 0xfc */
op_sb7l, /* 0xfd */
op_sb7hl, /* 0xfe */
op_sb7a /* 0xff */
};
#ifdef WANT_TIM
t = (*op_cb[*PC++]) (); /* execute next opcode */
#else
(*op_cb[*PC++]) ();
#endif
#ifdef WANT_PCC
if (PC > ram + 65535) /* correct PC overrun */
PC = ram;
#endif
return(t);
}
/*
* This function traps all illegal opcodes following the
* initial 0xcb of a multi byte opcode.
*/
static int trap_cb(void)
{
cpu_error = OPTRAP2;
cpu_state = STOPPED;
return(0);
}
static int op_srla(void) /* SRL A */
{
(A & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
A >>= 1;
F &= ~(H_FLAG | N_FLAG);
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srlb(void) /* SRL B */
{
(B & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
B >>= 1;
F &= ~(H_FLAG | N_FLAG);
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srlc(void) /* SRL C */
{
(C & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
C >>= 1;
F &= ~(H_FLAG | N_FLAG);
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srld(void) /* SRL D */
{
(D & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
D >>= 1;
F &= ~(H_FLAG | N_FLAG);
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srle(void) /* SRL E */
{
(E & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
E >>= 1;
F &= ~(H_FLAG | N_FLAG);
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) :(F |= P_FLAG);
return(8);
}
static int op_srlh(void) /* SRL H */
{
(H & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
H >>= 1;
F &= ~(H_FLAG | N_FLAG);
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srll(void) /* SRL L */
{
(L & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
L >>= 1;
F &= ~(H_FLAG | N_FLAG);
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srlhl(void) /* SRL (HL) */
{
register BYTE *p;
p = ram + (H << 8) + L;
(*p & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
*p >>= 1;
F &= ~(H_FLAG | N_FLAG);
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_slaa(void) /* SLA A */
{
(A & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
A <<= 1;
F &= ~(H_FLAG | N_FLAG);
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slab(void) /* SLA B */
{
(B & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
B <<= 1;
F &= ~(H_FLAG | N_FLAG);
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slac(void) /* SLA C */
{
(C & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
C <<= 1;
F &= ~(H_FLAG | N_FLAG);
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slad(void) /* SLA D */
{
(D & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
D <<= 1;
F &= ~(H_FLAG | N_FLAG);
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slae(void) /* SLA E */
{
(E & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
E <<= 1;
F &= ~(H_FLAG | N_FLAG);
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slah(void) /* SLA H */
{
(H & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
H <<= 1;
F &= ~(H_FLAG | N_FLAG);
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slal(void) /* SLA L */
{
(L & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
L <<= 1;
F &= ~(H_FLAG | N_FLAG);
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_slahl(void) /* SLA (HL) */
{
register BYTE *p;
p = ram + (H << 8) + L;
(*p & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
*p <<= 1;
F &= ~(H_FLAG | N_FLAG);
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_rlra(void) /* RL A */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(A & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
A <<= 1;
if (old_c_flag) A |= 1;
F &= ~(H_FLAG | N_FLAG);
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlb(void) /* RL B */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(B & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
B <<= 1;
if (old_c_flag) B |= 1;
F &= ~(H_FLAG | N_FLAG);
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlc(void) /* RL C */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(C & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
C <<= 1;
if (old_c_flag) C |= 1;
F &= ~(H_FLAG | N_FLAG);
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rld(void) /* RL D */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(D & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
D <<= 1;
if (old_c_flag) D |= 1;
F &= ~(H_FLAG | N_FLAG);
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rle(void) /* RL E */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(E & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
E <<= 1;
if (old_c_flag) E |= 1;
F &= ~(H_FLAG | N_FLAG);
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlh(void) /* RL H */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(H & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
H <<= 1;
if (old_c_flag) H |= 1;
F &= ~(H_FLAG | N_FLAG);
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) :(F |= P_FLAG);
return(8);
}
static int op_rll(void) /* RL L */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(L & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
L <<= 1;
if (old_c_flag) L |= 1;
F &= ~(H_FLAG | N_FLAG);
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlhl(void) /* RL (HL) */
{
register int old_c_flag;
register BYTE *p;
p = ram + (H << 8) + L;
old_c_flag = F & C_FLAG;
(*p & 128) ? (F |= C_FLAG) : (F &= ~C_FLAG);
*p <<= 1;
if (old_c_flag) *p |= 1;
F &= ~(H_FLAG | N_FLAG);
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_rrra(void) /* RR A */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(A & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
A >>= 1;
if (old_c_flag) A |= 128;
F &= ~(H_FLAG | N_FLAG);
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrb(void) /* RR B */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(B & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
B >>= 1;
if (old_c_flag) B |= 128;
F &= ~(H_FLAG | N_FLAG);
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrc(void) /* RR C */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(C & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
C >>= 1;
if (old_c_flag) C |= 128;
F &= ~(H_FLAG | N_FLAG);
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrd(void) /* RR D */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(D & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
D >>= 1;
if (old_c_flag) D |= 128;
F &= ~(H_FLAG | N_FLAG);
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rre(void) /* RR E */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(E & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
E >>= 1;
if (old_c_flag) E |= 128;
F &= ~(H_FLAG | N_FLAG);
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrh(void) /* RR H */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(H & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
H >>= 1;
if (old_c_flag) H |= 128;
F &= ~(H_FLAG | N_FLAG);
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrl(void) /* RR L */
{
register int old_c_flag;
old_c_flag = F & C_FLAG;
(L & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
L >>= 1;
if (old_c_flag) L |= 128;
F &= ~(H_FLAG | N_FLAG);
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrhl(void) /* RR (HL) */
{
register int old_c_flag;
register BYTE *p;
old_c_flag = F & C_FLAG;
p = ram + (H << 8) + L;
(*p & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
*p >>= 1;
if (old_c_flag) *p |= 128;
F &= ~(H_FLAG | N_FLAG);
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_rrcra(void) /* RRC A */
{
register int i;
i = A & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
A >>= 1;
if (i) A |= 128;
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrcb(void) /* RRC B */
{
register int i;
i = B & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
B >>= 1;
if (i) B |= 128;
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrcc(void) /* RRC C */
{
register int i;
i = C & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
C >>= 1;
if (i) C |= 128;
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrcd(void) /* RRC D */
{
register int i;
i = D & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
D >>= 1;
if (i) D |= 128;
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrce(void) /* RRC E */
{
register int i;
i = E & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
E >>= 1;
if (i) E |= 128;
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrch(void) /* RRC H */
{
register int i;
i = H & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
H >>= 1;
if (i) H |= 128;
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrcl(void) /* RRC L */
{
register int i;
i = L & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
L >>= 1;
if (i) L |= 128;
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rrchl(void) /* RRC (HL) */
{
register int i;
register BYTE *p;
p = ram + (H << 8) + L;
i = *p & 1;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
*p >>= 1;
if (i) *p |= 128;
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_rlcra(void) /* RLC A */
{
register int i;
i = A & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
A <<= 1;
if (i) A |= 1;
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlcb(void) /* RLC B */
{
register int i;
i = B & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
B <<= 1;
if (i) B |= 1;
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlcc(void) /* RLC C */
{
register int i;
i = C & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
C <<= 1;
if (i) C |= 1;
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlcd(void) /* RLC D */
{
register int i;
i = D & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
D <<= 1;
if (i) D |= 1;
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlce(void) /* RLC E */
{
register int i;
i = E & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
E <<= 1;
if (i) E |= 1;
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlch(void) /* RLC H */
{
register int i;
i = H & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
H <<= 1;
if (i) H |= 1;
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlcl(void) /* RLC L */
{
register int i;
i = L & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
L <<= 1;
if (i) L |= 1;
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_rlchl(void) /* RLC (HL) */
{
register int i;
register BYTE *p;
p = ram + (H << 8) + L;
i = *p & 128;
(i) ? (F |= C_FLAG) : (F &= ~C_FLAG);
F &= ~(H_FLAG | N_FLAG);
*p <<= 1;
if (i) *p |= 1;
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_sraa(void) /* SRA A */
{
register int i;
i = A & 128;
(A & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
A >>= 1;
A |= i;
F &= ~(H_FLAG | N_FLAG);
(A) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(A & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[A]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srab(void) /* SRA B */
{
register int i;
i = B & 128;
(B & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
B >>= 1;
B |= i;
F &= ~(H_FLAG | N_FLAG);
(B) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(B & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[B]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srac(void) /* SRA C */
{
register int i;
i = C & 128;
(C & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
C >>= 1;
C |= i;
F &= ~(H_FLAG | N_FLAG);
(C) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(C & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[C]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srad(void) /* SRA D */
{
register int i;
i = D & 128;
(D & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
D >>= 1;
D |= i;
F &= ~(H_FLAG | N_FLAG);
(D) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(D & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[D]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srae(void) /* SRA E */
{
register int i;
i = E & 128;
(E & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
E >>= 1;
E |= i;
F &= ~(H_FLAG | N_FLAG);
(E) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(E & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[E]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srah(void) /* SRA H */
{
register int i;
i = H & 128;
(H & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
H >>= 1;
H |= i;
F &= ~(H_FLAG | N_FLAG);
(H) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(H & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[H]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_sral(void) /* SRA L */
{
register int i;
i = L & 128;
(L & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
L >>= 1;
L |= i;
F &= ~(H_FLAG | N_FLAG);
(L) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(L & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[L]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(8);
}
static int op_srahl(void) /* SRA (HL) */
{
register int i;
register BYTE *p;
p = ram + (H << 8) + L;
i = *p & 128;
(*p & 1) ? (F |= C_FLAG) : (F &= ~C_FLAG);
*p >>= 1;
*p |= i;
F &= ~(H_FLAG | N_FLAG);
(*p) ? (F &= ~Z_FLAG) : (F |= Z_FLAG);
(*p & 128) ? (F |= S_FLAG) : (F &= ~S_FLAG);
(parrity[*p]) ? (F &= ~P_FLAG) : (F |= P_FLAG);
return(15);
}
static int op_sb0a(void) /* SET 0,A */
{
A |= 1;
return(8);
}
static int op_sb1a(void) /* SET 1,A */
{
A |= 2;
return(8);
}
static int op_sb2a(void) /* SET 2,A */
{
A |= 4;
return(8);
}
static int op_sb3a(void) /* SET 3,A */
{
A |= 8;
return(8);
}
static int op_sb4a(void) /* SET 4,A */
{
A |= 16;
return(8);
}
static int op_sb5a(void) /* SET 5,A */
{
A |= 32;
return(8);
}
static int op_sb6a(void) /* SET 6,A */
{
A |= 64;
return(8);
}
static int op_sb7a(void) /* SET 7,A */
{
A |= 128;
return(8);
}
static int op_sb0b(void) /* SET 0,B */
{
B |= 1;
return(8);
}
static int op_sb1b(void) /* SET 1,B */
{
B |= 2;
return(8);
}
static int op_sb2b(void) /* SET 2,B */
{
B |= 4;
return(8);
}
static int op_sb3b(void) /* SET 3,B */
{
B |= 8;
return(8);
}
static int op_sb4b(void) /* SET 4,B */
{
B |= 16;
return(8);
}
static int op_sb5b(void) /* SET 5,B */
{
B |= 32;
return(8);
}
static int op_sb6b(void) /* SET 6,B */
{
B |= 64;
return(8);
}
static int op_sb7b(void) /* SET 7,B */
{
B |= 128;
return(8);
}
static int op_sb0c(void) /* SET 0,C */
{
C |= 1;
return(8);
}
static int op_sb1c(void) /* SET 1,C */
{
C |= 2;
return(8);
}
static int op_sb2c(void) /* SET 2,C */
{
C |= 4;
return(8);
}
static int op_sb3c(void) /* SET 3,C */
{
C |= 8;
return(8);
}
static int op_sb4c(void) /* SET 4,C */
{
C |= 16;
return(8);
}
static int op_sb5c(void) /* SET 5,C */
{
C |= 32;
return(8);
}
static int op_sb6c(void) /* SET 6,C */
{
C |= 64;
return(8);
}
static int op_sb7c(void) /* SET 7,C */
{
C |= 128;
return(8);
}
static int op_sb0d(void) /* SET 0,D */
{
D |= 1;
return(8);
}
static int op_sb1d(void) /* SET 1,D */
{
D |= 2;
return(8);
}
static int op_sb2d(void) /* SET 2,D */
{
D |= 4;
return(8);
}
static int op_sb3d(void) /* SET 3,D */
{
D |= 8;
return(8);
}
static int op_sb4d(void) /* SET 4,D */
{
D |= 16;
return(8);
}
static int op_sb5d(void) /* SET 5,D */
{
D |= 32;
return(8);
}
static int op_sb6d(void) /* SET 6,D */
{
D |= 64;
return(8);
}
static int op_sb7d(void) /* SET 7,D */
{
D |= 128;
return(8);
}
static int op_sb0e(void) /* SET 0,E */
{
E |= 1;
return(8);
}
static int op_sb1e(void) /* SET 1,E */
{
E |= 2;
return(8);
}
static int op_sb2e(void) /* SET 2,E */
{
E |= 4;
return(8);
}
static int op_sb3e(void) /* SET 3,E */
{
E |= 8;
return(8);
}
static int op_sb4e(void) /* SET 4,E */
{
E |= 16;
return(8);
}
static int op_sb5e(void) /* SET 5,E */
{
E |= 32;
return(8);
}
static int op_sb6e(void) /* SET 6,E */
{
E |= 64;
return(8);
}
static int op_sb7e(void) /* SET 7,E */
{
E |= 128;
return(8);
}
static int op_sb0h(void) /* SET 0,H */
{
H |= 1;
return(8);
}
static int op_sb1h(void) /* SET 1,H */
{
H |= 2;
return(8);
}
static int op_sb2h(void) /* SET 2,H */
{
H |= 4;
return(8);
}
static int op_sb3h(void) /* SET 3,H */
{
H |= 8;
return(8);
}
static int op_sb4h(void) /* SET 4,H */
{
H |= 16;
return(8);
}
static int op_sb5h(void) /* SET 5,H */
{
H |= 32;
return(8);
}
static int op_sb6h(void) /* SET 6,H */
{
H |= 64;
return(8);
}
static int op_sb7h(void) /* SET 7,H */
{
H |= 128;
return(8);
}
static int op_sb0l(void) /* SET 0,L */
{
L |= 1;
return(8);
}
static int op_sb1l(void) /* SET 1,L */
{
L |= 2;
return(8);
}
static int op_sb2l(void) /* SET 2,L */
{
L |= 4;
return(8);
}
static int op_sb3l(void) /* SET 3,L */
{
L |= 8;
return(8);
}
static int op_sb4l(void) /* SET 4,L */
{
L |= 16;
return(8);
}
static int op_sb5l(void) /* SET 5,L */
{
L |= 32;
return(8);
}
static int op_sb6l(void) /* SET 6,L */
{
L |= 64;
return(8);
}
static int op_sb7l(void) /* SET 7,L */
{
L |= 128;
return(8);
}
static int op_sb0hl(void) /* SET 0,(HL) */
{
*(ram + (H << 8) + L) |= 1;
return(15);
}
static int op_sb1hl(void) /* SET 1,(HL) */
{
*(ram + (H << 8) + L) |= 2;
return(15);
}
static int op_sb2hl(void) /* SET 2,(HL) */
{
*(ram + (H << 8) + L) |= 4;
return(15);
}
static int op_sb3hl(void) /* SET 3,(HL) */
{
*(ram + (H << 8) + L) |= 8;
return(15);
}
static int op_sb4hl(void) /* SET 4,(HL) */
{
*(ram + (H << 8) + L) |= 16;
return(15);
}
static int op_sb5hl(void) /* SET 5,(HL) */
{
*(ram + (H << 8) + L) |= 32;
return(15);
}
static int op_sb6hl(void) /* SET 6,(HL) */
{
*(ram + (H << 8) + L) |= 64;
return(15);
}
static int op_sb7hl(void) /* SET 7,(HL) */
{
*(ram + (H << 8) + L) |= 128;
return(15);
}
static int op_rb0a(void) /* RES 0,A */
{
A &= ~1;
return(8);
}
static int op_rb1a(void) /* RES 1,A */
{
A &= ~2;
return(8);
}
static int op_rb2a(void) /* RES 2,A */
{
A &= ~4;
return(8);
}
static int op_rb3a(void) /* RES 3,A */
{
A &= ~8;
return(8);
}
static int op_rb4a(void) /* RES 4,A */
{
A &= ~16;
return(8);
}
static int op_rb5a(void) /* RES 5,A */
{
A &= ~32;
return(8);
}
static int op_rb6a(void) /* RES 6,A */
{
A &= ~64;
return(8);
}
static int op_rb7a(void) /* RES 7,A */
{
A &= ~128;
return(8);
}
static int op_rb0b(void) /* RES 0,B */
{
B &= ~1;
return(8);
}
static int op_rb1b(void) /* RES 1,B */
{
B &= ~2;
return(8);
}
static int op_rb2b(void) /* RES 2,B */
{
B &= ~4;
return(8);
}
static int op_rb3b(void) /* RES 3,B */
{
B &= ~8;
return(8);
}
static int op_rb4b(void) /* RES 4,B */
{
B &= ~16;
return(8);
}
static int op_rb5b(void) /* RES 5,B */
{
B &= ~32;
return(8);
}
static int op_rb6b(void) /* RES 6,B */
{
B &= ~64;
return(8);
}
static int op_rb7b(void) /* RES 7,B */
{
B &= ~128;
return(8);
}
static int op_rb0c(void) /* RES 0,C */
{
C &= ~1;
return(8);
}
static int op_rb1c(void) /* RES 1,C */
{
C &= ~2;
return(8);
}
static int op_rb2c(void) /* RES 2,C */
{
C &= ~4;
return(8);
}
static int op_rb3c(void) /* RES 3,C */
{
C &= ~8;
return(8);
}
static int op_rb4c(void) /* RES 4,C */
{
C &= ~16;
return(8);
}
static int op_rb5c(void) /* RES 5,C */
{
C &= ~32;
return(8);
}
static int op_rb6c(void) /* RES 6,C */
{
C &= ~64;
return(8);
}
static int op_rb7c(void) /* RES 7,C */
{
C &= ~128;
return(8);
}
static int op_rb0d(void) /* RES 0,D */
{
D &= ~1;
return(8);
}
static int op_rb1d(void) /* RES 1,D */
{
D &= ~2;
return(8);
}
static int op_rb2d(void) /* RES 2,D */
{
D &= ~4;
return(8);
}
static int op_rb3d(void) /* RES 3,D */
{
D &= ~8;
return(8);
}
static int op_rb4d(void) /* RES 4,D */
{
D &= ~16;
return(8);
}
static int op_rb5d(void) /* RES 5,D */
{
D &= ~32;
return(8);
}
static int op_rb6d(void) /* RES 6,D */
{
D &= ~64;
return(8);
}
static int op_rb7d(void) /* RES 7,D */
{
D &= ~128;
return(8);
}
static int op_rb0e(void) /* RES 0,E */
{
E &= ~1;
return(8);
}
static int op_rb1e(void) /* RES 1,E */
{
E &= ~2;
return(8);
}
static int op_rb2e(void) /* RES 2,E */
{
E &= ~4;
return(8);
}
static int op_rb3e(void) /* RES 3,E */
{
E &= ~8;
return(8);
}
static int op_rb4e(void) /* RES 4,E */
{
E &= ~16;
return(8);
}
static int op_rb5e(void) /* RES 5,E */
{
E &= ~32;
return(8);
}
static int op_rb6e(void) /* RES 6,E */
{
E &= ~64;
return(8);
}
static int op_rb7e(void) /* RES 7,E */
{
E &= ~128;
return(8);
}
static int op_rb0h(void) /* RES 0,H */
{
H &= ~1;
return(8);
}
static int op_rb1h(void) /* RES 1,H */
{
H &= ~2;
return(8);
}
static int op_rb2h(void) /* RES 2,H */
{
H &= ~4;
return(8);
}
static int op_rb3h(void) /* RES 3,H */
{
H &= ~8;
return(8);
}
static int op_rb4h(void) /* RES 4,H */
{
H &= ~16;
return(8);
}
static int op_rb5h(void) /* RES 5,H */
{
H &= ~32;
return(8);
}
static int op_rb6h(void) /* RES 6,H */
{
H &= ~64;
return(8);
}
static int op_rb7h(void) /* RES 7,H */
{
H &= ~128;
return(8);
}
static int op_rb0l(void) /* RES 0,L */
{
L &= ~1;
return(8);
}
static int op_rb1l(void) /* RES 1,L */
{
L &= ~2;
return(8);
}
static int op_rb2l(void) /* RES 2,L */
{
L &= ~4;
return(8);
}
static int op_rb3l(void) /* RES 3,L */
{
L &= ~8;
return(8);
}
static int op_rb4l(void) /* RES 4,L */
{
L &= ~16;
return(8);
}
static int op_rb5l(void) /* RES 5,L */
{
L &= ~32;
return(8);
}
static int op_rb6l(void) /* RES 6,L */
{
L &= ~64;
return(8);
}
static int op_rb7l(void) /* RES 7,L */
{
L &= ~128;
return(8);
}
static int op_rb0hl(void) /* RES 0,(HL) */
{
*(ram + (H << 8) + L) &= ~1;
return(15);
}
static int op_rb1hl(void) /* RES 1,(HL) */
{
*(ram + (H << 8) + L) &= ~2;
return(15);
}
static int op_rb2hl(void) /* RES 2,(HL) */
{
*(ram + (H << 8) + L) &= ~4;
return(15);
}
static int op_rb3hl(void) /* RES 3,(HL) */
{
*(ram + (H << 8) + L) &= ~8;
return(15);
}
static int op_rb4hl(void) /* RES 4,(HL) */
{
*(ram + (H << 8) + L) &= ~16;
return(15);
}
static int op_rb5hl(void) /* RES 5,(HL) */
{
*(ram + (H << 8) + L) &= ~32;
return(15);
}
static int op_rb6hl(void) /* RES 6,(HL) */
{
*(ram + (H << 8) + L) &= ~64;
return(15);
}
static int op_rb7hl(void) /* RES 7,(HL) */
{
*(ram + (H << 8) + L) &= ~128;
return(15);
}
static int op_tb0a(void) /* BIT 0,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1a(void) /* BIT 1,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2a(void) /* BIT 2,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3a(void) /* BIT 3,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4a(void) /* BIT 4,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5a(void) /* BIT 5,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6a(void) /* BIT 6,A */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(A & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7a(void) /* BIT 7,A */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (A & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0b(void) /* BIT 0,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1b(void) /* BIT 1,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2b(void) /* BIT 2,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3b(void) /* BIT 3,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4b(void) /* BIT 4,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5b(void) /* BIT 5,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6b(void) /* BIT 6,B */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(B & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7b(void) /* BIT 7,B */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (B & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0c(void) /* BIT 0,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1c(void) /* BIT 1,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2c(void) /* BIT 2,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3c(void) /* BIT 3,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4c(void) /* BIT 4,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5c(void) /* BIT 5,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6c(void) /* BIT 6,C */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(C & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7c(void) /* BIT 7,C */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (C & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0d(void) /* BIT 0,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1d(void) /* BIT 1,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2d(void) /* BIT 2,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3d(void) /* BIT 3,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4d(void) /* BIT 4,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5d(void) /* BIT 5,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6d(void) /* BIT 6,D */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(D & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7d(void) /* BIT 7,D */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (D & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0e(void) /* BIT 0,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1e(void) /* BIT 1,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2e(void) /* BIT 2,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3e(void) /* BIT 3,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4e(void) /* BIT 4,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5e(void) /* BIT 5,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6e(void) /* BIT 6,E */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(E & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7e(void) /* BIT 7,E */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (E & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0h(void) /* BIT 0,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1h(void) /* BIT 1,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2h(void) /* BIT 2,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3h(void) /* BIT 3,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4h(void) /* BIT 4,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5h(void) /* BIT 5,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6h(void) /* BIT 6,H */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(H & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7h(void) /* BIT 7,H */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (H & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0l(void) /* BIT 0,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 1) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb1l(void) /* BIT 1,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 2) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb2l(void) /* BIT 2,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 4) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb3l(void) /* BIT 3,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 8) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb4l(void) /* BIT 4,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 16) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb5l(void) /* BIT 5,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 32) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb6l(void) /* BIT 6,L */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(L & 64) ? (F &= ~(Z_FLAG | P_FLAG)) : (F |= (Z_FLAG | P_FLAG));
return(8);
}
static int op_tb7l(void) /* BIT 7,L */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (L & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(8);
}
static int op_tb0hl(void) /* BIT 0,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 1) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb1hl(void) /* BIT 1,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 2) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb2hl(void) /* BIT 2,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 4) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb3hl(void) /* BIT 3,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 8) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb4hl(void) /* BIT 4,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 16) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb5hl(void) /* BIT 5,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 32) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb6hl(void) /* BIT 6,(HL) */
{
F &= ~(N_FLAG | S_FLAG);
F |= H_FLAG;
(*(ram + (H << 8) + L) & 64) ? (F &= ~(Z_FLAG | P_FLAG))
: (F |= (Z_FLAG | P_FLAG));
return(12);
}
static int op_tb7hl(void) /* BIT 7,(HL) */
{
F &= ~N_FLAG;
F |= H_FLAG;
if (*(ram + (H << 8) + L) & 128) {
F &= ~(Z_FLAG | P_FLAG);
F |= S_FLAG;
} else {
F |= (Z_FLAG | P_FLAG);
F &= ~S_FLAG;
}
return(12);
}