From bd85b43606a5e47350c70c0abc7ab05c3df0e7fb Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Fri, 13 Mar 2020 19:04:03 -0700 Subject: [PATCH] load decrunch on-the-fly --- Makefile | 2 +- res/DECRUNCH | Bin 0 -> 303 bytes res/_FileInformation.txt | 1 + src/4cade.a | 2 - src/constants.a | 2 +- src/{ => decrunch}/exodecrunch.a | 64 ++++++++++++++++++++++--------- src/prodos.path.a | 4 ++ src/ui.attract.dhgr.a | 4 +- src/ui.attract.hgr.a | 29 ++++++++++---- src/ui.attract.shr.a | 2 +- winmake.bat | 1 + 11 files changed, 76 insertions(+), 35 deletions(-) create mode 100644 res/DECRUNCH rename src/{ => decrunch}/exodecrunch.a (97%) diff --git a/Makefile b/Makefile index af8ad0b84..6c04e2ba9 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ dsk: md asm compress $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "build/LAUNCHER.SYSTEM" >>build/log rsync -aP res/PREFS.CONF build/PREFS.CONF >> build/log bin/padto.sh 512 build/PREFS.CONF >>build/log - for f in res/TITLE res/COVER res/HELP res/GAMES.CONF res/ATTRACT.CONF res/FX.CONF res/DFX.CONF build/PREFS.CONF res/CREDITS res/HELPTEXT; do $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" >>build/log; done + for f in res/TITLE res/COVER res/HELP res/GAMES.CONF res/ATTRACT.CONF res/FX.CONF res/DFX.CONF build/PREFS.CONF res/CREDITS res/HELPTEXT res/DECRUNCH; do $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" >>build/log; done bin/buildfileinfo.sh res/TITLE.HGR "06" "4000" >>build/log bin/buildfileinfo.sh res/TITLE.DHGR "06" "4000" >>build/log bin/buildfileinfo.sh res/ACTION.HGR "06" "3FF8" >>build/log diff --git a/res/DECRUNCH b/res/DECRUNCH new file mode 100644 index 0000000000000000000000000000000000000000..30a68590f9347058035a4c97d7ee1854e5574ac2 GIT binary patch literal 303 zcmZ3$u!vcKm3iu)Qx|?nteT<8KQn^)15a0FI5Uv3bVcQC=9zPtS2DJ)SXrU)n#pU` z2Tl&Q6&6{iF8tKUnkm9;z`Arr+X|Jg69-%_99;6R?O)rU85fw2{qF#pIq~1ArGL3D zumG7_FD86z{rlm`1Hla$dxe>SCe?;Bw=Q4$r*<}T>xyN|S3Z2evVnQ;b0)UG7dTdd zG_?Nh(%SHG)k=oeKYK;M8X}lm*8w%mVNU(ux_;U685dZN{Xe$8V}sDfbwHagyazhu z&xhV)D|~h`0S(yj`U5wRYFz;&R&BVHFyZl|%myw2evkzo5DPN23_cbxCRnuoSu4nV sf%%*e^EpB0wHGfYWURfc@=<}QyJ9zG0A07-<6)c^nh literal 0 HcmV?d00001 diff --git a/res/_FileInformation.txt b/res/_FileInformation.txt index 66e18c6cd..5bdd7e9ea 100644 --- a/res/_FileInformation.txt +++ b/res/_FileInformation.txt @@ -9,3 +9,4 @@ TITLE=Type(06),AuxType(2000),Access(C3) HELP=Type(06),AuxType(2000),Access(C3) CREDITS=Type(04),AuxType(8000),Access(C3) HELPTEXT=Type(04),AuxType(8000),Access(C3) +DECRUNCH=Type(06),AuxType(0200),Access(C3) diff --git a/src/4cade.a b/src/4cade.a index 13dbf5c5c..eb7d54362 100644 --- a/src/4cade.a +++ b/src/4cade.a @@ -110,8 +110,6 @@ ResetVector ; 6 bytes, copied to $100 !source "src/glue.prorwts2.a" !source "src/ui.common.a" - !source "src/exodecrunch.a" - ; add new files above here so ui.wait stays last !source "src/ui.attract.dhgr.a" ; \-- execution falls through diff --git a/src/constants.a b/src/constants.a index cf34e7351..5f95eb850 100644 --- a/src/constants.a +++ b/src/constants.a @@ -9,7 +9,7 @@ ; D000..E8A7 - persistent data structures (per-game cheat categories, ; gGlobalPrefsStore, gGamesListStore) ; ...unused... -; EA96..FFF9 - main program code +; EB91..FFF9 - main program code ; FFFA..FFFF - NMI, reset, IRQ vectors ; ; LC RAM BANK 2 diff --git a/src/exodecrunch.a b/src/decrunch/exodecrunch.a similarity index 97% rename from src/exodecrunch.a rename to src/decrunch/exodecrunch.a index 420b25563..346f0a49c 100644 --- a/src/exodecrunch.a +++ b/src/decrunch/exodecrunch.a @@ -1,6 +1,9 @@ ; This source code is altered and is not the original version found on ; the Exomizer homepage. ; It contains modifications made by qkumba to work with ACME assembler. +!cpu 6502 +!to "DECRUNCH",plain +*=$200 ; ; Copyright (c) 2002 - 2018 Magnus Lind. @@ -118,25 +121,8 @@ skip: !MACRO mac_get_bits { jsr get_bits } -get_bits: - adc #$80 ; needs c=0, affects v - asl - bpl gb_skip -gb_next: - asl zp_bitbuf - bne gb_ok - +mac_refill_bits -gb_ok: - rol - bmi gb_next -gb_skip: - bvs gb_get_hi - rts -gb_get_hi: - sec - sta zp_bits_hi - jmp get_crunched_byte } + ; ------------------------------------------------------------------- ; no code below this comment has to be modified in order to generate ; a working decruncher of this source file. @@ -390,6 +376,26 @@ tabl_bit: ; end of decruncher ; ------------------------------------------------------------------- +!IFNDEF INLINE_GET_BITS { +get_bits: + adc #$80 ; needs c=0, affects v + asl + bpl gb_skip +gb_next: + asl zp_bitbuf + bne gb_ok + +mac_refill_bits +gb_ok: + rol + bmi gb_next +gb_skip: + bvs gb_get_hi + rts +gb_get_hi: + sec + sta zp_bits_hi +; fall through +} get_crunched_byte: lda _byte_lo bne _byte_skip_hi @@ -406,7 +412,27 @@ _byte_hi = * + 2 ; this 156 (204) byte table area may be relocated. It may also be ; clobbered by other data between decrunches. ; ------------------------------------------------------------------- -decrunch_table=$200;;: +decrunch_table: +!warn "entry=",* + pla + tay + pla + tax + clc + pla + adc #$F8 + sta _byte_lo + pla + sta zp_bitbuf + pla + adc zp_bitbuf + sta _byte_hi + txa + pha + tya + pha + jmp decrunch + ;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/src/prodos.path.a b/src/prodos.path.a index 7d07cf7f9..8602d0b07 100644 --- a/src/prodos.path.a +++ b/src/prodos.path.a @@ -149,3 +149,7 @@ kGRFizzleFile kSFXFizzleFile !byte 10 !raw "SHR.FIZZLE" + +kDecrunchFile + !byte 8 + !raw "DECRUNCH" diff --git a/src/ui.attract.dhgr.a b/src/ui.attract.dhgr.a index b2d31f32c..37d2eb27b 100644 --- a/src/ui.attract.dhgr.a +++ b/src/ui.attract.dhgr.a @@ -315,11 +315,9 @@ RedrawForDHGR ; $00A7..$00A8 clobbered by decompressor ; $00AE..$00AF clobbered by decompressor ; $00FC..$00FF clobbered by decompressor -; $0200..$02CB clobbered by decompressor +; $0200..$03CB clobbered by decompressor ;------------------------------------------------------------------------------ DecompressDHGR - sta $C003 - sta $C005 jsr DecompressHGR sta $C004 lda #$60 diff --git a/src/ui.attract.hgr.a b/src/ui.attract.hgr.a index 022c55d1f..f5ffc3da3 100644 --- a/src/ui.attract.hgr.a +++ b/src/ui.attract.hgr.a @@ -170,7 +170,7 @@ HGRActionCallback ; $00A7..$00A8 clobbered by decompressor ; $00AE..$00AF clobbered by decompressor ; $00FC..$00FF clobbered by decompressor -; $0200..$02CB clobbered by decompressor +; $0200..$03CB clobbered by decompressor ;------------------------------------------------------------------------------ DecompressHGR lda #$3F @@ -179,12 +179,25 @@ DecompressCommon pha jsr SwitchToBank2 jsr EnableAccelerator - clc + lda sizehi2 + pha lda sizelo2 - adc #$F8 - sta _byte_lo - pla - adc sizehi2 - sta _byte_hi - jsr decrunch + pha + lda #>(@loaddecrunch - 1) + pha + lda #<(@loaddecrunch - 1) + pha + lda auxreq + bne + + jmp LoadFile ; load decompression code to $200 ++ jmp LoadAuxFile ; load decompression code to $200/aux +@loaddecrunch + !word kRootDirectory + !word kDecrunchFile + !word $200 + ldx auxreq + sta $C002,x + sta $C004,x + jsr $314 ; decrunch entry + jsr SwitchToBank2 jmp DisableAcceleratorAndSwitchToBank1 diff --git a/src/ui.attract.shr.a b/src/ui.attract.shr.a index fe6fe2fe7..7d3ffee25 100644 --- a/src/ui.attract.shr.a +++ b/src/ui.attract.shr.a @@ -151,7 +151,7 @@ BlankSHR ; $00A7..$00A8 clobbered by decompressor ; $00AE..$00AF clobbered by decompressor ; $00FC..$00FF clobbered by decompressor -; $0200..$02CB clobbered by decompressor +; $0200..$03CB clobbered by decompressor ;------------------------------------------------------------------------------ DecompressSHR lda #$1F diff --git a/winmake.bat b/winmake.bat index 9ebe9e1ce..82fa9bd76 100644 --- a/winmake.bat +++ b/winmake.bat @@ -56,6 +56,7 @@ for %%q in (res\*.CONF) do if "%%q" neq "res\PREFS.CONF" %CADIUS% ADDFILE "build %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\PREFS.CONF" >>build\log %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\CREDITS" >>build\log %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\HELPTEXT" >>build\log +%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\DECRUNCH" >>build\log %CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/TITLE.HGR" "res\TITLE.HGR" >>build\log %CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/TITLE.DHGR" "res\TITLE.DHGR" >>build\log %CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/ACTION.HGR" "res\ACTION.HGR" >>build\log