[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]

    {
    From: doylep@ecf.toronto.edu (DOYLE  PATRICK)

      I'm having some trouble with a VESA SVGA interface I'm writing.
      As if you had nothing better to do :), I have included my source below.
    It is supposed to make use if the VESA save/restore state function of
    int $10, function $4F04.  The idea is that I have written one "layer" of
    procedures which are simple BIOS interfaces, and they begin with "B".
    Then there is the more advanced layer, which doesn't.  Most of the functions
    work OK, but this one I can't figure out.  If you can see the problem, great.
    If you want more details, mail me at doylep@ecf.utoronto.ca.

      Thanks for any help.  Here's the source:
    }

    type
        SaveWhatEnumType = (Hardware, BIOS,  DAC,   SVGA,
                            Res4,     Res5,  Res6,  Res7,
                            Res8,     Res9,  Res10, Res11,
                            Res12,    Res13, Res14, Res15 );
        SaveWhatType = set of SaveWhatEnumType;
        StateType = record
                          SaveWhat : SaveWhatType;
                          MemSize  : word;
                          SavePtr  : pointer;
                    end;

    const
         SaveAll = [Hardware..SVGA];

    var
       VESAError       : byte;
       ModeSupportList : array [0..1] of set of byte;

    procedure BState (DoWhat  : byte;
                    SaveWhat  : word;
                var    State {: word }  ); assembler;
     asm
        mov AX, $4F04
        mov DL, [DoWhat]
        mov CX, [SaveWhat]
        int $10
        cmp [DoWhat], $00
        jne @NeverMind
        mov word ptr State, BX
       @NeverMind:
     end;

    procedure SaveState (SaveWhat : SaveWhatType; var State : StateType);
     begin
          BState (0, word (SaveWhat), State.MemSize);
          if VESAError <> 0 then
             exit;
          State.SaveWhat := SaveWhat;
          with State do
           begin
                if MemSize <= MaxAvail then
                 begin
                      getmem (SavePtr, MemSize);
                      BState (1, word (SaveWhat), SavePtr^);
                 end
                else
                    VESAError := 3;
           end;
     end;

    procedure SetState  (State : StateType);
     begin
          with State do
               BState (2, word (SaveWhat), SavePtr^);
     end;

[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]