/
ROM.asm
9963 lines (9963 loc) · 127 KB
/
ROM.asm
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
.org 00000H
;
X0004: .equ 00004H
X0039: .equ 00039H
X8100: .equ 08100H
X8104: .equ 08104H
X810B: .equ 0810BH
X810C: .equ 0810CH
X810E: .equ 0810EH
X8180: .equ 08180H
XDED0: .equ 0DED0H
XDED2: .equ 0DED2H
XDEF1: .equ 0DEF1H
XFE06: .equ 0FE06H
;
X0001: .equ 00001H
X3C3C: .equ 03C3CH
X3C3D: .equ 03C3DH
X3C3E: .equ 03C3EH
X3C41: .equ 03C41h
X3DC1: .equ 03DC1H
X3DC2: .equ 03DC2H
X3DC3: .equ 03DC3H
X3DC4: .equ 03DC4H
X3DC6: .equ 03DC6H
X3DC7: .equ 03DC7H
X3DC8: .equ 03DC8H
X3DC9: .equ 03DC9H
X3DCA: .equ 03DCAH
X3DCB: .equ 03DCBH
X3DCC: .equ 03DCCH
X3DCD: .equ 03DCDH
X3DCE: .equ 03DCEH
X3DCF: .equ 03DCFH
X3DD1: .equ 03DD1H
X3DD2: .equ 03DD2H
X3DD3: .equ 03DD3H
X3DD4: .equ 03DD4H
X3DE8: .equ 03DE8H
X3DE9: .equ 03DE9H
X3DEA: .equ 03DEAH
X3DEB: .equ 03DEBH
X3DEC: .equ 03DECH
X3DED: .equ 03DEDH
X3DEF: .equ 03DEFH
X3DF1: .equ 03DF1H
X3DF2: .equ 03DF2H
X3DF4: .equ 03DF4H
X3DF5: .equ 03DF5H
X3DF6: .equ 03DF6H
X3DF7: .equ 03DF7H
X3DF8: .equ 03DF8H
X3DF9: .equ 03DF9H
X3DFB: .equ 03DFBH
X3DFD: .equ 03DFDH
X3DFF: .equ 03DFFH
X3E00: .equ 03E00H
X3E02: .equ 03E02H
X3E04: .equ 03E04H
X3E06: .equ 03E06H
X3E08: .equ 03E08H
X3E0A: .equ 03E0AH
X3E0B: .equ 03E0BH
X3E0C: .equ 03E0CH
X3E0D: .equ 03E0DH
X3E0E: .equ 03E0EH
X3E0F: .equ 03E0FH
X3E10: .equ 03E10H
X3E11: .equ 03E11H
X3E12: .equ 03E12H
X3E13: .equ 03E13H
X3E14: .equ 03E14H
X3E15: .equ 03E15H
X3E16: .equ 03E16H
X3E17: .equ 03E17H
X3E19: .equ 03E19H
X3E1A: .equ 03E1AH
X3E5C: .equ 03E5CH
X3E5D: .equ 03E5DH
X3E5E: .equ 03E5EH
X3E60: .equ 03E60H
X3E61: .equ 03E61H
X3E6C: .equ 03E6CH
X3E6D: .equ 03E6DH
L3E6F: .equ 03E6FH
X3E70: .equ 03E70H
X3E71: .equ 03E71H
X3E76: .equ 03E76H
X3E77: .equ 03E77H
X3E80: .equ 03E80H
X3E82: .equ 03E82H
X3E8B: .equ 03E8BH
X3E8D: .equ 03E8DH
X3E8E: .equ 03E8EH
X3EA0: .equ 03EA0H
X3EA2: .equ 03EA2H
X3EA3: .equ 03EA3H
X3F28: .equ 03F28H
X3F2A: .equ 03F2AH
X3F2B: .equ 03F2BH
X3F2C: .equ 03F2CH
X3F2D: .equ 03F2DH
X3F2E: .equ 03F2EH
X3F30: .equ 03F30H
X3F32: .equ 03F32H
X3F40: .equ 03F40H
X3F42: .equ 03F42H
X3F44: .equ 03F44H
X3F46: .equ 03F46H
X3F48: .equ 03F48H
X3F49: .equ 03F49H
X3F4A: .equ 03F4AH
X3F4C: .equ 03F4CH
X3F4E: .equ 03F4EH
X3F50: .equ 03F50H
X3F52: .equ 03F52H
X3F54: .equ 03F54H
X3F56: .equ 03F56H
X3F58: .equ 03F58H
X3F5A: .equ 03F5AH
X3F5C: .equ 03F5CH
X3F5E: .equ 03F5EH
X3F60: .equ 03F60H
X3F62: .equ 03F62H
X3F63: .equ 03F63H
X3F64: .equ 03F64H
X3F65: .equ 03F65H
L490F: .equ 0490FH
L4CBB: .equ 04CBBH
X507C: .equ 0507CH
X8076: .equ 08076H
L8080: .equ 08080H
LEEF7: .equ 0EEF7H
XFEC5: .equ 0FEC5H
;
L0000: lxi sp,07FFFH ;<< RST0
jmp L3C60
;
X0006: .db 06Bh
X0007: .db 047h
;
L0008: mov a,m ;<< RST1
xthl
cmp m
inx h
xthl
jnz L009B
L0010: inx h ;<< RST2
mov a,m
cpi 03AH
rnc
jmp L04F5
;
L0018: push psw ;<< RST3
push b
mov c,a
push h
nop
z001D: jmp L03D0
;
L0020: mov a,h ;<< RST4
sub d
rnz
mov a,l
sub e ;<< TRAP
ret
;
X0026: .dw 04301H
;
L0028: lda X3F63 ;<< RST5
ora a
jnz L11EB ;<< RST5.5
ret
;
L0030: mov c,m ;<< RST6
inx h
mov b,m
inx h
jmp L003B ;<< RST6.5
;
.db 00h
;
L0038: jmp L2BB7 ;<< RST7
;
L003B: shld X3E77
pop h
push b
push h
lhld X3E77
ret
;
L0045: lxi h,00004h
dad sp
L0049: mov a,m
inx h
cpi 081H
rnz
mov c,m
inx h
mov b,m
inx h
push h
mov l,c
mov h,b
mov a,d
ora e
xchg
jz L005D
xchg
rst 4
L005D: lxi b,0000DH
pop h
rz
dad b
jmp L0049
;
L0066: call L0086
L0069: push b
xthl
pop b
L006C: rst 4
mov a,m
stax b
rz
dcx b
dcx h
jmp L006C
;
L0075: xthl
mov c,m
inx h
xthl
L0079: push h
lhld X3F5C
mvi b,000H
dad b
dad b
call L0086
L0084: pop h
ret
;
L0086: push d
xchg
lxi h,0FFDBH
dad sp
rst 4
xchg
pop d
rnc
L0090: mvi e,00CH
jmp L00A7
;
L0095: lhld X3F46
shld X3F4E
L009B: mvi e,002H
xra a
sta X3E8B
lxi b,z141C+2 ;141Eh
lxi b,z001D+1 ;001Eh
L00A7: call L01D6
xra a
sta X3F2A
call L0741
mov a,e
rrc
mov e,a
inr e
lxi h,S21A2
L00B8: dcr e
jz L00C5
L00BC: mov a,m
inx h
ora a
jz L00B8
jmp L00BC
;
L00C5: call L1E03
lxi h,S2294
;
L00CB: call L1E06
lhld X3F4E
mov a,h
ana l
inr a
jz L00F1
push h
call L1390
mvi a,03AH
rst 3
lda X3EA0
inr a
mov e,a
mvi d,000H
call L1399
pop h
xchg
lda X3E8B
ora a
jz L17C5
L00F1: lxi h,S229C
call L1E03
lxi h,0FFFFH
shld X3F4E
shld X3E8B
L0100: xra a
sta X3F2A
sta X3EA3
sta X3E76
call L0279
L010D: call L073C
L0110: rst 2
inr a
dcr a
jz L0100
push psw
call L0583
push d
call L01F1
mov b,a
pop d
pop psw
jnc L04C6
push d
push b
rst 2
push psw
call L0197
push b
jnc L0141
xchg
lhld X3F58
L0133: ldax d
stax b
inx b
inx d
rst 4
jnc L0133
mov h,b
mov l,c
inx h
shld X3F58
L0141: pop d
pop psw
jz L0168
lhld X3F58
xthl
pop b
dad b
push h
call L0066
pop h
shld X3F58
xchg
mov m,h
inx h
inx h
pop d
mov m,e
inx h
mov m,d
inx h
lxi d,X3EA3
L0160: ldax d
mov m,a
inx h
inx d
ora a
jnz L0160
L0168: call L01BB
inx h
L016C: mov d,h
mov e,l
mov a,m
inx h
ora m
jz L0185
inx h
inx h
inx h
xra a
L0178: cmp m
inx h
jnz L0178
xchg
mov m,e
inx h
mov m,d
xchg
jmp L016C
;
L0185: lda X3F2A
ora a
jz L0100
dcr a
jz L00F1
xra a
sta X3F2A
jmp L1991
;
L0197: lhld X3F56
L019A: mov b,h
mov c,l
mov a,m
inx h
ora m
dcx h
rz
push b
rst 6
rst 6
pop h
rst 4
pop h
pop b
cmc
rz
cmc
rnc
jmp L019A
;
L01AF: rnz
lhld X3F56
xra a
mov m,a
inx h
mov m,a
inx h
shld X3F58
L01BB: lhld X3F56
dcx h
mvi m,000H
L01C1: shld X3F4A
lhld X3F2E
shld X3F42
call L050F
L01CD: lhld X3F58
shld X3F5A
shld X3F5C
L01D6: pop b
lhld X3F54
sphl
lxi h,X3F32
shld X3F30
lxi h,L0000
push h
shld X3F52
lhld X3F4A
xra a
sta X3F48
push b
ret
;
L01F1: xra a
sta X3F2D
mvi c,005H
lxi d,X3EA3
L01FA: mov a,m
cpi 020H
jz L023C
mov b,a
cpi 022H
jz L025C
ora a
jz L0270
lda X3F2D
ora a
mov b,a
mov a,m
jnz L023C
cpi 030H
jc L021D
cpi 03CH
jc L023C
L021D: push d
lxi d,S22C2
push h
mvi a,023h
inx d
L0225: ldax d
ani 07FH
jz 00239h ;!!!!!!!!!!!!!!!!!!!!!!!!
cmp m
jnz L0263
ldax d
ora a
jp 00223h ;!!!!!!!!!!!!!!!!!!!!!!!!
pop psw
mov a,b
ori 080H
jp 07EE1h ;???????????????????
pop d
L023C: inx h
stax d
inx d
inr c
sui 03AH
jz L024A
cpi 049H
jnz L024D
L024A: sta X3F2D
L024D: sui 054H
jnz L01FA
mov b,a
L0253: mov a,m
ora a
jz L0270
cmp b
jz L023C
L025C: inx h
stax d
inr c
inx d
jmp L0253
;
L0263: pop h
push h
inr b
xchg
L0267: ora m
inx h
jp L0267
xchg
jmp L0225
;
L0270: lxi h,X3EA2
stax d
inx d
stax d
inx d
stax d
ret
;
L0279: lxi d,X3EA3
L027C: mov h,d
mov l,e
L027E: lxi b,L027E
push b
call L03BF
cpi 00DH
jz L028F
cpi 00AH
jnz L0297
L028F: pop h
xchg
ret
;
L0292: mvi c,007H
jmp L285B
;
L0297: mov c,a
cpi 019H
jz L031F
cpi 01AH
jz L0315
cpi 01FH
jz L02F7
cpi 00CH
jz L0305
cpi 000H
jz L0292
cpi 008H
jz L033B
cpi 018H
jz L0343
cpi 001H
jz L0353
cpi 07FH
jz L0349
dcr b
jp L0374
L02C9: lda X3E76
inr a
rm
sta X3E76
mvi b,000H
inx d
push d
push h
mov h,d
mov l,e
L02D8: dcx d
ldax d
mov m,a
inr b
xthl
rst 4
xthl
dcx h
jnz L02D8
mov m,c
L02E4: call L1E06
mvi c,020H
call L285B
mvi a,008H
L02EE: rst 3
dcr b
jnz L02EE
pop h
inx h
pop d
ret
;
L02F7: mvi c,018H
call L0343
call L032B
rz
rst 4
rz
jmp L02F7
;
L0305: mvi c,008H
call L033B
call L032B
rz
mov a,l
cpi 0A3H
rz
jmp L0305
;
L0315: mvi c,018H
call L0343
rst 4
rz
jmp L0315
;
L031F: mvi c,008H
call L033B
mov a,l
cpi 0A3H
rz
jmp L031F
;
L032B: mov a,m
cpi 020H
rz
cpi 03AH
rz
cpi 02CH
rz
cpi 03BH
rz
cpi 022H
ret
;
L033B: mov a,l
cpi 0A3H
rz
dcx h
jmp L285B
;
L0343: rst 4
rz
inx h
jmp L285B
;
L0349: mov a,l
cpi 0A3H
rz
dcx h
mvi c,008H
call L285B
L0353: rst 4
rz
lda X3E76
dcr a
rm
sta X3E76
mvi b,000H
dcx d
push d
dcx h
push h
inx h
push h
mov d,h
mov e,l
L0367: inx d
ldax d
mov m,a
inx h
inr b
ora a
jnz L0367
pop h
jmp L02E4
;
L0374: push h
lxi h,023AFH
sui 02AH
cpi 017H
jc L0398
lxi h,X22C3
sui 017H
cpi 024H
jc L0398
lxi h,02351H
sui 024H
cpi 002H
jc L0398
lxi h,02359H
sui 002H
L0398: mov b,a
L0399: dcr b
jm L03A9
L039D: mov a,m
inx h
ora a
jz L0084
jp L039D
jmp L0399
;
L03A9: mov a,m
ora a
jm L03B8
mov c,a
xthl
call L02C9
xthl
inx h
jmp L03A9
;
L03B8: ani 07FH
mov c,a
pop h
jmp L02C9
;
L03BF: mvi b,000H
L03C1: call L2BEC
cpi 003H
jz L16D6
cpi 01BH
rnz
mov b,a
jmp L03C1
;
L03D0: lxi h,x03EF
L03D3: mov a,m
inx h
cmp c
jz L03E8
ora a
jnz L03D3
lda X3E76
ora a
cm L0741
inr a
sta X3E76
L03E8: call L2853
pop h
pop b
pop psw
ret
;
x03EF: .db 008H
.db 00Ah
.db 00Dh
.db 00Ch
.db 01Fh
.db 018H
.db 019h
.db 01Ah
.db 000h
;
L03F8: call L0417
rnz
pop b
call L0197
mov h,b
mov l,c
L0402: rst 6
pop d
mov a,d
ora e
jz L00F1
call L0519
push d
call L0432
pop h
jc L00F1
jz L0402
L0417: call L0583
rz
rst 1
.db 02Ch
;
push d
call L0583
pop h
rnz
xchg
mov a,h
ora l
stc
rz
rst 4
jc L009B
xra a
stc
shld X3E8B
ret
;
L0432: rst 6
dcx h
xthl
xchg
lhld X3E8B
rst 4
pop b
rc
push b
call L0741
jmp L16DC
;
P0443: mvi a,064H
sta X3F48
call L0632
xthl
call L0045
pop d
jnz L0455
dad b
sphl
L0455: xchg
call L0075
;
.db 008H ; ??????????????????????
;
push h
call L061B
xthl
push h
lhld X3F4E
xthl
call L08C7
rst 1
.db 09Eh
;
call L08C4
push h
call L122E
pop h
push b
push d
lxi b,X8100
mov d,c
mov e,d
mov a,m
cpi 0A3H
mvi a,001H
jnz L048A
rst 2
call L08C4
push h
call L122E
pop h
rst 5
L048A: push b
push d
push psw
inx sp
push h
lhld X3F4A
xthl
L0493: mvi b,081H
push b
inx sp
L0497: in 001H
ani 040H
cz L0519
shld X3F4A
mov a,m
xchg
lxi h,X3EA0
inr m
ora a
jz L04B4
cpi 03AH
jnz L009B
xchg
jmp L04C6
;
L04B4: mov m,a
xchg
inx h
mov a,m
inx h
ora m
inx h
jz L052A
mov e,m
inx h
mov d,m
xchg
shld X3F4E
xchg
L04C6: rst 2
lxi d,L0497
push d
L04CB: rz
L04CC: sui 080H
jc L0632
cpi 01DH
jc L04E2
cpi 04AH
jc L009B
cpi 065H
jz L009B
sui 02DH
L04E2: rlc
mov c,a
mvi b,000H
xchg
lxi h,T2437
dad b
mov c,m
inx h
mov b,m
push b
xchg
L04F0: inx h
mov a,m
cpi 03AH
rnc
L04F5: cpi 020H
jz L04F0
cpi 030H
cmc
inr a
dcr a
ret
;
P0500: jz L050F
call L0583
rnz
push h
call L05EC
pop d
jmp L0514
;
L050F: xchg
lhld X3F56
dcx h
L0514: shld X3F5E
xchg
ret
;
L0519: call L2DAB
ora a
rz
call L03BF
cpi 005H
P0523: rnz
ori 0C0H
shld X3F4A
pop b
L052A: push psw
lhld X3F4E
mov a,l
ana h
inr a
jz L053D
shld X3F50
lhld X3F4A
shld X3F52
L053D: pop psw
lxi h,S22A3
jnz L00CB
jmp L00F1
;
P0547: rnz
mvi e,020H
lhld X3F52
mov a,h
ora l
jz L00A7
xchg
lhld X3F50
shld X3F4E
xchg
ret
;
L055B: mov a,m
cpi 041H
rc
cpi 05BH
cmc
ret
;
L0563: rst 2
L0564: call L08C4
L0567: rst 5
jm L057E
L056B: lda X3F63
cpi 091H
jc L1288
lxi b,08001H
lxi d,L0000
call L125D
mov d,c
rz