This is a patch to the kernel (boot/setup.S) that adds some extra VGA textmodes to the kernel boot menu. The patch is relative to 1.1.54, but I believe setup.S hasn't been changed up to the 1.1.6x versions. On any VGA compatible card, it adds the following modes to the default set of 80x25/28/50 (which use a 400-scanline frame at 70 Hz): 80x36 11-line font, 70 Hz 80x44 9-line font, 70 Hz 80x30 16-line font, 480-scanline frame, 60 Hz 80x34 14-line font, 480-scanline frame, 60 Hz 80x40 12-line font, 480-scanline frame, 60 Hz Big modes: 80x15 16-line font, scanline doubling, 480-scanline frame, 60 Hz 40x15 16-line font, scanline doubling, 480-scanline frame, 60 Hz Note that the 9, 11 and 12-line font modes are initialized with the 8-line font in the BIOS. You can load a better-matching font with 'setfont' in the kbd package. Look in /usr/lib/kbd/consolefonts. There's at least one 10-line font there (latin2-10.psf), and two 12-line fonts (latin1-12.psf, latin2-12.psf). These fonts are 'roman' -like and slightly irregular. Anyone know where to find more 12-line VGA fonts? (I think some could be converted from X). The 480-line frame looks better on most monitors, if you can accept the 60 Hz refresh. These modes should be especially useful for those running a laptop screen with 480 scanlines, on which the default 400-line textmodes may leave part of the screen unused. The patch also adds support for the following Cirrus 54xx textmodes (the modes are derived from the 132x25 400-scanline BIOS mode): 132x25, 132x28, 132x36, 132x44, 132x50, 132x30, 132x34, 132x40, 132x60. The 30, 34, 40, and 60 line modes use a 480 scanline frame at 60 Hz. The "CL-GD54" BIOS ID check should work on most 542x/3x cards. Most card BIOSes don't have much more than ill-defined 132x25/43 mode these days. If the card BIOS provides a 400 scanline 132x25, it should be possible to add extra 132-column textmodes in the same way as this patch does for CL-GD542x. You would have to update the code where a check is done that the mode is within the Cirrus dsc record and the mode is 'tweaked'. Feedback is appreciated. If these modes work correctly on various VGA compatible screens, they could be considered for inclusion into the standard kernel release. hhanemaa@cs.ruu.nl To apply do something like this: cd linux/arch/i386/boot (or linux/boot) patch *************** *** 452,484 **** ret /* extended vga mode: 80x50 */ vga50: ! mov ax,#0x1112 ! xor bl,bl ! int 0x10 ! use 8x8 font set (50 lines on VGA) ! mov ax,#0x1200 ! mov bl,#0x20 ! int 0x10 ! use alternate print screen ! mov ax,#0x1201 ! mov bl,#0x34 ! int 0x10 ! turn off cursor emulation ! mov ah,#0x01 ! mov cx,#0x0607 ! int 0x10 ! turn on cursor (scan lines 6 to 7) pop ds mov ax,#0x5032 ! return 80x50 ret /* extended vga mode: 80x28 */ vga28: pop ax ! clean the stack ! mov ax,#0x1111 ! xor bl,bl ! int 0x10 ! use 9x14 fontset (28 lines on VGA) ! mov ah, #0x01 ! mov cx,#0x0b0c ! int 0x10 ! turn on cursor (scan lines 11 to 12) pop ds mov ax,#0x501c ! return 80x28 ret /* svga modes */ ! ! test for presence of an S3 VGA chip. The algorithm was taken --- 455,524 ---- ret /* extended vga mode: 80x50 */ vga50: ! call vga50lines pop ds mov ax,#0x5032 ! return 80x50 ret /* extended vga mode: 80x28 */ vga28: pop ax ! clean the stack ! call vga28lines pop ds mov ax,#0x501c ! return 80x28 ret + /* extended vga mode: 80x36 */ + vga36: + pop ax + call vga36lines + pop ds + mov ax,#0x5024 ! return 80x36 + ret + /* extended vga mode: 80x44 */ + vga44: + pop ax + call vga44lines + pop ds + mov ax,#0x502c ! return 80x44 + ret + /* extended vga mode: 80x30, 480-line frame, 60 Hz */ + /* mainly for laptop screens with 480 scanlines */ + vga30: + pop ax + call vga30lines + pop ds + mov ax,#0x501e ! return 80x30 + ret + /* extended vga mode: 80x34, 480-line frame, 60 Hz */ + vga34: + pop ax + call vga34lines + pop ds + mov ax,#0x5022 ! return 80x34 + ret + /* extended vga mode: 80x40, 480-line frame, 60 Hz */ + vga40: + pop ax + call vga40lines + pop ds + mov ax,#0x5028 ! return 80x40 + ret + /* extended vga mode: 80x15, 480-line frame, 60 Hz */ + vga15: + pop ax + call vga15lines + pop ds + mov ax,#0x500f ! return 80x15 + ret + /* extended vga mode: 40x15, 80-line frame, 60 Hz */ + vga40x15: + pop ax + mov ax,#0x0001 + int #0x10 ! set 40x25 + call vga15lines + pop ds + mov ax,#0x280f ! return 40x15 + ret + /* svga modes */ ! ! test for presence of an S3 VGA chip. The algorithm was taken *************** *** 600,606 **** lea si,dsccandt lea di,mocandt br selmod ! nocant: mov dx,#0x3d4 ! Check Cirrus 'clues' mov al,#0x0c out dx,al inc dx --- 640,646 ---- lea si,dsccandt lea di,mocandt br selmod ! nocant: mov dx,#0x3d4 ! Check pre-1990 Cirrus 'clues' mov al,#0x0c out dx,al inc dx *************** *** 724,730 **** jne notrid ev2tri: lea si,dsctrident lea di,motrident ! jmp selmod notrid: mov dx,#0x3cd ! Check Tseng 'clues' in al,dx ! Could things be this simple ! :-) mov bl,al --- 764,770 ---- jne notrid ev2tri: lea si,dsctrident lea di,motrident ! br selmod notrid: mov dx,#0x3cd ! Check Tseng 'clues' in al,dx ! Could things be this simple ! :-) mov bl,al *************** *** 772,778 **** lea si,dscvideo7 lea di,movideo7 jmp selmod ! novid7: lea si,dsunknown lea di,mounknown selmod: xor cx,cx mov cl,(di) --- 812,833 ---- lea si,dscvideo7 lea di,movideo7 jmp selmod ! novid7: ! lea si,idclgd54xx ! Check Cirrus CL-GD542x/3x 'clues' ! mov di,#0x39 ! (at least generic cards) ! mov cx,#0x07 ! repe ! cmpsb ! jne noclgd54xx ! mov dx,#0x3c4 ! unlock extended registers ! mov al,#0x06 ! so that BIOS doesn't appear as just ! mov ah,#0x12 ! standard VGA (CL-GD542x BIOS >= 1.20) ! call outidx ! lea si,dscclgd54xx ! lea di,moclgd54xx ! jmp selmod ! noclgd54xx: ! lea si,dsunknown lea di,mounknown selmod: xor cx,cx mov cl,(di) *************** *** 842,854 **** push ax dec ax beq vga28 add di,ax mov al,(di) int 0x10 pop ax shl ax,#1 add si,ax ! lodsw pop ds ret --- 897,970 ---- push ax dec ax beq vga28 + dec ax + beq vga36 + dec ax + beq vga44 + dec ax + beq vga30 + dec ax + beq vga34 + dec ax + beq vga40 + dec ax + beq vga15 + dec ax + beq vga40x15 add di,ax mov al,(di) int 0x10 pop ax shl ax,#1 add si,ax ! mov ax,(si) ! ! Tweak mode ! push ax ! ! Tweak the number of lines ! ! Currently used for clgd54xx based on 400-scanline 132x25 ! ! It can work for any SVGA that provides a 400-scanline 132x25 mode ! ! to provide a range of 132 column modes ! lea bx,dscclgd54xx ! cmp si,bx ! check that mode size data is within the ! jb nolinetweak ! bounds of the clgd54xx record ! lea bx,dsunknown ! cmp si,bx ! jae nolinetweak ! cmp al,#25 ! je nolinetweak ! cmp al,#28 ! the following are 400-scanline (70 Hz) modes ! jne notw28 ! call vga28lines ! switch to 28 lines ! jmp nolinetweak ! notw28: cmp al,#36 ! jne notw36 ! call vga36lines ! switch to 36 lines ! jmp nolinetweak ! notw36: cmp al,#44 ! jne notw44 ! call vga44lines ! switch to 44 lines ! jmp nolinetweak ! notw44: cmp al,#50 ! jne notw50 ! call vga50lines ! switch to 50 lines ! jmp nolinetweak ! notw50: cmp al,#30 ! now 480-scanline (60 Hz) modes ! jne notw30 ! call vga30lines ! switch to 30 lines ! jmp nolinetweak ! notw30: cmp al,#34 ! jne notw34 ! call vga34lines ! switch to 34 lines ! jmp nolinetweak ! notw34: cmp al,#40 ! jne notw40 ! call vga40lines ! switch to 40 lines ! jmp nolinetweak ! notw40: cmp al,#60 ! jne nolinetweak ! call vga60lines ! switch to 60 lines ! nolinetweak: ! pop ax pop ds ret *************** *** 875,880 **** --- 991,1251 ---- dec dx ret + ! Routine that loads dx with the correct CRTC I/O port + ! It is 0x3d4 for color VGA, 0x3b4 for mono + + getcrtcport: + mov dx,#0x3cc ! determine CRTC port (mono/color) + in al,dx + mov dx,#0x3d4 + and al,#0x01 + jnz crtccolor + mov dx,#0x3b4 + crtccolor: + ret + + ! Routine to initialize all VGA font data with zeroes (blank) + ! Required because BIOS font load routine leaves remnants of previous + ! font (e.g. loading 8-line font and using 9-line characters will + ! show remnants of previous 16-line font) + ! Only called when setting 36, 44 or 40 lines + + clearvgafont: + push bp + push di + push es + mov ax,#0x8000 ! write empty font at 8000:0000 + mov es,ax + xor di,di + mov cx,#8192 + cld + rep + stosb + mov ax,#0x1100 ! load user font + mov bh,#32 + mov bl,#0x00 + mov cx,#256 + mov dx,#0 + xor bp,bp + int 0x10 + pop es + pop di + pop bp + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font) to + ! 50 lines (8-line font) + + vga50lines: + mov ax,#0x1112 + xor bl,bl + int 0x10 ! use 8x8 font set (50 lines on VGA) + mov ax,#0x1200 + mov bl,#0x20 + int 0x10 ! use alternate print screen + mov ax,#0x1201 + mov bl,#0x34 + int 0x10 ! turn off cursor emulation + mov ah,#0x01 + mov cx,#0x0607 + int 0x10 ! turn on cursor (scan lines 6 to 7) + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font) to + ! 28 lines (14-line font) + + vga28lines: + mov ax,#0x1111 + xor bl,bl + int 0x10 ! use 9x14 fontset (28 lines on VGA) + mov ah,#0x01 + mov cx,#0x0b0c + int 0x10 ! turn on cursor (scan lines 11 to 12) + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font) to + ! 36 lines (11-line font) + + vga36lines: + call clearvgafont ! required because BIOS 9x8 font load + ! keeps remnants of 16-line boot-up font + mov ax,#0x1112 + xor bl,bl + int 0x10 ! use 9x8 font (no better match available) + call getcrtcport + mov al,#0x09 ! CRTC register 0x09 + call inidx + and al,#0xe0 + or al,#10 ! program character height of 10 + 1 = 11 + mov ah,al + mov al,#0x09 + call outidx + mov al,#0x0a ! CRTC register 0x0A + call inidx + and al,#0xc0 ! enable cursor + or al,#0x08 ! program cursor start to scanline 8 + mov ah,al + mov al,#0x0a + call outidx + mov al,#0x0b ! CRTC register 0x0B + call inidx + and al,#0xe0 + or al,#0x09 ! program cursor end to scanline 9 + mov ah,al + mov al,#0x0b + call outidx + mov al,#0x12 ! VGA vertical display end + mov ah,#0x8b ! (11 * 36 = 396) - 1 - 256 + call outidx + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font) to + ! 44 lines (9-line font) + + vga44lines: + call clearvgafont + mov ax,#0x1112 + xor bl,bl + int 0x10 ! use 9x8 font + call getcrtcport + mov al,#0x09 ! CRTC register 0x09 + call inidx + and al,#0xe0 + or al,#8 ! program character height of 8 + 1 = 9 + mov ah,al + mov al,#0x09 + call outidx + mov ah,#0x01 + mov cx,#0x0607 + int 0x10 ! turn on cursor (scanlines 6 to 7) + call getcrtcport + mov al,#0x12 ! VGA vertical display end + mov ah,#0x8b ! (9 * 44 = 396) - 1 - 256 + call outidx + ret + + ! Routine to switch from 400 scanline frame (70 Hz) to 480 scanline frame + ! (60 Hz) + + vga480scanlines: + call getcrtcport + mov al,#0x11 ! CRTC register 0x11 + mov ah,#0x0c ! vertical sync end (also unlocks CR0-7) + call outidx + mov al,#0x06 ! CRTC register 0x06 + mov ah,#0x0b ! vertical total + call outidx + mov al,#0x07 ! CRTC register 0x07 + mov ah,#0x3e ! (vertical) overflow + call outidx + mov al,#0x10 ! CRTC register 0x10 + mov ah,#0xea ! vertical sync start + call outidx + mov al,#0x12 ! CRTC register 0x12 + mov ah,#0xdf ! vertical display end + call outidx + mov al,#0x15 ! CRTC register 0x15 + mov ah,#0xe7 ! vertical blank start + call outidx + mov al,#0x16 ! CRTC register 0x16 + mov ah,#0x04 ! vertical blank end + call outidx + mov dx,#0x3cc ! Misc Output register (read) + in al,dx + mov dx,#0x3c2 ! (write) + and al,#0x0d ! preserve clock select bits and color bit + or al,#0xe2 ! set correct sync polarity + out dx,al + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font, 70 Hz) to + ! 30 lines (480 scanlines, 16-line font, 60 Hz) + + vga30lines: + call vga480scanlines + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font, 70 Hz) to + ! 34 lines (480 scanlines, 14-line font, 60 Hz) + + vga34lines: + call vga480scanlines + mov ax,#0x1111 + xor bl,bl + int 0x10 ! use 9x14 font + mov ah,#0x01 + mov cx,#0x0b0c + int 0x10 ! turn on cursor (scan lines 11 to 12) + call getcrtcport + mov al,#0x12 ! VGA vertical display end + mov ah,#0xdb ! (14 * 34 = 476) - 1 - 256 + call outidx + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font, 70 Hz) to + ! 40 lines (480 scanlines, 12-line font, 60 Hz) + + vga40lines: + call vga480scanlines + call clearvgafont ! required because BIOS 9x8 font load + ! keeps remnants of 16-line boot-up font + mov ax,#0x1112 + xor bl,bl + int 0x10 ! use 9x8 font (no better match available) + call getcrtcport + mov al,#0x09 ! CRTC register 0x09 + call inidx + and al,#0xe0 + or al,#11 ! program character height of 11 + 1 = 12 + mov ah,al + mov al,#0x09 + call outidx + mov al,#0x0a ! CRTC register 0x0A + call inidx + and al,#0xc0 ! enable cursor + or al,#0x0a ! program cursor start to scanline 10 + mov ah,al + mov al,#0x0a + call outidx + mov al,#0x0b ! CRTC register 0x0B + call inidx + and al,#0xe0 + or al,#0x0b ! program cursor end to scanline 11 + mov ah,al + mov al,#0x0b + call outidx + ret + + ! Routine to switch from 25 lines (400 scanlines, 16-line font, 70 Hz) to + ! 60 lines (480 scanlines, 8-line font, 60 Hz) + + vga60lines: + call vga480scanlines + call clearvgafont ! required because BIOS 9x8 font load + ! keeps remnants of 16-line boot-up font + mov ax,#0x1112 + xor bl,bl + int 0x10 ! use 9x8 font + call getcrtcport + mov ah,#0x01 + mov cx,#0x0607 + int 0x10 ! turn on cursor (scanlines 6 to 7) + ret + + ! Routine to switch to 15 lines (480 scanlines with scanline doubling, + ! 16-line font, 60 Hz) + + vga15lines: + call vga480scanlines + call getcrtcport + mov al,#0x09 ! CRTC register 0x09 + call inidx + or al,#0x80 ! enable scanline doubling + mov ah,al + mov al,#0x09 + call outidx + ret + ! Routine to print a decimal value on screen, the value to be ! printed is put in al (i.e 0-255). *************** *** 960,1001 **** idoakvga: .ascii "OAK VGA " idS3: .byte 0x81, 0x82, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95 .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa8, 0xb0 ! ! Manufacturer: Numofmodes+2: Mode: ! Number of modes is the number of chip-specific svga modes plus the extended ! ! modes available on any vga (currently 2) ! moati: .byte 0x06, 0x23, 0x33, 0x22, 0x21 ! moahead: .byte 0x07, 0x22, 0x23, 0x24, 0x2f, 0x34 ! mocandt: .byte 0x04, 0x60, 0x61 ! mocirrus: .byte 0x06, 0x1f, 0x20, 0x22, 0x31 ! moeverex: .byte 0x0c, 0x03, 0x04, 0x07, 0x08, 0x0a, 0x0b, 0x16, 0x18, 0x21, 0x40 ! mogenoa: .byte 0x0c, 0x58, 0x5a, 0x60, 0x61, 0x62, 0x63, 0x64, 0x72, 0x74, 0x78 ! moparadise: .byte 0x04, 0x55, 0x54 ! motrident: .byte 0x09, 0x50, 0x51, 0x52, 0x57, 0x58, 0x59, 0x5a ! motseng: .byte 0x07, 0x26, 0x2a, 0x23, 0x24, 0x22 ! movideo7: .byte 0x08, 0x40, 0x43, 0x44, 0x41, 0x42, 0x45 ! mooakvga: .byte 0x08, 0x00, 0x07, 0x4e, 0x4f, 0x50, 0x51 ! mo_S3: .byte 0x04, 0x54, 0x55 ! mounknown: .byte 0x02 ! msb = Cols lsb = Rows: ! The first two modes are standard vga modes available on any vga. ! ! mode 0 is 80x50 and mode 1 is 80x28 ! ! dscati: .word 0x5032, 0x501c, 0x8419, 0x842c, 0x641e, 0x6419 ! dscahead: .word 0x5032, 0x501c, 0x842c, 0x8419, 0x841c, 0xa032, 0x5042 ! dsccandt: .word 0x5032, 0x501c, 0x8419, 0x8432 ! dsccirrus: .word 0x5032, 0x501c, 0x8419, 0x842c, 0x841e, 0x6425 ! dsceverex: .word 0x5032, 0x501c, 0x5022, 0x503c, 0x642b, 0x644b, 0x8419, 0x842c, 0x501e, 0x641b, 0xa040, 0x841e ! dscgenoa: .word 0x5032, 0x501c, 0x5020, 0x642a, 0x8419, 0x841d, 0x8420, 0x842c, 0x843c, 0x503c, 0x5042, 0x644b ! dscparadise: .word 0x5032, 0x501c, 0x8419, 0x842c ! dsctrident: .word 0x5032, 0x501c, 0x501e, 0x502b, 0x503c, 0x8419, 0x841e, 0x842b, 0x843c ! dsctseng: .word 0x5032, 0x501c, 0x503c, 0x6428, 0x8419, 0x841c, 0x842c ! dscvideo7: .word 0x5032, 0x501c, 0x502b, 0x503c, 0x643c, 0x8419, 0x842c, 0x841c ! dscoakvga: .word 0x5032, 0x501c, 0x2819, 0x5019, 0x503c, 0x843c, 0x8419, 0x842b ! dsc_S3: .word 0x5032, 0x501c, 0x842b, 0x8419 ! dsunknown: .word 0x5032, 0x501c modesave: .word SVGA_MODE ! This must be last --- 1331,1378 ---- idoakvga: .ascii "OAK VGA " idS3: .byte 0x81, 0x82, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95 .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa8, 0xb0 + idclgd54xx: .ascii "CL-GD54" ! ! Manufacturer: Numofmodes+8: Mode: ! Number of modes is the number of chip-specific svga modes plus the extended ! ! modes available on any vga (currently 9) ! moati: .byte 13, 0x23, 0x33, 0x22, 0x21 ! moahead: .byte 14, 0x22, 0x23, 0x24, 0x2f, 0x34 ! mocandt: .byte 11, 0x60, 0x61 ! mocirrus: .byte 13, 0x1f, 0x20, 0x22, 0x31 ! moeverex: .byte 19, 0x03, 0x04, 0x07, 0x08, 0x0a, 0x0b, 0x16, 0x18, 0x21, 0x40 ! mogenoa: .byte 19, 0x58, 0x5a, 0x60, 0x61, 0x62, 0x63, 0x64, 0x72, 0x74, 0x78 ! moparadise: .byte 11, 0x55, 0x54 ! motrident: .byte 16, 0x50, 0x51, 0x52, 0x57, 0x58, 0x59, 0x5a ! motseng: .byte 14, 0x26, 0x2a, 0x23, 0x24, 0x22 ! movideo7: .byte 15, 0x40, 0x43, 0x44, 0x41, 0x42, 0x45 ! mooakvga: .byte 15, 0x00, 0x07, 0x4e, 0x4f, 0x50, 0x51 ! mo_S3: .byte 11, 0x54, 0x55 ! moclgd54xx: .byte 18, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 ! mounknown: .byte 9 ! msb = Cols lsb = Rows: ! The first two modes are standard vga modes available on any vga. ! ! mode 0 is 80x50, mode 1 is 80x28, mode 3 is 80x36, mode 4 is 80x44, ! ! mode 5 is 80x30 (60 Hz), mode 6 is 80x34 (60 Hz), mode 7 is 80x40 (60 Hz), ! ! mode 8 is 80x15 (60 Hz) and mode 9 is 40x15 (60 Hz) ! ! dscati: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x8419, 0x842c, 0x641e, 0x6419 ! dscahead: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x842c, 0x8419, 0x841c, 0xa032, 0x5042 ! dsccandt: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x8419, 0x8432 ! dsccirrus: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x8419, 0x842c, 0x841e, 0x6425 ! dsceverex: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x5022, 0x503c, 0x642b, 0x644b, 0x8419, 0x842c, 0x501e, 0x641b, 0xa040, 0x841e ! dscgenoa: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x5020, 0x642a, 0x8419, 0x841d, 0x8420, 0x842c, 0x843c, 0x503c, 0x5042, 0x644b ! dscparadise: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x8419, 0x842c ! dsctrident: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x501e, 0x502b, 0x503c, 0x8419, 0x841e, 0x842b, 0x843c ! dsctseng: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x503c, 0x6428, 0x8419, 0x841c, 0x842c ! dscvideo7: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x502b, 0x503c, 0x643c, 0x8419, 0x842c, 0x841c ! dscoakvga: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x2819, 0x5019, 0x503c, 0x843c, 0x8419, 0x842b ! dsc_S3: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x842b, 0x8419 ! ! clgd54xx modes: 80x50, 80x28, 80x36, 80x44, 80x30, 80x34, 80x40, 80x15, 40x15, 132x25, 132x28, 132x36, 132x44, 132x50, 132x30, 132x34, 132x40, 132x60 ! dscclgd54xx: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f, 0x8419, 0x841c, 0x8424, 0x842c, 0x8432, 0x841e, 0x8422, 0x8428, 0x843c ! dsunknown: .word 0x5032, 0x501c, 0x5024, 0x502c, 0x501e, 0x5022, 0x5028, 0x500f, 0x280f modesave: .word SVGA_MODE ! This must be last