• Please review our updated Terms and Rules here

Amazing Tektronix 4054 with Option 30 and 31 Dynamic Graphics


Veteran Member
Mar 7, 2018
Texas, USA
The top-of-the-line Tektronix 4050 graphics computer was the 4054 with 19" Direct View Storage Tube 4054, introduced in 1979 (first photo). The Tektronix 4054 had 4x the vector resolution of its other family members - the 4051 and 4052 - with an amazing 4096 x 3125 12-bit 12.8M addressable point vector resolution! Tektronix also introduced the Option 30 Dynamic Graphics at the same time - but without any fanfare - and no description of what Dynamic Graphics could do.

When I collected my Tektronix 4054 in 2000, it had an Option sticker indicating Option 30, but it didn't have any board inside marked Dynamic Graphics. As I began my journey recovering 4050 tapes and posting them on my github repository ( https://github.com/mmcgraw74/Tektronix-4051-4052-4054-Program-Files ) I had never found a tape indicating Option 30 Dynamic Graphics until last month when I recovered a tape from the estate of Jack Everson, a Tektronix Sales Engineer. I had received two boxes full of Tektronix 4050 tapes to recover from Kurt Rosenfeld - who operates the Tekwiki site: https://w140.com/tekwiki/wiki/

This DC300A tape was hand labeled "4054 Option 30 Demo" and I managed to recover all the files!

But when I ran the demo on my 4054A I found the Flash Drive didn't handle the BINARY programs correctly.

Working with my Flash Drive collaborator @WaveyDipole, we were able to fix these commands. I took logic analyzer traces of running these commands on my 4924 Tape Drive with a working tape having a small BINARY program saved so the trace captured all the GPIB traffic, and compared the GPIB traffic with traces from my 4054A using my Flash Drive. We also re-examined the 4924 Service Manual which has an appendix indicating the GPIB commands issued during the different 4050 BASIC commands. However - the 4924 Operating and Service manuals did NOT list CALL "BSAVE" "BOLD" or CALL "BAPPEN" commands, and we discovered 4050 BASIC issuing GPIB secondary address 17 which is documented as "ALPHASCALE" for all three commands. We also discovered 4050 BASIC issuing CLOSE GPIB command to terminate these commands. After adding that capability to the Flash Drive - BSAVE, BOLD and BAPPEN are all working properly with the latest firmware I posted to github!

In the meantime, our friend @stepleton was testing our Flash Drive on a Tektronix 4054A computer with not only Option 30 Dynamic Graphics but also Option 31 Color Dynamic Graphics CRT with Green and Red phosphors which display dynamic refresh graphics in orange (Red plus Green) and stored graphics in green. I converted all the Option 30 Demo programs to ASCII and uploaded the files to my repo so Tom could run them with his Flash Drive and Tom posted three youtube videos from running the Option 30 Demo programs on a 4054A with Option 30 and 31:

I attached two screenshots from these videos below.

Helicopter Simulation screenshot2.png

Green Eye small.png
Note that the refresh graphics are drawn in orange and stored graphics are in 'normal' green. This Option 31 Color Enhanced Dynamics Graphics Display was introduced as a 4054 option in the 1982 Tektronix Catalog. I have attached a photo of a 4054A with the Option 31 display.

I had actually tried to recover a tape from the Everson estate that was manually labeled Option 30 Games Tape, but have only been able to recover four of the seven games. @stepleton has posted four youtube videos running those games:

Amazing graphics!


  • STRAFE.png
    275.5 KB · Views: 14
  • SEA DOG.png
    SEA DOG.png
    396.5 KB · Views: 14
  • NIGHT RACE.png
    NIGHT RACE.png
    564.1 KB · Views: 14
  • ICE RACES.png
    ICE RACES.png
    318.4 KB · Views: 11
  • 4054 Opt30 Games Menu.jpeg
    4054 Opt30 Games Menu.jpeg
    1.1 MB · Views: 12
Last edited:
I have been working on porting ICE RACES to work on any 4050 computer with the R12 Enhanced Graphics ROM Pack (included in the vintagetek.org MAXIROM Pack for the 4051, and included in @jdreesen Multi-Function ROM Pack for the 4052 and 4054 computers). In doing this port, I found that even the ICE RACES cars have too many vectors for my 4054 to draw both cars at a high enough frame rate. The Option 30 Dynamic Graphics board contained a Signetics 8x300 microprocessor. This microprocessor was a RISC and only had 8 instructions but a 16-bit instruction word and mask, rotate, shift and merge operations could be done in a single instruction cycle! The Option 30 board contained 32KB of DRAM to store all of the refresh vector objects that were created by the 4050 BASIC program using RDRAW commands following an ROPEN x where x is the object number. An RCLOSE command would end the creation of a dynamic graphics object. The VISIBILITY x,y command would then be used in the 4050 BASIC program to enable or disable object x. Typically the position of the dynamic graphics object would be set with a MOVE X,Y command prior to the VISIBILITY command.

