Skip to the content
PCBKitNew board
2 layers100 × 79.9 mmFr99, the printed circuit board in 3D

A Flash ROM Cartridge for the TI 99/4A

Size
100 × 79.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
21
Nets
85
Pads
226
Tracks, vias
750, 44
Routed
Yes
KiCad
KiCad 4
Created
7 Apr 2016
Updated
9 Nov 2021

Overview

Fr99 is an open-source printed circuit board by endlos99, from the endlos99/flashrom99 repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 100 × 79.9 mm with 21 parts on 85 nets, routed with 750 tracks and 44 vias.

Its parts include 7 capacitors, 6 ICs, 3 resistors, 1 diode and 1 connector. It belongs with the retro computing and games boards of this library.

README

README.md

FlashROM 99

The TI 99/4A Flash ROM Cartridge, or FlashROM 99 for short, is a cartridge for the TI 99/4A home computer that allows for running ROM cartridge images stored on an SD card.

The FlashROM 99 Cartridge

The FlashROM 99 supports ROM-only images of up to 32K that use the write-to->60xx bank switching scheme. It will not work with programs using GROMs or CRU-based bank switching. The cartridge does not require the Peripheral Expansion Box and runs on both PAL and NTSC consoles.

The project homepage is hosted at GitHub.

FlashROM 99 is released as Open Source Hardware under the CERN OHL license and the GNU GPL license. Both hardware design files and firmware sources are available on GitHub.

Using the FlashROM 99

Using the FlashROM 99 is simple and doesn't require and special hardware or software.

To begin, copy up to 171 cartridge image files onto an SD or SDHC card. Switch off the TI 99 and plug in the FlashROM 99, then insert the SD card into the FlashROM 99. Switch on the TI 99 and wait until the activity indicator on the FlashROM 99 is no longer lit.

Press any key to bring up the TI menu screen. You should see the list of images found on the SD card. If the SD card contains more than 8 images, a FLASHROM 99 entry is shown instead. Selecting this entry starts an image browser where you can page through the list of available images with ,, ., SPACE, and number keys.

Image selection

Select the image you want to run. The screen will show a loader animation while the image loads. Once the image has been loaded, it will run automatically. The SD card is now no longer required and may be removed.

If only one image is found on the SD card, it is loaded immediately without the need to select it first.

If you want to run a different program from the SD card, reset the TI 99 by pressing FCTN-= and then reset the FlashROM 99 by pushing the reset button. If you do not reset the FlashROM 99, the TI menu will show only the previously selected image. Alternatively, you can power cycle the console, which will reset both TI 99 and FlashROM 99.

For detailed usage information please refer to the FlashROM 99 homepage.

Building the FlashROM 99

The GitHub repository contains all hardware design files and software sources required to build the FlashROM 99.

Hardware

To assemble the FlashROM 99 you need the following components:

  • 1x FlashROM 99 board
  • 1x ATmega 8515 (either 8515-16 or 8515L-8)
  • 1x 62256 32K SRAM (any speed rating)
  • 1x 74HCT377 (LS may also work, but untested)
  • 3x 74HCT541 (LS may also work, but untested)
  • 6x 100 nF capacitors (e.g., multi-layer ceramic X7R, no electrolytic!)
  • 1x 68 Ohm resistor
  • 1x 330-470 Ohm resistor (depending on LED used, smaller values will be brighter)
  • 1x 10 kOhm resistor
  • 1x LED (e.g., 5 mm red or yellow)
  • 1x micro push button
  • 1x SD card module

The FlashROM 99 board was designed with KiCad, a cross platform and open source electronics design automation suite. The design files are stored in pcb/.

To simplify the board layout, the design uses an inexpensive SD module that is readily available online. Searching for SD card Arduino should give you plenty of hits, including Amazon, ebay, and Pollin. Make sure to pick a module that matches the pin-out of the reference module shown below. Note that the 3.3V input is not used, so any substitutes must be powered by 5V.

You can use any kind of single color LED, but you may have to adjust the 470 Ohm resistor if you choose anything other than red or yellow.

The push button is used to reset the board and will be pushed frequently. You might choose an angled button if you prefer to push horizontally instead of vertically. This will also put less stress on the cart connector.

If the board shows connectors for a 1 nF capacitor next to the 377, do not put this capacitor there, but leave the connectors empty.

When assembling the board make sure to place all ICs properly oriented -- some ICs are upside down! On the board, the location of pin 1 is indicated by a small line in the IC outline. Socketing the ATmega allows for future software updates. It is best not to socket the 541s, however, as this will make inserting the assembled cart into the TI 99 more difficult.

Parts Placement

The push button is best soldered to the top of the board so that the bottom area remains as smooth as possible. After the button is soldered, put some insulating tape on its bottom contacts to avoid interference with the SD module.

Assembly

Insert the SD module from the bottom and solder either one row of connectors top so that the metal part of the module is flush with the board. Some SD modules have a crooked connector, though, so that a small gap may remain.

If you don't want to build the board yourself feel free to contact the developer for available sources.

Previous Versions

Early versions of the FlashROM 99 used an additional 1 nF capacitor that resulted in unreliable disk access on some, but not all systems with certain disk controllers.

Please check to see if the 1 nF capacitor is present on your board. If so, simply remove it by desoldering or clipping its wires to improve the stability of your cart.

If you applied a so-called "disk fix" to your board in the past, you don't need to undo those changes when removing the capacitor.

Software

