• Updated 2023-07-12: Hello, Guest! Welcome back, and be sure to check out this follow-up post about our outage a week or so ago.

Building an internal grayscale card for the SE/30

Bolle

Well-known member
I think it's time for a little "worklog" kind of thread about this...
For the past year I've been working on and off with @cheesestraws and @GeekDot to dissect this SE/30 PDS videocard:

formac.jpg

It's made by Formac and was bundled with one of their ProNitron monitors back then driving it at 1024*768 at 8bit colour.
The card is built around the TMS34061 video controller that's found on a lot of video cards from the era.
You can freely configure it with practically any counter values you want to have it produce different resolution video output signals while it conveniently also handles all the VRAM/DRAM refresh and addressing magic for you. So a perfect solution for when you don't actually know what you're doing and just want to poke around a bit :p

I started by reverse engineering the schematics for the card and figuring out the equations for the 5 PALs that are found on the board.
In the meantime geekdot and cheesey fiddled with disassembling the ROM to find the various places where the configuration information for the TMS34061 and the RAMDAC are stored. After a lot of trial and error I found out how to calculate the correct values to give us a compact Mac compatible resolution.

Some hardware modifications to one of the original cards later and a Molex connector taped to the back of the card I wired it up to one of my Micron XCeed CRT neck boards...

IMG_9930.jpg

That was probable the first time ever a non-Micron card was outputting grayscale to the internal monitor..

IMG_9937.jpeg
IMG_9946.jpeg

Those who pay attention might have noticed that I couldn't resist to put a little upgrade in there running the internal CRT at the 12" LC Topper resolution of 512x384 :)
The original 512x342 resolution works just as well of course.

After knowing it's possible to do what we wanted I threw together a first attempt of a remake:

IMG_0206 2.jpg

...somehow missing a whole video data bus in the process which had to be wired in manually:

IMG_0214 2.jpg

But even with that mess it's working well enough to eventually base a second revision on that.


Currently we're still struggling to get the declaration ROM and driver code to properly default to 8 bit mode, because due to some clock distribution changes I had to do to the board 1 bit mode won't function correctly. Right now the card still defaults to the 1bit mode and you have to find your way into the monitors control panel to change to 256 colours/grays to get a useable image on screen. So now it's either figuring out how to get rid of the 1bit mode all together or bend the hardware to correctly output 1bit... The race is on, whoever finishes first, geekdot or myself :p



PS: for those who were wondering, yes it does work together with the Turbo040 unlike the Micron XCeed for a full stack of purple awesomeness :D

IMG_0229 2.jpg
 

MacKilRoy

Well-known member
This. Is. Amazing. Great work! I’d love to see one of these clones in one of my SE/30 as would a lot of other people.
 

GeekDot

Well-known member
Currently we're still struggling to get the declaration ROM and driver code to properly default to 8 bit mode, because due to some clock distribution changes I had to do to the board 1 bit mode won't function correctly. Right now the card still defaults to the 1bit mode and you have to find your way into the monitors control panel to change to 256 colours/grays to get a useable image on screen. So now it's either figuring out how to get rid of the 1bit mode all together or bend the hardware to correctly output 1bit... The race is on, whoever finishes first, geekdot or myself :p
Just to add my 2 cents here:

After I've disassembled and completely commented the original DeclROM we have 2 different approaches:
  1. Patch the hell out of it
  2. Rewrite our own
While patching the binary gives you immediate results (good and bad ones) it's tedious, error prune and gives you just about so much space for changes which is available (i.e. unused) in ROM.
Also you can't do as you like, as in certain ROM code parts will be copied to RAM while others stay there and will never run again.

While setting the default bit mode isn't black magic, doing so during primaryInit -where no ROM/Toolbox-calls beside Slot Manager are allowed- definitely is. Especially when you don't have room for extra code without overwriting existing one.

So I settled for a rewrite, where I 'rule them all' - and that being my first-time, it takes a while... and I'm not racing against Bolle but against quality :p
 