So my port to R12 Enhanced Graphics required I understand this object creation process and create an R12 vector string variable for each Option 30 dynamic graphics object. Since the Option 30 board cannot do object rotation, the ICE RACES original program creates 12 objects for CAR 1 and 12 objects for CAR 2, with each CAR object rotated by 30 degrees. I used A$ to L$ to create 12 CAR 1 objects and M$ to X$ to create 12 CAR 2 objects by modifying the ICE RACES program. Since this program creates all the car objects each time it runs, it takes 30 seconds to initialize all 24 car objects on my 4054A. When I created my 24 car objects as 24 R12 string variables, I decided to write these strings to my Flash Drive, and modify the main R12 ICE RACES program to read them from the Flash Drive. This reduces the image initialization to about 1 second on my 4054A with Flash Drive.

Then I completed my mods to the ICE RACES program which included modifying the instructions screen to accommodate fixed text size of the 4051 and 4052, and because I had used all 26 BASIC string variables (Y$ and Z$ hold the current rotation of Car1 and Car2 respectively), I had to change the main menu choices from strings to numbers. I also had to change the game screen countdown clock to use PRINT @32,24: statements inside a loop with a constant string variable containing the count, and changed the reporting of laps completed to a text bar graph with a stored block character for each lap completed.

When I ran my R12 modified version of ICE RACES on my 4054A, the two cars took so long to draw that the flicker between drawing car1, then car2 made the game unusable. Option 30 can draw 1000's of vectors a second on the screen, depending upon the length of each vector - since the 4054 and 4054A vector generator performance is based upon vector length (the 4051 and 4052 display board draws vectors of any length at a constant although much slower rate than the 4054). Examining the original program for the car vector length - the CAR body contained 74 MOVE or DRAW vectors and the CAR 1 outlined number was an additional 12 vectors for a total of 86 vectors for CAR 1. CAR 2 had 16 vectors for the outlined number 2 for a total of 90 vectors. The Option 30 board should be able to draw both cars at a rate of almost 6 times a second with minimum flicker.

I decided to draw a simpler car and reduced the number of vectors to 31 for the car body, 5 for number 1 and 6 for number 2 for a vector reduction of 2.4x and I got both cars drawn in R12 refresh mode in about 1 second - which is ok for game play on a 4054 but not my 4052 or a 4051.

So I created a simple rectangle with a front 'v' car with no wheels with 6 vectors for the body and total of 11 vectors for car 1 and 12 vectors for car 2 for a reduction of almost 8x from the original ICE RACES car vector image! This car image plays better on my 4052, but I don't have a 4051 to try it on. I have timed the 4051 Emulator modified by @WaveyDipole to add Flash Drive storage plus 4050E 8-Slot ROM Expander with 4051 ROM Packs including BINARY Program Loader and 4051 R12 Enhanced Graphics ROM! The Flash Drive which allows BASIC programs to access other files (only single directory of files is currently supported) on the https://github.com/Twilight-Logic/Tek405xEmulator at a car refresh rate of 1 second. This is still pretty slow, so I designed the simplest shapes: a triangle for Car1 and rectangle for Car2 with no numbers to reduce the total vector count to 4 for Car1 and 5 for Car2. Now it appears the program code that displays the two cars is limiting the frame rate. Since the 4052 and 4054 are about 10x faster than the 4051 due to their 16-bit bit-slice CPU architecture, they both get a faster frame rate since they can run the program code much faster. The 4052 has the same display board as the 4051, so the R12 graphics performance will be nearly identical if you are just drawing the graphics - such as running the R12 Picture Demo program.

I have posted a new folder on my Tektronix 4050 program repository: R12 ICE RACES with an ASCII program that allows you to select one of the four car types.




  • 4054A ICE RACES 1.jpg
    4054A ICE RACES 1.jpg
    502.9 KB · Views: 5
  • all 4 types of ICE RACE CARS.png
    all 4 types of ICE RACE CARS.png
    15.8 KB · Views: 5
  • R12 ICE on Emulator x10.png
    R12 ICE on Emulator x10.png
    26.1 KB · Views: 5