The software for the ATmega 8515 consists of two components. The avr/ folder contains the microcontroller logic for accessing the SD card, filling the SRAM chip, and controlling the TI bus.

The ti/ folder contains TI 99 assembly sources for the image menu and the image browser. The assembled TMS 9900 machine code is embedded in the microcontroller code and loaded into RAM during operation.

To build the software, you first need to assemble the menu and browser program with xas99 and convert the generated machine code into C code:

text
$ cd ti/
$ xas99.py -b -R -I <xdt99>/lib menu.a99
$ mkmenu.py

Now you can compile the microcontroller code in avr/. The folder contains a Makefile for avr-gcc that will make compilation trivial.

text
$ cd avr/
$ make

As an option, you can enable multi-file functionality in the Makefile. This feature, however, will severely extend the scan time for SD cards with many images. Only enable multi-file if you plan to use the FlashROM 99 with no more than about two dozenzs of images per SD card. To compile with multi-file, you may have to disable FAT16 support in avr/lib/pffconf.h in case the executable gets too large.

The build yields a .hex file that you can flash to the ATmega 8515 using avrdude or your programmer of choice:

text
$ avrdude -p atmega8515 -P /dev/ttyACM0 -c stk500 -U flash:w:flashrom99.hex

Additionally, you need to program the lower fuse bits of the 8515 so that it runs at 8 MHz:

text
$ avrdude -p atmega8515 -P /dev/ttyACM0 -c stk500 -U lfuse:w:0xe4:m

If you're using a different tool chain make sure to set CKSEL3..0 in the lower fuse byte to 0100. (Note that 0 means "programmed", and 1 means "unprogrammed"). You can verfify that you're running at the right clock speed by resetting the FlashROM 99 with no SD card inserted: The LED should blink about once per second.

Finally, make sure that the bootloader is disabled by checking if higher fuse bits BOOTSZ1, BOOTSZ0, and BOOTRSET are all set to 1. This should be the default for new 8515s.

In the end, the lower and higher fuse bytes should have values E4 and D9, respectively.

About the Project

The TI 99/4A Flash ROM Cartridge is Open Source Hardware released under the CERN OHL license, in the hope that TI 99 enthusiasts may find it useful. Software components are released under the GNU GPL license.

The hardware was designed with the open source electronics design automation suite KiCad. The microcontroller code uses a modified version of the Petit FatFs library. Thanks go to Jon Guidry (acadiel) of hexbus.com for designing the original bank switching circuitry for the first TI multi-carts.

Contributions to both hardware and software are very welcome! Please email feedback, support questions, inquiries for parts, and bug reports to the developer at r@0x01.de. Discussions about the FlashROM 99 happen over at AtariAge.

Parts

21
QtyValueFootprintReferences
6100nFflashcart-footprints:C_CC1, C2, C3, C4, C5, C6
3541Housings_DIP:DIP-20_W7.62mmU1, U2, U3
110kResistors_ThroughHole:Resistor_Horizontal_RM10mmR3
11nFflashcart-footprints:C_CC7
1377Housings_DIP:DIP-20_W7.62mmU4
1470Resistors_ThroughHole:Resistor_Horizontal_RM10mmR2
162256Housings_DIP:DIP-28_W15.24mmU5
168Resistors_ThroughHole:Resistor_Horizontal_RM10mmR1
18515Housings_DIP:DIP-40_W15.24mmU6
1BUSYLEDs:LED-5MMD1
1CONN_02X18flashcart-footprints:BUS_CARTP1
1RESETButtons_Switches_ThroughHole:SW_PUSH_SMALLSW2
1SDflashcart-footprints:SD_MODULEM1

The 20 most common of 21 parts.

Questions

How big is the Fr99 PCB?

It measures 100 × 79.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Fr99 use?

21 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Fr99 KiCad files?

From the endlos99/flashrom99 repository on GitHub, at the commit this page was made from: the board is pcb/fr99.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fr99 design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers28.3 × 39.8 mmLevelShifter, the printed circuit board in 3D

    LevelShifter

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    21 parts5.1kGPL-3.0
  • 2 layers171.2 × 72.9 mmAmiga gfxcard before pour, the printed circuit board in 3D

    Amiga gfxcard before pour

    mntmn/amiga2000-gfxcard

    MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog

    21 parts1k
  • 2 layers93.9 × 46 mmRectifier, the printed circuit board in 3D

    Rectifier

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    21 parts990GPL-3.0
  • 2 layers45.5 × 42.9 mmEsphome han reader, the printed circuit board in 3D

    Esphome han reader

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    21 parts915
  • 2 layers31.8 × 14.5 mmEsp prog, the printed circuit board in 3D

    Esp prog

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    21 parts744MIT
  • 2 layers23.5 × 15.8 mmQuiverAttachPCB, the printed circuit board in 3D

    QuiverAttachPCB

    Arrow-air/project-quiver

    Project Quiver documentation, designs, and project artifacts.

    21 parts617CERN-OHL-S-2.0
  • 2 layers69.9 × 41.3 mmHeaterMeterLCD, the printed circuit board in 3D

    HeaterMeterLCD

    CapnBry/HeaterMeter

    HeaterMeter and LinkMeter Arduino BBQ Controller

    21 parts557MIT
  • 2 layers161.3 × 111.8 mmDoj, the printed circuit board in 3D

    Doj

    kelu124/echomods

    Open source ultrasound processing modules and building blocks

    21 parts463