home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 26.7 KB | 1,664 lines |
- ;┴├┼-128/64 KERNEL RAMDISK DRIVER, STARTED 18-┴PR-1994.
-
- RD─IRENT╠ENGTH = 48
- RD─IRENT┬UF .BUF RD─IRENT╠ENGTH
- RD─IRENT┬YTES = ACE─IRENT┬YTES-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT─ATE = ACE─IRENT─ATE-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT╘YPE = ACE─IRENT╘YPE-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT╞LAGS = ACE─IRENT╞LAGS-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT╒SAGE = ACE─IRENT╒SAGE-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT╬AME╠EN = ACE─IRENT╬AME╠EN-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT╬AME = ACE─IRENT╬AME-ACE─IRENT┬UFFER+RD─IRENT┬UF
- RD─IRENT╚EAD╨TR = RD─IRENT┬UF+$24
- RD─IRENT╘AIL╨TR = RD─IRENT┬UF+$28
- RD─IRENT╥ESERVED = RD─IRENT┬UF+$2C
- RD─CB╧PEN═ODE = FCB╘ABLE1+0 ;(1)
- RD─CB╙TATUS = FCB╘ABLE1+1 ;(1)
- RD─CB╬EXT─IRENT = FCB╘ABLE1+2 ;(4)
- RD╞CBR╧PEN═ODE = FCB╘ABLE1+0 ;(1)
- RD╞CBR╬EXT┬LK = FCB╘ABLE1+1 ;(3)
- RD╞CBR╞ILE╨TR = FCB╘ABLE1+4 ;(4)
- RD╞CBR┬LK┬YTES = FCB╘ABLE1+8 ;(2)
-
- RD╞CBW╧PEN═ODE = FCB╘ABLE1+0 ;(1)
- RD╞CBW┬LK╨AGE = FCB╘ABLE1+1 ;(1)
- RD╞CBW╥EM┬YTES = FCB╘ABLE1+2 ;(2)
- RD╞CBW╞ILE╨TR = FCB╘ABLE1+4 ;(4)
- RD╞CBW╞ILE╙IZE = FCB╘ABLE1+8 ;(4)
- RD╞CBW─IRENT = FCB╘ABLE1+$C ;(4)
-
- RD╞CBW┬UF .BUF 18
- RD╞CBW┬UF╧PEN═ODE = RD╞CBW╧PEN═ODE-RD╞CBW╧PEN═ODE+RD╞CBW┬UF
- RD╞CBW┬UF┬LK╨AGE = RD╞CBW┬LK╨AGE-RD╞CBW╧PEN═ODE+RD╞CBW┬UF
- RD╞CBW┬UF╥EM┬YTES = RD╞CBW╥EM┬YTES-RD╞CBW╧PEN═ODE+RD╞CBW┬UF
- RD╞CBW┬UF╞ILE╨TR = RD╞CBW╞ILE╨TR-RD╞CBW╧PEN═ODE+RD╞CBW┬UF
- RD╞CBW┬UF╞ILE╙IZE = RD╞CBW╞ILE╙IZE-RD╞CBW╧PEN═ODE+RD╞CBW┬UF
- RD╞CBW┬UF─IRENT = RD╞CBW─IRENT-RD╞CBW╧PEN═ODE+RD╞CBW┬UF
- RD╔NIT╔NDEX .BUF 1
-
- RD╔NIT = *
- LDX #0
- STX RD╔NIT╔NDEX
- - LDX RD╔NIT╔NDEX
- LDA CONFIG┬UF+0,X
- CMP #4
- BNE +
- JSR RD╔NIT─RIVE
- + CLC
- LDA RD╔NIT╔NDEX
- ADC #4
- STA RD╔NIT╔NDEX
- CMP #$80
- BCC -
- RTS
-
- RD═ALLOC╞LAGS .BUF 1 ;XX NOT USED YET
-
- RD╓AR═ALLOC = * ;( .┴=PAGES╥EQUESTED ) : .├╙=ERR, [MP]=MEM, .┴=PAGES╟OTTEN
- JSR RD═ALLOC
- BCC +
- LDA ERRNO
- CMP #ACE┼RR╔NSUFFICIENT═EMORY
- BEQ ++
- SEC
- + RTS
- + LDA #1
- ;XX FALL THROUGH
-
- RD═ALLOC = * ;( .┴=PAGES╥EQUIRED ) : .├╙=ERR, [MP]=MEM, .┴=PAGES╟OTTEN
- PHA
- PHA
- LDA #$FD
- STA ALLOC╨ROC╔─
- PLA
- LDX #$00
- LDY #$FF
- JSR KERN╨AGE┴LLOC
- PLA
- RTS
-
- RD╞REE = * ;( [MP]=MEM╨TR, .┴=PAGES ) : .├╙=ERR
- PHA
- LDA #$FD
- STA ALLOC╨ROC╔─
- PLA
- JSR KERN╨AGE╞REE
- RTS
-
- RD╔NIT─RIVE = * ;( RD╔NIT╔NDEX )
- ;** ALLOC ROOT DIRENT, ROOT DIR CONTENTS
- LDA #2
- JSR RD═ALLOC
- BCC +
- RTS
-
- ;** INIT DEVICE TABLE ENTRY: ROOT DIR, CURRENT DIR
- + LDA RD╔NIT╔NDEX
- ASL
- TAY
- LDA RD─IRENT╧FFSET╘AB+0
- STA DEVICE╘ABLE+0,Y
- STA DEVICE╘ABLE+4,Y
- INY
- LDX #1
- - LDA MP,X
- STA DEVICE╘ABLE+0,Y
- STA DEVICE╘ABLE+4,Y
- INY
- INX
- CPX #4
- BCC -
-
- ;** INIT ROOT DIRENT
- JSR RD╔NIT─IR┬LOCK╙TRBUF
- LDX #RD─IRENT╠ENGTH-1
- LDA #0
- - STA RD─IRENT┬UF,X
- DEX
- BPL -
- LDA #1
- STA RD─IRENT┬YTES+1
- LDA #<RD─IRENT─ATE
- LDY #>RD─IRENT─ATE
- JSR GETDATE
- LDX #3
- - LDA RD╥OOT╘YPE,X
- STA RD─IRENT╘YPE,X
- DEX
- BPL -
- LDA #%11110100
- STA RD─IRENT╞LAGS
- LDA #13
- STA RD─IRENT╬AME╠EN
- LDX #16
- - LDA RD╥OOT╬AME,X
- STA RD─IRENT╬AME,X
- DEX
- BPL -
- LDA RD╔NIT╔NDEX
- LSR
- LSR
- CLC
- ADC #"@"
- STA RD─IRENT╬AME+12
- LDA #%10000000
- STA RD─IRENT╒SAGE
- LDX #3
- - LDA MP,X
- STA RD─IRENT╚EAD╨TR,X
- STA RD─IRENT╘AIL╨TR,X
- DEX
- BPL -
- INC RD─IRENT╚EAD╨TR+1
- INC RD─IRENT╘AIL╨TR+1
- LDX #RD─IRENT╠ENGTH-1
- - LDA RD─IRENT┬UF,X
- STA WORKBUF+$10,X
- DEX
- BPL -
- LDA #<WORKBUF
- LDY #>WORKBUF
- STA ZP+0
- STY ZP+1
- LDA #<256
- LDY #>256
- JSR STASH
-
- ;** INIT ROOT DIR CONTENTS
- ;** "." ENTRY
- LDA #0
- STA RD─IRENT┬YTES+1
- LDA #%01100100
- STA RD─IRENT╞LAGS
- LDX #3
- - LDA RD─OT╘YPE,X
- STA RD─IRENT╘YPE,X
- DEX
- BPL -
- LDA #1
- STA RD─IRENT╬AME╠EN
- LDX #16
- LDA #0
- - STA RD─IRENT╬AME,X
- DEX
- BPL -
- LDA #"."
- STA RD─IRENT╬AME+0
- LDA #%11010000
- STA RD─IRENT╒SAGE
- LDA #$10
- STA RD─IRENT╚EAD╨TR+0
- DEC RD─IRENT╚EAD╨TR+1
- LDX #RD─IRENT╠ENGTH-1
- - LDA RD─IRENT┬UF,X
- STA WORKBUF+$10,X
- DEX
- BPL -
- ;** ".." ENTRY
- LDA #2
- STA RD─IRENT╬AME╠EN
- LDA #"."
- STA RD─IRENT╬AME+1
- LDX #RD─IRENT╠ENGTH-1
- - LDA RD─IRENT┬UF,X
- STA WORKBUF+$40,X
- DEX
- BPL -
- ;** STORE DIR BLOCK
- INC MP+1
- LDA #<256
- LDY #>256
- JSR STASH
- RTS
-
- RD╥OOT╬AME = *
- .ASC "ACE-RAMDISK-A"
- .BYTE 0,0,0,0
- RD╥OOT╘YPE = *
- .ASC "DIR"
- .BYTE 0
- RD─OT╘YPE = *
- .ASC "HLN"
- .BYTE 0
- RD─IRENT╧FFSET╘AB = *
- .BYTE $10,$40,$70,$A0,$D0
-
- RD╔NIT─IR┬LOCK╙TRBUF = *
- LDX #0
- LDA #0
- - STA WORKBUF,X
- INX
- BNE -
- LDA #1
- STA WORKBUF+$00
- STA WORKBUF+$05
- LDA #ACE═EM╬ULL
- STA WORKBUF+$03
- RTS
-
- RD─CB╧FFSET .BUF 1
- RD╞CB╧FFSET = RD─CB╧FFSET
- RD─EV╧FFSET .BUF 1
- RD═P╙AVE .BUF 4
- RD┌P╙AVE .BUF 2
- RD├OUNT .BUF 1
- RD╥EG╙AVE .BUF 3
-
- RD╙AVE═P┌P = *
- LDX #3
- - LDA MP,X
- STA RD═P╙AVE,X
- DEX
- BPL -
- LDA ZP+0
- LDY ZP+1
- STA RD┌P╙AVE+0
- STY RD┌P╙AVE+1
- RTS
-
- RD╥ESTORE═P┌P = *
- LDX #3
- - LDA RD═P╙AVE,X
- STA MP,X
- DEX
- BPL -
- LDA RD┌P╙AVE+0
- LDY RD┌P╙AVE+1
- STA ZP+0
- STY ZP+1
- RTS
-
- RD─IR╧PEN = *
- RD╧PEN╨REAMBLE = *
- LDA OPEN─EVICE
- ASL
- STA RD─EV╧FFSET
- LDA OPEN╞CB
- ASL
- ASL
- ASL
- ASL
- STA RD─CB╧FFSET
- TAX
- LDA #"D"
- STA RD─CB╧PEN═ODE,X
- INX
- LDY #15
- LDA #0
- - STA RD─CB╧PEN═ODE,X
- INX
- DEY
- BNE -
- LDX RD─CB╧FFSET
- LDA #$00
- STA RD─CB╙TATUS,X
- LDY RD─EV╧FFSET
- INY
- INY
- INY
- INY
- LDA #0
- STA RD├OUNT
- LDX RD─CB╧FFSET
- - LDA DEVICE╘ABLE,Y
- STA RD─CB╬EXT─IRENT,X
- STX RD╥EG╙AVE+1
- LDX RD├OUNT
- STA RD╫ORK─IR,X
- LDX RD╥EG╙AVE+1
- INX
- INY
- INC RD├OUNT
- LDA RD├OUNT
- CMP #4
- BCC -
- LDA OPEN╞CB
- CLC
- RTS
-
- RD─IR├LOSE = *
- JMP CLOSE╞D┼NTRY
-
- ;*** DIRREAD( .╪=DCB, .┘=DEV├FG╧FF ) : .┌=EOF, ACE─IRENT┬UFFER=DATA
-
- RD─CB╬UM .BUF 1
-
- RD─IR╥EAD = *
- STX RD─CB╬UM
- TYA
- ASL
- STA RD─EV╧FFSET
- LDA RD─CB╬UM
- ASL
- ASL
- ASL
- ASL
- STA RD─CB╧FFSET
- JSR RD╙AVE═P┌P
- LDX RD─CB╧FFSET
- LDA RD─CB╧PEN═ODE,X
- CMP #"D"
- BEQ +
- LDA #ACE┼RR╞ILE╬OT╔NPUT
- JMP RD─IR╥EAD┼RROR
- + LDA RD─CB╙TATUS,X
- CMP #$00
- BEQ RD─IR╥EAD╘ITLE
- CMP #$01
- BNE +
- JMP RD─IR╥EAD─IRENT
- + LDA #0
- STA ACE─IRENT╬AME╠EN
- STA ACE─IRENT╬AME+0
- CLC
- ;** FALL THROUGH
- RD─IR╥EAD┼XIT = *
- PHP
- JSR RD╥ESTORE═P┌P
- PLP
- RTS
- RD─IR╥EAD┼RROR = *
- STA ERRNO
- SEC
- LDA #0
- JMP RD─IR╥EAD┼XIT
-
- RD─IR╥EAD╘ITLE = *
- LDX RD─CB╧FFSET
- LDA #$01
- STA RD─CB╙TATUS,X
- LDY #0
- - LDA RD─CB╬EXT─IRENT,X
- STA MP,Y
- INX
- INY
- CPY #4
- BCC -
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR FETCH
- LDX #ACE─IRENT╠ENGTH-1
- - LDA RD─IRENT┬UF,X
- STA ACE─IRENT┬UFFER,X
- DEX
- BPL -
- LDX RD─CB╧FFSET
- LDY #0
- - LDA RD─IRENT╚EAD╨TR,Y
- STA RD─CB╬EXT─IRENT,X
- INX
- INY
- CPY #4
- BCC -
- LDX RD─CB╧FFSET
- LDA #$10
- STA RD─CB╬EXT─IRENT+0,X
- LDA #$FF
- CLC
- JMP RD─IR╥EAD┼XIT
-
- RD─IR╥EAD─IRENT = *
- LDX RD─CB╧FFSET
- LDY #0
- - LDA RD─CB╬EXT─IRENT,X
- STA MP,Y
- INX
- INY
- CPY #4
- BCC -
- LDA MP+0
- CMP #$FF
- BEQ RD─IR╥EAD╬EXT┬LOCK
- LDX RD─CB╧FFSET
- CLC
- ADC #RD─IRENT╠ENGTH
- BCC +
- LDA #$FF
- + STA RD─CB╬EXT─IRENT+0,X
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR FETCH
- LDA RD─IRENT╒SAGE
- BPL RD─IR╥EAD─IRENT
- LDX #ACE─IRENT╠ENGTH-1
- - LDA RD─IRENT┬UF,X
- STA ACE─IRENT┬UFFER,X
- DEX
- BPL -
- LDA #$FF
- CLC
- JMP RD─IR╥EAD┼XIT
-
- RD┬LOCK╚EAD .BUF 6
- RD┬H╨AGES = RD┬LOCK╚EAD+0
- RD┬H╬EXT╨G = RD┬LOCK╚EAD+1
- RD┬H┬YTES = RD┬LOCK╚EAD+4
-
- RD─IR╥EAD╬EXT┬LOCK = *
- LDA #$00
- STA MP+0
- LDA #<RD┬LOCK╚EAD
- LDY #>RD┬LOCK╚EAD
- STA ZP+0
- STY ZP+1
- LDA #6
- LDY #0
- JSR FETCH
- LDA RD┬H╬EXT╨G+2
- CMP #ACE═EM╬ULL
- BEQ RD─IR╥EAD╞REE
- LDX RD─CB╧FFSET
- LDA #$10
- STA RD─CB╬EXT─IRENT+0,X
- INX
- LDY #0
- - LDA RD┬H╬EXT╨G,Y
- STA RD─CB╬EXT─IRENT,X
- INX
- INY
- CPY #3
- BCC -
- JMP RD─IR╥EAD─IRENT
-
- RD─IR╥EAD╞REE = *
- LDX RD─CB╧FFSET
- LDA #$FF
- STA RD─CB╙TATUS,X
- LDA #0
- LDX #ACE─IRENT╠ENGTH-1
- - STA ACE─IRENT┬UFFER,X
- DEX
- BPL -
- LDX #3
- - LDA ACE╞REE═EMORY,X
- STA ACE─IRENT┬YTES,X
- DEX
- BPL -
- LDA #%01000100
- STA ACE─IRENT╞LAGS
- LDA #%00000000
- STA ACE─IRENT╒SAGE
- JSR RD╥ESTORE═P┌P
- LDA #$FF
- CLC
- RTS
-
- RD├H─IR = *
- LDA #0
- STA STRING┬UFFER+2
- JMP CHDIR╙ET╬AME
-
- RD╞ILE╘YPE .BUF 1
-
- RD╧PEN = *
- JSR RD╧PEN╨REAMBLE
- JSR RD╙AVE═P┌P
- LDY OPEN╬AME╙CAN
- LDX #0
- - LDA (ZP),Y
- STA STRING┬UFFER,X
- BEQ +
- INX
- INY
- BNE -
- + LDA #"S"
- STA RD╞ILE╘YPE
- LDA STRING┬UFFER-2,X
- CMP #","
- BNE +
- LDA STRING┬UFFER-1,X
- STA RD╞ILE╘YPE
- LDA #0
- STA STRING┬UFFER-2,X
- + LDX RD╞CB╧FFSET
- LDA OPEN═ODE
- STA RD╞CBR╧PEN═ODE,X
- CMP #"R"
- BEQ +
- JMP RD╧PEN╫RITE
-
- ;** OPEN FOR READ
- + JSR RD╙CAN─IR
- BCC +
- LDA ERRNO
- JMP RD╧PEN┼RROR
- + LDX RD╞CB╧FFSET
- LDA #0
- STA RD╞CBR┬LK┬YTES+0,X
- STA RD╞CBR┬LK┬YTES+1,X
- LDY #0
- - LDA RD─IRENT╚EAD╨TR+1,Y
- STA RD╞CBR╬EXT┬LK,X
- INX
- INY
- CPY #3
- BCC -
- JSR RD╥ESTORE═P┌P
- LDA OPEN╞CB
- CLC
- RTS
-
- RD╧PEN╫RITE = *
- CMP #"W"
- BEQ +
- JMP RD╧PEN┴PPEND
- + JSR RD╙CAN─IR
- BCS +
- LDA #ACE┼RR╞ILE┼XISTS
- RD╧PEN┼RROR = *
- PHA
- JSR RD╥ESTORE═P┌P
- PLA
- STA ERRNO
- LDX OPEN╞CB
- LDA #LFNULL
- STA LFTABLE,X
- SEC
- LDA #FCB╬ULL
- RTS
- + LDA RD╞REE─IRENT+3
- CMP #ACE═EM╬ULL
- BNE +
- JSR RD┴DD─IR┬LOCK
- BCC +
- LDA #ACE┼RR─ISK╞ULL
- JMP RD╧PEN┼RROR
- ;** INITIALIZE DIRECTORY ENTRY
- + LDX #RD─IRENT╠ENGTH-1
- LDA #0
- - STA RD─IRENT┬UF,X
- DEX
- BPL -
- LDA #$00
- STA STRING┬UFFER+16
- LDX #$FF
- - INX
- LDA STRING┬UFFER,X
- STA RD─IRENT╬AME,X
- BNE -
- STX RD─IRENT╬AME╠EN
- LDA #<RD─IRENT─ATE
- LDY #>RD─IRENT─ATE
- JSR GETDATE
- LDY #0
- LDA RD╞ILE╘YPE
- CMP #"P"
- BNE +
- LDY #4
- + LDX #0
- - LDA RD╧PEN╫RITE╘YPES,Y
- STA RD─IRENT╘YPE,X
- INY
- INX
- CPX #4
- BCC -
- LDA #%01101100
- STA RD─IRENT╞LAGS
- LDA #%10000000
- STA RD─IRENT╒SAGE
- LDX #3
- - LDA #ACE═EM╬ULL
- STA RD─IRENT╚EAD╨TR,X
- STA RD─IRENT╘AIL╨TR,X
- DEX
- BPL -
- ;** INITIALIZE FCB BUFFER
- LDX #15
- LDA #$00 ;XX ASSUME NULL=$00
- - STA RD╞CBW┬UF╧PEN═ODE,X
- DEX
- BPL -
- LDA #"W"
- STA RD╞CBW┬UF╧PEN═ODE
- LDX #3
- - LDA RD╞REE─IRENT,X
- STA RD╞CBW┬UF─IRENT,X
- STA MP,X
- DEX
- BPL -
- ;** WRITE DIRECTORY ENTRY
- RD╧PEN╫RITE╞LUSH = *
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR STASH
- ;** WRITE FCB ENTRY
- LDX #0
- LDY RD╞CB╧FFSET
- - LDA RD╞CBW┬UF╧PEN═ODE,X
- STA RD╞CBW╧PEN═ODE,Y
- INY
- INX
- CPX #16
- BCC -
- JSR RD╥ESTORE═P┌P
- LDA OPEN╞CB
- CLC
- RTS
-
- RD╧PEN╫RITE╘YPES = *
- .ASC "SEQ"
- .BYTE $00
- .ASC "PRG"
- .BYTE $00
-
- RD╧PEN┴PPEND = *
- CMP #"A"
- BEQ +
- LDA #ACE┼RR╔NVALID╞ILE═ODE
- JMP RD╧PEN┼RROR
- + JSR RD╙CAN─IR
- BCC +
- LDA ERRNO
- JMP RD╧PEN┼RROR
- + LDA RD─IRENT╞LAGS
- BPL +
- LDA #ACE┼RR╧PEN─IRECTORY
- JMP RD╧PEN┼RROR
- + AND #%00100000
- BNE +
- LDA #ACE┼RR╨ERMISSION─ENIED
- JMP RD╧PEN┼RROR
- + LDA RD─IRENT╞LAGS
- ORA #%00001000
- STA RD─IRENT╞LAGS
- LDA #<RD─IRENT─ATE
- LDY #>RD─IRENT─ATE
- JSR GETDATE
- LDA #"W"
- STA RD╞CBW┬UF╧PEN═ODE
- LDX #3
- - LDA RD─IRENT╘AIL╨TR,X
- STA RD╞CBW┬UF╞ILE╨TR,X
- STA MP,X
- LDA RD─IRENT┬YTES,X
- STA RD╞CBW┬UF╞ILE╙IZE,X
- LDA RD─IRENT╨TR,X
- STA RD╞CBW┬UF─IRENT,X
- DEX
- BPL -
- LDA #$06
- STA RD╞CBW┬UF╞ILE╨TR+0
- LDA RD╞CBW┬UF╞ILE╨TR+1
- STA RD╞CBW┬UF┬LK╨AGE ;%%%
- LDA #<RD╧PEN┬LK╚DR
- LDY #>RD╧PEN┬LK╚DR
- STA ZP+0
- STY ZP+1
- LDA #6
- LDY #0
- JSR FETCH
- CLC
- LDA RD╞CBW┬UF╞ILE╨TR+0
- ADC RD╧PEN┬LK╚DR+4
- STA RD╞CBW┬UF╞ILE╨TR+0
- LDA RD╞CBW┬UF╞ILE╨TR+1
- ADC RD╧PEN┬LK╚DR+5
- STA RD╞CBW┬UF╞ILE╨TR+1
- SEC
- LDA #250
- SBC RD╧PEN┬LK╚DR+4
- STA RD╞CBW┬UF╥EM┬YTES+0
- LDX RD╧PEN┬LK╚DR+0
- DEX
- TXA
- SBC RD╧PEN┬LK╚DR+5
- STA RD╞CBW┬UF╥EM┬YTES+1
- LDX #3
- - LDA RD─IRENT╨TR,X
- STA MP,X
- DEX
- BPL -
- JMP RD╧PEN╫RITE╞LUSH
-
- RD╧PEN┬LK╚DR .BUF 6
-
- RD╫ORK─IR .BUF 4
- RD─IRENT╨TR .BUF 4
- RD╞REE─IRENT .BUF 4
- RD╙CAN─IR╧FFSET .BUF 1
-
- RD╙CAN─IR = * ;( STRING┬UFFER=FILENAME, [RD╫ORK─IR] ) : [RD─IRENT╨TR]=DIRENT
- LDX #3
- - LDA RD╫ORK─IR,X
- STA MP,X
- LDA #ACE═EM╬ULL
- STA RD╞REE─IRENT,X
- DEX
- BPL -
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR FETCH
- LDX #3
- - LDA RD─IRENT╚EAD╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #<WORKBUF
- LDY #>WORKBUF
- STA ZP+0
- STY ZP+1
-
- RD╙CAN─IR╬EXT┬LOCK = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BNE +
- LDA #ACE┼RR╞ILE╬OT╞OUND
- STA ERRNO
- SEC
- RTS
- + LDA #<256
- LDY #>256
- JSR FETCH
- LDA #$10
- STA RD╙CAN─IR╧FFSET
-
- RD╙CAN─IR╬EXT─IRENT = *
- LDX RD╙CAN─IR╧FFSET
- LDA RD─IRENT╒SAGE-RD─IRENT┬UF+WORKBUF,X
- BMI +
- LDA RD╞REE─IRENT+3
- CMP #ACE═EM╬ULL
- BNE RD╙CAN─IR├ONTINUE
- LDX #3
- - LDA MP,X
- STA RD╞REE─IRENT,X
- DEX
- BPL -
- LDA RD╙CAN─IR╧FFSET
- STA RD╞REE─IRENT+0
- JMP RD╙CAN─IR├ONTINUE
- + LDY #0
- - LDA RD─IRENT╬AME-RD─IRENT┬UF+WORKBUF,X
- CMP STRING┬UFFER,Y
- BNE RD╙CAN─IR├ONTINUE
- INX
- INY
- CMP #0
- BNE -
- LDA RD╙CAN─IR╧FFSET
- STA MP+0
- LDX #3
- - LDA MP,X
- STA RD─IRENT╨TR,X
- DEX
- BPL -
- LDX RD╙CAN─IR╧FFSET
- LDY #0
- - LDA WORKBUF,X
- STA RD─IRENT┬UF,Y
- INX
- INY
- CPY #RD─IRENT╠ENGTH
- BCC -
- CLC
- RTS
-
- RD╙CAN─IR├ONTINUE = *
- CLC
- LDA RD╙CAN─IR╧FFSET
- ADC #RD─IRENT╠ENGTH
- STA RD╙CAN─IR╧FFSET
- BCC RD╙CAN─IR╬EXT─IRENT
- LDX #3
- - LDA WORKBUF,X
- STA MP,X
- DEX
- BPL -
- LDA #$00
- STA MP+0
- JMP RD╙CAN─IR╬EXT┬LOCK
-
- RD┴DD─IR┬LOCK = * ;( [RD╫ORK─IR] ) : [RD╞REE─IRENT], .├╙=ERR
- ;** ALLOC NEW BLOCK
- LDA #$00 ;XX
- STA RD═ALLOC╞LAGS
- LDA #1
- JSR RD═ALLOC
- BCC +
- LDA #ACE┼RR─ISK╞ULL
- STA ERRNO
- SEC
- RTS
- ;** INIT NEW BLOCK
- + JSR RD╔NIT─IR┬LOCK╙TRBUF
- LDA #<WORKBUF
- LDY #>WORKBUF
- STA ZP+0
- STY ZP+1
- LDA #<256
- LDY #>256
- JSR STASH
- LDX #3
- - LDA MP,X
- STA RD╞REE─IRENT,X
- DEX
- BPL -
-
- ;** MODIFY WORKING DIRECTORY DIRENT
- LDX #3
- - LDA RD╫ORK─IR,X
- STA MP,X
- DEX
- BPL -
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR FETCH
- LDX #3
- - LDA RD─IRENT╘AIL╨TR,X
- STA RD╨REV┬LK╨TR,X
- LDA RD╞REE─IRENT,X
- STA RD─IRENT╘AIL╨TR,X
- DEX
- BPL -
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR STASH
- ;** LINK PREVIOUS DIR BLOCK
- LDX #3
- - LDA RD╨REV┬LK╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #$01
- STA MP+0
- LDA #<RD─IRENT╘AIL╨TR+1
- LDY #>RD─IRENT╘AIL╨TR+1
- STA ZP+0
- STY ZP+1
- LDA #3
- LDY #0
- JSR STASH
- ;** CLEAN UP
- LDA #$10
- STA RD╞REE─IRENT+0
- CLC
- RTS
-
- RD╨REV┬LK╨TR .BUF 4
-
- RD╥EAD├HUNK = SYSWORK+8
- RD╞CBR┬UF .BUF 12
- RD╞CBR┬UF╧PEN═ODE = RD╞CBR╧PEN═ODE-RD╞CBR╧PEN═ODE+RD╞CBR┬UF
- RD╞CBR┬UF╬EXT┬LK = RD╞CBR╬EXT┬LK-RD╞CBR╧PEN═ODE+RD╞CBR┬UF
- RD╞CBR┬UF╞ILE╨TR = RD╞CBR╞ILE╨TR-RD╞CBR╧PEN═ODE+RD╞CBR┬UF
- RD╞CBR┬UF┬LK┬YTES = RD╞CBR┬LK┬YTES-RD╞CBR╧PEN═ODE+RD╞CBR┬UF
-
- RD╥EAD = * ;( ) :.┴┘=(ZW)=LEN,.┌=EOF
- LDA READ╞CB
- ASL
- ASL
- ASL
- ASL
- STA RD╞CB╧FFSET
- JSR RD╙AVE═P┌P
- LDX RD╞CB╧FFSET
- LDY #0
- - LDA RD╞CBR╧PEN═ODE,X
- STA RD╞CBR┬UF,Y
- INX
- INY
- CPY #10
- BCC -
- LDA RD╞CBR┬UF╧PEN═ODE
- CMP #"R"
- BEQ RD╥EAD═ORE
- LDA #ACE┼RR╞ILE╬OT╔NPUT
-
- RD╥EAD┼RROR = *
- STA ERRNO
- LDA #0
- LDY #0
- SEC
- RD╥EAD┼XIT = *
- PHP
- STA ZW+0
- STY ZW+1
- LDY #0
- LDX RD╞CB╧FFSET
- - LDA RD╞CBR┬UF,Y
- STA RD╞CBR╧PEN═ODE,X
- INX
- INY
- CPY #10
- BCC -
- JSR RD╥ESTORE═P┌P
- LDA ZW+0
- LDY ZW+1
- PLP
- RTS
-
- RD╥EAD═ORE = *
- LDA READ═AX╠EN+0
- ORA READ═AX╠EN+1
- BNE +
- - LDA READ╠ENGTH+0
- ORA READ╠ENGTH+1
- PHP
- LDA READ╠ENGTH+0
- LDY READ╠ENGTH+1
- PLP
- CLC
- JMP RD╥EAD┼XIT
- + LDA RD╞CBR┬UF┬LK┬YTES+0
- LDY RD╞CBR┬UF┬LK┬YTES+1
- STA RD╥EAD├HUNK+0
- STY RD╥EAD├HUNK+1
- ORA RD╥EAD├HUNK+1
- BNE +
- LDA #$06
- STA RD╞CBR┬UF╞ILE╨TR+0
- LDA #$00
- STA MP+0
- LDX #2
- - LDA RD╞CBR┬UF╬EXT┬LK,X
- STA RD╞CBR┬UF╞ILE╨TR+1,X
- STA MP+1,X
- DEX
- BPL -
- LDA MP+3
- CMP #ACE═EM╬ULL
- BEQ --
- LDA #<WORKBUF
- LDY #>WORKBUF
- STA ZP+0
- STY ZP+1
- LDA #6
- LDY #0
- JSR FETCH
- LDA WORKBUF+$04
- LDY WORKBUF+$05
- STA RD╞CBR┬UF┬LK┬YTES+0
- STY RD╞CBR┬UF┬LK┬YTES+1
- LDX #2
- - LDA WORKBUF+$01,X
- STA RD╞CBR┬UF╬EXT┬LK,X
- DEX
- BPL -
- JMP RD╥EAD═ORE
-
- + LDA RD╥EAD├HUNK+0
- CMP READ═AX╠EN+0
- LDA RD╥EAD├HUNK+1
- SBC READ═AX╠EN+1
- BCC +
- LDA READ═AX╠EN+0
- LDY READ═AX╠EN+1
- STA RD╥EAD├HUNK+0
- STY RD╥EAD├HUNK+1
- + LDX #3
- - LDA RD╞CBR┬UF╞ILE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA READ╨TR+0
- LDY READ╨TR+1
- STA ZP+0
- STY ZP+1
- LDA RD╥EAD├HUNK+0
- LDY RD╥EAD├HUNK+1
- JSR FETCH
-
- CLC
- LDA READ╨TR+0
- ADC RD╥EAD├HUNK+0
- STA READ╨TR+0
- LDA READ╨TR+1
- ADC RD╥EAD├HUNK+1
- STA READ╨TR+1
- CLC
- LDA READ╠ENGTH+0
- ADC RD╥EAD├HUNK+0
- STA READ╠ENGTH+0
- LDA READ╠ENGTH+1
- ADC RD╥EAD├HUNK+1
- STA READ╠ENGTH+1
- CLC
- LDA RD╞CBR┬UF╞ILE╨TR+0
- ADC RD╥EAD├HUNK+0
- STA RD╞CBR┬UF╞ILE╨TR+0
- LDA RD╞CBR┬UF╞ILE╨TR+1
- ADC RD╥EAD├HUNK+1
- STA RD╞CBR┬UF╞ILE╨TR+1
- SEC
- LDA READ═AX╠EN+0
- SBC RD╥EAD├HUNK+0
- STA READ═AX╠EN+0
- LDA READ═AX╠EN+1
- SBC RD╥EAD├HUNK+1
- STA READ═AX╠EN+1
- SEC
- LDA RD╞CBR┬UF┬LK┬YTES+0
- SBC RD╥EAD├HUNK+0
- STA RD╞CBR┬UF┬LK┬YTES+0
- LDA RD╞CBR┬UF┬LK┬YTES+1
- SBC RD╥EAD├HUNK+1
- STA RD╞CBR┬UF┬LK┬YTES+1
- JMP RD╥EAD═ORE
-
- RD├FG╧FFSET .BUF 1
- RD╫RITE├HUNK = SYSWORK+4
-
- RD╫RITE = * ;( WRITE╠ENGTH, WRITE╨TR ) : (ZP)=DATA╙TART
- STX RD├FG╧FFSET
- LDA CONFIG┬UF+$03,X
- STA RD═ALLOC╞LAGS
- LDA REGSAVE+1 ;FD
- ASL
- ASL
- ASL
- ASL
- STA RD╞CB╧FFSET
- JSR RD╙AVE═P┌P
- LDX RD╞CB╧FFSET
- LDY #0
- - LDA RD╞CBW╧PEN═ODE,X
- STA RD╞CBW┬UF,Y
- INX
- INY
- CPY #16
- BCC -
- LDA RD╞CBW┬UF╧PEN═ODE
- CMP #"W"
- BEQ RD╫RITE═ORE
- LDA #ACE┼RR╞ILE╬OT╧UTPUT
-
- RD╫RITE┼RROR = *
- STA ERRNO
- LDA #0
- LDY #0
- SEC
- RD╫RITE┼XIT = *
- PHP
- LDY #0
- LDX RD╞CB╧FFSET
- - LDA RD╞CBW┬UF,Y
- STA RD╞CBW╧PEN═ODE,X
- INX
- INY
- CPY #16
- BCC -
- JSR RD╥ESTORE═P┌P
- PLP
- RTS
-
- RD╫RITE═ORE = *
- LDA WRITE╠ENGTH+0
- ORA WRITE╠ENGTH+1
- BNE +
- CLC
- JMP RD╫RITE┼XIT
- ;** GET NEW BLOCK IF OLD ONE FULL
- + LDA RD╞CBW┬UF╥EM┬YTES+0
- ORA RD╞CBW┬UF╥EM┬YTES+1
- BEQ +
- JMP RD╫RITE├OPY
- ;** GET NEW BLOCK
- + LDX WRITE╠ENGTH+1
- LDA WRITE╠ENGTH+0
- BEQ +
- INX
- + TXA
- JSR RD╓AR═ALLOC
- BCC +
- LDA #ACE┼RR─ISK╞ULL
- JMP RD╫RITE┼RROR
- + TAX
- LDA #0
- SEC
- SBC #6
- STA RD╞CBW┬UF╥EM┬YTES+0
- TXA
- SBC #0
- STA RD╞CBW┬UF╥EM┬YTES+1
- ;** INITIALIZE NEW BLOCK
- STX RD╬EW┬LK─ATA+0
- LDA #<RD╬EW┬LK─ATA
- LDY #>RD╬EW┬LK─ATA
- STA ZP+0
- STY ZP+1
- LDA #6
- LDY #0
- JSR STASH ;NECESSARY?
- ;** LINK IN BLOCK, INIT FCB
- SEC
- LDA RD╞CBW┬UF╞ILE╨TR+1
- SBC RD╞CBW┬UF┬LK╨AGE
- SEC
- SBC #1
- STA RD╧LD┬LK─ATA+5
- LDA #250
- STA RD╧LD┬LK─ATA+4
- LDX #3
- - LDA MP,X
- LDY RD╞CBW┬UF╞ILE╨TR,X
- STA RD╞CBW┬UF╞ILE╨TR,X
- STA RD╧LD┬LK─ATA,X
- STY MP,X
- DEX
- BPL -
- LDA RD╞CBW┬UF┬LK╨AGE
- STA MP+1
- LDA #$01
- STA MP+0
- LDA RD╞CBW┬UF╞ILE╨TR+1
- STA RD╞CBW┬UF┬LK╨AGE
- LDA #<RD╧LD┬LK─ATA+1
- LDY #>RD╧LD┬LK─ATA+1
- STA ZP+0
- STY ZP+1
- LDA #5
- LDX MP+3
- CPX #ACE═EM╬ULL
- BNE +
- LDX #3
- - LDA RD╞CBW┬UF─IRENT,X
- STA MP,X
- DEX
- BPL -
- CLC
- LDA MP+0
- ADC #RD─IRENT╚EAD╨TR-RD─IRENT┬UF+1
- STA MP+0
- LDA #3
- + LDY #0
- JSR STASH
- LDA #$06
- STA RD╞CBW┬UF╞ILE╨TR+0
-
- ;** COPY DATA INTO BLOCK
- RD╫RITE├OPY = *
- LDX WRITE╠ENGTH+0
- LDY WRITE╠ENGTH+1
- CPX RD╞CBW┬UF╥EM┬YTES+0
- TYA
- SBC RD╞CBW┬UF╥EM┬YTES+1
- BCC +
- LDX RD╞CBW┬UF╥EM┬YTES+0
- LDY RD╞CBW┬UF╥EM┬YTES+1
- + STX RD╫RITE├HUNK+0
- STY RD╫RITE├HUNK+1
- LDX #3
- - LDA RD╞CBW┬UF╞ILE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA WRITE╨TR+0
- LDY WRITE╨TR+1
- STA ZP+0
- STY ZP+1
- LDA RD╫RITE├HUNK+0
- LDY RD╫RITE├HUNK+1
- JSR STASH
-
- ;** UPDATE CONTROL VARIABLES
- CLC
- LDA RD╞CBW┬UF╞ILE╨TR+0
- ADC RD╫RITE├HUNK+0
- STA RD╞CBW┬UF╞ILE╨TR+0
- LDA RD╞CBW┬UF╞ILE╨TR+1
- ADC RD╫RITE├HUNK+1
- STA RD╞CBW┬UF╞ILE╨TR+1
- SEC
- LDA RD╞CBW┬UF╥EM┬YTES+0
- SBC RD╫RITE├HUNK+0
- STA RD╞CBW┬UF╥EM┬YTES+0
- LDA RD╞CBW┬UF╥EM┬YTES+1
- SBC RD╫RITE├HUNK+1
- STA RD╞CBW┬UF╥EM┬YTES+1
- CLC
- LDA WRITE╨TR+0
- ADC RD╫RITE├HUNK+0
- STA WRITE╨TR+0
- LDA WRITE╨TR+1
- ADC RD╫RITE├HUNK+1
- STA WRITE╨TR+1
- SEC
- LDA WRITE╠ENGTH+0
- SBC RD╫RITE├HUNK+0
- STA WRITE╠ENGTH+0
- LDA WRITE╠ENGTH+1
- SBC RD╫RITE├HUNK+1
- STA WRITE╠ENGTH+1
- CLC
- LDA RD╞CBW┬UF╞ILE╙IZE+0
- ADC RD╫RITE├HUNK+0
- STA RD╞CBW┬UF╞ILE╙IZE+0
- LDA RD╞CBW┬UF╞ILE╙IZE+1
- ADC RD╫RITE├HUNK+1
- STA RD╞CBW┬UF╞ILE╙IZE+1
- BCC +
- INC RD╞CBW┬UF╞ILE╙IZE+2
- BNE +
- INC RD╞CBW┬UF╞ILE╙IZE+3
- + JMP RD╫RITE═ORE
-
- RD╬EW┬LK─ATA = * ;GETS MODIFIED
- .BYTE $00
- .BYTE ACE═EM╬ULL,ACE═EM╬ULL,ACE═EM╬ULL
- .BYTE $00,$00
- RD╧LD┬LK─ATA = * ;GETS MODIFIED
- .BYTE $00
- .BYTE ACE═EM╬ULL,ACE═EM╬ULL,ACE═EM╬ULL
- .BYTE 250,$00
-
- RD├LOSE = * ;( CLOSE╞D )
- LDA CLOSE╞D
- ASL
- ASL
- ASL
- ASL
- STA RD╞CB╧FFSET
- TAX
- LDA RD╞CBR╧PEN═ODE,X
- CMP #"W"
- BEQ +
- RTS
- + LDY #0
- - LDA RD╞CBW╧PEN═ODE,X
- STA RD╞CBW┬UF,Y
- INX
- INY
- CPY #16
- BCC -
- JSR RD╙AVE═P┌P
- ;** TIDY UP LAST BLOCK CONTROL INFO
- LDX #3
- - LDA RD╞CBW┬UF╞ILE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA RD╞CBW┬UF┬LK╨AGE
- STA MP+1
- LDA #$01
- STA MP+0
- SEC
- LDA RD╞CBW┬UF╞ILE╨TR+0
- SBC #$06
- STA RD╧LD┬LK─ATA+4
- LDA RD╞CBW┬UF╞ILE╨TR+1
- SBC RD╞CBW┬UF┬LK╨AGE
- STA RD╧LD┬LK─ATA+5
- LDA #ACE═EM╬ULL
- STA RD╧LD┬LK─ATA+1
- STA RD╧LD┬LK─ATA+2
- STA RD╧LD┬LK─ATA+3
- LDA #<RD╧LD┬LK─ATA+1
- LDY #>RD╧LD┬LK─ATA+1
- STA ZP+0
- STY ZP+1
- LDA #5
- LDY #0
- JSR STASH
- ;** TIDY UP DIRECTORY ENTRY
- LDX #3
- - LDA MP,X
- STA RD╞CBW┬UF╞ILE╨TR,X
- LDA RD╞CBW┬UF─IRENT,X
- STA MP,X
- DEX
- BPL -
- LDA #$00
- STA RD╞CBW┬UF╞ILE╨TR+0
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR FETCH
- LDA RD─IRENT╞LAGS
- AND #%11110111
- STA RD─IRENT╞LAGS
- LDX #3
- - LDA RD╞CBW┬UF╞ILE╨TR,X
- STA RD─IRENT╘AIL╨TR,X
- LDA RD╞CBW┬UF╞ILE╙IZE,X
- STA RD─IRENT┬YTES,X
- DEX
- BPL -
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR STASH
- JSR RD╥ESTORE═P┌P
- RTS
-
- RD┬LOAD┴DDR .BUF 2
- RD┬LOAD╘OP .BUF 2
- RD┬LOAD╠EN .BUF 2
- RD┬LOAD╞D .BUF 1
- RD┬LOAD┬YTES .BUF 2
- RD┬LOAD╬AME .BUF 2
- RD┬LOAD┼ND .BUF 2
-
- RD┬LOAD = *
- ;** BINARY-LOAD A FILE
- ;** THIS ROUTINE IS FAIRLY HIGH-LEVEL AND CALLS THE REGULAR FILE SYSTEM
- ;** CALLS; MAKE SURE ONE FCB IS FREE
- LDX #1
- - LDA BLOAD┴DDRESS,X
- STA RD┬LOAD┴DDR,X
- LDA ZP,X
- STA RD┬LOAD╬AME,X
- DEX
- BPL -
- SEC
- LDA ZW+0
- STA RD┬LOAD╘OP+0
- SBC BLOAD┴DDRESS+0
- STA RD┬LOAD╠EN+0
- LDA ZW+1
- STA RD┬LOAD╘OP+1
- SBC BLOAD┴DDRESS+1
- STA RD┬LOAD╠EN+1
- ;** (ZP) ALREADY CONTAINS FILENAME
- LDA #"R"
- JSR OPEN
- STA RD┬LOAD╞D
- BCC +
- RTS
- + LDA #<RD┬LOAD┬YTES
- LDY #>RD┬LOAD┬YTES
- STA ZP+0
- STY ZP+1
- LDA #2
- LDY #0
- LDX RD┬LOAD╞D
- JSR READ
- BCS RD┬LOAD┼RR├LOSE
- LDA RD┬LOAD┴DDR+0
- LDY RD┬LOAD┴DDR+1
- STA ZP+0
- STY ZP+1
- LDA RD┬LOAD╠EN+0
- LDY RD┬LOAD╠EN+1
- LDX RD┬LOAD╞D
- JSR READ
- BCC +
- RD┬LOAD┼RR├LOSE = *
- LDA ERRNO
- PHA
- LDA RD┬LOAD╞D
- JSR CLOSE
- PLA
- STA ERRNO
- JSR RD┬LOAD├LEANUP
- SEC
- RTS
-
- + CLC
- ADC RD┬LOAD┴DDR+0
- STA RD┬LOAD┼ND+0
- TYA
- ADC RD┬LOAD┴DDR+1
- STA RD┬LOAD┼ND+1
- LDA #<RD┬LOAD┬YTES
- LDY #>RD┬LOAD┬YTES
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- LDX RD┬LOAD╞D
- JSR READ
- BEQ +
-
- LDA #ACE┼RR┬LOAD╘RUNCATED
- STA ERRNO
- JMP RD┬LOAD┼RR├LOSE
-
- + LDA RD┬LOAD╞D
- JSR CLOSE
- RD┬LOAD├LEANUP = *
- LDX #1
- - LDA RD┬LOAD╬AME,X
- STA ZP,X
- LDA RD┬LOAD╘OP,X
- STA ZW,X
- DEX
- BPL -
- LDA RD┬LOAD┼ND+0
- LDY RD┬LOAD┼ND+1
- CLC
- RTS
-
- RD┼XTRACT╞ILETYPE = * ;( STRING┬UFFER, .╪=STRLEN ) : .┴=FILETYPE, STR┬UF
- LDA #"S"
- CPX #2
- BCS +
- - LDA #"S"
- SEC
- RTS
- + LDA STRING┬UFFER-2,X
- CMP #","
- BNE -
- LDA #0
- STA STRING┬UFFER-2,X
- LDA STRING┬UFFER-1,X
- CLC
- RTS
-
- RD╥EMOVE─EVICE .BUF 1
- RD╥EMOVE┬LK╚DR .BUF 7
- RDUMMY .BUF 1
-
- RD╥EMOVE = * ;( .┴=DEVICE, .┘=SCAN╨OS ) : .├├=OK
- STA RD╥EMOVE─EVICE
- ;** FETCH FILENAME STRING FOR DIR-SCAN
- LDX #0
- - LDA (ZP),Y
- STA STRING┬UFFER,X
- BEQ +
- INX
- INY
- BNE -
- + JSR RD┼XTRACT╞ILETYPE
- JSR RD╙AVE═P┌P
- ;** GET WORKING DIRECTORY FOR DIR-SCAN
- LDA RD╥EMOVE─EVICE
- ASL
- TAY
- INY
- INY
- INY
- INY
- LDX #0
- - LDA DEVICE╘ABLE,Y
- STA RD╫ORK─IR,X
- INY
- INX
- CPX #4
- BCC -
- ;** SCAN DIRECTORY, GET FILE ENTRY
- JSR RD╙CAN─IR
- BCC +
- JSR RD╥ESTORE═P┌P
- SEC
- RTS
- ;** REMOVE ALL BLOCKS OF FILE
- + LDX #3
- - LDA RD─IRENT╚EAD╨TR,X
- STA MP,X
- DEX
- BPL -
- RD╥EMOVE╬EXT┬LOCK = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BEQ RD╥EMOVE─IRENT
- ;*** FETCH BLOCK HEADER
- LDA #<RD╥EMOVE┬LK╚DR
- LDY #>RD╥EMOVE┬LK╚DR
- STA ZP+0
- STY ZP+1
- LDA #6
- LDY #0
- JSR FETCH
- ;*** FREE BLOCK
- LDA RD╥EMOVE┬LK╚DR+0
- JSR RD╞REE
- ;*** GO TO NEXT BLOCK
- LDX #2
- - LDA RD╥EMOVE┬LK╚DR+1,X
- STA MP+1,X
- DEX
- BPL -
- LDA #0
- STA MP+0
- JMP RD╥EMOVE╬EXT┬LOCK
-
- ;** MARK DIRECTORY ENTRY DELETED
- RD╥EMOVE─IRENT = *
- LDA RD─IRENT╒SAGE
- AND #%01111111
- STA RD─IRENT╒SAGE
- ;** WRITE OUT UPDATED DIRECTORY ENTRY
- LDX #3
- - LDA RD─IRENT╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR STASH
- ;** TIDY UP AND EXIT
- JSR RD╥ESTORE═P┌P
- CLC
- RTS
-
- RD╥ENAME─EVICE .BUF 1
- RD╥ENAME╙CAN .BUF 1
- RD╥ENAME╘YPE .BUF 1
- RD╥ENAME╬EW╬AME .BUF 17
-
- RD╥ENAME = * ;( .┴=DEVICE, .┘=SCAN╨OS ) : .├├=OK
- STA RD╥ENAME─EVICE
- STY RD╥ENAME╙CAN
- ;** SCAN FOR NEW NAME (SHOULD NOT EXIST)
- LDY #0
- LDX #0
- - LDA (ZW),Y
- STA STRING┬UFFER,X
- BEQ +
- INX
- INY
- BNE -
- + JSR RD┼XTRACT╞ILETYPE
- BCC +
- LDA #0
- + STA RD╥ENAME╘YPE
- LDA #0
- STA STRING┬UFFER+16
- LDX #16
- - LDA STRING┬UFFER,X
- STA RD╥ENAME╬EW╬AME,X
- DEX
- BPL -
- JSR RD╙AVE═P┌P
- ;** GET WORKING DIRECTORY FOR NEW-NAME-DIR-SCAN
- LDA RD╥ENAME─EVICE
- ASL
- TAY
- INY
- INY
- INY
- INY
- LDX #0
- - LDA DEVICE╘ABLE,Y
- STA RD╫ORK─IR,X
- INY
- INX
- CPX #4
- BCC -
- ;** SCAN DIRECTORY, GET FILE ENTRY
- JSR RD╙CAN─IR
- BCS +
- JSR RD╥ESTORE═P┌P
- LDA #ACE┼RR╞ILE┼XISTS
- STA ERRNO
- SEC
- RTS
- ;** SCAN FOR DIRENT TO MODIFY
- + LDA RD┌P╙AVE+0
- LDY RD┌P╙AVE+1
- STA ZP+0
- STY ZP+1
- LDY RD╥ENAME╙CAN
- LDX #0
- - LDA (ZP),Y
- STA STRING┬UFFER,X
- BEQ +
- INX
- INY
- BNE -
- + JSR RD┼XTRACT╞ILETYPE
- JSR RD╙AVE═P┌P
- ;** SCAN DIRECTORY, GET FILE ENTRY
- JSR RD╙CAN─IR
- BCC +
- JSR RD╥ESTORE═P┌P
- SEC
- RTS
- + LDX #16
- - LDA RD╥ENAME╬EW╬AME,X
- STA RD─IRENT╬AME,X
- DEX
- BPL -
- LDX #2
- - LDA RD╥ENAME╦NOWN╘YPES1,X
- CMP RD╥ENAME╘YPE
- BEQ +
- DEX
- BPL -
- JMP ++
- + STA RD─IRENT╘YPE+0
- LDA RD╥ENAME╦NOWN╘YPES2,X
- STA RD─IRENT╘YPE+1
- LDA RD╥ENAME╦NOWN╘YPES3,X
- STA RD─IRENT╘YPE+2
- ;** WRITE OUT UPDATED DIRECTORY ENTRY
- + LDX #3
- - LDA RD─IRENT╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #<RD─IRENT┬UF
- LDY #>RD─IRENT┬UF
- STA ZP+0
- STY ZP+1
- LDA #RD─IRENT╠ENGTH
- LDY #0
- JSR STASH
- ;** TIDY UP AND EXIT
- JSR RD╥ESTORE═P┌P
- CLC
- RTS
-
- RD╥ENAME╦NOWN╘YPES1 .ASC "SPU"
- RD╥ENAME╦NOWN╘YPES2 .ASC "ERS"
- RD╥ENAME╦NOWN╘YPES3 .ASC "QGR"
-
- ;THE END + BLANK LINE
-
-