GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


archive:programming:svgatrix
                          (S)VGA TRICKS - PART 1
  1. ————————————————————————-

This little text was originally placed in the Imphobia MAG 12. I've added

some little things and I want it to be available for every programmers and
not only sceners.  I hope you'll like it and I encourage you to D/L the
Imphobia MAGs (great MAG, Darky !!!) available on ftp.cdrom.com /pub/demos
and ftp.arosnet.se to read other amazing programming tricks and more...
--------------------------------------------------------------------------
References:
-----------

- "Programmer's Guide to the EGA and VGA Cards", Second Edition, Richard

Ferraro, Addison-Wesley. (The Third Edition exists !!!)

- "VGADOC 4/WHATVGA 2.00", Finn Thoegersen. Available on nice FTPs like

ftp.arosnet.se and hagar.arts.kuleuven.ac.be (vgadoc4b.zip)
Well, i just want to speak here about tricking the VGA/SVGA adapter ...
95% of the VLB video cards are SVGA and support at least 15 bits mode (32k).

100% of the PCI video cards support 32k, 65k, and 16M colors (in 24 or 32 bits), and support FLAT linear mode. I don't know any VLB/PCI video cards with less than 1M ram. So since the scene has moved on 486 VLB more than 2 years ago, why didn't they use the features of the VLB-videos in demos ???

I'll speak here about 12 points:

(1) History (5) S3 805 bug (9) 50Hz/60Hz (2) 320x200x256 > 1 page (6) UNIVBE "safe" modes (10) 320x256 (3) 320x200 Hicolor (7) No Mode-X with SVGA (11) 120Hz (4) S3 Trio/Vision limitations (8) DRAMs speed up (12) BitBLT intro

                                ==========
                                1. HISTORY
                                ==========
As far as i know,  the first full SVGA demo i've seen is  the demo presented

by Realtech at ASM 95. But, if i remember, the rulez of the ASM 95 party was that the demo had to run on a 100% VGA display too. Some times before, some groups like Impact Studios and their "Project Angel" demo implemented stuffs using the SVGA properties (i.e. 320x200x256 chained and banked). Even Complex have used some tricks in their famous demo "Dope" to reduce wait states on Cirrus Logic video cards. The problem of custom SVGA routs is obviously the incompatibility with future generations of video cards and that is probably why only a few guyz have attempted to play with SVGA.

But  since  february 1995,  a new weapon is born which is called UNIVBE 5.1.

This nice VBE driver developped by Scitech offers you a 100% VBE 2.0 interface (giving you an acces to FLAT linear addressing), and last but not least, plenty of new video modes (the one they can manage with your video cards), in particular 320x200x65k and 320x200x256 multipages. When i got the beta release in early february 95, I was just developping my own way to handle the SVGA, but i had some probs to get my code working on all video cards.

With the release of UniVBE 5.1,  i  immediatly  thought that everyone should

use it in demos, to get really high quality gfx, in particular in 3D demos. But since most parties were forcing people to use VGA, i think that no many groups were ready to adopt it, and so we've seen many fake-18 bits modes and other cheats to make the illusion, and blah blah …

The opportunity to launch UniVBE 5.1 in the demo scene was Wired 95, because

some members of my crew (not me) were in the organizing staff, and because i really believed in Wired. I've done all my possible to make them allow SVGA support (specially Hicolor and even True Color) with UniVBE 5.1… and they have done it. At Wired 95, i think that 2 demos used SVGA features:

1) Realtech's "Countdown" which supports VBE 2.0 FLAT linear, video modes from

 320x100 up to 1600x1200 !!!! (but still in 256 colors),  and even S3 BitBLT
 support (however some probs on S3-805 ;-) ).

2) Our demo "Hurtless", which also supports VBE 2.00 (or 1.2), and 640x200 &

 320x200  32k  colors,  320x200x256  16 pages  (like "Project Angel"),  with
 UniVBE 5.1 if present,  or with custom routines if not present,  BitBLT for
 Cirrus Logic,  Advanced Logic,  S3, Primus, ... ;  DRAM speed up for S3 and
 Cirrus Logic.
