Kernel 0.9.1 : LIBPAK cleanup...

This commit is contained in:
Rémy GIBERT 2018-02-05 16:25:25 +00:00
parent 3d8081601b
commit 22719fb7cc
6 changed files with 233 additions and 44 deletions

Binary file not shown.

Binary file not shown.

View File

@ -24,7 +24,7 @@
<Keywords name="Folders in comment, open"></Keywords>
<Keywords name="Folders in comment, middle"></Keywords>
<Keywords name="Folders in comment, close"></Keywords>
<Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED&#x000D;&#x000A;.DO&#x000D;&#x000A;.ELSE&#x000D;&#x000A;.FIN</Keywords>
<Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.AZ&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED&#x000D;&#x000A;.DO&#x000D;&#x000A;.ELSE&#x000D;&#x000A;.FIN</Keywords>
<Keywords name="Keywords2">adc&#x000D;&#x000A;and&#x000D;&#x000A;asl&#x000D;&#x000A;bit&#x000D;&#x000A;brk&#x000D;&#x000A;clc&#x000D;&#x000A;cld&#x000D;&#x000A;cli&#x000D;&#x000A;clv&#x000D;&#x000A;cmp&#x000D;&#x000A;cpx&#x000D;&#x000A;cpy&#x000D;&#x000A;dec&#x000D;&#x000A;dex&#x000D;&#x000A;dey&#x000D;&#x000A;eor&#x000D;&#x000A;inc&#x000D;&#x000A;inx&#x000D;&#x000A;iny&#x000D;&#x000A;lda&#x000D;&#x000A;ldx&#x000D;&#x000A;ldy&#x000D;&#x000A;lsr&#x000D;&#x000A;nop&#x000D;&#x000A;ora&#x000D;&#x000A;rmb&#x000D;&#x000A;rol&#x000D;&#x000A;ror&#x000D;&#x000A;rti&#x000D;&#x000A;rts&#x000D;&#x000A;sbc&#x000D;&#x000A;sec&#x000D;&#x000A;sed&#x000D;&#x000A;sei&#x000D;&#x000A;smb&#x000D;&#x000A;sta&#x000D;&#x000A;stp&#x000D;&#x000A;stx&#x000D;&#x000A;sty&#x000D;&#x000A;stz&#x000D;&#x000A;tax&#x000D;&#x000A;tay&#x000D;&#x000A;trb&#x000D;&#x000A;tsb&#x000D;&#x000A;tsx&#x000D;&#x000A;txa&#x000D;&#x000A;txs&#x000D;&#x000A;tya&#x000D;&#x000A;wai</Keywords>
<Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;</Keywords>
<Keywords name="Keywords4">.1&#x000D;&#x000A;.2&#x000D;&#x000A;.3&#x000D;&#x000A;.4&#x000D;&#x000A;.5&#x000D;&#x000A;.6&#x000D;&#x000A;.7&#x000D;&#x000A;.8&#x000D;&#x000A;.9&#x000D;&#x000A;</Keywords>

22
INC/LIBPAK.I.txt Normal file
View File

@ -0,0 +1,22 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
*--------------------------------------
S.PAKSTAT.SIZE .EQ 0
S.PAKSTAT.BL .EQ 2
S.PAKSTAT.REP .EQ 4
S.PAKSTAT.S3 .EQ 6
S.PAKSTAT.S4 .EQ 8
S.PAKSTAT.STORE .EQ 10
*
S.PAKSTAT .EQ 12
*--------------------------------------
LIBPAK.Pak .EQ 4
LIBPAK.UnPak .EQ 6
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/INC/LIBPAK.I

View File

