merge gamehelp into one file

must rebuild prelaunch\RR, too
This commit is contained in:
Peter Ferrie 2021-10-05 16:54:53 -07:00
parent 078615eb9d
commit 4e043a314b
7 changed files with 206 additions and 24 deletions

View File

@ -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:

98
bin/buildhelpful.js Normal file
View File

@ -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)
}

View File

@ -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

89
src/helper/helper.a Normal file
View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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