Then, during november 95, the demo A-Colors came, which supports 32k and 16M

(!!) colors. At The Party 95, Realtech used 65K colors in their demo "6th sense", really nice, (if you can run it !!!). And more recently, Complex used 65K colors in their intro "Supermax" presented at The Gathering 96.

But in fact UniVBE 5.1 has some limitations that we must consider if we want

to run our code on every Video cards. In newsgroups, i've yet read some mails speaking about problems to run such demos (like "Why doesn't Supermax run on my S3 Trio", …). In fact some video modes are "safe" and some others "not", and even the new UniVBE 5.2 will not change that … but i'll speak about that in the next lines …

   ====================================================================
   2. HOW TO DO 320x200x256 WITH MORE THAN 1 PAGE, WITHOUT UNIVBE 5.1 ?
   ====================================================================
The following tricks may be used if UniVBE isn't present.
There are 3 ways:

a) Init mode 13h and enable access to bank registers

 You  have  to do a specific code to enable the bank registers, and then use
 a specific  code  to  switch  the  banks.  If you want a nice collection of
 specific codes,  I suggest you to D/L vgadoc4b.zip  (see in the beginning).
 This is the only way to get multipage on a S3, for example, because  method
 'b' doesn't work on such card.

b) Set 640x??? mode en then half the horizontal values

 I think this is the best method,  because  you start from a SVGA mode where
 all the bank registers are enabled. So you don't have to do a specific code
 to enable the banks and you can even use VESA calls to switch the banks !!!
 Moreover,  this  is the only solution if you want to get 320x200 multipages
 on Cirrus Logic video cards. I think this works on 70% of the VGAs.

h320 LABEL WORD

      DW 2D00h      ; 3d4/00  horizontal total
      DW 2701h      ; 3d4/01  horizontal display enable end
      DW 2802h      ; 3d4/02  horizontal blank start
      DW 9003h      ; 3d4/03  horizontal blank end
      DW 2B04h      ; 3d4/04  horizontal retrace start
      DW 8005h      ; 3d4/05  horizontal retrace end
      DW 2813h      ; 3d4/13  logical width
      DW 0901h      ; 3c4/01  clock mode register
      mov   ax,4f01h
      mov   bx,101h  ; 640x480x256 (60Hz)
      int   10h
 
      ; remove tho following lines
      ; if you want a FLAT linear mode (need a VESA 2.00)
      ;
      ; mov   ax,4f01h
      ; mov   bx,4101h  ; 640x480x256 (60Hz)
      ; int   10h
      ; 
      ; but now, your video page is somewhere above the first megabyte
      ; use the adequate VBE 2.00 system call to get the PHYSICAL address of 
      ; the video page. VBE 2.00 documentation is available on 
      ; ftp.scitechsoft.com 
      mov   dx,3d4h  ; remove protection
      mov   al,11h
      out   dx,al
      inc   dl
      in    al,dx
      and   al,7fh
      out   dx,al
      dec   dl
        
      ; horizontal parameters
      mov   esi,OFFSET h320
      REPT  6+1
      outsb
      inc   dl
      outsb
      dec   dl
      ENDM
      mov   dl,0c4h
      outsb         ; clock
      inc   dl
      outsb
      ;----------------------------------
      ; we are in 320x480x256 (60Hz) !!!!
      ;----------------------------------
      mov   dx,3d4h  ; double the lines
      mov   al,9
      out   dx,al
      inc   dl
      in    al,dx
      and   al, NOT(31)
      or    al, 1
      out   dx,al
      ;------------------------------------
      ; Now we have 320x240x256 (60Hz) !!!!
      ;------------------------------------
      ; hey these values are dumped from Mode 13h ;-)
      ;
      ; misc output
       mov   dx,3cch   ; clock reg read
       in    al,dx     ; get current Vertical/Horizontal clock
       and   al,0Fh    ; keep horizontal clock
       or    al,60h    ; 400 scanlines V-clock
       mov   dl,0c2h   ; clock reg write
       out   dx,al   
     
       mov   dl,0d4h   ; CRTC port
       mov   ax,0bf06h ; vertical total
       out   dx,ax
       mov   ax,01f07h ; overflow reg
       out   dx,ax
       mov   ax,09c10h ; vertical retrace start
       out   dx,ax
       mov   ax,08e11h ; vertical retrace end
       out   dx,ax
       mov   ax,08f12h ; vertical display enable end
       out   dx,ax
       mov   ax,09615h ; vertical blank start
       out   dx,ax
       mov   ax,0b916h ; vertical blank end
       out   dx,ax
       ;---------------------------------------------
       ; Now we have 320x200x256 but in 60Hz :-( !!!!
       ;---------------------------------------------

c) enable a 128k page in a0000-bffff to get 2 pages

 This doesn't work on every cards. It works on the Cirrus Logic and possibly
 on some Tsengs (?), and ...  I suggest you to do a test. Make sure that you
 don't  have  EMM  or  QEMM using the space between b0000 and bffff (you can
 test it by checking if there is RAM in this zone before enabling the 128k).
 On Cirrus Logic, it only works in SVGA modes :-(.
       mov    dx,3ceh          ; active 128k adressing
       mov    al,06
       out    dx,al
       inc    dl 
       in     al,dx            ; rem: dx=3cf/3ce=6            
       and    al,NOT(1100y)    ; Video RAM should be mapped on a000-b7ff
       out    dx,al 
But  even  with  these 3 methods, there are still video cards on which it is

impossible to get a full working multipage mode (ie. S3 805)

           ===================================================
           3. HOW TO DO 320x200 HICOLOR WITHOUT UniVBE 5.1 ???
           ===================================================
The following trick may be used if UniVBE is not present.
On  most  SVGA  HiColor  cards,  you  can  obtain  320x200  HiColor  from  a

640x480x256 or 640x400x256 mode (VESA 101h and 100h respectively). This is because most HiColor DACs are inspired from early Sierra DAC (which combines 2 consecutive bytes to form a color), but they don't use the same value to enter in HiColor. So we also need 640x480 Hicolor, just to dump the DAC value in this mode. 640x480 Hicolor should be supported by every BIOS because it's a Windows mode ;-).

