F18A In-System Update

Thanks to the help of several fellow 99/4A enthusiasts (Rasmus and Tursi), I’m happy to announce an in-system software update for the F18A firmware. Currently the update program only runs on a 99/4A system and requires a bulk-storage device large enough to contain the update program, bit stream, and data file on the same “disk” (about 226KiB). Currently I recommend using a CF7/NanoPeb device.


During the update process the FPGA’s bit stream on the flash memory must be wiped so the new bit steam can be written.  If anything goes wrong during this part of the update, it is possible that you will have to return your F18A to have it updated with an external JTAG programming cable.

I have done everything I can to make sure the update runs smoothly and that the data files are validated, however there is always the possibility of an unexpected failure.  Keeping power applied to the system at all times during the update is VERY IMPORTANT.  If you have an uninterruptable power supply (UPS) available, you might consider plugging your 99/4A console into the unit during the update process.



Download the update disk image and prepare the files for use with your 99/4A console.


Make sure you will not experience any power failures or interrupts during the update.

You will need the TI Editor/Assembler (E/A) cartridge to run the update program.



Fire up the E/A and select menu option 3 (EA3) Load and Run

Step 1



Type the location and name of the update program.  The name of the update program is F18AUPD and in this example it is located on DSK1.  The update program and data files must be on the same disk.

Step 2


Step 3

Once the update program is loaded it performs a checksum on itself and displays the value in the upper left corner of the screen:

V1.5 checksum: 9B68

V1.6 checksum: 40CC

V1.7 checksum: A3B5

V1.8 checksum: F981

If you do not see the correct checksum for the version you are updating to in the upper left corner, DO NOT CONTINUE.  Quit the program and start from Step 1.

The update program will detect your F18A and display the current firmware version as well as the update firmware version.  If your F18A version and the update version are the same, there is no need to run the update.

When you are ready, press P to proceed.  NOTE: The update program will not stop you from updating your F18A if the current firmware and update firmware are the same.

Once you start the process, DO NOT try to stop the program, reset the system, or power cycle the system.  Just let the program finish, even if you did not mean to proceed.

Step 3

Step 3, V1.6

Step 4

Now you wait for the program to run the update.  First a staging area will be cleared in the SPI Flash at sectors A, B, C, D, E, and F.

Next the bit stream and data file will be read, CRC validated, and copied to the staging area.  Reading and validating the file data is the longest part of the update.  The number next to the “Staging Bit Stream” text is the current destination block in the staging area and the progress bar shows how much of the input file data has been verified and staged.

Step 4


Step 5

The data file will be staged in the same manner as the bit stream file.  If there is a problem with either file an error will be displayed and the update aborted.  At this point the original firmware is still intact and your F18A will function as it always has.

Step 5


Step 6

This is where the update actually begins.  The current bit stream, SPI Flash sectors 0 to 5, must be erased before they can be overwritten, so any power failure at this point would require your F18A to be updated externally via a JTAG programmer.

Step 6


Step 7

Now the bit stream and data are copied from the staging area to the sectors where the FPGA loads the configuration bit stream from (sectors 0 to 5).  Luckily steps 6 and 7 are very fast, since they are the critical steps of erasing and copying the firmware.

Step 7


Step 8

A CRC will now be run against the new bit stream and data to make sure there are no problems with the newly installed firmware.

** If there are any problems DO NOT POWER OFF YOUR SYSTEM!  You will see an error message and you will have the opportunity to restart the update and try again.  You DO NOT have to reset the system to try the update again.

Step 8


Step 9

The staging area, SPI Flash sectors A to F, will now be cleaned up.

Step 9


Step 10

You will now see a message that says the update was successful and to POWER CYCLE your system.  This needs to be a complete power-off / power-on cycle and NOT just a warm reset.  The FPGA bit stream is only loaded from the SPI Flash at power-on, so the power-cycle is necessary to load the new firmware.

Step 10


Step 11

Re-run the update program (steps 1 and 2) and verify that the detected firmware is now the same as the update firmware.  Congratulations, your F18A has been successfully updated!  Press Q to quit the updater.

Step 11


If you have any problems, try the update again.  If you power cycle your system and continue to have a blank screen, you will need to send your F18A back to have it externally updated.  You can also purchase an external JTAG programming cable for about $50 USD if the update fails and you want to avoid having to send your F18A in for updating.

2 comments to F18A In-System Update

  • Gregg Eshelman

    What’s fixed or updated in this version?

    • matthew

      F18A V1.5 July 23, 2013

      Not really a *bug* fix since the problem it corrects exists on the real 9918A, and only has to do with sporadic collision bit reporting during heavy polling of the original 9918A VDP status register. This was discovered while Rasmus was writing Titanium. The 9918A was not designed to have its status register polled which is why it provides an interrupt output.

      I don’t think the original 9918A designers took the hazard into consideration, but I decided to make this correction because it is what the original designers would have done given their preference (and I asked Karl Guttag about it). Thus, the F18A implements what you would consider the “expected behavior”, and will work as expected where the original 9918A might not. I did not make this decision lightly.

      There is also a new V1.6 update coming out very soon with a lot of changes.