A2osX/BIN/LS.S.txt

556 lines
9.8 KiB
Plaintext
Raw Normal View History

NEW
2017-12-22 21:24:30 +00:00
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
2018-07-20 11:51:08 +00:00
.TF BIN/LS
*--------------------------------------
2018-07-20 11:51:08 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.ERR.I
*--------------------------------------
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
*--------------------------------------
MAX.COL .EQ 4
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
ZPFileName .EQ ZPBIN+4
ZPFileStat .EQ ZPBIN+6
*--------------------------------------
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 CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #8 ZP
2015-06-03 18:30:57 +00:00
.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.FMT.DateTime .DA FMT.DateTime
.DA 0
*--------------------------------------
CS.INIT
.1 >INC.G ArgCount
2018-07-18 15:30:42 +00:00
>SYSCALL GetArg
bcs .6
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
lda #K.E.SYN
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
.6 >LDA.G index do we have a Source dir ?
bne .8
.7 ldy #S.PS.hPREFIX
2016-08-28 20:48:01 +00:00
lda (pPs),y
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
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 GetChar
bcs .10 no char
cmp #$03 Ctrl-C
beq .92 Abort....
cmp #$13 Ctrl-S
bne .10
>LDA.G bPause
eor #$ff
sta (pData),y
bne .80
.10 >LDA.G bPause
bne .80 Pause...
jsr GetEntry
bcs .9
>LDA.G hFilter
beq .4 No filter....
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
>PUSHYA
>PUSHW ZPFileName
>SYSCALL StrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.P.DRIVE
lda (ZPFileStat),y ProDOS Device ?
bne .5
ldy #S.STAT.P.TYPE
lda (ZPFileStat),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 jsr GetNextEntry
.80 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 (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
ldy #S.STAT.BLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
ldy #S.STAT.P.DRIVE
>PUSHB (ZPFileStat),y
dey SLOT
>PUSHB (ZPFileStat),y
>PUSHW ZPFileName
>LDYA L.MSG.DEVEXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
ldy #bRecurse
lda (pData),y
bpl .8
>LDYA ZPFileName
2016-10-30 22:23:18 +00:00
jsr EnterSubDirYA
bcs .9
jsr CS.RUN.ENTER.MSG
rts
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.DIR >LDA.G bAllmostAll
bmi .10
lda (ZPFileName)
cmp #'.'
beq .5
.10 >LDA.G bLong
bmi .4
>PUSHW ZPFileName
>LDYA L.MSG.DIR
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
ldy #0
.1 iny
lda (ZPFileName),y
bne .1
.11 iny
cpy #19
bcs .2
lda #' '
phy
2018-07-18 15:30:42 +00:00
>SYSCALL PutChar
ply
bcc .11
rts
.2 jsr CS.RUN.UpdateColCnt
bcc .5
rts
.4 jsr CS.RUN.PUSHDATES
jsr Mod2CSTR
>PUSHEA.G MOD File Mod
>PUSHW ZPFileName
>LDYA L.MSG.DIREXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
.5 ldy #bRecurse
lda (pData),y
bpl .8
lda (ZPFileName)
cmp #'.'
beq .8
jsr CS.RUN.NewLine
bcs .9
>LDYA ZPFileName
2016-10-30 22:23:18 +00:00
jsr EnterSubDirYA
bcs .9
jsr CS.RUN.ENTER.MSG
rts
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.FILE ldy #bLong
lda (pData),y
bmi .8
>PUSHW ZPFileName
>LDYA L.MSG.FILE
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
jsr CS.RUN.UpdateColCnt
jsr GetNextEntry
clc
rts
.8 jsr CS.RUN.PUSHDATES
2018-05-26 06:59:25 +00:00
ldy #S.STAT.SIZE+3
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA
jsr Mod2CSTR
2018-05-26 06:59:25 +00:00
>PUSHEA.G MOD File Mod
ldy #S.STAT.P.AUXTYPE+1
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA AuxType
dey
lda (ZPFileStat),y
jsr FileType2PSTR
>PUSHYA Type
>PUSHW ZPFileName
>LDYA L.MSG.FILEEXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.PUSHDATES
ldx #$ff
ldy #TIME.Mod-1 Set NODATE as default
.10 inx
iny
lda MSG.NODATE,x
sta (pData),y
bne .10
ldx #$ff
ldy #TIME.Create-1 Set NODATE as default
.11 inx
iny
lda MSG.NODATE,x
sta (pData),y
bne .11
ldy #S.STAT.MTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .1 Month=0.....invalid date/time
>PUSHEA.G TIME.Mod
>PUSHW L.FMT.DateTime
lda ZPFileStat
clc
adc #S.STAT.MTIME
tay
lda ZPFileStat+1
adc #0
>PUSHYA
>SYSCALL StrFTime
.1 ldy #S.STAT.CTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .2 Month=0.....invalid date/time
>PUSHEA.G TIME.Create
>PUSHW L.FMT.DateTime
lda ZPFileStat
clc
adc #S.STAT.CTIME
tay
lda ZPFileStat+1
adc #0
>PUSHYA
>SYSCALL StrFTime
.2 >PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Create
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
2018-07-18 15:30:42 +00:00
>SYSCALL PutChar
lda #10
2018-07-18 15:30:42 +00:00
>SYSCALL PutChar
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
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
2016-10-30 22:23:18 +00:00
>PUSHYA
>LDYA L.MSG.ENTER
2018-06-21 15:12:10 +00:00
>SYSCALL printf
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
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
.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
*--------------------------------------
Mod2CSTR ldy #S.STAT.MODE+1
lda (ZPFileStat),y
lsr
lsr
lsr
lsr
tax
lda TYPES,x
>STA.G MOD
ldx #0
ldy #S.STAT.MODE
lda (ZPFileStat),y
ldy #MOD+1
.1 lsr
pha
lda #'-'
bcc .2
lda ACCESS,x
.2 sta (pData),y
iny
pla
inx
cpx #8
bne .1
.3 ldy #S.STAT.MODE+1
lda (ZPFileStat),y
lsr
lda #'-'
bcc .4
lda ACCESS,x
.4 >STA.G MOD+9
rts
*--------------------------------------
.INB /A2OSX.SRC/BIN/X.FILEENUM.S
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "ALRalr"
OptionVars .DA #bAllmostAll,#bLong,#bRecurse,#bAllmostAll,#bLong,#bRecurse
*--------------------------------------
MSG.DEVEXT .AZ "/%15s S%dD%d Blocks Used:%5D Total:%5D\r\n"
MSG.DIR .AZ "\e[32m%s/\e[0m"
MSG.ENTER .AZ "Directory:%s\r\n"
MSG.DIREXT .AZ "\e[32m%16s\e[0m <dir> %s %s %s\r\n"
MSG.FILE .AZ "%19s"
MSG.FILEEXT .AZ "%15s %S $%H %s %10u %s %s\r\n"
*--------------------------------------
2017-12-08 16:10:39 +00:00
PRODOS.FT.HEX .HS 0406FAFCFDE2CBCCFF
PRODOS.FT.TXT >PSTR "TXT"
>PSTR "BIN"
>PSTR "ASM"
>PSTR "BAS"
>PSTR "VAR"
>PSTR "ATK"
>PSTR "PIX"
2017-12-08 16:10:39 +00:00
>PSTR "FON"
>PSTR "SYS"
PRODOS.FT.DFLT >PSTR "$ "
MSG.NODATE .AZ " <No-Date> "
FMT.DateTime .AZ "%d-%b-%y %H:%M"
HEXDIGIT .AS '0123456789ABCDEF'
TYPES .AS "-dbclssp"
ACCESS .AS "rwxrwxrwx"
*--------------------------------------
2015-06-03 18:30:57 +00:00
.DUMMY
.OR 0
DS.START
ArgCount .BS 1
2017-10-04 15:12:03 +00:00
MOD .BS 11 drwxrwxrwx0
TIME.Create .BS 20
TIME.Mod .BS 20
hFilter .BS 1
bPause .BS 1
bAllmostAll .BS 1
bLong .BS 1
bRecurse .BS 1
2017-10-04 15:12:03 +00:00
ColCount .BS 1
2017-10-04 15:12:03 +00:00
.INB /A2OSX.SRC/BIN/X.FILEENUM.G
DS.END
2015-06-03 18:30:57 +00:00
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/LS.S
ASM