diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 2290c759..5484a193 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6777207a..f5236965 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/PAKME.S.txt b/BIN/PAKME.S.txt index 241627b4..68094d58 100644 --- a/BIN/PAKME.S.txt +++ b/BIN/PAKME.S.txt @@ -19,22 +19,24 @@ CHUNK.MAX .EQ 32 ZS.START ZPPtr1 .BS 2 ZPPtr2 .BS 2 - -ZPSrcBufPtr .BS 2 -ZPDstBufPtr .BS 2 - ZPSrcFileSize .BS 2 ZPDstTableOfs .BS 2 +hSrcFile .BS 1 +hDstFile .BS 1 ZPChunkIndex .BS 1 ZPChunkCnt .BS 1 ZPChunkOfs .BS 2 ZPChunkLen .BS 2 -hSrcFile .BS 1 -hDstFile .BS 1 -bPause .BS 1 +ZPChunkPakedLen .BS 2 +ZPChunkNewOfs .BS 2 +hSrcBuf .BS 1 +hDstBuf .BS 1 +ZPSrcBufPtr .BS 2 +ZPDstBufPtr .BS 2 +bPause .BS 1 ZS.END .ED *-------------------------------------- @@ -61,8 +63,7 @@ L.LIBPAK .DA LIBPAK L.MSG.USAGE .DA MSG.USAGE L.MSG.SRCFILE .DA MSG.SRCFILE L.MSG.CHUNK .DA MSG.CHUNK -L.MSG.OK .DA MSG.OK -L.MSG.ERR .DA MSG.ERR +L.MSG.PAKED .DA MSG.PAKED L.MSG.E.IARC .DA MSG.E.IARC L.TAG .DA TAG .DA 0 @@ -104,31 +105,62 @@ CS.RUN ldy #S.PS.ARGC sec .99 rts *-------------------------------------- -CS.RUN.START >PUSHB.G PAKME.HEADER+7 - >PUSHW ZPSrcFileSize +CS.RUN.START >PUSHW ZPDstTableOfs + >PUSHB.G PAKME.HEADER+7 >PUSHW.G PAKME.HEADER+5 + >PUSHW ZPSrcFileSize lda #1 >SYSCALL ArgV >PUSHYA - >PUSHBI 7 + >PUSHBI 9 >LDYA L.MSG.SRCFILE >SYSCALL printf + >LDYA ZPDstTableOfs + jsr CS.RUN.GetSrcBufYA + bcs CS.RUN.RTS + + >PUSHBI SEEK.SET + >PUSHWZ + >PUSHWZ + lda hSrcFile + >SYSCALL fseek + bcs CS.RUN.RTS + + >PUSHW ZPDstTableOfs + >PUSHW ZPSrcBufPtr + lda hSrcFile + >SYSCALL fread + bcs CS.RUN.RTS + + >PUSHW ZPDstTableOfs + >PUSHW ZPSrcBufPtr + lda hDstFile + >SYSCALL fwrite + bcs CS.RUN.RTS + + jsr CS.QUIT.BUF + + jsr CS.RUN.WriteTable Write Fake table + + bcc CS.RUN.LOOP + +CS.RUN.RTS rts *-------------------------------------- CS.RUN.LOOP ldy #S.PS.hStdIn lda (pPS),y >SYSCALL feof - bcs .9 + bcs CS.RUN.RTS tay bne .1 >SYSCALL GetChar - bcs .9 + bcs CS.RUN.RTS cmp #$03 Ctrl-C - beq .9 Abort.... + beq CS.RUN.RTS Abort.... cmp #$13 Ctrl-S bne .1 @@ -142,22 +174,47 @@ CS.RUN.LOOP ldy #S.PS.hStdIn bne CS.RUN.LOOP Pause... *-------------------------------------- jsr CS.RUN.GetChunk - bcs .9 + bcs CS.RUN.RTS >PUSHW ZPChunkLen >PUSHW ZPChunkOfs - >PUSHB ZPChunkIndex - >PUSHBI 3 + lda ZPChunkIndex + inc + >PUSHA + >PUSHBI 5 >LDYA L.MSG.CHUNK >SYSCALL printf - + bcs .9 + jsr CS.RUN.Pak + bcs .9 + + jsr CS.RUN.WritePak + bcs .9 + + >PUSHW ZPChunkNewOfs + >PUSHW ZPChunkPakedLen + >PUSHBI 4 + >LDYA L.MSG.PAKED + >SYSCALL printf + bcs .9 + + jsr CS.QUIT.BUF + + jsr CS.RUN.UpdateTable + inc ZPChunkIndex dec ZPChunkCnt beq .8 - jmp CS.RUN.LOOP + jmp CS.RUN.LOOP -.8 lda #0 +.8 jsr CS.RUN.SeekTable + bcs .9 + + jsr CS.RUN.WriteTable Write modifid Table + bcs .9 + + lda #0 sec .9 rts *-------------------------------------- @@ -245,21 +302,16 @@ CS.RUN.CheckTAG >PUSHBI SEEK.SET sec .9 rts *-------------------------------------- -CS.RUN.GetTable >PUSHBI SEEK.SET - >PUSHWZ - - >LDA.G PAKME.HEADER+8 +CS.RUN.GetTable >LDA.G PAKME.HEADER+8 sec >SBC.G PAKME.HEADER+5 - sta ZPDstTableOfs+1 - pha + sta ZPDstTableOfs + >LDA.G PAKME.HEADER+9 >SBC.G PAKME.HEADER+6 - sta ZPDstTableOfs - ply - >PUSHYA - lda hSrcFile - >SYSCALL fseek + sta ZPDstTableOfs+1 + + jsr CS.RUN.SeekTable bcs .9 >LDA.G PAKME.HEADER+7 @@ -278,8 +330,6 @@ CS.RUN.GetTable >PUSHBI SEEK.SET *-------------------------------------- CS.RUN.GetChunk lda ZPChunkIndex - inc ZPChunkIndex - asl clc adc #PAKME.TABLE+1 @@ -297,7 +347,7 @@ CS.RUN.GetChunk lda ZPChunkIndex pla sbc (pData),y sta ZPChunkOfs+1 - + >PUSHBI SEEK.SET >PUSHWZ >PUSHW ZPChunkOfs @@ -312,15 +362,26 @@ CS.RUN.GetChunk lda ZPChunkIndex bcs .9 >LDA.G CHUNK.HEADER -* bne .90 + bne .90 >LDA.G CHUNK.HEADER+1 sta ZPChunkLen + pha iny lda (pData),y sta ZPChunkLen+1 + ply - clc + jsr CS.RUN.GetSrcBufYA + bcs .9 + + >PUSHW ZPChunkLen + >PUSHW ZPSrcBufPtr + lda hSrcFile + >SYSCALL fread + bcs .9 + +* clc rts .90 lda #MLI.E.INCFF @@ -328,6 +389,89 @@ CS.RUN.GetChunk lda ZPChunkIndex .9 rts *-------------------------------------- +CS.RUN.GetSrcBufYA + >SYSCALL getmem + bcs .9 + stx hSrcBuf + >STYA ZPSrcBufPtr +.9 rts +*-------------------------------------- +CS.RUN.Pak >LDYA ZPChunkLen + >SYSCALL getmem + bcs .9 + stx hDstBuf + >STYA ZPDstBufPtr + + >PUSHEA.G PAKSTAT + >PUSHW ZPDstBufPtr + >PUSHW ZPChunkLen + >PUSHW ZPSrcBufPtr + >LIBCALL hLIB,LIBPAK.Pak + bcs .9 + >STYA ZPChunkPakedLen +.9 rts +*-------------------------------------- +CS.RUN.SeekTable + >PUSHBI SEEK.SET + >PUSHWZ + >PUSHW ZPDstTableOfs + lda hSrcFile + >SYSCALL fseek + rts +*-------------------------------------- +CS.RUN.WriteTable + lda ZPChunkCnt + asl + tay + lda #0 + >PUSHYA + >PUSHEA.G PAKME.TABLE + lda hDstFile + >SYSCALL fwrite + rts +*-------------------------------------- +CS.RUN.WritePak lda hDstFile + >SYSCALL ftell + bcs .9 + + >PULLW ZPChunkNewOfs + inc pStack + inc pStack + + >PUSHW ZPChunkPakedLen + >PUSHW ZPDstBufPtr + lda hDstFile + >SYSCALL fwrite +.9 rts +*-------------------------------------- +CS.RUN.UpdateTable + ldy #PAKME.HEADER+6 + lda (pData),y + pha + + dey + lda (pData),y + pha + + lda ZPChunkIndex + + asl + clc + adc #PAKME.TABLE + tay + + pla + clc + adc ZPChunkNewOfs + sta (pData),y + + iny + + pla + adc ZPChunkNewOfs+1 + sta (pData),y + rts +*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- @@ -339,15 +483,9 @@ CS.QUIT lda hDstFile beq .3 >SYSCALL fclose -.3 >LDA.G hDstBuf - beq .4 - >SYSCALL FreeMem +.3 jsr CS.QUIT.BUF -.4 >LDA.G hSrcBuf - beq .5 - >SYSCALL FreeMem - -.5 lda hLIB + lda hLIB beq .8 >SYSCALL UnloadLib @@ -355,13 +493,24 @@ CS.QUIT lda hDstFile .8 clc rts *-------------------------------------- +CS.QUIT.BUF lda hDstBuf + beq .1 + stz hDstBuf + >SYSCALL FreeMem + +.1 lda hSrcBuf + beq .8 + stz hSrcBuf + >SYSCALL FreeMem + +.8 rts +*-------------------------------------- CS.END *-------------------------------------- MSG.USAGE .AZ "Usage : PAKME SourceBIN PackedBIN\r\n" -MSG.SRCFILE .AZ "Source File : %s, Org=$%H Size=%D, %d Chunks.\r\n" -MSG.CHUNK .AZ " Chunk #%02d : Ofs=%H, Len=%D\r\n" -MSG.OK .AZ "[OK]" -MSG.ERR .AZ "[%h]\r\n" +MSG.SRCFILE .AZ "Source File : %s, Size=%5D, Org=$%H, %d Chunks at $%H.\r\n" +MSG.CHUNK .AZ " Chunk #%02d : Ofs=$%H, Len=%5D ... " +MSG.PAKED .AZ "PAKed : %5D Bytes, New Ofs=$%H\r\n" MSG.E.IARC .AZ "Invalid/corrupt archive" TAG .AZ "PAKME" *-------------------------------------- @@ -371,12 +520,6 @@ hLIB .BS 1 .DUMMY .OR 0 DS.START -hSrcBuf .BS 1 -hDstBuf .BS 1 - -Shunk.SrcSize .BS 2 -Shunk.DstSize .BS 2 - STATBUF .BS S.STAT PAKME.HEADER .BS 10 PAKME.TABLE .BS CHUNK.MAX*2 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 406d7d83..af57c2bd 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -20,22 +20,15 @@ Kernel.Init2 sei >LDYAI MSG.Init2 jsr PrintFYA - >LDYAI A2osX.MAIN + >LDYA PAKME.MAIN >STYA ZPInBufPtr >LDYAI CORE.Run >STYA ZPOutBufPtr jsr X.Unpak -* >LDYAI A2osX.MAIN -* >STYA ZPPtr1 -* >LDYAI CORE.Run -* >STYA ZPPtr2 -* >LDYAI A2osX.MAIN.S^$FFFF -* jsr Kernel.Move - sta SETWRITEAUX - >LDYAI A2osX.AUX + >LDYA PAKME.AUX >STYA ZPInBufPtr >LDYAI X.OSD >STYA ZPOutBufPtr @@ -43,83 +36,37 @@ Kernel.Init2 sei sta CLRWRITEAUX -* >LDYAI A2osX.AUX -* >STYA A1L Src Start Address (MAIN) -* >LDYAI A2osX.GP -* >STYA A2L Src End Address (MAIN) -* >LDYAI X.OSD -* >STYA A4L Dst Address (AUX) -* sec Main To Aux -* jsr AuxMove - - >LDYAI A2osX.GP + >LDYA PAKME.GP >STYA ZPInBufPtr >LDYAI A2osX.SYSCALL >STYA ZPOutBufPtr jsr X.Unpak -* >LDYAI A2osX.GP -* >STYA ZPPtr1 -* >LDYAI A2osX.SYSCALL -* >STYA ZPPtr2 -* >LDYAI A2osX.GP.S^$FFFF -* jsr Kernel.Move - -* >LDYAI A2osX.GPX -* >STYA A1L Src Start Address (MAIN) -* >LDYAI A2osX.D1 -* >STYA A2L Src End Address (MAIN) -* >LDYAI A2osX.SYSCALL -* >STYA A4L Dst Address (AUX) -* sec Main To Aux -* jsr AuxMove - sta SETALTZP bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 - >LDYAI A2osX.D2 + >LDYA PAKME.D2 >STYA ZPInBufPtr >LDYAI $D000 >STYA ZPOutBufPtr jsr X.Unpak -* >LDYAI A2osX.D2 -* >STYA ZPPtr1 -* >LDYAI $D000 -* >STYA ZPPtr2 -* >LDYAI A2osX.D2.S^$FFFF -* jsr Kernel.Move - bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 - >LDYAI A2osX.D1 + >LDYA PAKME.D1 >STYA ZPInBufPtr >LDYAI $D000 >STYA ZPOutBufPtr jsr X.Unpak -* >LDYAI A2osX.D1 -* >STYA ZPPtr1 -* >LDYAI $D000 -* >STYA ZPPtr2 -* >LDYAI A2osX.D1.S^$FFFF -* jsr Kernel.Move - - >LDYAI A2osX.E0 + >LDYA PAKME.E0 >STYA ZPInBufPtr >LDYAI $E000 >STYA ZPOutBufPtr jsr X.Unpak -* >LDYAI A2osX.E0 -* >STYA ZPPtr1 -* >LDYAI $E000 -* >STYA ZPPtr2 -* >LDYAI A2osX.E0.S^$FFFF -* jsr Kernel.Move - bit RROMBNK1 sta CLRALTZP cli @@ -239,23 +186,6 @@ Kernel.Init3.Err *-------------------------------------- * INIT2 Subs *-------------------------------------- -*Kernel.Move >STYA ZPPtr3 -* ldy #0 - -*.1 inc ZPPtr3 -* bne .2 -* inc ZPPtr3+1 -* beq .9 - -*.2 lda (ZPPtr1),y -* sta (ZPPtr2),y -* iny -* bne .1 -* inc ZPPtr1+1 -* inc ZPPtr2+1 -* bne .1 -*.9 rts -*-------------------------------------- KConfigLoad >LDYAI MSG.KCREAD jsr PrintFYA diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 601ceccd..6f55c371 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -22,12 +22,13 @@ NEW .INB USR/SRC/SHARED/X.PRINTF.S .INB USR/SRC/SHARED/X.UNPAK.S -PAKME.Table .DA A2osX.MAIN - .DA A2osX.AUX - .DA A2osX.GP - .DA A2osX.D1 - .DA A2osX.D2 - .DA A2osX.E0 +PAKME.Table +PAKME.MAIN .DA A2osX.MAIN +PAKME.AUX .DA A2osX.AUX +PAKME.GP .DA A2osX.GP +PAKME.D1 .DA A2osX.D1 +PAKME.D2 .DA A2osX.D2 +PAKME.E0 .DA A2osX.E0 A2osX.MAIN .DA #0 .DA A2osX.MAIN.S @@ -56,9 +57,7 @@ A2osX.GP .DA #0 .PH A2osX.SYSCALL .INB USR/SRC/SYS/KERNEL.S.GP .EP -*A2osX.GPX .PH A2osX.SYSCALL -* .INB USR/SRC/SYS/KERNEL.S.GPX -* .EP + A2osX.D1 .DA #0 .DA A2osX.D1.S .PH $D000 @@ -72,6 +71,7 @@ A2osX.D1 .DA #0 .INB USR/SRC/SYS/KERNEL.S.FIO .INB USR/SRC/SYS/KERNEL.S.PFT .EP + A2osX.D2 .DA #0 .DA A2osX.D2.S .PH $D000 @@ -83,6 +83,7 @@ A2osX.D2 .DA #0 .INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ENV .EP + A2osX.E0 .DA #0 .DA A2osX.E0.S .PH $E000 @@ -109,6 +110,7 @@ DevMgr.FreeMem .EQ * .LIST OFF .EP A2osX.E0.E .EQ * + *-------------------------------------- .AS "PAKME" TAG .DA $2000 BIN ORG