For  example,  if your video card has a Sierra like DAC,  you can do 320x200

hicolor using the following method:

       ;  SIERRA DAC like method (works on 75% of the cards) !!!
       mov   ax,4f01h
       mov   bx,110h  ; set VESA 640x480x32K colors (works on VESA 1.2)
       int   10h      ; (60 Hz)
      ; remove tho following lines
      ; if you want a FLAT linear mode (need a VESA 2.00)
      ;
      ; mov   ax,4f01h
      ; mov   bx,4110h ; 640x480x32K (60Hz)
      ; int   10h
      ; 
      ; but now, your video page is somewhere above the first megabyte
      ; use the adequate VBE 2.00 system call to get the PHYSICAL address of 
      ; the video page. VBE 2.00 documentation is available on 
      ; ftp.scitechsoft.com 
       mov   dx,3c8h
       in    al,dx    ; reset to normal mode
       mov   dx,3c6h
       in    al,dx    ; FLIP-FLOP (see Ferraro's book for more precisions)
       in    al,dx
       in    al,dx
       in    al,dx    ; enable RS1
       
       in    al,dx    ; dump the DAC value in HiColor
       mov   HDAC,al  ; save it !!!
       mov   dx,3c8h
       in    al,dx    ; reset to normal mode 
       mov   ax,4f01h
       mov   bx,101h  ; set VESA 640x480x256 colors (works on VESA 1.2)
       int   10h      ; (60 Hz)
       mov   dx,3c8h
       in    al,dx    ; reset to normal mode
       mov   dx,3c6h
       in    al,dx
       in    al,dx
       in    al,dx
       in    al,dx    ; enable RS1
       
       mov   al,HDAC  ; get HiColor DAC value
       out   dx,al    ; set IT !!!!
       mov   dx,3c8h
       in    al,dx    ; reset to normal mode 
       ;----------------------------------------
       ; You are now in 320x480x32K (60 Hz) !!!!
       ;----------------------------------------
       mov   dx,3d4h  ; double the lines
       mov   al,9
       out   dx,al
       inc   dl
       in    al,dx
       and   al, NOT(31)
       or    al, 1
       out   dx,al
       ;------------------------------------
       ; Now we have 320x240x32K (60Hz) !!!!
       ;------------------------------------

* ; hey these values are dumped from Mode 13h ;-) ; ; misc output mov dx,3cch ; clock reg read in al,dx ; get current Vertical/Horizontal clock and al,0Fh ; keep horizontal clock or al,60h ; 400 scanlines V-clock mov dl,0c2h ; clock reg write out dx,al mov dl,0d4h ; CRTC port mov ax,0bf06h ; vertical total out dx,ax mov ax,01f07h ; overflow reg out dx,ax mov ax,09c10h ; vertical retrace start out dx,ax mov ax,08e11h ; vertical retrace end out dx,ax mov ax,08f12h ; vertical display enable end out dx,ax mov ax,09615h ; vertical blank start out dx,ax mov ax,0b916h ; vertical blank end out dx,ax ;——————————————— ; Now we have 320x200x32K but in 60Hz :-( !!!! ;——————————————— Notes: - If you start from 640x400, you'll get a 320x200x32K 70Hz, but the problem is that 640x400x256 is not present on every video cards (ie. Cirrus Logic, …). However 640x400x256 is done on every video cards by UniVBE 5.1, but in this case, if 320x200x32K is possible, UniVBE will provide it to you and it is not necessary to do it by hand !!! - You can switch in a 65K mode in a similar manner. - You can get 320x350 or multiples if instead of the values dumped from Mode 13h in *, you use the values of the EGA mode 640x350… (the 350 scanlines

V-clock is A0h)

