From 4e043a314b5fd3dea326cadcdb76c05d46b423d2 Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Tue, 5 Oct 2021 16:54:53 -0700 Subject: [PATCH] merge gamehelp into one file must rebuild prelaunch\RR, too --- Makefile | 10 ++--- bin/buildhelpful.js | 98 +++++++++++++++++++++++++++++++++++++++++++++ src/constants.a | 4 +- src/helper/helper.a | 89 ++++++++++++++++++++++++++++++++++++++++ src/prodos.path.a | 8 ++-- src/ui.credits.a | 9 +++-- winmake.bat | 12 ++---- 7 files changed, 206 insertions(+), 24 deletions(-) create mode 100644 bin/buildhelpful.js create mode 100644 src/helper/helper.a diff --git a/Makefile b/Makefile index fc87517de..3cb563608 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,9 @@ dsk: asm $(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 res/DECRUNCH res/JOYSTICK res/Finder.Data res/Finder.Root; do $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" >>build/log; done + bin/buildhelpful.sh "build/HELPFUL" "build/helper.inc" >>build/log + $(ACME) -r build/helper.lst src/helper/helper.a >>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 build/HELPFER build/HELPFUL res/DECRUNCH res/JOYSTICK res/Finder.Data res/Finder.Root; 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 @@ -50,10 +52,6 @@ dsk: asm for f in build/X/*; do $(CADIUS) ADDFOLDER build/"$(DISK)" "/$(VOLUME)/X/$$(basename $$f)" "$$f"; done >>build/log bin/buildfileinfo.sh build/PRELAUNCH "06" "0106" >>build/log $(CADIUS) ADDFOLDER build/"$(DISK)" "/$(VOLUME)/PRELAUNCH" "build/PRELAUNCH" >>build/log - rsync -aP --exclude=STANDARD res/GAMEHELP build/ >>build/log - for f in res/TITLE.HGR/* res/TITLE.DHGR/*; do rsync --ignore-existing res/GAMEHELP/STANDARD build/GAMEHELP/$$(basename $$f); done - bin/buildfileinfo.sh build/GAMEHELP "04" "8000" >>build/log - $(CADIUS) ADDFOLDER build/"$(DISK)" "/$(VOLUME)/GAMEHELP" "build/GAMEHELP" >>build/log bin/changebootloader.sh build/"$(DISK)" build/proboothd asm: asmlauncher asmfx asmprelaunch asmproboot @@ -86,7 +84,7 @@ mount: dsk osascript bin/V2Make.scpt "`pwd`" bin/4cade.vii build/"$(DISK)" md: - mkdir -p build/X build/FX build/PRELAUNCH build/GAMEHELP + mkdir -p build/X build/FX build/PRELAUNCH touch build/log clean: diff --git a/bin/buildhelpful.js b/bin/buildhelpful.js new file mode 100644 index 000000000..aa8a66460 --- /dev/null +++ b/bin/buildhelpful.js @@ -0,0 +1,98 @@ +a = new ActiveXObject("scripting.filesystemobject") +b = a.opentextfile("res\\GAMES.CONF") + +entries = [] + +while (!b.atendofstream) +{ + c = b.readline() + d = c.indexOf("#") + + if (d >= 0) + { + c = c.substr(0, d) + } + + d = c.indexOf("=") + + if (d >= 0) + { + c = c.substr(0, d) + } + + if (c.indexOf("[") >= 0) + { + break + } + + c = c.substr(5) + + if (c.length > 0) + { + entries.push(c) + } +} + +entries.sort() +y = "res\\GAMEHELP\\" +s = y + "STANDARD" +f = a.createtextfile(WScript.Arguments(0)) +f.write(entry = a.opentextfile(s).readall().replace(/\r\n/g, "\n")) +help_off = entry.length + +letter = "@" //"A" - 1 +header_low = "header_low !byte " +header_high = "header_high !byte " +groups = "\n; format: Pascal string, big-endian 24-bit file offset in helptext file\n" +first = true +i = 0 + +while (i < entries.length) +{ + if (first) + { + letter = String.fromCharCode(letter.charCodeAt(0) + 1) + group = "group" + letter + header_low += "<" + group + ", " + header_high += ">" + group + ", " + + groups += group + "\n" + first = false + } + + if (entries[i].charAt(0) == letter) + { + c = 0 + + if (a.fileexists(y + entries[i])) + { + c = help_off + f.write(entry = a.opentextfile(y + entries[i]).readall().replace(/\r\n/g, "\n")) + help_off += entry.length + } + + groups += "!byte " + format8(entries[i].length) + "\n" + "!text \"" + entries[i] + "\"\n" + "!byte " + format24(c) + "\n\n" + ++i + } + else + { + first = true + } +} + +f = a.createtextfile(WScript.Arguments(1)) +f.writeline(header_low.substr(0, header_low.length - 2)) +f.writeline(header_high.substr(0, header_high.length - 2)) +f.write(groups) + +function format8(str) +{ + val8 = parseInt(str) + return "$" + ((val8 < 16) ? "0" : "") + val8.toString(16) +} + +function format24(str) +{ + val24 = parseInt(str) + return format8(Math.floor(val24 / (256*256))) + ", " + format8(Math.floor(val24 / 256) % 256) + ", " + format8(val24 % 256) +} diff --git a/src/constants.a b/src/constants.a index 62a229f40..1127f912e 100644 --- a/src/constants.a +++ b/src/constants.a @@ -7,7 +7,7 @@ ; ; LC RAM BANK 1 ; D000..E789 - persistent data structures (gGlobalPrefsStore, gGamesListStore) -; E93F..FFF1 - main program code +; E941..FFF1 - main program code ; FFF2..FFF9 - API functions and global constants available for main program ; code, prelaunchers, transition effects, &c. ; (Wait/UnwaitForVBL, MockingboardStuff, MachineStatus) @@ -151,7 +151,7 @@ iProDOS_enter = $D678 LoadFileDirect = $DB01 iAuxReq = $DB27 launchpatch = $D616 -iAddToPath = $FEC3 +iAddToPath = $FEC6 itraverse = $D8E0 ldrhi = $56 namlo = $57 diff --git a/src/helper/helper.a b/src/helper/helper.a new file mode 100644 index 000000000..cf7afbc8f --- /dev/null +++ b/src/helper/helper.a @@ -0,0 +1,89 @@ +;license:MIT +;(c) 2021 by qkumba +; +!cpu 6502 +!to "build/HELPER",plain +*=$6000 + + !source "src/constants.a" ; no code in these + sizelo = $52 + sizehi = $53 + reqcmd = $54 + ldrlo = $55 + ldrhi = $56 + bleftlo = $60 + blefthi = $61 + cmdseek = 0 + cmdread = 1 + + ldy #1 + lda (SRC), y + tax + lda header_high - $41, x + sta DEST + 1 + lda header_low - $41, x + sta DEST + dey + lda (SRC), y + sta SAVE +-- ldy SAVE +- lda (SRC), y + cmp (DEST), y + beq + + ldy #0 + lda (DEST), y + clc + adc #4 + adc DEST + sta DEST + bcc -- + inc DEST + 1 + bcs -- ; always taken ++ dey + bpl - + ldx #2 + ldy SAVE +- iny + lda (DEST), y + sta offset, x + dex + bpl - + jsr $bf00 ; yes, ProDOS abstraction + !byte $c8 + !word c8_parms + jsr $bf00 + !byte $ce + !word ce_parms + jsr $bf00 + !byte $ca + !word ca_parms + jsr $bf00 + !byte $cc + !word cc_parms + lda $c08b + lda $c08b + rts + +c8_parms + !byte 3 + !word filename + !word $d000 + +ce_parms + !byte 2 + !byte 1 +offset !byte 0, 0, 0 + +ca_parms + !byte 4 +cc_parms + !byte 1 + !word $8000 + !word $400 + +filename + !byte (filename_e-filename)-1 + !text "HELPFUL" +filename_e + + !source "build/helper.inc" diff --git a/src/prodos.path.a b/src/prodos.path.a index 09bf9a70c..79c75fb1c 100644 --- a/src/prodos.path.a +++ b/src/prodos.path.a @@ -106,10 +106,6 @@ kPrelaunchDirectory !byte 10 !raw "PRELAUNCH/" -kGameHelpDirectory - !byte 9 - !raw "GAMEHELP/" - kStandardPrelaunch !byte 8 !raw "STANDARD" @@ -142,6 +138,10 @@ kHelpTextFile !byte 8 !raw "HELPTEXT" +kGameHelpFile + !byte 6 + !raw "HELPER" + kTitleFile !byte 5 !raw "TITLE" diff --git a/src/ui.credits.a b/src/ui.credits.a index 5a40b56b3..cb674e0b5 100644 --- a/src/ui.credits.a +++ b/src/ui.credits.a @@ -52,11 +52,12 @@ Credits Help jsr GetGameToLaunch bcs @global - +ST16 @fname + +ST16 SRC jsr LoadFile - !word kGameHelpDirectory -@fname !word $FDFD ; SMC - !word $8000 + !word kRootDirectory + !word kGameHelpFile + !word $6000 + jsr $6000 clc bcc -- ; always branches @global jsr LoadFile ; load help text into $8000 diff --git a/winmake.bat b/winmake.bat index 846bd70b4..8d84ab391 100644 --- a/winmake.bat +++ b/winmake.bat @@ -59,6 +59,10 @@ cscript /nologo bin\dumpcr.js "build\CREDITS" cscript /nologo bin\rsync.js "res\HELPTEXT" "build\" >>build\log cscript /nologo bin\dumpcr.js "build\HELPTEXT" %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\HELPTEXT" >>build\log +cscript /nologo bin\buildhelpful.js "build\HELPFUL" "build\helper.inc" >>build\log +%ACME% -r build\helper.lst src\helper\helper.a >>build\log +%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\HELPER" >>build\log +%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\HELPFUL" >>build\log %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\DECRUNCH" >>build\log %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\JOYSTICK" >>build\log %CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\Finder.Data" >>build\log @@ -86,13 +90,6 @@ for %%q in (res\dsk\*.po) do %CADIUS% EXTRACTVOLUME "%%q" build\X\ >>build\log 1>nul 2>nul del /s build\X\.DS_Store build\X\PRODOS build\X\LOADER.SYSTEM %CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/X" "build\X" >>build\log %CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/PRELAUNCH" "build\PRELAUNCH" >>build\log -cscript /nologo bin\rsync.js "res\GAMEHELP\*" "build\GAMEHELP" >>build\log -for %%q in (res\title.hgr\*) do if not exist build\GAMEHELP\%%~nxq 1>nul copy build\GAMEHELP\STANDARD build\GAMEHELP\%%~nxq -for %%q in (res\title.dhgr\*) do if not exist build\GAMEHELP\%%~nxq 1>nul copy build\GAMEHELP\STANDARD build\GAMEHELP\%%~nxq -1>nul 2>nul del /s build\GAMEHELP\STANDARD -cscript /nologo bin\dumpcr.js "build\GAMEHELP\*" -cscript /nologo bin\buildfileinfo.js build\GAMEHELP "06" "6000" >>build\log -%CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/GAMEHELP" "build\GAMEHELP" >>build\log cscript /nologo bin\changebootloader.js "build\%DISK%" build\proboothd goto :EOF ) @@ -105,7 +102,6 @@ goto :EOF 2>nul md build\X 2>nul md build\FX 2>nul md build\PRELAUNCH -2>nul md build\GAMEHELP goto :EOF :asmlauncher