zigzagjoe
Well-known member
Hello! Here is a project I have been working on for the past couple months: the imaginatively named 30Video board. Using a newer (but still obsolete) controller from Epson, it targets SE/30, and is expected to work in IIsi too. Hopefully, the LC PDS later.... I've got some plans. here's the prototype in action.
![20240613_115005.jpg 20240613_115005.jpg](https://forumbucket.us-southeast-1.linodeobjects.com/data/attachments/74/74793-e88bbc85464d0c86ae399d591917bfd5.jpg)
Currently, this is my featureset:
Two resolutions: VGA 640x480@60hz, SVGA 800x600@75hz
Supports B&W, 4-color, 16-color, 256-color modes (4096 color palette)
Supports System 6 - 8.1, and A/UX (3.0, maybe others)
Works with Carrera, Interware Booster, DiimoCache.
Compatible with IIsi and SE/30 ROMs in either 24 bit or 32 bit mode.
Correctly supports gamma profiles and defaults to linear gamma suitable for modern LCDs (CRT also available).
I expect it will work with PowerCache cards, and in IIsi, but will need to find a beta tester to confirm this.
Massive thanks go to @t-shinb for his backups of the Pickles source code, this was my touchpoint for much of the process. The Micron Color 30 source, SuperMario Mac OS leak, and @Melkhior's nubusfpga also provided valuable info on how others approached the same problem. I discovered lots of fun tidbits along the way.
"fun" tidbits for those writing DeclROMs
![20240613_115005.jpg 20240613_115005.jpg](https://forumbucket.us-southeast-1.linodeobjects.com/data/attachments/74/74793-e88bbc85464d0c86ae399d591917bfd5.jpg)
Currently, this is my featureset:
Two resolutions: VGA 640x480@60hz, SVGA 800x600@75hz
Supports B&W, 4-color, 16-color, 256-color modes (4096 color palette)
Supports System 6 - 8.1, and A/UX (3.0, maybe others)
Works with Carrera, Interware Booster, DiimoCache.
Compatible with IIsi and SE/30 ROMs in either 24 bit or 32 bit mode.
Correctly supports gamma profiles and defaults to linear gamma suitable for modern LCDs (CRT also available).
I expect it will work with PowerCache cards, and in IIsi, but will need to find a beta tester to confirm this.
Massive thanks go to @t-shinb for his backups of the Pickles source code, this was my touchpoint for much of the process. The Micron Color 30 source, SuperMario Mac OS leak, and @Melkhior's nubusfpga also provided valuable info on how others approached the same problem. I discovered lots of fun tidbits along the way.
"fun" tidbits for those writing DeclROMs
- csBaseAddr is always harmful; do not ever return anything but 0 from any Control or Status call that supports it. Mostly it is ignored, but in some cases (Macsbug and some others) it willbreak things if nonzero.
- The base address of your video buffer is calculated by the dCtlDevBase + offset in video mode entry, it must be consistent across all depths and modes your hardware supports (exception: if you reboot for a resolution change, then it can be different)
- Hardware video pages are obsolete unused functionality that will never be used. Quickdraw cannot deal with its base address changing.
- There is literally no point in implementing them (written after implementing them and trying to figure out how to test).
- Despite apple saying 24 bit addressed devices can be used when the new slot manager loads, this does not seem to be true.
- So you must kill the 24 bit resource and load 32 bit resource in SecondaryInit when new slot manager loads.
- Also, you have to hack the GDevice's base address to the new 32 bit base if you were the boot device. Both are mandatory.
- SE/30 ROM is dumb and will never load anything but the default TFB gamma table to a card that supports gamma.
- For vintage cards already produced, if the card exposes custom gamma, you must manually select the appropriate card gamma entry in Monitors. (Workaround in the DeclROM is to identify this case and ignore it)
- setEntries and getEntries use 16 bit color values. You must use the upper byte if you are less than 16bit, and in getEntries you can duplicate the same 8 bit entry into upper and lower bytes. (Why, apple? 48 bits of color info when 8 bits of color was a novel concept?)
- Most of the status methods are obsolete and not ever used.
- MODE32 closes all Drvr loaded by the ROM prior to switching into 32 bit mode, at which point it re-runs primaryinits but still with old slot manager! so you need 24 bit srsrc.
- Despite A/UX 3.0 toolbox documentation stating otherwise, SDeleteSRTRec is at least partially supported in A/UX. Makes sense, as video cards with more than one mode would not work without it.