ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ ³ ³ ³ 00h ³ Set BaudRate ³ AL = Baud/Parity/SB ³ AX = Status bits ³ BaudRate code in AL: ³ ³ ³ ³ DX = Port number ³ (See function 03h) ³ Bits [7:5] 000 = 19200, 001 = 38400, ³ ³ ³ ³ (NOP if DX=00FFh) ³ ³ 010 = 300, 011 = 600, 100 = 1200, ³ ³ ³ ³ ³ ³ 101 = 2400, 110 = 4800, 111 = 9600. ³ ³ ³ ³ ³ ³ Parity: [4:3] 00 or 10 = none, ³ ³ ³ ³ ³ ³ 01 = odd, 11 = even. ³ ³ ³ ³ ³ ³ StopBits: [2:2] 0 = 1, 1 = 2 ³ ³ ³ ³ ³ ³ CharLength: 5 bits plus value [1:0] ³ ³ ³ ³ ³ ³ Support for [4:0] = 00011 required of ³ ³ ³ ³ ³ ³ driver, others optional ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 01h ³ Transmit ³ AL = Character ³ AX = Status bits ³ Character is queued for transmission. ³ ³ ³ character ³ DX = Port number ³ (See function 03h) ³ If there is room in the transmitter ³ ³ ³ (wait for ³ (NOP if DX=00FFh) ³ ³ buffer when this call is made, the ³ ³ ³ room in the ³ ³ ³ character will be stored and control ³ ³ ³ buffer) ³ ³ ³ returned to caller. If the buffer is ³ ³ ³ ³ ³ ³ full, the driver will wait for room. ³ ³ ³ ³ ³ ³ This can be dangerous when used in ³ ³ ³ ³ ³ ³ combination with flow control (see ³ ³ ³ ³ ³ ³ Function 0Fh) ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 02h ³ Receive ³ DX = Port number ³ AH = 00h ³ The next character in the input ring ³ ³ ³ character ³ (NOP if DX=00FFh) ³ AL = Input character ³ buffer is returned to the caller. If ³ ³ ³ (wait for ³ ³ ³ none available, the driver will wait ³ ³ ³ available) ³ ³ ³ for input. ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 03h ³ StatusRequest ³ DX = Port number ³ AX = Status bits ³ Bits are: ³ ³ ³ ³ (NOP if DX=00FFh) ³ ³ AH[6:6] 1 = Output buffer empty ³ ³ ³ ³ ³ ³ AH[5:5] 1 = Output buffer not full ³ ³ ³ ³ ³ ³ AH[1:1] 1 = Input buffer overrun ³ ³ ³ ³ ³ ³ AH[0:0] 1 = Characters in input buffer³ ³ ³ ³ ³ ³ AL[7:7] 1 = Carrier Detect signal ³ ³ ³ ³ ³ ³ AL[3:3] 1 = Always (never 0) ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 04h ³ Initialize ³ DX = Port number ³ AX = 1954h (success) ³ Required before I/O can take place on ³ ³ ³ driver (port) ³ (DX=00FFh special) ³ BL = Max function ³ comm port. When DX = 00FFh, then ³ ³ ³ ³ ³ supported, not ³ any initialization needed to make the ³ ³ ³ ³ ³ incl. 7Eh - BFh ³ keyboard/display available for FOSSIL ³ ³ ³ ³ {BX = 4F50H ³ BH = FOSSIL revision ³ use should be performed. BX = 4F50h ³ ³ ³ ³ ES:CX = ^C flag byte}³ level of driver ³ signals that ES:CX points to a flag ³ ³ ³ ³ (Optional) ³ ³ byte in the application that the ³ ³ ³ ³ ³ DTR raised on port ³ driver should increment when its ³ ³ ³ ³ ³ BaudRate preserved ³ keyboard routines detect a Ctl-C. ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ ³ ³ ³ 05h ³ Deinitialize ³ DX = Port number ³ None ³ Disengages driver from comm port. ³ ³ ³ driver (port) ³ (DX=00FFh special) ³ ³ Should be done when operations on the ³ ³ ³ ³ ³ DTR not changed ³ port are complete. IF DX = 00FFh, ³ ³ ³ ³ ³ ³ then the initialization that was ³ ³ ³ ³ ³ ³ performed when FOSSIL function 04h ³ ³ ³ ³ ³ ³ with DX = 00FFh should be undone. ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 06h ³ Raise/lower ³ AL = 01h - Raise DTR ³ None ³ Used to control Data Terminal Ready ³ ³ ³ DTR ³ = 00h - Lower DTR ³ ³ signal line on com port. This line ³ ³ ³ ³ DX = Port number ³ DTR TRUE if AL = 01h ³ usually has some effect on modem ³ ³ ³ ³ (NOP if DX=00FFh) ³ FALSE if AL = 00h ³ operation (most modems will drop ³ ³ ³ ³ ³ ³ carrier if DTR is lowered, for ³ ³ ³ ³ ³ ³ example). ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 07h ³ Return system ³ None ³ AL = timer tick ³ Returns statistics needed to do some ³ ³ ³ timer params ³ ³ interrupt number ³ critical timing in any MS-DOS system. ³ ³ ³ ³ ³ (NOT vector) ³ The interrupt number in AL can be ³ ³ ³ ³ ³ AH = number of ticks ³ used to intercept a timer interrupt ³ ³ ³ ³ ³ per second ³ that happens (AH) times per second. ³ ³ ³ ³ ³ DX = (apx.) number ³ DX is essentially 1000/AH. Function ³ ³ ³ ³ ³ of mS / tick ³ 16h is the preferred way to install ³ ³ ³ ³ ³ ³ timer tick code. AH and DX should ³ ³ ³ ³ ³ ³ be accurate for the 16h timer tick. ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 08h ³ Flush output ³ DX = Port number ³ None ³ This is used to wait for all output ³ ³ ³ buffer ³ (NOP if DX=00FFh) ³ ³ to complete. If flow control is active³ ³ ³ ³ ³ ³ it is possible for this code never to ³ ³ ³ (wait for all ³ ³ ³ return control to the caller. (See ³ ³ ³ output to end)³ ³ ³ function 0Fh) ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 09h ³ Purge output ³ DX = Port number ³ None ³ Zero the output buffer. Returns to ³ ³ ³ buffer ³ (NOP if DX=00FFh) ³ ³ the caller immediately. Characters ³ ³ ³ ³ ³ ³ that have not been transmitted yet ³ ³ ³ (immediately ³ ³ ³ are lost. ³ ³ ³ zero buffer) ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ ³ ³ ³ 0Ah ³ Purge input ³ DX = Port number ³ None ³ Zeroes the input buffer. If any flow ³ ³ ³ buffer ³ (NOP of DX=00FFh) ³ ³ control restraint has been employed ³ ³ ³ ³ ³ ³ (dropping RTS or transmitting XOFF) ³ ³ ³ ³ ³ ³ the port will be "released" (by doing ³ ³ ³ ³ ³ ³ the reverse, raising RTS or sending ³ ³ ³ ³ ³ ³ XON). Returns to caller immediately. ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 0Bh ³ Transmit ³ AL = Character ³ AX = 0001h if sent ³ Character is queued for transmission. ³ ³ ³ character ³ DX = Port number ³ = 0000h if not ³ If there is room in the transmitter ³ ³ ³ ("no wait") ³ (NOP if DX=00FFh) ³ sent ³ buffer when this call is made, the ³ ³ ³ ³ ³ ³ character will be stored and control ³ ³ ³ ³ ³ ³ returned to caller with AX=1. If the ³ ³ ³ ³ ³ ³ buffer is full, control is returned ³ ³ ³ ³ ³ ³ to caller with AX=0. This allows the ³ ³ ³ ³ ³ ³ application to make its own decisions ³ ³ ³ ³ ³ ³ on how to deal with "buffer full". ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 0Ch ³ "Peek ahead" ³ DX = Port number ³ AH = 00h ³ The next character in the input ring ³ ³ ³ input buffer ³ (NOP if DX=00FFh) ³ AL = input character ³ buffer is returned to the caller. If ³ ³ ³ (non-dest ³ ³ (if available) ³ none available, the driver returns a ³ ³ ³ read-ahead) ³ ³ AX = FFFFh (if none ³ value of FFFFH. This "read" does not ³ ³ ³ ³ ³ (available) ³ actually remove a character from the ³ ³ ³ ³ ³ ³ input buffer! ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 0Dh ³ "Peek ahead" ³ None ³ AX = keyboard char ³ The next character in the keyboard ³ ³ ³ KB buffer ³ ³ (if available) ³ buffer is returned to the caller. If ³ ³ ³ (non-dest ³ ³ AX = FFFFh (if none ³ none available, the driver returns a ³ ³ ³ read-ahead) ³ ³ available) ³ value of FFFFH. This "read" does not ³ ³ ³ ³ ³ ³ actually remove a character from the ³ ³ ³ ³ ³ ³ input buffer! For function keys, IBM ³ ³ ³ ³ ³ ³ PC scan codes must be returned. ³ ³ ³ ³ ³ ³ ³ ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ ³ ³ 0Eh ³ Read Keyboard ³ None ³ AX = keyboard char ³ Return the next character from the ³ ³ ³ (wait if no ³ ³ ³ keyboard buffer. Wait for a keystroke ³ ³ ³ char avail) ³ ³ ³ if the buffer is empty. For function ³ ³ ³ ³ ³ ³ keys, IBM PC scan codes are required. ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ³ ³ | ³ 0Fh ³ Enable/Disable³ AL = Flow control ³ None ³ AL[0:0] 1= enables remote to restrain | ³ ³ com port flow ³ bit mask ³ ³ FOSSIL transmitter using XON/XOFF; | ³ ³ control ³ DX = Port number ³ ³ AL[1:1] 1= enables modem restraint of | ³ ³ ³ (NOP if DX=00FFh) ³ ³ FOSSIL transmitter using CTS and | ³ ³ ³ ³ ³ FOSSIL restraint of modem using RTS | ³ ³ ³ ³ ³ AL[3:3] 1= enables FOSSIL to restrain | ³ ³ ³ ³ ³ remote using XON/XOFF. | ³ ³ ³ ³ ³ | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 10h ³ Enable/disable³ AL = Flags byte ³ AX = 0001h - CtlC/K ³ AL[0:0] 1 = enable/disable CtlC/CtlK | ³ ³ Ctl-C/Ctl-K ³ DX = Port number ³ detected since ³ check (driver will set internal flag| ³ ³ check, ³ (NOP if DX=00FFh) ³ last call ³ which is returned by this function | ³ ³ Enable/disable³ ³ = 0000h - CtlC/K ³ when it detects a CtlC/CtlK). | ³ ³ transmitter ³ ³ not detected ³ AL[1:1] 1 = stop transmitter | ³ ³ ³ ³ since last ³ 0 = release previous stop | ³ ³ ³ ³ call ³ This is used primarily for programs | ³ ³ ³ ³ ³ that can't trust XON/XOFF at FOSSIL | ³ ³ ³ ³ ³ level (such as BBS software). | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 11h ³ Set cursor ³ DH = Row (0-based) ³ None ³ Identical to IBM PC BIOS INT 10h, | ³ ³ location ³ DL = Col (0-based) ³ ³ subfunction 02h. FOSSIL should do | ³ ³ ³ ³ ³ sanity checks but software should not | ³ ³ ³ ³ ³ assume that that is the case. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 12h ³ Read Cursor ³ None ³ DH = Row (0-based) ³ Identical to IBM PC BIOS INT 10h, | ³ ³ Location ³ ³ DL = Col (0-based) ³ subfunction 03h. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 13h ³ Write char ³ AL = Character ³ None ³ ANSI processing is a requirement of | ³ ³ (ANSI support)³ ³ ³ this call. It therefore should not be | ³ ³ ³ ³ ³ considered re-entrant, since DOS | ³ ³ ³ ³ ³ might be used (via ANSI.SYS) | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 14h ³ Enable/disable³ AL = 01h - Enable ³ None ³ FOSSIL will force the system to reboot³ ³ ³ "watchdog" ³ watchdog ³ ³ if Carrier Detect on the specified ³ ³ ³ ³ = 00h - Disable ³ ³ port drops while "watchdog" is ON. ³ ³ ³ ³ watchdog ³ ³ ³ ³ ³ ³ DX = Port number ³ ³ It is not necessary for the port to ³ ³ ³ ³ (NOP if DX=00FFh) ³ ³ be "active" (Function 04h) for this ³ ³ ³ ³ ³ ³ function to be used. ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ³ ³ | ³ 15h ³ Write char ³ AL = Character ³ None ³ Write character to screen using | ³ ³ (re-entrant) ³ ³ ³ re-entrant code. ANSI processing may | ³ ³ ³ ³ ³ not be assumed. This call may be used | ³ ³ ³ ³ ³ by DOS device drivers. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 16h ³ Insert/delete ³ AL = 01h - Insert ³ AX = 0000h - operation³ Allows FOSSIL to manage timer tick | ³ ³ function from ³ = 00h - Delete ³ was successful ³ chain, which provides some measure of | ³ ³ timer tick ³ ES = Function segment ³ = FFFFh - operation³ security over just snagging the | ³ ³ ³ DX = Function offset ³ was unsuccessful ³ interrupt. Use "insert" instead of | ³ ³ ³ ³ ³ grabbing the vector and "remove" in | ³ ³ ³ ³ ³ place of restoring it. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 17h ³ Reboot system ³ AL = 00h - Cold boot ³ None (hopefully!) ³ Provides a machine-independent way | ³ ³ ³ = 01h - Warm boot ³ ³ for a "troubled" application to reset | ³ ³ ³ ³ ³ the system. Some machines may not | ³ ³ ³ ³ ³ support both "flavors" of bootstrap, | ³ ³ ³ ³ ³ in which case the setting of AL will | ³ ³ ³ ³ ³ not have any effect. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 18h ³ Read block ³ CX = Count ³ AX = Number of chars ³ Transfer as many characters as are | ³ ³ ³ ES = Segment of ³ actually moved ³ available into the specified user | ³ ³ ³ user buffer ³ ³ buffer, up to the maximum specified | ³ ³ ³ DI = Offset of ³ ³ in CX. ES and DI will not be modified | ³ ³ ³ user buffer ³ ³ by this call. The actual number of | ³ ³ ³ DX = Port number ³ ³ characters transferred will be in AX. | ³ ³ ³ (NOP if DX=00FFh) ³ ³ This function does not wait for more | ³ ³ ³ ³ ³ characters to become available if the | ³ ³ ³ ³ ³ number in CX exceeds the number of | ³ ³ ³ ³ ³ characters currently stored. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 19h ³ Write block ³ CX = Count ³ AX = number of chars ³ Transfer as many characters as will | ³ ³ ³ ES = Segment of ³ actually moved ³ fit, from the specified user buffer ³ ³ ³ ³ user buffer ³ ³ into the output buffer, up to the ³ ³ ³ ³ DI = Offset of ³ ³ maximum specified in CX. ES and DI ³ ³ ³ ³ user buffer ³ ³ will not be modified by this call. ³ ³ ³ ³ DX = Port number ³ ³ The actual number of characters ³ ³ ³ ³ (NOP if DX=00FFh) ³ ³ transferred will be in AX. ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ³ ³ | ³ 1Ah ³ Start/stop ³ AL = 01h - Start break³ None ³ Used for special applications such as | ³ ³ sending break ³ 001 - Stop break ³ ³ certain high speed modems. Resets | ³ ³ ³ DX = Port number ³ ³ all transmit flow control restraints | ³ ³ ³ (NOP if DX=00FFh) ³ ³ (such as an XOFF received from remote)| ³ ³ ³ ³ ³ Init (Function 4) or UnInit (Function | ³ ³ ³ ³ ³ 5) will stop an in-progress Break. | ³ ³ ³ ³ ³ Note: the application must determine | ³ ³ ³ ³ ³ the "length" of the BREAK. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 1Bh ³ GetDriverInfo ³ CX = Size of buffer ³ AX = Number of bytes ³ Offset 0 (word) = Structure size | ³ ³ ³ ES = Segment of ³ transferred ³ 2 (byte) = FOSSIL spec version | ³ ³ ³ user buffer ³ ³ 3 (byte) = Driver rev level | ³ ³ ³ DI = Offset of ³ User buffer contains ³ 4 (dwrd) = Pointer to ASCII ID | ³ ³ ³ user buffer ³ info structure (used ³ 8 (word) = Input buffer size | ³ ³ ³ DX = Port number ³ to get special data ³ 0A (word) = Bytes avail (input) | ³ ³ ³ (If DX=00FF, ³ from the driver) ³ 0C (word) = Output buffer size | ³ ³ ³ port data will ³ ³ 0E (word) = Bytes avail (output)³ ³ ³ ³ not be valid). ³ ³ 10 (byte) = Screen width, chars ³ ³ ³ ³ For port data to be ³ ³ 11 (byte) = Screen height, chars³ ³ ³ ³ accurate, port must ³ ³ 12 (byte) = Baud rate mask ³ ³ ³ ³ be active. ³ ³ (See call 00h) ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Code ³ Function ³ Function Parameters ³ Returned by Function ³ Explanation ³ ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ³ ³ | ³ 7Eh ³ Install user ³ AL = Appendage code ³ AX = 1954h - FOSSIL ³ Used to install user appendages into | ³ ³ appendage ³ ES = Segment of user ³ driver present ³ the INT 14h dispatcher. Appendage | ³ ³ ³ appendage entry ³ = Anything but ³ codes 80h - BF are supported. Codes | ³ ³ ³ point ³ 1954h - FOSSIL ³ 80h - 83h are reserved. The error | ³ ³ ³ DX = Offset of user ³ driver not ³ return, BH = 00h and AX = 1954h, | ³ ³ ³ appendage entry ³ present ³ should mean that another appendage | ³ ³ ³ point ³ BL = Code assigned to ³ has already been installed with the | ³ ³ ³ ³ appendage (same ³ code specified in AL. The appendage | ³ ³ ³ ³ as AL at entry) ³ will be entered via a far call when- | ³ ³ ³ ³ BH = 01h - Operation ³ ever INT 14h call is made with AL | ³ ³ ³ ³ successful ³ equal to the appendage code. The | ³ ³ ³ ³ = 00h - Operation ³ appendage should return to the INT | ³ ³ ³ ³ unsuccessful ³ 14h dispatcher via a far return. The | ³ ³ ³ ³ ³ INT 14h dispatcher should not modify | ³ ³ ³ ³ ³ any registers prior to making the far | ³ ³ ³ ³ ³ call to the appendage and after the | ³ ³ ³ ³ ³ appendage returns control to the | ³ ³ ³ ³ ³ dispatcher. | ³ ³ ³ ³ ³ | ÆÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ ³ ³ ³ ³ ³ | ³ 7Fh ³ Remove user ³ AL = Appendage code ³ AX = 1954h ³ Used to remove a user appendage that | ³ ³ appendage ³ ES = Segment of user ³ BL = Code assigned to ³ was installed using function 7Fh. An | ³ ³ ³ appendage entry ³ appendage (same ³ error return means that either the | ³ ³ ³ point ³ as AL at entry) ³ entry point specified in ES:DX did | ³ ³ ³ DX = Offset of user ³ BH = 01h - Operation ³ not match the entry point currently | ³ ³ ³ appendage entry ³ successful ³ in the dispatcher table for the code | ³ ³ ³ point ³ = 00h - Operation ³ given in AL, or that no entry for | ³ ³ ³ ³ unsuccessful ³ the code given in AL currently exits. | ³ ³ ³ ³ ³ | ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