Skip to navigation

Elite on the BBC Micro and NES

Different variants of the NES version

This site contains the source code for two different variants of the NES version of Elite:

  • The PAL variant that was officially released by Imagineer
  • The NTSC variant from Ian Bell's personal website

See below for comprehensive details of the differences between the variants, along with links to the relevant bits of the source code.

All these differences are implemented within the source code using BeebAsm IF statements, which determine which variant is compiled. These IF statements check the values of the relevant source code variables (_PAL and _NTSC), which are themselves set by parameters to the build command (such as variant=ntsc). See the associated repository for more about building different variants from the source.

To play NES Elite from the ROM image, simply load the image into a NES emulator like Mesen or OpenEmu.

The Imagineer PAL variant

The Imagineer PAL variant is the only official release of Elite on the NES. It only works on PAL consoles, or emulators set to PAL.

Default build in repositoryYes
Product detailsImagineering PAL release
Build command parametervariant=pal (optional)
Source code variable_PAL
Verification checksums (crc32)See the GitHub repository
Download ROM imageELITE-pal.NES
Play this variant

The NTSC game on Ian Bell's site

The variant on Ian Bell's site is essentially the same as the official PAL version, but with minor changes to make it easier to run on NTSC emulators. Note that this version doesn't actually work on NTSC consoles.

Default build in repositoryNo
Product details-
Build command parametervariant=ntsc
Source code variable_NTSC
Verification checksums (crc32)See the GitHub repository
Download ROM imageELITE-ntsc.NES

The two variants differ in the following ways:

  • Each version counts a different number of cycles in the NMI handler, with the PAL version counting 7433 cycles per VBlank and the NTSC version counting 6797 cycles per VBlank (see NMI).
  • The NTSC version is missing the Imagineer and Nintendo headings from the Start screen (see ChooseLanguage).
  • The PAL version waits for longer before starting auto-play on the combat demon (see ChooseLanguage).
  • Each version has its own unique checksum algorithm for the save slots (see SaveLoadCommander, CopyCommanderToBuf).
  • The internal version number is different: the PAL version is "<2.8>" while the NTSC version is "5.0" (see the version number at the start of each bank).
  • The copyright message hidden in bank 3 is different: the PAL message is "NES ELITE IMAGE 2.8 - 04 MAR 1992" while the NTSC message is "NES ELITE IMAGE 5.2 - 24 APR 1992" (see the copyright message).
  • The first title in the combat demo scroll text is different: the PAL title is "IMAGINEER PRESENTS --- E L I T E --- (C)BRABEN & BELL 1991" while the NTSC title is "NTSC EMULATION --- E L I T E --- (C)BELL & BRABEN 1991" (see scrolltext1_en, scrolltext1_de, scrolltext1_fr).
  • A number of pixel y-coordinate constants in the PAL version are six pixels bigger than in the NTSC version, to cater for the taller screen height (this is implemented via the YPAL configuration variable).
  • The interrupt vectors in banks 0 to 6 that are used during initialisation are subtly different (see Interrupts, Vectors).
  • The code for detecting double-taps of the B button when choosing buttons from the icon bar is a bit simpler in the NTSC version (see MoveIconBarPointer).

It's worth noting that the NTSC variant doesn't actually work on an NTSC machine. The NMI timings have been changed to work with some (but not all) emulators in NTSC mode, but it isn't a full NTSC conversion, it's an NTSC emulation (as per the scroll text).