Johnnya101

Well-known member
Is there any possibility of adding a pass thru slot so we could have Ethernet/accelerator and grayscale, or would one need a standalone splitter first?
 

moldy

Well-known member
@Bolle Wow, this is amazing! I actually thought about doing something similar based on the Micron Xceed card I found in one of my SE/30s. The equations from Micron are (I think) public so it seemed like a relative doable quest. Out of curiosity, why did you decide for the Formac card?

One of my future project ideas of mine was/is to look into implementing the logic on the FPGA, maybe one day I'll finally have time to sit on that :)
 

Bolle

Well-known member
I made the schematics for this card as well, they should be around here somewhere
 

cheesestraws

Well-known member
Apart from any other reason, the TMS34061 is extremely well-understood and well-documented. It's an easy chip to drive, and common. This means that it's actually easier to deal with than a discrete logic solution which isn't documented at all except perhaps in someone's archives somewhere.
 
Last edited:

ronan

Well-known member
Great job ! This looks like a lot of work, congrats !

May I ask what would be the use for such a card ? Would you be able to drive an external screen ?
 

Bolle

Well-known member
Would you be able to drive an external screen ?
You certainly could and I included headers to break the video signals out to an external screen but the main purpose is to drive the internal CRT at 256 shades of gray.
 

ronan

Well-known member
You certainly could and I included headers to break the video signals out to an external screen but the main purpose is to drive the internal CRT at 256 shades of gray.
Oh I see ! Thanks for the explanation
 

Bolle

Well-known member
If I may ask, is there something specific that made you choose Formac instead of Micron?

Just like I said in the opening post, the TMS34061 is an incredibly „easy“ to use chip if you don’t want to deal with all the stuff that gives people headaches… DRAM access and refresh, implementing line/row counters for different resolutions, tweak all the timing between the different GALs/PALs that need to talk to each other. Especially that last point will become painful when you start replacing PALs with modern ATF equivalents that totally don’t keep up to the propagation delay that their naming might suggests.
I’ve done a few clones of things that implement state machines spread over multiple GALs and fixing timing issues once you use ATFs isn’t fun at all.
 

Trash80toHP_Mini

NIGHT STALKER
Bubble, bubble, toil and trouble . . . thanks so much to the three of you for brewing up this astounding bit of black magic. That higher Pizza Topper resolution in GS on the SE/30 is truly amazing.

. . . you're truly sorcerers, so the misquote is a better fit. ;)
 
Last edited:

Nixontheknight

Well-known member
This is interesting, maybe someone can wire a DB-15 adapter or even a 13W3 adapter for this so it can be possible to use other video cards with the internal SE & SE/30 displays
 

BadGoldEagle

Well-known member
Amazing work!

just my 2 cents:

1/ Some Micons had a toggle at the back to switch between the internal and external display. Could this be implemented in @GeekDot's new ROM? Sign me up for two of these if you can manage that! I'd love to set up one of my SE/30s with the 50MHz 030 and a color monitor (no greyscale) and a second one with the 040 and greyscale/color on the fly...

2/ What kind of drivers are needed right now? Is the current DeclROM compatible with 7.5? Lapis made cards that were notoriously not compatible with the latter.
 

Bolle

Well-known member
Good question, haven’t actually tried the card with anything but 7.1. The driver is sitting in the ROM, no extra system extension is needed.

Switching between internal and external display would require some sort of video signal switch which I don’t plan to implement. The card is going to be wired up in a way that as soon as you connect the CRT neck board wiring harness it will always output compact Mac resolution (or optionally 512*384 if you want that selectable by a jumper on the card)
With the internal harness disconnected it’s going to output 640*480 (or 800*600 - that should still fit into the 512k of VRAM as well)
The video signals are always present on both, the internal connector and the breakout header, at the same time. That’s why it has to be handled in a more restrictive way… neck board connected->always do compact Mac resolution so you won’t fry the analogboard by sending VGA or even 800*600 sync rates to it.
 
Top