Setup Editor

Featured Levels
Mupen Ini

GoldenEye Files
Solo Levels
Multi Levels
Misc Mods
For Fun Mods
Action Blocks

Perfect Dark Files
Solo Levels
Multi Levels
Misc mods
Action Blocks

Diddy Kong Racing Files

Mickey Speedway Files

Jet Force Gemini Files

N64 Extra Files
N64 Tools
N64 Other Game Mods

GoldenEye Pics

Perfect Dark Pics

Videos (internal)
Solo Videos
Multi Videos
Misc Videos

00 Agents
Message Board
Goldfinger 64

Submit Files

Files - Misc - GoldenEye Spectrum Emulator

NameGoldenEye Spectrum Emulator
DateMarch 27, 2012
DescriptionGoldenEye Spectrum Emulation Unlocked

Little benownst to the world all this time, GoldenEye (N64) has a fully-functional ZX Spectrum 48x emulator built into it. By feeding it a proper Spectrum monitor program and calling menu 25 to load a snapshot, any Spectrum 48x program can be run.

The emulator started life as a side project to see if Spectrum emulation was possible on N64 and was hooked into GE, the current game in development. It was supposed to be removed before release but was only made inaccessible and inoperable. All the registers, dependancies, and script required to run the emulator still reside in retail GoldenEye carts.

The original list of games were previous Rare titles, then known as Ultimate Play the Game. The embedded filelist is, in order:
em/data/sabre.seg.rz Sabre Wulf
em/data/atic.seg.rz Atic Atac
em/data/jetpac.seg.rz Jetpac
em/data/jetman.seg.rz Lunar Jetman
em/data/alien8.seg.rz Alien 8
em/data/gunfright.seg.rz Gun Fright
em/data/under.seg.rz Underwurlde
em/data/knightlore.seg.rz Knight Lore
em/data/pssst.seg.rz Pssst
em/data/cookie.seg.rz Cookie
em/data/spec_rom.seg.rz Spectrum 16k monitor program

In actual fact, the emulator was supposed to run without the aid of the monitor program. Critical subroutines were copied out or hardcoded. In its current state, however, the monitor is required.

Originally, the emulator was run much the same way that stages are run. Unlike stages which run by switching to menu 11, the emulator runs by switching to menu 25. When initialized, it reads what buttons are held on controller 3. Depending on the button held is which game would be loaded. From there, the monitor program and selected snapshot file are loaded from ROM, and if necessary these files are decompressed.
Only controller 1 is detected. This is mapped as a Kempston joystick on port 31. Necessary buttons to start each game (usually keyboard '0') and any additional keys to play the game are mapped to the keyboard port 254 halfwords. These are set on a per-game basis, but general controls are A/B to start a game, Z for the 'action' button, and L to unload the emulator and return to gameplay.
Each emulation cycle lasts 69888 Spectrum cycles. Each opcode consumes a certain amount of this cycle count. At the end, the screen is drawn to the Spectrum screen buffer, and this is displayed like an image using usual N64 microcode. Emulation continues as long as menu 25 is called.


Why a Patch Is Required

In its pre-patched state the emulator has some peculiar issues, probably due to the different versions of included files used to compile the retail game.
For instance, the ten games listed above were not all selectable. The initializer only has button masks for eight games, defaulting to SabreWulf. The snapshot loader restricts this list to only the first five. The controller mapping function, however, redirects buttons for all ten titles.

Interestingly, the ROM file table leaves only ten spaces for the ten different snapshot files blank. These are completely blank, without any data or indicies until the final file placeholder. As previously mentioned, the monitor was not supposed to be included but is requested by the snapshot loader. Otherwise, the list would require eleven spaces.

The 'unloader' does not, in fact, work properly. It copies NULLs over the program manager. This, obviously, will cause any number of fatal errors to the current game and make it impossible to return to normal gameplay. Also, there is no capacity to reset the screen registers to default.


The Patch

The patch will reactivate full emulation support in GoldenEye.
The patch should be applied only to an uneditted, unbyteswapped (big-endian) North American GoldenEye ROM (NGEE). The GoldenEye Setup Editor can apply and byteswap the ROM for you, as well as recalculate the checksum. (Yes, that was a shameless plug.)

Emulation can be triggered from the folder select screen after the Eye and title screens by pressing L+R on controller 3. To access each game, hold the button noted below on controller 3 as you press L+R. If no buttons are held or an invalid combination is used it will default to Cookie. For best results, hold the button for the game you want as you press L+R.
c left Sabre Wulf
c right Atic Atac
c up Jetpac
c down Luna Jetman
+ left Alien 8
+ right Gun Fright
+ up Underwurlde
+ down Knight Lore
A button Pssst
(default) Cookie