Some of my learnings about programming for the 4054 Option 30 included:
  1. Creating a vector object can only be done by running 4050 BASIC statements with standard RMOVE and RDRAW commands between an Option 30 ROPEN x (x=object index) and RCLOSE statement.
    • This means every program must create the objects in BASIC statements that result in writing to the Option 30 RAM - which could take a long time
    • For the ICE RACES game, each car requires 12 objects be created at 30 degree rotation - took 30 seconds for both cars on my 4054A without an Option 30 board - so it could have taken longer.
  2. VISIBILITY statements turn an object visible=1 or hidden=0, and multiple objects can be visible at the same time
  3. Option 30 cannot rotate objects, so you have to create separate objects rotated in the BASIC statements used to create each object.
    • Option 30 supports 64000 objects (more than the Option 30 RAM can hold) so typical objects for a CAD program might be different shaped lines, or electrical components, etc.
  4. The 4054 Option 30 user manual indicates Option 30 can draw about 1000 refresh vectors per second - more or less based on vector length since the 4054 display architecture draws vectors at a constant speed of 45K CM/sec! This is about 10x faster than the 4051/4052 drawing speed which is a constant rate independent of length of the vector.
    • For the ICE RACES game, CAR 1 has 74 vectors for the car body and 12 vectors for the outlined number 1
    • CAR 2 has the same 74 vector body and 16 vectors for the outlined number 2
    • Total vectors for the two cars is 176 and each vector in Option 30 DRAM takes 11 bytes or 1936 bytes for the two cars at various rotation angles - not even 1 percent of the available Option 30 memory and a possible refresh rate of 5.7 times a second for both cars - which would yield pretty smooth performance
  5. Converting Option 30 12-bit relative vector objects to R12 Graphics Enhancement 10-bit absolute vector strings was a bit of a challenge
    • I created the car objects based on the relative size of the Option 30 car with https://virtual-graph-paper.com/ (saved graph attached)
    • Using the bottom left corner of the larger car in the image as the 0,0 absolute coordinate, I used virtual graph to measure the distance to the endpoints of each vector and recorded the vectors in an excel spreadsheet
    • I then took the center of each object (absolute 19,22) and subtracted from the lower left corner of the object to get a relative coordinate to the center - to match how the ICE RACES DATA statements created the Option 30 car.
    • Then each subsequent endpoint was measured on virtual paper as absolute coordinates and recorded in the spreadsheet in three columns, X, Y and Move/Draw. I chose to use 1 for Move and 0 for Draw which matches the R12 vectors - but noted that Option 30 uses the opposite definition for Move/Draw.
    • I then created the relative MOVE/DRAW DATA statements from my relative coordinate columns.
    • I used the main program to create a separate program to create my Flash Drive data file with R12 vector strings
    • This program would draw each car in storage mode - which helped me fix any errors in my DATA statements, and then the program would use the INPUT@32,24:X,Y command to determine the endpoint in absolute GDUs - which are needed to define R12 vectors.
    • Computed GO TO statements would select the appropriate string variable and use the R12 CALL "DEFINE", A$,G,X,Y command to convert the 10-bit X and Y GDUs into three 7-bit ASCII characters and store the MOVE or DRAW vector into the string at an array index based on which CAR was being drawn at that time.
    • After all 24 string variables were DEFINED, the program opened the DATA file and began to write all 24 strings to the BINARY file.
    • Finally this test program would PAGE (clear) the display and rapidly display all the rotations for both cars in refresh mode. This would catch bad (off-screen) vectors.
  6. The good news about just changing the main program data statements is I could leverage the logic in the program for moving the cars. I should be able to use this technique to port some of the other games - however most had more objects than two cars, so the flicker would increase. That's why I picked ICE RACES for my first port.


  • virtual_graph.png
    46.2 KB · Views: 3
I notice I didn't include a photo of a 4054 with the Option 31 Color Enhanced Dynamic Graphics CRT:4054A with Option 30 and 31 Refresh Graphics.jpg
And here is a photo of a 4054 with the standard 'green' CRT:

tek-4054 green CRT.jpg
Here is a photo of the Option 30 Dynamic Graphics board inside the 4054 with the Option 31 CRT.
This board is mounted on top of the 4054 standard MAS and IO boards:

4054A Refresh Graphics board front - with labels.jpg
Holy crap that tube is HUUUUUUUUGE!
And very heavy! The 4054 weighs 145 pounds according to the service manual. The 4052 with 11 inch diagonal DVST tube by comparison weighs 70 pounds (same circuit boards) - so the 19 inch display tube adds about 75 pounds!

