661 lines
18 KiB
Plaintext
661 lines
18 KiB
Plaintext
|
Calling Macros in DOS.INC and BIOS.INC
|
|||
|
|
|||
|
You are responsible for saving and restoring registers used in
|
|||
|
macros. The "Registers used" field identifies registers to save.
|
|||
|
|
|||
|
Macros that accept address parameters use internal macros that
|
|||
|
allow you to specify addresses in several ways. The macro
|
|||
|
automatically identifies the type of the argument and handles it
|
|||
|
appropriately. For example, assume the following declarations:
|
|||
|
|
|||
|
String DB "test$"
|
|||
|
pString DW Str
|
|||
|
fpString DD Str
|
|||
|
|
|||
|
Given these values, the macro @DispStr (which displays the string
|
|||
|
at DS:DX) has the following effects:
|
|||
|
|
|||
|
Kind of argument Example Value loaded
|
|||
|
|
|||
|
Label of byte variable @DispStr String DS:OFFSET String
|
|||
|
Near pointer variable @DispStr pString DS:pString
|
|||
|
Far pointer variable @DispStr fpString fpString[2]:fpString[0]
|
|||
|
Constant @DispStr 0 DS:0
|
|||
|
Pointer in register @DispStr si DS:SI
|
|||
|
Near Pointer with segment @DispStr pString,es ES:pString
|
|||
|
Constant with segment @DispStr 0,es ES:0
|
|||
|
Register with segment @DispStr di,es ES:DI
|
|||
|
|
|||
|
Note that if a far pointer or a segment is given, DS must be
|
|||
|
saved before the macro call and restored afterward. Segments may
|
|||
|
be given as registers, constants, or word variables.
|
|||
|
|
|||
|
In syntax, parameters enclosed in brackets are optional.
|
|||
|
Paramaters sometimes have a leading symbol to indicate that the
|
|||
|
argument must have a certain type, as shown below:
|
|||
|
|
|||
|
Leading Symbol Example Limitation
|
|||
|
|
|||
|
# #return Must be constant
|
|||
|
& &vector Must be offset address as described above
|
|||
|
$ $terminator May be constant or register, but not memory
|
|||
|
|
|||
|
Parameters with no leading symbol may be constants, registers, or
|
|||
|
variables. Parameters are 16-bit except where noted in the description.
|
|||
|
|
|||
|
Symbols must be previously defined before they can be passed as
|
|||
|
arguments to most of the DOS macros. Generally this means that
|
|||
|
data must be declared before code in the source file.
|
|||
|
|
|||
|
DOS Macro Syntax and Description
|
|||
|
|
|||
|
KEYBOARD INPUT
|
|||
|
|
|||
|
@GetKey (01h, 07h, 08h, 0Ch)
|
|||
|
|
|||
|
Gets a keystroke from the keyboard
|
|||
|
|
|||
|
Syntax: @GetKey [#echo] [,[#break] [,#clearbuf]]
|
|||
|
|
|||
|
Arguments: echo = nonzero to echo keystroke - default yes
|
|||
|
break = nonzero to accept Control-C - default yes
|
|||
|
clearbuf = nonzero to clear keyboard buffer - default no
|
|||
|
(Arguments may be omitted to get defaults)
|
|||
|
Return: ASCII code of key in AL
|
|||
|
Registers used: AX used for all, DL used if echo on and ctrl-c off
|
|||
|
|
|||
|
|
|||
|
@GetStr (0Ah)
|
|||
|
|
|||
|
Gets a string from the keyboard
|
|||
|
|
|||
|
Syntax: @GetStr &buffer [,[$terminator] [,[#limit] [,segment]]]
|
|||
|
|
|||
|
Arguments: buffer = Offset of buffer where string will be stored
|
|||
|
Byte 1 = Maximum length of string (before call)
|
|||
|
Byte 2 = Actual length of string (after call)
|
|||
|
Byte 3+ = Bytes of string
|
|||
|
terminator = Terminating byte - usually null (0) or $ (24h)
|
|||
|
limit = Maximum length of string (if not given as
|
|||
|
argument, must be in buffer before macro call)
|
|||
|
segment = Segment of buffer (DS if not given)
|
|||
|
Return: Pointer to string in SI, length of string in BX
|
|||
|
Registers used: AX, DX, BX, SI
|
|||
|
|
|||
|
OUTPUT
|
|||
|
|
|||
|
@DispCh (02h)
|
|||
|
|
|||
|
Displays one or more characters to screen
|
|||
|
|
|||
|
Syntax: @DispCh char [,char]...
|
|||
|
|
|||
|
Arguments: char = 8-bit ASCII code
|
|||
|
Return: Code in AL
|
|||
|
Registers used: AX and DL
|
|||
|
|
|||
|
|
|||
|
@PrtCh (05h)
|
|||
|
|
|||
|
Prints one or more characters to LPT1
|
|||
|
|
|||
|
Syntax: @PrtCh char [,char]...
|
|||
|
|
|||
|
Arguments: char = 8-bit ASCII code
|
|||
|
Return: Code in AL
|
|||
|
Registers used: AX and DL
|
|||
|
|
|||
|
|
|||
|
@DispStr (09h)
|
|||
|
|
|||
|
Displays a $-terminated string
|
|||
|
|
|||
|
Syntax: @DispStr &address [,segment]
|
|||
|
|
|||
|
Arguments: address = Address of string terminated by "$" (24h)
|
|||
|
segment = Segment of address string (DS if not given)
|
|||
|
Return: None
|
|||
|
Registers used: AX and DS
|
|||
|
|
|||
|
DEVICE I/O
|
|||
|
|
|||
|
@Read (3Fh)
|
|||
|
|
|||
|
Reads data from a file or device
|
|||
|
|
|||
|
Syntax: @Read &buffer, length [,[handle] [,segment]]
|
|||
|
|
|||
|
Arguments: buffer = Offset of buffer where data will be stored
|
|||
|
length = Length of data in bytes
|
|||
|
handle = File or device handle; if none given,
|
|||
|
keyboard (handle 0) is assumed
|
|||
|
segment = Segment of address string (DS if not given)
|
|||
|
Return: If carry clear, bytes read in AX
|
|||
|
Registers used: Always AX, DX, BX, and CX; DS if segment changed
|
|||
|
|
|||
|
|
|||
|
@Write (40h)
|
|||
|
|
|||
|
Writes data to a file or device
|
|||
|
|
|||
|
Syntax: @Write &buffer, length, [,[handle] [,segment]]
|
|||
|
|
|||
|
Arguments: buffer = Offset of buffer where data is stored
|
|||
|
length = Length of data in bytes
|
|||
|
handle = File or device handle; if none given, screen
|
|||
|
(handle 1) is assumed
|
|||
|
segment = Segment of address string (DS if not given)
|
|||
|
Return: If carry clear, bytes written in AX
|
|||
|
Registers used: Always AX, DX, BX, and CX; DS if segment changed
|
|||
|
|
|||
|
FILE CONTROL
|
|||
|
|
|||
|
@MakeFil (3Ch, 5Ah, 5Bh)
|
|||
|
|
|||
|
Creates a file
|
|||
|
|
|||
|
Syntax: @MakeFil &path [,[attrib] [,[segment] [,#kind]]]
|
|||
|
|
|||
|
Arguments: path = ASCIIZ string of file
|
|||
|
attrib = File atrribute (0 is default if none given)
|
|||
|
segment = Segment of address string (DS if not given)
|
|||
|
kind = If none given, a file is always created even if
|
|||
|
one already exists. Under DOS 3+ "tmp" can be
|
|||
|
given to create a unique file or "new" to create
|
|||
|
file only if one doesn't already exist.
|
|||
|
Return: If carrry clear, file handle in AX
|
|||
|
Registers used: Always AX, DX, and CX; DS if segment changed
|
|||
|
|
|||
|
|
|||
|
@OpenFil (3Dh)
|
|||
|
|
|||
|
Opens a file for input or output
|
|||
|
|
|||
|
Syntax: @OpenFil &path, #access [,segment]
|
|||
|
|
|||
|
Arguments: path = ASCIIZ string of file
|
|||
|
access = File access code
|
|||
|
segment = Segment of address string (DS if not given)
|
|||
|
Return: If carrry set, error code in AX
|
|||
|
Registers used: Always AX and DX; DS if segment changed
|
|||
|
|
|||
|
|
|||
|
@ClosFil (3Eh)
|
|||
|
|
|||
|
Closes an open file handle
|
|||
|
|
|||
|
Syntax: @ClosFil handle
|
|||
|
|
|||
|
Arguments: handle = Previously opened file handle
|
|||
|
Return: If carrry set, error code in AX
|
|||
|
Registers used: AX and BX
|
|||
|
|
|||
|
|
|||
|
@DelFil (41h)
|
|||
|
|
|||
|
Deletes a specified file
|
|||
|
|
|||
|
Syntax: @DelFil &path [,segment]
|
|||
|
|
|||
|
Arguments: path = Offset of ASCIIZ filespec
|
|||
|
segment = Segment of path (DS if none given)
|
|||
|
Return: If carrry set, error code in AX
|
|||
|
Registers used: AX and DX; DS if segment changed
|
|||
|
|
|||
|
@MoveFil (56h)
|
|||
|
|
|||
|
Moves or renames a file by changing its path specification.
|
|||
|
|
|||
|
Syntax: @MoveFil &old, &new [,[segold] [,segnew]]
|
|||
|
|
|||
|
Arguments: old = Offset of file spec to be renamed
|
|||
|
new = Offset of new file spec
|
|||
|
segold = Segment of old name (DS if none given)
|
|||
|
segnew = Segment of new name (ES if none given)
|
|||
|
Return: If carry set, error code in AX
|
|||
|
Registers used: AX, DX, and DI; DS and ES if corresponding segments changed
|
|||
|
|
|||
|
|
|||
|
@GetFirst (4Eh) and @GetNext (4Fh)
|
|||
|
|
|||
|
Parses file specifications (optionally including wild cards) into
|
|||
|
file names
|
|||
|
|
|||
|
Syntax: @GetFirst &path [,[attribute] [,segment]]
|
|||
|
@GetNext
|
|||
|
|
|||
|
Arguments: path = Offset of ASCIIZ filespec (can have wild cards)
|
|||
|
attribute = File attribute to search for (0 for normal if
|
|||
|
none given)
|
|||
|
segment = Segment of path (DS if none given)
|
|||
|
Return: If carrry set, error code in AX
|
|||
|
Registers used: @GetFirst = AX, CX, and DX; DS if segment changed
|
|||
|
@GetNext = AX only
|
|||
|
|
|||
|
|
|||
|
@GetDTA (1Ah) and @SetDTA (2Fh)
|
|||
|
|
|||
|
Gets or sets the Disk Transfer Address (DTA)
|
|||
|
|
|||
|
Syntax: @GetDTA
|
|||
|
@SetDTA &buffer [,segment]
|
|||
|
|
|||
|
Arguments: buffer = Offset of new DTA buffer
|
|||
|
segment = Segment of new DTA buffer (DS if none given)
|
|||
|
Return: @GetDTA = ES:BX points to DTA
|
|||
|
@SetDTA = None
|
|||
|
Registers used: AX for both; DS and DX for @SetDTA; ES and BX for @GetDTA
|
|||
|
|
|||
|
@GetFilSz (42h)
|
|||
|
|
|||
|
Gets the file size by moving the file pointer to end of the file.
|
|||
|
Note that the file pointer is reset to zero. Thus this macro should
|
|||
|
not be called during operations that move the pointer.
|
|||
|
|
|||
|
Syntax: @GetFilSz handle
|
|||
|
|
|||
|
Arguments: handle = Previously opened file handle
|
|||
|
Return: If carrry clear, file length in DX:AX
|
|||
|
Registers used: AX, BX, CX, and DX
|
|||
|
|
|||
|
|
|||
|
@MovePrtAbs and @MovePtrRel (42h)
|
|||
|
|
|||
|
Moves the file pointer in an open file. The pointer can be moved to
|
|||
|
an absolute position, or relative to its current position.
|
|||
|
|
|||
|
Syntax: @MovePrtAbs handle [,distance]
|
|||
|
@MovePrtRel handle [,distance]
|
|||
|
|
|||
|
Arguments: handle = Previously opened file handle
|
|||
|
distance = Distance to move pointer - must be a 16-bit
|
|||
|
constant or a 16- or 32-bit variable; or
|
|||
|
leave blank and set distance in CX:DX before
|
|||
|
macro call
|
|||
|
Return: If carrry clear, file pointer position in DX:AX
|
|||
|
Registers used: AX, BX, CX, and DX
|
|||
|
|
|||
|
DIRECTORY CONTROL
|
|||
|
|
|||
|
@MkDir, (39h), @RmDir (3Ah), and @ChDir (3Bh)
|
|||
|
|
|||
|
Creates, deletes, or changes to the specified directory
|
|||
|
|
|||
|
Syntax: @MkDir &path [,segment]
|
|||
|
@RmDir &path [,segment]
|
|||
|
@ChDir &path [,segment]
|
|||
|
|
|||
|
Arguments: path = Offset of ASCIIZ string to
|
|||
|
segment = Segment of path (DS if none given)
|
|||
|
Return: If carrry set, error code in AX
|
|||
|
Registers used: AX and DX; DS if segment changed
|
|||
|
|
|||
|
|
|||
|
@GetDir (47h)
|
|||
|
|
|||
|
Returns the current directory of the specified drive
|
|||
|
|
|||
|
Syntax: @GetDir &path [,[drive] [,segment]]
|
|||
|
|
|||
|
Arguments: buffer = Offset of buffer to receive ASCIIZ directory
|
|||
|
drive = 8-bit drive number - 0=current, 1=A, 2=B, etc.
|
|||
|
(0 if none given)
|
|||
|
segment = Segment of path (DS if none given)
|
|||
|
Return: If carrry set, error code in AX
|
|||
|
Registers used: AX, SI, and DL; DS if segment changes
|
|||
|
|
|||
|
|
|||
|
DRIVE CONTROL
|
|||
|
|
|||
|
@GetDrv (0Eh) and @SetDrv (19h)
|
|||
|
|
|||
|
Gets or sets the current drive
|
|||
|
|
|||
|
Syntax: @GetDrv
|
|||
|
@SetDrv drive
|
|||
|
|
|||
|
Argument: drive = 8-bit drive number (0=A, 1=B, etc.)
|
|||
|
Return: @GetDrv = Drive number in AL (0=A, 1=B, etc.)
|
|||
|
@SetDrv = Number of drives in AL
|
|||
|
Registers used: AX for both; DL for @SetDrv
|
|||
|
|
|||
|
|
|||
|
@ChkDrv (36h)
|
|||
|
|
|||
|
Gets various data about a disk
|
|||
|
|
|||
|
Syntax: @ChkDrv [drive]
|
|||
|
|
|||
|
Argument: drive = 8-bit drive number (0=current,A=1, B=2, etc.);
|
|||
|
if none given, current assumed
|
|||
|
Return: AX = Sectors per cluster (-1 if drive invalid)
|
|||
|
BX = Available clusters
|
|||
|
CX = Bytes per sector
|
|||
|
DX = Clusters per drive
|
|||
|
Registers used: AX, BX, CX, and DX
|
|||
|
|
|||
|
PROCESS CONTROL
|
|||
|
|
|||
|
@Exit (4Ch)
|
|||
|
|
|||
|
Exits to DOS with return code
|
|||
|
|
|||
|
Syntax: @Exit [#return]
|
|||
|
|
|||
|
Argument: return = 8-bit code to return to DOS; if none given,
|
|||
|
AL is used
|
|||
|
Return: None
|
|||
|
Registers used: AX
|
|||
|
|
|||
|
|
|||
|
@Exec (4Bh)
|
|||
|
|
|||
|
Executes a child process or an overlay
|
|||
|
|
|||
|
Syntax: @Exec path, params [,[segpath] [,[segparams] [,overlay]]]
|
|||
|
|
|||
|
Arguments: path = Offset of ASCIIZ filespec to be executed
|
|||
|
params = Offset of process parameter block
|
|||
|
segpath = Segment of filespec (DS if none given)
|
|||
|
segparams = Segment of parameter block (ES if none given)
|
|||
|
overlay = If not defined, normal process executed;
|
|||
|
if defined, overlay executed
|
|||
|
Return: If carry set, error code
|
|||
|
Registers used: AX, SI, and DI; DS and ES if corresponding segments given
|
|||
|
|
|||
|
|
|||
|
@GetRet (4Dh)
|
|||
|
|
|||
|
Gets the return code of a child process
|
|||
|
|
|||
|
Syntax: @GetRet
|
|||
|
|
|||
|
Argument: None
|
|||
|
Return: Return code in AX
|
|||
|
Register used: AX
|
|||
|
|
|||
|
|
|||
|
@TSR (31h)
|
|||
|
|
|||
|
Terminates a program, but leaves it resident in memory
|
|||
|
|
|||
|
Syntax: @TSR paragraphs [,#return]
|
|||
|
|
|||
|
Arguments: return = Code to return to DOS; if none, AL used
|
|||
|
paragraphs = Memory in paragraphs (16 bytes) to
|
|||
|
allocate for resident program
|
|||
|
Return: None
|
|||
|
Registers used: AX and DX
|
|||
|
|
|||
|
MEMORY CONTROL
|
|||
|
|
|||
|
@FreeBlok (49h)
|
|||
|
|
|||
|
Frees a block of memory
|
|||
|
|
|||
|
Syntax: @FreeBlok [segment]
|
|||
|
|
|||
|
Argument: segment = Starting address of memory to be freed;
|
|||
|
if none, ES address assumed
|
|||
|
Return: If carry set, error code in AX
|
|||
|
Register used: AX; ES if segment given
|
|||
|
|
|||
|
|
|||
|
@GetBlok (48h)
|
|||
|
|
|||
|
Allocates a block of memory
|
|||
|
|
|||
|
Syntax: @GetBlok paragraphs
|
|||
|
|
|||
|
Argument: paragraphs = Paragraphs (16 bytes) of memory wanted
|
|||
|
Return: AX and ES = Segment address of allocated memory
|
|||
|
BX = Paragraphs actually allocated (may be
|
|||
|
less than requested if memory is short)
|
|||
|
Register used: AX and BX
|
|||
|
|
|||
|
|
|||
|
@ModBlok (48h)
|
|||
|
|
|||
|
Modifies an allocated block of memory
|
|||
|
|
|||
|
Syntax: @ModBlok paragraphs [,segment]
|
|||
|
|
|||
|
Argument: paragraphs = Paragraphs (16 bytes) of memory wanted
|
|||
|
segment = Starting address of memory to be freed;
|
|||
|
if none, ES address assumed
|
|||
|
Return: If carry set, error code in AX, else:
|
|||
|
ES = Segment address of allocated memory
|
|||
|
BX = If carry is clear, paragraphs allocated
|
|||
|
Register used: AX and BX; ES if segment given
|
|||
|
|
|||
|
MISCELLANEOUS
|
|||
|
|
|||
|
@GetDate (2Ah) and @SetDate (2Bh)
|
|||
|
|
|||
|
Gets or sets the system date
|
|||
|
|
|||
|
Syntax: @GetDate
|
|||
|
@SetDate month, day, year
|
|||
|
|
|||
|
Arguments: year = 16-bit year (1980-2099)
|
|||
|
month = 8-bit month (1-12)
|
|||
|
day = 8-bit day (1-31)
|
|||
|
Return: For @GetDate:
|
|||
|
AL = Day of week (0 = Sunday, 1 = Monday, etc.)
|
|||
|
CX = Year (1980-2099)
|
|||
|
DL = Month (1-12)
|
|||
|
DH = Day (1-31)
|
|||
|
For @SetDate:
|
|||
|
AL = If date was valid 0, else -1
|
|||
|
Registers used: AX, CX, and DX
|
|||
|
|
|||
|
|
|||
|
@GetTime (2Ch) and @SetTime (2Dh)
|
|||
|
|
|||
|
Gets or sets the system time
|
|||
|
|
|||
|
Syntax: @GetTime
|
|||
|
@SetTime hour,minute,second,hundredth
|
|||
|
|
|||
|
Arguments: hour = 8-bit hour (0-23)
|
|||
|
minute = 8-bit hour (0-59)
|
|||
|
second = 8-bit hour (0-59)
|
|||
|
hundredth = 8-bit hour (0-99)
|
|||
|
Return: For @GetTime:
|
|||
|
CL = Hour (0-23)
|
|||
|
CH = Minute (0-59)
|
|||
|
DL = Second (0-59)
|
|||
|
DH = Hundredth (0-99)
|
|||
|
For @SetTime:
|
|||
|
AL = If time was valid 0, else -1
|
|||
|
Registers used: AX, CX, and DX
|
|||
|
|
|||
|
|
|||
|
@GetVer (30h)
|
|||
|
|
|||
|
Gets the DOS version
|
|||
|
|
|||
|
Syntax: @GetVer
|
|||
|
|
|||
|
Argument: None
|
|||
|
Return: AL = Major version (0 for versions prior to 2.0)
|
|||
|
AH = Minor version
|
|||
|
BH = OEM serial number
|
|||
|
BL:CX = 24-bit user number
|
|||
|
Register used: AX, BX, and CX
|
|||
|
|
|||
|
@GetInt (35h) and @SetInt (25h)
|
|||
|
|
|||
|
Gets or sets the vector for a specified interrupt routine
|
|||
|
|
|||
|
Syntax: @GetInt #interrupt
|
|||
|
@SetInt #interrupt, &vector [,segment]
|
|||
|
|
|||
|
Arguments: interrupt = 8-bit interrupt number
|
|||
|
vector = Offset of interrupt routine
|
|||
|
segment = Segment of routine - if none given, DS assumed
|
|||
|
for data; segment ignored for code labels
|
|||
|
Return: @GetInt = None
|
|||
|
@SetInt = ES:BX points to interrupt routine
|
|||
|
Registers used: AX for both; ES and BX for @GetInt; DS and DS for @SetInt
|
|||
|
|
|||
|
BIOS Macro Syntax and Description
|
|||
|
|
|||
|
|
|||
|
MODE, PAGE, AND COLOR CONTROL
|
|||
|
|
|||
|
@GetMode (I 10h F 0Fh)
|
|||
|
|
|||
|
Gets the current video mode and page
|
|||
|
|
|||
|
Syntax: @GetMode
|
|||
|
|
|||
|
Arguments: None
|
|||
|
Return: AL = Mode
|
|||
|
AH = Width in characters
|
|||
|
BH = Page
|
|||
|
Registers used: AX and BH
|
|||
|
|
|||
|
|
|||
|
@SetMode (I 10h F 00h)
|
|||
|
|
|||
|
Gets the current video mode and page
|
|||
|
|
|||
|
Syntax: @SetMode mode
|
|||
|
|
|||
|
Arguments: mode = 8-bit video mode
|
|||
|
Return: none
|
|||
|
Registers used: AX
|
|||
|
|
|||
|
|
|||
|
@SetColor (I 10h F 0Bh)
|
|||
|
|
|||
|
Sets the background color
|
|||
|
|
|||
|
Syntax: @SetColor color
|
|||
|
|
|||
|
Arguments: color = 8-bit background color (0-15);
|
|||
|
border color in text modes
|
|||
|
Return: none
|
|||
|
Registers used: AX and BX
|
|||
|
|
|||
|
|
|||
|
@SetPalet (I 10h F 0Bh)
|
|||
|
|
|||
|
Sets the color palette
|
|||
|
|
|||
|
Syntax: @SetPalet color
|
|||
|
|
|||
|
Arguments: color = 8-bit color palette (0-1 for modes 5 and 6)
|
|||
|
Return: none
|
|||
|
Registers used: AX and BX
|
|||
|
|
|||
|
@SetPage (I 10h F 05h)
|
|||
|
|
|||
|
Sets the video page
|
|||
|
|
|||
|
Syntax: @SetPage page
|
|||
|
|
|||
|
Arguments: page = 8-bit page number; 0-3 for modes 2 and 3
|
|||
|
Return: none
|
|||
|
Registers used: AX
|
|||
|
|
|||
|
|
|||
|
CHARACTER AND CURSOR CONTROL
|
|||
|
|
|||
|
@GetCur (I 10h F 04h)
|
|||
|
|
|||
|
Gets the cursor position and size
|
|||
|
|
|||
|
Syntax: @GetCur [page]
|
|||
|
|
|||
|
Arguments: page = 8-bit page with cursor (if none, 0 assumed)
|
|||
|
Return: DL = Column
|
|||
|
DH = Row
|
|||
|
CL = Starting scan line
|
|||
|
CH = Ending scan line
|
|||
|
Registers used: AX, DX, CX, and BH
|
|||
|
|
|||
|
|
|||
|
@SetCurPos (I 10h F 02h)
|
|||
|
|
|||
|
Sets the cursor position
|
|||
|
|
|||
|
Syntax: @SetCurSz [column] [,[row] [,page]]
|
|||
|
|
|||
|
Arguments: column = 8-bit column; if none, DL used
|
|||
|
row = 8-bit row; if none, DH used
|
|||
|
page = 8-bit page with cursor (if none, 0 assumed)
|
|||
|
Return: none
|
|||
|
Registers used: AX, DX, and BH
|
|||
|
|
|||
|
|
|||
|
@SetCurSz (I 10h F 01h)
|
|||
|
|
|||
|
Sets the cursor size and shape by specifying active scan lines. The
|
|||
|
CGA adapter the lines are 0-7. The monochrome adapter has lines 0-13.
|
|||
|
|
|||
|
Syntax: @SetCurSz startline, endline
|
|||
|
|
|||
|
Arguments: startline = 8-bit starting scan line (default CGA=6; MA=12)
|
|||
|
endline = 8-bit ending scan line (default CGA=7; MA=13)
|
|||
|
Return: none
|
|||
|
Registers used: AX and CX
|
|||
|
|
|||
|
@GetChAtr (I 10h F 08h)
|
|||
|
|
|||
|
Gets the character and attribute at the cursor location
|
|||
|
|
|||
|
Syntax: @GetChAtr [page]
|
|||
|
|
|||
|
Arguments: page = 8-bit page to check (if none, 0 assumed)
|
|||
|
Return: AH = Attribute
|
|||
|
AL = ASCII character
|
|||
|
Registers used: AX and BH
|
|||
|
|
|||
|
|
|||
|
@PutChAtr (I 10h F 09h) and @PutCh (I 10h F 0Ah)
|
|||
|
|
|||
|
Puts one or more characters and attributes at the current cursor
|
|||
|
position. For @PutCh, the current attribute is used in text modes
|
|||
|
and any specified attribute is ignored.
|
|||
|
|
|||
|
Syntax: @PutChAtr [character] [,[attrib] [,[page] [,count]]]
|
|||
|
|
|||
|
Arguments: character = 8-bit ASCII character to put; if none, AL used
|
|||
|
attrib = 8-bit attribute to put; if none, BL used
|
|||
|
page = 8-bit page to put on (if none, 0 assumed)
|
|||
|
count = Number to put (if none, 1 assumed)
|
|||
|
Return: AH = Attribute
|
|||
|
AL = ASCII character
|
|||
|
Registers used: AX, BX, CX
|
|||
|
|
|||
|
|
|||
|
@Scroll (I 10h F 06h and 07h)
|
|||
|
|
|||
|
Scrolls a specified window up or down
|
|||
|
|
|||
|
Syntax: @Scroll dist [,[attr] [,[uprow [,[upcol [,[dnrow] [,dncol]]]]]
|
|||
|
|
|||
|
Arguments: dist = 8-bit number of lines to scroll; positive
|
|||
|
scrolls down; negative scrolls up; 0 clears
|
|||
|
attr = 8-bit attribute for blank lines (if none, 07h)
|
|||
|
uprow = Upper left row (if none, CH used)
|
|||
|
upcol = Upper left column (if none, CL used)
|
|||
|
dnrow = Lower right row (if none, DH used)
|
|||
|
dncol = Lower right column (if none, DL used)
|
|||
|
Return: none
|
|||
|
Registers used: AX, CX, DX, and BH
|
|||
|
|
|||
|
|
|||
|
@Cls (I 10h F 06, 08h, and 02h)
|
|||
|
|
|||
|
Clears the screen of the current page
|
|||
|
|
|||
|
Syntax: @Cls
|
|||
|
|
|||
|
Arguments: None
|
|||
|
Return: None
|
|||
|
Registers used: AX, BX, CX, and DX
|
|||
|
|