-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecode.zig
2367 lines (2311 loc) · 173 KB
/
decode.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
const std = @import("std");
const Cpu = @import("../cpu.zig");
pub const Mode = struct {
pub const Instruction = enum(u1) {
s,
l,
pub fn fromAdl(adl: Cpu.Adl) Instruction {
return switch (adl) {
.z80 => .s,
.ez80 => .l,
};
}
};
const Immediate = enum(u1) {
is,
il,
fn fromAdl(adl: Cpu.Adl) Immediate {
return switch (adl) {
.z80 => .is,
.ez80 => .il,
};
}
};
suffix: bool,
inst: Instruction,
imm: Immediate,
pub fn fromAdl(adl: Cpu.Adl) Mode {
return .{
.suffix = false,
.inst = Instruction.fromAdl(adl),
.imm = Immediate.fromAdl(adl),
};
}
};
pub const PrefetchMode = enum(u1) { prefetch, cached };
pub const Direction = enum(u1) { forward, reverse };
const Uop = enum {
reset,
set_00h,
set_08h,
set_10h,
set_18h,
set_20h,
set_28h,
set_30h,
set_38h,
save,
restore,
swap,
mask_word_inst,
mask_addr_adl,
mask_addr_inst,
sub_r_2,
sub_r_1,
add_r_1,
add_r_2,
add_r_inst,
add_cc_1,
add_cc_4,
add_cc_call,
dispatch_base,
dispatch_cb,
dispatch_dd,
dispatch_ddcb,
dispatch_ed,
dispatch_fd,
dispatch_fdcb,
mode_sis,
mode_lis,
mode_sil,
mode_lil,
set_adl_inst,
set_adl_imm,
clear_madl,
set_madl,
clear_ief,
set_ief,
im_0,
im_1,
im_2,
halt,
non_zero,
adl,
nz,
z,
nc,
c,
po,
pe,
p,
m,
get_b,
get_c,
get_d,
get_e,
get_h,
get_l,
get_a,
get_a_high,
get_ixh,
get_ixl,
get_iyh,
get_iyl,
get_i,
get_mbi,
get_r,
get_mb,
get_af,
get_bc,
get_de,
get_hl,
get_ix,
get_iy,
get_sp,
get_pc,
set_b,
set_c,
set_d,
set_e,
set_h,
set_l,
set_a,
set_a_high,
set_ixh,
set_ixl,
set_iyh,
set_iyl,
set_i,
set_r,
set_mb,
set_af,
set_bc,
set_bc_inst,
set_de,
set_hl,
set_ix,
set_iy,
set_sp,
set_pc,
ex_hl,
ex_hl_inst,
ex_ix_inst,
ex_iy_inst,
@"ex_af'",
@"ex_bc'",
@"ex_de'",
@"ex_hl'",
ex_pc,
flush,
fetch_byte,
fetch_word,
fetch_word_flush,
in,
in_f,
read_byte,
read_word,
out,
write_byte,
write_word,
write_word_rev,
interrupt,
rst,
call,
ret,
copy_ief,
rlc_byte,
rrc_byte,
rl_byte,
rr_byte,
sla_byte,
sra_byte,
srl_byte,
daa_byte,
cpl_byte,
bit_0_byte,
bit_1_byte,
bit_2_byte,
bit_3_byte,
bit_4_byte,
bit_5_byte,
bit_6_byte,
bit_7_byte,
res_0_byte,
res_1_byte,
res_2_byte,
res_3_byte,
res_4_byte,
res_5_byte,
res_6_byte,
res_7_byte,
set_0_byte,
set_1_byte,
set_2_byte,
set_3_byte,
set_4_byte,
set_5_byte,
set_6_byte,
set_7_byte,
nf_byte_sign,
pzs_byte,
zf_byte,
zf_word,
zs_byte,
scf,
ccf,
inc_byte,
dec_byte,
dec_byte_hzs,
add_byte_1,
sub_byte_1,
inc_word,
dec_word,
sub_word_2,
sub_word_3,
sub_word_suffix,
inc_addr,
dec_addr,
add_offset,
add_bytes,
adc_bytes,
sub_bytes,
sbc_bytes,
and_bytes,
xor_bytes,
or_bytes,
mlt_bytes,
rrd_bytes,
rld_bytes,
add_words,
adc_words,
sbc_words,
ld_flags,
cp_flags,
repeat_flag,
repeat,
};
const ez80 = struct {
const base = [_][]const Uop{
&.{}, // nop
&.{ .fetch_word, .mask_word_inst, .set_bc }, // ld bc,nn
&.{ .get_bc, .save, .mask_addr_inst, .get_a, .write_byte }, // ld (bc),a
&.{ .get_bc, .inc_word, .mask_word_inst, .set_bc }, // inc bc
&.{ .get_b, .inc_byte, .set_b }, // inc b
&.{ .get_b, .dec_byte, .set_b }, // dec b
&.{ .fetch_byte, .set_b }, // ld b,n
&.{ .get_a, .rlc_byte, .set_a }, // rlca
&.{ .get_af, .@"ex_af'", .set_af }, // ex af,af'
&.{ .get_bc, .save, .get_hl, .add_words, .set_hl }, // add hl,bc
&.{ .get_bc, .save, .mask_addr_inst, .read_byte, .set_a }, // ld a,(bc)
&.{ .get_bc, .dec_word, .mask_word_inst, .set_bc }, // dec bc
&.{ .get_c, .inc_byte, .set_c }, // inc c
&.{ .get_c, .dec_byte, .set_c }, // dec c
&.{ .fetch_byte, .set_c }, // ld c,n
&.{ .get_a, .rrc_byte, .set_a }, // rrca
&.{ .fetch_byte, .save, .get_b, .sub_byte_1, .set_b, .non_zero, .flush, .add_cc_1, .get_pc, .dec_word, .add_offset, .mask_word_inst, .set_pc }, // djnz d
&.{ .fetch_word, .mask_word_inst, .set_de }, // ld de,nn
&.{ .get_de, .save, .mask_addr_inst, .get_a, .write_byte }, // ld (de),a
&.{ .get_de, .inc_word, .mask_word_inst, .set_de }, // inc de
&.{ .get_d, .inc_byte, .set_d }, // inc d
&.{ .get_d, .dec_byte, .set_d }, // dec d
&.{ .fetch_byte, .set_d }, // ld d,n
&.{ .get_a, .rl_byte, .set_a }, // rla
&.{ .fetch_byte, .save, .flush, .get_pc, .dec_word, .add_offset, .mask_word_inst, .set_pc }, // jr d
&.{ .get_de, .save, .get_hl, .add_words, .set_hl }, // add hl,de
&.{ .get_de, .save, .mask_addr_inst, .read_byte, .set_a }, // ld a,(de)
&.{ .get_de, .dec_word, .mask_word_inst, .set_de }, // dec de
&.{ .get_e, .inc_byte, .set_e }, // inc e
&.{ .get_e, .dec_byte, .set_e }, // dec e
&.{ .fetch_byte, .set_e }, // ld e,n
&.{ .get_a, .rr_byte, .set_a }, // rra
&.{ .fetch_byte, .nz, .flush, .add_cc_1, .save, .get_pc, .dec_word, .add_offset, .mask_word_inst, .set_pc }, // jr nz,d
&.{ .fetch_word, .mask_word_inst, .set_hl }, // ld hl,nn
&.{ .fetch_word, .save, .mask_addr_inst, .get_hl, .write_word }, // ld (nn),hl
&.{ .get_hl, .inc_word, .mask_word_inst, .set_hl }, // inc hl
&.{ .get_h, .inc_byte, .set_h }, // inc h
&.{ .get_h, .dec_byte, .set_h }, // dec h
&.{ .fetch_byte, .set_h }, // ld h,n
&.{ .get_a, .daa_byte, .pzs_byte, .set_a }, // daa
&.{ .fetch_byte, .z, .flush, .add_cc_1, .save, .get_pc, .dec_word, .add_offset, .mask_word_inst, .set_pc }, // jr z,d
&.{ .get_hl, .save, .add_words, .set_hl }, // add hl,hl
&.{ .fetch_word, .save, .mask_addr_inst, .read_word, .set_hl }, // ld hl,(nn)
&.{ .get_hl, .dec_word, .mask_word_inst, .set_hl }, // dec hl
&.{ .get_l, .inc_byte, .set_l }, // inc l
&.{ .get_l, .dec_byte, .set_l }, // dec l
&.{ .fetch_byte, .set_l }, // ld l,n
&.{ .get_a, .cpl_byte, .set_a }, // cpl
&.{ .fetch_byte, .nc, .flush, .add_cc_1, .save, .get_pc, .dec_word, .add_offset, .mask_word_inst, .set_pc }, // jr nc,d
&.{ .fetch_word, .save, .set_sp }, // ld sp,nn
&.{ .fetch_word, .save, .mask_addr_inst, .get_a, .write_byte }, // ld (nn),a
&.{ .get_sp, .inc_addr, .set_sp }, // inc sp
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .inc_byte, .write_byte }, // inc (hl)
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .dec_byte, .write_byte }, // dec (hl)
&.{ .get_hl, .save, .mask_addr_inst, .fetch_byte, .write_byte }, // ld (hl),n
&.{.scf}, // scf
&.{ .fetch_byte, .c, .flush, .save, .add_cc_1, .get_pc, .dec_word, .add_offset, .mask_word_inst, .set_pc }, // jr c,d
&.{ .get_sp, .get_hl, .add_words, .set_hl }, // add hl,sp
&.{ .fetch_word, .save, .mask_addr_inst, .read_byte, .set_a }, // ld a,(nn)
&.{ .get_sp, .dec_addr, .set_sp }, // dec sp
&.{ .get_a, .inc_byte, .set_a }, // inc a
&.{ .get_a, .dec_byte, .set_a }, // dec a
&.{ .fetch_byte, .set_a }, // ld a,n
&.{.ccf}, // ccf
&.{ .mode_sis, .add_r_1, .fetch_byte, .dispatch_base }, // .sis
&.{ .get_c, .set_b }, // ld b,c
&.{ .get_d, .set_b }, // ld b,d
&.{ .get_e, .set_b }, // ld b,e
&.{ .get_h, .set_b }, // ld b,h
&.{ .get_l, .set_b }, // ld b,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_b }, // ld b,(hl)
&.{ .get_a, .set_b }, // ld b,a
&.{ .get_b, .set_c }, // ld c,b
&.{ .mode_lis, .add_r_1, .fetch_byte, .dispatch_base }, // .lis
&.{ .get_d, .set_c }, // ld c,d
&.{ .get_e, .set_c }, // ld c,e
&.{ .get_h, .set_c }, // ld c,h
&.{ .get_l, .set_c }, // ld c,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_c }, // ld c,(hl)
&.{ .get_a, .set_c }, // ld c,a
&.{ .get_b, .set_d }, // ld d,b
&.{ .get_c, .set_d }, // ld d,c
&.{ .mode_sil, .add_r_1, .fetch_byte, .dispatch_base }, // .sil
&.{ .get_e, .set_d }, // ld d,e
&.{ .get_h, .set_d }, // ld d,h
&.{ .get_l, .set_d }, // ld d,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_d }, // ld d,(hl)
&.{ .get_a, .set_d }, // ld d,a
&.{ .get_b, .set_e }, // ld e,b
&.{ .get_c, .set_e }, // ld e,c
&.{ .get_d, .set_e }, // ld e,d
&.{ .mode_lil, .add_r_1, .fetch_byte, .dispatch_base }, // .lil
&.{ .get_h, .set_e }, // ld e,h
&.{ .get_l, .set_e }, // ld e,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_e }, // ld e,(hl)
&.{ .get_a, .set_e }, // ld e,a
&.{ .get_b, .set_h }, // ld h,b
&.{ .get_c, .set_h }, // ld h,c
&.{ .get_d, .set_h }, // ld h,d
&.{ .get_e, .set_h }, // ld h,e
&.{}, // ld h,h
&.{ .get_l, .set_h }, // ld h,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_h }, // ld h,(hl)
&.{ .get_a, .set_h }, // ld h,a
&.{ .get_b, .set_l }, // ld l,b
&.{ .get_c, .set_l }, // ld l,c
&.{ .get_d, .set_l }, // ld l,d
&.{ .get_e, .set_l }, // ld l,e
&.{ .get_h, .set_l }, // ld l,h
&.{}, // ld l,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_l }, // ld l,(hl)
&.{ .get_a, .set_l }, // ld a,l
&.{ .get_hl, .save, .mask_addr_inst, .get_b, .write_byte }, // ld (hl),b
&.{ .get_hl, .save, .mask_addr_inst, .get_c, .write_byte }, // ld (hl),c
&.{ .get_hl, .save, .mask_addr_inst, .get_d, .write_byte }, // ld (hl),d
&.{ .get_hl, .save, .mask_addr_inst, .get_e, .write_byte }, // ld (hl),e
&.{ .get_hl, .save, .mask_addr_inst, .get_h, .write_byte }, // ld (hl),h
&.{ .get_hl, .save, .mask_addr_inst, .get_l, .write_byte }, // ld (hl),l
&.{.halt}, // halt
&.{ .get_hl, .save, .mask_addr_inst, .get_a, .write_byte }, // ld (hl),a
&.{ .get_b, .set_a }, // ld a,b
&.{ .get_c, .set_a }, // ld a,c
&.{ .get_d, .set_a }, // ld a,d
&.{ .get_e, .set_a }, // ld a,e
&.{ .get_h, .set_a }, // ld a,h
&.{ .get_l, .set_a }, // ld a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .set_a }, // ld a,(hl)
&.{}, // ld a,a
&.{ .get_b, .save, .get_a, .add_bytes, .set_a }, // add a,b
&.{ .get_c, .save, .get_a, .add_bytes, .set_a }, // add a,c
&.{ .get_d, .save, .get_a, .add_bytes, .set_a }, // add a,d
&.{ .get_e, .save, .get_a, .add_bytes, .set_a }, // add a,e
&.{ .get_h, .save, .get_a, .add_bytes, .set_a }, // add a,h
&.{ .get_l, .save, .get_a, .add_bytes, .set_a }, // add a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .add_bytes, .set_a }, // add a,(hl)
&.{ .get_a, .save, .add_bytes, .set_a }, // add a,a
&.{ .get_b, .save, .get_a, .adc_bytes, .set_a }, // adc a,b
&.{ .get_c, .save, .get_a, .adc_bytes, .set_a }, // adc a,c
&.{ .get_d, .save, .get_a, .adc_bytes, .set_a }, // adc a,d
&.{ .get_e, .save, .get_a, .adc_bytes, .set_a }, // adc a,e
&.{ .get_h, .save, .get_a, .adc_bytes, .set_a }, // adc a,h
&.{ .get_l, .save, .get_a, .adc_bytes, .set_a }, // adc a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .adc_bytes, .set_a }, // adc a,(hl)
&.{ .get_a, .save, .adc_bytes, .set_a }, // adc a,a
&.{ .get_b, .save, .get_a, .sub_bytes, .set_a }, // sub a,b
&.{ .get_c, .save, .get_a, .sub_bytes, .set_a }, // sub a,c
&.{ .get_d, .save, .get_a, .sub_bytes, .set_a }, // sub a,d
&.{ .get_e, .save, .get_a, .sub_bytes, .set_a }, // sub a,e
&.{ .get_h, .save, .get_a, .sub_bytes, .set_a }, // sub a,h
&.{ .get_l, .save, .get_a, .sub_bytes, .set_a }, // sub a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .sub_bytes, .set_a }, // sub a,(hl)
&.{ .get_a, .save, .sub_bytes, .set_a }, // sub a,a
&.{ .get_b, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,b
&.{ .get_c, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,c
&.{ .get_d, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,d
&.{ .get_e, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,e
&.{ .get_h, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,h
&.{ .get_l, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,(hl)
&.{ .get_a, .save, .sbc_bytes, .set_a }, // sbc a,a
&.{ .get_b, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,b
&.{ .get_c, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,c
&.{ .get_d, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,d
&.{ .get_e, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,e
&.{ .get_h, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,h
&.{ .get_l, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,(hl)
&.{ .get_a, .save, .and_bytes, .pzs_byte, .set_a }, // and a,a
&.{ .get_b, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,b
&.{ .get_c, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,c
&.{ .get_d, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,d
&.{ .get_e, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,e
&.{ .get_h, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,h
&.{ .get_l, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,(hl)
&.{ .get_a, .save, .xor_bytes, .pzs_byte, .set_a }, // xor a,a
&.{ .get_b, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,b
&.{ .get_c, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,c
&.{ .get_d, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,d
&.{ .get_e, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,e
&.{ .get_h, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,h
&.{ .get_l, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,(hl)
&.{ .get_a, .save, .or_bytes, .pzs_byte, .set_a }, // or a,a
&.{ .get_b, .save, .get_a, .sub_bytes }, // cp a,b
&.{ .get_c, .save, .get_a, .sub_bytes }, // cp a,c
&.{ .get_d, .save, .get_a, .sub_bytes }, // cp a,d
&.{ .get_e, .save, .get_a, .sub_bytes }, // cp a,e
&.{ .get_h, .save, .get_a, .sub_bytes }, // cp a,h
&.{ .get_l, .save, .get_a, .sub_bytes }, // cp a,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .save, .get_a, .sub_bytes }, // cp a,(hl)
&.{ .get_a, .save, .sub_bytes }, // cp a,a
&.{ .add_cc_1, .nz, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret nz
&.{ .get_sp, .mask_addr_inst, .read_word, .set_bc, .inc_addr, .mask_addr_inst, .set_sp }, // pop bc
&.{ .fetch_word_flush, .nz, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp nz,nn
&.{ .fetch_word_flush, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp nn
&.{ .fetch_word_flush, .nz, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call nz,nn
&.{ .add_r_inst, .get_sp, .dec_addr, .mask_addr_inst, .get_bc, .write_word_rev, .set_sp }, // push bc
&.{ .fetch_byte, .save, .get_a, .add_bytes, .set_a }, // add a,n
&.{ .flush, .add_cc_1, .set_00h, .ex_pc, .rst, .set_adl_inst }, // rst 00h
&.{ .add_cc_1, .z, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret z
&.{ .flush, .ret, .set_pc, .add_cc_1 }, // ret
&.{ .fetch_word_flush, .z, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp z,nn
&.{ .add_r_1, .fetch_byte, .dispatch_cb }, // CB
&.{ .fetch_word_flush, .z, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call z,nn
&.{ .fetch_word_flush, .ex_pc, .call, .set_adl_imm }, // call nn
&.{ .fetch_byte, .save, .get_a, .adc_bytes, .set_a }, // adc a,n
&.{ .flush, .add_cc_1, .set_08h, .ex_pc, .rst, .set_adl_inst }, // rst 08h
&.{ .add_cc_1, .nc, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret nc
&.{ .get_sp, .mask_addr_inst, .read_word, .set_de, .inc_addr, .mask_addr_inst, .set_sp }, // pop de
&.{ .fetch_word_flush, .nc, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp nc,nn
&.{ .fetch_byte, .get_a_high, .save, .get_a, .out }, // out (n),a
&.{ .fetch_word_flush, .nc, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call nc,nn
&.{ .add_r_inst, .get_sp, .dec_addr, .mask_addr_inst, .get_de, .write_word_rev, .set_sp }, // push de
&.{ .fetch_byte, .save, .get_a, .sub_bytes, .set_a }, // sub a,n
&.{ .flush, .add_cc_1, .set_10h, .ex_pc, .rst, .set_adl_inst }, // rst 10h
&.{ .add_cc_1, .c, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret c
&.{ .get_bc, .@"ex_bc'", .set_bc, .get_de, .@"ex_de'", .set_de, .get_hl, .@"ex_hl'", .set_hl }, // exx
&.{ .fetch_word_flush, .c, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp c,nn
&.{ .fetch_byte, .get_a_high, .save, .in, .set_a }, // in a,(n)
&.{ .fetch_word_flush, .c, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call c,nn
&.{ .add_r_1, .fetch_byte, .dispatch_dd }, // DD
&.{ .fetch_byte, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,n
&.{ .flush, .add_cc_1, .set_18h, .ex_pc, .rst, .set_adl_inst }, // rst 18h
&.{ .add_cc_1, .po, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret po
&.{ .get_sp, .mask_addr_inst, .read_word, .set_hl, .inc_addr, .mask_addr_inst, .set_sp }, // pop hl
&.{ .fetch_word_flush, .po, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp po,nn
&.{ .get_sp, .mask_addr_inst, .read_word, .ex_hl_inst, .write_word_rev }, // ex (sp),hl
&.{ .fetch_word_flush, .po, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call po,nn
&.{ .add_r_inst, .get_sp, .dec_addr, .mask_addr_inst, .get_hl, .write_word_rev, .set_sp }, // push hl
&.{ .fetch_byte, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,n
&.{ .flush, .add_cc_1, .set_20h, .ex_pc, .rst, .set_adl_inst }, // rst 20h
&.{ .add_cc_1, .pe, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret pe
&.{ .flush, .fetch_byte, .get_hl, .mask_word_inst, .set_pc, .set_adl_inst }, // jp (hl)
&.{ .fetch_word_flush, .pe, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp pe,nn
&.{ .get_de, .mask_word_inst, .ex_hl, .mask_word_inst, .set_de }, // ex de,hl
&.{ .fetch_word_flush, .pe, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call pe,nn
&.{ .add_r_1, .fetch_byte, .dispatch_ed }, // ED
&.{ .fetch_byte, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,n
&.{ .flush, .add_cc_1, .set_28h, .ex_pc, .rst, .set_adl_inst }, // rst 28h
&.{ .add_cc_1, .p, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret p
&.{ .get_sp, .mask_addr_inst, .read_word, .set_af, .inc_addr, .mask_addr_inst, .set_sp }, // pop af
&.{ .fetch_word_flush, .p, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp p,nn
&.{.clear_ief}, // di
&.{ .fetch_word_flush, .p, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call p,nn
&.{ .add_r_inst, .get_sp, .dec_addr, .mask_addr_inst, .get_af, .write_word_rev, .set_sp }, // push af
&.{ .fetch_byte, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,n
&.{ .flush, .add_cc_1, .set_30h, .ex_pc, .rst, .set_adl_inst }, // rst 30h
&.{ .add_cc_1, .m, .flush, .add_r_1, .ret, .set_pc, .add_cc_1 }, // ret m
&.{ .get_hl, .save, .set_sp }, // ld sp,hl
&.{ .fetch_word_flush, .m, .add_cc_1, .mask_word_inst, .set_pc, .set_adl_inst }, // jp m,nn
&.{ .set_ief, .reset, .add_r_1, .fetch_byte, .dispatch_base }, // ei
&.{ .fetch_word_flush, .m, .add_cc_call, .ex_pc, .call, .set_adl_imm }, // call m,nn
&.{ .add_r_1, .fetch_byte, .dispatch_fd }, // FD
&.{ .fetch_byte, .save, .get_a, .sub_bytes }, // cp a,n
&.{ .flush, .add_cc_1, .set_38h, .ex_pc, .rst, .set_adl_inst }, // rst 38h
};
const cb = [_][]const Uop{
&.{ .get_b, .rlc_byte, .pzs_byte, .set_b }, // rlc b
&.{ .get_c, .rlc_byte, .pzs_byte, .set_c }, // rlc c
&.{ .get_d, .rlc_byte, .pzs_byte, .set_d }, // rlc d
&.{ .get_e, .rlc_byte, .pzs_byte, .set_e }, // rlc e
&.{ .get_h, .rlc_byte, .pzs_byte, .set_h }, // rlc h
&.{ .get_l, .rlc_byte, .pzs_byte, .set_l }, // rlc l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .rlc_byte, .pzs_byte, .write_byte }, // rlc (hl)
&.{ .get_a, .rlc_byte, .pzs_byte, .set_a }, // rlc a
&.{ .get_b, .rrc_byte, .pzs_byte, .set_b }, // rrc b
&.{ .get_c, .rrc_byte, .pzs_byte, .set_c }, // rrc c
&.{ .get_d, .rrc_byte, .pzs_byte, .set_d }, // rrc d
&.{ .get_e, .rrc_byte, .pzs_byte, .set_e }, // rrc e
&.{ .get_h, .rrc_byte, .pzs_byte, .set_h }, // rrc h
&.{ .get_l, .rrc_byte, .pzs_byte, .set_l }, // rrc l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .rrc_byte, .pzs_byte, .write_byte }, // rrc (hl)
&.{ .get_a, .rrc_byte, .pzs_byte, .set_a }, // rrc a
&.{ .get_b, .rl_byte, .pzs_byte, .set_b }, // rl b
&.{ .get_c, .rl_byte, .pzs_byte, .set_c }, // rl c
&.{ .get_d, .rl_byte, .pzs_byte, .set_d }, // rl d
&.{ .get_e, .rl_byte, .pzs_byte, .set_e }, // rl e
&.{ .get_h, .rl_byte, .pzs_byte, .set_h }, // rl h
&.{ .get_l, .rl_byte, .pzs_byte, .set_l }, // rl l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .rl_byte, .pzs_byte, .write_byte }, // rl (hl)
&.{ .get_a, .rl_byte, .pzs_byte, .set_a }, // rl a
&.{ .get_b, .rr_byte, .pzs_byte, .set_b }, // rr b
&.{ .get_c, .rr_byte, .pzs_byte, .set_c }, // rr c
&.{ .get_d, .rr_byte, .pzs_byte, .set_d }, // rr d
&.{ .get_e, .rr_byte, .pzs_byte, .set_e }, // rr e
&.{ .get_h, .rr_byte, .pzs_byte, .set_h }, // rr h
&.{ .get_l, .rr_byte, .pzs_byte, .set_l }, // rr l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .rr_byte, .pzs_byte, .write_byte }, // rr (hl)
&.{ .get_a, .rr_byte, .pzs_byte, .set_a }, // rr a
&.{ .get_b, .sla_byte, .pzs_byte, .set_b }, // sla b
&.{ .get_c, .sla_byte, .pzs_byte, .set_c }, // sla c
&.{ .get_d, .sla_byte, .pzs_byte, .set_d }, // sla d
&.{ .get_e, .sla_byte, .pzs_byte, .set_e }, // sla e
&.{ .get_h, .sla_byte, .pzs_byte, .set_h }, // sla h
&.{ .get_l, .sla_byte, .pzs_byte, .set_l }, // sla l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .sla_byte, .pzs_byte, .write_byte }, // sla (hl)
&.{ .get_a, .sla_byte, .pzs_byte, .set_a }, // sla a
&.{ .get_b, .sra_byte, .pzs_byte, .set_b }, // sra b
&.{ .get_c, .sra_byte, .pzs_byte, .set_c }, // sra c
&.{ .get_d, .sra_byte, .pzs_byte, .set_d }, // sra d
&.{ .get_e, .sra_byte, .pzs_byte, .set_e }, // sra e
&.{ .get_h, .sra_byte, .pzs_byte, .set_h }, // sra h
&.{ .get_l, .sra_byte, .pzs_byte, .set_l }, // sra l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .sra_byte, .pzs_byte, .write_byte }, // sra (hl)
&.{ .get_a, .sra_byte, .pzs_byte, .set_a }, // sra a
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_b, .srl_byte, .pzs_byte, .set_b }, // srl b
&.{ .get_c, .srl_byte, .pzs_byte, .set_c }, // srl c
&.{ .get_d, .srl_byte, .pzs_byte, .set_d }, // srl d
&.{ .get_e, .srl_byte, .pzs_byte, .set_e }, // srl e
&.{ .get_h, .srl_byte, .pzs_byte, .set_h }, // srl h
&.{ .get_l, .srl_byte, .pzs_byte, .set_l }, // srl l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .srl_byte, .pzs_byte, .write_byte }, // srl (hl)
&.{ .get_a, .srl_byte, .pzs_byte, .set_a }, // srl a
&.{ .get_b, .bit_0_byte, .pzs_byte }, // bit 0,b
&.{ .get_c, .bit_0_byte, .pzs_byte }, // bit 0,c
&.{ .get_d, .bit_0_byte, .pzs_byte }, // bit 0,d
&.{ .get_e, .bit_0_byte, .pzs_byte }, // bit 0,e
&.{ .get_h, .bit_0_byte, .pzs_byte }, // bit 0,h
&.{ .get_l, .bit_0_byte, .pzs_byte }, // bit 0,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_0_byte, .pzs_byte }, // bit 0,(hl)
&.{ .get_a, .bit_0_byte, .pzs_byte }, // bit 0,a
&.{ .get_b, .bit_1_byte, .pzs_byte }, // bit 1,b
&.{ .get_c, .bit_1_byte, .pzs_byte }, // bit 1,c
&.{ .get_d, .bit_1_byte, .pzs_byte }, // bit 1,d
&.{ .get_e, .bit_1_byte, .pzs_byte }, // bit 1,e
&.{ .get_h, .bit_1_byte, .pzs_byte }, // bit 1,h
&.{ .get_l, .bit_1_byte, .pzs_byte }, // bit 1,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_1_byte, .pzs_byte }, // bit 1,(hl)
&.{ .get_a, .bit_1_byte, .pzs_byte }, // bit 1,a
&.{ .get_b, .bit_2_byte, .pzs_byte }, // bit 2,b
&.{ .get_c, .bit_2_byte, .pzs_byte }, // bit 2,c
&.{ .get_d, .bit_2_byte, .pzs_byte }, // bit 2,d
&.{ .get_e, .bit_2_byte, .pzs_byte }, // bit 2,e
&.{ .get_h, .bit_2_byte, .pzs_byte }, // bit 2,h
&.{ .get_l, .bit_2_byte, .pzs_byte }, // bit 2,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_2_byte, .pzs_byte }, // bit 2,(hl)
&.{ .get_a, .bit_2_byte, .pzs_byte }, // bit 2,a
&.{ .get_b, .bit_3_byte, .pzs_byte }, // bit 3,b
&.{ .get_c, .bit_3_byte, .pzs_byte }, // bit 3,c
&.{ .get_d, .bit_3_byte, .pzs_byte }, // bit 3,d
&.{ .get_e, .bit_3_byte, .pzs_byte }, // bit 3,e
&.{ .get_h, .bit_3_byte, .pzs_byte }, // bit 3,h
&.{ .get_l, .bit_3_byte, .pzs_byte }, // bit 3,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_3_byte, .pzs_byte }, // bit 3,(hl)
&.{ .get_a, .bit_3_byte, .pzs_byte }, // bit 3,a
&.{ .get_b, .bit_4_byte, .pzs_byte }, // bit 4,b
&.{ .get_c, .bit_4_byte, .pzs_byte }, // bit 4,c
&.{ .get_d, .bit_4_byte, .pzs_byte }, // bit 4,d
&.{ .get_e, .bit_4_byte, .pzs_byte }, // bit 4,e
&.{ .get_h, .bit_4_byte, .pzs_byte }, // bit 4,h
&.{ .get_l, .bit_4_byte, .pzs_byte }, // bit 4,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_4_byte, .pzs_byte }, // bit 4,(hl)
&.{ .get_a, .bit_4_byte, .pzs_byte }, // bit 4,a
&.{ .get_b, .bit_5_byte, .pzs_byte }, // bit 5,b
&.{ .get_c, .bit_5_byte, .pzs_byte }, // bit 5,c
&.{ .get_d, .bit_5_byte, .pzs_byte }, // bit 5,d
&.{ .get_e, .bit_5_byte, .pzs_byte }, // bit 5,e
&.{ .get_h, .bit_5_byte, .pzs_byte }, // bit 5,h
&.{ .get_l, .bit_5_byte, .pzs_byte }, // bit 5,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_5_byte, .pzs_byte }, // bit 5,(hl)
&.{ .get_a, .bit_5_byte, .pzs_byte }, // bit 5,a
&.{ .get_b, .bit_6_byte, .pzs_byte }, // bit 6,b
&.{ .get_c, .bit_6_byte, .pzs_byte }, // bit 6,c
&.{ .get_d, .bit_6_byte, .pzs_byte }, // bit 6,d
&.{ .get_e, .bit_6_byte, .pzs_byte }, // bit 6,e
&.{ .get_h, .bit_6_byte, .pzs_byte }, // bit 6,h
&.{ .get_l, .bit_6_byte, .pzs_byte }, // bit 6,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_6_byte, .pzs_byte }, // bit 6,(hl)
&.{ .get_a, .bit_6_byte, .pzs_byte }, // bit 6,a
&.{ .get_b, .bit_7_byte, .pzs_byte }, // bit 7,b
&.{ .get_c, .bit_7_byte, .pzs_byte }, // bit 7,c
&.{ .get_d, .bit_7_byte, .pzs_byte }, // bit 7,d
&.{ .get_e, .bit_7_byte, .pzs_byte }, // bit 7,e
&.{ .get_h, .bit_7_byte, .pzs_byte }, // bit 7,h
&.{ .get_l, .bit_7_byte, .pzs_byte }, // bit 7,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .bit_7_byte, .pzs_byte }, // bit 7,(hl)
&.{ .get_a, .bit_7_byte, .pzs_byte }, // bit 7,a
&.{ .get_b, .res_0_byte, .set_b }, // res 0,b
&.{ .get_c, .res_0_byte, .set_c }, // res 0,c
&.{ .get_d, .res_0_byte, .set_d }, // res 0,d
&.{ .get_e, .res_0_byte, .set_e }, // res 0,e
&.{ .get_h, .res_0_byte, .set_h }, // res 0,h
&.{ .get_l, .res_0_byte, .set_l }, // res 0,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_0_byte, .write_byte }, // res 0,(hl)
&.{ .get_a, .res_0_byte, .set_a }, // res 0,a
&.{ .get_b, .res_1_byte, .set_b }, // res 1,b
&.{ .get_c, .res_1_byte, .set_c }, // res 1,c
&.{ .get_d, .res_1_byte, .set_d }, // res 1,d
&.{ .get_e, .res_1_byte, .set_e }, // res 1,e
&.{ .get_h, .res_1_byte, .set_h }, // res 1,h
&.{ .get_l, .res_1_byte, .set_l }, // res 1,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_1_byte, .write_byte }, // res 1,(hl)
&.{ .get_a, .res_1_byte, .set_a }, // res 1,a
&.{ .get_b, .res_2_byte, .set_b }, // res 2,b
&.{ .get_c, .res_2_byte, .set_c }, // res 2,c
&.{ .get_d, .res_2_byte, .set_d }, // res 2,d
&.{ .get_e, .res_2_byte, .set_e }, // res 2,e
&.{ .get_h, .res_2_byte, .set_h }, // res 2,h
&.{ .get_l, .res_2_byte, .set_l }, // res 2,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_2_byte, .write_byte }, // res 2,(hl)
&.{ .get_a, .res_2_byte, .set_a }, // res 2,a
&.{ .get_b, .res_3_byte, .set_b }, // res 3,b
&.{ .get_c, .res_3_byte, .set_c }, // res 3,c
&.{ .get_d, .res_3_byte, .set_d }, // res 3,d
&.{ .get_e, .res_3_byte, .set_e }, // res 3,e
&.{ .get_h, .res_3_byte, .set_h }, // res 3,h
&.{ .get_l, .res_3_byte, .set_l }, // res 3,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_3_byte, .write_byte }, // res 3,(hl)
&.{ .get_a, .res_3_byte, .set_a }, // res 3,a
&.{ .get_b, .res_4_byte, .set_b }, // res 4,b
&.{ .get_c, .res_4_byte, .set_c }, // res 4,c
&.{ .get_d, .res_4_byte, .set_d }, // res 4,d
&.{ .get_e, .res_4_byte, .set_e }, // res 4,e
&.{ .get_h, .res_4_byte, .set_h }, // res 4,h
&.{ .get_l, .res_4_byte, .set_l }, // res 4,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_4_byte, .write_byte }, // res 4,(hl)
&.{ .get_a, .res_4_byte, .set_a }, // res 4,a
&.{ .get_b, .res_5_byte, .set_b }, // res 5,b
&.{ .get_c, .res_5_byte, .set_c }, // res 5,c
&.{ .get_d, .res_5_byte, .set_d }, // res 5,d
&.{ .get_e, .res_5_byte, .set_e }, // res 5,e
&.{ .get_h, .res_5_byte, .set_h }, // res 5,h
&.{ .get_l, .res_5_byte, .set_l }, // res 5,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_5_byte, .write_byte }, // res 5,(hl)
&.{ .get_a, .res_5_byte, .set_a }, // res 5,a
&.{ .get_b, .res_6_byte, .set_b }, // res 6,b
&.{ .get_c, .res_6_byte, .set_c }, // res 6,c
&.{ .get_d, .res_6_byte, .set_d }, // res 6,d
&.{ .get_e, .res_6_byte, .set_e }, // res 6,e
&.{ .get_h, .res_6_byte, .set_h }, // res 6,h
&.{ .get_l, .res_6_byte, .set_l }, // res 6,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_6_byte, .write_byte }, // res 6,(hl)
&.{ .get_a, .res_6_byte, .set_a }, // res 6,a
&.{ .get_b, .res_7_byte, .set_b }, // res 7,b
&.{ .get_c, .res_7_byte, .set_c }, // res 7,c
&.{ .get_d, .res_7_byte, .set_d }, // res 7,d
&.{ .get_e, .res_7_byte, .set_e }, // res 7,e
&.{ .get_h, .res_7_byte, .set_h }, // res 7,h
&.{ .get_l, .res_7_byte, .set_l }, // res 7,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .res_7_byte, .write_byte }, // res 7,(hl)
&.{ .get_a, .res_7_byte, .set_a }, // res 7,a
&.{ .get_b, .set_0_byte, .set_b }, // set 0,b
&.{ .get_c, .set_0_byte, .set_c }, // set 0,c
&.{ .get_d, .set_0_byte, .set_d }, // set 0,d
&.{ .get_e, .set_0_byte, .set_e }, // set 0,e
&.{ .get_h, .set_0_byte, .set_h }, // set 0,h
&.{ .get_l, .set_0_byte, .set_l }, // set 0,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_0_byte, .write_byte }, // set 0,(hl)
&.{ .get_a, .set_0_byte, .set_a }, // set 0,a
&.{ .get_b, .set_1_byte, .set_b }, // set 1,b
&.{ .get_c, .set_1_byte, .set_c }, // set 1,c
&.{ .get_d, .set_1_byte, .set_d }, // set 1,d
&.{ .get_e, .set_1_byte, .set_e }, // set 1,e
&.{ .get_h, .set_1_byte, .set_h }, // set 1,h
&.{ .get_l, .set_1_byte, .set_l }, // set 1,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_1_byte, .write_byte }, // set 1,(hl)
&.{ .get_a, .set_1_byte, .set_a }, // set 1,a
&.{ .get_b, .set_2_byte, .set_b }, // set 2,b
&.{ .get_c, .set_2_byte, .set_c }, // set 2,c
&.{ .get_d, .set_2_byte, .set_d }, // set 2,d
&.{ .get_e, .set_2_byte, .set_e }, // set 2,e
&.{ .get_h, .set_2_byte, .set_h }, // set 2,h
&.{ .get_l, .set_2_byte, .set_l }, // set 2,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_2_byte, .write_byte }, // set 2,(hl)
&.{ .get_a, .set_2_byte, .set_a }, // set 2,a
&.{ .get_b, .set_3_byte, .set_b }, // set 3,b
&.{ .get_c, .set_3_byte, .set_c }, // set 3,c
&.{ .get_d, .set_3_byte, .set_d }, // set 3,d
&.{ .get_e, .set_3_byte, .set_e }, // set 3,e
&.{ .get_h, .set_3_byte, .set_h }, // set 3,h
&.{ .get_l, .set_3_byte, .set_l }, // set 3,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_3_byte, .write_byte }, // set 3,(hl)
&.{ .get_a, .set_3_byte, .set_a }, // set 3,a
&.{ .get_b, .set_4_byte, .set_b }, // set 4,b
&.{ .get_c, .set_4_byte, .set_c }, // set 4,c
&.{ .get_d, .set_4_byte, .set_d }, // set 4,d
&.{ .get_e, .set_4_byte, .set_e }, // set 4,e
&.{ .get_h, .set_4_byte, .set_h }, // set 4,h
&.{ .get_l, .set_4_byte, .set_l }, // set 4,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_4_byte, .write_byte }, // set 4,(hl)
&.{ .get_a, .set_4_byte, .set_a }, // set 4,a
&.{ .get_b, .set_5_byte, .set_b }, // set 5,b
&.{ .get_c, .set_5_byte, .set_c }, // set 5,c
&.{ .get_d, .set_5_byte, .set_d }, // set 5,d
&.{ .get_e, .set_5_byte, .set_e }, // set 5,e
&.{ .get_h, .set_5_byte, .set_h }, // set 5,h
&.{ .get_l, .set_5_byte, .set_l }, // set 5,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_5_byte, .write_byte }, // set 5,(hl)
&.{ .get_a, .set_5_byte, .set_a }, // set 5,a
&.{ .get_b, .set_6_byte, .set_b }, // set 6,b
&.{ .get_c, .set_6_byte, .set_c }, // set 6,c
&.{ .get_d, .set_6_byte, .set_d }, // set 6,d
&.{ .get_e, .set_6_byte, .set_e }, // set 6,e
&.{ .get_h, .set_6_byte, .set_h }, // set 6,h
&.{ .get_l, .set_6_byte, .set_l }, // set 6,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_6_byte, .write_byte }, // set 6,(hl)
&.{ .get_a, .set_6_byte, .set_a }, // set 6,a
&.{ .get_b, .set_7_byte, .set_b }, // set 7,b
&.{ .get_c, .set_7_byte, .set_c }, // set 7,c
&.{ .get_d, .set_7_byte, .set_d }, // set 7,d
&.{ .get_e, .set_7_byte, .set_e }, // set 7,e
&.{ .get_h, .set_7_byte, .set_h }, // set 7,h
&.{ .get_l, .set_7_byte, .set_l }, // set 7,l
&.{ .get_hl, .save, .mask_addr_inst, .read_byte, .add_cc_1, .set_7_byte, .write_byte }, // set 7,(hl)
&.{ .get_a, .set_7_byte, .set_a }, // set 7,a
};
const dd = [_][]const Uop{
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_word, .set_bc }, // ld bc,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_bc, .save, .get_ix, .add_words, .set_ix }, // add ix,bc
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_bc, .write_word }, // ld (ix+d),bc
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_word, .set_de }, // ld de,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_de, .save, .get_ix, .add_words, .set_ix }, // add ix,de
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_de, .write_word }, // ld (ix+d),de
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_word, .mask_word_inst, .set_ix }, // ld ix,nn
&.{ .fetch_word, .save, .mask_addr_inst, .get_ix, .write_word }, // ld (nn),ix
&.{ .get_ix, .inc_word, .mask_word_inst, .set_ix }, // inc ix
&.{ .get_ixh, .inc_byte, .set_ixh }, // inc ixh
&.{ .get_ixh, .dec_byte, .set_ixh }, // dec ixh
&.{ .fetch_byte, .set_ixh }, // ld ixh,n
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_word, .set_hl }, // ld hl,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ix, .save, .add_words, .set_ix }, // add ix,ix
&.{ .fetch_word, .save, .mask_addr_inst, .read_word, .set_ix }, // ld ix,(nn)
&.{ .get_ix, .dec_word, .mask_word_inst, .set_ix }, // dec ix
&.{ .get_ixl, .inc_byte, .set_ixl }, // inc ixl
&.{ .get_ixl, .dec_byte, .set_ixl }, // dec ixl
&.{ .fetch_byte, .set_ixl }, // ld ixl,n
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_hl, .write_word }, // ld (ix+d),hl
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_word, .set_iy }, // ld iy,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .add_cc_1, .inc_byte, .write_byte }, // inc (ix+d)
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .add_cc_1, .dec_byte, .write_byte }, // dec (ix+d)
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .fetch_byte, .write_byte }, // ld (ix+d),n
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_word, .set_ix }, // ld ix,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_sp, .get_ix, .add_words, .set_ix }, // add ix,sp
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_iy, .write_word }, // ld (ix+d),iy
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_ix, .write_word }, // ld (ix+d),ix
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .set_b }, // ld b,ixh
&.{ .get_ixl, .set_b }, // ld b,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_b }, // ld b,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .set_c }, // ld c,ixh
&.{ .get_ixl, .set_c }, // ld c,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_c }, // ld c,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .set_d }, // ld d,ixh
&.{ .get_ixl, .set_d }, // ld d,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_d }, // ld d,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .set_e }, // ld e,ixh
&.{ .get_ixl, .set_e }, // ld e,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_e }, // ld e,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_b, .set_ixh }, // ld ixh,b
&.{ .get_c, .set_ixh }, // ld ixh,c
&.{ .get_d, .set_ixh }, // ld ixh,d
&.{ .get_e, .set_ixh }, // ld ixh,e
&.{}, // ld ixh,ixh
&.{ .get_ixl, .set_ixh }, // ld ixh,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_h }, // ld h,(ix+d)
&.{ .get_a, .set_ixh }, // ld ixh,a
&.{ .get_b, .set_ixl }, // ld ixl,b
&.{ .get_c, .set_ixl }, // ld ixl,c
&.{ .get_d, .set_ixl }, // ld ixl,d
&.{ .get_e, .set_ixl }, // ld ixl,e
&.{ .get_ixh, .set_ixl }, // ld ixl,ixh
&.{}, // ld ixl,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_l }, // ld l,(ix+d)
&.{ .get_a, .set_ixl }, // ld ixl,a
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_b, .write_byte }, // ld (ix+d),b
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_c, .write_byte }, // ld (ix+d),c
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_d, .write_byte }, // ld (ix+d),d
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_e, .write_byte }, // ld (ix+d),e
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_h, .write_byte }, // ld (ix+d),h
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_l, .write_byte }, // ld (ix+d),l
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .get_a, .write_byte }, // ld (ix+d),a
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .set_a }, // ld a,ixh
&.{ .get_ixl, .set_a }, // ld a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .set_a }, // ld a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .add_bytes, .set_a }, // add a,ixh
&.{ .get_ixl, .save, .get_a, .add_bytes, .set_a }, // add a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .add_bytes, .set_a }, // add a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .adc_bytes, .set_a }, // adc a,ixh
&.{ .get_ixl, .save, .get_a, .adc_bytes, .set_a }, // adc a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .adc_bytes, .set_a }, // adc a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .sub_bytes, .set_a }, // sub a,ixh
&.{ .get_ixl, .save, .get_a, .sub_bytes, .set_a }, // sub a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .sub_bytes, .set_a }, // sub a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,ixh
&.{ .get_ixl, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .sbc_bytes, .set_a }, // sbc a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,ixh
&.{ .get_ixl, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .and_bytes, .pzs_byte, .set_a }, // and a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,ixh
&.{ .get_ixl, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .xor_bytes, .pzs_byte, .set_a }, // xor a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,ixh
&.{ .get_ixl, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .or_bytes, .pzs_byte, .set_a }, // or a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .get_ixh, .save, .get_a, .sub_bytes }, // cp a,ixh
&.{ .get_ixl, .save, .get_a, .sub_bytes }, // cp a,ixl
&.{ .fetch_byte, .save, .get_ix, .add_offset, .save, .mask_addr_inst, .read_byte, .save, .get_a, .sub_bytes }, // cp a,(ix+d)
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .fetch_byte, .save, .fetch_byte, .dispatch_ddcb }, // DDCB
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap
&.{ .flush, .fetch_byte, .add_cc_1, .set_00h, .ex_pc, .sub_word_2, .interrupt }, // trap