In the 1980's I visited the Mitsubishi TV factory in Japan and saw large diagonal color TV tube rejects in a trash can. The faceplate were several inches thick of solid glass. I asked about that and their engineers indicated the thickness was needed to prevent the faceplate from imploding from the outside air pressure - since the tubes are at vacuum pressure.
And very heavy!

I was tempted to say the same. I do think it's mostly the tube that accounts for the weight, but there's also a lot more case to enclose everything, and Tektronix did not cheap out here: it's thick, heavy sheet metal. I'm not quite sure of the thickness but it's easily more than you'd find in a car door. The only plastic part is the front bezel.

I had to hire movers to get the machine I'm borrowing to the room where it needs to go. They charged me half price because they couldn't avoid scraping a nice gouge into the wall with a corner of the system.
I am now the proud owner of a 4054A with both Option 30 Refresh Graphics board and Option 31 Color Enhanced Dynamic Graphics Display!

I helped a friend repair two of his 4054A computers with Option 30 and Option 31 - both computers had Mostek 4116 DRAM errors on the main board (base 32KB memory and 64KB option memory) and 4116 DRAM errors on the 32KB Option 30 Mostek 4116 memory! I had brought my 4052/4054 Diagnostic ROM Pack designed by @jdreesen (thread here: https://forum.vcfed.org/index.php?threads/tektronix-4052-54-diagnostic-rom-pack-remade.63974/post-1254243) which can test both main board and Option 30 DRAM and pinpoint the specific DRAM with errors. This was essential in finding and replacing every DRAM that was bad - thank you Jos! This Diagnostic ROM Pack can also perform CRC tests of all the ROMs in the system.

I took my 'new' 4054A with Option 30 + 31 and my 4050 GPIB Flash Drive to VCF West 2022 at the Computer History Museum in Mountain View CA last weekend as exhibit 31 and had a blast demonstrating this rare vintage computer and its awesome graphics to many of the 1100 visitors at the biggest VCF event ever!

Monty and his 4054A with Opt 30 & 31.jpeg

You can see the Diagnostic ROM Pack in the left ROM Backpack slot and Jos' 4052/4054 Multifunction ROM Pack https://forum.vcfed.org/index.php?threads/tektronix-4052-4054-multifunction-modules-available.76192/ which emulates the 8-slot Tektronix 4050E01 ROM Expander and also includes the TransEra Real-Time Clock hardware plus the Tektronix 4052/4054 Serial Printer Interface hardware!

Here is another photo showing my Flash Drive connected to the 4054A with a GPIB cable during the show - demonstrating that it completely replaces the internal tape drive. I also brought one of my ten working tapes - which is leaning against the 4050 Operators Guide that I also brought to demonstrate not only Tektronix documentation but also their packaging of a tape or floppy with the documentation for their entire suite of ready to run application programs.

Monty and hist 4054A exhibit with Flash Drive at VCF West 2022.jpg

I'll be posting youtube videos of my 'new' 4054A running Option 30 and 31 soon.
Fantastic luck, congratulations! I ran into a 4054 (no A) with Option 30 in the eastern USA recently, so they're out there...

PS: how did you move it?
Last edited:
I put my 4054A on a convertible hand truck that I shortened the length and shortened the handle to transport my full-size aluminum R2-D2 in my Honda Fit. I used collapsible ramps to load the hand truck into the Honda Fit with the 4054A resting on a foam baby mattress and strapped down to the hand truck.


I do have to get help to get the 4054A onto the hand truck or from the hand truck to the cabinet with my 4052:

I just uploaded a video from my Tektronix 4054A. This video shows the color enhanced display - orange is briefly displayed as each line is drawn, and when the program stops - you will see a rectangular cursor on the screen below the GPLANET text, blinking in orange - without storing to the display.

I had a previous youtube video in October 2020 with this GPLANET file - but the new video is 2.3X faster - as the file is stored on a MicroSD card in my new design - a GPIB Flash Drive which works with the Tektronix 4051, 4052 and 4054 computers!

GPLANET on my Tektronix 4054A

Gplanet R12 on my new 4054A.png
Be sure to set your youtube video resolution to HD!
I finally debugged the Option 30 Games menu issue:

Change line 1490 to GO TO 81
Change line 87 to OLD@5:

The original games in the Option 30 Games folder were BINARY PROG files, and I changed them to ASCII PROG for easier debug.

Now that I have an Option 30 Refresh Graphics coprocessor and Option 31 Color Enhanced display, I plan to work on porting some of the vector graphics games like Space War, Asteroids and potentially Space Invaders to the Option 30 board :)

