Commit 8ae6850

Nick committed on
Initial work on YaSE core
commit 8ae6850c7bde3dc6240bfc11aefd7f74f62b4480 parent 2a7b7a9
5 changed files +3551−4116
AddedCpu/PROCS.INC +200−0
@@ -0,0 +1,200 @@
1 procedure add16(Var first:Word;second:Word);
2 begin
3 qtemp.Q:=longint(first)+longint(second);
4 first:=qtemp.w1;
5 af.l:=(af.l and $C4) OR (qtemp.b2 and $38);
6 if qtemp.b3=0 then af.l:=af.l and 254 (* reset Cf *) else
7 af.l:=af.l or 1;(* set Cf *)
8 end;
9
10 procedure adc16(first,second:Word);
11 begin
12 qtemp.Q:=longint(first)+longint(second)+(af.l and 1);
13 af.l:=(qtemp.b2 and $B8);
14 if qtemp.b3=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
15 if qtemp.w1>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
16 if ((first XOR qtemp.w1) SHR 15>0) and
17 ((first XOR second) SHR 15=0) then af.l:=af.l or 4 (* set Pf *) else
18 af.l:=af.l and 251;(* reset Pf *)
19 hl.W:=qtemp.w1;
20 end;
21
22 procedure sbc16(first,second:Word);
23 begin
24 qtemp.Q:=longint(first)-longint(second)-(af.l and 1);
25 af.l:=(qtemp.b2 and $B8) OR 2;
26 if qtemp.b4=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
27 if qtemp.w1>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
28 if ((first XOR qtemp.w1) SHR 15>0) and
29 ((second XOR qtemp.w1) SHR 15=0) then af.l:=af.l or 4 (* set Pf *) else
30 af.l:=af.l and 251 ;(* reset Pf *)
31 hl.W:=qtemp.w1;
32 end;
33
34 procedure add8(Lo,Pls:Byte);
35 begin
36 ptemp.W:=Lo+Pls;
37 if ptemp.h=0 then
38 begin
39 ptemp.h:=ptemp.l;
40 ptemp.l:=ptemp.l and 254; (* reset Cf *)
41 end
42 else
43 begin
44 ptemp.h:=ptemp.l;
45 ptemp.l:=ptemp.l or 1;(* set Cf *)
46 end;
47 ptemp.l:=ptemp.l and 253;(* reset Nf *)
48 if ptemp.h>0 then
49 ptemp.l:=ptemp.l and 191 (* reset Zf *)
50 else
51 ptemp.l:=ptemp.l or 64;(* set Zf *)
52 if ((Lo XOR Pls XOR ptemp.h) and 16>0) then
53 ptemp.l:=ptemp.l or 16 (* set Hf *)
54 else
55 ptemp.l:=ptemp.l and 239;(* reset Hf *)
56 if ((Lo XOR ptemp.h) SHR 7>0) and ((Lo XOR Pls) SHR 7=0) then
57 ptemp.l:=ptemp.l or 4 (* set Pf *)
58 else
59 ptemp.l:=ptemp.l and 251;(* reset Pf *)
60 af.W:=ptemp.W;
61 end;
62
63 procedure sub8(Lo,Mns:Byte);
64 begin
65 ptemp.W:=Lo-Mns;
66 if ptemp.h=0 then
67 begin
68 ptemp.h:=ptemp.l;
69 ptemp.l:=ptemp.l and 254; (* reset Cf *)
70 end
71 else
72 begin
73 ptemp.h:=ptemp.l;
74 ptemp.l:=ptemp.l or 1;(* set Cf *)
75 end;
76 ptemp.l:=ptemp.l or 2; (* set Nf *)
77 if ptemp.h>0 then
78 ptemp.l:=ptemp.l and 191 (* reset Zf *)
79 else
80 ptemp.l:=ptemp.l or 64;(* set Zf *)
81 if (Lo XOR Mns XOR ptemp.h) and 16>0 then
82 ptemp.l:=ptemp.l or 16 (* set Hf *)
83 else
84 ptemp.l:=ptemp.l and 239;(* reset Hf *)
85 if ((Lo XOR ptemp.h) SHR 7>0) and ((Mns XOR ptemp.h) SHR 7=0)
86 then ptemp.l:=ptemp.l or 4 (* set Pf *)
87 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
88 af.W:=ptemp.W;
89 end;
90
91 procedure adc8(Lo,Pls:Byte);
92 begin
93 ptemp.W:=Lo+Pls+(af.l and 1);
94 if ptemp.h=0 then
95 begin
96 ptemp.h:=ptemp.l;
97 ptemp.l:=ptemp.l and 254; (* reset Cf *)
98 end
99 else
100 begin
101 ptemp.h:=ptemp.l;
102 ptemp.l:=ptemp.l or 1;(* set Cf *)
103 end;
104 ptemp.l:=ptemp.l and 253;(* reset Nf *)
105 if ptemp.h>0 then
106 ptemp.l:=ptemp.l and 191(* reset Zf *)
107 else
108 ptemp.l:=ptemp.l or 64;(* set Zf *)
109 if (Lo XOR Pls XOR ptemp.h) and 16>0 then
110 ptemp.l:=ptemp.l or 16 (* set Hf *)
111 else
112 ptemp.l:=ptemp.l and 239;(* reset Hf *)
113 if ((Lo XOR ptemp.h) SHR 7>0) and ((Lo XOR Pls) SHR 7=0) then
114 ptemp.l:=ptemp.l or 4 (* set Pf *)
115 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
116 af.W:=ptemp.W;
117 end;
118
119 procedure sbc8(Lo,Mns:Byte);
120 begin
121 ptemp.W:=Lo-Mns-(af.l and 1);
122 if ptemp.h=0 then
123 begin
124 ptemp.h:=ptemp.l;
125 ptemp.l:=ptemp.l and 254; (* reset Cf *)
126 end
127 else
128 begin
129 ptemp.h:=ptemp.l;
130 ptemp.l:=ptemp.l or 1;(* set Cf *)
131 end;
132 ptemp.l:=ptemp.l or 2; (* set Nf *)
133 if ptemp.h>0 then
134 ptemp.l:=ptemp.l and 191 (* reset Zf *)
135 else
136 ptemp.l:=ptemp.l or 64;(* set Zf *)
137 if (Lo XOR Mns XOR ptemp.h) and 16>0 then
138 ptemp.l:=ptemp.l or 16 (* set Hf *)
139 else
140 ptemp.l:=ptemp.l and 239;(* reset Hf *)
141 if ((Lo XOR ptemp.h) SHR 7>0) and ((Mns XOR ptemp.h) SHR 7=0)
142 then
143 ptemp.l:=ptemp.l or 4 (* set Pf *)
144 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
145 af.W:=ptemp.W;
146 end;
147
148 procedure cp_sub8(Lo,Mns:Byte);
149 begin
150 ptemp.W:=Lo-Mns;
151 af.l:=(Mns and 40) OR (ptemp.l and 215) OR 2;
152 if ptemp.l>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
153 if ptemp.h=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
154 if (Lo XOR Mns XOR ptemp.l) and 16>0 then
155 af.l:=af.l or 16 (* set Hf *)
156 else
157 af.l:=af.l and 239;(* reset Hf *)
158
159 if ((Lo XOR ptemp.l) SHR 7>0) and ((Mns XOR ptemp.l) SHR 7=0) then
160 af.l:=af.l or 4 (* set Pf *) else
161 af.l:=af.l and 251 ;(* reset Pf *)
162 end;
163
164 procedure anda(bval:Byte);
165 begin
166 af.h:=af.h and bval;
167 af.l:=16 or (af.h and 236) or parity[af.h];
168 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
169 end;
170
171 procedure ora(bval:byte);
172 begin
173 af.h:=af.h or bval;
174 af.l:=(af.h and 236) or parity[af.h];
175 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
176 end;
177
178 procedure xora(bval:byte);
179 begin
180 af.h:=af.h xor bval;
181 af.l:=(af.h and 236) or parity[af.h];
182 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
183 end;
184
185 procedure copy_b53(btemp:Word);
186 Begin
187 af.l:=(af.l and 215) or (btemp and 40);
188 end;
189
190 procedure pop(var wpval:Word);
191 Begin
192 wpval:=wordpeek(sp_.W);
193 inc(sp_.W,2);
194 end;
195
196 procedure push(wpval:Word);
197 Begin
198 dec(sp_.W,2);
199 wordpoke(sp_.W,wpval);
200 end;
AddedCpu/TABLES.INC +1193−0
@@ -0,0 +1,1193 @@
1 Const
2 PARITY:array[0..255] of byte=
3 (4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
4 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
5 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
6 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
7 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
8 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
9 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
10 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
11 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
12 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
13 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
14 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
15 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
16 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
17 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
18 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4);
19
20 RRA_F:Array[0..255] of Byte=(
21 $00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,
22 $01,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,
23 $08,$09,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,
24 $01,$00,$01,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,
25 $08,$09,$08,$09,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,
26 $21,$20,$21,$20,$21,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,
27 $28,$29,$28,$29,$28,$29,$20,$21,$20,$21,$20,$21,$20,$21,$20,
28 $21,$20,$21,$20,$21,$20,$21,$28,$29,$28,$29,$28,$29,$28,$29,
29 $28,$29,$28,$29,$28,$29,$28,$29,$00,$01,$00,$01,$00,$01,$00,
30 $01,$00,$01,$00,$01,$00,$01,$00,$01,$08,$09,$08,$09,$08,$09,
31 $08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$00,$01,$00,$01,$00,
32 $01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$08,$09,$08,$09,
33 $08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$20,$21,$20,
34 $21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$28,$29,
35 $28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$20,
36 $21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,
37 $28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,
38 $29);
39
40 RLCR_F:Array[0..255] of Byte=(
41 $44,$00,$00,$04,$08,$0C,$0C,$08,$00,$04,$04,$00,$0C,$08,$08,
42 $0C,$20,$24,$24,$20,$2C,$28,$28,$2C,$24,$20,$20,$24,$28,$2C,
43 $2C,$28,$00,$04,$04,$00,$0C,$08,$08,$0C,$04,$00,$00,$04,$08,
44 $0C,$0C,$08,$24,$20,$20,$24,$28,$2C,$2C,$28,$20,$24,$24,$20,
45 $2C,$28,$28,$2C,$80,$84,$84,$80,$8C,$88,$88,$8C,$84,$80,$80,
46 $84,$88,$8C,$8C,$88,$A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,$A0,$A4,
47 $A4,$A0,$AC,$A8,$A8,$AC,$84,$80,$80,$84,$88,$8C,$8C,$88,$80,
48 $84,$84,$80,$8C,$88,$88,$8C,$A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,
49 $A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,$01,$05,$05,$01,$0D,$09,$09,
50 $0D,$05,$01,$01,$05,$09,$0D,$0D,$09,$25,$21,$21,$25,$29,$2D,
51 $2D,$29,$21,$25,$25,$21,$2D,$29,$29,$2D,$05,$01,$01,$05,$09,
52 $0D,$0D,$09,$01,$05,$05,$01,$0D,$09,$09,$0D,$21,$25,$25,$21,
53 $2D,$29,$29,$2D,$25,$21,$21,$25,$29,$2D,$2D,$29,$85,$81,$81,
54 $85,$89,$8D,$8D,$89,$81,$85,$85,$81,$8D,$89,$89,$8D,$A1,$A5,
55 $A5,$A1,$AD,$A9,$A9,$AD,$A5,$A1,$A1,$A5,$A9,$AD,$AD,$A9,$81,
56 $85,$85,$81,$8D,$89,$89,$8D,$85,$81,$81,$85,$89,$8D,$8D,$89,
57 $A5,$A1,$A1,$A5,$A9,$AD,$AD,$A9,$A1,$A5,$A5,$A1,$AD,$A9,$A9,
58 $AD);
59
60 RLCR_A:Array[0..255] of Byte=(
61 $00,$02,$04,$06,$08,$0A,$0C,$0E,$10,$12,$14,$16,$18,$1A,$1C,
62 $1E,$20,$22,$24,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$38,$3A,
63 $3C,$3E,$40,$42,$44,$46,$48,$4A,$4C,$4E,$50,$52,$54,$56,$58,
64 $5A,$5C,$5E,$60,$62,$64,$66,$68,$6A,$6C,$6E,$70,$72,$74,$76,
65 $78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C,$8E,$90,$92,$94,
66 $96,$98,$9A,$9C,$9E,$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,
67 $B4,$B6,$B8,$BA,$BC,$BE,$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,
68 $D2,$D4,$D6,$D8,$DA,$DC,$DE,$E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,
69 $F0,$F2,$F4,$F6,$F8,$FA,$FC,$FE,$01,$03,$05,$07,$09,$0B,$0D,
70 $0F,$11,$13,$15,$17,$19,$1B,$1D,$1F,$21,$23,$25,$27,$29,$2B,
71 $2D,$2F,$31,$33,$35,$37,$39,$3B,$3D,$3F,$41,$43,$45,$47,$49,
72 $4B,$4D,$4F,$51,$53,$55,$57,$59,$5B,$5D,$5F,$61,$63,$65,$67,
73 $69,$6B,$6D,$6F,$71,$73,$75,$77,$79,$7B,$7D,$7F,$81,$83,$85,
74 $87,$89,$8B,$8D,$8F,$91,$93,$95,$97,$99,$9B,$9D,$9F,$A1,$A3,
75 $A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF,$C1,
76 $C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,
77 $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,$F1,$F3,$F5,$F7,$F9,$FB,$FD,
78 $FF);
79
80 SLA_F:Array[0..255] of Byte=(
81 $44,$00,$00,$04,$08,$0C,$0C,$08,$00,$04,$04,$00,$0C,$08,$08,
82 $0C,$20,$24,$24,$20,$2C,$28,$28,$2C,$24,$20,$20,$24,$28,$2C,
83 $2C,$28,$00,$04,$04,$00,$0C,$08,$08,$0C,$04,$00,$00,$04,$08,
84 $0C,$0C,$08,$24,$20,$20,$24,$28,$2C,$2C,$28,$20,$24,$24,$20,
85 $2C,$28,$28,$2C,$80,$84,$84,$80,$8C,$88,$88,$8C,$84,$80,$80,
86 $84,$88,$8C,$8C,$88,$A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,$A0,$A4,
87 $A4,$A0,$AC,$A8,$A8,$AC,$84,$80,$80,$84,$88,$8C,$8C,$88,$80,
88 $84,$84,$80,$8C,$88,$88,$8C,$A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,
89 $A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,$45,$01,$01,$05,$09,$0D,$0D,
90 $09,$01,$05,$05,$01,$0D,$09,$09,$0D,$21,$25,$25,$21,$2D,$29,
91 $29,$2D,$25,$21,$21,$25,$29,$2D,$2D,$29,$01,$05,$05,$01,$0D,
92 $09,$09,$0D,$05,$01,$01,$05,$09,$0D,$0D,$09,$25,$21,$21,$25,
93 $29,$2D,$2D,$29,$21,$25,$25,$21,$2D,$29,$29,$2D,$81,$85,$85,
94 $81,$8D,$89,$89,$8D,$85,$81,$81,$85,$89,$8D,$8D,$89,$A5,$A1,
95 $A1,$A5,$A9,$AD,$AD,$A9,$A1,$A5,$A5,$A1,$AD,$A9,$A9,$AD,$85,
96 $81,$81,$85,$89,$8D,$8D,$89,$81,$85,$85,$81,$8D,$89,$89,$8D,
97 $A1,$A5,$A5,$A1,$AD,$A9,$A9,$AD,$A5,$A1,$A1,$A5,$A9,$AD,$AD,
98 $A9);
99
100 SRA_F:Array[0..255] of Byte=(
101 $44,$45,$00,$01,$00,$01,$04,$05,$00,$01,$04,$05,$04,$05,$00,
102 $01,$08,$09,$0C,$0D,$0C,$0D,$08,$09,$0C,$0D,$08,$09,$08,$09,
103 $0C,$0D,$00,$01,$04,$05,$04,$05,$00,$01,$04,$05,$00,$01,$00,
104 $01,$04,$05,$0C,$0D,$08,$09,$08,$09,$0C,$0D,$08,$09,$0C,$0D,
105 $0C,$0D,$08,$09,$20,$21,$24,$25,$24,$25,$20,$21,$24,$25,$20,
106 $21,$20,$21,$24,$25,$2C,$2D,$28,$29,$28,$29,$2C,$2D,$28,$29,
107 $2C,$2D,$2C,$2D,$28,$29,$24,$25,$20,$21,$20,$21,$24,$25,$20,
108 $21,$24,$25,$24,$25,$20,$21,$28,$29,$2C,$2D,$2C,$2D,$28,$29,
109 $2C,$2D,$28,$29,$28,$29,$2C,$2D,$84,$85,$80,$81,$80,$81,$84,
110 $85,$80,$81,$84,$85,$84,$85,$80,$81,$88,$89,$8C,$8D,$8C,$8D,
111 $88,$89,$8C,$8D,$88,$89,$88,$89,$8C,$8D,$80,$81,$84,$85,$84,
112 $85,$80,$81,$84,$85,$80,$81,$80,$81,$84,$85,$8C,$8D,$88,$89,
113 $88,$89,$8C,$8D,$88,$89,$8C,$8D,$8C,$8D,$88,$89,$A0,$A1,$A4,
114 $A5,$A4,$A5,$A0,$A1,$A4,$A5,$A0,$A1,$A0,$A1,$A4,$A5,$AC,$AD,
115 $A8,$A9,$A8,$A9,$AC,$AD,$A8,$A9,$AC,$AD,$AC,$AD,$A8,$A9,$A4,
116 $A5,$A0,$A1,$A0,$A1,$A4,$A5,$A0,$A1,$A4,$A5,$A4,$A5,$A0,$A1,
117 $A8,$A9,$AC,$AD,$AC,$AD,$A8,$A9,$AC,$AD,$A8,$A9,$A8,$A9,$AC,
118 $AD);
119
120 SRA_A:Array[0..255] of Byte=(
121 $00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,
122 $07,$08,$08,$09,$09,$0A,$0A,$0B,$0B,$0C,$0C,$0D,$0D,$0E,$0E,
123 $0F,$0F,$10,$10,$11,$11,$12,$12,$13,$13,$14,$14,$15,$15,$16,
124 $16,$17,$17,$18,$18,$19,$19,$1A,$1A,$1B,$1B,$1C,$1C,$1D,$1D,
125 $1E,$1E,$1F,$1F,$20,$20,$21,$21,$22,$22,$23,$23,$24,$24,$25,
126 $25,$26,$26,$27,$27,$28,$28,$29,$29,$2A,$2A,$2B,$2B,$2C,$2C,
127 $2D,$2D,$2E,$2E,$2F,$2F,$30,$30,$31,$31,$32,$32,$33,$33,$34,
128 $34,$35,$35,$36,$36,$37,$37,$38,$38,$39,$39,$3A,$3A,$3B,$3B,
129 $3C,$3C,$3D,$3D,$3E,$3E,$3F,$3F,$C0,$C0,$C1,$C1,$C2,$C2,$C3,
130 $C3,$C4,$C4,$C5,$C5,$C6,$C6,$C7,$C7,$C8,$C8,$C9,$C9,$CA,$CA,
131 $CB,$CB,$CC,$CC,$CD,$CD,$CE,$CE,$CF,$CF,$D0,$D0,$D1,$D1,$D2,
132 $D2,$D3,$D3,$D4,$D4,$D5,$D5,$D6,$D6,$D7,$D7,$D8,$D8,$D9,$D9,
133 $DA,$DA,$DB,$DB,$DC,$DC,$DD,$DD,$DE,$DE,$DF,$DF,$E0,$E0,$E1,
134 $E1,$E2,$E2,$E3,$E3,$E4,$E4,$E5,$E5,$E6,$E6,$E7,$E7,$E8,$E8,
135 $E9,$E9,$EA,$EA,$EB,$EB,$EC,$EC,$ED,$ED,$EE,$EE,$EF,$EF,$F0,
136 $F0,$F1,$F1,$F2,$F2,$F3,$F3,$F4,$F4,$F5,$F5,$F6,$F6,$F7,$F7,
137 $F8,$F8,$F9,$F9,$FA,$FA,$FB,$FB,$FC,$FC,$FD,$FD,$FE,$FE,$FF,
138 $FF);
139
140 SLL_F:Array[0..255] of Byte=(
141 $00,$04,$04,$00,$0C,$08,$08,$0C,$04,$00,$00,$04,$08,$0C,$0C,
142 $08,$24,$20,$20,$24,$28,$2C,$2C,$28,$20,$24,$24,$20,$2C,$28,
143 $28,$2C,$04,$00,$00,$04,$08,$0C,$0C,$08,$00,$04,$04,$00,$0C,
144 $08,$08,$0C,$20,$24,$24,$20,$2C,$28,$28,$2C,$24,$20,$20,$24,
145 $28,$2C,$2C,$28,$84,$80,$80,$84,$88,$8C,$8C,$88,$80,$84,$84,
146 $80,$8C,$88,$88,$8C,$A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,$A4,$A0,
147 $A0,$A4,$A8,$AC,$AC,$A8,$80,$84,$84,$80,$8C,$88,$88,$8C,$84,
148 $80,$80,$84,$88,$8C,$8C,$88,$A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,
149 $A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,$01,$05,$05,$01,$0D,$09,$09,
150 $0D,$05,$01,$01,$05,$09,$0D,$0D,$09,$25,$21,$21,$25,$29,$2D,
151 $2D,$29,$21,$25,$25,$21,$2D,$29,$29,$2D,$05,$01,$01,$05,$09,
152 $0D,$0D,$09,$01,$05,$05,$01,$0D,$09,$09,$0D,$21,$25,$25,$21,
153 $2D,$29,$29,$2D,$25,$21,$21,$25,$29,$2D,$2D,$29,$85,$81,$81,
154 $85,$89,$8D,$8D,$89,$81,$85,$85,$81,$8D,$89,$89,$8D,$A1,$A5,
155 $A5,$A1,$AD,$A9,$A9,$AD,$A5,$A1,$A1,$A5,$A9,$AD,$AD,$A9,$81,
156 $85,$85,$81,$8D,$89,$89,$8D,$85,$81,$81,$85,$89,$8D,$8D,$89,
157 $A5,$A1,$A1,$A5,$A9,$AD,$AD,$A9,$A1,$A5,$A5,$A1,$AD,$A9,$A9,
158 $AD);
159
160 SLL_A:Array[0..255] of Byte=(
161 $01,$03,$05,$07,$09,$0B,$0D,$0F,$11,$13,$15,$17,$19,$1B,$1D,
162 $1F,$21,$23,$25,$27,$29,$2B,$2D,$2F,$31,$33,$35,$37,$39,$3B,
163 $3D,$3F,$41,$43,$45,$47,$49,$4B,$4D,$4F,$51,$53,$55,$57,$59,
164 $5B,$5D,$5F,$61,$63,$65,$67,$69,$6B,$6D,$6F,$71,$73,$75,$77,
165 $79,$7B,$7D,$7F,$81,$83,$85,$87,$89,$8B,$8D,$8F,$91,$93,$95,
166 $97,$99,$9B,$9D,$9F,$A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,
167 $B5,$B7,$B9,$BB,$BD,$BF,$C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,
168 $D3,$D5,$D7,$D9,$DB,$DD,$DF,$E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,
169 $F1,$F3,$F5,$F7,$F9,$FB,$FD,$FF,$01,$03,$05,$07,$09,$0B,$0D,
170 $0F,$11,$13,$15,$17,$19,$1B,$1D,$1F,$21,$23,$25,$27,$29,$2B,
171 $2D,$2F,$31,$33,$35,$37,$39,$3B,$3D,$3F,$41,$43,$45,$47,$49,
172 $4B,$4D,$4F,$51,$53,$55,$57,$59,$5B,$5D,$5F,$61,$63,$65,$67,
173 $69,$6B,$6D,$6F,$71,$73,$75,$77,$79,$7B,$7D,$7F,$81,$83,$85,
174 $87,$89,$8B,$8D,$8F,$91,$93,$95,$97,$99,$9B,$9D,$9F,$A1,$A3,
175 $A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF,$C1,
176 $C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,
177 $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,$F1,$F3,$F5,$F7,$F9,$FB,$FD,
178 $FF);
179
180 SRL_F:Array[0..255] of Byte=(
181 $44,$45,$00,$01,$00,$01,$04,$05,$00,$01,$04,$05,$04,$05,$00,
182 $01,$08,$09,$0C,$0D,$0C,$0D,$08,$09,$0C,$0D,$08,$09,$08,$09,
183 $0C,$0D,$00,$01,$04,$05,$04,$05,$00,$01,$04,$05,$00,$01,$00,
184 $01,$04,$05,$0C,$0D,$08,$09,$08,$09,$0C,$0D,$08,$09,$0C,$0D,
185 $0C,$0D,$08,$09,$20,$21,$24,$25,$24,$25,$20,$21,$24,$25,$20,
186 $21,$20,$21,$24,$25,$2C,$2D,$28,$29,$28,$29,$2C,$2D,$28,$29,
187 $2C,$2D,$2C,$2D,$28,$29,$24,$25,$20,$21,$20,$21,$24,$25,$20,
188 $21,$24,$25,$24,$25,$20,$21,$28,$29,$2C,$2D,$2C,$2D,$28,$29,
189 $2C,$2D,$28,$29,$28,$29,$2C,$2D,$00,$01,$04,$05,$04,$05,$00,
190 $01,$04,$05,$00,$01,$00,$01,$04,$05,$0C,$0D,$08,$09,$08,$09,
191 $0C,$0D,$08,$09,$0C,$0D,$0C,$0D,$08,$09,$04,$05,$00,$01,$00,
192 $01,$04,$05,$00,$01,$04,$05,$04,$05,$00,$01,$08,$09,$0C,$0D,
193 $0C,$0D,$08,$09,$0C,$0D,$08,$09,$08,$09,$0C,$0D,$24,$25,$20,
194 $21,$20,$21,$24,$25,$20,$21,$24,$25,$24,$25,$20,$21,$28,$29,
195 $2C,$2D,$2C,$2D,$28,$29,$2C,$2D,$28,$29,$28,$29,$2C,$2D,$20,
196 $21,$24,$25,$24,$25,$20,$21,$24,$25,$20,$21,$20,$21,$24,$25,
197 $2C,$2D,$28,$29,$28,$29,$2C,$2D,$28,$29,$2C,$2D,$2C,$2D,$28,
198 $29);
199
200 SRL_A:Array[0..255] of Byte=(
201 $00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,
202 $07,$08,$08,$09,$09,$0A,$0A,$0B,$0B,$0C,$0C,$0D,$0D,$0E,$0E,
203 $0F,$0F,$10,$10,$11,$11,$12,$12,$13,$13,$14,$14,$15,$15,$16,
204 $16,$17,$17,$18,$18,$19,$19,$1A,$1A,$1B,$1B,$1C,$1C,$1D,$1D,
205 $1E,$1E,$1F,$1F,$20,$20,$21,$21,$22,$22,$23,$23,$24,$24,$25,
206 $25,$26,$26,$27,$27,$28,$28,$29,$29,$2A,$2A,$2B,$2B,$2C,$2C,
207 $2D,$2D,$2E,$2E,$2F,$2F,$30,$30,$31,$31,$32,$32,$33,$33,$34,
208 $34,$35,$35,$36,$36,$37,$37,$38,$38,$39,$39,$3A,$3A,$3B,$3B,
209 $3C,$3C,$3D,$3D,$3E,$3E,$3F,$3F,$40,$40,$41,$41,$42,$42,$43,
210 $43,$44,$44,$45,$45,$46,$46,$47,$47,$48,$48,$49,$49,$4A,$4A,
211 $4B,$4B,$4C,$4C,$4D,$4D,$4E,$4E,$4F,$4F,$50,$50,$51,$51,$52,
212 $52,$53,$53,$54,$54,$55,$55,$56,$56,$57,$57,$58,$58,$59,$59,
213 $5A,$5A,$5B,$5B,$5C,$5C,$5D,$5D,$5E,$5E,$5F,$5F,$60,$60,$61,
214 $61,$62,$62,$63,$63,$64,$64,$65,$65,$66,$66,$67,$67,$68,$68,
215 $69,$69,$6A,$6A,$6B,$6B,$6C,$6C,$6D,$6D,$6E,$6E,$6F,$6F,$70,
216 $70,$71,$71,$72,$72,$73,$73,$74,$74,$75,$75,$76,$76,$77,$77,
217 $78,$78,$79,$79,$7A,$7A,$7B,$7B,$7C,$7C,$7D,$7D,$7E,$7E,$7F,
218 $7F);
219
220 SLA_A:Array[0..255] of Byte=(
221 $00,$02,$04,$06,$08,$0A,$0C,$0E,$10,$12,$14,$16,$18,$1A,$1C,
222 $1E,$20,$22,$24,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$38,$3A,
223 $3C,$3E,$40,$42,$44,$46,$48,$4A,$4C,$4E,$50,$52,$54,$56,$58,
224 $5A,$5C,$5E,$60,$62,$64,$66,$68,$6A,$6C,$6E,$70,$72,$74,$76,
225 $78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C,$8E,$90,$92,$94,
226 $96,$98,$9A,$9C,$9E,$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,
227 $B4,$B6,$B8,$BA,$BC,$BE,$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,
228 $D2,$D4,$D6,$D8,$DA,$DC,$DE,$E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,
229 $F0,$F2,$F4,$F6,$F8,$FA,$FC,$FE,$00,$02,$04,$06,$08,$0A,$0C,
230 $0E,$10,$12,$14,$16,$18,$1A,$1C,$1E,$20,$22,$24,$26,$28,$2A,
231 $2C,$2E,$30,$32,$34,$36,$38,$3A,$3C,$3E,$40,$42,$44,$46,$48,
232 $4A,$4C,$4E,$50,$52,$54,$56,$58,$5A,$5C,$5E,$60,$62,$64,$66,
233 $68,$6A,$6C,$6E,$70,$72,$74,$76,$78,$7A,$7C,$7E,$80,$82,$84,
234 $86,$88,$8A,$8C,$8E,$90,$92,$94,$96,$98,$9A,$9C,$9E,$A0,$A2,
235 $A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,$B4,$B6,$B8,$BA,$BC,$BE,$C0,
236 $C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,$D2,$D4,$D6,$D8,$DA,$DC,$DE,
237 $E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,$F0,$F2,$F4,$F6,$F8,$FA,$FC,
238 $FE);
239
240 RRCR_F:Array[0..255] of Byte=(
241 $44,$81,$00,$85,$00,$85,$04,$81,$00,$85,$04,$81,$04,$81,$00,
242 $85,$08,$8D,$0C,$89,$0C,$89,$08,$8D,$0C,$89,$08,$8D,$08,$8D,
243 $0C,$89,$00,$85,$04,$81,$04,$81,$00,$85,$04,$81,$00,$85,$00,
244 $85,$04,$81,$0C,$89,$08,$8D,$08,$8D,$0C,$89,$08,$8D,$0C,$89,
245 $0C,$89,$08,$8D,$20,$A5,$24,$A1,$24,$A1,$20,$A5,$24,$A1,$20,
246 $A5,$20,$A5,$24,$A1,$2C,$A9,$28,$AD,$28,$AD,$2C,$A9,$28,$AD,
247 $2C,$A9,$2C,$A9,$28,$AD,$24,$A1,$20,$A5,$20,$A5,$24,$A1,$20,
248 $A5,$24,$A1,$24,$A1,$20,$A5,$28,$AD,$2C,$A9,$2C,$A9,$28,$AD,
249 $2C,$A9,$28,$AD,$28,$AD,$2C,$A9,$00,$85,$04,$81,$04,$81,$00,
250 $85,$04,$81,$00,$85,$00,$85,$04,$81,$0C,$89,$08,$8D,$08,$8D,
251 $0C,$89,$08,$8D,$0C,$89,$0C,$89,$08,$8D,$04,$81,$00,$85,$00,
252 $85,$04,$81,$00,$85,$04,$81,$04,$81,$00,$85,$08,$8D,$0C,$89,
253 $0C,$89,$08,$8D,$0C,$89,$08,$8D,$08,$8D,$0C,$89,$24,$A1,$20,
254 $A5,$20,$A5,$24,$A1,$20,$A5,$24,$A1,$24,$A1,$20,$A5,$28,$AD,
255 $2C,$A9,$2C,$A9,$28,$AD,$2C,$A9,$28,$AD,$28,$AD,$2C,$A9,$20,
256 $A5,$24,$A1,$24,$A1,$20,$A5,$24,$A1,$20,$A5,$20,$A5,$24,$A1,
257 $2C,$A9,$28,$AD,$28,$AD,$2C,$A9,$28,$AD,$2C,$A9,$2C,$A9,$28,
258 $AD);
259
260 RRCR_A:Array[0..255] of Byte=(
261 $00,$80,$01,$81,$02,$82,$03,$83,$04,$84,$05,$85,$06,$86,$07,
262 $87,$08,$88,$09,$89,$0A,$8A,$0B,$8B,$0C,$8C,$0D,$8D,$0E,$8E,
263 $0F,$8F,$10,$90,$11,$91,$12,$92,$13,$93,$14,$94,$15,$95,$16,
264 $96,$17,$97,$18,$98,$19,$99,$1A,$9A,$1B,$9B,$1C,$9C,$1D,$9D,
265 $1E,$9E,$1F,$9F,$20,$A0,$21,$A1,$22,$A2,$23,$A3,$24,$A4,$25,
266 $A5,$26,$A6,$27,$A7,$28,$A8,$29,$A9,$2A,$AA,$2B,$AB,$2C,$AC,
267 $2D,$AD,$2E,$AE,$2F,$AF,$30,$B0,$31,$B1,$32,$B2,$33,$B3,$34,
268 $B4,$35,$B5,$36,$B6,$37,$B7,$38,$B8,$39,$B9,$3A,$BA,$3B,$BB,
269 $3C,$BC,$3D,$BD,$3E,$BE,$3F,$BF,$40,$C0,$41,$C1,$42,$C2,$43,
270 $C3,$44,$C4,$45,$C5,$46,$C6,$47,$C7,$48,$C8,$49,$C9,$4A,$CA,
271 $4B,$CB,$4C,$CC,$4D,$CD,$4E,$CE,$4F,$CF,$50,$D0,$51,$D1,$52,
272 $D2,$53,$D3,$54,$D4,$55,$D5,$56,$D6,$57,$D7,$58,$D8,$59,$D9,
273 $5A,$DA,$5B,$DB,$5C,$DC,$5D,$DD,$5E,$DE,$5F,$DF,$60,$E0,$61,
274 $E1,$62,$E2,$63,$E3,$64,$E4,$65,$E5,$66,$E6,$67,$E7,$68,$E8,
275 $69,$E9,$6A,$EA,$6B,$EB,$6C,$EC,$6D,$ED,$6E,$EE,$6F,$EF,$70,
276 $F0,$71,$F1,$72,$F2,$73,$F3,$74,$F4,$75,$F5,$76,$F6,$77,$F7,
277 $78,$F8,$79,$F9,$7A,$FA,$7B,$FB,$7C,$FC,$7D,$FD,$7E,$FE,$7F,
278 $FF);
279
280 INC_F:Array[0..255] of Byte=(
281 $00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$08,$08,$08,
282 $10,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$08,$08,
283 $08,$30,$20,$20,$20,$20,$20,$20,$20,$28,$28,$28,$28,$28,$28,
284 $28,$28,$30,$20,$20,$20,$20,$20,$20,$20,$28,$28,$28,$28,$28,
285 $28,$28,$28,$10,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,
286 $08,$08,$08,$08,$10,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,
287 $08,$08,$08,$08,$08,$30,$20,$20,$20,$20,$20,$20,$20,$28,$28,
288 $28,$28,$28,$28,$28,$28,$30,$20,$20,$20,$20,$20,$20,$20,$28,
289 $28,$28,$28,$28,$28,$28,$28,$94,$80,$80,$80,$80,$80,$80,$80,
290 $88,$88,$88,$88,$88,$88,$88,$88,$90,$80,$80,$80,$80,$80,$80,
291 $80,$88,$88,$88,$88,$88,$88,$88,$88,$B0,$A0,$A0,$A0,$A0,$A0,
292 $A0,$A0,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$B0,$A0,$A0,$A0,$A0,
293 $A0,$A0,$A0,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$90,$80,$80,$80,
294 $80,$80,$80,$80,$88,$88,$88,$88,$88,$88,$88,$88,$90,$80,$80,
295 $80,$80,$80,$80,$80,$88,$88,$88,$88,$88,$88,$88,$88,$B0,$A0,
296 $A0,$A0,$A0,$A0,$A0,$A0,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$B0,
297 $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8,
298 $50);
299
300 DEC_F:Array[0..255] of Byte=(
301 $BA,$42,$02,$02,$02,$02,$02,$02,$02,$0A,$0A,$0A,$0A,$0A,$0A,
302 $0A,$1A,$02,$02,$02,$02,$02,$02,$02,$02,$0A,$0A,$0A,$0A,$0A,
303 $0A,$0A,$1A,$22,$22,$22,$22,$22,$22,$22,$22,$2A,$2A,$2A,$2A,
304 $2A,$2A,$2A,$3A,$22,$22,$22,$22,$22,$22,$22,$22,$2A,$2A,$2A,
305 $2A,$2A,$2A,$2A,$3A,$02,$02,$02,$02,$02,$02,$02,$02,$0A,$0A,
306 $0A,$0A,$0A,$0A,$0A,$1A,$02,$02,$02,$02,$02,$02,$02,$02,$0A,
307 $0A,$0A,$0A,$0A,$0A,$0A,$1A,$22,$22,$22,$22,$22,$22,$22,$22,
308 $2A,$2A,$2A,$2A,$2A,$2A,$2A,$3A,$22,$22,$22,$22,$22,$22,$22,
309 $22,$2A,$2A,$2A,$2A,$2A,$2A,$2A,$3E,$82,$82,$82,$82,$82,$82,
310 $82,$82,$8A,$8A,$8A,$8A,$8A,$8A,$8A,$9A,$82,$82,$82,$82,$82,
311 $82,$82,$82,$8A,$8A,$8A,$8A,$8A,$8A,$8A,$9A,$A2,$A2,$A2,$A2,
312 $A2,$A2,$A2,$A2,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$BA,$A2,$A2,$A2,
313 $A2,$A2,$A2,$A2,$A2,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$BA,$82,$82,
314 $82,$82,$82,$82,$82,$82,$8A,$8A,$8A,$8A,$8A,$8A,$8A,$9A,$82,
315 $82,$82,$82,$82,$82,$82,$82,$8A,$8A,$8A,$8A,$8A,$8A,$8A,$9A,
316 $A2,$A2,$A2,$A2,$A2,$A2,$A2,$A2,$AA,$AA,$AA,$AA,$AA,$AA,$AA,
317 $BA,$A2,$A2,$A2,$A2,$A2,$A2,$A2,$A2,$AA,$AA,$AA,$AA,$AA,$AA,
318 $AA);
319
320 BIT_F0:Array[0..255] of Byte=(
321 $54,$10,$54,$10,$54,$10,$54,$10,$5C,$18,$5C,$18,$5C,$18,$5C,
322 $18,$54,$10,$54,$10,$54,$10,$54,$10,$5C,$18,$5C,$18,$5C,$18,
323 $5C,$18,$74,$30,$74,$30,$74,$30,$74,$30,$7C,$38,$7C,$38,$7C,
324 $38,$7C,$38,$74,$30,$74,$30,$74,$30,$74,$30,$7C,$38,$7C,$38,
325 $7C,$38,$7C,$38,$54,$10,$54,$10,$54,$10,$54,$10,$5C,$18,$5C,
326 $18,$5C,$18,$5C,$18,$54,$10,$54,$10,$54,$10,$54,$10,$5C,$18,
327 $5C,$18,$5C,$18,$5C,$18,$74,$30,$74,$30,$74,$30,$74,$30,$7C,
328 $38,$7C,$38,$7C,$38,$7C,$38,$74,$30,$74,$30,$74,$30,$74,$30,
329 $7C,$38,$7C,$38,$7C,$38,$7C,$38,$54,$10,$54,$10,$54,$10,$54,
330 $10,$5C,$18,$5C,$18,$5C,$18,$5C,$18,$54,$10,$54,$10,$54,$10,
331 $54,$10,$5C,$18,$5C,$18,$5C,$18,$5C,$18,$74,$30,$74,$30,$74,
332 $30,$74,$30,$7C,$38,$7C,$38,$7C,$38,$7C,$38,$74,$30,$74,$30,
333 $74,$30,$74,$30,$7C,$38,$7C,$38,$7C,$38,$7C,$38,$54,$10,$54,
334 $10,$54,$10,$54,$10,$5C,$18,$5C,$18,$5C,$18,$5C,$18,$54,$10,
335 $54,$10,$54,$10,$54,$10,$5C,$18,$5C,$18,$5C,$18,$5C,$18,$74,
336 $30,$74,$30,$74,$30,$74,$30,$7C,$38,$7C,$38,$7C,$38,$7C,$38,
337 $74,$30,$74,$30,$74,$30,$74,$30,$7C,$38,$7C,$38,$7C,$38,$7C,
338 $38);
339
340 BIT_F1:Array[0..255] of Byte=(
341 $54,$54,$10,$10,$54,$54,$10,$10,$5C,$5C,$18,$18,$5C,$5C,$18,
342 $18,$54,$54,$10,$10,$54,$54,$10,$10,$5C,$5C,$18,$18,$5C,$5C,
343 $18,$18,$74,$74,$30,$30,$74,$74,$30,$30,$7C,$7C,$38,$38,$7C,
344 $7C,$38,$38,$74,$74,$30,$30,$74,$74,$30,$30,$7C,$7C,$38,$38,
345 $7C,$7C,$38,$38,$54,$54,$10,$10,$54,$54,$10,$10,$5C,$5C,$18,
346 $18,$5C,$5C,$18,$18,$54,$54,$10,$10,$54,$54,$10,$10,$5C,$5C,
347 $18,$18,$5C,$5C,$18,$18,$74,$74,$30,$30,$74,$74,$30,$30,$7C,
348 $7C,$38,$38,$7C,$7C,$38,$38,$74,$74,$30,$30,$74,$74,$30,$30,
349 $7C,$7C,$38,$38,$7C,$7C,$38,$38,$54,$54,$10,$10,$54,$54,$10,
350 $10,$5C,$5C,$18,$18,$5C,$5C,$18,$18,$54,$54,$10,$10,$54,$54,
351 $10,$10,$5C,$5C,$18,$18,$5C,$5C,$18,$18,$74,$74,$30,$30,$74,
352 $74,$30,$30,$7C,$7C,$38,$38,$7C,$7C,$38,$38,$74,$74,$30,$30,
353 $74,$74,$30,$30,$7C,$7C,$38,$38,$7C,$7C,$38,$38,$54,$54,$10,
354 $10,$54,$54,$10,$10,$5C,$5C,$18,$18,$5C,$5C,$18,$18,$54,$54,
355 $10,$10,$54,$54,$10,$10,$5C,$5C,$18,$18,$5C,$5C,$18,$18,$74,
356 $74,$30,$30,$74,$74,$30,$30,$7C,$7C,$38,$38,$7C,$7C,$38,$38,
357 $74,$74,$30,$30,$74,$74,$30,$30,$7C,$7C,$38,$38,$7C,$7C,$38,
358 $38);
359
360 BIT_F2:Array[0..255] of Byte=(
361 $54,$54,$54,$54,$10,$10,$10,$10,$5C,$5C,$5C,$5C,$18,$18,$18,
362 $18,$54,$54,$54,$54,$10,$10,$10,$10,$5C,$5C,$5C,$5C,$18,$18,
363 $18,$18,$74,$74,$74,$74,$30,$30,$30,$30,$7C,$7C,$7C,$7C,$38,
364 $38,$38,$38,$74,$74,$74,$74,$30,$30,$30,$30,$7C,$7C,$7C,$7C,
365 $38,$38,$38,$38,$54,$54,$54,$54,$10,$10,$10,$10,$5C,$5C,$5C,
366 $5C,$18,$18,$18,$18,$54,$54,$54,$54,$10,$10,$10,$10,$5C,$5C,
367 $5C,$5C,$18,$18,$18,$18,$74,$74,$74,$74,$30,$30,$30,$30,$7C,
368 $7C,$7C,$7C,$38,$38,$38,$38,$74,$74,$74,$74,$30,$30,$30,$30,
369 $7C,$7C,$7C,$7C,$38,$38,$38,$38,$54,$54,$54,$54,$10,$10,$10,
370 $10,$5C,$5C,$5C,$5C,$18,$18,$18,$18,$54,$54,$54,$54,$10,$10,
371 $10,$10,$5C,$5C,$5C,$5C,$18,$18,$18,$18,$74,$74,$74,$74,$30,
372 $30,$30,$30,$7C,$7C,$7C,$7C,$38,$38,$38,$38,$74,$74,$74,$74,
373 $30,$30,$30,$30,$7C,$7C,$7C,$7C,$38,$38,$38,$38,$54,$54,$54,
374 $54,$10,$10,$10,$10,$5C,$5C,$5C,$5C,$18,$18,$18,$18,$54,$54,
375 $54,$54,$10,$10,$10,$10,$5C,$5C,$5C,$5C,$18,$18,$18,$18,$74,
376 $74,$74,$74,$30,$30,$30,$30,$7C,$7C,$7C,$7C,$38,$38,$38,$38,
377 $74,$74,$74,$74,$30,$30,$30,$30,$7C,$7C,$7C,$7C,$38,$38,$38,
378 $38);
379
380 BIT_F3:Array[0..255] of Byte=(
381 $54,$54,$54,$54,$54,$54,$54,$54,$18,$18,$18,$18,$18,$18,$18,
382 $18,$54,$54,$54,$54,$54,$54,$54,$54,$18,$18,$18,$18,$18,$18,
383 $18,$18,$74,$74,$74,$74,$74,$74,$74,$74,$38,$38,$38,$38,$38,
384 $38,$38,$38,$74,$74,$74,$74,$74,$74,$74,$74,$38,$38,$38,$38,
385 $38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,$54,$18,$18,$18,
386 $18,$18,$18,$18,$18,$54,$54,$54,$54,$54,$54,$54,$54,$18,$18,
387 $18,$18,$18,$18,$18,$18,$74,$74,$74,$74,$74,$74,$74,$74,$38,
388 $38,$38,$38,$38,$38,$38,$38,$74,$74,$74,$74,$74,$74,$74,$74,
389 $38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,
390 $54,$18,$18,$18,$18,$18,$18,$18,$18,$54,$54,$54,$54,$54,$54,
391 $54,$54,$18,$18,$18,$18,$18,$18,$18,$18,$74,$74,$74,$74,$74,
392 $74,$74,$74,$38,$38,$38,$38,$38,$38,$38,$38,$74,$74,$74,$74,
393 $74,$74,$74,$74,$38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,
394 $54,$54,$54,$54,$54,$18,$18,$18,$18,$18,$18,$18,$18,$54,$54,
395 $54,$54,$54,$54,$54,$54,$18,$18,$18,$18,$18,$18,$18,$18,$74,
396 $74,$74,$74,$74,$74,$74,$74,$38,$38,$38,$38,$38,$38,$38,$38,
397 $74,$74,$74,$74,$74,$74,$74,$74,$38,$38,$38,$38,$38,$38,$38,
398 $38);
399
400 BIT_F4:Array[0..255] of Byte=(
401 $54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,
402 $5C,$10,$10,$10,$10,$10,$10,$10,$10,$18,$18,$18,$18,$18,$18,
403 $18,$18,$74,$74,$74,$74,$74,$74,$74,$74,$7C,$7C,$7C,$7C,$7C,
404 $7C,$7C,$7C,$30,$30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,
405 $38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,
406 $5C,$5C,$5C,$5C,$5C,$10,$10,$10,$10,$10,$10,$10,$10,$18,$18,
407 $18,$18,$18,$18,$18,$18,$74,$74,$74,$74,$74,$74,$74,$74,$7C,
408 $7C,$7C,$7C,$7C,$7C,$7C,$7C,$30,$30,$30,$30,$30,$30,$30,$30,
409 $38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,
410 $54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$10,$10,$10,$10,$10,$10,
411 $10,$10,$18,$18,$18,$18,$18,$18,$18,$18,$74,$74,$74,$74,$74,
412 $74,$74,$74,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$30,$30,$30,$30,
413 $30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,
414 $54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$10,$10,
415 $10,$10,$10,$10,$10,$10,$18,$18,$18,$18,$18,$18,$18,$18,$74,
416 $74,$74,$74,$74,$74,$74,$74,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$7C,
417 $30,$30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,
418 $38);
419
420 BIT_F5:Array[0..255] of Byte=(
421 $54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,
422 $5C,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,
423 $5C,$5C,$30,$30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,$38,
424 $38,$38,$38,$30,$30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,
425 $38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,
426 $5C,$5C,$5C,$5C,$5C,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,
427 $5C,$5C,$5C,$5C,$5C,$5C,$30,$30,$30,$30,$30,$30,$30,$30,$38,
428 $38,$38,$38,$38,$38,$38,$38,$30,$30,$30,$30,$30,$30,$30,$30,
429 $38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,
430 $54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$54,$54,$54,$54,$54,$54,
431 $54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$30,$30,$30,$30,$30,
432 $30,$30,$30,$38,$38,$38,$38,$38,$38,$38,$38,$30,$30,$30,$30,
433 $30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,
434 $54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$54,$54,
435 $54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$30,
436 $30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,$38,
437 $30,$30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,
438 $38);
439
440 BIT_F6:Array[0..255] of Byte=(
441 $54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,
442 $5C,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,
443 $5C,$5C,$74,$74,$74,$74,$74,$74,$74,$74,$7C,$7C,$7C,$7C,$7C,
444 $7C,$7C,$7C,$74,$74,$74,$74,$74,$74,$74,$74,$7C,$7C,$7C,$7C,
445 $7C,$7C,$7C,$7C,$10,$10,$10,$10,$10,$10,$10,$10,$18,$18,$18,
446 $18,$18,$18,$18,$18,$10,$10,$10,$10,$10,$10,$10,$10,$18,$18,
447 $18,$18,$18,$18,$18,$18,$30,$30,$30,$30,$30,$30,$30,$30,$38,
448 $38,$38,$38,$38,$38,$38,$38,$30,$30,$30,$30,$30,$30,$30,$30,
449 $38,$38,$38,$38,$38,$38,$38,$38,$54,$54,$54,$54,$54,$54,$54,
450 $54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$54,$54,$54,$54,$54,$54,
451 $54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$5C,$74,$74,$74,$74,$74,
452 $74,$74,$74,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$74,$74,$74,$74,
453 $74,$74,$74,$74,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$10,$10,$10,
454 $10,$10,$10,$10,$10,$18,$18,$18,$18,$18,$18,$18,$18,$10,$10,
455 $10,$10,$10,$10,$10,$10,$18,$18,$18,$18,$18,$18,$18,$18,$30,
456 $30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,$38,
457 $30,$30,$30,$30,$30,$30,$30,$30,$38,$38,$38,$38,$38,$38,$38,
458 $38);
459
460 BIT_F7:Array[0..255] of Byte=(
461 $54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,$5C,
462 $5C,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,$5C,$5C,$5C,
463 $5C,$5C,$74,$74,$74,$74,$74,$74,$74,$74,$7C,$7C,$7C,$7C,$7C,
464 $7C,$7C,$7C,$74,$74,$74,$74,$74,$74,$74,$74,$7C,$7C,$7C,$7C,
465 $7C,$7C,$7C,$7C,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,$5C,
466 $5C,$5C,$5C,$5C,$5C,$54,$54,$54,$54,$54,$54,$54,$54,$5C,$5C,
467 $5C,$5C,$5C,$5C,$5C,$5C,$74,$74,$74,$74,$74,$74,$74,$74,$7C,
468 $7C,$7C,$7C,$7C,$7C,$7C,$7C,$74,$74,$74,$74,$74,$74,$74,$74,
469 $7C,$7C,$7C,$7C,$7C,$7C,$7C,$7C,$90,$90,$90,$90,$90,$90,$90,
470 $90,$98,$98,$98,$98,$98,$98,$98,$98,$90,$90,$90,$90,$90,$90,
471 $90,$90,$98,$98,$98,$98,$98,$98,$98,$98,$B0,$B0,$B0,$B0,$B0,
472 $B0,$B0,$B0,$B8,$B8,$B8,$B8,$B8,$B8,$B8,$B8,$B0,$B0,$B0,$B0,
473 $B0,$B0,$B0,$B0,$B8,$B8,$B8,$B8,$B8,$B8,$B8,$B8,$90,$90,$90,
474 $90,$90,$90,$90,$90,$98,$98,$98,$98,$98,$98,$98,$98,$90,$90,
475 $90,$90,$90,$90,$90,$90,$98,$98,$98,$98,$98,$98,$98,$98,$B0,
476 $B0,$B0,$B0,$B0,$B0,$B0,$B0,$B8,$B8,$B8,$B8,$B8,$B8,$B8,$B8,
477 $B0,$B0,$B0,$B0,$B0,$B0,$B0,$B0,$B8,$B8,$B8,$B8,$B8,$B8,$B8,
478 $B8);
479
480 RRA_A:Array[0..1,0..255] of Byte=(
481 ($00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,
482 $07,$08,$08,$09,$09,$0A,$0A,$0B,$0B,$0C,$0C,$0D,$0D,$0E,$0E,
483 $0F,$0F,$10,$10,$11,$11,$12,$12,$13,$13,$14,$14,$15,$15,$16,
484 $16,$17,$17,$18,$18,$19,$19,$1A,$1A,$1B,$1B,$1C,$1C,$1D,$1D,
485 $1E,$1E,$1F,$1F,$20,$20,$21,$21,$22,$22,$23,$23,$24,$24,$25,
486 $25,$26,$26,$27,$27,$28,$28,$29,$29,$2A,$2A,$2B,$2B,$2C,$2C,
487 $2D,$2D,$2E,$2E,$2F,$2F,$30,$30,$31,$31,$32,$32,$33,$33,$34,
488 $34,$35,$35,$36,$36,$37,$37,$38,$38,$39,$39,$3A,$3A,$3B,$3B,
489 $3C,$3C,$3D,$3D,$3E,$3E,$3F,$3F,$40,$40,$41,$41,$42,$42,$43,
490 $43,$44,$44,$45,$45,$46,$46,$47,$47,$48,$48,$49,$49,$4A,$4A,
491 $4B,$4B,$4C,$4C,$4D,$4D,$4E,$4E,$4F,$4F,$50,$50,$51,$51,$52,
492 $52,$53,$53,$54,$54,$55,$55,$56,$56,$57,$57,$58,$58,$59,$59,
493 $5A,$5A,$5B,$5B,$5C,$5C,$5D,$5D,$5E,$5E,$5F,$5F,$60,$60,$61,
494 $61,$62,$62,$63,$63,$64,$64,$65,$65,$66,$66,$67,$67,$68,$68,
495 $69,$69,$6A,$6A,$6B,$6B,$6C,$6C,$6D,$6D,$6E,$6E,$6F,$6F,$70,
496 $70,$71,$71,$72,$72,$73,$73,$74,$74,$75,$75,$76,$76,$77,$77,
497 $78,$78,$79,$79,$7A,$7A,$7B,$7B,$7C,$7C,$7D,$7D,$7E,$7E,$7F,
498 $7F),
499 ($80,$80,$81,$81,$82,$82,$83,$83,$84,$84,$85,$85,$86,$86,$87,
500 $87,$88,$88,$89,$89,$8A,$8A,$8B,$8B,$8C,$8C,$8D,$8D,$8E,$8E,
501 $8F,$8F,$90,$90,$91,$91,$92,$92,$93,$93,$94,$94,$95,$95,$96,
502 $96,$97,$97,$98,$98,$99,$99,$9A,$9A,$9B,$9B,$9C,$9C,$9D,$9D,
503 $9E,$9E,$9F,$9F,$A0,$A0,$A1,$A1,$A2,$A2,$A3,$A3,$A4,$A4,$A5,
504 $A5,$A6,$A6,$A7,$A7,$A8,$A8,$A9,$A9,$AA,$AA,$AB,$AB,$AC,$AC,
505 $AD,$AD,$AE,$AE,$AF,$AF,$B0,$B0,$B1,$B1,$B2,$B2,$B3,$B3,$B4,
506 $B4,$B5,$B5,$B6,$B6,$B7,$B7,$B8,$B8,$B9,$B9,$BA,$BA,$BB,$BB,
507 $BC,$BC,$BD,$BD,$BE,$BE,$BF,$BF,$C0,$C0,$C1,$C1,$C2,$C2,$C3,
508 $C3,$C4,$C4,$C5,$C5,$C6,$C6,$C7,$C7,$C8,$C8,$C9,$C9,$CA,$CA,
509 $CB,$CB,$CC,$CC,$CD,$CD,$CE,$CE,$CF,$CF,$D0,$D0,$D1,$D1,$D2,
510 $D2,$D3,$D3,$D4,$D4,$D5,$D5,$D6,$D6,$D7,$D7,$D8,$D8,$D9,$D9,
511 $DA,$DA,$DB,$DB,$DC,$DC,$DD,$DD,$DE,$DE,$DF,$DF,$E0,$E0,$E1,
512 $E1,$E2,$E2,$E3,$E3,$E4,$E4,$E5,$E5,$E6,$E6,$E7,$E7,$E8,$E8,
513 $E9,$E9,$EA,$EA,$EB,$EB,$EC,$EC,$ED,$ED,$EE,$EE,$EF,$EF,$F0,
514 $F0,$F1,$F1,$F2,$F2,$F3,$F3,$F4,$F4,$F5,$F5,$F6,$F6,$F7,$F7,
515 $F8,$F8,$F9,$F9,$FA,$FA,$FB,$FB,$FC,$FC,$FD,$FD,$FE,$FE,$FF,
516 $FF));
517
518 RLCA_F:Array[0..1,0..255] of Byte=(
519 ($00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,$08,$08,
520 $08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,$28,$28,
521 $28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,
522 $08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,
523 $28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,
524 $00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,
525 $20,$20,$28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,
526 $00,$00,$00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,
527 $20,$20,$20,$20,$28,$28,$28,$28,$01,$01,$01,$01,$09,$09,$09,
528 $09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,$29,$29,
529 $29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,$01,$09,
530 $09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,
531 $29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,
532 $01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,
533 $21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,
534 $01,$01,$01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,
535 $21,$21,$21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,
536 $29),
537 ($00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,$08,$08,
538 $08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,$28,$28,
539 $28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,
540 $08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,
541 $28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,
542 $00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,
543 $20,$20,$28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,
544 $00,$00,$00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,
545 $20,$20,$20,$20,$28,$28,$28,$28,$01,$01,$01,$01,$09,$09,$09,
546 $09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,$29,$29,
547 $29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,$01,$09,
548 $09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,
549 $29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,
550 $01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,
551 $21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,
552 $01,$01,$01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,
553 $21,$21,$21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,
554 $29));
555
556 RLCA_A:Array[0..1,0..255] of Byte=(
557 ($00,$02,$04,$06,$08,$0A,$0C,$0E,$10,$12,$14,$16,$18,$1A,$1C,
558 $1E,$20,$22,$24,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$38,$3A,
559 $3C,$3E,$40,$42,$44,$46,$48,$4A,$4C,$4E,$50,$52,$54,$56,$58,
560 $5A,$5C,$5E,$60,$62,$64,$66,$68,$6A,$6C,$6E,$70,$72,$74,$76,
561 $78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C,$8E,$90,$92,$94,
562 $96,$98,$9A,$9C,$9E,$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,
563 $B4,$B6,$B8,$BA,$BC,$BE,$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,
564 $D2,$D4,$D6,$D8,$DA,$DC,$DE,$E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,
565 $F0,$F2,$F4,$F6,$F8,$FA,$FC,$FE,$01,$03,$05,$07,$09,$0B,$0D,
566 $0F,$11,$13,$15,$17,$19,$1B,$1D,$1F,$21,$23,$25,$27,$29,$2B,
567 $2D,$2F,$31,$33,$35,$37,$39,$3B,$3D,$3F,$41,$43,$45,$47,$49,
568 $4B,$4D,$4F,$51,$53,$55,$57,$59,$5B,$5D,$5F,$61,$63,$65,$67,
569 $69,$6B,$6D,$6F,$71,$73,$75,$77,$79,$7B,$7D,$7F,$81,$83,$85,
570 $87,$89,$8B,$8D,$8F,$91,$93,$95,$97,$99,$9B,$9D,$9F,$A1,$A3,
571 $A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF,$C1,
572 $C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,
573 $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,$F1,$F3,$F5,$F7,$F9,$FB,$FD,
574 $FF),
575 ($00,$02,$04,$06,$08,$0A,$0C,$0E,$10,$12,$14,$16,$18,$1A,$1C,
576 $1E,$20,$22,$24,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$38,$3A,
577 $3C,$3E,$40,$42,$44,$46,$48,$4A,$4C,$4E,$50,$52,$54,$56,$58,
578 $5A,$5C,$5E,$60,$62,$64,$66,$68,$6A,$6C,$6E,$70,$72,$74,$76,
579 $78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C,$8E,$90,$92,$94,
580 $96,$98,$9A,$9C,$9E,$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,
581 $B4,$B6,$B8,$BA,$BC,$BE,$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,
582 $D2,$D4,$D6,$D8,$DA,$DC,$DE,$E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,
583 $F0,$F2,$F4,$F6,$F8,$FA,$FC,$FE,$01,$03,$05,$07,$09,$0B,$0D,
584 $0F,$11,$13,$15,$17,$19,$1B,$1D,$1F,$21,$23,$25,$27,$29,$2B,
585 $2D,$2F,$31,$33,$35,$37,$39,$3B,$3D,$3F,$41,$43,$45,$47,$49,
586 $4B,$4D,$4F,$51,$53,$55,$57,$59,$5B,$5D,$5F,$61,$63,$65,$67,
587 $69,$6B,$6D,$6F,$71,$73,$75,$77,$79,$7B,$7D,$7F,$81,$83,$85,
588 $87,$89,$8B,$8D,$8F,$91,$93,$95,$97,$99,$9B,$9D,$9F,$A1,$A3,
589 $A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF,$C1,
590 $C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,
591 $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,$F1,$F3,$F5,$F7,$F9,$FB,$FD,
592 $FF));
593
594 RRCA_F:Array[0..1,0..255] of Byte=(
595 ($00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,
596 $01,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,
597 $08,$09,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,
598 $01,$00,$01,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,
599 $08,$09,$08,$09,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,
600 $21,$20,$21,$20,$21,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,
601 $28,$29,$28,$29,$28,$29,$20,$21,$20,$21,$20,$21,$20,$21,$20,
602 $21,$20,$21,$20,$21,$20,$21,$28,$29,$28,$29,$28,$29,$28,$29,
603 $28,$29,$28,$29,$28,$29,$28,$29,$00,$01,$00,$01,$00,$01,$00,
604 $01,$00,$01,$00,$01,$00,$01,$00,$01,$08,$09,$08,$09,$08,$09,
605 $08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$00,$01,$00,$01,$00,
606 $01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$08,$09,$08,$09,
607 $08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$20,$21,$20,
608 $21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$28,$29,
609 $28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$20,
610 $21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,
611 $28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,
612 $29),
613 ($00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,
614 $01,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,
615 $08,$09,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,
616 $01,$00,$01,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,
617 $08,$09,$08,$09,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,
618 $21,$20,$21,$20,$21,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,
619 $28,$29,$28,$29,$28,$29,$20,$21,$20,$21,$20,$21,$20,$21,$20,
620 $21,$20,$21,$20,$21,$20,$21,$28,$29,$28,$29,$28,$29,$28,$29,
621 $28,$29,$28,$29,$28,$29,$28,$29,$00,$01,$00,$01,$00,$01,$00,
622 $01,$00,$01,$00,$01,$00,$01,$00,$01,$08,$09,$08,$09,$08,$09,
623 $08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$00,$01,$00,$01,$00,
624 $01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$08,$09,$08,$09,
625 $08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$08,$09,$20,$21,$20,
626 $21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$28,$29,
627 $28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$20,
628 $21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,$20,$21,
629 $28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,$29,$28,
630 $29));
631
632 RRCA_A:Array[0..1,0..255] of Byte=(
633 ($00,$80,$01,$81,$02,$82,$03,$83,$04,$84,$05,$85,$06,$86,$07,
634 $87,$08,$88,$09,$89,$0A,$8A,$0B,$8B,$0C,$8C,$0D,$8D,$0E,$8E,
635 $0F,$8F,$10,$90,$11,$91,$12,$92,$13,$93,$14,$94,$15,$95,$16,
636 $96,$17,$97,$18,$98,$19,$99,$1A,$9A,$1B,$9B,$1C,$9C,$1D,$9D,
637 $1E,$9E,$1F,$9F,$20,$A0,$21,$A1,$22,$A2,$23,$A3,$24,$A4,$25,
638 $A5,$26,$A6,$27,$A7,$28,$A8,$29,$A9,$2A,$AA,$2B,$AB,$2C,$AC,
639 $2D,$AD,$2E,$AE,$2F,$AF,$30,$B0,$31,$B1,$32,$B2,$33,$B3,$34,
640 $B4,$35,$B5,$36,$B6,$37,$B7,$38,$B8,$39,$B9,$3A,$BA,$3B,$BB,
641 $3C,$BC,$3D,$BD,$3E,$BE,$3F,$BF,$40,$C0,$41,$C1,$42,$C2,$43,
642 $C3,$44,$C4,$45,$C5,$46,$C6,$47,$C7,$48,$C8,$49,$C9,$4A,$CA,
643 $4B,$CB,$4C,$CC,$4D,$CD,$4E,$CE,$4F,$CF,$50,$D0,$51,$D1,$52,
644 $D2,$53,$D3,$54,$D4,$55,$D5,$56,$D6,$57,$D7,$58,$D8,$59,$D9,
645 $5A,$DA,$5B,$DB,$5C,$DC,$5D,$DD,$5E,$DE,$5F,$DF,$60,$E0,$61,
646 $E1,$62,$E2,$63,$E3,$64,$E4,$65,$E5,$66,$E6,$67,$E7,$68,$E8,
647 $69,$E9,$6A,$EA,$6B,$EB,$6C,$EC,$6D,$ED,$6E,$EE,$6F,$EF,$70,
648 $F0,$71,$F1,$72,$F2,$73,$F3,$74,$F4,$75,$F5,$76,$F6,$77,$F7,
649 $78,$F8,$79,$F9,$7A,$FA,$7B,$FB,$7C,$FC,$7D,$FD,$7E,$FE,$7F,
650 $FF),
651 ($00,$80,$01,$81,$02,$82,$03,$83,$04,$84,$05,$85,$06,$86,$07,
652 $87,$08,$88,$09,$89,$0A,$8A,$0B,$8B,$0C,$8C,$0D,$8D,$0E,$8E,
653 $0F,$8F,$10,$90,$11,$91,$12,$92,$13,$93,$14,$94,$15,$95,$16,
654 $96,$17,$97,$18,$98,$19,$99,$1A,$9A,$1B,$9B,$1C,$9C,$1D,$9D,
655 $1E,$9E,$1F,$9F,$20,$A0,$21,$A1,$22,$A2,$23,$A3,$24,$A4,$25,
656 $A5,$26,$A6,$27,$A7,$28,$A8,$29,$A9,$2A,$AA,$2B,$AB,$2C,$AC,
657 $2D,$AD,$2E,$AE,$2F,$AF,$30,$B0,$31,$B1,$32,$B2,$33,$B3,$34,
658 $B4,$35,$B5,$36,$B6,$37,$B7,$38,$B8,$39,$B9,$3A,$BA,$3B,$BB,
659 $3C,$BC,$3D,$BD,$3E,$BE,$3F,$BF,$40,$C0,$41,$C1,$42,$C2,$43,
660 $C3,$44,$C4,$45,$C5,$46,$C6,$47,$C7,$48,$C8,$49,$C9,$4A,$CA,
661 $4B,$CB,$4C,$CC,$4D,$CD,$4E,$CE,$4F,$CF,$50,$D0,$51,$D1,$52,
662 $D2,$53,$D3,$54,$D4,$55,$D5,$56,$D6,$57,$D7,$58,$D8,$59,$D9,
663 $5A,$DA,$5B,$DB,$5C,$DC,$5D,$DD,$5E,$DE,$5F,$DF,$60,$E0,$61,
664 $E1,$62,$E2,$63,$E3,$64,$E4,$65,$E5,$66,$E6,$67,$E7,$68,$E8,
665 $69,$E9,$6A,$EA,$6B,$EB,$6C,$EC,$6D,$ED,$6E,$EE,$6F,$EF,$70,
666 $F0,$71,$F1,$72,$F2,$73,$F3,$74,$F4,$75,$F5,$76,$F6,$77,$F7,
667 $78,$F8,$79,$F9,$7A,$FA,$7B,$FB,$7C,$FC,$7D,$FD,$7E,$FE,$7F,
668 $FF));
669
670 RLA_F:Array[0..1,0..255] of Byte=(
671 ($00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,$08,$08,
672 $08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,$28,$28,
673 $28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,
674 $08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,
675 $28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,
676 $00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,
677 $20,$20,$28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,
678 $00,$00,$00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,
679 $20,$20,$20,$20,$28,$28,$28,$28,$01,$01,$01,$01,$09,$09,$09,
680 $09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,$29,$29,
681 $29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,$01,$09,
682 $09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,
683 $29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,
684 $01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,
685 $21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,
686 $01,$01,$01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,
687 $21,$21,$21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,
688 $29),
689 ($00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,$08,$08,
690 $08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,$28,$28,
691 $28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,$00,$08,
692 $08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,$20,$20,
693 $28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,$00,$00,
694 $00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,$20,$20,
695 $20,$20,$28,$28,$28,$28,$00,$00,$00,$00,$08,$08,$08,$08,$00,
696 $00,$00,$00,$08,$08,$08,$08,$20,$20,$20,$20,$28,$28,$28,$28,
697 $20,$20,$20,$20,$28,$28,$28,$28,$01,$01,$01,$01,$09,$09,$09,
698 $09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,$29,$29,
699 $29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,$01,$09,
700 $09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,$21,$21,
701 $29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,$01,$01,
702 $01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,$21,$21,
703 $21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,$29,$01,
704 $01,$01,$01,$09,$09,$09,$09,$01,$01,$01,$01,$09,$09,$09,$09,
705 $21,$21,$21,$21,$29,$29,$29,$29,$21,$21,$21,$21,$29,$29,$29,
706 $29));
707
708 RLA_A:Array[0..1,0..255] of Byte=(
709 ($00,$02,$04,$06,$08,$0A,$0C,$0E,$10,$12,$14,$16,$18,$1A,$1C,
710 $1E,$20,$22,$24,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$38,$3A,
711 $3C,$3E,$40,$42,$44,$46,$48,$4A,$4C,$4E,$50,$52,$54,$56,$58,
712 $5A,$5C,$5E,$60,$62,$64,$66,$68,$6A,$6C,$6E,$70,$72,$74,$76,
713 $78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C,$8E,$90,$92,$94,
714 $96,$98,$9A,$9C,$9E,$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,
715 $B4,$B6,$B8,$BA,$BC,$BE,$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,
716 $D2,$D4,$D6,$D8,$DA,$DC,$DE,$E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,
717 $F0,$F2,$F4,$F6,$F8,$FA,$FC,$FE,$00,$02,$04,$06,$08,$0A,$0C,
718 $0E,$10,$12,$14,$16,$18,$1A,$1C,$1E,$20,$22,$24,$26,$28,$2A,
719 $2C,$2E,$30,$32,$34,$36,$38,$3A,$3C,$3E,$40,$42,$44,$46,$48,
720 $4A,$4C,$4E,$50,$52,$54,$56,$58,$5A,$5C,$5E,$60,$62,$64,$66,
721 $68,$6A,$6C,$6E,$70,$72,$74,$76,$78,$7A,$7C,$7E,$80,$82,$84,
722 $86,$88,$8A,$8C,$8E,$90,$92,$94,$96,$98,$9A,$9C,$9E,$A0,$A2,
723 $A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,$B4,$B6,$B8,$BA,$BC,$BE,$C0,
724 $C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,$D2,$D4,$D6,$D8,$DA,$DC,$DE,
725 $E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,$F0,$F2,$F4,$F6,$F8,$FA,$FC,
726 $FE),
727 ($01,$03,$05,$07,$09,$0B,$0D,$0F,$11,$13,$15,$17,$19,$1B,$1D,
728 $1F,$21,$23,$25,$27,$29,$2B,$2D,$2F,$31,$33,$35,$37,$39,$3B,
729 $3D,$3F,$41,$43,$45,$47,$49,$4B,$4D,$4F,$51,$53,$55,$57,$59,
730 $5B,$5D,$5F,$61,$63,$65,$67,$69,$6B,$6D,$6F,$71,$73,$75,$77,
731 $79,$7B,$7D,$7F,$81,$83,$85,$87,$89,$8B,$8D,$8F,$91,$93,$95,
732 $97,$99,$9B,$9D,$9F,$A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,
733 $B5,$B7,$B9,$BB,$BD,$BF,$C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,
734 $D3,$D5,$D7,$D9,$DB,$DD,$DF,$E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,
735 $F1,$F3,$F5,$F7,$F9,$FB,$FD,$FF,$01,$03,$05,$07,$09,$0B,$0D,
736 $0F,$11,$13,$15,$17,$19,$1B,$1D,$1F,$21,$23,$25,$27,$29,$2B,
737 $2D,$2F,$31,$33,$35,$37,$39,$3B,$3D,$3F,$41,$43,$45,$47,$49,
738 $4B,$4D,$4F,$51,$53,$55,$57,$59,$5B,$5D,$5F,$61,$63,$65,$67,
739 $69,$6B,$6D,$6F,$71,$73,$75,$77,$79,$7B,$7D,$7F,$81,$83,$85,
740 $87,$89,$8B,$8D,$8F,$91,$93,$95,$97,$99,$9B,$9D,$9F,$A1,$A3,
741 $A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF,$C1,
742 $C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,
743 $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,$F1,$F3,$F5,$F7,$F9,$FB,$FD,
744 $FF));
745
746 RLR_F:Array[0..1,0..255] of Byte=(
747 ($44,$00,$00,$04,$08,$0C,$0C,$08,$00,$04,$04,$00,$0C,$08,$08,
748 $0C,$20,$24,$24,$20,$2C,$28,$28,$2C,$24,$20,$20,$24,$28,$2C,
749 $2C,$28,$00,$04,$04,$00,$0C,$08,$08,$0C,$04,$00,$00,$04,$08,
750 $0C,$0C,$08,$24,$20,$20,$24,$28,$2C,$2C,$28,$20,$24,$24,$20,
751 $2C,$28,$28,$2C,$80,$84,$84,$80,$8C,$88,$88,$8C,$84,$80,$80,
752 $84,$88,$8C,$8C,$88,$A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,$A0,$A4,
753 $A4,$A0,$AC,$A8,$A8,$AC,$84,$80,$80,$84,$88,$8C,$8C,$88,$80,
754 $84,$84,$80,$8C,$88,$88,$8C,$A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,
755 $A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,$45,$01,$01,$05,$09,$0D,$0D,
756 $09,$01,$05,$05,$01,$0D,$09,$09,$0D,$21,$25,$25,$21,$2D,$29,
757 $29,$2D,$25,$21,$21,$25,$29,$2D,$2D,$29,$01,$05,$05,$01,$0D,
758 $09,$09,$0D,$05,$01,$01,$05,$09,$0D,$0D,$09,$25,$21,$21,$25,
759 $29,$2D,$2D,$29,$21,$25,$25,$21,$2D,$29,$29,$2D,$81,$85,$85,
760 $81,$8D,$89,$89,$8D,$85,$81,$81,$85,$89,$8D,$8D,$89,$A5,$A1,
761 $A1,$A5,$A9,$AD,$AD,$A9,$A1,$A5,$A5,$A1,$AD,$A9,$A9,$AD,$85,
762 $81,$81,$85,$89,$8D,$8D,$89,$81,$85,$85,$81,$8D,$89,$89,$8D,
763 $A1,$A5,$A5,$A1,$AD,$A9,$A9,$AD,$A5,$A1,$A1,$A5,$A9,$AD,$AD,
764 $A9),
765 ($00,$04,$04,$00,$0C,$08,$08,$0C,$04,$00,$00,$04,$08,$0C,$0C,
766 $08,$24,$20,$20,$24,$28,$2C,$2C,$28,$20,$24,$24,$20,$2C,$28,
767 $28,$2C,$04,$00,$00,$04,$08,$0C,$0C,$08,$00,$04,$04,$00,$0C,
768 $08,$08,$0C,$20,$24,$24,$20,$2C,$28,$28,$2C,$24,$20,$20,$24,
769 $28,$2C,$2C,$28,$84,$80,$80,$84,$88,$8C,$8C,$88,$80,$84,$84,
770 $80,$8C,$88,$88,$8C,$A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,$A4,$A0,
771 $A0,$A4,$A8,$AC,$AC,$A8,$80,$84,$84,$80,$8C,$88,$88,$8C,$84,
772 $80,$80,$84,$88,$8C,$8C,$88,$A4,$A0,$A0,$A4,$A8,$AC,$AC,$A8,
773 $A0,$A4,$A4,$A0,$AC,$A8,$A8,$AC,$01,$05,$05,$01,$0D,$09,$09,
774 $0D,$05,$01,$01,$05,$09,$0D,$0D,$09,$25,$21,$21,$25,$29,$2D,
775 $2D,$29,$21,$25,$25,$21,$2D,$29,$29,$2D,$05,$01,$01,$05,$09,
776 $0D,$0D,$09,$01,$05,$05,$01,$0D,$09,$09,$0D,$21,$25,$25,$21,
777 $2D,$29,$29,$2D,$25,$21,$21,$25,$29,$2D,$2D,$29,$85,$81,$81,
778 $85,$89,$8D,$8D,$89,$81,$85,$85,$81,$8D,$89,$89,$8D,$A1,$A5,
779 $A5,$A1,$AD,$A9,$A9,$AD,$A5,$A1,$A1,$A5,$A9,$AD,$AD,$A9,$81,
780 $85,$85,$81,$8D,$89,$89,$8D,$85,$81,$81,$85,$89,$8D,$8D,$89,
781 $A5,$A1,$A1,$A5,$A9,$AD,$AD,$A9,$A1,$A5,$A5,$A1,$AD,$A9,$A9,
782 $AD));
783
784 RLR_A:Array[0..1,0..255] of Byte=(
785 ($00,$02,$04,$06,$08,$0A,$0C,$0E,$10,$12,$14,$16,$18,$1A,$1C,
786 $1E,$20,$22,$24,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$38,$3A,
787 $3C,$3E,$40,$42,$44,$46,$48,$4A,$4C,$4E,$50,$52,$54,$56,$58,
788 $5A,$5C,$5E,$60,$62,$64,$66,$68,$6A,$6C,$6E,$70,$72,$74,$76,
789 $78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C,$8E,$90,$92,$94,
790 $96,$98,$9A,$9C,$9E,$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,
791 $B4,$B6,$B8,$BA,$BC,$BE,$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,
792 $D2,$D4,$D6,$D8,$DA,$DC,$DE,$E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,
793 $F0,$F2,$F4,$F6,$F8,$FA,$FC,$FE,$00,$02,$04,$06,$08,$0A,$0C,
794 $0E,$10,$12,$14,$16,$18,$1A,$1C,$1E,$20,$22,$24,$26,$28,$2A,
795 $2C,$2E,$30,$32,$34,$36,$38,$3A,$3C,$3E,$40,$42,$44,$46,$48,
796 $4A,$4C,$4E,$50,$52,$54,$56,$58,$5A,$5C,$5E,$60,$62,$64,$66,
797 $68,$6A,$6C,$6E,$70,$72,$74,$76,$78,$7A,$7C,$7E,$80,$82,$84,
798 $86,$88,$8A,$8C,$8E,$90,$92,$94,$96,$98,$9A,$9C,$9E,$A0,$A2,
799 $A4,$A6,$A8,$AA,$AC,$AE,$B0,$B2,$B4,$B6,$B8,$BA,$BC,$BE,$C0,
800 $C2,$C4,$C6,$C8,$CA,$CC,$CE,$D0,$D2,$D4,$D6,$D8,$DA,$DC,$DE,
801 $E0,$E2,$E4,$E6,$E8,$EA,$EC,$EE,$F0,$F2,$F4,$F6,$F8,$FA,$FC,
802 $FE),
803 ($01,$03,$05,$07,$09,$0B,$0D,$0F,$11,$13,$15,$17,$19,$1B,$1D,
804 $1F,$21,$23,$25,$27,$29,$2B,$2D,$2F,$31,$33,$35,$37,$39,$3B,
805 $3D,$3F,$41,$43,$45,$47,$49,$4B,$4D,$4F,$51,$53,$55,$57,$59,
806 $5B,$5D,$5F,$61,$63,$65,$67,$69,$6B,$6D,$6F,$71,$73,$75,$77,
807 $79,$7B,$7D,$7F,$81,$83,$85,$87,$89,$8B,$8D,$8F,$91,$93,$95,
808 $97,$99,$9B,$9D,$9F,$A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,
809 $B5,$B7,$B9,$BB,$BD,$BF,$C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,
810 $D3,$D5,$D7,$D9,$DB,$DD,$DF,$E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,
811 $F1,$F3,$F5,$F7,$F9,$FB,$FD,$FF,$01,$03,$05,$07,$09,$0B,$0D,
812 $0F,$11,$13,$15,$17,$19,$1B,$1D,$1F,$21,$23,$25,$27,$29,$2B,
813 $2D,$2F,$31,$33,$35,$37,$39,$3B,$3D,$3F,$41,$43,$45,$47,$49,
814 $4B,$4D,$4F,$51,$53,$55,$57,$59,$5B,$5D,$5F,$61,$63,$65,$67,
815 $69,$6B,$6D,$6F,$71,$73,$75,$77,$79,$7B,$7D,$7F,$81,$83,$85,
816 $87,$89,$8B,$8D,$8F,$91,$93,$95,$97,$99,$9B,$9D,$9F,$A1,$A3,
817 $A5,$A7,$A9,$AB,$AD,$AF,$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF,$C1,
818 $C3,$C5,$C7,$C9,$CB,$CD,$CF,$D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,
819 $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF,$F1,$F3,$F5,$F7,$F9,$FB,$FD,
820 $FF));
821
822 RRR_F:Array[0..1,0..255] of Byte=(
823 ($44,$45,$00,$01,$00,$01,$04,$05,$00,$01,$04,$05,$04,$05,$00,
824 $01,$08,$09,$0C,$0D,$0C,$0D,$08,$09,$0C,$0D,$08,$09,$08,$09,
825 $0C,$0D,$00,$01,$04,$05,$04,$05,$00,$01,$04,$05,$00,$01,$00,
826 $01,$04,$05,$0C,$0D,$08,$09,$08,$09,$0C,$0D,$08,$09,$0C,$0D,
827 $0C,$0D,$08,$09,$20,$21,$24,$25,$24,$25,$20,$21,$24,$25,$20,
828 $21,$20,$21,$24,$25,$2C,$2D,$28,$29,$28,$29,$2C,$2D,$28,$29,
829 $2C,$2D,$2C,$2D,$28,$29,$24,$25,$20,$21,$20,$21,$24,$25,$20,
830 $21,$24,$25,$24,$25,$20,$21,$28,$29,$2C,$2D,$2C,$2D,$28,$29,
831 $2C,$2D,$28,$29,$28,$29,$2C,$2D,$00,$01,$04,$05,$04,$05,$00,
832 $01,$04,$05,$00,$01,$00,$01,$04,$05,$0C,$0D,$08,$09,$08,$09,
833 $0C,$0D,$08,$09,$0C,$0D,$0C,$0D,$08,$09,$04,$05,$00,$01,$00,
834 $01,$04,$05,$00,$01,$04,$05,$04,$05,$00,$01,$08,$09,$0C,$0D,
835 $0C,$0D,$08,$09,$0C,$0D,$08,$09,$08,$09,$0C,$0D,$24,$25,$20,
836 $21,$20,$21,$24,$25,$20,$21,$24,$25,$24,$25,$20,$21,$28,$29,
837 $2C,$2D,$2C,$2D,$28,$29,$2C,$2D,$28,$29,$28,$29,$2C,$2D,$20,
838 $21,$24,$25,$24,$25,$20,$21,$24,$25,$20,$21,$20,$21,$24,$25,
839 $2C,$2D,$28,$29,$28,$29,$2C,$2D,$28,$29,$2C,$2D,$2C,$2D,$28,
840 $29),
841 ($80,$81,$84,$85,$84,$85,$80,$81,$84,$85,$80,$81,$80,$81,$84,
842 $85,$8C,$8D,$88,$89,$88,$89,$8C,$8D,$88,$89,$8C,$8D,$8C,$8D,
843 $88,$89,$84,$85,$80,$81,$80,$81,$84,$85,$80,$81,$84,$85,$84,
844 $85,$80,$81,$88,$89,$8C,$8D,$8C,$8D,$88,$89,$8C,$8D,$88,$89,
845 $88,$89,$8C,$8D,$A4,$A5,$A0,$A1,$A0,$A1,$A4,$A5,$A0,$A1,$A4,
846 $A5,$A4,$A5,$A0,$A1,$A8,$A9,$AC,$AD,$AC,$AD,$A8,$A9,$AC,$AD,
847 $A8,$A9,$A8,$A9,$AC,$AD,$A0,$A1,$A4,$A5,$A4,$A5,$A0,$A1,$A4,
848 $A5,$A0,$A1,$A0,$A1,$A4,$A5,$AC,$AD,$A8,$A9,$A8,$A9,$AC,$AD,
849 $A8,$A9,$AC,$AD,$AC,$AD,$A8,$A9,$84,$85,$80,$81,$80,$81,$84,
850 $85,$80,$81,$84,$85,$84,$85,$80,$81,$88,$89,$8C,$8D,$8C,$8D,
851 $88,$89,$8C,$8D,$88,$89,$88,$89,$8C,$8D,$80,$81,$84,$85,$84,
852 $85,$80,$81,$84,$85,$80,$81,$80,$81,$84,$85,$8C,$8D,$88,$89,
853 $88,$89,$8C,$8D,$88,$89,$8C,$8D,$8C,$8D,$88,$89,$A0,$A1,$A4,
854 $A5,$A4,$A5,$A0,$A1,$A4,$A5,$A0,$A1,$A0,$A1,$A4,$A5,$AC,$AD,
855 $A8,$A9,$A8,$A9,$AC,$AD,$A8,$A9,$AC,$AD,$AC,$AD,$A8,$A9,$A4,
856 $A5,$A0,$A1,$A0,$A1,$A4,$A5,$A0,$A1,$A4,$A5,$A4,$A5,$A0,$A1,
857 $A8,$A9,$AC,$AD,$AC,$AD,$A8,$A9,$AC,$AD,$A8,$A9,$A8,$A9,$AC,
858 $AD));
859
860 RRR_A:Array[0..1,0..255] of Byte=(
861 ($00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,
862 $07,$08,$08,$09,$09,$0A,$0A,$0B,$0B,$0C,$0C,$0D,$0D,$0E,$0E,
863 $0F,$0F,$10,$10,$11,$11,$12,$12,$13,$13,$14,$14,$15,$15,$16,
864 $16,$17,$17,$18,$18,$19,$19,$1A,$1A,$1B,$1B,$1C,$1C,$1D,$1D,
865 $1E,$1E,$1F,$1F,$20,$20,$21,$21,$22,$22,$23,$23,$24,$24,$25,
866 $25,$26,$26,$27,$27,$28,$28,$29,$29,$2A,$2A,$2B,$2B,$2C,$2C,
867 $2D,$2D,$2E,$2E,$2F,$2F,$30,$30,$31,$31,$32,$32,$33,$33,$34,
868 $34,$35,$35,$36,$36,$37,$37,$38,$38,$39,$39,$3A,$3A,$3B,$3B,
869 $3C,$3C,$3D,$3D,$3E,$3E,$3F,$3F,$40,$40,$41,$41,$42,$42,$43,
870 $43,$44,$44,$45,$45,$46,$46,$47,$47,$48,$48,$49,$49,$4A,$4A,
871 $4B,$4B,$4C,$4C,$4D,$4D,$4E,$4E,$4F,$4F,$50,$50,$51,$51,$52,
872 $52,$53,$53,$54,$54,$55,$55,$56,$56,$57,$57,$58,$58,$59,$59,
873 $5A,$5A,$5B,$5B,$5C,$5C,$5D,$5D,$5E,$5E,$5F,$5F,$60,$60,$61,
874 $61,$62,$62,$63,$63,$64,$64,$65,$65,$66,$66,$67,$67,$68,$68,
875 $69,$69,$6A,$6A,$6B,$6B,$6C,$6C,$6D,$6D,$6E,$6E,$6F,$6F,$70,
876 $70,$71,$71,$72,$72,$73,$73,$74,$74,$75,$75,$76,$76,$77,$77,
877 $78,$78,$79,$79,$7A,$7A,$7B,$7B,$7C,$7C,$7D,$7D,$7E,$7E,$7F,
878 $7F),
879 ($80,$80,$81,$81,$82,$82,$83,$83,$84,$84,$85,$85,$86,$86,$87,
880 $87,$88,$88,$89,$89,$8A,$8A,$8B,$8B,$8C,$8C,$8D,$8D,$8E,$8E,
881 $8F,$8F,$90,$90,$91,$91,$92,$92,$93,$93,$94,$94,$95,$95,$96,
882 $96,$97,$97,$98,$98,$99,$99,$9A,$9A,$9B,$9B,$9C,$9C,$9D,$9D,
883 $9E,$9E,$9F,$9F,$A0,$A0,$A1,$A1,$A2,$A2,$A3,$A3,$A4,$A4,$A5,
884 $A5,$A6,$A6,$A7,$A7,$A8,$A8,$A9,$A9,$AA,$AA,$AB,$AB,$AC,$AC,
885 $AD,$AD,$AE,$AE,$AF,$AF,$B0,$B0,$B1,$B1,$B2,$B2,$B3,$B3,$B4,
886 $B4,$B5,$B5,$B6,$B6,$B7,$B7,$B8,$B8,$B9,$B9,$BA,$BA,$BB,$BB,
887 $BC,$BC,$BD,$BD,$BE,$BE,$BF,$BF,$C0,$C0,$C1,$C1,$C2,$C2,$C3,
888 $C3,$C4,$C4,$C5,$C5,$C6,$C6,$C7,$C7,$C8,$C8,$C9,$C9,$CA,$CA,
889 $CB,$CB,$CC,$CC,$CD,$CD,$CE,$CE,$CF,$CF,$D0,$D0,$D1,$D1,$D2,
890 $D2,$D3,$D3,$D4,$D4,$D5,$D5,$D6,$D6,$D7,$D7,$D8,$D8,$D9,$D9,
891 $DA,$DA,$DB,$DB,$DC,$DC,$DD,$DD,$DE,$DE,$DF,$DF,$E0,$E0,$E1,
892 $E1,$E2,$E2,$E3,$E3,$E4,$E4,$E5,$E5,$E6,$E6,$E7,$E7,$E8,$E8,
893 $E9,$E9,$EA,$EA,$EB,$EB,$EC,$EC,$ED,$ED,$EE,$EE,$EF,$EF,$F0,
894 $F0,$F1,$F1,$F2,$F2,$F3,$F3,$F4,$F4,$F5,$F5,$F6,$F6,$F7,$F7,
895 $F8,$F8,$F9,$F9,$FA,$FA,$FB,$FB,$FC,$FC,$FD,$FD,$FE,$FE,$FF,
896 $FF));
897
898 DAA_F:Array[0..7,0..255] of Byte=(
899 ($44,$00,$00,$04,$00,$04,$04,$00,$08,$0C,$10,$14,$14,$10,$14,
900 $10,$00,$04,$04,$00,$04,$00,$00,$04,$0C,$08,$30,$34,$34,$30,
901 $34,$30,$20,$24,$24,$20,$24,$20,$20,$24,$2C,$28,$34,$30,$30,
902 $34,$30,$34,$24,$20,$20,$24,$20,$24,$24,$20,$28,$2C,$10,$14,
903 $14,$10,$14,$10,$00,$04,$04,$00,$04,$00,$00,$04,$0C,$08,$14,
904 $10,$10,$14,$10,$14,$04,$00,$00,$04,$00,$04,$04,$00,$08,$0C,
905 $34,$30,$30,$34,$30,$34,$24,$20,$20,$24,$20,$24,$24,$20,$28,
906 $2C,$30,$34,$34,$30,$34,$30,$20,$24,$24,$20,$24,$20,$20,$24,
907 $2C,$28,$90,$94,$94,$90,$94,$90,$80,$84,$84,$80,$84,$80,$80,
908 $84,$8C,$88,$94,$90,$90,$94,$90,$94,$84,$80,$80,$84,$80,$84,
909 $84,$80,$88,$8C,$55,$11,$11,$15,$11,$15,$45,$01,$01,$05,$01,
910 $05,$05,$01,$09,$0D,$11,$15,$15,$11,$15,$11,$01,$05,$05,$01,
911 $05,$01,$01,$05,$0D,$09,$31,$35,$35,$31,$35,$31,$21,$25,$25,
912 $21,$25,$21,$21,$25,$2D,$29,$35,$31,$31,$35,$31,$35,$25,$21,
913 $21,$25,$21,$25,$25,$21,$29,$2D,$11,$15,$15,$11,$15,$11,$01,
914 $05,$05,$01,$05,$01,$01,$05,$0D,$09,$15,$11,$11,$15,$11,$15,
915 $05,$01,$01,$05,$01,$05,$05,$01,$09,$0D,$35,$31,$31,$35,$31,
916 $35),
917 ($25,$21,$21,$25,$21,$25,$25,$21,$29,$2D,$31,$35,$35,$31,$35,
918 $31,$21,$25,$25,$21,$25,$21,$21,$25,$2D,$29,$91,$95,$95,$91,
919 $95,$91,$81,$85,$85,$81,$85,$81,$81,$85,$8D,$89,$95,$91,$91,
920 $95,$91,$95,$85,$81,$81,$85,$81,$85,$85,$81,$89,$8D,$B5,$B1,
921 $B1,$B5,$B1,$B5,$A5,$A1,$A1,$A5,$A1,$A5,$A5,$A1,$A9,$AD,$B1,
922 $B5,$B5,$B1,$B5,$B1,$A1,$A5,$A5,$A1,$A5,$A1,$A1,$A5,$AD,$A9,
923 $95,$91,$91,$95,$91,$95,$85,$81,$81,$85,$81,$85,$85,$81,$89,
924 $8D,$91,$95,$95,$91,$95,$91,$81,$85,$85,$81,$85,$81,$81,$85,
925 $8D,$89,$B1,$B5,$B5,$B1,$B5,$B1,$A1,$A5,$A5,$A1,$A5,$A1,$A1,
926 $A5,$AD,$A9,$B5,$B1,$B1,$B5,$B1,$B5,$A5,$A1,$A1,$A5,$A1,$A5,
927 $A5,$A1,$A9,$AD,$55,$11,$11,$15,$11,$15,$45,$01,$01,$05,$01,
928 $05,$05,$01,$09,$0D,$11,$15,$15,$11,$15,$11,$01,$05,$05,$01,
929 $05,$01,$01,$05,$0D,$09,$31,$35,$35,$31,$35,$31,$21,$25,$25,
930 $21,$25,$21,$21,$25,$2D,$29,$35,$31,$31,$35,$31,$35,$25,$21,
931 $21,$25,$21,$25,$25,$21,$29,$2D,$11,$15,$15,$11,$15,$11,$01,
932 $05,$05,$01,$05,$01,$01,$05,$0D,$09,$15,$11,$11,$15,$11,$15,
933 $05,$01,$01,$05,$01,$05,$05,$01,$09,$0D,$35,$31,$31,$35,$31,
934 $35),
935 ($46,$02,$02,$06,$02,$06,$06,$02,$0A,$0E,$02,$06,$06,$02,$0A,
936 $0E,$02,$06,$06,$02,$06,$02,$02,$06,$0E,$0A,$06,$02,$02,$06,
937 $0E,$0A,$22,$26,$26,$22,$26,$22,$22,$26,$2E,$2A,$26,$22,$22,
938 $26,$2E,$2A,$26,$22,$22,$26,$22,$26,$26,$22,$2A,$2E,$22,$26,
939 $26,$22,$2A,$2E,$02,$06,$06,$02,$06,$02,$02,$06,$0E,$0A,$06,
940 $02,$02,$06,$0E,$0A,$06,$02,$02,$06,$02,$06,$06,$02,$0A,$0E,
941 $02,$06,$06,$02,$0A,$0E,$26,$22,$22,$26,$22,$26,$26,$22,$2A,
942 $2E,$22,$26,$26,$22,$2A,$2E,$22,$26,$26,$22,$26,$22,$22,$26,
943 $2E,$2A,$26,$22,$22,$26,$2E,$2A,$82,$86,$86,$82,$86,$82,$82,
944 $86,$8E,$8A,$86,$82,$82,$86,$8E,$8A,$86,$82,$82,$86,$82,$86,
945 $86,$82,$8A,$8E,$23,$27,$27,$23,$2B,$2F,$03,$07,$07,$03,$07,
946 $03,$03,$07,$0F,$0B,$07,$03,$03,$07,$0F,$0B,$07,$03,$03,$07,
947 $03,$07,$07,$03,$0B,$0F,$03,$07,$07,$03,$0B,$0F,$27,$23,$23,
948 $27,$23,$27,$27,$23,$2B,$2F,$23,$27,$27,$23,$2B,$2F,$23,$27,
949 $27,$23,$27,$23,$23,$27,$2F,$2B,$27,$23,$23,$27,$2F,$2B,$83,
950 $87,$87,$83,$87,$83,$83,$87,$8F,$8B,$87,$83,$83,$87,$8F,$8B,
951 $87,$83,$83,$87,$83,$87,$87,$83,$8B,$8F,$83,$87,$87,$83,$8B,
952 $8F),
953 ($A7,$A3,$A3,$A7,$A3,$A7,$A7,$A3,$AB,$AF,$A3,$A7,$A7,$A3,$AB,
954 $AF,$A3,$A7,$A7,$A3,$A7,$A3,$A3,$A7,$AF,$AB,$A7,$A3,$A3,$A7,
955 $AF,$AB,$87,$83,$83,$87,$83,$87,$87,$83,$8B,$8F,$83,$87,$87,
956 $83,$8B,$8F,$83,$87,$87,$83,$87,$83,$83,$87,$8F,$8B,$87,$83,
957 $83,$87,$8F,$8B,$A3,$A7,$A7,$A3,$A7,$A3,$A3,$A7,$AF,$AB,$A7,
958 $A3,$A3,$A7,$AF,$AB,$A7,$A3,$A3,$A7,$A3,$A7,$A7,$A3,$AB,$AF,
959 $A3,$A7,$A7,$A3,$AB,$AF,$47,$03,$03,$07,$03,$07,$07,$03,$0B,
960 $0F,$03,$07,$07,$03,$0B,$0F,$03,$07,$07,$03,$07,$03,$03,$07,
961 $0F,$0B,$07,$03,$03,$07,$0F,$0B,$23,$27,$27,$23,$27,$23,$23,
962 $27,$2F,$2B,$27,$23,$23,$27,$2F,$2B,$27,$23,$23,$27,$23,$27,
963 $27,$23,$2B,$2F,$23,$27,$27,$23,$2B,$2F,$03,$07,$07,$03,$07,
964 $03,$03,$07,$0F,$0B,$07,$03,$03,$07,$0F,$0B,$07,$03,$03,$07,
965 $03,$07,$07,$03,$0B,$0F,$03,$07,$07,$03,$0B,$0F,$27,$23,$23,
966 $27,$23,$27,$27,$23,$2B,$2F,$23,$27,$27,$23,$2B,$2F,$23,$27,
967 $27,$23,$27,$23,$23,$27,$2F,$2B,$27,$23,$23,$27,$2F,$2B,$83,
968 $87,$87,$83,$87,$83,$83,$87,$8F,$8B,$87,$83,$83,$87,$8F,$8B,
969 $87,$83,$83,$87,$83,$87,$87,$83,$8B,$8F,$83,$87,$87,$83,$8B,
970 $8F),
971 ($04,$00,$08,$0C,$0C,$08,$0C,$08,$08,$0C,$10,$14,$14,$10,$14,
972 $10,$00,$04,$0C,$08,$08,$0C,$08,$0C,$0C,$08,$30,$34,$34,$30,
973 $34,$30,$20,$24,$2C,$28,$28,$2C,$28,$2C,$2C,$28,$34,$30,$30,
974 $34,$30,$34,$24,$20,$28,$2C,$2C,$28,$2C,$28,$28,$2C,$10,$14,
975 $14,$10,$14,$10,$00,$04,$0C,$08,$08,$0C,$08,$0C,$0C,$08,$14,
976 $10,$10,$14,$10,$14,$04,$00,$08,$0C,$0C,$08,$0C,$08,$08,$0C,
977 $34,$30,$30,$34,$30,$34,$24,$20,$28,$2C,$2C,$28,$2C,$28,$28,
978 $2C,$30,$34,$34,$30,$34,$30,$20,$24,$2C,$28,$28,$2C,$28,$2C,
979 $2C,$28,$90,$94,$94,$90,$94,$90,$80,$84,$8C,$88,$88,$8C,$88,
980 $8C,$8C,$88,$94,$90,$90,$94,$90,$94,$84,$80,$88,$8C,$8C,$88,
981 $8C,$88,$88,$8C,$55,$11,$11,$15,$11,$15,$05,$01,$09,$0D,$0D,
982 $09,$0D,$09,$09,$0D,$11,$15,$15,$11,$15,$11,$01,$05,$0D,$09,
983 $09,$0D,$09,$0D,$0D,$09,$31,$35,$35,$31,$35,$31,$21,$25,$2D,
984 $29,$29,$2D,$29,$2D,$2D,$29,$35,$31,$31,$35,$31,$35,$25,$21,
985 $29,$2D,$2D,$29,$2D,$29,$29,$2D,$11,$15,$15,$11,$15,$11,$01,
986 $05,$0D,$09,$09,$0D,$09,$0D,$0D,$09,$15,$11,$11,$15,$11,$15,
987 $05,$01,$09,$0D,$0D,$09,$0D,$09,$09,$0D,$35,$31,$31,$35,$31,
988 $35),
989 ($25,$21,$29,$2D,$2D,$29,$2D,$29,$29,$2D,$31,$35,$35,$31,$35,
990 $31,$21,$25,$2D,$29,$29,$2D,$29,$2D,$2D,$29,$91,$95,$95,$91,
991 $95,$91,$81,$85,$8D,$89,$89,$8D,$89,$8D,$8D,$89,$95,$91,$91,
992 $95,$91,$95,$85,$81,$89,$8D,$8D,$89,$8D,$89,$89,$8D,$B5,$B1,
993 $B1,$B5,$B1,$B5,$A5,$A1,$A9,$AD,$AD,$A9,$AD,$A9,$A9,$AD,$B1,
994 $B5,$B5,$B1,$B5,$B1,$A1,$A5,$AD,$A9,$A9,$AD,$A9,$AD,$AD,$A9,
995 $95,$91,$91,$95,$91,$95,$85,$81,$89,$8D,$8D,$89,$8D,$89,$89,
996 $8D,$91,$95,$95,$91,$95,$91,$81,$85,$8D,$89,$89,$8D,$89,$8D,
997 $8D,$89,$B1,$B5,$B5,$B1,$B5,$B1,$A1,$A5,$AD,$A9,$A9,$AD,$A9,
998 $AD,$AD,$A9,$B5,$B1,$B1,$B5,$B1,$B5,$A5,$A1,$A9,$AD,$AD,$A9,
999 $AD,$A9,$A9,$AD,$55,$11,$11,$15,$11,$15,$05,$01,$09,$0D,$0D,
1000 $09,$0D,$09,$09,$0D,$11,$15,$15,$11,$15,$11,$01,$05,$0D,$09,
1001 $09,$0D,$09,$0D,$0D,$09,$31,$35,$35,$31,$35,$31,$21,$25,$2D,
1002 $29,$29,$2D,$29,$2D,$2D,$29,$35,$31,$31,$35,$31,$35,$25,$21,
1003 $29,$2D,$2D,$29,$2D,$29,$29,$2D,$11,$15,$15,$11,$15,$11,$01,
1004 $05,$0D,$09,$09,$0D,$09,$0D,$0D,$09,$15,$11,$11,$15,$11,$15,
1005 $05,$01,$09,$0D,$0D,$09,$0D,$09,$09,$0D,$35,$31,$31,$35,$31,
1006 $35),
1007 ($BE,$BA,$BE,$BA,$BA,$BE,$46,$02,$02,$06,$02,$06,$06,$02,$0A,
1008 $0E,$1E,$1A,$1E,$1A,$1A,$1E,$02,$06,$06,$02,$06,$02,$02,$06,
1009 $0E,$0A,$1A,$1E,$1A,$1E,$1E,$1A,$22,$26,$26,$22,$26,$22,$22,
1010 $26,$2E,$2A,$3A,$3E,$3A,$3E,$3E,$3A,$26,$22,$22,$26,$22,$26,
1011 $26,$22,$2A,$2E,$3E,$3A,$3E,$3A,$3A,$3E,$02,$06,$06,$02,$06,
1012 $02,$02,$06,$0E,$0A,$1A,$1E,$1A,$1E,$1E,$1A,$06,$02,$02,$06,
1013 $02,$06,$06,$02,$0A,$0E,$1E,$1A,$1E,$1A,$1A,$1E,$26,$22,$22,
1014 $26,$22,$26,$26,$22,$2A,$2E,$3E,$3A,$3E,$3A,$3A,$3E,$22,$26,
1015 $26,$22,$26,$22,$22,$26,$2E,$2A,$3A,$3E,$3A,$3E,$3E,$3A,$82,
1016 $86,$86,$82,$86,$82,$82,$86,$8E,$8A,$9A,$9E,$9A,$9E,$9E,$9A,
1017 $86,$82,$82,$86,$23,$27,$27,$23,$2B,$2F,$3F,$3B,$3F,$3B,$3B,
1018 $3F,$03,$07,$07,$03,$07,$03,$03,$07,$0F,$0B,$1B,$1F,$1B,$1F,
1019 $1F,$1B,$07,$03,$03,$07,$03,$07,$07,$03,$0B,$0F,$1F,$1B,$1F,
1020 $1B,$1B,$1F,$27,$23,$23,$27,$23,$27,$27,$23,$2B,$2F,$3F,$3B,
1021 $3F,$3B,$3B,$3F,$23,$27,$27,$23,$27,$23,$23,$27,$2F,$2B,$3B,
1022 $3F,$3B,$3F,$3F,$3B,$83,$87,$87,$83,$87,$83,$83,$87,$8F,$8B,
1023 $9B,$9F,$9B,$9F,$9F,$9B,$87,$83,$83,$87,$83,$87,$87,$83,$8B,
1024 $8F),
1025 ($9F,$9B,$9F,$9B,$9B,$9F,$A7,$A3,$A3,$A7,$A3,$A7,$A7,$A3,$AB,
1026 $AF,$BF,$BB,$BF,$BB,$BB,$BF,$A3,$A7,$A7,$A3,$A7,$A3,$A3,$A7,
1027 $AF,$AB,$BB,$BF,$BB,$BF,$BF,$BB,$87,$83,$83,$87,$83,$87,$87,
1028 $83,$8B,$8F,$9F,$9B,$9F,$9B,$9B,$9F,$83,$87,$87,$83,$87,$83,
1029 $83,$87,$8F,$8B,$9B,$9F,$9B,$9F,$9F,$9B,$A3,$A7,$A7,$A3,$A7,
1030 $A3,$A3,$A7,$AF,$AB,$BB,$BF,$BB,$BF,$BF,$BB,$A7,$A3,$A3,$A7,
1031 $A3,$A7,$A7,$A3,$AB,$AF,$BF,$BB,$BF,$BB,$BB,$BF,$47,$03,$03,
1032 $07,$03,$07,$07,$03,$0B,$0F,$1F,$1B,$1F,$1B,$1B,$1F,$03,$07,
1033 $07,$03,$07,$03,$03,$07,$0F,$0B,$1B,$1F,$1B,$1F,$1F,$1B,$23,
1034 $27,$27,$23,$27,$23,$23,$27,$2F,$2B,$3B,$3F,$3B,$3F,$3F,$3B,
1035 $27,$23,$23,$27,$23,$27,$27,$23,$2B,$2F,$3F,$3B,$3F,$3B,$3B,
1036 $3F,$03,$07,$07,$03,$07,$03,$03,$07,$0F,$0B,$1B,$1F,$1B,$1F,
1037 $1F,$1B,$07,$03,$03,$07,$03,$07,$07,$03,$0B,$0F,$1F,$1B,$1F,
1038 $1B,$1B,$1F,$27,$23,$23,$27,$23,$27,$27,$23,$2B,$2F,$3F,$3B,
1039 $3F,$3B,$3B,$3F,$23,$27,$27,$23,$27,$23,$23,$27,$2F,$2B,$3B,
1040 $3F,$3B,$3F,$3F,$3B,$83,$87,$87,$83,$87,$83,$83,$87,$8F,$8B,
1041 $9B,$9F,$9B,$9F,$9F,$9B,$87,$83,$83,$87,$83,$87,$87,$83,$8B,
1042 $8F));
1043
1044 DAA_A:Array[0..7,0..255] of Byte=(
1045 ($00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$10,$11,$12,$13,$14,
1046 $15,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,
1047 $24,$25,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,
1048 $33,$34,$35,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,
1049 $42,$43,$44,$45,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,
1050 $51,$52,$53,$54,$55,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,
1051 $60,$61,$62,$63,$64,$65,$60,$61,$62,$63,$64,$65,$66,$67,$68,
1052 $69,$70,$71,$72,$73,$74,$75,$70,$71,$72,$73,$74,$75,$76,$77,
1053 $78,$79,$80,$81,$82,$83,$84,$85,$80,$81,$82,$83,$84,$85,$86,
1054 $87,$88,$89,$90,$91,$92,$93,$94,$95,$90,$91,$92,$93,$94,$95,
1055 $96,$97,$98,$99,$00,$01,$02,$03,$04,$05,$00,$01,$02,$03,$04,
1056 $05,$06,$07,$08,$09,$10,$11,$12,$13,$14,$15,$10,$11,$12,$13,
1057 $14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$20,$21,$22,
1058 $23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$30,$31,
1059 $32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$40,
1060 $41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,
1061 $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64,
1062 $65),
1063 ($60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$70,$71,$72,$73,$74,
1064 $75,$70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$80,$81,$82,$83,
1065 $84,$85,$80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$90,$91,$92,
1066 $93,$94,$95,$90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$A0,$A1,
1067 $A2,$A3,$A4,$A5,$A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$B0,
1068 $B1,$B2,$B3,$B4,$B5,$B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,
1069 $C0,$C1,$C2,$C3,$C4,$C5,$C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,
1070 $C9,$D0,$D1,$D2,$D3,$D4,$D5,$D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,
1071 $D8,$D9,$E0,$E1,$E2,$E3,$E4,$E5,$E0,$E1,$E2,$E3,$E4,$E5,$E6,
1072 $E7,$E8,$E9,$F0,$F1,$F2,$F3,$F4,$F5,$F0,$F1,$F2,$F3,$F4,$F5,
1073 $F6,$F7,$F8,$F9,$00,$01,$02,$03,$04,$05,$00,$01,$02,$03,$04,
1074 $05,$06,$07,$08,$09,$10,$11,$12,$13,$14,$15,$10,$11,$12,$13,
1075 $14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$20,$21,$22,
1076 $23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$30,$31,
1077 $32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$40,
1078 $41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,
1079 $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64,
1080 $65),
1081 ($00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$04,$05,$06,$07,$08,
1082 $09,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$14,$15,$16,$17,
1083 $18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$24,$25,$26,
1084 $27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$34,$35,
1085 $36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$44,
1086 $45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,
1087 $54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64,$65,$66,$67,$68,
1088 $69,$64,$65,$66,$67,$68,$69,$70,$71,$72,$73,$74,$75,$76,$77,
1089 $78,$79,$74,$75,$76,$77,$78,$79,$80,$81,$82,$83,$84,$85,$86,
1090 $87,$88,$89,$84,$85,$86,$87,$88,$89,$90,$91,$92,$93,$94,$95,
1091 $96,$97,$98,$99,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,
1092 $45,$46,$47,$48,$49,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,
1093 $54,$55,$56,$57,$58,$59,$54,$55,$56,$57,$58,$59,$60,$61,$62,
1094 $63,$64,$65,$66,$67,$68,$69,$64,$65,$66,$67,$68,$69,$70,$71,
1095 $72,$73,$74,$75,$76,$77,$78,$79,$74,$75,$76,$77,$78,$79,$80,
1096 $81,$82,$83,$84,$85,$86,$87,$88,$89,$84,$85,$86,$87,$88,$89,
1097 $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$94,$95,$96,$97,$98,
1098 $99),
1099 ($A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$A4,$A5,$A6,$A7,$A8,
1100 $A9,$B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$B4,$B5,$B6,$B7,
1101 $B8,$B9,$C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$C4,$C5,$C6,
1102 $C7,$C8,$C9,$D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$D4,$D5,
1103 $D6,$D7,$D8,$D9,$E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$E4,
1104 $E5,$E6,$E7,$E8,$E9,$F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,
1105 $F4,$F5,$F6,$F7,$F8,$F9,$00,$01,$02,$03,$04,$05,$06,$07,$08,
1106 $09,$04,$05,$06,$07,$08,$09,$10,$11,$12,$13,$14,$15,$16,$17,
1107 $18,$19,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,
1108 $27,$28,$29,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,
1109 $36,$37,$38,$39,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,
1110 $45,$46,$47,$48,$49,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,
1111 $54,$55,$56,$57,$58,$59,$54,$55,$56,$57,$58,$59,$60,$61,$62,
1112 $63,$64,$65,$66,$67,$68,$69,$64,$65,$66,$67,$68,$69,$70,$71,
1113 $72,$73,$74,$75,$76,$77,$78,$79,$74,$75,$76,$77,$78,$79,$80,
1114 $81,$82,$83,$84,$85,$86,$87,$88,$89,$84,$85,$86,$87,$88,$89,
1115 $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$94,$95,$96,$97,$98,
1116 $99),
1117 ($06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,
1118 $15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,
1119 $24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F,$30,$31,$32,
1120 $33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$40,$41,
1121 $42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F,$50,
1122 $51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F,
1123 $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,
1124 $6F,$70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,
1125 $7E,$7F,$80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,
1126 $8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,
1127 $9C,$9D,$9E,$9F,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,
1128 $0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,
1129 $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$25,$26,$27,$28,
1130 $29,$2A,$2B,$2C,$2D,$2E,$2F,$30,$31,$32,$33,$34,$35,$36,$37,
1131 $38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$40,$41,$42,$43,$44,$45,$46,
1132 $47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F,$50,$51,$52,$53,$54,$55,
1133 $56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F,$60,$61,$62,$63,$64,
1134 $65),
1135 ($66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F,$70,$71,$72,$73,$74,
1136 $75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F,$80,$81,$82,$83,
1137 $84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,
1138 $93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F,$A0,$A1,
1139 $A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF,$B0,
1140 $B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF,
1141 $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,
1142 $CF,$D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,
1143 $DE,$DF,$E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,
1144 $ED,$EE,$EF,$F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,
1145 $FC,$FD,$FE,$FF,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,
1146 $0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,
1147 $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$25,$26,$27,$28,
1148 $29,$2A,$2B,$2C,$2D,$2E,$2F,$30,$31,$32,$33,$34,$35,$36,$37,
1149 $38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$40,$41,$42,$43,$44,$45,$46,
1150 $47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F,$50,$51,$52,$53,$54,$55,
1151 $56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F,$60,$61,$62,$63,$64,
1152 $65),
1153 ($FA,$FB,$FC,$FD,$FE,$FF,$00,$01,$02,$03,$04,$05,$06,$07,$08,
1154 $09,$0A,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,
1155 $18,$19,$1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$25,$26,
1156 $27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F,$30,$31,$32,$33,$34,$35,
1157 $36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$40,$41,$42,$43,$44,
1158 $45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F,$50,$51,$52,$53,
1159 $54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F,$60,$61,$62,
1160 $63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F,$70,$71,
1161 $72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F,$80,
1162 $81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F,
1163 $90,$91,$92,$93,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,
1164 $3F,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,
1165 $4E,$4F,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,
1166 $5D,$5E,$5F,$60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,
1167 $6C,$6D,$6E,$6F,$70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,
1168 $7B,$7C,$7D,$7E,$7F,$80,$81,$82,$83,$84,$85,$86,$87,$88,$89,
1169 $8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98,
1170 $99),
1171 ($9A,$9B,$9C,$9D,$9E,$9F,$A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,
1172 $A9,$AA,$AB,$AC,$AD,$AE,$AF,$B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,
1173 $B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF,$C0,$C1,$C2,$C3,$C4,$C5,$C6,
1174 $C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF,$D0,$D1,$D2,$D3,$D4,$D5,
1175 $D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF,$E0,$E1,$E2,$E3,$E4,
1176 $E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF,$F0,$F1,$F2,$F3,
1177 $F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF,$00,$01,$02,
1178 $03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F,$10,$11,
1179 $12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F,$20,
1180 $21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F,
1181 $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,
1182 $3F,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,
1183 $4E,$4F,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,
1184 $5D,$5E,$5F,$60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,
1185 $6C,$6D,$6E,$6F,$70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,
1186 $7B,$7C,$7D,$7E,$7F,$80,$81,$82,$83,$84,$85,$86,$87,$88,$89,
1187 $8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98,
1188 $99));
1189
1190 var in_table: array[0..255] of byte;
1191 { $ifndef assembler}
1192 add8_table,sub8_table,cpsub8_table : array[0..255] of byte;
1193 { $endif}
ModifiedCpu/z80cpu.pas +2149−4105
@@ -1,6 +1,6 @@
1 {+-----------------------------------------------------------------------------+ 1 {+-----------------------------------------------------------------------------+
2 | Description: Gameboy Z80-CPU emulation 2 | Description: Gameboy Z80-CPU emulation
3 | last changes: 02.11.2000 3 | Ported from YaSE (written by Christian Hackbart)
4 | 4 |
5 | http://www.tu-ilmenau.de/~hackbart 5 | http://www.tu-ilmenau.de/~hackbart
6 +----------------------------------------------------------------------------+} 6 +----------------------------------------------------------------------------+}
@@ -12,6 +12,8 @@ unit Z80CPU;
12 12
13 interface 13 interface
14 14
15 {$include tables.inc}
16
15 var 17 var
16 z80: array[0..511] of function: byte; 18 z80: array[0..511] of function: byte;
17 19
@@ -21,1500 +23,959 @@ uses vars, machine;
21 23
22 // temporary variables 24 // temporary variables
23 var 25 var
24 b_pair: Pair; 26 addr: Word;
25 cycle: byte; 27 qtemp: Quadruple;
26 b1: byte; 28 ptemp: Pair;
27 w1, w2: word; 29 w1, w2: word;
28 i1, i2: Integer; 30 i1, i2: Integer;
29 31
30 function NOP: byte; 32 {$include procs.inc}
33
34 function nop: byte;
31 begin 35 begin
32 Result := 4; 36 Result := 4;
33 end; 37 end;
34 38
35 function LD_BC_WORD: byte; 39 function unimplemented: byte;
36 begin 40 begin
37 {asm 41 Result := 0;
38 PUSH dword ptr pc.w 42 end;
39 CALL speekb
40 LEA ESP,[ESP+4]
41 MOV bc.l,AL
42 INC word ptr pc.w
43 PUSH dword ptr pc.w
44 CALL speekb
45 LEA ESP,[ESP+4]
46 MOV bc.h,AL
47 INC word ptr pc.w
48 end;}
49 43
50 bc.l := speekb(pc.w); 44 function ld_bc_XXXX: byte;
51 Inc(pc.w); 45 begin
52 bc.h := speekb(pc.w); 46 bc.W := wordpeek(pc.W);
53 Inc(pc.w); 47 Inc(pc.W, 2);
54 48
55 Result := 12; 49 Result := 12;
56 end; 50 end;
57 51
58 function LD_xBC_A: byte; 52 function ld_mbc_a: byte;
59 begin 53 begin
60 {asm 54 spokeb(bc.W, af.h);
61 MOV AX,bc.w
62 PUSH dword ptr af.h
63 PUSH EAX
64 CALL SpokeB
65 LEA ESP,[ESP+8]
66 end;}
67
68 spokeb(bc.w, af.h);
69 55
70 Result := 8; 56 Result := 8;
71 end; 57 end;
72 58
73 function INC_BC: byte; 59 function inc_bc: byte;
74 begin 60 begin
75 asm 61 Inc(bc.w);
76 INC [rip+bc.w]
77 end;
78 62
79 Result := 8; 63 Result := 8;
80 end; 64 end;
81 65
82 function INC_B: byte; 66 function inc_b: byte;
83 begin 67 begin
84 asm 68 af.l := inc_f[bc.h] or (af.l and 1);
85 INC [rip+bc.h] 69 Inc(bc.h);
86 LAHF
87 AND EAX,$5100
88 AND [rip+af.l],1
89 OR [rip+af.l],AH
90 end;
91 70
92 Result := 4; 71 Result := 4;
93 end; 72 end;
94 73
95 function DEC_B: byte; 74 function dec_b: byte;
96 begin 75 begin
97 asm 76 af.l := dec_f[bc.h] or (af.l and 1);
98 DEC [rip+bc.h] 77 Dec(bc.h);
99 LAHF
100 AND [rip+af.l],1
101 AND EAX,$5500
102 OR EAX,$400
103 OR [rip+af.l],AH
104 end;
105 78
106 Result := 4; 79 Result := 4;
107
108 end; 80 end;
109 81
110 function LD_B_BYTE: byte; 82 function ld_b_XX: byte;
111 begin 83 begin
112 {asm 84 bc.h := speekb(pc.W);
113 PUSH dword ptr pc.w 85 Inc(pc.W);
114 CALL speekb
115 LEA ESP,[ESP+4]
116 MOV bc.h,AL
117 INC word ptr pc.w
118 end;}
119
120 bc.h := speekb(pc.w);
121 Inc(pc.w);
122 86
123 Result := 8; 87 Result := 8;
124 end; 88 end;
125 89
126 function RLCA: byte; 90 function rlca: byte;
91 var
92 btemp: byte;
127 begin 93 begin
128 asm 94 btemp := af.l and 1;
129 ROL [rip+af.h],1 95 af.l := rlca_f[btemp][af.h] or (af.l and 196);
130 LAHF 96 af.h := rlca_a[btemp][af.h];
131 AND EAX,$100
132 MOV [rip+af.l],AH
133 end;
134
135 97
136 Result := 4; 98 Result := 4;
137 end; 99 end;
138 100
139 function EX_AF_AF: byte; 101 function ld_xxxx_sp: byte;
140 begin 102 begin
141 {asm 103 {TODO}
142 PUSH dword ptr pc.w
143 CALL speekb
144 LEA ESP,[ESP+4]
145 INC word ptr pc.w
146 PUSH EAX
147 104
148 PUSH dword ptr pc.w
149 CALL speekb
150 LEA ESP,[ESP+4]
151 INC word ptr pc.w
152 XCHG AH,AL
153 POP EBX
154 MOV AL,BL
155 MOV BX,sp_.w
156 PUSH EBX
157 PUSH EAX
158
159 PUSH EBX
160 PUSH EAX
161 CALL SpokeB
162 LEA ESP,[ESP+8]
163
164 POP EAX
165 POP EBX
166 INC EAX
167 XCHG BH,BL
168 PUSH EBX
169 PUSH EAX
170 CALL SpokeB
171 LEA ESP,[ESP+8]
172 end;}
173 Result := 20; 105 Result := 20;
174 end; 106 end;
175 107
176 function ADD_HL_BC: byte; 108 function add_hl_bc: byte;
177 begin 109 begin
178 asm 110 add16(hl.W, bc.W);
179 AND [rip+af.l],64
180 MOV AX,[rip+hl.w]
181 MOV BX,[rip+bc.w]
182
183 111
184 MOV ECX,EAX 112 Result := 12;
185 XOR ECX,EBX
186
187 ADD AX,BX
188 JNC @1
189 OR [rip+af.l],1
190 @1:
191 XOR ECX,EAX
192 TEST ECX,4096
193 JZ @ende
194 OR [rip+af.l],16
195 @ende:
196 MOV [rip+hl.w],AX
197
198 end;
199 Result := 8;
200 end; 113 end;
201 114
202 function LD_A_xBC: byte; 115 function ld_a_mbc: byte;
203 begin 116 begin
204 {asm 117 af.h := speekb(bc.W);
205 MOV AX,bc.w
206 PUSH EAX
207 CALL speekb
208 LEA ESP,[ESP+4]
209 MOV af.h,AL
210 end;}
211
212 af.h := speekb(bc.w);
213 118
214 Result := 8; 119 Result := 8;
215 end; 120 end;
216 121
217 function DEC_BC: byte; 122 function dec_bc: byte;
218 begin 123 begin
219 asm 124 Dec(bc.W);
220 DEC [rip+bc.w]
221 end;
222 125
223 Result := 8; 126 Result := 8;
224 end; 127 end;
225 128
226 function INC_C: byte; 129 function inc_c: byte;
227 begin 130 begin
228 asm 131 af.l := inc_f[bc.l] or (af.l and 1);
229 INC [rip+bc.l] 132 Inc(bc.l);
230 LAHF
231 AND EAX,$5100
232 AND [rip+af.l],1
233 OR [rip+af.l],AH
234 end;
235 133
236 Result := 4; 134 Result := 4;
237 end; 135 end;
238 136
239 function DEC_C: byte; 137 function dec_c: byte;
240 begin 138 begin
241 asm 139 af.l := dec_f[bc.l] or (af.l and 1);
242 DEC [rip+bc.l] 140 Dec(bc.l);
243 LAHF
244 AND [rip+af.l],1
245 AND EAX,$5500
246 OR EAX,$400
247 OR [rip+af.l],AH
248 end;
249 141
250 Result := 4; 142 Result := 4;
251 end; 143 end;
252 144
253 function LD_C_BYTE: byte; 145 function ld_c_XX: byte;
254 begin 146 begin
255 {asm 147 bc.l := speekb(pc.W);
256 PUSH dword ptr pc.w 148 Inc(pc.W);
257 CALL speekb
258 LEA ESP,[ESP+4]
259 MOV bc.l,AL
260 INC word ptr pc.w
261 end;}
262
263 bc.l := speekb(pc.w);
264 Inc(pc.w);
265 149
266 Result := 8; 150 Result := 8;
267 end; 151 end;
268 152
269 function RRCA: byte; 153 function rrca: byte;
154 var
155 btemp: byte;
270 begin 156 begin
271 asm 157 btemp := af.l and 1;
272 ROR [rip+af.h],1 158 af.l := rrca_f[btemp][af.h] or (af.l and 196);
273 LAHF 159 af.h := rrca_a[btemp][af.h];
274 AND EAX,$100
275 MOV [rip+af.l],AH
276 end;
277
278 160
279 Result := 4; 161 Result := 4;
280 end; 162 end;
281 163
282 function DJNZ: byte; 164 function stop: byte;
283 begin 165 begin
284 stop_mode := 1; 166 stop_mode := 1;
285 Inc(pc.w); 167 Inc(pc.w);
286 Result := 10; 168 Result := 10;
287 end; 169 end;
288 170
289 function LD_DE_WORD: byte; 171 function ld_de_XXXX: byte;
290 begin 172 begin
291 {asm 173 de.W := wordpeek(pc.W);
292 PUSH dword ptr pc.w 174 Inc(pc.W, 2);
293 CALL speekb
294 LEA ESP,[ESP+4]
295 MOV de.l,AL
296 INC word ptr pc.w
297
298 PUSH dword ptr pc.w
299 CALL speekb
300 LEA ESP,[ESP+4]
301 MOV de.h,AL
302 INC word ptr pc.w
303 end;}
304
305 de.l := speekb(pc.w);
306 Inc(pc.w);
307 de.h := speekb(pc.w);
308 Inc(pc.w);
309 175
310 Result := 12; 176 Result := 12;
311 end; 177 end;
312 178
313 function LD_xDE_A: byte; 179 function ld_mde_a: byte;
314 begin 180 begin
315 {asm 181 spokeb(de.W, af.h);
316 MOV AX,de.w
317 PUSH dword ptr af.h
318 PUSH EAX
319 CALL SpokeB
320 LEA ESP,[ESP+8]
321 end;}
322
323 spokeb(de.w, af.h);
324 182
325 Result := 8; 183 Result := 8;
326 end; 184 end;
327 185
328 function INC_DE: byte; 186 function inc_de: byte;
329 begin 187 begin
330 asm 188 Inc(de.W);
331 INC [rip+de.w] 189
332 end;
333 Result := 8; 190 Result := 8;
334 end; 191 end;
335 192
336 function INC_D: byte; 193 function inc_d: byte;
337 begin 194 begin
338 asm 195 af.l := inc_f[de.h] or (af.l and 1);
339 INC [rip+de.h] 196 Inc(de.h);
340 LAHF
341 AND EAX,$5100
342 AND [rip+af.l],1
343 OR [rip+af.l],AH
344 end;
345 197
346 Result := 4; 198 Result := 4;
347 end; 199 end;
348 200
349 function DEC_D: byte; 201 function dec_d: byte;
350 begin 202 begin
351 asm 203 af.l := dec_f[de.h] or (af.l and 1);
352 DEC [rip+de.h] 204 Dec(de.h);
353 LAHF
354 AND [rip+af.l],1
355 AND EAX,$5500
356 OR EAX,$400
357 OR [rip+af.l],AH
358 end;
359 205
360 Result := 4; 206 Result := 4;
361 end; 207 end;
362 208
363 function LD_D_BYTE: byte; 209 function ld_d_XX: byte;
364 begin 210 begin
365 {asm 211 de.h := speekb(pc.W);
366 PUSH dword ptr pc.w 212 Inc(pc.W);
367 CALL speekb
368 LEA ESP,[ESP+4]
369 MOV de.h,AL
370 INC word ptr pc.w
371 end;}
372
373 de.h := speekb(pc.w);
374 Inc(pc.w);
375 213
376 Result := 8; 214 Result := 8;
377 end; 215 end;
378 216
379 function RLA: byte; 217 function rla: byte;
218 var
219 btemp: byte;
380 begin 220 begin
381 asm 221 btemp := af.l and 1;
382 MOV AH,[rip+af.l] 222 af.l := rla_f[btemp][af.h] or (af.l and 196);
383 AND EAX,$100 223 af.h := rla_a[btemp][af.h];
384 SAHF
385 RCL [rip+af.h],1
386 LAHF
387 AND EAX,$100
388 MOV [rip+af.l],AH
389 end;
390 224
391 Result := 4; 225 Result := 4;
392 end; 226 end;
393 227
394 function JR: byte; 228 function jr_DIS: byte;
395 begin 229 begin
396 w1 := speekb(pc.w); 230 pc.W := pc.w + shortint(speekb(pc.W)) + 1;
397 asm
398 // XOR EAX,EAX
399 // MOV AX,[rip+pc.w]
400 // PUSH EAX
401 // CALL speekb
402 MOV AX, [rip+w1]
403 LEA ESP,[ESP+4]
404 INC word ptr [rip+pc.w]
405 CBW
406 ADD [rip+pc.w],AX
407 end;
408 231
409 //Inc(pc.w, speekb(pc.w)+1); 232 Result := 12;
410
411 Result := 8;
412 end; 233 end;
413 234
414 function ADD_HL_DE: byte; 235 function add_hl_de: byte;
415 begin 236 begin
416 asm 237 add16(hl.W, de.W);
417 AND [rip+af.l],64
418 MOV AX,[rip+hl.w]
419 MOV BX,[rip+de.w]
420 238
421 239 Result := 12;
422 MOV ECX,EAX
423 XOR CX,BX
424
425 ADD AX,BX
426 JNC @1
427 OR [rip+af.l],1
428 @1:
429 XOR CX,AX
430 TEST CX,4096
431 JZ @ende
432 OR [rip+af.l],16
433 @ende:
434 MOV [rip+hl.w],AX
435
436 end;
437 Result := 8;
438 end; 240 end;
439 241
440 function LD_A_xDE: byte; 242 function ld_a_mde: byte;
441 begin 243 begin
442 {asm 244 af.h := speekb(de.W);
443 MOV AX,de.w
444 PUSH EAX
445 CALL speekb
446 LEA ESP,[ESP+4]
447 MOV af.h,AL
448 end;}
449
450 af.h := speekb(de.w);
451 245
452 Result := 8; 246 Result := 8;
453 end; 247 end;
454 248
455 function DEC_DE: byte; 249 function dec_de: byte;
456 begin 250 begin
457 asm 251 Dec(de.W);
458 DEC [rip+de.w]
459 end;
460 252
461 Result := 8; 253 Result := 8;
462 end; 254 end;
463 255
464 function INC_E: byte; 256 function inc_e: byte;
465 begin 257 begin
466 asm 258 af.l := inc_f[de.l] or (af.l and 1);
467 INC [rip+de.l] 259 Inc(de.l);
468 LAHF
469 AND EAX,$5100
470 AND [rip+af.l],1
471 OR [rip+af.l],AH
472 end;
473 260
474 Result := 4; 261 Result := 4;
475 end; 262 end;
476 263
477 function DEC_E: byte; 264 function dec_e: byte;
478 begin 265 begin
479 asm 266 af.l := dec_f[de.l] or (af.l and 1);
480 DEC [rip+de.l] 267 Dec(de.l);
481 LAHF
482 AND [rip+af.l],1
483 AND EAX,$5500
484 OR EAX,$400
485 OR [rip+af.l],AH
486 end;
487 268
488 Result := 4; 269 Result := 4;
489 end; 270 end;
490 271
491 function LD_E_BYTE: byte; 272 function ld_e_XX: byte;
492 begin 273 begin
493 {asm 274 de.l := speekb(pc.W);
494 PUSH dword ptr pc.w 275 Inc(pc.W);
495 CALL speekb
496 LEA ESP,[ESP+4]
497 MOV de.l,AL
498 INC word ptr pc.w
499 end;}
500
501 de.l := speekb(pc.w);
502 Inc(pc.w);
503 276
504 Result := 8; 277 Result := 8;
505 end; 278 end;
506 279
507 function RRA: byte; 280 function rra: byte;
508 begin 281 begin
509 asm 282 if af.l and 1 = 0 then
510 MOV AH,[rip+af.l] 283 begin
511 SAHF 284 af.l := rra_f[af.h] or (af.l and 196);
512 RCR [rip+af.h],1 285 af.h := rra_a[0][af.h];
513 LAHF 286 end
514 AND AH,1 287 else
515 MOV [rip+af.l],AH 288 begin
289 af.l := rra_f[af.h] or (af.l and 196);
290 af.h := rra_a[1][af.h];
516 end; 291 end;
292
517 Result := 4; 293 Result := 4;
518 end; 294 end;
519 295
520 function JR_NZ: byte; 296 function jr_nz_DIS: byte;
521 begin 297 begin
522 b1 := speekb(pc.w); 298 if af.l and 64 = 0 then
523 Inc(pc.w); 299 begin
524 asm 300 pc.W := pc.w + shortint(speekb(pc.W)) + 1;
525 //PUSH dword ptr [rip+pc.w] 301
526 //CALL speekb 302 Result := 12;
527 //LEA ESP,[ESP+4] 303 end
528 //INC word ptr [rip+pc.w] 304 else
529 MOV AH, 0 305 begin
530 MOV AL, [rip+b1] 306 Inc(pc.W);
531 TEST [rip+af.l],64 307
532 MOV [rip+cycle],8 308 Result := 8;
533 JNZ @ende
534 MOV [rip+cycle],12
535 CBW
536 ADD [rip+pc.w],AX
537 @ende:
538 end; 309 end;
539 Result := cycle;
540 end; 310 end;
541 311
542 function LD_HL_WORD: byte; 312 function ld_hl_XXXX: byte;
543 begin 313 begin
544 {asm 314 hl.W := wordpeek(pc.W);
545 PUSH dword ptr pc.w 315 Inc(pc.W, 2);
546 CALL speekb
547 LEA ESP,[ESP+4]
548 MOV hl.l,AL
549 INC word ptr pc.w
550 PUSH dword ptr pc.w
551 CALL speekb
552 LEA ESP,[ESP+4]
553 MOV hl.h,AL
554 INC word ptr pc.w
555 end;}
556
557 hl.l := speekb(pc.w);
558 Inc(pc.w);
559 hl.h := speekb(pc.w);
560 Inc(pc.w);
561 316
562 Result := 12; 317 Result := 12;
563 end; 318 end;
564 319
565 function LD_xWORD_HL: byte; 320 function ldi_hl_a: byte;
566 begin 321 begin
567 {asm
568 MOV AX,hl.w
569 PUSH EAX
570 PUSH dword ptr af.h
571 PUSH EAX
572 CALL SpokeB
573 LEA ESP,[ESP+8]
574 POP EAX
575 INC EAX
576 MOV hl.w,AX
577 end;}
578
579 spokeb(hl.w, af.h); 322 spokeb(hl.w, af.h);
580 Inc(hl.w); 323 Inc(hl.w);
581 324
582 Result := 8; 325 Result := 8;
583 end; 326 end;
584 327
585 function INC_HL: byte; 328 function inc_hl: byte;
586 begin 329 begin
587 asm 330 Inc(hl.W);
588 INC [rip+hl.w] 331
589 end;
590 Result := 8; 332 Result := 8;
591 end; 333 end;
592 334
593 function INC_H: byte; 335 function inc_h: byte;
594 begin 336 begin
595 asm 337 af.l := inc_f[hl.h] or (af.l and 1);
596 INC [rip+hl.h] 338 Inc(hl.h);
597 LAHF
598 AND EAX,$5100
599 AND [rip+af.l],1
600 OR [rip+af.l],AH
601 end;
602 339
603 Result := 4; 340 Result := 4;
604 end; 341 end;
605 342
606 function DEC_H: byte; 343 function dec_h: byte;
607 begin 344 begin
608 asm 345 af.l := dec_f[hl.h] or (af.l and 1);
609 DEC [rip+hl.h] 346 Dec(hl.h);
610 LAHF
611 AND [rip+af.l],1
612 AND EAX,$5500
613 OR EAX,$400
614 OR [rip+af.l],AH
615 end;
616 347
617 Result := 4; 348 Result := 4;
618 end; 349 end;
619 350
620 function LD_H_BYTE: byte; 351 function ld_h_XX: byte;
621 begin 352 begin
622 {asm 353 hl.h := speekb(pc.W);
623 PUSH dword ptr pc.w 354 Inc(pc.W);
624 CALL speekb
625 LEA ESP,[ESP+4]
626 MOV hl.h,AL
627 INC word ptr pc.w
628 end;}
629
630 hl.h := speekb(pc.w);
631 Inc(pc.w);
632 355
633 Result := 8; 356 Result := 8;
634 end; 357 end;
635 358
636 function DAA: byte; 359 function daa: byte;
360 var
361 daa_select: byte;
637 begin 362 begin
638 asm 363 daa_select := af.l and 19;
639 MOV AH,[rip+af.l] 364 if daa_select and 16 > 0 then
640 MOV BL,AH 365 begin
641 AND BL,4 366 af.l := daa_f[daa_select - 12][af.h];
642 SAHF 367 af.h := daa_a[daa_select - 12][af.h];
643 MOV AL,[rip+af.h] 368 end
644 JP @dec_adjust 369 else
645 //DAA 370 begin
646 JMP @ddld 371 af.l := daa_f[daa_select][af.h];
647 372 af.h := daa_a[daa_select][af.h];
648 @dec_adjust:
649 //DAS
650
651 @ddld:
652 MOV [rip+af.h],AL
653 LAHF
654 AND AH,65
655 OR AH,BL
656 MOV [rip+af.l],AH
657 end; 373 end;
658 374
659 Result := 4; 375 Result := 4;
660 end; 376 end;
661 377
662 function JR_Z: byte; 378 function jr_z_DIS: byte;
663
664 begin 379 begin
665 b1 := speekb(pc.w); 380 if af.l and 64 > 0 then
666 Inc(pc.w); 381 begin
667 asm 382 pc.W := pc.w + shortint(speekb(pc.W)) + 1;
668 //PUSH dword ptr [rip+pc.w] 383
669 //CALL speekb 384 Result := 12;
670 //LEA ESP,[ESP+4] 385 end
671 //INC word ptr [rip+pc.w] 386 else
672 MOV AH, 0 387 begin
673 MOV AL, [rip+b1] 388 Inc(pc.W);
674 TEST [rip+af.l],64
675 MOV [rip+cycle],8
676 JZ @ende
677 MOV [rip+cycle],12
678 CBW
679 ADD [rip+pc.w],AX
680 @ende:
681 end;
682 389
683 Result := cycle; 390 Result := 8;
391 end;
684 end; 392 end;
685 393
686 function ADD_HL_HL: byte; 394 function add_hl_hl: byte;
687 begin 395 begin
688 asm 396 add16(hl.W, hl.W);
689 AND [rip+af.l],64
690 MOV AX,[rip+hl.w]
691 XOR ECX,ECX
692
693 ADD AX,AX
694 JNC @1
695 OR [rip+af.l],1
696 @1:
697 XOR ECX,EAX
698 TEST CX,4096
699 JZ @ende
700 OR [rip+af.l],16
701 @ende:
702 MOV [rip+hl.w],AX
703
704 end;
705 397
706 Result := 8; 398 Result := 12;
707 end; 399 end;
708 400
709 function LD_HL_xWORD: byte; 401 function ldi_a_hl: byte;
710 begin 402 begin
711 {asm
712 MOV AX,hl.w
713 PUSH EAX
714 PUSH EAX
715 CALL speekb
716 LEA ESP,[ESP+4]
717 MOV af.h,AL
718 POP EAX
719 INC AX
720 MOV hl.w,AX
721 end;}
722
723 af.h := speekb(hl.w); 403 af.h := speekb(hl.w);
724 Inc(hl.w); 404 Inc(hl.w);
725 405
726 Result := 8; 406 Result := 8;
727 end; 407 end;
728 408
729 function DEC_HL: byte; 409 function dec_hl: byte;
730 begin 410 begin
731 asm 411 Dec(hl.W);
732 DEC [rip+hl.w]
733 end;
734 412
735 Result := 8; 413 Result := 8;
736 end; 414 end;
737 415
738 function INC_L: byte; 416 function inc_l: byte;
739 begin 417 begin
740 asm 418 af.l := inc_f[hl.l] or (af.l and 1);
741 INC [rip+hl.l] 419 Inc(hl.l);
742 LAHF
743 AND EAX,$5100
744 AND [rip+af.l],1
745 OR [rip+af.l],AH
746 end;
747 420
748 Result := 4; 421 Result := 4;
749 end; 422 end;
750 423
751 function DEC_L: byte; 424 function dec_l: byte;
752 begin 425 begin
753 asm 426 af.l := dec_f[hl.l] or (af.l and 1);
754 DEC [rip+hl.l] 427 Dec(hl.l);
755 LAHF
756 AND [rip+af.l],1
757 AND EAX,$5500
758 OR EAX,$400
759 OR [rip+af.l],AH
760 end;
761 428
762 Result := 4; 429 Result := 4;
763 end; 430 end;
764 431
765 function LD_L_BYTE: byte; 432 function ld_l_XX: byte;
766 begin 433 begin
767 {asm 434 hl.l := speekb(pc.W);
768 PUSH dword ptr pc.w 435 Inc(pc.W);
769 CALL speekb
770 LEA ESP,[ESP+4]
771 INC word ptr pc.w
772 MOV hl.l,AL
773 end;}
774
775 Inc(pc.w);
776 hl.l := speekb(pc.w);
777 436
778 Result := 8; 437 Result := 8;
779 end; 438 end;
780 439
781 function CPL: byte; 440 function cpl: byte;
782 begin 441 begin
783 asm 442 af.h := af.h xor 255;
784 XOR [rip+af.h],255 443 af.l := af.l or 18;
785 OR [rip+af.l],$14 444 copy_b53(af.h);
786 end;
787 445
788 Result := 4; 446 Result := 4;
789 end; 447 end;
790 448
791 function JR_NC: byte; 449 function jr_nc_DIS: byte;
792
793 begin 450 begin
794 b1 := speekb(pc.w); 451 if af.l and 1 = 0 then
795 Inc(pc.w); 452 begin
796 asm 453 pc.W := pc.w + shortint(speekb(pc.W)) + 1;
797 //PUSH dword ptr [rip+pc.w] 454
798 //CALL speekb 455 Result := 12;
799 //LEA ESP,[ESP+4] 456 end
800 //INC word ptr [rip+pc.w] 457 else
801 MOV AH, 0 458 begin
802 MOV AL, [rip+b1] 459 Inc(pc.W);
803 TEST [rip+af.l],1
804 MOV [rip+cycle],8
805 JNZ @ende
806 MOV [rip+cycle],12
807 CBW
808 ADD [rip+pc.w],AX
809 @ende:
810 end;
811 460
812 Result := cycle; 461 Result := 8;
462 end;
813 end; 463 end;
814 464
815 function LD_SP_WORD: byte; 465 function ld_sp_XXXX: byte;
816 begin 466 begin
817 {asm 467 sp_.W := wordpeek(pc.W);
818 PUSH dword ptr pc.w 468 Inc(pc.W, 2);
819 CALL speekb
820 LEA ESP,[ESP+4]
821 INC word ptr pc.w
822 PUSH EAX
823 PUSH dword ptr pc.w
824 CALL speekb
825 LEA ESP,[ESP+4]
826 INC word ptr pc.w
827 SHL EAX,8
828 POP EBX
829 MOV AL,BL
830
831 MOV sp_.w,AX
832 end;}
833
834 sp_.w := wordpeek(pc.w);
835 inc(pc.w,2);
836 469
837 Result := 12; 470 Result := 12;
838 end; 471 end;
839 472
840 function LD_xWORD_A: byte; 473 function ldd_hl_a: byte;
841 begin 474 begin
842 {asm
843 MOV AX,hl.w
844 PUSH EAX
845 PUSH dword ptr af.h
846 PUSH EAX
847 CALL SpokeB
848 LEA ESP,[ESP+8]
849 POP EAX
850 DEC AX
851 MOV hl.w,AX
852 end;}
853
854 spokeb(hl.w, af.h); 475 spokeb(hl.w, af.h);
855 Dec(hl.w); 476 Dec(hl.w);
856 477
857 Result := 8; 478 Result := 8;
858 end; 479 end;
859 480
860 function INC_SP: byte; 481 function inc_sp: byte;
861 begin 482 begin
862 asm 483 Inc(sp_.W);
863 INC [rip+sp_.w]
864 end;
865 484
866 Result := 8; 485 Result := 8;
867 end; 486 end;
868 487
869 function INC_xHL: byte; 488 function inc_mhl: byte;
489 var
490 btemp: byte;
870 begin 491 begin
871 w1 := speekb(hl.w); 492 btemp := speekb(hl.W);
872 asm 493 af.l := inc_f[btemp] or (af.l and 1);
873 MOV AX,[rip+hl.w] 494 spokeb(hl.W, btemp + 1);
874 PUSH RAX
875 // PUSH EAX
876 // CALL speekb
877 // LEA ESP,[ESP+4]
878 MOV AX, [rip+w1]
879 INC AL
880 LAHF
881 AND AH,$51
882 AND [rip+af.l],1
883 OR [rip+af.l],AH
884 POP RBX
885 //PUSH EAX
886 //PUSH EBX
887 //CALL SpokeB
888 //LEA ESP,[ESP+8]
889 MOV [rip+w1], BX
890 MOV [rip+w2], AX
891 end;
892 spokeb(w1, w2);
893 495
894 Result := 12; 496 Result := 12;
895 end; 497 end;
896 498
897 function DEC_xHL: byte; 499 function dec_mhl: byte;
500 var
501 btemp: byte;
898 begin 502 begin
899 w1 := speekb(hl.w); 503 btemp := speekb(hl.W);
900 asm 504 af.l := dec_f[btemp] or (af.l and 1);
901 MOV AX,[rip+hl.w] 505 spokeb(hl.W, btemp - 1);
902 PUSH RAX
903 //PUSH EAX
904 //CALL speekb
905 //LEA ESP,[ESP+4]
906 MOV AX, [rip+w1]
907 DEC AL
908 LAHF
909 AND [rip+af.l],1
910 AND AH,$55
911 OR EAX,$400
912 OR [rip+af.l],AH
913 POP RBX
914 //PUSH EAX
915 //PUSH EBX
916 //CALL SpokeB
917 //LEA ESP,[ESP+8]
918 MOV [rip+w1], BX
919 MOV [rip+w2], AX
920 end;
921 spokeb(w1, w2);
922 506
923 Result := 12; 507 Result := 12;
924 end; 508 end;
925 509
926 function LD_xHL_BYTE: byte; 510 function ld_mhl_XX: byte;
927 begin 511 begin
928 {asm 512 spokeb(hl.W, speekb(pc.W));
929 PUSH dword ptr pc.w 513 Inc(pc.W);
930 CALL speekb
931 LEA ESP,[ESP+4]
932 INC word ptr pc.w
933 PUSH EAX
934 MOV AX,hl.w
935 PUSH EAX
936 CALL SpokeB
937 LEA ESP,[ESP+8]
938 end;}
939
940 w1 := speekb(pc.w);
941 Inc(pc.w);
942 spokeb(hl.w, w1);
943 514
944 Result := 12; 515 Result := 12;
945 end; 516 end;
946 517
947 function SCF: byte; 518 function scf: byte;
948 begin 519 begin
949 asm 520 af.l := af.l and 237;
950 AND [rip+af.l],64 521 copy_b53(af.h);
951 OR [rip+af.l],1 522 af.l := af.l or 1;
952 end;
953 523
954 Result := 4; 524 Result := 4;
955 end; 525 end;
956 526
957 function JR_C: byte; 527 function jr_c_DIS: byte;
958
959 begin 528 begin
960 w1 := speekb(pc.w); 529 if af.l and 1 > 0 then
961 asm 530 begin
962 //PUSH dword ptr [rip+pc.w] 531 pc.W := pc.w + shortint(speekb(pc.W)) + 1;
963 //CALL speekb
964 //LEA ESP,[ESP+4]
965 MOV AX, [rip+w1]
966 INC word ptr [rip+pc.w]
967 TEST [rip+af.l],1
968 MOV [rip+cycle],8
969 JZ @ende
970 MOV [rip+cycle],12
971 CBW
972 ADD [rip+pc.w],AX
973 @ende:
974 end;
975 532
976 Result := cycle; 533 Result := 12;
977 end; 534 end
535 else
536 begin
537 Inc(pc.W);
978 538
979 function ADD_HL_SP: byte; 539 Result := 8;
980 begin
981 asm
982 AND [rip+af.l],64
983 MOV AX,[rip+hl.w]
984 MOV BX,[rip+sp_.w]
985
986
987 MOV ECX,EAX
988 XOR ECX,EBX
989
990 ADD AX,BX
991 JNC @1
992 OR [rip+af.l],1
993 @1:
994 XOR ECX,EAX
995 TEST ECX,4096
996 JZ @ende
997 OR [rip+af.l],16
998 @ende:
999 MOV [rip+hl.w],AX
1000 end; 540 end;
1001 Result := 8;
1002 end; 541 end;
1003 542
1004 function LD_A_xWORD: byte; 543 function add_hl_sp: byte;
1005 begin 544 begin
1006 {asm 545 add16(hl.W, sp_.W);
1007 MOV AX,hl.w 546
1008 PUSH EAX 547 Result := 12;
1009 PUSH EAX 548 end;
1010 CALL speekb
1011 LEA ESP,[ESP+4]
1012 MOV af.h,AL
1013 POP EAX
1014 DEC AX
1015 MOV hl.w,AX
1016 end;}
1017 549
550 function ldd_a_hl: byte;
551 begin
1018 af.h := speekb(hl.w); 552 af.h := speekb(hl.w);
1019 Dec(hl.w); 553 Dec(hl.w);
1020 554
1021 Result := 8; 555 Result := 8;
1022 end; 556 end;
1023 557
1024 function DEC_SP: byte; 558 function dec_sp: byte;
1025 begin 559 begin
1026 asm 560 Dec(sp_.W);
1027 DEC [rip+sp_.w] 561
1028 end;
1029 Result := 8; 562 Result := 8;
1030 end; 563 end;
1031 564
1032 function INC_A: byte; 565 function Z80inc_a: byte;
1033 begin 566 begin
1034 asm 567 af.l := inc_f[af.h] or (af.l and 1);
1035 INC [rip+af.h] 568 Inc(af.h);
1036 LAHF
1037 AND EAX,$5100
1038 AND [rip+af.l],1
1039 OR [rip+af.l],AH
1040 end;
1041 569
1042 Result := 4; 570 Result := 4;
1043 end; 571 end;
1044 572
1045 function DEC_A: byte; 573 function Z80dec_a: byte;
1046 begin 574 begin
1047 asm 575 af.l := dec_f[af.h] or (af.l and 1);
1048 DEC [rip+af.h] 576 Dec(af.h);
1049 LAHF
1050 AND [rip+af.l],1
1051 AND EAX,$5500
1052 OR EAX,$400
1053 OR [rip+af.l],AH
1054 end;
1055 577
1056 Result := 4; 578 Result := 4;
1057 end; 579 end;
1058 580
1059 function LD_A_BYTE: byte; 581 function ld_a_XX: byte;
1060 begin 582 begin
1061 {asm 583 af.h := speekb(pc.W);
1062 PUSH dword ptr pc.w 584 Inc(pc.W);
1063 CALL speekb
1064 LEA ESP,[ESP+4]
1065 MOV af.h,AL
1066 INC word ptr pc.w
1067 end;}
1068
1069 af.h := speekb(pc.w);
1070 Inc(pc.w);
1071 585
1072 Result := 8; 586 Result := 8;
1073 end; 587 end;
1074 588
1075 function CCF: byte; 589 function ccf: byte;
1076 begin 590 begin
1077 asm 591 af.l := af.l xor 1;
1078 MOV AH,[rip+af.l] 592 af.l := af.l and 253;
1079 SAHF 593 copy_b53(af.h);
1080 CMC
1081 LAHF
1082 AND AH,65
1083 MOV [rip+af.l],AH
1084 end;
1085 594
1086 Result := 4; 595 Result := 4;
1087 end; 596 end;
1088 597
1089 function LD_B_B: byte; 598 function ld_b_b: byte;
1090 begin 599 begin
600 bc.h := bc.h;
601
1091 Result := 4; 602 Result := 4;
1092 end; 603 end;
1093 604
1094 function LD_B_C: byte; 605 function ld_b_c: byte;
1095 begin 606 begin
1096 bc.h := bc.l; 607 bc.h := bc.l;
608
1097 Result := 4; 609 Result := 4;
1098 end; 610 end;
1099 611
1100 function LD_B_D: byte; 612 function ld_b_d: byte;
1101 begin 613 begin
1102 bc.h := de.h; 614 bc.h := de.h;
615
1103 Result := 4; 616 Result := 4;
1104 end; 617 end;
1105 618
1106 function LD_B_E: byte; 619 function ld_b_e: byte;
1107 begin 620 begin
1108 bc.h := de.l; 621 bc.h := de.l;
622
1109 Result := 4; 623 Result := 4;
1110 end; 624 end;
1111 625
1112 function LD_B_H: byte; 626 function ld_b_h: byte;
1113 begin 627 begin
1114 bc.h := hl.h; 628 bc.h := hl.h;
629
1115 Result := 4; 630 Result := 4;
1116 end; 631 end;
1117 632
1118 function LD_B_L: byte; 633 function ld_b_l: byte;
1119 begin 634 begin
1120 bc.h := hl.l; 635 bc.h := hl.l;
636
1121 Result := 4; 637 Result := 4;
1122 end; 638 end;
1123 639
1124 function LD_B_xHL: byte; 640 function ld_b_hl: byte;
1125 begin 641 begin
1126 {asm 642 bc.h := speekb(hl.W);
1127 MOV AX,hl.w
1128 PUSH EAX
1129 CALL speekb
1130 LEA ESP,[ESP+4]
1131 MOV bc.h,AL
1132 end;}
1133
1134 bc.h := speekb(hl.w);
1135 643
1136 Result := 8; 644 Result := 8;
1137 end; 645 end;
1138 646
1139 function LD_B_A: byte; 647 function ld_b_a: byte;
1140 begin 648 begin
1141 bc.h := af.h; 649 bc.h := af.h;
650
1142 Result := 4; 651 Result := 4;
1143 end; 652 end;
1144 653
1145 function LD_C_B: byte; 654 function ld_c_b: byte;
1146 begin 655 begin
1147 bc.l := bc.h; 656 bc.l := bc.h;
657
1148 Result := 4; 658 Result := 4;
1149 end; 659 end;
1150 660
1151 function LD_C_C: byte; 661 function ld_c_c: byte;
1152 begin 662 begin
663 bc.l := bc.l;
664
1153 Result := 4; 665 Result := 4;
1154 end; 666 end;
1155 667
1156 function LD_C_D: byte; 668 function ld_c_d: byte;
1157 begin 669 begin
1158 bc.l := de.h; 670 bc.l := de.h;
671
1159 Result := 4; 672 Result := 4;
1160 end; 673 end;
1161 674
1162 function LD_C_E: byte; 675 function ld_c_e: byte;
1163 begin 676 begin
1164 bc.l := de.l; 677 bc.l := de.l;
678
1165 Result := 4; 679 Result := 4;
1166 end; 680 end;
1167 681
1168 function LD_C_H: byte; 682 function ld_c_h: byte;
1169 begin 683 begin
1170 bc.l := hl.h; 684 bc.l := hl.h;
685
1171 Result := 4; 686 Result := 4;
1172 end; 687 end;
1173 688
1174 function LD_C_L: byte; 689 function ld_c_l: byte;
1175 begin 690 begin
1176 bc.l := hl.l; 691 bc.l := hl.l;
692
1177 Result := 4; 693 Result := 4;
1178 end; 694 end;
1179 695
1180 function LD_C_xHL: byte; 696 function ld_c_hl: byte;
1181 begin 697 begin
1182 {asm 698 bc.l := speekb(hl.W);
1183 MOV AX,hl.w
1184 PUSH EAX
1185 CALL speekb
1186 LEA ESP,[ESP+4]
1187 MOV bc.l,AL
1188 end;}
1189
1190 bc.l := speekb(hl.w);
1191 699
1192 Result := 8; 700 Result := 8;
1193 end; 701 end;
1194 702
1195 function LD_C_A: byte; 703 function ld_c_a: byte;
1196 begin 704 begin
1197 bc.l := af.h; 705 bc.l := af.h;
706
1198 Result := 4; 707 Result := 4;
1199 end; 708 end;
1200 709
1201 function LD_D_B: byte; 710 function ld_d_b: byte;
1202 begin 711 begin
1203 de.h := bc.h; 712 de.h := bc.h;
1204 713
1205 Result := 4; 714 Result := 4;
1206 end; 715 end;
1207 716
1208 function LD_D_C: byte; 717 function ld_d_c: byte;
1209 begin 718 begin
1210 de.h := bc.l; 719 de.h := bc.l;
720
1211 Result := 4; 721 Result := 4;
1212 end; 722 end;
1213 723
1214 function LD_D_D: byte; 724 function ld_d_d: byte;
1215 begin 725 begin
726 de.h := de.h;
727
1216 Result := 4; 728 Result := 4;
1217 end; 729 end;
1218 730
1219 function LD_D_E: byte; 731 function ld_d_e: byte;
1220 begin 732 begin
1221 de.h := de.l; 733 de.h := de.l;
734
1222 Result := 4; 735 Result := 4;
1223 end; 736 end;
1224 737
1225 function LD_D_H: byte; 738 function ld_d_h: byte;
1226 begin 739 begin
1227 de.h := hl.h; 740 de.h := hl.h;
741
1228 Result := 4; 742 Result := 4;
1229 end; 743 end;
1230 744
1231 function LD_D_L: byte; 745 function ld_d_l: byte;
1232 begin 746 begin
1233 de.h := hl.l; 747 de.h := hl.l;
748
1234 Result := 4; 749 Result := 4;
1235 end; 750 end;
1236 751
1237 function LD_D_xHL: byte; 752 function ld_d_hl: byte;
1238 begin 753 begin
1239 {asm 754 de.h := speekb(hl.W);
1240 MOV AX,hl.w
1241 PUSH EAX
1242 CALL speekb
1243 LEA ESP,[ESP+4]
1244 MOV de.h,AL
1245 end;}
1246
1247 de.h := speekb(hl.w);
1248 755
1249 Result := 8; 756 Result := 8;
1250 end; 757 end;
1251 758
1252 function LD_D_A: byte; 759 function ld_d_a: byte;
1253 begin 760 begin
1254 de.h := af.h; 761 de.h := af.h;
762
1255 Result := 4; 763 Result := 4;
1256 end; 764 end;
1257 765
1258 function LD_E_B: byte; 766 function ld_e_b: byte;
1259 begin 767 begin
1260 de.l := bc.h; 768 de.l := bc.h;
769
1261 Result := 4; 770 Result := 4;
1262 end; 771 end;
1263 772
1264 function LD_E_C: byte; 773 function ld_e_c: byte;
1265 begin 774 begin
1266 de.l := bc.l; 775 de.l := bc.l;
776
1267 Result := 4; 777 Result := 4;
1268 end; 778 end;
1269 779
1270 function LD_E_D: byte; 780 function ld_e_d: byte;
1271 begin 781 begin
1272 de.l := de.h; 782 de.l := de.h;
783
1273 Result := 4; 784 Result := 4;
1274 end; 785 end;
1275 786
1276 function LD_E_E: byte; 787 function ld_e_e: byte;
1277 begin 788 begin
789 de.l := de.l;
790
1278 Result := 4; 791 Result := 4;
1279 end; 792 end;
1280 793
1281 function LD_E_H: byte; 794 function ld_e_h: byte;
1282 begin 795 begin
1283 de.l := hl.h; 796 de.l := hl.h;
797
1284 Result := 4; 798 Result := 4;
1285 end; 799 end;
1286 800
1287 function LD_E_L: byte; 801 function ld_e_l: byte;
1288 begin 802 begin
1289 de.l := hl.l; 803 de.l := hl.l;
804
1290 Result := 4; 805 Result := 4;
1291 end; 806 end;
1292 807
1293 function LD_E_xHL: byte; 808 function ld_e_hl: byte;
1294 begin 809 begin
1295 {asm 810 de.l := speekb(hl.W);
1296 MOV AX,hl.w
1297 PUSH EAX
1298 CALL speekb
1299 LEA ESP,[ESP+4]
1300 MOV de.l,AL
1301 end;}
1302
1303 de.l := speekb(hl.w);
1304 811
1305 Result := 8; 812 Result := 8;
1306 end; 813 end;
1307 814
1308 function LD_E_A: byte; 815 function ld_e_a: byte;
1309 begin 816 begin
1310 de.l := af.h; 817 de.l := af.h;
818
1311 Result := 4; 819 Result := 4;
1312 end; 820 end;
1313 821
1314 function LD_H_B: byte; 822 function ld_h_b: byte;
1315 begin 823 begin
1316 hl.h := bc.h; 824 hl.h := bc.h;
825
1317 Result := 4; 826 Result := 4;
1318 end; 827 end;
1319 828
1320 function LD_H_C: byte; 829 function ld_h_c: byte;
1321 begin 830 begin
1322 hl.h := bc.l; 831 hl.h := bc.l;
832
1323 Result := 4; 833 Result := 4;
1324 end; 834 end;
1325 835
1326 function LD_H_D: byte; 836 function ld_h_d: byte;
1327 begin 837 begin
1328 hl.h := de.h; 838 hl.h := de.h;
839
1329 Result := 4; 840 Result := 4;
1330 end; 841 end;
1331 842
1332 function LD_H_E: byte; 843 function ld_h_e: byte;
1333 begin 844 begin
1334 hl.h := de.l; 845 hl.h := de.l;
846
1335 Result := 4; 847 Result := 4;
1336 end; 848 end;
1337 849
1338 function LD_H_H: byte; 850 function ld_h_h: byte;
1339 begin 851 begin
852 hl.h := hl.h;
853
1340 Result := 4; 854 Result := 4;
1341 end; 855 end;
1342 856
1343 function LD_H_L: byte; 857 function ld_h_l: byte;
1344 begin 858 begin
1345 hl.h := hl.l; 859 hl.h := hl.l;
860
1346 Result := 4; 861 Result := 4;
1347 end; 862 end;
1348 863
1349 function LD_H_xHL: byte; 864 function ld_h_hl: byte;
1350 begin 865 begin
1351 {asm 866 hl.h := speekb(hl.W);
1352 MOV AX,hl.w
1353 PUSH EAX
1354 CALL speekb
1355 LEA ESP,[ESP+4]
1356 MOV hl.h,AL
1357 end;}
1358
1359 hl.h := speekb(hl.w);
1360 867
1361 Result := 8; 868 Result := 8;
1362 end; 869 end;
1363 870
1364 function LD_H_A: byte; 871 function ld_h_a: byte;
1365 begin 872 begin
1366 hl.h := af.h; 873 hl.h := af.h;
874
1367 Result := 4; 875 Result := 4;
1368 end; 876 end;
1369 877
1370 function LD_L_B: byte; 878 function ld_l_b: byte;
1371 begin 879 begin
1372 hl.l := bc.h; 880 hl.l := bc.h;
881
1373 Result := 4; 882 Result := 4;
1374 end; 883 end;
1375 884
1376 function LD_L_C: byte; 885 function ld_l_c: byte;
1377 begin 886 begin
1378 hl.l := bc.l; 887 hl.l := bc.l;
888
1379 Result := 4; 889 Result := 4;
1380 end; 890 end;
1381 891
1382 function LD_L_D: byte; 892 function ld_l_d: byte;
1383 begin 893 begin
1384 hl.l := de.h; 894 hl.l := de.h;
895
1385 Result := 4; 896 Result := 4;
1386 end; 897 end;
1387 898
1388 function LD_L_E: byte; 899 function ld_l_e: byte;
1389 begin 900 begin
1390 hl.l := de.l; 901 hl.l := de.l;
902
1391 Result := 4; 903 Result := 4;
1392 end; 904 end;
1393 905
1394 function LD_L_H: byte; 906 function ld_l_h: byte;
1395 begin 907 begin
1396 hl.l := hl.h; 908 hl.l := hl.h;
909
1397 Result := 4; 910 Result := 4;
1398 end; 911 end;
1399 912
1400 function LD_L_L: byte; 913 function ld_l_l: byte;
1401 begin 914 begin
915 hl.l := hl.l;
916
1402 Result := 4; 917 Result := 4;
1403 end; 918 end;
1404 919
1405 function LD_L_xHL: byte; 920 function ld_l_hl: byte;
1406 begin 921 begin
1407 {asm 922 hl.l := speekb(hl.W);
1408 MOV AX,hl.w
1409 PUSH EAX
1410 CALL speekb
1411 LEA ESP,[ESP+4]
1412 MOV hl.l,AL
1413 end;}
1414
1415 hl.l := speekb(hl.w);
1416 923
1417 Result := 8; 924 Result := 8;
1418 end; 925 end;
1419 926
1420 function LD_L_A: byte; 927 function ld_l_a: byte;
1421 begin 928 begin
1422 hl.l := af.h; 929 hl.l := af.h;
930
1423 Result := 4; 931 Result := 4;
1424 end; 932 end;
1425 933
1426 function LD_xHL_B: byte; 934 function ld_hl_b: byte;
1427 begin 935 begin
1428 {asm 936 spokeb(hl.W, bc.h);
1429 MOV AX,hl.w
1430 PUSH dword ptr bc.h
1431 PUSH EAX
1432 CALL SpokeB
1433 LEA ESP,[ESP+8]
1434 end;}
1435
1436 spokeb(hl.w, bc.h);
1437 937
1438 Result := 8; 938 Result := 8;
1439 end; 939 end;
1440 940
1441 function LD_xHL_C: byte; 941 function ld_hl_c: byte;
1442 begin 942 begin
1443 {asm 943 spokeb(hl.W, bc.l);
1444 MOV AX,hl.w
1445 PUSH dword ptr bc.l
1446 PUSH EAX
1447 CALL SpokeB
1448 LEA ESP,[ESP+8]
1449 end;}
1450
1451 spokeb(hl.w, bc.l);
1452 944
1453 Result := 8; 945 Result := 8;
1454 end; 946 end;
1455 947
1456 function LD_xHL_D: byte; 948 function ld_hl_d: byte;
1457 begin 949 begin
1458 {asm 950 spokeb(hl.W, de.h);
1459 MOV AX,hl.w
1460 PUSH dword ptr de.h
1461 PUSH EAX
1462 CALL SpokeB
1463 LEA ESP,[ESP+8]
1464 end;}
1465
1466 spokeb(hl.w, de.h);
1467 951
1468 Result := 8; 952 Result := 8;
1469 end; 953 end;
1470 954
1471 function LD_xHL_E: byte; 955 function ld_hl_e: byte;
1472 begin 956 begin
1473 {asm 957 spokeb(hl.W, de.l);
1474 MOV AX,hl.w
1475 PUSH dword ptr de.l
1476 PUSH EAX
1477 CALL SpokeB
1478 LEA ESP,[ESP+8]
1479 end;}
1480
1481 spokeb(hl.w, de.l);
1482 958
1483 Result := 8; 959 Result := 8;
1484 end; 960 end;
1485 961
1486 function LD_xHL_H: byte; 962 function ld_hl_h: byte;
1487 begin 963 begin
1488 {asm 964 spokeb(hl.W, hl.h);
1489 MOV AX,hl.w
1490 PUSH dword ptr hl.h
1491 PUSH EAX
1492 CALL SpokeB
1493 LEA ESP,[ESP+8]
1494 end;}
1495
1496 spokeb(hl.w, hl.h);
1497 965
1498 Result := 8; 966 Result := 8;
1499 end; 967 end;
1500 968
1501 function LD_xHL_L: byte; 969 function ld_hl_l: byte;
1502 begin 970 begin
1503 {asm 971 spokeb(hl.W, hl.l);
1504 MOV AX,hl.w
1505 PUSH dword ptr hl.l
1506 PUSH EAX
1507 CALL SpokeB
1508 LEA ESP,[ESP+8]
1509 end;}
1510
1511 spokeb(hl.w, hl.l);
1512 972
1513 Result := 8; 973 Result := 8;
1514 end; 974 end;
1515 975
1516 function HALT: byte; 976 function Z80halt: byte;
1517 begin 977 begin
978 writeln('halting');
1518 if gbr_ime then 979 if gbr_ime then
1519 halt_mode := 1 980 halt_mode := 1
1520 else 981 else
@@ -1522,1363 +983,777 @@ begin
1522 Result := 4; 983 Result := 4;
1523 end; 984 end;
1524 985
1525 function LD_xHL_A: byte; 986 function ld_hl_a: byte;
1526 begin 987 begin
1527 {asm 988 spokeb(hl.W, af.h);
1528 MOV AX,hl.w
1529 PUSH dword ptr af.h
1530 PUSH EAX
1531 CALL SpokeB
1532 LEA ESP,[ESP+8]
1533 end;}
1534
1535 spokeb(hl.w, af.h);
1536 989
1537 Result := 8; 990 Result := 8;
1538 end; 991 end;
1539 992
1540 function LD_A_B: byte; 993 function ld_a_b: byte;
1541 begin 994 begin
1542 af.h := bc.h; 995 af.h := bc.h;
996
1543 Result := 4; 997 Result := 4;
1544 end; 998 end;
1545 999
1546 function LD_A_C: byte; 1000 function ld_a_c: byte;
1547 begin 1001 begin
1548 af.h := bc.l; 1002 af.h := bc.l;
1003
1549 Result := 4; 1004 Result := 4;
1550 end; 1005 end;
1551 1006
1552 function LD_A_D: byte; 1007 function ld_a_d: byte;
1553 begin 1008 begin
1554 af.h := de.h; 1009 af.h := de.h;
1010
1555 Result := 4; 1011 Result := 4;
1556 end; 1012 end;
1557 1013
1558 function LD_A_E: byte; 1014 function ld_a_e: byte;
1559 begin 1015 begin
1560 af.h := de.l; 1016 af.h := de.l;
1017
1561 Result := 4; 1018 Result := 4;
1562 end; 1019 end;
1563 1020
1564 function LD_A_H: byte; 1021 function ld_a_h: byte;
1565 begin 1022 begin
1566 af.h := hl.h; 1023 af.h := hl.h;
1024
1567 Result := 4; 1025 Result := 4;
1568 end; 1026 end;
1569 1027
1570 function LD_A_L: byte; 1028 function ld_a_l: byte;
1571 begin 1029 begin
1572 af.h := hl.l; 1030 af.h := hl.l;
1031
1573 Result := 4; 1032 Result := 4;
1574 end; 1033 end;
1575 1034
1576 function LD_A_xHL: byte; 1035 function ld_a_hl: byte;
1577 begin 1036 begin
1578 {asm 1037 af.h := speekb(hl.W);
1579 MOV AX,hl.w
1580 PUSH EAX
1581 CALL speekb
1582 LEA ESP,[ESP+4]
1583 MOV af.h,AL
1584 end;}
1585
1586 af.h := speekb(hl.w);
1587 1038
1588 Result := 8; 1039 Result := 8;
1589 end; 1040 end;
1590 1041
1591 function LD_A_A: byte; 1042 function ld_a_a: byte;
1592 begin 1043 begin
1044 af.h := af.h;
1045
1593 Result := 4; 1046 Result := 4;
1594 end; 1047 end;
1595 1048
1596 function ADD_B: byte; 1049 function add_a_b: byte;
1597 begin 1050 begin
1598 asm 1051 add8(af.h, bc.h);
1599 MOV AL,[rip+bc.h]
1600 ADD [rip+af.h],AL
1601 LAHF
1602 AND EAX,$5100
1603 MOV [rip+af.l],AH
1604 1052
1605 end;
1606 Result := 4; 1053 Result := 4;
1607 end; 1054 end;
1608 1055
1609 function ADD_C: byte; 1056 function add_a_c: byte;
1610 begin 1057 begin
1611 asm 1058 add8(af.h, bc.l);
1612 MOV AL,[rip+bc.l]
1613 ADD [rip+af.h],AL
1614 LAHF
1615 AND AH,81
1616 MOV [rip+af.l],AH
1617 1059
1618 end;
1619 Result := 4; 1060 Result := 4;
1620 end; 1061 end;
1621 1062
1622 function ADD_D: byte; 1063 function add_a_d: byte;
1623 begin 1064 begin
1624 asm 1065 add8(af.h, de.h);
1625 MOV AL,[rip+de.h]
1626 ADD [rip+af.h],AL
1627 LAHF
1628 AND AH,81
1629 MOV [rip+af.l],AH
1630
1631 end;
1632 1066
1633 Result := 4; 1067 Result := 4;
1634 end; 1068 end;
1635 1069
1636 function ADD_E: byte; 1070 function add_a_e: byte;
1637 begin 1071 begin
1638 asm 1072 add8(af.h, de.l);
1639 MOV AL,[rip+de.l]
1640 ADD [rip+af.h],AL
1641 LAHF
1642 AND AH,81
1643 MOV [rip+af.l],AH
1644
1645 end;
1646 1073
1647 Result := 4; 1074 Result := 4;
1648 end; 1075 end;
1649 1076
1650 function ADD_H: byte; 1077 function add_a_h: byte;
1651 begin 1078 begin
1652 asm 1079 add8(af.h, hl.h);
1653 MOV AL,[rip+hl.h]
1654 ADD [rip+af.h],AL
1655 LAHF
1656 AND AH,81
1657 MOV [rip+af.l],AH
1658
1659 end;
1660 1080
1661 Result := 4; 1081 Result := 4;
1662 end; 1082 end;
1663 1083
1664 function ADD_L: byte; 1084 function add_a_l: byte;
1665 begin 1085 begin
1666 asm 1086 add8(af.h, hl.l);
1667 MOV AL,[rip+hl.l]
1668 ADD [rip+af.h],AL
1669 LAHF
1670 AND AH,81
1671 MOV [rip+af.l],AH
1672 1087
1673 end;
1674 Result := 4; 1088 Result := 4;
1675 end; 1089 end;
1676 1090
1677 function ADD_xHL: byte; 1091 function add_a_hl: byte;
1678 begin 1092 begin
1679 w1 := speekb(hl.w); 1093 add8(af.h, speekb(hl.W));
1680 asm
1681 //MOV AX,[rip+hl.w]
1682 //PUSH EAX
1683 //CALL speekb
1684 //LEA ESP,[ESP+4]
1685 MOV AX, [rip+w1]
1686
1687 ADD [rip+af.h],AL
1688 LAHF
1689 AND EAX,$5100
1690 MOV [rip+af.l],AH
1691
1692 end;
1693 1094
1694 Result := 8; 1095 Result := 8;
1695 end; 1096 end;
1696 1097
1697 function ADD_A: byte; 1098 function add_a_a: byte;
1698 begin 1099 begin
1699 asm 1100 add8(af.h, af.h);
1700 MOV AL,[rip+af.h]
1701 ADD [rip+af.h],AL
1702 LAHF
1703 AND AH,81
1704 MOV [rip+af.l],AH
1705
1706 end;
1707 1101
1708 Result := 4; 1102 Result := 4;
1709 end; 1103 end;
1710 1104
1711 function ADC_B: byte; 1105 function adc_a_b: byte;
1712 begin 1106 begin
1713 asm 1107 adc8(af.h, bc.h);
1714 MOV AH,[rip+af.l]
1715 SAHF
1716 MOV AL,[rip+bc.h]
1717 ADC [rip+af.h],AL
1718 LAHF
1719 AND EAX,$5100
1720 MOV [rip+af.l],AH
1721
1722 end;
1723 1108
1724 Result := 4; 1109 Result := 4;
1725 end; 1110 end;
1726 1111
1727 function ADC_C: byte; 1112 function adc_a_c: byte;
1728 begin 1113 begin
1729 asm 1114 adc8(af.h, bc.l);
1730 MOV AH,[rip+af.l]
1731 SAHF
1732 MOV AL,[rip+bc.l]
1733 ADC [rip+af.h],AL
1734 LAHF
1735 AND EAX,$5100
1736 MOV [rip+af.l],AH
1737
1738 end;
1739 1115
1740 Result := 4; 1116 Result := 4;
1741 end; 1117 end;
1742 1118
1743 function ADC_D: byte; 1119 function adc_a_d: byte;
1744 begin 1120 begin
1745 asm 1121 adc8(af.h, de.h);
1746 MOV AH,[rip+af.l]
1747 SAHF
1748 MOV AL,[rip+de.h]
1749 ADC [rip+af.h],AL
1750 LAHF
1751 AND EAX,$5100
1752 MOV [rip+af.l],AH
1753 1122
1754 end;
1755 Result := 4; 1123 Result := 4;
1756 end; 1124 end;
1757 1125
1758 function ADC_E: byte; 1126 function adc_a_e: byte;
1759 begin 1127 begin
1760 asm 1128 adc8(af.h, de.l);
1761 MOV AH,[rip+af.l]
1762 SAHF
1763 MOV AL,[rip+de.l]
1764 ADC [rip+af.h],AL
1765 LAHF
1766 AND EAX,$5100
1767 MOV [rip+af.l],AH
1768
1769 end;
1770 1129
1771 Result := 4; 1130 Result := 4;
1772 end; 1131 end;
1773 1132
1774 function ADC_H: byte; 1133 function adc_a_h: byte;
1775 begin 1134 begin
1776 asm 1135 adc8(af.h, hl.h);
1777 MOV AH,[rip+af.l]
1778 SAHF
1779 MOV AL,[rip+hl.h]
1780 ADC [rip+af.h],AL
1781 LAHF
1782 AND EAX,$5100
1783 MOV [rip+af.l],AH
1784
1785 end;
1786 1136
1787 Result := 4; 1137 Result := 4;
1788 end; 1138 end;
1789 1139
1790 function ADC_L: byte; 1140 function adc_a_l: byte;
1791 begin 1141 begin
1792 asm 1142 adc8(af.h, hl.l);
1793 MOV AH,[rip+af.l]
1794 SAHF
1795 MOV AL,[rip+hl.l]
1796 ADC [rip+af.h],AL
1797 LAHF
1798 AND EAX,$5100
1799 MOV [rip+af.l],AH
1800
1801 end;
1802 1143
1803 Result := 4; 1144 Result := 4;
1804 end; 1145 end;
1805 1146
1806 function ADC_xHL: byte; 1147 function adc_a_hl: byte;
1807 begin 1148 begin
1808 w1 := speekb(hl.w); 1149 adc8(af.h, speekb(hl.W));
1809 asm
1810 //MOV AX,[rip+hl.w]
1811 //PUSH EAX
1812 //CALL speekb
1813 //LEA ESP,[ESP+4]
1814 MOV AX, [rip+w1]
1815 MOV AH,[rip+af.l]
1816 AND AH,1
1817 SAHF
1818
1819 ADC [rip+af.h],AL
1820 LAHF
1821 AND EAX,$5100
1822 MOV [rip+af.l],AH
1823
1824 end;
1825 1150
1826 Result := 8; 1151 Result := 8;
1827 end; 1152 end;
1828 1153
1829 function ADC_A: byte; 1154 function adc_a_a: byte;
1830 begin 1155 begin
1831 asm 1156 adc8(af.h, af.h);
1832 MOV AH,[rip+af.l]
1833 SAHF
1834 MOV AL,[rip+af.h]
1835 ADC [rip+af.h],AL
1836 LAHF
1837 AND EAX,$5100
1838 MOV [rip+af.l],AH
1839
1840 end;
1841 1157
1842 Result := 4; 1158 Result := 4;
1843 end; 1159 end;
1844 1160
1845 function SUB_B: byte; 1161 function sub_b: byte;
1846 begin 1162 begin
1847 asm 1163 sub8(af.h, bc.h);
1848 MOV AL,[rip+bc.h]
1849 SUB [rip+af.h],AL
1850 LAHF
1851 OR EAX,$400
1852 MOV [rip+af.l],AH
1853 1164
1854 end;
1855 Result := 4; 1165 Result := 4;
1856 end; 1166 end;
1857 1167
1858 function SUB_C: byte; 1168 function sub_c: byte;
1859 begin 1169 begin
1860 asm 1170 sub8(af.h, bc.l);
1861 MOV AL,[rip+bc.l]
1862 SUB [rip+af.h],AL
1863 LAHF
1864 OR EAX,$400
1865 MOV [rip+af.l],AH
1866
1867 end;
1868 1171
1869 Result := 4; 1172 Result := 4;
1870 end; 1173 end;
1871 1174
1872 function SUB_D: byte; 1175 function sub_d: byte;
1873 begin 1176 begin
1874 asm 1177 sub8(af.h, de.h);
1875 MOV AL,[rip+de.h]
1876 SUB [rip+af.h],AL
1877 LAHF
1878 OR EAX,$400
1879 MOV [rip+af.l],AH
1880
1881 end;
1882 1178
1883 Result := 4; 1179 Result := 4;
1884 end; 1180 end;
1885 1181
1886 function SUB_E: byte; 1182 function sub_e: byte;
1887 begin 1183 begin
1888 asm 1184 sub8(af.h, de.l);
1889 MOV AL,[rip+de.l]
1890 SUB [rip+af.h],AL
1891 LAHF
1892 OR EAX,$400
1893 MOV [rip+af.l],AH
1894
1895 end;
1896
1897 1185
1898 Result := 4; 1186 Result := 4;
1899 end; 1187 end;
1900 1188
1901 function SUB_H: byte; 1189 function sub_h: byte;
1902 begin 1190 begin
1903 asm 1191 sub8(af.h, hl.h);
1904 MOV AL,[rip+hl.h]
1905 SUB [rip+af.h],AL
1906 LAHF
1907 OR EAX,$400
1908 MOV [rip+af.l],AH
1909
1910 end;
1911 1192
1912 Result := 4; 1193 Result := 4;
1913 end; 1194 end;
1914 1195
1915 function SUB_L: byte; 1196 function sub_l: byte;
1916 begin 1197 begin
1917 asm 1198 sub8(af.h, hl.l);
1918 MOV AL,[rip+hl.l]
1919 SUB [rip+af.h],AL
1920 LAHF
1921 OR EAX,$400
1922 MOV [rip+af.l],AH
1923
Diff truncated after the static-page render limit. Clone the repository to inspect the complete change.
ModifiedGBEmu.lpi +0−8
@@ -361,18 +361,10 @@
361 <Parsing> 361 <Parsing>
362 <SyntaxOptions> 362 <SyntaxOptions>
363 <CStyleOperator Value="False"/> 363 <CStyleOperator Value="False"/>
364 <IncludeAssertionCode Value="True"/>
365 <CPPInline Value="False"/> 364 <CPPInline Value="False"/>
366 </SyntaxOptions> 365 </SyntaxOptions>
367 </Parsing> 366 </Parsing>
368 <CodeGeneration> 367 <CodeGeneration>
369 <Checks>
370 <IOChecks Value="True"/>
371 <RangeChecks Value="True"/>
372 <OverflowChecks Value="True"/>
373 <StackChecks Value="True"/>
374 </Checks>
375 <VerifyObjMethodCallValidity Value="True"/>
376 <Optimizations> 368 <Optimizations>
377 <OptimizationLevel Value="0"/> 369 <OptimizationLevel Value="0"/>
378 </Optimizations> 370 </Optimizations>
Modifiedmainloop.pas +9−3
@@ -17,7 +17,7 @@ uses ExtCtrls;
17 17
18 function main_loop(a: DWord): DWORD; 18 function main_loop(a: DWord): DWORD;
19 19
20 function z80_decode: byte; pascal; 20 function z80_decode: byte;
21 procedure z80_reset; 21 procedure z80_reset;
22 22
23 implementation 23 implementation
@@ -296,14 +296,20 @@ begin
296 296
297 if (code = $cb) then 297 if (code = $cb) then
298 begin 298 begin
299 code := speekb(pc.w) or 256; 299 //code := speekb(pc.w) or 256;
300 Inc(pc.w); 300 Inc(pc.w);
301 end; 301 end;
302 302
303 asm 303 asm
304 CLC 304 CLC
305 end; // Set the Carry-Flag to zero 305 end; // Set the Carry-Flag to zero
306 Count := z80[code]; 306 if romname[2] <> 'A' then begin
307 //writeln(code);
308 //readln;
309 Count := z80[code]
310 end
311 else
312 Count := z80[code];
307 SoundUpdate(Count * (3 - gb_speed)); 313 SoundUpdate(Count * (3 - gb_speed));
308 cnumber := Count div gb_speed; 314 cnumber := Count div gb_speed;
309 315