.DEFINE CHRIN $ffcf
.DEFINE CHROUT $ffd2
.DEFINE SAVE $ffd8
.DEFINE LOAD $ffd5
.DEFINE SETLFS $ffba
.DEFINE SETNAM $ffbd
.DEFINE OPEN $ffc0
.DEFINE CLOSE $ffc3
.DEFINE CHKIN $ffc6
.DEFINE READST $ffb7
.DEFINE CLALL $ffe7
.DEFINE STOP $ffe1
.DEFINE TALK $ffb4
.DEFINE TKSA $ff96
.DEFINE UNTLK $ffab
.DEFINE ACPTR $ffa5
.DEFINE LISTEN $ffb1
.DEFINE SECOND $ff93
.DEFINE UNLSN $ffae
.DEFINE DECOUT $bdd1 ; BASIC ROM, print number in $62-$63
.DEFINE Filename $0104
;----- dir
DiskDir:
sta tmpreg ; set up file
lda #36
sta.w Filename ; "$"
lda #$01 ; filename length
ldy #$00 ; secondary address
jsr SetupFile
jsr OPEN
bcs _derror
ldx #$01 ; input from channel 1
jsr CHKIN
bcs _derror
jsr CHRIN ; skip header
jsr CHRIN
_dirlp:
jsr _dirline
bcc _dirlp ; carry clear if not eof
_dclose:
lda #$01 ; close file
jsr CLOSE
jsr CLALL ; input back to keyboard
rts
_derror:
jsr _dclose
rts
_dirline:
jsr CHRIN ; skip obsolete bytes
jsr CHRIN
jsr READST ; check end of file
bne _dirend
jsr STOP ; check stop key
beq _dirend
jsr CHRIN ; get and print blocks
sta $63
jsr CHRIN
sta $62
jsr DECOUT
lda #32
jsr CHROUT
_dirnamelp:
jsr CHRIN
jsr CHROUT
bne _dirnamelp
lda #13
jsr CHROUT
_direndline:
clc
rts
_dirend:
sec
rts
;----- disk status
DiskStatus:
lda #$00 ; clear st
sta $90
lda $ba
jsr LISTEN ; check if device is present
jsr UNLSN
jsr READST
and #$83
bne _dserr
ldy #$0f ; secondary address (command)
lda #$00 ; no filename
jsr SetupFile
jsr OPEN
bcs _derror
ldx #$01 ; input from channel 1
jsr CHKIN
_derrout:
jsr CHRIN ; get and print disk status message
beq _derror
jsr CHROUT
cmp #13
bne _derrout
jmp _dclose
_dserr:
ldy #$00
_errl:
lda.w nodevice,y
jsr CHROUT
iny
cmp #13
bne _errl
rts
nodevice:
.DB "DEVICE NOT PRESENT",13
;----- set up file, a = filename length, y = secondary address
SetupFile:
pha
lda #$01 ; file number
ldx $ba ; current device
jsr SETLFS
pla
ldx #Filename&255
ldy #Filename/256
jsr SETNAM
rts
;----- save file, a = filename length
; from (source) to ($0100)
SaveFile:
ldy #$00
jsr SetupFile
lda #source
ldx $0100
ldy $0101
jsr SAVE
rts
;----- load file, a = filename length
LoadFile:
ldy #$00 ; secondary address (reloc)
jsr SetupFile
lda #$00 ; load flag
ldx #$00
ldy #$60 ; load to $6000
jsr LOAD
rts