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
294 if(__UPD7801_MEMORY_WAIT) {
296 uint8_t val = d_mem->read_data8w(addr, &wait);
301 return d_mem->read_data8(addr);
306 inline void UPD7801::WM8(uint16_t addr, uint8_t val)
308 //#ifdef UPD7801_MEMORY_WAIT
309 if(__UPD7801_MEMORY_WAIT) {
311 d_mem->write_data8w(addr, val, &wait);
315 d_mem->write_data8(addr, val);
320 inline uint16_t UPD7801::RM16(uint16_t addr)
322 //#ifdef UPD7801_MEMORY_WAIT
323 if(__UPD7801_MEMORY_WAIT) {
325 uint16_t val = d_mem->read_data16w(addr, &wait);
330 return d_mem->read_data16(addr);
335 inline void UPD7801::WM16(uint16_t addr, uint16_t val)
337 //#ifdef UPD7801_MEMORY_WAIT
338 if(__UPD7801_MEMORY_WAIT) {
340 d_mem->write_data16w(addr, val, &wait);
344 d_mem->write_data16(addr, val);
349 inline uint8_t UPD7801::FETCH8()
351 //#ifdef UPD7801_MEMORY_WAIT
352 if(__UPD7801_MEMORY_WAIT) {
354 uint8_t val = d_mem->read_data8w(PC++, &wait);
359 return d_mem->read_data8(PC++);
364 inline uint16_t UPD7801::FETCH16()
367 //#ifdef UPD7801_MEMORY_WAIT
368 if(__UPD7801_MEMORY_WAIT) {
370 val = d_mem->read_data16w(PC, &wait);
374 val = d_mem->read_data16(PC);
381 inline uint16_t UPD7801::FETCHWA()
383 //#ifdef UPD7801_MEMORY_WAIT
384 if(__UPD7801_MEMORY_WAIT) {
386 uint16_t val = (_V << 8) | d_mem->read_data8w(PC++, &wait);
391 return (_V << 8) | d_mem->read_data8(PC++);
396 inline uint8_t UPD7801::POP8()
398 //#ifdef UPD7801_MEMORY_WAIT
399 if(__UPD7801_MEMORY_WAIT) {
401 uint8_t val = d_mem->read_data8w(SP++, &wait);
406 return d_mem->read_data8(SP++);
411 inline void UPD7801::PUSH8(uint8_t val)
413 //#ifdef UPD7801_MEMORY_WAIT
414 if(__UPD7801_MEMORY_WAIT) {
416 d_mem->write_data8w(--SP, val, &wait);
420 d_mem->write_data8(--SP, val);
425 inline uint16_t UPD7801::POP16()
428 //#ifdef UPD7801_MEMORY_WAIT
429 if(__UPD7801_MEMORY_WAIT) {
431 val = d_mem->read_data16w(SP, &wait);
435 val = d_mem->read_data16(SP);
442 inline void UPD7801::PUSH16(uint16_t val)
445 //#ifdef UPD7801_MEMORY_WAIT
446 if(__UPD7801_MEMORY_WAIT) {
448 d_mem->write_data16w(SP, val, &wait);
452 d_mem->write_data16(SP, val);
459 inline uint8_t UPD7801::IN8(int port)
462 return (d_io->read_io8(P_C) & 0x87) | (PORTC & 0x78);
464 return d_io->read_io8(port);
467 inline void UPD7801::OUT8(int port, uint8_t val)
472 d_io->write_io8(port, val);
475 // IOM : 0x20 = I/O, 0 = MEMORY
476 inline void UPD7801::UPDATE_PORTC(uint8_t IOM)
478 uint8_t MC2 = (MC & 0x7f) | ((MC & 0x40) << 1);
479 d_io->write_io8(P_C, (PORTC & MC2) | ((SAK | TO | IOM | HLDA) & ~MC2));
485 uint8_t tmp = r + FETCH8() + (PSW & F_CY); \
486 ZHC_ADD(tmp, r, (PSW & F_CY)); \
489 #define ACI_IO(p) { \
490 uint8_t old = IN8(p); \
491 uint8_t tmp = old + FETCH8() + (PSW & F_CY); \
492 ZHC_ADD(tmp, old, (PSW & F_CY)); \
495 #define ADC(r, n) { \
496 uint8_t tmp = r + n + (PSW & F_CY); \
497 ZHC_ADD(tmp, r, (PSW & F_CY)); \
501 uint8_t tmp = _A + RM8(FETCHWA()) + (PSW & F_CY); \
502 ZHC_ADD(tmp, _A, (PSW & F_CY)); \
506 uint8_t tmp = _A + RM8(r) + (PSW & F_CY); \
507 ZHC_ADD(tmp, _A, (PSW & F_CY)); \
510 #define ADD(r, n) { \
511 uint8_t tmp = r + n; \
512 ZHC_ADD(tmp, r, 0); \
515 #define ADDNC(r, n) { \
516 uint8_t tmp = r + n; \
517 ZHC_ADD(tmp, r, 0); \
522 uint8_t tmp = _A + RM8(FETCHWA()); \
523 ZHC_ADD(tmp, _A, 0); \
527 #define ADDNCX(r) { \
528 uint8_t tmp = _A + RM8(r); \
529 ZHC_ADD(tmp, _A, 0); \
534 uint8_t tmp = _A + RM8(FETCHWA()); \
535 ZHC_ADD(tmp, _A, 0); \
539 uint8_t tmp = _A + RM8(r); \
540 ZHC_ADD(tmp, _A, 0); \
544 uint8_t tmp = r + FETCH8(); \
545 ZHC_ADD(tmp, r, 0); \
548 #define ADI_IO(p) { \
549 uint8_t old = IN8(p); \
550 uint8_t tmp = old + FETCH8(); \
551 ZHC_ADD(tmp, old, 0); \
555 uint8_t tmp = r + FETCH8(); \
556 ZHC_ADD(tmp, r, 0); \
560 #define ADINC_IO(p) { \
561 uint8_t old = IN8(p); \
562 uint8_t tmp = old + FETCH8(); \
563 ZHC_ADD(tmp, old, 0); \
567 #define ANA(r, n) { \
572 _A &= RM8(FETCHWA()); \
583 #define ANI_IO(p) { \
584 uint8_t tmp = IN8(p) & FETCH8(); \
589 uint16_t dst = FETCHWA(); \
590 uint8_t tmp = RM8(dst) & FETCH8(); \
595 if(RM8(FETCHWA()) & (1 << b)) { \
600 WM8(DE++, RM8(HL++)); \
609 uint16_t dst = 0x800 + ((o & 7) << 8) + FETCH8(); \
614 uint16_t dst = FETCH16(); \
619 uint16_t dst = RM16(0x80 + ((o & 0x3f) << 1)); \
624 uint8_t lo = _A & 0xf, hi = _A >> 4, diff = 0; \
625 if(lo <= 9 && !(PSW & F_HC)) { \
626 diff = (hi >= 10 || (PSW & F_CY)) ? 0x60 : 0x00; \
627 } else if(lo >= 10 && !(PSW & F_HC)) { \
628 diff = (hi >= 9 || (PSW & F_CY)) ? 0x66 : 0x06; \
629 } else if(lo <= 2 && (PSW & F_HC)) { \
630 diff = (hi >= 10 || (PSW & F_CY)) ? 0x66 : 0x06; \
638 if((PSW & F_CY) || (lo <= 9 ? hi >= 10 : hi >= 9)) { \
650 uint8_t carry = PSW & F_CY; \
651 uint8_t tmp = r - 1; \
652 ZHC_SUB(tmp, r, 0); \
655 PSW = (PSW & ~F_CY) | carry; \
658 uint8_t carry = PSW & F_CY; \
659 uint16_t dst = FETCHWA(); \
660 uint8_t old = RM8(dst); \
661 uint8_t tmp = old - 1; \
662 ZHC_SUB(tmp, old, 0); \
665 PSW = (PSW & ~F_CY) | carry; \
667 #define EQA(r, n) { \
668 uint8_t tmp = r - n; \
669 ZHC_SUB(tmp, r, 0); \
673 uint8_t tmp = _A - RM8(FETCHWA()); \
674 ZHC_SUB(tmp, _A, 0); \
678 uint8_t tmp = _A - RM8(r); \
679 ZHC_SUB(tmp, _A, 0); \
683 uint8_t tmp = r - FETCH8(); \
684 ZHC_SUB(tmp, r, 0); \
687 #define EQI_IO(p) { \
688 uint8_t old = IN8(p); \
689 uint8_t tmp = old - FETCH8(); \
690 ZHC_SUB(tmp, old, 0); \
694 uint8_t old = RM8(FETCHWA()); \
695 uint8_t tmp = old - FETCH8(); \
696 ZHC_SUB(tmp, old, 0); \
701 tmp = VA; VA = altVA; altVA = tmp; \
705 tmp = BC; BC = altBC; altBC = tmp; \
706 tmp = DE; DE = altDE; altDE = tmp; \
707 tmp = HL; HL = altHL; altHL = tmp; \
709 #define GTA(r, n) { \
710 uint8_t tmp = r - n - 1; \
711 ZHC_SUB(tmp, r, 1); \
715 uint8_t tmp = _A - RM8(FETCHWA()) - 1; \
716 ZHC_SUB(tmp, _A, 1); \
720 uint8_t tmp = _A - RM8(r) - 1; \
721 ZHC_SUB(tmp, _A, 1); \
725 uint8_t tmp = r - FETCH8() - 1; \
726 ZHC_SUB(tmp, r, 1); \
729 #define GTI_IO(p) { \
730 uint8_t old = IN8(p); \
731 uint8_t tmp = old - FETCH8() - 1; \
732 ZHC_SUB(tmp, old, 1); \
736 uint8_t old = RM8(FETCHWA()); \
737 uint8_t tmp = old - FETCH8() - 1; \
738 ZHC_SUB(tmp, old, 1); \
742 uint8_t carry = PSW & F_CY; \
743 uint8_t tmp = r + 1; \
744 ZHC_ADD(tmp, r, 0); \
747 PSW = (PSW & ~F_CY) | carry; \
750 uint8_t carry = PSW & F_CY; \
751 uint16_t dst = FETCHWA(); \
752 uint8_t old = RM8(dst); \
753 uint8_t tmp = old + 1; \
754 ZHC_ADD(tmp, old, 0); \
757 PSW = (PSW & ~F_CY) | carry; \
760 uint8_t tmp = FETCH8(); \
767 #define LTA(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 LTI_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); \
800 uint16_t dst = FETCHWA(); \
801 WM8(dst, FETCH8()); \
803 #define NEA(r, n) { \
804 uint8_t tmp = r - n; \
805 ZHC_SUB(tmp, r, 0); \
809 uint8_t tmp = _A - RM8(FETCHWA()); \
810 ZHC_SUB(tmp, _A, 0); \
814 uint8_t tmp = _A - RM8(r); \
815 ZHC_SUB(tmp, _A, 0); \
819 uint8_t tmp = r - FETCH8(); \
820 ZHC_SUB(tmp, r, 0); \
823 #define NEI_IO(p) { \
824 uint8_t old = IN8(p); \
825 uint8_t tmp = old - FETCH8(); \
826 ZHC_SUB(tmp, old, 0); \
830 uint8_t old = RM8(FETCHWA()); \
831 uint8_t tmp = old - FETCH8(); \
832 ZHC_SUB(tmp, old, 0); \
835 #define OFFA(r, n) { \
843 if(_A & RM8(FETCHWA())) { \
863 #define OFFI_IO(p) { \
864 if(IN8(p) & FETCH8()) { \
871 uint8_t tmp = RM8(FETCHWA()); \
872 if(tmp & FETCH8()) { \
878 #define ONA(r, n) { \
880 PSW = (PSW & ~F_Z) | F_SK; \
886 if(_A & RM8(FETCHWA())) { \
887 PSW = (PSW & ~F_Z) | F_SK; \
894 PSW = (PSW & ~F_Z) | F_SK; \
901 PSW = (PSW & ~F_Z) | F_SK; \
906 #define ONI_IO(p) { \
907 if(IN8(p) & FETCH8()) { \
908 PSW = (PSW & ~F_Z) | F_SK; \
914 uint8_t tmp = RM8(FETCHWA()); \
915 if(tmp & FETCH8()) { \
916 PSW = (PSW & ~F_Z) | F_SK; \
921 #define ORA(r, n) { \
926 _A |= RM8(FETCHWA()); \
937 #define ORI_IO(p) { \
938 uint8_t tmp = IN8(p) | FETCH8(); \
943 uint16_t dst = FETCHWA(); \
944 uint8_t tmp = RM8(dst) | FETCH8(); \
955 uint8_t old = RM8(HL); \
956 uint8_t tmp = (old << 4) | (_A & 0x0f); \
957 _A = (_A & 0xf0) | (old >> 4); \
961 uint8_t carry = PSW & F_CY; \
962 PSW = (PSW & ~F_CY) | ((r >> 7) & F_CY); \
963 r = (r << 1) | carry; \
966 uint8_t carry = (PSW & F_CY) << 7; \
967 PSW = (PSW & ~F_CY) | (r & F_CY); \
968 r = (r >> 1) | carry; \
971 uint8_t old = RM8(HL); \
972 uint8_t tmp = (_A << 4) | (old >> 4); \
973 _A = (_A & 0xf0) | (old & 0x0f); \
976 #define SBB(r, n) { \
977 uint8_t tmp = r - n - (PSW & F_CY); \
978 ZHC_SUB(tmp, r, (PSW & F_CY)); \
982 uint8_t tmp = _A - RM8(FETCHWA()) - (PSW & F_CY); \
983 ZHC_SUB(tmp, _A, (PSW & F_CY)); \
987 uint8_t tmp = _A - RM8(r) - (PSW & F_CY); \
988 ZHC_SUB(tmp, _A, (PSW & F_CY)); \
992 uint8_t tmp = r - FETCH8() - (PSW & F_CY); \
993 ZHC_SUB(tmp, r, (PSW & F_CY)); \
996 #define SBI_IO(p) { \
997 uint8_t old = IN8(p); \
998 uint8_t tmp = old - FETCH8() - (PSW & F_CY); \
999 ZHC_SUB(tmp, old, (PSW & F_CY)); \
1022 #define SKNIT(f) { \
1029 PSW = (PSW & ~F_CY) | ((r >> 7) & F_CY); \
1033 PSW = (PSW & ~F_CY) | (r & F_CY); \
1037 tcount = (((TM0 | (TM1 << 8)) & 0xfff) + 1) * PRESCALER; \
1039 #define SUB(r, n) { \
1040 uint8_t tmp = r - n; \
1041 ZHC_SUB(tmp, r, 0); \
1044 #define SUBNB(r, n) { \
1045 uint8_t tmp = r - n; \
1046 ZHC_SUB(tmp, r, 0); \
1050 #define SUBNBW() { \
1051 uint8_t tmp = _A - RM8(FETCHWA()); \
1052 ZHC_SUB(tmp, _A, 0); \
1056 #define SUBNBX(r) { \
1057 uint8_t tmp = _A - RM8(r); \
1058 ZHC_SUB(tmp, _A, 0); \
1063 uint8_t tmp = _A - RM8(FETCHWA()); \
1064 ZHC_SUB(tmp, _A, 0); \
1068 uint8_t tmp = _A - RM8(r); \
1069 ZHC_SUB(tmp, _A, 0); \
1073 uint8_t tmp = r - FETCH8(); \
1074 ZHC_SUB(tmp, r, 0); \
1077 #define SUI_IO(p) { \
1078 uint8_t old = IN8(p); \
1079 uint8_t tmp = old - FETCH8(); \
1080 ZHC_SUB(tmp, old, 0); \
1083 #define SUINB(r) { \
1084 uint8_t tmp = r - FETCH8(); \
1085 ZHC_SUB(tmp, r, 0); \
1089 #define SUINB_IO(p) { \
1090 uint8_t old = IN8(p); \
1091 uint8_t tmp = old - FETCH8(); \
1092 ZHC_SUB(tmp, old, 0); \
1096 #define XRA(r, n) { \
1101 _A ^= RM8(FETCHWA()); \
1112 #define XRI_IO(p) { \
1113 uint8_t tmp = IN8(p) ^ FETCH8(); \
1118 void UPD7801::initialize()
1120 DEVICE::initialize();
1121 __UPD7801_MEMORY_WAIT = osd->check_feature(_T("UPD7801_MEMORY_WAIT"));
1122 __USE_DEBUGGER = osd->check_feature(_T("USE_DEBUGGER"));
1124 //#ifdef USE_DEBUGGER
1125 if((__USE_DEBUGGER) && (d_debugger != NULL)) {
1126 d_mem_stored = d_mem;
1128 d_debugger->set_context_mem(d_mem);
1129 d_debugger->set_context_io(d_io);
1134 void UPD7801::reset()
1137 // VA = BC = DE = HL = altVA = altBC = altDE = altHL = 0;
1138 PSW = IRR = IFF = SIRQ = HALT = 0;
1139 _V = MB = MC = TM0 = TM1 = SR = 0xff;
1142 PORTC = TO = SAK = HLDA = 0;
1144 scount = tcount = 0;
1149 int UPD7801::run(int clock)
1153 // run only one opcode
1155 //#ifdef USE_DEBUGGER
1156 if(__USE_DEBUGGER) {
1157 run_one_opecode_debugger();
1165 // run cpu while given clocks
1167 int first_count = count;
1170 //#ifdef USE_DEBUGGER
1171 if(__USE_DEBUGGER) {
1172 run_one_opecode_debugger();
1179 return first_count - count;
1183 void UPD7801::run_one_opecode()
1185 if(!(MC & 0x40) && (IN8(P_C) & 0x80)) {
1199 // interrupt is enabled after next opecode of ei
1205 //#ifdef USE_DEBUGGER
1206 if(__USE_DEBUGGER) {
1207 d_debugger->add_cpu_trace(PC);
1215 total_count += period;
1219 // update serial count
1222 while(scount <= 0) {
1223 if(!SIO_DISABLED && !SIO_EXTCLOCK) {
1224 write_signals(&outputs_so, (SR & 0x80) ? 0xffffffff : 0);
1227 if(++sio_count == 8) {
1233 scount = sio_count = 0;
1242 if(tcount && (tcount -= period) <= 0) {
1243 tcount += (((TM0 | (TM1 << 8)) & 0xfff) + 1) * PRESCALER;
1252 if(IFF == 1 && !SIRQ) {
1253 for(int i = 0; i < 5; i++) {
1254 uint8_t bit = irq_bits[i];
1255 if((IRR & bit) && !(MK & bit)) {
1264 PSW &= ~(F_SK | F_L0 | F_L1);
1273 //#ifdef USE_DEBUGGER
1274 void UPD7801::run_one_opecode_debugger()
1276 if(d_debugger == NULL) return;
1277 bool now_debugging = d_debugger->now_debugging;
1279 d_debugger->check_break_points(PC);
1280 if(d_debugger->now_suspended) {
1282 d_debugger->now_waiting = true;
1283 while(d_debugger->now_debugging && d_debugger->now_suspended) {
1286 d_debugger->now_waiting = false;
1288 if(d_debugger->now_debugging) {
1289 d_mem = d_io = d_debugger;
1291 now_debugging = false;
1295 if(!d_debugger->now_going) {
1296 d_debugger->now_suspended = true;
1298 d_mem = d_mem_stored;
1306 void UPD7801::write_debug_data8(uint32_t addr, uint32_t data)
1309 d_mem_stored->write_data8w(addr, data, &wait);
1312 uint32_t UPD7801::read_debug_data8(uint32_t addr)
1315 return d_mem_stored->read_data8w(addr, &wait);
1318 void UPD7801::write_debug_io8(uint32_t addr, uint32_t data)
1321 d_io_stored->write_io8w(addr, data, &wait);
1324 uint32_t UPD7801::read_debug_io8(uint32_t addr) {
1326 return d_io_stored->read_io8w(addr, &wait);
1329 bool UPD7801::write_debug_reg(const _TCHAR *reg, uint32_t data)
1331 if(_tcsicmp(reg, _T("PC")) == 0) {
1333 } else if(_tcsicmp(reg, _T("SP")) == 0) {
1335 } else if(_tcsicmp(reg, _T("VA")) == 0) {
1337 } else if(_tcsicmp(reg, _T("BC")) == 0) {
1339 } else if(_tcsicmp(reg, _T("DE")) == 0) {
1341 } else if(_tcsicmp(reg, _T("HL")) == 0) {
1343 } else if(_tcsicmp(reg, _T("V")) == 0) {
1345 } else if(_tcsicmp(reg, _T("A")) == 0) {
1347 } else if(_tcsicmp(reg, _T("B")) == 0) {
1349 } else if(_tcsicmp(reg, _T("C")) == 0) {
1351 } else if(_tcsicmp(reg, _T("D")) == 0) {
1353 } else if(_tcsicmp(reg, _T("E")) == 0) {
1355 } else if(_tcsicmp(reg, _T("H")) == 0) {
1357 } else if(_tcsicmp(reg, _T("L")) == 0) {
1359 } else if(_tcsicmp(reg, _T("VA'")) == 0) {
1361 } else if(_tcsicmp(reg, _T("BC'")) == 0) {
1363 } else if(_tcsicmp(reg, _T("DE'")) == 0) {
1365 } else if(_tcsicmp(reg, _T("HL'")) == 0) {
1367 } else if(_tcsicmp(reg, _T("V'")) == 0) {
1369 } else if(_tcsicmp(reg, _T("A'")) == 0) {
1371 } else if(_tcsicmp(reg, _T("B'")) == 0) {
1373 } else if(_tcsicmp(reg, _T("C'")) == 0) {
1375 } else if(_tcsicmp(reg, _T("D'")) == 0) {
1377 } else if(_tcsicmp(reg, _T("E'")) == 0) {
1379 } else if(_tcsicmp(reg, _T("H'")) == 0) {
1381 } else if(_tcsicmp(reg, _T("L'")) == 0) {
1389 void UPD7801::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
1392 VA = 0000 BC = 0000 DE = 0000 HL = 0000 PSW= 00 [Z SK HC L1 L0 CY]
1393 VA'= 0000 BC'= 0000 DE'= 0000 HL'= 0000 SP = 0000 PC = 0000
1394 (BC)= 0000 (DE)=0000 (HL)= 0000 (SP)= 0000 <DI>
1395 Clocks = 0 (0) Since Scanline = 0/0 (0/0)
1398 my_stprintf_s(buffer, buffer_len,
1399 _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>\nClocks = %llu (%llu) Since Scanline = %d/%d (%d/%d)"),
1400 VA, BC, DE, HL, PSW,
1401 (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("--"),
1402 altVA, altBC, altDE, altHL, SP, PC,
1403 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),
1404 IFF ? _T("EI") : _T("DI"),
1405 total_count, total_count - prev_total_count,
1406 get_passed_clock_since_vline(), get_cur_vline_clocks(), get_cur_vline(), get_lines_per_frame());
1407 prev_total_count = total_count;
1412 uint8_t upd7801_dasm_ops[4];
1413 int upd7801_dasm_ptr;
1417 return upd7801_dasm_ops[upd7801_dasm_ptr++];
1422 uint16_t l = getb();
1423 return l | (getb() << 8);
1431 int UPD7801::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
1433 if(d_debugger == NULL) return 0;
1434 for(int i = 0; i < 4; i++) {
1436 upd7801_dasm_ops[i] = d_mem_stored->read_data8w(pc + i, &wait);
1438 upd7801_dasm_ptr = 0;
1443 switch(b = getb()) {
1444 case 0x00: my_stprintf_s(buffer, buffer_len, _T("nop")); break;
1445 case 0x01: my_stprintf_s(buffer, buffer_len, _T("hlt")); break;
1446 case 0x02: my_stprintf_s(buffer, buffer_len, _T("inx sp")); break;
1447 case 0x03: my_stprintf_s(buffer, buffer_len, _T("dcx sp")); break;
1448 case 0x04: my_stprintf_s(buffer, buffer_len, _T("lxi sp,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
1449 case 0x05: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("aniw v.%02xh,%02xh"), wa, getb()); break;
1451 case 0x07: my_stprintf_s(buffer, buffer_len, _T("ani a,%02xh"), getb()); break;
1452 case 0x08: my_stprintf_s(buffer, buffer_len, _T("ret")); break;
1453 case 0x09: my_stprintf_s(buffer, buffer_len, _T("sio")); break;
1454 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("mov a,b")); break;
1455 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("mov a,c")); break;
1456 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("mov a,d")); break;
1457 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("mov a,e")); break;
1458 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("mov a,h")); break;
1459 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("mov a,l")); break;
1461 case 0x10: my_stprintf_s(buffer, buffer_len, _T("ex")); break;
1462 case 0x11: my_stprintf_s(buffer, buffer_len, _T("exx")); break;
1463 case 0x12: my_stprintf_s(buffer, buffer_len, _T("inx b")); break;
1464 case 0x13: my_stprintf_s(buffer, buffer_len, _T("dcx b")); break;
1465 case 0x14: my_stprintf_s(buffer, buffer_len, _T("lxi b,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
1466 case 0x15: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("oriw v.%02xh,%02xh"), wa, getb()); break;
1467 case 0x16: my_stprintf_s(buffer, buffer_len, _T("xri a,%02xh"), getb()); break;
1468 case 0x17: my_stprintf_s(buffer, buffer_len, _T("ori a,%02xh"), getb()); break;
1469 case 0x18: my_stprintf_s(buffer, buffer_len, _T("rets")); break;
1470 case 0x19: my_stprintf_s(buffer, buffer_len, _T("stm")); break;
1471 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("mov b,a")); break;
1472 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("mov c,a")); break;
1473 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("mov d,a")); break;
1474 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("mov e,a")); break;
1475 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("mov h,a")); break;
1476 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("mov l,a")); break;
1478 case 0x20: my_stprintf_s(buffer, buffer_len, _T("inrw v.%02xh"), getwa()); break;
1479 case 0x21: my_stprintf_s(buffer, buffer_len, _T("table")); break;
1480 case 0x22: my_stprintf_s(buffer, buffer_len, _T("inx d")); break;
1481 case 0x23: my_stprintf_s(buffer, buffer_len, _T("dcx d")); break;
1482 case 0x24: my_stprintf_s(buffer, buffer_len, _T("lxi d,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
1483 case 0x25: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("gtiw v.%02xh,%02xh"), wa, getb()); break;
1484 case 0x26: my_stprintf_s(buffer, buffer_len, _T("adinc a,%02xh"), getb()); break;
1485 case 0x27: my_stprintf_s(buffer, buffer_len, _T("gti a,%02xh"), getb()); break;
1486 case 0x28: my_stprintf_s(buffer, buffer_len, _T("ldaw v.%02xh"), getwa()); break;
1487 case 0x29: my_stprintf_s(buffer, buffer_len, _T("ldax b")); break;
1488 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("ldax d")); break;
1489 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("ldax h")); break;
1490 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("ldax d+")); break;
1491 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("ldax h+")); break;
1492 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("ldax d-")); break;
1493 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("ldax h-")); break;
1495 case 0x30: my_stprintf_s(buffer, buffer_len, _T("dcrw v.%02xh"), getwa()); break;
1496 case 0x31: my_stprintf_s(buffer, buffer_len, _T("block")); break;
1497 case 0x32: my_stprintf_s(buffer, buffer_len, _T("inx h")); break;
1498 case 0x33: my_stprintf_s(buffer, buffer_len, _T("dcx h")); break;
1499 case 0x34: my_stprintf_s(buffer, buffer_len, _T("lxi h,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
1500 case 0x35: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("ltiw v.%02xh,%02xh"), wa, getb()); break;
1501 case 0x36: my_stprintf_s(buffer, buffer_len, _T("suinb a,%02xh"), getb()); break;
1502 case 0x37: my_stprintf_s(buffer, buffer_len, _T("lti a,%02xh"), getb()); break;
1503 case 0x38: my_stprintf_s(buffer, buffer_len, _T("staw v.%02xh"), getwa()); break;
1504 case 0x39: my_stprintf_s(buffer, buffer_len, _T("stax b")); break;
1505 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("stax d")); break;
1506 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("stax h")); break;
1507 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("stax d+")); break;
1508 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("stax h+")); break;
1509 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("stax d-")); break;
1510 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("stax h-")); break;
1513 case 0x41: my_stprintf_s(buffer, buffer_len, _T("inr a")); break;
1514 case 0x42: my_stprintf_s(buffer, buffer_len, _T("inr b")); break;
1515 case 0x43: my_stprintf_s(buffer, buffer_len, _T("inr c")); break;
1516 case 0x44: my_stprintf_s(buffer, buffer_len, _T("call %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
1517 case 0x45: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("oniw v.%02xh,%02xh"), wa, getb()); break;
1518 case 0x46: my_stprintf_s(buffer, buffer_len, _T("adi a,%02xh"), getb()); break;
1519 case 0x47: my_stprintf_s(buffer, buffer_len, _T("oni a,%02xh"), getb()); break;
1521 switch(b = getb()) {
1522 case 0x00: my_stprintf_s(buffer, buffer_len, _T("skit intf0")); break;
1523 case 0x01: my_stprintf_s(buffer, buffer_len, _T("skit intft")); break;
1524 case 0x02: my_stprintf_s(buffer, buffer_len, _T("skit intf1")); break;
1525 case 0x03: my_stprintf_s(buffer, buffer_len, _T("skit intf2")); break;
1526 case 0x04: my_stprintf_s(buffer, buffer_len, _T("skit intfs")); break;
1527 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("sk cy")); break;
1528 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("sk z")); break;
1529 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("push v")); break;
1530 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("pop v")); break;
1531 case 0x10: my_stprintf_s(buffer, buffer_len, _T("sknit f0")); break;
1532 case 0x11: my_stprintf_s(buffer, buffer_len, _T("sknit ft")); break;
1533 case 0x12: my_stprintf_s(buffer, buffer_len, _T("sknit f1")); break;
1534 case 0x13: my_stprintf_s(buffer, buffer_len, _T("sknit f2")); break;
1535 case 0x14: my_stprintf_s(buffer, buffer_len, _T("sknit fs")); break;
1536 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("skn cy")); break;
1537 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("skn z")); break;
1538 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("push b")); break;
1539 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("pop b")); break;
1540 case 0x20: my_stprintf_s(buffer, buffer_len, _T("ei")); break;
1541 case 0x24: my_stprintf_s(buffer, buffer_len, _T("di")); break;
1542 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("clc")); break;
1543 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("stc")); break;
1544 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("pen")); break;
1545 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("pex")); break;
1546 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("push d")); break;
1547 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("pop d")); break;
1548 case 0x30: my_stprintf_s(buffer, buffer_len, _T("rll a")); break;
1549 case 0x31: my_stprintf_s(buffer, buffer_len, _T("rlr a")); break;
1550 case 0x32: my_stprintf_s(buffer, buffer_len, _T("rll c")); break;
1551 case 0x33: my_stprintf_s(buffer, buffer_len, _T("rlr c")); break;
1552 case 0x34: my_stprintf_s(buffer, buffer_len, _T("sll a")); break;
1553 case 0x35: my_stprintf_s(buffer, buffer_len, _T("slr a")); break;
1554 case 0x36: my_stprintf_s(buffer, buffer_len, _T("sll c")); break;
1555 case 0x37: my_stprintf_s(buffer, buffer_len, _T("sll c")); break;
1556 case 0x38: my_stprintf_s(buffer, buffer_len, _T("rld")); break;
1557 case 0x39: my_stprintf_s(buffer, buffer_len, _T("rrd")); break;
1558 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("per")); break;
1559 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("push h")); break;
1560 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("pop h")); break;
1561 default: my_stprintf_s(buffer, buffer_len, _T("db 48h,%02xh"), b);
1564 case 0x49: my_stprintf_s(buffer, buffer_len, _T("mvix b,%02xh"), getb()); break;
1565 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("mvix d,%02xh"), getb()); break;
1566 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("mvix h,%02xh"), getb()); break;
1568 switch(b = getb()) {
1569 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("mov a,pa")); break;
1570 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("mov a,pb")); break;
1571 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("mov a,pc")); break;
1572 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("mov a,mk")); break;
1573 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("mov a,mb")); break; //
\96¢
\92è
\8b`?
1574 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("mov a,mc")); break; //
\96¢
\92è
\8b`?
1575 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("mov a,tm0")); break; //
\96¢
\92è
\8b`?
1576 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("mov a,tm1")); break; //
\96¢
\92è
\8b`?
1577 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("mov a,s")); break;
1580 my_stprintf_s(buffer, buffer_len, _T("in %02xh"), getb()); break;
1582 my_stprintf_s(buffer, buffer_len, _T("db 4ch,%02xh"), b);
1586 switch(b = getb()) {
1587 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("mov pa,a")); break;
1588 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("mov pb,a")); break;
1589 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("mov pc,a")); break;
1590 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("mov mk,a")); break;
1591 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("mov mb,a")); break;
1592 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("mov mc,a")); break;
1593 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("mov tm0,a")); break;
1594 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("mov tm1,a")); break;
1595 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("mov s,a")); break;
1598 my_stprintf_s(buffer, buffer_len, _T("out %02xh"), getb()); break;
1600 my_stprintf_s(buffer, buffer_len, _T("db 4dh,%02xh"), b);
1603 case 0x4e: b = getb(); my_stprintf_s(buffer, buffer_len, _T("jre %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), pc + upd7801_dasm_ptr + b)); break;
1604 case 0x4f: b = getb(); my_stprintf_s(buffer, buffer_len, _T("jre %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), (pc + upd7801_dasm_ptr + b - 256) & 0xffff)); break;
1607 case 0x51: my_stprintf_s(buffer, buffer_len, _T("dcr a")); break;
1608 case 0x52: my_stprintf_s(buffer, buffer_len, _T("dcr b")); break;
1609 case 0x53: my_stprintf_s(buffer, buffer_len, _T("dcr c")); break;
1610 case 0x54: my_stprintf_s(buffer, buffer_len, _T("jmp %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
1611 case 0x55: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("offiw v.%02xh,%02xh"), wa, getb()); break;
1612 case 0x56: my_stprintf_s(buffer, buffer_len, _T("aci a,%02xh"), getb()); break;
1613 case 0x57: my_stprintf_s(buffer, buffer_len, _T("offi a,%02xh"), getb()); break;
1614 case 0x58: my_stprintf_s(buffer, buffer_len, _T("bit 0,v.%02xh"), getwa()); break;
1615 case 0x59: my_stprintf_s(buffer, buffer_len, _T("bit 1,v.%02xh"), getwa()); break;
1616 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("bit 2,v.%02xh"), getwa()); break;
1617 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("bit 3,v.%02xh"), getwa()); break;
1618 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("bit 4,v.%02xh"), getwa()); break;
1619 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("bit 5,v.%02xh"), getwa()); break;
1620 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("bit 6,v.%02xh"), getwa()); break;
1621 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("bit 7,v.%02xh"), getwa()); break;
1624 switch(b = getb()) {
1625 case 0x08: my_stprintf_s(buffer, buffer_len, _T("ana v,a")); break;
1626 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ana a,a")); break;
1627 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("ana b,a")); break;
1628 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("ana c,a")); break;
1629 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("ana d,a")); break;
1630 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("ana e,a")); break;
1631 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("ana h,a")); break;
1632 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("ana l,a")); break;
1633 case 0x10: my_stprintf_s(buffer, buffer_len, _T("xra v,a")); break;
1634 case 0x11: my_stprintf_s(buffer, buffer_len, _T("xra a,a")); break;
1635 case 0x12: my_stprintf_s(buffer, buffer_len, _T("xra b,a")); break;
1636 case 0x13: my_stprintf_s(buffer, buffer_len, _T("xra c,a")); break;
1637 case 0x14: my_stprintf_s(buffer, buffer_len, _T("xra d,a")); break;
1638 case 0x15: my_stprintf_s(buffer, buffer_len, _T("xra e,a")); break;
1639 case 0x16: my_stprintf_s(buffer, buffer_len, _T("xra h,a")); break;
1640 case 0x17: my_stprintf_s(buffer, buffer_len, _T("xra l,a")); break;
1641 case 0x18: my_stprintf_s(buffer, buffer_len, _T("ora v,a")); break;
1642 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ora a,a")); break;
1643 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("ora b,a")); break;
1644 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("ora c,a")); break;
1645 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("ora d,a")); break;
1646 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("ora e,a")); break;
1647 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("ora h,a")); break;
1648 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("ora l,a")); break;
1649 case 0x20: my_stprintf_s(buffer, buffer_len, _T("addnc v,a")); break;
1650 case 0x21: my_stprintf_s(buffer, buffer_len, _T("addnc a,a")); break;
1651 case 0x22: my_stprintf_s(buffer, buffer_len, _T("addnc b,a")); break;
1652 case 0x23: my_stprintf_s(buffer, buffer_len, _T("addnc c,a")); break;
1653 case 0x24: my_stprintf_s(buffer, buffer_len, _T("addnc d,a")); break;
1654 case 0x25: my_stprintf_s(buffer, buffer_len, _T("addnc e,a")); break;
1655 case 0x26: my_stprintf_s(buffer, buffer_len, _T("addnc h,a")); break;
1656 case 0x27: my_stprintf_s(buffer, buffer_len, _T("addnc l,a")); break;
1657 case 0x28: my_stprintf_s(buffer, buffer_len, _T("gta v,a")); break;
1658 case 0x29: my_stprintf_s(buffer, buffer_len, _T("gta a,a")); break;
1659 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("gta b,a")); break;
1660 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("gta c,a")); break;
1661 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("gta d,a")); break;
1662 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("gta e,a")); break;
1663 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("gta h,a")); break;
1664 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("gta l,a")); break;
1665 case 0x30: my_stprintf_s(buffer, buffer_len, _T("subnb v,a")); break;
1666 case 0x31: my_stprintf_s(buffer, buffer_len, _T("subnb a,a")); break;
1667 case 0x32: my_stprintf_s(buffer, buffer_len, _T("subnb b,a")); break;
1668 case 0x33: my_stprintf_s(buffer, buffer_len, _T("subnb c,a")); break;
1669 case 0x34: my_stprintf_s(buffer, buffer_len, _T("subnb d,a")); break;
1670 case 0x35: my_stprintf_s(buffer, buffer_len, _T("subnb e,a")); break;
1671 case 0x36: my_stprintf_s(buffer, buffer_len, _T("subnb h,a")); break;
1672 case 0x37: my_stprintf_s(buffer, buffer_len, _T("subnb l,a")); break;
1673 case 0x38: my_stprintf_s(buffer, buffer_len, _T("lta v,a")); break;
1674 case 0x39: my_stprintf_s(buffer, buffer_len, _T("lta a,a")); break;
1675 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("lta b,a")); break;
1676 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("lta c,a")); break;
1677 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("lta d,a")); break;
1678 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("lta e,a")); break;
1679 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("lta h,a")); break;
1680 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("lta l,a")); break;
1681 case 0x40: my_stprintf_s(buffer, buffer_len, _T("add v,a")); break;
1682 case 0x41: my_stprintf_s(buffer, buffer_len, _T("add a,a")); break;
1683 case 0x42: my_stprintf_s(buffer, buffer_len, _T("add b,a")); break;
1684 case 0x43: my_stprintf_s(buffer, buffer_len, _T("add c,a")); break;
1685 case 0x44: my_stprintf_s(buffer, buffer_len, _T("add d,a")); break;
1686 case 0x45: my_stprintf_s(buffer, buffer_len, _T("add e,a")); break;
1687 case 0x46: my_stprintf_s(buffer, buffer_len, _T("add h,a")); break;
1688 case 0x47: my_stprintf_s(buffer, buffer_len, _T("add l,a")); break;
1689 case 0x50: my_stprintf_s(buffer, buffer_len, _T("adc v,a")); break;
1690 case 0x51: my_stprintf_s(buffer, buffer_len, _T("adc a,a")); break;
1691 case 0x52: my_stprintf_s(buffer, buffer_len, _T("adc b,a")); break;
1692 case 0x53: my_stprintf_s(buffer, buffer_len, _T("adc c,a")); break;
1693 case 0x54: my_stprintf_s(buffer, buffer_len, _T("adc d,a")); break;
1694 case 0x55: my_stprintf_s(buffer, buffer_len, _T("adc e,a")); break;
1695 case 0x56: my_stprintf_s(buffer, buffer_len, _T("adc h,a")); break;
1696 case 0x57: my_stprintf_s(buffer, buffer_len, _T("adc l,a")); break;
1697 case 0x60: my_stprintf_s(buffer, buffer_len, _T("sub v,a")); break;
1698 case 0x61: my_stprintf_s(buffer, buffer_len, _T("sub a,a")); break;
1699 case 0x62: my_stprintf_s(buffer, buffer_len, _T("sub b,a")); break;
1700 case 0x63: my_stprintf_s(buffer, buffer_len, _T("sub c,a")); break;
1701 case 0x64: my_stprintf_s(buffer, buffer_len, _T("sub d,a")); break;
1702 case 0x65: my_stprintf_s(buffer, buffer_len, _T("sub e,a")); break;
1703 case 0x66: my_stprintf_s(buffer, buffer_len, _T("sub h,a")); break;
1704 case 0x67: my_stprintf_s(buffer, buffer_len, _T("sub l,a")); break;
1705 case 0x68: my_stprintf_s(buffer, buffer_len, _T("nea v,a")); break;
1706 case 0x69: my_stprintf_s(buffer, buffer_len, _T("nea a,a")); break;
1707 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("nea b,a")); break;
1708 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("nea c,a")); break;
1709 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("nea d,a")); break;
1710 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("nea e,a")); break;
1711 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("nea h,a")); break;
1712 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("nea l,a")); break;
1713 case 0x70: my_stprintf_s(buffer, buffer_len, _T("sbb v,a")); break;
1714 case 0x71: my_stprintf_s(buffer, buffer_len, _T("sbb a,a")); break;
1715 case 0x72: my_stprintf_s(buffer, buffer_len, _T("sbb b,a")); break;
1716 case 0x73: my_stprintf_s(buffer, buffer_len, _T("sbb c,a")); break;
1717 case 0x74: my_stprintf_s(buffer, buffer_len, _T("sbb d,a")); break;
1718 case 0x75: my_stprintf_s(buffer, buffer_len, _T("sbb e,a")); break;
1719 case 0x76: my_stprintf_s(buffer, buffer_len, _T("sbb h,a")); break;
1720 case 0x77: my_stprintf_s(buffer, buffer_len, _T("sbb l,a")); break;
1721 case 0x78: my_stprintf_s(buffer, buffer_len, _T("eqa v,a")); break;
1722 case 0x79: my_stprintf_s(buffer, buffer_len, _T("eqa a,a")); break;
1723 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("eqa b,a")); break;
1724 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("eqa c,a")); break;
1725 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("eqa d,a")); break;
1726 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("eqa e,a")); break;
1727 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("eqa h,a")); break;
1728 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("eqa l,a")); break;
1729 case 0x88: my_stprintf_s(buffer, buffer_len, _T("ana a,v")); break;
1730 case 0x89: my_stprintf_s(buffer, buffer_len, _T("ana a,a")); break;
1731 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("ana a,b")); break;
1732 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("ana a,c")); break;
1733 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("ana a,d")); break;
1734 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("ana a,e")); break;
1735 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("ana a,h")); break;
1736 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("ana a,l")); break;
1737 case 0x90: my_stprintf_s(buffer, buffer_len, _T("xra a,v")); break;
1738 case 0x91: my_stprintf_s(buffer, buffer_len, _T("xra a,a")); break;
1739 case 0x92: my_stprintf_s(buffer, buffer_len, _T("xra a,b")); break;
1740 case 0x93: my_stprintf_s(buffer, buffer_len, _T("xra a,c")); break;
1741 case 0x94: my_stprintf_s(buffer, buffer_len, _T("xra a,d")); break;
1742 case 0x95: my_stprintf_s(buffer, buffer_len, _T("xra a,e")); break;
1743 case 0x96: my_stprintf_s(buffer, buffer_len, _T("xra a,h")); break;
1744 case 0x97: my_stprintf_s(buffer, buffer_len, _T("xra a,l")); break;
1745 case 0x98: my_stprintf_s(buffer, buffer_len, _T("ora a,v")); break;
1746 case 0x99: my_stprintf_s(buffer, buffer_len, _T("ora a,a")); break;
1747 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("ora a,b")); break;
1748 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("ora a,c")); break;
1749 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("ora a,d")); break;
1750 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("ora a,e")); break;
1751 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("ora a,h")); break;
1752 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("ora a,l")); break;
1753 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("addnc a,v")); break;
1754 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("addnc a,a")); break;
1755 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("addnc a,b")); break;
1756 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("addnc a,c")); break;
1757 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("addnc a,d")); break;
1758 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("addnc a,e")); break;
1759 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("addnc a,h")); break;
1760 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("addnc a,l")); break;
1761 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("gta a,v")); break;
1762 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gta a,a")); break;
1763 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gta a,b")); break;
1764 case 0xab: my_stprintf_s(buffer, buffer_len, _T("gta a,c")); break;
1765 case 0xac: my_stprintf_s(buffer, buffer_len, _T("gta a,d")); break;
1766 case 0xad: my_stprintf_s(buffer, buffer_len, _T("gta a,e")); break;
1767 case 0xae: my_stprintf_s(buffer, buffer_len, _T("gta a,h")); break;
1768 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("gta a,l")); break;
1769 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("subnb a,v")); break;
1770 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("subnb a,a")); break;
1771 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("subnb a,b")); break;
1772 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("subnb a,c")); break;
1773 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("subnb a,d")); break;
1774 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("subnb a,e")); break;
1775 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("subnb a,h")); break;
1776 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("subnb a,l")); break;
1777 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("lta a,v")); break;
1778 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("lta a,a")); break;
1779 case 0xba: my_stprintf_s(buffer, buffer_len, _T("lta a,b")); break;
1780 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("lta a,c")); break;
1781 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("lta a,d")); break;
1782 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("lta a,e")); break;
1783 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("lta a,h")); break;
1784 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("lta a,l")); break;
1785 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("add a,v")); break;
1786 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("add a,a")); break;
1787 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("add a,b")); break;
1788 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("add a,c")); break;
1789 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("add a,d")); break;
1790 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("add a,e")); break;
1791 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("add a,h")); break;
1792 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("add a,l")); break;
1793 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("ona a,v")); break;
1794 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("ona a,a")); break;
1795 case 0xca: my_stprintf_s(buffer, buffer_len, _T("ona a,b")); break;
1796 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("ona a,c")); break;
1797 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("ona a,d")); break;
1798 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("ona a,e")); break;
1799 case 0xce: my_stprintf_s(buffer, buffer_len, _T("ona a,h")); break;
1800 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("ona a,l")); break;
1801 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("adc a,v")); break;
1802 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("adc a,a")); break;
1803 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("adc a,b")); break;
1804 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("adc a,c")); break;
1805 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("adc a,d")); break;
1806 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("adc a,e")); break;
1807 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("adc a,h")); break;
1808 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("adc a,l")); break;
1809 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("offa a,v")); break;
1810 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offa a,a")); break;
1811 case 0xda: my_stprintf_s(buffer, buffer_len, _T("offa a,b")); break;
1812 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offa a,c")); break;
1813 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("offa a,d")); break;
1814 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("offa a,e")); break;
1815 case 0xde: my_stprintf_s(buffer, buffer_len, _T("offa a,h")); break;
1816 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("offa a,l")); break;
1817 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("sub a,v")); break;
1818 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("sub a,a")); break;
1819 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("sub a,b")); break;
1820 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("sub a,c")); break;
1821 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("sub a,d")); break;
1822 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("sub a,e")); break;
1823 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("sub a,h")); break;
1824 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("sub a,l")); break;
1825 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("nea a,v")); break;
1826 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("nea a,a")); break;
1827 case 0xea: my_stprintf_s(buffer, buffer_len, _T("nea a,b")); break;
1828 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("nea a,c")); break;
1829 case 0xec: my_stprintf_s(buffer, buffer_len, _T("nea a,d")); break;
1830 case 0xed: my_stprintf_s(buffer, buffer_len, _T("nea a,e")); break;
1831 case 0xee: my_stprintf_s(buffer, buffer_len, _T("nea a,h")); break;
1832 case 0xef: my_stprintf_s(buffer, buffer_len, _T("nea a,l")); break;
1833 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("sbb a,v")); break;
1834 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbb a,a")); break;
1835 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbb a,b")); break;
1836 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbb a,c")); break;
1837 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("sbb a,d")); break;
1838 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("sbb a,e")); break;
1839 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("sbb a,h")); break;
1840 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("sbb a,l")); break;
1841 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("eqa a,v")); break;
1842 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqa a,a")); break;
1843 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqa a,b")); break;
1844 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqa a,c")); break;
1845 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("eqa a,d")); break;
1846 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("eqa a,e")); break;
1847 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("eqa a,h")); break;
1848 case 0xff: my_stprintf_s(buffer, buffer_len, _T("eqa a,l")); break;
1849 default: my_stprintf_s(buffer, buffer_len, _T("db 60h,%02xh"), b);
1852 case 0x61: my_stprintf_s(buffer, buffer_len, _T("daa")); break;
1853 case 0x62: my_stprintf_s(buffer, buffer_len, _T("reti")); break;
1854 case 0x63: my_stprintf_s(buffer, buffer_len, _T("calb")); break;
1856 switch(b = getb()) {
1857 case 0x08: my_stprintf_s(buffer, buffer_len, _T("ani v,%02xh"), getb()); break;
1858 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ani a,%02xh"), getb()); break;
1859 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("ani b,%02xh"), getb()); break;
1860 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("ani c,%02xh"), getb()); break;
1861 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("ani d,%02xh"), getb()); break;
1862 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("ani e,%02xh"), getb()); break;
1863 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("ani h,%02xh"), getb()); break;
1864 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("ani l,%02xh"), getb()); break;
1865 case 0x10: my_stprintf_s(buffer, buffer_len, _T("xri v,%02xh"), getb()); break;
1866 case 0x11: my_stprintf_s(buffer, buffer_len, _T("xri a,%02xh"), getb()); break;
1867 case 0x12: my_stprintf_s(buffer, buffer_len, _T("xri b,%02xh"), getb()); break;
1868 case 0x13: my_stprintf_s(buffer, buffer_len, _T("xri c,%02xh"), getb()); break;
1869 case 0x14: my_stprintf_s(buffer, buffer_len, _T("xri d,%02xh"), getb()); break;
1870 case 0x15: my_stprintf_s(buffer, buffer_len, _T("xri e,%02xh"), getb()); break;
1871 case 0x16: my_stprintf_s(buffer, buffer_len, _T("xri h,%02xh"), getb()); break;
1872 case 0x17: my_stprintf_s(buffer, buffer_len, _T("xri l,%02xh"), getb()); break;
1873 case 0x18: my_stprintf_s(buffer, buffer_len, _T("ori v,%02xh"), getb()); break;
1874 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ori a,%02xh"), getb()); break;
1875 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("ori b,%02xh"), getb()); break;
1876 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("ori c,%02xh"), getb()); break;
1877 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("ori d,%02xh"), getb()); break;
1878 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("ori e,%02xh"), getb()); break;
1879 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("ori h,%02xh"), getb()); break;
1880 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("ori l,%02xh"), getb()); break;
1881 case 0x20: my_stprintf_s(buffer, buffer_len, _T("adinc v,%02xh"), getb()); break;
1882 case 0x21: my_stprintf_s(buffer, buffer_len, _T("adinc a,%02xh"), getb()); break;
1883 case 0x22: my_stprintf_s(buffer, buffer_len, _T("adinc b,%02xh"), getb()); break;
1884 case 0x23: my_stprintf_s(buffer, buffer_len, _T("adinc c,%02xh"), getb()); break;
1885 case 0x24: my_stprintf_s(buffer, buffer_len, _T("adinc d,%02xh"), getb()); break;
1886 case 0x25: my_stprintf_s(buffer, buffer_len, _T("adinc e,%02xh"), getb()); break;
1887 case 0x26: my_stprintf_s(buffer, buffer_len, _T("adinc h,%02xh"), getb()); break;
1888 case 0x27: my_stprintf_s(buffer, buffer_len, _T("adinc l,%02xh"), getb()); break;
1889 case 0x28: my_stprintf_s(buffer, buffer_len, _T("gti v,%02xh"), getb()); break;
1890 case 0x29: my_stprintf_s(buffer, buffer_len, _T("gti a,%02xh"), getb()); break;
1891 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("gti b,%02xh"), getb()); break;
1892 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("gti c,%02xh"), getb()); break;
1893 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("gti d,%02xh"), getb()); break;
1894 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("gti e,%02xh"), getb()); break;
1895 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("gti h,%02xh"), getb()); break;
1896 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("gti l,%02xh"), getb()); break;
1897 case 0x30: my_stprintf_s(buffer, buffer_len, _T("suinb v,%02xh"), getb()); break;
1898 case 0x31: my_stprintf_s(buffer, buffer_len, _T("suinb a,%02xh"), getb()); break;
1899 case 0x32: my_stprintf_s(buffer, buffer_len, _T("suinb b,%02xh"), getb()); break;
1900 case 0x33: my_stprintf_s(buffer, buffer_len, _T("suinb c,%02xh"), getb()); break;
1901 case 0x34: my_stprintf_s(buffer, buffer_len, _T("suinb d,%02xh"), getb()); break;
1902 case 0x35: my_stprintf_s(buffer, buffer_len, _T("suinb e,%02xh"), getb()); break;
1903 case 0x36: my_stprintf_s(buffer, buffer_len, _T("suinb h,%02xh"), getb()); break;
1904 case 0x37: my_stprintf_s(buffer, buffer_len, _T("suinb l,%02xh"), getb()); break;
1905 case 0x38: my_stprintf_s(buffer, buffer_len, _T("lti v,%02xh"), getb()); break;
1906 case 0x39: my_stprintf_s(buffer, buffer_len, _T("lti a,%02xh"), getb()); break;
1907 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("lti b,%02xh"), getb()); break;
1908 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("lti c,%02xh"), getb()); break;
1909 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("lti d,%02xh"), getb()); break;
1910 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("lti e,%02xh"), getb()); break;
1911 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("lti h,%02xh"), getb()); break;
1912 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("lti l,%02xh"), getb()); break;
1913 case 0x40: my_stprintf_s(buffer, buffer_len, _T("adi v,%02xh"), getb()); break;
1914 case 0x41: my_stprintf_s(buffer, buffer_len, _T("adi a,%02xh"), getb()); break;
1915 case 0x42: my_stprintf_s(buffer, buffer_len, _T("adi b,%02xh"), getb()); break;
1916 case 0x43: my_stprintf_s(buffer, buffer_len, _T("adi c,%02xh"), getb()); break;
1917 case 0x44: my_stprintf_s(buffer, buffer_len, _T("adi d,%02xh"), getb()); break;
1918 case 0x45: my_stprintf_s(buffer, buffer_len, _T("adi e,%02xh"), getb()); break;
1919 case 0x46: my_stprintf_s(buffer, buffer_len, _T("adi h,%02xh"), getb()); break;
1920 case 0x47: my_stprintf_s(buffer, buffer_len, _T("adi l,%02xh"), getb()); break;
1921 case 0x48: my_stprintf_s(buffer, buffer_len, _T("oni v,%02xh"), getb()); break;
1922 case 0x49: my_stprintf_s(buffer, buffer_len, _T("oni a,%02xh"), getb()); break;
1923 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("oni b,%02xh"), getb()); break;
1924 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("oni c,%02xh"), getb()); break;
1925 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("oni d,%02xh"), getb()); break;
1926 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("oni e,%02xh"), getb()); break;
1927 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("oni h,%02xh"), getb()); break;
1928 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("oni l,%02xh"), getb()); break;
1929 case 0x50: my_stprintf_s(buffer, buffer_len, _T("aci v,%02xh"), getb()); break;
1930 case 0x51: my_stprintf_s(buffer, buffer_len, _T("aci a,%02xh"), getb()); break;
1931 case 0x52: my_stprintf_s(buffer, buffer_len, _T("aci b,%02xh"), getb()); break;
1932 case 0x53: my_stprintf_s(buffer, buffer_len, _T("aci c,%02xh"), getb()); break;
1933 case 0x54: my_stprintf_s(buffer, buffer_len, _T("aci d,%02xh"), getb()); break;
1934 case 0x55: my_stprintf_s(buffer, buffer_len, _T("aci e,%02xh"), getb()); break;
1935 case 0x56: my_stprintf_s(buffer, buffer_len, _T("aci h,%02xh"), getb()); break;
1936 case 0x57: my_stprintf_s(buffer, buffer_len, _T("aci l,%02xh"), getb()); break;
1937 case 0x58: my_stprintf_s(buffer, buffer_len, _T("offi v,%02xh"), getb()); break;
1938 case 0x59: my_stprintf_s(buffer, buffer_len, _T("offi a,%02xh"), getb()); break;
1939 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("offi b,%02xh"), getb()); break;
1940 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("offi c,%02xh"), getb()); break;
1941 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("offi d,%02xh"), getb()); break;
1942 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("offi e,%02xh"), getb()); break;
1943 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("offi h,%02xh"), getb()); break;
1944 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("offi l,%02xh"), getb()); break;
1945 case 0x60: my_stprintf_s(buffer, buffer_len, _T("sui v,%02xh"), getb()); break;
1946 case 0x61: my_stprintf_s(buffer, buffer_len, _T("sui a,%02xh"), getb()); break;
1947 case 0x62: my_stprintf_s(buffer, buffer_len, _T("sui b,%02xh"), getb()); break;
1948 case 0x63: my_stprintf_s(buffer, buffer_len, _T("sui c,%02xh"), getb()); break;
1949 case 0x64: my_stprintf_s(buffer, buffer_len, _T("sui d,%02xh"), getb()); break;
1950 case 0x65: my_stprintf_s(buffer, buffer_len, _T("sui e,%02xh"), getb()); break;
1951 case 0x66: my_stprintf_s(buffer, buffer_len, _T("sui h,%02xh"), getb()); break;
1952 case 0x67: my_stprintf_s(buffer, buffer_len, _T("sui l,%02xh"), getb()); break;
1953 case 0x68: my_stprintf_s(buffer, buffer_len, _T("nei v,%02xh"), getb()); break;
1954 case 0x69: my_stprintf_s(buffer, buffer_len, _T("nei a,%02xh"), getb()); break;
1955 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("nei b,%02xh"), getb()); break;
1956 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("nei c,%02xh"), getb()); break;
1957 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("nei d,%02xh"), getb()); break;
1958 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("nei e,%02xh"), getb()); break;
1959 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("nei h,%02xh"), getb()); break;
1960 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("nei l,%02xh"), getb()); break;
1961 case 0x70: my_stprintf_s(buffer, buffer_len, _T("sbi v,%02xh"), getb()); break;
1962 case 0x71: my_stprintf_s(buffer, buffer_len, _T("sbi a,%02xh"), getb()); break;
1963 case 0x72: my_stprintf_s(buffer, buffer_len, _T("sbi b,%02xh"), getb()); break;
1964 case 0x73: my_stprintf_s(buffer, buffer_len, _T("sbi c,%02xh"), getb()); break;
1965 case 0x74: my_stprintf_s(buffer, buffer_len, _T("sbi d,%02xh"), getb()); break;
1966 case 0x75: my_stprintf_s(buffer, buffer_len, _T("sbi e,%02xh"), getb()); break;
1967 case 0x76: my_stprintf_s(buffer, buffer_len, _T("sbi h,%02xh"), getb()); break;
1968 case 0x77: my_stprintf_s(buffer, buffer_len, _T("sbi l,%02xh"), getb()); break;
1969 case 0x78: my_stprintf_s(buffer, buffer_len, _T("eqi v,%02xh"), getb()); break;
1970 case 0x79: my_stprintf_s(buffer, buffer_len, _T("eqi a,%02xh"), getb()); break;
1971 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("eqi b,%02xh"), getb()); break;
1972 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("eqi c,%02xh"), getb()); break;
1973 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("eqi d,%02xh"), getb()); break;
1974 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("eqi e,%02xh"), getb()); break;
1975 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("eqi h,%02xh"), getb()); break;
1976 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("eqi l,%02xh"), getb()); break;
1977 case 0x88: my_stprintf_s(buffer, buffer_len, _T("ani pa,%02xh"), getb()); break;
1978 case 0x89: my_stprintf_s(buffer, buffer_len, _T("ani pb,%02xh"), getb()); break;
1979 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("ani pc,%02xh"), getb()); break;
1980 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("ani mk,%02xh"), getb()); break;
1981 case 0x90: my_stprintf_s(buffer, buffer_len, _T("xri pa,%02xh"), getb()); break;
1982 case 0x91: my_stprintf_s(buffer, buffer_len, _T("xri pb,%02xh"), getb()); break;
1983 case 0x92: my_stprintf_s(buffer, buffer_len, _T("xri pc,%02xh"), getb()); break;
1984 case 0x93: my_stprintf_s(buffer, buffer_len, _T("xri mk,%02xh"), getb()); break;
1985 case 0x98: my_stprintf_s(buffer, buffer_len, _T("ori pa,%02xh"), getb()); break;
1986 case 0x99: my_stprintf_s(buffer, buffer_len, _T("ori pb,%02xh"), getb()); break;
1987 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("ori pc,%02xh"), getb()); break;
1988 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("ori mk,%02xh"), getb()); break;
1989 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("adinc pa,%02xh"), getb()); break;
1990 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("adinc pb,%02xh"), getb()); break;
1991 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("adinc pc,%02xh"), getb()); break;
1992 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("adinc mk,%02xh"), getb()); break;
1993 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("gti pa,%02xh"), getb()); break;
1994 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gti pb,%02xh"), getb()); break;
1995 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gti pc,%02xh"), getb()); break;
1996 case 0xab: my_stprintf_s(buffer, buffer_len, _T("gti mk,%02xh"), getb()); break;
1997 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("suinb pa,%02xh"), getb()); break;
1998 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("suinb pb,%02xh"), getb()); break;
1999 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("suinb pc,%02xh"), getb()); break;
2000 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("suinb mk,%02xh"), getb()); break;
2001 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("lti pa,%02xh"), getb()); break;
2002 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("lti pb,%02xh"), getb()); break;
2003 case 0xba: my_stprintf_s(buffer, buffer_len, _T("lti pc,%02xh"), getb()); break;
2004 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("lti mk,%02xh"), getb()); break;
2005 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("adi pa,%02xh"), getb()); break;
2006 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("adi pb,%02xh"), getb()); break;
2007 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("adi pc,%02xh"), getb()); break;
2008 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("adi mk,%02xh"), getb()); break;
2009 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("oni pa,%02xh"), getb()); break;
2010 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("oni pb,%02xh"), getb()); break;
2011 case 0xca: my_stprintf_s(buffer, buffer_len, _T("oni pc,%02xh"), getb()); break;
2012 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("oni mk,%02xh"), getb()); break;
2013 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("aci pa,%02xh"), getb()); break;
2014 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("aci pb,%02xh"), getb()); break;
2015 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("aci pc,%02xh"), getb()); break;
2016 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("aci mk,%02xh"), getb()); break;
2017 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("offi pa,%02xh"), getb()); break;
2018 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offi pb,%02xh"), getb()); break;
2019 case 0xda: my_stprintf_s(buffer, buffer_len, _T("offi pc,%02xh"), getb()); break;
2020 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offi mk,%02xh"), getb()); break;
2021 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("sui pa,%02xh"), getb()); break;
2022 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("sui pb,%02xh"), getb()); break;
2023 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("sui pc,%02xh"), getb()); break;
2024 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("sui mk,%02xh"), getb()); break;
2025 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("nei pa,%02xh"), getb()); break;
2026 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("nei pb,%02xh"), getb()); break;
2027 case 0xea: my_stprintf_s(buffer, buffer_len, _T("nei pc,%02xh"), getb()); break;
2028 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("nei mk,%02xh"), getb()); break;
2029 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("sbi pa,%02xh"), getb()); break;
2030 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbi pb,%02xh"), getb()); break;
2031 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbi pc,%02xh"), getb()); break;
2032 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbi mk,%02xh"), getb()); break;
2033 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("eqi pa,%02xh"), getb()); break;
2034 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqi pb,%02xh"), getb()); break;
2035 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqi pc,%02xh"), getb()); break;
2036 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqi mk,%02xh"), getb()); break;
2037 default: my_stprintf_s(buffer, buffer_len, _T("db 64h,%02xh"), b);
2040 case 0x65: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("neiw v.%02xh,%02xh"), wa, getb()); break;
2041 case 0x66: my_stprintf_s(buffer, buffer_len, _T("sui a,%02xh"), getb()); break;
2042 case 0x67: my_stprintf_s(buffer, buffer_len, _T("nei a,%02xh"), getb()); break;
2043 case 0x68: my_stprintf_s(buffer, buffer_len, _T("mvi v,%02xh"), getb()); break;
2044 case 0x69: my_stprintf_s(buffer, buffer_len, _T("mvi a,%02xh"), getb()); break;
2045 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("mvi b,%02xh"), getb()); break;
2046 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("mvi c,%02xh"), getb()); break;
2047 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("mvi d,%02xh"), getb()); break;
2048 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("mvi e,%02xh"), getb()); break;
2049 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("mvi h,%02xh"), getb()); break;
2050 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("mvi l,%02xh"), getb()); break;
2053 switch(b = getb()) {
2054 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("sspd %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2055 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("lspd %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2056 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("sbcd %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2057 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("lbcd %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2058 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("sded %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2059 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("lded %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2060 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("shld %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2061 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("lhld %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2062 case 0x68: my_stprintf_s(buffer, buffer_len, _T("mov v,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2063 case 0x69: my_stprintf_s(buffer, buffer_len, _T("mov a,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2064 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("mov b,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2065 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("mov c,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2066 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("mov d,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2067 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("mov e,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2068 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("mov h,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2069 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("mov l,%s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2070 case 0x78: my_stprintf_s(buffer, buffer_len, _T("mov %s,v"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2071 case 0x79: my_stprintf_s(buffer, buffer_len, _T("mov %s,a"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2072 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("mov %s,b"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2073 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("mov %s,c"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2074 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("mov %s,d"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2075 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("mov %s,e"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2076 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("mov %s,h"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2077 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("mov %s,l"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), getw())); break;
2078 case 0x89: my_stprintf_s(buffer, buffer_len, _T("anax b")); break;
2079 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("anax d")); break;
2080 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("anax h")); break;
2081 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("anax d+")); break;
2082 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("anax h+")); break;
2083 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("anax d-")); break;
2084 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("anax h-")); break;
2085 case 0x91: my_stprintf_s(buffer, buffer_len, _T("xrax b")); break;
2086 case 0x92: my_stprintf_s(buffer, buffer_len, _T("xrax d")); break;
2087 case 0x93: my_stprintf_s(buffer, buffer_len, _T("xrax h")); break;
2088 case 0x94: my_stprintf_s(buffer, buffer_len, _T("xrax d+")); break;
2089 case 0x95: my_stprintf_s(buffer, buffer_len, _T("xrax h+")); break;
2090 case 0x96: my_stprintf_s(buffer, buffer_len, _T("xrax d-")); break;
2091 case 0x97: my_stprintf_s(buffer, buffer_len, _T("xrax h-")); break;
2092 case 0x99: my_stprintf_s(buffer, buffer_len, _T("orax b")); break;
2093 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("orax d")); break;
2094 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("orax h")); break;
2095 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("orax d+")); break;
2096 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("orax h+")); break;
2097 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("orax d-")); break;
2098 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("orax h-")); break;
2099 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("addncx b")); break;
2100 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("addncx d")); break;
2101 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("addncx h")); break;
2102 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("addncx d+")); break;
2103 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("addncx h+")); break;
2104 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("addncx d-")); break;
2105 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("addncx h-")); break;
2106 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gtax b")); break;
2107 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gtax d")); break;
2108 case 0xab: my_stprintf_s(buffer, buffer_len, _T("gtax h")); break;
2109 case 0xac: my_stprintf_s(buffer, buffer_len, _T("gtax d+")); break;
2110 case 0xad: my_stprintf_s(buffer, buffer_len, _T("gtax h+")); break;
2111 case 0xae: my_stprintf_s(buffer, buffer_len, _T("gtax d-")); break;
2112 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("gtax h-")); break;
2113 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("subnbx b")); break;
2114 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("subnbx d")); break;
2115 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("subnbx h")); break;
2116 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("subnbx d+")); break;
2117 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("subnbx h+")); break;
2118 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("subnbx d-")); break;
2119 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("subnbx h-")); break;
2120 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("ltax b")); break;
2121 case 0xba: my_stprintf_s(buffer, buffer_len, _T("ltax d")); break;
2122 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("ltax h")); break;
2123 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("ltax d+")); break;
2124 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("ltax h+")); break;
2125 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("ltax d-")); break;
2126 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("ltax h-")); break;
2127 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("addx b")); break;
2128 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("addx d")); break;
2129 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("addx h")); break;
2130 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("addx d+")); break;
2131 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("addx h+")); break;
2132 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("addx d-")); break;
2133 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("addx h-")); break;
2134 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("onax b")); break;
2135 case 0xca: my_stprintf_s(buffer, buffer_len, _T("onax d")); break;
2136 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("onax h")); break;
2137 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("onax d+")); break;
2138 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("onax h+")); break;
2139 case 0xce: my_stprintf_s(buffer, buffer_len, _T("onax d-")); break;
2140 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("onax h-")); break;
2141 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("adcx b")); break;
2142 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("adcx d")); break;
2143 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("adcx h")); break;
2144 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("adcx d+")); break;
2145 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("adcx h+")); break;
2146 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("adcx d-")); break;
2147 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("adcx h-")); break;
2148 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offax b")); break;
2149 case 0xda: my_stprintf_s(buffer, buffer_len, _T("offax d")); break;
2150 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offax h")); break;
2151 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("offax d+")); break;
2152 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("offax h+")); break;
2153 case 0xde: my_stprintf_s(buffer, buffer_len, _T("offax d-")); break;
2154 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("offax h-")); break;
2155 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("subx b")); break;
2156 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("subx d")); break;
2157 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("subx h")); break;
2158 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("subx d+")); break;
2159 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("subx h+")); break;
2160 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("subx d-")); break;
2161 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("subx h-")); break;
2162 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("neax b")); break;
2163 case 0xea: my_stprintf_s(buffer, buffer_len, _T("neax d")); break;
2164 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("neax h")); break;
2165 case 0xec: my_stprintf_s(buffer, buffer_len, _T("neax d+")); break;
2166 case 0xed: my_stprintf_s(buffer, buffer_len, _T("neax h+")); break;
2167 case 0xee: my_stprintf_s(buffer, buffer_len, _T("neax d-")); break;
2168 case 0xef: my_stprintf_s(buffer, buffer_len, _T("neax h-")); break;
2169 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbbx b")); break;
2170 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbbx d")); break;
2171 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbbx h")); break;
2172 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("sbbx d+")); break;
2173 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("sbbx h+")); break;
2174 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("sbbx d-")); break;
2175 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("sbbx h-")); break;
2176 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqax b")); break;
2177 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqax d")); break;
2178 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqax h")); break;
2179 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("eqax d+")); break;
2180 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("eqax h+")); break;
2181 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("eqax d-")); break;
2182 case 0xff: my_stprintf_s(buffer, buffer_len, _T("eqax h-")); break;
2183 default: my_stprintf_s(buffer, buffer_len, _T("db 70h,%02xh"), b);
2186 case 0x71: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("mviw v.%02xh,%02xh"), wa, getb()); break;
2187 case 0x72: my_stprintf_s(buffer, buffer_len, _T("softi")); break;
2188 case 0x73: my_stprintf_s(buffer, buffer_len, _T("jb")); break;
2190 switch(b = getb()) {
2191 case 0x88: my_stprintf_s(buffer, buffer_len, _T("anaw v.%02xh"), getwa()); break;
2192 case 0x90: my_stprintf_s(buffer, buffer_len, _T("xraw v.%02xh"), getwa()); break;
2193 case 0x98: my_stprintf_s(buffer, buffer_len, _T("oraw v.%02xh"), getwa()); break;
2194 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("addncw v.%02xh"), getwa()); break;
2195 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("gtaw v.%02xh"), getwa()); break;
2196 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("subnbw v.%02xh"), getwa()); break;
2197 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("ltaw v.%02xh"), getwa()); break;
2198 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("addw v.%02xh"), getwa()); break;
2199 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("onaw v.%02xh"), getwa()); break;
2200 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("adcw v.%02xh"), getwa()); break;
2201 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("offaw v.%02xh"), getwa()); break;
2202 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("subw v.%02xh"), getwa()); break;
2203 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("neaw v.%02xh"), getwa()); break;
2204 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("sbbw v.%02xh"), getwa()); break;
2205 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("eqaw v.%02xh"), getwa()); break;
2206 default: my_stprintf_s(buffer, buffer_len, _T("db 74h,%02xh"), b);
2209 case 0x75: wa = getwa(); my_stprintf_s(buffer, buffer_len, _T("eqiw v.%02xh,%02xh"), wa, getb()); break;
2210 case 0x76: my_stprintf_s(buffer, buffer_len, _T("sbi a,%02xh"), getb()); break;
2211 case 0x77: my_stprintf_s(buffer, buffer_len, _T("eqi a,%02xh"), getb()); break;
2212 case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f:
2213 my_stprintf_s(buffer, buffer_len, _T("calf %3x"), 0x800 | ((b & 7) << 8) | getb()); break;
2215 case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
2216 case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
2217 case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97:
2218 case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f:
2219 case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa4: case 0xa5: case 0xa6: case 0xa7:
2220 case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
2221 case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
2222 case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf:
2223 my_stprintf_s(buffer, buffer_len, _T("calt %02xh"), 0x80 | ((b & 0x3f) << 1)); break;
2225 case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
2226 case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf:
2227 case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
2228 case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf:
2229 my_stprintf_s(buffer, buffer_len, _T("jr %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), pc + upd7801_dasm_ptr + (b & 0x1f))); break;
2231 case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
2232 case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
2233 case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
2234 case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff:
2235 my_stprintf_s(buffer, buffer_len, _T("jr %s"), get_value_or_symbol(d_debugger->first_symbol, _T("%04xh"), pc + upd7801_dasm_ptr + ((b & 0x1f) - 0x20))); break;
2237 default: my_stprintf_s(buffer, buffer_len, _T("db %02xh"), b); break;
2239 return upd7801_dasm_ptr;
2243 void UPD7801::write_signal(int id, uint32_t data, uint32_t mask)
2245 if(id == SIG_UPD7801_INTF0) {
2251 } else if(id == SIG_UPD7801_INTF1) {
2257 } else if(id == SIG_UPD7801_INTF2) {
2258 if((data & mask) && (MK & 0x20)) {
2260 } else if(!(data & mask) && !(MK & 0x20)) {
2263 } else if(id == SIG_UPD7801_WAIT) {
2264 wait = ((data & mask) != 0);
2265 } else if(id == SIG_UPD7801_SI) {
2266 SI = ((data & mask) != 0);
2267 } else if(id == SIG_UPD7801_SCK) {
2268 bool newSCK = ((data & mask) != 0);
2270 if(!SIO_DISABLED && SIO_EXTCLOCK) {
2271 if(SCK && !newSCK) {
2272 write_signals(&outputs_so, (SR & 0x80) ? 0xffffffff : 0);
2273 } else if(!SCK && newSCK) {
2276 if(++sio_count == 8) {
2282 scount = sio_count = 0;
2293 uint8_t ope = FETCH8();
2295 if((PSW & F_SK) && ope != 0x72) {
2296 // skip this mnemonic
2298 case 0x48: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op48[ope].oplen - 2; period += op48[ope].clock; break;
2299 case 0x4c: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op4c[ope].oplen - 2; period += op4c[ope].clock; break;
2300 case 0x4d: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op4d[ope].oplen - 2; period += op4d[ope].clock; break;
2301 case 0x60: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op60[ope].oplen - 2; period += op60[ope].clock; break;
2302 case 0x64: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op64[ope].oplen - 2; period += op64[ope].clock; break;
2303 case 0x70: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op70[ope].oplen - 2; period += op70[ope].clock; break;
2304 case 0x74: PSW &= ~(F_SK | F_L0 | F_L1); ope = FETCH8(); PC += op74[ope].oplen - 2; period += op74[ope].clock; break;
2305 case 0x34: PSW &= ~(F_SK | F_L1); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2306 case 0x69: PSW &= ~(F_SK | F_L0 ); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2307 case 0x6f: PSW &= ~(F_SK | F_L1); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2308 default: PSW &= ~(F_SK | F_L0 | F_L1); PC += op[ope].oplen - 1; period += op[ope].clock; break;
2312 period += op[ope].clock;
2318 HALT = 1; PC--; break;
2319 case 0x02: // inx sp
2321 case 0x03: // dcx sp
2323 case 0x04: // lxi sp,word
2324 SP = FETCH16(); break;
2325 case 0x05: // aniw wa,byte
2329 case 0x07: // ani a,byte
2332 PC = POP16(); break;
2335 case 0x0a: // mov a,b
2337 case 0x0b: // mov a,c
2339 case 0x0c: // mov a,d
2341 case 0x0d: // mov a,e
2343 case 0x0e: // mov a,h
2345 case 0x0f: // mov a,l
2355 case 0x14: // lxi b,word
2356 BC = FETCH16(); break;
2357 case 0x15: // oriw wa,byte
2359 case 0x16: // xri a,byte
2361 case 0x17: // ori a,byte
2364 PC = POP16(); PSW |= F_SK; break;
2367 TO = 0x10; UPDATE_PORTC(0);
2370 case 0x1a: // mov b, a
2372 case 0x1b: // mov c, a
2374 case 0x1c: // mov d, a
2376 case 0x1d: // mov e, a
2378 case 0x1e: // mov h, a
2380 case 0x1f: // mov l, a
2382 case 0x20: // inrw wa
2385 BC = RM16(PC + _A + 1); break;
2390 case 0x24: // lxi d,word
2391 DE = FETCH16(); break;
2392 case 0x25: // gtiw wa,byte
2394 case 0x26: // adinc a,byte
2396 case 0x27: // gti a,byte
2398 case 0x28: // ldaw wa
2399 _A = RM8(FETCHWA()); break;
2400 case 0x29: // ldax b
2401 _A = RM8(BC); break;
2402 case 0x2a: // ldax d
2403 _A = RM8(DE); break;
2404 case 0x2b: // ldax h
2405 _A = RM8(HL); break;
2406 case 0x2c: // ldax d+
2407 _A = RM8(DE++);; break;
2408 case 0x2d: // ldax h+
2409 _A = RM8(HL++); break;
2410 case 0x2e: // ldax d-
2411 _A = RM8(DE--); break;
2412 case 0x2f: // ldax h-
2413 _A = RM8(HL--); break;
2414 case 0x30: // dcrw wa
2422 case 0x34: // lxi h,word
2428 PSW = (PSW & ~F_L1) | F_L0; return;
2429 case 0x35: // ltiw wa,byte
2431 case 0x36: // suinb a,byte
2433 case 0x37: // lti a,byte
2435 case 0x38: // staw wa
2436 WM8(FETCHWA(), _A); break;
2437 case 0x39: // stax b
2439 case 0x3a: // stax d
2441 case 0x3b: // stax h
2443 case 0x3c: // stax d+
2444 WM8(DE++, _A); break;
2445 case 0x3d: // stax h+
2446 WM8(HL++, _A); break;
2447 case 0x3e: // stax d-
2448 WM8(DE--, _A); break;
2449 case 0x3f: // stax h-
2450 WM8(HL--, _A); break;
2459 case 0x44: // call word
2461 case 0x45: // oniw wa,byte
2463 case 0x46: // adi a,byte
2465 case 0x47: // oni a,byte
2469 case 0x49: // mvix b,byte
2470 WM8(BC, FETCH8()); break;
2471 case 0x4a: // mvix d,byte
2472 WM8(DE, FETCH8()); break;
2473 case 0x4b: // mvix h,byte
2474 WM8(HL, FETCH8()); break;
2490 case 0x54: // jmp word
2491 PC = FETCH16(); break;
2492 case 0x55: // offiw wa,byte
2494 case 0x56: // aci a,byte
2496 case 0x57: // offi a,byte
2498 case 0x58: // bit 0,wa
2500 case 0x59: // bit 1,wa
2502 case 0x5a: // bit 2,wa
2504 case 0x5b: // bit 3,wa
2506 case 0x5c: // bit 4,wa
2508 case 0x5d: // bit 5,wa
2510 case 0x5e: // bit 6,wa
2512 case 0x5f: // bit 7,wa
2519 PC = POP16(); PSW = POP8(); SIRQ = 0; return;
2521 PUSH16(PC); PC = BC; break;
2524 case 0x65: // neiw wa,byte
2526 case 0x66: // sui a,byte
2528 case 0x67: // nei a,byte
2530 case 0x68: // mvi v,byte
2533 case 0x69: // mvi a,byte
2539 PSW = (PSW & ~F_L0) | F_L1; return;
2540 case 0x6a: // mvi b,byte
2541 _B = FETCH8(); break;
2542 case 0x6b: // mvi c,byte
2543 _C = FETCH8(); break;
2544 case 0x6c: // mvi d,byte
2545 _D = FETCH8(); break;
2546 case 0x6d: // mvi e,byte
2547 _E = FETCH8(); break;
2548 case 0x6e: // mvi h,byte
2549 _H = FETCH8(); break;
2550 case 0x6f: // mvi l,byte
2556 PSW = (PSW & ~F_L1) | F_L0; return;
2559 case 0x71: // mviw wa,byte
2562 PUSH8(PSW); PUSH16(PC); PSW &= ~F_SK; SIRQ = 1; PC = 0x0060; break;
2567 case 0x75: // eqiw wa,byte
2569 case 0x76: // sbi a,byte
2571 case 0x77: // eqi a,byte
2573 case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f: // calf
2575 case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
2576 case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
2577 case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97:
2578 case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f:
2579 case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa4: case 0xa5: case 0xa6: case 0xa7:
2580 case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
2581 case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
2582 case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf: // calt
2584 case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
2585 case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf:
2586 case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
2587 case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: // jr
2588 PC += ope & 0x1f; break;
2589 case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
2590 case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
2591 case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
2592 case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: // jr
2593 PC -= 0x20 - (ope & 0x1f); break;
2594 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
2599 PSW &= ~(F_L0 | F_L1);
2602 void UPD7801::OP48()
2604 uint8_t ope = FETCH8();
2605 period += op48[ope].clock;
2608 case 0x00: // skit intf0
2610 case 0x01: // skit intft
2612 case 0x02: // skit intf1
2614 case 0x03: // skit intf2
2616 case 0x04: // skit intfs
2622 case 0x0e: // push v
2625 VA = POP16(); break;
2626 case 0x10: // sknit intf0
2627 SKNIT(INTF0); break;
2628 case 0x11: // sknit intft
2629 SKNIT(INTFT); break;
2630 case 0x12: // sknit intf1
2631 SKNIT(INTF1); break;
2632 case 0x13: // sknit intf2
2633 SKNIT(INTF2); break;
2634 case 0x14: // sknit intfs
2635 SKNIT(INTFS); break;
2636 case 0x1a: // skn cy
2640 case 0x1e: // push b
2643 BC = POP16(); break;
2649 PSW &= ~F_CY; break;
2656 case 0x2e: // push d
2659 DE = POP16(); break;
2682 case 0x3e: // push h
2685 HL = POP16(); break;
2687 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 48 %2x\n"), prevPC, ope);
2691 void UPD7801::OP4C()
2693 uint8_t ope = FETCH8();
2694 period += op4c[ope].clock;
2697 case 0xc0: // mov a,pa
2698 _A = IN8(P_A); break;
2699 case 0xc1: // mov a,pb
2700 _A = IN8(P_B); break;
2701 case 0xc2: // mov a,pc
2702 _A = IN8(P_C); break;
2703 case 0xc3: // mov a,mk
2705 case 0xc4: // mov a,mb ?
2707 case 0xc5: // mov a,mc ?
2709 case 0xc6: // mov a,tm0 ?
2711 case 0xc7: // mov a,tm1 ?
2713 case 0xc8: // mov a,s
2715 SAK = 8; UPDATE_PORTC(0);
2722 _A = RM8((_B << 8) | ope);
2725 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 4c %2x\n"), prevPC, ope);
2730 void UPD7801::OP4D()
2732 uint8_t ope = FETCH8();
2733 period += op4d[ope].clock;
2736 case 0xc0: // mov pa,a
2737 OUT8(P_A, _A); break;
2738 case 0xc1: // mov pb,a
2739 OUT8(P_B, _A); break;
2740 case 0xc2: // mov pc,a
2741 OUT8(P_C, _A); break;
2742 case 0xc3: // mov mk,a
2744 case 0xc4: // mov mb,a
2746 case 0xc5: // mov mc,a
2748 MC = _A; UPDATE_PORTC(0); break;
2751 case 0xc6: // mov tm0,a
2753 case 0xc7: // mov tm1,a
2755 case 0xc8: // mov s,a
2757 SAK = 8; UPDATE_PORTC(0);
2764 WM8((_B << 8) | ope, _A);
2767 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 4d %2x\n"), prevPC, ope);
2772 void UPD7801::OP60()
2774 uint8_t ope = FETCH8();
2775 period += op60[ope].clock;
2778 case 0x08: // ana v,a
2780 case 0x09: // ana a,a
2782 case 0x0a: // ana b,a
2784 case 0x0b: // ana c,a
2786 case 0x0c: // ana d,a
2788 case 0x0d: // ana e,a
2790 case 0x0e: // ana h,a
2792 case 0x0f: // ana l,a
2794 case 0x10: // xra v,a
2796 case 0x11: // xra a,a
2798 case 0x12: // xra b,a
2800 case 0x13: // xra c,a
2802 case 0x14: // xra d,a
2804 case 0x15: // xra e,a
2806 case 0x16: // xra h,a
2808 case 0x17: // xra l,a
2810 case 0x18: // ora v,a
2812 case 0x19: // ora a,a
2814 case 0x1a: // ora b,a
2816 case 0x1b: // ora c,a
2818 case 0x1c: // ora d,a
2820 case 0x1d: // ora e,a
2822 case 0x1e: // ora h,a
2824 case 0x1f: // ora l,a
2826 case 0x20: // addnc v,a
2827 ADDNC(_V, _A); break;
2828 case 0x21: // addnc a,a
2829 ADDNC(_A, _A); break;
2830 case 0x22: // addnc b,a
2831 ADDNC(_B, _A); break;
2832 case 0x23: // addnc c,a
2833 ADDNC(_C, _A); break;
2834 case 0x24: // addnc d,a
2835 ADDNC(_D, _A); break;
2836 case 0x25: // addnc e,a
2837 ADDNC(_E, _A); break;
2838 case 0x26: // addnc h,a
2839 ADDNC(_H, _A); break;
2840 case 0x27: // addnc l,a
2841 ADDNC(_L, _A); break;
2842 case 0x28: // gta v,a
2844 case 0x29: // gta a,a
2846 case 0x2a: // gta b,a
2848 case 0x2b: // gta c,a
2850 case 0x2c: // gta d,a
2852 case 0x2d: // gta e,a
2854 case 0x2e: // gta h,a
2856 case 0x2f: // gta l,a
2858 case 0x30: // subnb v,a
2859 SUBNB(_V, _A); break;
2860 case 0x31: // subnb a,a
2861 SUBNB(_A, _A); break;
2862 case 0x32: // subnb b,a
2863 SUBNB(_B, _A); break;
2864 case 0x33: // subnb c,a
2865 SUBNB(_C, _A); break;
2866 case 0x34: // subnb d,a
2867 SUBNB(_D, _A); break;
2868 case 0x35: // subnb e,a
2869 SUBNB(_E, _A); break;
2870 case 0x36: // subnb h,a
2871 SUBNB(_H, _A); break;
2872 case 0x37: // subnb l,a
2873 SUBNB(_L, _A); break;
2874 case 0x38: // lta v,a
2876 case 0x39: // lta a,a
2878 case 0x3a: // lta b,a
2880 case 0x3b: // lta c,a
2882 case 0x3c: // lta d,a
2884 case 0x3d: // lta e,a
2886 case 0x3e: // lta h,a
2888 case 0x3f: // lta l,a
2890 case 0x40: // add v,a
2892 case 0x41: // add a,a
2894 case 0x42: // add b,a
2896 case 0x43: // add c,a
2898 case 0x44: // add d,a
2900 case 0x45: // add e,a
2902 case 0x46: // add h,a
2904 case 0x47: // add l,a
2906 case 0x50: // adc v,a
2908 case 0x51: // adc a,a
2910 case 0x52: // adc b,a
2912 case 0x53: // adc c,a
2914 case 0x54: // adc d,a
2916 case 0x55: // adc e,a
2918 case 0x56: // adc h,a
2920 case 0x57: // adc l,a
2922 case 0x60: // sub v,a
2924 case 0x61: // sub a,a
2926 case 0x62: // sub b,a
2928 case 0x63: // sub c,a
2930 case 0x64: // sub d,a
2932 case 0x65: // sub e,a
2934 case 0x66: // sub h,a
2936 case 0x67: // sub l,a
2938 case 0x68: // nea v,a
2940 case 0x69: // nea a,a
2942 case 0x6a: // nea b,a
2944 case 0x6b: // nea c,a
2946 case 0x6c: // nea d,a
2948 case 0x6d: // nea e,a
2950 case 0x6e: // nea h,a
2952 case 0x6f: // nea l,a
2954 case 0x70: // sbb v,a
2956 case 0x71: // sbb a,a
2958 case 0x72: // sbb b,a
2960 case 0x73: // sbb c,a
2962 case 0x74: // sbb d,a
2964 case 0x75: // sbb e,a
2966 case 0x76: // sbb h,a
2968 case 0x77: // sbb l,a
2970 case 0x78: // eqa v,a
2972 case 0x79: // eqa a,a
2974 case 0x7a: // eqa b,a
2976 case 0x7b: // eqa c,a
2978 case 0x7c: // eqa d,a
2980 case 0x7d: // eqa e,a
2982 case 0x7e: // eqa h,a
2984 case 0x7f: // eqa l,a
2986 case 0x88: // ana a,v
2988 case 0x89: // ana a,a
2990 case 0x8a: // ana a,b
2992 case 0x8b: // ana a,c
2994 case 0x8c: // ana a,d
2996 case 0x8d: // ana a,e
2998 case 0x8e: // ana a,h
3000 case 0x8f: // ana a,l
3002 case 0x90: // xra a,v
3004 case 0x91: // xra a,a
3006 case 0x92: // xra a,b
3008 case 0x93: // xra a,c
3010 case 0x94: // xra a,d
3012 case 0x95: // xra a,e
3014 case 0x96: // xra a,h
3016 case 0x97: // xra a,l
3018 case 0x98: // ora a,v
3020 case 0x99: // ora a,a
3022 case 0x9a: // ora a,b
3024 case 0x9b: // ora a,c
3026 case 0x9c: // ora a,d
3028 case 0x9d: // ora a,e
3030 case 0x9e: // ora a,h
3032 case 0x9f: // ora a,l
3034 case 0xa0: // addnc a,v
3035 ADDNC(_A, _V); break;
3036 case 0xa1: // addnc a,a
3037 ADDNC(_A, _A); break;
3038 case 0xa2: // addnc a,b
3039 ADDNC(_A, _B); break;
3040 case 0xa3: // addnc a,c
3041 ADDNC(_A, _C); break;
3042 case 0xa4: // addnc a,d
3043 ADDNC(_A, _D); break;
3044 case 0xa5: // addnc a,e
3045 ADDNC(_A, _E); break;
3046 case 0xa6: // addnc a,h
3047 ADDNC(_A, _H); break;
3048 case 0xa7: // addnc a,l
3049 ADDNC(_A, _L); break;
3050 case 0xa8: // gta a,v
3052 case 0xa9: // gta a,a
3054 case 0xaa: // gta a,b
3056 case 0xab: // gta a,c
3058 case 0xac: // gta a,d
3060 case 0xad: // gta a,e
3062 case 0xae: // gta a,h
3064 case 0xaf: // gta a,l
3066 case 0xb0: // subnb a,v
3067 SUBNB(_A, _V); break;
3068 case 0xb1: // subnb a,a
3069 SUBNB(_A, _A); break;
3070 case 0xb2: // subnb a,b
3071 SUBNB(_A, _B); break;
3072 case 0xb3: // subnb a,c
3073 SUBNB(_A, _C); break;
3074 case 0xb4: // subnb a,d
3075 SUBNB(_A, _D); break;
3076 case 0xb5: // subnb a,e
3077 SUBNB(_A, _E); break;
3078 case 0xb6: // subnb a,h
3079 SUBNB(_A, _H); break;
3080 case 0xb7: // subnb a,l
3081 SUBNB(_A, _L); break;
3082 case 0xb8: // lta a,v
3084 case 0xb9: // lta a,a
3086 case 0xba: // lta a,b
3088 case 0xbb: // lta a,c
3090 case 0xbc: // lta a,d
3092 case 0xbd: // lta a,e
3094 case 0xbe: // lta a,h
3096 case 0xbf: // lta a,l
3098 case 0xc0: // add a,v
3100 case 0xc1: // add a,a
3102 case 0xc2: // add a,b
3104 case 0xc3: // add a,c
3106 case 0xc4: // add a,d
3108 case 0xc5: // add a,e
3110 case 0xc6: // add a,h
3112 case 0xc7: // add a,l
3114 case 0xc8: // ona a,v
3116 case 0xc9: // ona a,a
3118 case 0xca: // ona a,b
3120 case 0xcb: // ona a,c
3122 case 0xcc: // ona a,d
3124 case 0xcd: // ona a,e
3126 case 0xce: // ona a,h
3128 case 0xcf: // ona a,l
3130 case 0xd0: // adc a,v
3132 case 0xd1: // adc a,a
3134 case 0xd2: // adc a,b
3136 case 0xd3: // adc a,c
3138 case 0xd4: // adc a,d
3140 case 0xd5: // adc a,e
3142 case 0xd6: // adc a,h
3144 case 0xd7: // adc a,l
3146 case 0xd8: // offa a,v
3147 OFFA(_A, _V); break;
3148 case 0xd9: // offa a,a
3149 OFFA(_A, _A); break;
3150 case 0xda: // offa a,b
3151 OFFA(_A, _B); break;
3152 case 0xdb: // offa a,c
3153 OFFA(_A, _C); break;
3154 case 0xdc: // offa a,d
3155 OFFA(_A, _D); break;
3156 case 0xdd: // offa a,e
3157 OFFA(_A, _E); break;
3158 case 0xde: // offa a,h
3159 OFFA(_A, _H); break;
3160 case 0xdf: // offa a,l
3161 OFFA(_A, _L); break;
3162 case 0xe0: // sub a,v
3164 case 0xe1: // sub a,a
3166 case 0xe2: // sub a,b
3168 case 0xe3: // sub a,c
3170 case 0xe4: // sub a,d
3172 case 0xe5: // sub a,e
3174 case 0xe6: // sub a,h
3176 case 0xe7: // sub a,l
3178 case 0xe8: // nea a,v
3180 case 0xe9: // nea a,a
3182 case 0xea: // nea a,b
3184 case 0xeb: // nea a,c
3186 case 0xec: // nea a,d
3188 case 0xed: // nea a,e
3190 case 0xee: // nea a,h
3192 case 0xef: // nea a,l
3194 case 0xf0: // sbb a,v
3196 case 0xf1: // sbb a,a
3198 case 0xf2: // sbb a,b
3200 case 0xf3: // sbb a,c
3202 case 0xf4: // sbb a,d
3204 case 0xf5: // sbb a,e
3206 case 0xf6: // sbb a,h
3208 case 0xf7: // sbb a,l
3210 case 0xf8: // eqa a,v
3212 case 0xf9: // eqa a,a
3214 case 0xfa: // eqa a,b
3216 case 0xfb: // eqa a,c
3218 case 0xfc: // eqa a,d
3220 case 0xfd: // eqa a,e
3222 case 0xfe: // eqa a,h
3224 case 0xff: // eqa a,l
3227 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 60 %2x\n"), prevPC, ope);
3231 void UPD7801::OP64()
3233 uint8_t ope = FETCH8();
3234 period += op64[ope].clock;
3237 case 0x08: // ani v,byte
3239 case 0x09: // ani a,byte
3241 case 0x0a: // ani b,byte
3243 case 0x0b: // ani c,byte
3245 case 0x0c: // ani d,byte
3247 case 0x0d: // ani e,byte
3249 case 0x0e: // ani h,byte
3251 case 0x0f: // ani l,byte
3253 case 0x10: // xri v,byte
3255 case 0x11: // xri a,byte
3257 case 0x12: // xri b,byte
3259 case 0x13: // xri c,byte
3261 case 0x14: // xri d,byte
3263 case 0x15: // xri e,byte
3265 case 0x16: // xri h,byte
3267 case 0x17: // xri l,byte
3269 case 0x18: // ori v,byte
3271 case 0x19: // ori a,byte
3273 case 0x1a: // ori b,byte
3275 case 0x1b: // ori c,byte
3277 case 0x1c: // ori d,byte
3279 case 0x1d: // ori e,byte
3281 case 0x1e: // ori h,byte
3283 case 0x1f: // ori l,byte
3285 case 0x20: // adinc v,byte
3287 case 0x21: // adinc a,byte
3289 case 0x22: // adinc b,byte
3291 case 0x23: // adinc c,byte
3293 case 0x24: // adinc d,byte
3295 case 0x25: // adinc e,byte
3297 case 0x26: // adinc h,byte
3299 case 0x27: // adinc l,byte
3301 case 0x28: // gti v,byte
3303 case 0x29: // gti a,byte
3305 case 0x2a: // gti b,byte
3307 case 0x2b: // gti c,byte
3309 case 0x2c: // gti d,byte
3311 case 0x2d: // gti e,byte
3313 case 0x2e: // gti h,byte
3315 case 0x2f: // gti l,byte
3317 case 0x30: // suinb v,byte
3319 case 0x31: // suinb a,byte
3321 case 0x32: // suinb b,byte
3323 case 0x33: // suinb c,byte
3325 case 0x34: // suinb d,byte
3327 case 0x35: // suinb e,byte
3329 case 0x36: // suinb h,byte
3331 case 0x37: // suinb l,byte
3333 case 0x38: // lti v,byte
3335 case 0x39: // lti a,byte
3337 case 0x3a: // lti b,byte
3339 case 0x3b: // lti c,byte
3341 case 0x3c: // lti d,byte
3343 case 0x3d: // lti e,byte
3345 case 0x3e: // lti h,byte
3347 case 0x3f: // lti l,byte
3349 case 0x40: // adi v,byte
3351 case 0x41: // adi a,byte
3353 case 0x42: // adi b,byte
3355 case 0x43: // adi c,byte
3357 case 0x44: // adi d,byte
3359 case 0x45: // adi e,byte
3361 case 0x46: // adi h,byte
3363 case 0x47: // adi l,byte
3365 case 0x48: // oni v,byte
3367 case 0x49: // oni a,byte
3369 case 0x4a: // oni b,byte
3371 case 0x4b: // oni c,byte
3373 case 0x4c: // oni d,byte
3375 case 0x4d: // oni e,byte
3377 case 0x4e: // oni h,byte
3379 case 0x4f: // oni l,byte
3381 case 0x50: // aci v,byte
3383 case 0x51: // aci a,byte
3385 case 0x52: // aci b,byte
3387 case 0x53: // aci c,byte
3389 case 0x54: // aci d,byte
3391 case 0x55: // aci e,byte
3393 case 0x56: // aci h,byte
3395 case 0x57: // aci l,byte
3397 case 0x58: // offi v,byte
3399 case 0x59: // offi a,byte
3401 case 0x5a: // offi b,byte
3403 case 0x5b: // offi c,byte
3405 case 0x5c: // offi d,byte
3407 case 0x5d: // offi e,byte
3409 case 0x5e: // offi h,byte
3411 case 0x5f: // offi l,byte
3413 case 0x60: // sui v,byte
3415 case 0x61: // sui a,byte
3417 case 0x62: // sui b,byte
3419 case 0x63: // sui c,byte
3421 case 0x64: // sui d,byte
3423 case 0x65: // sui e,byte
3425 case 0x66: // sui h,byte
3427 case 0x67: // sui l,byte
3429 case 0x68: // nei v,byte
3431 case 0x69: // nei a,byte
3433 case 0x6a: // nei b,byte
3435 case 0x6b: // nei c,byte
3437 case 0x6c: // nei d,byte
3439 case 0x6d: // nei e,byte
3441 case 0x6e: // nei h,byte
3443 case 0x6f: // nei l,byte
3445 case 0x70: // sbi v,byte
3447 case 0x71: // sbi a,byte
3449 case 0x72: // sbi b,byte
3451 case 0x73: // sbi c,byte
3453 case 0x74: // sbi d,byte
3455 case 0x75: // sbi e,byte
3457 case 0x76: // sbi h,byte
3459 case 0x77: // sbi l,byte
3461 case 0x78: // eqi v,byte
3463 case 0x79: // eqi a,byte
3465 case 0x7a: // eqi b,byte
3467 case 0x7b: // eqi c,byte
3469 case 0x7c: // eqi d,byte
3471 case 0x7d: // eqi e,byte
3473 case 0x7e: // eqi h,byte
3475 case 0x7f: // eqi l,byte
3477 case 0x88: // ani pa,byte
3479 case 0x89: // ani pb,byte
3481 case 0x8a: // ani pc,byte
3483 case 0x8b: // ani mk,byte
3485 case 0x90: // xri pa,byte
3487 case 0x91: // xri pb,byte
3489 case 0x92: // xri pc,byte
3491 case 0x93: // xri mk,byte
3493 case 0x98: // ori pa,byte
3495 case 0x99: // ori pb,byte
3497 case 0x9a: // ori pc,byte
3499 case 0x9b: // ori mk,byte
3501 case 0xa0: // adinc pa,byte
3502 ADINC_IO(P_A); break;
3503 case 0xa1: // adinc pb,byte
3504 ADINC_IO(P_B); break;
3505 case 0xa2: // adinc pc,byte
3506 ADINC_IO(P_C); break;
3507 case 0xa3: // adinc mk,byte
3509 case 0xa8: // gti pa,byte
3511 case 0xa9: // gti pb,byte
3513 case 0xaa: // gti pc,byte
3515 case 0xab: // gti mk,byte
3517 case 0xb0: // suinb pa,byte
3518 SUINB_IO(P_A); break;
3519 case 0xb1: // suinb pb,byte
3520 SUINB_IO(P_B); break;
3521 case 0xb2: // suinb pc,byte
3522 SUINB_IO(P_C); break;
3523 case 0xb3: // suinb mk,byte
3525 case 0xb8: // lti pa,byte
3527 case 0xb9: // lti pb,byte
3529 case 0xba: // lti pc,byte
3531 case 0xbb: // lti mk,byte
3533 case 0xc0: // adi pa,byte
3535 case 0xc1: // adi pb,byte
3537 case 0xc2: // adi pc,byte
3539 case 0xc3: // adi mk,byte
3541 case 0xc8: // oni pa,byte
3543 case 0xc9: // oni pb,byte
3545 case 0xca: // oni pc,byte
3547 case 0xcb: // oni mk,byte
3549 case 0xd0: // aci pa,byte
3551 case 0xd1: // aci pb,byte
3553 case 0xd2: // aci pc,byte
3555 case 0xd3: // aci mk,byte
3557 case 0xd8: // offi pa,byte
3558 OFFI_IO(P_A); break;
3559 case 0xd9: // offi pb,byte
3560 OFFI_IO(P_B); break;
3561 case 0xda: // offi pc,byte
3562 OFFI_IO(P_C); break;
3563 case 0xdb: // offi mk,byte
3565 case 0xe0: // sui pa,byte
3567 case 0xe1: // sui pb,byte
3569 case 0xe2: // sui pc,byte
3571 case 0xe3: // sui mk,byte
3573 case 0xe8: // nei pa,byte
3575 case 0xe9: // nei pb,byte
3577 case 0xea: // nei pc,byte
3579 case 0xeb: // nei mk,byte
3581 case 0xf0: // sbi pa,byte
3583 case 0xf1: // sbi pb,byte
3585 case 0xf2: // sbi pc,byte
3587 case 0xf3: // sbi mk,byte
3589 case 0xf8: // eqi pa,byte
3591 case 0xf9: // eqi pb,byte
3593 case 0xfa: // eqi pc,byte
3595 case 0xfb: // eqi mk,byte
3598 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 64 %2x\n"), prevPC, ope);
3602 void UPD7801::OP70()
3604 uint8_t ope = FETCH8();
3605 period += op70[ope].clock;
3608 case 0x0e: // sspd word
3609 WM16(FETCH16(), SP); break;
3610 case 0x0f: // lspd word
3611 SP = RM16(FETCH16()); break;
3612 case 0x1e: // sbcd word
3613 WM16(FETCH16(), BC); break;
3614 case 0x1f: // lbcd word
3615 BC = RM16(FETCH16()); break;
3616 case 0x2e: // sded word
3617 WM16(FETCH16(), DE); break;
3618 case 0x2f: // lded word
3619 DE = RM16(FETCH16()); break;
3620 case 0x3e: // shld word
3621 WM16(FETCH16(), HL); break;
3622 case 0x3f: // lhld word
3623 HL = RM16(FETCH16()); break;
3624 case 0x68: // mov v,word
3625 _V = RM8(FETCH16());
3627 case 0x69: // mov a,word
3628 _A = RM8(FETCH16()); break;
3629 case 0x6a: // mov b,word
3630 _B = RM8(FETCH16()); break;
3631 case 0x6b: // mov c,word
3632 _C = RM8(FETCH16()); break;
3633 case 0x6c: // mov d,word
3634 _D = RM8(FETCH16()); break;
3635 case 0x6d: // mov e,word
3636 _E = RM8(FETCH16()); break;
3637 case 0x6e: // mov h,word
3638 _H = RM8(FETCH16()); break;
3639 case 0x6f: // mov l,word
3640 _L = RM8(FETCH16()); break;
3641 case 0x78: // mov word,v
3642 WM8(FETCH16(), _V); break;
3643 case 0x79: // mov word,a
3644 WM8(FETCH16(), _A); break;
3645 case 0x7a: // mov word,b
3646 WM8(FETCH16(), _B); break;
3647 case 0x7b: // mov word,c
3648 WM8(FETCH16(), _C); break;
3649 case 0x7c: // mov word,d
3650 WM8(FETCH16(), _D); break;
3651 case 0x7d: // mov word,e
3652 WM8(FETCH16(), _E); break;
3653 case 0x7e: // mov word,h
3654 WM8(FETCH16(), _H); break;
3655 case 0x7f: // mov word,l
3656 WM8(FETCH16(), _L); break;
3657 case 0x89: // anax b
3659 case 0x8a: // anax d
3661 case 0x8b: // anax h
3663 case 0x8c: // anax d+
3665 case 0x8d: // anax h+
3667 case 0x8e: // anax d-
3669 case 0x8f: // anax h-
3671 case 0x91: // xrax b
3673 case 0x92: // xrax d
3675 case 0x93: // xrax h
3677 case 0x94: // xrax d+
3679 case 0x95: // xrax h+
3681 case 0x96: // xrax d-
3683 case 0x97: // xrax h-
3685 case 0x99: // orax b
3687 case 0x9a: // orax d
3689 case 0x9b: // orax h
3691 case 0x9c: // orax d+
3693 case 0x9d: // orax h+
3695 case 0x9e: // orax d-
3697 case 0x9f: // orax h-
3699 case 0xa1: // addncx b
3701 case 0xa2: // addncx d
3703 case 0xa3: // addncx h
3705 case 0xa4: // addncx d+
3706 ADDNCX(DE++); break;
3707 case 0xa5: // addncx h+
3708 ADDNCX(HL++); break;
3709 case 0xa6: // addncx d-
3710 ADDNCX(DE--); break;
3711 case 0xa7: // addncx h-
3712 ADDNCX(HL--); break;
3713 case 0xa9: // gtax b
3715 case 0xaa: // gtax d
3717 case 0xab: // gtax h
3719 case 0xac: // gtax d+
3721 case 0xad: // gtax h+
3723 case 0xae: // gtax d-
3725 case 0xaf: // gtax h-
3727 case 0xb1: // subnbx b
3729 case 0xb2: // subnbx d
3731 case 0xb3: // subnbx h
3733 case 0xb4: // subnbx d+
3734 SUBNBX(DE++); break;
3735 case 0xb5: // subnbx h+
3736 SUBNBX(HL++); break;
3737 case 0xb6: // subnbx d-
3738 SUBNBX(DE--); break;
3739 case 0xb7: // subnbx h-
3740 SUBNBX(HL--); break;
3741 case 0xb9: // ltax b
3743 case 0xba: // ltax d
3745 case 0xbb: // ltax h
3747 case 0xbc: // ltax d+
3749 case 0xbd: // ltax h+
3751 case 0xbe: // ltax d-
3753 case 0xbf: // ltax h-
3755 case 0xc1: // addx b
3757 case 0xc2: // addx d
3759 case 0xc3: // addx h
3761 case 0xc4: // addx d+
3763 case 0xc5: // addx h+
3765 case 0xc6: // addx d-
3767 case 0xc7: // addx h-
3769 case 0xc9: // onax b
3771 case 0xca: // onax d
3773 case 0xcb: // onax h
3775 case 0xcc: // onax d+
3777 case 0xcd: // onax h+
3779 case 0xce: // onax d-
3781 case 0xcf: // onax h-
3783 case 0xd1: // adcx b
3785 case 0xd2: // adcx d
3787 case 0xd3: // adcx h
3789 case 0xd4: // adcx d+
3791 case 0xd5: // adcx h+
3793 case 0xd6: // adcx d-
3795 case 0xd7: // adcx h-
3797 case 0xd9: // offax b
3799 case 0xda: // offax d
3801 case 0xdb: // offax h
3803 case 0xdc: // offax d+
3805 case 0xdd: // offax h+
3807 case 0xde: // offax d-
3809 case 0xdf: // offax h-
3811 case 0xe1: // subx b
3813 case 0xe2: // subx d
3815 case 0xe3: // subx h
3817 case 0xe4: // subx d+
3819 case 0xe5: // subx h+
3821 case 0xe6: // subx d-
3823 case 0xe7: // subx h-
3825 case 0xe9: // neax b
3827 case 0xea: // neax d
3829 case 0xeb: // neax h
3831 case 0xec: // neax d+
3833 case 0xed: // neax h+
3835 case 0xee: // neax d-
3837 case 0xef: // neax h-
3839 case 0xf1: // sbbx b
3841 case 0xf2: // sbbx d
3843 case 0xf3: // sbbx h
3845 case 0xf4: // sbbx d+
3847 case 0xf5: // sbbx h+
3849 case 0xf6: // sbbx d-
3851 case 0xf7: // sbbx h-
3853 case 0xf9: // eqax b
3855 case 0xfa: // eqax d
3857 case 0xfb: // eqax h
3859 case 0xfc: // eqax d+
3861 case 0xfd: // eqax h+
3863 case 0xfe: // eqax d-
3865 case 0xff: // eqax h-
3868 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 70 %2x\n"), prevPC, ope);
3872 void UPD7801::OP74()
3874 uint8_t ope = FETCH8();
3875 period += op74[ope].clock;
3878 case 0x88: // anaw wa
3880 case 0x90: // xraw wa
3882 case 0x98: // oraw wa
3884 case 0xa0: // addncw wa
3886 case 0xa8: // gtaw wa
3888 case 0xb0: // subnbw wa
3890 case 0xb8: // ltaw wa
3892 case 0xc0: // addw wa
3894 case 0xc8: // onaw wa
3896 case 0xd0: // adcw wa
3898 case 0xd8: // offaw wa
3900 case 0xe0: // subw wa
3902 case 0xe8: // neaw wa
3904 case 0xf0: // sbbw wa
3906 case 0xf8: // eqaw wa
3909 this->out_debug_log(_T("PC=%4x\tCPU\tUNKNOWN OP : 74 %2x\n"), prevPC, ope);
3913 #define STATE_VERSION 4
3915 bool UPD7801::process_state(FILEIO* state_fio, bool loading)
3917 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
3920 if(!state_fio->StateCheckInt32(this_device_id)) {
3923 if(__USE_DEBUGGER) {
3924 state_fio->StateValue(total_count);
3926 state_fio->StateValue(count);
3927 state_fio->StateValue(period);
3928 state_fio->StateValue(scount);
3929 state_fio->StateValue(tcount);
3930 state_fio->StateValue(wait);
3931 state_fio->StateArray(regs, sizeof(regs), 1);
3932 state_fio->StateValue(SP);
3933 state_fio->StateValue(PC);
3934 state_fio->StateValue(prevPC);
3935 state_fio->StateValue(PSW);
3936 state_fio->StateValue(IRR);
3937 state_fio->StateValue(IFF);
3938 state_fio->StateValue(SIRQ);
3939 state_fio->StateValue(HALT);
3940 state_fio->StateValue(MK);
3941 state_fio->StateValue(MB);
3942 state_fio->StateValue(MC);
3943 state_fio->StateValue(TM0);
3944 state_fio->StateValue(TM1);
3945 state_fio->StateValue(SR);
3946 state_fio->StateValue(SAK);
3947 state_fio->StateValue(TO);
3948 state_fio->StateValue(HLDA);
3949 state_fio->StateValue(PORTC);
3950 state_fio->StateValue(SI);
3951 state_fio->StateValue(SCK);
3952 state_fio->StateValue(sio_count);
3955 if(__USE_DEBUGGER) {
3957 prev_total_count = total_count;