mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-30 23:49:37 +00:00
433 lines
7.8 KiB
Plaintext
433 lines
7.8 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
devid .EQ $12
|
||
|
||
src .EQ $12
|
||
dst .EQ $14
|
||
*--------------------------------------
|
||
ILDR.DBuf .EQ $0C00
|
||
ILDR.IOBuf .EQ $1400
|
||
*--------------------------------------
|
||
ILDR.START .PH ILDR
|
||
|
||
ILDR.START1 jsr MLI check for file 'atinit'
|
||
.DA #MLI.GFINFO
|
||
.DA ILDR.GFINFO
|
||
bcs ILDR.ENUMPM
|
||
|
||
lda ILDR.GFINFO+S.FI.T
|
||
cmp #$E2 is 'atinit' correct file type?
|
||
bne ILDR.ENUMPM error - wrong file type
|
||
|
||
ldy #ILDR.ATINIT
|
||
lda /ILDR.ATINIT
|
||
jsr ILDR.LoadFile
|
||
bcc .1
|
||
|
||
.9 jmp ILDR.MLIERR
|
||
|
||
.1 lda IO.RROMBNK2 enable ROM
|
||
jsr $2000 execute ATinit
|
||
*--------------------------------------
|
||
* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF
|
||
*--------------------------------------
|
||
ILDR.ENUMPM .DO READCAT=1
|
||
|
||
lda LDR.MLIOL.P+1 Boot ZP.UNITNUM
|
||
sta ILDR.MLIRB.P+1
|
||
|
||
stz dst
|
||
lda /ILDR.DBuf
|
||
ldy #$02 read directory into buffer
|
||
ldx #0
|
||
|
||
.22 sta dst+1
|
||
sta ILDR.MLIRB.P+3 Data buf HI
|
||
sty ILDR.MLIRB.P+4 Blk Num LO
|
||
stx ILDR.MLIRB.P+5 Blk Num HI
|
||
|
||
jsr MLI
|
||
.DA #MLI.READBLOCK
|
||
.DA ILDR.MLIRB.P
|
||
bcc .23
|
||
|
||
jmp ILDR.MLIERR
|
||
|
||
.23 ldy #$03 get next block# from link
|
||
lda (dst),y
|
||
tax
|
||
dey
|
||
ora (dst),y 00 00 -> Last Block
|
||
beq .28
|
||
|
||
lda (dst),y
|
||
tay
|
||
lda dst+1
|
||
inc
|
||
inc add $200 to buffer pointer
|
||
cmp /ILDR.DBuf+$800 until it points past end of buffer.
|
||
bcc .22 if ok, read next block.
|
||
|
||
.28 .FIN
|
||
*--------------------------------------
|
||
.DO M.PM=1
|
||
|
||
jsr ILDR.EnumInit
|
||
|
||
.1 ldx #S.FI.T.BIN
|
||
ldy #ILDR.PMPFX
|
||
lda /ILDR.PMPFX
|
||
clc prefix
|
||
jsr ILDR.EnumNext
|
||
bcs .8
|
||
|
||
jsr ILDR.LoadFilePBuf
|
||
bcs ILDR.MLIERR
|
||
|
||
ldx #3
|
||
|
||
.2 lda idxl,x
|
||
pha
|
||
dex
|
||
bpl .2
|
||
|
||
jsr $2000
|
||
|
||
bit IO.RROMBNK2 enable ROM
|
||
|
||
ldx #0
|
||
|
||
.3 pla
|
||
sta idxl,x
|
||
inx
|
||
cpx #4
|
||
bne .3
|
||
|
||
>DEBUGOA
|
||
|
||
bra .1
|
||
|
||
.8 .FIN
|
||
*--------------------------------------
|
||
jsr ILDR.EnumInit
|
||
|
||
ldx #S.FI.T.SYS
|
||
ldy #ILDR.SYSTEMSFX
|
||
lda /ILDR.SYSTEMSFX
|
||
sec suffix
|
||
jsr ILDR.EnumNext
|
||
bcs .9
|
||
|
||
jsr ILDR.LoadFilePBuf
|
||
bcs ILDR.MLIERR
|
||
|
||
bit IO.RROMBNK2 enable ROM
|
||
|
||
bit IO.RDIOUDIS
|
||
sta IO.SETIOUDIS
|
||
sta IO.CLRDHIRES
|
||
bmi .5
|
||
|
||
sta IO.CLRIOUDIS
|
||
|
||
.5 sta IO.CLR80DISP
|
||
sta IO.CLR80STORE
|
||
sta IO.SETTEXT
|
||
sta IO.CLRMIXED
|
||
jsr ROM.INIT
|
||
jsr ROM.SETVID
|
||
jsr ROM.SETKBD
|
||
jsr ROM.HOME
|
||
jmp $2000 go run interpreter
|
||
|
||
.9 jsr MLI no .SYSTEM found, so quit.
|
||
.DA #MLI.QUIT
|
||
.DA ILDR.QUIT
|
||
*--------------------------------------
|
||
ILDR.MLIERR cmp #MLI.E.BADBUF
|
||
bne .1
|
||
|
||
ldx #ILDR.MSG.SYSTOOLARG-ILDR.MSG
|
||
|
||
.HS 2C BIT ABS
|
||
.1 ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG
|
||
|
||
bit IO.RROMBNK2
|
||
jsr ROM.SETINV
|
||
|
||
.2 lda ILDR.MSG,x
|
||
pha
|
||
ora #$80
|
||
jsr ROM.COUT
|
||
inx
|
||
pla
|
||
bpl .2
|
||
|
||
lda #$A0
|
||
jsr ROM.COUT
|
||
|
||
ldy #0
|
||
|
||
.3 iny
|
||
lda LDR.PBuf,y
|
||
jsr ROM.COUT
|
||
cpy LDR.PBuf
|
||
bne .3
|
||
|
||
bra *
|
||
*--------------------------------------
|
||
ILDR.EnumInit lda /ILDR.DBuf search directory buffer
|
||
sta idxl+1
|
||
lda #ILDR.DBuf+4 skip Prev/next Block Ptr
|
||
sta idxl
|
||
|
||
lda ILDR.DBuf+35 EL
|
||
sta ILDR.EL
|
||
|
||
lda ILDR.DBuf+36 EPB
|
||
sta ILDR.EPB
|
||
sta ILDR.EITB
|
||
|
||
lda ILDR.DBuf+37 FCLO
|
||
eor #$ff
|
||
sta ILDR.nFC
|
||
|
||
lda ILDR.DBuf+38 FCHI
|
||
eor #$ff
|
||
sta ILDR.nFC+1
|
||
|
||
ILDR.EnumInit.RTS
|
||
rts
|
||
*--------------------------------------
|
||
* X = expected FileType
|
||
* Y,A = expected prefix/suffix
|
||
*--------------------------------------
|
||
ILDR.EnumNext stx ILDR.FT
|
||
sty src
|
||
sta src+1
|
||
|
||
ror ILDR.bPFXSFX
|
||
|
||
.1 inc ILDR.nFC
|
||
bne .2
|
||
|
||
inc ILDR.nFC+1
|
||
sec
|
||
beq ILDR.EnumInit.RTS
|
||
|
||
.2 dec ILDR.EITB
|
||
beq .3
|
||
|
||
lda idxl
|
||
clc
|
||
adc ILDR.EL
|
||
sta idxl
|
||
bcc .4 same page
|
||
|
||
inc idxl+1 512b block, 2nd page
|
||
bra .4
|
||
|
||
.3 inc idxl+1
|
||
lda idxl+1
|
||
cmp #$14 last block read at $0C00-$13FF
|
||
bcs ILDR.EnumInit.RTS
|
||
|
||
lda #4
|
||
sta idxl
|
||
|
||
lda ILDR.EPB
|
||
sta ILDR.EITB
|
||
|
||
.4 lda (idxl)
|
||
beq .2 deleted / empty
|
||
|
||
bmi .1 $D, $E, or $F...
|
||
|
||
and #$0F
|
||
sta LDR.PBuf filename Len
|
||
|
||
tay
|
||
|
||
.5 lda (idxl),y
|
||
sta LDR.PBuf,y
|
||
dey
|
||
bne .5
|
||
|
||
ldy #16
|
||
lda (idxl),y
|
||
|
||
cmp ILDR.FT expected file type
|
||
bne .1
|
||
|
||
lda (src) expected prefix/suffix len
|
||
cmp LDR.PBuf
|
||
bcs .1 filename LE prefix/suffix
|
||
|
||
bit ILDR.bPFXSFX
|
||
bpl .12 go check prefix
|
||
|
||
tay
|
||
ldx LDR.PBuf
|
||
|
||
.11 lda LDR.PBuf,x
|
||
eor (src),y
|
||
asl
|
||
bne .1
|
||
|
||
dex
|
||
dey
|
||
bne .11
|
||
bra .15
|
||
|
||
.12 lda (src) expected prefix/suffix len
|
||
tay
|
||
|
||
.13 lda LDR.PBuf,y
|
||
eor (src),y
|
||
asl
|
||
bne .1
|
||
|
||
dey
|
||
bne .13
|
||
|
||
.15 ldy #$1D MIN_VERSION
|
||
lda (idxl),y
|
||
bpl .10 no lowercase information
|
||
|
||
ldx LDR.PBuf
|
||
|
||
.6 cpx #8 CS if MIN_VERSION to use
|
||
bcs .7
|
||
|
||
ldy #$1D MIN_VERSION
|
||
lda (idxl),y
|
||
and ILDR.LCBits,x
|
||
bne .8
|
||
|
||
bra .9
|
||
|
||
.7 ldy #$1C VERSION
|
||
lda (idxl),y
|
||
|
||
and ILDR.LCBits-8,x
|
||
beq .9
|
||
|
||
.8 lda LDR.PBuf,x
|
||
eor #$20 to lowercase
|
||
sta LDR.PBuf,x
|
||
|
||
.9 dex
|
||
bne .6
|
||
|
||
.10 clc
|
||
rts
|
||
*--------------------------------------
|
||
ILDR.LoadFilePBuf
|
||
ldy #LDR.PBuf
|
||
lda /LDR.PBuf
|
||
|
||
ILDR.LoadFile sty ILDR.OPEN+1 Filename
|
||
sta ILDR.OPEN+2
|
||
|
||
jsr MLI
|
||
.DA #MLI.OPEN
|
||
.DA ILDR.OPEN
|
||
bcs .9
|
||
|
||
jsr MLI
|
||
.DA #MLI.GETEOF
|
||
.DA ILDR.GETEOF
|
||
bcs .9
|
||
|
||
lda ILDR.GETEOF+4
|
||
bne .99
|
||
|
||
lda ILDR.GETEOF+3
|
||
cmp #$9F
|
||
bcc .1
|
||
|
||
bne .99 more than $9Fxx
|
||
|
||
lda ILDR.GETEOF+2
|
||
bne .99 more than $9F00
|
||
|
||
.1
|
||
jsr MLI
|
||
.DA #MLI.READ
|
||
.DA ILDR.READ
|
||
bcs .9
|
||
|
||
jsr MLI
|
||
.DA #MLI.CLOSE
|
||
.DA ILDR.CLOSE
|
||
.9 rts
|
||
|
||
.99 lda #MLI.E.BADBUF
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
ILDR.MSG .EQ *
|
||
ILDR.MSG.SYSLOADERR .AT "Unable to load"
|
||
ILDR.MSG.SYSTOOLARG .AT "Too Large"
|
||
ILDR.LCBits .HS 8040201008040201
|
||
*--------------------------------------
|
||
ILDR.GFINFO .DA #10 PARAM CNT
|
||
.DA ILDR.ATINIT
|
||
.BS S.FI-3
|
||
*--------------------------------------
|
||
.DO READCAT=1
|
||
ILDR.MLIRB.P .DA #3
|
||
.DA #0 unit number
|
||
.DA 0 2 byte data buffer
|
||
.DA 0 2 byte block number
|
||
.FIN
|
||
*--------------------------------------
|
||
ILDR.OPEN .DA #3 PARAM CNT
|
||
.BS 2 Filename
|
||
.DA ILDR.IOBuf
|
||
.HS 01 REF
|
||
*--------------------------------------
|
||
ILDR.GETEOF .DA #2 PARAM CNT
|
||
.DA #01 REF
|
||
.HS 000000
|
||
*--------------------------------------
|
||
ILDR.READ .DA #4 PARAM CNT
|
||
.HS 01 REF
|
||
.DA $2000
|
||
.DA $9F00 Max file size
|
||
.HS 0000
|
||
*--------------------------------------
|
||
ILDR.CLOSE .DA #1 PARAM CNT
|
||
.HS 01 REF
|
||
*--------------------------------------
|
||
ILDR.QUIT .DA #4 PARAM CNT
|
||
.HS 00
|
||
.HS 0000
|
||
.HS 00
|
||
.HS 0000
|
||
*--------------------------------------
|
||
ILDR.ATINIT .PS "ATINIT"
|
||
.DO M.PM=1
|
||
ILDR.PMPFX .PS "PM."
|
||
.FIN
|
||
ILDR.SYSTEMSFX .PS ".SYSTEM"
|
||
*--------------------------------------
|
||
.DUMMY
|
||
ILDR.EPB .BS 1
|
||
ILDR.EL .BS 1
|
||
ILDR.nFC .BS 2
|
||
ILDR.FT .BS 1
|
||
ILDR.EITB .BS 1
|
||
ILDR.bPFXSFX .BS 1
|
||
.ED
|
||
*--------------------------------------
|
||
.EP
|
||
*--------------------------------------
|
||
ILDR.LEN .EQ *-ILDR.START
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/prodos.fx/prodos.s.ildr
|
||
LOAD usr/src/prodos.fx/pdos8m.s
|
||
ASM
|