A2osX/BIN/ASM.S.FIO.txt
2020-02-25 17:42:22 +01:00

310 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*---------------------------------------
FIO.Init.RTS rts
FIO.Init >LDYAI 256
>SYSCALL getmem
bcs FIO.Init.RTS
>STYA ZPLineBuf
txa
>STA.G SRC.hLineBuf
>LDYAI 256
>SYSCALL getmem
bcs FIO.Init.RTS
>STYA ZPTmpBuf
txa
>STA.G SRC.hTmpBuf
>LDYA L.ASM.6502
FIO.LOAD.CPU >STYA ZPPtr2
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL GetMemPtr
>STYA ZPPtr1
ldy #$ff
ldx #$ff
.1 iny
inx
lda (ZPPtr1),y
sta ASM.CPU.FILE,x
bne .1
lda #'.'
sta ASM.CPU.FILE,x
ldy #$ff
.2 iny
inx
lda (ZPPtr2),y
jsr SRC.IsLetterOrDigit
bcs .3
sta ASM.CPU.FILE,x
bra .2
.3 stz ASM.CPU.FILE,x
>LDA.G ASM.T.hMem
beq .4
>SYSCALL FreeMem
>STZ.G ASM.T.hMem
.4 >PUSHW L.MSG.T.FILE
>PUSHW L.ASM.CPU.FILE
>PUSHBI 2
jsr OUT.Print
>PUSHW L.ASM.CPU.FILE
>PUSHBI O.RDONLY
>PUSHBI S.FI.T.BIN
>PUSHWZ Aux type
>SYSCALL LoadFile
bcs .9
txa
>STA.G ASM.T.hMem
>SYSCALL GetMemPtr
>STYA ZPPtr1
ldy #ASM.T.AM
lda (ZPPtr1),y
clc
adc ZPPtr1
sta ZPAMPtr
iny
lda (ZPPtr1),y
adc ZPPtr1+1
sta ZPAMPtr+1
iny
lda (ZPPtr1),y
clc
adc ZPPtr1
sta ZPRPtr
iny
lda (ZPPtr1),y
adc ZPPtr1+1
sta ZPRPtr+1
iny
lda (ZPPtr1),y
clc
adc ZPPtr1
sta ZPOpsPtr
iny
lda (ZPPtr1),y
adc ZPPtr1+1
sta ZPOpsPtr+1
.9 rts
*---------------------------------------
FIO.OpenFile >STYA ZPPtr1
>PUSHW L.MSG.SRC.FILE
>PUSHW ZPPtr1
>PUSHBI 2
jsr OUT.Print
>LDA.G SRC.Depth
cmp #IN.MAXDEPTH
bne .1
lda #E.SRC.TOO.MANY.IN
sec
rts
.1 >PUSHW ZPPtr1
>PUSHW L.FIO.Stat
>SYSCALL Stat
bcs .99
lda FIO.Stat+S.STAT.P.TYPE
cmp #S.FI.T.TXT
bne .2
ldx #O.RDONLY+O.TEXT
bra .3
.2 cmp #$FA S-C/BAS?
bne .98
ldx #O.RDONLY
.3 >PUSHW ZPPtr1
txa
>PUSHA
>PUSHB FIO.Stat+S.STAT.P.TYPE
>PUSHWZ
>SYSCALL FOpen
bcs .99
pha
>LDA.G SRC.Depth
clc
adc #SRC.hFILES
tay
pla
sta (pData),y
>LDA.G SRC.Depth
clc
adc #SRC.hFILETYPES
tay
lda FIO.Stat+S.STAT.P.TYPE
sta (pData),y
>INC.G SRC.Depth
lda #0
>STA.G SRC.LINENUM
iny
sta (pData),y
clc
rts
.98 lda #E.SRC.INV.TYPE
sec
.99 rts
*---------------------------------------
FIO.ReadLine >LDA.G SRC.Depth
clc
adc #SRC.hFILETYPES-1
tay
lda (pData),y
bmi .10
>PUSHWI 256
>PUSHW ZPLineBuf
jsr FIO.ReadFromFile
bcs .19
tya
beq .13
dey
lda (ZPLineBuf),y
eor #C.CR
beq .22
iny
.22 lda #0 replace ending $0D with $00
.13 sta (ZPLineBuf),y
>INC.G SRC.LINENUM
bne .19
>INC.G SRC.LINENUM+1
.19 rts
*---------------------------------------
.10 >PUSHWI 3
>PUSHW ZPTmpBuf
jsr FIO.ReadFromFile
bcs .19
ldy #1
lda (ZPTmpBuf),y
pha
iny
lda (ZPTmpBuf),y
>STA.G SRC.LINENUM+1
pla
>STA.G SRC.LINENUM
lda (ZPTmpBuf) LEN
sec
sbc #3
bcc .9 LEN should be at least 3
tay
lda #0
>PUSHYA
>PUSHW ZPTmpBuf
jsr FIO.ReadFromFile
bcs .9
>LDYA ZPTmpBuf
>STYA ZPPtr1
ldy #0
.1 lda (ZPPtr1)
inc ZPPtr1
bne .11
inc ZPPtr1+1
.11 tax
bmi .2
sta (ZPLineBuf),y
beq .8 Ending 00
iny
bne .1
bra .99
.2 cmp #$C0 REPEAT char?
bne .5
lda (ZPPtr1) Get Repeat Count
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 tax
lda (ZPPtr1) Get Repeat Char
inc ZPPtr1
bne .4
inc ZPPtr1+1
.4 sta (ZPLineBuf),y
iny
beq .99
dex
bne .4
bra .1
.5 and #$3F Compute blank count
tax
lda #$20
.6 sta (ZPLineBuf),y
iny
beq .99
dex
bne .6
bra .1
.8 clc
.9 rts
.99 lda #E.LINE.TOO.LONG
sec
rts
*--------------------------------------
FIO.ReadFromFile
>LDA.G SRC.Depth
clc
adc #SRC.hFILES-1
tay
lda (pData),y
>SYSCALL FRead
bcs .9
tax $100 byte transfered ?
beq .9
lda #E.LINE.TOO.LONG
sec
.9 rts
*---------------------------------------
FIO.FileClose >LDA.G SRC.Depth
beq .8
dec
sta (pData),y
sec
adc #SRC.hFILES-1
tay
lda (pData),y
>SYSCALL fclose
.8 clc
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.FIO
LOAD USR/SRC/BIN/ASM.S
ASM