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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
|
; da65 V2.19 - N/A
; Created: 2025-11-04 02:06:02
; Input file: unalf14.raw
; Page: 1
.setcpu "6502"
; ----------------------------------------------------------------------------
DOSVEC_lo := $000A ; 10 PROGRAM RUN VECTOR
DOSVEC_hi := $000B
zp_b0 := $00B0
zp_b1 := $00B1
acc16_l := $00B2
acc16_h := $00B3
zp_b4 := $00B4
zp_b5 := $00B5
stackptr_l := $00B6
stackptr_h := $00B7
zp_b8 := $00B8
zp_b9 := $00B9
outbuf_ptr_l := $00BA
outbuf_ptr_h := $00BB
zp_bc := $00BC
zp_bd := $00BD
zp_be := $00BE
zp_bf := $00BF
SDMCTL := $022F ; 559 DMACTL SHADOW
SHFLOC := $02BE ; 702
MEMTOP_lo := $02E5 ; 741 END OF FREE RAM
MEMTOP_hi := $02E6
MEMLO_hi := $02E8
ICCOM := $0342 ; 834 ; Command byte (see C_* constants) (set by user)
ICBAL := $0344 ; 836 ; Buffer address, LSB (set by user)
ICBAH := $0345 ; 837 ; Buffer address, MSB (set by user)
ICBLL := $0348 ; 840 ; Buffer length, LSB (set by user)
ICBLH := $0349 ; 841 ; Buffer length, MSB (set by user)
ICAX1 := $034A ; 842 ; AUX1 byte (2nd param in BASIC OPEN) (set by user)
ICAX2 := $034B ; 843 ; AUX2 byte (4rd param in BASIC OPEN) (set by user)
BOOTRG := $0700 ; 1792 PROGRAM AREA
input_file := $7000
output_dir := $7050
outfile_l := $70A0
outfile_h := $70A1
linbuf := $7120
CIOV := $E456 ; 58454 ; Main CIO entry point!
; ----------------------------------------------------------------------------
save_SDMCTL:
.byte $00 ; 7173 00
L7174: .byte $00 ; 7174 00
L7175: .byte $00 ; 7175 00
L7176: .byte $00 ; 7176 00
L7177: .byte $00 ; 7177 00
L7178: .byte $00 ; 7178 00
L7179: .byte $00 ; 7179 00
L717A: .byte $00 ; 717A 00
L717B: .byte $00 ; 717B 00
L717C: .byte $00 ; 717C 00
L717D: .byte $00 ; 717D 00
L717E: .byte $00 ; 717E 00
; calculated
cksum_l:.byte $00 ; 717F 00
cksum_h:.byte $00 ; 7180 00
L7181: .byte $00 ; 7181 00
L7182: .byte $30 ; 7182 30
inbuf_len_l:
.byte $00 ; 7183 00
inbuf_len_h:
.byte $00 ; 7184 00
inbuf_adr_l:
.byte $00 ; 7185 00
inbuf_adr_h:
.byte $00 ; 7186 00
outbuf_adr_l:
.byte $00 ; 7187 00
outbuf_adr_h:
.byte $00 ; 7188 00
L7189: .byte $00 ; 7189 00
L718A: .byte $00 ; 718A 00
L718B: .byte $00 ; 718B 00
L718C: .byte $00 ; 718C 00
; arc/alf signature, $1a
alf_header:
.byte $00 ; 718D 00
; alf signature, $0f
alf_hdr_sig:
.byte $00 ; 718E 00
; null-terminated compressed filename, 13 bytes
alf_hdr_filename:
.byte $20,$20,$20,$20,$20,$20,$20,$20; 718F 20 20 20 20 20 20 20 20
.byte $20,$20,$20,$20,$20; 7197 20 20 20 20 20
; compressed size, 4 bytes, LSB first
alf_hdr_compsize0:
.byte $00 ; 719C 00
alf_hdr_compsize1:
.byte $00 ; 719D 00
alf_hdr_compsize2:
.byte $00 ; 719E 00
; always 0, archived file never >= 16MB
alf_hdr_compsize3:
.byte $00 ; 719F 00
; 2 bytes, MS-DOS date format (see Arcinfo)
alf_hdr_date0:
.byte $00 ; 71A0 00
alf_hdr_date1:
.byte $00 ; 71A1 00
; 2 bytes, MS-DOS time format (see Arcinfo)
alf_hdr_time0:
.byte $00 ; 71A2 00
alf_hdr_time1:
.byte $00 ; 71A3 00
; CRC stored in file header
alf_hdr_cksum_l:
.byte $00 ; 71A4 00
alf_hdr_cksum_h:
.byte $00 ; 71A5 00
; uncompressed size, 4 bytes, LSB first
alf_hdr_origsize0:
.byte $00 ; 71A6 00
alf_hdr_origsize1:
.byte $00 ; 71A7 00
alf_hdr_origsize2:
.byte $00 ; 71A8 00
; last byte in alf header
alf_hdr_origsize3:
.byte $00 ; 71A9 00
L71AA: .byte $00 ; 71AA 00
L71AB: .byte $00 ; 71AB 00
shift_counter:
.byte $09 ; 71AC 09
L71AD: .byte $00 ; 71AD 00
L71AE: .byte $02 ; 71AE 02
L71AF: .byte $00 ; 71AF 00
L71B0: .byte $00 ; 71B0 00
outbuf_len_l:
.byte $00 ; 71B1 00
outbuf_len_h:
.byte $00 ; 71B2 00
disable_screen_flag:
.byte $00 ; 71B3 00
L71B4: .byte $00 ; 71B4 00
L71B5: .byte $00 ; 71B5 00
L71B6: .byte $00 ; 71B6 00
L71B7: .byte $00 ; 71B7 00
; ----------------------------------------------------------------------------
msg_banner:
.byte "}V1.4 ALFUNCRUNCH 07/10"; 71B8 7D 56 31 2E 34 20 20 20
; 71C0 20 20 41 4C 46 55 4E 43
; 71C8 52 55 4E 43 48 20 20 20
; 71D0 20 20 30 37 2F 31 30
.byte "/88" ; 71D7 2F 38 38
.byte $9B,$9B,$00 ; 71DA 9B 9B 00
prompt_infile:
.byte "File to decompress:"; 71DD 46 69 6C 65 20 74 6F 20
; 71E5 64 65 63 6F 6D 70 72 65
; 71ED 73 73 3A
.byte $9B,$00 ; 71F0 9B 00
prompt_outdir:
.byte "Output Directory: "; 71F2 4F 75 74 70 75 74 20 44
; 71FA 69 72 65 63 74 6F 72 79
; 7202 3A 20
.byte $9B,$00 ; 7204 9B 00
msg_complete:
.byte "Processing complete"; 7206 50 72 6F 63 65 73 73 69
; 720E 6E 67 20 63 6F 6D 70 6C
; 7216 65 74 65
.byte $9B,$00 ; 7219 9B 00
msg_uncrunching:
.byte "Uncrunching: "; 721B 55 6E 63 72 75 6E 63 68
; 7223 69 6E 67 3A 20
.byte $00 ; 7228 00
prompt_screen_off:
.byte "Screen off for speed ? "; 7229 53 63 72 65 65 6E 20 6F
; 7231 66 66 20 66 6F 72 20 73
; 7239 70 65 65 64 20 3F 20
.byte $00 ; 7240 00
emsg_not_alf:
.byte "Not an AlfCrunch file!"; 7241 4E 6F 74 20 61 6E 20 41
; 7249 6C 66 43 72 75 6E 63 68
; 7251 20 66 69 6C 65 21
.byte $9B,$00 ; 7257 9B 00
emsg_outdir_too_long:
.byte "Output Directory Is Too Long"; 7259 4F 75 74 70 75 74 20 44
; 7261 69 72 65 63 74 6F 72 79
; 7269 20 49 73 20 54 6F 6F 20
; 7271 4C 6F 6E 67
.byte $9B,$00 ; 7275 9B 00
emsg_outdir_invalid:
.byte "Output Directory Is Invalid"; 7277 4F 75 74 70 75 74 20 44
; 727F 69 72 65 63 74 6F 72 79
; 7287 20 49 73 20 49 6E 76 61
; 728F 6C 69 64
.byte $9B,$00 ; 7292 9B 00
emsg_open_input:
.byte "Error Opening Input File"; 7294 45 72 72 6F 72 20 4F 70
; 729C 65 6E 69 6E 67 20 49 6E
; 72A4 70 75 74 20 46 69 6C 65
.byte $9B,$00 ; 72AC 9B 00
emsg_eof_extra:
.byte "Extra bytes at EOF. Don't add t"; 72AE 45 78 74 72 61 20 62 79
; 72B6 74 65 73 20 61 74 20 45
; 72BE 4F 46 2E 20 44 6F 6E 27
; 72C6 74 20 61 64 64 20 74
.byte "o file" ; 72CD 6F 20 66 69 6C 65
.byte $9B,$00 ; 72D3 9B 00
emsg_write_output:
.byte "Error writing output file"; 72D5 45 72 72 6F 72 20 77 72
; 72DD 69 74 69 6E 67 20 6F 75
; 72E5 74 70 75 74 20 66 69 6C
; 72ED 65
.byte $9B,$00 ; 72EE 9B 00
emsg_read_input:
.byte "Error reading input file"; 72F0 45 72 72 6F 72 20 72 65
; 72F8 61 64 69 6E 67 20 69 6E
; 7300 70 75 74 20 66 69 6C 65
.byte $9B,$00 ; 7308 9B 00
emsg_input_overrun:
.byte "Input buffer overrun"; 730A 49 6E 70 75 74 20 62 75
; 7312 66 66 65 72 20 6F 76 65
; 731A 72 72 75 6E
.byte $9B,$00 ; 731E 9B 00
emsg_checksum:
.byte "File checksum in error"; 7320 46 69 6C 65 20 63 68 65
; 7328 63 6B 73 75 6D 20 69 6E
; 7330 20 65 72 72 6F 72
.byte $9B,$00 ; 7336 9B 00
emsg_memlo:
.byte "Error, memlo must be under $300"; 7338 45 72 72 6F 72 2C 20 6D
; 7340 65 6D 6C 6F 20 6D 75 73
; 7348 74 20 62 65 20 75 6E 64
; 7350 65 72 20 24 33 30 30
.byte "0" ; 7357 30
.byte $9B,$00 ; 7358 9B 00
; ----------------------------------------------------------------------------
startup:jsr open_kdev ; 735A 20 B4 7B
lda SDMCTL ; 735D AD 2F 02
sta save_SDMCTL ; 7360 8D 73 71
lda MEMLO_hi ; 7363 AD E8 02
cmp #$30 ; 7366 C9 30
bcs print_emsg_memlo; 7368 B0 50
; ldx #<msg_banner : ldy #>msg_banner
print_msg_banner:
ldx #$B8 ; 736A A2 B8
ldy #$71 ; 736C A0 71
jsr printstr ; 736E 20 8B 7A
lda #$40 ; 7371 A9 40
sta SHFLOC ; 7373 8D BE 02
jsr get_cli_arg ; 7376 20 CE 7B
bcs have_infile ; 7379 B0 0B
jsr copy_cli_arg ; 737B 20 11 7C
lda #$01 ; 737E A9 01
sta disable_screen_flag; 7380 8D B3 71
jmp L7395 ; 7383 4C 95 73
; ----------------------------------------------------------------------------
; either a filename was passed as an argument (sparta), or enterd at the prompt
have_infile:
lda #$9B ; 7386 A9 9B
jsr putchar ; 7388 20 9F 7A
; ldx #<prompt_infile : ldy #>prompt_infile
print_prompt_infile:
ldx #$DD ; 738B A2 DD
ldy #$71 ; 738D A0 71
jsr printstr ; 738F 20 8B 7A
jsr getline ; 7392 20 19 7B
L7395: lda linbuf_idx ; 7395 AD 79 7A
bne copy_filename ; 7398 D0 2A
exit: jsr close_kdev ; 739A 20 C3 7B
; ldx #<msg_complete : ldy #>msg_complete
print_msg_complete:
ldx #$06 ; 739D A2 06
ldy #$72 ; 739F A0 72
jsr printstr ; 73A1 20 8B 7A
lda save_SDMCTL ; 73A4 AD 73 71
sta SDMCTL ; 73A7 8D 2F 02
ldx #$30 ; 73AA A2 30
jsr close_iocb ; 73AC 20 48 7B
lda BOOTRG ; 73AF AD 00 07
cmp #$53 ; 73B2 C9 53
beq sparta_exit ; 73B4 F0 03
jmp (DOSVEC_lo) ; 73B6 6C 0A 00
; ----------------------------------------------------------------------------
sparta_exit:
rts ; 73B9 60
; ----------------------------------------------------------------------------
; ldx #<emsg_memlo : ldy #>emsg_memlo
print_emsg_memlo:
ldx #$38 ; 73BA A2 38
ldy #$73 ; 73BC A0 73
jsr printstr ; 73BE 20 8B 7A
jmp exit ; 73C1 4C 9A 73
; ----------------------------------------------------------------------------
copy_filename:
jsr ucase_linbuf ; 73C4 20 5E 7B
jsr ensure_d_prefix; 73C7 20 CF 7D
jsr ensure_suffix ; 73CA 20 0C 7E
ldx linbuf_idx ; 73CD AE 79 7A
copy_filename_loop:
lda linbuf,x ; 73D0 BD 20 71
sta input_file,x ; 73D3 9D 00 70
dex ; 73D6 CA
bpl copy_filename_loop; 73D7 10 F7
jsr get_cli_arg ; 73D9 20 CE 7B
bcs print_prompt_outdir; 73DC B0 06
jsr copy_cli_arg ; 73DE 20 11 7C
jmp have_outdir ; 73E1 4C EE 73
; ----------------------------------------------------------------------------
; ldx #<prompt_outdir : ldy #>prompt_outdir
print_prompt_outdir:
ldx #$F2 ; 73E4 A2 F2
ldy #$71 ; 73E6 A0 71
jsr printstr ; 73E8 20 8B 7A
jsr getline ; 73EB 20 19 7B
; either a dir was passed as an argument (sparta), or enterd at the prompt
have_outdir:
lda linbuf_idx ; 73EE AD 79 7A
beq exit ; 73F1 F0 A7
lda #$00 ; 73F3 A9 00
sta L7174 ; 73F5 8D 74 71
jsr ucase_linbuf ; 73F8 20 5E 7B
jsr ensure_d_prefix; 73FB 20 CF 7D
jsr L7D86 ; 73FE 20 86 7D
bcc copy_outdir ; 7401 90 0A
; ldx #<emsg_outdir_invalid : ldy #>emsg_outdir_invalid
print_emsg_outdir_invalid2:
ldx #$77 ; 7403 A2 77
ldy #$72 ; 7405 A0 72
jsr printstr ; 7407 20 8B 7A
jmp exit ; 740A 4C 9A 73
; ----------------------------------------------------------------------------
copy_outdir:
ldx linbuf_idx ; 740D AE 79 7A
cod_loop:
lda linbuf,x ; 7410 BD 20 71
sta output_dir,x ; 7413 9D 50 70
dex ; 7416 CA
bpl cod_loop ; 7417 10 F7
ldx disable_screen_flag; 7419 AE B3 71
bne disable_screen ; 741C D0 14
; ldx #<prompt_screen_off : ldy #>prompt_screen_off
print_prompt_screen_off:
ldx #$29 ; 741E A2 29
ldy #$72 ; 7420 A0 72
jsr printstr ; 7422 20 8B 7A
jsr getline ; 7425 20 19 7B
lda linbuf ; 7428 AD 20 71
jsr toupper ; 742B 20 51 7B
cmp #$59 ; 742E C9 59
bne open_input ; 7430 D0 09
disable_screen:
ldx #$00 ; 7432 A2 00
sta SDMCTL ; 7434 8D 2F 02
inx ; 7437 E8
stx disable_screen_flag; 7438 8E B3 71
open_input:
ldx #$10 ; 743B A2 10
; lda #<input_file ; ldy #>input_file
lday_input_file:
lda #$00 ; 743D A9 00
ldy #$70 ; 743F A0 70
jsr open_read ; 7441 20 76 7B
bpl read_alf_header; 7444 10 0A
; ldx #<emsg_open_input : ldy #>emsg_open_input
print_emsg_open_input:
ldx #$94 ; 7446 A2 94
ldy #$72 ; 7448 A0 72
jsr printstr ; 744A 20 8B 7A
jmp exit ; 744D 4C 9A 73
; ----------------------------------------------------------------------------
; 29 ($1D) bytes, read into alf_header
read_alf_header:
lda #$8D ; 7450 A9 8D
sta buf_adr_l ; 7452 8D 7B 7A
lda #$71 ; 7455 A9 71
sta buf_adr_h ; 7457 8D 7C 7A
lda #$1D ; 745A A9 1D
sta buf_len_l ; 745C 8D 7D 7A
lda #$00 ; 745F A9 00
sta buf_len_h ; 7461 8D 7E 7A
ldx #$10 ; 7464 A2 10
jsr readblock ; 7466 20 CF 7A
bpl check_arc_sig ; 7469 10 21
cpy #$88 ; 746B C0 88
bne print_emsg_open_input; 746D D0 D7
lda buf_len_h ; 746F AD 7E 7A
bne check_arc_sig ; 7472 D0 18
lda buf_len_l ; 7474 AD 7D 7A
beq L7489 ; 7477 F0 10
cmp #$1D ; 7479 C9 1D
bcs check_arc_sig ; 747B B0 0F
lda L71B4 ; 747D AD B4 71
beq print_emsg_open_input; 7480 F0 C4
; ldx #<emsg_eof_extra : ldy #>emsg_eof_extra
print_emsg_eof_extra:
ldx #$AE ; 7482 A2 AE
ldy #$72 ; 7484 A0 72
jsr printstr ; 7486 20 8B 7A
L7489: jmp exit ; 7489 4C 9A 73
; ----------------------------------------------------------------------------
; first byte of header is $1A, just like ARC
check_arc_sig:
lda alf_header ; 748C AD 8D 71
cmp #$1A ; 748F C9 1A
beq check_alf_sig ; 7491 F0 0A
; ldx #<emsg_not_alf : ldy #>emsg_not_alf
print_emsg_not_alf:
ldx #$41 ; 7493 A2 41
ldy #$72 ; 7495 A0 72
jsr printstr ; 7497 20 8B 7A
jmp exit ; 749A 4C 9A 73
; ----------------------------------------------------------------------------
; 2nd byte of header (compression type) is $0F
check_alf_sig:
lda alf_hdr_sig ; 749D AD 8E 71
cmp #$0F ; 74A0 C9 0F
bne print_emsg_not_alf; 74A2 D0 EF
lda L7174 ; 74A4 AD 74 71
bne L74B1 ; 74A7 D0 08
jsr L7CA9 ; 74A9 20 A9 7C
lda #$01 ; 74AC A9 01
sta L7174 ; 74AE 8D 74 71
L74B1: ldx #$00 ; 74B1 A2 00
L74B3: lda output_dir,x ; 74B3 BD 50 70
cmp #$9B ; 74B6 C9 9B
beq L74C7 ; 74B8 F0 0D
inx ; 74BA E8
bpl L74B3 ; 74BB 10 F6
; ldx #<emsg_outdir_too_long : ldy #>emsg_outdir_too_long
print_emsg_outdir_too_long:
ldx #$59 ; 74BD A2 59
ldy #$72 ; 74BF A0 72
jsr printstr ; 74C1 20 8B 7A
jmp exit ; 74C4 4C 9A 73
; ----------------------------------------------------------------------------
L74C7: lda output_dir,x ; 74C7 BD 50 70
cmp #$3E ; 74CA C9 3E
beq L74DF ; 74CC F0 11
cmp #$3A ; 74CE C9 3A
beq L74DF ; 74D0 F0 0D
dex ; 74D2 CA
bpl L74C7 ; 74D3 10 F2
; ldx #<emsg_outdir_invalid : ldy #>emsg_outdir_invalid
print_emsg_outdir_invalid:
ldx #$77 ; 74D5 A2 77
ldy #$72 ; 74D7 A0 72
jsr printstr ; 74D9 20 8B 7A
jmp exit ; 74DC 4C 9A 73
; ----------------------------------------------------------------------------
L74DF: txa ; 74DF 8A
tay ; 74E0 A8
L74E1: lda output_dir,x ; 74E1 BD 50 70
sta outfile_l,x ; 74E4 9D A0 70
dex ; 74E7 CA
bpl L74E1 ; 74E8 10 F7
iny ; 74EA C8
ldx #$00 ; 74EB A2 00
L74ED: lda alf_hdr_filename,x; 74ED BD 8F 71
sta outfile_l,y ; 74F0 99 A0 70
beq L74FB ; 74F3 F0 06
inx ; 74F5 E8
iny ; 74F6 C8
bpl L74ED ; 74F7 10 F4
bmi print_emsg_not_alf; 74F9 30 98
L74FB: lda #$9B ; 74FB A9 9B
sta outfile_l,y ; 74FD 99 A0 70
lda #$00 ; 7500 A9 00
sta outfile_h,y ; 7502 99 A1 70
jsr L7EE4 ; 7505 20 E4 7E
bcc open_outfile ; 7508 90 03
jmp read_alf_header; 750A 4C 50 74
; ----------------------------------------------------------------------------
; lda #<outfile ; ldy #>outfile
open_outfile:
ldx #$30 ; 750D A2 30
lda #$A0 ; 750F A9 A0
ldy #$70 ; 7511 A0 70
jsr open_write ; 7513 20 7B 7B
bpl print_msg_uncrunching; 7516 10 0A
; ldx #<emsg_write_output : ldy #>emsg_write_output
print_emsg_write_output:
ldx #$D5 ; 7518 A2 D5
ldy #$72 ; 751A A0 72
jsr printstr ; 751C 20 8B 7A
jmp exit ; 751F 4C 9A 73
; ----------------------------------------------------------------------------
; ldx #<msg_uncrunching : ldy #>msg_uncrunching
print_msg_uncrunching:
ldx #$1B ; 7522 A2 1B
ldy #$72 ; 7524 A0 72
jsr printstr ; 7526 20 8B 7A
; ldx #<outfile ; ldy #>outfile
print_filename:
ldx #$A0 ; 7529 A2 A0
ldy #$70 ; 752B A0 70
jsr printstr ; 752D 20 8B 7A
lda #$01 ; 7530 A9 01
sta L71B4 ; 7532 8D B4 71
lda alf_hdr_compsize0; 7535 AD 9C 71
ora alf_hdr_compsize1; 7538 0D 9D 71
ora alf_hdr_compsize2; 753B 0D 9E 71
ora alf_hdr_compsize3; 753E 0D 9F 71
beq next_header ; 7541 F0 03
jsr uncrunch_file ; 7543 20 4E 75
next_header:
ldx #$30 ; 7546 A2 30
jsr close_iocb ; 7548 20 48 7B
jmp read_alf_header; 754B 4C 50 74
; ----------------------------------------------------------------------------
uncrunch_file:
lda #$00 ; 754E A9 00
sta L71AF ; 7550 8D AF 71
sta L71B0 ; 7553 8D B0 71
sta outbuf_len_l ; 7556 8D B1 71
sta outbuf_len_h ; 7559 8D B2 71
sta L71B6 ; 755C 8D B6 71
sta L71B7 ; 755F 8D B7 71
sta L718C ; 7562 8D 8C 71
sta cksum_l ; 7565 8D 7F 71
sta cksum_h ; 7568 8D 80 71
lda #$09 ; 756B A9 09
sta shift_counter ; 756D 8D AC 71
lda #$00 ; 7570 A9 00
sta L71AD ; 7572 8D AD 71
lda #$02 ; 7575 A9 02
sta L71AE ; 7577 8D AE 71
lda #$00 ; 757A A9 00
sta stackptr_l ; 757C 85 B6
lda #$60 ; 757E A9 60
sta stackptr_h ; 7580 85 B7
jsr setup_io_bufs ; 7582 20 78 79
ldx #$10 ; 7585 A2 10
lda inbuf_adr_l ; 7587 AD 85 71
sta buf_adr_l ; 758A 8D 7B 7A
lda inbuf_adr_h ; 758D AD 86 71
sta buf_adr_h ; 7590 8D 7C 7A
lda inbuf_len_l ; 7593 AD 83 71
sta buf_len_l ; 7596 8D 7D 7A
lda inbuf_len_h ; 7599 AD 84 71
sta buf_len_h ; 759C 8D 7E 7A
jsr L7A19 ; 759F 20 19 7A
sty L718C ; 75A2 8C 8C 71
jsr L79E7 ; 75A5 20 E7 79
lda buf_len_l ; 75A8 AD 7D 7A
ora buf_len_h ; 75AB 0D 7E 7A
bne L75B1 ; 75AE D0 01
rts ; 75B0 60
; ----------------------------------------------------------------------------
L75B1: jsr L76D0 ; 75B1 20 D0 76
lda acc16_h ; 75B4 A5 B3
cmp #$01 ; 75B6 C9 01
bne uncrunch_blk ; 75B8 D0 21
lda acc16_l ; 75BA A5 B2
cmp #$01 ; 75BC C9 01
bne uncrunch_blk ; 75BE D0 1B
jsr write_output ; 75C0 20 C0 79
lda alf_hdr_cksum_l; 75C3 AD A4 71
cmp cksum_l ; 75C6 CD 7F 71
bne print_emsg_checksum; 75C9 D0 08
lda alf_hdr_cksum_h; 75CB AD A5 71
cmp cksum_h ; 75CE CD 80 71
beq cksum_ok ; 75D1 F0 07
; ldx #<emsg_checksum : ldy #>emsg_checksum
print_emsg_checksum:
ldx #$20 ; 75D3 A2 20
ldy #$73 ; 75D5 A0 73
jsr printstr ; 75D7 20 8B 7A
cksum_ok:
rts ; 75DA 60
; ----------------------------------------------------------------------------
uncrunch_blk:
lda acc16_l ; 75DB A5 B2
cmp #$00 ; 75DD C9 00
bne L760B ; 75DF D0 2A
lda acc16_h ; 75E1 A5 B3
cmp #$01 ; 75E3 C9 01
bne L760B ; 75E5 D0 24
jsr init_counters ; 75E7 20 0C 78
jsr L76D0 ; 75EA 20 D0 76
lda acc16_l ; 75ED A5 B2
sta L717D ; 75EF 8D 7D 71
sta L7179 ; 75F2 8D 79 71
lda acc16_h ; 75F5 A5 B3
sta L717E ; 75F7 8D 7E 71
sta L717A ; 75FA 8D 7A 71
lda acc16_l ; 75FD A5 B2
sta L7177 ; 75FF 8D 77 71
sta L7178 ; 7602 8D 78 71
jsr store_outbyte ; 7605 20 26 78
jmp L75B1 ; 7608 4C B1 75
; ----------------------------------------------------------------------------
L760B: lda acc16_l ; 760B A5 B2
sta L717D ; 760D 8D 7D 71
sta L7175 ; 7610 8D 75 71
lda acc16_h ; 7613 A5 B3
sta L717E ; 7615 8D 7E 71
sta L7176 ; 7618 8D 76 71
lda acc16_h ; 761B A5 B3
cmp L717C ; 761D CD 7C 71
bcc L7641 ; 7620 90 1F
lda acc16_l ; 7622 A5 B2
cmp L717B ; 7624 CD 7B 71
bcc L7641 ; 7627 90 18
lda L7179 ; 7629 AD 79 71
sta acc16_l ; 762C 85 B2
sta L717D ; 762E 8D 7D 71
lda L717A ; 7631 AD 7A 71
sta acc16_h ; 7634 85 B3
sta L717E ; 7636 8D 7E 71
lda L7178 ; 7639 AD 78 71
sta acc16_l ; 763C 85 B2
jsr push_acc16 ; 763E 20 F6 78
L7641: lda L717E ; 7641 AD 7E 71
beq L7670 ; 7644 F0 2A
lda L717D ; 7646 AD 7D 71
sta zp_b4 ; 7649 85 B4
lda L717E ; 764B AD 7E 71
sta zp_b5 ; 764E 85 B5
jsr L7899 ; 7650 20 99 78
ldy #$02 ; 7653 A0 02
lda (zp_b0),y ; 7655 B1 B0
sta acc16_l ; 7657 85 B2
jsr push_acc16 ; 7659 20 F6 78
ldy #$00 ; 765C A0 00
lda (zp_b0),y ; 765E B1 B0
sta acc16_l ; 7660 85 B2
sta L717D ; 7662 8D 7D 71
iny ; 7665 C8
lda (zp_b0),y ; 7666 B1 B0
sta acc16_h ; 7668 85 B3
sta L717E ; 766A 8D 7E 71
jmp L7641 ; 766D 4C 41 76
; ----------------------------------------------------------------------------
L7670: lda L717D ; 7670 AD 7D 71
sta acc16_l ; 7673 85 B2
sta L7178 ; 7675 8D 78 71
sta L7177 ; 7678 8D 77 71
lda L717E ; 767B AD 7E 71
sta acc16_h ; 767E 85 B3
jsr push_acc16 ; 7680 20 F6 78
L7683: lda L71AF ; 7683 AD AF 71
ora L71B0 ; 7686 0D B0 71
beq L7694 ; 7689 F0 09
jsr pop_acc16 ; 768B 20 44 79
jsr store_outbyte ; 768E 20 26 78
jmp L7683 ; 7691 4C 83 76
; ----------------------------------------------------------------------------
L7694: jsr L78C2 ; 7694 20 C2 78
lda L7175 ; 7697 AD 75 71
sta acc16_l ; 769A 85 B2
sta L7179 ; 769C 8D 79 71
lda L7176 ; 769F AD 76 71
sta acc16_h ; 76A2 85 B3
sta L717A ; 76A4 8D 7A 71
lda L717B ; 76A7 AD 7B 71
sta zp_b4 ; 76AA 85 B4
lda L717C ; 76AC AD 7C 71
sta zp_b5 ; 76AF 85 B5
cmp L71AE ; 76B1 CD AE 71
bcc L76CD ; 76B4 90 17
lda zp_b4 ; 76B6 A5 B4
cmp L71AD ; 76B8 CD AD 71
bcc L76CD ; 76BB 90 10
lda shift_counter ; 76BD AD AC 71
cmp #$0C ; 76C0 C9 0C
beq L76CD ; 76C2 F0 09
inc shift_counter ; 76C4 EE AC 71
asl L71AD ; 76C7 0E AD 71
rol L71AE ; 76CA 2E AE 71
L76CD: jmp L75B1 ; 76CD 4C B1 75
; ----------------------------------------------------------------------------
L76D0: lda L71B6 ; 76D0 AD B6 71
sta zp_b8 ; 76D3 85 B8
lda L71B7 ; 76D5 AD B7 71
sta zp_b9 ; 76D8 85 B9
ldx #$02 ; 76DA A2 02
L76DC: lsr zp_b9 ; 76DC 46 B9
ror zp_b8 ; 76DE 66 B8
dex ; 76E0 CA
bpl L76DC ; 76E1 10 F9
lda zp_b8 ; 76E3 A5 B8
sta L71AA ; 76E5 8D AA 71
lda zp_b9 ; 76E8 A5 B9
sta L71AB ; 76EA 8D AB 71
lda inbuf_len_l ; 76ED AD 83 71
sec ; 76F0 38
sbc zp_b8 ; 76F1 E5 B8
sta zp_bc ; 76F3 85 BC
lda inbuf_len_h ; 76F5 AD 84 71
sbc zp_b9 ; 76F8 E5 B9
sta zp_bd ; 76FA 85 BD
lda zp_bd ; 76FC A5 BD
bne L770F ; 76FE D0 0F
lda zp_bc ; 7700 A5 BC
cmp #$03 ; 7702 C9 03
bcs L770F ; 7704 B0 09
ldx L718C ; 7706 AE 8C 71
bpl L771C ; 7709 10 11
cmp #$02 ; 770B C9 02
bcc L7712 ; 770D 90 03
L770F: jmp L779B ; 770F 4C 9B 77
; ----------------------------------------------------------------------------
L7712: ldx #$0A ; 7712 A2 0A
ldy #$0A ; 7714 A0 0A
jsr printstr ; 7716 20 8B 7A
jmp cleanup_and_exit; 7719 4C 7F 78
; ----------------------------------------------------------------------------
L771C: tay ; 771C A8
dey ; 771D 88
ldx inbuf_adr_l ; 771E AE 85 71
stx zp_be ; 7721 86 BE
ldx inbuf_adr_h ; 7723 AE 86 71
stx zp_bf ; 7726 86 BF
lda inbuf_adr_l ; 7728 AD 85 71
clc ; 772B 18
adc zp_b8 ; 772C 65 B8
sta zp_b8 ; 772E 85 B8
lda inbuf_adr_h ; 7730 AD 86 71
adc zp_b9 ; 7733 65 B9
sta zp_b9 ; 7735 85 B9
L7737: lda (zp_b8),y ; 7737 B1 B8
sta (zp_be),y ; 7739 91 BE
dey ; 773B 88
bpl L7737 ; 773C 10 F9
lda inbuf_len_l ; 773E AD 83 71
sec ; 7741 38
sbc zp_bc ; 7742 E5 BC
sta buf_len_l ; 7744 8D 7D 7A
lda inbuf_len_h ; 7747 AD 84 71
sbc #$00 ; 774A E9 00
sta buf_len_h ; 774C 8D 7E 7A
lda inbuf_adr_l ; 774F AD 85 71
clc ; 7752 18
adc zp_bc ; 7753 65 BC
sta buf_adr_l ; 7755 8D 7B 7A
lda inbuf_adr_h ; 7758 AD 86 71
adc #$00 ; 775B 69 00
sta buf_adr_h ; 775D 8D 7C 7A
ldx #$10 ; 7760 A2 10
jsr L7A19 ; 7762 20 19 7A
sty L718C ; 7765 8C 8C 71
bpl L7771 ; 7768 10 07
cpy #$88 ; 776A C0 88
beq L7771 ; 776C F0 03
jmp cleanup_and_exit; 776E 4C 7F 78
; ----------------------------------------------------------------------------
L7771: jsr L79E7 ; 7771 20 E7 79
lda L71AA ; 7774 AD AA 71
sta zp_b8 ; 7777 85 B8
lda L71AB ; 7779 AD AB 71
sta zp_b9 ; 777C 85 B9
ldx #$02 ; 777E A2 02
L7780: asl zp_b8 ; 7780 06 B8
rol zp_b9 ; 7782 26 B9
dex ; 7784 CA
bpl L7780 ; 7785 10 F9
lda L71B6 ; 7787 AD B6 71
sec ; 778A 38
sbc zp_b8 ; 778B E5 B8
sta L71B6 ; 778D 8D B6 71
lda L71B7 ; 7790 AD B7 71
sbc zp_b9 ; 7793 E5 B9
sta L71B7 ; 7795 8D B7 71
jmp L76D0 ; 7798 4C D0 76
; ----------------------------------------------------------------------------
L779B: lda zp_b8 ; 779B A5 B8
sta zp_bc ; 779D 85 BC
clc ; 779F 18
adc inbuf_adr_l ; 77A0 6D 85 71
sta zp_b8 ; 77A3 85 B8
lda zp_b9 ; 77A5 A5 B9
sta zp_bd ; 77A7 85 BD
adc inbuf_adr_h ; 77A9 6D 86 71
sta zp_b9 ; 77AC 85 B9
ldy #$00 ; 77AE A0 00
lda L71B6 ; 77B0 AD B6 71
and #$07 ; 77B3 29 07
bne L77E1 ; 77B5 D0 2A
lda (zp_b8),y ; 77B7 B1 B8
sta acc16_h ; 77B9 85 B3
iny ; 77BB C8
lda (zp_b8),y ; 77BC B1 B8
sta acc16_l ; 77BE 85 B2
L77C0: lda #$0F ; 77C0 A9 0F
sec ; 77C2 38
sbc shift_counter ; 77C3 ED AC 71
tax ; 77C6 AA
L77C7: lsr acc16_h ; 77C7 46 B3
ror acc16_l ; 77C9 66 B2
dex ; 77CB CA
bpl L77C7 ; 77CC 10 F9
lda shift_counter ; 77CE AD AC 71
clc ; 77D1 18
adc L71B6 ; 77D2 6D B6 71
sta L71B6 ; 77D5 8D B6 71
lda #$00 ; 77D8 A9 00
adc L71B7 ; 77DA 6D B7 71
sta L71B7 ; 77DD 8D B7 71
rts ; 77E0 60
; ----------------------------------------------------------------------------
L77E1: ldx #$02 ; 77E1 A2 02
L77E3: lda (zp_b8),y ; 77E3 B1 B8
sta L7189,x ; 77E5 9D 89 71
iny ; 77E8 C8
dex ; 77E9 CA
bpl L77E3 ; 77EA 10 F7
lda L71B6 ; 77EC AD B6 71
and #$07 ; 77EF 29 07
tax ; 77F1 AA
dex ; 77F2 CA
L77F3: asl L7189 ; 77F3 0E 89 71
rol L718A ; 77F6 2E 8A 71
rol L718B ; 77F9 2E 8B 71
dex ; 77FC CA
bpl L77F3 ; 77FD 10 F4
lda L718A ; 77FF AD 8A 71
sta acc16_l ; 7802 85 B2
lda L718B ; 7804 AD 8B 71
sta acc16_h ; 7807 85 B3
jmp L77C0 ; 7809 4C C0 77
; ----------------------------------------------------------------------------
init_counters:
lda #$09 ; 780C A9 09
sta shift_counter ; 780E 8D AC 71
lda #$00 ; 7811 A9 00
sta L71AD ; 7813 8D AD 71
lda #$02 ; 7816 A9 02
sta L71AE ; 7818 8D AE 71
lda #$02 ; 781B A9 02
sta L717B ; 781D 8D 7B 71
lda #$01 ; 7820 A9 01
sta L717C ; 7822 8D 7C 71
rts ; 7825 60
; ----------------------------------------------------------------------------
; save decrunched byte in outbuf, update checksum, write outbuf if full
store_outbyte:
ldy #$00 ; 7826 A0 00
lda acc16_l ; 7828 A5 B2
sta (outbuf_ptr_l),y; 782A 91 BA
clc ; 782C 18
adc cksum_l ; 782D 6D 7F 71
sta cksum_l ; 7830 8D 7F 71
lda #$00 ; 7833 A9 00
adc cksum_h ; 7835 6D 80 71
sta cksum_h ; 7838 8D 80 71
inc outbuf_ptr_l ; 783B E6 BA
bne out_ptr_hi_ok ; 783D D0 02
inc outbuf_ptr_h ; 783F E6 BB
out_ptr_hi_ok:
inc outbuf_len_l ; 7841 EE B1 71
bne out_len_hi_ok ; 7844 D0 03
inc outbuf_len_h ; 7846 EE B2 71
out_len_hi_ok:
lda outbuf_len_h ; 7849 AD B2 71
cmp inbuf_len_h ; 784C CD 84 71
bcc outbuf_not_full; 784F 90 47
lda outbuf_len_l ; 7851 AD B1 71
cmp inbuf_len_l ; 7854 CD 83 71
bcc outbuf_not_full; 7857 90 3F
lda outbuf_adr_l ; 7859 AD 87 71
sta buf_adr_l ; 785C 8D 7B 7A
lda outbuf_adr_h ; 785F AD 88 71
sta buf_adr_h ; 7862 8D 7C 7A
lda outbuf_len_l ; 7865 AD B1 71
sta buf_len_l ; 7868 8D 7D 7A
lda outbuf_len_h ; 786B AD B2 71
sta buf_len_h ; 786E 8D 7E 7A
ldx #$30 ; 7871 A2 30
jsr writeblock ; 7873 20 D3 7A
bpl init_outbuf ; 7876 10 0E
; ldx #<emsg_checksum : ldy #>emsg_checksum
print_emsg_write_output_2:
ldx #$D5 ; 7878 A2 D5
ldy #$72 ; 787A A0 72
jsr printstr ; 787C 20 8B 7A
cleanup_and_exit:
pla ; 787F 68
pla ; 7880 68
pla ; 7881 68
pla ; 7882 68
jmp exit ; 7883 4C 9A 73
; ----------------------------------------------------------------------------
init_outbuf:
lda outbuf_adr_l ; 7886 AD 87 71
sta outbuf_ptr_l ; 7889 85 BA
lda outbuf_adr_h ; 788B AD 88 71
sta outbuf_ptr_h ; 788E 85 BB
lda #$00 ; 7890 A9 00
sta outbuf_len_l ; 7892 8D B1 71
sta outbuf_len_h ; 7895 8D B2 71
outbuf_not_full:
rts ; 7898 60
; ----------------------------------------------------------------------------
L7899: lda zp_b4 ; 7899 A5 B4
sta zp_b0 ; 789B 85 B0
lda zp_b5 ; 789D A5 B5
sta zp_b1 ; 789F 85 B1
asl zp_b0 ; 78A1 06 B0
rol zp_b1 ; 78A3 26 B1
lda zp_b0 ; 78A5 A5 B0
clc ; 78A7 18
adc zp_b4 ; 78A8 65 B4
sta zp_b0 ; 78AA 85 B0
lda zp_b1 ; 78AC A5 B1
adc zp_b5 ; 78AE 65 B5
sta zp_b1 ; 78B0 85 B1
lda zp_b0 ; 78B2 A5 B0
clc ; 78B4 18
adc L7181 ; 78B5 6D 81 71
sta zp_b0 ; 78B8 85 B0
lda zp_b1 ; 78BA A5 B1
adc L7182 ; 78BC 6D 82 71
sta zp_b1 ; 78BF 85 B1
rts ; 78C1 60
; ----------------------------------------------------------------------------
L78C2: lda L717B ; 78C2 AD 7B 71
sta zp_b4 ; 78C5 85 B4
lda L717C ; 78C7 AD 7C 71
sta zp_b5 ; 78CA 85 B5
jsr L7899 ; 78CC 20 99 78
lda L7177 ; 78CF AD 77 71
sta acc16_l ; 78D2 85 B2
ldy #$02 ; 78D4 A0 02
sta (zp_b0),y ; 78D6 91 B0
lda L7179 ; 78D8 AD 79 71
sta acc16_l ; 78DB 85 B2
lda L717A ; 78DD AD 7A 71
sta acc16_h ; 78E0 85 B3
ldy #$00 ; 78E2 A0 00
lda acc16_l ; 78E4 A5 B2
sta (zp_b0),y ; 78E6 91 B0
iny ; 78E8 C8
lda acc16_h ; 78E9 A5 B3
sta (zp_b0),y ; 78EB 91 B0
inc L717B ; 78ED EE 7B 71
bne L78F5 ; 78F0 D0 03
inc L717C ; 78F2 EE 7C 71
L78F5: rts ; 78F5 60
; ----------------------------------------------------------------------------
; push 2 byte 'register' to software stack
push_acc16:
ldy #$00 ; 78F6 A0 00
lda acc16_l ; 78F8 A5 B2
sta (stackptr_l),y ; 78FA 91 B6
iny ; 78FC C8
lda acc16_h ; 78FD A5 B3
sta (stackptr_l),y ; 78FF 91 B6
lda stackptr_l ; 7901 A5 B6
clc ; 7903 18
adc #$02 ; 7904 69 02
sta stackptr_l ; 7906 85 B6
bcc L790C ; 7908 90 02
inc stackptr_h ; 790A E6 B7
L790C: lda stackptr_h ; 790C A5 B7
cmp #$70 ; 790E C9 70
bcc L791C ; 7910 90 0A
; ldx #<emsg_stk_overrun : ldy #>emsg_stk_overrun
print_emsg_stk_overrun:
ldx #$25 ; 7912 A2 25
ldy #$79 ; 7914 A0 79
jsr printstr ; 7916 20 8B 7A
jmp cleanup_and_exit; 7919 4C 7F 78
; ----------------------------------------------------------------------------
L791C: inc L71AF ; 791C EE AF 71
bne L7924 ; 791F D0 03
inc L71B0 ; 7921 EE B0 71
L7924: rts ; 7924 60
; ----------------------------------------------------------------------------
emsg_stk_overrun:
.byte "STACK OVERRUN"; 7925 53 54 41 43 4B 20 4F 56
; 792D 45 52 52 55 4E
.byte $9B,$00 ; 7932 9B 00
emsg_stk_underrun:
.byte "STACK UNDERRUN"; 7934 53 54 41 43 4B 20 55 4E
; 793C 44 45 52 52 55 4E
.byte $9B,$00 ; 7942 9B 00
; ----------------------------------------------------------------------------
; pop 2 byte 'register' from software stack
pop_acc16:
lda stackptr_l ; 7944 A5 B6
sec ; 7946 38
sbc #$02 ; 7947 E9 02
sta stackptr_l ; 7949 85 B6
lda stackptr_h ; 794B A5 B7
sbc #$00 ; 794D E9 00
sta stackptr_h ; 794F 85 B7
ldy #$00 ; 7951 A0 00
lda (stackptr_l),y ; 7953 B1 B6
sta acc16_l ; 7955 85 B2
iny ; 7957 C8
lda (stackptr_l),y ; 7958 B1 B6
sta acc16_h ; 795A 85 B3
lda stackptr_h ; 795C A5 B7
cmp #$60 ; 795E C9 60
bcs L796C ; 7960 B0 0A
; ldx #<emsg_stk_underrun : ldy #>emsg_stk_underrun
print_emsg_stk_underrun:
ldx #$34 ; 7962 A2 34
ldy #$79 ; 7964 A0 79
jsr printstr ; 7966 20 8B 7A
jmp cleanup_and_exit; 7969 4C 7F 78
; ----------------------------------------------------------------------------
L796C: lda L71AF ; 796C AD AF 71
bne L7974 ; 796F D0 03
dec L71B0 ; 7971 CE B0 71
L7974: dec L71AF ; 7974 CE AF 71
rts ; 7977 60
; ----------------------------------------------------------------------------
setup_io_bufs:
lda MEMTOP_lo ; 7978 AD E5 02
sec ; 797B 38
sbc #$DC ; 797C E9 DC
sta inbuf_len_l ; 797E 8D 83 71
lda MEMTOP_hi ; 7981 AD E6 02
sbc #$7F ; 7984 E9 7F
sta inbuf_len_h ; 7986 8D 84 71
lsr inbuf_len_h ; 7989 4E 84 71
ror inbuf_len_l ; 798C 6E 83 71
lda inbuf_len_h ; 798F AD 84 71
cmp #$1F ; 7992 C9 1F
bcc L79A0 ; 7994 90 0A
lda #$00 ; 7996 A9 00
sta inbuf_len_l ; 7998 8D 83 71
lda #$1F ; 799B A9 1F
sta inbuf_len_h ; 799D 8D 84 71
L79A0: lda #$DC ; 79A0 A9 DC
sta inbuf_adr_l ; 79A2 8D 85 71
lda #$7F ; 79A5 A9 7F
sta inbuf_adr_h ; 79A7 8D 86 71
lda #$DC ; 79AA A9 DC
clc ; 79AC 18
adc inbuf_len_l ; 79AD 6D 83 71
sta outbuf_adr_l ; 79B0 8D 87 71
sta outbuf_ptr_l ; 79B3 85 BA
lda #$7F ; 79B5 A9 7F
adc inbuf_len_h ; 79B7 6D 84 71
sta outbuf_adr_h ; 79BA 8D 88 71
sta outbuf_ptr_h ; 79BD 85 BB
rts ; 79BF 60
; ----------------------------------------------------------------------------
write_output:
lda outbuf_len_l ; 79C0 AD B1 71
ora outbuf_len_h ; 79C3 0D B2 71
bne have_output ; 79C6 D0 01
rts ; 79C8 60
; ----------------------------------------------------------------------------
have_output:
lda outbuf_adr_l ; 79C9 AD 87 71
sta buf_adr_l ; 79CC 8D 7B 7A
lda outbuf_adr_h ; 79CF AD 88 71
sta buf_adr_h ; 79D2 8D 7C 7A
lda outbuf_len_l ; 79D5 AD B1 71
sta buf_len_l ; 79D8 8D 7D 7A
lda outbuf_len_h ; 79DB AD B2 71
sta buf_len_h ; 79DE 8D 7E 7A
ldx #$30 ; 79E1 A2 30
jsr writeblock ; 79E3 20 D3 7A
rts ; 79E6 60
; ----------------------------------------------------------------------------
L79E7: lda buf_adr_l ; 79E7 AD 7B 7A
clc ; 79EA 18
adc buf_len_l ; 79EB 6D 7D 7A
sta zp_be ; 79EE 85 BE
lda buf_adr_h ; 79F0 AD 7C 7A
adc buf_len_h ; 79F3 6D 7E 7A
sta zp_bf ; 79F6 85 BF
ldx #$02 ; 79F8 A2 02
bne L7A0A ; 79FA D0 0E
L79FC: ldy #$00 ; 79FC A0 00
tya ; 79FE 98
sta (zp_be),y ; 79FF 91 BE
inc zp_be ; 7A01 E6 BE
bne L7A07 ; 7A03 D0 02
inc zp_bf ; 7A05 E6 BF
L7A07: dex ; 7A07 CA
bmi L7A18 ; 7A08 30 0E
L7A0A: lda zp_bf ; 7A0A A5 BF
cmp outbuf_adr_h ; 7A0C CD 88 71
bcc L79FC ; 7A0F 90 EB
lda zp_be ; 7A11 A5 BE
cmp outbuf_adr_l ; 7A13 CD 87 71
bcc L79FC ; 7A16 90 E4
L7A18: rts ; 7A18 60
; ----------------------------------------------------------------------------
L7A19: lda alf_hdr_compsize2; 7A19 AD 9E 71
ora alf_hdr_compsize3; 7A1C 0D 9F 71
beq L7A28 ; 7A1F F0 07
L7A21: jsr readblock ; 7A21 20 CF 7A
jsr L7A5D ; 7A24 20 5D 7A
rts ; 7A27 60
; ----------------------------------------------------------------------------
L7A28: lda alf_hdr_compsize1; 7A28 AD 9D 71
cmp buf_len_h ; 7A2B CD 7E 7A
bcc L7A40 ; 7A2E 90 10
beq L7A34 ; 7A30 F0 02
bcs L7A21 ; 7A32 B0 ED
L7A34: lda alf_hdr_compsize0; 7A34 AD 9C 71
cmp buf_len_l ; 7A37 CD 7D 7A
bcc L7A40 ; 7A3A 90 04
beq L7A40 ; 7A3C F0 02
bcs L7A21 ; 7A3E B0 E1
L7A40: lda alf_hdr_compsize0; 7A40 AD 9C 71
sta buf_len_l ; 7A43 8D 7D 7A
lda alf_hdr_compsize1; 7A46 AD 9D 71
sta buf_len_h ; 7A49 8D 7E 7A
lda buf_len_l ; 7A4C AD 7D 7A
ora buf_len_h ; 7A4F 0D 7E 7A
beq L7A57 ; 7A52 F0 03
jsr readblock ; 7A54 20 CF 7A
L7A57: ldy #$88 ; 7A57 A0 88
jsr L7A5D ; 7A59 20 5D 7A
rts ; 7A5C 60
; ----------------------------------------------------------------------------
L7A5D: lda alf_hdr_compsize0; 7A5D AD 9C 71
sec ; 7A60 38
sbc buf_len_l ; 7A61 ED 7D 7A
sta alf_hdr_compsize0; 7A64 8D 9C 71
lda alf_hdr_compsize1; 7A67 AD 9D 71
sbc buf_len_h ; 7A6A ED 7E 7A
sta alf_hdr_compsize1; 7A6D 8D 9D 71
lda alf_hdr_compsize2; 7A70 AD 9E 71
sbc #$00 ; 7A73 E9 00
sta alf_hdr_compsize2; 7A75 8D 9E 71
rts ; 7A78 60
; ----------------------------------------------------------------------------
linbuf_idx:
.byte $00,$00 ; 7A79 00 00
buf_adr_l:
.byte $00 ; 7A7B 00
buf_adr_h:
.byte $00 ; 7A7C 00
buf_len_l:
.byte $00 ; 7A7D 00
buf_len_h:
.byte $00 ; 7A7E 00
open_fileadr_l:
.byte $00 ; 7A7F 00
open_fileadr_h:
.byte $00 ; 7A80 00
save_x: .byte $00 ; 7A81 00
save_y: .byte $00 ; 7A82 00
save_a: .byte $00 ; 7A83 00
; ----------------------------------------------------------------------------
kdev: .byte "K:" ; 7A84 4B 3A
.byte $9B ; 7A86 9B
; unused?
p3dev: .byte "P3:" ; 7A87 50 33 3A
.byte $9B ; 7A8A 9B
; ----------------------------------------------------------------------------
; X = LSB, Y = MSB of string. SELF MODIFYING!
printstr:
stx printstr_op_lo ; 7A8B 8E 94 7A
sty printstr_op_hi ; 7A8E 8C 95 7A
ldy #$00 ; 7A91 A0 00
; $B9 = LDA abs,y
printstr_loop:
.byte $B9 ; 7A93 B9
; gets modified
printstr_op_lo:
.byte $93 ; 7A94 93
; gets modified
printstr_op_hi:
.byte $7A ; 7A95 7A
beq printstr_done ; 7A96 F0 06
jsr putchar ; 7A98 20 9F 7A
iny ; 7A9B C8
bne printstr_loop ; 7A9C D0 F5
printstr_done:
rts ; 7A9E 60
; ----------------------------------------------------------------------------
; print character in A, saves A/X/Y regs
putchar:stx save_x ; 7A9F 8E 81 7A
sty save_y ; 7AA2 8C 82 7A
sta save_a ; 7AA5 8D 83 7A
ldx #$00 ; 7AA8 A2 00
lda #$0B ; 7AAA A9 0B
sta ICCOM,x ; 7AAC 9D 42 03
lda #$00 ; 7AAF A9 00
sta ICBLL,x ; 7AB1 9D 48 03
sta ICBLH,x ; 7AB4 9D 49 03
lda save_a ; 7AB7 AD 83 7A
jsr CIOV ; 7ABA 20 56 E4
lda save_a ; 7ABD AD 83 7A
ldx save_x ; 7AC0 AE 81 7A
ldy save_y ; 7AC3 AC 82 7A
rts ; 7AC6 60
; ----------------------------------------------------------------------------
lda #$05 ; 7AC7 A9 05
bne do_block_io ; 7AC9 D0 0A
lda #$09 ; 7ACB A9 09
bne do_block_io ; 7ACD D0 06
readblock:
lda #$07 ; 7ACF A9 07
bne do_block_io ; 7AD1 D0 02
writeblock:
lda #$0B ; 7AD3 A9 0B
do_block_io:
sta ICCOM,x ; 7AD5 9D 42 03
lda buf_adr_l ; 7AD8 AD 7B 7A
sta ICBAL,x ; 7ADB 9D 44 03
lda buf_adr_h ; 7ADE AD 7C 7A
sta ICBAH,x ; 7AE1 9D 45 03
lda buf_len_l ; 7AE4 AD 7D 7A
sta ICBLL,x ; 7AE7 9D 48 03
lda buf_len_h ; 7AEA AD 7E 7A
sta ICBLH,x ; 7AED 9D 49 03
jsr CIOV ; 7AF0 20 56 E4
php ; 7AF3 08
lda ICBLL,x ; 7AF4 BD 48 03
sta buf_len_l ; 7AF7 8D 7D 7A
lda ICBLH,x ; 7AFA BD 49 03
sta buf_len_h ; 7AFD 8D 7E 7A
plp ; 7B00 28
rts ; 7B01 60
; ----------------------------------------------------------------------------
ldx #$20 ; 7B02 A2 20
bne getcx ; 7B04 D0 02
; read 1 byte from E: (IOCB0)
getc0: ldx #$00 ; 7B06 A2 00
getcx: lda #$07 ; 7B08 A9 07
sta ICCOM,x ; 7B0A 9D 42 03
lda #$00 ; 7B0D A9 00
sta ICBLL,x ; 7B0F 9D 48 03
sta ICBLH,x ; 7B12 9D 49 03
jsr CIOV ; 7B15 20 56 E4
rts ; 7B18 60
; ----------------------------------------------------------------------------
; read a line of input from E:
getline:lda #$00 ; 7B19 A9 00
sta linbuf_idx ; 7B1B 8D 79 7A
nextchar:
jsr getc0 ; 7B1E 20 06 7B
cmp #$7E ; 7B21 C9 7E
beq do_backspace ; 7B23 F0 1B
cmp #$9B ; 7B25 C9 9B
beq getline_done ; 7B27 F0 10
ldy linbuf_idx ; 7B29 AC 79 7A
cpy #$4E ; 7B2C C0 4E
bcs nextchar ; 7B2E B0 EE
sta linbuf,y ; 7B30 99 20 71
inc linbuf_idx ; 7B33 EE 79 7A
jmp nextchar ; 7B36 4C 1E 7B
; ----------------------------------------------------------------------------
getline_done:
ldy linbuf_idx ; 7B39 AC 79 7A
sta linbuf,y ; 7B3C 99 20 71
rts ; 7B3F 60
; ----------------------------------------------------------------------------
do_backspace:
dec linbuf_idx ; 7B40 CE 79 7A
lda #$7E ; 7B43 A9 7E
jmp nextchar ; 7B45 4C 1E 7B
; ----------------------------------------------------------------------------
close_iocb:
lda #$0C ; 7B48 A9 0C
sta ICCOM,x ; 7B4A 9D 42 03
jsr CIOV ; 7B4D 20 56 E4
rts ; 7B50 60
; ----------------------------------------------------------------------------
toupper:cmp #$7B ; 7B51 C9 7B
bcc le_z ; 7B53 90 01
rts ; 7B55 60
; ----------------------------------------------------------------------------
le_z: cmp #$61 ; 7B56 C9 61
bcs ge_a ; 7B58 B0 01
rts ; 7B5A 60
; ----------------------------------------------------------------------------
ge_a: sbc #$20 ; 7B5B E9 20
rts ; 7B5D 60
; ----------------------------------------------------------------------------
ucase_linbuf:
ldy linbuf_idx ; 7B5E AC 79 7A
beq ucase_linbuf_done; 7B61 F0 12
dey ; 7B63 88
tya ; 7B64 98
cmp #$52 ; 7B65 C9 52
bcs ucase_linbuf_done; 7B67 B0 0C
ucase_linbuf_loop:
lda linbuf,y ; 7B69 B9 20 71
jsr toupper ; 7B6C 20 51 7B
sta linbuf,y ; 7B6F 99 20 71
dey ; 7B72 88
bpl ucase_linbuf_loop; 7B73 10 F4
ucase_linbuf_done:
rts ; 7B75 60
; ----------------------------------------------------------------------------
; X = IOCB<<4, A=<buf, Y=>buf
open_read:
pha ; 7B76 48
lda #$04 ; 7B77 A9 04
bne finish_open ; 7B79 D0 12
open_write:
pha ; 7B7B 48
lda #$08 ; 7B7C A9 08
bne finish_open ; 7B7E D0 0D
; not used?
open_update:
pha ; 7B80 48
lda #$0C ; 7B81 A9 0C
bne finish_open ; 7B83 D0 08
; not used?
open_append:
pha ; 7B85 48
lda #$09 ; 7B86 A9 09
bne finish_open ; 7B88 D0 03
open_dir:
pha ; 7B8A 48
lda #$06 ; 7B8B A9 06
; #$03 in A = CIO OPEN command
finish_open:
sta open_fileadr_l ; 7B8D 8D 7F 7A
sty open_fileadr_h ; 7B90 8C 80 7A
jsr close_iocb ; 7B93 20 48 7B
lda #$03 ; 7B96 A9 03
sta ICCOM,x ; 7B98 9D 42 03
lda open_fileadr_l ; 7B9B AD 7F 7A
sta ICAX1,x ; 7B9E 9D 4A 03
lda open_fileadr_h ; 7BA1 AD 80 7A
sta ICBAH,x ; 7BA4 9D 45 03
pla ; 7BA7 68
sta ICBAL,x ; 7BA8 9D 44 03
lda #$00 ; 7BAB A9 00
sta ICAX2,x ; 7BAD 9D 4B 03
jsr CIOV ; 7BB0 20 56 E4
rts ; 7BB3 60
; ----------------------------------------------------------------------------
open_kdev:
ldx #$10 ; 7BB4 A2 10
jsr close_iocb ; 7BB6 20 48 7B
ldx #$20 ; 7BB9 A2 20
; lda #<kdev ; ldy #>kdev
lday_kdev:
lda #$84 ; 7BBB A9 84
ldy #$7A ; 7BBD A0 7A
jsr open_read ; 7BBF 20 76 7B
rts ; 7BC2 60
; ----------------------------------------------------------------------------
close_kdev:
ldx #$10 ; 7BC3 A2 10
jsr close_iocb ; 7BC5 20 48 7B
ldx #$20 ; 7BC8 A2 20
jsr close_iocb ; 7BCA 20 48 7B
rts ; 7BCD 60
; ----------------------------------------------------------------------------
; spartados only; returns with C clear if there's an arg, or set if not
get_cli_arg:
lda DOSVEC_lo ; 7BCE A5 0A
clc ; 7BD0 18
adc #$3F ; 7BD1 69 3F
sta zp_be ; 7BD3 85 BE
lda DOSVEC_hi ; 7BD5 A5 0B
adc #$00 ; 7BD7 69 00
sta zp_bf ; 7BD9 85 BF
lda BOOTRG ; 7BDB AD 00 07
cmp #$53 ; 7BDE C9 53
bne L7BF9 ; 7BE0 D0 17
lda L7CA8 ; 7BE2 AD A8 7C
beq L7BF9 ; 7BE5 F0 12
ldy L71B5 ; 7BE7 AC B5 71
L7BEA: lda (zp_be),y ; 7BEA B1 BE
cmp #$9B ; 7BEC C9 9B
beq L7BF9 ; 7BEE F0 09
cmp #$20 ; 7BF0 C9 20
beq L7BFB ; 7BF2 F0 07
iny ; 7BF4 C8
cpy #$40 ; 7BF5 C0 40
bcc L7BEA ; 7BF7 90 F1
L7BF9: sec ; 7BF9 38
rts ; 7BFA 60
; ----------------------------------------------------------------------------
L7BFB: lda (zp_be),y ; 7BFB B1 BE
cmp #$9B ; 7BFD C9 9B
beq L7BF9 ; 7BFF F0 F8
cmp #$20 ; 7C01 C9 20
bne L7C0C ; 7C03 D0 07
iny ; 7C05 C8
cpy #$40 ; 7C06 C0 40
bcc L7BFB ; 7C08 90 F1
bcs L7BF9 ; 7C0A B0 ED
L7C0C: sty L71B5 ; 7C0C 8C B5 71
clc ; 7C0F 18
rts ; 7C10 60
; ----------------------------------------------------------------------------
; copy sparta cli arg to linbuf, append EOL ($9b)
copy_cli_arg:
ldx #$00 ; 7C11 A2 00
ldy L71B5 ; 7C13 AC B5 71
cca_loop:
lda (zp_be),y ; 7C16 B1 BE
sta linbuf,x ; 7C18 9D 20 71
cmp #$9B ; 7C1B C9 9B
beq cca_append_eol ; 7C1D F0 0A
cmp #$20 ; 7C1F C9 20
beq cca_append_eol ; 7C21 F0 06
inx ; 7C23 E8
iny ; 7C24 C8
cpy #$40 ; 7C25 C0 40
bcc cca_loop ; 7C27 90 ED
cca_append_eol:
lda #$9B ; 7C29 A9 9B
sta linbuf,x ; 7C2B 9D 20 71
stx linbuf_idx ; 7C2E 8E 79 7A
rts ; 7C31 60
; ----------------------------------------------------------------------------
emsg_read_main_dir:
.byte "Error reading main directory"; 7C32 45 72 72 6F 72 20 72 65
; 7C3A 61 64 69 6E 67 20 6D 61
; 7C42 69 6E 20 64 69 72 65 63
; 7C4A 74 6F 72 79
.byte $9B,$00 ; 7C4E 9B 00
emsg_credir_failed:
.byte "CREDIR failed for the above pat"; 7C50 43 52 45 44 49 52 20 66
; 7C58 61 69 6C 65 64 20 66 6F
; 7C60 72 20 74 68 65 20 61 62
; 7C68 6F 76 65 20 70 61 74
.byte "h" ; 7C6F 68
.byte $9B,$00 ; 7C70 9B 00
emsg_outpath_build:
.byte "Output path cannot be built"; 7C72 4F 75 74 70 75 74 20 70
; 7C7A 61 74 68 20 63 61 6E 6E
; 7C82 6F 74 20 62 65 20 62 75
; 7C8A 69 6C 74
.byte $9B,$00 ; 7C8D 9B 00
msg_credir_issued:
.byte "CREDIR issued for:"; 7C8F 43 52 45 44 49 52 20 69
; 7C97 73 73 75 65 64 20 66 6F
; 7C9F 72 3A
.byte $9B,$00 ; 7CA1 9B 00
L7CA3: .byte "*.*" ; 7CA3 2A 2E 2A
.byte $9B ; 7CA6 9B
L7CA7: .byte $00 ; 7CA7 00
; ----------------------------------------------------------------------------
L7CA8: .byte $01 ; 7CA8 01
L7CA9: lda #$00 ; 7CA9 A9 00
sta L7CA7 ; 7CAB 8D A7 7C
sta L7CA8 ; 7CAE 8D A8 7C
jmp L7D6B ; 7CB1 4C 6B 7D
; ----------------------------------------------------------------------------
L7CB4: ldx L7CA7 ; 7CB4 AE A7 7C
L7CB7: lda output_dir,x ; 7CB7 BD 50 70
cmp #$3E ; 7CBA C9 3E
beq L7CE0 ; 7CBC F0 22
cmp #$9B ; 7CBE C9 9B
beq L7CC5 ; 7CC0 F0 03
inx ; 7CC2 E8
bpl L7CB7 ; 7CC3 10 F2
L7CC5: lda L7CA7 ; 7CC5 AD A7 7C
beq print_emsg_read_main_dir; 7CC8 F0 0A
; ldx #<emsg_outpath_build : ldy #>emsg_outpath_build
print_emsg_outpath_build:
ldx #$72 ; 7CCA A2 72
ldy #$7C ; 7CCC A0 7C
jsr printstr ; 7CCE 20 8B 7A
jmp L7CDB ; 7CD1 4C DB 7C
; ----------------------------------------------------------------------------
; ldx #<emsg_read_main_dir : ldy #>emsg_read_main_dir
print_emsg_read_main_dir:
ldx #$32 ; 7CD4 A2 32
ldy #$7C ; 7CD6 A0 7C
jsr printstr ; 7CD8 20 8B 7A
L7CDB: pla ; 7CDB 68
pla ; 7CDC 68
jmp exit ; 7CDD 4C 9A 73
; ----------------------------------------------------------------------------
L7CE0: stx L7CA7 ; 7CE0 8E A7 7C
L7CE3: lda output_dir,x ; 7CE3 BD 50 70
sta outfile_l,x ; 7CE6 9D A0 70
dex ; 7CE9 CA
bpl L7CE3 ; 7CEA 10 F7
ldx L7CA7 ; 7CEC AE A7 7C
inx ; 7CEF E8
stx L7CA7 ; 7CF0 8E A7 7C
ldy #$00 ; 7CF3 A0 00
L7CF5: lda L7CA3,y ; 7CF5 B9 A3 7C
sta outfile_l,x ; 7CF8 9D A0 70
inx ; 7CFB E8
iny ; 7CFC C8
cpy #$04 ; 7CFD C0 04
bcc L7CF5 ; 7CFF 90 F4
ldx #$40 ; 7D01 A2 40
lda #$A0 ; 7D03 A9 A0
ldy #$70 ; 7D05 A0 70
jsr open_dir ; 7D07 20 8A 7B
php ; 7D0A 08
ldx #$40 ; 7D0B A2 40
jsr close_iocb ; 7D0D 20 48 7B
plp ; 7D10 28
bmi L7D16 ; 7D11 30 03
jmp L7D6B ; 7D13 4C 6B 7D
; ----------------------------------------------------------------------------
L7D16: ldx L7CA7 ; 7D16 AE A7 7C
dex ; 7D19 CA
dex ; 7D1A CA
lda output_dir,x ; 7D1B BD 50 70
cmp #$3A ; 7D1E C9 3A
beq print_emsg_read_main_dir; 7D20 F0 B2
inx ; 7D22 E8
lda #$9B ; 7D23 A9 9B
sta outfile_l,x ; 7D25 9D A0 70
lda #$00 ; 7D28 A9 00
sta outfile_h,x ; 7D2A 9D A1 70
; ldx #<msg_credir_issued : ldy #>msg_credir_issued
print_msg_credir_issued:
ldx #$8F ; 7D2D A2 8F
ldy #$7C ; 7D2F A0 7C
jsr printstr ; 7D31 20 8B 7A
ldx #$A0 ; 7D34 A2 A0
ldy #$70 ; 7D36 A0 70
jsr printstr ; 7D38 20 8B 7A
ldx #$40 ; 7D3B A2 40
lda #$2A ; 7D3D A9 2A
sta ICCOM,x ; 7D3F 9D 42 03
lda #$A0 ; 7D42 A9 A0
sta ICBAL,x ; 7D44 9D 44 03
lda #$70 ; 7D47 A9 70
sta ICBAH,x ; 7D49 9D 45 03
lda #$80 ; 7D4C A9 80
sta ICBLL,x ; 7D4E 9D 48 03
lda #$00 ; 7D51 A9 00
sta ICBLH,x ; 7D53 9D 49 03
sta ICAX1,x ; 7D56 9D 4A 03
sta ICAX2,x ; 7D59 9D 4B 03
jsr CIOV ; 7D5C 20 56 E4
bpl L7D6B ; 7D5F 10 0A
; ldx #<emsg_credir_failed : ldy #>emsg_credir_failed
print_emsg_credir_failed:
ldx #$50 ; 7D61 A2 50
ldy #$7C ; 7D63 A0 7C
jsr printstr ; 7D65 20 8B 7A
jmp L7CDB ; 7D68 4C DB 7C
; ----------------------------------------------------------------------------
L7D6B: ldx #$40 ; 7D6B A2 40
lda #$50 ; 7D6D A9 50
ldy #$70 ; 7D6F A0 70
jsr open_dir ; 7D71 20 8A 7B
php ; 7D74 08
ldx #$40 ; 7D75 A2 40
jsr close_iocb ; 7D77 20 48 7B
plp ; 7D7A 28
bmi L7D7F ; 7D7B 30 02
clc ; 7D7D 18
rts ; 7D7E 60
; ----------------------------------------------------------------------------
L7D7F: jmp L7CB4 ; 7D7F 4C B4 7C
; ----------------------------------------------------------------------------
; filespec for directory
stardotstar:
.byte "*.*" ; 7D82 2A 2E 2A
.byte $9B ; 7D85 9B
; ----------------------------------------------------------------------------
L7D86: jsr L7DBF ; 7D86 20 BF 7D
bcc L7D8C ; 7D89 90 01
rts ; 7D8B 60
; ----------------------------------------------------------------------------
L7D8C: dex ; 7D8C CA
L7D8D: lda linbuf,x ; 7D8D BD 20 71
cmp #$3E ; 7D90 C9 3E
beq L7D9D ; 7D92 F0 09
cmp #$3A ; 7D94 C9 3A
beq L7D9D ; 7D96 F0 05
dex ; 7D98 CA
bpl L7D8D ; 7D99 10 F2
sec ; 7D9B 38
rts ; 7D9C 60
; ----------------------------------------------------------------------------
L7D9D: ldy #$00 ; 7D9D A0 00
inx ; 7D9F E8
lda linbuf,x ; 7DA0 BD 20 71
cmp #$9B ; 7DA3 C9 9B
beq L7DAD ; 7DA5 F0 06
cmp #$20 ; 7DA7 C9 20
beq L7DAD ; 7DA9 F0 02
clc ; 7DAB 18
rts ; 7DAC 60
; ----------------------------------------------------------------------------
L7DAD: lda stardotstar,y ; 7DAD B9 82 7D
sta linbuf,x ; 7DB0 9D 20 71
inx ; 7DB3 E8
iny ; 7DB4 C8
cpy #$04 ; 7DB5 C0 04
bcc L7DAD ; 7DB7 90 F4
dex ; 7DB9 CA
stx linbuf_idx ; 7DBA 8E 79 7A
clc ; 7DBD 18
rts ; 7DBE 60
; ----------------------------------------------------------------------------
L7DBF: ldx #$00 ; 7DBF A2 00
L7DC1: lda linbuf,x ; 7DC1 BD 20 71
cmp #$9B ; 7DC4 C9 9B
beq L7DCD ; 7DC6 F0 05
inx ; 7DC8 E8
bpl L7DC1 ; 7DC9 10 F6
sec ; 7DCB 38
rts ; 7DCC 60
; ----------------------------------------------------------------------------
L7DCD: clc ; 7DCD 18
rts ; 7DCE 60
; ----------------------------------------------------------------------------
ensure_d_prefix:
lda linbuf ; 7DCF AD 20 71
cmp #$44 ; 7DD2 C9 44
bne L7DE2 ; 7DD4 D0 0C
lda #$3A ; 7DD6 A9 3A
cmp $7121 ; 7DD8 CD 21 71
beq L7E06 ; 7DDB F0 29
cmp $7122 ; 7DDD CD 22 71
beq L7E06 ; 7DE0 F0 24
L7DE2: lda linbuf_idx ; 7DE2 AD 79 7A
tax ; 7DE5 AA
clc ; 7DE6 18
adc #$03 ; 7DE7 69 03
sta linbuf_idx ; 7DE9 8D 79 7A
tay ; 7DEC A8
L7DED: lda linbuf,x ; 7DED BD 20 71
sta linbuf,y ; 7DF0 99 20 71
dey ; 7DF3 88
dex ; 7DF4 CA
bpl L7DED ; 7DF5 10 F6
lda #$44 ; 7DF7 A9 44
ldx #$31 ; 7DF9 A2 31
ldy #$3A ; 7DFB A0 3A
sta linbuf ; 7DFD 8D 20 71
stx $7121 ; 7E00 8E 21 71
sty $7122 ; 7E03 8C 22 71
L7E06: rts ; 7E06 60
; ----------------------------------------------------------------------------
alfext: .byte ".ALF" ; 7E07 2E 41 4C 46
.byte $9B ; 7E0B 9B
; ----------------------------------------------------------------------------
ensure_suffix:
ldx linbuf_idx ; 7E0C AE 79 7A
ldy #$00 ; 7E0F A0 00
L7E11: lda linbuf,x ; 7E11 BD 20 71
cmp #$2E ; 7E14 C9 2E
beq L7E21 ; 7E16 F0 09
iny ; 7E18 C8
dex ; 7E19 CA
bpl L7E11 ; 7E1A 10 F5
ldx linbuf_idx ; 7E1C AE 79 7A
bne L7E25 ; 7E1F D0 04
L7E21: cpy #$00 ; 7E21 C0 00
bne L7E37 ; 7E23 D0 12
L7E25: ldy #$00 ; 7E25 A0 00
L7E27: lda alfext,y ; 7E27 B9 07 7E
sta linbuf,x ; 7E2A 9D 20 71
inx ; 7E2D E8
iny ; 7E2E C8
cpy #$05 ; 7E2F C0 05
bcc L7E27 ; 7E31 90 F4
dex ; 7E33 CA
stx linbuf_idx ; 7E34 8E 79 7A
L7E37: rts ; 7E37 60
; ----------------------------------------------------------------------------
L7E38: .byte $00,$00,$00,$00,$00,$00,$00,$00; 7E38 00 00 00 00 00 00 00 00
.byte $00,$00,$00 ; 7E40 00 00 00
L7E43: .byte $00,$00,$00,$00,$00,$00,$00,$00; 7E43 00 00 00 00 00 00 00 00
.byte $00,$00,$00 ; 7E4B 00 00 00
; ----------------------------------------------------------------------------
L7E4E: lda #$20 ; 7E4E A9 20
ldx #$0A ; 7E50 A2 0A
L7E52: sta L7E38,x ; 7E52 9D 38 7E
sta L7E43,x ; 7E55 9D 43 7E
dex ; 7E58 CA
bpl L7E52 ; 7E59 10 F7
ldx #$00 ; 7E5B A2 00
ldy #$00 ; 7E5D A0 00
L7E5F: lda alf_hdr_filename,x; 7E5F BD 8F 71
beq L7E75 ; 7E62 F0 11
cmp #$2E ; 7E64 C9 2E
bne L7E6C ; 7E66 D0 04
ldy #$07 ; 7E68 A0 07
bne L7E6F ; 7E6A D0 03
L7E6C: sta L7E38,y ; 7E6C 99 38 7E
L7E6F: inx ; 7E6F E8
iny ; 7E70 C8
cpy #$0B ; 7E71 C0 0B
bcc L7E5F ; 7E73 90 EA
L7E75: rts ; 7E75 60
; ----------------------------------------------------------------------------
L7E76: ldx #$00 ; 7E76 A2 00
L7E78: lda output_dir,x ; 7E78 BD 50 70
cmp #$9B ; 7E7B C9 9B
beq L7E82 ; 7E7D F0 03
inx ; 7E7F E8
bne L7E78 ; 7E80 D0 F6
L7E82: lda output_dir,x ; 7E82 BD 50 70
cmp #$3E ; 7E85 C9 3E
beq L7E90 ; 7E87 F0 07
cmp #$3A ; 7E89 C9 3A
beq L7E90 ; 7E8B F0 03
dex ; 7E8D CA
bpl L7E82 ; 7E8E 10 F2
L7E90: ldy #$00 ; 7E90 A0 00
inx ; 7E92 E8
L7E93: lda output_dir,x ; 7E93 BD 50 70
cmp #$2A ; 7E96 C9 2A
bne L7EB3 ; 7E98 D0 19
lda #$3F ; 7E9A A9 3F
L7E9C: sta L7E43,y ; 7E9C 99 43 7E
iny ; 7E9F C8
cpy #$08 ; 7EA0 C0 08
bcc L7E9C ; 7EA2 90 F8
inx ; 7EA4 E8
L7EA5: lda output_dir,x ; 7EA5 BD 50 70
cmp #$2E ; 7EA8 C9 2E
beq L7EC1 ; 7EAA F0 15
cmp #$9B ; 7EAC C9 9B
beq L7EC0 ; 7EAE F0 10
inx ; 7EB0 E8
bne L7EA5 ; 7EB1 D0 F2
L7EB3: cmp #$2E ; 7EB3 C9 2E
beq L7EC1 ; 7EB5 F0 0A
sta L7E43,y ; 7EB7 99 43 7E
inx ; 7EBA E8
iny ; 7EBB C8
cpy #$08 ; 7EBC C0 08
bcc L7E93 ; 7EBE 90 D3
L7EC0: rts ; 7EC0 60
; ----------------------------------------------------------------------------
L7EC1: inx ; 7EC1 E8
ldy #$08 ; 7EC2 A0 08
L7EC4: lda output_dir,x ; 7EC4 BD 50 70
cmp #$9B ; 7EC7 C9 9B
beq L7EC0 ; 7EC9 F0 F5
cmp #$2A ; 7ECB C9 2A
bne L7EDA ; 7ECD D0 0B
lda #$3F ; 7ECF A9 3F
L7ED1: sta L7E43,y ; 7ED1 99 43 7E
iny ; 7ED4 C8
cpy #$0B ; 7ED5 C0 0B
bcc L7ED1 ; 7ED7 90 F8
rts ; 7ED9 60
; ----------------------------------------------------------------------------
L7EDA: sta L7E43,y ; 7EDA 99 43 7E
inx ; 7EDD E8
iny ; 7EDE C8
cpy #$0B ; 7EDF C0 0B
bcc L7EC4 ; 7EE1 90 E1
rts ; 7EE3 60
; ----------------------------------------------------------------------------
L7EE4: jsr L7E4E ; 7EE4 20 4E 7E
jsr L7E76 ; 7EE7 20 76 7E
ldx #$00 ; 7EEA A2 00
L7EEC: lda L7E43,x ; 7EEC BD 43 7E
cmp #$3F ; 7EEF C9 3F
beq L7EF8 ; 7EF1 F0 05
cmp L7E38,x ; 7EF3 DD 38 7E
bne print_msg_skipping; 7EF6 D0 07
L7EF8: inx ; 7EF8 E8
cpx #$0B ; 7EF9 E0 0B
bcc L7EEC ; 7EFB 90 EF
clc ; 7EFD 18
rts ; 7EFE 60
; ----------------------------------------------------------------------------
; ldx #<msg_skipping : ldy #>msg_skipping
print_msg_skipping:
ldx #$1D ; 7EFF A2 1D
ldy #$7F ; 7F01 A0 7F
jsr printstr ; 7F03 20 8B 7A
ldx #$00 ; 7F06 A2 00
pskp_loop:
lda alf_hdr_filename,x; 7F08 BD 8F 71
beq pskp_done ; 7F0B F0 06
jsr putchar ; 7F0D 20 9F 7A
inx ; 7F10 E8
bpl pskp_loop ; 7F11 10 F5
pskp_done:
lda #$9B ; 7F13 A9 9B
jsr putchar ; 7F15 20 9F 7A
jsr L7F3D ; 7F18 20 3D 7F
sec ; 7F1B 38
rts ; 7F1C 60
; ----------------------------------------------------------------------------
msg_skipping:
.byte "Skipping: " ; 7F1D 53 6B 69 70 70 69 6E 67
; 7F25 3A 20
.byte $00 ; 7F27 00
emsg_locate:
.byte "Error During Locate"; 7F28 45 72 72 6F 72 20 44 75
; 7F30 72 69 6E 67 20 4C 6F 63
; 7F38 61 74 65
.byte $9B,$00 ; 7F3B 9B 00
; ----------------------------------------------------------------------------
L7F3D: lda #$DC ; 7F3D A9 DC
sta buf_adr_l ; 7F3F 8D 7B 7A
lda #$7F ; 7F42 A9 7F
sta buf_adr_h ; 7F44 8D 7C 7A
lda MEMTOP_lo ; 7F47 AD E5 02
sec ; 7F4A 38
sbc #$DC ; 7F4B E9 DC
sta inbuf_len_l ; 7F4D 8D 83 71
lda MEMTOP_hi ; 7F50 AD E6 02
sbc #$7F ; 7F53 E9 7F
sta inbuf_len_h ; 7F55 8D 84 71
L7F58: lda alf_hdr_compsize0; 7F58 AD 9C 71
ora alf_hdr_compsize1; 7F5B 0D 9D 71
ora alf_hdr_compsize2; 7F5E 0D 9E 71
bne L7F64 ; 7F61 D0 01
rts ; 7F63 60
; ----------------------------------------------------------------------------
L7F64: lda alf_hdr_compsize2; 7F64 AD 9E 71
bne L7F8C ; 7F67 D0 23
lda inbuf_len_h ; 7F69 AD 84 71
cmp alf_hdr_compsize1; 7F6C CD 9D 71
bcc L7F8C ; 7F6F 90 1B
beq L7F75 ; 7F71 F0 02
bcs L7F7D ; 7F73 B0 08
L7F75: lda inbuf_len_l ; 7F75 AD 83 71
cmp alf_hdr_compsize0; 7F78 CD 9C 71
bcc L7F8C ; 7F7B 90 0F
L7F7D: lda alf_hdr_compsize0; 7F7D AD 9C 71
sta buf_len_l ; 7F80 8D 7D 7A
lda alf_hdr_compsize1; 7F83 AD 9D 71
sta buf_len_h ; 7F86 8D 7E 7A
jmp L7F98 ; 7F89 4C 98 7F
; ----------------------------------------------------------------------------
L7F8C: lda inbuf_len_l ; 7F8C AD 83 71
sta buf_len_l ; 7F8F 8D 7D 7A
lda inbuf_len_h ; 7F92 AD 84 71
sta buf_len_h ; 7F95 8D 7E 7A
L7F98: ldx #$10 ; 7F98 A2 10
jsr readblock ; 7F9A 20 CF 7A
bpl L7FA9 ; 7F9D 10 0A
; ldx #<emsg_locate : ldy #>emsg_locate
print_emsg_locate:
ldx #$28 ; 7F9F A2 28
ldy #$7F ; 7FA1 A0 7F
jsr printstr ; 7FA3 20 8B 7A
jmp cleanup_and_exit; 7FA6 4C 7F 78
; ----------------------------------------------------------------------------
L7FA9: lda alf_hdr_compsize0; 7FA9 AD 9C 71
sec ; 7FAC 38
sbc buf_len_l ; 7FAD ED 7D 7A
sta alf_hdr_compsize0; 7FB0 8D 9C 71
lda alf_hdr_compsize1; 7FB3 AD 9D 71
sbc buf_len_h ; 7FB6 ED 7E 7A
sta alf_hdr_compsize1; 7FB9 8D 9D 71
lda alf_hdr_compsize2; 7FBC AD 9E 71
sbc #$00 ; 7FBF E9 00
sta alf_hdr_compsize2; 7FC1 8D 9E 71
jmp L7F58 ; 7FC4 4C 58 7F
; ----------------------------------------------------------------------------
entrypoint:
jmp startup ; 7FC7 4C 5A 73
; ----------------------------------------------------------------------------
.byte $4C,$4E,$75,$4C,$00,$00,$20,$71; 7FCA 4C 4E 75 4C 00 00 20 71
.byte $00,$70,$A0,$70,$50,$70,$00,$00; 7FD2 00 70 A0 70 50 70 00 00
.byte $01,$04,$C7,$7F; 7FDA 01 04 C7 7F
|