mirror of
https://github.com/fachat/xa65.git
synced 2024-11-20 11:32:34 +00:00
137 lines
2.4 KiB
PHP
137 lines
2.4 KiB
PHP
/* dos wedge code for inlining into routines */
|
|
|
|
/* define SA51 to allow stand-alone generation */
|
|
#ifdef SA51
|
|
.word SA51
|
|
* = SA51
|
|
#endif
|
|
/* otherwise assume this has been inlined via #include <> */
|
|
|
|
/* define BASIC51 to use BASIC interface stub */
|
|
#ifdef BASIC51
|
|
jsr $aefd
|
|
jsr $ad9e
|
|
jsr $b6a3 ; leaving a=len x=lb y=hb
|
|
#endif
|
|
/* otherwise load a with length, x/y = lb/hb */
|
|
|
|
.(
|
|
|
|
crunchsrv = $a57c
|
|
setlfs = $ffba
|
|
setnam = $ffbd
|
|
open = $ffc0
|
|
close = $ffc3
|
|
clall = $ffe7
|
|
chkin = $ffc6
|
|
chkout = $ffc9
|
|
clrchn = $ffcc
|
|
chrin = $ffcf
|
|
getin = $ffe4
|
|
print = $ffd2
|
|
readst = $ffb7
|
|
chrout = print
|
|
ready = $e37b
|
|
cnvrtdec = $bdcd
|
|
erasealine = 59903
|
|
workzp = $a5
|
|
|
|
sta work1
|
|
sty workzp+1
|
|
stx workzp
|
|
; set the filename (directory, error channel and commands)
|
|
; a, x and y already setup for us
|
|
jsr setnam
|
|
|
|
; are we requesting just the error channel?
|
|
ldx work1
|
|
beq errchn ; yes
|
|
|
|
; are we requesting a disk directory?
|
|
ldy #0
|
|
lda (workzp),y
|
|
cmp #"$"
|
|
bne errchn ; no
|
|
|
|
; yes, display directory
|
|
lda #$01
|
|
ldx 186
|
|
ldy #$00
|
|
jsr setlfs
|
|
jsr open ; open 1,dev,0 to read as BASIC formatted text
|
|
|
|
lda #147
|
|
jsr print
|
|
clc
|
|
ldx #01
|
|
jsr chkin
|
|
bcs dirdone
|
|
jsr chrin
|
|
jsr chrin
|
|
lda #$0d
|
|
jsr print
|
|
; routine to print each line of the directory
|
|
dirpll jsr chrin
|
|
jsr chrin ; skip line link
|
|
jsr chrin ; grab length (as line #)
|
|
sta work1
|
|
jsr chrin
|
|
sta work2 ; stash for later
|
|
jsr readst ; EOF or other error?
|
|
bne dirdone ; yes, end directory
|
|
lda work2 ; no, print this line
|
|
ldx work1
|
|
jsr cnvrtdec ; first the number/length
|
|
lda #$20
|
|
jsr print ; and a space
|
|
jsr chrin
|
|
dirpl jsr print ; then the filename in quotes and filetype until a null
|
|
jsr chrin
|
|
adc #0
|
|
bne dirpl ; no null yet
|
|
lda #13 ; yes, null, print CR
|
|
jsr print
|
|
jmp dirpll ; and do next line
|
|
; finish directory and clear channel, then fall through to errchn
|
|
dirdone lda #1
|
|
jsr close
|
|
jsr clall
|
|
lda #0
|
|
jsr setnam
|
|
|
|
; common routine for error channel and disk commands
|
|
errchn lda #15
|
|
ldx $ba
|
|
ldy #15
|
|
jsr setlfs ; open 15,8,15,command
|
|
jsr open
|
|
|
|
lda #18
|
|
jsr print ; rvson
|
|
; read until there's a null, adding $0d for devices that don't
|
|
errchnl ldx #15
|
|
jsr chkin
|
|
jsr chrin
|
|
sta work1
|
|
jsr readst ; power 64 sucks sometimes =-(
|
|
sta work2 ; its emulated messages have no $0d
|
|
lda work1
|
|
jsr print
|
|
lda work2
|
|
beq errchnl
|
|
lda work1
|
|
cmp #13
|
|
beq errchnd
|
|
lda #13
|
|
jsr print
|
|
errchnd lda #15
|
|
jsr close
|
|
jsr clall
|
|
lda #146
|
|
jsr print ; rvsoff
|
|
rts
|
|
|
|
work1 .byt 0
|
|
work2 .byt 0
|
|
.)
|