forked from amberisvibin/chibi-pc09
2512 lines
48 KiB
C
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);
|
|
}
|