• 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.

iBook G3 800 MHz hack gives 1920x1080 VGA output

noidentity

Well-known member
I've started using my iBook G3 800 MHz 12.1" to run Mac OS 9.2.2 on and was frustrated that it didn't support 1920x1080 on an external VGA monitor. I've installed the screen spanning hack to allow non-mirrored external displays, but it still didn't have the resolution I wanted, so I hacked the video driver to support it as I did for my PowerMac 8500 a while back. It's very straight forward to set new timings, as it has all the parameters virtually in the standard modeline format.

ATI Driver Update 1920x1080.sit

The attached modified ATI Driver Update (version 2.4.4) has 1920x1080 60Hz using the following modeline:

Modeline "1920x1080_60.00" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync

I also figured out that if you set the external monitor as the main (menubar) monitor in Monitors, everything starts on it. Further, if you call DMDisableDisplay(), you can totally disable the internal LCD and treat it like a desktop machine with only an external monitor. And then turn the brightness down until the backlight goes off. Very useful to not have the mouse/windows/desktop icons get lost on the internal LCD when it's not visible or on.

You can patch the driver yourself by editing the data fork at offset 2B7088. Initially it has the following:

Code:
                       02 01 23 4F FB 07 01 22
09 90 01 21 80 01 25 C8 05 40 05 72 01 21 01 01
21 03 04
replace with

Code:
                       03 01 24 3A 02 07 80 24 
08 98 00 58 24 00 2C 04 38 24 04 65 00 04 23 00
09 00 03
The values have the following meanings:

Code:
                       ss 01 24 clock hres  24 
htotl hsync 24 hswid vres  24 vtotl vsync 23 vs
wd 00 03
(note that this template can't be applied to the original bytes in the unchanged file since the format is based on how the fragment's globals are compressed, and I slightly changed how they were compressed to better make the values available for modifying)

To convert a modeline to the above format, start with the modeline:

Code:
                             A    B    C    D    E    F    G    H    I      J     K
Modeline "1920x1080_60.00" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
Set values as follows:

Code:
ss    = 03:+hsync +vsync 20:-hsync +vsync 10:+hsync -vsync 00:-hsync -vsync
clock = A*100, so 123.45 MHz becomes 12345
hres  = B
htotl = E
hsync = C-B
hswid = D-C
vres  = F
vtotl = I
vsync = G-F
vswd  = H-F (possibly actually H-G, but this is very minor)

So in the 1920x1080 example, you have (# before decimal values)
ss    = 03
clock = 3A02 = #14850
hres  = 0780 = #1920
htotl = 0889 = #2200
hsync = 0058 = #88
hswid = 002C = #44
vres  = 0438 = #1080
vtotl = 0465 = #1125
vsync = 0004 = #4
vswd  = 0009 = #9
Here is a further log of how I developed this hack, made so I wouldn't forget the fine points in case I ever have to do it yet again. Includes some notes on how to try new timings with Macsbug without having to restart.

ATI 1920x1080 hack log.txt

I hope someone can get some use out of this running Mac OS 9.2.2 on an iBook like I am.

 

thinkdifferent

Well-known member
Wow, nice work!

Could you post a tutorial for how you enabled higher resolutions for your 8500? I have one as well and OS 9 would look awesome on a Cinema Display. :) Also, what kinds of changes would I need to make for it to work with 1680 x 1050? That's a lot of questions, I know. :-x

 

Steve_G

Well-known member
Sorry about digging up an old post. Does this offer any advantages other than the high res output?

 
Top