Newsgroup: it.comp.lang.c++
Titolo: Set_vga_mode

Vorrei sapere come impostare la modalità VGA in C++ (anche istruzioni
assembler).
Grazie.




In C/C++ puoi utilizzare le librerie fornite dal compilatore (se il
compilatore che usi ne fornisce) ad esempio TurboC usa initgraph per
inizializzare l'ambiente grafico con l'utilizzo di un'opportuno driver (file
.BGI) che deve stare nella directory del programma.
Oppure utilizzare chiamate dell'interrupt 10H dell'MSDOS (se usi DOS)
per la chiamata:
AH = 00H
AL = Modalità:
  Testo 80x25 B/N
               AL = 2
  Testo 80x25 16 Colori
               AL = 3
  Grafico 320x200 4 colori
               AL = 4
  Grafico 640x350 64 colori
               AL = 16
Per la grafica penso "VESA" puoi utilizzare i seguenti valori:
  Grafico 640x480 256 colori
                BX = 101H
                AL = 2
                AH = 4F
  Grafico 800x600 256 colori
                regs(BX) = 103H
                AL = 2
                AH = 4F
Esistono anche altre combinazioni, ma dovrei frugare negli archivi.
Questa e' una SUB in fortran77 che funziona piuttosto bene
C +-----------------------------------------------------------+
C | SETGRAPH: Setta la modalita' video GRAFICA|
C +-----------------------------------------------------------+
       SUBROUTINE SETGRAPH(L)
        integer*2 AX,BX,CX,DX,BP,DI,SI,ES,DS,FLAGS
        parameter (AX=1,BX=2,CX=3,DX=4,BP=5,DI=6,SI=7)
        parameter (ES=8,DS=9,FLAGS=10)
        integer NUM$REGS
        parameter (NUM$REGS=10)
        integer*1 ahal(2)
        integer*1 bhbl(2)
        integer*1 dhdl(2)
        integer*1 chcl(2)
        integer*2 regs(NUM$REGS)
        equivalence(regs(AX),ahal)
        equivalence(regs(BX),bhbl)
        equivalence(regs(CX),chcl)
        equivalence(regs(DX),dhdl)
        IF (L.LE.0) THEN
C   Testo 80x25 B/N
                regs(BX) = 0
                ahal(1) = 2
                ahal(2) = 0
        ELSE IF (L.LE.1) THEN
C  Testo 80x25 16 Colori
                regs(BX) = 0
                ahal(1) = 3
                ahal(2) = 0
        ELSE IF (L.LE.2) THEN
C  Grafico 320x200 4 colori
                regs(BX) = 0
                ahal(1) = 4
                ahal(2) = 0
        ELSE IF (L.LE.3) THEN
C  Grafico 640x350 64 colori
                regs(BX) = 0
                ahal(1) = 16
                ahal(2) = 0
        ELSE IF (L.LE.4) THEN
C  Grafico 640x480 256 colori
                regs(BX) = 257
                ahal(1) = 2
                ahal(2) = 79
        ELSE IF (L.LE.5) THEN
C  Grafico 800x600 256 colori
                regs(BX) = 259
                ahal(1) = 2
                ahal(2) = 79
        ELSE
           PRINT *,'Modalità video possibili:'
           PRINT *,'0  - Testo 80x25 B/N;'
           PRINT *,'1  - Testo 80x25 16 Colori'
           PRINT *,'2  - Grafico 320x200 4 colori;'
           PRINT *,'3  - Grafico 640x350 64 colori;'
           PRINT *,'4  - Grafico 640x480 256 colori;'
           PRINT *,'5  - Grafico 800x600 256 colori;'
        ENDIF
        IF (L.GE.0.AND.L.LE.5) call INTR(16,regs)
        RETURN
        END
--------------------------------------------------------------------
Spero di esserti stato di aiuto.
Ciao Lucio