@ -26,14 +26,6 @@ S.PAKHDR.SHORT3 .EQ 18
*
S.PAKHDR .EQ 26
*--------------------------------------
S.PAKSTAT.BL .EQ 0
S.PAKSTAT.REP .EQ 2
S.PAKSTAT.S3 .EQ 4
S.PAKSTAT.S4 .EQ 6
S.PAKSTAT.STORE .EQ 8
*
S.PAKSTAT .EQ 10
*--------------------------------------
PIPELEN .EQ 18
*--------------------------------------
* BITSTREAM :
@ -57,11 +49,13 @@ PIPELEN .EQ 18
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBPAK.I
*--------------------------------------
Pak.SrcPtr .EQ ZPLIB
Pak.SrcBlPtr .EQ ZPLIB+2
Pak.SrcBlPtrT .EQ ZPLIB+4
Pak.DstPtr .EQ ZPLIB+6
Pak.StatPtr .EQ ZPLIB+8
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -86,34 +80,43 @@ CS.START cld
LIB.LOAD
LIB.UNLOAD clc
rts
*--------------------------------------
* In :
* PULLW = Src PTR
* PULLW = Src LEN
* PULLW = Dst PTR Compressed Buffer
*--------------------------------------
Pak >PULLYA
>STYA Pak.Src Init for pass #1
>STYA Pak.SrcPtr
*/--------------------------------------
* # Pak
* ## In :
* PUSHW = Src PTR
* PUSHW = Src Length
* PUSHW = Dst PTR Output Buffer
* PUSHW = Dst PTR S.PAKSTAT
*\--------------------------------------
Pak >PULLW Pak.StatPtr
>PULLW Pak.DstPtr
>PULLA Get Src Len LO
eor #$ff
sta Pak.SrcCnt
sta Pak.Cnt Init for pass #1
sta Pak.DstCnt
tax
>PULLA Get Src Len HI
eor #$ff
sta Pak.SrcCnt+1
sta Pak.Cnt+1 Init for pass #1
sta Pak.DstCnt+1
tay
>PULLW Pak.DstPtr
txa
jsr Pak.PutByte
tya
jsr Pak.PutByte
jsr Pak.PutByte
>PULLYA Get Src PTR
>STYA Pak.Src Init for pass #1
>STYA Pak.SrcPtr
ldx #S.PAKSTAT-1
.1 stz PakStat,x Reset Stats
dex
bpl .1
@ -121,6 +124,7 @@ Pak >PULLYA
* PASS #1 : Count occurence for each value...
Pak.1 ldx #0
.1 stz Pak.CntL,x
stz Pak.CntH,x
inx
@ -173,7 +177,7 @@ Pak.1 ldx #0
stz Pak.CntH,x
dey
bpl .6
ldx #15
.9 lda PakHdr+S.PAKHDR.SHORT4,x Store SHORT4 in reverse order
@ -203,7 +207,7 @@ Pak.2 >LDYA Pak.Src Init for pass #2
stz Pak.Byte
stz Pak.PipeLen
Pak.2.LOOP ldx Pak.PipeLen Always fill Bytes in the PIPE until full
.1 jsr Pak.GetByte Load PIPE....
@ -222,7 +226,14 @@ Pak.2.LOOP ldx Pak.PipeLen Always fill Bytes in the PIPE until full
jmp Pak.2.Store only one....store it
Pak.2.EXIT clc
Pak.2.EXIT ldy #S.PAKSTAT-1
.1 lda PakStat,y
* sta (Pak.StatPtr),y
dey
bpl .1
clc
rts
* try finding REPeating same bytes.....
@ -241,6 +252,7 @@ Pak.2.REP ldx #0
phx REP 1 + 0 or more....save REP count for later....
jsr Pak.PutA a = byte to store
bcs .91
lda #%11100000
plx
@ -251,10 +263,13 @@ Pak.2.REP ldx #0
.3 ldy #4
jsr Pak.PutYBits
bcs .91
txa
beq .4 if not REP 2 or more no extra count
ldy #4
jsr Pak.PutYBits
bcs .90
.4 pla
clc
@ -264,7 +279,12 @@ Pak.2.REP ldx #0
ldx #S.PAKSTAT.REP
jsr Pak.UpdateStats
jmp Pak.2.LOOP
jmp Pak.2.LOOP
.91 pla
.90 lda #K.E.OOM
sec
rts
Pak.2.BL
* Try finding best matching BackLink between SrcBlPtr and SrcPtr (max 512)
.4 lda Pak.SrcPtr
@ -306,6 +326,7 @@ Pak.2.BL
lda #%1100000
ldy #3
jsr Pak.PutYBits
bcs .91
lda Pak.Limit
sec
@ -314,6 +335,7 @@ Pak.2.BL
ldy #8
jsr Pak.PutYBits
bcs .92
plp
lda Pak.Limit+1
@ -321,7 +343,7 @@ Pak.2.BL
sbc Pak.SrcBlPtrT+1
jsr Pak.PutBit
bcs .91
ply Get back BL len
phy
@ -336,10 +358,17 @@ Pak.2.BL
asl
ldy #4 store 4 bits len
jsr Pak.PutYBits
bcs .90
ldx #S.PAKSTAT.BL
jsr Pak.UpdateStats
jmp Pak.2.LOOP
.92 pla
.91 pla
.90 lda #K.E.OOM
sec
rts
* No match...try starting at next byte
.9 inc Pak.SrcBlPtrT
bne .5
@ -361,9 +390,11 @@ Pak.2.Store lda Pak.Pipe
lda #0
ldy #1
jsr Pak.PutYBits write 0
bcs .9
lda Pak.Pipe ...and byte
jsr Pak.PutA
bcs .9
ldy #1
jsr Pak.StripPipe
@ -387,26 +418,39 @@ Pak.2.Store lda Pak.Pipe
ldy #6
.8 jsr Pak.PutYBits write 100xxxx
bcs .9
ldy #1
jsr Pak.StripPipe
jmp Pak.2.LOOP
.9 lda #K.E.OOM
sec
rts
*--------------------------------------
Pak.PutA ldy #8
*--------------------------------------
Pak.PutYBits asl
jsr Pak.PutBit
bcs .9
dey
bne Pak.PutYBits
rts
.9 rts
*--------------------------------------
* Pak.PutBit (bit in C)
*--------------------------------------
Pak.PutBit ldx #$ff
Pak.PutBit ldx #$ff SELF MODIFIED
pha
bne .1
lda Pak.Byte
php
jsr Pak.PutByte
bcs .9
plp
stz Pak.Byte
ldx #8
@ -414,21 +458,42 @@ Pak.PutBit ldx #$ff
stx Pak.PutBit+1
bcc .8 Nothing to "light up"
lda Pak.Byte
lda Pak.BitMask,x
sta Pak.Byte
tsb Pak.Byte
clc
.8 pla
rts
rts
.9 plp
pla
sec
rts
*--------------------------------------
Pak.PutByte sta (Pak.DstPtr)
inc Pak.DstPtr
Pak.PutByte inc Pak.DstCnt
bne .1
inc Pak.DstCnt+1
beq .9
bra .8
.1 sta (Pak.DstPtr)
inc Pak.DstPtr
bne .2
inc Pak.DstPtr+1
.1 inc PakHdr+S.PAKHDR.LEN
bne .2
.2 inc PakHdr+S.PAKHDR.LEN
bne .3
inc PakHdr+S.PAKHDR.LEN+1
.2
.3 inc PakStat+S.PAKSTAT.SIZE
bne .8
inc PakStat+S.PAKSTAT.SIZE+1
.8 clc
rts
.9 sec
rts
*--------------------------------------
* Y = count to remove from PIPE
@ -454,9 +519,9 @@ Pak.UpdateStats inc PakStat,x
inc PakStat+1,x
.8 rts
*--------------------------------------
Pak.GetByte inc UnPak.Cnt
Pak.GetByte inc Pak.Cnt
bne .1
inc UnPak.Cnt+1
inc Pak.Cnt+1
beq .9
.1 lda (Pak.SrcPtr)
@ -634,12 +699,13 @@ CS.END
Pak.Src .BS 2
Pak.SrcCnt .BS 2
Pak.Cnt .BS 2
Pak.DstCnt .BS 2
Pak.CntL .BS 256
Pak.CntH .BS 256
Pak.Byte .BS 1
Pak.Limit .BS 2
Pak.PipeLen .BS 1
Pak.Pipe .BS 18
Pak.Pipe .BS PIPELEN
Pak.BitMask .HS 0102040810204080
*--------------------------------------
PakHdr .BS S.PAKHDR