- You can call the "setdac15_" procedure of VGADOC4 to switch the DAC and to

avoid  the  Sierra  FLIP-FLOP.  setdac15_, (or setdac16_, setdac24_) is more
general, it supports BrookTree DAC, ...  and even S3 Trio (but in this case,
the screen becomes totally crasy ;-) ). This works on 85% of the cards.
If your application is designed to run on 486s,  I  suggest  you  use  a 32K

display (becoz there are VLB and ISA boards supporting only 15bits/pix) with both LINEAR and BANKED adressing support. If it's designed for Pentium, 65K LINEAR is preferable ( I don't think there exists a PCI card without 65K and LINEAR adressing support).

                   =====================================
                   4. S3 TRIO/VISION 864/964 LIMITATIONS
                   =====================================
The new S3 family uses a new integrated RAMDAC wich is not  compatible  with

the old "Sierra"-like DAC wich was on S3-805, …

This new RAMDAC seems not to be able to handle 320x200 in  Hicolor/Truecolor

mode, so you have to make a version of your application runing in a mode derivated from 640x480 Hicolor to be certain.

S3 Trios are only able to display  16.7M colors  with  32 bits/pix  and  not

24 bits/pix !!! This require a 2M adapter, so maybe 65K is to preferable to 16.7M.

We can't ignore S3 Trios because they are one of the best-selled videocards.
               =============================================
               5. S3 805 PROBLEMS WITH 320x200x256 MULTIPAGE 
               =============================================
In particular the mode offered by UniVBE 5.1..  This  mode  is  obtained  by

