Programming the screen resolution for TurboGXplus frame buffers must be done in nvramrc, a nonvolatile PROM script memory. When the PROM reaches the device probing stage, it checks the use-nvramrc? variable and if it is true, executes the Forth code that resides in nvramrc. Otherwise, it calls probe-sbus (for all pre-Ultra systems) or probe-all (for all Ultra systems), install-console, and banner.
The following example places resolution initialization between the probe-sbus (or probe-all) stage and the install-console stage.
First probe-sbus or probe-all is called to probe all devices, so that the device tree is created, and the devices are initialized.
The next line defines a Forth word called vsetup which contains the monitor video setup values.
#!/bin/sh eeprom fcode-debug\?=true eeprom use-nvramrc\?=true eeprom nvramrc='probe-sbus (or probe-all) : vsetup " 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" ; vsetup 4 " /sbus/cgsix@1" " override" execute-device-method drop install-console banner |
The following string of values (defined in Table 1-3) are the specifications for a video setup:
" 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" |
Value |
Description |
---|---|
117000000 |
Pixel frequency or dot clock in Hz |
71691 |
Horizontal frequency in Hz |
67 |
Vertical frequency in Hz |
16 |
Horizontal front porch (in pixels) |
112 |
Horizontal sync width (in pixels) |
224 |
Horizontal back porch (in Pixels) |
1280 |
Horizontal displayed pixels (in pixels) |
2 |
Vertical front porch (in lines) |
8 |
Vertical sync width (in lines) |
33 |
Vertical back porch (in lines) |
1024 |
Vertical displayed lines (in lines) |
COLOR |
Color monitor flag |
0OFFSET |
No sync pedestal flag |
The line, vsetup 4, pushes the video string on the stack, the number 4 defines the sense code of the monitor to change the resolution on. See Table 1-4 for supported monitor codes. The number used should match the monitor attached to the TurboGXplus frame buffer.
The next line pushes the string /sbus/cgsix@1 onto the Forth stack, the path for the device where the resolution is to be changed. The "1" in cgsix@1 identifies the SBus slot number.
The following example changes the cgsix frame buffer on SBus slot 1.
ok nvedit 0: probe-sbus (or probe-all) 1: : vsetup " 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" ; 2: vsetup 4 3: " /sbus/cgsix@1" " override" execute-device-method drop 4: install-console 5: banner 6: ^C ok nvstore ok setenv use-nvramrc? true ok setenv fcode-debug? true |
The "override" string is the actual entry point in the cgsix fcode PROM that reconfigures the resolution from the data on the forth stack. execute-device-method actually calls override and returns a pass or fail flag, which is ignored by the drop command that follows.
The remaining two lines install-console and banner, installs a terminal driver on the display device, then prints the banner at reset time or reboot time.
The following is a UNIX script used to configure the TurboGXplus for a resolution of 1280 x 1024 at 67 Hz.
#!/bin/sh eeprom fcode-debug\?=true eeprom use-nvramrc\?=true eeprom nvramrc='probe-sbus (or probe-all) : vsetup " 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" ; vsetup 4 " /sbus/cgsix@1" " override" execute-device-method drop install-console banner |
The following example uses the PROM method to configure the TurboGXplus for a resolution of 1280 x 1024 at 67 Hz.
ok nvedit 0: probe-sbus (or probe-all) 1: : vsetup " 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" ; 2: vsetup 4 3: " /sbus/cgsix@1" " override" execute-device-method drop 4: install-console 5: banner 6: ^C ok nvstore ok setenv use-nvramrc? true ok setenv fcode-debug? true |
Table 1-4 contains codes for TurboGXplus-supported resolutions:
Table 1-4 TurboGXplus Resolution Codes
Resolution |
Code |
---|---|
1024 x 768 at 60 Hz |
" 64125000,48286,60,16,128,160,1024,2,6,29,768,COLOR" |
1024 x 768 at 70 Hz |
" 74250000,56593,70,16,136,136,1024,2,6,32,768,COLOR" |
1024 x 768 at 77 Hz |
" 84375000,62040,77,32,128,176,1024,2,4,31,768,COLOR" |
1152 x 900 at 66 Hz |
" 94500000,61845,66,40,128,208,1152,2,4,31,900,COLOR" |
1152 x 900 at 76 Hz |
" 108000000,71808,76,32,128,192,1152,2,4,31,900,COLOR,0OFFSET" |
1280 x 1024 at 67 Hz |
" 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" |
1280 x 1024 at 76 Hz |
" 135000000,81128,76,32,64,288,1280,2,8,32,1024,COLOR,0OFFSET" |
1600 x 1280 at 76 Hz |
" 216000000,101890,76,24,216,280,1600,2,8,50,1280,COLOR,0OFFSET" |
The following is an example of how to set up a TurboGXplus card in slot 2 to 1024 x 768 at 60 Hz using a 16-inch monitor.
ok nvedit 0: probe-sbus (or probe-all) 1: : vsetup " 64125000,48286,60,16,128,160,1024,2,6,29,768,COLOR" ; 2: vsetup 6 3: " /sbus/cgsix@2" " override" execute-device-method drop 4: install-console 5: banner 6: ^C ok nvstore ok setenv use-nvramrc? true ok setenv fcode-debug? true |
The following is a UNIX script that sets a 1024 x 768 at 60 Hz for the TurboGXplus card in slot 2.
#!/bin/sh eeprom fcode-debug\?=true eeprom nvramrc='probe-sbus (or probe-all) : vsetup " 64125000,48286,60,16,128,160,1024,2,6,29,768,COLOR" ; vsetup 6 "/sbus/cgsix@2" " override" execute-device-method drop install-console banner ` eeprom use-nvramrc\?=true |
The following example shows a UNIX script that sets up the TurboGXplus card in slot 1 to 1152 x 900 at 76 Hz, and another TurboGXplus card in slot 3 to 1280 x 1024 at 67 Hz using two 19-inch monitors.
#!/bin/sh eeprom fcode-debug\?=true eeprom nvramrc='probe-sbus (or probe-all) : vsetup1 " 108000000,71808,76,32,128,192,1152,2,4,31,900,COLOR,0OFFSET" ; vsetup1 4 " /sbus/cgsix@1" " override" execute-device-method drop : vsetup2 " 117000000,71691,67,16,112,224,1280,2,8,33,1024,COLOR,0OFFSET" ; vsetup2 4 " /sbus/cgsix@3" " override" execute-device-method drop install-console banner ` eeprom use-nvramrc\?=true |
For more information on running multiple monitors, see Chapter 9, Multiple Monitors on a System.