Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-20 17:15:06 +02:00
parent 9cae229f7a
commit 76109c8742
5 changed files with 286 additions and 240 deletions

Binary file not shown.

View File

@ -381,19 +381,14 @@ PRODOS.FT.TXT .AS "TXT"
DS.START DS.START
ArgCount .BS 1 ArgCount .BS 1
hFullPath .BS 1
hSrcFullPath .BS 1 hSrcFullPath .BS 1
STAT .BS S.STAT
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 bPause .BS 1
bContinue .BS 1 bContinue .BS 1
bRecurse .BS 1 bRecurse .BS 1
HexFileType .BS 1 HexFileType .BS 1
.INB USR/SRC/BIN/X.FILEENUM.G
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

@ -192,11 +192,11 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
jsr CS.RUN.DIR jsr CS.RUN.DIR
bcs .99 bcs .99
bra .8 bra .8
.6 jsr CS.RUN.FILE .6 jsr CS.RUN.FILE
bcs .99 bcs .99
bra .8 bra .8
.9 jsr LeaveSubDir .9 jsr LeaveSubDir
bcs .90 bcs .90
@ -270,10 +270,9 @@ CS.RUN.FILE jsr FilterMatch
jsr CS.RUN.OpenFile jsr CS.RUN.OpenFile
bcs .9 bcs .9
>LDA.G hFile jsr CS.RUN.CloseFile
>SYSCALL fclose
.9 jsr CS.RUN.CheckErr .9 jmp CS.RUN.CheckErr
.8 clc .8 clc
rts rts
@ -374,6 +373,14 @@ CS.RUN.OpenFile >PUSHWZ Aux type
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.CloseFile
>LDA.G hFile
>SYSCALL fclose
bcs .9
>STZ.G hFile
.9 rts
*--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -39,71 +39,27 @@ CS.START cld
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBPAK .DA LIBPAK L.MSG.USAGE .DA MSG.USAGE
L.CONST.PI .DA CONST.PI L.MSG.DEBUG .DA MSG.DEBUG
L.CONST.3 .DA CONST.3
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
L.MSG4 .DA MSG4
L.MSG5 .DA MSG5
L.MSG6 .DA MSG6
L.MSG.UnpakErr .DA MSG.UnpakErr L.MSG.UnpakErr .DA MSG.UnpakErr
L.MSG.DEBUG.S3 .DA MSG.DEBUG.S3 L.MSG.DEBUG.S3 .DA MSG.DEBUG.S3
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBPAK CS.INIT clc
>SYSCALL LoadLib rts
bcs .9
sta hLIBPAK
clc
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
bne CS.RUN.Pak bne CS.RUN.Pak
jmp CS.RUN.Math
*--------------------------------------
CS.RUN.Pak >PUSHWZ Aux type
>PUSHBI 0 >PUSHBI 0
>PUSHBI O.RDONLY >LDYA L.MSG.USAGE
>SYSCALL printf
lda #1 lda #E.SYN
>SYSCALL ArgV sec
>SYSCALL RealPath rts
>PUSHYA *--------------------------------------
txa .8 sec
>STA.G PAK.hFileName
>SYSCALL LoadFile
bcs .9
>STYA.G PAK.FileSize
txa
>STA.G PAK.hFileBuf
>LDYA.G PAK.FileSize
>SYSCALL getmem
bcs .9
>STYA ZPPakSrcPtr
txa
>STA.G PAK.hOutBuf
>LDA.G PAK.hFileBuf
>SYSCALL GetMemPtr
>PUSHYA
>PUSHW.G PAK.FileSize
>LDA.G PAK.hOutBuf
>SYSCALL GetMemPtr
>STYA ZPPakHdrPtr
>PUSHYA
>PUSHEA.G PAK.Stat
>LIBCALL hLIBPAK,LIBPAK.Pak
bcc .1
.9 rts .9 rts
.1 >PUSHW.G PAK.Stat+S.PAKSTAT.STORE .1 >PUSHW.G PAK.Stat+S.PAKSTAT.STORE
@ -115,9 +71,14 @@ CS.RUN.Pak >PUSHWZ Aux type
>PUSHW.G PAK.Stat+S.PAKSTAT.PASS1 >PUSHW.G PAK.Stat+S.PAKSTAT.PASS1
>PUSHW.G PAK.FileSize >PUSHW.G PAK.FileSize
>PUSHBI 16 >PUSHBI 16
>LDYA L.MSG6 >LDYA L.MSG.DEBUG
>SYSCALL printf >SYSCALL printf
*-------------------------------------- *--------------------------------------
* Y,A = Ptr to Shunk Header:
* +0 : Flags
* 10000000 : LZ8 encoded, 1 byte (ESC) follow
* 01000000 : BS
*--------------------------------------
CS.RUN.Unpak lda ZPPakHdrPtr CS.RUN.Unpak lda ZPPakHdrPtr
clc clc
adc #S.PAKSTAT adc #S.PAKSTAT
@ -316,66 +277,6 @@ DEBUG.S3 pha
plx plx
pla pla
rts rts
*--------------------------------------
CS.RUN.Math >PUSHEA.G ENDPTR
>LDYA L.CONST.PI
>SYSCALL StrToF
>PULLF.G MYFLOAT.PI
>PUSHEA.G ENDPTR
>LDYA L.CONST.3
>SYSCALL StrToF
>PULLF.G MYFLOAT.3
>PUSHF.G MYFLOAT.PI
>PUSHF.G MYFLOAT.3
>PUSHF FLOAT5
>PUSHF FLOAT4
>PUSHF FLOAT3
>PUSHF FLOAT2
>PUSHF FLOAT1
>PUSHBI 35
>LDYA L.MSG1
>SYSCALL printf
*--------------------------------------
>PUSHF.G MYFLOAT.PI
>PUSHF.G MYFLOAT.3
>SYSCALL FDiv
>PULLF.G MYFLOAT3
>PUSHF.G MYFLOAT3
>PUSHBI 5
>LDYA L.MSG2
>SYSCALL printf
*--------------------------------------
>PUSHF.G MYFLOAT3
>SYSCALL Cos
>PULLF.G MYFLOAT3
>PUSHF.G MYFLOAT3
>PUSHBI 5
>LDYA L.MSG3
>SYSCALL printf
*--------------------------------------
>PUSHF FLOAT1
>SYSCALL LRIntF
>PULLL.G MYLONG
>PUSHL.G MYLONG
>PUSHBI 4
>LDYA L.MSG4
>SYSCALL printf
*--------------------------------------
>PUSHL LONG1
>SYSCALL Float
* >PULLF.G MYFLOAT3
* >PUSHF.G MYFLOAT3
>PUSHBI 5
>LDYA L.MSG5
>SYSCALL printf
lda #0 lda #0
sec sec
rts rts
@ -398,32 +299,13 @@ CS.QUIT >LDA.G PAK.hFileName
>SYSCALL FreeMem >SYSCALL FreeMem
.8 lda hLIBPAK .8 clc
>SYSCALL UnloadLib
clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBPAK .AZ "libpak.o" MSG.USAGE .AS "Usage : UNPAK Archive [DstDir]\r\n"
hLIBPAK .BS 1
MSG1 .AS "PrintF:\r\n"
.AS " %e, %e, %e, %e, %e\r\n"
.AS "StrToF:\r\n"
.AZ " %e, %e\r\n"
MSG2 .AZ "PI/3=%e\r\n"
MSG3 .AZ "COS(PI/3)=%e\r\n"
MSG4 .AZ "LRIntF(99,999,999.9)=%L\r\n"
MSG5 .AZ "Float(123456789)=%e\r\n"
CONST.PI .AZ "3.141592653"
CONST.3 .AZ "3"
FLOAT1 .HS 9B3EBC1FFD 99,999,999.9
FLOAT2 .HS 9E6E6B27FD 999,999,999
FLOAT3 .HS 9E6E6B2800 1,000,000,000
FLOAT4 .HS 8100000000 1
FLOAT5 .HS 9080000000 -32768
LONG1 .DA >123456789
*-------------------------------------- *--------------------------------------
MSG6 .AS "Src Length : %D\r\n" MSG.DEBUG .AS "Src Length : %D\r\n"
.AS "Pass #1 : %D\r\n" .AS "Pass #1 : %D\r\n"
.AS "Pass #2 : %D\r\n" .AS "Pass #2 : %D\r\n"
.AS "BL Count : %D\r\n" .AS "BL Count : %D\r\n"
@ -437,12 +319,6 @@ MSG.DEBUG.S3 .AZ "S3:%h\r\n"
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
MYFLOAT.PI .BS 5
MYFLOAT.3 .BS 5
MYFLOAT3 .BS 5
MYLONG .BS 4
ENDPTR .BS 2
PAK.hFileName .BS 1 PAK.hFileName .BS 1
PAK.FileSize .BS 2 PAK.FileSize .BS 2
PAK.hFileBuf .BS 1 PAK.hFileBuf .BS 1