enabling banking in mode 13h. This works on all S3, but on the 805 series (many S3 VLBs) and may be on the 911 (i haven't tested), the pair and impair rows are inverted ! Which is far to be aesthetic !!! So regular mode 13h has still a reason to exist !!!

                 =======================================
                 6: THE UniVBE MODES THAT ARE "SAFE" !!!
                 =======================================
The UNIVBE modes that you will get on every 1M True colors VLB/PCI cards are

(I don't consider modes above 640x480) :

        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        640x480x256 (60Hz)  640x480x32k (60Hz)  640x480x65k (60Hz)
        640x400x256 (70Hz)  640x400x32k (70Hz)  640x480x65k (70Hz)
        640x350x256 (70Hz)  640x350x32k (70Hz)  640x480x65k (70Hz)
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

But you can alter the vertical ratio without problem, simply by ajusting the character height:

          mov dx,3d4h
          mov al,9
          out dx,al
          inc dl
          in  al,dx
          and al, NOT(31)
          or  al, height
          out dx,al
          with 0 <= height <= 31

Example: if you set 640x480x256, you have

       with height = 0 : 640x480x256   -> /1
                   = 1 : 640x240x256   -> /2
                   = 2 : 640x160x256   -> /3
                   = ...

Note: However the 800x600 and 1024x768 modes are safe, they can have problems

     with a video projector, so use them as a bonus.
                           ====================
                           7: NO X-MODE IN SVGA
                           ====================
I've read some articles on the Net and in the PCGPE, I think,  talking about

using Mode X with a 640x400x256 or 640x240x256 display. The idea is not bad , because with conventionnal Mode X, you can address 256k of Video RAM without banking. So Mode X should offer a way to use such videos modes without banking on every video cards (even old ISA).

But... this is true if you suppose that your SVGA card works like a VGA card

in such modes … and that is NOT true !!! New generations of cards are no more Mode X compatible in Hi-Res !!! If you try such code on S3, for example, you will get some surprises.

                         ===========================
                         8: DRAMs SPEED UP / BOOSTER
                         ===========================

a) You can obtain better performance with a Cirrus Logic 542x, if you add

  these lines in your code (even with Mode X !) :
  --------------------------------------------------------------------------
      mov  dx,3c4h
mov  al,0fh
out  dx,al
inc  dl
in   al,dx
and  al,NOT(8+16+32)
      or   al,(6 SHL 3)           ; 32 bit mode + CRT FIFO depth control
out  dx,al
dec  dl
mov  al,16h
out  dx,al
inc  dl
in   al,dx
and  al,15
or   al,(0 SHL 4)+(2 SHL 6) ; delay for mem Write I/O
      out  dx,al
It  basically  reduces  the  DRAMs  wait states. I think that Complex used a

similar trick in "Dope". Normally there are no probs, but it's always a good idea to allow the user to disable the booster.

b) S3 cards can be accelerated by the following code :

  1. ————————————————–

; code hacked from S3SPEEDUP / meschede ; available on ftp.uni-muenster.de /pub/meschede/…

; read(port, index, value) ; write(port, index, value) ; dx = port ; dx = port ; al = index ; al = index ; value → ah ; ah = value Read3D4 PROC NEAR Write3D4 PROC NEAR

       mov  dx,3d4h                       mov  dx,3d4h
       out  dx,al                         out  dx,al
       mov  ah,al                         xchg ah,al
       inc  dx                            inc  dx
       in   al,dx                         out  dx,al
       xchg ah,al                         xchg ah,al
       dec  dx                            dec  dx
       ret                                ret

Read3D4 ENDP Write3D4 ENDP

; enable extensions ExtON PROC NEAR

       mov  ax,4838h ; extensions enable (enable extended registers)
       call Write3D4 ; write(3d4h, 38h, 48h)
       mov  ax,0A039h; extensions enable2
       call Write3D4 ; write(3d4h, 39h, a0h)
       ret

ExtON ENDP

; disable extensions ExtOFF PROC NEAR

       mov  ax,0038h ; disable extended registers
       call Write3D4 ; write(3d4h, 38h, 00h)
       mov  ax,0039h ; disable2
       call Write3D4 ; write(3d4h, 39h, 00h)
       ret

ExtOFF ENDP

; enable linear and set vidmem to 0a0000h !!!!!! MAP_A000H PROC NEAR

       pusha
       mov  bl,0ECh
       mov  bh,10h
       mov  cx,000Ah
       call ExtON   ; enable extensions
       mov  al,058h ; linear aperture options / bit 2
       call Read3D4 ; ah = read(3d4h, 58h)
       and  ah,0ECh ; clear bit 0,1 and 4
       call Write3D4; write(3d4h, 58h, new AH)
       mov  al,059h ; bit 0-1: linear memory address bit 8-9
       mov  ah,ch
       call Write3D4; write(3d4h, 59h, 00h)
       inc  al      ; 05Ah : bit 0-7 = linear mem address bit 0-7
       mov  ah,cl   ; in 64k units ???
       call Write3D4; write(3d4h, 5Ah, 0Ah)
       mov  al,058h ; linear aperture options
       call Read3D4 ; ah = read(3d4h, 58h)
       and  ah,bl   ; and ah,ECh -> clear bit 0,1 and 4
       or   ah,bh   ; or ah,10h (OR or ah,00h) -> set bit 4
       call Write3D4; write(3d4h, 58h, new AH)
       call ExtOFF  ; disable extensions
       popa
       ret

