A2osX/BIN/LS.S.txt

504 lines
9.1 KiB
Plaintext
Raw Normal View History

PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
2015-06-03 18:30:57 +00:00
.TF /A2OSX.BOOT/BIN/LS
*--------------------------------------
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
*--------------------------------------
X.MAX.RECURSE .EQ 8
X.DST.BASE.PATH .EQ 0
X.DELETE.SOURCE .EQ 0
*--------------------------------------
MAX.COL .EQ 4
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.DEVEXT .DA MSG.DEVEXT
L.MSG.DIR .DA MSG.DIR
L.MSG.ENTER .DA MSG.ENTER
L.MSG.DIREXT .DA MSG.DIREXT
L.MSG.FILE .DA MSG.FILE
L.MSG.FILEEXT .DA MSG.FILEEXT
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
L.STAT .DA STAT
L.TIME.Format .DA TIME.Format
L.TIME.Create .DA TIME.Create
L.TIME.Mod .DA TIME.Mod
.DA 0
*--------------------------------------
CS.INIT >SYSCALL GetArgC
sta ArgCount
2016-08-17 06:25:58 +00:00
.1 dec ArgCount
beq .5
lda ArgCount
>SYSCALL GetArgA
>STYA ZPPtr1
lda (ZPPtr1)
cmp #2
bne .4
ldy #1
lda (ZPPtr1),y
cmp #'-'
bne .4
iny
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
lda #SYSMGR.ERRSYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDYA ZPPtr1
jsr InitSrcDirYA
bcs .9
bra .1 scan for any other args
.5 ldy #index
lda (pData),y
bne .8
2016-08-28 20:48:01 +00:00
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtrA
jsr InitSrcDirYA
bcs .9
.8 lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.9 rts
2016-08-17 06:25:58 +00:00
*--------------------------------------
CS.RUN >SYSCALL GetC
bcs .10 no char
cmp #$03 Ctrl-C
beq .92 Abort....
cmp #$13 Ctrl-S
bne .10
ldy #bPause
2015-06-03 18:30:57 +00:00
lda (pData),y
eor #$ff
sta (pData),y
bne .8
.10 ldy #bPause
lda (pData),y
bne .8 Pause...
jsr GetNextEntry
bcs .9
ldy #hFilter
lda (pData),y
beq .4 No filter....
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPPtr1
>SYSCALL PStrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.P.DRIVE
lda (ZPPtr2),y ProDOS Device ?
bne .5
ldy #S.STAT.P.TYPE
lda (ZPPtr2),y
cmp #$0F Directory ?
bne .6
jmp CS.RUN.DIR
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.FILE
.9 ldy #bLong
lda (pData),y
bmi .91
jsr CS.RUN.NewLine
bcs .99
.91 jsr LeaveSubDir
bcs .92
2016-10-30 18:19:43 +00:00
jsr BasePath..
.8 clc
rts
.92 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.DEV ldy #bLong
lda (pData),y
bpl CS.RUN.DIR
ldy #S.STAT.P.DEVBLOCKS+1
>PUSHB (ZPPtr2),y
dey
>PUSHB (ZPPtr2),y
ldy #S.STAT.BLOCKS+1
>PUSHB (ZPPtr2),y
dey
>PUSHB (ZPPtr2),y
ldy #S.STAT.P.DRIVE
>PUSHB (ZPPtr2),y
dey SLOT
>PUSHB (ZPPtr2),y
>PUSHW ZPPtr1
>LDYA L.MSG.DEVEXT
>SYSCALL CPrintFYA
bcs .9
ldy #bRecurse
lda (pData),y
bpl .8
>LDYA ZPPtr1
2016-10-30 22:23:18 +00:00
jsr EnterSubDirYA
bcs .9
jsr CS.RUN.ENTER.MSG
bcs .9
.8 clc
.9 rts
*--------------------------------------
CS.RUN.DIR ldy #bAllmostAll
lda (pData),y
bpl .10
ldy #1
lda (ZPPtr1),y
cmp #'.'
beq .5
.10 ldy #bLong
lda (pData),y
bmi .4
>PUSHW ZPPtr1
>LDYA L.MSG.DIR
>SYSCALL CPrintFYA
bcs .9
lda #80/MAX.COL-2
sec
sbc (ZPPtr1)
beq .2
tax
.1 lda #' '
phx
2017-01-12 17:43:45 +00:00
>SYSCALL PutCA
plx
bcs .9
dex
bne .1
.2 jsr CS.RUN.UpdateColCnt
bcc .5
rts
.4 jsr CS.RUN.PUSHEXTRA
ldy #S.STAT.MODE+1
lda (ZPPtr2),y
>PUSHA
dey
lda (ZPPtr2),y
>PUSHA File Mode
>PUSHW ZPPtr1
>LDYA L.MSG.DIREXT
>SYSCALL CPrintFYA
bcs .9
.5 ldy #bRecurse
lda (pData),y
bpl .8
ldy #1
lda (ZPPtr1),y
cmp #'.'
beq .8
jsr CS.RUN.NewLine
bcs .9
>LDYA ZPPtr1
2016-10-30 22:23:18 +00:00
jsr EnterSubDirYA
bcs .9
jsr CS.RUN.ENTER.MSG
bcs .9
.8 clc
.9 rts
*--------------------------------------
CS.RUN.FILE ldy #bLong
lda (pData),y
bmi .8
>PUSHW ZPPtr1
>LDYA L.MSG.FILE
>SYSCALL CPrintFYA
bcs .9
jmp CS.RUN.UpdateColCnt
.8 jsr CS.RUN.PUSHEXTRA
lda ZPPtr2
clc
adc #S.STAT.SIZE
tay
lda ZPPtr2+1
adc #0
>PUSHYA File Size
ldy #S.STAT.MODE+1
lda (ZPPtr2),y
>PUSHA
dey
lda (ZPPtr2),y
>PUSHA File Mode
ldy #S.STAT.P.AUXTYPE+1
lda (ZPPtr2),y
>PUSHA
dey
lda (ZPPtr2),y
>PUSHA AuxType
dey
lda (ZPPtr2),y
jsr FileType2PSTR
>PUSHYA Type
>PUSHW ZPPtr1
>LDYA L.MSG.FILEEXT
>SYSCALL CPrintFYA
.9 rts
*--------------------------------------
CS.RUN.PUSHEXTRA
ldy TIME.NODATE Set NODATE as default
.10 lda TIME.NODATE,y
sta TIME.Mod,y
sta TIME.Create,y
dey
bpl .10
ldy #S.STAT.MTIME+S.TIME.MONTH
lda (ZPPtr2),y
beq .1 Month=0.....invalid date/time
>PUSHW L.TIME.Mod
>PUSHW L.TIME.Format
lda ZPPtr2
clc
adc #S.STAT.MTIME
tay
lda ZPPtr2+1
adc #0
>PUSHYA
>SYSCALL PStrFTime
.1 ldy #S.STAT.CTIME+S.TIME.MONTH
lda (ZPPtr2),y
beq .2 Month=0.....invalid date/time
>PUSHW L.TIME.Create
>PUSHW L.TIME.Format
lda ZPPtr2
clc
adc #S.STAT.CTIME
tay
lda ZPPtr2+1
adc #0
>PUSHYA
>SYSCALL PStrFTime
.2 >PUSHW L.TIME.Mod ModTime
>PUSHW L.TIME.Create Create Time
rts
*--------------------------------------
CS.RUN.UpdateColCnt
ldy #ColCount
lda (pData),y
inc
sta (pData),y
cmp #MAX.COL
bne CS.RUN.NewLine.8
lda #0
sta (pData),y
bra CS.RUN.NewLine.1
*--------------------------------------
CS.RUN.NewLine ldy #ColCount
lda (pData),y
beq CS.RUN.NewLine.8
CS.RUN.NewLine.1
lda #13
2017-01-12 17:43:45 +00:00
>SYSCALL PutCA
rts
CS.RUN.NewLine.8
clc
rts
*--------------------------------------
2016-10-30 22:23:18 +00:00
CS.RUN.ENTER.MSG
ldy #hSrcBasePath
2016-10-30 22:23:18 +00:00
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYA L.MSG.ENTER
>SYSCALL CPrintFYA
2016-10-30 22:23:18 +00:00
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
ldy #hFilter
2015-06-03 18:30:57 +00:00
lda (pData),y
beq .3
>SYSCALL FreeMemA
.3 clc
rts
*--------------------------------------
FileType2PSTR ldy #0
.1 cmp PRODOS.FT.HEX,y
beq .2
iny
cpy #PRODOS.FT.TXT-PRODOS.FT.HEX
bne .1
pha
lsr
lsr
lsr
lsr
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+2
pla
and #$0F
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+3
.2 tya
asl
asl CC
adc L.PRODOS.FT.TXT
tay
lda L.PRODOS.FT.TXT+1
adc #0
rts
*--------------------------------------
2016-10-30 22:23:18 +00:00
.INB BIN/X.FILEENUM.S
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "ALR"
OptionVars .DA #bAllmostAll,#bLong,#bRecurse
*--------------------------------------
MSG.DEVEXT >CSTR "%15S S%d,D%d Blocks Used:%5D,Total:%5D\n"
MSG.DIR >CSTR "%S/"
MSG.ENTER >CSTR "Directory:%S\n"
MSG.DIREXT >CSTR "%16S <dir> %a %S %S\n"
MSG.FILE >CSTR "%19S"
MSG.FILEEXT >CSTR "%15S %S $%H %a %10u %S %S\n"
*--------------------------------------
PRODOS.FT.HEX .HS 0406FAFCFDE2FF
PRODOS.FT.TXT >PSTR "TXT"
>PSTR "BIN"
>PSTR "S-C"
>PSTR "BAS"
>PSTR "VAR"
>PSTR "ATK"
>PSTR "SYS"
PRODOS.FT.DFLT >PSTR "$ "
TIME.NODATE >PSTR " <NO-DATE> "
TIME.Format >PSTR "%d-%b-%y %H:%M"
TIME.Create .BS 20
TIME.Mod .BS 20
HEXDIGIT .AS '0123456789ABCDEF'
STAT .BS S.STAT
ArgCount .BS 1
*--------------------------------------
2015-06-03 18:30:57 +00:00
.DUMMY
.OR 0
DS.START
Index .BS 1
hDIRs .BS X.MAX.RECURSE
hDIRENTs .BS X.MAX.RECURSE
oDIRENTs .BS X.MAX.RECURSE*2
hSrcBasePath .BS 1
hFilter .BS 1
bPause .BS 1
bAllmostAll .BS 1
bLong .BS 1
bRecurse .BS 1
ColCount .BS 1
DS.END
2015-06-03 18:30:57 +00:00
.ED
*--------------------------------------
MAN
SAVE BIN/LS.S
ASM