When I was at the Computer History Museum for the VCF West 2022 exhibition, I saw the PDP-1 they have restored, but the vector monitor was not working, so I only saw the PDP-1 playing four part PWM music through a stereo system. When the PDP-1 and monitor are working, they demonstrate Space War with two players and even hold tournaments for the best Space War player.


I just posted my video of my 4054A with Option 30 Dynamic Graphics coprocessor and Option 31 Color Enhanced Dynamic Graphics CRT running the complete Option 30 Demo tape on youtube:

Here is a screenshot of the Flight Simulator demo program.

The orange color for refresh graphics is AMAZING on a storage CRT!

Opt30 Flight Simulation.png
I just posted a video of my Asteroids game - work in progress. This video shows drawing the player ship in 16 different rotations and four different asteroids in three sizes - all in write-through or refresh mode.

Then I show the 10 BASIC program lines that animate six of the asteroids to demonstrate that Asteroids should be feasible with my 4054A with Option 30 vector graphics engine!


Here is a screenshot:

I've been making progress on my Asteroids BASIC program for my 19-inch vector graphics Tektronix 4054A with Option 30 Refresh Graphics Coprocessor - first introduced in 1979.

I'm working on the collision detection logic and decided to try an interesting Tektronix 4052A/4054A BASIC "INSIDE" function example in the Tektronix Tekniques Vol6 No3 Fall 1982 newsletter page 30.


I modified this example program to add my four different Asteroid shapes to see how the INSIDE function worked on them. The results of my test program were successful! The program performs a MOVE I,J and then PRINTs a period near that point and then PRINTs the returned value of the INSIDE function for the X Y arrays for the polygon and the point I,J. INSIDE returns a 0 if the point is outside the polygon, a 1 if the point is on one of the lines of the polygon and a 2 if the point is inside the polygon. Since this INSIDE function is in assembly code of the BASIC ROM it is much faster than performing the algorithm listed in this article in interpreted BASIC statements.

My test program also takes advantage of several new features of the Tektronix 4052A/4054A BASIC Enhancement including long variable names, inline comments after an exclamation and the 4054/4054A feature of four different vector character sizes. I picked CHARSIZE 2 for this program in order to squeeze the characters into each point on the grid.

100   ! INSIDE program Tektronix Tekniques Vol 6 No 3 page 30
110   ! Modified to test with my four Asteroids objects - 13Mar2023 MCM
120 INIT
130 PAGE
150 WINDOW -24,24,-18,18
160   ! Asteroid #1
170 DATA 10,12,16,8,0,-8,-16,-16,-8,4,16,12
180 DATA 10,0,8,16,8,16,8,-8,-16,-16,-8,0
190   ! Asteroid #2
200 DATA 13,8,16,8,0,-8,-16,-12,-16,-8,-4,8,16,8,16
210 DATA 13,4,8,16,12,16,8,0,-8,-16,-12,-16,-4,4,8
220   ! Asteroid #3
230 DATA 11,16,8,-4,-16,-8,-16,-8,0,0,8,16,16
240 DATA 11,4,16,16,4,0,-4,-16,-4,-16,-16,-4,4
250   ! Asteroid #4
260 DATA 12,4,16,16,4,-8,-4,-16,-16,-8,4,8,16,4
270 DATA 12,0,4,8,16,16,8,8,-4,-16,-12,-16,-8,0
280 FOR K=1 TO 4
290 PRINT "Asteroid #";K
300 READ Xdim
310 DIM X(Xdim)
320 READ Xmove,X
330 READ Ydim
340 DIM Y(Ydim)
350 READ Ymove,Y
360 MOVE Xmove,Ymove
370 DRAW X,Y
380 FOR I=-18 TO 18
390 FOR J=-17 TO 18
400 MOVE I,J
420 NEXT J
430 NEXT I
440 INPUT A$
450 NEXT K
460 END

Click a picture below to see a larger version.

INSIDE asteroid1.jpeg INSIDE asteroid2.jpeg

INSIDE asteroid3.jpeg INSIDE asteroid4.jpeg
I had to replace the power status lamp on my 4054A.

The service manual shows that all the status panel lamps are Chicago Miniature CM7219 12V 60mA grain of wheat miniature bulbs.

I found 7219 bulbs are still in production and purchased a set of them on EBAY and soldered one in today - works great!

These are likely the same bulbs on all Tektronix 4051, 4052 and 4054 computers.