View File

@ -21,7 +21,22 @@ ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
ZPFileName .BS 2 ZPFileName .BS 2
ZPFileStat .BS 2 ZPFileStat .BS 2
ZPFullPath .BS 2 ZPFullPath .BS 2
ZPRelPath .BS 2
ZPLineBuf .BS 2
bPause .BS 1
bContinue .BS 1
bRecurse .BS 1
bChar .BS 1
bLine .BS 1
bWord .BS 1
bInWord .BS 1
bTotal .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
@ -44,10 +59,9 @@ CS.START cld
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE L.MSG.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR L.MSG.ERR .DA MSG.ERR
L.MSG.TOTAL .DA MSG.TOTAL
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT clc CS.INIT clc
@ -62,15 +76,8 @@ CS.RUN >INC.G ArgIndex
cmp #'-' cmp #'-'
bne .4 bne .4
ldy #1 jsr CS.RUN.CheckOpt
lda (ZPPtr1),y bcc CS.RUN
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.9 >PUSHBI 0 .9 >PUSHBI 0
>LDYA L.MSG.USAGE >LDYA L.MSG.USAGE
@ -78,11 +85,6 @@ CS.RUN >INC.G ArgIndex
lda #E.SYN lda #E.SYN
sec sec
.99 rts .99 rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra CS.RUN
*-------------------------------------- *--------------------------------------
.4 >LDA.G hSrcBasePath .4 >LDA.G hSrcBasePath
bne .9 bne .9
@ -101,6 +103,31 @@ CS.RUN >INC.G ArgIndex
>STYA ZPFullPath >STYA ZPFullPath
txa txa
>STA.G hSrcFullPath >STA.G hSrcFullPath
>LDA.G hSrcBasePath
>SYSCALL GetMemPtr
>STYA ZPPtr1
ldy #$ff
.80 iny
lda (ZPPtr1),y
bne .80
tya
clc
adc ZPFullPath
sta ZPRelPath
lda ZPFullPath+1
adc #0
sta ZPRelPath+1
>LDYAI 256
>SYSCALL getmem
bcs .99
>STYA ZPLineBuf
txa
>STA.G hMem
*-------------------------------------- *--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
@ -119,20 +146,20 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
cmp #$13 Ctrl-S cmp #$13 Ctrl-S
bne .10 bne .10
>LDA.G bPause lda bPause
eor #$ff eor #$ff
sta (pData),y sta bPause
bne CS.RUN.LOOP bne CS.RUN.LOOP
.10 >LDA.G bPause .10 lda bPause
bne CS.RUN.LOOP Pause... bne CS.RUN.LOOP Pause...
jsr GetEntry jsr GetEntry
bcs .9 bcs .9
ldy #S.STAT.P.DRIVE ldy #S.STAT.P.DRIVE
lda (ZPFileStat),y ProDOS Device ? lda (ZPFileStat),y ProDOS Device ?
bne .5 beq .5
jsr CS.RUN.DEV jsr CS.RUN.DEV
bcc CS.RUN.LOOP bcc CS.RUN.LOOP
@ -144,12 +171,12 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
bne .6 bne .6
jsr CS.RUN.DIR jsr CS.RUN.DIR
bcc CS.RUN.LOOP bcs .99
rts bra .8
.6 jsr CS.RUN.FILE .6 jsr CS.RUN.FILE
bcc CS.RUN.LOOP bcs .99
rts bra .8
.9 jsr LeaveSubDir .9 jsr LeaveSubDir
bcs .90 bcs .90
@ -159,22 +186,26 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
.8 jsr GetNextEntry .8 jsr GetNextEntry
jmp CS.RUN.LOOP jmp CS.RUN.LOOP
.90 lda #0 .90 jsr CS.RUN.PrintTstat
lda #0
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN.DIR jsr CS.RUN.GetFilePath CS.RUN.DIR lda bRecurse
bpl .8
>PUSHW ZPFullPath lda (ZPFileName)
cmp #'.'
beq .8
>LDYA ZPFileName
jsr EnterSubDirYA
>PUSHBI 2 jmp CS.RUN.CheckErr
>LDYA L.MSG.DIR
>SYSCALL printf .8 clc
bcs .9 rts
.8 jsr GetNextEntry
clc
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.DEV CS.RUN.DEV
.8 jsr GetNextEntry .8 jsr GetNextEntry
@ -183,50 +214,85 @@ CS.RUN.DEV
*-------------------------------------- *--------------------------------------
CS.RUN.FILE jsr FilterMatch CS.RUN.FILE jsr FilterMatch
bcs .8 no match, skip.... bcs .8 no match, skip....
jsr CS.RUN.GetFilePath jsr CS.RUN.GetFilePath
>PUSHW ZPFullPath jsr CS.RUN.OpenFile
>PUSHBI 2
>LDYA L.MSG.FILE
>SYSCALL printf
bcs .9 bcs .9
.1 >PUSHWI 256
>PUSHW ZPLineBuf
>LDA.G hFile
>SYSCALL fgets
bcs .6
jsr CS.RUN.CheckErr jsr CS.RUN.IncFLine
>LDA.G bRecurse ldy #$ff
bpl .8 stz bInWord
lda (ZPFileName) .2 iny
cmp #'.' lda (ZPLineBuf),y
beq .8 beq .1
cmp #C.SPACE
beq .3
>LDYA ZPFileName cmp #C.TAB
jsr EnterSubDirYA bne .4
.3 lda bInWord
beq .5
jsr CS.RUN.IncFWord
stz bInWord
bra .5
.4 inc bInWord
.5 jsr CS.RUN.IncFChar
bra .2
.6 cmp #MLI.E.EOF
bne .7
jsr CS.RUN.CloseFile
jsr CS.RUN.PrintFstat
bcs .99
jsr CS.RUN.AddFstat2Tstat
lda bTotal
bmi .8
beq .61
lda #$fe
.61 inc
sta bTotal
.8 clc
rts rts
.8 jsr GetNextEntry .7 pha
clc jsr CS.RUN.CloseFile
.9 rts pla
sec
.9 jmp CS.RUN.CheckErr
.99 rts
*-------------------------------------- *--------------------------------------
CS.RUN.CheckErr bcs .1 CS.RUN.CheckErr bcc .9
>LDYA L.MSG.OK pha
>SYSCALL puts
rts
.1 pha
>PUSHA >PUSHA
>PUSHBI 1 >PUSHBI 1
>LDYA L.MSG.ERR >LDYA L.MSG.ERR
>SYSCALL printf >SYSCALL printf
>LDA.G bContinue lda bContinue
eor #$80 eor #$80
asl asl
pla pla
rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetFilePath CS.RUN.GetFilePath
>LDA.G hSrcBasePath >LDA.G hSrcBasePath
@ -242,6 +308,97 @@ CS.RUN.GetFilePath
>SYSCALL StrCat >SYSCALL StrCat
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.OpenFile ldx #12
ldy #fCharCount
lda #0
.1 sta (pData),y
iny
dex
bne .1
>PUSHWZ Aux type
>PUSHBI 0 Type
>PUSHBI O.RDONLY+O.TEXT
>LDYA ZPFullPath
>SYSCALL FOpen
bcs .9
>STA.G hFile
.9 rts
*--------------------------------------
CS.RUN.CloseFile
>LDA.G hFile
>SYSCALL fclose
bcs .9
>STZ.G hFile
.9 rts
*--------------------------------------
CS.RUN.IncFChar phy
ldy #fCharCount
bra CS.RUN.IncF
CS.RUN.IncFLine phy
ldy #fLineCount
bra CS.RUN.IncF
CS.RUN.IncFWord phy
ldy #fWordCount
ldx #4
CS.RUN.IncF lda (pData),y
inc
sta (pData),y
bne .8
iny
dex
bne CS.RUN.IncF
.8 ply
rts
*--------------------------------------
CS.RUN.AddFstat2Tstat
>PUSHL.G fWordCount
>PUSHL.G tWordCount
>FPU ADD32
>PULLL.G tWordCount
>PUSHL.G fLineCount
>PUSHL.G tLineCount
>FPU ADD32
>PULLL.G tLineCount
>PUSHL.G fCharCount
>PUSHL.G tCharCount
>FPU ADD32
>PULLL.G tCharCount
rts
*--------------------------------------
CS.RUN.PrintFstat
>PUSHW ZPRelPath
>PUSHL.G fWordCount
>PUSHL.G fLineCount
>PUSHL.G fCharCount
>PUSHBI 14
>LDYA L.MSG.FILE
>SYSCALL printf
rts
*--------------------------------------
CS.RUN.PrintTstat
lda bTotal
bpl .8
>PUSHL.G tWordCount
>PUSHL.G tLineCount
>PUSHL.G tCharCount
>PUSHBI 12
>LDYA L.MSG.TOTAL
>SYSCALL printf
.8 rts
*--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
@ -253,40 +410,57 @@ CS.QUIT jsr LeaveSubDir
>SYSCALL FreeMem >SYSCALL FreeMem
.1 >LDA.G hSrcFullPath .1 >LDA.G hSrcFullPath
beq .2
>SYSCALL FreeMem
.2 >LDA.G hMem
beq .8 beq .8
>SYSCALL FreeMem >SYSCALL FreeMem
.8 clc .8 clc
rts rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
sec
rts
.3 ldy OptionVars,x
lda #$ff
sta 0,y
clc
rts
*-------------------------------------- *--------------------------------------
.INB USR/SRC/BIN/X.FILEENUM.S .INB USR/SRC/BIN/X.FILEENUM.S
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
OptionList >PSTR "CRMLWcrmlw" OptionList .AS "CRMLWcrmlw"
OptionVars .DA #bContinue,#bRecurse,#bChar,#bLine,#bWord OptionVars .DA #bContinue,#bRecurse,#bChar,#bLine,#bWord
.DA #bContinue,#bRecurse,#bChar,#bLine,#bWord .DA #bContinue,#bRecurse,#bChar,#bLine,#bWord
*-------------------------------------- *--------------------------------------
MSG.USAGE .AS "Usage : PAK Archive [File *,? wildcards allowed]\r\n" MSG.USAGE .AS "Usage : WC File(s) (*,? wildcards allowed)\r\n"
.AS " -C : Continue on error\r\n" .AS " -C : Continue on error\r\n"
.AS " -R : Recurse subdirectories\r\n" .AS " -R : Recurse subdirectories\r\n"
.AS " -M : Print the CHAR counts\r\n" .AS " -M : Print the CHAR counts\r\n"
.AS " -L : Print the LINE counts\r\n" .AS " -L : Print the LINE counts\r\n"
.AZ " -W : Print the WORD counts\r\n" .AZ " -W : Print the WORD counts\r\n"
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n" MSG.ERR .AZ "[%h]\r\n"
MSG.DIR .AZ "Adding Dir :%S..." MSG.FILE .AZ "%10L %10L %10L %s\r\n"
MSG.FILE .AZ "Adding File:%S..." MSG.TOTAL .AZ "%10L %10L %10L\r\n"
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
ArgIndex .BS 1 ArgIndex .BS 1
bContinue .BS 1
bRecurse .BS 1
bChar .BS 1
bLine .BS 1
bWord .BS 1
bPrintTotal .BS 1 bPrintTotal .BS 1
@ -298,17 +472,11 @@ tCharCount .BS 4
tLineCount .BS 4 tLineCount .BS 4
tWordCount .BS 4 tWordCount .BS 4
bPause .BS 1
hFullPath .BS 1
hSrcFullPath .BS 1 hSrcFullPath .BS 1
STAT .BS S.STAT hFile .BS 1
Index .BS 1 hMem .BS 1
hDIRs .BS X.MAX.RECURSE
hDIRENTs .BS X.MAX.RECURSE .INB USR/SRC/BIN/X.FILEENUM.G
oDIRENTs .BS X.MAX.RECURSE*2
hSrcBasePath .BS 1
hFilter .BS 1
DS.END DS.END
.ED .ED