There are three character sets stored contiguously in GROM 0:
Character Set Address ASCII Codes Bytes/Char
----------------------------------------------- ------- ----------- ----------
Standard (the large caps you seek), 04B0h 32 – 95 8
Small Capitals (capital letters used by Basic), 06B0h 32 – 95 7
Lowercase (actually, small caps), 0870h 96 – 126 7
It is easy enough to read these tables in Assembly Language. I am not sure how you would do it in Basic. They are listed in Heiner Martin’s TI Intern (available in the Development Resources sticky thread, post #1), pages 105 – 107 and 127 – 128. The GROM address of the three tables is 04B0h – 0948h.
The first character set can be read as is because it has 8 bytes/char. However, the other two sets are stored with only 7 bytes/char. For those, you must insert a zero byte in front of each pattern.
I had never played with GROMs before so I tried making a CHARSET word by reading the GROMs.
I found a neat trick in the SPECTRA.a99 file that moves directly from GROM to VDP.
I could simplify it a bit because my kernel has a sub-routine to set VDP write mode, so I did the same for GROM address,
It's a cool hack using 2 auto-incrementing devices.
Van Haartelijke dank Filip Van Doren (big Dutch thank you)
R0 GRMWA @@ MOVB, \ Set GROM source address
R0 GRMWA @@ MOVB,
CODE: GVMOVE ( grom_addr vdp_addr cnt -- ) \ GROM->VDP direct move
WMODE @@ BL, \ Set VDP target address
GRMWA! @@ BL, \ Set GROM source address
@@1: GRMRD @@ VDPWD @@ MOVB, \ Copy from GROM to VDP
TOS DEC, \ count in TOS register (R4)
Then in Forth I just had to do
: BIGCAPS ( -- ) 4B0 PDT 200 GVMOVE ;
But when I tried it my letters were scrambled. ?
I found the address for the start of the Font in GROM, in Classic99, is >04B4.
And with that it works great.
Is there a way to find where the Font data resides in the system?