A video graphics card adaptor for the TRS-80 microcomputer with Level II BASIC

Back to Home page


Design files and associated documents for download:

TRS-80 Model 1 VGA adaptor - the complete project doccument (revised 12 Aug. 2021 - minor errors fixed)
PCB Gerber files
Stage 1 machine-code graphics routines (object file)
BASIC example program - Orthographic sphere
BASIC example program - Sin(x)/x ripple surface
BASIC example program - MTU hat
BASIC example program - Maurer Rose drawing program
BASIC example program - Series I Land Rover
BASIC example program - Lorenz Attractor
BASIC example program - Moiré pattern star
BASIC example program - 99 luftballons

Introduction

This project consists of two parts:

Hardware - a very simple interface in 74HC(T) logic designed to permit any of my three "VGA" video graphics cards to be fully addressed and controlled via the Expansion Interface port of a vintage TRS-80 Model 1 microcomputer. Add dual-monitor support and high-resolution graphics to your 1970s era hardware!

Software - fast machine-code driver and video graphics drawing routines callable by BASIC. Specifically programmed for 16 KB Level II machines and packaged as a single object file, the routines load into the top 4 KB of RAM with the SYSTEM command and provide BASIC with a host of powerful drawing functions. These functions include: setting pixels, drawing lines between specified points, drawing circles/arcs and rectangles (outlined or filled), bucket-pour filling, pixel reading for block copying (amongst other things) and a basic 80 column by 60 row text mode with 128 (completely redefinable) ASCII characters to choose from.

I have dubbed these my “Stage 1” routines and they were specifically written for the B variant of my three video card designs – that is the 64-colour card with a resolution of 640 by 480 pixels.


I constructed my unit into a slightly agricultural, home-fabricated, 19” rack case, specifically to have a form-factor to suit my Tandy / RadioShack TRS-80 Model 1 clone. Anyone contemplating duplicating this design for connection to an original TRS-80 Model 1 computer will have to come up with their own practical packaging solution. In addition, as per my TRS-80 Model 1 clone design, the Expansion Interface port is broken out on the adaptor PCB via a 50-pin IDC header. In order to interface the adaptor to an original TRS-80 computer, an adaptor cable would need to be soldered up as the Expansion Interface port on the original hardware took the form of a 40-pin edge connector with a different pin-out.


The project document contains all of the technical details of the build, the complete machine-code listing (for the curious) and detailed instructions on how to load into memory and how to utilise and command the graphics-drawing routines in Level II BASIC. Some BASIC example program listings follow, along with photos of the graphical displays that they produce. These BASIC programs and the Stage 1 machine-code routines are provided via the download links above in the form of audio files, to be played back for “cassette” loading.


The VGA adaptor installed into my retro computer rack and plugged into the TRS-80:

BASIC example listing - Orthographic sphere:

This program plots a sphere, drawn with latitude and longitude lines, in orthographic projection, to any angle (0 – 360 degrees) of rotation on the x and y axes that the user tells it to. The sphere is defined in three-dimensional space by three Cartesian coordinates and a simple matrix transformation is applied to project the object into a two-dimensional image.
BASIC is doing quite a bit of number crunching here, particularly in the transformation trigonometry (lines 110 & 120), but only the coordinate points at which the latitude and longitude lines intercept are computed, so the execution time isn’t overly painful. The example shown with 40 segments took approximately 15 minutes to plot.

BASIC example listing - Sin(x)/x ripple surface:

I adapted this example program from a listing found in a graphics programming book for the BBC Model B Microcomputer. Execution time is somewhere around 1.5 hours.

BASIC example listing - MTU hat:

Here I've directly ported to the TRS-80 a program once published as something to exercise the abilities of a Commodore PET computer upgraded with an aftermarket, high-resolution graphics board. Here is a website with more information. I did not modify the program to fit the hat so as to fill the screen of my much higher resolution video display hardware, as the execution time is long enough already as it is – in excess of 2 hours!

BASIC example listing - Maurer Rose drawing program:

Wikipedia has a good entry on the Maurer rose. It’s basically formed by a bunch of lines joining points on a rose curve plotted in polar coordinates. A Spirograph-like curiosity of geometry aside, I’m not too sure of the practical application, but some of the possible forms sure do look pretty!
These roses were photographed directly off my Samsung flat-screen monitor. The background colour is actually white, but my camera can’t handle that for some reason and insists on rendering it in a light shade of grey. The text entries giving the n and d variables which define each rose pattern aren’t part of the video display; I added those to each image in MS Paint for the purpose of documentation. Each rose has a radius of 200 pixels and takes an average of approximately two minutes to be fully computed and plotted.

BASIC example listing - Series I Land Rover:

Here is a program to honour a classic of British automotive engineering. This BASIC listing makes full use of my machine-code drawing routines.

BASIC example listing - Lorenz Attractor:

This program computes the three coupled ordinary differential equations of the famous Lorenz Attractor. These equations describe a system with a chaotic solution and their discovery in 1963 really opened up the field of chaos theory. Hardly anyone these days hasn’t at least heard of the “butterfly effect”.

The main loop is infinite and the attractor will just keep drawing until you halt/exit the program by pressing the BREAK key. This is some heavy math for BASIC on a home computer more than 40 years old, though I do get some satisfaction from successfully running such problems on such elementary hardware! The screen photo of the plotted attractor presented here was taken at approximately the ten-minute mark of run time.

BASIC example listing - Moiré pattern star:

BASIC example listing - 99 Luftballons:

Very loosely inspired by an earworm that doesn’t make a whole lot of sense, this program draws, to the screen, 99 circles of random position, colour and diameter. This short program demonstrates the use of the circle drawing routines. If we compute the product of the range of all four RND statements, we find that there are 503,193,600 completed display possibilities. Explore them all!