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.