GTROM

From NESdev Wiki
Revision as of 03:02, 11 October 2017 by BacteriaMage (talk | contribs) (bold the register addresses)
Jump to navigationJump to search


Cheapocabra (GTROM)
Company Membler Industries
Boards GTROM
PRG ROM capacity 512K
PRG ROM window 32K
PRG RAM capacity None
CHR capacity 16K
CHR window 8K
Nametable mirroring 4 fixed
Bus conflicts No
IRQ No
Audio No
iNES mappers 111


Cheapocabra or GTROM is a low-end, self-flashable cartridge board intended for homebrew releases with its own unique mapper assigned to iNES Mapper 111. The board and mapper were designed by Membler Industries which also manufatures the cartridges.

Overview

The Cheapocabra board and mapper were developed in 2015 by Memblers to meet the needs of the lower end of the homebrew cartridge market. This includes games that would have historically used an NROM board as well as other simpler boards which provide some kind of bank switching but lacked more advanced features like IRQs. The underlying philosophy is that stocking larger numbers of a single board design allows for lower costs by economies of scale when compared to stocking smaller individual quantities of a suite of lower end boards all with similar capabilities. This is especially true when it is considered that using smaller flash chips and removing mapper logic does not significantly reduce the cost of manufacturing a board.

The name Cheapocabra is a play on Chupacabra, a creature from American folklore, where the similar sounding first syllable is replaced with the word "cheap" to indicate the intended low cost of the hardware. The GTROM moniker, meaning "Goat ROM," is derived directly from this as Chupacabra translates literally as "goat-sucker" and the Chupacabras of legend are known for attacking goats and other livestock.

Register

A single, write-only, 8-bit register controls everything on the board. Since the register combines multiple controls into a single byte it is not possible to update the bit fields for one function without writing the value for all of them. If a program needs to update a particular field without affecting the others then its best to always keep a copy of the register value in RAM. The RAM value can be read and surgically manipulated as needed and then just copied to the register after each update or a group of updates is made.

The register is mapped to the CPU addresses $5000-$5FFF and $7000-$7FFF and writing a byte to any of these addresses all have the same result. Programs most commonly use $5000 for writing to the register but any of the others works equally well.

7  bit  0
---- ----
GRNC PPPP
|||| ||||
|||| ++++- Select 32 KB PRG ROM bank for CPU $8000-$FFFF
|||+------ Select 8 KB CHR RAM bank for PPU $0000-$1FFF
||+------- Select 8 KB nametable for PPU $2000-$3EFF
|+-------- Red LED - 0=On; 1=Off
+--------- Green LED - 0=On; 1=Off

There are two LEDs on the board; one red and one green. They can be independently turned on and off using the register at any time. The LEDs are potentially useful as a simple means of communicating debug information or some kind of indicator for the player. Another approach is to turn the light off during processing and on during idle resulting in the brightness of the light being a rough indicator of available CPU time.

Banks

Hardware

Like iNES Mapper 030, the specific flash used on this board is the SST39SF040. Games are expected to use the chip's self-erase and self-write abilities for game saves.

The specific hardware on this board is a 74377, a 7402, and a 7410. The exact connectivity is not known, but the functions evaluated by the logic must include:

  • CHRRAMA14 = if (PPUA13==1) { n } else { c }
  • PRGROM/OE = NOT(R/W)
  • Latch on M2, /ROMSEL, A14, A12 high, and maybe on R/W low


See also