To end emulation at any time, simply press L on controller 1. It should return you to the folder select screen and allow you to continue to play normally. This also conveniently allows you to select another Spectrum game if you wish.

Briefly, here's the basics to playing each game.

Sabre Wulf L+R, c left
Cut a swath through the jungle collecting loot in search of a legendary treasure.
The game's title screen will clear automatically after a couple seconds.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons
Sabre: Z button

Atic Atac L+R, c right
Seek out the golden key and escape the castle!
Collect food to regain health. Keys and other items can be collected with A/B and while carried offer some bonus effect. Keys matching the color of barred doors let you walk through them, items like the whiskey bottle let you walk through certain features like kegs, bookcases, clocks, skeletons, etc., and other items allow you to kill or scare certain kinds of enemies.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons
Attack: Z button
Collect: A or B button
Character Select on Main Menu:
+ left Knight: passes through clocks
+ down Wizard: passes through bookcases
+ right Serf: has momentum and passes through kegs

Jetpac L+R, c up
Rebuild your rocket and refuel it while pillaging each planet. Touch each rocket segment or block of fuel to carry it back to the rocket. When the rocket is entirely purple touch it to take off to the next planet.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons; fly by pressing up, A, or B
Fire: Z button

Lunar Jetman L+R, c down
Drop the bomb on the alien bases before they launch their missiles to destroy your rover.
Press B when in the middle of the rover to enter it. Inside the rover you are immune to the aliens outside. Press B again to exit. You can move the rover with left and right but can not move over craters in the ground. B also uses the teleporter.
You fly by pressing up or automatically if you walk over a crater in the ground. This consumes fuel in the meter at the top of the screen. To refuel, stand in the middle of your rover.
Pick up an item by moving over it and pressing A. You drop the item by pressing A again. You can also drop an item on the flat part of your rover to drive it to a location. Teleporting while holding an item also transports the item.
You can repair craters. Stand in the middle of the rover and pressing A to pick up a piece of bridging. Drop the bridging while hovering over the crater by pressing A again. There is an infinite supply of bridges.
To destroy an alien base carry a bomb and drop it from above onto the main building. Dropping a bomb anywhere else simply leaves a crater. Bombs always appear next to the rover and there is an infinite supply of them.
When time is out the aliens fire two missiles, one of which is a dummy. The other will bee-line for the rover and destroy it. If it does the game is over. You can destroy the missile by firing at it or colliding with it. The time bar is at the top of the screen.
In the upper left of the screen is an indicator for what direction your rover is in. The upper right indicates what direction the alien base will be.
Press start to advance past the title screen.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons; fly by pressing up
Fire: Z button
Collect: A button
Enter/Exit: B button

Alien 8 L+R, + left
Find and collect the power cores and return them to the cryo units to revive the crew.
Start Game: Start, A, or B buttons
Forward: up on control stick, + pad, c buttons
Turn: left/right on control stick, + pad, c buttons
Collect: A or B button
Jump: Z button

Gun Fright L+R, + right
Track down each varmit and plug 'em full of lead to collect the bounty on their head.
In the bonus and gunfight modes move the crosshairs and press Z to fire at the bags of money or the criminal.
In town, avoid touching any of the townsfolk. Some of the townsfolk will be hopping up and down pointing in the general direction of the criminal. When you see a criminal, fire your gun with Z to start a gunfight with them.
Movement: control stick, + pad, c buttons
Fire: Z button

Underwurlde L+R, + up
Defeat the dark lord within the depths of the Underwurlde.
Enemies do not kill you in Underwurlde. You only die if you fall too far to the ground. Collecting gems temporarily makes you blue and immune to death.
You will not be able to attack enemies until you have collected a weapon. You should start with one just to your left. Move over it and press B to collect it. You may carry up to three items.
Guardians are stationary monsters that can only be defeated using a particular item.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons
Jump: up on control stick, + pad, c buttons or press the A button
Collect: B button
Fire: Z button

Knight Lore L+R, + down
Feed the charms hidden within the castle to the cauldron to produce a potion to cure your lycanthropy.
The day/night counter in the lower right indicates how long it will be before you transform. When you transform you'll be immobile and vulnerable for a few seconds. You should only enter the cauldron room as a human, but otherwise there is no actual difference between the human and wolf.
Start Game: Start, A, or B buttons
Forward: up on control stick, + pad, c buttons
Turn: left/right on control stick, + pad, c buttons
Collect: A or B button
Jump: Z button

