On Sat, 12 Aug 2000, Jeroen Janssen wrote:
> Jeroen Janssen wrote:
> > It seems as if DOS only requires ah=0x0e (write teletype), so I'll have a go at
>this coming weekend.
>
> I have implemented the write teletype function. I currently have the
> code implemented in the ROM BIOS (because I can't compile a seperate VGA
> BIOS for some strange reason), I use the "other" VGA BIOS for every
> function that I haven't implemented yet, so I can gradually implement
> things without having to do everything at once (note that I'm currently
> concentrating on textmodes only in order to see the boot process for
> DOS,etc).
>
> Does someone know what IO I have to send to the VGA controller in order
> for it to do 80x25 textmode? (This is for the VGA set mode function in
> order to set the 80x25 mode upon boot & for clearscreen usage).
The values of BIOS vars and CRT registers that should be changed to set
the selected video mode are stored in special EGA/VGA videostate table the
ptr to which is located at 0x40:0xa8 (from Ralf's Brown intlist):
--------V-M004000A8--------------------------
MEM 0040h:00A8h - VIDEO (EGA/MCGA/VGA) - POINTER TO VIDEO SAVE POINTER
TABLE
Size: DWORD
SeeAlso: INT 10/AH=1Ch
Format of Video Save Pointer Table [EGA/VGA/MCGA only]:
Offset Size Description (Table M037)
00h DWORD ptr to Video Parameter Table
04h DWORD ptr to Parameter Dynamic Save Area, else 0 [EGA/VGA only]
08h DWORD ptr to Alphanumeric Character Set Override, else 0
0Ch DWORD ptr to Graphics Character Set Override, else 0
10h DWORD [VGA only] ptr to Secondary Save Pointer Table, must be
valid
14h DWORD reserved, zero
18h DWORD reserved, zero
Note: table initially in ROM, copy to RAM to alter, then update 40h:A8h.
Format of Secondary Video Save Pointer Table [VGA only]:
Offset Size Description (Table M038)
00h WORD Length of this table in bytes, including this word (1Ah)
02h DWORD ptr to Display Combination Code Table, must be valid
06h DWORD ptr to second Alphanumeric Character Set Override, else 0
0Ah DWORD ptr to User Palette Profile Table, else 0
0Eh DWORD reserved, zero
12h DWORD reserved, zero
16h DWORD reserved, zero
Note: table initially in ROM, copy to RAM to alter, then alter Save Ptr
Table.
Format of Display Combination Code Table [VGA only]:
Offset Size Description (Table M039)
00h BYTE Number of entries in the DCC table at offset 04h
01h BYTE Version number
02h BYTE Maximum display type code that can appear in DCC table
03h BYTE reserved
04h 2N BYTEs Each pair of bytes gives a valid display combination, one
display type per byte (see #M040)
(Table M040)
Values for Display Combination display type:
00h no display
01h MDA with mono display
02h CGA with color display
03h reserved
04h EGA with color display
05h EGA with mono display
06h Professional Graphics Controller
07h VGA with mono display
08h VGA with color display
09h reserved
0Ah MCGA with digital color display
0Bh MCGA with analog mono display
0Ch MCGA with analog color display
FFh unrecognised video system
SeeAlso: #M039
Format of Video Parameter Table [EGA, VGA only]:
Offset Size Description (Table M041)
00h-03h Modes 00h-03h in 200-line CGA emulation mode
04h-0Eh Modes 04h-0Eh
0Fh-10h Modes 0Fh-10h when only 64kB RAM on adapter
11h-12h Modes 0Fh-10h when >64kB RAM on adapter
13h-16h Modes 00h-03h in 350-line mode
17h VGA Modes 00h or 01h in 400-line mode
18h VGA Modes 02h or 03h in 400-line mode
19h VGA Mode 07h in 400-line mode
1Ah-1Ch VGA Modes 11h-13h
Note: An array of 23 [EGA] or 29 [VGA] elements, each element being 64
bytes long. Elements appear in the above order.
Format of Video Parameter Table element [EGA, VGA only]:
Offset Size Description (Table M042)
00h BYTE Columns on screen (see 40h:4Ah)
01h BYTE Rows on screen minus one (see 40h:84h)
02h BYTE Height of character in scan lines (see 40h:85h)
03h WORD Size of video buffer (see 40h:4Ch)
05h 4 BYTEs Values for Sequencer Registers 1-4
09h BYTE Value for Miscellaneous Output Register
0Ah 25 BYTEs Values for CRTC Registers 00h-18h
23h 20 BYTEs Values for Attribute Controller Registers 00h-13h
37h 9 BYTEs Values for Graphics Controller Registers 00h-08h
Format of Video Parameter Table [MCGA only] {guesswork from inspection}:
Offset Size Description (Table M043)
- 16 triplet BYTEs of R,G,B DAC info for 16 colors;
- An array of 11 elements, each element being 32 bytes long.
Elements appear in the order:
Modes 00h,01h in 200-line mode for digital displays
Modes 00h,01h in 400-line mode for analog displays
Modes 02h,03h in 200-line mode for digital displays
Modes 02h,03h in 400-line mode for analog displays
Modes 04h,05h in 200-line mode for digital displays
Modes 04h,05h in 400-line mode for analog displays
Mode 06h in 200-line mode for digital displays
Mode 06h in 400-line mode for analog displays
Mode 11h
Mode 13h in 200-line mode for digital displays
Mode 13h in 400-line mode for analog displays
Format of Video Parameter Table element [MCGA only]:
Offset Size Description (Table M044)
00h BYTE Columns on screen (see 40h:4Ah)
01h BYTE Rows on screen minus one (see 40h:84h)
02h BYTE Height of character in scan lines (see 40h:85h)
03h WORD Size of video buffer (see 40h:4Ch)
05h WORD ??? always zero
07h 21 BYTEs Video data registers 00h-14h to port 3D5h indexed by 3D4h
1Ch BYTE PEL Mask to port 3C6h
1Dh BYTE CGA Mode Control to port 3D8h
1Eh BYTE CGA Border Control to port 3D9h
1Fh BYTE Extended Mode Control to port 3DDh
Format of Video Parameter Dynamic Save Area [EGA, VGA only]:
Offset Size Description (Table M045)
00h 16 BYTEs Last data written to Attribute Contr. Palette Registers
0-15
10h BYTE Last data written to Attribute Controller Overscan
Register
11h-FFh Reserved
Note: Need for table was that EGA registers were
write-only.
Note: If default values (from the Video Parameter Table)
are
over-ridden at a mode set by the VGA User Palette
Profile
Table, then the Dynamic Save Area is updated with
the
default values, not the User Profile ones.
Format of Alphanumeric Character Set Override:
Offset Size Description (Table M046)
00h BYTE Length in bytes of each character in font table
01h BYTE Character generator RAM bank to load, 0=normal
02h WORD Number of characters in font table, normally 256
04h WORD Code of first character in font table, normally 0
06h DWORD ptr to font table
0Ah BYTE Displayable rows (FFh=use maximum calculated value)
0Bh BYTEs Array of mode values to which this font is to pertain
BYTE FFh end of array
Format of Second Alphanumeric Character Set Override:
Offset Size Description (Table M047)
00h BYTE Length in bytes of each character in font table
01h BYTE Character generator RAM bank to load, normally non-zero
02h BYTE reserved
03h DWORD ptr to font table
07h BYTEs Array of mode values to which this font is to pertain
BYTE FFh end of array
Note: Authorities differ, some say same as first override above, but IBM
says it is as shown above
Format of Graphics Character Set Override:
Offset Size Description (Table M048)
00h BYTE Number of displayable character rows
01h WORD Length in bytes of each character in font table
03h DWORD ptr to font table
07h BYTEs Array of mode values to which this font is to pertain
BYTE FFh end of array
Format of User Palette Profile Table [VGA only]:
Offset Size Description (Table M049)
00h BYTE Underlining: 01h=enable in all alphanumeric modes
00h=enable in monochrome alphanumeric modes
only
FFh=disable in all alphanumeric modes
01h BYTE reserved
02h WORD reserved
04h WORD Number (0-17) of Attribute Controller registers in table
06h WORD Index (0-16) of first Attribute Controller register in
table
08h DWORD ptr to table of Attribute Controller registers to override
Table is an array of BYTEs.
0Ch WORD Number (0-256) of video DAC Color registers in table
0Eh WORD Index (0-255) of first video DAC Color register in table
10h DWORD ptr to table of video DAC Color registers to override
Table is ??? triplets ??? of BYTEs???
14h BYTEs array of mode values to which this profile is to pertain
BYTE FFh end of array
--------*-M004000AC--------------------------
The table is quite big and originally is located in Video ROM, but someone
could change ptr to his own table located in RAM if he wants to change
behavior of modes.
Hope this will help. Also don't forget that it's possible to set videomode
without clearing videomemory, to do this you have to set 7th bit of
mode=1.
Uhus