OXYGENHUB
◆ main openmsx / src / debugger / DasmTables.cc
15.6 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#include "DasmTables.hh"
2
3
namespace openmsx {
4
5
/*
6
 * Letter codes in the instructions:
7
 *
8
 *   A - Address
9
 *   B - Byte value
10
 *   R - Relative jump offset
11
 *   W - Word value
12
 *   X - Indexed address ( 3 byte )
13
 *   Y - Indexed address ( 4 byte )
14
 *   I - IX or IY register
15
 *   ! - Invalid opcode
16
 *   @ - Invalid opcode
17
 *   # - Invalid opcode
18
 */
19
20
const std::array<const char*, 256> mnemonic_xx_cb =
21
{
22
	"#","#","#","#","#","#","rlc Y"  ,"#",
23
	"#","#","#","#","#","#","rrc Y"  ,"#",
24
	"#","#","#","#","#","#","rl Y"   ,"#",
25
	"#","#","#","#","#","#","rr Y"   ,"#",
26
	"#","#","#","#","#","#","sla Y"  ,"#",
27
	"#","#","#","#","#","#","sra Y"  ,"#",
28
	"#","#","#","#","#","#","sll Y"  ,"#",
29
	"#","#","#","#","#","#","srl Y"  ,"#",
30
	"#","#","#","#","#","#","bit 0,Y","#",
31
	"#","#","#","#","#","#","bit 1,Y","#",
32
	"#","#","#","#","#","#","bit 2,Y","#",
33
	"#","#","#","#","#","#","bit 3,Y","#",
34
	"#","#","#","#","#","#","bit 4,Y","#",
35
	"#","#","#","#","#","#","bit 5,Y","#",
36
	"#","#","#","#","#","#","bit 6,Y","#",
37
	"#","#","#","#","#","#","bit 7,Y","#",
38
	"#","#","#","#","#","#","res 0,Y","#",
39
	"#","#","#","#","#","#","res 1,Y","#",
40
	"#","#","#","#","#","#","res 2,Y","#",
41
	"#","#","#","#","#","#","res 3,Y","#",
42
	"#","#","#","#","#","#","res 4,Y","#",
43
	"#","#","#","#","#","#","res 5,Y","#",
44
	"#","#","#","#","#","#","res 6,Y","#",
45
	"#","#","#","#","#","#","res 7,Y","#",
46
	"#","#","#","#","#","#","set 0,Y","#",
47
	"#","#","#","#","#","#","set 1,Y","#",
48
	"#","#","#","#","#","#","set 2,Y","#",
49
	"#","#","#","#","#","#","set 3,Y","#",
50
	"#","#","#","#","#","#","set 4,Y","#",
51
	"#","#","#","#","#","#","set 5,Y","#",
52
	"#","#","#","#","#","#","set 6,Y","#",
53
	"#","#","#","#","#","#","set 7,Y","#"
54
};
55
56
const std::array<const char*, 256> mnemonic_cb =
57
{
58
	"rlc b"  ,"rlc c"  ,"rlc d"  ,"rlc e"  ,"rlc h"  ,"rlc l"  ,"rlc (hl)"  ,"rlc a"  ,
59
	"rrc b"  ,"rrc c"  ,"rrc d"  ,"rrc e"  ,"rrc h"  ,"rrc l"  ,"rrc (hl)"  ,"rrc a"  ,
60
	"rl b"   ,"rl c"   ,"rl d"   ,"rl e"   ,"rl h"   ,"rl l"   ,"rl (hl)"   ,"rl a"   ,
61
	"rr b"   ,"rr c"   ,"rr d"   ,"rr e"   ,"rr h"   ,"rr l"   ,"rr (hl)"   ,"rr a"   ,
62
	"sla b"  ,"sla c"  ,"sla d"  ,"sla e"  ,"sla h"  ,"sla l"  ,"sla (hl)"  ,"sla a"  ,
63
	"sra b"  ,"sra c"  ,"sra d"  ,"sra e"  ,"sra h"  ,"sra l"  ,"sra (hl)"  ,"sra a"  ,
64
	"sll b"  ,"sll c"  ,"sll d"  ,"sll e"  ,"sll h"  ,"sll l"  ,"sll (hl)"  ,"sll a"  ,
65
	"srl b"  ,"srl c"  ,"srl d"  ,"srl e"  ,"srl h"  ,"srl l"  ,"srl (hl)"  ,"srl a"  ,
66
	"bit 0,b","bit 0,c","bit 0,d","bit 0,e","bit 0,h","bit 0,l","bit 0,(hl)","bit 0,a",
67
	"bit 1,b","bit 1,c","bit 1,d","bit 1,e","bit 1,h","bit 1,l","bit 1,(hl)","bit 1,a",
68
	"bit 2,b","bit 2,c","bit 2,d","bit 2,e","bit 2,h","bit 2,l","bit 2,(hl)","bit 2,a",
69
	"bit 3,b","bit 3,c","bit 3,d","bit 3,e","bit 3,h","bit 3,l","bit 3,(hl)","bit 3,a",
70
	"bit 4,b","bit 4,c","bit 4,d","bit 4,e","bit 4,h","bit 4,l","bit 4,(hl)","bit 4,a",
71
	"bit 5,b","bit 5,c","bit 5,d","bit 5,e","bit 5,h","bit 5,l","bit 5,(hl)","bit 5,a",
72
	"bit 6,b","bit 6,c","bit 6,d","bit 6,e","bit 6,h","bit 6,l","bit 6,(hl)","bit 6,a",
73
	"bit 7,b","bit 7,c","bit 7,d","bit 7,e","bit 7,h","bit 7,l","bit 7,(hl)","bit 7,a",
74
	"res 0,b","res 0,c","res 0,d","res 0,e","res 0,h","res 0,l","res 0,(hl)","res 0,a",
75
	"res 1,b","res 1,c","res 1,d","res 1,e","res 1,h","res 1,l","res 1,(hl)","res 1,a",
76
	"res 2,b","res 2,c","res 2,d","res 2,e","res 2,h","res 2,l","res 2,(hl)","res 2,a",
77
	"res 3,b","res 3,c","res 3,d","res 3,e","res 3,h","res 3,l","res 3,(hl)","res 3,a",
78
	"res 4,b","res 4,c","res 4,d","res 4,e","res 4,h","res 4,l","res 4,(hl)","res 4,a",
79
	"res 5,b","res 5,c","res 5,d","res 5,e","res 5,h","res 5,l","res 5,(hl)","res 5,a",
80
	"res 6,b","res 6,c","res 6,d","res 6,e","res 6,h","res 6,l","res 6,(hl)","res 6,a",
81
	"res 7,b","res 7,c","res 7,d","res 7,e","res 7,h","res 7,l","res 7,(hl)","res 7,a",
82
	"set 0,b","set 0,c","set 0,d","set 0,e","set 0,h","set 0,l","set 0,(hl)","set 0,a",
83
	"set 1,b","set 1,c","set 1,d","set 1,e","set 1,h","set 1,l","set 1,(hl)","set 1,a",
84
	"set 2,b","set 2,c","set 2,d","set 2,e","set 2,h","set 2,l","set 2,(hl)","set 2,a",
85
	"set 3,b","set 3,c","set 3,d","set 3,e","set 3,h","set 3,l","set 3,(hl)","set 3,a",
86
	"set 4,b","set 4,c","set 4,d","set 4,e","set 4,h","set 4,l","set 4,(hl)","set 4,a",
87
	"set 5,b","set 5,c","set 5,d","set 5,e","set 5,h","set 5,l","set 5,(hl)","set 5,a",
88
	"set 6,b","set 6,c","set 6,d","set 6,e","set 6,h","set 6,l","set 6,(hl)","set 6,a",
89
	"set 7,b","set 7,c","set 7,d","set 7,e","set 7,h","set 7,l","set 7,(hl)","set 7,a"
90
};
91
92
const std::array<const char*, 256> mnemonic_ed =
93
{
94
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
95
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
96
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
97
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
98
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
99
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
100
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
101
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
102
	"in b,(c)","out (c),b","sbc hl,bc","ld (A),bc","neg","retn","im 0","ld i,a",
103
	"in c,(c)","out (c),c","adc hl,bc","ld bc,(A)","!"  ,"reti","!"   ,"ld r,a",
104
	"in d,(c)","out (c),d","sbc hl,de","ld (A),de","!"  ,"!"   ,"im 1","ld a,i",
105
	"in e,(c)","out (c),e","adc hl,de","ld de,(A)","!"  ,"!"   ,"im 2","ld a,r",
106
	"in h,(c)","out (c),h","sbc hl,hl","ld (A),hl*","!" ,"!"   ,"!"   ,"rrd"   ,
107
	"in l,(c)","out (c),l","adc hl,hl","ld hl,(A)*","!" ,"!"   ,"!"   ,"rld"   ,
108
	"in f,(c)","out (c),0","sbc hl,sp","ld (A),sp","!"  ,"!"   ,"!"   ,"!"     ,
109
	"in a,(c)","out (c),a","adc hl,sp","ld sp,(A)","!"  ,"!"   ,"!"   ,"!"     ,
110
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
111
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
112
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
113
	"!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
114
	"ldi"     ,"cpi"      ,"ini"      ,"outi"     ,"!"  ,"!"   ,"!"   ,"!"     ,
115
	"ldd"     ,"cpd"      ,"ind"      ,"outd"     ,"!"  ,"!"   ,"!"   ,"!"     ,
116
	"ldir"    ,"cpir"     ,"inir"     ,"otir"     ,"!"  ,"!"   ,"!"   ,"!"     ,
117
	"lddr"    ,"cpdr"     ,"indr"     ,"otdr"     ,"!"  ,"!"   ,"!"   ,"!"     ,
118
	"!"       ,"mulub a,b","!"        ,"muluw hl,bc","!","!"   ,"!"   ,"!"     ,
119
	"!"       ,"mulub a,c","!"        ,"!"        ,"!",  "!"   ,"!"   ,"!"     ,
120
	"!"       ,"mulub a,d","!"        ,"muluw hl,de","!","!"   ,"!"   ,"!"     ,
121
	"!"       ,"mulub a,e","!"        ,"!"        ,"!",  "!"   ,"!"   ,"!"     ,
122
	"!"       ,"mulub a,h","!"        ,"muluw hl,hl","!","!"   ,"!"   ,"!"     ,
123
	"!"       ,"mulub a,l","!"        ,"!"        ,"!",  "!"   ,"!"   ,"!"     ,
124
	"!"       ,"mulub a,(hl)","!"     ,"muluw hl,sp","!","!"   ,"!"   ,"!"     ,
125
	"!"       ,"mulub a,a","!"        ,"!"        ,"!",  "!"   ,"!"   ,"!"
126
};
127
128
const std::array<const char*, 256> mnemonic_xx =
129
{
130
	"@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
131
	"@"      ,"add I,bc","@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
132
	"@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
133
	"@"      ,"add I,de","@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
134
	"@"      ,"ld I,W"  ,"ld (A),I","inc I"    ,"inc Ih"  ,"dec Ih"  ,"ld Ih,B","@"      ,
135
	"@"      ,"add I,I" ,"ld I,(A)","dec I"    ,"inc Il"  ,"dec Il"  ,"ld Il,B","@"      ,
136
	"@"      ,"@"       ,"@"       ,"@"        ,"inc X"   ,"dec X"   ,"ld X,B" ,"@"      ,
137
	"@"      ,"add I,sp","@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
138
	"@"      ,"@"       ,"@"       ,"@"        ,"ld b,Ih" ,"ld b,Il" ,"ld b,X" ,"@"      ,
139
	"@"      ,"@"       ,"@"       ,"@"        ,"ld c,Ih" ,"ld c,Il" ,"ld c,X" ,"@"      ,
140
	"@"      ,"@"       ,"@"       ,"@"        ,"ld d,Ih" ,"ld d,Il" ,"ld d,X" ,"@"      ,
141
	"@"      ,"@"       ,"@"       ,"@"        ,"ld e,Ih" ,"ld e,Il" ,"ld e,X" ,"@"      ,
142
	"ld Ih,b","ld Ih,c" ,"ld Ih,d" ,"ld Ih,e"  ,"ld Ih,h" ,"ld Ih,l" ,"ld h,X" ,"ld Ih,a",
143
	"ld Il,b","ld Il,c" ,"ld Il,d" ,"ld Il,e"  ,"ld Il,h" ,"ld Il,l" ,"ld l,X" ,"ld Il,a",
144
	"ld X,b" ,"ld X,c"  ,"ld X,d"  ,"ld X,e"   ,"ld X,h"  ,"ld X,l"  ,"@"      ,"ld X,a" ,
145
	"@"      ,"@"       ,"@"       ,"@"        ,"ld a,Ih" ,"ld a,Il" ,"ld a,X" ,"@"      ,
146
	"@"      ,"@"       ,"@"       ,"@"        ,"add a,Ih","add a,Il","add a,X","@"      ,
147
	"@"      ,"@"       ,"@"       ,"@"        ,"adc a,Ih","adc a,Il","adc a,X","@"      ,
148
	"@"      ,"@"       ,"@"       ,"@"        ,"sub Ih"  ,"sub Il"  ,"sub X"  ,"@"      ,
149
	"@"      ,"@"       ,"@"       ,"@"        ,"sbc a,Ih","sbc a,Il","sbc a,X","@"      ,
150
	"@"      ,"@"       ,"@"       ,"@"        ,"and Ih"  ,"and Il"  ,"and X"  ,"@"      ,
151
	"@"      ,"@"       ,"@"       ,"@"        ,"xor Ih"  ,"xor Il"  ,"xor X"  ,"@"      ,
152
	"@"      ,"@"       ,"@"       ,"@"        ,"or Ih"   ,"or Il"   ,"or X"   ,"@"      ,
153
	"@"      ,"@"       ,"@"       ,"@"        ,"cp Ih"   ,"cp Il"   ,"cp X"   ,"@"      ,
154
	"@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
155
	"@"      ,"@"       ,"@"       ,"fd cb"    ,"@"       ,"@"       ,"@"      ,"@"      ,
156
	"@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
157
	"@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
158
	"@"      ,"pop I"   ,"@"       ,"ex (sp),I","@"       ,"push I"  ,"@"      ,"@"      ,
159
	"@"      ,"jp (I)"  ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
160
	"@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
161
	"@"      ,"ld sp,I" ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"
162
};
163
164
const std::array<const char*, 256> mnemonic_main =
165
{
166
	"nop"      ,"ld bc,W"  ,"ld (bc),a","inc bc"    ,"inc b"    ,"dec b"    ,"ld b,B"    ,"rlca"     ,
167
	"ex af,af'","add hl,bc","ld a,(bc)","dec bc"    ,"inc c"    ,"dec c"    ,"ld c,B"    ,"rrca"     ,
168
	"djnz R"   ,"ld de,W"  ,"ld (de),a","inc de"    ,"inc d"    ,"dec d"    ,"ld d,B"    ,"rla"      ,
169
	"jr R"     ,"add hl,de","ld a,(de)","dec de"    ,"inc e"    ,"dec e"    ,"ld e,B"    ,"rra"      ,
170
	"jr nz,R"  ,"ld hl,W"  ,"ld (A),hl","inc hl"    ,"inc h"    ,"dec h"    ,"ld h,B"    ,"daa"      ,
171
	"jr z,R"   ,"add hl,hl","ld hl,(A)","dec hl"    ,"inc l"    ,"dec l"    ,"ld l,B"    ,"cpl"      ,
172
	"jr nc,R"  ,"ld sp,W"  ,"ld (A),a" ,"inc sp"    ,"inc (hl)" ,"dec (hl)" ,"ld (hl),B" ,"scf"      ,
173
	"jr c,R"   ,"add hl,sp","ld a,(A)" ,"dec sp"    ,"inc a"    ,"dec a"    ,"ld a,B"    ,"ccf"      ,
174
	"ld b,b"   ,"ld b,c"   ,"ld b,d"   ,"ld b,e"    ,"ld b,h"   ,"ld b,l"   ,"ld b,(hl)" ,"ld b,a"   ,
175
	"ld c,b"   ,"ld c,c"   ,"ld c,d"   ,"ld c,e"    ,"ld c,h"   ,"ld c,l"   ,"ld c,(hl)" ,"ld c,a"   ,
176
	"ld d,b"   ,"ld d,c"   ,"ld d,d"   ,"ld d,e"    ,"ld d,h"   ,"ld d,l"   ,"ld d,(hl)" ,"ld d,a"   ,
177
	"ld e,b"   ,"ld e,c"   ,"ld e,d"   ,"ld e,e"    ,"ld e,h"   ,"ld e,l"   ,"ld e,(hl)" ,"ld e,a"   ,
178
	"ld h,b"   ,"ld h,c"   ,"ld h,d"   ,"ld h,e"    ,"ld h,h"   ,"ld h,l"   ,"ld h,(hl)" ,"ld h,a"   ,
179
	"ld l,b"   ,"ld l,c"   ,"ld l,d"   ,"ld l,e"    ,"ld l,h"   ,"ld l,l"   ,"ld l,(hl)" ,"ld l,a"   ,
180
	"ld (hl),b","ld (hl),c","ld (hl),d","ld (hl),e" ,"ld (hl),h","ld (hl),l","halt"      ,"ld (hl),a",
181
	"ld a,b"   ,"ld a,c"   ,"ld a,d"   ,"ld a,e"    ,"ld a,h"   ,"ld a,l"   ,"ld a,(hl)" ,"ld a,a"   ,
182
	"add a,b"  ,"add a,c"  ,"add a,d"  ,"add a,e"   ,"add a,h"  ,"add a,l"  ,"add a,(hl)","add a,a"  ,
183
	"adc a,b"  ,"adc a,c"  ,"adc a,d"  ,"adc a,e"   ,"adc a,h"  ,"adc a,l"  ,"adc a,(hl)","adc a,a"  ,
184
	"sub b"    ,"sub c"    ,"sub d"    ,"sub e"     ,"sub h"    ,"sub l"    ,"sub (hl)"  ,"sub a"    ,
185
	"sbc a,b"  ,"sbc a,c"  ,"sbc a,d"  ,"sbc a,e"   ,"sbc a,h"  ,"sbc a,l"  ,"sbc a,(hl)","sbc a,a"  ,
186
	"and b"    ,"and c"    ,"and d"    ,"and e"     ,"and h"    ,"and l"    ,"and (hl)"  ,"and a"    ,
187
	"xor b"    ,"xor c"    ,"xor d"    ,"xor e"     ,"xor h"    ,"xor l"    ,"xor (hl)"  ,"xor a"    ,
188
	"or b"     ,"or c"     ,"or d"     ,"or e"      ,"or h"     ,"or l"     ,"or (hl)"   ,"or a"     ,
189
	"cp b"     ,"cp c"     ,"cp d"     ,"cp e"      ,"cp h"     ,"cp l"     ,"cp (hl)"   ,"cp a"     ,
190
	"ret nz"   ,"pop bc"   ,"jp nz,A"  ,"jp A"      ,"call nz,A","push bc"  ,"add a,B"   ,"rst 00h"  ,
191
	"ret z"    ,"ret"      ,"jp z,A"   ,"cb"        ,"call z,A" ,"call A"   ,"adc a,B"   ,"rst 08h"  ,
192
	"ret nc"   ,"pop de"   ,"jp nc,A"  ,"out (B),a" ,"call nc,A","push de"  ,"sub B"     ,"rst 10h"  ,
193
	"ret c"    ,"exx"      ,"jp c,A"   ,"in a,(B)"  ,"call c,A" ,"dd"       ,"sbc a,B"   ,"rst 18h"  ,
194
	"ret po"   ,"pop hl"   ,"jp po,A"  ,"ex (sp),hl","call po,A","push hl"  ,"and B"     ,"rst 20h"  ,
195
	"ret pe"   ,"jp (hl)"  ,"jp pe,A"  ,"ex de,hl"  ,"call pe,A","ed"       ,"xor B"     ,"rst 28h"  ,
196
	"ret p"    ,"pop af"   ,"jp p,A"   ,"di"        ,"call p,A" ,"push af"  ,"or B"      ,"rst 30h"  ,
197
	"ret m"    ,"ld sp,hl" ,"jp m,A"   ,"ei"        ,"call m,A" ,"fd"       ,"cp B"      ,"rst 38h"
198
};
199
200
static constexpr uint8_t D = 8; // DD or FD
201
static constexpr uint8_t E = 4; // ED
202
const std::array<uint8_t, 3uz * 256> instr_len_tab = {
203
	// main
204
	1, 3, 1, 1, 1, 1, 2, 1,  1, 1, 1, 1, 1, 1, 2, 1, // 00
205
	2, 3, 1, 1, 1, 1, 2, 1,  2, 1, 1, 1, 1, 1, 2, 1, // 10
206
	2, 3, 3, 1, 1, 1, 2, 1,  2, 1, 3, 1, 1, 1, 2, 1, // 20
207
	2, 3, 3, 1, 1, 1, 2, 1,  2, 1, 3, 1, 1, 1, 2, 1, // 30
208
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // 40
209
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // 50
210
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // 60
211
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // 70
212
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // 80
213
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // 90
214
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // A0
215
	1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, // B0
216
	1, 1, 3, 3, 3, 1, 2, 1,  1, 1, 3, 2, 3, 3, 2, 1, // C0
217
	1, 1, 3, 2, 3, 1, 2, 1,  1, 1, 3, 2, 3, D, 2, 1, // D0
218
	1, 1, 3, 1, 3, 1, 2, 1,  1, 1, 3, 1, 3, E, 2, 1, // E0
219
	1, 1, 3, 1, 3, 1, 2, 1,  1, 1, 3, 1, 3, D, 2, 1, // F0
220
221
	// ED
222
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 00
223
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 10
224
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 20
225
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 30
226
	2, 2, 2, 4, 2, 2, 2, 2,  2, 2, 2, 4, 2, 2, 2, 2, // 40
227
	2, 2, 2, 4, 2, 2, 2, 2,  2, 2, 2, 4, 2, 2, 2, 2, // 50
228
	2, 2, 2, 4, 2, 2, 2, 2,  2, 2, 2, 4, 2, 2, 2, 2, // 60
229
	2, 2, 2, 4, 2, 2, 2, 2,  2, 2, 2, 4, 2, 2, 2, 2, // 70
230
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 80
231
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 90
232
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // A0
233
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // B0
234
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // C0
235
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // D0
236
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // E0
237
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // F0
238
239
	// DD or FD
240
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 00
241
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 10
242
	2, 4, 4, 2, 2, 2, 3, 2,  2, 2 ,4, 2, 2, 2, 3, 2, // 20
243
	2, 2, 2, 2, 3, 3, 4, 2,  2, 2, 2, 2, 2, 2, 2, 2, // 30
244
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // 40
245
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // 50
246
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // 60
247
	3, 3, 3, 3, 3, 3, 2, 3,  2, 2, 2, 2, 2, 2, 3, 2, // 70
248
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // 80
249
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // 90
250
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // A0
251
	2, 2, 2, 2, 2, 2, 3, 2,  2, 2, 2, 2, 2, 2, 3, 2, // B0
252
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 4, 2, 2, 2, 2, // C0
253
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // D0
254
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // E0
255
	2, 2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2, 2, // F0
256
};
257
258
} // namespace openmsx