Pssst L+R, A
Spray the blasted pests before they eat your prized Thyrgodian Megga Chrisanthodil.
Each type of spray kills a different kind of pest. If you use the wrong one the pest stops for a second and then continues. If two or more pests latch onto the flower it will begin to wit and die.
To grab an item or spraycan press against it. To drop off an item, press it into one of the nooks on the side of the screen.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons
Fire: Z button

Cookie L+R
Whap the ingredients into the pot with a well-timed blast of flour. Smack everything else into the wastebaskets.
The flour will fire in the last direction you pressed.
Start Game: Start, A, or B buttons
Movement: control stick, + pad, c buttons
Fire: Z button


For those interested in how much code the patch affected, here's a brief summary.
1) To hook the emulator in, eight lines were added into menu 5's interface to test for controller three. Room was allocated by condensing the usual control stick tests.
2) A 2-byte fix was used to allow access to ROM filelist entry 0x2DF. This bug was only present in NGEE and corrected in later versions.
3) ROM filelist entries were added for each snapshot and the program monitor. Since the monitor is necessary in this iteration of the emulator but is commandeering a snapshot entry, the unused text file LwaxJ has been overwritten with cookie.seg.rz. All other entries fill blank, unused placeholders.
4) As previously mentioned, the file loader was limitted to the first five titles. This test was changed into a simple invalidity test. Changes were made in-place (crudely) and affect a total of five lines.
5) Menu 25's initializer, used to determine which of the games should be loaded by testing the held buttons on controller 3, has been completely rewritten. Games are no longer had-coded to masks but use a table. A final NULL entry indicates the end of the list and simultaneously the index of the default snapshot. The masks used are identical to those used by Rare, with the exception of the default entry being overridden with the unregistered game Cookie. One line was also added to stop the main menu music.
6) Within the controller mappings, L's assigned function no longer nullifies the program manager. It now calls the title object, returning to the previously-loaded menu 05 (folder select). This consists of four lines, replacing a loop and shortening the code generally.
7) Although unneccessary, the Start button was mapped to mirror the A/B start game option for all titles.

Everything else is untouched, including all aspects of actual emulation. You are playing Rare's actual embedded Spectrum emulator and nothing else.


As always, disassemblies and disertations are always available. Comments, queries, and quirks can be reported either by email or at the Shooters Forever forums: http://www.shootersforever.com/forums_message_boards

Download0.259107 Mb


Posted by Zoinkity September 13, 2012 3:44 pm
The Spectrum emulator was always in GE, from the beginning. It's in every retail NTSC cart and was only removed in PAL. The patch applies a hack to make it accessible and adds in the monitor program so the games will run. That hack was coded in pure ASM with a hex editor, and I zipped up the monitor program with gzip. Nothing was compiled, and the closest thing to 'source' would be the disassembly I typed up and used as a guide to recode this.

Posted by PerfectionDark September 9, 2012 11:39 am
How did you add the code to the ROM? like was it written, compiled and copied or something? if so did you use C?

Posted by Acceptable67 April 1, 2012 12:10 pm
This was a great find - nice job ! :-)

Posted by mistamontiel March 27, 2012 9:25 pm
Now I can play this system..for the first time..in GE007. Zoinkz you rock !!!

Post a comment
Type GOLDENEYE in this box   

Latest GE Files
Shipping Yard
Blender GEObj Exporter
Goldfinger 64
Shapes and Colors

Latest PD Files
Perfect Dark Real Gun Names
Perfect Dark Plus
DataDyne Compound
GoldenEye X
2X Weapons No Reloads Plus
Perfect Dark XBLA mp3s
Darks Corp Music
Perfect Dark Soundfont
Landing Zone Trilogy
Weather Selector Multi

Latest DKR Files
Rainbow Road
Big Donut
Test Track

Latest Mickey Files
None Yet!

Latest JFG Files
None Yet!

Most Popular GE
Library Mission
GoldenEye X
GoldenEye Setup Editor 3.0
Classic Nintendo Maps
Counter-Strike Map Pack
Mupen64 Ini
GoldenEye Setup Editor Windows Theme
Silo Mission
All Solo's in Multi (with Weather)
BK Map Pack 1.1

Most Popular PD
GoldenEye X
All Solo's in Multi (with Weather)
Kakariko Village
dataDyne Facility - Stealth
Area 51: Secret Agent
CI Training Gun Names
GE Weapons Multi
Japanese with Eng Text
Carrington Villa CS
Crash Site CS

Most Popular DKR
Rainbow Road
Big Donut
Test Track

Most Popular Mickey
None Yet!

Most Popular JFG
None Yet!

GoldenEye Vault features a collection of fan-made, custom materials based on popular N64 games. We do not support, nor condone, the distribution of patches or ROMs for monetary gain of any kind. Our focus is to freely showcase the work of various authors, in an attempt to extend both the life and fun of such classic titles.