View File

@ -8,6 +8,7 @@ AUTO 4,1
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBPAK.I
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -28,6 +29,7 @@ CS.START cld
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBPAK .DA LIBPAK
L.FLOAT1 .DA FLOAT1
L.FLOAT2 .DA FLOAT2
L.FLOAT3 .DA FLOAT3
@ -41,12 +43,78 @@ L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
L.MSG4 .DA MSG4
L.MSG5 .DA MSG5
L.MSG6 .DA MSG6
.DA 0
*--------------------------------------
CS.INIT clc
CS.INIT >LDYA L.LIBPAK
>SYSCALL LoadLib.YA
bcs .9
sta hLIBPAK
clc
.9 rts
*--------------------------------------
CS.RUN ldy #S.PS.ARGC
lda (pPs),y
bne CS.RUN.Pak
jmp CS.RUN.Math
*--------------------------------------
CS.RUN.Pak >PUSHWI 0 Aux type
>PUSHBI 0
>PUSHBI SYS.FOpen.R
lda #1
>SYSCALL GetArg.A
>SYSCALL RealPath.YA
>PUSHYA
txa
>STA.G PAK.hFileName
>SYSCALL LoadFile
bcs .9
>STYA.G PAK.FileSize
txa
>STA.G PAK.hFileBuf
>LDYA.G PAK.FileSize
>SYSCALL GetMem.YA
bcs .9
txa
>STA.G PAK.hOutBuf
>LDA.G PAK.hFileBuf
>SYSCALL GetMemPtr.A
>PUSHYA
>PUSHW.G PAK.FileSize
>LDA.G PAK.hOutBuf
>SYSCALL GetMemPtr.A
>PUSHYA
>PUSHEA.G PAK.Stat
>LIBCALL hLIBPAK,LIBPAK.Pak
bcc .1
.9 rts
.1 >PUSHW.G PAK.Stat+S.PAKSTAT.STORE
>PUSHW.G PAK.Stat+S.PAKSTAT.S4
>PUSHW.G PAK.Stat+S.PAKSTAT.S3
>PUSHW.G PAK.Stat+S.PAKSTAT.REP
>PUSHW.G PAK.Stat+S.PAKSTAT.BL
>PUSHW.G PAK.Stat+S.PAKSTAT.SIZE
>PUSHW.G PAK.FileSize
>LDYA L.MSG6
>SYSCALL PrintF.YA
lda #0
sec
rts
*--------------------------------------
CS.RUN >PUSHEA.G ENDPTR
CS.RUN.Math >PUSHEA.G ENDPTR
>PUSHW L.CONST2
>PUSHEA.G MYFLOAT2
>SYSCALL StrToF
@ -99,7 +167,6 @@ CS.RUN >PUSHEA.G ENDPTR
>PUSHEA.G MYFLOAT1
>LDYA L.MSG5
>SYSCALL PrintF.YA
*--------------------------------------
lda #0
sec
rts
@ -107,11 +174,32 @@ CS.RUN >PUSHEA.G ENDPTR
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT clc
CS.QUIT >LDA.G PAK.hFileName
beq .1
>SYSCALL FreeMem.A
.1 >LDA.G PAK.hFileBuf
beq .2
>SYSCALL FreeMem.A
.2 >LDA.G PAK.hOutBuf
beq .8
>SYSCALL FreeMem.A
.8 lda hLIBPAK
>SYSCALL UnloadLib.A
clc
rts
*--------------------------------------
CS.END
MSG1 .AZ "PrintF:%e, %e, %e\r\n%e, %e\r\nStrToF:%e, %e\r\n"
LIBPAK .AZ "libpak.o"
hLIBPAK .BS 1
MSG1 .AS "PrintF:%e, %e, %e\r\n"
.AS "%e, %e\r\n"
.AZ "StrToF:%e, %e\r\n"
FLOAT1 .HS 9B3EBC1FFD 99,999,999.9
FLOAT2 .HS 9E6E6B27FD 999,999,999
FLOAT3 .HS 9E6E6B2800 1,000,000,000
@ -124,6 +212,13 @@ MSG2 .AZ "PI/3=%e\r\n"
MSG3 .AZ "COS(PI/3)=%e\r\n"
MSG4 .AZ "Long=%L\r\n"
MSG5 .AZ "Float=%e\r\n"
MSG6 .AS "Src Length : %D\r\n"
.AS "Compressed : %D\r\n"
.AS "BL Count : %D\r\n"
.AS "REP Count : %D\r\n"
.AS "S3 Count : %D\r\n"
.AS "S4 Count : %D\r\n"
.AZ "STO Count : %D\r\n"
*--------------------------------------
.DUMMY
.OR 0
@ -133,6 +228,12 @@ MYFLOAT2 .BS 5
MYFLOAT3 .BS 5
MYLONG .BS 4
ENDPTR .BS 2
PAK.hFileName .BS 1
PAK.FileSize .BS 2
PAK.hFileBuf .BS 1
PAK.hOutBuf .BS 1
PAK.Stat .BS S.PAKSTAT
DS.END
.ED
*--------------------------------------