textfiles/programming/ega-prog.pro

166 lines
6.4 KiB
Prolog
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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