MAP_A000H ENDP

FAST_WRITE_BUFFER_ON PROC NEAR

       pusha
       call  ExtON   ; enable extensions
       mov   al,40h  ; bit 0: if set enables 8514/A mode
       call  Read3D4 ;   * 3: (801,805,928) Fast Write Buffer ON *
       or    ah,08h  ;     6: (801,805,928) Zero Wait State OFF (EISA)
       call  Write3D4; set bit 3 to ON
       call  ExtOFF  ; disable extensions
       popa
       ret

FAST_WRITE_BUFFER_ON ENDP

If you want to boost an SVGA mode banked, just type:

       call  MAP_A000h
       call  FAST_WRITE_BUFFER_ON

If you want to boost an SVGA mode FLAT linear, just type:

       call  FAST_WRITE_BUFFER_ON
                    ====================================
                    9: 320x200x256 50Hz AND 60Hz CHAINED
                    ====================================
If  you  want 50Hz chained mode (why ???), as in the demo "Xtal" by Complex,

just type this code:

      mov ax,13h
      int 10h       ; regular mode 13h chained
      mov dx,3c2h   ; misc output
      mov al,0e3h   ; clock
      out dx,al
      mov dx,3d4h
      mov ax,07006h ; Vertical Total
      out dx,ax
      mov ax,03E07h ; Overflow
      out dx,ax
      mov ax,0F310h ; Vertical start retrace
      out dx,ax
      mov ax,08C11h ; Vertical end retrace
      out dx,ax
      mov ax,08F12h ; Vertical display enable end
      out dx,ax
      mov ax,0E715h ; Vertical blank start
      out dx,ax
      mov ax,00416h ; Vertical blank end
      out dx,ax
It  works  on  every  VGA !!!  Maybe some probs with VGA-2-RGB converters or

projectors…

The 320x200x256 60Hz version is normally more adapted for RGB projector :
      mov ax,13h
      int 10h       ; regular mode 13h chained
      mov dx,3c2h   ; misc output
      mov al,0e3h   ; clock
      out dx,al
      mov dx,3d4h
      mov ax,0B006h ; Vertical Total
      out dx,ax
      mov ax,03E07h ; Overflow
      out dx,ax
      mov ax,0C310h ; Vertical start retrace
      out dx,ax
      mov ax,08C11h ; Vertical end retrace
      out dx,ax
      mov ax,08F12h ; Vertical display enable end
      out dx,ax
      mov ax,0E715h ; Vertical blank start
      out dx,ax
      mov ax,00416h ; Vertical blank end
      out dx,ax
                           ======================
                           10) 320x256x256 60Hz X
                           ======================
Or the "Amiga PAL mode" ;-), like in "Ninja II" by Melon & Scoop,  just type

this code:

      mov ax,13h
      int 10h       ; regular mode 13h chained
      mov dx,3c4h
      mov ax,0604h
      out dx,ax     ; unchain
      mov dx,3c2h   ; misc output
      mov al,0e3h   ; clock
      out dx,al
      mov dx,3d4h
      mov ax,0D006h ; Vertical Total
      out dx,ax
      mov ax,03E07h ; Overflow
      out dx,ax
      mov ax,0FF10h ; Vertical start retrace
      out dx,ax
      mov ax,0FF11h ; Vertical end retrace
      out dx,ax
      mov ax,0FF12h ; Vertical display enable end
      out dx,ax
      mov ax,00014h ; for mode X
      out dx,ax
      mov ax,0FF15h ; Vertical blank start
      out dx,ax
      mov ax,00616h ; Vertical blank end
      out dx,ax
      mov ax,0e317h ; for mode X
      out dx,ax
