166 lines
6.4 KiB
Prolog
166 lines
6.4 KiB
Prolog
Keywords: IBM ENHANCED GRAPHICS ADAPTER EGA BIOS INTERFACE ROUTINES
|
||
|
||
This file contains "underground" undocumented BIOS interface routines as
|
||
submitted by Joel Seiferas for the IBM Enhanced Graphics Adapter.
|
||
Hopefully, IBM will come up with "official" documentation shortly, but
|
||
this may help until that time.
|
||
|
||
|
||
The following is a concantenation of the messages from Joel Seiferas,
|
||
70516,1704 concerning the IBM Enhanced Graphics Adapter and its BIOS
|
||
interfaces. Hopefully, this will help until IBM releases "official"
|
||
information....
|
||
|
||
|
||
#: 80780 Sub-topic 1 - User Updates/Fixes
|
||
Sb: EGA doc.
|
||
26-Dec-84 19:01:04
|
||
Fm: Joel Seiferas 70516,1704
|
||
To: EGA owners
|
||
|
||
|
||
The IBM Enhanced Graphics Adapter is comes without usage
|
||
instructions, so the following message should be useful to purchasers.
|
||
|
||
Date: Fri, 21 Dec 84 22:50:00 EST
|
||
From: BrucCowan%UMich-MTS.Mailnet@MIT-MULTICS.ARPA
|
||
Subject: IBM Enhanced Graphics Adaptor Information
|
||
|
||
Here are some very brief instructions for the BIOS interface for the
|
||
enhanced graphics adaptor. No guarantees about accuracy. Hope they are
|
||
of some use. I haven't figured out most of them. Parenthesized comments
|
||
indicate some things I have found out. I'd like any more information
|
||
anyone comes up with.
|
||
|
||
EGA extensions to ROM BIOS INT 10H.
|
||
|
||
(AH)=0 Set mode
|
||
(AL) 0-7 as before (7 is now user selectable)
|
||
D graphics 320x200 on color (5153) monitor
|
||
E graphics 640x200
|
||
F graphics 640x350 on monochrome monitor
|
||
10 graphics 640x350 on 5154 monitor
|
||
All above have graphics memory at A000:0. If you use one of the
|
||
old modes, the memory appears at the standard address for the
|
||
old adaptors (B000:0 or B800:0).
|
||
|
||
(AH)=10 Set palette registers
|
||
(AL)=0 Set individual palette register
|
||
BL = palette register to set, BH = value to set
|
||
(AL)=1 Set overscan register
|
||
BH = value to set
|
||
(AL)=2 Set all palette registers and overscan
|
||
ES:DX points to a 17 byte table
|
||
bytes 0-15 are the palette values, respectively
|
||
byte 16 is the overscan value
|
||
(AL)=3 Toggle intensify/blinking bit
|
||
BL - 0 enable intensify
|
||
BL - 1 enable blinking
|
||
|
||
(AH)=11 Character generator routine
|
||
Note: This call will initiate a mode set.
|
||
(AL)=00 User alpha load
|
||
ES:BP - pointer to user table
|
||
CX - count to store
|
||
DX - character offset into table
|
||
BL - block to load
|
||
BH - number of bytes per character
|
||
(AL)=01 ROM monochrome set
|
||
BL - block to load
|
||
(AL)=02 ROM 8x8 double dot
|
||
BL - block to load
|
||
(AL)=03 Set block specifier
|
||
BL - char gen block specifier
|
||
D3-D2 attr bit 3 one, char gen 0-3
|
||
D1-D0 attr bit 3 zero, char gen 0-3
|
||
Note: When using AL=03, a function call AX=1000H, BX=0712H is
|
||
recommended to set the color planes resulting in 512
|
||
characters and 8 consistent colors.
|
||
|
||
Note: The following interface (AL=1x) is similar in function to
|
||
(AL=0x) except that:
|
||
- page 0 must be active
|
||
- points (bytes/char) will be recalculated
|
||
- rows will be calculated from the following:
|
||
int (200 or 350) / points - 1
|
||
- CRLEN will be calculated from:
|
||
(rows+1)*CRCOLS*2
|
||
- the CRTC will be reprogrammed as follows:
|
||
R09H = points - 1 max scan line
|
||
R09H only done in mode 7
|
||
R0AH = points - 2 cursor start
|
||
R0BH = 0 cursor end
|
||
R12H = vert disp end
|
||
(rows+1)*points-1
|
||
R14H = points underline loc
|
||
The above register calculations must be close to the original
|
||
table values or undetermined results will occur.
|
||
|
||
Note: The following interface is designed to be called only
|
||
immediately after a mode set. Failure to adhere to this
|
||
practice may cause undetermined results.
|
||
|
||
(AL)=10 User alpha load
|
||
ES:BP - pointer to user table
|
||
CX - count to store
|
||
DX - character offset into table
|
||
BL - block to load
|
||
BH - number of bytes per character
|
||
(AL)=11 ROM monochrome set
|
||
BL - block to load
|
||
(AL)=12 ROM 8x8 double dot
|
||
BL - block to load (this gives 43 lines in char mode)
|
||
|
||
Note: The following interface is designed to be called only
|
||
immediately after a mode set. Failure to adhere to this
|
||
practice may cause undetermined results.
|
||
(AL)=20 User graphics chars INT 01FH (8x8)
|
||
ES:BP - pointer to user table
|
||
(AL)=21 User graphics chars
|
||
ES:BP - pointer to user table
|
||
CX - points (bytes/char)
|
||
BL - row specifier
|
||
BL = 0 user
|
||
DL - rows
|
||
BL = 1 14 (0EH)
|
||
BL = 2 25
|
||
BL = 3 43
|
||
(AL)=22 ROM 8x14 set
|
||
BL - row specifier
|
||
(AL)=23 ROM 8x8 double dot
|
||
BL - row specifier (this seems wrong, use BL=# rows)
|
||
|
||
(AL)=30 Information
|
||
CX - points
|
||
DL - rows
|
||
BH - 0 return current INT 1FH ptr
|
||
ES:BP - ptr to table
|
||
BH - 1 return current INT 44H ptr
|
||
ES:BP - ptr to table
|
||
BH - 2 return ROM 8x14 ptr
|
||
ES:BP - ptr to table
|
||
BH - 3 return ROM double dot
|
||
ES:BP - ptr to table
|
||
BH - 4 return ROM double dot (top)
|
||
ES:BP - ptr to table
|
||
BH - 5 return ROM alpha alternate 9x14
|
||
ES:BP - ptr to table
|
||
|
||
(AH)=12 Alternate select
|
||
(BL)=10 Return EGA information
|
||
BH = 0 - color mode in effect
|
||
= 1 - monochrome mode in effect
|
||
BL = memory value
|
||
0 0 - 064K 0 1 - 128K
|
||
1 0 - 192K 1 1 - 256K
|
||
CH = feature bits
|
||
CL = switch setting
|
||
(BL)=20 Select alternate print screen routine
|
||
|
||
(AH)=13 Write string
|
||
This is the same as documented in the PC/AT Technical Reference
|
||
BIOS listing (but is new for non ATs).
|
||
AH)=13 Write string
|
||
This is the same as documented
|
||
|
||
|