Int 10 Fn 1C - Video - Save/restore Video State (ps50+,vga) [V]

AH = 1Ch
AL = function
00h return state buffer size

Return: BX = number of 64-byte blocks needed
01h save video state
ES:BX -> buffer
02h restore video state
ES:BX -> buffer containing previously saved state
CX = requested states (see #0046)

Return: AL = 1Ch if function supported

Notes: many BIOSes corrupt the video registers when saving the state, so a
program should restore the state immediately after saving it (the
saved data is uncorrupted)
the BIOS data area consists of the 96 bytes from 0040h:0049h-00A8h
this function is not supported when DOS/V is running
this function may be a better VGA installation check than the usual
INT 10/AX=1A00h, since some late-model EGA cards (such as the ATI
EGA Wonder) supported that call

See Also: AX=1A00h,MEM 0040h:00A8h

Bitfields for requested states:
Bit(s) Description (Table 0046)
0 video hardware (see #0047)
1 BIOS data areas
2 color registers and DAC state (see #0048)
3-15 unused (0)

Format of VGA video hardware state:
Offset Size Description (Table 0047)
00h BYTE sequencer index register
01h BYTE CRTC index register
02h BYTE graphics controller index register
03h BYTE attribute controller index register
04h BYTE feature controller register
05h 4 BYTEs sequencer registers
09h BYTE sequencer register 0
0Ah 25 BYTEs CRTC registers 0-8
23h 16 BYTEs palette registers 00h-0Fh
33h 4 BYTEs attribute registers 10h-13h
37h 9 BYTEs graphics controller registers 0-8
40h BYTE CRTC base address (low)
41h BYTE CRTC base address (high)
42h BYTE plane 0 latch
43h BYTE plane 1 latch
44h BYTE plane 2 latch
45h BYTE plane 3 latch

Format of VGA DAC state:
Offset Size Description (Table 0048)
00h BYTE read/write mode DAC
01h BYTE pixel address
02h BYTE pixel mask
03h 768 BYTEs color data (256 triples)
303h BYTE color select register