Titles refactoring (#439)

* Add titles to TOTAL.DATA

* update constants

* fix res/TITLE.DHGR/FLAPPLE.BIRD file size
This commit is contained in:
4am 2021-11-15 20:25:32 -05:00 committed by GitHub
parent 5cda88b60b
commit 9eaa5e61b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 293 additions and 698 deletions

View File

@ -36,8 +36,6 @@ dsk: index asmproboot asmlauncher
#
# create _FileInformation.txt files for subdirectories
#
bin/buildfileinfo.sh res/TITLE.HGR "06" "4000"
bin/buildfileinfo.sh res/TITLE.DHGR "06" "4000"
bin/buildfileinfo.sh res/ICONS "CA" "0000"
bin/buildfileinfo.sh build/FX "06" "6000"
bin/buildfileinfo.sh build/PRELAUNCH "06" "0106"
@ -60,8 +58,6 @@ dsk: index asmproboot asmlauncher
$(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" >>build/log; \
done
for f in \
res/TITLE.HGR \
res/TITLE.DHGR \
res/DEMO \
res/TITLE.ANIMATED \
res/ICONS \
@ -84,88 +80,98 @@ dsk: index asmproboot asmlauncher
bin/changebootloader.sh build/"$(DISK)" build/proboothd
index: md asmfx asmprelaunch compress
# note: even though individual lines check individual files, you really want
# to re-run this with a clean build/ directory if anything changes, because
# everything is interconnected within TOTAL.DATA
#
# precompute binary data structure for mega-attract mode configuration file
#
[ -f build/ATTRACT.IDX ] || (bin/buildokvs.sh < res/ATTRACT.CONF > build/ATTRACT.IDX)
[ -f build/index ] || (bin/buildokvs.sh < res/ATTRACT.CONF > build/ATTRACT.IDX)
#
# precompute binary data structure and substitute special characters
# in game help and other all-text pages
#
[ -f build/HELPTEXT ] || (bin/converthelp.sh res/HELPTEXT build/HELPTEXT)
[ -f build/CREDITS ] || (bin/converthelp.sh res/CREDITS build/CREDITS)
for f in res/GAMEHELP/*; do \
[ -f build/GAMEHELP/"$$(basename $$f)" ] || (bin/converthelp.sh "$$f" build/GAMEHELP/"$$(basename $$f)"); \
done
[ -f build/index ] || (bin/converthelp.sh res/HELPTEXT build/HELPTEXT)
[ -f build/index ] || (bin/converthelp.sh res/CREDITS build/CREDITS)
[ -f build/index ] || (for f in res/GAMEHELP/*; do \
bin/converthelp.sh "$$f" build/GAMEHELP/"$$(basename $$f)"; \
done)
#
# create search indexes for each variation of (game-requires-joystick) X (game-requires-128K)
# in the form of OKVS data structures, plus game counts in the form of source files
# create a version of GAMES.CONF without comments or blank lines
#
[ -f build/GAMES.CONF ] || (awk '!/^$$|^#/' < res/GAMES.CONF > build/GAMES.CONF)
[ -f build/SEARCH00.IDX ] || (grep "^00" < build/GAMES.CONF | bin/buildsearch.sh src/index/count00.a > build/SEARCH00.IDX)
[ -f build/SEARCH01.IDX ] || (grep "^0" < build/GAMES.CONF | bin/buildsearch.sh src/index/count01.a > build/SEARCH01.IDX)
[ -f build/SEARCH10.IDX ] || (grep "^.0" < build/GAMES.CONF | bin/buildsearch.sh src/index/count10.a > build/SEARCH10.IDX)
[ -f build/SEARCH11.IDX ] || (bin/buildsearch.sh src/index/count11.a < build/GAMES.CONF > build/SEARCH11.IDX)
[ -f build/index ] || (awk '!/^$$|^#/' < res/GAMES.CONF > build/GAMES.CONF)
#
# create a sorted list of game filenames, without metadata or display names
# create a list of all game filenames, without metadata or display names, sorted by game filename
#
[ -f build/GAMES.SORTED ] || (awk -F, '/,/ { print $$2 }' < build/GAMES.CONF | awk -F= '{ print $$1 }' | sort > build/GAMES.SORTED)
[ -f build/index ] || (awk -F, '/,/ { print $$2 }' < build/GAMES.CONF | awk -F= '{ print $$1 }' | sort > build/GAMES.SORTED)
#
# precompute indexed files for prelaunch
# note: prelaunch must be first in TOTAL.DATA due to a hack in LoadStandardPrelaunch
# note 2: these can not be padded because they are loaded at $0106 and padding would clobber the stack
#
[ -f build/PRELAUNCH.IDX ] || (bin/buildindexedfile.sh build/TOTAL.DATA build/PRELAUNCH.INDEXED < build/GAMES.SORTED > build/PRELAUNCH.IDX)
[ -f build/index ] || (bin/buildindexedfile.sh build/TOTAL.DATA build/PRELAUNCH.INDEXED < build/GAMES.SORTED > build/PRELAUNCH.IDX)
#
# precompute indexed files for HGR & DHGR titles
# note: these are not padded because they are all an exact block-multiple anyway
#
[ -f build/index ] || bin/padto.sh build/TOTAL.DATA
[ -f build/index ] || ((for f in res/TITLE.HGR/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/TITLE.HGR build/HGR.TITLES.LOG > build/TITLE.IDX)
[ -f build/index ] || ((for f in res/TITLE.DHGR/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/TITLE.DHGR build/DHGR.TITLES.LOG > build/DTITLE.IDX)
#
# precompute indexed files for game help
# note: these can be padded because they're loaded into $800 at a time when $800..$1FFF is clobber-able
#
[ -f build/GAMEHELP.IDX ] || (bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/GAMEHELP < build/GAMES.SORTED > build/GAMEHELP.IDX)
[ -f build/index ] || (bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/GAMEHELP < build/GAMES.SORTED > build/GAMEHELP.IDX)
#
# precompute indexed files for slideshows
# note: these can be padded because they're loaded into $800 at a time when $800..$1FFF is clobber-able
#
[ -f build/SLIDESHOW.IDX ] || ((for f in res/SS/*; do \
[ -f build/index ] || ((for f in res/SS/*; do \
[ $$(echo "$$(basename $$f)" | cut -c-3) = "ACT" ] && \
bin/buildaction.sh build/GAMES.CONF < "$$f" > "build/SS/$$(basename $$f)" || \
bin/buildtitle.sh build/GAMES.CONF < "$$f" > "build/SS/$$(basename $$f)"; \
echo "$$(basename $$f)"; \
done) | bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/SS > build/SLIDESHOW.IDX)
[ -f build/MINIATTRACT.IDX ] || ((for f in res/ATTRACT/*; do \
[ -f build/index ] || ((for f in res/ATTRACT/*; do \
bin/buildokvs.sh < "$$f" > "build/ATTRACT/$$(basename $$f)"; \
echo "$$(basename $$f)"; \
done) | bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/ATTRACT > build/MINIATTRACT.IDX)
#
# precompute indexed files for graphic effects
# note: these can be padded because they're loaded into $6000 at a time when $6000..$BEFF is clobber-able
#
[ -f build/FX.IDX ] || (bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/FX.INDEXED < res/FX.CONF > build/FX.IDX)
[ -f build/DFX.IDX ] || (bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/FX.INDEXED < res/DFX.CONF > build/DFX.IDX)
[ -f build/index ] || (bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/FX.INDEXED < res/FX.CONF > build/FX.IDX)
[ -f build/index ] || (bin/buildindexedfile.sh -p -a build/TOTAL.DATA build/FX.INDEXED < res/DFX.CONF > build/DFX.IDX)
#
# precompute indexed files for HGR & DHGR action screenshots
# note: these can not be padded because they are compressed and the decompressor needs the exact size
#
[ -f build/HGR0.IDX ] || ((for f in res/ACTION.HGR/[ABCD]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR0.IDX)
[ -f build/HGR1.IDX ] || ((for f in res/ACTION.HGR/[EFGH]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR1.IDX)
[ -f build/HGR2.IDX ] || ((for f in res/ACTION.HGR/[IJKL]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR2.IDX)
[ -f build/HGR3.IDX ] || ((for f in res/ACTION.HGR/[MNOP]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR3.IDX)
[ -f build/HGR4.IDX ] || ((for f in res/ACTION.HGR/[QRST]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR4.IDX)
[ -f build/HGR5.IDX ] || ((for f in res/ACTION.HGR/[UVWX]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR5.IDX)
[ -f build/HGR6.IDX ] || ((for f in res/ACTION.HGR/[YZ]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR6.IDX)
[ -f build/DHGR.IDX ] || ((for f in res/ACTION.DHGR/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.DHGR > build/DHGR.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[ABCD]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR0.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[EFGH]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR1.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[IJKL]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR2.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[MNOP]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR3.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[QRST]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR4.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[UVWX]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR5.IDX)
[ -f build/index ] || ((for f in res/ACTION.HGR/[YZ]*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.HGR > build/HGR6.IDX)
[ -f build/index ] || ((for f in res/ACTION.DHGR/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ACTION.DHGR > build/DHGR.IDX)
#
# precompute indexed files for GR action screenshots
# note: these can be padded because they are not compressed
#
[ -f build/GR.IDX ] || ((for f in res/ACTION.GR/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a -p build/TOTAL.DATA res/ACTION.GR > build/GR.IDX)
[ -f build/index ] || ((for f in res/ACTION.GR/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a -p build/TOTAL.DATA res/ACTION.GR > build/GR.IDX)
#
# precompute indexed files for SHR artwork
# note: these can not be padded because they are compressed and the decompressor needs the exact size
#
[ -f build/ARTWORK.IDX ] || ((for f in res/ARTWORK.SHR/*; do \
[ -f build/index ] || ((for f in res/ARTWORK.SHR/*; do \
echo "$$(basename $$f)"; \
done) | bin/buildindexedfile.sh -a build/TOTAL.DATA res/ARTWORK.SHR > build/ARTWORK.IDX)
#
# create search indexes for each variation of (game-requires-joystick) X (game-requires-128K)
# in the form of OKVS data structures, plus game counts in the form of source files
#
[ -f build/index ] || (grep "^00" < build/GAMES.CONF | bin/buildsearch.sh src/index/count00.a build/HGR.TITLES.LOG build/DHGR.TITLES.LOG > build/SEARCH00.IDX)
[ -f build/index ] || (grep "^0" < build/GAMES.CONF | bin/buildsearch.sh src/index/count01.a build/HGR.TITLES.LOG build/DHGR.TITLES.LOG > build/SEARCH01.IDX)
[ -f build/index ] || (grep "^.0" < build/GAMES.CONF | bin/buildsearch.sh src/index/count10.a build/HGR.TITLES.LOG build/DHGR.TITLES.LOG > build/SEARCH10.IDX)
[ -f build/index ] || (bin/buildsearch.sh src/index/count11.a build/HGR.TITLES.LOG build/DHGR.TITLES.LOG < build/GAMES.CONF > build/SEARCH11.IDX)
#
# add IDX files to the combined index file and generate
# the index records that callers use to reference them
#
@ -185,6 +191,8 @@ index: md asmfx asmprelaunch compress
bin/addfile.sh build/GAMEHELP.IDX build/TOTAL.IDX > src/index/gamehelp.idx.a
bin/addfile.sh build/SLIDESHOW.IDX build/TOTAL.IDX > src/index/slideshow.idx.a
bin/addfile.sh build/MINIATTRACT.IDX build/TOTAL.IDX > src/index/miniattract.idx.a
bin/addfile.sh build/TITLE.IDX build/TOTAL.IDX > src/index/title.idx.a
bin/addfile.sh build/DTITLE.IDX build/TOTAL.IDX > src/index/dtitle.idx.a
bin/addfile.sh build/HGR0.IDX build/TOTAL.IDX > src/index/hgr0.idx.a
bin/addfile.sh build/HGR1.IDX build/TOTAL.IDX > src/index/hgr1.idx.a
bin/addfile.sh build/HGR2.IDX build/TOTAL.IDX > src/index/hgr2.idx.a
@ -195,6 +203,7 @@ index: md asmfx asmprelaunch compress
bin/addfile.sh build/DHGR.IDX build/TOTAL.IDX > src/index/dhgr.idx.a
bin/addfile.sh build/GR.IDX build/TOTAL.IDX > src/index/gr.idx.a
bin/addfile.sh build/ARTWORK.IDX build/TOTAL.IDX > src/index/artwork.idx.a
touch build/index
asmlauncher: md
$(ACME) -DBUILDNUMBER=`git rev-list --count HEAD` src/4cade.a 2>build/relbase.log

View File

@ -9,6 +9,7 @@
# stdout - binary OKVS data structure
# 1 - output filename for data file
# 2 - input directory of files to merge into data file
# 3 - (optional) output filename for log of key,offset,size
pad=false
append=false
@ -29,6 +30,11 @@ if [ "$append" = false ]; then
fi
touch "$1"
if [ "${#3}" -ne "0" ]; then
rm -f "$3"
touch "$3"
fi
# if there is a file called "STANDARD" in the input directory, add it now
# because we will reuse it for any files that don't exist
if [ -f "$2"/STANDARD ]; then
@ -49,30 +55,26 @@ source=$(mktemp)
echo "!byte ${#key}+7" # OKVS record length
echo "!byte ${#key}" # OKVS key length
echo "!text \"$key\"" # OKVS key
if [ -f "$2/$key" ]; then # if file exists, determine offset and size
if [ ! -e "$2/$key" ]; then # if file does not exist, use standard offset and size
offset="$standardoffset"
size="$standardsize"
else # otherwise calculate offset and size from file and options
offset=$(wc -c < "$1")
echo "!be24 $offset" # offset into merged data file
echo -n "!le16 "
size=$(wc -c < "$2/$key")
if [ "$pad" = true ]; then
# If offset+size does not cross a block boundary, use file's true size.
# Otherwise, round up size to the next block boundary.
# This padding does not get added to the file; it is just an
# optimization to avoid a partial copy on the last block read.
if [ $(($offset / 512)) -eq $((($offset + $size) / 512)) ]; then
echo "$size"
else
echo "$(((($offset + $size + 511) & -512) - $offset))"
if [ $(($offset / 512)) -ne $((($offset + $size) / 512)) ]; then
size=$(((($offset + $size + 511) & -512) - $offset))
fi
else
# Caller said never pad, so always use file's true size.
echo "$size"
fi
cat "$2/$key" >> "$1" # append this file to the end of the merged data file
else # if file does not exist, reuse STANDARD file
echo "!be24 $standardoffset"
echo "!le16 $standardsize"
fi
echo "!be24 $offset"
echo "!le16 $size"
[ "${#3}" -ne "0" ] && echo "$key,$offset,$size" >> "$3"
done < "$records") > "$source"
# assemble temp source file into binary OKVS data structure, then output that

View File

@ -1,9 +1,21 @@
#!/bin/bash
# parameters
# stdin - input containing list of game metadata, filename, display name (e.g. GAMES.CONF or some subset of it)
# stdout - binary OKVS data structure
# 1 - output filename for game count in assembler code format
# 2 - input filename of HGR titles, offsets, and sizes
# 3 - input filename of DHGR titles, offsets, and sizes
# make temp file with just the key/value pairs (strip blank lines, comments, eof marker)
records=$(mktemp)
awk '!/^$|^#|^\[/' > "$records"
# read logs of offsets & sizes for HGR and DHGR titles
# that were generated by an earlier script
hgrlog=$(< "$2")
dhgrlog=$(< "$3")
# generate source file with game count
(echo ";"
echo "; Game count"
@ -20,13 +32,24 @@ source=$(mktemp)
dhgr=$(echo "$key" | cut -c3) # 'has DHGR title screen' flag (0 or 1)
cheat=$(echo "$key" | cut -c4) # 'cheat category' (0..5)
key=$(echo "$key" | cut -d"," -f2)
echo "!byte ${#key}+${#value}+5" # OKVS record length
if [ "$dhgr" -eq "0" ]; then
offset=$hgrlog
size=$hgrlog
else
offset=$dhgrlog
size=$dhgrlog
fi
offset=$(echo "$offset" | awk -F, '/^'"$key"',/ { print $2 }')
size=$(echo "$size" | awk -F, '/^'"$key"',/ { print $3 }')
echo "!byte ${#key}+${#value}+10" # OKVS record length
echo "!byte ${#key}" # OKVS key length
echo "!text \"$key\"" # OKVS key (filename)
echo "!byte ${#value}" # OKVS value length
echo "!text \"$value\"" # OKVS value (display name)
echo "!byte 1"
echo "!byte $((dhgr*128))+$cheat"
echo "!be24 $offset"
echo "!le16 $size"
done < "$records") > "$source"
# assemble temp source file into binary OKVS data structure, then output that

Binary file not shown.

View File

@ -1,37 +0,0 @@
# This file is automatically generated
AIRHEART=Type(06),AuxType(4000),Access(C3)
ALIENS=Type(06),AuxType(4000),Access(C3)
BAD.DUDES=Type(06),AuxType(4000),Access(C3)
BATMAN=Type(06),AuxType(4000),Access(C3)
BRUCE.LEE=Type(06),AuxType(4000),Access(C3)
COLUMNS=Type(06),AuxType(4000),Access(C3)
DEATH.SWORD=Type(06),AuxType(4000),Access(C3)
DG=Type(06),AuxType(4000),Access(C3)
FLAPPLE.BIRD=Type(06),AuxType(4000),Access(C3)
HEAVY.BARREL=Type(06),AuxType(4000),Access(C3)
I2=Type(06),AuxType(4000),Access(C3)
IE=Type(06),AuxType(4000),Access(C3)
INDIANA.JONES=Type(06),AuxType(4000),Access(C3)
MS=Type(06),AuxType(4000),Access(C3)
PIPE.DREAM=Type(06),AuxType(4000),Access(C3)
PLATOON=Type(06),AuxType(4000),Access(C3)
PP=Type(06),AuxType(4000),Access(C3)
QIX=Type(06),AuxType(4000),Access(C3)
RADWARRIOR=Type(06),AuxType(4000),Access(C3)
RAMPAGE=Type(06),AuxType(4000),Access(C3)
RENEGADE=Type(06),AuxType(4000),Access(C3)
ROBOCOP=Type(06),AuxType(4000),Access(C3)
RR=Type(06),AuxType(4000),Access(C3)
SLICKS=Type(06),AuxType(4000),Access(C3)
SO=Type(06),AuxType(4000),Access(C3)
SPIDERBOT=Type(06),AuxType(4000),Access(C3)
SS3=Type(06),AuxType(4000),Access(C3)
TC=Type(06),AuxType(4000),Access(C3)
TETRIS=Type(06),AuxType(4000),Access(C3)
THE.LAST.NINJA=Type(06),AuxType(4000),Access(C3)
THEXDER=Type(06),AuxType(4000),Access(C3)
TS=Type(06),AuxType(4000),Access(C3)
VICTORY.ROAD=Type(06),AuxType(4000),Access(C3)
WF=Type(06),AuxType(4000),Access(C3)
_FileInformation.txt=Type(06),AuxType(4000),Access(C3)

View File

@ -1,384 +0,0 @@
# This file is automatically generated
A.CITY.DIES=Type(06),AuxType(4000),Access(C3)
A.E=Type(06),AuxType(4000),Access(C3)
AA=Type(06),AuxType(4000),Access(C3)
AB=Type(06),AuxType(4000),Access(C3)
AC=Type(06),AuxType(4000),Access(C3)
AF=Type(06),AuxType(4000),Access(C3)
AGENT.U.S.A=Type(06),AuxType(4000),Access(C3)
ALCAZAR=Type(06),AuxType(4000),Access(C3)
ALIEN.AMBUSH=Type(06),AuxType(4000),Access(C3)
ALIEN.DOWNPOUR=Type(06),AuxType(4000),Access(C3)
ALIEN.LANDER=Type(06),AuxType(4000),Access(C3)
ALIEN.MUNCHIES=Type(06),AuxType(4000),Access(C3)
ALIEN.TYPHOON=Type(06),AuxType(4000),Access(C3)
ANKH=Type(06),AuxType(4000),Access(C3)
AO=Type(06),AuxType(4000),Access(C3)
APE.ESCAPE=Type(06),AuxType(4000),Access(C3)
APPLE.INVADER=Type(06),AuxType(4000),Access(C3)
APPLE.PANIC=Type(06),AuxType(4000),Access(C3)
AQUATRON=Type(06),AuxType(4000),Access(C3)
ARCHON=Type(06),AuxType(4000),Access(C3)
ARCHON.II=Type(06),AuxType(4000),Access(C3)
ARCTIC.FOX=Type(06),AuxType(4000),Access(C3)
ARENA=Type(06),AuxType(4000),Access(C3)
ARGOS=Type(06),AuxType(4000),Access(C3)
ARKANOID=Type(06),AuxType(4000),Access(C3)
ARTESIANS=Type(06),AuxType(4000),Access(C3)
AS=Type(06),AuxType(4000),Access(C3)
AXIS.ASSASSIN=Type(06),AuxType(4000),Access(C3)
AZTEC=Type(06),AuxType(4000),Access(C3)
B1=Type(06),AuxType(4000),Access(C3)
B2=Type(06),AuxType(4000),Access(C3)
BALLBLAZER=Type(06),AuxType(4000),Access(C3)
BANDITS=Type(06),AuxType(4000),Access(C3)
BATTLE.CRUISER=Type(06),AuxType(4000),Access(C3)
BATTLEZONE=Type(06),AuxType(4000),Access(C3)
BB=Type(06),AuxType(4000),Access(C3)
BC=Type(06),AuxType(4000),Access(C3)
BEACH.LANDING=Type(06),AuxType(4000),Access(C3)
BEER.RUN=Type(06),AuxType(4000),Access(C3)
BEJEWELED=Type(06),AuxType(4000),Access(C3)
BELLHOP=Type(06),AuxType(4000),Access(C3)
BERZAP=Type(06),AuxType(4000),Access(C3)
BEZARE=Type(06),AuxType(4000),Access(C3)
BEZOFF=Type(06),AuxType(4000),Access(C3)
BH=Type(06),AuxType(4000),Access(C3)
BK=Type(06),AuxType(4000),Access(C3)
BLACK.MAGIC=Type(06),AuxType(4000),Access(C3)
BLISTER.BALL=Type(06),AuxType(4000),Access(C3)
BOA=Type(06),AuxType(4000),Access(C3)
BOLO=Type(06),AuxType(4000),Access(C3)
BORG=Type(06),AuxType(4000),Access(C3)
BOULDER.DASH=Type(06),AuxType(4000),Access(C3)
BOULDER.DASH.II=Type(06),AuxType(4000),Access(C3)
BQ=Type(06),AuxType(4000),Access(C3)
BR=Type(06),AuxType(4000),Access(C3)
BRUCE.LEE=Type(06),AuxType(4000),Access(C3)
BT=Type(06),AuxType(4000),Access(C3)
BU=Type(06),AuxType(4000),Access(C3)
BUBBLE.BOBBLE=Type(06),AuxType(4000),Access(C3)
BUG.ATTACK=Type(06),AuxType(4000),Access(C3)
BUG.BATTLE=Type(06),AuxType(4000),Access(C3)
BUZZARD.BAIT=Type(06),AuxType(4000),Access(C3)
BW=Type(06),AuxType(4000),Access(C3)
BY=Type(06),AuxType(4000),Access(C3)
CANYON.CLIMBER=Type(06),AuxType(4000),Access(C3)
CAPTAIN.POWER=Type(06),AuxType(4000),Access(C3)
CB=Type(06),AuxType(4000),Access(C3)
CC=Type(06),AuxType(4000),Access(C3)
CEILING.ZERO=Type(06),AuxType(4000),Access(C3)
CENTIPEDE=Type(06),AuxType(4000),Access(C3)
CF=Type(06),AuxType(4000),Access(C3)
CG=Type(06),AuxType(4000),Access(C3)
CHIP.OUT=Type(06),AuxType(4000),Access(C3)
CHIVALRY=Type(06),AuxType(4000),Access(C3)
CHOPLIFTER=Type(06),AuxType(4000),Access(C3)
CL=Type(06),AuxType(4000),Access(C3)
COLUMNS=Type(06),AuxType(4000),Access(C3)
COMMANDO=Type(06),AuxType(4000),Access(C3)
CONAN=Type(06),AuxType(4000),Access(C3)
CONGO=Type(06),AuxType(4000),Access(C3)
CONGO.BONGO=Type(06),AuxType(4000),Access(C3)
COSMIC.COMBAT=Type(06),AuxType(4000),Access(C3)
COUNTY.FAIR=Type(06),AuxType(4000),Access(C3)
CQ=Type(06),AuxType(4000),Access(C3)
CR=Type(06),AuxType(4000),Access(C3)
CRAZY.MAZEY=Type(06),AuxType(4000),Access(C3)
CRICKATEER=Type(06),AuxType(4000),Access(C3)
CRIME.WAVE=Type(06),AuxType(4000),Access(C3)
CRISIS.MOUNTAIN=Type(06),AuxType(4000),Access(C3)
CROSSFIRE=Type(06),AuxType(4000),Access(C3)
CRYSTAL.CASTLES=Type(06),AuxType(4000),Access(C3)
CS=Type(06),AuxType(4000),Access(C3)
CUBIT=Type(06),AuxType(4000),Access(C3)
CV=Type(06),AuxType(4000),Access(C3)
CW=Type(06),AuxType(4000),Access(C3)
CYBER.STRIKE=Type(06),AuxType(4000),Access(C3)
CYCLOD=Type(06),AuxType(4000),Access(C3)
DANGEROUS.DAVE=Type(06),AuxType(4000),Access(C3)
DEEP.SPACE=Type(06),AuxType(4000),Access(C3)
DEFENDER=Type(06),AuxType(4000),Access(C3)
DEMONIC.DECKS=Type(06),AuxType(4000),Access(C3)
DEPTH.CHARGE=Type(06),AuxType(4000),Access(C3)
DIAMOND.MINE=Type(06),AuxType(4000),Access(C3)
DIG.DUG=Type(06),AuxType(4000),Access(C3)
DINO.EGGS=Type(06),AuxType(4000),Access(C3)
DINO.SMURF=Type(06),AuxType(4000),Access(C3)
DIVE.BOMBER=Type(06),AuxType(4000),Access(C3)
DJ=Type(06),AuxType(4000),Access(C3)
DM=Type(06),AuxType(4000),Access(C3)
DOGFIGHT.II=Type(06),AuxType(4000),Access(C3)
DONKEY.KONG=Type(06),AuxType(4000),Access(C3)
DOUBLE.TROUBLE=Type(06),AuxType(4000),Access(C3)
DRAGONFIRE=Type(06),AuxType(4000),Access(C3)
DRELBS=Type(06),AuxType(4000),Access(C3)
DROL=Type(06),AuxType(4000),Access(C3)
DU=Type(06),AuxType(4000),Access(C3)
DUNG.BEETLES=Type(06),AuxType(4000),Access(C3)
EARLY.BIRD=Type(06),AuxType(4000),Access(C3)
EI=Type(06),AuxType(4000),Access(C3)
EPOCH=Type(06),AuxType(4000),Access(C3)
ES=Type(06),AuxType(4000),Access(C3)
EVOLUTION=Type(06),AuxType(4000),Access(C3)
EXTERMINATOR=Type(06),AuxType(4000),Access(C3)
FALCONS=Type(06),AuxType(4000),Access(C3)
FAT.CITY=Type(06),AuxType(4000),Access(C3)
FEDERATION=Type(06),AuxType(4000),Access(C3)
FIREBIRD=Type(06),AuxType(4000),Access(C3)
FIREBUG=Type(06),AuxType(4000),Access(C3)
FLIP.OUT=Type(06),AuxType(4000),Access(C3)
FLY.WARS=Type(06),AuxType(4000),Access(C3)
FORCE.7=Type(06),AuxType(4000),Access(C3)
FRAZZLE=Type(06),AuxType(4000),Access(C3)
FREE.FALL=Type(06),AuxType(4000),Access(C3)
FROGGER=Type(06),AuxType(4000),Access(C3)
FROGGER.II=Type(06),AuxType(4000),Access(C3)
FS2=Type(06),AuxType(4000),Access(C3)
G.I.JOE=Type(06),AuxType(4000),Access(C3)
GALACTIC.ATTACK=Type(06),AuxType(4000),Access(C3)
GALAXIAN=Type(06),AuxType(4000),Access(C3)
GALAXY.GATES=Type(06),AuxType(4000),Access(C3)
GAMMA.GOBLINS=Type(06),AuxType(4000),Access(C3)
GAUNTLET=Type(06),AuxType(4000),Access(C3)
GENESIS=Type(06),AuxType(4000),Access(C3)
GENETIC.DRIFT=Type(06),AuxType(4000),Access(C3)
GENIUS=Type(06),AuxType(4000),Access(C3)
GENIUS.2=Type(06),AuxType(4000),Access(C3)
GENIUS.3=Type(06),AuxType(4000),Access(C3)
GHOSTBUSTERS=Type(06),AuxType(4000),Access(C3)
GOLD.RUSH=Type(06),AuxType(4000),Access(C3)
GORGON=Type(06),AuxType(4000),Access(C3)
GRAPPLE=Type(06),AuxType(4000),Access(C3)
GREMLINS=Type(06),AuxType(4000),Access(C3)
GUARDIAN=Type(06),AuxType(4000),Access(C3)
GUMBALL=Type(06),AuxType(4000),Access(C3)
H.E.R.O=Type(06),AuxType(4000),Access(C3)
HADRON=Type(06),AuxType(4000),Access(C3)
HANDY.DANDY=Type(06),AuxType(4000),Access(C3)
HARD.HAT.MACK=Type(06),AuxType(4000),Access(C3)
HEAD.ON=Type(06),AuxType(4000),Access(C3)
HIGH.RISE=Type(06),AuxType(4000),Access(C3)
HORIZON.V=Type(06),AuxType(4000),Access(C3)
HUNGRYBOY=Type(06),AuxType(4000),Access(C3)
HYPER.HEAD.ON=Type(06),AuxType(4000),Access(C3)
I1=Type(06),AuxType(4000),Access(C3)
IKARI.WARRIORS=Type(06),AuxType(4000),Access(C3)
INFILTRATOR=Type(06),AuxType(4000),Access(C3)
INFILTRATOR.2=Type(06),AuxType(4000),Access(C3)
IO=Type(06),AuxType(4000),Access(C3)
IP=Type(06),AuxType(4000),Access(C3)
JAWBREAKER=Type(06),AuxType(4000),Access(C3)
JAWBREAKER.II=Type(06),AuxType(4000),Access(C3)
JELLYFISH=Type(06),AuxType(4000),Access(C3)
JOUST=Type(06),AuxType(4000),Access(C3)
JUGGLER=Type(06),AuxType(4000),Access(C3)
JUMP.JET=Type(06),AuxType(4000),Access(C3)
JUMPMAN=Type(06),AuxType(4000),Access(C3)
JUNGLE.HUNT=Type(06),AuxType(4000),Access(C3)
KAMIKAZE=Type(06),AuxType(4000),Access(C3)
KARATEKA=Type(06),AuxType(4000),Access(C3)
KID.NIKI=Type(06),AuxType(4000),Access(C3)
KUNG.FU.MASTER=Type(06),AuxType(4000),Access(C3)
LA=Type(06),AuxType(4000),Access(C3)
LABYRINTH=Type(06),AuxType(4000),Access(C3)
LADY.TUT=Type(06),AuxType(4000),Access(C3)
LANCASTER=Type(06),AuxType(4000),Access(C3)
LASER.BOUNCE=Type(06),AuxType(4000),Access(C3)
LAZER.SILK=Type(06),AuxType(4000),Access(C3)
LC=Type(06),AuxType(4000),Access(C3)
LEMMINGS=Type(06),AuxType(4000),Access(C3)
LG=Type(06),AuxType(4000),Access(C3)
LL=Type(06),AuxType(4000),Access(C3)
LODE.RUNNER=Type(06),AuxType(4000),Access(C3)
LOST.TOMB=Type(06),AuxType(4000),Access(C3)
LP=Type(06),AuxType(4000),Access(C3)
LUNAR.LEEPERS=Type(06),AuxType(4000),Access(C3)
M.I.R.V=Type(06),AuxType(4000),Access(C3)
MAD.BOMBER=Type(06),AuxType(4000),Access(C3)
MAD.RAT=Type(06),AuxType(4000),Access(C3)
MANIC.MINER=Type(06),AuxType(4000),Access(C3)
MARAUDER=Type(06),AuxType(4000),Access(C3)
MARBLE.MADNESS=Type(06),AuxType(4000),Access(C3)
MARS.CARS=Type(06),AuxType(4000),Access(C3)
MATING.ZONE=Type(06),AuxType(4000),Access(C3)
MAXWELL.MANOR=Type(06),AuxType(4000),Access(C3)
MAZEBLOX=Type(06),AuxType(4000),Access(C3)
MB=Type(06),AuxType(4000),Access(C3)
MC=Type(06),AuxType(4000),Access(C3)
MD=Type(06),AuxType(4000),Access(C3)
MEGABOTS=Type(06),AuxType(4000),Access(C3)
MI=Type(06),AuxType(4000),Access(C3)
MICRO.INVADERS=Type(06),AuxType(4000),Access(C3)
MICROWAVE=Type(06),AuxType(4000),Access(C3)
MINER.2049ER=Type(06),AuxType(4000),Access(C3)
MINER.II=Type(06),AuxType(4000),Access(C3)
MINIT.MAN=Type(06),AuxType(4000),Access(C3)
MINOTAUR=Type(06),AuxType(4000),Access(C3)
MM=Type(06),AuxType(4000),Access(C3)
MONSTER.MASH=Type(06),AuxType(4000),Access(C3)
MOON.PATROL=Type(06),AuxType(4000),Access(C3)
MOUSKATTACK=Type(06),AuxType(4000),Access(C3)
MP=Type(06),AuxType(4000),Access(C3)
MR=Type(06),AuxType(4000),Access(C3)
MT=Type(06),AuxType(4000),Access(C3)
MZ=Type(06),AuxType(4000),Access(C3)
N.O.R.A.D=Type(06),AuxType(4000),Access(C3)
NEON=Type(06),AuxType(4000),Access(C3)
NEPTUNE=Type(06),AuxType(4000),Access(C3)
NEUTRONS=Type(06),AuxType(4000),Access(C3)
NI=Type(06),AuxType(4000),Access(C3)
NIBBLER=Type(06),AuxType(4000),Access(C3)
NIGHT.STALKER=Type(06),AuxType(4000),Access(C3)
NM=Type(06),AuxType(4000),Access(C3)
NT=Type(06),AuxType(4000),Access(C3)
OI=Type(06),AuxType(4000),Access(C3)
OID.ZONE=Type(06),AuxType(4000),Access(C3)
OM=Type(06),AuxType(4000),Access(C3)
ON.THE.RUN=Type(06),AuxType(4000),Access(C3)
ORBITRON=Type(06),AuxType(4000),Access(C3)
OUTPOST=Type(06),AuxType(4000),Access(C3)
OUTWORLD=Type(06),AuxType(4000),Access(C3)
OW=Type(06),AuxType(4000),Access(C3)
PACMAN=Type(06),AuxType(4000),Access(C3)
PAPERBOY=Type(06),AuxType(4000),Access(C3)
PB=Type(06),AuxType(4000),Access(C3)
PEEPING.TOM=Type(06),AuxType(4000),Access(C3)
PEGASUS.II=Type(06),AuxType(4000),Access(C3)
PENETRATOR=Type(06),AuxType(4000),Access(C3)
PENGO=Type(06),AuxType(4000),Access(C3)
PENTAPUS=Type(06),AuxType(4000),Access(C3)
PEST.PATROL=Type(06),AuxType(4000),Access(C3)
PHANTOMS.FIVE=Type(06),AuxType(4000),Access(C3)
PHASER.FIRE=Type(06),AuxType(4000),Access(C3)
PHOTAR=Type(06),AuxType(4000),Access(C3)
PICNIC.PARANOIA=Type(06),AuxType(4000),Access(C3)
PIG.PEN=Type(06),AuxType(4000),Access(C3)
PITFALL.II=Type(06),AuxType(4000),Access(C3)
PITSTOP.II=Type(06),AuxType(4000),Access(C3)
PLANETOIDS=Type(06),AuxType(4000),Access(C3)
PLASMANIA=Type(06),AuxType(4000),Access(C3)
PM=Type(06),AuxType(4000),Access(C3)
POLLYWOG=Type(06),AuxType(4000),Access(C3)
POOYAN=Type(06),AuxType(4000),Access(C3)
PR=Type(06),AuxType(4000),Access(C3)
PULSAR.II=Type(06),AuxType(4000),Access(C3)
QUADRANT.6112=Type(06),AuxType(4000),Access(C3)
RANDAMN=Type(06),AuxType(4000),Access(C3)
RASTER.BLASTER=Type(06),AuxType(4000),Access(C3)
RB=Type(06),AuxType(4000),Access(C3)
REAR.GUARD=Type(06),AuxType(4000),Access(C3)
RED.ALERT=Type(06),AuxType(4000),Access(C3)
REPTON=Type(06),AuxType(4000),Access(C3)
RESCUE.RAIDERS=Type(06),AuxType(4000),Access(C3)
RETRO.FEVER=Type(06),AuxType(4000),Access(C3)
RG=Type(06),AuxType(4000),Access(C3)
RI=Type(06),AuxType(4000),Access(C3)
RIBBIT=Type(06),AuxType(4000),Access(C3)
RM=Type(06),AuxType(4000),Access(C3)
ROACH.HOTEL=Type(06),AuxType(4000),Access(C3)
ROADBLOCK=Type(06),AuxType(4000),Access(C3)
ROBOT.BATTLE=Type(06),AuxType(4000),Access(C3)
ROBOTRON.2084=Type(06),AuxType(4000),Access(C3)
ROUND.ABOUT=Type(06),AuxType(4000),Access(C3)
RUN.FOR.IT=Type(06),AuxType(4000),Access(C3)
RUSSKI.DUCK=Type(06),AuxType(4000),Access(C3)
S2=Type(06),AuxType(4000),Access(C3)
SABOTAGE=Type(06),AuxType(4000),Access(C3)
SAMMY.LIGHTFOOT=Type(06),AuxType(4000),Access(C3)
SARACEN=Type(06),AuxType(4000),Access(C3)
SC=Type(06),AuxType(4000),Access(C3)
SD=Type(06),AuxType(4000),Access(C3)
SEA.DRAGON=Type(06),AuxType(4000),Access(C3)
SEAFOX=Type(06),AuxType(4000),Access(C3)
SERPENTINE=Type(06),AuxType(4000),Access(C3)
SHAMUS=Type(06),AuxType(4000),Access(C3)
SHORT.CIRCUIT=Type(06),AuxType(4000),Access(C3)
SI=Type(06),AuxType(4000),Access(C3)
SKYFOX=Type(06),AuxType(4000),Access(C3)
SNACK.ATTACK=Type(06),AuxType(4000),Access(C3)
SNAKE.BYTE=Type(06),AuxType(4000),Access(C3)
SNEAKERS=Type(06),AuxType(4000),Access(C3)
SNOGGLE=Type(06),AuxType(4000),Access(C3)
SOLO.FLIGHT=Type(06),AuxType(4000),Access(C3)
SPACE.EGGS=Type(06),AuxType(4000),Access(C3)
SPACE.KADET=Type(06),AuxType(4000),Access(C3)
SPACE.QUARKS=Type(06),AuxType(4000),Access(C3)
SPACE.RAIDERS=Type(06),AuxType(4000),Access(C3)
SPARE.CHANGE=Type(06),AuxType(4000),Access(C3)
SPECTRE=Type(06),AuxType(4000),Access(C3)
SPELLWIELDER=Type(06),AuxType(4000),Access(C3)
SPIDER.RAID=Type(06),AuxType(4000),Access(C3)
SPINDIZZY=Type(06),AuxType(4000),Access(C3)
SPUTNIK.ATTACK=Type(06),AuxType(4000),Access(C3)
SPY.HUNTER=Type(06),AuxType(4000),Access(C3)
SS=Type(06),AuxType(4000),Access(C3)
SS2=Type(06),AuxType(4000),Access(C3)
STAR.AVENGER=Type(06),AuxType(4000),Access(C3)
STAR.BLAZER=Type(06),AuxType(4000),Access(C3)
STAR.CLONES=Type(06),AuxType(4000),Access(C3)
STAR.CRUISER=Type(06),AuxType(4000),Access(C3)
STAR.DANCE=Type(06),AuxType(4000),Access(C3)
STAR.MAZE=Type(06),AuxType(4000),Access(C3)
STAR.THIEF=Type(06),AuxType(4000),Access(C3)
STARBALL=Type(06),AuxType(4000),Access(C3)
STARBLASTER=Type(06),AuxType(4000),Access(C3)
STARGATE=Type(06),AuxType(4000),Access(C3)
STARGLIDER=Type(06),AuxType(4000),Access(C3)
STARMINES=Type(06),AuxType(4000),Access(C3)
STATION.5=Type(06),AuxType(4000),Access(C3)
STELLAR.7=Type(06),AuxType(4000),Access(C3)
SU=Type(06),AuxType(4000),Access(C3)
SUCCESSION=Type(06),AuxType(4000),Access(C3)
SUPER.BUNNY=Type(06),AuxType(4000),Access(C3)
SUPER.HUEY=Type(06),AuxType(4000),Access(C3)
SUPER.PUCKMAN=Type(06),AuxType(4000),Access(C3)
SUPER.TAXMAN.2=Type(06),AuxType(4000),Access(C3)
SUPER.ZAXXON=Type(06),AuxType(4000),Access(C3)
SWASHBUCKLER=Type(06),AuxType(4000),Access(C3)
TALON=Type(06),AuxType(4000),Access(C3)
TAPPER=Type(06),AuxType(4000),Access(C3)
TB=Type(06),AuxType(4000),Access(C3)
TELEPORT=Type(06),AuxType(4000),Access(C3)
TERITORY=Type(06),AuxType(4000),Access(C3)
TETRIS=Type(06),AuxType(4000),Access(C3)
THE.BILESTOAD=Type(06),AuxType(4000),Access(C3)
THE.DAM.BUSTERS=Type(06),AuxType(4000),Access(C3)
THE.GOONIES=Type(06),AuxType(4000),Access(C3)
THE.HEIST=Type(06),AuxType(4000),Access(C3)
THE.SNAPPER=Type(06),AuxType(4000),Access(C3)
THE.SPACE.ARK=Type(06),AuxType(4000),Access(C3)
THEXDER=Type(06),AuxType(4000),Access(C3)
THIEF=Type(06),AuxType(4000),Access(C3)
THRESHOLD=Type(06),AuxType(4000),Access(C3)
THUNDER.BOMBS=Type(06),AuxType(4000),Access(C3)
TIME.PILOT=Type(06),AuxType(4000),Access(C3)
TITAN.CRONUS=Type(06),AuxType(4000),Access(C3)
TOMAHAWK=Type(06),AuxType(4000),Access(C3)
TORAX=Type(06),AuxType(4000),Access(C3)
TRACK.ATTACK=Type(06),AuxType(4000),Access(C3)
TRIAD=Type(06),AuxType(4000),Access(C3)
TROMPERS=Type(06),AuxType(4000),Access(C3)
TSUNAMI=Type(06),AuxType(4000),Access(C3)
TU=Type(06),AuxType(4000),Access(C3)
TUNNEL.TERROR=Type(06),AuxType(4000),Access(C3)
TWERPS=Type(06),AuxType(4000),Access(C3)
UD=Type(06),AuxType(4000),Access(C3)
VIDEO.VEGAS=Type(06),AuxType(4000),Access(C3)
VINDICATOR=Type(06),AuxType(4000),Access(C3)
VORTEX=Type(06),AuxType(4000),Access(C3)
VV=Type(06),AuxType(4000),Access(C3)
WALL.DEFENCE=Type(06),AuxType(4000),Access(C3)
WARGLE=Type(06),AuxType(4000),Access(C3)
WARP.DESTROYER=Type(06),AuxType(4000),Access(C3)
WAVY.NAVY=Type(06),AuxType(4000),Access(C3)
WAYOUT=Type(06),AuxType(4000),Access(C3)
WHOMPER.STOMPER=Type(06),AuxType(4000),Access(C3)
WILLY.BYTE=Type(06),AuxType(4000),Access(C3)
XEVIOUS=Type(06),AuxType(4000),Access(C3)
ZARGS=Type(06),AuxType(4000),Access(C3)
ZAXXON=Type(06),AuxType(4000),Access(C3)
ZENITH=Type(06),AuxType(4000),Access(C3)
ZOO.MASTER=Type(06),AuxType(4000),Access(C3)
_FileInformation.txt=Type(06),AuxType(4000),Access(C3)

View File

@ -201,7 +201,7 @@ PRELAUNCH_STANDARD_SIZE = 61 ; LoadStandardPrelaunch, eventually to be d
iCurBlockLo = $D601 ; constant
iCurBlockHi = $D603 ; constant
launchpatch = $D853 ; glue.launch.a
iAddToPath = $FEA5 ; Roger Rabbit, avoid, use Infiltrator 2 style instead
iAddToPath = $FEB0 ; Roger Rabbit, avoid, use Infiltrator 2 style instead
itraverse = $DB31 ; Roger Rabbit, avoid, use Infiltrator 2 style instead
ldrlo = $55 ; constant
ldrhi = $56 ; constant

View File

@ -6,11 +6,8 @@
; Public functions
; - LoadFile
; - LoadAuxFile
; - LoadDHRFile
; - LoadIndexedFile
;
; Public variables
; - gRootDirectory
; - LoadAuxIndexedFile
;
; A general note about paths:
;
@ -35,8 +32,8 @@
; PROGRAM ROOT DIRECTORY.
;------------------------------------------------------------------------------
; LoadFile
; Load a file into memory all at once, using ProRWTS2
; LoadFile/LoadAuxFile
; Load a file into main or auxiliary memory, all at once, using ProRWTS2
;
; supports paths, see note
;
@ -51,43 +48,8 @@
LoadFile
ldx #7
bne .loadcommon
;------------------------------------------------------------------------------
; LoadAuxFile
; Load a file into aux memory all at once, using ProRWTS2
;
; supports paths, see note
;
; in: stack contains 6 bytes of parameters:
; +1 [word] address of length-prefixed pathname
; +3 [word] address of length-prefixed filename
; +5 [word] address to load file, or 0 to use file's default address
; out: all flags clobbered
; all registers clobbered
; gPathname clobbered
;------------------------------------------------------------------------------
LoadAuxFile
ldx #6
bne .loadcommon
;------------------------------------------------------------------------------
; LoadDHRFile
; load .A2FC file (uncompressed double hi-res graphics) into memory
; all at once, using ProRWTS2
; first $2000 bytes of file are loaded into auxiliary memory $4000..$5FFF
; second $2000 bytes of file are loaded into main memory $4000..$4FFF
;
; supports paths, see note
;
; in: stack contains 4 bytes of parameters:
; +1 [word] address of length-prefixed pathname
; +3 [word] address of length-prefixed filename
; out: all flags clobbered
; all registers clobbered
; stack set to next instruction after parameters
;------------------------------------------------------------------------------
LoadDHRFile
ldx #$84
.loadcommon
pla
sta PARAM
@ -117,19 +79,17 @@ LoadDHRFile
+LDPARAMPTR 5, ldrlo ; set load address
+ jsr SwitchToBank2
plp
bmi ++
bcc +
jsr LoadFileInternal
jmp SwitchToBank1
+ ldx #1 ; request aux memory
jsr LoadFileAuxInternal
jmp SwitchToBank1
++ jsr LoadDHRFileInternal
jmp SwitchToBank1
;------------------------------------------------------------------------------
; LoadAuxIndexedFile
; Load a file from inside an indexed file, all at once into auxiliary memory
; LoadIndexedFile/LoadAuxIndexedFile
; Load a file from inside an indexed file, all at once, into main or auxiliary
; memory
;
; To save disk space, some collections of small, related files (e.g. per-game
; help files) are merged into a single data file with an associated index file.
@ -137,37 +97,19 @@ LoadDHRFile
; data file) and a length.
;
; Callers are responsible for loading the index file and finding the relevant
; record within the index. Most callers use okvs_find() for this.
; record within the index. Most callers use okvs_find() for this, although some
; have hard-coded records generated at build time.
;
; in: stack contains 6 bytes of parameters:
; +1 [word] pointer to filename of merged data file
; +3 [word] address of load destination
; +5 [word] pointer to index record (see note)
; +5 [word] pointer to index record
; out: all flags clobbered
; all registers clobbered
;------------------------------------------------------------------------------
LoadAuxIndexedFile
lda #$EE ; INC
+HIDE_NEXT_2_BYTES
;------------------------------------------------------------------------------
; LoadIndexedFile
; Load a file from inside an indexed file, all at once
;
; To save disk space, some collections of small, related files (e.g. per-game
; help files) are merged into a single data file with an associated index file.
; The index stores the original filename along with an offset (into the merged
; data file) and a length.
;
; Callers are responsible for loading the index file and finding the relevant
; record within the index. Most callers use okvs_find() for this.
;
; in: stack contains 6 bytes of parameters:
; +1 [word] pointer to filename of merged data file
; +3 [word] address of load destination
; +5 [word] pointer to index record (see note)
; out: all flags clobbered
; all registers clobbered
;------------------------------------------------------------------------------
LoadIndexedFile
lda #$8D ; STA
sta @iauxreq

View File

@ -35,28 +35,6 @@ LoadFileInternal_SizePatch
JumpOpen
jmp hddopendir ; exit via ProRWTS2
LoadDHRFileInternal
+LDADDR gPathname
+ST16 namlo ; set filename
jsr traverse ; go to subdirectory, set up filename for read
lda #$20
sta sizehi
asl
sta ldrhi ; into $4000
lda #cmdread ; read (instead of write)
sta reqcmd
;;lda #1 ; 1 = read into aux memory
sta auxreq
lsr ; read first $2000 bytes
sta sizelo
sta ldrlo
jsr hddopendir ; call ProRWTS2
lda #$20 ; read next $2000 bytes
sta sizehi
dec auxreq ; 0 = read into main memory
clc ; not a subdirectory
jmp hddrdwrpart ; call ProRWTS2
SaveSmallFileInternal
+LDADDR gPathname
+ST16 namlo ; set filename for ProRWTS2

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 95671
!be24 108539
!le16 4186

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 55279
!be24 61954
!le16 5174

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 6152
!be24 7472
!le16 3580

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 16468
!be24 19228
!le16 3940

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 29225
!be24 33845
!le16 4615

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 43585
!be24 50260
!le16 5562

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 62599
!be24 69274
!le16 1242

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 94329
!be24 107197
!le16 1249

8
src/index/dtitle.idx.a Normal file
View File

@ -0,0 +1,8 @@
;
; Index record for build/DTITLE.IDX
;
; This file is automatically generated
;
!byte 0
!be24 93345
!le16 464

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 60453
!be24 67128
!le16 2146

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 63841
!be24 70516
!le16 6132

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 95578
!be24 108446
!le16 93

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 80941
!be24 93809
!le16 4364

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 85305
!be24 98173
!le16 1516

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 86821
!be24 99689
!le16 1031

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 87852
!be24 100720
!le16 3237

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 91089
!be24 103957
!le16 2694

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 93783
!be24 106651
!le16 441

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 94224
!be24 107092
!le16 105

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 74809
!be24 81484
!le16 6132

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 49147
!be24 55822
!le16 6132

View File

@ -5,4 +5,4 @@
;
!byte 0
!be24 0
!le16 6152
!le16 7472

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 9732
!le16 6736
!be24 11052
!le16 8176

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 20408
!le16 8817
!be24 23168
!le16 10677

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 33840
!le16 9745
!be24 38460
!le16 11800

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 69973
!be24 76648
!le16 4836

8
src/index/title.idx.a Normal file
View File

@ -0,0 +1,8 @@
;
; Index record for build/TITLE.IDX
;
; This file is automatically generated
;
!byte 0
!be24 87616
!le16 5729

View File

@ -84,6 +84,12 @@ kDFXIndexRecord
kGameHelpIndexRecord
!source "src/index/gamehelp.idx.a"
kHGRTitleIndexRecord
!source "src/index/title.idx.a"
kDHGRTitleIndexRecord
!source "src/index/dtitle.idx.a"
kSHRArtworkIndexRecord
!source "src/index/artwork.idx.a"
@ -132,14 +138,6 @@ kTotalIndexFile
!byte 9
!raw "TOTAL.IDX"
kHGRTitleDirectory
!byte 10
!raw "TITLE.HGR/"
kDHGRTitleDirectory
!byte 11
!raw "TITLE.DHGR/"
kAnimatedTitleDirectory
!byte 15
!raw "TITLE.ANIMATED/"

View File

@ -27,7 +27,7 @@
;------------------------------------------------------------------------------
DHGRTitleSlideshow
bit MachineStatus ; only run DHGR slideshow if we have 128K
bvc DHGRRTS
bvc DHGRRTS0
jsr LoadDHGRTransition ; load transition effect code at $6000
jsr BlankDHGR ; switch to DHGR mode with initial blank screen
jsr okvs_iter ; cycle through all listed DHGR files
@ -48,7 +48,7 @@ DHGRTitleSlideshow
;------------------------------------------------------------------------------
DHGRActionSlideshow
bit MachineStatus ; only run DHGR slideshow if we have 128K
bvc DHGRRTS
bvc DHGRRTS0
jsr LoadDHGRTransition ; load transition effect code at $6000
jsr BlankDHGR ; switch to DHGR mode with initial blank screen
jsr okvs_iter ; cycle through all listed DHGR files
@ -69,7 +69,7 @@ DHGRActionSlideshow
;------------------------------------------------------------------------------
DHGRSingle
bit MachineStatus ; only show DHGR screenshots if we have 128K
bvc DHGRRTS
bvc DHGRRTS0
+ST16 IndexedDHGRFilename
jsr BlankDHGR ; switch to DHGR mode with initial blank screen
jsr LoadIndexedDHGRFile ; load compressed DHGR screenshot at aux $3FF8
@ -106,7 +106,7 @@ HGRMode
GRMode
bit $C052
bit $C050
DHGRRTS rts
DHGRRTS0 rts
;------------------------------------------------------------------------------
; ForceHGRMode
@ -156,7 +156,7 @@ LoadDHGRTransition
!word $6000
@indexRecordPtr
!word $FDFD ; SMC
rts
DHGRRTS1 rts
;------------------------------------------------------------------------------
; DHGRTitleCallback [private]
@ -172,7 +172,7 @@ LoadDHGRTransition
;------------------------------------------------------------------------------
DHGRTitleCallback
bit KBD
bmi DHGRRTS
bmi DHGRRTS1
+ST16 +
+ST16 gLastMegaAttractGame
@ -181,16 +181,27 @@ DHGRTitleCallback
; if game is not found (C will be set here), it means it can't be played on
; this machine due to memory or joystick requirements, so we don't display
; it in slideshows
bcs DHGRRTS
bcs DHGRRTS1
+LD16 WINDEX ; save game index in case user hits RETURN
+ST16 gGameToLaunch ; while it's visible (we'll launch it)
; load DHGR screenshot at $4000/main and $4000/aux
jsr LoadDHRFile
!word kDHGRTitleDirectory
+ !word $FDFD
jsr LoadIndexedFile ; load index file into $4000
!word kTotalIndexFile
- !word $4000
!word kDHGRTitleIndexRecord
jsr okvs_get
!word -
+ !word $FDFD ; SMC
jsr SwitchToBank2
ldy #4
- lda (PTR), y
sta OKVS_CACHE + 1, y
dey
bpl -
jsr LoadIndexedDHRFile
jmp ExecuteTransitionAt6000AndWait
;------------------------------------------------------------------------------
@ -207,7 +218,7 @@ DHGRTitleCallback
;------------------------------------------------------------------------------
DHGRActionCallback
bit KBD
bmi DHGRRTS
bmi DHGRRTS1
+ST16 IndexedDHGRFilename
@ -215,7 +226,7 @@ DHGRActionCallback
; if game name is not found (C will be set here), it means the game
; can't be played due to memory or joystick requirements, so we hide
; it from slideshows
bcs DHGRRTS
bcs DHGRRTS1
jsr LoadIndexedDHGRFile
jsr DecompressDHGR

View File

@ -104,7 +104,7 @@ HGRTitleCallback
bit KBD
bmi HGRRTS
+ST16 +
+ST16 @fname
+ST16 gLastMegaAttractGame
jsr FindGame
@ -116,10 +116,21 @@ HGRTitleCallback
+LD16 WINDEX ; save game index in case user hits RETURN
+ST16 gGameToLaunch ; while it's visible (we'll launch it)
jsr LoadFile ; load HGR screenshot at $4000
!word kHGRTitleDirectory
+ !word $FDFD ; SMC
jsr LoadIndexedFile ; load index file into $4000
!word kTotalIndexFile
- !word $4000
!word kHGRTitleIndexRecord
jsr okvs_find
!word -
@fname !word $FDFD ; SMC
+ST16 @indexRecordPtr
jsr LoadIndexedFile ; load HGR graphic at $4000
!word kTotalDataFile
!word $4000
@indexRecordPtr
!word $FDFD ; SMC
jsr UnpackHGRTitle
jmp ExecuteTransitionAt6000AndWait

View File

@ -68,6 +68,8 @@ BlankDHGR
sta WRITEAUXMEM
jsr ClearHGR1 ; clear hi-res screen 1 in auxmem
sta WRITEMAINMEM
lda #1
sta OffscreenPage
; /!\ execution falls through here to DHGRMode
;------------------------------------------------------------------------------
@ -92,9 +94,9 @@ DHGRMode
sta DHIRESOFF
sta DHIRESON ; then turn DHGR on
bit PAGE1
jsr ToggleOffscreenPage
jsr ShowOtherPage
lda #1
sta OffscreenPage
sta gMachineInDHGRMode
jsr UnwaitForVBL
jmp HGRMode

View File

@ -8,8 +8,10 @@
; - LoadCoverOffscreen
; - LoadHelpOffscreen
; - LoadGameTitleOffscreen
; - UnpackHGRTitle
; - ResyncPage
; - ShowOtherPage
; - ShowOtherDHGRPage
; - ToggleOffscreenPage
; - ClearScreens
; - ClearOffscreen
@ -85,45 +87,107 @@ LoadOffscreenFromAY
LoadGameTitleOffscreen
; in: gGameToLaunch = index into gSearchStore (word)
jsr GetGameToLaunch
+ST16 @fname
bit MachineStatus ; if < 128K, don't bother checking for DHGR title
bvc @hgr
jsr okvs_next_field
jsr okvs_next_field_PTR_is_already_set
; (PTR) -> length-prefixed game info bitfield
; Y = 0
iny ; Y = 1
lda (PTR), y ; A = game info bitfield
;;and #HAS_DHGR_TITLE
bmi @dhgr
@hgr
bpl .LoadHGRGameTitleOffscreen ; bit 7 = 1 if game has DHGR title, 0 if HGR title
jsr SwitchToBank2
- iny
lda (PTR), y
sta OKVS_CACHE-1, y
cpy #6
bne -
LoadIndexedDHRFile
jsr SwitchToBank2
lda #0
sta OKVS_CACHE
lda #$20 ; load first $2000 bytes into auxiliary memory
sta OKVS_CACHE + 5
jsr GetOffscreenAddress
sta @dhgr_addr_aux + 1
sta @dhgr_addr_main + 1
jsr LoadAuxIndexedFile
!word kTotalDataFile
@dhgr_addr_aux
!word $FD00 ; SMC high byte
!word OKVS_CACHE
jsr SwitchToBank2
lda OKVS_CACHE + 2 ; offset += $2000 (note: stored in big-endian)
clc
adc #$20
sta OKVS_CACHE + 2
bcc +
inc OKVS_CACHE + 1
+ jsr LoadIndexedFile ; load next $2000 bytes into main memory
!word kTotalDataFile
@dhgr_addr_main
!word $FD00 ; SMC high byte
!word OKVS_CACHE
rts
.LoadHGRGameTitleOffscreen
jsr ForceHGRMode
jsr GetOffscreenAddress
sta @addrhi
sta @hgr_addr + 1
eor #$1F
sta @poke+2
sta @peek+2
@poke sta $3FFD ; SMC - clear screen hole before load
jsr LoadFile
!word kHGRTitleDirectory
@fname !word $FDFD ; SMC
!byte $00
@addrhi !byte $FD ; SMC
@peek lda $3FFD ; SMC
@poke sta $3FFD ; SMC high byte to clear screen hole before load
+LD16 PTR
+ST16 @hgrIndexRecordPtr
jsr LoadIndexedFile
!word kTotalDataFile
@hgr_addr
!word $FD00 ; SMC high byte
@hgrIndexRecordPtr
!word $FDFD ; SMC
@peek lda $3FFD ; SMC high byte