Micro Labs Hi-res Graphics Card for TRS-80 Model III Tim Mann 7-21-00 I haven't found any documentation for the Micro Labs Model III hi-res graphics card, but I did find some software that works with it, so I was able to reverse-engineer what the hardware does. Here is what I learned. First, the software is available from www.trs-80.com, in the Model III library under "GRBasic (MicroLabs)". The name really should be "GBasic", so you might find it moved there at some future date. See http://www.trs-80.com/cgi-bin/newmangle3.cgi?grbasic2.zip. Here is how the hardware appears to work. - The graphics screen is 512x192 pixels. - Text and graphics are always mixed (probably using xor). - The graphics memory maps into the same address space as text memory. The high-order 7 bits of port 0FFh are used to select modes and provide extra address bits for the graphics memory. Here is what the bits in port 0FFh do: Bit 5 - Graphics command. Writes to port 0xff without this bit set do not affect the graphics card. Bit 6 - Graphics on. If this bit is 1, the graphics screen is displayed; if 0, it is hidden. Bit 7 - Graphics addressable. If this bit is 0, reads and writes to addresses between 3C00h and 3FFFh go to the normal text memory. If it is 1, they go to graphics memory. Bits 1-4 - Extra row address bits. Values from xxx0000x to xxx1011x select one of the 12 rows of each character cell. The memory address (3C00h to 3FFFh) selects one of the 1024 cells. The 8-bit data value then provides the 8 bits of the row. Bit 0 (the LSB) of each row goes to the left, bit 7 to the right. Bit 0 - Unused. Thus to turn on the display and write a 1 bit to the top left and bottom right pixels on the screen, you would do something like this: ld a,0e0h out (0ffh),a ld a,(3c00h) or 01h ld (3c00h),a ld a,0f6h out (0ffh),a ld a,(3fffh) or 80h ld (3fffh),a ld a,60h out (0ffh),a I don't know whether or not the original hardware made sounds on the cassette output while drawing graphics because of the double use of port 0FFh bit 1 as both graphics row address and the high-order bit of the cassette output value. The demos made some interesting sounds when I first ran them on xtrs, but I decided this was probably unwanted, and coded it so that the cassette sound emulation doesn't receive the value written to port 0FFh if bit 5 is set.