A2osX/BIN/LS.S.txt

576 lines
10 KiB
Plaintext
Raw Normal View History

NEW
2018-11-17 17:17:13 +00:00
PREFIX
2017-12-22 21:24:30 +00:00
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
2018-12-20 07:33:10 +00:00
.INB INC/MLI.I
2018-10-02 15:52:30 +00:00
.INB INC/MLI.E.I
*--------------------------------------
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
*--------------------------------------
MAX.COL .EQ 4
*--------------------------------------
2018-12-19 16:45:09 +00:00
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPFileName .BS 2
ZPFileStat .BS 2
ZS.END
.ED
*--------------------------------------
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
2018-12-19 16:45:09 +00:00
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
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
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 >INC.G ArgCount
2018-10-16 15:48:03 +00:00
>SYSCALL ArgV
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
2018-10-21 20:54:07 +00:00
lda #E.SYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDYA ZPPtr1
jsr InitSrcDirYA
2018-12-19 16:45:09 +00:00
bcc .1 scan for any other args
2018-12-19 16:45:09 +00:00
.9 rts
.6 >LDA.G index do we have a Source dir ?
2018-12-19 16:45:09 +00:00
bne CS.RUN.LOOP
2018-12-19 16:45:09 +00:00
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
2018-12-19 16:45:09 +00:00
bcs .9
2016-08-17 06:25:58 +00:00
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.LOOP >SLEEP
>SYSCALL GetChar
bcs .2 no char
cmp #$03 Ctrl-C
2018-12-19 16:45:09 +00:00
bne .1 Abort....
rts CS
2018-12-19 16:45:09 +00:00
.1 cmp #$13 Ctrl-S
bne .2
>LDA.G bPause
eor #$ff
sta (pData),y
2018-12-19 16:45:09 +00:00
bne CS.RUN.LOOP
2018-12-19 16:45:09 +00:00
.2 >LDA.G bPause
bne CS.RUN.LOOP
jsr GetEntry
bcs .9
>LDA.G hFilter
beq .4 No filter....
2018-11-17 17:17:13 +00:00
pha
ldy #S.STAT.FSID
lda (ZPFileStat),y
bne .11 not prodos...
2018-11-17 17:17:13 +00:00
pla
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
2018-11-17 17:17:13 +00:00
>SYSCALL strupr
bra .12
.11 pla
>SYSCALL GetMemPtr
2018-12-17 15:21:32 +00:00
.12 jsr 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
2018-12-19 16:45:09 +00:00
jsr CS.RUN.PRINT.DIR
bcs .99
bra .8
2018-12-19 16:45:09 +00:00
.5 jsr CS.RUN.PRINT.DEV
bcs .99
bra .8
.6 jsr CS.RUN.PRINT.FILE
bcs .99
.8 jsr GetNextEntry
bcc .92
.9 ldy #bLong
lda (pData),y
bmi .91
jsr CS.RUN.NewLine
bcs .99
.91 jsr LeaveSubDir
2018-12-19 16:45:09 +00:00
bcs .98
2016-10-30 18:19:43 +00:00
jsr BasePath..
2018-12-19 16:45:09 +00:00
jsr GetNextEntry
2016-10-30 18:19:43 +00:00
2018-12-19 16:45:09 +00:00
.92 jmp CS.RUN.LOOP
2018-12-19 16:45:09 +00:00
.98 lda #0
sec
.99 rts
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.DEV
>LDA.G bLong
bpl CS.RUN.PRINT.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
2018-08-22 15:23:27 +00:00
>PUSHBI 8
>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
2018-12-19 16:45:09 +00:00
jmp CS.RUN.ENTER.MSG
2018-12-19 16:45:09 +00:00
.8 clc
.9 rts
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.DIR
>LDA.G bAllmostAll
bmi .10
lda (ZPFileName)
cmp #'.'
beq .5
.10 >LDA.G bLong
bmi .4
>PUSHW ZPFileName
2018-08-22 15:23:27 +00:00
>PUSHBI 2
>LDYA L.MSG.DIR
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-08-22 15:23:27 +00:00
2018-12-19 16:45:09 +00:00
bcs .99
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
2018-08-22 15:23:27 +00:00
>PUSHBI 8
>LDYA L.MSG.DIREXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-12-19 16:45:09 +00:00
.99 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
2018-12-19 16:45:09 +00:00
jmp CS.RUN.ENTER.MSG
2018-12-19 16:45:09 +00:00
.8 clc
.9 rts
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.FILE
ldy #bLong
lda (pData),y
2018-08-24 10:20:23 +00:00
bmi .1
>PUSHW ZPFileName
2018-08-22 15:23:27 +00:00
>PUSHBI 2
>LDYA L.MSG.FILE
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
2018-12-19 16:45:09 +00:00
jmp CS.RUN.UpdateColCnt
2018-08-24 10:20:23 +00:00
.1 jsr CS.RUN.PUSHDATES
2018-05-26 06:59:25 +00:00
ldy #S.STAT.SIZE+3
2018-08-24 10:20:23 +00:00
ldx #4
.2 lda (ZPFileStat),y
2018-05-26 06:59:25 +00:00
>PUSHA
dey
2018-08-24 10:20:23 +00:00
dex
bne .2
jsr Mod2CSTR
2018-05-26 06:59:25 +00:00
>PUSHEA.G MOD File Mod
ldy #S.STAT.P.AUXTYPE+1
2018-08-24 10:20:23 +00:00
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
2018-08-24 10:20:23 +00:00
>PUSHA
dey Type
lda (ZPFileStat),y
jsr FileType2PSTR
2018-08-24 10:20:23 +00:00
>PUSHYA
>PUSHW ZPFileName
2018-08-22 15:23:27 +00:00
>PUSHBI 16
>LDYA L.MSG.FILEEXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-12-19 16:45:09 +00:00
.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
lda ZPFileStat
clc
adc #S.STAT.MTIME
tay
lda ZPFileStat+1
adc #0
>PUSHYA
2018-10-11 15:23:06 +00:00
>PUSHW L.FMT.DateTime
>LEA.G TIME.Mod
>SYSCALL StrFTime
.1 ldy #S.STAT.CTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .2 Month=0.....invalid date/time
lda ZPFileStat
clc
adc #S.STAT.CTIME
tay
lda ZPFileStat+1
adc #0
>PUSHYA
2018-10-11 15:23:06 +00:00
>PUSHW L.FMT.DateTime
>LEA.G TIME.Create
>SYSCALL StrFTime
.2 >PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Create
rts
*--------------------------------------
CS.RUN.UpdateColCnt
2018-12-19 16:45:09 +00:00
>INC.G ColCount
cmp #MAX.COL
bne CS.RUN.NewLine.8
lda #0
sta (pData),y
bra CS.RUN.NewLine.1
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.NewLine >LDA.G ColCount
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
2018-08-22 15:23:27 +00:00
>PUSHBI 2
2016-10-30 22:23:18 +00:00
>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
2018-08-11 10:57:57 +00:00
>LDA.G hFilter
beq .3
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2018-08-11 10:57:57 +00:00
.3 clc
rts
*--------------------------------------
FileType2PSTR ldy #0
.1 cmp PRODOS.FT.HEX,y
2018-08-24 10:20:23 +00:00
beq .8
iny
cpy #PRODOS.FT.TXT-PRODOS.FT.HEX
bne .1
pha
lsr
lsr
lsr
lsr
2018-08-24 10:20:23 +00:00
ora #$30
cmp #$3A
bcc .2
adc #6
.2 sta PRODOS.FT.DFLT+2
pla
and #$0F
2018-08-24 10:20:23 +00:00
ora #$30
cmp #$3A
bcc .3
adc #6
.3 sta PRODOS.FT.DFLT+3
2018-08-24 10:20:23 +00:00
.8 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
*--------------------------------------
2018-11-17 17:17:13 +00:00
.INB USR/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"
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
2018-11-17 17:17:13 +00:00
.INB USR/SRC/BIN/X.FILEENUM.G
DS.END
2015-06-03 18:30:57 +00:00
.ED
*--------------------------------------
MAN
2018-11-17 17:17:13 +00:00
SAVE USR/SRC/BIN/LS.S
ASM