From 592709d66ee91d0c551432272dd3d90973c7f6bd Mon Sep 17 00:00:00 2001 From: 4am Date: Mon, 5 Sep 2022 20:38:43 -0400 Subject: [PATCH] move demo-less, single-load games to TOTAL.DATA --- Makefile | 26 +- bin/buildindexedfile.sh | 30 +- bin/buildsearch.sh | 7 +- res/GAMES.CONF | 903 ++++++++++++++++++----------------- src/constants.a | 3 + src/glue.launch.a | 49 +- src/index/artwork.idx.a | 2 +- src/index/attract.idx.a | 2 +- src/index/cache00.idx.a | 2 +- src/index/cache01.idx.a | 2 +- src/index/cache10.idx.a | 2 +- src/index/cache11.idx.a | 2 +- src/index/coverfade.idx.a | 2 +- src/index/credits.idx.a | 2 +- src/index/decrunch.idx.a | 2 +- src/index/dfx.idx.a | 2 +- src/index/dgr.fizzle.idx.a | 2 +- src/index/dgr.idx.a | 2 +- src/index/dhgr.idx.a | 2 +- src/index/dtitle.idx.a | 2 +- src/index/fx.idx.a | 2 +- src/index/gamehelp.idx.a | 2 +- src/index/gr.fizzle.idx.a | 2 +- src/index/gr.idx.a | 2 +- src/index/helptext.idx.a | 2 +- src/index/hgr0.idx.a | 2 +- src/index/hgr1.idx.a | 2 +- src/index/hgr2.idx.a | 2 +- src/index/hgr3.idx.a | 2 +- src/index/hgr4.idx.a | 2 +- src/index/hgr5.idx.a | 2 +- src/index/hgr6.idx.a | 2 +- src/index/joystick.idx.a | 2 +- src/index/miniattract0.idx.a | 2 +- src/index/miniattract1.idx.a | 2 +- src/index/prelaunch.idx.a | 2 +- src/index/search00.idx.a | 2 +- src/index/search01.idx.a | 2 +- src/index/search10.idx.a | 2 +- src/index/search11.idx.a | 2 +- src/index/sfx.idx.a | 2 +- src/index/slideshow.idx.a | 2 +- src/index/title.idx.a | 2 +- src/index/xsingle.idx.a | 8 + src/prodos.path.a | 3 + src/textrank.a | 8 +- src/ui.attract.mode.a | 5 + 47 files changed, 597 insertions(+), 519 deletions(-) create mode 100644 src/index/xsingle.idx.a diff --git a/Makefile b/Makefile index 72610885b..7631d4520 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ PYTHON=python3 # version 3.1.0 or later EXOMIZER=exomizer mem -q -P23 -lnone -dsk: index asmproboot asmlauncher +dsk: index asmproboot asmlauncher extract cp res/blank.hdv build/"$(DISK)" cp res/_FileInformation.txt build/ $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" build/LAUNCHER.SYSTEM -C >>build/log @@ -56,9 +56,9 @@ dsk: index asmproboot asmlauncher $(CADIUS) ADDFILE build/"$(DISK)" "/$(VOLUME)/" "$$f" -C >>build/log; \ done for f in \ - res/DEMO \ - res/TITLE.ANIMATED \ - res/ICONS \ + res/DEMO \ + res/TITLE.ANIMATED \ + res/ICONS \ build/FX \ build/PRELAUNCH; do \ rm -f "$$f"/.DS_Store; \ @@ -67,15 +67,19 @@ dsk: index asmproboot asmlauncher for i in 1 2 3 4 5 6; do \ $(CADIUS) RENAMEFILE build/"$(DISK)" "/$(VOLUME)/DEMO/SPCARTOON.$${i}$${i}" "SPCARTOON.$${i}." >>build/log; \ done - $(PARALLEL) '$(CADIUS) EXTRACTVOLUME {} build/X/ >>build/log' ::: res/dsk/*.po - rm -f build/X/**/.DS_Store build/X/**/PRODOS* build/X/**/LOADER.SYSTEM* $(CADIUS) CREATEFOLDER build/"$(DISK)" "/$(VOLUME)/X/" -C >>build/log for f in build/X/*; do \ $(CADIUS) ADDFOLDER build/"$(DISK)" "/$(VOLUME)/X/$$(basename $$f)" "$$f" -C >>build/log; \ done bin/changebootloader.sh build/"$(DISK)" build/proboothd -index: preconditions md asmfx asmprelaunch compress +extract: preconditions md + $(PARALLEL) '$(CADIUS) EXTRACTVOLUME {} build/X/ >>build/log' ::: res/dsk/*.po + rm -f build/X/**/.DS_Store build/X/**/PRODOS* build/X/**/LOADER.SYSTEM* + for f in $$(grep '^....1' res/GAMES.CONF | awk '!/^$$|^#/' | awk -F, '/,/ { print $$2 }' | awk -F= '{ print $$1 }'); do mv build/X/"$$(basename $$f)"/"$$(basename $$f)"* build/X.INDEXED/; rm -rf build/X/"$$(basename $$f)"; done + (for f in build/X.INDEXED/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a -p build/TOTAL.DATA build/X.INDEXED > build/XSINGLE.IDX + +index: preconditions md asmfx asmprelaunch compress extract # # precompute binary data structure for mega-attract mode configuration file # @@ -156,6 +160,12 @@ index: preconditions md asmfx asmprelaunch compress # [ -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) # +# precompute indexed files for single-load game binaries +# note: these can be padded because they are loaded at a time when all of main memory is clobber-able +# + [ -f build/index ] || ((for f in build/X.INDEXED/*; do echo "$$(basename $$f)"; done) | bin/buildindexedfile.sh -a -p build/TOTAL.DATA build/X.INDEXED > build/XSINGLE.IDX) + [ -f build/index ] || bin/addfile.sh build/XSINGLE.IDX build/TOTAL.DATA > src/index/xsingle.idx.a +# # 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 # @@ -254,7 +264,7 @@ mount: dsk osascript bin/V2Make.scpt "`pwd`" bin/4cade.vii build/"$(DISK)" md: - mkdir -p build/X build/FX.INDEXED build/FX build/PRELAUNCH.INDEXED build/PRELAUNCH build/ATTRACT build/SS build/GAMEHELP + mkdir -p build/X build/X.INDEXED build/FX build/FX.INDEXED build/PRELAUNCH build/PRELAUNCH.INDEXED build/ATTRACT build/SS build/GAMEHELP touch build/log clean: diff --git a/bin/buildindexedfile.sh b/bin/buildindexedfile.sh index bb82191b5..dd0264e35 100755 --- a/bin/buildindexedfile.sh +++ b/bin/buildindexedfile.sh @@ -5,7 +5,7 @@ # -p pad sizes within data file to next block size (default off) # parameters -# stdin - input containing list of effects (probably FX.CONF or DFX.CONF) +# stdin - input containing list of files (e.g. FX.CONF) # stdout - binary OKVS data structure # 1 - output filename for data file # 2 - input directory of files to merge into data file @@ -49,18 +49,25 @@ tr -d "\r" | awk '!/^$|^#|^\[/' > "$records" # make temp assembly source file that represents the binary OKVS data structure source=$(mktemp) -(echo "*=0" # dummy program counter for assembler - echo "!le16 $(wc -l <"$records"), 0" # OKVS header - while IFS="=" read -r key value; do - echo "!byte ${#key}+7" # OKVS record length - echo "!byte ${#key}" # OKVS key length - echo "!text \"$key\"" # OKVS key - if [ ! -e "$2/$key" ]; then # if file does not exist, use standard offset and size +(echo "*=0" # dummy program counter for assembler + echo "!le16 $(wc -l <"$records"), 0" # OKVS header + while IFS="=" read -r filename dummy; do + key=$(echo "$filename" | awk -F'#' '{ print $1 }') + addr=$(echo "$filename" | awk -F'#' '{ print $2 }') + if [ "${#addr}" -ne "0" ]; then # if filename is in the form 'NAME#06ADDR' then create extended index record + addr=$(echo "$addr" | cut -c3-) # trim '06' so we get just the starting address + echo "!byte ${#key}+9" # OKVS record length + else + echo "!byte ${#key}+7" # OKVS record length + fi + echo "!byte ${#key}" # OKVS key length + echo "!text \"$key\"" # OKVS key + if [ ! -e "$2/$filename" ]; 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 + else # otherwise calculate offset and size from file and options offset=$(wc -c < "$1") - size=$(wc -c < "$2/$key") + size=$(wc -c < "$2/$filename") 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. @@ -70,10 +77,11 @@ source=$(mktemp) size=$(((($offset + $size + 511) & -512) - $offset)) fi fi - cat "$2/$key" >> "$1" # append this file to the end of the merged data file + cat "$2/$filename" >> "$1" # append this file to the end of the merged data file fi echo "!be24 $offset" echo "!le16 $size" + [ "${#addr}" -ne "0" ] && echo '!le16 $'"$addr" [ "${#3}" -ne "0" ] && echo "$key,$offset,$size" >> "$3" done < "$records") > "$source" diff --git a/bin/buildsearch.sh b/bin/buildsearch.sh index 9a651b282..1deb1ffaa 100755 --- a/bin/buildsearch.sh +++ b/bin/buildsearch.sh @@ -35,9 +35,10 @@ source=$(mktemp) if [ -z "$dhgrlog" ]; then dhgr="0" else - dhgr=$(echo "$key" | cut -c3) # 'has DHGR title screen' flag (0 or 1) + dhgr=$(echo "$key" | cut -c3) # 'has DHGR title screen' flag (0 or 1) fi - cheat=$(echo "$key" | cut -c4) # 'cheat category' (0..5) + cheat=$(echo "$key" | cut -c4) # 'cheat category' (0..7) + single=$(echo "$key" | cut -c5) # 'single-load' flag (0 or 1) key=$(echo "$key" | cut -d"," -f2) if [ "$dhgr" -eq "0" ]; then offset=$hgrlog @@ -55,7 +56,7 @@ source=$(mktemp) echo "!byte ${#value}" # OKVS value length echo "!text \"$value\"" # OKVS value (display name) echo "!byte 1" - echo "!byte $((dhgr*128))+$cheat" + echo "!byte $((dhgr*128))+$((single*64))+$cheat" echo "!be24 $offset" echo "!le16 $size" done < "$records" diff --git a/res/GAMES.CONF b/res/GAMES.CONF index 8da9e2018..f84626151 100755 --- a/res/GAMES.CONF +++ b/res/GAMES.CONF @@ -2,7 +2,7 @@ # Master game list # # Format: -# ABCD,directory=name +# ABCDE,directory=name # # A=1 if game requires joystick, 0 if playable on keyboard # B=1 if game requires 128K, 0 if playable on 64K @@ -16,460 +16,461 @@ # 5=infinite time # 6=invincibility # 7=has in-game cheats +# E=1 if game is single-load and can be stored in TOTAL.DATA # # all other values for A -> ignore entire line (allows inline comments) # A line beginning with '[' terminates the parsing # -1110,SLICKS=8bit-Slicks -0000,A.CITY.DIES=A City Dies -1001,A.E=A E -0000,AGENT.U.S.A=Agent U S A -1110,AIRHEART=Airheart -0001,ALCAZAR=Alcazar -1001,ALF=Alf: The First Adventure -1001,ALIEN.AMBUSH=Alien Ambush -0001,ALIEN.DOWNPOUR=Alien Downpour -0000,ALIEN.LANDER=Alien Lander -0001,ALIEN.MUNCHIES=Alien Munchies -0001,ALIEN.TYPHOON=Alien Typhoon -1111,ALIENS=Aliens -1006,ANGEL.1=Angel-1 -0000,ANKH=Ankh -0001,APE.ESCAPE=Ape Escape -0001,AC=Apple Cider Spider -1001,APPLE.INVADER=Apple Invader -0001,APPLE.PANIC=Apple Panic -0001,APPLE.ZAP=Apple Zap -1001,AO=Apple-Oids -0007,AQUATRON=Aquatron -1007,AB=Arcade Boot Camp -1000,ARCHON=Archon -0000,ARCHON.II=Archon II -1006,ARCTIC.FOX=Arctic Fox -0001,AA=Ardy the Aardvark -1001,ARENA=Arena -0006,ARGOS=Argos -1001,ARKANOID=Arkanoid -1006,ARTESIANS=Artesians -1001,AS=Asteroid Blaster -1001,AXIS.ASSASSIN=Axis Assassin -0000,AZTEC=Aztec -1001,BQ=BC's Quest for Tires -1111,BAD.DUDES=Bad Dudes -1000,BALLBLAZER=Ballblazer -0001,BANDITS=Bandits -1115,BATMAN=Batman -0000,BY=Bats in the Belfry -0001,BATTLE.CRUISER=Battle Cruiser -0001,BATTLEZONE=Battlezone -0001,BEACH.LANDING=Beach Landing -0000,B1=Beach-Head -0000,B2=Beach-Head II -0001,BEER.RUN=Beer Run -0100,BEJEWELED=Bejeweled -0000,BELLHOP=Bellhop -0001,BERZAP=Berzap -0002,BW=Beyond Castle Wolfenstein -1000,BEZARE=Bezare -1000,BEZOFF=Bezoff -0000,BT=Bill Budge's Trilogy -1007,BLACK.MAGIC=Black Magic -1000,BLISTER.BALL=Blister Ball -0000,BLITZKRIEG=Blitzkrieg -0000,BC=BlockChain -0004,BLOODSUCKERS=Bloodsuckers -0000,BOA=Boa -0001,BOLO=Bolo -0001,BH=Bongo's Bash -0001,BORG=Borg -1001,BOULDER.DASH=Boulder Dash -1001,BOULDER.DASH.II=Boulder Dash II -0001,BK=Bouncing Kamungas -0001,BB=Brainteaser Boulevard -1011,BRUCE.LEE=Bruce Lee -1001,BUBBLE.BOBBLE=Bubble Bobble -0007,BR=Buck Rogers: Planet of Zoom -0007,BUG.ATTACK=Bug Attack -0001,BUG.BATTLE=Bug Battle -0003,BU=BurgerTime -0001,BUZZARD.BAIT=Buzzard Bait -0000,CV=C'est La Vie -0004,CALI.RAISINS=California Raisins -0001,CB=Cannonball Blitz -0001,CANYON.CLIMBER=Canyon Climber -0005,CG=Captain Goodnight -0001,CAPTAIN.POWER=Captain Power -0002,CS=Castle Smurfenstein -0002,CW=Castle Wolfenstein -0117,CATACOMBS=Catacombs -0001,CAVRN.CREATURES=Cavern Creatures -1001,CC=Caverns of Callisto -1001,CEILING.ZERO=Ceiling Zero -1001,CENTIPEDE=Centipede -0001,CL=Championship Lode Runner -1001,CHIP.OUT=Chip Out -0000,CHIVALRY=Chivalry -1007,CHOPLIFTER=Choplifter -0001,CHRONO.WARRIOR=Chrono Warrior -0001,COLLECT=Collect -0010,COLUMNS=Columns -0101,COMMANDO=Commando -0003,CONAN=Conan -0001,CONGO=Congo -0001,CONGO.BONGO=Congo Bongo -0000,CQ=Conquering Worlds -0000,CR=Copts and Robbers -1001,COSMIC.COMBAT=Cosmic Combat -0002,COUNTY.FAIR=County Fair -0001,CRAZY.MAZEY=Crazy Mazey -0001,CREEPY.CRRIDORS=Creepy Corridors -0001,CRICKATEER=Cricketeer -0001,CRIME.WAVE=Crime Wave -1001,CRISIS.MOUNTAIN=Crisis Mountain -0001,CROSS.CITY=Cross City -0001,CROSSFIRE=Crossfire -0001,CRYSTAL.CASTLES=Crystal Castles -0001,CUBIT=Cubit -0000,CYBER.STRIKE=Cyber Strike -0001,CYCLOD=Cyclod -1001,CYCLOTRON=Cyclotron -0117,DG=D-Generation -0017,DANGEROUS.DAVE=Dangerous Dave -0117,DD.GOES.NUTZ=Dangerous Dave Goes Nutz -0117,DD.RETURNS=Dangerous Dave Returns -0001,DU=Darkstar Unhinged -1000,DM=David's Midnight Magic -0110,DEATH.SWORD=Death Sword -1000,DEEP.SPACE=Deep Space -1001,DEFENDER=Defender -1001,DJ=Defender (Joe Holt) -0001,DEMONIC.DECKS=Demonic Decks -1001,DEPTH.CHARGE=Depth Charge -0001,DIAMOND.MINE=Diamond Mine -0001,DIG.DUG=Dig Dug -1001,DINO.EGGS=Dino Eggs -1001,DINO.SMURF=Dino Smurf -0000,DOGFIGHT.II=Dogfight II -0001,DONKEY.KONG=Donkey Kong -0000,DOUBLE.TROUBLE=Double Trouble -0001,DRAGONFIRE=Dragonfire -1001,DRELBS=Drelbs -0001,DROL=Drol -0000,DUNG.BEETLES=Dung Beetles -0001,EARLY.BIRD=Early Bird -0001,EI=Eggs-It -0000,EPOCH=Epoch -0005,ES=Escape! -0001,EVOLUTION=Evolution -0001,EXTERMINATOR=Exterminator -0001,FALCONS=Falcons -0006,FAT.CITY=Fat City -0001,FEDERATION=Federation -0004,FIRE.AND.ICE=Fire and Ice -0001,FIREBIRD=Firebird -0000,FIREBUG=Firebug -0001,FLAK=Flak -0110,FLAPPLE.BIRD=Flapple Bird -0000,FLIP.OUT=Flip Out -0001,FLOBYNOID=Flobynoid -0004,FLOPPY=Floppy -0001,FLY.WARS=Fly Wars -1101,FORCE.7=Force 7 -0001,FRAZZLE=Frazzle -0001,FREE.FALL=Free Fall -0001,FROGGER=Frogger -1001,FROGGER.II=Frogger II -0001,G.I.JOE=G I Joe -0001,GADGETZ=Gadgetz -0000,GALACTIC.ATTACK=Galactic Attack -0001,GALAXIAN=Galaxian -0001,GALAXY.GATES=Galaxy Gates -1001,GAMMA.GOBLINS=Gamma Goblins -0101,GAUNTLET=Gauntlet -1001,GENESIS=Genesis -0001,GENETIC.DRIFT=Genetic Drift -0001,GENIUS=Genius -0001,GENIUS.2=Genius 2 -0001,GENIUS.3=Genius 3 -1006,GHOSTBUSTERS=Ghostbusters -0000,GLUTTON=Glutton -0001,GOLD.RUSH=Gold Rush -0001,GORGON=Gorgon -0001,GRAPPLE=Grapple -0001,GREMLINS=Gremlins -0001,GUARDIAN=Guardian -0000,GUMBALL=Gumball -1003,H.E.R.O=H E R O -0000,HADRON=Hadron -0001,HANDY.DANDY=Handy Dandy -0007,HARD.HAT.MACK=Hard Hat Mack -1001,HARDHAT=Hardhat -0001,HEAD.ON=Head On -1111,HEAVY.BARREL=Heavy Barrel -0001,HELLSTORM=Hell Storm -0000,HIGH.RISE=High Rise -0001,HORIZON.V=Horizon V -0001,HUNGRYBOY=Hungryboy -0001,HYPER.HEAD.ON=Hyper Head On -0000,IO=I.O. Silver -0101,IKARI.WARRIORS=Ikari Warriors -1005,I1=Impossible Mission -0117,I2=Impossible Mission II -0111,INDIANA.JONES=Indiana Jones -1000,INFILTRATOR=Infiltrator -1000,INFILTRATOR.2=Infiltrator 2 -0111,IE=Into the Eagle's Nest -0001,IP=It's the Pits -0001,J.BIRD=J-Bird -0001,JAWBREAKER=Jawbreaker -0001,JAWBREAKER.II=Jawbreaker II -0006,JELLYFISH=Jellyfish -0001,JOUST=Joust -1001,JOUSTER=Jouster -1001,JOVIAN.ATTACK=Jovian Attack -0001,JUGGLER=Juggler -0001,JUMP.JET=Jump Jet -0001,JUMPMAN=Jumpman -0004,JUNGLE.HUNT=Jungle Hunt -1001,KAMIKAZE=Kamikaze -0006,KARATEKA=Karateka -0001,KID.NIKI=Kid Niki -0001,KUNG.FU.MASTER=Kung Fu Master -0007,LABYRINTH=Labyrinth -0001,LADY.TUT=Lady Tut -0001,LA=Lamb Chops! -0001,LANCASTER=Lancaster -1000,LASER.BOUNCE=Laser Bounce -0001,LAZER.SILK=Lazer Silk -0007,LEMMINGS=Lemmings -0001,LEMM.SIR=Lemmings (Sirius) -0001,LL=Lethal Labyrinth -0000,LP=Little Computer People -0001,LC=Lock 'n' Chase -0007,LODE.RUNNER=Lode Runner -1003,LOST.TOMB=Lost Tomb -0004,LUNAR.LEEPERS=Lunar Leepers -0001,M.I.R.V=M I R V -1000,MAD.BOMBER=Mad Bomber -0001,MAD.RAT=Mad Rat -0001,MANIC.MINER=Manic Miner -1001,MARAUDER=Marauder -1105,MARBLE.MADNESS=Marble Madness -0001,MB=Mario Bros. -0001,MARS.CARS=Mars Cars -1001,MATING.ZONE=Mating Zone -0111,MS=Matterhorn Screamer -1000,MAXWELL.MANOR=Maxwell Manor -1005,MAZEBLOX=Mazeblox -0000,MEGABOTS=Megabots -1001,MICRO.INVADERS=Micro Invaders -0001,MICROWAVE=Microwave -1007,MINER.2049ER=Miner 2049er -1001,MINER.II=Miner II -1001,MI=Ming's Challenge -0005,MINE.SWEEP=Mine Sweep -0001,MINIT.MAN=Minit Man -0007,MINOTAUR=Minotaur -1006,MT=Mission on Thunderhead -0001,MONSTER.MASH=Monster Mash -0001,MZ=Montezuma's Revenge -0001,MOON.PATROL=Moon Patrol -0001,MOUSKATTACK=Mouskattack -0001,MC=Mr. Cool -1001,MD=Mr. Do! -1001,MR=Mr. Robot -0001,MP=Ms. Pacman -0001,MUTANT=Mutant -0000,N.O.R.A.D=N O R A D -0004,NEON=Neon -0001,NEPTUNE=Neptune -0007,NT=Neut Tower -1000,NEUTRONS=Neutrons -0004,NIBBLER=Nibbler -0000,NIGHT.CRAWLER=Night Crawler -0007,NM=Night Mission Pinball -0001,NIGHT.STALKER=Night Stalker -0001,NI=Nightmare Gallery -0001,OM=O'Riley's Mine -0001,OID.ZONE=Oid Zone -1001,OI=Oil's Well -0007,ORBITRON=Orbitron -0000,OW=Out of This World -0001,OUTPOST=Outpost -0000,OUTWORLD=Outworld -0001,PACMAN=Pacman -1000,PAIPEC=Paipec -0001,PB=Pandora's Box -0101,PAPERBOY=Paperboy -1001,PEEPING.TOM=Peeping Tom -1004,PEGASUS.II=Pegasus II -1001,PENETRATOR=Penetrator -0001,PENGO=Pengo -1001,PENTAPUS=Pentapus -0001,PEST.PATROL=Pest Patrol -1001,PHANTOMS.FIVE=Phantoms Five -0001,PR=Pharaoh's Revenge -0001,PHASER.FIRE=Phaser Fire -0000,PHOTAR=Photar -0005,PICNIC.PARANOIA=Picnic Paranoia -0001,PM=Pie-Man -0001,PIG.PEN=Pig Pen -0115,PIPE.DREAM=Pipe Dream -1000,PITFALL.II=Pitfall II -0000,PITSTOP.II=Pitstop II -1001,PLANETOIDS=Planetoids -0001,PLASMANIA=Plasmania -1111,PLATOON=Platoon -1000,POLLYWOG=Pollywog -0001,POOYAN=Pooyan -0114,PP=Prince of Persia -0001,PULSAR.II=Pulsar II -1111,QIX=Qix -1001,QUADRANT.6112=Quadrant 6112 -0116,RADWARRIOR=Radwarrior -0007,RM=Raid Over Moscow -1001,RG=Raiders of the Lost Ring -0001,RAINBOW.ZONE=Rainbow Zone -0116,RAMPAGE=Rampage -0001,RANDAMN=Randamn -0000,RASTER.BLASTER=Raster Blaster -1006,RI=Realm of Impossibility -0007,REAR.GUARD=Rear Guard -1000,RED.ALERT=Red Alert -1114,RENEGADE=Renegade -0001,REPTON=Repton -0007,RESCUE.RAIDERS=Rescue Raiders -1001,RETRO.FEVER=Retro Fever -1000,RB=Retro-Ball -0004,RIBBIT=Ribbit -1001,ROACH.HOTEL=Roach Hotel -0005,ROADBLOCK=Roadblock -0117,ROBOCOP=Robocop -0001,ROBOT.BATTLE=Robot Battle -0001,ROBOTRON.2084=Robotron 2084 -0001,ROUND.ABOUT=Round About -0001,RUN.FOR.IT=Run For It -0001,RUSSKI.DUCK=Russki Duck -0002,SABOTAGE=Sabotage -1001,SABOTAGE.II=Sabotage II -0006,SADARS.REVENGE=Sadar's Revenge -0001,SAMMY.LIGHTFOOT=Sammy Lightfoot -0006,SANITRON=Sanitron -0001,SARACEN=Saracen -0007,SEA.DRAGON=Sea Dragon -0003,SEAFOX=Seafox -0007,SERPENTINE=Serpentine -1001,SHAMUS=Shamus -0006,SHEILA=Sheila -0001,SHORT.CIRCUIT=Short Circuit -1001,SI=Shuttle Intercept -0006,SC=Situation Critical -1006,SKYFOX=Skyfox -0001,SNACK.ATTACK=Snack Attack -0001,SNAKE.BYTE=Snake Byte -0001,SNEAKERS=Sneakers -0007,SNOGGLE=Snoggle -0110,SO=Soko-Ban -1000,SPACE.EGGS=Space Eggs -0000,SPACE.KADET=Space Kadet -0001,SPACE.QUARKS=Space Quarks -0000,SPACE.RACE=Space Race -0000,SPACE.RAIDERS=Space Raiders -1004,SPACE.RESCUE=Space Rescue -1000,SPACE.WARRIOR=Space Warrior -0007,SPARE.CHANGE=Spare Change -0001,SPECTRE=Spectre -0106,SPELLWIELDER=Spellwielder -0001,SPIDER.RAID=Spider Raid -0116,SPIDERBOT=Spiderbot -1001,SPINDIZZY=Spindizzy -1003,SPUTNIK.ATTACK=Sputnik Attack -0001,SPY.HUNTER=Spy Hunter -0000,SS=Spy vs Spy -0000,SS2=Spy vs Spy 2 -0110,SS3=Spy vs Spy 3 -0001,SD=Spy's Demise -1000,STAR.AVENGER=Star Avenger -0004,STAR.BLAZER=Star Blazer -1000,STAR.CLONES=Star Clones -1001,STAR.CRUISER=Star Cruiser -0005,STAR.DANCE=Star Dance -0001,STAR.MAZE=Star Maze -0001,STAR.THIEF=Star Thief -1001,STARBALL=Starball -1001,STARBLASTER=Starblaster -1003,STARGATE=Stargate -1006,STARGLIDER=Starglider -1000,STARMINES=Starmines -0000,STATION.5=Station 5 -0006,STELLAR.7=Stellar 7 -0004,SUCCESSION=Succession -0004,SU=Suicide! -0001,SUPER.BUNNY=Super Bunny -0001,SUPER.PUCKMAN=Super Puckman -0001,SUPER.TAXMAN.2=Super Taxman 2 -1001,SUPER.ZAXXON=Super Zaxxon -0001,SWASHBUCKLER=Swashbuckler -1006,SWORD.OF.SHEOL=Sword of Sheol -1004,SYZYGY=Syzygy -0006,TALON=Talon -0001,TAPPER=Tapper -0116,TC=TechnoCop -0001,TELEPORT=Teleport -0001,TERITORY=Teritory -0010,TETRIS=Tetris -1001,TU=Tharolian Tunnels -0001,AF=The Asteroid Field -0000,THE.BILESTOAD=The Bilestoad -0006,CF=The Caverns of Freitag -0111,TS=The Chase on Tom S's Island -1001,THE.GOONIES=The Goonies -0007,THE.HEIST=The Heist -1001,LG=The Last Gladiator -1111,THE.LAST.NINJA=The Last Ninja -1106,MM=The Movie Monster Game -0004,THE.SNAPPER=The Snapper -0000,THE.SPACE.ARK=The Space Ark -0001,S2=The Spy Strikes Back -1000,VV=The Voyage of the Valkyrie -0016,THEXDER=Thexder -0001,THIEF=Thief -0001,THRESHOLD=Threshold -0001,THUNDER.BOMBS=Thunder Bombs -1001,TIME.PILOT=Time Pilot -0001,TITAN.CRONUS=Titan Cronus -0001,TORAX=Torax -1000,TORPEDO.TERROR=Torpedo Terror -0004,TRACK.ATTACK=Track Attack -0001,TREASURE.DIVE=Treasure Dive -0000,TRIAD=Triad -1003,TROLLS.TRIBS=Trolls and Tribulations -0001,TROMPERS=Trompers -1004,TSUNAMI=Tsunami -1007,TB=Tubeway ][ -0001,TUNNEL.TERROR=Tunnel Terror -0001,TWERPS=Twerps -1001,UD=Up'n Down -0111,VICTORY.ROAD=Victory Road -0000,VIDEO.VEGAS=Video Vegas -0001,VINDICATOR=Vindicator -1001,VIPER.PATROL=Viper Patrol -0001,VORTEX=Vortex -0000,WALL.DEFENCE=Wall Defence -0001,WARGLE=Wargle -0006,WARP.DESTROYER=Warp Destroyer -0001,WAVY.NAVY=Wavy Navy -0000,WAYOUT=Wayout -1111,RR=Who Framed Roger Rabbit -1001,WHOMPER.STOMPER=Whomper Stomper -0000,WILLY.BYTE=Willy Byte -1113,WF=Wings of Fury -1001,XEVIOUS=Xevious -0001,ZARGS=Zargs -1001,ZAXXON=Zaxxon -0005,ZENITH=Zenith -1000,ZP=Zero Gravity Pinball -0001,ZOO.MASTER=Zoo Master +11100,SLICKS=8bit-Slicks +00000,A.CITY.DIES=A City Dies +10010,A.E=A E +00000,AGENT.U.S.A=Agent U S A +11100,AIRHEART=Airheart +00011,ALCAZAR=Alcazar +10010,ALF=Alf: The First Adventure +10010,ALIEN.AMBUSH=Alien Ambush +00010,ALIEN.DOWNPOUR=Alien Downpour +00000,ALIEN.LANDER=Alien Lander +00010,ALIEN.MUNCHIES=Alien Munchies +00010,ALIEN.TYPHOON=Alien Typhoon +11110,ALIENS=Aliens +10061,ANGEL.1=Angel-1 +00001,ANKH=Ankh +00010,APE.ESCAPE=Ape Escape +00010,AC=Apple Cider Spider +10010,APPLE.INVADER=Apple Invader +00011,APPLE.PANIC=Apple Panic +00011,APPLE.ZAP=Apple Zap +10010,AO=Apple-Oids +00070,AQUATRON=Aquatron +10070,AB=Arcade Boot Camp +10000,ARCHON=Archon +00000,ARCHON.II=Archon II +10060,ARCTIC.FOX=Arctic Fox +00010,AA=Ardy the Aardvark +10011,ARENA=Arena +00060,ARGOS=Argos +10010,ARKANOID=Arkanoid +10060,ARTESIANS=Artesians +10011,AS=Asteroid Blaster +10010,AXIS.ASSASSIN=Axis Assassin +00000,AZTEC=Aztec +10010,BQ=BC's Quest for Tires +11110,BAD.DUDES=Bad Dudes +10001,BALLBLAZER=Ballblazer +00010,BANDITS=Bandits +11150,BATMAN=Batman +00000,BY=Bats in the Belfry +00011,BATTLE.CRUISER=Battle Cruiser +00010,BATTLEZONE=Battlezone +00010,BEACH.LANDING=Beach Landing +00000,B1=Beach-Head +00000,B2=Beach-Head II +00010,BEER.RUN=Beer Run +01000,BEJEWELED=Bejeweled +00000,BELLHOP=Bellhop +00010,BERZAP=Berzap +00020,BW=Beyond Castle Wolfenstein +10001,BEZARE=Bezare +10001,BEZOFF=Bezoff +00001,BT=Bill Budge's Trilogy +10070,BLACK.MAGIC=Black Magic +10001,BLISTER.BALL=Blister Ball +00001,BLITZKRIEG=Blitzkrieg +00001,BC=BlockChain +00041,BLOODSUCKERS=Bloodsuckers +00001,BOA=Boa +00010,BOLO=Bolo +00011,BH=Bongo's Bash +00010,BORG=Borg +10011,BOULDER.DASH=Boulder Dash +10011,BOULDER.DASH.II=Boulder Dash II +00010,BK=Bouncing Kamungas +00010,BB=Brainteaser Boulevard +10110,BRUCE.LEE=Bruce Lee +10010,BUBBLE.BOBBLE=Bubble Bobble +00070,BR=Buck Rogers: Planet of Zoom +00071,BUG.ATTACK=Bug Attack +00011,BUG.BATTLE=Bug Battle +00030,BU=BurgerTime +00010,BUZZARD.BAIT=Buzzard Bait +00000,CV=C'est La Vie +00040,CALI.RAISINS=California Raisins +00010,CB=Cannonball Blitz +00011,CANYON.CLIMBER=Canyon Climber +00050,CG=Captain Goodnight +00010,CAPTAIN.POWER=Captain Power +00020,CS=Castle Smurfenstein +00020,CW=Castle Wolfenstein +01170,CATACOMBS=Catacombs +00010,CAVRN.CREATURES=Cavern Creatures +10010,CC=Caverns of Callisto +10010,CEILING.ZERO=Ceiling Zero +10011,CENTIPEDE=Centipede +00010,CL=Championship Lode Runner +10011,CHIP.OUT=Chip Out +00000,CHIVALRY=Chivalry +10070,CHOPLIFTER=Choplifter +00010,CHRONO.WARRIOR=Chrono Warrior +00011,COLLECT=Collect +00100,COLUMNS=Columns +01010,COMMANDO=Commando +00030,CONAN=Conan +00011,CONGO=Congo +00010,CONGO.BONGO=Congo Bongo +00000,CQ=Conquering Worlds +00000,CR=Copts and Robbers +10011,COSMIC.COMBAT=Cosmic Combat +00021,COUNTY.FAIR=County Fair +00010,CRAZY.MAZEY=Crazy Mazey +00011,CREEPY.CRRIDORS=Creepy Corridors +00011,CRICKATEER=Cricketeer +00010,CRIME.WAVE=Crime Wave +10010,CRISIS.MOUNTAIN=Crisis Mountain +00010,CROSS.CITY=Cross City +00011,CROSSFIRE=Crossfire +00011,CRYSTAL.CASTLES=Crystal Castles +00011,CUBIT=Cubit +00001,CYBER.STRIKE=Cyber Strike +00010,CYCLOD=Cyclod +10010,CYCLOTRON=Cyclotron +01170,DG=D-Generation +00170,DANGEROUS.DAVE=Dangerous Dave +01170,DD.GOES.NUTZ=Dangerous Dave Goes Nutz +01170,DD.RETURNS=Dangerous Dave Returns +00010,DU=Darkstar Unhinged +10000,DM=David's Midnight Magic +01100,DEATH.SWORD=Death Sword +10000,DEEP.SPACE=Deep Space +10011,DEFENDER=Defender +10011,DJ=Defender (Joe Holt) +00010,DEMONIC.DECKS=Demonic Decks +10011,DEPTH.CHARGE=Depth Charge +00011,DIAMOND.MINE=Diamond Mine +00010,DIG.DUG=Dig Dug +10010,DINO.EGGS=Dino Eggs +10010,DINO.SMURF=Dino Smurf +00001,DOGFIGHT.II=Dogfight II +00010,DONKEY.KONG=Donkey Kong +00000,DOUBLE.TROUBLE=Double Trouble +00011,DRAGONFIRE=Dragonfire +10011,DRELBS=Drelbs +00010,DROL=Drol +00000,DUNG.BEETLES=Dung Beetles +00011,EARLY.BIRD=Early Bird +00010,EI=Eggs-It +00001,EPOCH=Epoch +00051,ES=Escape! +00010,EVOLUTION=Evolution +00010,EXTERMINATOR=Exterminator +00010,FALCONS=Falcons +00060,FAT.CITY=Fat City +00011,FEDERATION=Federation +00040,FIRE.AND.ICE=Fire and Ice +00010,FIREBIRD=Firebird +00000,FIREBUG=Firebug +00011,FLAK=Flak +01100,FLAPPLE.BIRD=Flapple Bird +00000,FLIP.OUT=Flip Out +00010,FLOBYNOID=Flobynoid +00040,FLOPPY=Floppy +00010,FLY.WARS=Fly Wars +11011,FORCE.7=Force 7 +00010,FRAZZLE=Frazzle +00011,FREE.FALL=Free Fall +00011,FROGGER=Frogger +10010,FROGGER.II=Frogger II +00010,G.I.JOE=G I Joe +00011,GADGETZ=Gadgetz +00000,GALACTIC.ATTACK=Galactic Attack +00010,GALAXIAN=Galaxian +00011,GALAXY.GATES=Galaxy Gates +10010,GAMMA.GOBLINS=Gamma Goblins +01010,GAUNTLET=Gauntlet +10011,GENESIS=Genesis +00010,GENETIC.DRIFT=Genetic Drift +00010,GENIUS=Genius +00010,GENIUS.2=Genius 2 +00010,GENIUS.3=Genius 3 +10060,GHOSTBUSTERS=Ghostbusters +00000,GLUTTON=Glutton +00011,GOLD.RUSH=Gold Rush +00010,GORGON=Gorgon +00011,GRAPPLE=Grapple +00010,GREMLINS=Gremlins +00011,GUARDIAN=Guardian +00000,GUMBALL=Gumball +10031,H.E.R.O=H E R O +00001,HADRON=Hadron +00011,HANDY.DANDY=Handy Dandy +00070,HARD.HAT.MACK=Hard Hat Mack +10010,HARDHAT=Hardhat +00011,HEAD.ON=Head On +11110,HEAVY.BARREL=Heavy Barrel +00011,HELLSTORM=Hell Storm +00000,HIGH.RISE=High Rise +00010,HORIZON.V=Horizon V +00011,HUNGRYBOY=Hungryboy +00011,HYPER.HEAD.ON=Hyper Head On +00000,IO=I.O. Silver +01010,IKARI.WARRIORS=Ikari Warriors +10050,I1=Impossible Mission +01170,I2=Impossible Mission II +01110,INDIANA.JONES=Indiana Jones +10000,INFILTRATOR=Infiltrator +10000,INFILTRATOR.2=Infiltrator 2 +01110,IE=Into the Eagle's Nest +00011,IP=It's the Pits +00010,J.BIRD=J-Bird +00011,JAWBREAKER=Jawbreaker +00010,JAWBREAKER.II=Jawbreaker II +00061,JELLYFISH=Jellyfish +00011,JOUST=Joust +10011,JOUSTER=Jouster +10011,JOVIAN.ATTACK=Jovian Attack +00011,JUGGLER=Juggler +00011,JUMP.JET=Jump Jet +00010,JUMPMAN=Jumpman +00040,JUNGLE.HUNT=Jungle Hunt +10010,KAMIKAZE=Kamikaze +00060,KARATEKA=Karateka +00010,KID.NIKI=Kid Niki +00010,KUNG.FU.MASTER=Kung Fu Master +00070,LABYRINTH=Labyrinth +00010,LADY.TUT=Lady Tut +00011,LA=Lamb Chops! +00010,LANCASTER=Lancaster +10000,LASER.BOUNCE=Laser Bounce +00010,LAZER.SILK=Lazer Silk +00070,LEMMINGS=Lemmings +00010,LEMM.SIR=Lemmings (Sirius) +00010,LL=Lethal Labyrinth +00000,LP=Little Computer People +00011,LC=Lock 'n' Chase +00070,LODE.RUNNER=Lode Runner +10030,LOST.TOMB=Lost Tomb +00040,LUNAR.LEEPERS=Lunar Leepers +00010,M.I.R.V=M I R V +10001,MAD.BOMBER=Mad Bomber +00011,MAD.RAT=Mad Rat +00011,MANIC.MINER=Manic Miner +10010,MARAUDER=Marauder +11050,MARBLE.MADNESS=Marble Madness +00011,MB=Mario Bros. +00011,MARS.CARS=Mars Cars +10010,MATING.ZONE=Mating Zone +01110,MS=Matterhorn Screamer +10000,MAXWELL.MANOR=Maxwell Manor +10050,MAZEBLOX=Mazeblox +00000,MEGABOTS=Megabots +10011,MICRO.INVADERS=Micro Invaders +00010,MICROWAVE=Microwave +10070,MINER.2049ER=Miner 2049er +10010,MINER.II=Miner II +10010,MI=Ming's Challenge +00051,MINE.SWEEP=Mine Sweep +00010,MINIT.MAN=Minit Man +00070,MINOTAUR=Minotaur +10060,MT=Mission on Thunderhead +00010,MONSTER.MASH=Monster Mash +00011,MZ=Montezuma's Revenge +00010,MOON.PATROL=Moon Patrol +00011,MOUSKATTACK=Mouskattack +00010,MC=Mr. Cool +10010,MD=Mr. Do! +10011,MR=Mr. Robot +00011,MP=Ms. Pacman +00010,MUTANT=Mutant +00000,N.O.R.A.D=N O R A D +00040,NEON=Neon +00011,NEPTUNE=Neptune +00071,NT=Neut Tower +10000,NEUTRONS=Neutrons +00040,NIBBLER=Nibbler +00001,NIGHT.CRAWLER=Night Crawler +00070,NM=Night Mission Pinball +00010,NIGHT.STALKER=Night Stalker +00010,NI=Nightmare Gallery +00010,OM=O'Riley's Mine +00010,OID.ZONE=Oid Zone +10010,OI=Oil's Well +00071,ORBITRON=Orbitron +00000,OW=Out of This World +00011,OUTPOST=Outpost +00001,OUTWORLD=Outworld +00010,PACMAN=Pacman +10001,PAIPEC=Paipec +00011,PB=Pandora's Box +01010,PAPERBOY=Paperboy +10010,PEEPING.TOM=Peeping Tom +10040,PEGASUS.II=Pegasus II +10010,PENETRATOR=Penetrator +00010,PENGO=Pengo +10010,PENTAPUS=Pentapus +00010,PEST.PATROL=Pest Patrol +10011,PHANTOMS.FIVE=Phantoms Five +00010,PR=Pharaoh's Revenge +00010,PHASER.FIRE=Phaser Fire +00001,PHOTAR=Photar +00051,PICNIC.PARANOIA=Picnic Paranoia +00010,PM=Pie-Man +00011,PIG.PEN=Pig Pen +01150,PIPE.DREAM=Pipe Dream +10000,PITFALL.II=Pitfall II +00001,PITSTOP.II=Pitstop II +10011,PLANETOIDS=Planetoids +00010,PLASMANIA=Plasmania +11110,PLATOON=Platoon +10001,POLLYWOG=Pollywog +00010,POOYAN=Pooyan +01140,PP=Prince of Persia +00010,PULSAR.II=Pulsar II +11110,QIX=Qix +10010,QUADRANT.6112=Quadrant 6112 +01160,RADWARRIOR=Radwarrior +00070,RM=Raid Over Moscow +10011,RG=Raiders of the Lost Ring +00011,RAINBOW.ZONE=Rainbow Zone +01160,RAMPAGE=Rampage +00010,RANDAMN=Randamn +00001,RASTER.BLASTER=Raster Blaster +10060,RI=Realm of Impossibility +00070,REAR.GUARD=Rear Guard +10001,RED.ALERT=Red Alert +11140,RENEGADE=Renegade +00010,REPTON=Repton +00070,RESCUE.RAIDERS=Rescue Raiders +10011,RETRO.FEVER=Retro Fever +10001,RB=Retro-Ball +00041,RIBBIT=Ribbit +10010,ROACH.HOTEL=Roach Hotel +00051,ROADBLOCK=Roadblock +01170,ROBOCOP=Robocop +00011,ROBOT.BATTLE=Robot Battle +00010,ROBOTRON.2084=Robotron 2084 +00010,ROUND.ABOUT=Round About +00010,RUN.FOR.IT=Run For It +00011,RUSSKI.DUCK=Russki Duck +00021,SABOTAGE=Sabotage +10011,SABOTAGE.II=Sabotage II +00061,SADARS.REVENGE=Sadar's Revenge +00010,SAMMY.LIGHTFOOT=Sammy Lightfoot +00061,SANITRON=Sanitron +00010,SARACEN=Saracen +00070,SEA.DRAGON=Sea Dragon +00031,SEAFOX=Seafox +00070,SERPENTINE=Serpentine +10011,SHAMUS=Shamus +00060,SHEILA=Sheila +00010,SHORT.CIRCUIT=Short Circuit +10011,SI=Shuttle Intercept +00060,SC=Situation Critical +10060,SKYFOX=Skyfox +00011,SNACK.ATTACK=Snack Attack +00010,SNAKE.BYTE=Snake Byte +00010,SNEAKERS=Sneakers +00071,SNOGGLE=Snoggle +01100,SO=Soko-Ban +10000,SPACE.EGGS=Space Eggs +00001,SPACE.KADET=Space Kadet +00010,SPACE.QUARKS=Space Quarks +00001,SPACE.RACE=Space Race +00001,SPACE.RAIDERS=Space Raiders +10041,SPACE.RESCUE=Space Rescue +10001,SPACE.WARRIOR=Space Warrior +00070,SPARE.CHANGE=Spare Change +00010,SPECTRE=Spectre +01060,SPELLWIELDER=Spellwielder +00010,SPIDER.RAID=Spider Raid +01160,SPIDERBOT=Spiderbot +10011,SPINDIZZY=Spindizzy +10030,SPUTNIK.ATTACK=Sputnik Attack +00010,SPY.HUNTER=Spy Hunter +00000,SS=Spy vs Spy +00000,SS2=Spy vs Spy 2 +01100,SS3=Spy vs Spy 3 +00010,SD=Spy's Demise +10001,STAR.AVENGER=Star Avenger +00040,STAR.BLAZER=Star Blazer +10001,STAR.CLONES=Star Clones +10011,STAR.CRUISER=Star Cruiser +00051,STAR.DANCE=Star Dance +00010,STAR.MAZE=Star Maze +00011,STAR.THIEF=Star Thief +10010,STARBALL=Starball +10011,STARBLASTER=Starblaster +10030,STARGATE=Stargate +10060,STARGLIDER=Starglider +10001,STARMINES=Starmines +00000,STATION.5=Station 5 +00060,STELLAR.7=Stellar 7 +00041,SUCCESSION=Succession +00041,SU=Suicide! +00010,SUPER.BUNNY=Super Bunny +00011,SUPER.PUCKMAN=Super Puckman +00010,SUPER.TAXMAN.2=Super Taxman 2 +10010,SUPER.ZAXXON=Super Zaxxon +00010,SWASHBUCKLER=Swashbuckler +10060,SWORD.OF.SHEOL=Sword of Sheol +10041,SYZYGY=Syzygy +00060,TALON=Talon +00010,TAPPER=Tapper +01160,TC=TechnoCop +00010,TELEPORT=Teleport +00011,TERITORY=Teritory +00100,TETRIS=Tetris +10010,TU=Tharolian Tunnels +00011,AF=The Asteroid Field +00001,THE.BILESTOAD=The Bilestoad +00061,CF=The Caverns of Freitag +01110,TS=The Chase on Tom S's Island +10010,THE.GOONIES=The Goonies +00070,THE.HEIST=The Heist +10010,LG=The Last Gladiator +11110,THE.LAST.NINJA=The Last Ninja +11060,MM=The Movie Monster Game +00041,THE.SNAPPER=The Snapper +00000,THE.SPACE.ARK=The Space Ark +00010,S2=The Spy Strikes Back +10000,VV=The Voyage of the Valkyrie +00160,THEXDER=Thexder +00011,THIEF=Thief +00010,THRESHOLD=Threshold +00010,THUNDER.BOMBS=Thunder Bombs +10011,TIME.PILOT=Time Pilot +00011,TITAN.CRONUS=Titan Cronus +00010,TORAX=Torax +10001,TORPEDO.TERROR=Torpedo Terror +00040,TRACK.ATTACK=Track Attack +00010,TREASURE.DIVE=Treasure Dive +00001,TRIAD=Triad +10031,TROLLS.TRIBS=Trolls and Tribulations +00011,TROMPERS=Trompers +10041,TSUNAMI=Tsunami +10070,TB=Tubeway ][ +00010,TUNNEL.TERROR=Tunnel Terror +00011,TWERPS=Twerps +10010,UD=Up'n Down +01110,VICTORY.ROAD=Victory Road +00000,VIDEO.VEGAS=Video Vegas +00010,VINDICATOR=Vindicator +10010,VIPER.PATROL=Viper Patrol +00011,VORTEX=Vortex +00001,WALL.DEFENCE=Wall Defence +00010,WARGLE=Wargle +00060,WARP.DESTROYER=Warp Destroyer +00010,WAVY.NAVY=Wavy Navy +00000,WAYOUT=Wayout +11110,RR=Who Framed Roger Rabbit +10011,WHOMPER.STOMPER=Whomper Stomper +00000,WILLY.BYTE=Willy Byte +11130,WF=Wings of Fury +10010,XEVIOUS=Xevious +00011,ZARGS=Zargs +10010,ZAXXON=Zaxxon +00051,ZENITH=Zenith +10001,ZP=Zero Gravity Pinball +00010,ZOO.MASTER=Zoo Master [eof] diff --git a/src/constants.a b/src/constants.a index 33ed21086..bd4e8f1be 100644 --- a/src/constants.a +++ b/src/constants.a @@ -189,7 +189,10 @@ HAS_SPEECH = %11000000 ; AND masks for game info bitfield (after game display name in gSearchStore) HAS_DHGR_TITLE = %10000000 ; this one is hard-coded via BMI instead of AND/BNE +IS_SINGLE_LOAD = %01000000 CHEAT_CATEGORY = %00001111 +; ^^ +; ++-- your bits here! ; AND masks for MachineStatus HAS_JOYSTICK = %10000000 diff --git a/src/glue.launch.a b/src/glue.launch.a index 5df13a20a..08884edfb 100644 --- a/src/glue.launch.a +++ b/src/glue.launch.a @@ -117,28 +117,65 @@ FindGame ;------------------------------------------------------------------------------ PlayGame jsr GetGameToLaunch - ; A/Y = address of game filename + ; A/Y = address of game filename in gSearchIndex PlayGameInAY +ST16 SAVE +ST16 @pfile + +ST16 @xfile + 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 #IS_SINGLE_LOAD + php jsr ClearScreens ; avoid seeing code load into the HGR page ; (clobbers $106, must do now before loading prelaunch code) jsr LoadIndexedFile ; load prelaunch index file -- !word gSearchCache +- !word gSearchCache ; clobber gSearchCache which we no longer need !word kPrelaunchIndexRecord - jsr okvs_find + jsr okvs_find ; find this game's prelaunch index record !word - @pfile !word $FDFD ; SMC - +ST16 @indexRecordPtr + +ST16 @prelaunchIndexRecordPtr - jsr LoadIndexedFile + jsr LoadIndexedFile ; load this game's prelaunch code into $0106 !word $0106 -@indexRecordPtr +@prelaunchIndexRecordPtr !word $FDFD ; SMC + plp + beq @loadFromSubdirectory + + bit $ff58 + jsr LoadIndexedFile ; load xsingle index file (contains pointers to game binaries) +- !word gSearchCache ; clobber prelaunch index file which we no longer need + !word kXSingleRecord + + jsr okvs_find ; find this game's xsingle index record + !word - +@xfile !word $FDFD ; SMC + +ST16 @xsingleIndexRecordPtr + jsr okvs_next_field + ldy #5 + lda (PTR), y ; get game load address (stored immediately after index record) + sta @xsingleAddr + iny + lda (PTR), y + sta @xsingleAddr+1 + + jsr LoadIndexedFile ; load this game binary +@xsingleAddr + !word $FDFD ; SMC +@xsingleIndexRecordPtr + !word $FDFD ; SMC + jmp Launch + +@loadFromSubdirectory ; we start by placing the subdirectory name at gPathname+kGameDirectoryLen ; to leave room for the GameDirectory name as the parent diff --git a/src/index/artwork.idx.a b/src/index/artwork.idx.a index 271e99d41..9537a2e36 100644 --- a/src/index/artwork.idx.a +++ b/src/index/artwork.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12071461 + !be24 14048143 !le16 5108 diff --git a/src/index/attract.idx.a b/src/index/attract.idx.a index 5d1a11ee1..fe9076c56 100644 --- a/src/index/attract.idx.a +++ b/src/index/attract.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12019845 + !be24 13996527 !le16 5521 diff --git a/src/index/cache00.idx.a b/src/index/cache00.idx.a index 91d264e2b..ea6e6dfe4 100644 --- a/src/index/cache00.idx.a +++ b/src/index/cache00.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11957346 + !be24 13934028 !le16 3841 diff --git a/src/index/cache01.idx.a b/src/index/cache01.idx.a index 3d2650d0f..7c79add91 100644 --- a/src/index/cache01.idx.a +++ b/src/index/cache01.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11970867 + !be24 13947549 !le16 4264 diff --git a/src/index/cache10.idx.a b/src/index/cache10.idx.a index 8913b558d..45dbbc690 100644 --- a/src/index/cache10.idx.a +++ b/src/index/cache10.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11987726 + !be24 13964408 !le16 5395 diff --git a/src/index/cache11.idx.a b/src/index/cache11.idx.a index f689ff477..cffcd6ce4 100644 --- a/src/index/cache11.idx.a +++ b/src/index/cache11.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12007039 + !be24 13983721 !le16 6026 diff --git a/src/index/coverfade.idx.a b/src/index/coverfade.idx.a index 5710911a4..c2f05c9d9 100644 --- a/src/index/coverfade.idx.a +++ b/src/index/coverfade.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12076569 + !be24 14053251 !le16 410 diff --git a/src/index/credits.idx.a b/src/index/credits.idx.a index fde2f68f5..8fe26ce08 100644 --- a/src/index/credits.idx.a +++ b/src/index/credits.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12077323 + !be24 14054005 !le16 448 diff --git a/src/index/decrunch.idx.a b/src/index/decrunch.idx.a index 8c827db71..6f12990d4 100644 --- a/src/index/decrunch.idx.a +++ b/src/index/decrunch.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12077771 + !be24 14054453 !le16 303 diff --git a/src/index/dfx.idx.a b/src/index/dfx.idx.a index 957c47eac..a6ffa4843 100644 --- a/src/index/dfx.idx.a +++ b/src/index/dfx.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12028006 + !be24 14004688 !le16 1640 diff --git a/src/index/dgr.fizzle.idx.a b/src/index/dgr.fizzle.idx.a index e6762ca93..8fe05d9fb 100644 --- a/src/index/dgr.fizzle.idx.a +++ b/src/index/dgr.fizzle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12077055 + !be24 14053737 !le16 67 diff --git a/src/index/dgr.idx.a b/src/index/dgr.idx.a index b840093ed..9878c7f8b 100644 --- a/src/index/dgr.idx.a +++ b/src/index/dgr.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12071402 + !be24 14048084 !le16 59 diff --git a/src/index/dhgr.idx.a b/src/index/dhgr.idx.a index 5cda0e1be..fee1ea3e8 100644 --- a/src/index/dhgr.idx.a +++ b/src/index/dhgr.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12069868 + !be24 14046550 !le16 1437 diff --git a/src/index/dtitle.idx.a b/src/index/dtitle.idx.a index ba34660be..a62cab3ed 100644 --- a/src/index/dtitle.idx.a +++ b/src/index/dtitle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12055060 + !be24 14031742 !le16 537 diff --git a/src/index/fx.idx.a b/src/index/fx.idx.a index 009da86e6..a99a59c7c 100644 --- a/src/index/fx.idx.a +++ b/src/index/fx.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12025366 + !be24 14002048 !le16 2640 diff --git a/src/index/gamehelp.idx.a b/src/index/gamehelp.idx.a index 990436573..28fd5a2b2 100644 --- a/src/index/gamehelp.idx.a +++ b/src/index/gamehelp.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12030004 + !be24 14006686 !le16 6780 diff --git a/src/index/gr.fizzle.idx.a b/src/index/gr.fizzle.idx.a index 398187eb4..fe4bc58e5 100644 --- a/src/index/gr.fizzle.idx.a +++ b/src/index/gr.fizzle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12076979 + !be24 14053661 !le16 76 diff --git a/src/index/gr.idx.a b/src/index/gr.idx.a index e3b429aeb..1a858a01f 100644 --- a/src/index/gr.idx.a +++ b/src/index/gr.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12071305 + !be24 14047987 !le16 97 diff --git a/src/index/helptext.idx.a b/src/index/helptext.idx.a index deac2f276..2e83cdb74 100644 --- a/src/index/helptext.idx.a +++ b/src/index/helptext.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12077122 + !be24 14053804 !le16 201 diff --git a/src/index/hgr0.idx.a b/src/index/hgr0.idx.a index 54923a884..5671f2ab3 100644 --- a/src/index/hgr0.idx.a +++ b/src/index/hgr0.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12055597 + !be24 14032279 !le16 4625 diff --git a/src/index/hgr1.idx.a b/src/index/hgr1.idx.a index 5ce4d5b87..4b487db28 100644 --- a/src/index/hgr1.idx.a +++ b/src/index/hgr1.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12060222 + !be24 14036904 !le16 1702 diff --git a/src/index/hgr2.idx.a b/src/index/hgr2.idx.a index 587830dac..6728d874a 100644 --- a/src/index/hgr2.idx.a +++ b/src/index/hgr2.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12061924 + !be24 14038606 !le16 1087 diff --git a/src/index/hgr3.idx.a b/src/index/hgr3.idx.a index 1cd2f0dc3..51131872e 100644 --- a/src/index/hgr3.idx.a +++ b/src/index/hgr3.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12063011 + !be24 14039693 !le16 3279 diff --git a/src/index/hgr4.idx.a b/src/index/hgr4.idx.a index edfc3bef1..13a7426e9 100644 --- a/src/index/hgr4.idx.a +++ b/src/index/hgr4.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12066290 + !be24 14042972 !le16 2985 diff --git a/src/index/hgr5.idx.a b/src/index/hgr5.idx.a index 2cd545787..dbe42c27b 100644 --- a/src/index/hgr5.idx.a +++ b/src/index/hgr5.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12069275 + !be24 14045957 !le16 479 diff --git a/src/index/hgr6.idx.a b/src/index/hgr6.idx.a index a8f0a47f1..982f69049 100644 --- a/src/index/hgr6.idx.a +++ b/src/index/hgr6.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12069754 + !be24 14046436 !le16 114 diff --git a/src/index/joystick.idx.a b/src/index/joystick.idx.a index f4569d538..1403f08b9 100644 --- a/src/index/joystick.idx.a +++ b/src/index/joystick.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12078074 + !be24 14054756 !le16 2370 diff --git a/src/index/miniattract0.idx.a b/src/index/miniattract0.idx.a index b0675d2a2..483067f6a 100644 --- a/src/index/miniattract0.idx.a +++ b/src/index/miniattract0.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12041951 + !be24 14018633 !le16 4548 diff --git a/src/index/miniattract1.idx.a b/src/index/miniattract1.idx.a index 08103afe7..77020b0a5 100644 --- a/src/index/miniattract1.idx.a +++ b/src/index/miniattract1.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12046499 + !be24 14023181 !le16 2236 diff --git a/src/index/prelaunch.idx.a b/src/index/prelaunch.idx.a index 657b5977d..bb748e481 100644 --- a/src/index/prelaunch.idx.a +++ b/src/index/prelaunch.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12013065 + !be24 13989747 !le16 6780 diff --git a/src/index/search00.idx.a b/src/index/search00.idx.a index 7bc10168f..190660f19 100644 --- a/src/index/search00.idx.a +++ b/src/index/search00.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11948540 + !be24 13925222 !le16 8806 diff --git a/src/index/search01.idx.a b/src/index/search01.idx.a index dd19c9da9..86eb3fd64 100644 --- a/src/index/search01.idx.a +++ b/src/index/search01.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11961187 + !be24 13937869 !le16 9680 diff --git a/src/index/search10.idx.a b/src/index/search10.idx.a index 88ba90d9b..d272b450d 100644 --- a/src/index/search10.idx.a +++ b/src/index/search10.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11975131 + !be24 13951813 !le16 12595 diff --git a/src/index/search11.idx.a b/src/index/search11.idx.a index 376bb6d96..b8dd03db7 100644 --- a/src/index/search11.idx.a +++ b/src/index/search11.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 11993121 + !be24 13969803 !le16 13918 diff --git a/src/index/sfx.idx.a b/src/index/sfx.idx.a index 1413f8f4f..7ae191e7d 100644 --- a/src/index/sfx.idx.a +++ b/src/index/sfx.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12029646 + !be24 14006328 !le16 358 diff --git a/src/index/slideshow.idx.a b/src/index/slideshow.idx.a index dcf114b2b..34201cf0c 100644 --- a/src/index/slideshow.idx.a +++ b/src/index/slideshow.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12036784 + !be24 14013466 !le16 5167 diff --git a/src/index/title.idx.a b/src/index/title.idx.a index f4af3dc93..821080430 100644 --- a/src/index/title.idx.a +++ b/src/index/title.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 12048735 + !be24 14025417 !le16 6325 diff --git a/src/index/xsingle.idx.a b/src/index/xsingle.idx.a new file mode 100644 index 000000000..87a3608f9 --- /dev/null +++ b/src/index/xsingle.idx.a @@ -0,0 +1,8 @@ +; +; Index record for build/XSINGLE.IDX +; +; This file is automatically generated +; + !byte 0 + !be24 13922528 + !le16 2694 diff --git a/src/prodos.path.a b/src/prodos.path.a index d21520050..7b5b69cd8 100644 --- a/src/prodos.path.a +++ b/src/prodos.path.a @@ -149,6 +149,9 @@ kDecrunchRecord kJoystickRecord !source "src/index/joystick.idx.a" +kXSingleRecord + !source "src/index/xsingle.idx.a" + kTotalDataFile !byte 10 !raw "TOTAL.DATA" diff --git a/src/textrank.a b/src/textrank.a index f510bf3fc..f5b0f1375 100644 --- a/src/textrank.a +++ b/src/textrank.a @@ -34,12 +34,14 @@ InputBuffer ; out: gSearchStore populated ;------------------------------------------------------------------------------ ReloadSearchIndex - jsr LoadIndexedFile ; load appropriate search index into $8200 - !word gSearchIndex - !word kSearchIndexRecord jsr LoadIndexedFile ; load appropriate search cache into $B000 !word gSearchCache !word kSearchCacheRecord +ReloadSearchIndexOnly + jsr LoadIndexedFile ; load appropriate search index into $6000 +SearchIndexHandle + !word gSearchIndex + !word kSearchIndexRecord rts FindTitleInCache diff --git a/src/ui.attract.mode.a b/src/ui.attract.mode.a index 0508d56cb..39d44e5a3 100644 --- a/src/ui.attract.mode.a +++ b/src/ui.attract.mode.a @@ -71,7 +71,12 @@ MegaAttractMode bpl MegaAttractMode cmp #$8D ; Enter plays the game shown on screen. bne + ; Any other key switches to Search Mode. + jsr ReloadSearchIndexOnly +LD16 gLastMegaAttractGame + +ST16 @game + jsr okvs_find + !word SearchIndexHandle +@game !word $FDFD ; SMC jsr PlayGameInAY ; (might return if user hits Ctrl-Reset) + jmp SearchMode