A2osX/BIN/PAKME.S.txt

344 lines
6.0 KiB
Plaintext
Raw Normal View History

2019-10-16 15:23:29 +00:00
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/PAKME
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/PAK.I
.INB INC/LIBPAK.I
.INB INC/MLI.E.I
2019-10-29 14:47:25 +00:00
*--------------------------------------
CHUNK.MAX .EQ 32
2019-10-16 15:23:29 +00:00
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPSrcBufPtr .BS 2
ZPDstBufPtr .BS 2
2019-10-29 14:47:25 +00:00
ZPSrcFileSize .BS 2
ZPDstTableOfs .BS 2
ZPChunkIndex .BS 1
ZPChunkCnt .BS 1
hSrcFile .BS 1
hDstFile .BS 1
2019-10-16 15:23:29 +00:00
bPause .BS 1
2019-10-29 14:47:25 +00:00
2019-10-16 15:23:29 +00:00
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.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
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBPAK .DA LIBPAK
L.MSG.USAGE .DA MSG.USAGE
2019-10-29 14:47:25 +00:00
L.MSG.SRCFILE .DA MSG.SRCFILE
L.MSG.CHUNK .DA MSG.CHUNK
2019-10-16 15:23:29 +00:00
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
L.MSG.E.IARC .DA MSG.E.IARC
2019-10-29 14:47:25 +00:00
L.TAG .DA TAG
2019-10-16 15:23:29 +00:00
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBPAK
>SYSCALL LoadLib
bcs .9
sta hLIB
.9 rts
*--------------------------------------
2019-10-29 14:47:25 +00:00
CS.RUN ldy #S.PS.ARGC
lda (pPs),y
cmp #2
bne .9
jsr CS.RUN.CheckSrcFile
bcs .99
>PUSHW.G STATBUF+S.STAT.P.AUXTYPE
>PUSHB.G STATBUF+S.STAT.P.TYPE
>PUSHBI O.CREATE+O.WRONLY
lda #2
2019-10-16 15:23:29 +00:00
>SYSCALL ArgV
2019-10-29 14:47:25 +00:00
>SYSCALL FOpen
bcs .99
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
sta hDstFile
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
bra CS.RUN.START
2019-10-16 15:23:29 +00:00
.9 >PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
lda #E.SYN
sec
.99 rts
*--------------------------------------
2019-10-29 14:47:25 +00:00
CS.RUN.START >PUSHB.G PAKME.HEADER+7
>PUSHW ZPSrcFileSize
>PUSHW.G PAKME.HEADER+5
lda #1
>SYSCALL ArgV
>PUSHYA
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>PUSHBI 7
>LDYA L.MSG.SRCFILE
>SYSCALL printf
2019-10-16 15:23:29 +00:00
*--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
2019-10-29 14:47:25 +00:00
bcs .9
2019-10-16 15:23:29 +00:00
tay
bne .1
>SYSCALL GetChar
2019-10-29 14:47:25 +00:00
bcs .9
2019-10-16 15:23:29 +00:00
cmp #$03 Ctrl-C
2019-10-29 14:47:25 +00:00
beq .9 Abort....
2019-10-16 15:23:29 +00:00
cmp #$13 Ctrl-S
bne .1
lda bPause
eor #$ff
sta bPause
bne CS.RUN.LOOP
.1 lda bPause
bne CS.RUN.LOOP Pause...
*--------------------------------------
2019-10-29 14:47:25 +00:00
.7 inc ZPChunkIndex
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
lda ZPChunkIndex
asl
clc
adc #PAKME.TABLE
tay
lda (pData),y
pha
iny
lda (pData),y
ply
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>PUSHYA
lda ZPChunkIndex
>PUSHA
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>PUSHBI 3
>LDYA L.MSG.CHUNK
>SYSCALL printf
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
dec ZPChunkCnt
bne CS.RUN.LOOP
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
.8 lda #0
2019-10-16 15:23:29 +00:00
sec
2019-10-29 14:47:25 +00:00
.9 rts
2019-10-16 15:23:29 +00:00
*--------------------------------------
2019-10-29 14:47:25 +00:00
CS.RUN.CheckSrcFile
>PUSHWZ Aux type
>PUSHBI 0 Type
>PUSHBI O.RDONLY
lda #1
>SYSCALL ArgV
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>SYSCALL FOpen
bcs .99
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
sta hSrcFile
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>PUSHEA.G STATBUF
lda hSrcFile
>SYSCALL fstat
.99 bcs .9
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>LDA.G STATBUF+S.STAT.SIZE+3
dey
ora (pData),y
bne .90
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
dey
lda (pData),y
sta ZPSrcFileSize+1
dey
lda (pData),y
sta ZPSrcFileSize
jsr CS.RUN.CheckTAG
2019-10-16 15:23:29 +00:00
bcs .9
2019-10-29 14:47:25 +00:00
jsr CS.RUN.GetTable
2019-10-16 15:23:29 +00:00
bcs .9
2019-10-29 14:47:25 +00:00
clc
rts
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
.90 lda #MLI.E.INCFF
2019-10-16 15:23:29 +00:00
sec
2019-10-29 14:47:25 +00:00
.9
CS.RUN.CheckSrcFile.RTS
rts
2019-10-16 15:23:29 +00:00
*--------------------------------------
2019-10-29 14:47:25 +00:00
CS.RUN.CheckTAG >PUSHBI SEEK.SET
>PUSHWZ
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
lda ZPSrcFileSize
2019-10-16 15:23:29 +00:00
sec
2019-10-29 14:47:25 +00:00
sbc #10
tay
lda ZPSrcFileSize+1
sbc #0
2019-10-16 15:23:29 +00:00
>PUSHYA
2019-10-29 14:47:25 +00:00
lda hSrcFile
>SYSCALL fseek
bcs CS.RUN.CheckSrcFile.RTS
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>PUSHWI 10
>PUSHEA.G PAKME.HEADER
lda hSrcFile
2019-10-16 15:23:29 +00:00
>SYSCALL fread
2019-10-29 14:47:25 +00:00
bcs CS.RUN.CheckSrcFile.RTS
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
ldx #4
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
ldy #PAKME.HEADER+4
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
.1 lda TAG,x
cmp (pData),y
bne .90
2019-10-16 15:23:29 +00:00
dey
2019-10-29 14:47:25 +00:00
dex
bpl .1
2019-10-16 15:23:29 +00:00
clc
rts
2019-10-29 14:47:25 +00:00
.90 lda #MLI.E.INCFF
sec
2019-10-16 15:23:29 +00:00
.9 rts
*--------------------------------------
2019-10-29 14:47:25 +00:00
CS.RUN.GetTable >PUSHBI SEEK.SET
>PUSHWZ
>LDA.G PAKME.HEADER+8
sec
>SBC.G PAKME.HEADER+5
sta ZPDstTableOfs+1
pha
>LDA.G PAKME.HEADER+9
>SBC.G PAKME.HEADER+6
sta ZPDstTableOfs
ply
>PUSHYA
lda hSrcFile
>SYSCALL fseek
2019-10-16 15:23:29 +00:00
bcs .9
2019-10-29 14:47:25 +00:00
>LDA.G PAKME.HEADER+7
sta ZPChunkCnt
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
asl
tay
lda #0
>PUSHYA
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
>PUSHEA.G PAKME.TABLE
lda hSrcFile
>SYSCALL fread
2019-10-16 15:23:29 +00:00
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
2019-10-29 14:47:25 +00:00
CS.QUIT lda hDstFile
2019-10-16 15:23:29 +00:00
beq .2
2019-10-29 14:47:25 +00:00
>SYSCALL fclose
2019-10-16 15:23:29 +00:00
2019-10-29 14:47:25 +00:00
.2 lda hSrcFile
2019-10-16 15:23:29 +00:00
beq .3
>SYSCALL fclose
.3 >LDA.G hDstBuf
beq .4
>SYSCALL FreeMem
.4 >LDA.G hSrcBuf
beq .5
>SYSCALL FreeMem
.5 lda hLIB
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
CS.END
*--------------------------------------
MSG.USAGE .AZ "Usage : PAKME SourceBIN PackedBIN\r\n"
2019-10-29 14:47:25 +00:00
MSG.SRCFILE .AZ "Source File : %s, Org=$%H Size=%D, %d Chunks.\r\n"
MSG.CHUNK .AZ " Chunk #%02d : Ofs=%D\r\n"
2019-10-16 15:23:29 +00:00
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n"
MSG.E.IARC .AZ "Invalid/corrupt archive"
2019-10-29 14:47:25 +00:00
TAG .AZ "PAKME"
2019-10-16 15:23:29 +00:00
*--------------------------------------
LIBPAK .AZ "libpak"
hLIB .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
hSrcBuf .BS 1
hDstBuf .BS 1
Shunk.SrcSize .BS 2
Shunk.DstSize .BS 2
2019-10-29 14:47:25 +00:00
STATBUF .BS S.STAT
PAKME.HEADER .BS 10
PAKME.TABLE .BS CHUNK.MAX*2
2019-10-16 15:23:29 +00:00
PAKSTAT .BS S.PAKSTAT
DS.END .ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/PAKME.S
ASM