-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path042_a14.asm
1486 lines (1478 loc) · 52.5 KB
/
042_a14.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 #D280
LD A,I:PUSH IX
LD (QUIT0+1),SP
DI:LD A,#3B:LD I,A:IM 2
LD HL,#FFFF:LD (HL),#18
LD L,#F4:LD (HL),#C3
LD HL,INT:LD (#FFF5),HL
LD A,(#5CF6):LD (DRV),A
LD (IY-48),1
LD (IY-49),35
LD (IY+48),0
LD IX,VARS:LD (IX+12),1
; CALL CTEST
; CALL Z,MSTORE
LD HL,0:LD (COMLEN),HL
LD HL,SBUFF
CLB LD (HL),0:INC L:JR NZ,CLB
XOR A:LD (CLB),A
LD DE,53524
LD HL,FMS:LD B,3
PUSH DE:PUSH HL
CMS LD A,(DE):CP (HL)
INC HL:INC DE:SCF:JR NZ,CMS1
OR A:DJNZ CMS
CMS1 POP HL:POP DE:JR NC,MMM
RES 0,(IX+12)
PUSH HL:LD BC,18:LDIR
POP HL:LD C,18:LDIR
MMM CALL CLS:EI
LD HL,CMN
RES 0,(IX+10)
CALL PRMENU
MMM1 LD HL,DMN
RES 0,(IX+10)
CALL PRMENU
RES 1,(IX+10)
RES 2,(IX+10)
CALL CONTR:JR MMM1
RELN EQU M3-PLAYER
PFLN EQU PCA-INSTALL+RELN
PLLN EQU CSOUNDS-INSTALL+RELN
BASE EQU 25000
POSTAB EQU BASE+2
PATTERNS EQU BASE+1282
S EQU 17960+PATTERNS
O EQU 483*15+S
SOUNDS EQU 123*15+O
END EQU SOUNDS+192
VARS DEFS 13
MT EQU #FF00
FNT EQU 53433
CLCA LD A,1:LD (NOF),A
LD HL,#FC00:LD DE,#FC01
LD BC,#1FF:LD (HL),L:LDIR:RET
ATHL LD E,(HL):INC HL
LD D,(HL):INC HL
LD (VARS),DE:LD A,E
LD (XPOS+3),A
LD B,(HL):INC HL
LD C,(HL):INC HL:PUSH HL
LD A,(HL):LD (RCO+1),A
PUSH BC:LD H,D:LD A,B:INC A
ADD A,E:LD L,A:PUSH HL
DEC D:DEC E:CALL SCRAD+4
EX DE,HL:LD A,C:ADD A,A
ADD A,A:ADD A,A:SUB 4
LD C,A:CALL HLIN:CALL HLIN
DFF PUSH BC:LD C,0:LD E,L
LD (HL),#C0:INC L
DF1 LD (HL),C:INC L:DJNZ DF1
LD (HL),3:LD L,E:POP BC
CALL DF:DEC C:JR NZ,DFF
CALL HLIN:CALL HLIN
POP HL:POP BC:LD A,L
CP 32:JR NC,DFE
LD A,H:DEC C:INC B:INC B
RRCA:RRCA:RRCA:LD H,A
AND #E0:OR L:LD L,A:LD A,H
AND 3:OR #58:LD H,A:LD A,1
LD DE,32
VA LD (HL),A:ADD HL,DE
DEC C:JR NZ,VA
HA LD (HL),A:DEC L:DJNZ HA
DFE POP HL:RET
HLIN PUSH BC:LD C,#FF
HLIN2 LD E,L:INC B:INC B
HLN0 LD (HL),C:INC L:DJNZ HLN0
LD L,E:POP BC
DF INC H:LD A,H:AND 7:RET NZ
LD A,H:RRA:RRA:RRA:LD D,H:LD E,L
DEC A:AND 3:OR #58:LD H,A
RCO LD A,0:PUSH BC:INC B:INC B
DFA LD (HL),A:INC L:DJNZ DFA:POP BC
LD H,D:LD A,E:ADD A,32:LD L,A
RET C:LD A,H:SUB 8:LD H,A:RET
PRMENU CALL ATHL:PUSH HL
CALL CLCA:POP HL:CALL PRS
LD DE,VARS+2:LD BC,8:LDIR
LD DE,MT
PRM0 LD A,(HL)
CP 10:JR C,ENDF
CP 255:JR Z,EM
CP "|:JR Z,PRM1
CP #D:JR Z,PRM1
CP "\:JR Z,PRM2
OR A:PUSH HL:JP M,TAB
CALL CATAD0
NOF EQU $+1:LD (HL),0:POP HL:LD A,(HL)
PRM1 CALL PRCH
INC HL:JR PRM0
PRM2 LD A," :JR PRM1
EM LD BC,(VARS+6):LD L,B
LD H,C:CALL CATADR
LD A,(HL):LD BC,32
SBC HL,BC:LD (HL),A
LD HL,(VARS+5)
LD A,(VARS+8):LD H,A
CALL CATADR:LD A,(HL)
ADD HL,BC:LD (HL),A
RES 7,(IX+10)
LD A,#FF:LD (DE),A
PRDAT LD HL,MT
PRD BIT 7,(HL):JP NZ,PRCUR
PUSH HL:LD C,0
CALL CDAT0:LD DE,9
POP HL:ADD HL,DE:JR PRD
ENDF LD BC,7:LDIR:PUSH IX
EX (SP),HL:LDI:LDI
LD HL,NOF:INC (HL)
POP HL:JR PRM0
TAB AND #7F:PUSH AF:CALL CATAD0
POP AF:LD B,A:ADD A,(IX)
LD (IX),A:LD A,(NOF)
TAB0 LD (HL),A:INC L:DJNZ TAB0
POP HL:JR PRM1+3
BBD2 ADD HL,HL:ADD HL,HL
ADD HL,HL:XOR A:LD B,14
BBD20 DEC B:JR Z,BBD21:ADD HL,HL
ADC A,A:DAA:JR NC,BBD20
INC HL:JR BBD20
BBD21 LD H,A:LD A,L:CP 16
JR C,BBD22:ADD A,6
BBD22 OR A:DAA:RET
BBD LD C,A:XOR A:LD B,9
BBD0 DEC B:RET Z:SLA C
ADC A,A:DAA:JR NC,BBD0
INC C:JR BBD0
PFLC EX DE,HL:LD A,(HL):OR A:INC HL
LD B,(HL):PUSH BC:RES 7,B
DEC HL:JP P,PFL0
LD A,B:DEC A
PFL0 CP B:POP BC:RET C:XOR A:RET
PFL CALL PFLC
LD (HL),A:LD B,A:INC B
INC HL:INC HL:LD E,(HL)
LD A,(IX):SUB E:JR NC,PFL2
AND #1F:DEC (IX+1)
PFL2 LD (IX),A:LD D,0
SBC HL,DE:INC HL
PFL20 ADD HL,DE:DJNZ PFL20:LD B,E
PFL3 LD A,(HL):INC HL
CALL PRCH:DJNZ PFL3:RET
PRCH PUSH HL:PUSH DE:PUSH BC:PUSH AF
CP #0D:JR Z,NEXTLIN
CP "_:JR Z,NOPR
CP "|:JR Z,PRV
CP "~:JR Z,CBACK
OR A:JP M,TABC
LD C,A:LD B,0:LD H,B
ADD A,A:LD L,A
LD DE,FNT:ADD HL,HL
ADD HL,BC:ADD HL,DE
CALL SCRAD:LD B,5:INC D
XOR A:LD (DE),A
PRC INC D:LD A,(HL):INC HL
LD (DE),A:DJNZ PRC
INC D:XOR A
PRZL LD (DE),A
PRATR BIT 7,(IX+10):JR Z,NOPR
LD A,D:RRA:RRA:RRA
AND 3:OR #58:LD D,A
LD A,(IX+4):LD (DE),A
NOPR INC (IX):BIT 5,(IX):JR Z,NONL
NEXTLIN INC (IX+1)
XPOS LD (IX),0
NONL POP AF:POP BC:POP DE:POP HL:RET
TABC AND #7F:ADD A,(IX)
LD (IX),A:JR NONL
CBACK DEC (IX):JR NONL
PRV CALL SCRAD:LD A,#10:LD B,7
PRV0 INC D:LD (DE),A:DJNZ PRV0
JR PRATR
SCRAD LD DE,(VARS)
LD A,D:RRCA:RRCA:RRCA
AND #E0:OR E:LD E,A
LD A,D:AND #18:OR #40
LD D,A:RET
PRS LD A,(HL):INC HL:LD (IX+4),A
SET 7,(IX+10)
PRS0 LD A,(HL):INC HL:CP #FF
RET Z:CALL PRCH:JR PRS0
PRSTR EX (SP),HL
PRSTR0 LD A,(HL):INC HL
CP #FF:CALL NZ,PRCH
JR NZ,PRSTR0
EX (SP),HL:RET
KW CALL GKEY:JR Z,KW:RET
GKEY LD IY,#5C3A
XOR A:BIT 5,(IY+1):RET Z
LD A,(23560):RES 5,(IY+1)
BEEP PUSH AF:LD A,#31:DI
BP0 OUT (#FE),A:LD B,A
XOR #30:DJNZ $
OUT (#FE),A:POP AF:EI:RET
KEYSM LD HL,MNUKEYS
KEYS DEC D:INC D:JR Z,KEYS0:PUSH DE
KEYS0 CP (HL):INC HL:JR Z,GO
INC HL:INC HL:BIT 7,(HL):JR Z,KEYS0:RET
GO LD A,(HL):INC HL:LD H,(HL):LD L,A:JP (HL)
CONTR HALT:CALL GKEY
RES 4,(IX+11):PUSH AF
CALL PRLW:POP AF
PUSH AF:LD DE,PRCUR
CALL KEYSM:POP AF
CALL QKEYS:BIT 0,(IX+10)
JR Z,CONTR:RET
QUIT LD HL,QTXT
W1 LD D,0
W2 BIT 2,(IX+10):JR NZ,W2E
SET 2,(IX+10):PUSH HL:PUSH DE
CALL STCOOR:SCF:POP DE
POP HL:CALL PRMENU
JP CONTR
W2E POP HL:RET
QTXT DEFB 12,4,6,5,#57
DEFB " QUIT?",#D,#D
DEFB 255,16,6,#57,12,6,17,6,7*8+#42
DEFB "YES\",4,1,"y:DEFW 0,QUIT0
DEFB "NO",4,1,"n:DEFW 0,NQ:DEFB 255
NQ SET 0,(IX+10):RET
QUIT0 LD SP,0:CALL SU
; CALL CTEST:POP IX
IM 1
; JR Z,MREST:RET
CTEST LD HL,CTEST0
CTES LD DE,#5B80:PUSH DE
LD BC,128:DI:LDIR:RET
CTEST0 LD BC,#7FFD:LD D,#10
OUT (C),D:LD A,(#D280)
INC D:OUT (C),D
CP #21:RET
MSTORE LD HL,MST:JR CTES
MREST LD HL,MRST:JR CTES
MST LD BC,#7FFD:LD A,23
OUT (C),A:EXX
LD HL,#4000
LD DE,#C000
LD C,L:LD B,H
PUSH DE:PUSH BC
LDIR:EXX:DEC A
OUT (C),A:LD DE,#1011:EXX
POP BC:POP DE:LDIR
LD BC,#1280
MST1 EXX:OUT (C),D:EXX:LD A,(HL)
EXX:OUT (C),E:EXX:LD (HL),A
INC HL:DEC BC:LD A,B
OR C:JR NZ,MST1:RET
MRST XOR A:OUT (#FE),A
LD BC,#7FFD:LD A,23
OUT (C),A:EXX
LD HL,#C000
LD DE,#4000
LD BC,#1B80:LDIR
LD HL,#DC00
LD DE,#5C00
LD BC,#2400:LDIR
EXX:DEC A
OUT (C),A:EXX
LD HL,#C000
LD BC,#4000
LDIR:EXX:LD A,#10
OUT (C),A:RET
SU LD D,13:LD C,#FD:XOR A
SU0 LD B,#FF:OUT (C),D
LD B,#BF:OUT (C),A
DEC D:JP P,SU0:RET
MNUKEYS
DEFB "a:DEFW CDOWN
DEFB "q:DEFW CUP
DEFB "p:DEFW CRIGHT
DEFB "o:DEFW CLEFT
DEFB #E:DEFW HELP
DEFB #4:DEFW DECDAT
DEFB #5:DEFW INCDAT
DEFB #D:DEFW ENTER
DEFB 255
FTC CALL CATAD2
FT00 LD A,(HL):INC L:OR A
JR Z,FT00:DEC L
FT01 LD HL,MT-9
LD DE,9:LD B,A
FTC0 ADD HL,DE:DJNZ FTC0:RET
QKEYS OR A:RET Z:LD HL,MT
LD DE,7:LD C,1
QK0 BIT 7,(HL):RET NZ
INC HL:INC HL
CP (HL):JR Z,QKF
ADD HL,DE:INC C:JR QK0
QKF CALL CATAD2
QK3 LD A,(HL):INC L:OR A:JR Z,QK3
CALL CATAD5:LD A,C
LD BC,0:CPIR
LD A,L:AND #1F:LD (IX+2),A
LD A,H:AND 3:RL L:RLA
RL L:RLA:RL L:RLA
LD (IX+3),A:CALL PRCUR
ENTER CALL FTC:LD E,5:ADD HL,DE
LD E,(HL):INC HL:LD D,(HL)
LD A,E:OR D:RET Z
BIT 1,(IX+10):EX DE,HL:JP (HL)
INCDAT LD C,1:JR CDAT
DECDAT LD C,#FF
CDAT CALL FTC
CDAT0 LD A,(HL):INC HL:INC HL:INC HL
CP 5:JR C,CD1:SUB 5
SET 3,(IX+10)
CD1 LD E,(HL):INC HL
LD D,(HL):INC D:DEC D:RET Z
EX DE,HL:LD B,A:ADD A,A:ADD A,B:LD B,A
LD A,(HL):ADD A,C:PUSH HL
LD (HL),A:EX DE,HL
INC HL:INC HL:INC HL
LD E,(HL):INC HL:LD D,(HL)
LD (VARS),DE:POP DE:JP PFL
CDOWN INC (IX+3):LD A,(IX+8)
CP (IX+3):RET NC
LD A,(IX+6)
C0 LD (IX+3),A:RET
CUP DEC (IX+3):LD A,(IX+3)
CP (IX+6):RET NC
LD A,(IX+8):JR C0
CRIGHT CALL CATAD2
CRR LD A,(HL):OR A:INC HL:JR Z,CRR
CR0 CPI:JR Z,CR0:XOR A
CR1 CP (HL):INC HL:JR Z,CR1:DEC HL:LD A,L
LD A,L:AND #1F:LD (IX+2),A:RET
CLEFT CALL CATAD2
CL2 LD A,(HL):DEC HL:OR A:JR Z,CL2
CL0 CPD:JR Z,CL0:XOR A
CL1 CP (HL):DEC HL:JR Z,CL1:INC HL
LD A,L:AND #1F:LD (IX+2),A:RET
CATAD5 LD HL,(VARS+5):JR CATADR
CATAD2 LD HL,(VARS+2):JR CATADR
CATAD0 LD HL,(VARS+0)
CATADR LD A,H:RRCA:RRCA:RRCA
LD H,A:AND #E0:OR L:LD L,A
LD A,H:AND 3:OR #FC:LD H,A:RET
STCOOR LD HL,(VARS+2)
LD (COORDS+1),HL
SET 1,(IX+10)
CLCUR LD A,(IX+4):LD (PRCU+1),A
LD A,#FF:LD (OLDC+1),A
CALL PRCUR0
LD A,#FF:LD (OLDC+1),A:RET
PRCUR BIT 0,(IX+10):RET NZ
LD A,(IX+9):LD (PRCU+1),A
PRCUR0 CALL CATAD2
OLDC LD DE,0:SBC HL,DE:RET Z
ADD HL,DE:LD (OLDC+1),HL
LD A,L:AND #E0:LD C,A
LD D,H:LD E,L
PRC01 LD A,(HL):OR A:LD B,L:JR NZ,PRC00
LD A,(DE):OR A:LD B,E:JR NZ,PRC00
DEC E:LD A,E:AND #1F
OR C:LD E,A
INC L:LD A,L:AND #1F
OR C:LD L,A:JR PRC01
PRC00 LD (FBYTE+1),A
LD A,B:AND #1F:LD (IX+2),A
CALL CATAD5
LD A,(IX+7):SUB (IX+5)
INC A:LD (MNUWDT+1),A
LD A,(IX+8):SUB (IX+6)
INC A:LD B,A
PRC0 PUSH BC:PUSH HL:LD A,H
SUB 164:LD D,A:LD E,L
MNUWDT LD BC,0:DEC E
FBYTE LD A,0:INC E:CPI
JR Z,PRCU:LD A,(IX+4)
PRC1 LD (DE),A:JP PE,FBYTE
POP HL:LD BC,32:ADD HL,BC
POP BC:DJNZ PRC0:RET
PRCU LD A,0:JR PRC1
HELP LD HL,MT:LD E,1
HE0 LD A,(HL):CP #FF:JR Z,HEX
INC HL:LD A,(HL)
OR A:JR Z,NEXTH
PUSH HL:PUSH AF
CALL CATAD5:LD A,E
LD B,H:CPIR
LD A,H:SUB 164:LD B,A
LD C,L:POP AF:LD L,A
LD H,0:ADD HL,BC:DEC HL
DEC HL:LD A,(HL):AND #C7
HC OR 4+8:LD (HL),A:POP HL
NEXTH LD BC,8:ADD HL,BC
INC E:JR HE0
HEX LD A,#FF:LD (OLDC+1),A
HEX0 XOR A:IN A,(#FE):OR #E0
INC A:RET Z:JR HEX
OBJ DEFB 0,7,9,"COMPOSE SAMPLES ORNAMENTSSOUNDS POSITIONSORNAMENT SAMPLE "
ONAME DEFB 0,1,8," "
DRV DEFB 1,4,1,"ABCD"
FAT DEFW BASE,28590,S,7248
DEFW O,1845,SOUNDS,192,BASE,19242
DEFW 0,123,0,483:DEFB 255
INF LD HL,MF:LD (HL),1
PUSH AF:CALL PRLW
HALT:POP AF
LD HL,ONAME+3:LD BC,8
LD DE,#5CDD
LDIR:EX DE,HL:LD (HL),"C"
LD A,9:JR C,INF1
LD A,13:LD (HL),"M"
EX DE,HL:INC DE
LD HL,FAT:LD BC,4:LDIR
INF1 LD (#5D06),A
IDRV XOR A:LD (#5D10),A
DEC A:LD (23610),A
LD A,(DRV):LD C,1
CALL DOS:LD C,#18
CALL DOS:LD C,#A
CALL DOS:INC C:RET
SAVE
COMLEN EQU $+1
LD HL,0:LD A,L
OR H:RET Z:PUSH HL:SCF
CALL INF:POP DE:JR NZ,FEX
LD HL,25000+PLLN+194
LD DE,(COMLEN)
LD A,(PIF):OR A:JR NZ,SAVE0
LD BC,PLLN+194
SBC HL,BC:EX DE,HL
ADD HL,BC:EX DE,HL
SAVE0 LD C,#B:CALL DOS:JR POK
LOAD OR A:CALL INF:JR Z,NOFL
SET 0,(IX+12)
RES 1,(IX+12)
LD HL,0:LD (COMLEN),HL
CALL PRLLL:LD HL,25000
XOR A:LD (#5CF9),A
LD C,#E:DEC A
DOSM CALL DOS
POK LD HL,DOK
PRSS LD D,12:LD E,(HL):INC HL
LD (VARS),DE:CALL PRS
BIT 4,(IX+11)
CALL Z,PRLW:LD (IX+1),12
KWP LD B,10:HALT:DJNZ KWP+2
CALL KW:PUSH AF
LD HL,SPLN:LD (IX),6
CALL PRS:RES 7,(IX+10):POP AF:RET
NOFL LD HL,NOFT:JP PRSS
FEX LD HL,FEXT:JR NOFL+3
YN CALL PRSS:CP "y:RET Z
POP HL:RET
PRSA LD D,(HL):INC HL
LD E,(HL):INC HL
LD (VARS),DE:JP PRS
RSEC LD D,0:LD BC,#105:LD HL,#5B00
DOS PUSH IY:LD IY,#5C3A:IM 1
PUSH HL:LD HL,#5CC2
PUSH AF:PUSH BC:PUSH DE
CALL SU:POP DE:POP BC:POP AF
LD (HL),#C3:LD HL,RAI
LD (#5CC3),HL:LD HL,PRAD
LD (#5C51),HL:LD HL,DRER
EX (SP),HL:LD (23613),SP
CALL #3D13:POP HL:IM 2:POP IY:RET
RAI EX (SP),HL:PUSH AF
LD A,H:CP #D:JR NZ,RAIE
LD A,L:CP #6B:JR NZ,RAIE
LD HL,(VARS):LD (RAIX+1),HL
LD A,(#5CF5)
LD HL,RAIT+15:CALL PBN
LD A,(#5CF4)
LD HL,RAIT+18:PUSH HL
CALL PBN:POP HL:LD (HL),58
RAIW LD HL,RAIT:CALL PRSS
RAIX LD HL,0:LD (VARS),HL
SUB 32:CP "I:JR Z,RAIQ
CP "R:JR Z,RAIQ
CP 231:JR NZ,RAIW:LD A,"A
RAIQ POP HL:POP HL:POP HL
POP HL:POP HL
LD HL,#3F7E:EX (SP),HL
JP #3D2F
RAIE POP AF:EX (SP),HL
RADR RET
PRAD DEFW RADR
RAIT DEFB 6,#56,"RETRY/IGNORE",58,"000",58,"00?",255
NOFT DEFB 10,#56,"NO SUCH FILE",255
FEXT DEFB 10,#56,"FILE EXISTS",255
DOK DEFB 8,#40+42,"OK. PRESS A KEY.",255
DERR DEFB 0,13,#56,"BREAK",255
DEFB 3,12,#56,"NO SPACE",255
DEFB 6,12,#56,"NO DISK",255
DEFB 4,9,#56,"DIRECTORY FULL",255
DER1 DEFB 11,#56,"DISK ERROR",255
SPLN DEFB #40+40," ",255
NOCOMT DEFB 11,#56,"NO COMPOSE",255
DONT DEFB 8,#56,"IT'S ALREADY DONE",255
WAITT DEFB 12,10,#44+40,"PLEASE WAIT",255
SH DEFB 7,#56,"ARE YOU SURE Y/N ?",255
INAME CALL FTC
LD A,(HL):INC HL:INC HL:INC HL
LD E,(HL):INC HL
LD D,(HL):INC DE:INC DE
LD A,(DE):INC DE
LD (INH0+1),DE
LD (IKR0+2),A
INC HL:INC HL:INC HL
LD E,(HL):INC HL:LD H,(HL)
CPL:ADD A,E:DEC A:LD L,A
CALL CATADR:LD BC,#5C01
ADD HL,BC:LD (FLC+1),HL
XOR A:LD (INH0+4),A
LD A,(IX+9):PUSH AF:RES 7,(IX+11)
LD A,(IX+4):LD (IX+9),A
CALL CLCUR
INAM CALL FLC:CALL KW:LD E,A:CALL INCH
LD A,E:LD DE,PRDAT:LD HL,IKS
CALL KEYS:JR INAM
IKS DEFB 8:DEFW IKL
DEFB 9:DEFW IKR
DEFB #D:DEFW EXI
DEFB #7:DEFW EXI
DEFB #C:DEFW DEL
DEFB 4:DEFW UDL
DEFB 5:DEFW INS
DEFB 255
EXI POP HL:POP HL:POP AF:LD (IX+9),A:JP CLCUR
INS LD HL,INH0+4:LD A,(IKR0+2)
LD D,0:LD E,A:SUB (HL):RET Z
DEC A:JR Z,UDL:LD B,D:LD C,A
LD HL,(INH0+1):ADD HL,DE
DEC HL:LD E,L:LD D,H:DEC HL
LDDR:EX DE,HL:JR UDL0+1
DEL CALL IKL:RET M
UDL LD HL,INH0+4:LD A,(IKR0+2)
LD D,0:LD E,(HL):SUB E:RET Z
LD B,D:LD C,A
LD HL,(INH0+1):ADD HL,DE
LD D,H:LD E,L:INC HL
LDIR:EX DE,HL
UDL0 DEC HL:LD (HL)," :SET 7,(IX+11):RET
IKL LD HL,INH0+4:LD A,(HL)
DEC A:RET M:LD (HL),A:RET
INCH CP 32:RET C:OR A:RET M
CP #60:JR C,INH0:SUB 32
INH0 LD HL,ONAME+3
LD BC,0:ADD HL,BC:LD (HL),A:SET 7,(IX+11)
IKR LD HL,INH0+4:LD A,(HL)
IKR0 INC A:CP 8:RET NC:LD (HL),A:RET
FLC LD BC,#58AC:LD HL,(INH0+4)
ADD HL,BC:RES 7,(HL):INC L
SET 7,(HL):INC L:RES 7,(HL):RET
CAT LD A,#FF:LD (GFN+1),A
CALL IDRV:LD E,8:CALL RSEC
DEC (IX+5):SET 4,(IX+11)
LD DE,TIT+8:LD HL,#5BF5
CALL C8:LD HL,(#5BE5)
CALL BBD2:EX DE,HL:INC HL:INC HL
CALL P2N:LD A,D:CALL P2N
LD HL,TIT+30:LD A,(#5BE4)
LD (MAXF+1),A
LD DE,(#5BF4):SUB E
CALL PBN:LD HL,TIT+41
LD A,E:CALL PBN
LD HL,TIT:CALL PRSA
INC (IX+8)
CAT2 LD HL,#406:LD (VARS),HL
SET 7,(IX+10):LD C,9
CLW0 LD B,20:LD A,32
CLW1 CALL PRCH:DJNZ CLW1:LD A,#D
CALL PRCH:DEC C:JR NZ,CLW0
LD (IX+1),4
CAT0 CALL GFN:JR C,CATE
LD DE,FNAM:PUSH DE
INC DE:CALL C8:LD A,"."
LD (DE),A:INC DE:CALL C1
INC DE:PUSH DE:EX DE,HL
LD HL,FAT:LD IY,OBJ+3
CAT3 LD A,(HL):INC A:JR Z,CAT6
PUSH DE:PUSH HL:LD B,4
CAT4 LD A,(DE):CP (HL):INC HL:INC DE
JR Z,CAT5:POP HL:POP DE
LD BC,4:ADD HL,BC
LD C,9:ADD IY,BC:JR CAT3
CAT5 DJNZ CAT4:POP HL:POP DE
CAT6 PUSH IY:POP HL:POP DE
LD BC,9:LDIR
POP HL:CALL PRS
LD A,#D:CALL PRCH
LD A,(IX+1):CP 12:JR C,CAT0
LD HL,MAXF+1:LD A,(GFN+1)
INC A:CP (HL):JR NC,CATE
LD HL,SCYN:CALL PRSS
CP 7:JP NZ,CAT2
CAT1 SET 0,(IX+10):RET
CATE CALL POK:JR CAT1
DRER LD IX,VARS
LD SP,(QUIT0+1)
DEC SP:DEC SP
LD HL,DERR:IM 2
LD A,(23610):CP #14
LD A,0:JR Z,DRER1
LD A,(#5D0F)
DRER1 LD BC,DER1-DERR:CPIR:XOR A
CALL PRSS
BIT 4,(IX+11)
RES 4,(IX+11):JR Z,DRER2
SET 0,(IX+10)
DRER2 JP CONTR
C8 LD B,7:CALL C1:DJNZ C8+2
C1 LD A,(HL):CP 32:JR C,C10
OR A:JP M,C10:CP #60
JR C,C11:SUB 32
C11 LD (DE),A:INC HL:INC DE:RET
C10 LD A,"?:JR C11
GFN LD A,0:INC A:LD (GFN+1),A
MAXF CP 0:CCF:RET C:LD L,A
LD H,0:ADD HL,HL:ADD HL,HL
ADD HL,HL:ADD HL,HL
LD E,H:LD H,#5B:PUSH HL
LD A,(#5CF4):DEC A:CP E:CALL NZ,RSEC
POP HL:LD A,(HL):CP 32
RET NC:JR GFN
PBN CALL BBD:LD B,A:CALL P2N2+1
LD A,B
P2N LD C,A:RRA:RRA:RRA:RRA
AND #F:OR #30:LD (HL),A
P2N2 INC HL:LD A,C:AND #F
OR #30:LD (HL),A:INC HL:RET
TIT DEFB 2,6,#43+40,"NAME",58,"NAMELESS (0000)",#D
DEFB "FILES",58,"000 ERASED",58,"000",255
FNAM DEFB #40+40:DEFS 10:DEFB 32:DEFS 9:DEFB 255
SCYN DEFB 6,#42+40,"MORE...",255
INT PUSH IY:LD IY,#5C3A:RST #38
PUSH IX:LD IX,VARS
PUSH HL:PUSH DE:PUSH BC
PUSH AF:EX AF,AF':PUSH AF
CALL SCROLL:CALL MUS
POP AF:EX AF,AF'
POP AF:POP BC:POP DE:POP HL
POP IX:POP IY:RET
MUS BIT 1,(IX+12):RET Z
LD A,(MF):PUSH AF
MUS0 CP 1:LD (MUS0+1),A
CALL NZ,DOUBLE
POP AF:OR A:JP Z,DOUBLE+#E:RET
PIF DEFB 0,2,14,"+ PLAY ROUTINE- PLAY ROUTINE"
MF DEFB 1,2,9,"MUSIC ON MUSIC OFF"
MFS LD HL,MF:JR PIFS+3
PIFS LD HL,PIF:LD A,(HL):XOR 1
LD (HL),A:RET
DMN DEFB 6,2,20,13,40+#43
DEFB #81,"CACOFONY COMPILER",#D,#D
COORDS
DEFB 255,8,6,#40+40,7,4,24,11,56+#41
DEFB #82,"COMPILE MODULE ",2,10,"m:DEFW 0,COMPILE
DEFB #D,#82+14,"~\",2,10,"r:DEFW PIF,PIFS
DEFB #D,#82,"NAME",58,#88,2,3,"n:DEFW ONAME,INAME
DEFB #D,#82,"LOAD COMPOSE ",4,3,"l:DEFW 0,LOAD
DEFB #D,#82,"SAVE MODULE ",4,3,"s:DEFW 0,SAVE
DEFB #D,#82,"CATALOG ",4,3,"c:DEFW 0,CAT
DEFB " DRIVE",58,#82,"~",2,2,"d:DEFW DRV,0
DEFB #D,#82+9,"~\",2,4,"u:DEFW MF,MFS
DEFB #D,#82,"EXIT COMPILER ",0,0,7:DEFW 0,QUIT:DEFB 255
CMN DEFB 2,18,28,5,48+#42
DEFB 255,20,20,48+#42,20,20,20,20,48+#42
DEFB "MUSIC'S NAME",58,#8F,2,1,0:DEFW 53524,0
DEFB #D,"AUTHOR(S)",58,#8F,2,6,0:DEFW 53542,0
DEFB #D,"LENGHT OF MODULE",58,4,1,0:DEFW 0,0:DEFB 255
FMS DEFB 0,1,#F," "
PRCHAD DEFW PRCH
PRLW LD HL,PRCHAD
BIT 1,(IX+12):JR NZ,PRLW2
LD A,1:LD (MF),A
PRLW2 RES 7,(IX+10)
LD (#5C51),HL
LD HL,#120F
LD (VARS),HL
LD HL,53527
CALL PRLW0
LD HL,#1309+3
LD (VARS),HL
LD HL,53545
CALL PRLW0
PRLLL LD HL,PRCHAD
LD IY,#5C3A
LD (#5C51),HL
LD HL,#1413
LD (VARS),HL
LD HL,(COMLEN)
LD A,(PIF):OR A:JR NZ,PRLLL0
LD BC,PLLN+194
ADD HL,BC
PRLLL0 LD C,L:LD B,H
CALL #2D2B:CALL #2DE3
LD HL,BT:JP PRS0
BT DEFB " ",255
PRLW0 LD B,15
PRLW1 LD A,(HL):RST #10
INC HL:DJNZ PRLW1:JP PRDAT
CLS LD HL,#5AFF:LD DE,#5AFE
LD BC,#1AFF:LD (HL),0:LDDR
CLS0 LD B,24:LD DE,GFX:LD C,H
CLS1 LD A,(DE):LD (HL),A
INC H:INC DE:DJNZ CLS1
LD H,C:INC L:JR NZ,CLS0
LD H,#58:LD DE,#5801
LD BC,#2FF:LD (HL),8+5
LDIR:LD A,1:OUT (#FE),A:RET
GFX
DEFB 0,#7E,#40,#40,#40,#40,#40,0
DEFB 0,#7E,#40,#40,#40,#40,#40,0
DEFB 0,#7E,#40,#40,#40,#40,#40,0
SBUFF EQU #FB00
SCROLL LD A,0:INC A:AND 15
LD (SCROLL+1),A
JR NZ,SCR0
TXA LD HL,TXT:LD A,(HL)
OR A:JR NZ,SCR1
LD HL,TXT:LD A,(HL)
SCR1 INC HL:LD (TXA+1),HL
LD C,A:ADD A,A
LD L,A:LD H,0:LD B,H
ADD HL,HL:ADD HL,BC
LD BC,FNT:ADD HL,BC
EX DE,HL:LD HL,SBUFF+32
LD B,5
SCR10 PUSH BC
LD A,(DE):LD B,4
LD C,A:RRA:OR C
SCR11 RLCA:RL C:RRCA:RL C
RLA:DJNZ SCR11
LD (HL),C:INC L:LD B,4
SCR12 RLCA:RL C:RRCA:RL C
RLA:DJNZ SCR12
LD (HL),C:LD BC,33
INC DE:ADD HL,BC
POP BC:DJNZ SCR10
SCR0 LD HL,JTAB:LD DE,#503F
LD IY,GFX+24
LD A,(HL):OR A:JR NZ,SCR00
LD HL,JTAB:LD A,(HL)
SCR00 INC HL:LD (SCR0+1),HL:LD B,A
SCR01 CALL UPDE:DJNZ SCR01
LD HL,5*34+SBUFF-1
CALL SSLN:LD B,5
SCR2 SLA (HL):DEC L
RL (HL):DEC L:LD C,(IY)
PUSH HL:PUSH DE
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
RL (HL):EX AF,AF':LD A,(HL):OR C:LD (DE),A:DEC E:DEC L:EX AF,AF'
POP DE:CALL UPDE:EX (SP),HL
PUSH BC:LD B,2
SCRL PUSH HL:PUSH DE:LD C,(IY)
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
LD A,(HL):OR C:LD (DE),A:DEC E:DEC L
POP DE:POP HL:CALL UPDE
DEC B:JP NZ,SCRL:POP BC
POP HL:DEC B:JP NZ,SCR2
SSLN LD A,(IY):LD B,8:PUSH DE
SSLN0 LD (DE),A:DEC E
LD (DE),A:DEC E
LD (DE),A:DEC E
LD (DE),A:DEC E
DJNZ SSLN0:POP DE
UPDE DEC IY
LD A,D:DEC D:AND #7:RET NZ
LD A,E:SUB 32:LD E,A:RET C
LD A,D:ADD A,8:LD D,A:RET
JTAB DEFB 1,2,3,4,5,5,6,6,6,7,7,7,7,8,8,8,8,8,8
DEFB 7,7,7,7,6,6,6,5,5,4,3,2,0
TXT DEFB " "
DEFB "YOU ARE WELCOME TO CACOFONY "
DEFB "COMPILER V0.02 WRITTEN BY "
DEFB "S.T.A.S. (C) 29.06.1996. "
DEFB " SPECIAL THANKS TO",58
DEFB " SEV (MUSIC MAKING AND BE"
DEFB "TA-TESTING), PACS (TESTIN"
DEFB "G), SVE (MORAL SUPPORT). "
DEFB " ATTENTION! IT IS THE "
DEFB "FIRST RELEASE OF THIS SYS"
DEFB "TEM AND IF YOU HAVE GOT "
DEFB "SOME OFFERS OR ADVICE YOU"
DEFB " MIGHT CONTACT ME BY WRIT"
DEFB "TING TO",58," RUSSIA, 6810"
DEFB "32 KOMSOMOLSK-NA-AMURE, PI"
DEFB "ROGOVA STREET 15/2-6. ALL"
DEFB " YOUR IDEAS WILL BE CONSID"
DEFB "ERED AND WILL BE ABLE TO "
DEFB "BE USED IN NEXT VERSIONS "
DEFB "OF THE CACOFONY. I HO"
DEFB "PE YOU ENJOY WORKING "
DEFB "WITH THIS CACOFONY SYSTEM"
DEFB ". HAVE A NICE COMPOSIN"
DEFB "G AND WAIT FOR NEXT PROGR"
DEFB "AMS FROM ME! YOURS "
DEFB "FAITHFULLY, S.T.A.S. ",0
TL EQU #86-11
COMADR EQU 24900
COMA EQU COMADR+32
CDON LD HL,DONT:JR NOCOM+3
NOCOM LD HL,NOCOMT:JP PRSS
COMPILE BIT 0,(IX+12):JR Z,NOCOM
BIT 1,(IX+12):JR NZ,CDON
LD HL,WAITT:CALL PRSA
LD A,(BASE+1):INC A
LD (DFP+2),A
LD (DFPP+2),A:XOR A
DFP LD BC,0:LD HL,POSTAB+4
LD DE,5
DFP0 CP (HL):JR NZ,DFP1:LD C,1
DFP1 ADD HL,DE:DJNZ DFP0
DEC C:JR Z,DFP2
DFPP LD BC,0
DFP3 OR A:SBC HL,DE
CP (HL):JR NC,DFP4
DEC (HL):LD C,1
DFP4 DJNZ DFP3
DEC C:JP NZ,DFP5
PUSH AF
PUSH AF:CALL GPATAD
POP AF:PUSH HL
INC A:CALL GPATAD
PUSH HL:LD DE,S
EX DE,HL:OR A:SBC HL,DE
LD B,H:LD C,L
POP HL:POP DE:LDIR:POP AF:DEC A
DFP2 INC A:JR DFP
DFP5 LD HL,UST:LD DE,UST+1
LD BC,31:LD (HL),0:LDIR
LD HL,MSG:LD DE,COMADR
LD BC,16:LDIR
LD HL,#D116:LD C,16:LDIR
INC HL:INC HL:LD C,16:LDIR
LD A,(53562)
LD (COMA+#12),A
LD HL,BASE
LD A,(HL):LD C,A
LD (COMA+#10),A
INC HL:LD A,(HL):INC A
LD (COMA+#11),A:INC HL
LD B,A:LD DE,COMA+#1A
XOR A:LD (MAXPAT+1),A
GPOST CP C:JR NZ,NLAD
PUSH HL:LD HL,0-COMADR
ADD HL,DE
LD (COMA+#13),HL:POP HL
NLAD PUSH AF:PUSH BC:PUSH HL
LD A,(HL):INC HL
OR (HL):INC HL
OR (HL):INC HL:PUSH AF
LD A,(HL):INC HL
OR A:JR Z,GG1
OR #40:LD (DE),A:INC DE
GG1 POP AF:CP 1:LD A,0:CCF:RRA
OR (HL):LD (DE),A
PUSH AF:LD A,(HL)
MAXPAT CP 0:JR C,NMP
LD (MAXPAT+1),A
NMP POP AF:INC DE:POP HL
RLA:JR NC,NCDS
PUSH HL:LD BC,3
LDIR:POP HL
NCDS LD BC,5:ADD HL,BC:POP BC
POP AF:INC A:DJNZ GPOST
PUSH HL:LD HL,0-COMADR
ADD HL,DE
LD (COMA+#15),HL:POP HL
LD (ADSPC+1),DE
LD A,(MAXPAT+1):INC A
LD L,A:LD C,L:LD H,B
ADD HL,HL:ADD HL,HL
ADD HL,HL
ADD HL,BC:ADD HL,DE
LD (PAAD+1),HL
LD (COMA+#19),A
LD B,A:XOR A:EX DE,HL
GPATAB PUSH AF:PUSH BC
PUSH DE:CALL GPATAD
LD A,(HL):INC A
LD (PATL1+1),A
LD (PATL2+1),A
POP DE:PUSH HL
ADSPC LD HL,0:DEC A
LD (HL),A:INC HL
LD (ADSPC+1),HL
CALL LDDE
POP HL:INC HL:PUSH HL
PATL1 LD B,0
GEP LD A,(HL):OR A
JR Z,ZE:INC HL
LD (DE),A:INC DE
DJNZ GEP:JR G3C
ZE LD C,0
ZE1 CP (HL):JR NZ,NZE
INC C:INC HL:DJNZ ZE1
NZE LD (DE),A:LD A,C:DEC A
JR Z,OZE
NZE1 LD A,C:INC DE
LD (DE),A:INC DE
INC B:DJNZ GEP:JR G3C
OZE LD A,(PATL1+1):DEC A
CP B:JR Z,NZE1
DEC DE:LD A,(DE)
JR NZE1+1
G3C CALL PACK:POP HL
LD BC,64:ADD HL,BC:LD B,3
CCNS PUSH BC:PUSH HL:PUSH HL
LD HL,(ADSPC+1)
CALL LDDE:POP HL
PATL2 LD B,0
GCP LD A,(HL):INC HL
LD C,(HL):INC HL
CP 104:JR NC,FREP
CP 96:JR NC,FPSE
PUSH DE:CALL DCN:POP DE
LD (DE),A:DEC C:INC C
JR Z,ZS0
GCP0 OR #80
LD (DE),A:INC DE
PUSH HL:PUSH BC:LD B,0
LD A,C:PUSH AF:AND #F0
RRA:RRA:RRA:RRA:LD C,A
LD HL,UST:ADD HL,BC