home *** CD-ROM | disk | FTP | other *** search
- {
- Hi, would anyone like to tell me how to get the tweaked video
- mode With 4 pages to work With because I'm tired of the 16 color
- 2 page demos I'm making.
-
- Sure, here's an adaptation of some code from Dr. Dobbs magazine on Mode-X.
- I've only posted the routine to set the VGA to 360x240x256 With 3 pages of
- Graphics. Only 3 pages since the increase in resolution Uses more RAM.
- }
-
- Procedure InitVGA360x240;
-
- Const
- GC_inDEX = $03CE; { VGA Graphics Controller }
- SC_inDEX = $03C4; { VGA Sequence controller }
- CrtC_inDEX = $03D4; { VGA Crt Controller }
- MISC_OUTPUT = $03C2; { VGA Misc Register }
- MAP_MASK = $02; { Map Register # }
- READ_MAP = $04; { Read Map Register # }
-
- VMODE_DATA : Array[1..17] of Word =
- ($6B00, { Horizontal total }
- $5901, { Horizontal displayed }
- $5A02, { Start horizontal blanking }
- $8E03, { end horizontal blanking }
- $5E04, { Start H sync. }
- $8A05, { end H sync. }
- $0D06, { Vertical total }
- $3E07, { Overflow }
- $4109, { Cell height }
- $EA10, { V sync. start }
- $AC11, { V sync. end/Prot CR0 CR7 }
- $DF12, { Vertical displayed }
- $2D13, { offset }
- $0014, { DWord mode off }
- $E715, { V Blank start }
- $0616, { V Blank end }
- $E317); { Turn on Byte mode }
-
- begin
- Asm
- mov ax, $13
- int $10
-
- mov dx, SC_inDEX { Sequencer Register }
- mov ax, $0604 { Disable Chain 4 Mode }
- out dx, ax
-
- mov ax, $0100 { (A)synchronous Reset }
- out dx, ax
-
- mov dx, MISC_OUTPUT { VGA Misc Register }
- mov al, $E7 { Use 28Mhz Clock & 60Hz }
- out dx, al
-
- mov dx, SC_inDEX { Sequencer Register }
- mov ax, $0300 { Restart Sequencer }
- out dx, ax
-
- {
- Diasable Write protect For CrtC Registers 0-7, since we are
- about to change the horizontal & vertical timing settings.
- }
- mov dx, CrtC_inDEX { VGA CrtC Registers }
- mov al, $11 { CrtC register 11h }
- out dx, al { Load current value }
- inc dx { Point to data }
- in al, dx { Get CrtC register 11h }
- and al, $7F { Mask out Write protect }
- out dx, al { and send it back }
-
- { Send CrtC data in VMODE_DATA Array to the CrtC. }
- mov dx, CrtC_inDEX { VGA CrtC Registers }
- cld { Forward block load }
- mov si, offset VMODE_DATA { Get parameter data }
- mov cx, 17 { Number of entries in block }
-
- @@1:
- mov ax, ds:[si] { Get next parameter value }
- inc si { Advance to next Word }
- inc si
- out dx, ax { Output next value }
- loop @@1 { Process next value }
-
- { Clear all VGA memory to black. }
- mov dx, SC_inDEX { Select all planes }
- mov ax, $0F02
- out dx, ax
-
- mov ax, VGA_SEG { Point to VGA memory }
- mov es, ax
- mov di, 0
-
- xor ax, ax { clear 256K }
- mov cx, $8000 { 32K * 2 * 4 planes }
- rep stosw
- end;
- end;
- {
- That's about it. The video memory in this mode is organised a bit differently
- than CGA/HERC. It is a lot like the 16 color modes you're probably used to, in
- that you must go through the EGA/VGA Registers to access the memory, by setting
- MAP MASK & PLANE SELECT, etc.
- }