2 Skelton for retropc emulator
4 Origin : MESS UPD7810 Core
5 Author : Takeda.Toshiya
18 #define VA regs[0].w.l
19 #define BC regs[1].w.l
20 #define DE regs[2].w.l
21 #define HL regs[3].w.l
23 #define _V regs[0].b.h
24 #define _A regs[0].b.l
25 #define _B regs[1].b.h
26 #define _C regs[1].b.l
27 #define _D regs[2].b.h
28 #define _E regs[2].b.l
29 #define _H regs[3].b.h
30 #define _L regs[3].b.l
32 #define altVA regs[4].w.l
33 #define altBC regs[5].w.l
34 #define altDE regs[6].w.l
35 #define altHL regs[7].w.l
37 #define altV regs[4].b.h
38 #define altA regs[4].b.l
39 #define altB regs[5].b.h
40 #define altC regs[5].b.l
41 #define altD regs[6].b.h
42 #define altE regs[6].b.l
43 #define altH regs[7].b.h
44 #define altL regs[7].b.l
59 #define SIO_DISABLED (!(MC & 4) && (IN8(P_C) & 4))
60 #define SIO_EXTCLOCK (MC & 0x80)
62 static const uint8_t irq_bits[5] = {
63 INTF0, INTFT, INTF1, INTF2, INTFS
66 static const uint16_t irq_addr[5] = {
67 0x0004, 0x0008, 0x0010, 0x0020, 0x0040
71 int oplen; // bytes of opecode
75 static const op_t op[256] = {
76 {1, 4}, {1, 6}, {1, 7}, {1, 7}, {3,10}, {3,16}, {1, 4}, {2, 7}, {1,11}, {1, 4}, {1, 4}, {1, 4}, {1, 4}, {1, 4}, {1, 4}, {1, 4},
77 {1, 4}, {1, 4}, {1, 7}, {1, 7}, {3,10}, {3,16}, {2, 7}, {2, 7}, {1,11}, {1, 4}, {1, 4}, {1, 4}, {1, 4}, {1, 4}, {1, 4}, {1, 4},
78 {2,13}, {1,19}, {1, 7}, {1, 7}, {3,10}, {3,13}, {2, 7}, {2, 7}, {2,10}, {1, 7}, {1, 7}, {1, 7}, {1, 7}, {1, 7}, {1, 7}, {1, 7},
79 {2,13}, {1,13}, {1, 7}, {1, 7}, {3,10}, {3,13}, {2, 7}, {2, 7}, {2,10}, {1, 7}, {1, 7}, {1, 7}, {1, 7}, {1, 7}, {1, 7}, {1, 7},
80 {1, 4}, {1, 4}, {1, 4}, {1, 4}, {3,16}, {3,13}, {2, 7}, {2, 7}, {0, 0}, {2,10}, {2,10}, {2,10}, {0, 0}, {0, 0}, {2,17}, {2,17},
81 {1, 4}, {1, 4}, {1, 4}, {1, 4}, {3,10}, {3,13}, {2, 7}, {2, 7}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
82 {0, 0}, {1, 4}, {1,15}, {1,13}, {0, 0}, {3,13}, {2, 7}, {2, 7}, {2, 7}, {2, 7}, {2, 7}, {2, 7}, {2, 7}, {2, 7}, {2, 7}, {2, 7},
83 {0, 0}, {3,13}, {1,19}, {1, 4}, {0, 0}, {3,13}, {2, 7}, {2, 7}, {2,16}, {2,16}, {2,16}, {2,16}, {2,16}, {2,16}, {2,16}, {2,16},
84 {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19},
85 {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19},
86 {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19},
87 {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19}, {1,19},
88 {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13},
89 {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13},
90 {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13},
91 {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}, {1,13}
94 static const op_t op48[256] = {
95 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2,17}, {2,15},
96 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2,17}, {2,15},
97 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2,11}, {2,11}, {2,17}, {2,15},
98 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2,17}, {2,17}, {2, 8}, {2, 8}, {2,11}, {2, 8}, {2,17}, {2,15},
99 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
100 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
101 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
102 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
103 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
104 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
105 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
106 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
107 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
108 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
109 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
110 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}
112 static const op_t op4c[256] = {
113 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
114 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
115 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
116 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
117 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
118 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
119 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
120 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
121 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
122 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
123 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
124 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
125 {2,10}, {2,10}, {2,10}, {2,10}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2,10}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
126 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
127 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
128 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}
130 static const op_t op4d[256] = {
131 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
132 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
133 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
134 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
135 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
136 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
137 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
138 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
139 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
140 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
141 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
142 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10},
143 {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2,10}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
144 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
145 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
146 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}
148 static const op_t op60[256] = {
149 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
150 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
151 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
152 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
153 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
154 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
155 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
156 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
157 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
158 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
159 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
160 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
161 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
162 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
163 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
164 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}
166 static const op_t op64[256] = {
167 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
168 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
169 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
170 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
171 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
172 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
173 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
174 {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11}, {3,11},
175 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
176 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
177 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {3,14}, {3,14}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
178 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {3,14}, {3,14}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
179 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {3,14}, {3,14}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
180 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {3,14}, {3,14}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
181 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {3,14}, {3,14}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
182 {3,17}, {3,17}, {3,17}, {3,17}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {3,14}, {3,14}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}
184 static const op_t op70[256] = {
185 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {4,20}, {4,20},
186 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {4,20}, {4,20},
187 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {4,20}, {4,20},
188 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {4,20}, {4,20},
189 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
190 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
191 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17},
192 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17}, {4,17},
193 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
194 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
195 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
196 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
197 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
198 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
199 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11},
200 {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2, 8}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}, {2,11}
202 static const op_t op74[256] = {
203 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
204 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
205 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
206 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
207 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
208 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
209 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
210 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
211 {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
212 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
213 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
214 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
215 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
216 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
217 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8},
218 {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {3,14}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}, {2, 8}
223 #define ZHC_ADD(a, b, c) { \
230 PSW = (PSW & ~F_CY) | (c); \
236 if((a & 15) < (b & 15)) { \
242 #define ZHC_SUB(a, b, c) { \
249 PSW = (PSW & ~F_CY) | (c); \
255 if((a & 15) > (b & 15)) { \
274 if(!(PSW & F_CY)) { \
291 inline uint8_t UPD7801::RM8(uint16_t addr)
293 #ifdef UPD7801_MEMORY_WAIT
295 uint8_t val = d_mem->read_data8w(addr, &wait);
299 return d_mem->read_data8(addr);
303 inline void UPD7801::WM8(uint16_t addr, uint8_t val)
305 #ifdef UPD7801_MEMORY_WAIT
307 d_mem->write_data8w(addr, val, &wait);
310 d_mem->write_data8(addr, val);
314 inline uint16_t UPD7801::RM16(uint16_t addr)
316 #ifdef UPD7801_MEMORY_WAIT
318 uint16_t val = d_mem->read_data16w(addr, &wait);
322 return d_mem->read_data16(addr);
326 inline void UPD7801::WM16(uint16_t addr, uint16_t val)
328 #ifdef UPD7801_MEMORY_WAIT
330 d_mem->write_data16w(addr, val, &wait);
333 d_mem->write_data16(addr, val);
337 inline uint8_t UPD7801::FETCH8()
339 #ifdef UPD7801_MEMORY_WAIT
341 uint8_t val = d_mem->read_data8w(PC++, &wait);
345 return d_mem->read_data8(PC++);
349 inline uint16_t UPD7801::FETCH16()
351 #ifdef UPD7801_MEMORY_WAIT
353 uint16_t val = d_mem->read_data16w(PC, &wait);
356 uint16_t val = d_mem->read_data16(PC);
362 inline uint16_t UPD7801::FETCHWA()
364 #ifdef UPD7801_MEMORY_WAIT
366 uint16_t val = (_V << 8) | d_mem->read_data8w(PC++, &wait);
370 return (_V << 8) | d_mem->read_data8(PC++);
374 inline uint8_t UPD7801::POP8()
376 #ifdef UPD7801_MEMORY_WAIT
378 uint8_t val = d_mem->read_data8w(SP++, &wait);
382 return d_mem->read_data8(SP++);
386 inline void UPD7801::PUSH8(uint8_t val)
388 #ifdef UPD7801_MEMORY_WAIT
390 d_mem->write_data8w(--SP, val, &wait);
393 d_mem->write_data8(--SP, val);
397 inline uint16_t UPD7801::POP16()
399 #ifdef UPD7801_MEMORY_WAIT
401 uint16_t val = d_mem->read_data16w(SP, &wait);
404 uint16_t val = d_mem->read_data16(SP);
410 inline void UPD7801::PUSH16(uint16_t val)
413 #ifdef UPD7801_MEMORY_WAIT
415 d_mem->write_data16w(SP, val, &wait);
418 d_mem->write_data16(SP, val);
424 inline uint8_t UPD7801::IN8(int port)
427 return (d_io->read_io8(P_C) & 0x87) | (PORTC & 0x78);
429 return d_io->read_io8(port);
432 inline void UPD7801::OUT8(int port, uint8_t val)
437 d_io->write_io8(port, val);
440 // IOM : 0x20 = I/O, 0 = MEMORY
441 inline void UPD7801::UPDATE_PORTC(uint8_t IOM)
443 d_io->write_io8(P_C, (PORTC & MC) | ((SAK | TO | IOM) & ~MC));
449 uint8_t tmp = r + FETCH8() + (PSW & F_CY); \
450 ZHC_ADD(tmp, r, (PSW & F_CY)); \
453 #define ACI_IO(p) { \
454 uint8_t old = IN8(p); \
455 uint8_t tmp = old + FETCH8() + (PSW & F_CY); \
456 ZHC_ADD(tmp, old, (PSW & F_CY)); \
459 #define ADC(r, n) { \
460 uint8_t tmp = r + n + (PSW & F_CY); \
461 ZHC_ADD(tmp, r, (PSW & F_CY)); \
465 uint8_t tmp = _A + RM8(FETCHWA()) + (PSW & F_CY); \
466 ZHC_ADD(tmp, _A, (PSW & F_CY)); \
470 uint8_t tmp = _A + RM8(r) + (PSW & F_CY); \
471 ZHC_ADD(tmp, _A, (PSW & F_CY)); \
474 #define ADD(r, n) { \
475 uint8_t tmp = r + n; \
476 ZHC_ADD(tmp, r, 0); \
479 #define ADDNC(r, n) { \
480 uint8_t tmp = r + n; \
481 ZHC_ADD(tmp, r, 0); \
486 uint8_t tmp = _A + RM8(FETCHWA()); \
487 ZHC_ADD(tmp, _A, 0); \
491 #define ADDNCX(r) { \
492 uint8_t tmp = _A + RM8(r); \
493 ZHC_ADD(tmp, _A, 0); \
498 uint8_t tmp = _A + RM8(FETCHWA()); \
499 ZHC_ADD(tmp, _A, 0); \
503 uint8_t tmp = _A + RM8(r); \
504 ZHC_ADD(tmp, _A, 0); \
508 uint8_t tmp = r + FETCH8(); \
509 ZHC_ADD(tmp, r, 0); \
512 #define ADI_IO(p) { \
513 uint8_t old = IN8(p); \
514 uint8_t tmp = old + FETCH8(); \
515 ZHC_ADD(tmp, old, 0); \
519 uint8_t tmp = r + FETCH8(); \
520 ZHC_ADD(tmp, r, 0); \
524 #define ADINC_IO(p) { \
525 uint8_t old = IN8(p); \
526 uint8_t tmp = old + FETCH8(); \
527 ZHC_ADD(tmp, old, 0); \
531 #define ANA(r, n) { \
536 _A &= RM8(FETCHWA()); \
547 #define ANI_IO(p) { \
548 uint8_t tmp = IN8(p) & FETCH8(); \
553 uint16_t dst = FETCHWA(); \
554 uint8_t tmp = RM8(dst) & FETCH8(); \
559 if(RM8(FETCHWA()) & (1 << b)) { \
564 WM8(DE++, RM8(HL++)); \
573 uint16_t dst = 0x800 + ((o & 7) << 8) + FETCH8(); \
578 uint16_t dst = FETCH16(); \
583 uint16_t dst = RM16(0x80 + ((o & 0x3f) << 1)); \
588 uint8_t lo = _A & 0xf, hi = _A >> 4, diff = 0; \
589 if(lo <= 9 && !(PSW & F_HC)) { \
590 diff = (hi >= 10 || (PSW & F_CY)) ? 0x60 : 0x00; \
591 } else if(lo >= 10 && !(PSW & F_HC)) { \
592 diff = (hi >= 9 || (PSW & F_CY)) ? 0x66 : 0x06; \
593 } else if(lo <= 2 && (PSW & F_HC)) { \
594 diff = (hi >= 10 || (PSW & F_CY)) ? 0x66 : 0x06; \
602 if((PSW & F_CY) || (lo <= 9 ? hi >= 10 : hi >= 9)) { \
614 uint8_t carry = PSW & F_CY; \
615 uint8_t tmp = r - 1; \
616 ZHC_SUB(tmp, r, 0); \
619 PSW = (PSW & ~F_CY) | carry; \
622 uint8_t carry = PSW & F_CY; \
623 uint16_t dst = FETCHWA(); \
624 uint8_t old = RM8(dst); \
625 uint8_t tmp = old - 1; \
626 ZHC_SUB(tmp, old, 0); \
629 PSW = (PSW & ~F_CY) | carry; \
631 #define EQA(r, n) { \
632 uint8_t tmp = r - n; \
633 ZHC_SUB(tmp, r, 0); \
637 uint8_t tmp = _A - RM8(FETCHWA()); \
638 ZHC_SUB(tmp, _A, 0); \
642 uint8_t tmp = _A - RM8(r); \
643 ZHC_SUB(tmp, _A, 0); \
647 uint8_t tmp = r - FETCH8(); \
648 ZHC_SUB(tmp, r, 0); \
651 #define EQI_IO(p) { \
652 uint8_t old = IN8(p); \
653 uint8_t tmp = old - FETCH8(); \
654 ZHC_SUB(tmp, old, 0); \
658 uint8_t old = RM8(FETCHWA()); \
659 uint8_t tmp = old - FETCH8(); \
660 ZHC_SUB(tmp, old, 0); \
665 tmp = VA; VA = altVA; altVA = tmp; \
669 tmp = BC; BC = altBC; altBC = tmp; \
670 tmp = DE; DE = altDE; altDE = tmp; \
671 tmp = HL; HL = altHL; altHL = tmp; \
673 #define GTA(r, n) { \
674 uint8_t tmp = r - n - 1; \
675 ZHC_SUB(tmp, r, 1); \
679 uint8_t tmp = _A - RM8(FETCHWA()) - 1; \
680 ZHC_SUB(tmp, _A, 1); \
684 uint8_t tmp = _A - RM8(r) - 1; \
685 ZHC_SUB(tmp, _A, 1); \
689 uint8_t tmp = r - FETCH8() - 1; \
690 ZHC_SUB(tmp, r, 1); \
693 #define GTI_IO(p) { \
694 uint8_t old = IN8(p); \
695 uint8_t tmp = old - FETCH8() - 1; \
696 ZHC_SUB(tmp, old, 1); \
700 uint8_t old = RM8(FETCHWA()); \
701 uint8_t tmp = old - FETCH8() - 1; \
702 ZHC_SUB(tmp, old, 1); \
706 uint8_t carry = PSW & F_CY; \
707 uint8_t tmp = r + 1; \
708 ZHC_ADD(tmp, r, 0); \
711 PSW = (PSW & ~F_CY) | carry; \
714 uint8_t carry = PSW & F_CY; \
715 uint16_t dst = FETCHWA(); \
716 uint8_t old = RM8(dst); \
717 uint8_t tmp = old + 1; \
718 ZHC_ADD(tmp, old, 0); \
721 PSW = (PSW & ~F_CY) | carry; \
724 uint8_t tmp = FETCH8(); \
731 #define LTA(r, n) { \
732 uint8_t tmp = r - n; \
733 ZHC_SUB(tmp, r, 0); \
737 uint8_t tmp = _A - RM8(FETCHWA()); \
738 ZHC_SUB(tmp, _A, 0); \
742 uint8_t tmp = _A - RM8(r); \
743 ZHC_SUB(tmp, _A, 0); \
747 uint8_t tmp = r - FETCH8(); \
748 ZHC_SUB(tmp, r, 0); \
751 #define LTI_IO(p) { \
752 uint8_t old = IN8(p); \
753 uint8_t tmp = old - FETCH8(); \
754 ZHC_SUB(tmp, old, 0); \
758 uint8_t old = RM8(FETCHWA()); \
759 uint8_t tmp = old - FETCH8(); \
760 ZHC_SUB(tmp, old, 0); \
764 uint16_t dst = FETCHWA(); \
765 WM8(dst, FETCH8()); \
767 #define NEA(r, n) { \
768 uint8_t tmp = r - n; \
769 ZHC_SUB(tmp, r, 0); \
773 uint8_t tmp = _A - RM8(FETCHWA()); \
774 ZHC_SUB(tmp, _A, 0); \
778 uint8_t tmp = _A - RM8(r); \
779 ZHC_SUB(tmp, _A, 0); \
783 uint8_t tmp = r - FETCH8(); \
784 ZHC_SUB(tmp, r, 0); \
787 #define NEI_IO(p) { \
788 uint8_t old = IN8(p); \
789 uint8_t tmp = old - FETCH8(); \
790 ZHC_SUB(tmp, old, 0); \
794 uint8_t old = RM8(FETCHWA()); \
795 uint8_t tmp = old - FETCH8(); \
796 ZHC_SUB(tmp, old, 0); \
799 #define OFFA(r, n) { \
807 if(_A & RM8(FETCHWA())) { \
827 #define OFFI_IO(p) { \
828 if(IN8(p) & FETCH8()) { \
835 uint8_t tmp = RM8(FETCHWA()); \
836 if(tmp & FETCH8()) { \
842 #define ONA(r, n) { \
844 PSW = (PSW & ~F_Z) | F_SK; \
850 if(_A & RM8(FETCHWA())) { \
851 PSW = (PSW & ~F_Z) | F_SK; \
858 PSW = (PSW & ~F_Z) | F_SK; \
865 PSW = (PSW & ~F_Z) | F_SK; \
870 #define ONI_IO(p) { \
871 if(IN8(p) & FETCH8()) { \
872 PSW = (PSW & ~F_Z) | F_SK; \
878 uint8_t tmp = RM8(FETCHWA()); \
879 if(tmp & FETCH8()) { \
880 PSW = (PSW & ~F_Z) | F_SK; \
885 #define ORA(r, n) { \
890 _A |= RM8(FETCHWA()); \
901 #define ORI_IO(p) { \
902 uint8_t tmp = IN8(p) | FETCH8(); \
907 uint16_t dst = FETCHWA(); \
908 uint8_t tmp = RM8(dst) | FETCH8(); \
919 uint8_t old = RM8(HL); \
920 uint8_t tmp = (old << 4) | (_A & 0x0f); \
921 _A = (_A & 0xf0) | (old >> 4); \
925 uint8_t carry = PSW & F_CY; \
926 PSW = (PSW & ~F_CY) | ((r >> 7) & F_CY); \
927 r = (r << 1) | carry; \
930 uint8_t carry = (PSW & F_CY) << 7; \
931 PSW = (PSW & ~F_CY) | (r & F_CY); \
932 r = (r >> 1) | carry; \
935 uint8_t old = RM8(HL); \
936 uint8_t tmp = (_A << 4) | (old >> 4); \
937 _A = (_A & 0xf0) | (old & 0x0f); \
940 #define SBB(r, n) { \
941 uint8_t tmp = r - n - (PSW & F_CY); \
942 ZHC_SUB(tmp, r, (PSW & F_CY)); \
946 uint8_t tmp = _A - RM8(FETCHWA()) - (PSW & F_CY); \
947 ZHC_SUB(tmp, _A, (PSW & F_CY)); \
951 uint8_t tmp = _A - RM8(r) - (PSW & F_CY); \
952 ZHC_SUB(tmp, _A, (PSW & F_CY)); \
956 uint8_t tmp = r - FETCH8() - (PSW & F_CY); \
957 ZHC_SUB(tmp, r, (PSW & F_CY)); \
960 #define SBI_IO(p) { \
961 uint8_t old = IN8(p); \
962 uint8_t tmp = old - FETCH8() - (PSW & F_CY); \
963 ZHC_SUB(tmp, old, (PSW & F_CY)); \
993 PSW = (PSW & ~F_CY) | ((r >> 7) & F_CY); \
997 PSW = (PSW & ~F_CY) | (r & F_CY); \
1001 tcount = (((TM0 | (TM1 << 8)) & 0xfff) + 1) * PRESCALER; \
1003 #define SUB(r, n) { \
1004 uint8_t tmp = r - n; \
1005 ZHC_SUB(tmp, r, 0); \
1008 #define SUBNB(r, n) { \
1009 uint8_t tmp = r - n; \
1010 ZHC_SUB(tmp, r, 0); \
1014 #define SUBNBW() { \
1015 uint8_t tmp = _A - RM8(FETCHWA()); \
1016 ZHC_SUB(tmp, _A, 0); \
1020 #define SUBNBX(r) { \
1021 uint8_t tmp = _A - RM8(r); \
1022 ZHC_SUB(tmp, _A, 0); \
1027 uint8_t tmp = _A - RM8(FETCHWA()); \
1028 ZHC_SUB(tmp, _A, 0); \
1032 uint8_t tmp = _A - RM8(r); \
1033 ZHC_SUB(tmp, _A, 0); \
1037 uint8_t tmp = r - FETCH8(); \
1038 ZHC_SUB(tmp, r, 0); \
1041 #define SUI_IO(p) { \
1042 uint8_t old = IN8(p); \
1043 uint8_t tmp = old - FETCH8(); \
1044 ZHC_SUB(tmp, old, 0); \
1047 #define SUINB(r) { \
1048 uint8_t tmp = r - FETCH8(); \
1049 ZHC_SUB(tmp, r, 0); \
1053 #define SUINB_IO(p) { \
1054 uint8_t old = IN8(p); \
1055 uint8_t tmp = old - FETCH8(); \
1056 ZHC_SUB(tmp, old, 0); \
1060 #define XRA(r, n) { \
1065 _A ^= RM8(FETCHWA()); \
1076 #define XRI_IO(p) { \
1077 uint8_t tmp = IN8(p) ^ FETCH8(); \
1082 void UPD7801::initialize()
1085 d_mem_stored = d_mem;
1087 d_debugger->set_context_mem(d_mem);
1088 d_debugger->set_context_io(d_io);
1092 void UPD7801::reset()
1095 // VA = BC = DE = HL = altVA = altBC = altDE = altHL = 0;
1096 PSW = IRR = IFF = SIRQ = HALT = 0;
1097 _V = MB = MC = TM0 = TM1 = SR = 0xff;
1100 PORTC = TO = SAK = 0;
1102 scount = tcount = 0;
1107 int UPD7801::run(int clock)
1111 // run only one opcode
1114 run_one_opecode_debugger();
1120 // run cpu while given clocks
1122 int first_count = count;
1126 run_one_opecode_debugger();
1131 return first_count - count;
1135 void UPD7801::run_one_opecode()
1140 // interrupt is enabled after next opecode of ei
1152 // update serial count
1155 while(scount <= 0) {
1156 if(!SIO_DISABLED && !SIO_EXTCLOCK) {
1157 write_signals(&outputs_so, (SR & 0x80) ? 0xffffffff : 0);
1160 if(++sio_count == 8) {
1166 scount = sio_count = 0;
1175 if(tcount && (tcount -= period) <= 0) {
1176 tcount += (((TM0 | (TM1 << 8)) & 0xfff) + 1) * PRESCALER;
1185 if(IFF == 1 && !SIRQ) {
1186 for(int i = 0; i < 5; i++) {
1187 uint8_t bit = irq_bits[i];
1188 if((IRR & bit) && !(MK & bit)) {
1197 PSW &= ~(F_SK | F_L0 | F_L1);
1207 void UPD7801::run_one_opecode_debugger()
1209 bool now_debugging = d_debugger->now_debugging;
1211 d_debugger->check_break_points(PC);
1212 if(d_debugger->now_suspended) {
1214 while(d_debugger->now_debugging && d_debugger->now_suspended) {
1218 if(d_debugger->now_debugging) {
1219 d_mem = d_io = d_debugger;
1221 now_debugging = false;
1225 if(!d_debugger->now_going) {
1226 d_debugger->now_suspended = true;
1228 d_mem = d_mem_stored;
1236 void UPD7801::write_debug_data8(uint32_t addr, uint32_t data)
1239 d_mem_stored->write_data8w(addr, data, &wait);
1242 uint32_t UPD7801::read_debug_data8(uint32_t addr)
1245 return d_mem_stored->read_data8w(addr, &wait);
1248 void UPD7801::write_debug_io8(uint32_t addr, uint32_t data)
1251 d_io_stored->write_io8w(addr, data, &wait);
1254 uint32_t UPD7801::read_debug_io8(uint32_t addr) {
1256 return d_io_stored->read_io8w(addr, &wait);
1259 bool UPD7801::write_debug_reg(const _TCHAR *reg, uint32_t data)
1261 if(_tcsicmp(reg, _T("PC")) == 0) {
1263 } else if(_tcsicmp(reg, _T("SP")) == 0) {
1265 } else if(_tcsicmp(reg, _T("VA")) == 0) {
1267 } else if(_tcsicmp(reg, _T("BC")) == 0) {
1269 } else if(_tcsicmp(reg, _T("DE")) == 0) {
1271 } else if(_tcsicmp(reg, _T("HL")) == 0) {
1273 } else if(_tcsicmp(reg, _T("V")) == 0) {
1275 } else if(_tcsicmp(reg, _T("A")) == 0) {
1277 } else if(_tcsicmp(reg, _T("B")) == 0) {
1279 } else if(_tcsicmp(reg, _T("C")) == 0) {
1281 } else if(_tcsicmp(reg, _T("D")) == 0) {
1283 } else if(_tcsicmp(reg, _T("E")) == 0) {
1285 } else if(_tcsicmp(reg, _T("H")) == 0) {
1287 } else if(_tcsicmp(reg, _T("L")) == 0) {
1289 } else if(_tcsicmp(reg, _T("VA'")) == 0) {
1291 } else if(_tcsicmp(reg, _T("BC'")) == 0) {
1293 } else if(_tcsicmp(reg, _T("DE'")) == 0) {
1295 } else if(_tcsicmp(reg, _T("HL'")) == 0) {
1297 } else if(_tcsicmp(reg, _T("V'")) == 0) {
1299 } else if(_tcsicmp(reg, _T("A'")) == 0) {
1301 } else if(_tcsicmp(reg, _T("B'")) == 0) {
1303 } else if(_tcsicmp(reg, _T("C'")) == 0) {
1305 } else if(_tcsicmp(reg, _T("D'")) == 0) {
1307 } else if(_tcsicmp(reg, _T("E'")) == 0) {
1309 } else if(_tcsicmp(reg, _T("H'")) == 0) {
1311 } else if(_tcsicmp(reg, _T("L'")) == 0) {
1319 void UPD7801::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
1322 VA = 0000 BC = 0000 DE = 0000 HL = 0000 PSW= 00 [Z SK HC L1 L0 CY]
1323 VA'= 0000 BC'= 0000 DE'= 0000 HL'= 0000 SP = 0000 PC = 0000
1324 (BC)= 0000 (DE)=0000 (HL)= 0000 (SP)= 0000 <DI>
1327 my_stprintf_s(buffer, buffer_len,
1328 _T("VA = %04X BC = %04X DE = %04X HL = %04X PSW= %02x [%s %s %s %s %s %s]\nVA'= %04X BC'= %04X DE'= %04X HL'= %04X SP = %04X PC = %04X\n (BC)= %04X (DE)=%04X (HL)= %04X (SP)= %04X <%s>"),
1329 VA, BC, DE, HL, PSW,
1330 (PSW & F_Z) ? _T("Z") : _T("-"), (PSW & F_SK) ? _T("SK") : _T("--"), (PSW & F_HC) ? _T("HC") : _T("--"), (PSW & F_L1) ? _T("L1") : _T("--"), (PSW & F_L0) ? _T("L0") : _T("--"), (PSW & F_CY) ? _T("CY") : _T("--"),
1331 altVA, altBC, altDE, altHL, SP, PC,
1332 d_mem_stored->read_data16w(BC, &wait), d_mem_stored->read_data16w(DE, &wait), d_mem_stored->read_data16w(HL, &wait), d_mem_stored->read_data16w(SP, &wait),
1333 IFF ? _T("EI") : _T("DI"));
1338 uint8_t upd7801_dasm_ops[4];
1339 int upd7801_dasm_ptr;
1343 return upd7801_dasm_ops[upd7801_dasm_ptr++];
1348 uint16_t l = getb();
1349 return l | (getb() << 8);
1357 int UPD7801::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
1359 for(int i = 0; i < 4; i++) {
1361 upd7801_dasm_ops[i] = d_mem_stored->read_data8w(pc + i, &wait);
1363 upd7801_dasm_ptr = 0;
1368 switch(b = getb()) {
1369 case 0x00: my_stprintf_s(buffer, buffer_len, _T("nop")); break;
1370 case 0x01: my_stprintf_s(buffer, buffer_len, _T("hlt")); break;
1371 case 0x02: my_stprintf_s(buffer, buffer_len, _T("inx sp")); break;
1372 case 0x03: my_stprintf_s(buffer, buffer_len, _T("dcx sp")); break;
1373 case 0x04: my_stprintf_s(buffer, buffer_len, _T("lxi sp,%4xh"), getw()); break;
1374 case 0x05: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("aniw v.%xh,%2xh"), wa, getb()); break;
1376 case 0x07: my_stprintf_s(buffer, buffer_len, _T("ani a,%2xh"), getb()); break;
1377 case 0x08: my_stprintf_s(buffer, buffer_len, _T("ret")); break;
1378 case 0x09: my_stprintf_s(buffer, buffer_len, _T("sio")); break;
1379 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("mov a,b")); break;
1380 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("mov a,c")); break;
1381 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("mov a,d")); break;
1382 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("mov a,e")); break;
1383 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("mov a,h")); break;
1384 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("mov a,l")); break;
1386 case 0x10: my_stprintf_s(buffer, buffer_len, _T("ex")); break;
1387 case 0x11: my_stprintf_s(buffer, buffer_len, _T("exx")); break;
1388 case 0x12: my_stprintf_s(buffer, buffer_len, _T("inx b")); break;
1389 case 0x13: my_stprintf_s(buffer, buffer_len, _T("dcx b")); break;
1390 case 0x14: my_stprintf_s(buffer, buffer_len, _T("lxi b,%4xh"), getw()); break;
1391 case 0x15: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("oriw v.%xh,%2xh"), wa, getb()); break;
1392 case 0x16: my_stprintf_s(buffer, buffer_len, _T("xri a,%2xh"), getb()); break;
1393 case 0x17: my_stprintf_s(buffer, buffer_len, _T("ori a,%2xh"), getb()); break;
1394 case 0x18: my_stprintf_s(buffer, buffer_len, _T("rets")); break;
1395 case 0x19: my_stprintf_s(buffer, buffer_len, _T("stm")); break;
1396 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("mov b,a")); break;
1397 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("mov c,a")); break;
1398 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("mov d,a")); break;
1399 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("mov e,a")); break;
1400 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("mov h,a")); break;
1401 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("mov l,a")); break;
1403 case 0x20: my_stprintf_s(buffer, buffer_len, _T("inrw v.%xh"), getwa()); break;
1404 case 0x21: my_stprintf_s(buffer, buffer_len, _T("table")); break;
1405 case 0x22: my_stprintf_s(buffer, buffer_len, _T("inx d")); break;
1406 case 0x23: my_stprintf_s(buffer, buffer_len, _T("dcx d")); break;
1407 case 0x24: my_stprintf_s(buffer, buffer_len, _T("lxi d,%4xh"), getw()); break;
1408 case 0x25: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("gtiw v.%xh,%2xh"), wa, getb()); break;
1409 case 0x26: my_stprintf_s(buffer, buffer_len, _T("adinc a,%2xh"), getb()); break;
1410 case 0x27: my_stprintf_s(buffer, buffer_len, _T("gti a,%2xh"), getb()); break;
1411 case 0x28: my_stprintf_s(buffer, buffer_len, _T("ldaw v.%xh"), getwa()); break;
1412 case 0x29: my_stprintf_s(buffer, buffer_len, _T("ldax b")); break;
1413 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("ldax d")); break;
1414 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("ldax h")); break;
1415 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("ldax d+")); break;
1416 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("ldax h+")); break;
1417 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("ldax d-")); break;
1418 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("ldax h-")); break;
1420 case 0x30: my_stprintf_s(buffer, buffer_len, _T("dcrw v.%xh"), getwa()); break;
1421 case 0x31: my_stprintf_s(buffer, buffer_len, _T("block")); break;
1422 case 0x32: my_stprintf_s(buffer, buffer_len, _T("inx h")); break;
1423 case 0x33: my_stprintf_s(buffer, buffer_len, _T("dcx h")); break;
1424 case 0x34: my_stprintf_s(buffer, buffer_len, _T("lxi h,%4xh"), getw()); break;
1425 case 0x35: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("ltiw v.%xh,%2xh"), wa, getb()); break;
1426 case 0x36: my_stprintf_s(buffer, buffer_len, _T("suinb a,%2xh"), getb()); break;
1427 case 0x37: my_stprintf_s(buffer, buffer_len, _T("lti a,%2xh"), getb()); break;
1428 case 0x38: my_stprintf_s(buffer, buffer_len, _T("staw v.%xh"), getwa()); break;
1429 case 0x39: my_stprintf_s(buffer, buffer_len, _T("stax b")); break;
1430 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("stax d")); break;
1431 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("stax h")); break;
1432 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("stax d+")); break;
1433 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("stax h+")); break;
1434 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("stax d-")); break;
1435 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("stax h-")); break;
1438 case 0x41: my_stprintf_s(buffer, buffer_len, _T("inr a")); break;
1439 case 0x42: my_stprintf_s(buffer, buffer_len, _T("inr b")); break;
1440 case 0x43: my_stprintf_s(buffer, buffer_len, _T("inr c")); break;
1441 case 0x44: my_stprintf_s(buffer, buffer_len, _T("call %4xh"), getw()); break;
1442 case 0x45: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("oniw v.%xh,%2xh"), wa, getb()); break;
1443 case 0x46: my_stprintf_s(buffer, buffer_len, _T("adi a,%2xh"), getb()); break;
1444 case 0x47: my_stprintf_s(buffer, buffer_len, _T("oni a,%2xh"), getb()); break;
1446 switch(b = getb()) {
1447 case 0x00: my_stprintf_s(buffer, buffer_len, _T("skit intf0")); break;
1448 case 0x01: my_stprintf_s(buffer, buffer_len, _T("skit intft")); break;
1449 case 0x02: my_stprintf_s(buffer, buffer_len, _T("skit intf1")); break;
1450 case 0x03: my_stprintf_s(buffer, buffer_len, _T("skit intf2")); break;
1451 case 0x04: my_stprintf_s(buffer, buffer_len, _T("skit intfs")); break;
1452 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("sk cy")); break;
1453 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("sk z")); break;
1454 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("push v")); break;
1455 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("pop v")); break;
1456 case 0x10: my_stprintf_s(buffer, buffer_len, _T("sknit f0")); break;
1457 case 0x11: my_stprintf_s(buffer, buffer_len, _T("sknit ft")); break;
1458 case 0x12: my_stprintf_s(buffer, buffer_len, _T("sknit f1")); break;
1459 case 0x13: my_stprintf_s(buffer, buffer_len, _T("sknit f2")); break;
1460 case 0x14: my_stprintf_s(buffer, buffer_len, _T("sknit fs")); break;
1461 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("skn cy")); break;
1462 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("skn z")); break;
1463 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("push b")); break;
1464 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("pop b")); break;
1465 case 0x20: my_stprintf_s(buffer, buffer_len, _T("ei")); break;
1466 case 0x24: my_stprintf_s(buffer, buffer_len, _T("di")); break;
1467 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("clc")); break;
1468 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("stc")); break;
1469 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("pen")); break;
1470 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("pex")); break;
1471 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("push d")); break;
1472 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("pop d")); break;
1473 case 0x30: my_stprintf_s(buffer, buffer_len, _T("rll a")); break;
1474 case 0x31: my_stprintf_s(buffer, buffer_len, _T("rlr a")); break;
1475 case 0x32: my_stprintf_s(buffer, buffer_len, _T("rll c")); break;
1476 case 0x33: my_stprintf_s(buffer, buffer_len, _T("rlr c")); break;
1477 case 0x34: my_stprintf_s(buffer, buffer_len, _T("sll a")); break;
1478 case 0x35: my_stprintf_s(buffer, buffer_len, _T("slr a")); break;
1479 case 0x36: my_stprintf_s(buffer, buffer_len, _T("sll c")); break;
1480 case 0x37: my_stprintf_s(buffer, buffer_len, _T("sll c")); break;
1481 case 0x38: my_stprintf_s(buffer, buffer_len, _T("rld")); break;
1482 case 0x39: my_stprintf_s(buffer, buffer_len, _T("rrd")); break;
1483 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("per")); break;
1484 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("push h")); break;
1485 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("pop h")); break;
1486 default: my_stprintf_s(buffer, buffer_len, _T("db 48h,%2xh"), b);
1489 case 0x49: my_stprintf_s(buffer, buffer_len, _T("mvix b,%2xh"), getb()); break;
1490 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("mvix d,%2xh"), getb()); break;
1491 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("mvix h,%2xh"), getb()); break;
1493 switch(b = getb()) {
1494 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("mov a,pa")); break;
1495 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("mov a,pb")); break;
1496 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("mov a,pc")); break;
1497 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("mov a,mk")); break;
1498 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("mov a,mb")); break; //
\96¢
\92è
\8b`?
1499 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("mov a,mc")); break; //
\96¢
\92è
\8b`?
1500 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("mov a,tm0")); break; //
\96¢
\92è
\8b`?
1501 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("mov a,tm1")); break; //
\96¢
\92è
\8b`?
1502 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("mov a,s")); break;
1505 my_stprintf_s(buffer, buffer_len, _T("in %2xh"), getb()); break;
1507 my_stprintf_s(buffer, buffer_len, _T("db 4ch,%2xh"), b);
1511 switch(b = getb()) {
1512 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("mov pa,a")); break;
1513 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("mov pb,a")); break;
1514 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("mov pc,a")); break;
1515 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("mov mk,a")); break;
1516 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("mov mb,a")); break;
1517 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("mov mc,a")); break;
1518 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("mov tm0,a")); break;
1519 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("mov tm1,a")); break;
1520 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("mov s,a")); break;
1523 my_stprintf_s(buffer, buffer_len, _T("out %2xh"), getb()); break;
1525 my_stprintf_s(buffer, buffer_len, _T("db 4dh,%2xh"), b);
1528 case 0x4e: b = getb(); my_stprintf_s(buffer, buffer_len, _T("jre %4xh"), pc + upd7801_dasm_ptr + b); break;
1529 case 0x4f: b = getb(); my_stprintf_s(buffer, buffer_len, _T("jre %4xh"), (pc + upd7801_dasm_ptr + b - 256) & 0xffff); break;
1532 case 0x51: my_stprintf_s(buffer, buffer_len, _T("dcr a")); break;
1533 case 0x52: my_stprintf_s(buffer, buffer_len, _T("dcr b")); break;
1534 case 0x53: my_stprintf_s(buffer, buffer_len, _T("dcr c")); break;
1535 case 0x54: my_stprintf_s(buffer, buffer_len, _T("jmp %4xh"), getw()); break;
1536 case 0x55: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("offiw v.%xh,%2xh"), wa, getb()); break;
1537 case 0x56: my_stprintf_s(buffer, buffer_len, _T("aci a,%2xh"), getb()); break;
1538 case 0x57: my_stprintf_s(buffer, buffer_len, _T("offi a,%2xh"), getb()); break;
1539 case 0x58: my_stprintf_s(buffer, buffer_len, _T("bit 0,v.%xh"), getwa()); break;
1540 case 0x59: my_stprintf_s(buffer, buffer_len, _T("bit 1,v.%xh"), getwa()); break;
1541 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("bit 2,v.%xh"), getwa()); break;
1542 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("bit 3,v.%xh"), getwa()); break;
1543 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("bit 4,v.%xh"), getwa()); break;
1544 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("bit 5,v.%xh"), getwa()); break;
1545 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("bit 6,v.%xh"), getwa()); break;
1546 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("bit 7,v.%xh"), getwa()); break;
1549 switch(b = getb()) {
1550 case 0x08: my_stprintf_s(buffer, buffer_len, _T("ana v,a")); break;
1551 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ana a,a")); break;
1552 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("ana b,a")); break;
1553 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("ana c,a")); break;
1554 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("ana d,a")); break;
1555 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("ana e,a")); break;
1556 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("ana h,a")); break;
1557 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("ana l,a")); break;
1558 case 0x10: my_stprintf_s(buffer, buffer_len, _T("xra v,a")); break;
1559 case 0x11: my_stprintf_s(buffer, buffer_len, _T("xra a,a")); break;
1560 case 0x12: my_stprintf_s(buffer, buffer_len, _T("xra b,a")); break;
1561 case 0x13: my_stprintf_s(buffer, buffer_len, _T("xra c,a")); break;
1562 case 0x14: my_stprintf_s(buffer, buffer_len, _T("xra d,a")); break;
1563 case 0x15: my_stprintf_s(buffer, buffer_len, _T("xra e,a")); break;
1564 case 0x16: my_stprintf_s(buffer, buffer_len, _T("xra h,a")); break;
1565 case 0x17: my_stprintf_s(buffer, buffer_len, _T("xra l,a")); break;
1566 case 0x18: my_stprintf_s(buffer, buffer_len, _T("ora v,a")); break;
1567 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ora a,a")); break;
1568 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("ora b,a")); break;
1569 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("ora c,a")); break;
1570 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("ora d,a")); break;
1571 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("ora e,a")); break;
1572 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("ora h,a")); break;
1573 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("ora l,a")); break;
1574 case 0x20: my_stprintf_s(buffer, buffer_len, _T("addnc v,a")); break;
1575 case 0x21: my_stprintf_s(buffer, buffer_len, _T("addnc a,a")); break;
1576 case 0x22: my_stprintf_s(buffer, buffer_len, _T("addnc b,a")); break;
1577 case 0x23: my_stprintf_s(buffer, buffer_len, _T("addnc c,a")); break;
1578 case 0x24: my_stprintf_s(buffer, buffer_len, _T("addnc d,a")); break;
1579 case 0x25: my_stprintf_s(buffer, buffer_len, _T("addnc e,a")); break;
1580 case 0x26: my_stprintf_s(buffer, buffer_len, _T("addnc h,a")); break;
1581 case 0x27: my_stprintf_s(buffer, buffer_len, _T("addnc l,a")); break;
1582 case 0x28: my_stprintf_s(buffer, buffer_len, _T("gta v,a")); break;
1583 case 0x29: my_stprintf_s(buffer, buffer_len, _T("gta a,a")); break;
1584 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("gta b,a")); break;
1585 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("gta c,a")); break;
1586 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("gta d,a")); break;
1587 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("gta e,a")); break;
1588 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("gta h,a")); break;
1589 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("gta l,a")); break;
1590 case 0x30: my_stprintf_s(buffer, buffer_len, _T("subnb v,a")); break;
1591 case 0x31: my_stprintf_s(buffer, buffer_len, _T("subnb a,a")); break;
1592 case 0x32: my_stprintf_s(buffer, buffer_len, _T("subnb b,a")); break;
1593 case 0x33: my_stprintf_s(buffer, buffer_len, _T("subnb c,a")); break;
1594 case 0x34: my_stprintf_s(buffer, buffer_len, _T("subnb d,a")); break;
1595 case 0x35: my_stprintf_s(buffer, buffer_len, _T("subnb e,a")); break;
1596 case 0x36: my_stprintf_s(buffer, buffer_len, _T("subnb h,a")); break;
1597 case 0x37: my_stprintf_s(buffer, buffer_len, _T("subnb l,a")); break;
1598 case 0x38: my_stprintf_s(buffer, buffer_len, _T("lta v,a")); break;
1599 case 0x39: my_stprintf_s(buffer, buffer_len, _T("lta a,a")); break;
1600 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("lta b,a")); break;
1601 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("lta c,a")); break;
1602 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("lta d,a")); break;
1603 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("lta e,a")); break;
1604 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("lta h,a")); break;
1605 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("lta l,a")); break;
1606 case 0x40: my_stprintf_s(buffer, buffer_len, _T("add v,a")); break;
1607 case 0x41: my_stprintf_s(buffer, buffer_len, _T("add a,a")); break;
1608 case 0x42: my_stprintf_s(buffer, buffer_len, _T("add b,a")); break;
1609 case 0x43: my_stprintf_s(buffer, buffer_len, _T("add c,a")); break;
1610 case 0x44: my_stprintf_s(buffer, buffer_len, _T("add d,a")); break;
1611 case 0x45: my_stprintf_s(buffer, buffer_len, _T("add e,a")); break;
1612 case 0x46: my_stprintf_s(buffer, buffer_len, _T("add h,a")); break;
1613 case 0x47: my_stprintf_s(buffer, buffer_len, _T("add l,a")); break;
1614 case 0x50: my_stprintf_s(buffer, buffer_len, _T("adc v,a")); break;
1615 case 0x51: my_stprintf_s(buffer, buffer_len, _T("adc a,a")); break;
1616 case 0x52: my_stprintf_s(buffer, buffer_len, _T("adc b,a")); break;
1617 case 0x53: my_stprintf_s(buffer, buffer_len, _T("adc c,a")); break;
1618 case 0x54: my_stprintf_s(buffer, buffer_len, _T("adc d,a")); break;
1619 case 0x55: my_stprintf_s(buffer, buffer_len, _T("adc e,a")); break;
1620 case 0x56: my_stprintf_s(buffer, buffer_len, _T("adc h,a")); break;
1621 case 0x57: my_stprintf_s(buffer, buffer_len, _T("adc l,a")); break;
1622 case 0x60: my_stprintf_s(buffer, buffer_len, _T("sub v,a")); break;
1623 case 0x61: my_stprintf_s(buffer, buffer_len, _T("sub a,a")); break;
1624 case 0x62: my_stprintf_s(buffer, buffer_len, _T("sub b,a")); break;
1625 case 0x63: my_stprintf_s(buffer, buffer_len, _T("sub c,a")); break;
1626 case 0x64: my_stprintf_s(buffer, buffer_len, _T("sub d,a")); break;
1627 case 0x65: my_stprintf_s(buffer, buffer_len, _T("sub e,a")); break;
1628 case 0x66: my_stprintf_s(buffer, buffer_len, _T("sub h,a")); break;
1629 case 0x67: my_stprintf_s(buffer, buffer_len, _T("sub l,a")); break;
1630 case 0x68: my_stprintf_s(buffer, buffer_len, _T("nea v,a")); break;
1631 case 0x69: my_stprintf_s(buffer, buffer_len, _T("nea a,a")); break;
1632 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("nea b,a")); break;
1633 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("nea c,a")); break;
1634 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("nea d,a")); break;
1635 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("nea e,a")); break;
1636 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("nea h,a")); break;
1637 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("nea l,a")); break;
1638 case 0x70: my_stprintf_s(buffer, buffer_len, _T("sbb v,a")); break;
1639 case 0x71: my_stprintf_s(buffer, buffer_len, _T("sbb a,a")); break;
1640 case 0x72: my_stprintf_s(buffer, buffer_len, _T("sbb b,a")); break;
1641 case 0x73: my_stprintf_s(buffer, buffer_len, _T("sbb c,a")); break;
1642 case 0x74: my_stprintf_s(buffer, buffer_len, _T("sbb d,a")); break;
1643 case 0x75: my_stprintf_s(buffer, buffer_len, _T("sbb e,a")); break;
1644 case 0x76: my_stprintf_s(buffer, buffer_len, _T("sbb h,a")); break;
1645 case 0x77: my_stprintf_s(buffer, buffer_len, _T("sbb l,a")); break;
1646 case 0x78: my_stprintf_s(buffer, buffer_len, _T("eqa v,a")); break;
1647 case 0x79: my_stprintf_s(buffer, buffer_len, _T("eqa a,a")); break;
1648 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("eqa b,a")); break;
1649 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("eqa c,a")); break;
1650 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("eqa d,a")); break;
1651 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("eqa e,a")); break;
1652 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("eqa h,a")); break;
1653 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("eqa l,a")); break;
1654 case 0x88: my_stprintf_s(buffer, buffer_len, _T("ana a,v")); break;
1655 case 0x89: my_stprintf_s(buffer, buffer_len, _T("ana a,a")); break;
1656 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("ana a,b")); break;
1657 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("ana a,c")); break;
1658 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("ana a,d")); break;
1659 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("ana a,e")); break;
1660 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("ana a,h")); break;
1661 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("ana a,l")); break;
1662 case 0x90: my_stprintf_s(buffer, buffer_len, _T("xra a,v")); break;
1663 case 0x91: my_stprintf_s(buffer, buffer_len, _T("xra a,a")); break;
1664 case 0x92: my_stprintf_s(buffer, buffer_len, _T("xra a,b")); break;
1665 case 0x93: my_stprintf_s(buffer, buffer_len, _T("xra a,c")); break;
1666 case 0x94: my_stprintf_s(buffer, buffer_len, _T("xra a,d")); break;
1667 case 0x95: my_stprintf_s(buffer, buffer_len, _T("xra a,e")); break;
1668 case 0x96: my_stprintf_s(buffer, buffer_len, _T("xra a,h")); break;
1669 case 0x97: my_stprintf_s(buffer, buffer_len, _T("xra a,l")); break;
1670 case 0x98: my_stprintf_s(buffer, buffer_len, _T("ora a,v")); break;
1671 case 0x99: my_stprintf_s(buffer, buffer_len, _T("ora a,a")); break;
1672 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("ora a,b")); break;
1673 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("ora a,c")); break;
1674 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("ora a,d")); break;
1675 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("ora a,e")); break;
1676 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("ora a,h")); break;
1677 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("ora a,l")); break;
1678 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("addnc a,v")); break;
1679 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("addnc a,a")); break;
1680 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("addnc a,b")); break;
1681 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("addnc a,c")); break;
1682 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("addnc a,d")); break;
1683 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("addnc a,e")); break;
1684 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("addnc a,h")); break;
1685 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("addnc a,l")); break;
1686 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("gta a,v")); break;
1687 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gta a,a")); break;
1688 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gta a,b")); break;
1689 case 0xab: my_stprintf_s(buffer, buffer_len, _T("gta a,c")); break;
1690 case 0xac: my_stprintf_s(buffer, buffer_len, _T("gta a,d")); break;
1691 case 0xad: my_stprintf_s(buffer, buffer_len, _T("gta a,e")); break;
1692 case 0xae: my_stprintf_s(buffer, buffer_len, _T("gta a,h")); break;
1693 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("gta a,l")); break;
1694 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("subnb a,v")); break;
1695 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("subnb a,a")); break;
1696 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("subnb a,b")); break;
1697 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("subnb a,c")); break;
1698 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("subnb a,d")); break;
1699 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("subnb a,e")); break;
1700 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("subnb a,h")); break;
1701 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("subnb a,l")); break;
1702 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("lta a,v")); break;
1703 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("lta a,a")); break;
1704 case 0xba: my_stprintf_s(buffer, buffer_len, _T("lta a,b")); break;
1705 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("lta a,c")); break;
1706 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("lta a,d")); break;
1707 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("lta a,e")); break;
1708 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("lta a,h")); break;
1709 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("lta a,l")); break;
1710 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("add a,v")); break;
1711 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("add a,a")); break;
1712 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("add a,b")); break;
1713 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("add a,c")); break;
1714 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("add a,d")); break;
1715 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("add a,e")); break;
1716 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("add a,h")); break;
1717 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("add a,l")); break;
1718 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("ona a,v")); break;
1719 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("ona a,a")); break;
1720 case 0xca: my_stprintf_s(buffer, buffer_len, _T("ona a,b")); break;
1721 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("ona a,c")); break;
1722 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("ona a,d")); break;
1723 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("ona a,e")); break;
1724 case 0xce: my_stprintf_s(buffer, buffer_len, _T("ona a,h")); break;
1725 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("ona a,l")); break;
1726 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("adc a,v")); break;
1727 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("adc a,a")); break;
1728 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("adc a,b")); break;
1729 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("adc a,c")); break;
1730 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("adc a,d")); break;
1731 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("adc a,e")); break;
1732 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("adc a,h")); break;
1733 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("adc a,l")); break;
1734 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("offa a,v")); break;
1735 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offa a,a")); break;
1736 case 0xda: my_stprintf_s(buffer, buffer_len, _T("offa a,b")); break;
1737 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offa a,c")); break;
1738 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("offa a,d")); break;
1739 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("offa a,e")); break;
1740 case 0xde: my_stprintf_s(buffer, buffer_len, _T("offa a,h")); break;
1741 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("offa a,l")); break;
1742 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("sub a,v")); break;
1743 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("sub a,a")); break;
1744 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("sub a,b")); break;
1745 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("sub a,c")); break;
1746 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("sub a,d")); break;
1747 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("sub a,e")); break;
1748 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("sub a,h")); break;
1749 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("sub a,l")); break;
1750 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("nea a,v")); break;
1751 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("nea a,a")); break;
1752 case 0xea: my_stprintf_s(buffer, buffer_len, _T("nea a,b")); break;
1753 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("nea a,c")); break;
1754 case 0xec: my_stprintf_s(buffer, buffer_len, _T("nea a,d")); break;
1755 case 0xed: my_stprintf_s(buffer, buffer_len, _T("nea a,e")); break;
1756 case 0xee: my_stprintf_s(buffer, buffer_len, _T("nea a,h")); break;
1757 case 0xef: my_stprintf_s(buffer, buffer_len, _T("nea a,l")); break;
1758 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("sbb a,v")); break;
1759 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbb a,a")); break;
1760 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbb a,b")); break;
1761 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbb a,c")); break;
1762 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("sbb a,d")); break;
1763 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("sbb a,e")); break;
1764 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("sbb a,h")); break;
1765 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("sbb a,l")); break;
1766 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("eqa a,v")); break;
1767 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqa a,a")); break;
1768 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqa a,b")); break;
1769 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqa a,c")); break;
1770 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("eqa a,d")); break;
1771 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("eqa a,e")); break;
1772 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("eqa a,h")); break;
1773 case 0xff: my_stprintf_s(buffer, buffer_len, _T("eqa a,l")); break;
1774 default: my_stprintf_s(buffer, buffer_len, _T("db 60h,%2xh"), b);
1777 case 0x61: my_stprintf_s(buffer, buffer_len, _T("daa")); break;
1778 case 0x62: my_stprintf_s(buffer, buffer_len, _T("reti")); break;
1779 case 0x63: my_stprintf_s(buffer, buffer_len, _T("calb")); break;
1781 switch(b = getb()) {
1782 case 0x08: my_stprintf_s(buffer, buffer_len, _T("ani v,%2xh"), getb()); break;
1783 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ani a,%2xh"), getb()); break;
1784 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("ani b,%2xh"), getb()); break;
1785 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("ani c,%2xh"), getb()); break;
1786 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("ani d,%2xh"), getb()); break;
1787 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("ani e,%2xh"), getb()); break;
1788 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("ani h,%2xh"), getb()); break;
1789 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("ani l,%2xh"), getb()); break;
1790 case 0x10: my_stprintf_s(buffer, buffer_len, _T("xri v,%2xh"), getb()); break;
1791 case 0x11: my_stprintf_s(buffer, buffer_len, _T("xri a,%2xh"), getb()); break;
1792 case 0x12: my_stprintf_s(buffer, buffer_len, _T("xri b,%2xh"), getb()); break;
1793 case 0x13: my_stprintf_s(buffer, buffer_len, _T("xri c,%2xh"), getb()); break;
1794 case 0x14: my_stprintf_s(buffer, buffer_len, _T("xri d,%2xh"), getb()); break;
1795 case 0x15: my_stprintf_s(buffer, buffer_len, _T("xri e,%2xh"), getb()); break;
1796 case 0x16: my_stprintf_s(buffer, buffer_len, _T("xri h,%2xh"), getb()); break;
1797 case 0x17: my_stprintf_s(buffer, buffer_len, _T("xri l,%2xh"), getb()); break;
1798 case 0x18: my_stprintf_s(buffer, buffer_len, _T("ori v,%2xh"), getb()); break;
1799 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ori a,%2xh"), getb()); break;
1800 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("ori b,%2xh"), getb()); break;
1801 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("ori c,%2xh"), getb()); break;
1802 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("ori d,%2xh"), getb()); break;
1803 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("ori e,%2xh"), getb()); break;
1804 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("ori h,%2xh"), getb()); break;
1805 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("ori l,%2xh"), getb()); break;
1806 case 0x20: my_stprintf_s(buffer, buffer_len, _T("adinc v,%2xh"), getb()); break;
1807 case 0x21: my_stprintf_s(buffer, buffer_len, _T("adinc a,%2xh"), getb()); break;
1808 case 0x22: my_stprintf_s(buffer, buffer_len, _T("adinc b,%2xh"), getb()); break;
1809 case 0x23: my_stprintf_s(buffer, buffer_len, _T("adinc c,%2xh"), getb()); break;
1810 case 0x24: my_stprintf_s(buffer, buffer_len, _T("adinc d,%2xh"), getb()); break;
1811 case 0x25: my_stprintf_s(buffer, buffer_len, _T("adinc e,%2xh"), getb()); break;
1812 case 0x26: my_stprintf_s(buffer, buffer_len, _T("adinc h,%2xh"), getb()); break;
1813 case 0x27: my_stprintf_s(buffer, buffer_len, _T("adinc l,%2xh"), getb()); break;
1814 case 0x28: my_stprintf_s(buffer, buffer_len, _T("gti v,%2xh"), getb()); break;
1815 case 0x29: my_stprintf_s(buffer, buffer_len, _T("gti a,%2xh"), getb()); break;
1816 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("gti b,%2xh"), getb()); break;
1817 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("gti c,%2xh"), getb()); break;
1818 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("gti d,%2xh"), getb()); break;
1819 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("gti e,%2xh"), getb()); break;
1820 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("gti h,%2xh"), getb()); break;
1821 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("gti l,%2xh"), getb()); break;
1822 case 0x30: my_stprintf_s(buffer, buffer_len, _T("suinb v,%2xh"), getb()); break;
1823 case 0x31: my_stprintf_s(buffer, buffer_len, _T("suinb a,%2xh"), getb()); break;
1824 case 0x32: my_stprintf_s(buffer, buffer_len, _T("suinb b,%2xh"), getb()); break;
1825 case 0x33: my_stprintf_s(buffer, buffer_len, _T("suinb c,%2xh"), getb()); break;
1826 case 0x34: my_stprintf_s(buffer, buffer_len, _T("suinb d,%2xh"), getb()); break;
1827 case 0x35: my_stprintf_s(buffer, buffer_len, _T("suinb e,%2xh"), getb()); break;
1828 case 0x36: my_stprintf_s(buffer, buffer_len, _T("suinb h,%2xh"), getb()); break;
1829 case 0x37: my_stprintf_s(buffer, buffer_len, _T("suinb l,%2xh"), getb()); break;
1830 case 0x38: my_stprintf_s(buffer, buffer_len, _T("lti v,%2xh"), getb()); break;
1831 case 0x39: my_stprintf_s(buffer, buffer_len, _T("lti a,%2xh"), getb()); break;
1832 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("lti b,%2xh"), getb()); break;
1833 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("lti c,%2xh"), getb()); break;
1834 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("lti d,%2xh"), getb()); break;
1835 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("lti e,%2xh"), getb()); break;
1836 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("lti h,%2xh"), getb()); break;
1837 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("lti l,%2xh"), getb()); break;
1838 case 0x40: my_stprintf_s(buffer, buffer_len, _T("adi v,%2xh"), getb()); break;
1839 case 0x41: my_stprintf_s(buffer, buffer_len, _T("adi a,%2xh"), getb()); break;
1840 case 0x42: my_stprintf_s(buffer, buffer_len, _T("adi b,%2xh"), getb()); break;
1841 case 0x43: my_stprintf_s(buffer, buffer_len, _T("adi c,%2xh"), getb()); break;
1842 case 0x44: my_stprintf_s(buffer, buffer_len, _T("adi d,%2xh"), getb()); break;
1843 case 0x45: my_stprintf_s(buffer, buffer_len, _T("adi e,%2xh"), getb()); break;
1844 case 0x46: my_stprintf_s(buffer, buffer_len, _T("adi h,%2xh"), getb()); break;
1845 case 0x47: my_stprintf_s(buffer, buffer_len, _T("adi l,%2xh"), getb()); break;
1846 case 0x48: my_stprintf_s(buffer, buffer_len, _T("oni v,%2xh"), getb()); break;
1847 case 0x49: my_stprintf_s(buffer, buffer_len, _T("oni a,%2xh"), getb()); break;
1848 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("oni b,%2xh"), getb()); break;
1849 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("oni c,%2xh"), getb()); break;
1850 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("oni d,%2xh"), getb()); break;
1851 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("oni e,%2xh"), getb()); break;
1852 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("oni h,%2xh"), getb()); break;
1853 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("oni l,%2xh"), getb()); break;
1854 case 0x50: my_stprintf_s(buffer, buffer_len, _T("aci v,%2xh"), getb()); break;
1855 case 0x51: my_stprintf_s(buffer, buffer_len, _T("aci a,%2xh"), getb()); break;
1856 case 0x52: my_stprintf_s(buffer, buffer_len, _T("aci b,%2xh"), getb()); break;
1857 case 0x53: my_stprintf_s(buffer, buffer_len, _T("aci c,%2xh"), getb()); break;
1858 case 0x54: my_stprintf_s(buffer, buffer_len, _T("aci d,%2xh"), getb()); break;
1859 case 0x55: my_stprintf_s(buffer, buffer_len, _T("aci e,%2xh"), getb()); break;
1860 case 0x56: my_stprintf_s(buffer, buffer_len, _T("aci h,%2xh"), getb()); break;
1861 case 0x57: my_stprintf_s(buffer, buffer_len, _T("aci l,%2xh"), getb()); break;
1862 case 0x58: my_stprintf_s(buffer, buffer_len, _T("offi v,%2xh"), getb()); break;
1863 case 0x59: my_stprintf_s(buffer, buffer_len, _T("offi a,%2xh"), getb()); break;
1864 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("offi b,%2xh"), getb()); break;
1865 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("offi c,%2xh"), getb()); break;
1866 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("offi d,%2xh"), getb()); break;
1867 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("offi e,%2xh"), getb()); break;
1868 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("offi h,%2xh"), getb()); break;
1869 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("offi l,%2xh"), getb()); break;
1870 case 0x60: my_stprintf_s(buffer, buffer_len, _T("sui v,%2xh"), getb()); break;
1871 case 0x61: my_stprintf_s(buffer, buffer_len, _T("sui a,%2xh"), getb()); break;
1872 case 0x62: my_stprintf_s(buffer, buffer_len, _T("sui b,%2xh"), getb()); break;
1873 case 0x63: my_stprintf_s(buffer, buffer_len, _T("sui c,%2xh"), getb()); break;
1874 case 0x64: my_stprintf_s(buffer, buffer_len, _T("sui d,%2xh"), getb()); break;
1875 case 0x65: my_stprintf_s(buffer, buffer_len, _T("sui e,%2xh"), getb()); break;
1876 case 0x66: my_stprintf_s(buffer, buffer_len, _T("sui h,%2xh"), getb()); break;
1877 case 0x67: my_stprintf_s(buffer, buffer_len, _T("sui l,%2xh"), getb()); break;
1878 case 0x68: my_stprintf_s(buffer, buffer_len, _T("nei v,%2xh"), getb()); break;
1879 case 0x69: my_stprintf_s(buffer, buffer_len, _T("nei a,%2xh"), getb()); break;
1880 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("nei b,%2xh"), getb()); break;
1881 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("nei c,%2xh"), getb()); break;
1882 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("nei d,%2xh"), getb()); break;
1883 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("nei e,%2xh"), getb()); break;
1884 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("nei h,%2xh"), getb()); break;
1885 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("nei l,%2xh"), getb()); break;
1886 case 0x70: my_stprintf_s(buffer, buffer_len, _T("sbi v,%2xh"), getb()); break;
1887 case 0x71: my_stprintf_s(buffer, buffer_len, _T("sbi a,%2xh"), getb()); break;
1888 case 0x72: my_stprintf_s(buffer, buffer_len, _T("sbi b,%2xh"), getb()); break;
1889 case 0x73: my_stprintf_s(buffer, buffer_len, _T("sbi c,%2xh"), getb()); break;
1890 case 0x74: my_stprintf_s(buffer, buffer_len, _T("sbi d,%2xh"), getb()); break;
1891 case 0x75: my_stprintf_s(buffer, buffer_len, _T("sbi e,%2xh"), getb()); break;
1892 case 0x76: my_stprintf_s(buffer, buffer_len, _T("sbi h,%2xh"), getb()); break;
1893 case 0x77: my_stprintf_s(buffer, buffer_len, _T("sbi l,%2xh"), getb()); break;
1894 case 0x78: my_stprintf_s(buffer, buffer_len, _T("eqi v,%2xh"), getb()); break;
1895 case 0x79: my_stprintf_s(buffer, buffer_len, _T("eqi a,%2xh"), getb()); break;
1896 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("eqi b,%2xh"), getb()); break;
1897 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("eqi c,%2xh"), getb()); break;
1898 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("eqi d,%2xh"), getb()); break;
1899 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("eqi e,%2xh"), getb()); break;
1900 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("eqi h,%2xh"), getb()); break;
1901 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("eqi l,%2xh"), getb()); break;
1902 case 0x88: my_stprintf_s(buffer, buffer_len, _T("ani pa,%2xh"), getb()); break;
1903 case 0x89: my_stprintf_s(buffer, buffer_len, _T("ani pb,%2xh"), getb()); break;
1904 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("ani pc,%2xh"), getb()); break;
1905 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("ani mk,%2xh"), getb()); break;
1906 case 0x90: my_stprintf_s(buffer, buffer_len, _T("xri pa,%2xh"), getb()); break;
1907 case 0x91: my_stprintf_s(buffer, buffer_len, _T("xri pb,%2xh"), getb()); break;
1908 case 0x92: my_stprintf_s(buffer, buffer_len, _T("xri pc,%2xh"), getb()); break;
1909 case 0x93: my_stprintf_s(buffer, buffer_len, _T("xri mk,%2xh"), getb()); break;
1910 case 0x98: my_stprintf_s(buffer, buffer_len, _T("ori pa,%2xh"), getb()); break;
1911 case 0x99: my_stprintf_s(buffer, buffer_len, _T("ori pb,%2xh"), getb()); break;
1912 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("ori pc,%2xh"), getb()); break;
1913 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("ori mk,%2xh"), getb()); break;
1914 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("adinc pa,%2xh"), getb()); break;
1915 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("adinc pb,%2xh"), getb()); break;
1916 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("adinc pc,%2xh"), getb()); break;
1917 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("adinc mk,%2xh"), getb()); break;
1918 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("gti pa,%2xh"), getb()); break;
1919 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gti pb,%2xh"), getb()); break;
1920 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gti pc,%2xh"), getb()); break;
1921 case 0xab: my_stprintf_s(buffer, buffer_len, _T("gti mk,%2xh"), getb()); break;
1922 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("suinb pa,%2xh"), getb()); break;
1923 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("suinb pb,%2xh"), getb()); break;
1924 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("suinb pc,%2xh"), getb()); break;
1925 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("suinb mk,%2xh"), getb()); break;
1926 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("lti pa,%2xh"), getb()); break;
1927 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("lti pb,%2xh"), getb()); break;
1928 case 0xba: my_stprintf_s(buffer, buffer_len, _T("lti pc,%2xh"), getb()); break;
1929 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("lti mk,%2xh"), getb()); break;
1930 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("adi pa,%2xh"), getb()); break;
1931 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("adi pb,%2xh"), getb()); break;
1932 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("adi pc,%2xh"), getb()); break;
1933 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("adi mk,%2xh"), getb()); break;
1934 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("oni pa,%2xh"), getb()); break;
1935 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("oni pb,%2xh"), getb()); break;
1936 case 0xca: my_stprintf_s(buffer, buffer_len, _T("oni pc,%2xh"), getb()); break;
1937 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("oni mk,%2xh"), getb()); break;
1938 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("aci pa,%2xh"), getb()); break;
1939 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("aci pb,%2xh"), getb()); break;
1940 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("aci pc,%2xh"), getb()); break;
1941 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("aci mk,%2xh"), getb()); break;
1942 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("offi pa,%2xh"), getb()); break;
1943 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offi pb,%2xh"), getb()); break;
1944 case 0xda: my_stprintf_s(buffer, buffer_len, _T("offi pc,%2xh"), getb()); break;
1945 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offi mk,%2xh"), getb()); break;
1946 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("sui pa,%2xh"), getb()); break;
1947 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("sui pb,%2xh"), getb()); break;
1948 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("sui pc,%2xh"), getb()); break;
1949 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("sui mk,%2xh"), getb()); break;
1950 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("nei pa,%2xh"), getb()); break;
1951 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("nei pb,%2xh"), getb()); break;
1952 case 0xea: my_stprintf_s(buffer, buffer_len, _T("nei pc,%2xh"), getb()); break;
1953 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("nei mk,%2xh"), getb()); break;
1954 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("sbi pa,%2xh"), getb()); break;
1955 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbi pb,%2xh"), getb()); break;
1956 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbi pc,%2xh"), getb()); break;
1957 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbi mk,%2xh"), getb()); break;
1958 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("eqi pa,%2xh"), getb()); break;
1959 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqi pb,%2xh"), getb()); break;
1960 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqi pc,%2xh"), getb()); break;
1961 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqi mk,%2xh"), getb()); break;
1962 default: my_stprintf_s(buffer, buffer_len, _T("db 64h,%2xh"), b);
1965 case 0x65: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("neiw v.%xh,%2xh"), wa, getb()); break;
1966 case 0x66: my_stprintf_s(buffer, buffer_len, _T("sui a,%2xh"), getb()); break;
1967 case 0x67: my_stprintf_s(buffer, buffer_len, _T("nei a,%2xh"), getb()); break;
1968 case 0x68: my_stprintf_s(buffer, buffer_len, _T("mvi v,%2xh"), getb()); break;
1969 case 0x69: my_stprintf_s(buffer, buffer_len, _T("mvi a,%2xh"), getb()); break;
1970 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("mvi b,%2xh"), getb()); break;
1971 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("mvi c,%2xh"), getb()); break;
1972 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("mvi d,%2xh"), getb()); break;
1973 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("mvi e,%2xh"), getb()); break;
1974 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("mvi h,%2xh"), getb()); break;
1975 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("mvi l,%2xh"), getb()); break;
1978 switch(b = getb()) {
1979 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("sspd %4xh"), getw()); break;
1980 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("lspd %4xh"), getw()); break;
1981 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("sbcd %4xh"), getw()); break;
1982 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("lbcd %4xh"), getw()); break;
1983 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("sded %4xh"), getw()); break;
1984 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("lded %4xh"), getw()); break;
1985 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("shld %4xh"), getw()); break;
1986 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("lhld %4xh"), getw()); break;
1987 case 0x68: my_stprintf_s(buffer, buffer_len, _T("mov v,%4xh"), getw()); break;
1988 case 0x69: my_stprintf_s(buffer, buffer_len, _T("mov a,%4xh"), getw()); break;
1989 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("mov b,%4xh"), getw()); break;
1990 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("mov c,%4xh"), getw()); break;
1991 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("mov d,%4xh"), getw()); break;
1992 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("mov e,%4xh"), getw()); break;
1993 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("mov h,%4xh"), getw()); break;
1994 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("mov l,%4xh"), getw()); break;
1995 case 0x78: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,v"), getw()); break;
1996 case 0x79: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,a"), getw()); break;
1997 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,b"), getw()); break;
1998 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,c"), getw()); break;
1999 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,d"), getw()); break;
2000 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,e"), getw()); break;
2001 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,h"), getw()); break;
2002 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("mov %4xh,l"), getw()); break;
2003 case 0x89: my_stprintf_s(buffer, buffer_len, _T("anax b")); break;
2004 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("anax d")); break;
2005 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("anax h")); break;
2006 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("anax d+")); break;
2007 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("anax h+")); break;
2008 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("anax d-")); break;
2009 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("anax h-")); break;
2010 case 0x91: my_stprintf_s(buffer, buffer_len, _T("xrax b")); break;
2011 case 0x92: my_stprintf_s(buffer, buffer_len, _T("xrax d")); break;
2012 case 0x93: my_stprintf_s(buffer, buffer_len, _T("xrax h")); break;
2013 case 0x94: my_stprintf_s(buffer, buffer_len, _T("xrax d+")); break;
2014 case 0x95: my_stprintf_s(buffer, buffer_len, _T("xrax h+")); break;
2015 case 0x96: my_stprintf_s(buffer, buffer_len, _T("xrax d-")); break;
2016 case 0x97: my_stprintf_s(buffer, buffer_len, _T("xrax h-")); break;
2017 case 0x99: my_stprintf_s(buffer, buffer_len, _T("orax b")); break;
2018 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("orax d")); break;
2019 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("orax h")); break;
2020 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("orax d+")); break;
2021 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("orax h+")); break;
2022 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("orax d-")); break;
2023 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("orax h-")); break;
2024 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("addncx b")); break;
2025 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("addncx d")); break;
2026 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("addncx h")); break;
2027 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("addncx d+")); break;
2028 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("addncx h+")); break;
2029 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("addncx d-")); break;
2030 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("addncx h-")); break;
2031 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gtax b")); break;
2032 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gtax d")); break;
2033 case 0xab: my_stprintf_s(buffer, buffer_len, _T("gtax h")); break;
2034 case 0xac: my_stprintf_s(buffer, buffer_len, _T("gtax d+")); break;
2035 case 0xad: my_stprintf_s(buffer, buffer_len, _T("gtax h+")); break;
2036 case 0xae: my_stprintf_s(buffer, buffer_len, _T("gtax d-")); break;
2037 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("gtax h-")); break;
2038 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("subnbx b")); break;
2039 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("subnbx d")); break;
2040 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("subnbx h")); break;
2041 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("subnbx d+")); break;
2042 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("subnbx h+")); break;
2043 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("subnbx d-")); break;
2044 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("subnbx h-")); break;
2045 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("ltax b")); break;
2046 case 0xba: my_stprintf_s(buffer, buffer_len, _T("ltax d")); break;
2047 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("ltax h")); break;
2048 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("ltax d+")); break;
2049 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("ltax h+")); break;
2050 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("ltax d-")); break;
2051 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("ltax h-")); break;
2052 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("addx b")); break;
2053 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("addx d")); break;
2054 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("addx h")); break;
2055 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("addx d+")); break;
2056 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("addx h+")); break;
2057 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("addx d-")); break;
2058 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("addx h-")); break;
2059 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("onax b")); break;
2060 case 0xca: my_stprintf_s(buffer, buffer_len, _T("onax d")); break;
2061 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("onax h")); break;
2062 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("onax d+")); break;
2063 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("onax h+")); break;
2064 case 0xce: my_stprintf_s(buffer, buffer_len, _T("onax d-")); break;
2065 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("onax h-")); break;
2066 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("adcx b")); break;
2067 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("adcx d")); break;
2068 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("adcx h")); break;
2069 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("adcx d+")); break;
2070 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("adcx h+")); break;
2071 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("adcx d-")); break;
2072 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("adcx h-")); break;
2073 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offax b")); break;
2074 case 0xda: my_stprintf_s(buffer, buffer_len, _T("offax d")); break;
2075 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offax h")); break;
2076 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("offax d+")); break;
2077 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("offax h+")); break;
2078 case 0xde: my_stprintf_s(buffer, buffer_len, _T("offax d-")); break;
2079 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("offax h-")); break;
2080 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("subx b")); break;
2081 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("subx d")); break;
2082 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("subx h")); break;
2083 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("subx d+")); break;
2084 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("subx h+")); break;
2085 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("subx d-")); break;
2086 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("subx h-")); break;
2087 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("neax b")); break;
2088 case 0xea: my_stprintf_s(buffer, buffer_len, _T("neax d")); break;
2089 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("neax h")); break;
2090 case 0xec: my_stprintf_s(buffer, buffer_len, _T("neax d+")); break;
2091 case 0xed: my_stprintf_s(buffer, buffer_len, _T("neax h+")); break;
2092 case 0xee: my_stprintf_s(buffer, buffer_len, _T("neax d-")); break;
2093 case 0xef: my_stprintf_s(buffer, buffer_len, _T("neax h-")); break;
2094 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbbx b")); break;
2095 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbbx d")); break;
2096 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbbx h")); break;
2097 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("sbbx d+")); break;
2098 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("sbbx h+")); break;
2099 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("sbbx d-")); break;
2100 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("sbbx h-")); break;
2101 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqax b")); break;
2102 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqax d")); break;
2103 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqax h")); break;
2104 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("eqax d+")); break;
2105 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("eqax h+")); break;
2106 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("eqax d-")); break;
2107 case 0xff: my_stprintf_s(buffer, buffer_len, _T("eqax h-")); break;
2108 default: my_stprintf_s(buffer, buffer_len, _T("db 70h,%2xh"), b);
2111 case 0x71: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("mviw v.%xh,%2xh"), wa, getb()); break;
2112 case 0x72: my_stprintf_s(buffer, buffer_len, _T("softi")); break;
2113 case 0x73: my_stprintf_s(buffer, buffer_len, _T("jb")); break;
2115 switch(b = getb()) {
2116 case 0x88: my_stprintf_s(buffer, buffer_len, _T("anaw v.%x"), getwa()); break;
2117 case 0x90: my_stprintf_s(buffer, buffer_len, _T("xraw v.%x"), getwa()); break;
2118 case 0x98: my_stprintf_s(buffer, buffer_len, _T("oraw v.%x"), getwa()); break;
2119 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("addncw v.%x"), getwa()); break;
2120 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("gtaw v.%x"), getwa()); break;
2121 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("subnbw v.%x"), getwa()); break;
2122 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("ltaw v.%x"), getwa()); break;
2123 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("addw v.%x"), getwa()); break;
2124 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("onaw v.%x"), getwa()); break;
2125 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("adcw v.%x"), getwa()); break;
2126 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("offaw v.%x"), getwa()); break;
2127 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("subw v.%x"), getwa()); break;
2128 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("neaw v.%x"), getwa()); break;
2129 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("sbbw v.%x"), getwa()); break;
2130 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("eqaw v.%x"), getwa()); break;
2131 default: my_stprintf_s(buffer, buffer_len, _T("db 74h,%2xh"), b);
2134 case 0x75: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("eqiw v.%xh,%2xh"), wa, getb()); break;
2135 case 0x76: my_stprintf_s(buffer, buffer_len, _T("sbi a,%2xh"), getb()); break;
2136 case 0x77: my_stprintf_s(buffer, buffer_len, _T("eqi a,%2xh"), getb()); break;
2137 case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f:
2138 my_stprintf_s(buffer, buffer_len, _T("calf %3x"), 0x800 | ((b & 7) << 8) | getb()); break;
2140 case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
2141 case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
2142 case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97:
2143 case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f:
2144 case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa4: case 0xa5: case 0xa6: case 0xa7:
2145 case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
2146 case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
2147 case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf:
2148 my_stprintf_s(buffer, buffer_len, _T("calt %2xh"), 0x80 | ((b & 0x3f) << 1)); break;
2150 case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
2151 case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf:
2152 case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
2153 case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf:
2154 my_stprintf_s(buffer, buffer_len, _T("jr %4xh"), pc + upd7801_dasm_ptr + (b & 0x1f)); break;
2156 case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
2157 case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
2158 case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
2159 case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff:
2160 my_stprintf_s(buffer, buffer_len, _T("jr %4xh"), pc + upd7801_dasm_ptr + ((b & 0x1f) - 0x20)); break;
2162 default: my_stprintf_s(buffer, buffer_len, _T("db %2xh"), b); break;
2164 return upd7801_dasm_ptr;
2168 void UPD7801::write_signal(int id, uint32_t data, uint32_t mask)
2170 if(id == SIG_UPD7801_INTF0) {
2176 } else if(id == SIG_UPD7801_INTF1) {
2182 } else if(id == SIG_UPD7801_INTF2) {
2183 if((data & mask) && (MK & 0x20)) {
2185 } else if(!(data & mask) && !(MK & 0x20)) {
2188 } else if(id == SIG_UPD7801_WAIT) {
2189 wait = ((data & mask) != 0);
2190 } else if(id == SIG_UPD7801_SI) {
2191 SI = ((data & mask) != 0);
2192 } else if(id == SIG_UPD7801_SCK) {
2193 bool newSCK = ((data & mask) != 0);
2195 if(!SIO_DISABLED && SIO_EXTCLOCK) {
2196 if(SCK && !newSCK) {
2197 write_signals(&outputs_so, (SR & 0x80) ? 0xffffffff : 0);
2198 } else if(!SCK && newSCK) {
2201 if(++sio_count == 8) {
2207 scount = sio_count = 0;
2218 uint8_t ope = FETCH8();
2220 if((PSW & F_SK) && ope != 0x72) {
2221 // skip this mnemonic
2223 case 0x48: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op48[ope].oplen - 2; period += op48[ope].clock; break;
2224 case 0x4c: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op4c[ope].oplen - 2; period += op4c[ope].clock; break;
2225 case 0x4d: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op4d[ope].oplen - 2; period += op4d[ope].clock; break;
2226 case 0x60: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op60[ope].oplen - 2; period += op60[ope].clock; break;
2227 case 0x64: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op64[ope].oplen - 2; period += op64[ope].clock; break;
2228 case 0x70: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op70[ope].oplen - 2; period += op70[ope].clock; break;
2229 case 0x74: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op74[ope].oplen - 2; period += op74[ope].clock; break;
2230 case 0x34: PSW &= ~(F_SK | F_L1); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2231 case 0x69: PSW &= ~(F_SK | F_L0 ); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2232 case 0x6f: PSW &= ~(F_SK | F_L1); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2233 default: PSW &= ~(F_SK | F_L0 | F_L1); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2237 period += op[ope].clock;
2243 HALT = 1; PC--; break;
2244 case 0x02: // inx sp
2246 case 0x03: // dcx sp
2248 case 0x04: // lxi sp,word
2249 SP = FETCH16(); break;
2250 case 0x05: // aniw wa,byte
2254 case 0x07: // ani a,byte
2257 PC = POP16(); break;
2260 case 0x0a: // mov a,b
2262 case 0x0b: // mov a,c
2264 case 0x0c: // mov a,d
2266 case 0x0d: // mov a,e
2268 case 0x0e: // mov a,h
2270 case 0x0f: // mov a,l
2280 case 0x14: // lxi b,word
2281 BC = FETCH16(); break;
2282 case 0x15: // oriw wa,byte
2284 case 0x16: // xri a,byte
2286 case 0x17: // ori a,byte
2289 PC = POP16(); PSW |= F_SK; break;
2292 TO = 0x10; UPDATE_PORTC(0);
2295 case 0x1a: // mov b, a
2297 case 0x1b: // mov c, a
2299 case 0x1c: // mov d, a
2301 case 0x1d: // mov e, a
2303 case 0x1e: // mov h, a
2305 case 0x1f: // mov l, a
2307 case 0x20: // inrw wa
2310 BC = RM16(PC + _A + 1); break;
2315 case 0x24: // lxi d,word
2316 DE = FETCH16(); break;
2317 case 0x25: // gtiw wa,byte
2319 case 0x26: // adinc a,byte
2321 case 0x27: // gti a,byte
2323 case 0x28: // ldaw wa
2324 _A = RM8(FETCHWA()); break;
2325 case 0x29: // ldax b
2326 _A = RM8(BC); break;
2327 case 0x2a: // ldax d
2328 _A = RM8(DE); break;
2329 case 0x2b: // ldax h
2330 _A = RM8(HL); break;
2331 case 0x2c: // ldax d+
2332 _A = RM8(DE++);; break;
2333 case 0x2d: // ldax h+
2334 _A = RM8(HL++); break;
2335 case 0x2e: // ldax d-
2336 _A = RM8(DE--); break;
2337 case 0x2f: // ldax h-
2338 _A = RM8(HL--); break;
2339 case 0x30: // dcrw wa
2347 case 0x34: // lxi h,word
2353 PSW = (PSW & ~F_L1) | F_L0; return;
2354 case 0x35: // ltiw wa,byte
2356 case 0x36: // suinb a,byte
2358 case 0x37: // lti a,byte
2360 case 0x38: // staw wa
2361 WM8(FETCHWA(), _A); break;
2362 case 0x39: // stax b
2364 case 0x3a: // stax d
2366 case 0x3b: // stax h
2368 case 0x3c: // stax d+
2369 WM8(DE++, _A); break;
2370 case 0x3d: // stax h+
2371 WM8(HL++, _A); break;
2372 case 0x3e: // stax d-
2373 WM8(DE--, _A); break;
2374 case 0x3f: // stax h-
2375 WM8(HL--, _A); break;
2384 case 0x44: // call word
2386 case 0x45: // oniw wa,byte
2388 case 0x46: // adi a,byte
2390 case 0x47: // oni a,byte
2394 case 0x49: // mvix b,byte
2395 WM8(BC, FETCH8()); break;
2396 case 0x4a: // mvix d,byte
2397 WM8(DE, FETCH8()); break;
2398 case 0x4b: // mvix h,byte
2399 WM8(HL, FETCH8()); break;
2415 case 0x54: // jmp word
2416 PC = FETCH16(); break;
2417 case 0x55: // offiw wa,byte
2419 case 0x56: // aci a,byte
2421 case 0x57: // offi a,byte
2423 case 0x58: // bit 0,wa
2425 case 0x59: // bit 1,wa
2427 case 0x5a: // bit 2,wa
2429 case 0x5b: // bit 3,wa
2431 case 0x5c: // bit 4,wa
2433 case 0x5d: // bit 5,wa
2435 case 0x5e: // bit 6,wa
2437 case 0x5f: // bit 7,wa
2444 PC = POP16(); PSW = POP8(); SIRQ = 0; return;
2446 PUSH16(PC); PC = BC; break;
2449 case 0x65: // neiw wa,byte
2451 case 0x66: // sui a,byte
2453 case 0x67: // nei a,byte
2455 case 0x68: // mvi v,byte
2458 case 0x69: // mvi a,byte
2464 PSW = (PSW & ~F_L0) | F_L1; return;
2465 case 0x6a: // mvi b,byte
2466 _B = FETCH8(); break;
2467 case 0x6b: // mvi c,byte
2468 _C = FETCH8(); break;
2469 case 0x6c: // mvi d,byte
2470 _D = FETCH8(); break;
2471 case 0x6d: // mvi e,byte
2472 _E = FETCH8(); break;
2473 case 0x6e: // mvi h,byte
2474 _H = FETCH8(); break;
2475 case 0x6f: // mvi l,byte
2481 PSW = (PSW & ~F_L1) | F_L0; return;
2484 case 0x71: // mviw wa,byte
2487 PUSH8(PSW); PUSH16(PC); PSW &= ~F_SK; SIRQ = 1; PC = 0x0060; break;
2492 case 0x75: // eqiw wa,byte
2494 case 0x76: // sbi a,byte
2496 case 0x77: // eqi a,byte
2498 case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f: // calf
2500 case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
2501 case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
2502 case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97:
2503 case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f:
2504 case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa4: case 0xa5: case 0xa6: case 0xa7:
2505 case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
2506 case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
2507 case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf: // calt
2509 case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
2510 case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf:
2511 case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
2512 case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: // jr
2513 PC += ope & 0x1f; break;
2514 case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
2515 case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
2516 case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
2517 case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: // jr
2518 PC -= 0x20 - (ope & 0x1f); break;
2519 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
2524 PSW &= ~(F_L0 | F_L1);
2527 void UPD7801::OP48()
2529 uint8_t ope = FETCH8();
2530 period += op48[ope].clock;
2533 case 0x00: // skit intf0
2535 case 0x01: // skit intft
2537 case 0x02: // skit intf1
2539 case 0x03: // skit intf2
2541 case 0x04: // skit intfs
2547 case 0x0e: // push v
2550 VA = POP16(); break;
2551 case 0x10: // sknit intf0
2552 SKNIT(INTF0); break;
2553 case 0x11: // sknit intft
2554 SKNIT(INTFT); break;
2555 case 0x12: // sknit intf1
2556 SKNIT(INTF1); break;
2557 case 0x13: // sknit intf2
2558 SKNIT(INTF2); break;
2559 case 0x14: // sknit intfs
2560 SKNIT(INTFS); break;
2561 case 0x1a: // skn cy
2565 case 0x1e: // push b
2568 BC = POP16(); break;
2574 PSW &= ~F_CY; break;
2581 case 0x2e: // push d
2584 DE = POP16(); break;
2607 case 0x3e: // push h
2610 HL = POP16(); break;
2612 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 48 %2x\n"), prevPC, ope);
2616 void UPD7801::OP4C()
2618 uint8_t ope = FETCH8();
2619 period += op4c[ope].clock;
2622 case 0xc0: // mov a,pa
2623 _A = IN8(P_A); break;
2624 case 0xc1: // mov a,pb
2625 _A = IN8(P_B); break;
2626 case 0xc2: // mov a,pc
2627 _A = IN8(P_C); break;
2628 case 0xc3: // mov a,mk
2630 case 0xc4: // mov a,mb ?
2632 case 0xc5: // mov a,mc ?
2634 case 0xc6: // mov a,tm0 ?
2636 case 0xc7: // mov a,tm1 ?
2638 case 0xc8: // mov a,s
2640 SAK = 8; UPDATE_PORTC(0);
2647 _A = RM8((_B << 8) | ope);
2650 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 4c %2x\n"), prevPC, ope);
2655 void UPD7801::OP4D()
2657 uint8_t ope = FETCH8();
2658 period += op4d[ope].clock;
2661 case 0xc0: // mov pa,a
2662 OUT8(P_A, _A); break;
2663 case 0xc1: // mov pb,a
2664 OUT8(P_B, _A); break;
2665 case 0xc2: // mov pc,a
2666 OUT8(P_C, _A); break;
2667 case 0xc3: // mov mk,a
2669 case 0xc4: // mov mb,a
2671 case 0xc5: // mov mc,a
2673 MC = _A; UPDATE_PORTC(0); break;
2676 case 0xc6: // mov tm0,a
2678 case 0xc7: // mov tm1,a
2680 case 0xc8: // mov s,a
2682 SAK = 8; UPDATE_PORTC(0);
2689 WM8((_B << 8) | ope, _A);
2692 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 4d %2x\n"), prevPC, ope);
2697 void UPD7801::OP60()
2699 uint8_t ope = FETCH8();
2700 period += op60[ope].clock;
2703 case 0x08: // ana v,a
2705 case 0x09: // ana a,a
2707 case 0x0a: // ana b,a
2709 case 0x0b: // ana c,a
2711 case 0x0c: // ana d,a
2713 case 0x0d: // ana e,a
2715 case 0x0e: // ana h,a
2717 case 0x0f: // ana l,a
2719 case 0x10: // xra v,a
2721 case 0x11: // xra a,a
2723 case 0x12: // xra b,a
2725 case 0x13: // xra c,a
2727 case 0x14: // xra d,a
2729 case 0x15: // xra e,a
2731 case 0x16: // xra h,a
2733 case 0x17: // xra l,a
2735 case 0x18: // ora v,a
2737 case 0x19: // ora a,a
2739 case 0x1a: // ora b,a
2741 case 0x1b: // ora c,a
2743 case 0x1c: // ora d,a
2745 case 0x1d: // ora e,a
2747 case 0x1e: // ora h,a
2749 case 0x1f: // ora l,a
2751 case 0x20: // addnc v,a
2752 ADDNC(_V, _A); break;
2753 case 0x21: // addnc a,a
2754 ADDNC(_A, _A); break;
2755 case 0x22: // addnc b,a
2756 ADDNC(_B, _A); break;
2757 case 0x23: // addnc c,a
2758 ADDNC(_C, _A); break;
2759 case 0x24: // addnc d,a
2760 ADDNC(_D, _A); break;
2761 case 0x25: // addnc e,a
2762 ADDNC(_E, _A); break;
2763 case 0x26: // addnc h,a
2764 ADDNC(_H, _A); break;
2765 case 0x27: // addnc l,a
2766 ADDNC(_L, _A); break;
2767 case 0x28: // gta v,a
2769 case 0x29: // gta a,a
2771 case 0x2a: // gta b,a
2773 case 0x2b: // gta c,a
2775 case 0x2c: // gta d,a
2777 case 0x2d: // gta e,a
2779 case 0x2e: // gta h,a
2781 case 0x2f: // gta l,a
2783 case 0x30: // subnb v,a
2784 SUBNB(_V, _A); break;
2785 case 0x31: // subnb a,a
2786 SUBNB(_A, _A); break;
2787 case 0x32: // subnb b,a
2788 SUBNB(_B, _A); break;
2789 case 0x33: // subnb c,a
2790 SUBNB(_C, _A); break;
2791 case 0x34: // subnb d,a
2792 SUBNB(_D, _A); break;
2793 case 0x35: // subnb e,a
2794 SUBNB(_E, _A); break;
2795 case 0x36: // subnb h,a
2796 SUBNB(_H, _A); break;
2797 case 0x37: // subnb l,a
2798 SUBNB(_L, _A); break;
2799 case 0x38: // lta v,a
2801 case 0x39: // lta a,a
2803 case 0x3a: // lta b,a
2805 case 0x3b: // lta c,a
2807 case 0x3c: // lta d,a
2809 case 0x3d: // lta e,a
2811 case 0x3e: // lta h,a
2813 case 0x3f: // lta l,a
2815 case 0x40: // add v,a
2817 case 0x41: // add a,a
2819 case 0x42: // add b,a
2821 case 0x43: // add c,a
2823 case 0x44: // add d,a
2825 case 0x45: // add e,a
2827 case 0x46: // add h,a
2829 case 0x47: // add l,a
2831 case 0x50: // adc v,a
2833 case 0x51: // adc a,a
2835 case 0x52: // adc b,a
2837 case 0x53: // adc c,a
2839 case 0x54: // adc d,a
2841 case 0x55: // adc e,a
2843 case 0x56: // adc h,a
2845 case 0x57: // adc l,a
2847 case 0x60: // sub v,a
2849 case 0x61: // sub a,a
2851 case 0x62: // sub b,a
2853 case 0x63: // sub c,a
2855 case 0x64: // sub d,a
2857 case 0x65: // sub e,a
2859 case 0x66: // sub h,a
2861 case 0x67: // sub l,a
2863 case 0x68: // nea v,a
2865 case 0x69: // nea a,a
2867 case 0x6a: // nea b,a
2869 case 0x6b: // nea c,a
2871 case 0x6c: // nea d,a
2873 case 0x6d: // nea e,a
2875 case 0x6e: // nea h,a
2877 case 0x6f: // nea l,a
2879 case 0x70: // sbb v,a
2881 case 0x71: // sbb a,a
2883 case 0x72: // sbb b,a
2885 case 0x73: // sbb c,a
2887 case 0x74: // sbb d,a
2889 case 0x75: // sbb e,a
2891 case 0x76: // sbb h,a
2893 case 0x77: // sbb l,a
2895 case 0x78: // eqa v,a
2897 case 0x79: // eqa a,a
2899 case 0x7a: // eqa b,a
2901 case 0x7b: // eqa c,a
2903 case 0x7c: // eqa d,a
2905 case 0x7d: // eqa e,a
2907 case 0x7e: // eqa h,a
2909 case 0x7f: // eqa l,a
2911 case 0x88: // ana a,v
2913 case 0x89: // ana a,a
2915 case 0x8a: // ana a,b
2917 case 0x8b: // ana a,c
2919 case 0x8c: // ana a,d
2921 case 0x8d: // ana a,e
2923 case 0x8e: // ana a,h
2925 case 0x8f: // ana a,l
2927 case 0x90: // xra a,v
2929 case 0x91: // xra a,a
2931 case 0x92: // xra a,b
2933 case 0x93: // xra a,c
2935 case 0x94: // xra a,d
2937 case 0x95: // xra a,e
2939 case 0x96: // xra a,h
2941 case 0x97: // xra a,l
2943 case 0x98: // ora a,v
2945 case 0x99: // ora a,a
2947 case 0x9a: // ora a,b
2949 case 0x9b: // ora a,c
2951 case 0x9c: // ora a,d
2953 case 0x9d: // ora a,e
2955 case 0x9e: // ora a,h
2957 case 0x9f: // ora a,l
2959 case 0xa0: // addnc a,v
2960 ADDNC(_A, _V); break;
2961 case 0xa1: // addnc a,a
2962 ADDNC(_A, _A); break;
2963 case 0xa2: // addnc a,b
2964 ADDNC(_A, _B); break;
2965 case 0xa3: // addnc a,c
2966 ADDNC(_A, _C); break;
2967 case 0xa4: // addnc a,d
2968 ADDNC(_A, _D); break;
2969 case 0xa5: // addnc a,e
2970 ADDNC(_A, _E); break;
2971 case 0xa6: // addnc a,h
2972 ADDNC(_A, _H); break;
2973 case 0xa7: // addnc a,l
2974 ADDNC(_A, _L); break;
2975 case 0xa8: // gta a,v
2977 case 0xa9: // gta a,a
2979 case 0xaa: // gta a,b
2981 case 0xab: // gta a,c
2983 case 0xac: // gta a,d
2985 case 0xad: // gta a,e
2987 case 0xae: // gta a,h
2989 case 0xaf: // gta a,l
2991 case 0xb0: // subnb a,v
2992 SUBNB(_A, _V); break;
2993 case 0xb1: // subnb a,a
2994 SUBNB(_A, _A); break;
2995 case 0xb2: // subnb a,b
2996 SUBNB(_A, _B); break;
2997 case 0xb3: // subnb a,c
2998 SUBNB(_A, _C); break;
2999 case 0xb4: // subnb a,d
3000 SUBNB(_A, _D); break;
3001 case 0xb5: // subnb a,e
3002 SUBNB(_A, _E); break;
3003 case 0xb6: // subnb a,h
3004 SUBNB(_A, _H); break;
3005 case 0xb7: // subnb a,l
3006 SUBNB(_A, _L); break;
3007 case 0xb8: // lta a,v
3009 case 0xb9: // lta a,a
3011 case 0xba: // lta a,b
3013 case 0xbb: // lta a,c
3015 case 0xbc: // lta a,d
3017 case 0xbd: // lta a,e
3019 case 0xbe: // lta a,h
3021 case 0xbf: // lta a,l
3023 case 0xc0: // add a,v
3025 case 0xc1: // add a,a
3027 case 0xc2: // add a,b
3029 case 0xc3: // add a,c
3031 case 0xc4: // add a,d
3033 case 0xc5: // add a,e
3035 case 0xc6: // add a,h
3037 case 0xc7: // add a,l
3039 case 0xc8: // ona a,v
3041 case 0xc9: // ona a,a
3043 case 0xca: // ona a,b
3045 case 0xcb: // ona a,c
3047 case 0xcc: // ona a,d
3049 case 0xcd: // ona a,e
3051 case 0xce: // ona a,h
3053 case 0xcf: // ona a,l
3055 case 0xd0: // adc a,v
3057 case 0xd1: // adc a,a
3059 case 0xd2: // adc a,b
3061 case 0xd3: // adc a,c
3063 case 0xd4: // adc a,d
3065 case 0xd5: // adc a,e
3067 case 0xd6: // adc a,h
3069 case 0xd7: // adc a,l
3071 case 0xd8: // offa a,v
3072 OFFA(_A, _V); break;
3073 case 0xd9: // offa a,a
3074 OFFA(_A, _A); break;
3075 case 0xda: // offa a,b
3076 OFFA(_A, _B); break;
3077 case 0xdb: // offa a,c
3078 OFFA(_A, _C); break;
3079 case 0xdc: // offa a,d
3080 OFFA(_A, _D); break;
3081 case 0xdd: // offa a,e
3082 OFFA(_A, _E); break;
3083 case 0xde: // offa a,h
3084 OFFA(_A, _H); break;
3085 case 0xdf: // offa a,l
3086 OFFA(_A, _L); break;
3087 case 0xe0: // sub a,v
3089 case 0xe1: // sub a,a
3091 case 0xe2: // sub a,b
3093 case 0xe3: // sub a,c
3095 case 0xe4: // sub a,d
3097 case 0xe5: // sub a,e
3099 case 0xe6: // sub a,h
3101 case 0xe7: // sub a,l
3103 case 0xe8: // nea a,v
3105 case 0xe9: // nea a,a
3107 case 0xea: // nea a,b
3109 case 0xeb: // nea a,c
3111 case 0xec: // nea a,d
3113 case 0xed: // nea a,e
3115 case 0xee: // nea a,h
3117 case 0xef: // nea a,l
3119 case 0xf0: // sbb a,v
3121 case 0xf1: // sbb a,a
3123 case 0xf2: // sbb a,b
3125 case 0xf3: // sbb a,c
3127 case 0xf4: // sbb a,d
3129 case 0xf5: // sbb a,e
3131 case 0xf6: // sbb a,h
3133 case 0xf7: // sbb a,l
3135 case 0xf8: // eqa a,v
3137 case 0xf9: // eqa a,a
3139 case 0xfa: // eqa a,b
3141 case 0xfb: // eqa a,c
3143 case 0xfc: // eqa a,d
3145 case 0xfd: // eqa a,e
3147 case 0xfe: // eqa a,h
3149 case 0xff: // eqa a,l
3152 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 60 %2x\n"), prevPC, ope);
3156 void UPD7801::OP64()
3158 uint8_t ope = FETCH8();
3159 period += op64[ope].clock;
3162 case 0x08: // ani v,byte
3164 case 0x09: // ani a,byte
3166 case 0x0a: // ani b,byte
3168 case 0x0b: // ani c,byte
3170 case 0x0c: // ani d,byte
3172 case 0x0d: // ani e,byte
3174 case 0x0e: // ani h,byte
3176 case 0x0f: // ani l,byte
3178 case 0x10: // xri v,byte
3180 case 0x11: // xri a,byte
3182 case 0x12: // xri b,byte
3184 case 0x13: // xri c,byte
3186 case 0x14: // xri d,byte
3188 case 0x15: // xri e,byte
3190 case 0x16: // xri h,byte
3192 case 0x17: // xri l,byte
3194 case 0x18: // ori v,byte
3196 case 0x19: // ori a,byte
3198 case 0x1a: // ori b,byte
3200 case 0x1b: // ori c,byte
3202 case 0x1c: // ori d,byte
3204 case 0x1d: // ori e,byte
3206 case 0x1e: // ori h,byte
3208 case 0x1f: // ori l,byte
3210 case 0x20: // adinc v,byte
3212 case 0x21: // adinc a,byte
3214 case 0x22: // adinc b,byte
3216 case 0x23: // adinc c,byte
3218 case 0x24: // adinc d,byte
3220 case 0x25: // adinc e,byte
3222 case 0x26: // adinc h,byte
3224 case 0x27: // adinc l,byte
3226 case 0x28: // gti v,byte
3228 case 0x29: // gti a,byte
3230 case 0x2a: // gti b,byte
3232 case 0x2b: // gti c,byte
3234 case 0x2c: // gti d,byte
3236 case 0x2d: // gti e,byte
3238 case 0x2e: // gti h,byte
3240 case 0x2f: // gti l,byte
3242 case 0x30: // suinb v,byte
3244 case 0x31: // suinb a,byte
3246 case 0x32: // suinb b,byte
3248 case 0x33: // suinb c,byte
3250 case 0x34: // suinb d,byte
3252 case 0x35: // suinb e,byte
3254 case 0x36: // suinb h,byte
3256 case 0x37: // suinb l,byte
3258 case 0x38: // lti v,byte
3260 case 0x39: // lti a,byte
3262 case 0x3a: // lti b,byte
3264 case 0x3b: // lti c,byte
3266 case 0x3c: // lti d,byte
3268 case 0x3d: // lti e,byte
3270 case 0x3e: // lti h,byte
3272 case 0x3f: // lti l,byte
3274 case 0x40: // adi v,byte
3276 case 0x41: // adi a,byte
3278 case 0x42: // adi b,byte
3280 case 0x43: // adi c,byte
3282 case 0x44: // adi d,byte
3284 case 0x45: // adi e,byte
3286 case 0x46: // adi h,byte
3288 case 0x47: // adi l,byte
3290 case 0x48: // oni v,byte
3292 case 0x49: // oni a,byte
3294 case 0x4a: // oni b,byte
3296 case 0x4b: // oni c,byte
3298 case 0x4c: // oni d,byte
3300 case 0x4d: // oni e,byte
3302 case 0x4e: // oni h,byte
3304 case 0x4f: // oni l,byte
3306 case 0x50: // aci v,byte
3308 case 0x51: // aci a,byte
3310 case 0x52: // aci b,byte
3312 case 0x53: // aci c,byte
3314 case 0x54: // aci d,byte
3316 case 0x55: // aci e,byte
3318 case 0x56: // aci h,byte
3320 case 0x57: // aci l,byte
3322 case 0x58: // offi v,byte
3324 case 0x59: // offi a,byte
3326 case 0x5a: // offi b,byte
3328 case 0x5b: // offi c,byte
3330 case 0x5c: // offi d,byte
3332 case 0x5d: // offi e,byte
3334 case 0x5e: // offi h,byte
3336 case 0x5f: // offi l,byte
3338 case 0x60: // sui v,byte
3340 case 0x61: // sui a,byte
3342 case 0x62: // sui b,byte
3344 case 0x63: // sui c,byte
3346 case 0x64: // sui d,byte
3348 case 0x65: // sui e,byte
3350 case 0x66: // sui h,byte
3352 case 0x67: // sui l,byte
3354 case 0x68: // nei v,byte
3356 case 0x69: // nei a,byte
3358 case 0x6a: // nei b,byte
3360 case 0x6b: // nei c,byte
3362 case 0x6c: // nei d,byte
3364 case 0x6d: // nei e,byte
3366 case 0x6e: // nei h,byte
3368 case 0x6f: // nei l,byte
3370 case 0x70: // sbi v,byte
3372 case 0x71: // sbi a,byte
3374 case 0x72: // sbi b,byte
3376 case 0x73: // sbi c,byte
3378 case 0x74: // sbi d,byte
3380 case 0x75: // sbi e,byte
3382 case 0x76: // sbi h,byte
3384 case 0x77: // sbi l,byte
3386 case 0x78: // eqi v,byte
3388 case 0x79: // eqi a,byte
3390 case 0x7a: // eqi b,byte
3392 case 0x7b: // eqi c,byte
3394 case 0x7c: // eqi d,byte
3396 case 0x7d: // eqi e,byte
3398 case 0x7e: // eqi h,byte
3400 case 0x7f: // eqi l,byte
3402 case 0x88: // ani pa,byte
3404 case 0x89: // ani pb,byte
3406 case 0x8a: // ani pc,byte
3408 case 0x8b: // ani mk,byte
3410 case 0x90: // xri pa,byte
3412 case 0x91: // xri pb,byte
3414 case 0x92: // xri pc,byte
3416 case 0x93: // xri mk,byte
3418 case 0x98: // ori pa,byte
3420 case 0x99: // ori pb,byte
3422 case 0x9a: // ori pc,byte
3424 case 0x9b: // ori mk,byte
3426 case 0xa0: // adinc pa,byte
3427 ADINC_IO(P_A); break;
3428 case 0xa1: // adinc pb,byte
3429 ADINC_IO(P_B); break;
3430 case 0xa2: // adinc pc,byte
3431 ADINC_IO(P_C); break;
3432 case 0xa3: // adinc mk,byte
3434 case 0xa8: // gti pa,byte
3436 case 0xa9: // gti pb,byte
3438 case 0xaa: // gti pc,byte
3440 case 0xab: // gti mk,byte
3442 case 0xb0: // suinb pa,byte
3443 SUINB_IO(P_A); break;
3444 case 0xb1: // suinb pb,byte
3445 SUINB_IO(P_B); break;
3446 case 0xb2: // suinb pc,byte
3447 SUINB_IO(P_C); break;
3448 case 0xb3: // suinb mk,byte
3450 case 0xb8: // lti pa,byte
3452 case 0xb9: // lti pb,byte
3454 case 0xba: // lti pc,byte
3456 case 0xbb: // lti mk,byte
3458 case 0xc0: // adi pa,byte
3460 case 0xc1: // adi pb,byte
3462 case 0xc2: // adi pc,byte
3464 case 0xc3: // adi mk,byte
3466 case 0xc8: // oni pa,byte
3468 case 0xc9: // oni pb,byte
3470 case 0xca: // oni pc,byte
3472 case 0xcb: // oni mk,byte
3474 case 0xd0: // aci pa,byte
3476 case 0xd1: // aci pb,byte
3478 case 0xd2: // aci pc,byte
3480 case 0xd3: // aci mk,byte
3482 case 0xd8: // offi pa,byte
3483 OFFI_IO(P_A); break;
3484 case 0xd9: // offi pb,byte
3485 OFFI_IO(P_B); break;
3486 case 0xda: // offi pc,byte
3487 OFFI_IO(P_C); break;
3488 case 0xdb: // offi mk,byte
3490 case 0xe0: // sui pa,byte
3492 case 0xe1: // sui pb,byte
3494 case 0xe2: // sui pc,byte
3496 case 0xe3: // sui mk,byte
3498 case 0xe8: // nei pa,byte
3500 case 0xe9: // nei pb,byte
3502 case 0xea: // nei pc,byte
3504 case 0xeb: // nei mk,byte
3506 case 0xf0: // sbi pa,byte
3508 case 0xf1: // sbi pb,byte
3510 case 0xf2: // sbi pc,byte
3512 case 0xf3: // sbi mk,byte
3514 case 0xf8: // eqi pa,byte
3516 case 0xf9: // eqi pb,byte
3518 case 0xfa: // eqi pc,byte
3520 case 0xfb: // eqi mk,byte
3523 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 64 %2x\n"), prevPC, ope);
3527 void UPD7801::OP70()
3529 uint8_t ope = FETCH8();
3530 period += op70[ope].clock;
3533 case 0x0e: // sspd word
3534 WM16(FETCH16(), SP); break;
3535 case 0x0f: // lspd word
3536 SP = RM16(FETCH16()); break;
3537 case 0x1e: // sbcd word
3538 WM16(FETCH16(), BC); break;
3539 case 0x1f: // lbcd word
3540 BC = RM16(FETCH16()); break;
3541 case 0x2e: // sded word
3542 WM16(FETCH16(), DE); break;
3543 case 0x2f: // lded word
3544 DE = RM16(FETCH16()); break;
3545 case 0x3e: // shld word
3546 WM16(FETCH16(), HL); break;
3547 case 0x3f: // lhld word
3548 HL = RM16(FETCH16()); break;
3549 case 0x68: // mov v,word
3550 _V = RM8(FETCH16());
3552 case 0x69: // mov a,word
3553 _A = RM8(FETCH16()); break;
3554 case 0x6a: // mov b,word
3555 _B = RM8(FETCH16()); break;
3556 case 0x6b: // mov c,word
3557 _C = RM8(FETCH16()); break;
3558 case 0x6c: // mov d,word
3559 _D = RM8(FETCH16()); break;
3560 case 0x6d: // mov e,word
3561 _E = RM8(FETCH16()); break;
3562 case 0x6e: // mov h,word
3563 _H = RM8(FETCH16()); break;
3564 case 0x6f: // mov l,word
3565 _L = RM8(FETCH16()); break;
3566 case 0x78: // mov word,v
3567 WM8(FETCH16(), _V); break;
3568 case 0x79: // mov word,a
3569 WM8(FETCH16(), _A); break;
3570 case 0x7a: // mov word,b
3571 WM8(FETCH16(), _B); break;
3572 case 0x7b: // mov word,c
3573 WM8(FETCH16(), _C); break;
3574 case 0x7c: // mov word,d
3575 WM8(FETCH16(), _D); break;
3576 case 0x7d: // mov word,e
3577 WM8(FETCH16(), _E); break;
3578 case 0x7e: // mov word,h
3579 WM8(FETCH16(), _H); break;
3580 case 0x7f: // mov word,l
3581 WM8(FETCH16(), _L); break;
3582 case 0x89: // anax b
3584 case 0x8a: // anax d
3586 case 0x8b: // anax h
3588 case 0x8c: // anax d+
3590 case 0x8d: // anax h+
3592 case 0x8e: // anax d-
3594 case 0x8f: // anax h-
3596 case 0x91: // xrax b
3598 case 0x92: // xrax d
3600 case 0x93: // xrax h
3602 case 0x94: // xrax d+
3604 case 0x95: // xrax h+
3606 case 0x96: // xrax d-
3608 case 0x97: // xrax h-
3610 case 0x99: // orax b
3612 case 0x9a: // orax d
3614 case 0x9b: // orax h
3616 case 0x9c: // orax d+
3618 case 0x9d: // orax h+
3620 case 0x9e: // orax d-
3622 case 0x9f: // orax h-
3624 case 0xa1: // addncx b
3626 case 0xa2: // addncx d
3628 case 0xa3: // addncx h
3630 case 0xa4: // addncx d+
3631 ADDNCX(DE++); break;
3632 case 0xa5: // addncx h+
3633 ADDNCX(HL++); break;
3634 case 0xa6: // addncx d-
3635 ADDNCX(DE--); break;
3636 case 0xa7: // addncx h-
3637 ADDNCX(HL--); break;
3638 case 0xa9: // gtax b
3640 case 0xaa: // gtax d
3642 case 0xab: // gtax h
3644 case 0xac: // gtax d+
3646 case 0xad: // gtax h+
3648 case 0xae: // gtax d-
3650 case 0xaf: // gtax h-
3652 case 0xb1: // subnbx b
3654 case 0xb2: // subnbx d
3656 case 0xb3: // subnbx h
3658 case 0xb4: // subnbx d+
3659 SUBNBX(DE++); break;
3660 case 0xb5: // subnbx h+
3661 SUBNBX(HL++); break;
3662 case 0xb6: // subnbx d-
3663 SUBNBX(DE--); break;
3664 case 0xb7: // subnbx h-
3665 SUBNBX(HL--); break;
3666 case 0xb9: // ltax b
3668 case 0xba: // ltax d
3670 case 0xbb: // ltax h
3672 case 0xbc: // ltax d+
3674 case 0xbd: // ltax h+
3676 case 0xbe: // ltax d-
3678 case 0xbf: // ltax h-
3680 case 0xc1: // addx b
3682 case 0xc2: // addx d
3684 case 0xc3: // addx h
3686 case 0xc4: // addx d+
3688 case 0xc5: // addx h+
3690 case 0xc6: // addx d-
3692 case 0xc7: // addx h-
3694 case 0xc9: // onax b
3696 case 0xca: // onax d
3698 case 0xcb: // onax h
3700 case 0xcc: // onax d+
3702 case 0xcd: // onax h+
3704 case 0xce: // onax d-
3706 case 0xcf: // onax h-
3708 case 0xd1: // adcx b
3710 case 0xd2: // adcx d
3712 case 0xd3: // adcx h
3714 case 0xd4: // adcx d+
3716 case 0xd5: // adcx h+
3718 case 0xd6: // adcx d-
3720 case 0xd7: // adcx h-
3722 case 0xd9: // offax b
3724 case 0xda: // offax d
3726 case 0xdb: // offax h
3728 case 0xdc: // offax d+
3730 case 0xdd: // offax h+
3732 case 0xde: // offax d-
3734 case 0xdf: // offax h-
3736 case 0xe1: // subx b
3738 case 0xe2: // subx d
3740 case 0xe3: // subx h
3742 case 0xe4: // subx d+
3744 case 0xe5: // subx h+
3746 case 0xe6: // subx d-
3748 case 0xe7: // subx h-
3750 case 0xe9: // neax b
3752 case 0xea: // neax d
3754 case 0xeb: // neax h
3756 case 0xec: // neax d+
3758 case 0xed: // neax h+
3760 case 0xee: // neax d-
3762 case 0xef: // neax h-
3764 case 0xf1: // sbbx b
3766 case 0xf2: // sbbx d
3768 case 0xf3: // sbbx h
3770 case 0xf4: // sbbx d+
3772 case 0xf5: // sbbx h+
3774 case 0xf6: // sbbx d-
3776 case 0xf7: // sbbx h-
3778 case 0xf9: // eqax b
3780 case 0xfa: // eqax d
3782 case 0xfb: // eqax h
3784 case 0xfc: // eqax d+
3786 case 0xfd: // eqax h+
3788 case 0xfe: // eqax d-
3790 case 0xff: // eqax h-
3793 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 70 %2x\n"), prevPC, ope);
3797 void UPD7801::OP74()
3799 uint8_t ope = FETCH8();
3800 period += op74[ope].clock;
3803 case 0x88: // anaw wa
3805 case 0x90: // xraw wa
3807 case 0x98: // oraw wa
3809 case 0xa0: // addncw wa
3811 case 0xa8: // gtaw wa
3813 case 0xb0: // subnbw wa
3815 case 0xb8: // ltaw wa
3817 case 0xc0: // addw wa
3819 case 0xc8: // onaw wa
3821 case 0xd0: // adcw wa
3823 case 0xd8: // offaw wa
3825 case 0xe0: // subw wa
3827 case 0xe8: // neaw wa
3829 case 0xf0: // sbbw wa
3831 case 0xf8: // eqaw wa
3834 emu->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 74 %2x\n"), prevPC, ope);
3838 #define STATE_VERSION 2
3840 void UPD7801::save_state(FILEIO* state_fio)
3842 state_fio->FputUint32(STATE_VERSION);
3843 state_fio->FputInt32(this_device_id);
3845 state_fio->FputInt32(count);
3846 state_fio->FputInt32(period);
3847 state_fio->FputInt32(scount);
3848 state_fio->FputInt32(tcount);
3849 state_fio->FputBool(wait);
3850 state_fio->Fwrite(regs, sizeof(regs), 1);
3851 state_fio->FputUint16(SP);
3852 state_fio->FputUint16(PC);
3853 state_fio->FputUint16(prevPC);
3854 state_fio->FputUint8(PSW);
3855 state_fio->FputUint8(IRR);
3856 state_fio->FputUint8(IFF);
3857 state_fio->FputUint8(SIRQ);
3858 state_fio->FputUint8(HALT);
3859 state_fio->FputUint8(MK);
3860 state_fio->FputUint8(MB);
3861 state_fio->FputUint8(MC);
3862 state_fio->FputUint8(TM0);
3863 state_fio->FputUint8(TM1);
3864 state_fio->FputUint8(SR);
3865 state_fio->FputUint8(SAK);
3866 state_fio->FputUint8(TO);
3867 state_fio->FputUint8(PORTC);
3868 state_fio->FputBool(SI);
3869 state_fio->FputBool(SCK);
3870 state_fio->FputInt32(sio_count);
3873 bool UPD7801::load_state(FILEIO* state_fio)
3875 if(state_fio->FgetUint32() != STATE_VERSION) {
3878 if(state_fio->FgetInt32() != this_device_id) {
3881 count = state_fio->FgetInt32();
3882 period = state_fio->FgetInt32();
3883 scount = state_fio->FgetInt32();
3884 tcount = state_fio->FgetInt32();
3885 wait = state_fio->FgetBool();
3886 state_fio->Fread(regs, sizeof(regs), 1);
3887 SP = state_fio->FgetUint16();
3888 PC = state_fio->FgetUint16();
3889 prevPC = state_fio->FgetUint16();
3890 PSW = state_fio->FgetUint8();
3891 IRR = state_fio->FgetUint8();
3892 IFF = state_fio->FgetUint8();
3893 SIRQ = state_fio->FgetUint8();
3894 HALT = state_fio->FgetUint8();
3895 MK = state_fio->FgetUint8();
3896 MB = state_fio->FgetUint8();
3897 MC = state_fio->FgetUint8();
3898 TM0 = state_fio->FgetUint8();
3899 TM1 = state_fio->FgetUint8();
3900 SR = state_fio->FgetUint8();
3901 SAK = state_fio->FgetUint8();
3902 TO = state_fio->FgetUint8();
3903 PORTC = state_fio->FgetUint8();
3904 SI = state_fio->FgetBool();
3905 SCK = state_fio->FgetBool();
3906 sio_count = state_fio->FgetInt32();