2

The TI-99/4a had a cartridge slot on the front of the computer which accepted "solid state cartridges" (as TI called them). These cartridges would typically contain ROM (Read Only Memory) like many other cartridges of the time (C64, Atari 800, etc.).

However, the TI cartridges could also contain a different type of ROM called "GROM". Which I believe was "Graphics ROM". There was also GRAM, if memory serves, that would be Graphics RAM.

What was the purpose of this graphics ROM and why was there a need for two types of ROM? In other words, why not just have one ROM type like everyone else?

8

However, the TI cartridges could also contain a different type of ROM called "GROM". Which I believe was "Graphics ROM".

Jup, although, it wasn't really related to graphics at all. More due the fact, that its primary usage within the TI99/4 was to hold GPL code - which itself stands for Graphic Programming Language.

There was also GRAM, if memory serves, that would be Graphics RAM.

Not really. While the mechanics (standard) was defined by TI, it wasn't until way later that third-party developers added GRAM. Mainly to make GROM content loadable, so existing GROM application could be copied. Like with the 1985 GRAM Kracker Card.

What was the purpose of this graphics ROM and why was there a need for two types of ROM? In other words, why not just have one ROM type like everyone else?

Most important reason would be address space.

A GROM uses only two byte size addresses within the CPU address space. Even further, multiple GROM can share this address pair (usually 8). One such address pair can support 64 KiB of ROM, either as a single GROM or several in parallel (*1).

64 KiB is already a ROM size hard to manage in a 16-bit address space without banking(*2). So why not turn this around from a cumbersome calling mechanic into a benefit? The TI 99/4's system also checks 16 such address pairs by default for GROMs, making a whopping 1 MiB of application ROM available. Or more correct 640 KiB (*3), as certain addresses where reserved for OS ROMs, so each address pair could only address up to 40 KiB (*4). So even with the limitation of available chips and reserved address, still almost half a megabyte (480 KiB) could be added to a standard 99/4. Pretty forward thinking for a 1979 machine.

Beside, noone keeps any developer from adding GROM at additional address pairs, resulting in an almost unlimited amount of ROMs kept online.

In contrast, a regular ROM could only occupy a maximum of 8 KiB within the CPU address space. It's notable that TI also defined a mechanic for cards to do bank switching in this area, by swapping the upper 4 KiB as pages. But there is no cartridge known to use more than two pages for a total of 12 KiB ROM (*5)

Second would be speed

The whole TI 99/4 is build around what today would be called a streaming architecture. When accessing some memory like Basic program, Video memory or, well, GROMs, it's always that these 'channels' have integrated address pointers auto-incrementing with each read or write access. For example, the basic fetch loop of an interpreter means just accessing the port and everything else is done by hardware, while with a conventional setup the CPU must fetch a pointer, address the byte in question, increment the pointer and store it again. For the TI 99/4 the streaming system takes care of that. Just fetch the byte.

And since GROMs where meant to hold code that gets interpreted by some low level code (nowadays called a bytecode interpreter), GROMs offered as well an incredible amount of possible online ROM, as well as faster access.

So what did it make?

Application used a combination of either. Some just used the ROM space, maybe with bank switching, others used GROM. After all, when it comes to cartridge based applications, we do talk large numbers produced. So GROM is money-wise quite comparable - but got not only the advantage of (possibly) larger programs, but also an inherent copy protection, as G-EPROMs weren't available and replacement circuits using regular memory rather expensive. In addition, production cost could be a bit lower due to the need for 16 instead of 28 holes to solder the chip. And finally, some used as well both. GROM for the main program and most data, plus a ROM for certain time sensitive routines.

On the system side GROM mechanics were deeply integrated. During startup (*6) all 16 addresses and within each 8 base addresses where checked for a GROM signature to look for system extensions and applications. The later where listed on the start screen to select which to start (*7).

It was rather easy to rip GROMs from their cartridges and solder them piggyback to some of the internal GROMs, thus permanently installing useful applications. It is quite common to find File Manager and Extended Basic built into the console. Likewise, Terminal Emulator or Editor/Assembler or other languages. Or users made up their own multi-cartridges. Worked the same way.

So bottom line: GROMs where a great idea as part of an incredibly flexible system


*1 - As usual, reality is cruel to us. While GROM can have any size between 1 Byte and 64 KiB (with two byte addresses - longer addresses could provide more), TI manufactured them only with 6 KiB ones. And they where only made to start at addresses dividable by 2000h, thus only 48 KiB per pair was usable.

*2 - At least if one wants to keep some RAM and I/O available

*3 - Funny size, isn't it?

*4 - Which again was limited to 6 KiB per ROM, due the chips manufactured, resulting in 30 KiB usable address space.

*5 - Definitions are made for 16 pages, and extending that scheme may allow up to 2048 pages.

*6 - Keep in mind, this is a real home computer, so pressing reset to go back to system start was the normal way of handling multiple programs.

*7 - Unlike other systems of that time, BASIC wasn't the system, but just an application that could be found and started after reset.

  • 1
    I think the /4a is only a VDP upgrade over the /4, switching the TMS9918 to a TMS9918a and thereby gaining a screen mode? In that case Raffzahn is likely counting from the /4 as the memory architecture is the same between the two? – Tommy Jan 9 at 16:43
  • 1
    @tofro For everything GROM related there is no difference for this between 99/4 and 99/4A. Separating them is like separating C64 and C64C in a question about the CPU. – Raffzahn Jan 9 at 16:47
  • 1
    @cbmeeks No, just two byte addresses (due to the way the 99/4 operates only on even adresses). One (like >9800) was the data port, while the other (>9802) was the address port. To set an address the two address bytes (16 bit) where to be written into the address port, then data could be read from the data port. Each consecutive read produced the next byte. Similar the address could be read back. And no, it did not go thru the VDP, they where directly connected to the CPU bus (well, the 8 bit potion anyway) – Raffzahn Jan 9 at 16:47
  • 1
    @Tommy There where also some other minor changes like adding a volume slider. More relevant where changed ROMs as well for the system (console ROM) as for the BASIC. Most notably due a different copyright year on the reset screen. – Raffzahn Jan 9 at 17:05
  • 1
    @Tommy: The most visible difference between the TI 99/4 and the TI 99/4a is the keyboard. All of the TI 99/4 units I've noticed used a chicklet keyboard, while all of the TI 99/4a units I've seen had real keys. Further, the TI 99/4a keyboard could type upper and lowercase, while the TI 99/4 could not. – supercat Jan 9 at 17:57

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.