Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!cwjcc!gatech!udel!rochester!pt.cs.cmu.edu!b.gp.cs.cmu.edu!ralf From: ralf@b.gp.cs.cmu.edu (Ralf Brown) Newsgroups: comp.sys.ibm.pc Subject: Interrupt List 88.9, file INTERRUP.LST 03/07 Message-ID: <3896@pt.cs.cmu.edu> Date: 17 Dec 88 20:04:21 GMT References: <3889@pt.cs.cmu.edu> Organization: Carnegie-Mellon University, CS/RI Lines: 1402 rather than called directly ACh (DV2.2) clear ??? flag ADh (DV2.2) set ??? flag AEh ??? AFh set selected field marker character BYTE character to display at left edge of selected fields BCh disable use of cursor pad for navigating menus, maybe other??? BDh enable use of cursor pad for navigating menus, maybe other??? BEh disable ??? BFh enable ??? C0h make current window topmost in system C1h force current process into foreground C2h make current window topmost in process C3h position mouse pointer relative to origin of current field BYTE rows below upper left corner of field BYTE columns to right of upper left corner of field C4h position mouse pointer relative to origin of given field BYTE field number BYTE rows below upper left corner of field BYTE columns to right of upper left corner of field C5h hide current window C6h show windows for this process C7h hide all windows for this process C8h suspend process and hide all its windows C9h force current process into background CAh make current window bottom-most in process CBh ??? CCh close window CEh reorder windows DWORD pointer to null-terminated list of words each word is segment of object handle for a window MODES 14h to 1Fh "USER STREAMS" normally NOPs, but may be defined by SETESC message to invoke FAR routines, one for each mode number on entry to handler, DS:SI = first byte of actual stream (not header) CX = #bytes in stream ES:DI = window's handle --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE AH = 12h BH = 08h BL = object 00h handle in DWORD on top of stack timer: elapsed time since timer started pointer: number of messages queued to pointer object panel: number of panels in panel file 01h total chars in current task's default window 02h number of messages in task's mailbox (task's handle on stack) 03h number of messages in current task's mailbox 04h number of input buffers queued in task's kbd (handle on stack) 05h number of input buffers queued for current task's default kbd 06h number of objects queued in OBJECTQ (task's handle on stack) 07h number of objects queued in current task's OBJECTQ Return: DWORD on stack is result --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH AH = 12h BH = 09h BL = object 00h handle in DWORD on top of stack window: chars/line timer: timer remaining before timer expires 01h number of chars/line in current task's default window Return: DWORD on top of stack is length --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS AH = 12h BH = 0Ah BL = object 00h handle is DWORD on top of stack window: write characters and attributes timer: start timer for specified interval pointer: set control flags 01h write characters and attributes to task's default window 02h send message/status by value to mailbox (task's handle on stack) 03h send message/status by value to current task's default mailbox 04h set control flags on KEYBOARD object (handle on top of stack) 05h set control flags on task's default KEYBOARD object STACK: (if mailbox) DWORD status DWORD length of message DWORD address (if timer) DWORD duration in 1/100 seconds (if window) DWORD count of characters DWORD address of characters DWORD count of attributes DWORD address of attributes (otherwise) DWORD bits to set For keyboard objects, the bits have the following significance: bit 15 reserved, can't be set bit 14 unused bit 13 reserved, can't be set bit 12-5 unused bit 4 filter all keys (used with handler established by SETESC) bit 3 program continues executing while input in progress bit 2 insert mode active bit 1 keyboard is active bit 0 keyboard is in field mode For pointer objects, the bits have the following significance: bit 15 reserved, can't be set bit 14-8 unused bit 7 mouse pointer is hidden while in window bit 6 get messages even if window not topmost bit 5 get messages even if window not foreground bit 4 mouse button must be held 1/2 second before it "clicks" bit 3 pointer position is relative to screen origin, not window origin bit 2 send message on button release as well as button press bit 1 unused??? bit 0 send message only on button activity, not movement DV-specific, and INT 15h/AX=DE0Fh must have been called first --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS AH = 12h BH = 0Bh BL = object 00h handle is DWORD on top of stack window: write attributes only mailbox: send message by reference pointer: reset control flags 01h write attributes only to task's default window 02h send msg/status by reference to mailbox (task's handle on stack) 03h send msg/status by reference to current task's mailbox 04h clear control flags on KEYBOARD object (handle on top of stack) 05h clear control flags on task's default KEYBOARD object 06h remove specific object from OBJECTQ (task's handle on stack) 07h remove specific object from task's default OBJECTQ STACK: (if mailbox) DWORD status DWORD length DWORD address (if window) DWORD number of attributes to write DWORD address of attributes (if objectq) DWORD handle of object to remove (otherwise) DWORD indicates which bits to clear --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT AH = 12h BH = 0Ch BL = object 00h handle is DWORD on top of stack window: fill with given character keyboard: attach to a window timer: open pointer: start taking input for window panel: associate with a panel file 01h fill task's default window with given character 02h open given task's mailbox for input (task's handle on stack) 03h open current task's mailbox 04h attach a KEYBOARD to a window (handle on top of stack) 05h attach task's default KEYBOARD to a window 06h open a task's OBJECTQ (task's handle on top of stack) 07h open current task's OBJECTQ STACK: (if window) DWORD character to fill with (if keyboard) DWORD handle of window to attach to (if pointer) DWORD handle of window to attach to (if panel) DWORD length of filename DWORD address of filename (otherwise) nothing Notes: special action taken if first byte of panel file name is 1Bh if first two bytes of panel file "name" are C0hC3h, then the "name" IS the panel file result code of open may be retrieved with STATUS message --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT AH = 12h BH = 0Dh BL = object 00h handle is DWORD on top of stack timer: close keyboard: detach from window pointer: stop taking input panel: close 02h close given task's mailbox (task's handle on top of stack) 03h close task's default mailbox 04h close KEYBOARD object (handle on top of stack) 05h close task's default KEYBOARD 06h close givent task's OBJECTQ (task's handle on top of stack) 07h close current task's OBJECTQ --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT AH = 12h BH = 0Eh BL = object 00h handle is DWORD on top of stack window: clear keyboard: discard input timer: cancel current interval pointer: discard all pending messages 01h clear task's default window 02h discard all queued messages in mailbox (handle on top of stack) 03h discard all queued messages in current task's default mailbox 04h discard all input queued to KEYBOARD (handle on top of stack) 05h discard all input queued to task's default KEYBOARD 06h remove all objects from OBJECTQ (task's handle on top of stack) 07h remove all objects from current task's OBJECTQ --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS AH = 12h BH = 0Fh BL = object 00h handle is DWORD on top of stack timer: is it running? pointer: return status of last message panel: verify success of last OPEN or APPLY 02h return status of last msg READ from mailbox (handle on stack) 03h return status of last msg READ from task's default mailbox 04h get status of last msg from task's KEYBOARD (task handle on stk) 05h get status of last msg from task's default KEYBOARD 06h return whether OBJECTQ is open or not (handle on top of stack) 07h return whether task's default OBJECTQ is open or not Return: DWORD on top of stack is status Note: if object is a panel object, the status indicates the error code: 14h ??? 15h ??? 16h invalid panel format 17h panel file already open 95h ??? 98h null panel file name --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS AH = 12h BH = 10h BL = object 00h handle is DWORD on top of stack 01h returns TRUE if logical cursor past end of task's def window 02h return ??? for task's mailbox (task's handle on top of stack) 03h return ??? for current task's mailbox Return: DWORD on top of stack is status --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR AH = 12h BH = 11h BL = object 00h window's handle is DWORD on top of stack 01h position logical cursor on task's default window STACK: DWORD column DWORD row --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX AH = 12h BH = 11h BL = mailbox to name 00h DWORD on top of stack is mailbox handle 02h use given task's mailbox (task's handle on top of stack) 03h use current task's default mailbox STACK: DWORD length of name DWORD address of name --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR AH = 12h BX = 1100h STACK: DWORD object handle for pointer object DWORD number of colums to scale pointer position to DWORD number of rows to scale pointer position to --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES AH = 12h BH = 12h BL = object 00h handle is DWORD on top of stack 01h read next N chars/attributes on task's default window STACK: DWORD count Return: STACK: DWORD width of screen line DWORD address DWORD count actually read --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR AH = 12h BX = 1200h STACK: DWORD object handle for pointer Return: STACK: DWORD pointer pos scaled as if window were this many colums wide DWORD pointer pos scaled as if window were this many rows high --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW AH = 12h BH = 13h BL = window object 00h DWORD on top of stack is handle for window to redraw 01h redraw task's default window --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON AH = 12h BX = 1300h STACK: DWORD object handle for pointer DWORD character to use for pointer --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS AH = 12h BH = 14h BL = message modifier 00h handle is DWORD on top of stack 01h define user stream 04h intercept keystrokes from KEYBOARD to a window (handle on stack) 05h intercept keystrokes from task's default KEYBOARD to a window STACK: (if window) DWORD user stream number (14h-1Fh) DWORD address of FAR user stream handler (if keyboard) DWORD address of FAR filter function The keyboard filter function is called when the keyboard is in field mode. On entry, AL = character AH = 0 or extended ASCII code if AL = 0 BX = field number CH = cursor column CL = cursor row DL = field type modifier (sixth item in field table entry) DH = ??? (seventh item in field table entry) ES:SI = window's handle (also, in DV 2.00, DS:DI points to the field table entry. This may change in other versions) The filter function should return AH = 0 use keystroke 1 ignore keystroke >1 beep and ignore keystroke --------------------------------------------- INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE AH = 12h BH = 14h BL = object 00h mailbox handle is DWORD on top of stack 02h use given task's mailbox (task's handle on top of stack) 03h use current task's default mailbox Note: release exclusive access by sending CLOSE message to mailbox access may be requested multiple times, and requires multiple CLOSEs --------------------------------------------- INT 15 - DESQview 2.2 - SEND MESSAGE - SET ??? AH = 12h BH = 15h BL = object 00h DWORD on top of stack mailbox, keyboard, or pointer only 02h mailbox for task whose handle is on top of stack 03h mailbox for current task 04h keyboard for task whose handle is on top of stack 05h keyboard for current task STACK: DWORD ??? Return: nothing Note: this call is only available if the API level has been set to at least 2.2 --------------------------------------------- INT 15 - DESQview 2.2 - SEND MESSAGE - GET ??? AH = 12h BH = 16h BL = object 00h DWORD on top of stack mailbox, keyboard, or pointer only 02h mailbox for task whose handle is on top of stack 03h mailbox for current task 04h keyboard for task whose handle is on top of stack 05h keyboard for current task Return: STACK: DWORD ??? Note: this call is only available if the API level has been set to at least 2.2 --------------------------------------------- INT 15 - PRINT.COM - ??? (AT,XT286,PS50+) AH = 20h AL = subfunction 00h ??? 01h ??? 10h setup of SYSREQ routine (OS hook) 11h completion of SYSREQ function (OS hook) Note: AL = 0,1 set or reset some flags which affect what PRINT does when it tries to access the disk --------------------------------------------- INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+) AH = 21h AL = subfunction 00h read POST log 01h write POST log BH = device ID BL = error code Return: CF set on error AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported) if function 00h: BX = number of error codes stored ES:DI -> error log Note: the log is a series of words, the first byte of which identifies the error code and the second the device. --------------------------------------------- INT 15 - READ/MODIFY PROFILES (CONVERTIBLE) AH = 40h AL = subfunction 0: get system profile in CX and BX 1: set system profile from CX and BX 2: get internal modem profile in BX 3: set internal modem profile from BX --------------------------------------------- INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE) AH = 41h AL = condition type bits 0-2: condition to wait for 0 any external event 1 compare and return if equal 2 compare and return if not equal 3 test and return if not zero 4 test and return if zero bit 3: reserved bit 4: 1=port address, 0=user byte bits 5-7: reserved BH = condition compare or mask value BL = timeout value times 55 milliseconds 0 means no timeout DX = I/O port address if AL bit 4 set ES:DI -> user byte if AL bit 4 clear --------------------------------------------- INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE) AH = 42h AL = 0 to use system profile 1 to force suspend regardless of system profile --------------------------------------------- INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE) AH = 43h Return: AL = status bits bit 0: LCD detached bit 1: reserved bit 2: RS232/parallel adapter powered on bit 3: internal modem powered on bit 4: power activated by alarm bit 5: standby power lost bit 6: external power in use bit 7: power low --------------------------------------------- INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE) AH = 44h AL = 0 to power off 1 to power on --------------------------------------------- INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS) AH = 4Fh AL = scan code CF set Return: CF set AL = scan code CF clear scan code should not be used Note: Called by INT 9 handler to translate scan codes --------------------------------------------- INT 15 - OS HOOK - DEVICE OPEN (AT,XT2,XT286,PS) AH = 80h BX = device ID CX = process type Return: CF set on error AH = status --------------------------------------------- INT 15 - OS HOOK - DEVICE CLOSE (AT,XT2,XT286,PS) AH = 81h BX = device ID CX = process type Return: CF set on error AH = status --------------------------------------------- INT 15 - OS HOOK - DEVICE PROGRAM TERMINATE (AT,XT2,XT286,PS) AH = 82h BX = device ID Return: CF set on error AH = status Note: closes all devices opened with function 80h --------------------------------------------- INT 15 - SYSTEM - EVENT WAIT (AT,XT286,CONV,PS) AH = 83h AL = subservice 0 = set interval 1 = cancel ES:BX -> event flag (bit 7 set when interval expires) CX:DX = number of microseconds to wait (only accurate to 977 us) Return: CF set if function already busy --------------------------------------------- INT 15 - SYSTEM - READ JOYSTICK (AT,XT2,XT286,PS) AH = 84h DX = subservice 0 get switch settings Return: AL = switch settings (bits 7-4) 1 read joystick inputs Return: AX = A(x) value BX = A(y) value CX = B(x) value DX = B(y) value --------------------------------------------- INT 15 - OS HOOK - SYSTEM REQUEST KEY PRESSED (AT,XT2,XT286,CONV,PS) AH = 85h AL = 0 press = 1 release Return: CF set on error AH = status Note: called by keyboard decode routine --------------------------------------------- INT 15 - SYSTEM - WAIT (AT,XT2,XT286,CONV,PS) AH = 86h CX,DX = number of microseconds to wait (only accurate to 977 us) Return: CF clear: after wait elapses CF set: immediately due to error --------------------------------------------- INT 15 - EXTENDED MEMORY - BLOCK MOVE (AT,XT286,PS) AH = 87h CX = number of words to move ES:SI -> global descriptor table 00h-0Fh zero 10h-11h source segment length in bytes (2*CX-1 or greater) 12h-14h 24-bit linear source address 15h access rights byte (93h) 16h-17h zero 18h-19h destination segment length in bytes (2*CX-1 or greater) 1Ah-1Ch 24-bit linear destination address 1Dh access rights byte (93h) 1Eh-2Fh zero Return: CF set on error AH = status 00h source copied into destination 01h parity error 02h interrupt error 03h address line 20 gating failed --------------------------------------------- INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (AT,XT286,PS) AH = 88h Return: AX = memory size in K --------------------------------------------- INT 15 - SYSTEM - SWITCH TO VIRTUAL MODE (AT,XT286,PS50+) AH = 89h BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts) BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts) DS:SI -> GDT for protected mode offset 0h null descriptor 8h GDT descriptor 10h IDT descriptor 18h DS 20h ES 28h SS 30h CS 38h uninitialized, used to build descriptor for BIOS CS CX = offset into protected-mode CS to jump to Return: CF set on error AH = 0FFh error enabling address line 20 --------------------------------------------- INT 15 - OS HOOK - DEVICE BUSY LOOP (AT,XT2,XT286,CONV,PS) AH = 90h AL = type code 00h: disk 01h: diskette 02h: keyboard 03h: PS/2 pointing device 80h: network FCh: disk reset FDh: diskette motor start FEh: printer ES:BX -> request block for type codes 80h through BFh Return: CF set if wait time satisfied CF clear if driver must perform wait Note: type codes are allocated as follows: 00-7F non-reentrant devices; OS must arbitrate access 80-BF reentrant devices; ES:BX points to a unique control block C0-FF wait-only calls, no complementary INT 15/AH=91h call --------------------------------------------- INT 15 - OS HOOK - SET FLAG AND COMPLETE INTERRUPT (AT,XT2,XT286,CONV,PS) AH = 91h AL = type code, see AH=90h above ES:BX -> request block for type codes 80h through BFh Return: AH = 0 --------------------------------------------- INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS) AH = C0h Return: CF set if BIOS doesn't support call ES:BX -> ROM table byte_count dw ? ; number of bytes following model db ? ; PC=ff, XT=fe or fb, PCjr = fd, etc, etc submodel db ? ; distingushes between AT and XT/286, etc. BIOS_rev db ? ; 0 for first release, 1 for 2nd, etc. featbyte db ? ; 80h = DMA channel 3 used by hd BIOS ; 40h = 2nd 8259 installed ; 20h = Real-Time Clock installed ; 10h = INT 15h/AH=4Fh called upon INT 9h ; 8h = wait for external event supported ; 4h = extended BIOS area allocated at 640K ; 2h = bus is Micro Channel instead of PC ; 1h reserved res1 dw 0 res2 dw 0 Note: the 1/10/86 XT BIOS returns an incorrect value for featbyte. --------------------------------------------- INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS) AH = C1h Return: CF set on error ES = segment of data area --------------------------------------------- INT 15 - POINTING DEVICE BIOS INTERFACE (PS,DESQview 2.x) AH = C2h AL = subfunction 00h enable/disable BH = 00h disable 01h enable 01h reset Return: BH = device ID 02h set sampling rate BH = 00h 10/second 01h 20/second 02h 40/second 03h 60/second 04h 80/second 05h 100/second 06h 200/second 03h set resolution BH = 00h one count per mm 01h two counts per mm 02h four counts per mm 03h eight counts per mm 04h get type Return: BH = device ID 05h initialize BH = data package size (1 - 8 bytes) 06h get/set scaling factor BH = 00h return device status Return: BL = status bit 0: right button pressed bit 1: reserved bit 2: left button pressed bit 3: reserved bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling bit 5: device enabled bit 6: 0 if stream mode, 1 if remote mode bit 7: reserved CL = resolution (see function 03h) DL = sample rate, reports per second 01h set scaling at 1:1 02h set scaling at 2:1 07h set device handler address ES:BX = user device handler Return: CF set on error AH = status 00h successful 01h invalid function 02h invalid input 03h interface error 04h need to resend 05h no device handler installed -------------------------------------------- INT 15 - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+) AH = C3h AL = 00h disable 01h enable BX = timer counter Return: CF set on error Note: the watchdog timer generates an NMI --------------------------------------------- INT 15 - PROGRAMMABLE OPTION SELECT (PS50+) AH = C4h AL = 00h return base POS register address 01h enable slot BL = slot number 02h enable adapter Return: CF set on error DX = base POS register address (if function 00h) --------------------------------------------- INT 15 - DESQview - GET PROGRAM NAME AX = DE00h Return: AX = offset into DESQVIEW.DVO of current program's record: BYTE length of name N BYTES name 2 BYTES keys to invoke program (second = 00h if only one key used) WORD ??? (I see 0 always) BYTE end flag: 00h for all but last entry, which is FFh --------------------------------------------- INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU AX = DE01h Return: nothing Note: reads DESQVIEW.DVO, disables Open menu if file not in current directory --------------------------------------------- INT 15 - DESQview - UNIMPLEMENTED IN DV 2.x AX = DE02h Return: nothing (NOP in DV 2.x) --------------------------------------------- INT 15 - DESQview - UNIMPLEMENTED IN DV 2.x AX = DE03h Return: nothing (NOP in DV 2.x) --------------------------------------------- INT 15 - DESQview - GET AVAILABLE COMMON MEMORY AX = DE04h Return: BX = bytes of common memory available CX = largest block available DX = total common memory in bytes --------------------------------------------- INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY AX = DE05h Return: BX = K of memory available CX = largest block available DX = total conventional memory in K --------------------------------------------- INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY AX = DE06h Return: BX = K of expanded memory available CX = largest block available DX = total expanded memory in K --------------------------------------------- INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER AX = DE07h Return: AX = number of program as it appears on the "Switch Windows" menu --------------------------------------------- INT 15 - DESQview - GET ??? AX = DE08h Return: AX = 0 if ??? is not set to the current task 1 if ??? is set to the current task --------------------------------------------- INT 15 - DESQview - UNIMPLEMENTED IN DV 2.x AX = DE09h Return: nothing (NOP in DV 2.x) --------------------------------------------- INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE AX = DE0Ah BL = character Return: character displayed, next call will display in next position (which wraps back to the start of the line if off the right edge of screen) Notes: displays character on bottom line of *physical* screen, regardless of current size of window (even entirely hidden) does not know about graphics display modes, just pokes the characters into display memory --------------------------------------------- INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED AX = DE0Bh BL = API level major version number BH = API level minor version number Return: AX = maximum API level??? Note: if the requested API level is greater than the version of DESQview, a "You need a newer version" error window is popped up --------------------------------------------- INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY AX = DE0Ch BX = number of bytes Return: ES:DI -> allocated block --------------------------------------------- INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY AX = DE0Dh ES:DI -> previously allocated block Return: nothing --------------------------------------------- INT 15 - DESQview 2.x - FIND MAILBOX BY NAME AX = DE0Eh ES:DI -> name to find CX = length of name Return: BX = 0 not found 1 found DS:SI = object handle --------------------------------------------- INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS AX = DE0Fh Return: AX and BX destroyed (seems to be bug, weren't saved&restored) Notes: sends a manager stream with opcodes AEh, BDh, and BFh to task's window enables an additional mouse mode --------------------------------------------- INT 15 - DESQview 2.x - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM AX = DE10h BH = scan code BL = character Return: BX = ??? (sometimes, but not always, same as BX passed in) Note: a later read will get the keystroke as if it had been typed by the user --------------------------------------------- INT 15 - DESQview 2.x - ENABLE/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW AX = DE11h BL = 0 viewport will not move automatically nonzero viewport will move to keep cursor visible Return: nothing --------------------------------------------- INT 15 - DESQview 2.01+ - SET ??? AX = DE12h BX = 0 clear ??? flag nonzero set ??? flag Return: nothing --------------------------------------------- INT 15 - DESQview 2.2 - GET INVOCATION COUNT AX = DE13h Return: BX = number of calls to DESQview still pending completion --------------------------------------------- INT 15 - DESQview 2.2 - GET OBJECT TYPE AX = DE14h ES:DI -> object Return: BL = 00h not an object 08h window or task 09h mailbox 0Ah keyboard 0Bh timer 0Ch objectq 0Fh pointer 10h panel --------------------------------------------- INT 15 - DESQview 2.2 - SET ??? AX = DE15h BL = 0 ??? 1 ??? Return: nothing --------------------------------------------- INT 15 - DESQview 2.2 - GET ??? AX = DE16h Return: BL = 0 ??? 1 ??? Note: returns value set with function DE15h --------------------------------------------- INT 15 - DESQview 2.2 - reserved AX = DE17h Return: pops up "Programming error" window Note: AX = 1117h is NOT identical to this call --------------------------------------------- INT 15 - DESQview 2.2 - ??? AX = DE18h Note: calls video driver (NOP for Hercules driver) --------------------------------------------- INT 16 - KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY AH = 00h Return: AH = scan code AL = character --------------------------------------------- INT 16 - KEYBOARD - CHECK BUFFER, DO NOT CLEAR AH = 01h Return: ZF = 0 character in buffer AH = scan code AL = character ZF = 1 no character in buffer --------------------------------------------- INT 16 - KEYBOARD - GET SHIFT STATUS AH = 02h AL = shift status bits 0 = right shift key depressed 1 = left shift key depressed 2 = CTRL depressed 3 = ALT depressed 4 = SCROLL LOCK active 5 = NUM LOCK active 6 = CAPS LOCK active 7 = INSERT state active --------------------------------------------- INT 16 - KEYBOARD - SET DELAYS (Jr,AT model 339,XT286,PS) AH = 03h AL = subfunction 0 reset typematic (PCjr) 1 increase initial delay (PCjr) 2 increase continuing delay (PCjr) 3 increase both delays (PCjr) 4 turn off typematic (PCjr) 5 Set typematic rate (AT or PS/2) BH = 00 - 03 for delays of 250ms, 500ms, 750ms, or 1s BL = 00 - 1F for typematic rates of 30cps down to 2cps --------------------------------------------- INT 16 - KEYBOARD - KEYCLICK (Jr,CONV) AH = 04h AL = 0 click off 1 click on --------------------------------------------- INT 16 - KEYBOARD - WRITE TO KEYBOARD BUFFER (AT model 339,XT2,XT286,PS) AH = 05h CH = scan code CL = character Return: AL = 1 if buffer full --------------------------------------------- INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS) AH = 10h Return: AH = scan code AL = character --------------------------------------------- INT 16 - KEYBOARD - CHECK ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS) AH = 11h Return: ZF = 0 if keystroke available AH = scan code \ meaningless if ZF = 1 AL = character / ZF = 1 if kbd buffer empty --------------------------------------------- INT 16 - KEYBOARD - GET ENHANCED SHIFT FLAGS (AT model 339,XT2,XT286,PS) AH = 12h Return: AL (same as for AH=02h) bit 7: Ins ON bit 6: CapsLock ON bit 5: NumLock ON bit 4: ScrollLock ON bit 3: Either ALT key down bit 2: Either CTRL key down bit 1: Left shift key down bit 0: Right shift key down AH bit 7: SysReq key down bit 6: CapsLock key down bit 5: NumLock key down bit 4: ScrollLock key down bit 3: Right Alt key down bit 2: Right Ctrl key down bit 1: Left Alt key down bit 0: Right Alt key down --------------------------------------------- INT 16 - Compaq 386 - SET CPU SPEED AH = F0h AL = speed 00h equivalent to 6 MHz 80286 (COMMON) 01h equivalent to 8 MHz 80286 (FAST) 02h full 16 MHz (HIGH) 03h toggles between 8 MHz-equivalent and speed set by system board switch (AUTO or HIGH) 08h full 16 MHz except 8 MHz-equivalent during floppy disk access 09h specify speed directly CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088 --------------------------------------------- INT 16 - Compaq 386 - READ CURRENT CPU SPEED AH = F1h Return: AL = speed code (see function F0h above) if AL = 09h, CX = speed code --------------------------------------------- INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE AH = F2h Return: AL = type 00h if 11-bit AT keyboard is in use 01h if 9-bit PC keyboard is in use --------------------------------------------- INT 17 - PRINTER - OUTPUT CHARACTER AH = 00h AL = character DX = printer port (0-3) Return: AH = status bits 0 = time out 1 = unused 2 = unused 3 = I/O error 4 = selected 5 = out of paper 6 = acknowledge 7 = not busy --------------------------------------------- INT 17 - PRINTER - INITIALIZE AH = 01h DX = printer port (0-3) Return: AH = status (see AH = 00h above) --------------------------------------------- INT 17 - PRINTER - GET STATUS AH = 02h DX = printer port (0-3) Return: AH = status (see AH = 00h above) --------------------------------------------- INT 18 - TRANSFER TO ROM BASIC causes transfer to ROM-based BASIC (IBM-PC) often reboots a compatible; often has no effect at all --------------------------------------------- INT 19 - DISK BOOT causes reboot of disk system (no memory test performed) --------------------------------------------- INT 1A - CLOCK - GET TIME OF DAY AH = 00h Return: CX:DX = clock count AL = 0 if clock was read or written (via AH=0,1) within the current 24-hour period Otherwise, AL > 0 --------------------------------------------- INT 1A - CLOCK - SET TIME OF DAY AH = 01h CX:DX = clock count Return: time of day set --------------------------------------------- INT 1A - CLOCK - READ REAL TIME CLOCK (AT,XT286,CONV,PS) AH = 02h Return: CH = hours in BCD CL = minutes in BCD DH = seconds in BCD --------------------------------------------- INT 1A - CLOCK - SET REAL TIME CLOCK (AT,XT286,CONV,PS) AH = 03h CH = hours in BCD CL = minutes in BCD DH = seconds in BCD DL = 1, if daylight savings; 0 if standard time Return: CMOS clock set --------------------------------------------- INT 1A - CLOCK - READ DATE FROM REAL TIME CLOCK (AT,XT286,CONV,PS) AH = 04h Return: DL = day in BCD DH = month in BCD CL = year in BCD CH = century (19h or 20h) --------------------------------------------- INT 1A - CLOCK - SET DATE IN REAL TIME CLOCK (AT,XT286,CONV,PS) AH = 05h DL = day in BCD DH = month in BCD CL = year in BCD CH = century (19h or 20h) Return: CMOS clock set --------------------------------------------- INT 1A - CLOCK - SET ALARM (AT,XT286,CONV,PS) AH = 06h CH = hours in BCD CL = minutes in BCD DH = seconds in BCD Return: CF set if alarm already set or clock inoperable INT 4Ah will be called when alarm goes off, every 24 hours until reset --------------------------------------------- INT 1A - CLOCK - RESET ALARM (AT,XT286,CONV,PS) AH = 07h Return: alarm disabled --------------------------------------------- INT 1A - CLOCK - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE) AH = 08h CH = hours in BCD CL = minutes in BCD DH = seconds in BCD --------------------------------------------- INT 1A - CLOCK - READ RTC ALARM TIME AND STATUS (CONV,PS30) AH = 09h Return: CH = hours in BCD CL = minutes in BCD DH = seconds in BCD DL = alarm status 0 alarm not enabled 1 alarm enabled but will not power up system 2 alarm will power up system --------------------------------------------- INT 1A - CLOCK - READ SYSTEM-TIMER DAY COUNTER (XT2,PS) AH = 0Ah Return: CF set on error CX = count of days since Jan 1,1980 --------------------------------------------- INT 1A - CLOCK - SET SYSTEM-TIMER DAY COUNTER (XT2,PS) AH = 0Bh CX = count of days since Jan 1,1980 Return: CF set on error --------------------------------------------- INT 1A - PCjr - SET UP SOUND MULTIPLEXOR AH = 80h AL = 0 source is 8253 channel 2 1 source is cassette input 2 source is I/O channel "Audio IN" 3 source is sound generator chip --------------------------------------------- INT 1A - AT&T 6300 - READ TIME AND DATE AH = FEh Return: BX = day count (1 = Jan 1, 1984) CH = hour CL = minute DH = second DL = hundredths --------------------------------------------- INT 1B - CTRL-BREAK KEY This interrupt is called when the keyboard scanner of the IBM machines detects CTRL and BREAK pressed at the same time. It normally points to a short routine in DOS which sets the Ctrl-C flag, thus invoking INT 23h the next time DOS checks for Ctrl-C. --------------------------------------------- INT 1C - CLOCK TICK This interrupt is called (in the IBM) at the end of each time-update operation by the time-of-day routines. It normally points to an IRET. --------------------------------------------- INT 1D -> 6845 VIDEO INIT TABLES table for modes 0 and 1 \ table for modes 2 and 3 \ each table is 16 bytes long and table for modes 4,5, and 6 / contains values for 6845 registers table for mode 7 / 4 words -- size of video RAM for modes 0/1, 2/3, 4/5, and 6/7 8 bytes -- number of columns in each mode 8 bytes -- video controller mode byte for each mode --------------------------------------------- INT 1E -> DISKETTE PARAMS (BASE TABLE) (Default at F000:EFC7 in PC and most compatibles) DB step rate & head unload times DB head load time & DMA DB motor off time in clock ticks (36 or 37 typical) DB sector size in bytes (0->128, 1->256, 2->512, 3->1024) DB last sector number (8 or 9 typical) DB inter-sector gap size on read/write (42 typical) DB data transfer length (255 typical) DB inter-sector gap size on format (80 typical) DB sector fill on format (F6h typical) DB head-settle time ms (typical 25, 1.10->0, 2.10->15, 3.10->1) DB motor start-up time (1/8 secs) (typical 4, 2.10->2) --------------------------------------------- INT 1F -> GRAPHICS SET 2 (NOT a vector!) pointer to bitmaps for high 128 chars --------------------------------------------- INT 20 - Minix - SEND/RECEIVE MESSAGE AX = process ID of other process BX -> message CX = 1 send 2 receive 3 send&receive Note: the message contains the system call number (numbered as in V7 Unix(tm)) and the call parameters --------------------------------------------- INT 20 - DOS - PROGRAM TERMINATION returns to DOS--identical to INT 21/AH=00h --------------------------------------------- INT 21 - DOS - PROGRAM TERMINATION AH = 00h Return: never --------------------------------------------- INT 21 - DOS - KEYBOARD INPUT AH = 01h Return: AL = character read Note: ^C/^Break are checked, and INT 23h executed if read character is echoed to standard output --------------------------------------------- INT 21 - DOS - DISPLAY OUTPUT AH = 02h DL = character to send to standard output Note: ^C/^Break are checked, and INT 23h executed if pressed --------------------------------------------- INT 21 - DOS - AUX INPUT AH = 03h Return: AL = character read --------------------------------------------- INT 21 - DOS - AUX OUTPUT AH = 04h DL = character to send --------------------------------------------- INT 21 - DOS - PRINTER OUTPUT AH = 05h DL = character to print --------------------------------------------- INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER OUTPUT AH = 06h DL = character <> FFh --------------------------------------------- INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER INPUT AH = 06h DL = 0FFh Return: ZF set = no character ZF clear = character recieved AL = character Notes: Character is echoed to STDOUT if received. ^C/^Break are NOT checked --------------------------------------------- INT 21 - DOS - DIRECT STDIN INPUT, NO ECHO AH = 07h Note: same as function 06h for input but char not echoed --------------------------------------------- INT 21 - DOS - KEYBOARD INPUT, NO ECHO AH = 08h Return: AL = character Note: same as function 07h, but ^C/^Break are checked --------------------------------------------- INT 21 - DOS - PRINT STRING AH = 09h DS:DX = address of string terminated by "$" Note: ^C/^Break checked, and INT 23h called if pressed --------------------------------------------- INT 21 - DOS - BUFFERED KEYBOARD INPUT AH = 0Ah DS:DX = address of buffer Note: first byte of buffer must contain maximum length on entry, second byte contains actual length of previous line which may be recalled with the DOS line-editing commands on return the second byte contains actual length, third and subsequent bytes contain the input line --------------------------------------------- INT 21 - DOS - CHECK STANDARD INPUT STATUS AH = 0Bh Return: AL = FFh if character available 00h if no character Note: ^C/^Break checked, and INT 23h called if pressed --------------------------------------------- INT 21 - DOS - CLEAR KEYBOARD BUFFER AH = 0Ch AL must be 1, 6, 7, 8, or 0Ah. Notes: Flushes all typeahead input, then executes function specified by AL (effectively moving it to AH and repeating the INT 21 call). If AL contains a value not in the list above, the keyboard buffer is flushed and no other action is taken. --------------------------------------------- INT 21 - DOS - DISK RESET AH = 0Dh Note: Flushes all disk buffers. --------------------------------------------- INT 21 - DOS - SELECT DISK AH = 0Eh DL = new default drive number (0 = A, 1 = B, etc.) Return: AL = number of logical drives --------------------------------------------- INT 21 - DOS - OPEN DISK FILE AH = 0Fh DS:DX = address of FCB Return: AL = 00h file found FFh file not found Note: (DOS 3.x) file opened in compatibility mode --------------------------------------------- INT 21 - DOS - CLOSE DISK FILE AH = 10h DS:DX = address of FCB Return: AL = 00h directory update successful FFh file not found in directory --------------------------------------------- INT 21 - DOS - SEARCH FIRST USING FCB AH = 11h DS:DX = address of FCB Return: AL = status 00h file found FFh file not found Note: If file found, FCB is created at DTA address and set up to OPEN or DELETE it. --------------------------------------------- INT 21 - DOS - SEARCH NEXT USING FCB AH = 12h DS:DX = address of FCB Return: AL = status 00h file found FFh file not found Note: If file found, FCB is created at DTA address and set up to OPEN or DELETE it. --------------------------------------------- INT 21 - DOS - DELETE FILE via FCB AH = 13h DS:DX = address of FCB with filename field filled with template for deletion ('?' wildcard allowed) Return: AL = status 00h file found FFh file not found --------------------------------------------- INT 21 - DOS - SEQUENTIAL DISK FILE READ AH = 14h DS:DX = address of FCB Return: AL = status 0 successful read 1 end of file 2 data transfer area too small 3 partial record, EOF --------------------------------------------- INT 21 - DOS - SEQUENTIAL DISK RECORD WRITE AH = 15h DS:DX = address of FCB Return: AL = status 0 successful write 1 disk full 2 data transfer area too small --------------------------------------------- INT 21 - DOS - CREATE A DISK FILE AH = 16h DS:DX = address of FCB Return: AL = status 00h successful creation FFh directory full Note: if file already exists, it is truncated to zero length --------------------------------------------- INT 21 - DOS - RENAME FILE via FCB AH = 17h DS:DX = address of FCB FCB contains new name starting at byte 17h. Return: AL = status 00h file found FFh file not found --------------------------------------------- INT 21 - DOS internal - UNUSED AH = 18h Return: AL = 0 --------------------------------------------- INT 21 - DOS - GET DEFAULT DISK NUMBER AH = 19h Return: AL = current drive number (letter - 'A') --------------------------------------------- INT 21 - DOS - SET DISK TRANSFER AREA ADDRESS AH = 1Ah DS:DX = address of buffer --------------------------------------------- INT 21 - DOS - ALLOCATION TABLE INFORMATION AH = 1Bh Return: DS:BX points to FAT ID byte for default drive DX = number of allocation units on disk AL = number of sectors per allocation unit (cluster) CX = number of bytes per sector --------------------------------------------- INT 21 - DOS - ALLOCATION TABLE INFORMATION FOR SPECIFIC DEVICE AH = 1Ch DL = Drive Number to check Return: DS:BX points to FAT ID byte DX = number of allocation units on disk AL = number of sectors per allocation unit (cluster) CX = number of bytes per sector --------------------------------------------- INT 21 - DOS internal - UNUSED AH = 1Dh Return: AL = 0 --------------------------------------------- INT 21 - DOS internal - UNUSED AH = 1Eh Return: AL = 0 --------------------------------------------- INT 21 - DOS internal - GET DEFAULT DRIVE PARAMETER BLOCK AH = 1Fh Return: AL = 00h No Error FFh Error DS:BX -> drive parameter block Note: for DOS 2.x and 3.x, this just invokes function 32h with DL = 0 --------------------------------------------- INT 21 - DOS internal - UNUSED AH = 20h Return: AL = 0 --------------------------------------------- INT 21 - DOS - RANDOM DISK RECORD READ AH = 21h DS:DX = address of FCB Return: AL = status 0 successful read 1 end of file 2 data transfer area too small 3 partial record, EOF --------------------------------------------- INT 21 - DOS - RANDOM DISK RECORD WRITE AH = 22h DS:DX = address of FCB Return: AL = status (see AH = 21h above) --------------------------------------------- INT 21 - DOS - GET FILE SIZE AH = 23h DS:DX = address of unopened FCB with filename and record size fields initialized Return: AL = status 00h file found FFh file not found Note: FCB's random-record field set to number of records (rounded up) --------------------------------------------- INT 21 - DOS - SET RANDOM RECORD FIELD AH = 24h DS:DX = address of FCB Return: Random Record Field of FCB is set to be same as Current Block and Current Record. Note: FCB must be OPEN already --------------------------------------------- INT 21 - DOS - SET INTERRUPT VECTOR AH = 25h AL = interrupt number DS:DX = new vector to be used for specified interrupt --------------------------------------------- INT 21 - DOS - CREATE PSP AH = 26h DX = Segment number to set up PSP at Return: Current PSP is copied to specified segment Note: new PSP is updated with memory size information; INTs 22h, 23h, 24h taken from interrupt vector table --------------------------------------------- INT 21 - DOS - RANDOM BLOCK READ AH = 27h DS:DX = address of FCB CX = number of records to be read Return: AL = status 0 successful read 1 end of file 2 data transfer area too small 3 partial record, EOF --------------------------------------------- INT 21 - DOS - RANDOM BLOCK WRITE AH = 28h DS:DX = address of FCB CX = number of records to be written if zero, truncate file to current random file position Return: AL = status 0 successful write 1 disk full 2 data transfer area too small --------------------------------------------- INT 21 - DOS - PARSE FILENAME AH = 29h DS:SI -> string to parse ES:DI -> buffer to fill with unopened FCB AL = bit mask to control parsing 0 = 0: parsing stops if file separator found 1: leading separator ignored 1 = 0: drive number in FCB set to default drive if not present in string 1: drive number in FCB not changed 2 = 0: filename in FCB set to blanks if no filename in string 1: filename in FCB not changed if string does not contain a filename 3 = 0: extension in FCB set to blanks if no extension in string 1: extension left unchanged Return: AL = 00h: no wildcards in name or extension 01h: wildcards appeared FFh: drive specifier invalid DS:SI -> first byte after parsed string ES:DI buffer filled with unopened FCB --------------------------------------------- INT 21 - DOS - GET CURRENT DATE AH = 2Ah Return: DL = day DH = month CX = year AL = day of the week (0=Sunday, 1=Monday, etc.) --------------------------------------------- INT 21 - DOS - SET CURRENT DATE AH = 2Bh DL = day DH = month CX = year Return: AL = 00h if no error = FFh if bad value sent to routine Note: DOS 3.3 also sets CMOS clock --------------------------------------------- INT 21 - DESQview - INSTALLATION CHECK AH = 2Bh AL = subfunction (DV v2.00+) 01h get version Return: BX = version (BH = major, BL = minor) Note: early copies of v2.00 return 0002h 02h get shadow buffer info, and start shadowing Return: BH = rows in shadow buffer BL = columns in shadow buffer DX = segment of shadow buffer 04h get shadow buffer info Return: BH = rows in shadow buffer BL = columns in shadow buffer DX = segment of shadow buffer 05h stop shadowing CX = 4445h ('DE') DX = 5351h ('SQ') Return: AL = FFh if DESQview not installed Note: in DESQview v1.x, there were no subfunctions; this call only identified --