This mode works like Mode-X and it works on every VGA !!!  Normally, it will

pass on every RGB converter/projector …

                ===========================================
                11) 320x200x256 120Hz (16 BITS MODE ON VGA)
                ===========================================
The mode used by Tran in his famous demos "Ambiance" and "Luminati" :
      mov ax,13h
      int 10h       ; regular mode 13h chained
      mov dx,3c4h
      mov ax,0604h
      out dx,ax     ; unchain
      mov dx,3d4h
      mov ax,00506h ; Vertical Total
      out dx,ax
      mov ax,01107h ; Overflow
      out dx,ax
      mov ax,0E710h ; Vertical start retrace
      out dx,ax
      mov ax,00011h ; Vertical end retrace
      out dx,ax
      mov ax,0C712h ; Vertical display enable end
      out dx,ax
      mov ax,00014h ; for mode X
      out dx,ax
      mov ax,0EF15h ; Vertical blank start
      out dx,ax
      mov ax,00816h ; Vertical blank end
      out dx,ax
      mov ax,0e317h ; for mode X
      out dx,ax
It works in mode X in order to get 4 pages.

- You just have to flip between 2 screens, one containing the first 8 bits and

the other containing the other 8 bits of the RGB colors.
          RRRRR GGGGGG BBBBB
             to split in
 RRRRRGGG                    GGGBBBBB

(pal and pic 1) and (pal and pic 2)

 1st page                    2nd page

- You can also flip between two traditionnal 256 colors screens to get some

transparency !
The only problem with this mode is that it is totally incompatible with  RGB

projectors used in demos parties. So, this kind of modes is to be used in BBStros, or if you want to use it in a party, you have to do a regular version for RGB projector (using true HiColor, or using fake 18 bits -like Orange, for example-, …).

It works on every VGA !!!!
                           ===================
                           12) Hardware BitBLT
                           ===================
Well,  I  can't  develop  the way to do Hardware BitBLT in this article, but

i'll try to do it in Part II. Just some words:

In fact,  Hardware BitBLT is really (and only?) usefull to clear a screen or

to copy a background in SVGA modes (at least if you don't want to rebuild your code for each BitBLT processor). You can really improve your code if you use a really high definition like 640x480 or 800x600… For my part, i used it in 320x200x32K to scroll a background (128k to restore), and I really got 5 more frames/sec on a 486 DX40, using BitBLT.

BitBLTs are stable in SVGAs modes... Don't use it in VGA modes !!! Don't use

it in the 320x200x256 multipages provided by UniVBE 5.1, and don't use it in 24 bits modes ( 3 BYTES / colors ) (BitBLT gets a bit confused when it has to work with 3 bytes/col, in particular on S3).

Greets to all my friends, all TFL-TDV members,  all kewl guyz of the scene I

got a nice chat with, and all guyz who will greet me and my group in the future ;-)

I especially thanx Bismarck/TFL-TDV and Access/Antares for accepting SVGA at

Wired 95, Wizard/Imphobia and Walken/Impact Studios for some inspirations.

Contact me at the following addresses:
  1. llardin@is1.ulb.ac.be

(until october 1996, after ask to jcardin@is1.ulb.ac.be to know my new

   email)
  
- Laurent Lardinois
  271 chauss‚e de Saint Job 
  1180 Bruxelles, Belgium

                                                 (C) 1996 Type One / TFL-TDV 

* The demo "Hurtless" we presented at Wired 95, featured 320x200/640x200 Hi-Color, 320x200x256 chained multipages, BitBLT, FLAT LINEAR, Video RAM booster support, WITH or WITHOUT UniVBE, and N-Buffering. Have a look if you want to see the thing working (however the demo might be unstable because of the intensive use of Mikmod 2.03 virtual timers … but maybe we'll do a special release with a new version of Mikmod. The SB support is really random). It is available on ftp.cdrom.com, ftp.arosnet.se, and hagar.arts.kuleuven.ac.be *

/data/webs/external/dokuwiki/data/pages/archive/programming/svgatrix.txt · Last modified: 2001/01/08 03:23 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki