Compatibility: AT EGA VGA
Expects: AX    1302H
BH    video page
CX    number of characters to display (see below)
DH,DL row,column to start writing
ES:BP address of start of char/attr string to write
Returns: (none)
Info: This displays a specially-formatted string, letting you specify a
video attribute for each character.

ES:BP This must point to an array of character/attribute pairs.  For

DB 'H',07H, 'e',07H, 'l',07H, 'l',07H, 'o',07H, '!',0fH

Would display Hello! (actually, the "Hello" would be in white
characters on a black background (video attribute 07H), and "!"
would be in bright white on a black background (attribute 0fH).

Warning! This function treats these characters specially:

CR  (0dH)     cursor to start of same line
LF  (0aH)     cursor to current clm on next lower line
BEL (07H)     beep the speaker

When it encounters one of these characters, it takes the listed
control action, and then treats the next byte as a character-not
the attribute for the (undisplayed) control action.

CX specifies the number of characters in the string (it will
typically be half the length of the char/attr array).

Notes:   This fn requires that you modify BP.  When calling from high-
level languages such as C, be very to save and restore BP,
since it is used to keep track of the "stack frame".

  Be careful about the odd handling of CR, LF, and BEL.  After
"displaying" any of these characters, the char/attr pairs are
out of sync.  Thus, this is not useful as a generic tool for
restoring screen data that has been copied directly from video
memory (see Video Memory Layouts).

See Also: INT 10H 1300H (write string)
INT 10H 1301H (write string & update cursor)
INT 10H 1303H (write char/attr cells and update cursor)
- -

INT 10H 1302H: Display Character/Attribute Cells