-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdos1modified.asm
3717 lines (3673 loc) · 56 KB
/
dos1modified.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
RAMLO = $001A
JMPTBL = $001B
ICDNOZ = $0021
ZBUFP = $0043
ZDRVA = $0045
ZSBA = $0047
ERRNO = $0049
MEMTOP = $02E5
MEMLO = $02E7
DUNIT = $0301
DCBCMD = $0302
DSTATS = $0303
DBUFLO = $0304
DBUFHI = $0305
DCBSEC = $030A
HATABS = $031A
ICDNO = $0341
ICCOM = $0342
ICSTA = $0343
ICBAL = $0344
ICBAH = $0345
ICAX1 = $034A
ICAX3 = $034C
ICAX4 = $034D
ICAX5 = $034E
FMSORG = $0700
;DOS = $1300 ; set dynamically
IRGEN = $D20E
DKHND = $E453
CIO = $E456
SETVBV = $E45C
SYSVBV = $E45F
XITVBV = $E462
LMASK = 3 ;LINK MASK
;
; DCBCMD VALUE EQUATES
;
DCBCRS = "R" ;Read sector ($52)
DCBCWS = "P" ;Put sector ($50)
DCBCST = "S" ;Status request ($53)
DCBCFD = "!" ;FORMAT DISKETTE ($21)
;
; DCBSTA VALUE EQUATES
;
DCBSOK = $01 ;STATUS NORMAL
DCBDNR = $81 ;DEVICE NOT READY
DCBCNR = $82 ;CONTROLLER NOT READY
DCBDER = $83 ;DATA ERROR
DCBIVC = $84 ;INVALID COMMAND
DCBWPR = $87 ; WRITE PROTECT
;.PAGE "BOOT RECORD"
*= FMSORG
;
; THE FOLLOWING BYTES ARE STORED
; ON DISK SECTOR 0 They COMPRISE
; THE BOOT LOAD RECORD
;
BFLG .byte $00 ;BOOT FLAG UNUSED=0
BRCNT .byte $01 ;NO CONSECTIVE BOOT RECRODS TO READ
BLDADR .word FMSORG ;BOOT LOAD ADDR
BINTADR .word DOS ;INIT ADDR
BCONT JMP XBCONT ;BOOT READ CONT PT
;
; THE FOLLOWING BYTES ARE SET BY
; THE CONSOLE PROCESSOR. THEY ARE
; ACTED UPON DURING FMS INIT ONLY.
; THEY ARE PART OF THE BOOT RECORD
; THUS DEFINING THE DEFAULT
;INITIALIZATION PARMS
;
SABYTE .byte 3 ;MAX # CONCURRENT OPEN FILES
DRVBYT .byte $0F ;DRIVE BITS
SAFBFW .byte $00 ;STORAGE ALLOCATION DIR SW
SASA .word ENDPRG ;STORAGE ALLOCATION START ADDR
DFSFLG .byte $FF
.byte $00
DFLINK .word $0002 ;DOS FILE START SECTOR NUMBER
XBCONT LDA DFSFLG
BEQ BFAIL
LDA #$07
STA ZBUFP+1
LDA #$03
STA ZBUFP
JSR INCBA
LDA DFLINK+1
LDY DFLINK
XBC1 CLC
JSR BSIO
BMI BFAIL
LDY #$7F
LDA (ZBUFP),Y
BMI BGOOD
LDY #$7D
LDA (ZBUFP),Y
AND #LMASK ;MASK TO LINK BITS
PHA
INY
LDA (ZBUFP),Y
TAY
JSR INCBA
PLA
JMP XBC1
BFAIL LDA #$C0 ;SET FOR CARRY SET
BNE XBRTN ;ANY P,Y = $80
BGOOD LDA #$00 ;SET FOR CARRY CLEAR
XBRTN ASL
TAY
RTS
INCBA CLC
LDA ZBUFP ;INC BUFFER PTR
ADC #$7D ;BY DATA LINK (125)
STA DBUFLO
STA ZBUFP
LDA ZBUFP+1
ADC #0
STA DBUFHI
STA ZBUFP+1
RTS
BSIO STA DCBSEC+1
STY DCBSEC
LDA #DCBCRS
BCC DSIO1
LDA #"W"
DSIO1 STA DCBCMD
L0772 JSR DKHND
LDX CURFCB
LDA DSTATS
RTS
DFMSDH .word DFMOPN-1
.word DFMCLS-1
.word DFMGET-1
.word DFMPUT-1
.word DFMSTA-1
.word DFMDDC-1
L0788 LDA #$FF
LDY #$10
L078C STA DRVTBL,Y
DEY
BPL L078C
LDA #$00
STA L1157
LDA DRVBYT
LDX #$07
L079C ROL
BCC L07B4
PHA
LDA L1157
INC L1157
STA DRVTBL,X
TAY
JSR L0FB5
LDY #$05
LDA #$00
STA (ZDRVA),Y
PLA
L07B4 DEX
BPL L079C
LDA #$00
LDY SABYTE
DEY
L07BD STA SECTBL,Y
DEY
BPL L07BD
INY
L07C4 STA FCBFNO,Y
INY
BNE L07C4
LDY #$00
ADI1 LDA HATABS,Y
BEQ ADI2
CMP #"D"
BEQ ADI2
INY
INY
INY
CPY #$1E
BNE ADI1
BRK
ADI2 LDA #"D"
STA HATABS,Y
LDA #DFMSDH&255
STA HATABS+1,Y
LDA #DFMSDH/256
STA HATABS+2,Y
LDA L1157
LDY SABYTE
INY
JSR L0FD4
STA MEMLO+1
STY MEMLO
RTS
DFMOPN JSR SETUP
JSR L103B
JSR FNDCODE
LDA ICAX1,X
STA FCBOTC,X
AND #$02
BEQ OPN1
JMP LISTDIR
OPN1 JSR SFDIR
BCC DHFOX2
LDA FCBOTC,X
EOR #$08
0 BNE OPNER1
LDA DHOLES
BMI OPNER2
STA CDIRS
JSR RDDIR
LDA DHOLED
STA CDIRD
LDA DHFNUM
STA SFNUM
JSR RDVTOC
OPN1A JSR GETSECTOR ;GET A SECTOR
LDY CDIRD ;GET DIR DISPL
STA FILDIR+DFDSSN+1,Y ;PUT SECTOR INTO DIR REC
LDA FCBLSN,X
STA FILDIR+DFDSSN,Y
LDA #DFDINU ;SET DIR ENTRY IN USE
STA FILDIR+DFDFL1,Y
LDA #0
STA FILDIR+DFDCNT+1,Y ;SET COUNT = 0 [Bug fix (matches DOS 2 now)]
STA FILDIR+DFDCNT,Y
TAX ;LDX #0
OPN2 LDA FNAME,X ;MOVE FILE NAME
CMP #"?" ;IF WILD CARD
BNE OPN2A
LDA #$20
OPN2A STA FILDIR+DFDPFN,Y
INY
INX
CPX #$0B
BCC OPN2
LDX CURFCB
JSR WRTDIR
JSR SETFCB
JSR WRTN6
LDA #$80
STA FCBFLG,X
JSR TSTDOS
BNE DHFOX3
JMP WRTDOS
OPNER1 JSR ERFNF
OPNER2 JSR ERDFULL
DHFOX2 JSR SETFCB
LDY CDIRD
LDA FILDIR+DFDSSN,Y
STA FCBLSN,X
LDA FILDIR+DFDSSN+1,Y
STA FCBLSN+1,X
JSR RDNS1
LDA FCBOTC,X
EOR #$04
BEQ DHFOX3
JSR TSTLOCK
LDA FCBOTC,X
AND #$04
BNE DHFOX3
JSR RDVTOC
LDA #$80
STA FCBFLG,X
LDA FCBOTC,X
AND #$01
BEQ L08E1
LDY CDIRD
LDA FILDIR+DFDCNT+1,Y
STA FCBCNT+1,X
LDA FILDIR+DFDCNT,Y
STA FCBCNT,X
BNE L08D1
DEC FCBCNT+1,X
L08D1 DEC FCBCNT
L08D4 JSR RDNXTS
BCC L08D4
LDA FCBMLN,X
STA FCBDLN,X
BCS DHFOX3
L08E1 JSR FRESECT
JSR RDNXTS
BCC L08E1
JMP OPN1A
DHFOX3 JMP GREAT
SETFCB LDA #$00
STA FCBFLG,X
LDA SFNUM
ASL
ASL
STA FCBFNO,X
LDA #$00
STA FCBDLN,X
STA FCBSSN,X
STA FCBSSN+1,X
STA FCBCNT,X
STA FCBCNT+1,X
RTS
DFMPUT STA SVDBYT
LDA ICDNO,X
STA ICDNOZ
JSR SETUP
LDY FCBDLN,X
CPY #$7D
BCC PUT1
JSR WRTNXS
LDA #$00
STA FCBDLN,X
TAY
PUT1 INC FCBDLN,X
LDA SVDBYT
STA (ZSBA),Y
LDA #$40
ORA FCBFLG,X
STA FCBFLG,X
JMP GREAT
DFMGET JSR SETUP
LDA FCBOTC,X
AND #$02
BEQ GET1
JMP GDCHAR
GET1 LDA FCBDLN,X
CMP FCBMLN,X
BCC GET2
JSR RDNXTS
BCC GET1
JMP ERREOF
GET2 TAY
LDA (ZSBA),Y
STA SVDBYT
INY
TYA
STA FCBDLN,X
LDY FCBLSN,X
BNE GET3
LDY FCBLSN+1,X
BNE GET3
CMP FCBMLN,X
BCC GET3
LDA #$03
JMP RETURN
GET3 JMP GREAT
DFMSTA JSR SETUP
JSR FNDCODE
JSR SFDIR
BCS SFNF
JSR TSTLOCK
JMP GREAT
SFNF JMP ERFNF
DFMCLS JSR SETUP
LDA FCBOTC,X
AND #$09
BEQ CLDONE
ROL FCBFLG,X
BCC CLUPDT
LDA FCBDLN,X
ORA #$80
JSR WRTLS1
JSR RRDIR
CLDONE LDA #$00
STA FCBOTC,X
JMP FGREAT
FNSHFT LDA #$00
FNSHF1 LDY #$03
FNSHF2 ASL FCBFNO,X
ROL
DEY
BNE FNSHF2
RTS
CLUPDT JSR WRTNXS
JMP CLDONE
RRDIR JSR FNSHFT
STA CDIRS
JSR FNSHFT
JSR FNSHF1
ASL
STA CDIRD
JSR RDDIR
LDY CDIRD
LDA FCBCNT+1,X
STA FILDIR+DFDCNT+1,Y
LDA FCBCNT,X
STA FILDIR+DFDCNT,Y
JSR WRTDIR
JMP WRTVTOC
DFMDDC JSR SETUP
LDA ICCOM,X
CMP #$FE
BEQ XFV
CMP #$27
BCS DVDCER
SEC
SBC #$20
BCC DVDCER
ASL
TAY
LDA DVDCVT,Y
PHA
LDA DVDCVT+1,Y
PHA
RTS
DVDCVT .byte (XRENAME-1)/256,-256*((XRENAME-1)/256)+(XRENAME-1) ;.dbyte XRENAME-1
.byte (XDELETE-1)/256,-256*((XDELETE-1)/256)+(XDELETE-1) ;.dbyte XDELETE-1
.byte (DVDCER-1)/256,-256*((DVDCER-1)/256)+(DVDCER-1) ;.dbyte DVDCER-1
.byte (XLOCK-1)/256,-256*((XLOCK-1)/256)+(XLOCK-1) ;.dbyte XLOCK-1
.byte (XUNLOCK-1)/256,-256*((XUNLOCK-1)/256)+(XUNLOCK-1) ;.dbyte XUNLOCK-1
.byte (XPOINT-1)/256,-256*((XPOINT-1)/256)+(XPOINT-1) ;.dbyte XPOINT-1
.byte (XNOTE-1)/256,-256*((XNOTE-1)/256)+(XNOTE-1) ;.dbyte XNOTE-1
DVDCER JMP ERDVDC
XFV JMP XFORMAT
XRENAME JSR FNDCODE
STY TEMP2
JSR SFDIR
BCC XRN1
JMP ERFNF
XRN1 JSR TSTLOCK
JSR TSTDOS
BNE XRN1A
JSR DELDOS
XRN1A LDY TEMP2
JSR FNDCNX
JSR TSTDOS
BNE XRN1B
LDY CDIRD
LDA FILDIR+DFDSSN+1,Y
PHA
LDA FILDIR+DFDSSN,Y
TAY
PLA
JSR SETDSO
XRN1B LDX #$00
LDY CDIRD
XRN2 LDA FNAME,X ;MOVE FILE NAME
CMP #"?" ;FROM FNAME TO DIR ENT
BEQ XRN3 ;BUT DON'T CHANGE WILD CARD
STA FILDIR+DFDPFN,Y
XRN3 INY
INX
CPX #$0B
BCC XRN2
LDX CURFCB
JSR WRTDIR
JSR FNDCODE
JSR CFSDIR
BCC XRN1
JMP FGREAT
XDELETE JSR FNDCODE
JSR SFDIR
BCC XDEL0
JMP ERFNF
XDEL0 JSR RDVTOC
XDEL1 LDY CDIRD
JSR TSTLOCK
LDA #DFDEDE
STA FILDIR,Y
LDA FILDIR+DFDSSN,Y
STA FCBLSN,X
LDA FILDIR+DFDSSN+1,Y
STA FCBLSN+1,X
JSR SETFCB
JSR RDNS1
JMP XDEL2A
XDEL2 JSR RDNXTS
BCS XDEL4
XDEL2A JSR FRESECT
JMP XDEL2
XDEL4 JSR WRTDIR
JSR CFSDIR
BCC XDEL1
JSR WRTVTOC
JSR TSTDOS
BNE XDELY
JSR DELDOS
XDELY JMP FGREAT
XLOCK LDA #$20
STA TEMP4
BNE XLCOM
XUNLOCK LDA #$00
STA TEMP4
XLCOM JSR FNDCODE
JSR SFDIR
BCC XLC1
JMP ERFNF
XLC1 LDY CDIRD
LDA FILDIR,Y
AND #$DF
ORA TEMP4
STA FILDIR,Y
JSR WRTDIR
JSR CFSDIR
BCC XLC1
JMP FGREAT
TSTLOCK LDY CDIRD
LDA FILDIR,Y
AND #$20
BNE TLF
RTS
TLF JMP ERFLOCK
XPOINT LDA FCBFLG,X
BMI PERR1
LDA ICAX4,X
CMP FCBCSN+1,X
BNE XP1
LDA ICAX3,X
CMP FCBCSN,X
BEQ XP2
XP1 JSR WRTNXS
LDA ICAX4,X
STA FCBLSN+1,X
LDA ICAX3,X
STA FCBLSN,X
JSR RDNS1
XP2 LDA ICAX5,X
CMP FCBMLN,X
BCC XP3
BEQ XP3
JMP ERRPDL
XP3 STA FCBDLN,X
JMP GREAT
PERR1 JMP ERRPOT
XNOTE LDA FCBDLN,X
STA ICAX5,X
LDA FCBCSN,X
STA ICAX3,X
LDA FCBCSN+1,X
STA ICAX4,X
JMP GREAT
XFORMAT LDA ZDRVA+1
STA DBUFHI
LDA ZDRVA
STA DBUFLO
LDA #DCBCFD
JSR DSIO1
LDA #$00
TAY
XF1 STA (ZDRVA),Y
INY
BPL XF1
LDY #$00
LDA #$01
STA (ZDRVA),Y
INY
LDA #$C5
STA (ZDRVA),Y
INY
INY
STA (ZDRVA),Y
LDA #$02
DEY
STA (ZDRVA),Y
INY
INY
STA (ZDRVA),Y
LDY #$0A
LDA #$FF
XF2 STA (ZDRVA),Y
INY
CPY #$64
BNE XF2
LDA #$3F
LDY #$0A
STA (ZDRVA),Y
LDY #$37
LDA #$00
STA (ZDRVA),Y
INY
LDA #$7F
STA (ZDRVA),Y
JSR WRTVTOC
LDA #$00
TAY
XF3 STA FILDIR,Y
INY
BPL XF3
LDA #$07
STA CDIRS
XF4 JSR WRTDIR
DEC CDIRS
BPL XF4
JSR DELDOS
JMP FGREAT
LISTDIR LDA #$00
STA TEMP4
JSR SFDIR
BCC LDENT1
BCS LDCNT
GDCHAR BIT TEMP4
BMI LDDONE
LDY TEMP4
LDA (ZSBA),Y
STA SVDBYT
INC TEMP4
CMP #$9B
BNE GDCRTN
CPY #$04
BCS LDENT
LDA #$80
STA TEMP4
GDCRTN JMP GREAT
LDENT LDA #$00
STA TEMP4
JSR CFSDIR
BCS LDCNT
LDENT1 JSR FDENT
JMP GREAT
LDCNT JSR RDVTOC
LDY #$04
LDA (ZDRVA),Y
PHA
DEY
LDA (ZDRVA),Y
TAY
PLA
JSR CVDX
LDY #$03
JSR CVDY
LDA #$00
STA TEMP4
JMP FGREAT
LDDONE JMP ERREOF
FDENT LDY #$00
LDA #$20
STA (ZSBA),Y
LDX CDIRD
LDA FILDIR,X
AND #$20
BEQ LD1
LDA #"*" ;CHANGE TO AST
STA (ZSBA),Y
LD1 INY
LDA #$20 ;FOLLOWED BY A BLANK
STA (ZSBA),Y
INY
LD2 LDA FILDIR+DFDPFN,X
STA (ZSBA),Y
INX
INY
CPY #$0D
BCC LD2
LDA #$20
STA (ZSBA),Y
INY
STY TEMP4
LDX CDIRD
LDY FILDIR+DFDCNT,X
LDA FILDIR+DFDCNT+1,X ;BUG FIX!!! They left off the ",X" which broke directory listing sector counts for large files
CVDX LDX #$64
JSR CVDIGIT
LDX #$0A
JSR CVDIGIT
TYA
JSR STDIGIT
LDY #$11
CVDY LDA #$9B
STA (ZSBA),Y
LDY #$00
STY TEMP4
RTS
CVDIGIT STX TEMP3
LDX #$FF
CVD1 STA TEMP2
STY TEMP1
INX
SEC
LDA TEMP1
SBC TEMP3
TAY
LDA TEMP2
SBC #$00
BCS CVD1
TXA
STDIGIT ORA #$30
LDY TEMP4
STA (ZSBA),Y
INC TEMP4
LDA TEMP2
LDY TEMP1
RTS
FNDCODE LDA ICBAL,X
STA ZBUFP
LDA ICBAH,X
STA ZBUFP+1
LDY #$02
FD0A LDA (ZBUFP),Y
DEY
BMI FNDERR
CMP #":"
BNE FD0A
INY
FNDCNX LDX #$0B
LDA #$20
FD0 STA FNAME,X
DEX
BPL FD0
LDX #$00
STX TEMP1
FD1 INY
LDA (ZBUFP),Y
CMP #"*"
BNE FD3
FD2 LDA #"?"
JSR FDSCHAR
BCC FD2
BPL FD1
BMI FDEND
FD3 CMP #"."
BNE FD4
BIT TEMP1
BMI FDEND
LDX #$08
ROR TEMP1
BCC FD1
FD4 CMP #"?"
BEQ FD6
CMP #"A" ;IS CHAR ALPHA
BCC FD5 ;BR NOT ALPHA
CMP #$5B ;TEXT HI ALPHA
BCC FD6 ;BR IF NOT ALPHA
FD5 CPX #$00
BEQ FNDERR
CMP #$30
BCC FDEND
CMP #$3A
BCS FDEND
FD6 JSR FDSCHAR
JMP FD1
FDEND LDX CURFCB
RTS
FNDERR JMP ERRFN
FDSCHAR CPX #$08
BCC FDSC2
BEQ FDSC1
CPX #$0C
BCC FDSC2
RTS
FDSC1 BIT TEMP1
BMI FDSC2
RTS
FDSC2 STA FNAME,X
INX
CLC
RTS
SFDIR LDA #$FF
STA DHOLES
STA CDIRS
STA SFNUM
LDA #$70
STA CDIRD
CFSDIR INC SFNUM
CLC
LDA CDIRD
ADC #$10
BPL SFD2
INC CDIRS
LDA #$08
CMP CDIRS
BCC SFD1
BEQ SDRTN
SFD1 JSR RDDIR
LDA #$00
SFD2 STA CDIRD
TAY
LDA FILDIR,Y
BEQ SFDSH
BMI SFDSH
LDX #0 ;TEST MATCH ON 12 CHARS
SFD3 LDA FNAME,X ;FILE NAME CHAR
CMP #"?" ;IS FNC WILD CARD
BEQ SFD4 ;THEN IT MATCHES
CMP FILDIR+DFDPFN,Y ;ELSE IT MUST MATCH FO
BNE CFSDIR ;IF NOT MATCH THEN TRY NEXT
SFD4 INX
INY
CPX #$0B
BNE SFD3
CLC
BCC SDRTN
SFDSH LDA DHOLES
BPL SFDSH1
LDA CDIRS
STA DHOLES
LDA CDIRD
STA DHOLED
LDA SFNUM
STA DHFNUM
SFDSH1 LDA FILDIR,Y
BMI CFSDIR
SEC
SDRTN LDX CURFCB
RTS
WRTNXS LDA FCBFLG,X
BMI WRTN1
ASL
BPL WRU1
ASL
STA FCBFLG,X
JSR WRCSIO
BMI WRNERR
WRU1 JMP RDNXTS
WRTN1 JSR GETSECTOR
LDA FCBCNT,X
AND #$7F
WRTLS1 LDY #$7F
STA (ZSBA),Y
LDA #$02
STA TEMP3
WRTN2 LDA FCBLSN+1,X ;MOVE LINK SECTOR
ORA FCBFNO,X ;PLUS FILE NUM
LDY #$7D ;TO BYTES 126,127
STA (ZSBA),Y ;OF SECTOR BUFF
INY
LDA FCBLSN,X
STA (ZSBA),Y
JSR WRCSIO ;WRITE SECTOR
BPL WRTN5 ;BR NOT ERROR
DEC TEMP3
BPL L0DDD
WRNERR LDA DSTATS
STA TEMP4
JSR RRDIR
LDA #$00
STA FCBOTC,X
LDA TEMP4
JMP RETURN
L0DDD JSR MVLSN
JSR GETSECTOR
JMP WRTN2
WRTN5 LDA TEMP3
CMP #$02
BEQ L0E05
CLC
JSR L0E28
LDY #$7D
LDA FCBCSN+1,X
ORA FCBFNO,X
STA (ZSBA),Y
INY
LDA FCBCSN,X
STA (ZSBA),Y
SEC
JSR L0E28
L0E05 LDA FCBCSN,X
STA FCBSSN,X
LDA FCBCSN+1,X
STA FCBSSN+1,X
INC FCBCNT,X ;INC SECTOR CNT
BNE WRTN6
INC FCBCNT+1,X
WRTN6 JSR MVLSN ;LINK TO CUR
LDA #0
STA FCBLSN,X ;LINK= 0
STA FCBLSN+1,X
STA FCBDLN,X ;DLN = 0
RTS
L0E28 LDY FCBSSN,X
LDA FCBSSN+1,X
BNE L0E35
LDY FCBSSN,X
BEQ WRNERR
L0E35 JSR DSIO
BMI WRNERR
RTS
WRCSIO SEC
RWCSIO LDA FCBCSN+1,X
LDY FCBCSN,X
JMP DSIO
MVLSN LDA FCBLSN,X
STA FCBCSN,X
LDA FCBLSN+1,X
STA FCBCSN+1,X
RTS
RDNXTS LDY #$7F
LDA (ZSBA),Y
BPL RDNS1
SEC
RTS
RDNS1 JSR MVLSN
CLC
JSR RWCSIO
BMI RDIOER
LDY #$7D
LDA (ZSBA),Y
AND #$FC
CMP FCBFNO,X
BNE RDFNMM
LDA (ZSBA),Y
AND #$03
STA FCBLSN+1,X
INY
LDA (ZSBA),Y
STA FCBLSN,X
INY
LDA (ZSBA),Y
BMI RDNS2
LDA #$7D
RDNS2 AND #$7F
STA FCBMLN,X
LDA #$00
STA FCBDLN,X
CLC
RTS
RDIOER JSR ERRIO
RDFNMM LDA ICCOM,X
CMP #$21 ;WAS THIS DELETE
BEQ RDDELE ;BR IF DELETE
JSR ERFNMM ;BR NOT DELETE
RDDELE SEC
RTS
RDDIR CLC
BCC DIRIO
WRTDIR SEC
DIRIO PHP
LDA #FILDIR/256
STA DBUFHI
LDA #FILDIR&255
STA DBUFLO
CLC
LDA CDIRS
ADC #$69
TAY
LDA #$01
ADC #$00
JMP DSYSIO
RDVTOC LDY #$05
LDA (ZDRVA),Y
BEQ RDVGO
JSR WRTVTOC
RDVGO CLC
BCC VTIO
WRTVTOC LDY #$05
LDA #$00
STA (ZDRVA),Y
SEC
VTIO PHP
LDA ZDRVA+1
STA DBUFHI
LDA ZDRVA
STA DBUFLO
LDY #$68
LDA #$01
DSYSIO PLP
BSIOR JSR BSIO
BMI DSIOER
RTS
DSIOER CMP #$83
BEQ DEAD
JMP ERRIO
DEAD JMP ERRSYS
FRESECT LDA #$00
LDY #$03
FS1 LSR FCBCSN+1,X
ROR FCBCSN,X
ROR
DEY
BNE FS1
LDY #$05
FS2 ROR
DEY
BNE FS2
TAY
LDA #$00
SEC
FS3 ROR
DEY
BPL FS3
PHA
LDA FCBCSN,X
ADC #$0A
TAY
PLA
ORA (ZDRVA),Y
STA (ZDRVA),Y
LDY #$03
LDA (ZDRVA),Y
CLC
ADC #$01
STA (ZDRVA),Y
INY
LDA (ZDRVA),Y
ADC #$00
STA (ZDRVA),Y
INY
LDA #$FF
STA (ZDRVA),Y
RTS
GETSECTOR LDY #$09
GS1 INY
CPY #$64
BCS GSERR
LDA (ZDRVA),Y
BEQ GS1
STY TEMP1
PHA
SEC
LDY #$03
LDA (ZDRVA),Y
SBC #$01
STA (ZDRVA),Y
INY
LDA (ZDRVA),Y