2 * Simulator of microcontrollers (z80mac.h)
4 * some z80 code base from Karl Bongers karl@turbobit.com
6 * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
8 * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
13 #define BITPOS_C 0 // 1
14 #define BITPOS_Z 1 // 2H
15 #define BITPOS_N 2 // 4H
16 #define BITPOS_I 3 // 8H
17 #define BITPOS_H 4 // 10H
18 #define BITPUS_V 7 // 80H
20 #define store2(addr, val) { ram->set((t_addr) (addr), (val >> 8) & 0xff); \
21 ram->set((t_addr) (addr+1), val & 0xff); }
22 #define store1(addr, val) ram->set((t_addr) (addr), val)
23 #define get1(addr) ram->get((t_addr) (addr))
24 #define get2(addr) ((ram->get((t_addr) (addr)) << 8) | ram->get((t_addr) (addr+1)) )
25 #define fetch2() ((fetch() << 8) | fetch() )
26 #define fetch1() fetch()
27 #define push2(val) {store2(regs.SP-1,(val)); regs.SP-=2; }
28 #define push1(val) {store1(regs.SP,(val)); regs.SP-=1; }
29 #define pop2(var) {var=get2(regs.SP+1); regs.SP+=2;}
30 #define pop1(var) {var=get1(regs.SP+1); regs.SP+=1;}
33 #define FLAG_SET(f) {regs.P |= f;}
34 #define FLAG_CLEAR(f) {regs.P &= ~(f);}
35 #define FLAG_ASSIGN(f,c) {regs.P = (c) ? regs.P | (f) : regs.P & ~(f);}
36 #define FLAG_NZ(f) { \
37 regs.P = (regs.P & ~(BIT_N|BIT_Z)) \
38 | (((f) & 0xff) ? 0 : BIT_Z) \
39 | (((f) & 0x80) ? BIT_N : 0) \
41 #define EA_IMM(c) ((((c) >> 4) & 0xf)==0xa)
42 #define OPERAND(code,prefix) (EA_IMM(code) ? fetch() : get1(fetchea(code,prefix)))