/ti_picocart

TI-99/4A Cartridge based on the Raspberry Pi Pico

Primary LanguageC

ti_picocart

TI-99/4A Cartridge based on the Raspberry Pi Pico. This is still on the prototype phase, although it does work.

picocart picture

Features

The code is loosely based on my earlier StrangeCart and TI-GROMmy projects (which both continue on their own right). Feature set is simple:

  • ROM support
  • GROM support
  • Banked ROM cartridge support No multicart support yet.

Building the firmware

I have used macos as my development system. Should work the same way with Linux.

Remember to set the PICO_SDK_PATH environment variable:

export PICO_SDK_PATH=/path/to/your/installation

Building is done the same way as with any Rasbperry Pi Pico project:

mkdir build
cd build
cmake ..
make -j4

ROM images

Currently the ROM images need to be manually converted to C source files with my rom2c utlity, and the source code reference in grow-hw.h needs to be configured appropriately. Yes it's not neat yet. I'm not including in the repository ROM or GROM images from TI.

There are macros which make this a little easier, look at grom-hw.h:

#define ACTIVE_GROM grom_extendedbasic_data
#define ACTIVE_GROM_SIZE grom_extendedbasic_size
#define ACTIVE_ROM rom_extendedbasic_data
#define ACTIVE_ROM_SIZE	rom_extendedbasic_size

In addition the CMakeLists.txt needs to include the ROM image files converted to C. Since the repository here doesn't include third party ROM contents, the project will not compile straight off the gate. Below is a section of the CMakeLists.txt with comments after hash sign. You only need to include ROM and GROM content for one cartridge, since the current software version does not support changing the configured cartridge on the fly. During linking only the active ROM and GROM modules will be included in the final build.

add_executable(picocart
        picocart.c        # main() function
        gromserver.c      # implements GROM chip emulation
        romserver.c       # implements ROM chip emulation
        
        # What follows are ROM and GROM contents.
        
        invadersgrom.c    # Invaders GROM file 
        invadersrom.c     # Invaders ROM
        
        minimemg.c        # Minimemory GROM (untested)
        
        sysgrom.c         # System GROM (untested)
        
        parsecgrom.c      # Parsec GROM
        parsecrom.c       # Parsec ROM
        
        mspacman_rom.c    # Ms. Pacman ROM
        
        defender_rom.c    # Defender ROM
        
        extendedbasic_rom.c # Extended BASIC ROM
        extendedbasic_grom.c  # Extended BASIC GROM
        
        dontmess_rom.c    # Don't mess with Texas demo ROM
        )

Hardware architecture

The board is pretty simple, mainly consisting of the Pico board and 74LVC245 buffer chips. Pins GPIO8..15 correspond to signals D0..7 on the schematics. This is a multiplexed 8 bit bus, which can either be connected to:

  • address lines A0..7 on the cartridge port (read only)
  • address lines A8..12 on the cartridge port (optionally expanded to A13..15 with jumper wires, read only)
  • data lines DB0..7 on the cartridge port (bidirectional)

The multiplexing happens under software control by the Pico. It does mean that you can either read address bus low byte, high byte or read/write the data bus, but only one of these at a given time.

Please refer to the schematics for more details.

Hardware mod

The current prototype board requires two patch wires for the firmware to be able to support ROM cartridges properly:

Patch wires