Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/floppy/doc
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2022-09-02 09:18:52 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2022-09-02 09:18:52 +0200
commit52be99d8c0862ff87db9a4f9ccec1ac4b5f7caed (patch)
tree1a1a1c98090afd8459cc8f045f9de2d4a7cba5ab /floppy/doc
parent15adaba9eaa6a98c8b55bc5c5f73c3a9e0e55e7a (diff)
added a quite unsorted first version of a floppy boot loader
Diffstat (limited to 'floppy/doc')
-rw-r--r--floppy/doc/ELC-E Linux Awareness.pdfbin0 -> 2032169 bytes
-rw-r--r--floppy/doc/FILE_ID.DIZ10
-rw-r--r--floppy/doc/INTERRUP.A9492
-rw-r--r--floppy/doc/INTERRUP.B9839
-rw-r--r--floppy/doc/INTERRUP.C9446
-rw-r--r--floppy/doc/INTERRUP.D7948
-rw-r--r--floppy/doc/LINKS16
-rw-r--r--floppy/doc/NEEDHELP.TXT30
-rw-r--r--floppy/doc/OVERVIEW.LST262
-rw-r--r--floppy/doc/RBROWN.TXT487
-rw-r--r--floppy/doc/README.118
-rw-r--r--floppy/doc/README.NOW76
-rw-r--r--floppy/doc/SAMPLE.FLT25
-rw-r--r--floppy/doc/SAMPLE1.FLT19
-rw-r--r--floppy/doc/SAMPLE2.FLT17
-rw-r--r--floppy/doc/TABLES.LST184
-rw-r--r--floppy/doc/_ADVERT.TXT112
-rw-r--r--floppy/doc/dc0d32.blogspot.com_2010_06_real-mode-in-c-with-gcc-writing.txt892
-rw-r--r--floppy/doc/github.com_yeokm1_gentoo-on-486.txt1114
-rw-r--r--floppy/doc/lwn.net_Articles_672587.txt240
-rw-r--r--floppy/doc/people.freedesktop.org_~narmstrong_meson_drm_doc_admin-guide_initrd.txt453
-rw-r--r--floppy/doc/www.drdobbs.com_80386-protected-mode-initialization_184408010.txt916
-rw-r--r--floppy/doc/www.insentricity.com_a.cl_283.txt808
-rw-r--r--floppy/doc/www.os2museum.com_wp_a-brief-history-of-unreal-mode.txt1626
-rw-r--r--floppy/doc/www.spinics.net_lists_linux-integrity_msg14580.txt188
-rw-r--r--floppy/doc/yeokhengmeng.com_2018_01_make-the-486-great-again.txt747
26 files changed, 44965 insertions, 0 deletions
diff --git a/floppy/doc/ELC-E Linux Awareness.pdf b/floppy/doc/ELC-E Linux Awareness.pdf
new file mode 100644
index 0000000..d4797d9
--- /dev/null
+++ b/floppy/doc/ELC-E Linux Awareness.pdf
Binary files differ
diff --git a/floppy/doc/FILE_ID.DIZ b/floppy/doc/FILE_ID.DIZ
new file mode 100644
index 0000000..27549e1
--- /dev/null
+++ b/floppy/doc/FILE_ID.DIZ
@@ -0,0 +1,10 @@
+x86/MS-DOS Interrupt List, Release 61
+A Comprehensive listing of interrupt
+calls, both documented and undocumented,
+plus ports/memory/CMOS/etc. Over 9600
+entries (plus 5400 tables) in INTER61A
+to INTER61D, utility programs and
+viewers in INTER61E, and hypertext
+conversion progs & WinHelp utilities in
+INTER60F. Over 8 million bytes of
+text! Released 2000/07/16.
diff --git a/floppy/doc/INTERRUP.A b/floppy/doc/INTERRUP.A
new file mode 100644
index 0000000..ea3a860
--- /dev/null
+++ b/floppy/doc/INTERRUP.A
@@ -0,0 +1,9492 @@
+Interrupt List Release 61 Last change 16jul00
+Copyright (c) 1989-1999,2000 Ralf Brown
+--------!---FILELIST-------------------------
+Please redistribute the following files unmodified as a group, in a quartet of
+archives named INTER61A through INTER61D (preferably the original authenticated
+PKZIP archives):
+ INTERRUP.1ST the read-me file, containing credits, availability info
+ INTERRUP.A INT 00 through INT 10/BE \
+ INTERRUP.B INT 10/BF through INT 15/0F\
+ INTERRUP.C INT 15/10 through INT 15/E7 \
+ INTERRUP.D INT 15/E8 through INT 1A/B0 \
+ INTERRUP.E INT 1A/B1 through INT 1F \ total 2520 pages at
+ INTERRUP.F INT 20 through INT 21/43 \ 60 lines per page,
+ INTERRUP.G INT 21/44 through INT 21/5E \ 2684 with INTPRINT -p
+ INTERRUP.H INT 21/5F through INT 21/E2 >(8754 entries)
+ INTERRUP.I INT 21/E3 through INT 21/F1 / (4135 tables)
+ INTERRUP.J INT 21/F2 through INT 25 /
+ INTERRUP.K INT 26 through INT 2F/15 /
+ INTERRUP.L INT 2F/16 through INT 2F/79 /
+ INTERRUP.M INT 2F/7A through INT 2F/D9 /
+ INTERRUP.N INT 2F/DA through INT 50 /
+ INTERRUP.O INT 51 through INT 61 /
+ INTERRUP.P INT 62 through INT 6A /
+ INTERRUP.Q INT 6B through INT 91 /
+ INTERRUP.R INT 92 through INT FF /
+ INTERRUP.PRI a brief introduction to interrupts
+ INTPRINT.COM a simple formatter that also generates a list summary
+ INTPRINT.DOC instructions for INTPRINT
+ OVERVIEW.LST brief listing of major uses of each interrupt
+ 86BUGS.LST a listing of CPU bugs and undocumented features
+ BIBLIO.LST bibliography of information sources for the list
+ CMOS.LST a description of the CMOS RAM data bytes
+ FARCALL.LST APIs available through FAR CALLs
+ GLOSSARY.LST a glossary of terms, abbreviations, and acronyms
+ MEMORY.LST format of the BIOS data area
+ OPCODES.LST a listing of recent and undocumented CPU instructions
+ PORTS.A a listing of I/O ports 0000h-013Fh
+ PORTS.B a listing of I/O ports 0140h-0AD5h
+ PORTS.C a listing of I/O ports 0AD6h-FFFFh
+ CATEGORY.KEY descriptions of divider-line category letters
+ COMBINE.COM combine the pieces of the list into a single file
+ COMBINE.DOC documentation for COMBINE
+The following files should be distributed in an archive called INTER61E:
+ 86BUGSnn.ZIP programs to test for CPU bugs
+ COMBINE.ASM source code for COMBINE.COM
+ INT.* invoke interrupts from commandline
+ INTHLP??.ZIP Interrupt Helper viewer for the interrupt list
+ INTLIST.E Epsilon extension for handling list
+ INTPRINT.C source code for INTPRINT
+ INTSUM??.ZIP interrupt list browser (Interrupt Summary)
+ IVIEW*.ZIP another interrupt list browser
+Finally, the following should be distributed in an archive called INTER61F:
+ INT2RTF.ZIP Slava Gostrenko's Windows Help converter
+ INT2WHLP.ZIP convert list into Windows Help database
+ INTERRUP.ICO icon for interrupt list
+ HINTSRCH.ZIP WinHelp DLL for full-text searches of interrupt list
+ IL2ME???.ZIP convert list into Multi-Edit help database
+ INT2GUID.* convert list into TurboPower GUIDE or POPHELP database
+ INT2HLP.ZIP convert list into QuickHelp database
+ INT2IPF.ZIP convert list into OS/2 .IPF database
+ INT2QH.* program to convert list into QuickHelp database
+ INT2TPH.ZIP convert to Turbo/Borland Pascal help file (.TPH)
+ INTHELP.* convert list into TurboPower GUIDE database
+ RB2NG???.ZIP convert list into Norton Guides database
+ WH_ED*.ZIP WinHelp-file editor
+--------!---CONTACT_INFO---------------------
+If you notice any mistakes or omissions, please let me know! It is only with
+YOUR help that the list can continue to grow at the current rate. Please send
+all changes to me rather than distributing a modified version of the list.
+
+Please read the file INTERRUP.1ST before asking me any questions. You may find
+that they have already been addressed.
+
+ Ralf Brown
+
+Internet: ralf@pobox.com (currently forwards to ralf@telerama.lm.com)
+FIDO: Ralf Brown 1:129/26.1
+ or post a message to me in the DR_DEBUG echo (I probably won't see it
+ unless you address it to me)
+
+I reply to all e-mail submissions, but some of my replies bounce because of
+bad return paths. If you don't get a response from me within a reasonable
+period of time, send it again with a better return path (many mailers are
+improperly configured and do not produce a valid From: address).
+--------!---Note-----------------------------
+See INTERRUP.1ST for the key to system abbreviations and a list of the
+trademarks mentioned here.
+--------!---DISCLAIMER-----------------------
+DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information
+contained in this list to the best of my ability, but I cannot be held
+responsible for any problems caused by use or misuse of the information,
+especially for those functions not officially documented. If it is marked
+"internal" or undocumented, you should check it carefully to make sure it
+works the same way in your version of the software (and please let me know
+whether or not it works the same way). Information marked with "???" is
+known to be incomplete or guesswork.
+--------!---FLAGS----------------------------
+The use of -> instead of = signifies that the indicated register or register
+pair contains a pointer to the specified item, rather than the item itself.
+Register pairs (such as AX:BX) indicate that the item is split across the
+registers, with the high-order half in the first register.
+
+One or more letters may follow the interrupt number; they have the following
+meanings: U - undocumented function, u - partially documented function,
+P - available only in protected mode, R - available only in real or V86 mode,
+C - callout or callback (usually hooked rather than called),
+O - obsolete (no longer present in current versions)
+--------!---CATEGORIES-----------------------
+The ninth column of the divider line preceding an entry usually contains a
+classification code (the entry has not been classified if that character is
+a dash). The codes currently in use are:
+ A - applications, a - access software (screen readers, etc),
+ B - BIOS, b - vendor-specific BIOS extensions,
+ C - CPU-generated, c - caches/spoolers,
+ D - DOS kernel, d - disk I/O enhancements,
+ E - DOS extenders, e - electronic mail, F - FAX,
+ f - file manipulation, G - debuggers/debugging tools, g - games,
+ H - hardware, h - vendor-specific hardware,
+ I - IBM workstation/terminal emulators, i - system info/monitoring,
+ J - Japanese, j - joke programs,
+ K - keyboard enhancers, k - file/disk compression,
+ l - shells/command interpreters,
+ M - mouse/pointing device, m - memory management,
+ N - network, n - non-traditional input devices,
+ O - other operating systems,
+ P - printer enhancements, p - power management,
+ Q - DESQview/TopView and Quarterdeck programs,
+ R - remote control/file access, r - runtime support,
+ S - serial I/O, s - sound/speech,
+ T - DOS-based task switchers/multitaskers, t - TSR libraries
+ U - resident utilities, u - emulators,
+ V - video, v - virus/antivirus,
+ W - MS Windows,
+ X - expansion bus BIOSes, x - non-volatile config storage
+ y - security, * - reserved (and not otherwise classified)
+--------C-00---------------------------------
+INT 00 C - CPU-generated - DIVIDE ERROR
+Desc: generated if the divisor of a DIV or IDIV instruction is zero or the
+ quotient overflows the result register; DX and AX will be unchanged.
+Notes: on an 8086/8088, the return address points to the following instruction
+ on an 80286+, the return address points to the divide instruction
+ an 8086/8088 will generate this interrupt if the result of a division
+ is 80h (byte) or 8000h (word)
+SeeAlso: INT 04,OPCODE "AAD"
+--------G-00---------------------------------
+INT 00 - Zenith - ROM DEBUGGER
+Desc: invokes the ROM Debugger when at the BIOS level; equivalent to
+ pressing Ctrl-Alt-Ins on booting.
+Note: since DOS revectors INT 00, it is necessary to restore this vector to
+ its original ROM BIOS value in order to invoke the debugger once DOS
+ loads
+SeeAlso: INT 03"Columbia"
+--------C-01---------------------------------
+INT 01 C - CPU-generated - SINGLE STEP
+Desc: generated after each instruction if TF (trap flag) is set; TF is
+ cleared on invoking the single-step interrupt handler
+Notes: interrupts are prioritized such that external interrupts are invoked
+ after the INT 01 pushes CS:IP/FLAGS and clears TF, but before the
+ first instruction of the handler executes
+ used by debuggers for single-instruction execution tracing, such as
+ MS-DOS DEBUG's T command
+SeeAlso: INT 03"CPU"
+--------C-01---------------------------------
+INT 01 C - CPU-generated (80386+) - DEBUGGING EXCEPTIONS
+Desc: generated by the CPU on various occurrences which may be of interest
+ to a debugger program
+Note: events which may trigger the interrupt:
+ Instruction address breakpoint fault - will return to execute inst
+ Data address breakpoint trap - will return to following instruction
+ General detect fault, debug registers in use
+ Task-switch breakpoint trap
+ undocumented 386/486 opcode F1h - will return to following instruc
+SeeAlso: INT 03"CPU"
+--------H-02---------------------------------
+INT 02 C - external hardware - NON-MASKABLE INTERRUPT
+Desc: generated by the CPU when the input to the NMI pin is asserted
+Notes: return address points to start of interrupted instruction on 80286+
+ on the 80286+, further NMIs are disabled until the next IRET
+ instruction, but one additional NMI is remembered by the hardware
+ and will be serviced after the IRET instruction reenables NMIs
+ maskable interrupts may interrupt the NMI handler if interrupts are
+ enabled
+ although the Intel documentation states that this interrupt is
+ typically used for power-failure procedures, it has many other uses
+ on IBM-compatible machines:
+ Memory parity error: all except Jr, CONV, and some machines
+ without memory parity
+ Breakout switch on hardware debuggers
+ Coprocessor interrupt: all except Jr and CONV
+ Keyboard interrupt: Jr, CONV
+ I/O channel check: CONV, PS50+
+ Disk-controller power-on request: CONV
+ System suspend: CONV
+ Real-time clock: CONV
+ System watch-dog timer, time-out interrupt: PS50+
+ DMA timer time-out interrupt: PS50+
+ Low battery: HP 95LX
+ Module pulled: HP 95LX
+--------m-02----SI0714-----------------------
+INT 02 U - STB RAPIDMAP.SYS - ???
+ SI = 0714h
+ ES:DI -> ???
+Return: ???
+SeeAlso: INT 67/AX=6100h"STB",PORT 00E1h"STB"
+--------C-03---------------------------------
+INT 03 C - CPU-generated - BREAKPOINT
+Desc: generated by the one-byte breakpoint instruction (opcode CCh)
+Notes: used by debuggers to implement breakpoints, such as MS-DOS DEBUG's G
+ command
+ also used by Turbo Pascal versions 1,2,3 when {$U+} specified
+ return address points to byte following the breakpoint instruction
+ called by Novell DOS 7 EMM386 after displaying an exception error
+ message (GPF, illegal opcodes, etc.) and before waiting for user
+ input
+ called by QEMM-386 if the user presses 'I' (undocumented) when prompted
+ after an exception error message
+SeeAlso: INT 01"CPU"
+--------G-03---------------------------------
+INT 03 - Columbia PCs (desktop,VP portables) - ROM DEBUGGER
+Desc: invokes the ROM Debugger if INT 03 has not been revectored; equivalent
+ to pressing Esc on booting.
+SeeAlso: INT 00"Zenith",INT 03"Realia"
+--------G-03---------------------------------
+INT 03 - Realia COBOL - DEBUGGER SUPPORT
+Note: Realia COBOL checks for a signature eight bytes prior to the interrupt
+ handler when it starts up
+BUG: if the offset of the INT 03 vector is less than 8, the compiler and
+ all executables generated by it will crash the system
+SeeAlso: INT 03"Columbia"
+--------G-03---------------------------------
+INT 03 U - Watcom WVIDEO, Watcom WD - OUTPUT DEBUGGING MESSAGE
+ STACK: DWORD selector
+ DWORD offset of ASCIZ message to display
+Notes: the INT 03h instruction which invokes the debugger must be followed by
+ a JMP SHORT and the signature string "WVIDEO"
+ to check whether this interface is available, define a public byte
+ variable named ___WD_Present, which the debugger will set to 01h
+ before running the program
+SeeAlso: AX=0910h
+--------U-03---------------------------------
+INT 03 - DTown Utilities - POP UP
+Program: DTown Software Development's DTown Utilities contains various tools
+ which are useful to programmers, such as a memory viewer and
+ disassembler
+Note: DTU pops up on INT 03 (if not hooked by a debugger) to allow the
+ user to inspect memory or code when the machine crashes; various
+ memory managers will invoke INT 03 when displaying a CPU exception
+ error message (either automatically or when the user presses a
+ particular key)
+SeeAlso: INT 2D/AL=20h"DTown"
+--------G-030000-----------------------------
+INT 03 - Soft-ICE - BACK DOOR COMMANDS - GET Soft-ICE VERSION
+ AX = 0000h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+Return: SI = BCD version (0280h = v2.80)
+SeeAlso: INT 03/AX=0910h
+--------G-0301-------------------------------
+INT 03 - Soft-ICE - BACK DOOR COMMANDS - ???
+ AH = 01h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+Return: ???
+SeeAlso: AX=0000h,AX=090Bh,INT 03/AH=10h
+--------G-030900-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 0900h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> ???
+ CX = ???
+ DX = ???
+Return: ???
+SeeAlso: AX=0000h,AH=01h,AX=0902h,AX=0914h
+--------G-030902-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - POPUP & START A DEBUG SESSION
+ AX = 0902h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> initial register values (see #00001)
+Return: registers as specified in initial register values table
+Note: This function is called by LDR.EXE in loading a program to
+ be debugged. After executing the function, Soft-ICE pops up its
+ debugging window and you may start debugging your program.
+Return: ???
+SeeAlso: AX=0000h,AX=090Ah,AX=0910h,AX=0914h
+
+Format of Soft-ICE initial register values:
+Offset Size Description (Table 00001)
+ 00h WORD initial value of SP
+ 02h WORD initial value of SS
+ 04h WORD initial value of IP
+ 06h WORD initial value of CS
+ 08h WORD initial value of DS and ES
+ 0Ah WORD ???
+ 0Ch WORD ???
+ 0Eh WORD ???
+ 10h WORD initial value of AX
+ 12h WORD ??? (defaults to 000AH ???)
+ 14h WORD ??? (defaults to 0001H ???)
+ 16h WORD ??? (defaults to 0100H ???)
+--------G-030903-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 0903h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> ???
+ CX = ???
+ DX = ???
+Return: ???
+SeeAlso: AX=0000h,AX=0902h,AX=0907h,AX=0914h
+--------G-030907-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 0907h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> ???
+ CX = ???
+ DX = ???
+Return: ???
+SeeAlso: AX=0000h,AX=0903h,AX=090Ah,AX=0914h
+--------G-03090A-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 090Ah
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> ???
+ CX = ???
+ DX = ???
+Return: ???
+SeeAlso: AX=0000h,AX=0907h,AX=090Bh,AX=0914h
+--------G-03090B-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 090Bh
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> ???
+ CX = ???
+ DX = ???
+Return: ???
+SeeAlso: AX=0000h,AX=090Ah,AX=0910h,AX=0914h
+--------G-030910-----------------------------
+INT 03 - Soft-ICE - BACK DOOR COMMANDS - DISPLAY STRING IN Soft-ICE WINDOW
+ AX = 0910h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:DX -> ASCIZ string to display (max 100 bytes, 0Dh OK)
+Program: Soft-ICE is a debugger by Nu-Mega Technologies, Inc.
+SeeAlso: INT 03"WVIDEO"
+--------G-030911-----------------------------
+INT 03 - Soft-ICE - BACK DOOR COMMANDS - EXECUTE Soft-ICE COMMAND
+ AX = 0911h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:DX -> ASCIZ command string (max 100 bytes, 0Dh OK)
+Return: nothing
+SeeAlso: AX=0912h,AX=0913h
+--------G-030912-----------------------------
+INT 03 - Soft-ICE - BACK DOOR COMMANDS - GET BREAKPOINT INFORMATION
+ AX = 0912h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+Return: BH = entry number of last breakpoint set
+ BL = type of last breakpoint set (see #00002)
+ DH = entry number of last breakpoint to be triggered
+ DL = type of last triggered breakpoint (see #00002)
+Program: Soft-ICE is a debugger by Nu-Mega Technologies, Inc.
+SeeAlso: AX=0911h,AX=0913h,AX=0914h
+
+(Table 00002)
+Values for Soft-ICE breakpoint type:
+ 00h BPM (breakpoint register types)
+ 01h I/O
+ 02h INTerrupt
+ 03h BPX (INT 03-style breakpoint)
+ 04h reserved
+ 05h range
+--------G-030913-----------------------------
+INT 03 - Soft-ICE v2.5x - BACK DOOR COMMANDS - SET Soft-ICE BREAKPOINT
+ AX = 0913h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:DX -> breakpoint structure (see #00003)
+Return: AX = status
+ 00h successful
+ BX = breakpoint number
+ 03h breakpoint table full
+ 06h memory limit error
+ 07h I/O limit error
+ 09h range limit error
+ 16h duplicate breakpoint
+SeeAlso: AX=0911h,AX=0912h,AX=0914h
+
+Format of Soft-ICE breakpoint structure:
+Offset Size Description (Table 00003)
+ 00h BYTE breakpoint type (see #00004)
+ 01h DWORD breakpoint address 1
+ (lower range limit for memory BPs,
+ interrupt number for interrupt BPs,
+ address of BP for execution BPs,
+ I/O address (only word) for I/O BPs)
+ 05h DWORD breakpoint address 2
+ (upper range limit for memory BPs,
+ optional value to check for for interrupt BPs,
+ overlay number (0 = root) for execution BPs)
+ 09h DWORD breakpoint address 3
+ 0Dh BYTE breakpoint mode 1 (see #00005)
+ (for interrupt BPs = register to check
+ 00h no value checking
+ 01h check AL
+ 02h check AH
+ 03h check AX)
+ 0Eh BYTE breakpoint mode 2 (see #00005)
+ 0Fh BYTE breakpoint size (00h byte, 01h word, 03h dword)
+ 10h BYTE breakpoint pass count before program stop
+ 11h BYTE breakpoint state
+Note: all unused fields should contain zeros
+
+(Table 00004)
+Values for Soft-ICE breakpoint type:
+ 00h memory location
+ 01h memory range
+ 03h I/O
+ 04h interrupt
+ 05h execution break
+
+(Table 00005)
+Values for Soft-ICE breakpoint mode:
+ 01h read
+ 02h write
+ 04h execution
+--------G-030914-----------------------------
+INT 03 - Soft-ICE v2.5x - BACK DOOR COMMANDS - REMOVE Soft-ICE BREAKPOINT
+ AX = 0914h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ BX = breakpoint number (returned by AX=0913h)
+Return: BX = ???
+Program: Soft-ICE is a debugger by Nu-Mega Technologies, Inc.
+SeeAlso: AX=0912h,AX=0913h
+--------G-030918-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 0918h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ DS:BX -> ???
+ CX = ???
+ DX = ???
+Return: ???
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AX=0914h,INT 03/AH=10h
+--------G-0310-------------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AH = 10h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+Return: ???
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AH=01h,INT 03/AH=11h
+--------G-0311-------------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AH = 11h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+Return: none???
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AH=10h,INT 03/AX=130Ch
+--------G-03130C-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 130Ch
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ BX = ???
+ CX = ???
+ DX = ???
+Return: AX = ??? (1300h)
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AH=11h,INT 03/AX=130Eh
+--------G-03130E-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 130Eh
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ BX = ???
+ CX = ???
+ DX = ???
+Return: AX = ??? (1300h)
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AX=130Ch,INT 03/AX=1313h
+--------G-031313-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 1313h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+ BX = ???
+ CX = ???
+ DX = ???
+Return: AX = ??? (1300h)
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AX=130Eh
+--------G-030900-----------------------------
+INT 03 - Soft-ICE v2.80 - BACK DOOR COMMANDS - ???
+ AX = 0900h
+ SI = magic value 4647h ('FG')
+ DI = magic value 4A4Dh ('JM')
+Return: none???
+SeeAlso: INT 03/AX=0000h,INT 03/AX=0910h,INT 03/AH=10h,INT 03/AH=12h
+--------C-04---------------------------------
+INT 04 C - CPU-generated - INTO DETECTED OVERFLOW
+Desc: the INTO instruction will generate this interrupt if OF (Overflow Flag)
+ is set; otherwise, INTO is effectively a NOP
+Note: may be used for convenient overflow testing (to prevent errors from
+ propagating) instead of JO or a JNO/JMP combination
+SeeAlso: INT 00"CPU",OPCODE "AAD",OPCODE "AAM"
+--------B-05---------------------------------
+INT 05 - PRINT SCREEN
+Desc: dump the current text screen to the first printer
+Notes: normally invoked by the INT 09 handler when PrtSc key is pressed, but
+ may be invoked directly by applications
+ byte at 0050h:0000h contains status used by default handler
+ 00h not active
+ 01h PrtSc in progress
+ FFh last PrtSc encountered error
+ default handler is at F000h:FF54h in IBM PC and 100%-compatible BIOSes
+ since the BOUND instruction also calls INT 05h, but returns control
+ to the BOUND instruction, a failed BOUND check will cause an infinite
+ loop of PrtScreens unless the INT 05 handler is aware of the problem
+ and checks whether the interrupt was invoked by a BOUND instruction
+BUG: some old BIOSes/applications appear to destroy BP on return
+SeeAlso: INT 10/AH=12h/BL=20h,INT 4A"Tandy 2000",INT 5E"TI Professional"
+SeeAlso: INT 80"Phar Lap"
+--------C-05---------------------------------
+INT 05 C - CPU-generated (80186+) - BOUND RANGE EXCEEDED
+Desc: generated by BOUND instruction when the value to be tested is less than
+ the indicated lower bound or greater than the indicated upper bound.
+Note: returning from this interrupt re-executes the failing BOUND instruction
+--------P-05454A-----------------------------
+INT 05 U - PSPS v2.01 - EJECT PAGE
+ AX = 454Ah ('EJ')
+Program: PSPS is shareware PostScript PrintScreen utility by A.N.D.
+ Technologies
+Note: sends a ^D to the current printer
+SeeAlso: AX=4E57h,AX=5053h,AX=554Eh
+--------P-054E57-----------------------------
+INT 05 U - PSPS v2.01 - SET PARAMETERS
+ AX = 4E57h ('NW')
+ ES:SI -> 11-byte buffer containing new settings
+Return: buffer filled
+SeeAlso: AX=454Ah,AX=5053h,INT 17/AH=63h
+--------P-055053-----------------------------
+INT 05 U - PSPS v2.01 - GET PARAMETERS
+ AX = 5053h ('PS')
+ ES:SI -> 11-byte buffer for settings
+Return: buffer filled
+SeeAlso: AX=4E57h,AX=554Eh,INT 17/AH=64h
+--------P-05554E-----------------------------
+INT 05 U - PSPS v2.01 - UNINSTALL
+ AX = 554Eh ('UN')
+Program: PSPS is shareware PostScript PrintScreen utility by A.N.D.
+ Technologies
+SeeAlso: AX=454Ah,AX=4E57h,INT 17/AH=62h
+--------C-06---------------------------------
+INT 06 C - CPU-generated (80186+) - INVALID OPCODE
+Desc: this interrupt is generated when the CPU attempts to execute an
+ invalid opcode (most protected-mode instructions are considered
+ invalid in real mode) or a BOUND, LDS, LES, or LIDT instruction
+ which specifies a register rather than a memory address
+Notes: return address points to beginning of invalid instruction
+ with proper programming, this interrupt may be used to emulate
+ instructions which do not exist; many 386 BIOSes emulate the 80286
+ undocumented LOADALL instruction which was removed from the 80386+
+ generated by the 80386+ when the LOCK prefix is used with instructions
+ other than BTS, BTR, BTC, XCHG, XADD (486), CMPXCHG (486), INC, DEC,
+ NOT, NEG, ADD, ADC, SUB, SBB, AND, OR, or XOR, or any instruction
+ not accessing memory.
+SeeAlso: INT 0C"CPU",INT 0D"CPU"
+--------b-06---------------------------------
+INT 06 C - HP 95LX - SLEEP/WAKEUP
+Desc: this interrupt is called just before going into light or deep
+ (shutdown) sleep and just after returning from light or deep sleep
+SeeAlso: INT 0B"HP 95LX",INT 15/AX=4DD4h,INT 15/AH=4Eh
+--------V-06---------------------------------
+INT 06 U - no-name clone - GRAPHICS CHARACTER TABLE (NOT A VECTOR!)
+Desc: points at graphics data for characters 00h-7Fh of the current font
+SeeAlso: INT 43"EGA",INT 44"VIDEO"
+--------C-07---------------------------------
+INT 07 C - CPU-generated (80286+) - PROCESSOR EXTENSION NOT AVAILABLE
+Desc: this interrupt is automatically called if a coprocessor instruction is
+ encountered when no coprocessor is installed
+Note: can be used to emulate a numeric coprocessor in software
+SeeAlso: INT 09"CPU"
+--------H-08---------------------------------
+INT 08 C - IRQ0 - SYSTEM TIMER
+Desc: generated 18.2 times per second by channel 0 of the 8254 system timer,
+ this interrupt is used to keep the time-of-day clock updated
+Notes: programs which need to be invoked regularly should use INT 1C unless
+ they need to reprogram the timer while still keeping the time-of-day
+ clock running at the proper rate
+ default handler is at F000h:FEA5h in IBM PC and 100%-compatible BIOSes
+ may be masked by setting bit 0 on I/O port 21h
+SeeAlso: INT 1C,INT 4A"SYSTEM",INT 50"DESQview",INT 58"DoubleDOS",INT 70"IRQ8"
+SeeAlso: INT 78"GO32",INT D8"Screen Thief",MEM 0040h:0040h,MEM 0040h:006Ch
+--------C-08---------------------------------
+INT 08 C - CPU-generated (80286+) - DOUBLE EXCEPTION DETECTED
+Desc: called when multiple exceptions occur on one instruction, or an
+ exception occurs in an exception handler
+Notes: called in protected mode if an interrupt above the defined limit of
+ the interrupt vector table occurs
+ return address points at beginning of instruction with errors or the
+ beginning of the instruction which was about to execute when the
+ external interrupt caused the exception
+ if an exception occurs in the double fault handler, the CPU goes into
+ SHUTDOWN mode (which circuitry in the PC/AT converts to a reset);
+ this "triple fault" is a faster way of returning to real mode on
+ many 80286 machines than the standard keyboard controller reset
+--------H-09---------------------------------
+INT 09 C - IRQ1 - KEYBOARD DATA READY
+Desc: this interrupt is generated when data is received from the keyboard.
+ This is normally a scan code (from either a keypress *or* a key
+ release), but may also be an ACK or NAK of a command on AT-class
+ keyboards.
+Notes: this IRQ may be masked by setting bit 1 on I/O port 21h
+ if the BIOS supports an enhanced (101/102-key) keyboard, it calls
+ INT 15/AH=4Fh after reading the scan code (see #00006) from the
+ keyboard and before further processing; all further processing uses
+ the scan code returned from INT 15/AH=4Fh
+ the default interrupt handler is at F000h:E987h in 100%-compatible
+ BIOSes
+ the interrupt handler performs the following actions for certain
+ special keystrokes:
+ Ctrl-Break clear keyboard buffer, place word 0000h in buffer,
+ invoke INT 1B, and set flag at 0040h:0071h
+ SysReq invoke INT 15/AH=85h (SysReq is often labeled SysRq)
+ Ctrl-Numlock place system in a tight wait loop until next INT 09
+ Ctrl-Alt-Del jump to BIOS startup code (either F000h:FFF0h or the
+ destination of the jump at that address)
+ Shift-PrtSc invoke INT 05
+ Ctrl-Alt-Plus (HP Vectra) enable keyclick
+ Ctrl-Alt-Plus (many clones) set clock speed to high
+ Ctrl-Alt-Minus (HP Vectra) reduce keyclick volume
+ Ctrl-Alt-Minus (many clones) set clock speed to low
+ Ctrl-Alt-SysReq (HP Vectra) generate hard reset
+ Ctrl-Alt-S (many clones) run BIOS setup program
+ Ctrl-Alt-Esc (many clones) run BIOS setup program
+ Ctrl-Alt-Ins (many clones) run BIOS setup program
+ Ctrl-Alt-LeftShift-GrayMinus (some clones) turn off system cache
+ Ctrl-Alt-LeftShift-GrayPlus (some clones) turn on system cache
+ DR DOS hooks this interrupt to control the cursor shape (underscore/
+ half block) for overwrite/insert mode
+ DR Multiuser DOS hooks this interrupt for cursor shape control and to
+ control whether Ctrl-Alt-Del reboots the current session or the
+ entire system
+SeeAlso: INT 05"PRINT SCREEN",INT 0B"HP 95LX",INT 15/AH=4Fh,INT 15/AH=85h
+SeeAlso: INT 16/AH=00h,INT 16/AH=10h,INT 1B,INT 2F/AX=A901h,INT 4A/AH=00h"TI"
+SeeAlso: INT 51"DESQview",INT 59"DoubleDOS",INT 79"GO32"
+
+(Table 00006)
+Values for keyboard make/break (scan) code:
+ 01h Esc 31h N
+ 02h 1 ! 32h M
+ 03h 2 @ 33h , < 63h F16
+ 04h 3 # 34h . > 64h F17
+ 05h 4 $ 35h / ? 65h F18
+ 06h 5 % 36h Right Shift 66h F19
+ 07h 6 ^ 37h Grey* 67h F20
+ 08h 7 & 38h Alt 68h F21 (Fn) [*]
+ 09h 8 * 39h SpaceBar 69h F22
+ 0Ah 9 ( 3Ah CapsLock 6Ah F23
+ 0Bh 0 ) 3Bh F1 6Bh F24
+ 0Ch - _ 3Ch F2 6Ch --
+ 0Dh = + 3Dh F3 6Dh EraseEOF
+ 0Eh Backspace 3Eh F4
+ 0Fh Tab 3Fh F5 6Fh Copy/Play
+ 10h Q 40h F6
+ 11h W 41h F7
+ 12h E 42h F8 72h CrSel
+ 13h R 43h F9 73h <delta> [*]
+ 14h T 44h F10 74h ExSel
+ 15h Y 45h NumLock 75h --
+ 16h U 46h ScrollLock 76h Clear
+ 17h I 47h Home 77h [Note2] Joyst But1
+ 18h O 48h UpArrow 78h [Note2] Joyst But2
+ 19h P 49h PgUp 79h [Note2] Joyst Right
+ 1Ah [ { 4Ah Grey- 7Ah [Note2] Joyst Left
+ 1Bh ] } 4Bh LeftArrow 7Bh [Note2] Joyst Up
+ 1Ch Enter 4Ch Keypad 5 7Ch [Note2] Joyst Down
+ 1Dh Ctrl 4Dh RightArrow 7Dh [Note2] right mouse
+ 1Eh A 4Eh Grey+ 7Eh [Note2] left mouse
+ 1Fh S 4Fh End
+ 20h D 50h DownArrow
+ 21h F 51h PgDn
+ 22h G 52h Ins
+ 23h H 53h Del
+ 24h J 54h SysReq ---non-key codes---
+ 25h K 55h [Note1] F11 00h kbd buffer full
+ 26h L 56h left \| (102-key)
+ 27h ; : 57h F11 AAh self-test complete
+ 28h ' " 58h F12 E0h prefix code
+ 29h ` ~ 59h [Note1] F15 E1h prefix code
+ 2Ah Left Shift 5Ah PA1 EEh ECHO
+ 2Bh \ | 5Bh F13 (LWin) F0h prefix code (key break)
+ 2Ch Z 5Ch F14 (RWin) FAh ACK
+ 2Dh X 5Dh F15 (Menu) FCh diag failure (MF-kbd)
+ 2Eh C FDh diag failure (AT-kbd)
+ 2Fh V FEh RESEND
+ 30h B FFh kbd error/buffer full
+Notes: scan codes 56h-E1h are only available on the extended (101/102-key)
+ keyboard and Host Connected (122-key) keyboard; scan codes 5Bh-5Dh
+ are only available on the 122-key keyboard and the Microsoft Natural
+ Keyboard; scan codes 5Eh-76h are only available on the 122-key
+ keyboard
+ in the default configuration, break codes are the make scan codes with
+ the high bit set; make codes 60h,61h,70h, etc. are not available
+ because the corresponding break codes conflict with prefix codes
+ (code 2Ah is available because the self-test result code AAh is only
+ sent on keyboard initialization). An alternate keyboard
+ configuration can be enabled on AT and later systems with enhanced
+ keyboards, in which break codes are the same as make codes, but
+ prefixed with an F0h scan code
+ prefix code E0h indicates that the following make/break code is for a
+ "gray" duplicate to a key which existed on the original PC keyboard;
+ prefix code E1h indicates that the following make code has no
+ corresponding break code (currently only the Pause key generates no
+ break code)
+ the Microsoft Natural Keyboard sends make codes 5Bh, 5Ch, and 5Dh
+ (all with an E0h prefix) for the Left Windows, Right Windows, and
+ Menu keys on the bottom row
+ the European "Cherry G81-3000 SAx/04" keyboard contains contacts for
+ four additional keys, which can be made available by a user
+ modification; the three new keys located directly below the cursor
+ pad's Delete, End, and PgDn keys send make codes 66h-68h (F19-F21);
+ the fourth new key, named <delta>, sends make code 73h
+ the SysReq key is often labeled SysRq
+ the "Accord" ergonomic keyboard with optional touchpad (no other
+ identification visible on keyboard or in owner's booklet) has an
+ additional key above the Grey- key marked with a left-pointing
+ triangle and labeled "Fn" in the owner's booklet which returns
+ scan codes E0h 68h on make and E0h E8h on break
+ the "Preh Commander AT" keyboard with additional F11-F22 keys treats
+ F11-F20 as Shift-F1..Shift-F10 and F21/F22 as Ctrl-F1/Ctrl-F2; the
+ Eagle PC-2 keyboard with F11-F24 keys treated those additional keys
+ in the same way
+ [Note1] the "Cherry G80-0777" keyboard has additional F11-F15 keys
+ which generate make codes 55h-59h; some other extended keyboards
+ generate codes 55h and 56h for F11 and F12, which cannot be managed
+ by standard DOS keyboard drivers
+ [Note2] the Schneider/Amstrad PC1512 PC keyboards contain extra keys,
+ a mouse, and a digital joystick, which are handled like extra keys.
+ The joystick's motion scancodes are converted into standard arrow
+ keys by the BIOS, and the joystick and mouse button scan codes are
+ converted to FFFFh codes in the BIOS keyboard buffer
+ (see CMOS 15h"AMSTRAD").
+ In addition to the keys listed in the table above, there are
+ Del-> (delete forward) 70h
+ Enter 74h
+SeeAlso: #00602 at INT 16/AX=6F07h,#03214 at INT 4A/AH=05h
+--------C-09---------------------------------
+INT 09 C - CPU-generated (80286,80386) - PROCESSOR EXTENSION PROTECTION ERROR
+Desc: called if the coprocessor attempts to access memory outside a segment
+ boundary; it may occur at an arbitrary time after the coprocessor
+ instruction was issued
+Notes: until the condition is cleared or the coprocessor is reset, the only
+ coprocessor instruction which may be used is FNINIT; WAIT or other
+ coprocessor instructions will cause a deadlock because the
+ coprocessor is still busy waiting for data
+ for the 486+, a coprocessor protection error generates an INT 0D
+SeeAlso: INT 07"CPU"
+--------*-09---------------------------------
+INT 09 P - internal hardware - RESERVED BY Intel (80486)
+Note: this exception has been moved to INT 0D
+SeeAlso: INT 09"CPU",INT 0D
+--------H-0A---------------------------------
+INT 0A C - IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA)
+Notes: the TOPS and PCnet adapters use this interrupt request line by default
+ DOS 3.2 revectors IRQ2 to a stack-switching routine; DOS 3.3+ does so
+ unless STACKS=0 has been set in CONFIG.SYS. MS/PC-DOS 3.3+ use the
+ IBM Interrupt Sharing Protocol (see #02568) when hooking this IRQ
+ on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and
+ connects to the slave 8259. The BIOS redirects the interrupt for
+ IRQ9 back here.
+ under DESQview, only the INT 15h vector and BASIC segment address (the
+ word at 0000h:0510h) may be assumed to be valid for the handler's
+ process
+ many VGA boards do not implement the vertical retrace interrupt,
+ including the IBM VGA Adapter where the traces are either cut or
+ removed
+SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
+--------H-0A---------------------------------
+INT 0A C - IRQ2 - Tandy 1000-series HARD DISK
+Notes: this interrupt may be masked by setting bit 2 on I/O port 21h
+ the Tandy 1000, 1000A, and 1000HD use IRQ2 for the hard disk; the
+ 1000EX, HX, RLX, RLX-HD, RLX-B, RLX-HD-B use IRQ5 instead; the
+ 1000RL, RL-HD, SL, SL/2, TL, TL/2, and TL/3 are jumper-selectable
+ for either IRQ2 or IRQ5 (default IRQ5); the 1000SX and TX are
+ DIP-switch selectable for IRQ2 or IRQ5 (default IRQ2); the RSX and
+ RSX-HD use IRQ14. Tandy systems which use IRQ2 for the hard disk
+ interrupt use IRQ5 for vertical retrace.
+SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71
+--------H-0A---------------------------------
+INT 0A - IRQ2 - ROLAND MPU MIDI INTERFACE
+Note: newer Roland cards and MIDI interfaces by other manufacturers use
+ a jumper-selectable IRQ, but software and hardware generally defaults
+ to IRQ2
+SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
+--------C-0A---------------------------------
+INT 0A CP - CPU-generated (80286+) - INVALID TASK STATE SEGMENT
+Desc: automatically called during a task switch if the new TSS specified by
+ the task gate is invalid for any of the following reasons:
+ TSS limit is less than 43 (80286) or 103 (80386/80486)
+ LDT selector invalid or segment not present
+ null SS selector, or SS selector outside LDT/GDT limit
+ stack segment is read-only
+ stack segment DPL differs from new CPL, or RPL <> CPL
+ CS selector is outside LDT/GDT limit or not code
+ non-conforming code segment's DPL differs from CPL
+ conforming code segment's DPL > CPL
+ DS/ES selectors outside LDT/GDT limit or not readable segments
+Note: the handler must use a task gate in order to have a valid TSS under
+ which to execute; it must also reset the busy bit in the new TSS
+SeeAlso: INT 0B"CPU"
+--------H-0B---------------------------------
+INT 0B C - IRQ3 - SERIAL COMMUNICATIONS (COM2)
+Desc: automatically asserted by the UART when COM2 needs attention, if the
+ UART has been programmed to generate interrupts
+Notes: the TOPS and PCnet adapters use this interrupt request line as an
+ alternate
+ on PS/2s, COM2 through COM8 share this interrupt; on many PC's, COM4
+ shares this interrupt
+ may be masked by setting bit 3 on I/O port 21h
+ DOS 3.3+ revectors IRQ3 to a stack-switching routine unless STACKS=0
+ has been set in CONFIG.SYS. MS/PC-DOS use the IBM Interrupt Sharing
+ Protocol (see #02568) when hooking this IRQ
+SeeAlso: INT 0C"COM1",INT 53"DESQview",INT 5B"DoubleDOS",INT 7B"GO32"
+--------C-0B---------------------------------
+INT 0B CP - CPU-generated (80286+) - SEGMENT NOT PRESENT
+Desc: generated when loading a segment register if the segment descriptor
+ indicates that the segment is not currently in memory, unless the
+ segment is an LDT (see INT 0A"CPU") or stack segment (see
+ INT 0C"CPU") needed by a task switch
+Note: may be used to implement virtual memory by loading in segments as they
+ are accessed, clearing the "not present" bit after loading
+SeeAlso: INT 0A"CPU",INT 0E"CPU"
+--------h-0B---------------------------------
+INT 0B - HP 95LX - LOW-LEVEL KEYBOARD HANDLER
+Desc: this is the lowest-level keyboard handler on an HP 95LX palmtop
+Note: debounces key, places the keycode in I/O register 60h, and calls INT 09
+SeeAlso: INT 09,INT 0D"HP 95LX",INT 15/AX=4DD4h
+--------H-0C---------------------------------
+INT 0C C - IRQ4 - SERIAL COMMUNICATIONS (COM1)
+Desc: automatically asserted by the UART when COM1 needs attention, if the
+ UART has been programmed to generate interrupts
+BUG: this vector is modified but not restored by Direct Access v4.0, and
+ may be left dangling by other programs written with the same version
+ of compiled BASIC
+Notes: on many PC's, COM3 shares this interrupt
+ may be masked by setting bit 4 on I/O port 21h
+ DOS 3.3+ revectors IRQ4 to a stack-switching routine unless STACKS=0
+ has been set in CONFIG.SYS. MS/PC-DOS use the IBM Interrupt Sharing
+ Protocol (see #02568) when hooking this IRQ
+SeeAlso: INT 0B"COM2",INT 54"DESQview",INT 5C"DoubleDOS",INT 7C"GO32"
+--------C-0C---------------------------------
+INT 0C C - CPU-generated (80286+) - STACK FAULT
+Desc: this interrupt is generated in protected mode on a stack overflow or
+ underflow, or if an inter-level transition or task switch references
+ a stack segment marked "not present"; it is generated in real mode
+ on accessing a word operand at SS:FFFFh
+Note: the 80286 will shut down in real mode if SP=1 before a push. On the
+ PC AT and compatibles, external circuitry generates a reset on
+ shutdown.
+SeeAlso: INT 0B"CPU",INT 0D"CPU"
+--------I-0C---------------------------------
+INT 0C - IBM SYSTEM 36/38 WORKSTATION EMULATION - API POINTER
+Desc: the IBM System 36/38 emulator may be invoked through a private API,
+ whose entry point address (see #00007) is offset 100h in the segment
+ pointed at by this vector
+
+(Table 00007)
+Call the System 36/38 emulator API entry point with:
+ AH = function
+ 03h update screen
+ 05h select next session
+ AL = session number (00h-03h)
+ Return: AL = session type code
+ 00h not active
+ 01h display session
+ 02h printer session
+ FEh invalid session number
+ DS = requested session's data segment (0 if not active)
+ (see #00008)
+Return: ???
+
+Format of System 36/38 emulator's data area:
+Offset Size Description (Table 00008)
+13Eh BYTE bit flags for status line indicators turned on since this byte
+ last zerod
+13Fh BYTE bit flags for status line indicators turned off since this
+ byte last set to FFh
+140h WORD offset of EBCDIC to ASCII translation
+146h WORD offset of EBCDIC screen buffer
+148h WORD offset of EC (engineering change) level signature
+150h BYTE "KEYI"
+151h BYTE 5250 key scan code to be sent to remote
+15Bh BYTE "SYSAV"
+15Dh BYTE 5250 cursor column
+15Eh BYTE 5250 cursor row
+167h BYTE "DVCTAD"
+178h BYTE "FLAGS"
+184h BYTE "SESSNOAD"
+193h BYTE "STNAD"
+198h BYTE "NSDS"
+Note: offsets are from the interrupt handler's segment
+--------H-0D---------------------------------
+INT 0D C - IRQ5 - FIXED DISK (PC,XT), LPT2 (AT), reserved (PS/2)
+Notes: under DESQview, only the INT 15h vector and BASIC segment address (the
+ word at 0000h:0510h) may be assumed to be valid for the handler's
+ process
+ DOS 3.3+ revectors IRQ5 to a stack-switching routine unless STACKS=0
+ has been set in CONFIG.SYS. MS/PC-DOS use the IBM Interrupt Sharing
+ Protocol (see #02568) when hooking this IRQ
+ the Tandy 1000, 1000A, and 1000HD use IRQ2 for the hard disk; the
+ 1000EX, HX, RLX, RLX-HD, RLX-B, RLX-HD-B use IRQ5 instead; the
+ 1000RL, RL-HD, SL, SL/2, TL, TL/2, and TL/3 are jumper-selectable
+ for either IRQ2 or IRQ5 (default IRQ5); the 1000SX and TX are
+ DIP-switch selectable for IRQ2 or IRQ5 (default IRQ2); the RSX and
+ RSX-HD use IRQ14. Tandy systems which use IRQ2 for the hard disk
+ interrupt use IRQ5 for vertical retrace.
+ may be masked by setting bit 5 on I/O port 21h
+SeeAlso: INT 0E"IRQ6",INT 0F"IRQ7",INT 55"DESQview",INT 5D"DoubleDOS"
+SeeAlso: INT 7D"GO32"
+--------H-0D---------------------------------
+INT 0D C - IRQ5 - Tandy 1000 60 Hz RAM REFRESH
+Desc: used to ensure that the dynamic RAM retains its contents in earlier
+ 1000-series models; later models use normal DMA for RAM refresh
+ (some early models have no DMA unless it is added via an expansion
+ card)
+SeeAlso: INT 55
+--------h-0D---------------------------------
+INT 0D - HP 95LX - INFRARED INTERRUPT
+Desc: this interrupt is used to perform communications over the infrared
+ data link
+SeeAlso: INT 0B"HP 95LX",INT 0E"HP 95LX",INT 15/AX=4DD4h
+--------C-0D---------------------------------
+INT 0D C - CPU-generated (80286+) - GENERAL PROTECTION VIOLATION
+Desc: the CPU generates this interrupt when it detects a protection violation
+ which does not fit under any other category having a separate
+ interrupt
+Notes: called in real mode when
+ an instruction accesses a memory operand extending beyond offset
+ FFFFh (i.e. WORD at FFFFh or DWORD at FFFDh or higher) in segment
+ CS, DS, ES, FG, or GS
+ a PUSH MEM or POP MEM instruction contains an invalid bit encoding
+ in the second byte
+ an instruction exceeds the maximum length allowed (10 bytes for
+ 80286, 15 bytes for 80386/80486)
+ an instruction wraps from offset FFFFh to offset 0000h
+ called in protected mode on protection violations not covered by INT 06
+ through INT 0C, including
+ segment limit violations
+ write to read-only segments
+ accesses using null DS or ES selectors
+ accesses to segments with privilege greater than CPL
+ wrong descriptor type
+ called on 80486 protected-mode floating-point protection fault
+SeeAlso: INT 09"80486",INT 0C"STACK"
+--------H-0E---------------------------------
+INT 0E C - IRQ6 - DISKETTE CONTROLLER
+Desc: this interrupt is generated by the floppy disk controller on
+ completion of an operation
+Notes: default handler is at F000h:EF57h in IBM PC and 100%-compatible BIOSes
+ may be masked by setting bit 6 on I/O port 21h
+ DOS 3.3+ revectors IRQ6 to a stack-switching routine unless STACKS=0
+ has been set in CONFIG.SYS. MS/PC-DOS use the IBM Interrupt Sharing
+ Protocol (see #02568) when hooking this IRQ
+SeeAlso: INT 0D"IRQ5",INT 56"DESQview",INT 5E"DoubleDOS",INT 7E"GO32"
+--------C-0E---------------------------------
+INT 0E C - CPU-generated (80386+ native mode) - PAGE FAULT
+Desc: this interrupt is generated in protected and virtual-86 modes on
+ attempting to access a 4K memory page whose page table entry has
+ the "present" bit cleared
+Notes: used to implement virtual memory--when the page fault occurs, the
+ operating system can load the appropriate page from disk
+ a protected-mode program written in the Flat memory model will often
+ generate this interrupt (typically reported as an Exception #14 or
+ Exception 0E with a register dump) when dereferencing an
+ uninitialized or corrupted pointer
+SeeAlso: INT 0B"CPU"
+--------h-0E---------------------------------
+INT 0E C - HP 95LX - EXTERNAL CARD INTERRUPT
+SeeAlso: INT 0D"HP 95LX",INT 0F"HP 95LX",INT 15/AX=4DD4h
+--------H-0F---------------------------------
+INT 0F C - IRQ7 - PARALLEL PRINTER
+Desc: this interrupt is generated by the LPT1 printer adapter when the
+ printer becomes ready
+Notes: most printer adapters do not reliably generate this interrupt
+ the 8259 interrupt controller generates an interrupt corresponding to
+ IRQ7 when an error condition occurs
+SeeAlso: INT 0D"IRQ5",INT 57"DESQview",INT 5F"DoubleDOS",INT 7F"GO32"
+SeeAlso: MEM 0040h:006Bh
+--------h-0F---------------------------------
+INT 0F C - HP 95LX - REAL-TIME CLOCK
+SeeAlso: INT 0E"HP 95LX",INT 15/AX=4DD4h,INT 70"IRQ8"
+--------C-10---------------------------------
+INT 10 C - CPU-generated (80286+) - COPROCESSOR ERROR
+Desc: this interrupt is generated by the CPU when the -ERROR pin is asserted
+ by the coprocessor
+Note: AT's and clones usually wire the coprocessor to use IRQ13, but not all
+ get it right
+SeeAlso: INT 09"hardware",INT 75
+--------V-10---------------------------------
+INT 10h - LIRVGA19 - CHAR HEIGHT HOOK
+Desc: LIRVGA19.COM fixes display problems on some notebooks by hooking
+ INT 10h and resetting the BIOS character height (MEM 0040h:0085h)
+ to 10h on return, if it happens to be greater than 10h.
+Program: LIRVGA19.COM is part of the Lithuanian LIR codepage support package
+ developed by LABAS u.a.b.
+SeeAlso: INT 10/AX=5555h/BX=BBBBh,MEM 0040h:0085h
+--------V-1000-------------------------------
+INT 10 - VIDEO - SET VIDEO MODE
+ AH = 00h
+ AL = desired video mode (see #00010)
+Return: AL = video mode flag (Phoenix, AMI BIOS)
+ 20h mode > 7
+ 30h modes 0-5 and 7
+ 3Fh mode 6
+ AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
+Desc: specify the display mode for the currently active display adapter
+InstallCheck: for Ahead adapters, the signature "AHEAD" at C000h:0025h
+ for Paradise adapters, the signature "VGA=" at C000h:007Dh
+ for Oak Tech OTI-037/057/067/077 chipsets, the signature "OAK VGA" at
+ C000h:0008h
+ for ATI adapters, the signature "761295520" at C000h:0031h; the byte
+ at C000h:0043h indicates the chipset revision:
+ 31h for 18800
+ 32h for 18800-1
+ 33h for 18800-2
+ 34h for 18800-4
+ 35h for 18800-5
+ 62h for 68800AX (Mach32) (see also #00732)
+ the two bytes at C000h:0040h indicate the adapter type
+ "22" EGA Wonder
+ "31" VGA Wonder
+ "32" EGA Wonder800+
+ the byte at C000h:0042h contains feature flags
+ bit 1: mouse port present
+ bit 4: programmable video clock
+ the byte at C000h:0044h contains additional feature flags if chipset
+ byte > 30h (see #00009)
+ for Genoa video adapters, the signature 77h XXh 99h 66h at C000h:NNNNh,
+ where NNNNh is stored at C000h:0037h and XXh is
+ 00h for Genoa 6200/6300
+ 11h for Genoa 6400/6600
+ 22h for Genoa 6100
+ 33h for Genoa 5100/5200
+ 55h for Genoa 5300/5400
+ for SuperEGA BIOS v2.41+, C000h:0057h contains the product level
+ for Genoa SuperEGA BIOS v3.0+, C000h:0070h contains the signature
+ "EXTMODE", indicating support for extended modes
+Notes: IBM standard modes do not clear the screen if the high bit of AL is set
+ (EGA or higher only)
+ the Tseng ET4000 chipset is used by the Orchid Prodesigner II, Diamond
+ SpeedSTAR VGA, Groundhog Graphics Shadow VGA, Boca Super X VGA,
+ Everex EV-673, etc.
+ intercepted by GRAFTABL from Novell DOS 7 and Caldera OpenDOS 7.01.
+SeeAlso: AX=0070h,AX=007Eh,AX=10E0h,AX=10F0h,AH=40h,AX=6F05h,AH=FFh"GO32"
+SeeAlso: INT 33/AX=0028h,INT 5F/AH=00h,INT 62/AX=0001h,MEM 0040h:0049h
+Index: installation check;Tseng ET4000|installation check;Ahead video cards
+Index: installation check;Oak Technologies|installation check;ATI video cards
+Index: installation check;Paradise video|installation check;Genoa video cards
+
+Bitfields for ATI additional feature flags:
+Bit(s) Description (Table 00009)
+ 0 70 Hz non-interlaced display
+ 1 Korean (double-byte) characters
+ 2 45 MHz memory clock rather than 40 MHz
+ 3 zero wait states
+ 4 paged ROMs
+ 6 no 8514/A monitor support
+ 7 HiColor DAC
+
+(Table 00010)
+Values for video mode:
+ text/ text pixel pixel colors disply scrn system
+ grph resol box resolution pages addr
+ 00h = T 40x25 8x8 320x200 16gray 8 B800 CGA,PCjr,Tandy
+ = T 40x25 8x14 320x350 16gray 8 B800 EGA
+ = T 40x25 8x16 320x400 16 8 B800 MCGA
+ = T 40x25 9x16 360x400 16 8 B800 VGA
+ 01h = T 40x25 8x8 320x200 16 8 B800 CGA,PCjr,Tandy
+ = T 40x25 8x14 320x350 16 8 B800 EGA
+ = T 40x25 8x16 320x400 16 8 B800 MCGA
+ = T 40x25 9x16 360x400 16 8 B800 VGA
+ 02h = T 80x25 8x8 640x200 16gray 4 B800 CGA,PCjr,Tandy
+ = T 80x25 8x14 640x350 16gray 8 B800 EGA
+ = T 80x25 8x16 640x400 16 8 B800 MCGA
+ = T 80x25 9x16 720x400 16 8 B800 VGA
+ 03h = T 80x25 8x8 640x200 16 4 B800 CGA,PCjr,Tandy
+ = T 80x25 8x14 640x350 16/64 8 B800 EGA
+ = T 80x25 8x16 640x400 16 8 B800 MCGA
+ = T 80x25 9x16 720x400 16 8 B800 VGA
+ = T 80x43 8x8 640x350 16 4 B800 EGA,VGA [17]
+ = T 80x50 8x8 640x400 16 4 B800 VGA [17]
+ 04h = G 40x25 8x8 320x200 4 . B800 CGA,PCjr,EGA,MCGA,VGA
+ 05h = G 40x25 8x8 320x200 4gray . B800 CGA,PCjr,EGA
+ = G 40x25 8x8 320x200 4 . B800 MCGA,VGA
+ 06h = G 80x25 8x8 640x200 2 . B800 CGA,PCjr,EGA,MCGA,VGA
+ = G 80x25 . . mono . B000 HERCULES.COM on HGC [14]
+ 07h = T 80x25 9x14 720x350 mono var B000 MDA,Hercules,EGA
+ = T 80x25 9x16 720x400 mono . B000 VGA
+ 08h = T 132x25 8x8 1056x200 16 . B800 ATI EGA/VGA Wonder [2]
+ = T 132x25 8x8 1056x200 mono . B000 ATI EGA/VGA Wonder [2]
+ = G 20x25 8x8 160x200 16 . . PCjr, Tandy 1000
+ = G 80x25 8x16 640x400 color . . Tandy 2000
+ = G 90x43 8x8 720x348 mono . B000 Hercules + MSHERC.COM
+ = G 90x45 8x8 720x360 mono . B000 Hercules + HERKULES [11]
+ = G 90x29 8x12 720x348 mono . . Hercules + HERCBIOS [15]
+ 09h = G 40x25 8x8 320x200 16 . . PCjr, Tandy 1000
+ = G 80x25 8x16 640x400 mono . . Tandy 2000
+ = G 90x43 8x8 720x348 mono . . Hercules + HERCBIOS [15]
+ 0Ah = G 80x25 8x8 640x200 4 . . PCjr, Tandy 1000
+ 0Bh = reserved (EGA BIOS internal use)
+ = G 80x25 8x8 640x200 16 . . Tandy 1000 SL/TL [13]
+ 0Ch = reserved (EGA BIOS internal use)
+ 0Dh = G 40x25 8x8 320x200 16 8 A000 EGA,VGA
+ 0Eh = G 80x25 8x8 640x200 16 4 A000 EGA,VGA
+ 0Fh = G 80x25 8x14 640x350 mono 2 A000 EGA,VGA
+ 10h = G 80x25 8x14 640x350 4 2 A000 64k EGA
+ = G . . 640x350 16 . A000 256k EGA,VGA
+ 11h = G 80x30 8x16 640x480 mono . A000 VGA,MCGA,ATI EGA,ATI VIP
+ 12h = G 80x30 8x16 640x480 16/256K . A000 VGA,ATI VIP
+ = G 80x30 8x16 640x480 16/64 . A000 ATI EGA Wonder
+ = G . . 640x480 16 . . UltraVision+256K EGA
+ 13h = G 40x25 8x8 320x200 256/256K . A000 VGA,MCGA,ATI VIP
+ 14h = T 132x25 Nx16 . 16 . B800 XGA, IBM Enhanced VGA [3]
+ = T 132x25 8x16 1056x400 16/256K . . Cirrus CL-GD5420/5422/5426
+ = G 80x25 8x8 640x200 . . . Lava Chrome II EGA
+ = G . . 640x400 16 . . Tecmar VGA/AD
+ 15h = G 80x25 8x14 640x350 . . . Lava Chrome II EGA
+ 16h = G 80x25 8x14 640x350 . . . Lava Chrome II EGA
+ = G . . 800x600 16 . . Tecmar VGA/AD
+ 17h = T 132x25 . . . . . Tecmar VGA/AD
+ = T 80x43 8x8 640x348 16 4 B800 Tseng ET4000 BIOS [10]
+ = G 80x34 8x14 640x480 . . . Lava Chrome II EGA
+ 18h = T 80x30 9x16 720x480 16 1 A000 Realtek RTVGA [12]
+ = T 132x25 . . mono . B000 Cirrus 5320 chipset
+ = T 132x44 8x8 1056x352 mono . B000 Tseng Labs EVA
+ = T 132x44 9x8 1188x352 4gray 2 B000 Tseng ET3000 chipset
+ = T 132x44 8x8 1056x352 16/256 2 B000 Tseng ET4000 chipset
+ = G 80x34 8x14 640x480 . . . Lava Chrome II EGA
+ = G 1024x768 16 . . Tecmar VGA/AD
+ 19h = T 80x43 9x11 720x473 16 1 A000 Realtek RTVGA [12]
+ = T 132x25 8x14 1056x350 mono . B000 Tseng Labs EVA
+ = T 132x25 9x14 1188x350 4gray 4 B000 Tseng ET3000 chipset
+ = T 132x25 8x14 1056x350 16/256 4 B000 Tseng ET4000 chipset
+ = T 132x34 . . mono . B000 Cirrus 5320 chipset
+ 1Ah = T 80x60 9x8 720x480 16 1 A000 Realtek RTVGA [12]
+ = T 132x28 8x13 1056x364 mono . B000 Tseng Labs EVA
+ = T 132x28 9x13 1188x364 4gray 4 B000 Tseng ET3000 chipset
+ = T 132x28 8x13 1056x364 16/256 4 B000 Tseng ET4000 chipset
+ = T 132x44 . . mono . B000 Cirrus 5320 chipset
+ = G . . 640x350 256 . . Tecmar VGA/AD
+ 1Bh = T 132x25 9x14 1188x350 16 1 A000 Realtek RTVGA [12]
+ = G . . 640x400 256 . . Tecmar VGA/AD
+ 1Ch = T 132x25 . . . . . Cirrus 5320 chipset
+ = T 132x30 9x16 1188x480 16 1 A000 Realtek RTVGA [12]
+ = G . . 640x480 256 . . Tecmar VGA/AD
+ 1Dh = T 132x43 . . . . . Cirrus 5320 chipset
+ = T 132x43 9x11 1188x473 16 1 A000 Realtek RTVGA [12]
+ = G . . 800x600 256 . . Tecmar VGA/AD
+ 1Eh = T 132x44 . . . . . Cirrus 5320 chipset
+ = T 132x60 9x8 1188x480 16 1 A000 Realtek RTVGA [12]
+ 1Fh = G 100x75 8x8 800x600 16 1 A000 Realtek RTVGA
+ 20h = T 132x25 . . 16 . . Avance Logic AL2101
+ = G 40x16 . 240x128 mono . B000 HP 95LX/100LX/200LX
+ = G 80x30 8x16 640x480 16 . . C&T 64310/65530 BIOS
+ = G 120x45 8x16 960x720 16 1 A000 Realtek RTVGA
+ 21h = T 80x25 . . mono . B000 HP 200LX
+ = T 132x30 . . 16 . . Avance Logic AL2101
+ = T 132x44 9x9 1188x396 16/256K . B800 WD90C
+ = T 132x44 9x9 1188x396 16 . B800 Diamond Speedstar 24X
+ = T 132x60 . . 16 2 B800 Tseng ET4000 chipset [10]
+ = G 80x43 8x8 720x348 mono . B000 DESQview 2.x+Hercules [4]
+ = G 128x48 8x16 1024x768 16 1 A000 Realtek RTVGA [12]
+ 22h = T 132x43 . . . . . Allstar Peacock (VGA)
+ = T 132x43 . . 16 . . Avance Logic AL2101
+ = T 132x44 8x8 1056x352 . . B800 Tseng Labs EVA
+ = T 132x44 9x8 1188x352 16/256K 2 B800 Tseng ET3000 chipset
+ = T 132x44 8x8 1056x352 16/256K 2 B800 Tseng ET4000 chipset
+ = T 132x44 8x8 1056x352 . . . Ahead Systems EGA2001
+ = T 132x44 8x8 1056x352 16 2 B800 Ahead B
+ = T 132x44 8x9 1056x398 16 . . STB Lightspeed ET4000/W32P
+ = T 132x44 . . 16 . . Orchid Prodesigner VGA
+ = G 80x43 8x8 720x348 mono . B800 DESQview 2.x+Hercules [4]
+ = G 96x64 8x16 768x1024 16 1 A000 Realtek RTVGA
+ = G 100x37 8x16 800x600 16 . . C&T 64310/65530 BIOS
+ 23h = T 132x25 6x14 792x350 . . B800 Tseng Labs EVA
+ = T 132x25 9x14 1188x350 16/256K 4 B800 Tseng ET3000 chipset
+ = T 132x25 8x14 1056x350 16/256 4 B800 Tseng ET4000 chipset
+ = T 132x25 8x14 1056x350 . . . Ahead Systems EGA2001
+ = T 132x25 8x14 1056x350 16 4 B800 Ahead B
+ = T 132x25 8x8 1056x200 16 . B800 ATI EGA Wonder,ATI VIP
+ = T 132x25 . . . . . Cirrus 5320 chipset
+ = T 132x28 . . . . . Allstar Peacock (VGA)
+ = T 132x28 . . 16 . . Orchid Prodesigner VGA
+ = T 132x60 . . 16 . . Avance Logic AL2101
+ = G 128x48 8x16 1024x768 4 1 A000 Realtek RTVGA
+ 24h = T 80x30 . . 16 . . Avance Logic AL2101
+ = T 132x25 . . . . . Allstar Peacock (VGA)
+ = T 132x25 . . 16 . . Orchid Prodesigner VGA
+ = T 132x28 6x13 792x364 . . B800 Tseng Labs EVA
+ = T 132x28 9x13 1188x364 16/256K 4 B800 Tseng ET3000 chipset
+ = T 132x28 8x12 1056x336 16 1 B800 Ahead B
+ = T 132x28 8x13 1056x364 16/256K 4 B800 Tseng ET4000 chipset
+ = T 132x28 8x14 1056x392 16 . . STB Lightspeed ET4000/W32P
+ = T 132x28 . . . . . Cirrus 5320 chipset
+ = G 64x32 8x16 512x512 256 1 A000 Realtek RTVGA
+ = G 128x48 8x16 1024x768 16 . . C&T 64310/65530 BIOS
+ 25h = T 80x43 . . 16 . . Avance Logic AL2101
+ = G 80x60 8x8 640x480 . . A000 Tseng Labs EVA
+ = G 80x60 8x8 640x480 16/256K 1 A000 Tseng ET3000/4000 chipset
+ = G . . 640x480 16 . . VEGA VGA
+ = G 80x60 8x8 640x480 16 . A000 Orchid Prodesigner VGA
+ = G 80x60 8x8 640x480 16 1 A000 Ahead B (same as 26h)
+ = G . . 640x480 16 . . NEC GB-1
+ = G . . 640x480 16 . . Cirrus 5320 chipset
+ = G . . 640x400 256 . . Realtek RTVGA
+ 26h = T 80x60 8x8 640x480 . . . Tseng Labs EVA
+ = T 80x60 8x8 640x480 16/256K 3 B800 Tseng ET3000/4000 chipset
+ = T 80x60 . . . . . Allstar Peacock (VGA)
+ = T 80x60 . . 16 . . Orchid ProDesigner VGA
+ = T 80x60 . . 16 . . Avance Logic AL2101
+ = G 80x60 8x8 640x480 . . . Ahead Systems EGA2001
+ = G 80x60 8x8 640x480 16 1 A000 Ahead B (same as 25h)
+ = G . . 640x480 256 . . Realtek RTVGA
+ 27h = T 132x25 8x8 1056x200 mono . B000 ATI EGA Wonder,ATI VIP
+ = G . . 720x512 16 . . VEGA VGA
+ = G . . 720x512 16 . . Genoa
+ = G 100x75 8x8 800x600 256 1 A000 Realtek RTVGA [12]
+ = G . . 960x720 16 . . Avance Logic AL2101
+ 28h = T ???x??? . . . . . VEGA VGA
+ = G . . 512x512 256 . . Avance Logic AL2101
+ = G . . 1024x768 256 . . Realtek RTVGA (1meg)
+ = G 160x64 8x16 1280x1024 16 . . Chips&Technologies 64310 [1]
+ 29h = G . . 640x400 256 . . Avance Logic AL2101
+ = G . . 800x600 16 . . VEGA VGA
+ = G 100x37 8x16 800x600 16 . A000 Orchid
+ = G . . 800x600 16 . A000 STB,Genoa,Sigma
+ = G . . 800x600 16 . . Allstar Peacock (VGA)
+ = G 100x37 8x16 800x600 16/256K 1 A000 Tseng ET3000/4000 chipset
+ = G . . 800x600 ??? . . EIZO MDB10
+ = G . . 800x600 16 . . Cirrus 5320 chipset
+ = G NA . 800x600 16 . . Compaq QVision 1024/1280
+ = G . . 1024x1024 256 . . Realtek RTVGA BIOS v3.C10
+ 2Ah = T 100x40 . . . . . Allstar Peacock (VGA)
+ = T 100x40 8x16 800x640 16 . . Orchid Prodesigner VGA
+ = T 100x40 8x15 800x600 16/256K 4 B800 Tseng ET3000/4000 chipset
+ = T 100x40 8x15 800x600 16 . . STB Lightspeed ET4000/W32P
+ = G . . 640x480 256 . . Avance Logic AL2101
+ = G . . 1280x1024 16 . . Realtek RTVGA
+ 2Bh = G . . 800x600 16 . . Avance Logic AL2101
+ 2Ch = G . . 800x600 256 . . Avance Logic AL2101
+ 2Dh = G . . 640x350 256 . . VEGA VGA
+ = G . . 640x350 256/256K . A000 Orchid, Genoa, STB
+ = G 80x25 8x14 640x350 256/256K 1 A000 Tseng ET3000/4000 chipset
+ = G . . 640x350 256 . . Cirrus 5320 chipset
+ = G 80x25 8x14 640x350 256 . . STB Lightspeed ET4000/W32P
+ = G . . 768x1024 16 . . Avance Logic AL2101
+ 2Eh = G . . 640x480 256 . . VEGA VGA
+ = G 80x30 8x16 640x480 256/256K . A000 Orchid
+ = G . . 640x480 256/256K . A000 STB,Genoa,Sigma
+ = G 80x30 8x16 640x480 256/256K 1 A000 Tseng ET3000/4000 chipset
+ = G . . 640x480 256/256K . . Compaq QVision 1024/1280
+ = G . . 768x1024 256 . . Avance Logic AL2101
+ 2Fh = T 160x50 8x8 1280x400 16 4 B800 Ahead B (Wizard/3270)
+ = G . . 720x512 256 . . VEGA VGA
+ = G . . 720x512 256 . . Genoa
+ = G 80x25 8x16 640x400 256/256K 1 A000 Tseng ET4000 chipset
+ = G . . 1024x768 4 . . Avance Logic AL2101
+ 30h = G 80x30 8x16 640x480 256 . . C&T 64310/65530 BIOS
+ = G . . . . . B800 AT&T 6300
+ = G . . 720x350 2 . . 3270 PC
+ = G . . 800x600 256 . . VEGA VGA
+ = G 100x37 8x16 800x600 256/256K . A000 Orchid
+ = G . . 800x600 256/256K . A000 STB,Genoa,Sigma
+ = G . . 800x600 256 . . Cardinal
+ = G 100x37 8x16 800x600 256/256K 1 A000 Tseng ET3000/4000 chipset
+ = G . . 1024x768 16 . . Avance Logic AL2101
+ 31h = G . . 1024x768 256 . . Avance Logic AL2101
+ 32h = T 80x34 8x10 . 16 4 B800 Ahead B (Wizard/3270)
+ = G . . 640x480 256 . . Compaq QVision 1024/1280
+ = G 100x37 8x16 800x600 256 . . C&T 64310/65530 BIOS
+ 33h = T 132x44 8x8 . 16 . B800 ATI EGA Wonder,ATI VIP
+ = T 80x34 8x8 . 16 4 B800 Ahead B (Wizard/3270)
+ 34h = T 80x66 8x8 . 16 4 B800 Ahead B (Wizard/3270)
+ = G . . 800x600 256 . . Compaq QVision 1024/1280
+ = G 128x48 8x16 1024x768 256 . . Chips&Technologies 64310
+ 36h = G . . 960x720 16 . . VEGA VGA, STB
+ = G . . 960x720 16 . A000 Tseng ET3000 only
+ = G . . 1280x1024 16 . . Avance Logic AL2101
+ 37h = T 132x44 8x8 . mono . B800 ATI EGA Wonder,ATI VIP
+ = G . . 1024x768 16 . . VEGA VGA
+ = G 128x48 8x16 1024x768 16 . A000 Orchid
+ = G . . 1024x768 16 . A000 STB,Genoa,Sigma
+ = G . . 1024x768 16 . . Definicon
+ = G 128x48 8x16 1024x768 16 1 A000 Tseng ET3000/4000 chipset
+ = G . . 1024x768 16 . . Compaq QVision 1024/1280
+ = G . . 1280x1024 256 . . Avance Logic AL2101
+ 38h = G . . 1024x768 256 . . STB VGA/EM-16 Plus (1MB)
+ = G 128x48 8x16 1024x768 256/256K 1 A000 Tseng ET4000 chipset
+ = G . . 1024x768 256 . . Orchid ProDesigner II
+ = G . . 1024x768 256 . . Compaq QVision 1024/1280
+ = G 160x64 8x16 1280x1024 256 . . Chips&Technologies 64310 [1]
+ 39h = G . . 1280x1024 16 . . Compaq QVision 1280
+ 3Ah = G . . 1280x1024 256 . . Compaq QVision 1280
+ 3Bh = G . . 512x480 256 . . Compaq QVision 1024/1280
+ 3Ch = G . . 640x400 64K . . Compaq QVision 1024/1280
+ 3Dh = G . . 1280x1024 16 . . Definicon
+ = G 128x64 8x16 1280x1024 16 1 A000 Tseng ET4000 v3.00 [1,7]
+ 3Eh = G . . 1280x961 16 . . Definicon
+ = G . . 640x480 64K . . Compaq QVision 1024/1280
+ 3Fh = G . . 1280x1024 256 . . Hercules ??? (ET4000W32)
+ = G . . 800x600 64K . . Compaq QVision 1024/1280
+ 40h = T 80x43 . . . . . VEGA VGA, Tecmar VGA/AD
+ = T 80x43 . . . . . Video7 V-RAM VGA
+ = T 80x43 . . . . . Tatung VGA
+ = T 100x30 . . 16 . . MORSE VGA
+ = T 100x30 . . . . . Cirrus 510/520 chipset
+ = T 80x25 . 720x350 mono . . Genoa SuperEGA BIOS 3.0+
+ = G . . 320x200 64K . . Avance Logic AL2101
+ = G 80x25 8x16 640x400 2 1 B800 AT&T 6300, AT&T VDC600
+ = G 80x25 8x16 640x400 2 1 B800 Olivetti Quaderno
+ = G 80x25 8x16 640x400 2 1 B800 Compaq Portable
+ = G 80x30 8x16 640x480 32K . . Chips&Technologies 64310
+ = G . . 1024x768 64K . . Compaq QVision 1280
+ 41h = T 132x25 . . . . . VEGA VGA
+ = T 132x25 . . . . . Tatung VGA
+ = T 132x25 . . . . . Video7 V-RAM VGA
+ = T 100x50 . . 16 . . MORSE VGA
+ = T 100x50 . . . . . Cirrus 510/520 chipset
+ = T 80x34 9x14 720x476 16/256K . B800 WD90C
+ = T 80x34 9x14 . 16 . B800 Diamond Speedstar 24X
+ = G . . 512x512 64K . . Avance Logic AL2101
+ = G . . 640x200 16 1 . AT&T 6300
+ = G 80x30 8x16 640x480 64K . . Chips&Technologies 64310
+ = G 80x25 . 720x348 mono . B000 Genoa SuperEGA BIOS 3.0+
+ 42h = T 132x43 . . . . . VEGA VGA
+ = T 132x43 . . . . . Tatung VGA
+ = T 132x43 . . . . . Video7 V-RAM VGA
+ = T 80x34 9x10 . 4 4 B800 Ahead B (Wizard/3270)
+ = T 100x60 . . 16 . . MORSE VGA
+ = T 100x60 . . . . . Cirrus 510/520 chipset
+ = G 80x25 8x16 640x400 16 . . AT&T 6300, AT&T VDC600
+ = G . . 640x400 64K . . Avance Logic AL2101
+ = G 80x25 . 720x348 mono . B800 Genoa SuperEGA BIOS 3.0+
+ = G 100x37 8x16 800x600 32K . . Chips&Technologies 64310
+ 43h = T 80x60 . . . . . VEGA VGA
+ = T 80x60 . . . . . Tatung VGA
+ = T 80x60 . . . . . Video7 V-RAM VGA
+ = T 80x45 9x8 . 4 4 B800 Ahead B (Wizard/3270)
+ = T 100x75 . . 16 . . MORSE VGA
+ = T 80x29 . 720x348 mono . . Genoa SuperEGA BIOS 3.0+
+ = G . . 640x200 of 640x400 viewport AT&T 6300 (unsupported)
+ = G . . 640x480 64K . . Avance Logic AL2101
+ = G 100x37 8x16 800x600 64K . . Chips&Technologies 64310
+ 44h = disable VDC and DEB output . AT&T 6300
+ = T 100x60 . . . . . VEGA VGA
+ = T 100x60 . . . . . Tatung VGA
+ = T 100x60 . . . . . Video7 V-RAM VGA
+ = T 80x32 . 720x352 mono . . Genoa SuperEGA BIOS 3.0+
+ = G . . 800x600 64K . . Avance Logic AL2101
+ 45h = T 132x28 . . . . . Tatung VGA
+ = T 132x28 . . . . . Video7 V-RAM VGA
+ = T 80x44 . 720x352 mono . . Genoa SuperEGA BIOS 3.0+
+ 46h = T 132x25 8x14 . mono . . Genoa 6400
+ = T 132x25 9x14 . mono . . Genoa SuperEGA BIOS 3.0+
+ = G 100x40 8x15 800x600 2 . . AT&T VDC600
+ 47h = T 132x29 8x12 . mono . . Genoa 6400
+ = T 132x29 9x12 . mono . . Genoa SuperEGA BIOS 3.0+
+ = T 132x28 9x16 1188x448 16/256K . B800 WD90C
+ = T 132x28 9x16 . 16 . B800 Diamond Speedstar 24X
+ = G 100x37 8x16 800x600 16 . . AT&T VDC600
+ 48h = T 132x32 8x12 . mono . . Genoa 6400
+ = T 132x32 9x11 . mono . . Genoa SuperEGA BIOS 3.0+
+ = G 80x50 8x8 640x400 2 . B800 AT&T 6300, AT&T VDC600
+ = G 80x50 8x8 640x400 2 . B800 Olivetti Quaderno
+ 49h = T 132x44 8x8 . mono . . Genoa 6400
+ = T 132x44 9x8 . mono . . Genoa SuperEGA BIOS 3.0+
+ = G 80x30 8x16 640x480 . . . Lava Chrome II EGA
+ = G 80x30 8x16 640x480 . . A000 Diamond Stealth64 Video 2xx1
+ 4Bh = G 100x37 8x16 800x600 . . A000 Diamond Stealth64 Video 2xx1
+ 4Dh = T 120x25 . . . . . VEGA VGA
+ = G . . 512x480 16M . . Compaq QVision 1024/1280
+ = G 128x48 8x16 1024x768 . . A000 Diamond Stealth64 Video 2xx1
+ 4Eh = T 120x43 . . . . . VEGA VGA
+ = T 80x60 8x8 . 16/256K . B800 Oak OTI-067/OTI-077 [8]
+ = G . . 640x400 16M . . Compaq QVision 1024/1280
+ = G 144x54 8x16 1152x864 . . A000 Diamond Stealth64 Video 2xx1
+ 4Fh = T 132x25 . . . . . VEGA VGA
+ = T 132x60 . . . . . some Oak Tech VGA [8]
+ = G . . 640x480 16M . . Compaq QVision 1280
+ 50h = T 80x30 8x16 . 16/256K . B800 Trident TVGA 8800/8900
+ = T 80x34 . . . . . Lava Chrome II EGA
+ = T 80x43 . . mono . . VEGA VGA
+ = T 132x25 9x14 . mono . . Ahead Systems EGA2001
+ = T 132x25 9x14 . 4 4 B800 Ahead B
+ = T 132x25 8x14 . 16 8 B800 OAK Technologies VGA-16
+ = T 132x25 8x14 . 16/256K . B800 Oak OTI-037/067/077 [8]
+ = T 132x25 8x14 1056x350 16 8 B800 UM587 chipset
+ = T 132x30 . . 16 . . MORSE VGA
+ = T 132x30 . . . . . Cirrus 510/520 chipset
+ = G 80x30 8x16 640x480 16 . . Paradise EGA-480
+ = G 80x30 8x16 640x480 16 . . NEL Electronics BIOS
+ = G 80x30 8x16 640x480 16M . . Chips&Technologies 64310
+ = G . . 640x480 mono??? . . Taxan 565 EGA
+ = G 40x25 8x8 320x200 . . . Genoa SuperEGA BIOS 3.0+
+ 51h = T 80x30 8x16 . . . . Paradise EGA-480
+ = T 80x30 9x16 . . . . NEL Electronics BIOS
+ = T 80x30 . . . . . Lava Chrome II EGA
+ = T 80x43 8x11 . 16/256K . B800 Trident TVGA 8800/8900
+ = T 132x25 . . mono . . VEGA VGA
+ = T 132x28 9x12 . 4 4 B800 Ahead B
+ = T 132x43 8x8 . 16 5 B800 OAK Technologies VGA-16
+ = T 132x43 8x8 . 16/256K . B800 Oak OTI-037/067/077
+ = T 132x43 8x8 1056x344 16 5 B800 UM587 chipset
+ = T 132x50 . . 16 . . MORSE VGA
+ = T 132x50 . . . . . Cirrus 510/520 chipset
+ = G 80x34 8x14 640x480 16 . . ATI EGA Wonder
+ = G 80x25 8x8 640x200 . . . Genoa SuperEGA BIOS 3.0+
+ 52h = T 80x60 . . . . . Lava Chrome II EGA
+ = T 80x60 8x8 . 16/256K . B800 Trident TVGA 8800/8900
+ = T 132x43 . . mono . . VEGA VGA
+ = T 132x44 9x8 . mono . . Ahead Systems EGA2001
+ = T 132x44 9x8 . 4 2 B800 Ahead B
+ = T 132x60 . . 16 . . MORSE VGA
+ = T 132x60 . . . . . Cirrus 510/520 chipset
+ = G 80x25 8x19 640x480 16 1 A000 AX VGA (Kanji&superimpose)
+ = G 94x29 8x14 752x410 16 . . ATI EGA Wonder
+ = G 100x75 8x8 800x600 16 1 A000 OAK Technologies VGA-16
+ = G 100x75 8x8 800x600 16 . A000 Oak OTI-037 chipset [8]
+ = G 100x37 8x16 800x600 16 . A000 Oak OTI-067/077 chips [8]
+ = G 100x75 8x8 800x600 16 . A000 UM587 chipset
+ = G 128x30 8x16 1024x480 16 . . NEL Electronics BIOS
+ 53h = T 80x25 8x16 . . . . NEL Electronics BIOS
+ = T 80x60 . . 16 . . MORSE VGA
+ = T 80x60 . . . . . Cirrus 510/520 chipset
+ = T 132x25 8x14 . 16/256K . B800 Trident TVGA 8800/8900
+ = T 132x43 . . . . . Lava Chrome II EGA
+ = G 80x25 8x19 640x480 16 1 A000 AX VGA (Kanji, no superimp.)
+ = G . . 640x480 256 . . Oak VGA
+ = G 80x30 8x16 640x480 256 . A000 Oak OTI-067/OTI-077 [8]
+ = G 100x40 8x14 800x560 16 . . ATI EGA Wonder,ATI VIP
+ = G . . . . . . AX PC
+ 54h = T 132x25 . . . . . Lava Chrome II EGA
+ = T 132x30 8x16 . 16/256K . B800 Trident TVGA 8800/8900
+ = T 132x43 8x8 . . . . Paradise EGA-480
+ = T 132x43 8x8 . . . . NEL Electronics BIOS
+ = T 132x43 7x9 . 16/256K . B800 Paradise VGA
+ = T 132x43 8x9 . 16/256K . B800 Paradise VGA on multisync
+ = T 132x43 . . . . . Taxan 565 EGA
+ = T 132x43 . . . . . AST VGA Plus
+ = T 132x43 . . . . . Hewlett-Packard D1180A
+ = T 132x43 7x9 . 16 . . AT&T VDC600
+ = T 132x43 9x9 1188x387 16/256K . B800 WD90C
+ = T 132x43 9x9 1188x387 16/256K . B800 Diamond Speedstar 24X
+ = T 132x43 9x9 1188x387 16/256K . B800 Diamond Stealth 24
+ = T 132x43 8x8 . . . B800 Diamond Stealth64 Video 2xx1
+ = T 132x43 8x8 1056x350 16/256K . . Cirrus CL-GD5420/5422/5426
+ = T 132x50 8x8 . 16 . A000 NCR 77C22 [9]
+ = G 100x42 8x14 800x600 16 . A000 ATI EGA Wonder, VGA Wonder
+ = G 100x42 8x14 800x600 16 . A000 ATI Ultra 8514A, ATI XL
+ = G . . 800x600 256 . A000 Oak VGA
+ = G 100x37 8x16 800x600 256 . A000 Oak OTI-067/077 chips [8]
+ 55h = T 80x66 8x8 . 16/256K . A000 ATI VIP
+ = T 132x25 8x14 . . . . Paradise EGA-480
+ = T 132x25 8x14 . . . . NEL Electronics BIOS
+ = T 132x25 7x16 . 16/256K . B800 Paradise VGA
+ = T 132x25 8x16 . 16/256K . B800 Paradise VGA on multisync
+ = T 132x25 . . . . . Taxan 565 EGA
+ = T 132x25 . . . . . AST VGA Plus
+ = T 132x25 . . . . . Hewlett-Packard D1180A
+ = T 132x25 7x16 . 16 . . AT&T VDC600
+ = T 132x25 8x16 . 16 . A000 NCR 77C22 [9]
+ = T 132x25 9x16 1188x400 16/256K . B800 WD90C
+ = T 132x25 9x16 1188x400 16/256K . B800 Diamond Speedstar 24X
+ = T 132x25 9x16 1188x400 16/256K . B800 Diamond Stealth 24
+ = T 132x25 8x16 . . . B800 Diamond Stealth64 Video 2xx1
+ = T 132x25 8x14 1056x350 16/256K . . Cirrus CL-GD5420/5422/5426
+ = T 132x43 8x11 . 16/256K . B800 Trident TVGA 8800/8900
+ = G 94x29 8x14 752x410 . . . Lava Chrome II EGA
+ = G 128x48 8x16 1024x768 16/256K . A000 ATI VGA Wonder v4+ [5]
+ = G . . 1024x768 16/256K . . ATI VGA Wonder Plus
+ = G . . 1024x768 16/256K . . ATI Ultra 8514A,ATI XL
+ = G 128x48 8x16 1024x768 4 . A000 Oak OTI-067/077 chips [8]
+ 56h = T 132x43 8x8 . 3??? 2 B000 NSI Smart EGA+
+ = T 132x43 7x9 . 4 . B000 Paradise VGA
+ = T 132x43 8x9 . 4 . B000 Paradise VGA on multisync
+ = T 132x43 . . mono . . Taxan 565 EGA
+ = T 132x43 7x9 . 2 . . AT&T VDC600
+ = T 132x43 9x8 . . . . NEL Electronics BIOS
+ = T 132x50 8x8 . 4 . A000 NCR 77C22 [9]
+ = T 132x60 8x8 . 16/256K . B800 Trident TVGA 8800/8900
+ = G . . 1024x768 16 . A000 Oak VGA
+ = G 128x48 8x16 1024x768 16 . A000 Oak OTI-067/077 chips [8]
+ 57h = T 132x25 8x14 . 3??? 4 B000 NSI Smart EGA+
+ = T 132x25 7x16 . 4 . B000 Paradise VGA
+ = T 132x25 8x16 . 4 . B000 Paradise VGA on multisync
+ = T 132x25 9x14 . . . . NEL Electronics BIOS
+ = T 132x25 . . mono . . Taxan 565 EGA
+ = T 132x25 7x16 . 2 . . AT&T VDC600
+ = T 132x25 9x14 . 16/256K . B800 Trident TVGA 8800/8900
+ = T 132x25 8x16 . 4 . A000 NCR 77C22 [9]
+ = G 96x48 8x16 768x1024 16 . A000 Oak OTI-067/077 chips [8]
+ 58h = T 80x33 8x14 . 16 . B800 ATI EGA Wonder,ATI VIP
+ = T 80x32 9x16 . 16 . . Genoa 6400
+ = T 80x43 8x8 . . . . NEL Electronics BIOS
+ = T 132x30 9x16 . 16/256K . B800 Trident TVGA 8800/8900
+ = G 100x75 8x8 800x600 16/256K . A000 Paradise VGA
+ = G 100x75 8x8 800x600 16 . . AT&T VDC600
+ = G 100x75 8x8 800x600 16 . A000 NCR 77C22 [9]
+ = G 100x75 8x8 800x600 16 . A000 Diamond Speedstar 24X
+ = G 100x75 8x8 800x600 16/256K . A000 Paradise VGA, WD90C
+ = G . . 800x600 16 . . AST VGA Plus, Compaq VGA
+ = G . . 800x600 16 . . Dell VGA
+ = G . . 800x600 16 . . Hewlett-Packard D1180A
+ = G . . 800x600 ??? . . ELT VGA PLUS 16
+ = G 100x37 8x16 800x600 16/256K . A000 Cirrus CL-GD5420/5422/5426
+ = G 160x64 8x16 1280x1024 16 . A000 Oak OTI-077 chipset [8]
+ 59h = T 80x43 9x8 . . . . NEL Electronics BIOS
+ = T 80x66 8x8 . 16/256K . A000 ATI VIP
+ = T 132x43 9x11 . 16/256K . B800 Trident TVGA 8800/8900
+ = G 100x75 8x8 800x600 2 . A000 Paradise VGA
+ = G 100x75 8x8 800x600 2 . . AT&T VDC600
+ = G . . 800x600 2 . . AST VGA Plus, Compaq VGA
+ = G . . 800x600 2 . . Dell VGA
+ = G . . 800x600 2 . . Hewlett-Packard D1180A
+ = G 100x75 8x8 800x600 2 . A000 NCR 77C22 [9]
+ = G 128x48 8x16 1024x768 256 . A000 Oak OTI-077 chipset [8]
+ 5Ah = T 80x60 8x8 . . . . NEL Electronics BIOS
+ = T 132x60 9x8 . 16/256K . B800 Trident TVGA 8800/8900
+ = G 128x48 8x16 1024x768 2 . A000 NCR 77C22 [9]
+ 5Bh = T 80x30 8x16 . . . B800 ATI VGA Wonder (undoc)
+ = G . . 640x350 256 . . Genoa 6400
+ = G 80x25 8x16 640x400 32K . A000 Oak OTI-067/077 chips [8]
+ = G . . 800x600 16 . . Maxxon, SEFCO TVGA, Imtec
+ = G 100x75 8x8 800x600 16/256K . A000 Trident TVGA 8800, 8900
+ = G . . 800x600 ??? . . Vobis MVGA
+ = G 100x37 8x16 800x600 . . . NEL Electronics BIOS
+ = G 128x48 8x16 1024x768 16 . A000 NCR 77C22 [1,9]
+ 5Ch = T 100x37 8x16 . . . . NEL Electronics BIOS
+ = G . . 640x400 256 . . Logix, ATI Prism Elite
+ = G . . 640x400 256 . . Maxxon, SEFCO TVGA, Imtec
+ = G 80x25 8x16 640x400 256/256K . A000 Zymos Poach, Hi Res 512
+ = G 80x25 8x16 640x400 256/256K . A000 Trident TVGA 8800/8900
+ = G 80x30 8x16 640x480 256 . . Genoa 6400
+ = G 80x30 8x16 640x480 32K . A000 Oak OTI-077 chipset [8]
+ = G 100x75 8x8 800x600 256 . A000 NCR 77C22 [9]
+ = G 100x75 8x8 800x600 256/256K . A000 WD90C
+ = G 100x75 8x8 800x600 256/256K . A000 Diamond Speedstar 24X
+ = G 100x37 8x16 800x600 256/256K . A000 Cirrus CL-GD5420/5422/5426
+ 5Dh = T 100x75 8x8 . . . . NEL Electronics BIOS
+ = G 80x25 8x14 640x350 64K . . STB Lightspeed ET4000/W32P
+ = G . . 640x480 256 . . Logix, ATI Prism Elite
+ = G . . 640x480 256 . . Maxxon, SEFCO TVGA, Imtec
+ = G 80x30 8x16 640x480 256/256K . A000 Zymos Poach, Hi Res 512
+ = G 80x30 8x16 640x480 256/256K . A000 Trident TVGA 8800 (512K)
+ = G 128x48 8x16 1024x768 16 . A000 NCR 77C22 [9]
+ = G 128x48 8x16 1024x768 16/256K . A000 WD90C
+ = G 128x48 8x16 1024x768 16 . A000 Diamond Speedstar 24X
+ = G 128x48 8x16 1024x768 16/256K . A000 Cirrus CL-GD5420/5422/5426
+ 5Eh = G . . 640x400 256 . . Paradise VGA,VEGA VGA
+ = G . . 640x400 256 . . AST VGA Plus, NCR 77C22
+ = G . . 640x400 256 . . Compaq VGA, Dell VGA
+ = G 80x25 8x16 640x400 256 . . AT&T VDC600
+ = G 80x25 8x16 640x400 256 . A000 NCR 77C22 [9]
+ = G 80x25 8x16 640x400 256/256K . A000 WD90C
+ = G 80x25 8x16 640x400 256/256K . A000 Diamond Speedstar 24X
+ = G . . 800x600 16 . . Logix, ATI Prism Elite
+ = G 100x37 8x16 800x600 16 . . NEL Electronics BIOS
+ = G 100x75 8x8 800x600 256 . . Genoa 6400
+ = G 100x75 8x8 800x600 256/256K . A000 Zymos Poach, Trident 8900
+ = G 100x75 8x8 800x600 256/256K . A000 Hi Res 512
+ 5Fh = G 80x25 8x16 640x400 64K . . STB Lightspeed ET4000/W32P
+ = G . . 640x480 256 . . Paradise VGA
+ = G . . 640x480 256 . . AST VGA Plus, NCR 77C22
+ = G . . 640x480 256 . . Compaq VGA, Dell VGA
+ = G . . 640x480 256 . . Hewlett-Packard D1180A
+ = G 80x30 8x16 640x480 256 . . AT&T VDC600 (512K)
+ = G 80x30 8x16 640x480 256 . A000 NCR 77C22 [9]
+ = G 80x30 8x16 640x480 256/256K . A000 WD90C
+ = G 80x30 8x16 640x480 256/256K . A000 Diamond Speedstar 24X
+ = G 80x30 8x16 640x480 256/256K . A000 Cirrus CL-GD5420/5422/5426
+ = G . . 1024x768 16 . . Logix, ATI Prism Elite
+ = G . . 1024x768 16 . . Maxxon, Imtec
+ = G 128x48 8x16 1024x768 16 . . Genoa 6400
+ = G 128x48 8x16 1024x768 16/256K . A000 Zymos Poach, Hi Res 512
+ = G 128x48 8x16 1024x768 16/256K . A000 Trident TVGA 88/8900 512K
+ 60h = T 132x25 8x14 . 16/64 8 B800 Quadram Ultra VGA
+ = T 132x25 8x14 . 16 . . Genoa 6400
+ = T 132x25 8x14 . 16 . . Genoa SuperEGA BIOS 3.0+
+ = T 132x25 . . . . . Cirrus 5320 chipset
+ = T 132x25 8x16 1056x400 16 . B800 Chips&Technologies chipset
+ = G 80x??? . ???x400 . . . Corona/Cordata BIOS 4.10+
+ = G 80x25 8x16 640x400 256 1 A000 Ahead A, Ahead B
+ = G . . 752x410 . . . VEGA VGA
+ = G . . 752x410 16 . . Tatung VGA
+ = G . . 752x410 16 . . Video7 V-RAM VGA
+ = G 128x48 8x16 1024x768 4/256K . A000 Trident TVGA 8900
+ = G 128x48 8x16 1024x768 256/256K . A000 WD90C
+ = G 128x48 8x16 1024x768 256/256K . A000 Diamond Speedstar 24X
+ = G 128x48 8x16 1024x768 256/256K . A000 Cirrus CL-GD5420/5422/5426
+ = G 144x54 8x16 1152x864 . . A000 Diamond Stealth64 Video 2xx1
+ 61h = T 132x29 8x12 . 16/64 8 B800 Quadram Ultra VGA
+ = T 132x29 8x8 . 16 . . Genoa 6400
+ = T 132x29 8x8 . 16 . . Genoa SuperEGA BIOS 3.0+
+ = T 132x50 . . . . . Cirrus 5320 chipset
+ = T 132x50 8x8 1056x400 16 . B800 Chips&Technologies chipset
+ = T 132x50 8x16 1056x800 16 . B800 Chips&Technologies 64310
+ = G . . ???x400 . . . Corona/Cordata BIOS 4.10+
+ = G 80x25 8x16 640x400 256 . A000 ATI VGA Wonder,VGA Wonder+
+ = G 80x25 8x16 640x400 256 . A000 ATI Ultra 8514A,ATI XL
+ = G 80x25 8x16 640x400 . . A000 Diamond Stealth64 Video 2xx1
+ = G 80x30 8x16 640x480 256 1 A000 Ahead A, Ahead B (512K)
+ = G . . 720x540 . . . VEGA VGA
+ = G . . 720x540 16 . . Tatung VGA
+ = G . . 720x540 16 . . Video7 V-RAM VGA
+ = G 96x64 8x16 768x1024 16/256K . A000 Trident TVGA 88/8900 512K
+ = G 128x48 8x16 1024x768 256 . A000 NCR 77C22 [1,9]
+ = G 144x54 8x16 1152x864 . . A000 Diamond Stealth64 Video 2xx1
+ 62h = T 132x32 8x11 . 16/64 6 B800 Quadram Ultra VGA
+ = T 132x32 8x12 . 16 . . Genoa 6400
+ = T 132x32 8x11 . 16 . . Genoa SuperEGA BIOS 3.0+
+ = T 132x43 8x8 1056x344 16 . B800 C&T 82C450 BIOS
+ = G . . 640x450 16 . . Cirrus 510/520 chipset
+ = G 80x30 8x16 640x480 256 . A000 ATI VGA Wonder,VGA Wonder+
+ = G 80x30 8x16 640x480 256 . A000 ATI Ultra 8514A,ATI XL
+ = G 80x30 8x16 640x480 32K . A000 WD90C
+ = G 80x30 8x16 640x480 32K . A000 Diamond Speedstar 24X
+ = G . . 800x600 . . . VEGA VGA
+ = G . . 800x600 16 . . Tatung VGA
+ = G . . 800x600 16 . . Video7 V-RAM VGA
+ = G 100x75 8x8 800x600 256 1 A000 Ahead A, Ahead B (512K)
+ = G 128x48 8x16 1024x768 256/256K . A000 Trident TVGA 8900, Zymos
+ = G 128x48 8x16 1024x768 256 . A000 NCR 77C22 [9]
+ 63h = T 132x44 8x8 . 16/64 5 B800 Quadram Ultra VGA
+ = T 132x44 8x8 . 16 . . Genoa 6400
+ = T 132x44 8x8 . 16 . . Genoa SuperEGA BIOS 3.0+
+ = G . . 720x540 16 . . MORSE VGA
+ = G . . 720x540 16 . . Cirrus 510/520 chipset
+ = G 100x42 8x14 800x600 256 . A000 ATI VGA Wonder,VGA Wonder+
+ = G 100x42 8x14 800x600 256 . A000 ATI Ultra 8514A,ATI XL
+ = G . . 800x600 32K . A000 WD90C
+ = G . . 800x600 32K . A000 Diamond Speedstar 24X
+ = G 128x48 7x16 1024x768 256 1 A000 Ahead B (1MB)
+ = G . . 1024x768 2 . . Video7 V-RAM VGA
+ 64h = T 132x60 8x8 . 16 . . Genoa 6400
+ = T 80x43 8x8 528x344 16 . B800 C&T 82C450 BIOS
+ = G . . 640x480 64K . A000 Cirrus CL-GD 5422/5426
+ = G . . 800x600 16 . . MORSE VGA
+ = G . . 800x600 16 . . Cirrus 510/520 chipset
+ = G . . 800x600 ??? . . SAMPO-Mira VGA
+ = G . . 1024x768 4 . . Video7 V-RAM VGA
+ = G 128x48 8x16 1024x768 256 . A000 ATI VGA Wonder Plus,ATI XL
+ = G 160x64 8x16 1280x1024 16/256K . A000 WD90C [1]
+ = G 160x64 8x16 1280x1024 16/256K . A000 Diamond Speedstar 24X [1]
+ 65h = T 80x50 8x8 528x400 16 . B800 C&T 82C450 BIOS
+ = G . . 800x600 64K . A000 Cirrus CL-GD 5422/5426
+ = G . . 1024x768 16 . . Video7 V-RAM VGA
+ = G 128x48 8x16 1024x768 16 . A000 ATI VGA Wonder
+ 66h = T 80x50 8x8 640x400 16/256K . B800 WD90C
+ = T 80x50 8x8 . 16 . B800 Diamond Speedstar 24X
+ = G . . 640x400 256 . . Tatung VGA
+ = G . . 640x400 256 . . Video7 V-RAM VGA
+ = G . . 640x480 32K . A000 Cirrus CL-GD 5422/5426
+ 67h = T 80x43 8x8 640x344 16/256K . B800 WD90C
+ = T 80x43 8x8 . 16 . B800 Diamond Speedstar 24X
+ = G . . 640x480 256 . . Video7 V-RAM VGA
+ = G . . 800x600 32K . A000 Cirrus CL-GD 5422/5426
+ = G 128x48 8x16 1024x768 4 . A000 ATI VGA Wonder
+ = G 160x64 8x16 1280x1024 16 . A000 NCR 77C22 [1,9]
+ 68h = G 80x25 8x16 640x400 . . A000 Diamond Stealth64 Video 2xx1
+ 69h = T 132x50 8x8 1056x400 16/256K . B800 WD90C
+ = T 132x50 8x8 . 16 . B800 Diamond Speedstar 24X
+ = G 80x30 8x16 640x480 . . A000 Diamond Stealth64 Video 2xx1
+ = G . . 720x540 256 . A000 Video7 V-RAM VGA
+ 6Ah = G . . 800x600 16 . A000 VESA standard interface
+ = G 100x75 8x8 800x600 16 . A000 Genoa 6400
+ = G 100x75 8x8 800x600 16 . A000 Diamond Speedstar 24X
+ = G . . 800x600 16 . A000 Ahead A
+ = G 100x75 8x8 800x600 16 1 A000 Ahead B (VESA) [see 71h]
+ = G . . 800x600 16 . . Zymos Poach, Hi Res 512
+ = G . . 800x600 16 . . Epson LT-386SX in CRT Mode
+ = G . . 800x600 16 . . Compuadd 316SL in CRT Mode
+ = G 100x37 8x16 800x600 16/256K . A000 Cirrus CL-GD5420/5422/5426
+ = G 100x37 8x16 800x600 16 . A000 Diamond Stealth64 Video 2xx1
+ = G 100x42 8x14 800x600 . . A000 ATI VGA Wonder (undoc)
+ = G . . 800x600 16 . A000 Chips&Technologies chipset
+ = G 160x64 8x16 1280x1024 256 . A000 NCR 77C22 [1,9]
+ 6Bh = T 100x37 8x16 . 16 . . Genoa 6400
+ = T 100x37 8x16 . . . . NEL Electronics BIOS
+ = G 100x37 8x16 800x600 . . A000 Diamond Stealth64 Video 2xx1
+ 6Ch = G 80x30 8x16 640x480 16M . A000 Trident 8900CL/BIOS C04
+ = G 100x75 8x8 800x600 256 . . Genoa 6400
+ = G 128x48 8x16 1024x768 2 . A000 Diamond Stealth64 Video 2xx1
+ = G 160x60 8x16 1280x960 16/256K . A000 WD90C [1]
+ = G 160x60 8x16 1280x960 16/256K . A000 Diamond Speedstar 24X [1]
+ = G 160x64 8x16 1280x1024 16/256K . A000 Cirrus CL-GD 5422/5426 [1]
+ 6Dh = G 80x25 8x14 640x350 64K . A000 STB Lightspeed ET4000/W32P
+ = G 128x48 8x16 1024x768 . . A000 Diamond Stealth64 Video 2xx1
+ = G 160x64 8x16 1280x1024 256/256K . A000 Cirrus CL-GD 5422/5426 [1]
+ 6Eh = G 40x25 8x8 320x200 64K . A000 Cirrus CL-GD 5422/5426
+ = G 160x64 8x16 1280x1024 2 . A000 Diamond Stealth64 Video 2xx1
+ 6Fh = G 40x25 8x8 320x200 16M . A000 Cirrus CL-GD 5422/5426
+ = G 160x64 8x16 1280x1024 . . A000 Diamond Stealth64 Video 2xx1
+ 70h = extended mode set (see AX=0070h) . Everex Micro Enhancer EGA
+ = T 40x25 8x8 . 16 8 B800 Quadram (CGA double scan)
+ = T 40x25 8x8 (CGA dblscan) . . Genoa SuperEGA BIOS 3.0+
+ = G . . 360x480 256 . . Cirrus 510/520/5320 chips
+ = G 90x28 8x14 720x392 16 1 A000 Ahead B
+ = G 80x30 8x16 640x480 . . A000 Diamond Stealth64 Video 2xx1
+ = G 100x38 8x16 800x600 16 . A000 C&T chipset, Cardinal
+ = G . . 1024x480 256 . A000 Trident 8900C BIOS C3.0
+ 71h = T 80x25 8x8 . 16 8 B800 Quadram (CGA double scan)
+ = T 80x25 8x8 (CGA dblscan) . . Genoa SuperEGA BIOS 3.0+
+ = G . . 528x400 256 . . Cirrus 510/520 chipset
+ = G 80x30 8x16 640x480 16M . A000 Cirrus CL-GD 5422/5426
+ = G 80x30 8x16 640x480 . . A000 Diamond Stealth64 Video 2xx1
+ = G 100x35 8x16 800x600 16/64 . A000 NSI Smart EGA+
+ = G 100x75 8x8 800x600 16 1 A000 Ahead B (same as 6Ah)
+ = G . . 960x720 16 . . C&T chipset, Cardinal
+ = G . . 1024x480 256 . A000 Trident 8900C BIOS C3.0
+ 72h = T 80x60 8x8 . 16 . B800 Quadram Ultra VGA
+ = T 80x60 8x8 . 16 . B800 Genoa 6400
+ = T 80x60 8x8 . 16 . B800 Genoa SuperEGA BIOS 3.0+
+ = G . . 528x480 256 . . Cirrus 510/520 chipset
+ = G 80x25 8x19 640x480 16 1 A000 DOS/V w/ any VGA
+ = G 80x30 8x16 640x480 . . A000 Diamond Stealth64 Video 2xx1
+ = G . . 640x480 32K . A000 ATI
+ = G . . 640x480 16M . A000 WD90C
+ = G . . 640x480 16M . A000 Diamond Speedstar 24X
+ = G . . 1024x768 16 . . C&T chipset, Cardinal
+ = G 128x48 8x16 1024x768i 16 . A000 C&T 82C450 BIOS
+ = G 128x48 8x16 1024x768 16 . A000 C&T 65530 BIOS (multisync)
+ 73h = G 80x60 8x8 640x480 16 . A000 Quadram Ultra VGA
+ = G 80x60 8x8 640x480 16 . . Genoa 6400
+ = G 80x60 8x8 640x480 16 . . Genoa SuperEGA BIOS 3.0+
+ = G 100x37 8x16 800x600 . . A000 Diamond Stealth64 Video 2xx1
+ = T 80x25 8x19 640x475 16 1 none DOS/V, emulated in VGA graph
+ 74h = T 80x66 8x8 . 16 . B800 Quadram Ultra VGA
+ = T 80x66 8x8 . 16 . B800 Genoa 6400
+ = T 80x66 8x8 . 16 . B800 Genoa SuperEGA BIOS 3.0+
+ = G . . 640x400 2 . B800 Toshiba 3100 AT&T mode
+ = G 80x30 8x16 640x480 32K . A000 Trident 8900C/BIOS C03
+ = G 100x37 8x16 800x600 . . A000 Diamond Stealth64 Video 2xx1
+ = G 128x48 8x16 1024x768 16 1 A000 Ahead A, Ahead B (512K)
+ = G . . 1024x768 64K . A000 Cirrus CL-GD 5422/5426 [1]
+ 75h = G 80x30 8x16 640x480 64K . A000 Trident 8900C/BIOS C03
+ = G 80x66 . 640x528 16??? . A000 Quadram Ultra VGA
+ = G 80x66 . 640x528 16 . . Genoa SuperEGA BIOS 3.0+
+ = G 100x37 8x16 800x600 . . A000 Diamond Stealth64 Video 2xx1
+ = G 128x48 8x16 1024x768 4 1 A000 Ahead B
+ = G 128x48 8x16 1024x768 16 . A000 Chips&Technologies 64310
+ 76h = T 94x29 8x14 . 16 . B800 Quadram Ultra VGA
+ = T 94x29 8x14 . . . . Genoa SuperEGA BIOS 3.0+
+ = G 100x75 8x8 800x600 32K . A000 Trident 8900C/BIOS C03
+ = G 128x48 8x16 1024x768 2 1 A000 Ahead B
+ = G 128x48 8x16 1024x768 . . A000 Diamond Stealth64 Video 2xx1
+ = G 160x64 8x16 1280x1024 16 . A000 Chips&Technologies 64310 [1]
+ 77h = G 94x29 . 752x410 16??? . A000 Quadram Ultra VGA
+ = G 94x29 . 752x410 16 . . Genoa SuperEGA BIOS 3.0+
+ = G 100x75 8x8 800x600 64K . A000 Trident 8900C/BIOS C03
+ = G 128x48 8x16 1024x768 . . A000 Diamond Stealth64 Video 2xx1
+ 78h = T 100x37 8x16 . 16 . . Genoa 6400
+ = T 100x75 8x8 . 16 . B800 Quadram Ultra VGA
+ = T 100x75 8x8 . . . . Genoa SuperEGA BIOS 3.0+
+ = G . . 640x400 256 . . STB VGA/EM-16 Plus
+ = G 80x25 8x16 640x400 256 . . Cardinal, C&T chipset
+ = G . . 640x400 256 . . Cirrus 5320 chipset
+ = G 80x25 8x16 640x400 256 . A000 Chips&Technologies 64310
+ 79h = G 80x30 8x16 640x480 256 . . Cardinal, C&T chipset
+ = G 80x30 8x16 640x480 256 . A000 Chips&Technologies 64310
+ = G 100x75 . 800x600 16??? . A000 Quadram Ultra VGA
+ = G 100x75 8x8 800x600 16 . . Genoa SuperEGA BIOS 3.0+
+ = G 100x75 8x8 800x600 16 . . Genoa 6400
+ 7Ah = T 114x60 8x8 . 16 . B800 Quadram Ultra VGA
+ = T 114x60 8x8 . . . . Genoa SuperEGA BIOS 3.0+
+ = G . . 720x540 256 . . C&T chipset, Cardinal
+ 7Bh = G . . 800x600 256 . . C&T chipset, Cardinal
+ = G 114x60 . 912x480 16??? . A000 Quadram Ultra VGA
+ = G . . 912x480 16 . . Genoa SuperEGA BIOS 3.0+
+ 7Ch = G . . 512x512 16 . . Genoa
+ = G 100x37 8x16 800x600 256 . . C&T 82C453/F65530 chipsets
+ = G 100x37 8x16 800x600 256 . A000 Chips&Technologies 64310
+ = G 200x75 8x16 1600x1200 . [16] . A000 Diamond Stealth64 Video 2xx1
+ 7Dh = G 64x32 8x16 512x512 256 . . Genoa
+ 7Eh = special mode set (see AX=007Eh) . Paradise VGA, AT&T VDC600
+ = G 80x25 8x16 640x400 256 . . Genoa 6400
+ = G . . 1024x768 256 . . C&T 82C453 chipset
+ = G 128x48 8x16 1024x768 256 . A000 Chips&Technologies 64310
+ = G 90x43 . . mono . B000 HERCULES.COM on HGC [14]
+ 7Fh = special function set (see AX=007Fh/BH=00h) Paradise VGA, AT&T VDC600
+ = G 128x48 8x16 1024x768 4 . . Genoa 6400
+ = G 90x29 . . mono . B000 HERCULES.COM on HGC [14]
+ 82h = T 80x25 . . B&W . . AT&T VDC overlay mode [6]
+ 83h = T 80x25 . . . . . AT&T VDC overlay mode [6]
+ 86h = G . . 640x200 B&W . . AT&T VDC overlay mode [6]
+ 88h = G 90x43 8x8 720x348 mono . B000 Hercules + MSHERC.COM
+ C0h = G . . 640x400 2/prog palette . AT&T VDC overlay mode [6]
+ = G . . 640x400 2/prog palette . Olivetti Quaderno overlay
+ C4h = disable output . . . . AT&T VDC overlay mode [6]
+ C8h = G 80x50 8x8 640x400 2 . B800 Olivetti Quaderno overlay
+ D0h = G . . 640x400 2 . B800 DEC VAXmate AT&T mode
+Notes:
+[1] interlaced only
+[2] for ATI EGA Wonder, mode 08h is only valid if SMS.COM is loaded resident.
+ SMS maps mode 08h to mode 27h if the byte at location 0040:0063 is 0B4h,
+ otherwise to mode 23h, thus selecting the appropriate (monochrome or
+ color) 132x25 character mode.
+ for ATI VGA Wonder, mode 08h is the same, and only valid if VCONFIG loaded
+ resident
+[3] early XGA boards support 132-column text but do not have this BIOS mode
+[4] DESQview intercepts calls to change into these two modes (21h is page 0,
+ 22h is page 1) even if there is no Hercules graphics board installed
+[5] ATI BIOS v4-1.00 has a text-scrolling bug in this mode
+[6] for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
+ 40h, or 44h
+[7] BIOS text support is broken in this undocumented mode; scrolling moves
+ only about 1/3 of the screen (and does even that portion incorrectly),
+ while screen clears only clear about 3/4.
+[8] The Oak OTI-037/067/077 modes are present in the Oak VGA BIOS, which OEMs
+ may choose to use only partially or not at all; thus, not all Oak boards
+ support all "Oak" modes listed here
+[9] this card uses the full 128K A000h-BFFFh range for the video buffer,
+ precluding the use of a monochrome adapter in the same system
+[10] mode 17h supported by Tseng ET4000 BIOS 8.01X dated 1990/09/14, but not
+ v8.01X dated 1992/02/28; mode 21h supported by 1992/02/28 version but not
+ 1990/09/14 version
+[11] HERKULES simulates a 90x45 text mode in Hercules graphics mode; the
+ installation check for HERKULES.COM is the signature "Herkules" two
+ bytes beyond the INT 10 handler
+[12] The Realtek RTVGA BIOS v3.C10 crashes when attempting to switch into
+ modes 21h or 27h; this version of the BIOS also sets the BIOS data area
+ incorrectly for extended text modes, resulting in scrolling after only
+ 24 lines (the VMODE.EXE utility does set the data area correctly)
+[13] The Tandy 1000SL/TL BIOS does not actually support this mode
+[14] HERCULES.COM is a graphics-mode BIOS extension for Hercules-compatible
+ graphics cards by Soft Warehouse, Inc. Its installation check is to
+ test whether the word preceding the INT 10 handler is 4137h.
+[15] The Hercules-graphics video modes for HERCBIOS (shareware by Dave
+ Tutelman) may be changed by a command-line switch; the 90x43
+ character-cell mode's number is always one higher than the 90x29 mode
+ (whose default is mode 08h)
+[16] Stealth64 Video 2001-series BIOS v1.03 reports 76 lines for mode 7Ch,
+ resulting in incorrect scrolling for TTY output (scrolling occurs only
+ after the end of the 76th line, which is not displayed)
+[17] For 43-line text on EGA or 43/50-line text on VGA, you must load an 8x8
+ font using AX=1102h after switching to mode 3; VGA may also require
+ using INT 10/AH=12h/BL=30h
+SeeAlso: #00011,#00083,#00191
+Index: video modes
+Index: installation check;HERKULES|installation check;HERCULES.COM
+--------V-100070-----------------------------
+INT 10 - VIDEO - Everex Micro Enhancer EGA/Viewpoint VGA - EXTENDED MODE SET
+ AX = 0070h
+ BL = mode (see #00011)
+Desc: specify a proprietary display mode on the Everex Micro Enhancer or
+ Viewpoint video adapters
+SeeAlso: AH=00h,AX=6F05h,AX=7000h/BX=0004h,AH=FFh"GO32"
+
+(Table 00011)
+Values for Everex video mode:
+ text/ text pixel pixel colors disply scrn monitor adapter
+ grph resol box resolution pages addr
+ 00h = G . . 640x480 16 . . multisync EGA,VGA
+ 01h = G . . 752x410 16 . . multisync EGA,VGA
+ 02h = G . . 800x600 16 . . multisync EGA,VGA
+ 03h = T 80x34 . . . . . multisync EGA,VGA
+ 04h = T 80x60 . . . . . multisync EGA,VGA
+ 05h = T 94x29 . . . . . multisync EGA only
+ 06h = T 94x51 . . . . . multisync EGA only
+ 07h = T 100x43 8x14 . 16 . . . VGA only
+ 08h = T 100x75 8x8 . 16 . . . VGA only
+ 09h = T 80x44 . . . . . EGA EGA only
+ 0Ah = T 132x25 . . . . . EGA EGA,VGA
+ 0Bh = T 132x44 . . . . . EGA EGA,VGA
+ 0Ch = T 132x25 . . . . . CGA EGA only
+ 0Dh = T 80x44 . . . . . mono EGA only
+ 0Eh = T 132x25 . . . . . mono
+ 0Fh = T 132x44 . . . . . mono
+ 10h = reserved
+ 11h = G . . 1280x350 4 . . . EGA only
+ 12h = G . . 1280x600 4 . . . EGA only
+ 13h = G . . 640x350 256 . . . EGA,EV673
+ 14h = G . . 640x400 256 . . .
+ 15h = G . . 512x480 256 . . .
+ 16h = T 80x30 8x16 . 256 . . . VGA only
+ 18h = T 100x27 8x16 . 16 . . . VGA only
+ 20h = G . . 1024x768 16 . . . Everex 629,678
+ . . . . . . . Everex EV-673
+ 21h = T 160x64 8x16 1280x1024 16 . . . 1MB VGA only
+ 30h = G . . 640x480 256 . . . Everex 629,678
+ . . . . . . . Everex EV-673
+ 31h = G . . 800x600 256 . . . Everex 629,678
+ . . . . . . . Everex EV-673
+ 32h = G 128x48 8x16 1024x768 256 . . . 1MB VGA only
+ 40h = T 132x30 8x16 . 16 . . . VGA only
+ 50h = T 132x32 8x16 . mono . . . VGA only
+ 62h = G 40x25 8x8 320x200 32K . . . Vwpt TC (EV629)
+ 70h = G 64x30 8x16 512x480 32K . . . Viewpoint TC
+ 71h = G 80x30 8x16 640x480 32K . . . Viewpoint TC
+ 76h = G 64x30 8x16 512x480 16M . . . Viewpoint TC
+ 77h = G 80x30 8x16 640x480 16M . . . Viewpoint TC
+SeeAlso: #00010,#00191
+Index: video modes;Everex
+--------V-10007E-----------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET SPECIAL MODE
+ AX = 007Eh
+ BX = horizontal dimension of the mode desired
+ CX = vertical dimension of the mode desired
+ (both BX/CX in pixels for graphics modes, rows for alpha modes)
+ DX = number of colors of the mode desired (0000h for monochrome modes)
+Return: BH = 7Eh if successful (Paradise VGA)
+ AL = 7Eh if successful (AT&T VDC600)
+Desc: specify a display mode by resolution rather than mode number
+SeeAlso: AH=00h,AX=0070h,AX=007Fh/BH=00h,AX=6F05h,AH=FFh"GO32"
+Index: video modes;Paradise|video modes;AT&T
+--------V-10007FBH00-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET VGA OPERATION
+ AX = 007Fh
+ BH = 00h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+SeeAlso: AX=007Fh/BH=01h,AX=007Fh/BH=02h
+--------V-10007FBH01-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET NON-VGA OPERATION
+ AX = 007Fh
+ BH = 01h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+Note: color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation, monochrome
+ mode 7 will set non-VGA MDA/Hercules operation
+SeeAlso: AX=007Fh/BH=00h,AX=007Fh/BH=02h
+--------V-10007FBH02-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - QUERY MODE STATUS
+ AX = 007Fh
+ BH = 02h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+ ---if successful---
+ BL = 00h if operating in VGA mode, 01h if non-VGA mode
+ CH = total video RAM size in 64k byte units
+ CL = video RAM used by the current mode
+Note: under Novell DOS 7 TaskMgr Multitasker, this call always returns 0K
+ video memory in CX
+SeeAlso: AX=007Fh/BH=00h,AX=007Fh/BH=01h
+--------V-10007FBH03-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - LOCK CURRENT MODE
+ AX = 007Fh
+ BH = 03h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+Desc: allows current mode (VGA or non-VGA) to survive re-boot
+SeeAlso: AX=007Eh,AX=007Fh/BH=04h,AX=007Fh/BH=06h,AH=FFh"Oak"
+--------V-10007FBH04-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - ENTER MDA EMULATION MODE
+ AX = 007Fh
+ BH = 04h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+SeeAlso: AX=007Eh,AX=007Fh/BH=03h,AX=007Fh/BH=05h,AH=FFh"Oak"
+--------V-10007FBH05-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - ENTER CGA EMULATION MODE
+ AX = 007Fh
+ BH = 05h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+SeeAlso: AX=007Eh,AX=007Fh/BH=03h,AX=007Fh/BH=04h,AH=FFh"Oak"
+--------V-10007FBH06-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - ENTER MONOCHROME VGA MODE
+ AX = 007Fh
+ BH = 06h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+Note: this function also switches to video mode 7
+SeeAlso: AX=007Eh,AX=007Fh/BH=03h,AX=007Fh/BH=07h,AH=FFh"Oak"
+--------V-10007FBH07-------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - ENTER COLOR VGA MODE
+ AX = 007Fh
+ BH = 07h
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+Note: this function also switches to video mode 3
+SeeAlso: AX=007Eh,AX=007Fh/BH=03h,AX=007Fh/BH=06h,AH=FFh"Oak"
+--------V-10007F-----------------------------
+INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - EXTENDED DATA REGISTER ACCESS
+ AX = 007Fh
+ BH = function
+ 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh WRITE PARADISE REGISTERS 0,1,2,3,4,5
+ (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
+ BL = value to set in the paradise register
+ 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5
+ (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
+ Return: BL = value of the paradise register
+ BH = 7Fh if successful
+ 29h-2Fh ??? (Paradise VGA for Dell, 1991/07/24)
+Return: AL = 7Fh if successful (AT&T VDC600)
+ BH = status (Paradise/Dell)
+ 00h invalid function
+ 7Fh successful
+SeeAlso: AX=007Eh,AX=007Fh/BH=03h,AX=007Fh/BH=05h,AH=FFh"Oak"
+--------V-10007FBH60-------------------------
+INT 10 - Paradise VGA - ???
+ AX = 007Fh
+ BH = 60h
+ BL = ??? (00h-13h)
+ ???
+Return: BH = status (00h failed or not supported, 7Fh successful)
+ ???
+Note: this function is supported by the 1993/5/14 ROM for the Dell 486D
+SeeAlso: AX=007Fh/BH=61h
+--------V-10007FBH61-------------------------
+INT 10 - Paradise VGA - ???
+ AX = 007Fh
+ BH = 61h
+ ES:DI -> buffer for list of ??? (see #00012)
+Return: BH = status (00h failed or not supported, 7Fh successful)
+ ???
+Note: this function is supported by the 1993/5/14 ROM for the Dell 486D
+SeeAlso: AX=007Fh/BH=60h
+
+Format of Paradise VGA list entry:
+Offset Size Description (Table 00012)
+ 00h BYTE ??? or 00h if end of list
+ 01h BYTE ???
+ 02h WORD ???
+ 04h WORD ???
+ 06h WORD ???
+--------V-10007FBXA500-----------------------
+INT 10 - Paradise VGA - ???
+ AX = 007Fh
+ BX = A500h
+ ???
+Return: BH = status (00h failed or not supported, 7Fh successful)
+ ???
+Note: this function is supported by the 1993/5/14 ROM for the Dell 486D
+SeeAlso: AX=007Fh/BH=A6h
+--------V-10007FBHA5-------------------------
+INT 10 - Paradise VGA - ???
+ AX = 007Fh
+ BH = A5h
+ BL = ???
+ bits 3-0: ??? (0-4)
+ bits 5,4: ???
+ ???
+Return: BH = status (00h failed or not supported, 7Fh successful)
+ ???
+Note: this function is supported by the 1993/5/14 ROM for the Dell 486D
+--------V-10007FBHA6-------------------------
+INT 10 - Paradise VGA - ???
+ AX = 007Fh
+ BH = A6h
+ ???
+Return: BH = status (00h failed or not supported, 7Fh successful)
+ ???
+Note: this function is supported by the 1993/5/14 ROM for the Dell 486D
+SeeAlso: AX=007Fh/BH=A5h
+--------V-1001-------------------------------
+INT 10 - VIDEO - SET TEXT-MODE CURSOR SHAPE
+ AH = 01h
+ CH = cursor start and options (see #00013)
+ CL = bottom scan line containing cursor (bits 0-4)
+Return: nothing
+Desc: specify the starting and ending scan lines to be occupied by the
+ hardware cursor in text modes
+Notes: buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
+ returns unmapped cursor shape
+ UltraVision scales size to the current font height by assuming 14-line
+ monochrome and 8-line color fonts; this call is not valid if cursor
+ emulation has been disabled
+ applications which wish to change the cursor by programming the
+ hardware directly on EGA or above should call INT 10/AX=1130h or
+ read 0040h:0085h first to determine the current font height
+ on some adapters, setting the end line greater than the number of lines
+ in the font will result in the cursor extending to the top of the
+ next character cell on the right
+BUG: AMI 386 BIOS and AST Premier 386 BIOS will lock up the system if AL
+ is not equal to the current video mode
+SeeAlso: AH=03h,AX=CD05h,AH=12h/BL=34h,#03885
+
+Bitfields for cursor start and options:
+Bit(s) Description (Table 00013)
+ 7 should be zero
+ 6,5 cursor blink
+ (00=normal, 01=invisible, 10=erratic, 11=slow)
+ (00=normal, other=invisible on EGA/VGA)
+ 4-0 topmost scan line containing cursor
+--------V-1002-------------------------------
+INT 10 - VIDEO - SET CURSOR POSITION
+ AH = 02h
+ BH = page number
+ 0-3 in modes 2&3
+ 0-7 in modes 0&1
+ 0 in graphics modes
+ DH = row (00h is top)
+ DL = column (00h is left)
+Return: nothing
+SeeAlso: AH=03h,AH=05h,INT 60/DI=030Bh,MEM 0040h:0050h
+--------V-1003-------------------------------
+INT 10 - VIDEO - GET CURSOR POSITION AND SIZE
+ AH = 03h
+ BH = page number
+ 0-3 in modes 2&3
+ 0-7 in modes 0&1
+ 0 in graphics modes
+Return: AX = 0000h (Phoenix BIOS)
+ CH = start scan line
+ CL = end scan line
+ DH = row (00h is top)
+ DL = column (00h is left)
+Notes: a separate cursor is maintained for each of up to 8 display pages
+ many ROM BIOSes incorrectly return the default size for a color display
+ (start 06h, end 07h) when a monochrome display is attached
+ With PhysTechSoft's PTS ROM-DOS the BH value is ignored on entry.
+SeeAlso: AH=01h,AH=02h,AH=12h/BL=34h,MEM 0040h:0050h,MEM 0040h:0060h
+--------V-1004-------------------------------
+INT 10 - VIDEO - READ LIGHT PEN POSITION (except VGA)
+ AH = 04h
+Return: AH = light pen trigger flag
+ 00h not down/triggered
+ 01h down/triggered
+ DH,DL = row,column of character light pen is on
+ CH = pixel row (graphics modes 04h-06h)
+ CX = pixel row (graphics modes with >200 rows)
+ BX = pixel column
+Desc: determine the current position and status of the light pen (if
+ present)
+Notes: on a CGA, returned column numbers are always multiples of 2 (320-
+ column modes) or 4 (640-column modes)
+ returned row numbers are only accurate to two lines
+--------V-1004------------------------------------
+INT 10 - HUNTER 16 - GET CURSOR ADDRESS
+ AH = 04h
+ BH = page
+Return: DH = row (0..24)
+ DL = column (0..79)
+ CH = cursor pixel Y-address (0..199)
+ CL = cursor pixel X-address (0..639)
+Notes: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+ pixel coordinates are for the lower left corner of the character cell
+ containing the cursor
+SeeAlso: AH=60h"HUNTER"
+--------V-1005-------------------------------
+INT 10 - VIDEO - SELECT ACTIVE DISPLAY PAGE
+ AH = 05h
+ AL = new page number (00h to number of pages - 1) (see #00010)
+Return: nothing
+Desc: specify which of possibly multiple display pages will be visible
+Note: to determine whether the requested page actually exists, use AH=0Fh
+ to query the current page after making this call
+SeeAlso: AH=0Fh,AH=43h,AH=45h,MEM 0040h:0062h,MEM 0040h:004Eh
+--------V-100500-----------------------------
+INT 10 - VIDEO - Corona/Cordata BIOS v4.10+ - SET GRAPHICS BITMAP BUFFER
+ AX = 0500h
+ BX = segment of buffer
+Return: nothing
+Desc: set the address of graphics bitmap buffer for video modes 60h and 61h
+SeeAlso: AX=050Fh"Corona"
+--------V-10050F-----------------------------
+INT 10 - VIDEO - Corona/Cordata BIOS v4.10+ - GET GRAPHICS BITMAP BUFFER
+ AX = 050Fh
+Return: DX = segment of graphics bitmap buffer
+Desc: get the address of graphics bitmap buffer for video modes 60h and 61h
+SeeAlso: AX=0500h"Corona"
+--------V-100580-----------------------------
+INT 10 - VIDEO - PCjr, Tandy 1000 - GET CRT/CPU PAGE REGISTERS
+ AX = 0580h
+Return: BH = CRT page register
+ BL = CPU page register
+Notes: the CPU page determines which 16K block of the first 128K of physical
+ memory will be mapped at B800h by the hardware
+ the CRT page determines the start address of the memory used by the
+ video controller
+SeeAlso: AH=05h"SET CRT/CPU"
+--------V-1005-------------------------------
+INT 10 - VIDEO - PCjr, Tandy 1000 - SET CRT/CPU PAGE REGISTERS
+ AH = 05h
+ AL = subfunction
+ 81h set CPU page register
+ BL = CPU page
+ 82h set CRT page register
+ BH = CRT page
+ 83h set both CPU and CRT page registers
+ BL = CPU page
+ BH = CRT page
+Return: nothing
+Notes: the CPU page determines which 16K block of the first 128K of physical
+ memory will be mapped at B800h by the hardware
+ the CRT page determines the start address of the memory used by the
+ video controller
+SeeAlso: AX=0580h
+--------V-1006-------------------------------
+INT 10 - VIDEO - SCROLL UP WINDOW
+ AH = 06h
+ AL = number of lines by which to scroll up (00h = clear entire window)
+ BH = attribute used to write blank lines at bottom of window
+ CH,CL = row,column of window's upper left corner
+ DH,DL = row,column of window's lower right corner
+Return: nothing
+Note: affects only the currently active page (see AH=05h)
+BUGS: some implementations (including the original IBM PC) have a bug which
+ destroys BP
+ the Trident TVGA8900CL (BIOS dated 1992/9/8) clears DS to 0000h when
+ scrolling in an SVGA mode (800x600 or higher)
+SeeAlso: AH=07h,AH=12h"Tandy 2000",AH=72h,AH=73h,AX=7F07h,INT 50/AX=0014h
+--------V-1007-------------------------------
+INT 10 - VIDEO - SCROLL DOWN WINDOW
+ AH = 07h
+ AL = number of lines by which to scroll down (00h=clear entire window)
+ BH = attribute used to write blank lines at top of window
+ CH,CL = row,column of window's upper left corner
+ DH,DL = row,column of window's lower right corner
+Return: nothing
+Note: affects only the currently active page (see AH=05h)
+BUGS: some implementations (including the original IBM PC) have a bug which
+ destroys BP
+ the Trident TVGA8900CL (BIOS dated 1992/9/8) clears DS to 0000h when
+ scrolling in an SVGA mode (800x600 or higher)
+SeeAlso: AH=06h,AH=12h"Tandy 2000",AH=72h,AH=73h,INT 50/AX=0014h
+--------V-1008-------------------------------
+INT 10 - VIDEO - READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION
+ AH = 08h
+ BH = page number (00h to number of pages - 1) (see #00010)
+Return: AH = character's attribute (text mode only) (see #00014)
+ AH = character's color (Tandy 2000 graphics mode only)
+ AL = character
+Notes: for monochrome displays, a foreground of 1 with background 0 is
+ underlined
+ the blink bit may be reprogrammed to enable intense background colors
+ using AX=1003h or by programming the CRT controller
+ the foreground intensity bit (3) can be programmed to switch between
+ character sets A and B on EGA and VGA cards, thus enabling 512
+ simultaneous characters on screen. In this case the bit's usual
+ function (intensity) is regularly turned off.
+ in graphics modes, only characters drawn with white foreground pixels
+ are matched by the pattern-comparison routine
+ on the Tandy 2000, BH=FFh specifies that the current page should be
+ used
+ because of the IBM BIOS specifications, there may exist some clone
+ BIOSes which do not preserve SI or DI; the Novell DOS kernel
+ preserves SI, DI, and BP before many INT 10h calls to avoid problems
+ due to those registers not being preserved by the BIOS.
+BUG: some IBM PC ROM BIOSes destroy BP when in graphics modes
+SeeAlso: AH=09h,AX=1003h,AX=1103h,AH=12h/BL=37h,AX=5001h
+
+Bitfields for character's display attribute:
+Bit(s) Description (Table 00014)
+ 7 foreground blink or (alternate) background bright (see also AX=1003h)
+ 6-4 background color (see #00015)
+ 3 foreground bright or (alternate) alternate character set (see AX=1103h)
+ 2-0 foreground color (see #00015)
+SeeAlso: #00026
+
+(Table 00015)
+Values for character color:
+ Normal Bright
+ 000b black dark gray
+ 001b blue light blue
+ 010b green light green
+ 011b cyan light cyan
+ 100b red light red
+ 101b magenta light magenta
+ 110b brown yellow
+ 111b light gray white
+--------V-1009-------------------------------
+INT 10 - VIDEO - WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION
+ AH = 09h
+ AL = character to display
+ BH = page number (00h to number of pages - 1) (see #00010)
+ background color in 256-color graphics modes (ET4000)
+ BL = attribute (text mode) or color (graphics mode)
+ if bit 7 set in <256-color graphics mode, character is XOR'ed
+ onto screen
+ CX = number of times to write character
+Return: nothing
+Notes: all characters are displayed, including CR, LF, and BS
+ replication count in CX may produce an unpredictable result in graphics
+ modes if it is greater than the number of positions remaining in the
+ current row
+ With PhysTechSoft's PTS ROM-DOS the BH, BL, and CX values are ignored
+ on entry.
+SeeAlso: AH=08h,AH=0Ah,AH=4Bh"GRAFIX",INT 17/AH=60h,INT 1F"SYSTEM DATA"
+SeeAlso: INT 43"VIDEO DATA",INT 44"VIDEO DATA"
+--------V-100A-------------------------------
+INT 10 - VIDEO - WRITE CHARACTER ONLY AT CURSOR POSITION
+ AH = 0Ah
+ AL = character to display
+ BH = page number (00h to number of pages - 1) (see #00010)
+ background color in 256-color graphics modes (ET4000)
+ BL = attribute (PCjr, Tandy 1000 only) or color (graphics mode)
+ if bit 7 set in <256-color graphics mode, character is XOR'ed
+ onto screen
+ CX = number of times to write character
+Return: nothing
+Notes: all characters are displayed, including CR, LF, and BS
+ replication count in CX may produce an unpredictable result in graphics
+ modes if it is greater than the number of positions remaining in the
+ current row
+ With PhysTechSoft's PTS ROM-DOS the BH and CX values are ignored
+ on entry.
+SeeAlso: AH=08h,AH=09h,AH=11h"Tandy 2000",AH=4Bh,INT 17/AH=60h
+SeeAlso: INT 1F"SYSTEM DATA",INT 43"VIDEO DATA",INT 44"VIDEO DATA"
+--------V-100B--BH00-------------------------
+INT 10 - VIDEO - SET BACKGROUND/BORDER COLOR
+ AH = 0Bh
+ BH = 00h
+ BL = background/border color (border only in text modes)
+Return: nothing
+SeeAlso: AH=0Bh/BH=01h
+--------V-100B--BH01-------------------------
+INT 10 - VIDEO - SET PALETTE
+ AH = 0Bh
+ BH = 01h
+ BL = palette ID
+ 00h background, green, red, and brown/yellow
+ 01h background, cyan, magenta, and white
+Return: nothing
+Note: this call was only valid in 320x200 graphics on the CGA, but newer
+ cards support it in many or all graphics modes
+SeeAlso: AH=0Bh/BH=00h,MEM 0040h:0066h
+--------V-100B--BH02-------------------------
+INT 10 - Tandy 2000 - VIDEO - SET PALETTE ENTRY
+ AH = 0Bh
+ BH = 02h
+ BL = palette entry number
+ AL = new color value for palette entry
+Return: nothing
+Note: this interrupt is identical to INT 52 for Tandy 2000
+SeeAlso: INT 10/AH=00h,INT 10/AH=0Bh/BH=01h,INT 52"Tandy 2000"
+--------V-100C-------------------------------
+INT 10 - VIDEO - WRITE GRAPHICS PIXEL
+ AH = 0Ch
+ BH = page number
+ AL = pixel color
+ if bit 7 set, value is XOR'ed onto screen except in 256-color modes
+ CX = column
+ DX = row
+Return: nothing
+Desc: set a single pixel on the display in graphics modes
+Notes: valid only in graphics modes
+ BH is ignored if the current video mode supports only one page
+SeeAlso: AH=0Dh,AH=46h
+--------V-100D-------------------------------
+INT 10 - VIDEO - READ GRAPHICS PIXEL
+ AH = 0Dh
+ BH = page number
+ CX = column
+ DX = row
+Return: AL = pixel color
+Desc: determine the current color of the specified pixel in grahics modes
+Notes: valid only in graphics modes
+ BH is ignored if the current video mode supports only one page
+SeeAlso: AH=0Ch,AH=47h
+--------V-100E-------------------------------
+INT 10 - VIDEO - TELETYPE OUTPUT
+ AH = 0Eh
+ AL = character to write
+ BH = page number
+ BL = foreground color (graphics modes only)
+Return: nothing
+Desc: display a character on the screen, advancing the cursor and scrolling
+ the screen as necessary
+Notes: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
+ and do the expected things
+ IBM PC ROMs dated 1981/4/24 and 1981/10/19 require that BH be the same
+ as the current active page
+BUG: if the write causes the screen to scroll, BP is destroyed by BIOSes
+ for which AH=06h destroys BP
+SeeAlso: AH=02h,AH=06h,AH=0Ah
+--------b-100E--CXABCD-----------------------
+INT 10 - V20-XT-BIOS - TELETYPE OUTPUT WITH ATTRIBUTE
+ AH = 0Eh
+ CX = ABCDh
+ BP = ABCDh
+ AL = character to write
+ BH = page number
+ BL = foreground color (text modes as well as graphics modes)
+Return: nothing
+Program: V20-XT-BIOS is a ROM BIOS replacement with extensions by Peter
+ Koehlmann / c't magazine
+Desc: display a character on the screen, advancing the cursor and scrolling
+ the screen as necessary
+Notes: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
+ and do the expected things
+SeeAlso: INT 15/AH=84h"V20-XT-BIOS"
+--------V-100F-------------------------------
+INT 10 - VIDEO - GET CURRENT VIDEO MODE
+ AH = 0Fh
+Return: AH = number of character columns
+ AL = display mode (see #00010 at AH=00h)
+ BH = active page (see AH=05h)
+Notes: if mode was set with bit 7 set ("no blanking"), the returned mode will
+ also have bit 7 set
+ EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h
+ (monochrome) in all extended-row text modes
+ HP 200LX returns AL=07h (monochrome) if mode was set to AL=21h
+ and always 80 resp. 40 columns in all text modes regardless of
+ current zoom setting (see AH=D0h)
+ when using a Hercules Graphics Card, additional checks are necessary:
+ mode 05h: if WORD 0040h:0063h is 03B4h, may be in graphics page 1
+ (as set by DOSSHELL and other Microsoft software)
+ mode 06h: if WORD 0040h:0063h is 03B4h, may be in graphics page 0
+ (as set by DOSSHELL and other Microsoft software)
+ mode 07h: if BYTE 0040h:0065h bit 1 is set, Hercules card is in
+ graphics mode, with bit 7 indicating the page (mode set by
+ Hercules driver for Borland Turbo C)
+ the Tandy 2000 BIOS is only documented as returning AL, not AH or BH
+SeeAlso: AH=00h,AH=05h,AX=10F2h,AX=1130h,AX=CD04h,MEM 0040h:004Ah
+--------V-100F56BX4756-----------------------
+INT 10 - VUIMAGE DISPLAY DRIVER (v2.20 and below)
+ AX = 0F56h
+ BX = 4756h
+ CX = 4944h
+ DL = function
+ 01h installation check
+ Return: AX = 5649h
+ BX = 4443h
+ CX = 5647h
+ DH = 01h
+ 02h get first video mode's parameters
+ Return: AX = BIOS mode number
+ BX = width in pixels
+ CX = height in pixels
+ DX = number of colors
+ 03h get next video mode's parameters
+ Return: as for DL=02h
+ 04h display line???
+ ES:DI -> record (see #00016)
+ ???
+ Return: ???
+Program: VUIMAGE is a shareware GIF/TIFF image viewer by Offe Enterprises
+Note: the use of TSR display drivers was discontinued after v2.20
+Index: installation check;VUIMAGE display driver
+
+Format of record for VUIMAGE Function 04h:
+Offset Size Description (Table 00016)
+ 00h WORD row number
+ 02h WORD starting column???
+ 04h WORD ending column???
+ ???
+--------V-100F--SIF123-----------------------
+INT 10 - FRIEZE v7.41+ - INSTALLATION CHECK
+ AH = 0Fh
+ SI = F123h
+ DI = 321Fh
+Return: AH = number of character columns
+ AL = display mode (see #00010 at AH=00h)
+ BH = active page (see AH=05h)
+ SI = DI = F345h if installed
+Notes: if mode was set with bit 7 set ("no blanking"), the returned mode will
+ also have bit 7 set
+ EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h
+ (monochrome) in all extended-row text modes
+SeeAlso: AH=0Fh"VIDEO",AH=4Bh"FRIEZE"
+--------V-1010-------------------------------
+INT 10 - BIOS Window Extension v1.1 - SET WINDOW COORDINATES
+ AH = 10h
+ CH,CL = row,column of upper left corner of window
+ DH,DL = row,column of lower right corner of window
+Return: AL = status
+ 00h successful
+ 01h failed
+ AH destroyed
+Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
+Note: when a window has been set, all output via AH=0Eh is restricted to
+ the specified window
+SeeAlso: AH=11h"Window",AH=12h"Window"
+--------V-1010-------------------------------
+INT 10 - VIDEO - Eagle PC2 BIOS Rev. C - SET SCROLL SPEED
+ AH = 10h
+ AL = speed
+ 00h fast
+ 01h slow (scrolling only moves characters during vertical retrace)
+Return: AH = previous speed
+--------V-1010-------------------------------
+INT 10 - Tandy 2000 - VIDEO - GET/SET CHARACTER FONTS
+ AH = 10h
+ AL = control value
+ bit 0: set character set instead of reading it
+ bit 1: high 128 characters instead of low 128 characters
+ ES:BX -> new character set if AL bit 0 set
+Return: ES:BX -> current character set if AL bit 0 clear on entry
+Notes: this interrupt is identical to INT 52 on Tandy 2000
+ the character set consists of 16 bytes for each of the 128 characters,
+ where each of the 16 bytes describes the pixels in one scan line,
+ most significant bit leftmost
+SeeAlso: AH=00h,AH=0Bh/BH=02h,AH=11h"Tandy 2000",AH=12h"Tandy 2000"
+SeeAlso: INT 52"Tandy 2000"
+--------V-101000-----------------------------
+INT 10 - VIDEO - SET SINGLE PALETTE REGISTER (PCjr,Tandy,EGA,MCGA,VGA)
+ AX = 1000h
+ BL = palette register number (00h-0Fh)
+ = attribute register number (undocumented) (see #00017)
+ BH = color or attribute register value
+Return: nothing
+Notes: on MCGA, only BX = 0712h is supported
+ under UltraVision, the palette locking status (see AX=CD01h)
+ determines the outcome
+SeeAlso: AX=1002h,AX=1007h,AX=CD01h
+
+(Table 00017)
+Values for attribute register number:
+ 10h attribute mode control register (should let BIOS control this)
+ 11h overscan color register (see also AX=1001h)
+ 12h color plane enable register (bits 3-0 enable corresponding
+ text attribute bit)
+ 13h horizontal PEL panning register
+ 14h color select register
+--------V-101001-----------------------------
+INT 10 - VIDEO - SET BORDER (OVERSCAN) COLOR (PCjr,Tandy,EGA,VGA)
+ AX = 1001h
+ BH = border color (00h-3Fh)
+Return: nothing
+BUG: the original IBM VGA BIOS incorrectly updates the parameter save area
+ and places the border color at offset 11h of the palette table
+ rather than offset 10h
+Note: under UltraVision, the palette locking status (see AX=CD01h)
+ determines the outcome
+SeeAlso: AX=1002h,AX=1008h,AX=CD01h
+--------V-101002-----------------------------
+INT 10 - VIDEO - SET ALL PALETTE REGISTERS (PCjr,Tandy,EGA,VGA)
+ AX = 1002h
+ ES:DX -> palette register list (see #00018)
+ BH = 00h to avoid problems on some adapters
+Return: nothing
+Note: under UltraVision, the palette locking status (see AX=CD01h)
+ determines the outcome
+SeeAlso: AX=1000h,AX=1001h,AX=1009h,AX=CD01h
+
+Format of palette register list:
+Offset Size Description (Table 00018)
+ 00h 16 BYTEs colors for palette registers 00h through 0Fh
+ 10h BYTE border color
+SeeAlso: #00461
+--------V-101003-----------------------------
+INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
+ AX = 1003h
+ BL = new state
+ 00h background intensity enabled
+ 01h blink enabled
+ BH = 00h to avoid problems on some adapters
+Return: nothing
+Notes: although there is no function to get the current status on adapters
+ prior to the VGA, bit 5 of 0040h:0065h indicates the state; on the
+ VGA, use AH=1Bh and check offset 2Dh of the returned data (see #00040)
+ when configured for a monochrome display, the Boca Research Multi-EGA
+ with ROM v M1.1 Type D has its screen disrupted if BH is not clear
+ this call is reported to be "Get Cursor Position" on the Tandy
+ 1000SL/TL
+SeeAlso: AH=08h,AH=1Bh
+--------V-101007-----------------------------
+INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA,UltraVision v2+)
+ AX = 1007h
+ BL = palette or attribute (undoc) register number (see #00017)
+Return: BH = palette or attribute register value
+Note: UltraVision v2+ supports this function even on color EGA systems in
+ video modes 00h-03h, 10h, and 12h; direct programming of the palette
+ registers will cause incorrect results because the EGA registers are
+ write-only. To guard against older versions or unsupported video
+ modes, programs which expect to use this function on EGA systems
+ should set BH to FFh on entry.
+SeeAlso: AX=1000h,AX=1009h
+--------V-101008-----------------------------
+INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA,UltraVision v2+)
+ AX = 1008h
+Return: BH = border color (00h-3Fh)
+Note: (see AX=1007h)
+SeeAlso: AX=1001h
+--------V-101009-----------------------------
+INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA)
+ AX = 1009h
+ ES:DX -> 17-byte buffer for palette register list (see #00018)
+Return: nothing
+Note: UltraVision v2+ supports this function even on color EGA systems in
+ video modes 00h-03h, 10h, and 12h; direct programming of the palette
+ registers will cause incorrect results because the EGA registers are
+ write-only. To guard against older versions or unsupported video
+ modes, programs which expect to use this function on EGA systems
+ should set the ES:DX buffer to FFh before calling.
+SeeAlso: AX=1002h,AX=1007h,AX=CD02h
+--------V-101010-----------------------------
+INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (VGA/MCGA)
+ AX = 1010h
+ BX = register number
+ CH = new value for green (0-63)
+ CL = new value for blue (0-63)
+ DH = new value for red (0-63)
+Return: nothing
+SeeAlso: AX=1012h,AX=1015h
+--------V-101012-----------------------------
+INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (VGA/MCGA)
+ AX = 1012h
+ BX = starting color register
+ CX = number of registers to set
+ ES:DX -> table of 3*CX bytes where each 3 byte group represents one
+ byte each of red, green and blue (0-63)
+Return: nothing
+SeeAlso: AX=1010h,AX=1017h,INT 62/AX=00A5h
+--------V-101013-----------------------------
+INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA)
+ AX = 1013h
+ BL = subfunction
+ 00h select paging mode
+ BH = 00h select 4 blocks of 64
+ BH = 01h select 16 blocks of 16
+ 01h select page
+ BH = page number (00h to 03h) or (00h to 0Fh)
+Return: nothing
+Note: this function is not valid in mode 13h
+SeeAlso: AX=101Ah
+--------V-101015-----------------------------
+INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (VGA/MCGA)
+ AX = 1015h
+ BL = palette register number
+Return: DH = red value
+ CH = green value
+ CL = blue value
+ AX destroyed by some BIOSes
+ (e.g. Tseng ET4000 BIOS v8.00n always returns AX=00C9h)
+SeeAlso: AX=1010h,AX=1017h
+--------V-101017-----------------------------
+INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (VGA/MCGA)
+ AX = 1017h
+ BX = starting palette register
+ CX = number of palette registers to read
+ ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h)
+Return: buffer filled with CX red, green and blue triples
+SeeAlso: AX=1012h,AX=1015h,INT 62/AX=00A4h
+--------V-101018-----------------------------
+INT 10 U - VIDEO - SET PEL MASK (VGA/MCGA)
+ AX = 1018h
+ BL = new PEL value
+Return: nothing
+SeeAlso: AX=1019h
+--------V-101019-----------------------------
+INT 10 U - VIDEO - READ PEL MASK (VGA/MCGA)
+ AX = 1019h
+Return: BL = value read
+SeeAlso: AX=1018h
+--------V-10101A-----------------------------
+INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA)
+ AX = 101Ah
+Return: BL = paging mode
+ 00h four pages of 64
+ 01h sixteen pages of 16
+ BH = current page
+SeeAlso: AX=1013h
+--------V-10101B-----------------------------
+INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (VGA/MCGA)
+ AX = 101Bh
+ BX = starting palette register
+ CX = number of registers to convert
+Return: nothing
+Desc: convert the RGB values of one or more palette registers such that the
+ resulting values are grays with the same intensities as the original
+ colors
+SeeAlso: AH=12h/BL=33h
+--------V-1010E0-----------------------------
+INT 10 - VIDEO - Diamond Speedstar 24 - SET 24-BIT GRAPHICS MODE
+ AX = 10E0h
+ BL = video mode (see also #00010 at AH=00h)
+ 2Eh = 640x480
+Return: ???
+SeeAlso: AH=00h,AX=10F0h
+--------V-1010F0-----------------------------
+INT 10 - VIDEO - Tseng ET-4000 BIOS - SET HiColor GRAPHICS MODE
+ AX = 10F0h
+ BL = video mode (see also #00010 at AH=00h)
+ 13h = 320x200x32K
+ 2Dh = 640x350x32K
+ 2Eh = 640x480x32K
+ 2Fh = 640x400x32K
+ 30h = 800x600x32K
+ 3Eh = 640x480x16M (Genoa 7900)
+ FFh Tseng 24-bit color mode
+ BH = mode
+ 2Dh = 640x480
+ 2Eh = 640x480x16M
+ 2Fh = 640x400
+ 30h = 800x600
+ 38h = 1024x768??? (Tseng ET4000/W32i)
+Return: AL = 10h if supported
+ AH = status
+ 00h if successful
+ other on error
+Desc: switch the display into a graphics mode with 15 or more bits per pixel
+Note: the Tseng HiColor BIOS extensions are supported by:
+ Diamond Computer Systems SpeedStar HiColor VGA
+ Everex Systems HC VGA
+ Focus Information Systems 2theMax 4000
+ Cardinal Technologies VGA732
+ Orchid ProDesigner IIs Genoa 7900
+SeeAlso: AH=00h,AX=10E0h,AX=10F1h,AX=10F2h
+Index: video modes;Tseng Hi-Color
+--------V-1010F1-----------------------------
+INT 10 - VIDEO - Tseng ET-4000 BIOS - GET DAC TYPE
+ AX = 10F1h
+Return: AL = 10h if supported
+ BL = type of digital/analog converter (see #00019)
+Desc: determine which type of digital-to-analog converter is installed on the
+ display board
+SeeAlso: AX=10F0h,AX=10F2h
+
+(Table 00019)
+Values for type of DAC:
+ 00h normal VGA DAC
+ 01h Sierra SC1148x HiColor DAC
+ ---Diamond SpeedStar 24---
+ 02h new Sierra SS24 DAC (24-bit)
+ ---generic Tseng BIOS v8+ ---
+ 02h Sierra Mark2 (15-bit) or Mark3 (15/16-bit) DAC
+ 03h ATT20c490/1/2 (15/16/24-bit)
+ 04h AcuMos ADAC1 (15/16/24-bit)
+ 05h unknown 15/16/24-bit DAC
+ 06h Cirrus Internal 15/16/24-bit (CL-GD54xx series adapters)
+ 07h Diamond SS2410 (15/24-bit)
+ 08h unknown 15/16/24-bit DAC
+ 09h unknown 15/16/24-bit DAC
+ else other HiColor DAC
+--------V-1010F2-----------------------------
+INT 10 u - VIDEO - Tseng ET-4000 BIOS - CHECK IF HiColor MODE/SET HiColor MODE
+ AX = 10F2h
+ BL = function
+ 00h get current HiColor mode
+ 01h set 15-bit HiColor mode
+ 02h set 16-bit HiColor mode
+Return: AX = 0010h if supported
+ BL = video mode type
+ 00h not in HiColor mode
+ 01h 15-bit RGB mode
+ 02h 16-bit RGB mode
+ 03h 24-bit RGB mode
+Desc: determine whether the display is in a graphics mode with 15 or more
+ bits per pixel color resolution
+Note: set (BL=01h/02h) only works if already in a HiColor mode
+SeeAlso: AH=0Fh,AX=10F0h,AX=10F1h
+--------V-1011-------------------------------
+INT 10 - BIOS Window Extension v1.1 - GET WINDOW COORDINATES
+ AH = 11h
+Return: CH,CL = row,column of upper left corner
+ DH,DL = row,column of lower right corner
+Desc: determine the portion of the display to which output is restricted
+Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
+SeeAlso: AH=10h"Window",AH=12h"Window"
+--------V-1011-------------------------------
+INT 10 - Tandy 2000 - VIDEO - WRITE ATTRIBUTE ONLY
+ AH = 11h
+ BL = new character attribute (text modes) or color (graphics)
+ CX = number of times to write attribute
+Return: nothing
+Note: this interrupt is identical to INT 52 on Tandy 2000
+SeeAlso: AH=0Ah,AH=0Bh/BH=02h,AH=11h"Tandy 2000",AH=12h"Tandy 2000"
+SeeAlso: INT 52"Tandy 2000"
+--------V-101100-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD USER-SPECIFIED PATTERNS (PS,EGA,VGA)
+ AX = 1100h
+ ES:BP -> user table
+ CX = count of patterns to store
+ DX = character offset into map 2 block
+ BL = block to load in map 2
+ BH = number of bytes per character pattern
+Return: nothing
+Notes: This function will cause a mode set, completely resetting
+ the video environment, but without clearing the video buffer
+ the current block specifiers may be determined with INT 10/AH=1Bh,
+ looking at offsets 2Bh and 2Ch of the returned data (VGA only)
+ (see AH=1Bh,#00040)
+SeeAlso: AX=1101h,AX=1102h,AX=1103h,AX=1104h,AX=1110h,AH=1Bh,AX=CD10h
+SeeAlso: MEM 0040h:0084h
+Index: text mode;font|text mode;screen rows
+--------V-101101-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM MONOCHROME PATTERNS (PS,EGA,VGA)
+ AX = 1101h
+ BL = block to load
+Return: nothing
+Notes: (see also AX=1100h)
+ This function will cause a mode set, completely resetting
+ the video environment, but without clearing the video buffer
+ the "monochrome" patters are 8x14 pixels in size
+SeeAlso: AX=1100h,AX=1102h,AX=1103h,AX=1104h,AX=1111h,AH=1Bh,AX=CD10h
+SeeAlso: MEM 0040h:0084h
+Index: text mode;font|text mode;screen rows
+--------V-101102-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x8 DBL-DOT PATTERNS (PS,EGA,VGA)
+ AX = 1102h
+ BL = block to load
+Return: nothing
+Notes: (see AX=1100h)
+SeeAlso: AX=1100h,AX=1101h,AX=1103h,AX=1104h,AX=1112h,AH=1Bh,AX=CD10h
+SeeAlso: MEM 0040h:0084h
+--------V-101103-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - SET BLOCK SPECIFIER (PS,EGA,VGA)
+ AX = 1103h
+ BL = block specifier (see #00020)
+Return: nothing
+Notes: (see also AX=1110h)
+ This function allows dual character sets to appear on screen
+ simultaneously
+SeeAlso: AX=1100h,AX=1101h,AX=1102h,AX=1104h,AH=1Bh,AX=CD10h
+SeeAlso: MEM 0040h:0084h
+Index: text mode;font|text mode;screen rows
+
+Bitfields for block specifier:
+Bit(s) Description (Table 00020)
+---EGA/MCGA---
+ 0,1 block selected by characters with attribute bit 3 clear
+ 2,3 block selected by characters with attribute bit 3 set
+---VGA---
+ 0,1,4 block selected by characters with attribute bit 3 clear
+ 2,3,5 block selected by characters with attribute bit 3 set
+--------V-101104-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x16 CHARACTER SET (VGA)
+ AX = 1104h
+ BL = block to load
+Return: nothing
+Notes: (see AX=1100h)
+SeeAlso: AX=1100h,AX=1101h,AX=1102h,AX=1103h,AX=1114h,AH=1Bh,AX=CD10h
+SeeAlso: MEM 0040h:0084h
+Index: text mode;font|text mode;screen rows
+--------V-1011-------------------------------
+INT 10 - VIDEO - Realtek RTVGA - TEXT-MODE CHARACTER GENERATOR FUNCTIONS
+ AH = 11h
+ AL = 07h load user-specified patterns and recalculate mode parms
+ parameters are the same as for AX=1110h
+ AL = 08h load monochrome patterns (8x14) and recalculate mode parms
+ parameters are the same as for AX=1111h
+ AL = 09h load ROM 8 by 8 double-dot patterns and recalculate mode parms
+ parameters are the same as for AX=1112h
+ AL = 0Bh load ROM 8x16 character set (VGA) and recalculate mode parms
+ parameters are the same as for AX=1114h
+Note: these functions should only be called under the same conditions as
+ AL=1xh (see AX=1110h"EGA")
+SeeAlso: AX=1100h,AX=1110h"CHARGEN",AX=1110h"Realtek",MEM 0040h:0084h
+Index: text mode;font|text mode;screen rows
+--------V-10110F-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - SET USER 8x8 GRAPHICS CHARACTERS
+ AX = 110Fh
+ ES:BP -> user table for INT 1F
+Return: nothing
+Note: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+SeeAlso: AX=1110h"Realtek",AX=1111h"Realtek",AX=1112h"Realtek",AX=1120h
+--------V-101110-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD USER-SPECIFIED PATTERNS (PS,EGA,VGA)
+ AX = 1110h
+ ES:BP -> user table
+ CX = count of patterns to store
+ DX = character offset into map 2 block
+ BL = block to load in map 2
+ BH = number of bytes per character pattern
+Return: nothing
+Notes: This function will cause a mode set, completely resetting
+ the video environment, but without clearing the video buffer
+ This function is designed to be called immediately after a mode set,
+ it is equivalent to AX=110xh except that:
+ Page 0 must be active.
+ Bytes/character is recalculated.
+ Max character rows is recalculated.
+ CRT buffer length is recalculated.
+ CRTC registers are reprogrammed as follows:
+ R09 = bytes/char-1 ; max scan line (mode 7 only)
+ R0A = bytes/char-2 ; cursor start
+ R0B = 0 ; cursor end
+ R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
+ R14 = bytes/char ; underline loc
+ (*** BUG: should be 1 less ***)
+ the current block specifiers may be determined with INT 10/AH=1Bh,
+ looking at offsets 2Bh and 2Ch of the returned data (VGA only)
+ (see AH=1Bh,#00040)
+SeeAlso: AX=1100h,AX=1111h,AX=1112h,AX=1114h,AH=1Bh,AX=CD10h,MEM 0040h:0084h
+Index: text mode;font|text mode;screen rows
+--------V-101110-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - SET USER GRAPHICS CHARACTERS
+ AX = 1110h
+ ES:BP -> user table
+ CX = bytes per character
+ BL = row specifier
+ 00h user set
+ DL = number of rows
+ 01h 14 rows
+ 02h 25 rows
+ 03h 43 rows
+Return: nothing
+Note: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+SeeAlso: AX=110Fh"Realtek",AX=1112h"Realtek",AX=1121h
+--------V-101111-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM MONOCHROME PATTERNS (PS,EGA,VGA)
+ AX = 1111h
+ BL = block to load
+Return: nothing
+Notes: (see AX=1110h)
+ the "monochrome" patters are 8x14 pixels in size
+SeeAlso: AX=1101h,AX=1110h,AX=1112h,AX=1114h,AH=1Bh,AX=CD10h
+--------V-101111-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - SET ROM 8x14 GRAPHICS CHARACTERS
+ AX = 1111h
+ BL = row specifier (see AX=1121h)
+Return: nothing
+Note: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+SeeAlso: AX=110Fh"Realtek",AX=1110h"Realtek",AX=1122h
+--------V-101112-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x8 DBL-DOT PATTERNS (PS,EGA,VGA)
+ AX = 1112h
+ BL = block to load
+Return: nothing
+Notes: (see AX=1110h)
+SeeAlso: AX=1103h,AX=1110h,AX=1111h,AX=1114h,AH=1Bh,AX=CD10h
+--------V-101112-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - SET ROM 8x8 DOUBLE-DOT CHARACTERS
+ AX = 1112h
+ BL = row specifier (see AX=1121h)
+Return: nothing
+Note: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+SeeAlso: AX=110Fh"Realtek",AX=1110h"Realtek",AX=1111h"Realtek",AX=1123h
+--------V-101114-----------------------------
+INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x16 CHARACTER SET (VGA)
+ AX = 1114h
+ BL = block to load
+Return: nothing
+Notes: (see AX=1110h)
+SeeAlso: AX=1104h,AX=1110h,AX=1111h,AX=1112h,AH=1Bh,AX=CD10h
+--------V-101118-----------------------------
+INT 10 - IBM SurePath BIOS - Officially "Private" Function
+ AX = 1118h
+--------V-101120-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - SET USER 8x8 GRAPHICS CHARS (PS,EGA,VGA)
+ AX = 1120h
+ ES:BP -> user table for INT 1F
+Return: nothing
+Note: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+SeeAlso: AX=1121h,AX=1122h,AX=1123h,AX=1124h,AX=1129h,INT 1F"SYSTEM DATA"
+SeeAlso: INT 43"VIDEO DATA"
+--------V-101121-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - SET USER GRAPHICS CHARACTERS (PS,EGA,VGA)
+ AX = 1121h
+ ES:BP -> user table
+ CX = bytes per character
+ BL = row specifier
+ 00h user set
+ DL = number of rows
+ 01h 14 rows
+ 02h 25 rows
+ 03h 43 rows
+Return: AL = new number of rows (Diamond Stealth64 Video)
+Note: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+SeeAlso: AX=1120h,AX=1122h,AX=1123h,AX=1124h,AX=1129h"Compaq"
+SeeAlso: AX=1129h"Diamond",INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"
+--------V-101122-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - SET ROM 8x14 GRAPHICS CHARS (PS,EGA,VGA)
+ AX = 1122h
+ BL = row specifier (see AX=1121h)
+Return: nothing
+Notes: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+ UltraVision v2+ sets INT 43 to the appropriate font on this call
+SeeAlso: AX=1111h,AX=1120h,AX=1121h,AX=1123h,AX=1124h,AX=1129h
+SeeAlso: INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"
+--------V-101123-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - SET ROM 8x8 DOUBLE-DOT CHARS (PS,EGA,VGA)
+ AX = 1123h
+ BL = row specifier (see AX=1121h)
+Return: nothing
+Notes: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+ UltraVision v2+ sets INT 43 to the appropriate font on this call
+SeeAlso: AX=1112h,AX=1120h,AX=1121h,AX=1122h,AX=1124h,AX=1129h
+SeeAlso: INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"
+--------V-101124-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - LOAD 8x16 GRAPHICS CHARS (VGA,MCGA)
+ AX = 1124h
+ BL = row specifier (see AX=1121h)
+Return: nothing
+Notes: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+ UltraVision v2+ sets INT 43 to the appropriate font on this call
+SeeAlso: AX=1120h,AX=1121h,AX=1122h,AX=1123h,AX=1129h
+SeeAlso: INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"
+--------V-101129-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - LOAD 8x16 GRAPH CHARS (Compaq Systempro)
+ AX = 1129h
+ BL = row specifier (see AX=1121h)
+Return: nothing
+Notes: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+ UltraVision v2+ sets INT 43 to the appropriate font on this call
+SeeAlso: AX=1120h,AX=1121h,AX=1122h,AX=1123h,AX=1124h,INT 1F"SYSTEM DATA"
+SeeAlso: INT 43"VIDEO DATA"
+--------V-101129-----------------------------
+INT 10 - VIDEO - GRAPH-MODE CHARGEN - SET USER GRAPHICS CHARACTERS (Diamond)
+ AX = 1129h
+ DI:BP -> user table
+ CX = bytes per character
+ BL = row specifier
+ 00h user set
+ DL = number of rows
+ 01h 14 rows
+ 02h 25 rows
+ 03h 43 rows
+Return: AL = new number of rows
+Notes: this function is meant to be called immediately after a mode set;
+ results are unpredictable at other times
+ supported by Diamond Stealth64 Video
+SeeAlso: AX=1120h,AX=1122h,AX=1123h,AX=1124h,INT 1F"SYSTEM",INT 43"VIDEO"
+--------V-101130-----------------------------
+INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
+ AX = 1130h
+ BH = pointer specifier
+ 00h INT 1Fh pointer
+ 01h INT 43h pointer
+ 02h ROM 8x14 character font pointer
+ 03h ROM 8x8 double dot font pointer
+ 04h ROM 8x8 double dot font (high 128 characters)
+ 05h ROM alpha alternate (9 by 14) pointer (EGA,VGA)
+ 06h ROM 8x16 font (MCGA, VGA)
+ 07h ROM alternate 9x16 font (VGA only) (see #00021)
+ 11h (UltraVision v2+) 8x20 font (VGA) or 8x19 font (autosync EGA)
+ 12h (UltraVision v2+) 8x10 font (VGA) or 8x11 font (autosync EGA)
+Return: ES:BP = specified pointer
+ CX = bytes/character of on-screen font (not the requested font!)
+ DL = highest character row on screen
+Note: for UltraVision v2+, the 9xN alternate fonts follow the corresponding
+ 8xN font at ES:BP+256N
+BUG: the IBM EGA and some other EGA cards return in DL the number of rows on
+ screen rather than the highest row number (which is one less).
+SeeAlso: AX=1100h,AX=1103h,AX=1120h,INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"
+
+Format of alternate font table [array]:
+Offset Size Description (Table 00021)
+ 00h BYTE character to be replaced (00h = end of table)
+ 01h N BYTEs graphics data for character, one byte per scan line
+--------V-101130BX4D4F-----------------------
+INT 10 - M10_SCR.COM v3.5+ - INSTALLATION CHECK
+ AX = 1130h
+ BX = 4D4Fh
+Return: CX = 4F4Dh if installed
+ ES:BP -> M10_SCR INT 10 handler
+Program: M10_SCR is a shareware extended text mode and font driver by
+ I.V. Morozov
+SeeAlso: INT 16/AX=4D4Fh
+--------V-1012-------------------------------
+INT 10 - BIOS Window Extension v1.1 - GET BLANKING ATTRIBUTE
+ AH = 12h
+Return: BH = attribute to use on blanked lines when scrolling
+Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
+SeeAlso: AH=11h"Window",AH=12h"Window"
+--------V-1012-------------------------------
+INT 10 - Tandy 2000 - VIDEO - SCROLL WINDOW
+ AH = 12h
+ AL = number of rows or columns to scroll
+ BH = buffer flag
+ 00h data in user buffer
+ ES:SI -> buffer containing character/attribute pairs
+ 01h no buffer, fill emptied rows/columns with blanks
+ BL = direction in which to scroll
+ 00h up
+ 01h down
+ 02h left
+ 03h right
+ CH,CL = row,column of upper left corner of scroll area
+ DH,DL = row,column of lower right corner
+Return: nothing
+Notes: this interrupt is identical to INT 52 on Tandy 2000
+ the user buffer, if supplied, must be organized by row; regardless of
+ the scroll direction, all character/attribute pairs for the first
+ row are first, then the pairs for the second row, etc.
+SeeAlso: AH=00h,AH=0Bh/BH=02h,AH=11h"Tandy 2000",AH=12h"Tandy 2000"
+SeeAlso: INT 52"Tandy"
+--------V-1012--BL10-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) - GET EGA INFO
+ AH = 12h
+ BL = 10h
+Return: BH = video state
+ 00h color mode in effect (I/O port 3Dxh)
+ 01h mono mode in effect (I/O port 3Bxh)
+ BL = installed memory (00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K)
+ CH = feature connector bits (see #00022)
+ CL = switch settings (see #00023,#00024)
+ AH destroyed (at least by Tseng ET4000 BIOS v8.00n)
+Note: one possible check for the presence of an EGA or later display card
+ is to call this function with BH=FFh; if not present, BH will be
+ unchanged on return
+ another installation check is used by Athena Digital's HGCIBM, which
+ sets CX to FFFFh on calling and checks whether it has been changed
+ on return
+Index: installation check;EGA
+
+Bitfields for feature connector bits:
+Bit(s) Description (Table 00022)
+ 0 FEAT 1 line, state 2
+ 1 FEAT 0 line, state 2
+ 2 FEAT 1 line, state 1
+ 3 FEAT 0 line, state 1
+ 4-7 unused (0)
+
+Bitfields for switch settings:
+Bit(s) Description (Table 00023)
+ 0 switch 1 OFF
+ 1 switch 2 OFF
+ 2 switch 3 OFF
+ 3 switch 4 OFF
+ 4-7 unused
+
+(Table 00024)
+Values for switch settings on original EGA/VGA:
+ 00h primary MDA/HGC, secondary EGA+ 40x25
+ 01h-03h primary MDA/HGC, secondary EGA+ 80x25
+ 04h primary CGA 40x25, secondary EGA+ 80x25 mono
+ 05h primary CGA 80x25, secondary EGA+ 80x25 mono
+ 06h primary EGA+ 40x25, secondary MDA/HGC (optional)
+ 07h-09h primary EGA+ 80x25, secondary MDA/HGC (optional)
+ 0Ah primary EGA+ 80x25 mono,secondary CGA 40x25 (optional)
+ 0Bh primary EGA+ 80x25 mono,secondary CGA 80x25 (optional)
+--------V-1012--BL11-------------------------
+INT 10 - VIDEO - Trident TVGA 8800/8900/9000 BIOS - GET BIOS INFO
+ AH = 12h
+ BL = 11h
+Return: AL = 12h if function supported
+ BL = ??? (10h)
+ ES:BP -> BIOS info structure (see #00025)
+SeeAlso: AH=12h/BL=12h"TRIDENT"
+
+Format of Trident BIOS Info structure:
+Offset Size Description (Table 00025)
+ 00h BYTE ??? (0000h)
+ 01h BYTE OEM Code (00h for original Trident)
+ 02h WORD ID??? (1073h for 8800BR, 1074 for 8800CS)
+ 04h 8 BYTEs BIOS date ('mm/dd/yy')
+ 0Ch WORD ???
+ 0Eh 8 BYTEs BIOS Version (' C3-128 ', ' C3-129 ')
+--------V-1012--BL12-------------------------
+INT 10 - VIDEO - Trident TVGA 8800/8900/9000 BIOS - GET VIDEO RAM SIZE
+ AH = 12h
+ BL = 12h
+Return: AL = 12h if function supported
+ AH = number of 256K banks of RAM installed
+ (read from CRTC register 1Fh)
+SeeAlso: AH=12h/BL=11h"TRIDENT"
+--------V-1012--BL20-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC
+ AH = 12h
+ BL = 20h select alternate print screen routine
+Return: nothing
+Desc: installs a PrtSc routine from the video card's BIOS to replace the
+ default PrtSc handler from the ROM BIOS, which usually does not
+ understand screen heights other than 25 lines
+Note: some adapters disable print-screen instead of enhancing it
+SeeAlso: INT 05"PRINT SCREEN"
+--------V-1012--BL2E-------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 12h
+ BL = 2Eh
+Return: nothing
+Note: due to an omitted end-of-list marker, these versions of the BIOS will
+ crash the system on this function
+--------V-1012--BL30-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION
+ AH = 12h
+ BL = 30h
+ AL = vertical resolution
+ 00h 200 scan lines
+ 01h 350 scan lines
+ 02h 400 scan lines
+Return: AL = 12h if function supported
+Desc: specify the number of scan lines used to display text modes
+Note: the specified resolution will take effect on the next mode set
+SeeAlso: AH=00h
+--------V-1012--BL31-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - PALETTE LOADING
+ AH = 12h
+ BL = 31h
+ AL = new state
+ 00h enable default palette loading
+ 01h disable default palette loading
+Return: AL = 12h if function supported
+Desc: specify whether a default palette should be loaded when the display
+ mode is set
+SeeAlso: AH=00h
+--------V-1012--BL32-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - VIDEO ADDRESSING
+ AH = 12h
+ BL = 32h
+ AL = new state
+ 00h enable video addressing
+ 01h disable video addressing
+Return: AL = 12h if function supported
+Desc: specify whether the CPU should have access to video memory and the
+ display adapters I/O registers
+--------V-1012--BL33-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - GRAY-SCALE SUMMING
+ AH = 12h
+ BL = 33h
+ AL = new state
+ 00h enable gray scale summing
+ 01h disable gray scale summing
+Return: AL = 12h if function supported
+Desc: specify whether or not colors should be converted to gray scale when
+ palette or color registers are loaded
+SeeAlso: AX=101Bh,AX=BF06h,AX=BF08h
+--------V-1012--BL34-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION
+ AH = 12h
+ BL = 34h
+ AL = new state
+ 00h enable alphanumeric cursor emulation
+ 01h disable alphanumeric cursor emulation
+Return: AL = 12h if function supported
+Desc: specify whether the BIOS should automatically remap cursor start/end
+ according to the current character height in text modes
+SeeAlso: AH=01h,AH=03h
+--------V-1012--BL35-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS) - DISPLAY-SWITCH INTERFACE
+ AH = 12h
+ BL = 35h
+ AL = subfunction
+ 00h initial adapter video off
+ 01h initial planar video on
+ 02h switch active video off
+ 03h switch inactive video on
+ 80h *UNDOCUMENTED* set system board video active flag
+ ES:DX -> buffer for 128 byte save area (if AL = 00h-03h)
+Return: AL = 12h if function supported
+Desc: switch between two video adapters which may otherwise have address
+ conflicts
+SeeAlso: AX=BF00h,AX=BF01h,INT 6D"VGA"
+--------V-1012--BL36-------------------------
+INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, VGA) - VIDEO REFRESH CONTROL
+ AH = 12h
+ BL = 36h
+ AL = new state
+ 00h enable refresh
+ 01h disable refresh
+Return: AL = 12h if function supported
+Desc: specify whether the contents of video memory should be displayed on
+ the screen; disabling refresh effectively blanks the screen
+Note: when display refresh is disabled, the entire screen displays the color
+ specified by the DAC color register 00h; thus to actually blank the
+ screen, the application must first ensure that that register has been
+ set to black
+BUG: GEM/VIEWMAX ET3000 and ET4000 drivers dated 1988/6/23 do not correctly
+ reenable refresh after the screen has been blanked due to inactivity,
+ resulting in a total loss of video synchronization
+SeeAlso: AX=BF05h
+--------V-1012--BL37-------------------------
+INT 10 - VIDEO - XGA - MAINFRAME INTERACTIVE SUPPORT
+ AH = 12h
+ BL = 37h
+ AL = text attribute type (00h normal VGA, 01h mainframe type)
+Return: AL = 12h if supported
+SeeAlso: #00026,AH=08h,#00042
+
+Bitfields for XGA mainframe type character attributes:
+Bit(s) Description (Table 00026)
+ 7 blink double rate (75% ON time) or use color 8 as background
+ (see AX=1003h)
+ 6 reverse video
+ 5 underlined
+ 4 left-most and right-most dots of underline area inverted
+ 3 foreground intensity/character font select
+ 2-0 foreground color
+SeeAlso: #00014,#00036
+--------V-1012--BL38-------------------------
+INT 10 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 12h
+ BL = 38h
+SeeAlso: AX=1118h,AH=12h/BL=39h
+--------V-1012--BL39-------------------------
+INT 10 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 12h
+ BL = 39h
+SeeAlso: AX=1118h,AH=12h/BL=38h,AH=12h/BL=3Ah
+--------V-1012--BL3A-------------------------
+INT 10 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 12h
+ BL = 3Ah
+SeeAlso: AX=1118h,AH=12h/BL=39h
+--------V-1012--BL53-------------------------
+INT 10 - Tseng ET-4000 BIOS v8.00 (1991/06/07) - BUG
+ AH = 12h
+ BL = 53h
+Note: due to an omitted end-of-list marker, this version of the BIOS will
+ crash the system on this function
+--------V-1012--BL57-------------------------
+INT 10 - Tseng ET-4000 BIOS v8.00 (1991/06/07) - BUG
+ AH = 12h
+ BL = 57h
+Note: due to an omitted end-of-list marker, this version of the BIOS will
+ crash the system on this function
+--------V-1012--BH55-------------------------
+INT 10 - VIDEO - ALTERNATE FUNC SELECT (ATI,Tatung,Taxan) - ENHANCED FEATURES
+ AH = 12h
+ BH = 55h
+ BL = subfunction
+ 00h disable enhanced features
+ 01h enable enhanced features
+ 02h get status
+ Return: AL = status flags (see #00027)
+ 03h disable register trapping (CGA emulation)
+ 04h enable register trapping
+ 05h program video mode
+ ES:BP -> video mode table (see #00028)
+ 06h get mode table
+ AL = video mode
+ Return: ES:BP -> table suitable for mode AL
+ (and subfunc BL=05h) (see #00028)
+ BP = FFFFh on error
+ SI = 0000h (ATI Mach32)
+Note: the ATI Mouse driver (MOUSE.COM/MOUSE.SYS) uses subfunction 06h to get
+ the mode table for mode 03h, and then looks for a signature string
+ beginning within 32 bytes of the offset specified by the word at
+ ES:000Ch
+SeeAlso: AH=FFh"Oak"
+Index: installation check;ATI video adapters
+
+Bitfields for status flags:
+Bit(s) Description (Table 00027)
+ 3 set if enhanced features enabled
+ 7-5 monitor type
+ 000 PS/2 mono
+ 001 PS/2 color
+ 010 multi-sync
+ 011 Taxan 650 25kHz
+ 100 RGB
+ 101 mono
+ 110 EGA
+ 111 Compaq internal
+
+Format of ATI VGA Wonder video mode table:
+Offset Size Description (Table 00028)
+ 00h BYTE number of columns
+ 01h BYTE maximum row (number of rows - 1)
+ 02h BYTE scan lines per row
+ 03h WORD video buffer size in bytes
+ 05h 4 BYTEs values for Sequencer registers 1-4
+ 09h BYTE value for Miscellaneous Output register
+ 0Ah 25 BYTEs values for CRTC registers 00h-18h
+ 00h horizontal total size (chars)
+ 01h horizontal displayed (chars)
+ 02h horizontal sync position (chars)
+ 03h horizontal sync width (chars)
+ 04h vertical total size (char rows)
+ 05h vertical total adjust (scan lines)
+ 06h vertical displayed (char rows)
+ 07h vertical sync position (char rows)
+ 08h interlace mode
+ 09h max scan line in row
+ 0Ah cursor start scan line
+ 0Bh cursor end scan line
+ 0Ch screen memory start (high)
+ 0Dh screen memory start (low)
+ 0Eh cursor address (high)
+ 0Fh cursor address (low)
+ 10h light pen (high)
+ 11h light pen (low)
+ 23h 20 BYTEs default palette (values for Attribute Controller regs 00h-13h)
+ 37h 9 BYTEs values for Graphics Controller registers 00h-08h
+--------V-1012--BL74-------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 12h
+ BL = 74h
+Note: due to an omitted end-of-list marker, these versions of the BIOS will
+ crash the system on this function
+--------V-1012--BL80-------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 12h
+ BL = 80h
+Note: due to an omitted end-of-list marker, these versions of the BIOS will
+ crash the system on this function
+--------V-1012--BL80-------------------------
+INT 10 - Cirrus Logic BIOS - INQUIRE VGA TYPE
+ AH = 12h
+ BL = 80h
+Return: AX = controller type in bits 13-0 (see #00029)
+ bit 14: ???
+ bit 15: ???
+ BL = silicon revision number (bit 7 set if not available)
+ BH = ???
+ bit 2 set if using CL-GD 6340 LCD interface
+SeeAlso: AH=12h/BL=81h,AH=12h/BL=82h,AH=12h/BL=85h,AH=12h/BL=9Ah,AH=12h/BL=A1h
+
+(Table 00029)
+Values for Cirrus Logic video controller type:
+ 0000h no extended alternate select support
+ 0001h reserved
+ 0002h CL-GD510/520
+ 0003h CL-GD610/620
+ 0004h CL-GD5320
+ 0005h CL-GD6410
+ 0006h CL-GD5410
+ 0007h CL-GD6420
+ 0008h CL-GD6412
+ 0010h CL-GD5401
+ 0011h CL-GD5402
+ 0012h CL-GD5420
+ 0013h CL-GD5422
+ 0014h CL-GD5424
+ 0015h CL-GD5426
+ 0016h CL-GD5420r1
+ 0017h CL-GD5402r1
+ 0018h CL-GD5428
+ 0019h CL-GD5429
+ 0020h CL-GD6205/15/25
+ 0021h CL-GD6215
+ 0022h CL-GD6225
+ 0023h CL-GD6235
+ 0024h CL-GD6245
+ 0030h CL-GD5432
+ 0031h CL-GD5434
+ 0032h CL-GD5430
+ 0033h CL-GD5434 rev. E and F
+ 0035h CL-GD5440
+ 0036h CL-GD5436
+ 0039h CL-GD5446
+ 0040h CL-GD6440
+ 0041h CL-GD7542 (Nordic)
+ 0042h CL-GD7543 (Viking)
+ 0043h CL-GD7541 (Nordic Lite)
+ 0050h CL-GD5452 (Northstar)
+ 0052h CL-GD5452 (Northstar) ???
+SeeAlso: #00732,#00743
+--------V-1012--BL81-------------------------
+INT 10 - Cirrus Logic BIOS - GET BIOS VERSION NUMBER
+ AH = 12h
+ BL = 81h
+Return: AH = BIOS major version
+ AL = BIOS minor version
+SeeAlso: AH=12h/BL=80h,AH=12h/BL=82h
+--------V-1012--BL82-------------------------
+INT 10 - Cirrus Logic BIOS - GET DESIGN REVISION CODE
+ AH = 12h
+ BL = 82h
+Return: AL = chip revision
+ AH = ??? (AFh for v1.01)
+SeeAlso: AH=12h/BL=80h,AH=12h/BL=81h,#00732 at INT 1A/AX=B102h
+--------V-1012--BL84-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - INQUIRE OPTIONS
+ AH = 12h
+ BL = 84h
+Return: AX = user options word (see #00030)
+SeeAlso: AH=12h/BL=89h,AH=12h/BL=8Ah,AH=12h/BL=8Bh,AH=12h/BL=8Ch,AH=12h/BL=8Fh
+SeeAlso: AH=12h/BL=90h,AH=12h/BL=9Ah
+
+Bitfields for Cirrus Logic user options word:
+Bit(s) Description (Table 00030)
+ 1,0 centering
+ 00 vertical centered, 01 from bottom, 10 from top, 11 reserved
+ 3,2 720-dot fix-up options
+ 00 OR every 8th and 9th pixel
+ 01 display MGA mode from left
+ 10 display MGA mode from right
+ 11 skip every 9th pixel
+ 4 ???
+ 7-5 video mode (001 CGA, 010 MGA, 011 EGA, 100 VGA)
+ 8 external monitor enabled instead of LCD panel
+ 9 vertical expand mode enabled
+ 10 8-bit mode instead of 16-bit mode
+ 11 normal video rather than reverse video (for LCD)
+ 12 attribute automap rather than attribute emulation
+ 13 bold mode disabled (default)
+ 14 fast bandwidth
+ 15 ???
+--------V-1012--BL85-------------------------
+INT 10 - Cirrus Logic BIOS - GET INSTALLED MEMORY
+ AH = 12h
+ BL = 85h
+Return: AL = number of 64K banks of video memory
+SeeAlso: AH=12h/BL=80h,AH=12h/BL=93h
+--------V-1012--BL89-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - EN/DISABLE REVERSE VIDEO MODE
+ AH = 12h
+ BL = 89h
+ AL = new state (00h enabled, 01h disabled)
+Return: nothing
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=8Ah,AH=12h/BL=8Bh
+--------V-1012--BL8A-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - SET FRAME COLOR
+ AH = 12h
+ BL = 8Ah
+ AL = new gray-scale color (00h = black to 0Fh = white)
+Return: nothing
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=89h,AH=12h/BL=8Fh
+--------V-1012--BL8B-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - ENABLE/DISABLE BOLD MODE
+ AH = 12h
+ BL = 8Bh
+ AL = new state (00h enabled, 01h disabled)
+Return: nothing
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=89h,AH=12h/BL=8Ch,AH=12h/BL=8Fh
+--------V-1012--BL8C-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - SET AUTOMAP/EMULATE ATTRIBUTES
+ AH = 12h
+ BL = 8Ch
+ AL = new state
+ 00h enable automap
+ 01h disable automap and emulate attributes
+Return: nothing
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=8Bh
+--------V-1012--BL8F-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - ENABLE/DISABLE EXPAND MODE
+ AH = 12h
+ BL = 8Fh
+ AL = new state (00h enabled, 01h disabled)
+Return: nothing
+Note: when expand mode is enabled, the vertical dimension is enlarged to
+ full screen
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=89h,AH=12h/BL=8Bh,AH=12h/BL=90h
+--------V-1012--BL90-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - SET CENTERING MODE
+ AH = 12h
+ BL = 90h
+ AL = new position
+ 00h centered
+ 01h from top
+ 02h from bottom
+ 03h from top
+Return: nothing
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=8Fh
+--------V-1012--BL91-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - SET 720-DOT FIXUP MODE
+ AH = 12h
+ BL = 91h
+ AL = new mode
+ 00h display MGA mode from left of screen (default)
+ 01h display MGA from right
+ 02h skip every ninth pixel
+ 03h OR every 8th and 9th pixel
+Return: nothing
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=8Ah,AH=12h/BL=90h
+--------V-1012--BL92-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - LCD panel - SWITCH DISPLAY
+ AH = 12h
+ BL = 92h
+ AL = new display (00h LCD, 01h external monitor)
+Return: nothing
+Note: the deselected display is disabled
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=89h,AH=12h/BL=90h,AH=12h/BL=94h
+--------V-1012--BL93-------------------------
+INT 10 - Cirrus Logic BIOS - FORCE 8-BIT OR 16-BIT OPERATION
+ AH = 12h
+ BL = 93h
+ AL = new I/O width (00h = 16 bits, 01h = 8 bits)
+Return: nothing
+SeeAlso: AH=12h/BL=9Ah
+--------V-1012--BL94-------------------------
+INT 10 - Cirrus Logic BIOS v3.02 - POWER CONSERVATION
+ AH = 12h
+ BL = 94h
+ AL = new state (00h wake up monitor, 01h shut down display)
+Return: nothing
+Note: AL=01h is reported not to work properly on the LCD panel
+SeeAlso: AH=12h/BL=84h,AH=12h/BL=92h
+--------V-1012--BL9A-------------------------
+INT 10 - Cirrus Logic BIOS - GET USER OPTIONS
+ AH = 12h
+ BL = 9Ah
+Return: AX = options word 1 (see #00031)
+ CX = options word 2 (see #00032)
+ BX,DX reserved
+SeeAlso: AH=12h/BL=80h,AH=12h/BL=84h,AH=12h/BL=93h,AH=12h/BL=A0h
+SeeAlso: AH=12h/BL=A3h,AH=12h/BL=A4h,#00732 at INT 1A/AX=B102h
+
+Bitfields for Cirrus Logic options word 1:
+Bit(s) Description (Table 00031)
+ 0,1 reserved
+ 2-4 monitor type
+ 5-6 maximum vertical resolution
+ 7-9 reserved
+ 10 force 8-bit operation
+ 11-13 reserved
+ 14 vertical refresh frequency at 640x480
+ =0 60 Hz
+ =1 high refresh
+ 15 reserved
+SeeAlso: AH=12h/BL=AEh
+
+Bitfields for Cirrus Logic options word 2:
+Bit(s) Description (Table 00032)
+ 15-13 vertical refresh frequency at 1024x768
+ 12-11 vertical refresh frequency at 800x600
+ 10-6 reserved
+ 5-4 vertical refresh frequency at 1280x1024
+ 3-0 reserved
+SeeAlso: #00033
+
+Bitfields for Cirrus Logic Options word 2 (alternate???):
+Bit(s) Description (Table 00033)
+ 15-12 vertical refresh frequency at 1024x768
+ 0000 43i Hz
+ 0001 60 Hz
+ 0010 70 Hz
+ 0011 72 Hz
+ 0100 76 Hz
+ other reserved
+ 11-8 vertical refresh frequency at 800x600
+ 0000 56 Hz
+ 0001 60 Hz
+ 0010 72 Hz
+ 0011 75 Hz
+ other reserved
+ 7-4 maximum vertical resolution
+ 0000 480 scanlines
+ 0001 600 scanlines
+ 0010 768 scanlines
+ 0011 1024 scanlines
+ other reserved
+ 3-1 vertical refresh frequency at 1280x1024
+ 000 43i Hz
+ 001 60 Hz
+ 010 71.2 Hz (CL-GD5434 rev. E and F)
+ 011 74 Hz (CL-GD5434 rev. E and F)
+ other reserved
+ 0 reserved
+SeeAlso: #00032
+--------V-1012--BLA0-------------------------
+INT 10 - Cirrus Logic BIOS - GET VIDEO MODE AVAILABILITY
+ AH = 12h
+ BL = A0h
+ AL = video mode number (00h-7Fh)
+Return: AH bit 0: video mode supported
+ BX = offset of BIOS subroutine to fixup standard video parameters
+ (call subroutine with DS:SI and ES:DI as returned by this call)
+ DS:SI -> standard video parameters or FFFFh:FFFFh
+ ES:DI -> supplemental video parameters or FFFFh:FFFFh
+SeeAlso: AH=00h,AH=12h/BL=9Ah,AH=12h/BL=A1h
+--------V-1012--BLA1-------------------------
+INT 10 - Cirrus Logic BIOS - READ MONITOR TYPE AND ID FROM 15-PIN CONNECTOR
+ AH = 12h
+ BL = A1h
+Return: BH = monitor ID (see #00034)
+ BL = monitor type (00h color, 01h grayscale, 02h no display)
+SeeAlso: AH=12h/BL=9Ah,AH=12h/BL=A2h
+
+(Table 00034)
+Values for Cirrus Logic monitor ID:
+ 00h-08h reserved
+ 09h IBM 8604/8507 or equivalent
+ 0Ah IBM 8514 or equivalent
+ 0Bh IBM 8515 or equivalent
+ 0Dh IBM 8503 or equivalent
+ 0Eh IBM 8512/8513 or equivalent
+ 0Fh no monitor
+--------V-1012--BLA2-------------------------
+INT 10 - Cirrus Logic BIOS - SET MONITOR HORIZONTAL RETRACE FREQUENCY
+ AH = 12h
+ BL = A2h
+ AL = retrace rate
+ 00h standard VGA (31.5 kHz)
+ 01h 8514-compatible (31.5 kHz and 35.5 kHz interlaced)
+ 02h SuperVGA (31.5-35.1 kHz)
+ 03h extended SuperVGA (31.5-35.5 kHz)
+ 04h multi-frequency (31.5-37.8 kHz)
+ 05h extended multi-frequency (31.5-48.0 kHz)
+ 06h super multi-frequency (31.5-56.0 kHz)
+ 07h extended super multi-frequency (31.5-64.0 kHz)
+Return: nothing
+SeeAlso: AH=12h/BL=9Ah,AH=12h/BL=A0h,AH=12h/BL=A4h
+--------V-1012--BLA3-------------------------
+INT 10 - Cirrus Logic BIOS - SET VGA REFRESH
+ AH = 12h
+ BL = A3h
+ AL = refresh rate for 640x480 (00h normal, 01h high)
+Return: nothing
+SeeAlso: AH=12h/BL=9Ah,AH=12h/BL=A4h
+--------V-1012--BLA4-------------------------
+INT 10 - Cirrus Logic BIOS - SET MONITOR TYPE
+ AH = 12h
+ BL = A4h
+ AL = options 1
+ bits 7-4 = vertical refresh at 640x480
+ (0 = 60Hz, 1 = 72Hz, other reserved)
+ bits 3-0 = maximum vertical resolution
+ (0 = 480 scanlines, 1 = 600, 2 = 768, 3 = 1024, other reserved)
+ BH = options 2
+ bits 7-4 = vertical refresh at 1024x768
+ (0=87Hz-int, 1=60Hz, 2=70Hz, 3=72Hz, 4=76Hz, other reserved)
+ bits 3-0 = vertical refresh at 800x600
+ (0 = 56Hz, 1 = 60Hz, 2 = 72Hz, other reserved)
+ CH = options 3
+ bits 7-4 = vertical refresh at 1280x1024
+ (0=87Hz-int, 1=60Hz, 2=70Hz, other reserved)
+ bits 3-0: reserved
+ CL,DX reserved
+Return: nothing
+SeeAlso: AH=12h/BL=9Ah,AH=12h/BL=A3h
+--------V-1012--BLAE-------------------------
+INT 10 - Cirrus Logic BIOS - GET HIGH REFRESH
+ AH = 12h
+ BL = AEh
+Return: AL = result
+ bits 7-1: reserved
+ bit 0: 640x480 high refresh rate
+ =0 72 Hz
+ =1 75 Hz
+SeeAlso: AH=12h/BL=9Ah,AH=12h/BL=A3h,AH=12h/BL=A4h,AH=12h/BL=AFh
+--------V-1012--BLAF-------------------------
+INT 10 - Cirrus Logic BIOS - SET HIGH REFRESH
+ AH = 12h
+ BL = AFh
+ AL = option
+ bits 7-1: reserved
+ bit 0: 640x480 high refresh rate
+ =0 72 Hz
+ =1 75 Hz
+Return: nothing
+SeeAlso: AH=12h/BL=9Ah,AH=12h/BL=A3h,AH=12h/BL=A4h,AH=12h/BL=AEh
+--------V-1012--BLBE-------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 12h
+ BL = BEh
+Note: due to an omitted end-of-list marker, these versions of the BIOS will
+ crash the system on this function
+--------V-1012--BLC6-------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 12h
+ BL = C6h
+Note: due to an omitted end-of-list marker, these versions of the BIOS will
+ crash the system on this function
+--------V-1012--BLF0-------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 12h
+ BL = F0h
+Note: due to an omitted end-of-list marker, these versions of the BIOS will
+ crash the system on this function
+--------V-1012--BLF1--------------------------
+INT 10 - Tseng ET-4000 BIOS - GET/SET SCREEN REFRESH RATE
+ AH = 12h
+ BL = F1h
+ AL = subfunction
+ 00h set refresh rate
+ 01h get refresh rate
+ BH = video mode
+ 00h 640x480
+ 01h 800x600
+ 02h 1024x768
+ 03h 1280x1024
+ CX = new refresh rate (see #00035) if AL = 00h
+Return: AL = 12h if supported
+ CX = current rate (for AL=00h, a changed CX indicates failure)
+
+(Table 00035)
+Values for Tseng ET4000 refresh rate:
+ CX 640x480 800x600 1024x768/1280x1024
+ 00h 60 Hz 56 Hz interlaced
+ 01h 72 Hz 60 Hz 60 Hz
+ 02h 75 Hz 72 Hz 70 Hz
+ 03h 90 Hz 75 Hz 75 Hz
+ 04h -- 90 Hz --
+--------V-1013-------------------------------
+INT 10 - VIDEO - WRITE STRING (AT and later,EGA)
+ AH = 13h
+ AL = write mode
+ bit 0: update cursor after writing
+ bit 1: string contains alternating characters and attributes
+ bits 2-7: reserved (0)
+ BH = page number
+ BL = attribute if string contains only characters
+ CX = number of characters in string
+ DH,DL = row,column at which to start writing
+ ES:BP -> string to write
+Return: nothing
+Notes: recognizes CR, LF, BS, and bell; for the ET4000 BIOS, scrolling,
+ backspace, and CR only take place in the active page
+ also available PC or XT with EGA or higher
+ HP 95LX only supports write mode 00h
+ IBM documents AL=10h,11h,20h,21h as "private" rather than "reserved"
+ with PhysTechSoft's PTS ROM-DOS the AL,BH,BL,DH, and DL values are
+ ignored on entry.
+BUG: on the IBM VGA Adapter, any scrolling which may occur is performed on
+ the active page rather than the requested page
+SeeAlso: AH=09h,AH=0Ah,AH=13h"DOS/V"
+--------J-1013-------------------------------
+INT 10 - DOS/V - READ/WRITE DOUBLE-BYTE CHARACTER SET CHARACTERS/ATTRIBUTES
+ AH = 13h
+ AL = function
+ 10h read characters and standard attributes
+ 11h read characters and extended attributes
+ 12h write characters and standard attributes
+ 13h write characters and extended attributes
+ BH = 00h
+ CX = number of characters to transfer
+ DH,DL = row,column at which to start transfer
+ ES:BP -> buffer for/containing characters and attributes (see #00036)
+Return: ES:BP buffer filled if reading
+Program: DOS/V is a Japanese-language version of MS-DOS which can run on
+ standard (non-Japanese) ATs and compatible equipped with a VGA or
+ newer video adapter
+Notes: subfunctions 11h and 13h are only valid when DOS/V is using video
+ mode 73h
+ the cursor position is not changed by these functions
+ extended attributes consist of three bytes; the first is the standard
+ character attribute byte, the second is as described below, and the
+ third is always zero in current versions
+SeeAlso: AH=00h,AH=13h"VIDEO"
+
+Bitfields for DOS/V second extended attribute byte:
+Bit(s) Description (Table 00036)
+ 7 underline using foreground color
+ 6 reverse foreground/background specified in standard attribute byte
+ 5-4 unused
+ 3 vertical white grid line in cell
+ 2 horizontal white grid line in cell
+ 1-0 unused
+SeeAlso: #00014,#00026
+--------V-101400-----------------------------
+INT 10 - VIDEO - LOAD USER-SPECIFIED LCD CHARACTER FONT (CONV,Compaq Port 386)
+ AX = 1400h
+ ES:DI -> character font
+ BH = number of bytes per character
+ 08h or 10h (Compaq)
+ BL = 00h load main font (block 0)
+ 01h load alternate font (block 1)
+ CX = number of characters to store
+ DX = character offset into RAM font area
+Return: nothing
+SeeAlso: AX=1100h,AX=1110h,AX=1401h
+--------V-101401-----------------------------
+INT 10 - VIDEO - LOAD SYSTEM ROM DEFAULT LCD CHARACTER FONT (CONV,CP386)
+ AX = 1401h
+ BL = font to load
+ 00h main font (block 0)
+ 01h alternate font (block 1)
+Return: nothing
+SeeAlso: AX=1100h,AX=1102h,AX=1400h
+--------V-101402-----------------------------
+INT 10 - VIDEO - SET MAPPING OF LCD HIGH INTENSITY ATTRIBUTES (CONV,CP386)
+ AX = 1402h
+ BL = subfunction
+ 00h ignore high intensity attribute
+ 01h map high intensity to reverse video
+ 02h map high intensity to underscore
+ 03h map high intensity to selected alternate font
+ B0h half intensity (Compaq)
+ B1h toggle active intensity bit interpretation (CP386)
+Return: nothing
+--------V-1015-------------------------------
+INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE)
+ AH = 15h
+Return: AX = alternate display adapter type (see #00037)
+ ES:DI -> parameter table (see #00038)
+SeeAlso: AH=1Bh
+
+(Table 00037)
+Values for PC Convertible alternate display adapter type:
+ 0000h none
+ 5140h LCD
+ 5153h CGA
+ 5151h mono
+
+Format of PC Convertible display parameter table:
+Offset Size Description (Table 00038)
+ 00h WORD monitor model number
+ 02h WORD vertical pixels per meter
+ 04h WORD horizontal pixels per meter
+ 06h WORD total vertical pixels
+ 08h WORD total horizontal pixels
+ 0Ah WORD horizontal pixel separation in micrometers
+ (width, center-to-center)
+ 0Ch WORD vertical pixel separation in micrometers
+ (height, center-to-center)
+--------V-1015-------------------------------
+INT 10 - VIDEO - SET SUPERIMPOSE MODE (Sperry PC)
+ AH = 15h
+ AL = superimpose mode
+ 00h show graphics screen
+ 01h show text screen
+ 02h show text screen superimposed on graphics screen
+Return: nothing
+--------J-1018-------------------------------
+INT 10 - VIDEO - DOS/V - GET/SET FONT PATTERN
+ AH = 18h
+ AL = subfunction
+ 00h get font pattern
+ 01h set font pattern
+ BX = 0000h
+ CL = character size in bytes (01h,02h)
+ CH = 00h
+ DH = character width in pixels
+ DL = character height in pixels
+ ES:DI -> buffer for/containing font image
+Return: AL = status (00h successful, else error)
+ ES:DI buffer filled for function 00h if successful
+Note: the supported font sizes are 8x16 single-byte, 8x19 single-byte,
+ 16x16 double-byte, and 24x24 double-byte
+SeeAlso: AH=19h,INT 16/AH=14h
+--------V-1019-------------------------------
+INT 10 - Japanese VIDEO - DOUBLE-BYTE CHARACTER SET SHIFT INFORMATION
+ AH = 19h
+ ???
+Return: ???
+SeeAlso: AH=18h,INT 16/AH=14h
+--------V-101A00-----------------------------
+INT 10 - VIDEO - GET DISPLAY COMBINATION CODE (PS,VGA/MCGA)
+ AX = 1A00h
+Return: AL = 1Ah if function was supported
+ BL = active display code (see #00039)
+ BH = alternate display code (see #00039)
+Notes: this function is commonly used to check for the presence of a VGA
+ this function is supported on the ATI EGA Wonder with certain
+ undocumented configuration switch settings, even though the EGA
+ Wonder does not support VGA graphics; to distinguish this case,
+ call AX=1C00h with CX nonzero, which the EGA Wonder does not support
+SeeAlso: AH=12h/BL=35h,AX=1A01h,AH=1Bh,AH=1Ch,MEM 0040h:008Ah
+Index: installation check;VGA
+
+(Table 00039)
+Values for display combination code:
+ 00h no display
+ 01h monochrome adapter w/ monochrome display
+ 02h CGA w/ color display
+ 03h reserved
+ 04h EGA w/ color display
+ 05h EGA w/ monochrome display
+ 06h PGA w/ color display
+ 07h VGA w/ monochrome analog display
+ 08h VGA w/ color analog display
+ 09h reserved
+ 0Ah MCGA w/ digital color display
+ 0Bh MCGA w/ monochrome analog display
+ 0Ch MCGA w/ color analog display
+ FFh unknown display type
+--------V-101A01-----------------------------
+INT 10 - VIDEO - SET DISPLAY COMBINATION CODE (PS,VGA/MCGA)
+ AX = 1A01h
+ BL = active display code (see #00039)
+ BH = alternate display code
+Return: AL = 1Ah if function was supported
+SeeAlso: AH=12h/BL=35h,AX=1A00h
+--------V-101B-------------------------------
+INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA)
+ AH = 1Bh
+ BX = implementation type
+ 0000h return funtionality/state information
+ ES:DI -> 64-byte buffer for state information (see #00040)
+Return: AL = 1Bh if function supported
+ ES:DI buffer filled with state information
+BUG: Trident 8900 (BIOS D3.0 1991/11/12) and Trident 9000 (C3.0 1991/10/25)
+ do not correctly set the fields at offsets 27h and 29h of the
+ state information
+SeeAlso: AH=15h,AX=1A00h,AX=1F01h
+
+Format of MCGA+ state information:
+Offset Size Description (Table 00040)
+ 00h DWORD address of static funtionality table (see #00045)
+ 04h BYTE video mode in effect
+ 05h WORD number of columns
+ 07h WORD length of regen buffer in bytes
+ 09h WORD starting address of regen buffer
+ 0Bh WORD cursor position for page 0
+ 0Dh WORD cursor position for page 1
+ 0Fh WORD cursor position for page 2
+ 11h WORD cursor position for page 3
+ 13h WORD cursor position for page 4
+ 15h WORD cursor position for page 5
+ 17h WORD cursor position for page 6
+ 19h WORD cursor position for page 7
+ 1Bh WORD cursor "type" (start/stop scan lines)
+ 1Dh BYTE active display page
+ 1Eh WORD CRTC port address
+ 20h BYTE current setting of PORT 03x8h
+ 21h BYTE current setting of PORT 03x9h
+ 22h BYTE number of rows - 1
+ 23h WORD bytes/character
+ 25h BYTE display combination code of active display
+ 26h BYTE DCC of alternate display
+ 27h WORD number of colors supported in current mode (0000h = mono)
+ 29h BYTE number of pages supported in current mode
+ 2Ah BYTE number of scan lines active
+ (0,1,2,3) = (200,350,400,480)
+ Tseng ET3000: (4,5,6 = 512,600,768)
+ 2Bh BYTE primary character block
+ 2Ch BYTE secondary character block
+ 2Dh BYTE miscellaneous flags (see #00041)
+ 2Eh BYTE non-VGA mode support (see #00042)
+ 2Fh 2 BYTEs reserved (00h)
+ 31h BYTE video memory available
+ 00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K
+ 32h BYTE save pointer state flags (see #00043)
+ 33h BYTE display information and status (see #00044)
+ 34h 12 BYTEs reserved (00h)
+
+Bitfields for miscellaneous flags:
+Bit(s) Description (Table 00041)
+ 0 all modes on all displays on
+ 1 gray summing on
+ 2 monochrome display attached
+ 3 default palette loading disabled
+ 4 cursor emulation enabled
+ 5 0 = intensity; 1 = blinking
+ 6 flat-panel display is active
+ 7 unused (0)
+SeeAlso: #00040
+
+Bitfields for non-VGA mode support:
+Bit(s) Description (Table 00042)
+ 7-5 reserved
+ 4 132-column mode supported
+ 3 =1 MFI attributes enabled (see AH=12h/BL=37h)
+ =0 VGA attributes
+ 2 16-bit VGA graphics present
+ 1 adapter interface driver required
+ 0 BIOS supports information return for adapter interface
+SeeAlso: #00040
+
+Bitfields for save pointer state flags:
+Bit(s) Description (Table 00043)
+ 0 512 character set active
+ 1 dynamic save area present
+ 2 alpha font override active
+ 3 graphics font override active
+ 4 palette override active
+ 5 DCC override active
+ 6-7 unused (0)
+SeeAlso: #00040
+
+Bitfields for display information and status:
+Bit(s) Description (Table 00044)
+ 7 640x480 flat-panel can be used simultaneously with CRT controller
+ 6-3 reserved
+ 2 color display
+ 1 flat-panel display active
+ 0 flat-panel display attached
+SeeAlso: #00040
+
+Format of Static Functionality Table:
+Offset Size Description (Table 00045)
+ 00h BYTE modes supported 1
+ bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6,7 supported
+ 01h BYTE modes supported 2
+ bit 0 to bit 7 = 1 modes 8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh supported
+ 02h BYTE modes supported 3
+ bit 0 to bit 3 = 1 modes 10h,11h,12h,13h supported
+ bit 4 to bit 7 unused (0)
+ 03h BYTE (IBM) reserved
+ (Tseng ET3000/4000) modes supported 4
+ bit 0 to bit 7 = modes 18h-1Fh supported
+ 04h BYTE (IBM) reserved
+ (Tseng ET3000/4000) modes supported 5
+ bit 0 to bit 7 = modes 20h-27h supported
+ 05h BYTE (IBM) reserved
+ (Tseng ET3000/4000) modes supported 6
+ bit 0 to bit 7 = modes 28h-2Fh supported
+ 06h BYTE (IBM) reserved
+ (Tseng ET3000/4000) modes supported 7
+ bit 0 to bit 7 = modes 30h-37h supported
+ 07h BYTE scan lines supported
+ bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
+ bits 3-7 = unused (0)
+ 08h BYTE total number of character blocks available in text modes
+ 09h BYTE maximum number of active character blocks in text modes
+ 0Ah WORD miscellaneous function support flags (see #00046)
+ 0Ch WORD reserved
+ 0Eh BYTE save pointer function flags (see #00047)
+ 0Fh BYTE reserved
+SeeAlso: #00040
+
+Bitfields for miscellaneous function support flags:
+Bit(s) Description (Table 00046)
+ 0 all modes on all displays function supported
+ 1 gray summing function supported
+ 2 character font loading function supported
+ 3 default palette loading enable/disable supported
+ 4 cursor emulation function supported
+ 5 EGA palette present
+ 6 color palette present
+ 7 color-register paging function supported
+ 8 light pen supported (see AH=04h)
+ 9 save/restore state function 1Ch supported
+ 10 intensity/blinking function supported (see AX=1003h)
+ 11 Display Combination Code supported (see #00039)
+ 12-15 unused (0)
+SeeAlso: #00040
+
+Bitfields for save pointer function flags:
+Bit(s) Description (Table 00047)
+ 0 512 character set supported
+ 1 dynamic save area supported
+ 2 alpha font override supported
+ 3 graphics font override supported
+ 4 palette override supported
+ 5 DCC extension supported
+ 6-7 unused (0)
+SeeAlso: #00040
+--------V-101C-------------------------------
+INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
+ AH = 1Ch
+ AL = function
+ 00h return state buffer size
+ Return: BX = number of 64-byte blocks needed
+ 01h save video state
+ ES:BX -> buffer
+ 02h restore video state
+ ES:BX -> buffer containing previously saved state
+ CX = requested states (see #00048)
+Return: AL = 1Ch if function supported
+Notes: many BIOSes corrupt the video registers when saving the state, so a
+ program should restore the state immediately after saving it (the
+ saved data is uncorrupted)
+ the BIOS data area consists of the 96 bytes from 0040h:0049h-00A8h
+ this function is not supported when DOS/V is running
+ this function may be a better VGA installation check than the usual
+ INT 10/AX=1A00h, since some late-model EGA cards (such as the ATI
+ EGA Wonder) supported that call
+SeeAlso: AX=1A00h,AX=5F90h,AX=5FA0h,MEM 0040h:00A8h
+
+Bitfields for requested states:
+Bit(s) Description (Table 00048)
+ 0 video hardware (see #00049)
+ 1 BIOS data areas
+ 2 color registers and DAC state (see #00050)
+ 3-15 unused (0)
+SeeAlso: #00186
+
+Format of VGA video hardware state:
+Offset Size Description (Table 00049)
+ 00h BYTE sequencer index register
+ 01h BYTE CRTC index register
+ 02h BYTE graphics controller index register
+ 03h BYTE attribute controller index register
+ 04h BYTE feature controller register
+ 05h 4 BYTEs sequencer registers
+ 09h BYTE sequencer register 0
+ 0Ah 25 BYTEs CRTC registers 0-8
+ 23h 16 BYTEs palette registers 00h-0Fh
+ 33h 4 BYTEs attribute registers 10h-13h
+ 37h 9 BYTEs graphics controller registers 0-8
+ 40h BYTE CRTC base address (low)
+ 41h BYTE CRTC base address (high)
+ 42h BYTE plane 0 latch
+ 43h BYTE plane 1 latch
+ 44h BYTE plane 2 latch
+ 45h BYTE plane 3 latch
+
+Format of VGA DAC state:
+Offset Size Description (Table 00050)
+ 00h BYTE read/write mode DAC
+ 01h BYTE pixel address
+ 02h BYTE pixel mask
+ 03h 768 BYTEs color data (256 triples)
+303h BYTE color select register
+--------J-101D-------------------------------
+INT 10 - VIDEO - DOS/V - SHIFT STATUS LINE CONTROL
+ AH = 1Dh
+ AL = function
+ 00h enable shift status line(s)
+ BX = number of lines to reserve at bottom of screen (usu. 1)
+ 01h disable shift status line
+ BX = number of lines reserved at bottom of screen (usually 1)
+ 02h get number of status lines
+ Return: BX = number of lines reserved for shift status
+SeeAlso: AH=19h
+--------V-101D-------------------------------
+INT 10 - SpeedSTAR Plus BIOS v4.23+ - SET SYNC PARAMETERS
+ AH = 1Dh
+ AL = video mode
+ ES = caller's segment
+Return: nothing
+Note: the caller's segment contains at offset 5Ch (FCB field in PSP)
+ or 100h a table with sync parameters (see #00051) (BIOS looks at both
+ offsets)
+
+Format of SpeedSTAR Plus sync table:
+Offset Size Description (Table 00051)
+ 00h 9 BYTEs ID contains string 'ey5CENTER'
+ 09h 5 BYTEs sync parameters for 640x480 modes 11h,12h,25h,26h,2Eh
+ 0Bh 5 BYTEs sync parameters for 800x600 modes 29h,30h,2Ah
+ 13h 5 BYTEs sync parameters for 1024x768 modes 37h,38h
+--------V-101D-------------------------------
+INT 10 - Tseng ET-4000 BIOS v3.00 and v8.00 - BUG
+ AH = 1Dh
+Note: these versions of the BIOS jump to a random location on this function
+ due to a fencepost error
+--------V-101DAABXFDEC-----------------------
+INT 10 U - Diamond Stealth64 Video - INSTALLATION CHECK
+ AX = 1DAAh
+ BX = FDECh
+Return: BX = CDEFh if Diamond Stealth64 Video 2001-series video card installed
+ AL = number of megabytes of video memory
+ AH = card type??? (4Bh for VL-Bus/5Bh for PCI)
+ CX = ??? (0000h)
+ SI:DI -> signature/copyright string
+--------V-101E00-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - READ INFORMATION
+ AX = 1E00h
+Return: AL = 1Eh if function supported
+ BL = flat-panel status (see #00052)
+ ES:DI -> information table (see #00053)
+Note: IBM classifies this function as optional
+SeeAlso: AX=1E01h,AX=1E02h,AX=1E03h,AX=1E04h,AX=1E05h,AX=1EFEh
+
+Bitfields for flat-panel status:
+Bit(s) Description (Table 00052)
+ 7-3 reserved
+ 2 color display
+ 1 flat panel is active
+ 0 flat panel is attached
+SeeAlso: #00053
+
+Format of flat-panel information table:
+Offset Size Description (Table 00053)
+ 00h BYTE number of WORDs in the remainder of the table
+ 01h WORD number of vertical pixels per meter
+ 03h WORD number of horizontal pixels per meter
+ 05h WORD total number of vertical pixels
+ 07h WORD total number of horizontal pixels
+ 09h WORD vertical pixel separation in micrometers (center-to-center)
+ 0Bh WORD horizontal pixel separation in micrometers
+ 0Dh WORD range of gray levels available, less 1
+ 0Fh WORD number of red levels available, less 1 (0000h if nonochrome)
+ 11h WORD number of green levels available, less 1 (0000h if nonochrome)
+ 13h WORD number of blue levels available, less 1 (0000h if nonochrome)
+SeeAlso: #00052
+--------V-101E01-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - LCD/CRT DISPLAY CONTROL
+ AX = 1E01h
+ BH = function
+ bit 7: =1 set display control, =0 query control
+ bits 6-0: reserved (0)
+ ---if BH bit 7 set---
+ BL = new display combination (see #00054)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bits 6-3: reserved (0)
+ bit 2: simultaneous display is supported by hardware
+ bit 1: LCD/CRT display control supported by hardware
+ bit 0: set operation was successful (always clear on get)
+ BL = active display combination (see #00054)
+SeeAlso: AX=1E00h,AX=1E02h
+
+Bitfields for Flat-Panel display combination:
+Bit(s) Description (Table 00054)
+ 7-2 reserved (0)
+ 1-0 combination
+ 00 reserved
+ 01 LCD active
+ 10 CRT active
+ 11 both LCD and CRT active (simultaneous display)
+SeeAlso: #00055
+--------V-101E02-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - DISPLAY POSITION
+ AX = 1E02h
+ BH = function
+ bit 7: =1 set display position, =0 query position
+ bits 6-0: reserved (0)
+ ---if BH bit 7 set---
+ BL = new position setting (see #00055)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bits 6-4: reserved (0)
+ bit 3: positioning to top is supported by hardware
+ bit 2: positioning to center is supported by hardware
+ bit 1: positioning to bottom is supported by hardware
+ bit 0: set operation was successful (always clear on get)
+ BL = active position setting (see #00055)
+SeeAlso: AX=1E00h,AX=1E01h
+
+Bitfields for Flat-Panel position setting:
+Bit(s) Description (Table 00055)
+ 7-2 reserved (0)
+ 1-0 position
+ 00 center
+ 01 top
+ 10 bottom
+ 11 reserved
+SeeAlso: #00054,#00056
+--------V-101E03-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - VERTICAL EXPANSION FOR TEXT/GRAPHICS MODES
+ AX = 1E03h
+ BH = function
+ bit 7: =1 set vertical expansion, =0 query expansion
+ bits 6-0: reserved (0)
+ ---if BH bit 7 set---
+ BL = new vertical expansion setting (see #00056)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bits 6-4: reserved (0)
+ bit 3: vertical expansion of text is supported by hardware
+ bit 2: vertical expansion of graphics is supported by hardware
+ bit 1: hardware supports independent control of expansion in
+ text and graphics modes
+ bit 0: set operation was successful (always clear on get)
+ BL = active vertical expansion setting (see #00056)
+SeeAlso: AX=1E00h,AX=1E02h.AX=1E04h
+
+Bitfields for Flat-Panel vertical expansion setting:
+Bit(s) Description (Table 00056)
+ 7-2 reserved (0)
+ 1 vertical expansion turned on for text modes
+ 0 vertical expansion turned on for graphics modes
+SeeAlso: #00054,#00055,#00057
+--------V-101E04-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - NORMAL/REVERSE VIDEO FOR TEXT/GRAPHICS MODES
+ AX = 1E04h
+ BH = function
+ bit 7: =1 set normal/reverse video, =0 query normal/reverse
+ bits 6-0: reserved (0)
+ ---if BH bit 7 set---
+ BL = new normal/reverse video setting (see #00057)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bits 6-4: reserved (0)
+ bit 3: hardware supports reverse video for text modes
+ bit 2: hardware supports reverse video for graphics modes
+ bit 1: hardware supports independent control of reverse video
+ in text and graphics modes
+ bit 0: set operation was successful (always clear on get)
+ BL = active normal/reverse video setting (see #00057)
+SeeAlso: AX=1E00h,AX=1E03h,AX=1E05h
+
+Bitfields for Flat-Panel normal/reverse video setting:
+Bit(s) Description (Table 00057)
+ 7-2 reserved (0)
+ 1 reverse video for text
+ 0 reverse video for graphics
+SeeAlso: #00054,#00056,#00058,#00059
+--------V-101E05-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - BRIGHTNESS CONTROL
+ AX = 1E05h
+ BH = function
+ bit 7: =1 set brightness, =0 query brightness
+ bits 6-0: reserved (0)
+ ---if BH bit 7 set---
+ BL = new brightness setting (see #00058)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bits 6-2: reserved (0)
+ bit 1: software brightness control is supported
+ bit 0: set operation was successful (always clear on get)
+ BL = active brightness setting (see #00058)
+Note: this function operates independently of AX=1E07h
+SeeAlso: AX=1E00h,AX=1E04h,AX=1E06h,AX=1E07h
+
+Bitfields for Flat-Panel brightness control:
+Bit(s) Description (Table 00058)
+ 7-1 reserved (0)
+ 0 high brightness
+SeeAlso: #00057,#00059
+--------V-101E06-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - CONTRAST CONTROL FOR TEXT/GRAPHICS
+ AX = 1E06h
+ BH = function
+ bit 7: =1 set contrast control, =0 query contrast
+ bits 6-0: reserved (0)
+ ---if BH bit 7 set---
+ BL = new normal/reverse video setting (see #00059)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bits 6-4: reserved (0)
+ bit 3: software contrast control supported for text
+ bit 2: software contrast control supported for graphics
+ bit 1: hardware supports independent control of contrast
+ in text and graphics modes
+ bit 0: set operation was successful (always clear on get)
+ BL = active contrast setting (see #00059)
+Note: this function operates independently of AX=1E08h
+SeeAlso: AX=1E00h,AX=1E04h,AX=1E05h,AX=1E07h,AX=1E08h
+
+Bitfields for Flat-Panel contrast control:
+Bit(s) Description (Table 00059)
+ 7-2 reserved (0)
+ 1 high contrast for text
+ 0 high contrast for graphics
+SeeAlso: #00057,#00058
+--------V-101E07-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - BRIGHTNESS SETTING
+ AX = 1E07h
+ BH = function
+ bit 7: =1 set brightness control, =0 query brightness
+ bit 6: use standard brightness
+ bits 5-0: reserved (0)
+ ---if BH bits 7,6=10---
+ BL = brightness (00h = minimum, FFh = maximum)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bit 6: standard/custom (copied from input)
+ bits 5-2: reserved (0)
+ bit 1: software brightness control is supported
+ bit 0: set operation was succesful (always clear on get)
+ BL = brightness (00h = minimum, FFh = maximum)
+Note: this function operates independently of AX=1E05h
+SeeAlso: AX=1E00h,AX=1E05h,AX=1E08h
+--------V-101E08-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - CONTRAST SETTING
+ AX = 1E08h
+ BH = function
+ bit 7: =1 set contrast control, =0 query contrast
+ bit 6: use standard contrast
+ bits 5-0: reserved (0)
+ ---if BH bits 7,6=10---
+ BL = contrast (00h = minimum, FFh = maximum)
+Return: AL = 1Eh if function supported
+ BH = results
+ bit 7: query/set (copied from input)
+ bit 6: standard/custom (copied from input)
+ bits 5-2: reserved (0)
+ bit 1: software contrast control is supported
+ bit 0: set operation was succesful (always clear on get)
+ BL = contrast (00h = minimum, FFh = maximum)
+Note: this function operates independently of AX=1E06h
+SeeAlso: AX=1E00h,AX=1E06h,AX=1E07h
+--------V-101EFE-----------------------------
+INT 10 - VIDEO - FLAT-PANEL - FUNCTION SUPPORT FLAG
+ AX = 1EFEh
+ ES:DI -> DWORD buffer for bitmap of supported functions
+ (set to all zeros before calling)
+Return: ES:DI buffer updated with mask of supported functions
+Index: installation check;flat-panel display support
+SeeAlso: AX=1E00h,AX=1E06h
+--------V-101F00-----------------------------
+INT 10 - VIDEO - XGA - GET DMQS (Display Mode Query and Set) DATA LENGTH
+ AX = 1F00h
+Return: AL = 1Fh if supported
+ BX = number of bytes of DMQS data
+Note: not supported on the original IBM XGA, only on XGA-NI (non-interlaced)
+ and later models.
+SeeAlso: AX=1F01h
+--------V-101F01-----------------------------
+INT 10 - VIDEO - XGA - READ DMQS DATA
+ AX = 1F01h
+ ES:DI -> user buffer for return data (call AX=1F00h for size)
+Return: AL = 1Fh if function supported
+ user buffer filled with DMQS data (see #00060)
+Note: not supported on the original IBM XGA, only on XGA-NI (non-interlaced)
+ and later models.
+SeeAlso: AH=1Bh,AX=1F00h,AX=3000h
+
+Format of XGA DMQS buffer:
+Offset Size Description (Table 00060)
+ 00h WORD offset (in bytes) to DMQS data for next XGA instance
+ 02h BYTE slot number
+ 03h BYTE XGA implementation function level identifier
+ 04h BYTE XGA implementation resolution level identifier
+ 05h WORD vendor identifier - identifies card vendor
+ 07h WORD vendor defined field
+ 09h WORD XGA adapter I/O register base address
+ 0Bh WORD XGA coprocessor register base address
+ (paragraph--multiply by 10h to get physical address)
+ 0Dh WORD 1 Megabyte system video memory aperture
+ 0000h if not allocated
+ (Multiply by 100000h to get physical address)
+ 0Fh WORD 4 Megabyte system video memory aperture
+ 0000h if not allocated
+ (multiply by 100000h to get physical address)
+ 11h WORD video memory base address
+ (multiply by 100000h to get physical address)
+ 13h WORD composite ID of the attached display
+ 15h BYTE amount of video memory available, in multiples of 256K bytes
+ 16h DWORD alternate XGA coprocessor register base address. 0 = none.
+ 1Ah var DMQS Data for further XGA Instances (as above)
+Note: "Instances" refers to the capability of having up to 8 XGA
+ adapters in one computer.
+SeeAlso: #00061
+--------V-101F02-----------------------------
+INT 10 - VIDEO - XGA - GET SVGA DMQS DATA LENGTH
+ AX = 1F02h
+Return: AL = 1Fh if function supported
+ BX = length of SVGA DMQS data in bytes
+SeeAlso: AX=1F00h,AX=1F03h
+--------V-101F03-----------------------------
+INT 10 - VIDEO - XGA - GET SVGA DMQS DATA
+ AX = 1F03h
+ ES:DI -> buffer for SVGA DMQS data (see #00061)
+Return: AL = 1Fh if function supported
+ ES:DI buffer filled
+SeeAlso: AX=1F00h,AX=1F02h
+
+Format of SVGA DMQS data:
+Offset Size Description (Table 00061)
+ 00h WORD offset to DMQS data for next SVGA instance or 0000h
+ 02h BYTE reserved
+ 03h BYTE SVGA implementation functional level
+ 04h BYTE SVGA implementation resolution level
+ 05h WORD vendor ID
+ 07h WORD vendor-specific
+ 09h 7 BYTEs reserved
+ 10h BYTE SVGA linear address window size
+ 00h 64K
+ 01h 1M
+ 02h 2M
+ 03h 4M
+ 11h WORD SVGA linear address window location or 0000h if not allocated
+ (multiply by 10000h [shift left 16 bits] to get physical addr)
+ 13h WORD attached monitor's composite monitor ID
+ 15h BYTE available video RAM in multiples of 256K
+ 16h 11 BYTEs reserved
+SeeAlso: #00060
+--------V-103000CX0000-----------------------
+INT 10 - VIDEO - LOCATE 3270PC CONFIGURATION TABLE (INSTALLATION CHECK)
+ AX = 3000h
+ CX = 0000h
+ DX = 0000h
+Return: CX:DX -> 3270PC configuration table (see #00062)
+ CX:DX = 0000h:0000h if 3270PC Control Program not active
+SeeAlso: AX=1F01h
+
+Format of 3270 PC configuration table:
+Offset Size Description (Table 00062)
+ 00h BYTE aspect ratio X
+ 01h BYTE aspect ratio Y
+ 02h BYTE monitor type (see #00063)
+ 03h BYTE reserved
+ 04h BYTE adapter ID
+ 00h = 5151/5272 adapter
+ 04h = 5151/5272 with XGA adapter
+ 30h = 3295 or 3270PC G/GX adapter
+ 05h BYTE reserved
+ 06h BYTE function flags 1 (see #00064)
+ 07h BYTE function flags 2
+ bit 6: GPI graphics supported
+ 08h WORD segment address of Control Program Level table (see #00065)
+ 0Ah 10 BYTEs reserved
+
+(Table 00063)
+Values for 3270 PC monitor type:
+ 00h 5151 (mono) or 5272 (color)
+ 01h 3295
+ 02h 5151 or 5272 with XGA (???) graphics adapter
+ 03h 5279 with 3270PC G adapter
+ 04h 5379 model C01 with 3270PC GX adapter
+ 05h 5379 model M01 with 3270PC GX adapter
+ 07h non-3270PC with 3270 Workstation Program
+ FFh 3270PC Control Program not loaded
+
+Bitfields for 3270 PC function flags 1:
+Bit(s) Description (Table 00064)
+ 7 mono text, 1 page
+ 6 color text, 1 page
+ 5 color text, 4 pages
+ 4 CGA color graphics
+ 3 720x350 two-color graphics
+ 2 360x350 four-color graphics
+ 1 720x350 eight-color graphics
+
+Format of Control Program Level table:
+Offset Size Description (Table 00065)
+ 00h WORD program version
+ 02xxh = 3270PC Control Program v2.xx
+ 03xxh = 3270PC Control Program v3.xx
+ 04xxh = 3270 Workstation Program v1.xx
+ 02h BYTE Control Program ID (00h)
+ 03h 27 BYTEs Control Program Descriptor ("IBM 3270 PC CONTROL PROGRAM")
+--------a-103800-----------------------------
+INT 10 - Tinytalk Personal v1.09f+ - GET CONFIGURATION INFO
+ AX = 3800h
+Return: ES:DI -> configuration info (see #00066)
+Program: Tinytalk is a shareware screen reader by OMS Development/Eric Bohlman
+Notes: this call is also used as the installation check by verifying that the
+ returned ES:DI points at valid configuration info
+ Tinytalk v1.09f ignores AL and always returns the configuration info;
+ v1.10 adds several subfunctions selected with AL
+SeeAlso: AX=3801h,AX=3803h,AX=3806h,AH=39h,INT 14/AX=F0F1h
+SeeAlso: INT 2F/AX=FB00h"AutoBraille"
+Index: installation check;Tinytalk Personal
+
+Format of Tinytalk Personal configuration info:
+Offset Size Description (Table 00066)
+ 00h 8 BYTEs signature "TTCONFIG"
+ 08h WORD size of configuration data, not counting signature, this WORD,
+ or the following byte
+ 0Ah BYTE ???
+ 0Bh ??? configuration data
+--------a-103801-----------------------------
+INT 10 - Tinytalk Personal v1.10 - ???
+ AX = 3801h
+ DL = ???
+Return: ???
+SeeAlso: AX=3800h,AX=3802h
+--------a-103802-----------------------------
+INT 10 - Tinytalk Personal v1.10 - ???
+ AX = 3802h
+ DL = ???
+Return: ???
+SeeAlso: AX=3800h,AX=3801h
+--------a-103803-----------------------------
+INT 10 - Tinytalk Personal v1.10 - GET ???
+ AX = 3803h
+Return: AL = ???
+SeeAlso: AX=3800h,AX=3804h,AX=3805h
+--------a-103804-----------------------------
+INT 10 - Tinytalk Personal v1.10 - GET ???
+ AX = 3804h
+Return: AX = ???
+SeeAlso: AX=3800h,AX=3803h,AX=3805h
+--------a-103805-----------------------------
+INT 10 - Tinytalk Personal v1.10 - GET ???
+ AX = 3805h
+Return: AL = ???
+SeeAlso: AX=3800h,AX=3803h,AX=3804h
+--------a-103806-----------------------------
+INT 10 - Tinytalk Personal v1.10 - ???
+ AX = 3806h
+ ES:DX -> ASCIZ ???
+Return: ???
+SeeAlso: AX=3800h
+--------a-1039-------------------------------
+INT 10 - Tinytalk Personal v1.10 - ???
+ AH = 39h
+Program: Tinytalk is a shareware screen reader by OMS Development/Eric Bohlman
+Note: this function was a NOP in TTDEMO.EXE, but may be implemented in other
+ variants of Tinytalk
+--------V-1040-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "GMODE" - SET GRAPHICS MODE
+ AH = 40h
+Return: nothing
+Program: Hercules GRAFIX (or GRAPH X, as it is called in some documentation)
+ provides text output in graphics mode and some graphics primitives
+ on the Hercules Graphics Card
+Desc: switch the Hercules Graphics Card into graphics mode (720x348) without
+ clearing the screen; make Page 0 the default for both writing and
+ display, and set LEVEL (see AH=44h) to 01h
+SeeAlso: AH=00h,AH=41h,AH=42h
+Index: video modes;Hercules
+--------V-1041-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "TMODE" - SET TEXT MODE
+ AH = 41h
+Return: nothing
+Desc: switch the Hercules Graphics Card into text mode
+SeeAlso: AH=00h,AH=40h
+Index: video modes;Hercules
+--------V-1042-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "CLRSCR" - CLEAR CURRENT PAGE
+ AH = 42h
+Return: nothing
+SeeAlso: AH=45h
+--------V-1043-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "GPAGE" - SELECT DRAWING PAGE
+ AH = 43h
+ AL = page number (0,1)
+Return: nothing
+Desc: specify which of the two pages of video memory is to be used for
+ output
+SeeAlso: AH=05h,AH=44h,AH=45h
+--------V-1044-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "LEVEL" - SELECT DRAWING FUNCTION
+ AH = 44h
+ AL = drawing function
+ 00h clear pixels
+ 01h set pixels
+ 02h invert pixels
+Return: nothing
+Desc: specify how graphics output will change the display
+SeeAlso: AH=40h,AH=45h,AH=46h,AH=4Bh,AH=4Ch,AH=4Dh
+--------V-1045-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "DISP" - SELECT PAGE TO DISPLAY
+ AH = 45h
+ AL = page number (0,1)
+Return: nothing
+Desc: specify which of the two pages of video memory is visible on screen
+SeeAlso: AH=05h,AH=42h,AH=43h
+--------V-1046-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "PLOT" - DRAW ONE PIXEL
+ AH = 46h
+ DI = x (0-719)
+ BP = y (0-347)
+Return: nothing
+Notes: function 44h determines operation and function 43h which page to use
+ if the indicated coordinate is invalid, this function does nothing
+SeeAlso: AH=0Ch,AH=47h,AH=49h,AH=4Ch,AH=4Dh
+--------V-1047-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "GETPT" - FIND PIXEL VALUE
+ AH = 47h
+ DI = x (0-719)
+ BP = y (0-347)
+Return: AL = 00h pixel clear
+ AL = 01h pixel set
+Note: function 43h specifies which page is used
+SeeAlso: AH=0Dh,AH=46h
+--------V-1048-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "MOVE" - MOVE TO POINT
+ AH = 48h
+ DI = x (0-719)
+ BP = y (0-347)
+Return: nothing
+Desc: specify the location from which to start the next graphics output
+SeeAlso: AH=49h
+--------V-1049-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "DLINE" - DRAW TO POINT
+ AH = 49h
+ DI = x (0-719)
+ BP = y (0-347)
+Return: nothing
+Note: function 48h or 49h specify first point, 44h operation and 43h page to
+ use
+SeeAlso: AH=43h,AH=44h,AH=48h,AH=4Ch,AH=4Dh
+--------V-104A-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "BLKFIL" - BLOCK FILL
+ AH = 4Ah
+ DI = x coordinate of lower left corner
+ BP = y coordinate of lower left corner
+ BX = height in pixels
+ CX = width in pixels
+Return: nothing
+Desc: draw a solid rectangle of the specified size at the given location
+SeeAlso: AH=4Eh
+--------V-104B-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "TEXT" - DISPLAY CHARACTER
+ AH = 4Bh
+ AL = character to display
+ DI = x (0-719)
+ BP = y (0-347)
+Return: nothing
+Notes: unlike the other BIOS character functions character position is
+ specified in pixels rather than rows and columns
+ the character is writting using the drawing function last specified by
+ AH=44h
+SeeAlso: AH=09h,AH=0Ah,AH=44h
+--------P-104B-------------------------------
+INT 10 - FRIEZE - API
+ AH = 4Bh
+ CL = function
+ 00h (v6.x-) print window
+ AL = mode
+ 00h character
+ 01h normal
+ 02h sideways
+ 01h load window
+ ES:BX -> ASCIZ filename from which to read
+ 02h save window
+ ES:BX -> ASCIZ filename to which to write
+ 03h set print width
+ AL = width in 1/4 inches
+ 04h set print height
+ AL = height in 1/4 inches
+ 05h reserved
+ 06h set left margin
+ AL = printout margin in 1/4 inches
+ 07h set window size
+ ES:BX -> four-WORD structure with Xmin, Ymin, Xmax, Ymax
+ 08h reserved
+ 09h set patterns
+ ES:BX -> 16-BYTE vector of screen->printer color correspondnces
+ 0Ah get patterns
+ ES:BX -> 16-BYTE buffer for color correspondences
+ 0Bh set mode
+ AL = mode
+ 0Ch (v7.41) ???
+ AL = ???
+ 00h ??? (calls original INT 05)
+ else ???
+ 0Dh (v7.41) ???
+ AL = ???
+ 00h ??? (calls original INT 05)
+ else ???
+ 0Eh (v7.41) ???
+ ???
+ 0Fh get window
+ ES:BX -> four-WORD buffer for Xmin, Ymin, Xmax, Ymax
+ 10h set print options
+ ES:BX -> printer options in same format as FRIEZE cmdline
+ 11h initialize
+ ES:BX -> three-WORD array from CARDS.DAT for HRes, VRes, code
+ 12h (v7.41) ???
+ ???
+ 13h (v7.41) ???
+ ???
+ 14h get version
+ Return: AH = major version (00h if FRIEZE version before 7)
+ AL = minor version
+ 15h set parameters
+ ES:BX -> parameter table (see #00068)
+ 16h get parameters
+ ES:BX -> buffer for parameter table (see #00068)
+ 17h get printer resolution
+ ES:BX -> 12-WORD table for six horizontal/vertical resol pairs
+ 18h (v8.0 only) reserved
+ 50h (v7.41) get ???
+ Return: AX = ???
+ 51h (v7.41) get ???
+ Return: ES = ??? (seen 2348h)
+ AX = ??? (seen 8432h)
+Return: AX = status (see #00067)
+SeeAlso: AH=0Fh/SI=F123h
+
+(Table 00067)
+Values for FRIEZE function status:
+ 00h successful
+ 01h user aborted printout with ESC
+ 02h reserved
+ 03h file read error
+ 04h file write error or printer error
+ 05h file not found
+ 06h invalid header (not an image or wrong screen mode) or can't create file
+ 07h file close error
+ 08h disk error
+ 09h (v7.0+) printer error
+ 0Ah invalid function
+ 0Bh (v7.0+) can't create file
+ 0Ch (v7.0+) wrong video mode
+
+Format of FRIEZE parameter table:
+Offset Size Description (Table 00068)
+ 00h WORD top margin (1/100 inch)
+ 02h WORD left margin (1/100 inch)
+ 04h WORD horizontal size (1/100 inch)
+ 06h WORD vertical size (1/100 inch)
+ 08h WORD quality/draft mode
+ 00h draft mode
+ 01h quality mode
+ 02h use horizontal/vertical resolution for output resolution
+ 0Ah WORD printer horizontal resolution (dots per inch)
+ 0Ch WORD printer vertical resolution (dots per inch)
+ 0Eh WORD reserved (FFFFh)
+Note: any field which should remain unchanged may be filled with FFFFh
+--------V-104C-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "ARC" - DRAW ARC
+ AH = 4Ch
+ AL = quadrant (1 = upper right, 2 = upper left, etc)
+ DI = x coordinate of center
+ BP = y coordinate of center
+ BX = radius
+Return: nothing
+SeeAlso: AH=49h,AH=4Dh
+--------V-104D-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "CIRC" - DRAW CIRCLE
+ AH = 4Dh
+ DI = x of center
+ BP = y of center
+ BX = radius
+Return: nothing
+SeeAlso: AH=49h,AH=4Ch
+--------V-104E-------------------------------
+INT 10 - VIDEO - Hercules GRAFIX - "FILL" - FILL AREA
+ AH = 4Eh
+ DI = x coordinate of an interior point
+ BP = y coordinate of an interior point
+Return: nothing
+Desc: fill a convex polygonal area bounded by a contiguous line of the
+ opposite color with the border color
+Note: the first fill makes the figure solid, the second erases it
+SeeAlso: AH=4Ah
+--------V-104E00-----------------------------
+INT 10 - VESA XGA BIOS Extensions - GET XGA ENVIRONMENT INFORMATION
+ AX = 4E00h
+ ES:DI -> 256-byte buffer for XGA information (see #00069)
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h successful
+ else error code
+Desc: determine whether VESA XGA extensions are present and the capabilities
+ supported by the display adapter
+SeeAlso: AX=4E01h,AX=4E02h,AX=4F00h
+Index: installation check;VESA XGA
+
+Format of XGA information buffer:
+Offset Size Description (Table 00069)
+ 00h 4 BYTEs signature ("VESA")
+ 04h WORD VESA version number
+ 06h DWORD pointer to ASCIZ OEM string
+ 0Ah DWORD environment flags (see #00070)
+ 0Eh WORD number of XGA adapters installed (other VESA XGA functions
+ require a handle indicating which adapter to use)
+ 10h 240 BYTEs reserved
+
+Bitfields for XGA environment flags:
+Bit(s) Description (Table 00070)
+ 0-1 system bus (00 = MCA, 01 = ISA, 10 = EISA)
+ 2 bus mastering available
+ 3-31 reserved
+--------V-104E01----------------------------
+INT 10 - VESA XGA BIOS Extensions - RETURN XGA SUBSYSTEM INFORMATION
+ AX = 4E01h
+ DX = XGA handle (0 to number of XGAs-1)
+ ES:DI -> 256-byte buffer for subsystem information (see #00071)
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h function successful
+ else error code
+SeeAlso: AX=4E00h,AX=4E02h
+
+Format of XGA subsystem information:
+Offset Size Description (Table 00071)
+ 00h DWORD pointer to null-terminated board OEM string
+ 04h DWORD capabilities (see #00072)
+ 08h DWORD pointer to 8KB XGA ROM (or NULL)
+ 0Ch DWORD pointer to the XGA memory mapped registers
+ 10h WORD base address of XGA I/O registers (21x0h)
+ 12h DWORD pointer to start of physical video memory
+ (A000h:0000h or B000h:0000h)
+ 16h DWORD physical address of 4MB aperture (or NULL if none)
+ 1Ah DWORD physical address of 1MB aperture (or NULL if none)
+ 1Eh DWORD physical address of 64KB aperture (or NULL if not enabled)
+ 22h DWORD physical address of OEM aperture (or NULL if none)
+ 26h WORD size of OEM aperture in 64KByte units
+ 28h DWORD pointer to list of video modes
+ The list is a series of WORDs terminated by FFFFh
+ 2Ch WORD number of 64KB blocks on the board
+ 2Eh DWORD XGA manufacturer ID
+ byte 0 POS data index 1
+ byte 1 is index 2
+ byte 2 is 21xAh index 75h
+ 32h 206 BYTEs reserved
+
+Bitfields for XGA capabilities:
+Bit(s) Description (Table 00072)
+ 0-1 board bus architecture: 0=MCA, 1=ISA, 3=EISA
+ 2-3 reserved
+ 4-6 DMA Channel assigned for acquiring bus mastership (only for ISA bus)
+ 7 DMA Channel Status (ISA only). enabled if set
+ 8-31 reserved
+--------V-104E02-----------------------------------
+INT 10 - VESA XGA BIOS Extensions - RETURN XGA MODE INFORMATION
+ AX = 4E02h
+ CX = Video mode
+ DX = XGA handle
+ ES:DI -> 256 byte buffer for mode information (see #00073)
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h function successful
+ else error code
+SeeAlso: AX=4E00h,AX=4E01h
+
+Format of XGA mode information:
+Offset Size Description (Table 00073)
+ 00h WORD attributes of the mode (see #00074)
+ 02h WORD bytes per logical scanline
+ 04h WORD horizontal resolution in pixels
+ 06h WORD vertical resolution in scanlines
+ 08h BYTE character Width in pixels
+ 09h BYTE character Height in pixels
+ 0Ah BYTE number of planes
+ 0Bh BYTE bits per pixels
+ 0Ch BYTE memory model (see #00075)
+ 0Dh BYTE number of Image Pages
+ 0Eh BYTE number of Red bits
+ 0Fh BYTE bit position of Red bit field
+ 10h BYTE number of Green bits
+ 11h BYTE bit position of Green bit field
+ 12h BYTE number of Blue bits
+ 13h BYTE bit position of Blue bit field
+ 14h BYTE number of Reserved bits
+ 15h BYTE bit position of Reserved bit field
+ 16h 235 BYTEs reserved
+
+Bitfields for XGA mode attributes:
+Bit(s) Description (Table 00074)
+ 0 set if mode is supported
+ 1 reserved
+ 2 output is supported by the BIOS
+ 3 reserved
+ 4 if set this is a graphics mode (VGA registers inactive, XGA active),
+ if clear this is a text mode (VGA registers active, XGA inactive)
+
+(Table 00075)
+Values for XGA video memory model:
+ 00h Text Mode
+ 01h CGA graphics
+ 02h Hercules graphics
+ 03h 4-planar graphics
+ 04h Packed Pixel
+ 05h Non-chain 4, 256 color
+ 06h Direct Color
+ 07h YUV-24
+--------V-104E03-----------------------------------
+INT 10 - VESA XGA BIOS Extensions - SET XGA VIDEO MODE
+ AX = 4E03h
+ BX = video mode
+ CX = other command flags
+ bit 0 If clear the feature connector is set to the default state
+ DX = XGA handle
+ ES:DI -> 256 byte buffer
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h function successful
+ else error code
+SeeAlso: AH=00h,AX=4E04h,AX=4F02h
+--------V-104E04-----------------------------------
+INT 10 - VESA XGA BIOS Extensions - RETURN CURRENT VIDEO MODE
+ AX = 4E04h
+ DX = XGA handle
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h function successful
+ BX??? = current mode
+ else error code
+SeeAlso: AH=0Fh,AX=4E03h,AX=4F03h
+--------V-104E05-----------------------------------
+INT 10 - VESA XGA BIOS Extensions - SET FEATURE CONNECTOR STATE
+ AX = 4E05h
+ BX = Feature Connector State (see #00076)
+ DX = XGA handle
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h function successful
+ else error code
+SeeAlso: AX=4E00h,AX=4E06h
+
+Bitfields for XGA Feature Connector State:
+Bit(s) Description (Table 00076)
+ 0 Feature Connector is enabled
+ 1 Feature Connector is in Output Mode rather than Input Mode
+ 2-15 reserved (0)
+--------V-104E06-----------------------------------
+INT 10 - VESA XGA BIOS Extensions - RETURN FEATURE CONNECTOR STATE
+ AX = 4E06h
+ DX = XGA handle
+Return: AL = 4Eh if function supported
+ AH = status
+ 00h function successful
+ else error code
+ BX = Feature Connector State (see #00076)
+SeeAlso: AX=4E00h,AX=4E05h
+--------V-104F00-----------------------------
+INT 10 - VESA SuperVGA BIOS (VBE) - GET SuperVGA INFORMATION
+ AX = 4F00h
+ ES:DI -> buffer for SuperVGA information (see #00077)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ES:DI buffer filled
+ 01h failed
+ ---VBE v2.0---
+ 02h function not supported by current hardware configuration
+ 03h function invalid in current video mode
+Desc: determine whether VESA BIOS extensions are present and the capabilities
+ supported by the display adapter
+SeeAlso: AX=4E00h,AX=4F01h,AX=7F00h"SOLLEX",AX=A00Ch
+Index: installation check;VESA SuperVGA
+
+Format of SuperVGA information:
+Offset Size Description (Table 00077)
+ 00h 4 BYTEs (ret) signature ("VESA")
+ (call) VESA 2.0 request signature ("VBE2"), required to receive
+ version 2.0 info
+ 04h WORD VESA version number (one-digit minor version -- 0102h = v1.2)
+ 06h DWORD pointer to OEM name
+ "761295520" for ATI
+ 0Ah DWORD capabilities flags (see #00078)
+ 0Eh DWORD pointer to list of supported VESA and OEM video modes
+ (list of words terminated with FFFFh)
+ 12h WORD total amount of video memory in 64K blocks
+---VBE v1.x ---
+ 14h 236 BYTEs reserved
+---VBE v2.0 ---
+ 14h WORD OEM software version (BCD, high byte = major, low byte = minor)
+ 16h DWORD pointer to vendor name
+ 1Ah DWORD pointer to product name
+ 1Eh DWORD pointer to product revision string
+ 22h WORD (if capabilities bit 3 set) VBE/AF version (BCD)
+ 0100h for v1.0P
+ 24h DWORD (if capabilities bit 3 set) pointer to list of supported
+ accelerated video modes (list of words terminated with FFFFh)
+ 28h 216 BYTEs reserved for VBE implementation
+100h 256 BYTEs OEM scratchpad (for OEM strings, etc.)
+Notes: the list of supported video modes is stored in the reserved portion of
+ the SuperVGA information record by some implementations, and it may
+ thus be necessary to either copy the mode list or use a different
+ buffer for all subsequent VESA calls
+ not all of the video modes in the list of mode numbers may be
+ supported, e.g. if they require more memory than currently installed
+ or are not supported by the attached monitor. Check any mode you
+ intend to use through AX=4F01h first.
+ the 1.1 VESA document specifies 242 reserved bytes at the end, so the
+ buffer should be 262 bytes to ensure that it is not overrun; for
+ v2.0, the buffer should be 512 bytes
+ the S3 specific video modes will most likely follow the FFFFh
+ terminator at the end of the standard modes. A search must then
+ be made to find them, FFFFh will also terminate this second list
+ in some cases, only a "stub" VBE may be present, supporting only
+ AX=4F00h; this case may be assumed if the list of supported video
+ modes is empty (consisting of a single word of FFFFh)
+
+Bitfields for VESA capabilities:
+Bit(s) Description (Table 00078)
+ 0 DAC can be switched into 8-bit mode
+ 1 non-VGA controller
+ 2 programmed DAC with blank bit (i.e. only during blanking interval)
+ 3 (VBE v3.0) controller supports hardware stereoscopic signalling
+ 3 controller supports VBE/AF v1.0P extensions
+ 4 (VBE v3.0) if bit 3 set:
+ =0 stereo signalling via external VESA stereo connector
+ =1 stereo signalling via VESA EVC connector
+ 4 (VBE/AF v1.0P) must call EnableDirectAccess to access framebuffer
+ 5 (VBE/AF v1.0P) controller supports hardware mouse cursor
+ 6 (VBE/AF v1.0P) controller supports hardware clipping
+ 7 (VBE/AF v1.0P) controller supports transparent BitBLT
+ 8-31 reserved (0)
+SeeAlso: #00077,AX=4F09h
+--------V-104F01-----------------------------
+INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION
+ AX = 4F01h
+ CX = SuperVGA video mode (see #04082 for bitfields)
+ ES:DI -> 256-byte buffer for mode information (see #00079)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ES:DI buffer filled
+ 01h failed
+Desc: determine the attributes of the specified video mode
+SeeAlso: AX=4F00h,AX=4F02h
+
+Bitfields for VESA/VBE video mode number:
+Bit(s) Description (Table 04082)
+ 15 preserve display memory on mode change
+ 14 (VBE v2.0+) use linear (flat) frame buffer
+ 13 (VBE/AF 1.0P) VBE/AF initializes accelerator hardware
+ 12 reserved for VBE/AF
+ 11 (VBE v3.0) user user-specified CRTC refresh rate values
+ 10-9 reserved for future expansion
+ 8-0 video mode number (0xxh are non-VESA modes, 1xxh are VESA-defined)
+
+Format of VESA SuperVGA mode information:
+Offset Size Description (Table 00079)
+ 00h WORD mode attributes (see #00080)
+ 02h BYTE window attributes, window A (see #00081)
+ 03h BYTE window attributes, window B (see #00081)
+ 04h WORD window granularity in KB
+ 06h WORD window size in KB
+ 08h WORD start segment of window A (0000h if not supported)
+ 0Ah WORD start segment of window B (0000h if not supported)
+ 0Ch DWORD -> FAR window positioning function (equivalent to AX=4F05h)
+ 10h WORD bytes per scan line
+---remainder is optional for VESA modes in v1.0/1.1, needed for OEM modes---
+ 12h WORD width in pixels (graphics) or characters (text)
+ 14h WORD height in pixels (graphics) or characters (text)
+ 16h BYTE width of character cell in pixels
+ 17h BYTE height of character cell in pixels
+ 18h BYTE number of memory planes
+ 19h BYTE number of bits per pixel
+ 1Ah BYTE number of banks
+ 1Bh BYTE memory model type (see #00082)
+ 1Ch BYTE size of bank in KB
+ 1Dh BYTE number of image pages (less one) that will fit in video RAM
+ 1Eh BYTE reserved (00h for VBE 1.0-2.0, 01h for VBE 3.0)
+---VBE v1.2+ ---
+ 1Fh BYTE red mask size
+ 20h BYTE red field position
+ 21h BYTE green mask size
+ 22h BYTE green field size
+ 23h BYTE blue mask size
+ 24h BYTE blue field size
+ 25h BYTE reserved mask size
+ 26h BYTE reserved mask position
+ 27h BYTE direct color mode info
+ bit 0: color ramp is programmable
+ bit 1: bytes in reserved field may be used by application
+---VBE v2.0+ ---
+ 28h DWORD physical address of linear video buffer
+ 2Ch DWORD pointer to start of offscreen memory
+ 30h WORD KB of offscreen memory
+---VBE v3.0 ---
+ 32h WORD bytes per scan line in linear modes
+ 34h BYTE number of images (less one) for banked video modes
+ 35h BYTE number of images (less one) for linear video modes
+ 36h BYTE linear modes: size of direct color red mask (in bits)
+ 37h BYTE linear modes: bit position of red mask LSB (e.g. shift count)
+ 38h BYTE linear modes: size of direct color green mask (in bits)
+ 39h BYTE linear modes: bit position of green mask LSB (e.g. shift count)
+ 3Ah BYTE linear modes: size of direct color blue mask (in bits)
+ 3Bh BYTE linear modes: bit position of blue mask LSB (e.g. shift count)
+ 3Ch BYTE linear modes: size of direct color reserved mask (in bits)
+ 3Dh BYTE linear modes: bit position of reserved mask LSB
+ 3Eh DWORD maximum pixel clock for graphics video mode, in Hz
+ 42h 190 BYTEs reserved (0)
+Note: while VBE 1.1 and higher will zero out all unused bytes of the buffer,
+ v1.0 did not, so applications that want to be backward compatible
+ should clear the buffer before calling
+
+Bitfields for VESA SuperVGA mode attributes:
+Bit(s) Description (Table 00080)
+ 0 mode supported by present hardware configuration
+ 1 optional information available (must be =1 for VBE v1.2+)
+ 2 BIOS output supported
+ 3 set if color, clear if monochrome
+ 4 set if graphics mode, clear if text mode
+---VBE v2.0+ ---
+ 5 mode is not VGA-compatible
+ 6 bank-switched mode not supported
+ 7 linear framebuffer mode supported
+ 8 double-scan mode available (e.g. 320x200 and 320x240)
+---VBE v3.0 ---
+ 9 interlaced mode available
+ 10 hardware supports triple buffering
+ 11 hardware supports stereoscopic display
+ 12 dual display start address support
+ 13-15 reserved
+---VBE/AF v1.0P---
+ 9 application must call EnableDirectAccess before calling bank-switching
+ functions
+SeeAlso: #00079
+
+Bitfields for VESA SuperVGA window attributes:
+Bit(s) Description (Table 00081)
+ 0 exists
+ 1 readable
+ 2 writable
+ 3-7 reserved
+SeeAlso: #00079
+
+(Table 00082)
+Values for VESA SuperVGA memory model type:
+ 00h text
+ 01h CGA graphics
+ 02h HGC graphics
+ 03h 16-color (EGA) graphics
+ 04h packed pixel graphics
+ 05h "sequ 256" (non-chain 4) graphics
+ 06h direct color (HiColor, 24-bit color)
+ 07h YUV (luminance-chrominance, also called YIQ)
+ 08h-0Fh reserved for VESA
+ 10h-FFh OEM memory models
+SeeAlso: #00079
+--------V-104F02-----------------------------
+INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE
+ AX = 4F02h
+ BX = new video mode (see #04082,#00083,#00084)
+ ES:DI -> (VBE 3.0+) CRTC information block, bit mode bit 11 set
+ (see #04083)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+Notes: bit 13 may only be set if the video mode is present in the list of
+ accelerated video modes returned by AX=4F00h
+ if the DAC supports both 8 bits per primary color and 6 bits, it will
+ be reset to 6 bits after a mode set; use AX=4F08h to restore 8 bits
+SeeAlso: AX=4E03h,AX=4F00h,AX=4F01h,AX=4F03h,AX=4F08h
+
+(Table 00083)
+Values for VESA video mode:
+ 00h-FFh OEM video modes (see #00010 at AH=00h)
+ 100h 640x400x256
+ 101h 640x480x256
+ 102h 800x600x16
+ 103h 800x600x256
+ 104h 1024x768x16
+ 105h 1024x768x256
+ 106h 1280x1024x16
+ 107h 1280x1024x256
+ 108h 80x60 text
+ 109h 132x25 text
+ 10Ah 132x43 text
+ 10Bh 132x50 text
+ 10Ch 132x60 text
+---VBE v1.2+ ---
+ 10Dh 320x200x32K
+ 10Eh 320x200x64K
+ 10Fh 320x200x16M
+ 110h 640x480x32K
+ 111h 640x480x64K
+ 112h 640x480x16M
+ 113h 800x600x32K
+ 114h 800x600x64K
+ 115h 800x600x16M
+ 116h 1024x768x32K
+ 117h 1024x768x64K
+ 118h 1024x768x16M
+ 119h 1280x1024x32K (1:5:5:5)
+ 11Ah 1280x1024x64K (5:6:5)
+ 11Bh 1280x1024x16M
+---VBE 2.0+ ---
+ 120h 1600x1200x256
+ 121h 1600x1200x32K
+ 122h 1600x1200x64K
+81FFh special full-memory access mode
+Notes: the special mode 81FFh preserves the contents of the video memory and
+ gives access to all of the memory; VESA recommends that the special
+ mode be a packed-pixel mode. For VBE 2.0+, it is required that the
+ VBE implement the mode, but not place it in the list of available
+ modes (mode information for this mode can be queried directly,
+ however).
+ as of VBE 2.0, VESA will no longer define video mode numbers
+SeeAlso: #00010,#00011,#00084,#00191
+Index: video modes;VESA
+
+(Table 00084)
+Values for S3 OEM video mode:
+ 201h 640x480x256
+ 202h 800x600x16
+ 203h 800x600x256
+ 204h 1024x768x16
+ 205h 1024x768x256
+ 206h 1280x960x16
+ 207h 1152x864x256 (Diamond Stealth 64)
+ 208h 1280x1024x16
+ 209h 1152x864x32K
+ 20Ah 1152x864x64K (Diamond Stealth 64)
+ 20Bh 1152x864x4G
+ 211h 640x480x64K (Diamond Stealth 24)
+ 211h 640x400x4G (Diamond Stealth64 Video / Stealth64 Graphics)
+ 212h 640x480x16M (Diamond Stealth 24)
+ 301h 640x480x32K
+Note: these modes are only available on video cards using S3's VESA driver
+SeeAlso: #00083,#00191,#00732 at INT 1A/AX=B102h
+Index: video modes;S3
+
+Format of VESA VBE CRTC Information Block:
+Offset Size Description (Table 04083)
+ 00h WORD total number of pixels horizontally
+ 02h WORD horizontal sync start (in pixels)
+ 04h WORD horizontal sync end (in pixels)
+ 06h WORD total number of scan lines
+ 08h WORD vertical sync start (in scan lines)
+ 0Ah WORD vertical sync end (in scan lines)
+ 0Ch BYTE flags (see #04084)
+ 0Dh DWORD pixel clock, in Hz
+ 11h WORD refresh rate, in 0.01 Hz units
+ this field MUST be set to pixel_clock / (HTotal * VTotal),
+ even though it may not actually be used by the VBE
+ implementation
+ 13h 40 BYTEs reserved
+
+Bitfields for VESA VBE CRTC Information Block flags:
+Bit(s) Description (Table 04084)
+ 0 enable double scanning
+ 1 enable interlacing
+ 2 horizontal sync polarity (0 positive, 1 negative)
+ 3 vertical sync polarity (0 positive, 1 negative)
+SeeAlso: #04083
+--------V-104F03-----------------------------
+INT 10 - VESA SuperVGA BIOS - GET CURRENT VIDEO MODE
+ AX = 4F03h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ BX = video mode (see #00083,#00084)
+ bit 13: VBE/AF v1.0P accelerated video mode
+ bit 14: linear frame buffer enabled (VBE v2.0+)
+ bit 15: don't clear video memory
+ 01h failed
+SeeAlso: AH=0Fh,AX=4E04h,AX=4F02h
+--------V-104F04-----------------------------
+INT 10 - VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE
+ AX = 4F04h
+ DL = subfunction
+ 00h get state buffer size
+ Return: BX = number of 64-byte blocks needed
+ 01h save video states
+ ES:BX -> buffer
+ 02h restore video states
+ ES:BX -> buffer
+ CX = states to save/restore (see #00085)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AH=1Ch,AX=5F90h,AX=5FA0h
+
+Bitfields for VESA SuperVGA states to save/restore:
+Bit(s) Description (Table 00085)
+ 0 video hardware state
+ 1 video BIOS data state
+ 2 video DAC state
+ 3 SuperVGA register state
+SeeAlso: #00048,#00186
+--------V-104F05-----------------------------
+INT 10 - VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL
+ AX = 4F05h
+ BH = subfunction
+ 00h select video memory window
+ DX = window address in video memory (in granularity units)
+ 01h get video memory window
+ Return: DX = window address in video memory (in gran. units)
+ BL = window number
+ 00h window A
+ 01h window B
+ ES = selector for memory-mapped registers (VBE 2.0+, when called from
+ 32-bit protected mode)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+Note: when using an accelerated video mode under VBE/AF v1.0P, the
+ application must call EnableDirectAccess before switching banks if
+ bit 9 of the video mode attributes flag is set (see #00080)
+BUG: Phoenix S3 Trio64V+ v1.02-02 reportedly returns garbage in DX for
+ subfunction 01h
+SeeAlso: AX=4F01h,AX=4F06h,AX=4F07h,AX=7000h/BX=0004h
+--------V-104F06-----------------------------
+INT 10 - VESA SuperVGA BIOS v1.1+ - GET/SET LOGICAL SCAN LINE LENGTH (PIXELS)
+ AX = 4F06h
+ BL = subfunction
+ 00h set scan line length
+ CX = desired width in pixels
+ 01h get scan line length
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+ BX = bytes per scan line
+ CX = number of pixels per scan line
+ DX = maximum number of scan lines
+Notes: if the desired width is not achievable, the next larger width will be
+ set
+ the scan line may be wider than the visible area of the screen
+ this function is valid in text modes, provided that pixel values are
+ multiplied by the character cell width/height
+SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h/BL=02h,AX=4F06h/BL=03h,AX=4F07h
+--------V-104F06BL02-------------------------
+INT 10 - VESA SuperVGA BIOS v2.0+ - SET LOGICAL SCAN LINE LENGTH (BYTES)
+ AX = 4F06h
+ BL = 02h
+ CX = desired scanline width in bytes
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+ BX = bytes per scan line
+ CX = number of pixels per scan line
+ DX = maximum number of scan lines
+Notes: if the desired width is not achievable, the next larger width will be
+ set
+ the scan line may be wider than the visible area of the screen
+ this function is valid in text modes, provided that pixel values are
+ multiplied by the character cell width/height
+SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h,AX=4F06h/BL=03h,AX=4F07h
+--------V-104F06BL03-------------------------
+INT 10 - VESA SuperVGA BIOS v2.0+ - GET MAXIMUM SCAN LINE LENGTH
+ AX = 4F06h
+ BL = 03h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+ BX = maximum bytes per scan line
+ CX = maximum number of pixels per scan line
+Notes: this function is valid in text modes, provided that pixel values are
+ multiplied by the character cell width/height
+SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h,AX=4F06h/BL=02h,AX=4F07h
+--------V-104F07-----------------------------
+INT 10 - VESA SuperVGA BIOS v1.1+ - GET/SET DISPLAY START
+ AX = 4F07h
+ BL = subfunction
+ 00h,80h set display start
+ CX = leftmost displayed pixel in scan line
+ DX = first displayed scan line
+ 01h get display start
+ Return: BH = 00h
+ CX = leftmost displayed pixel in scan line
+ DX = first displayed scan line
+ BH = 00h (reserved)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+Notes: this function is valid in text modes, provided that values are
+ multiplied by the character cell width/height
+ subfunction 80h waits until vertical retrace before changing the
+ display start address (VBE v2.0+)
+SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h
+--------V-104F07-----------------------------
+INT 10 - VESA SuperVGA BIOS v3.0+ - SCHEDULED DISPLAY START
+ AX = 4F07h
+ BL = subfunction
+ 02h,82h (VBE v3.0) schedule display start at next vertical retrace
+ ECX = display start address in bytes
+ 03h,83h schedule stereoscopic display start
+ ECX = left image start address (in bytes)
+ EDX = right image start address (in bytes)
+ 04h get scheduled display start status
+ Return: CX = start status
+ (00h no display flip, else display has flipped)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=4F07h"DISPLAY START",AX=4F07h"STEREOSCOPIC"
+--------V-104F07-----------------------------
+INT 10 - VESA SuperVGA BIOS v3.0+ - ENABLE/DISABLE STEREOSCOPIC MODE
+ AX = 4F07h
+ BL = subfunction
+ 05h enable stereoscopic mode
+ 06h disable stereoscopic mode
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+Note: when stereoscopic mode is enabled, the display start address will
+ automatically alternate between the left and right images on every
+ vertical retrace
+SeeAlso: AX=4F07h"DISPLAY START",AX=4F07h"SCHEDULED"
+--------V-104F08-----------------------------
+INT 10 - VESA SuperVGA BIOS v1.2+ - GET/SET DAC PALETTE CONTROL
+ AX = 4F08h
+ BL = subfunction
+ 00h set DAC palette width
+ BH = desired number of bits per primary color
+ 01h get DAC palette width
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ BH = current number of bits per primary (06h = standard VGA)
+ 01h failed
+--------V-104F09-----------------------------
+INT 10 - VESA SuperVGA BIOS v2.0+ - GET/SET PALETTE ENTRIES
+ AX = 4F09h
+ BL = subfunction
+ 00h set (primary) palette
+ 01h get (primary) palette
+ 02h set secondary palette data
+ 03h get secondary palette data
+ 80h set palette during vertical retrace
+ CX = number of entries to change
+ DX = starting palette index
+ ES:DI -> palette buffer, array of DAC entries (see #00086)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=4F0Ah,AX=D000h"S3VBE"
+
+Format of VESA VBE palette entry:
+Offset Size Description (Table 00086)
+ 00h BYTE red
+ 01h BYTE green
+ 02h BYTE blue
+ 03h BYTE alpha or alignment byte
+--------V-104F0ABL00-------------------------
+INT 10 - VESA SuperVGA BIOS v2.0+ - GET PROTECTED-MODE INTERFACE
+ AX = 4F0Ah
+ BL = 00h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ES:DI -> protected-mode table (see #00087)
+ CX = length of table in bytes, included protected-mode code
+ 01h failed
+SeeAlso: AX=4F00h,AX=4F05h,AX=4F07h,AX=4F09h
+
+Format of VESA VBE 2.0 protected-mode table:
+Offset Size Description (Table 00087)
+ 00h WORD offset (within table) of protected-mode code for Function 5
+ (Set Window)
+ 02h WORD offset of protected-mode code for Function 7 (Set Disp Start)
+ 04h WORD offset of protected-mode code for Function 9 (Set Primary
+ Palette)
+ 06h WORD offset (within table) of list of I/O ports and memory locations
+ for which I/O privilege may be required in protected mode
+ (0000h if no list) (see #04085)
+ 08h var code and optional port/memory list
+
+Format of VESA VBE 2.0+ protected-mode port/memory list:
+Offset Size Description (Table 04085)
+ 00h WORD I/O port number
+ ...
+ WORD FFFFh marking end of I/O port list
+ DWORD memory region base address
+ WORD memory region limit (one less than length)
+ WORD FFFFh marking end of memory region list
+Note: the memory region is optional; if not present, there will be a word
+ of FFFFh immediately following the FFFFh marking the end of the I/O
+ port list
+SeeAlso: #00087
+--------V-104F0A-----------------------------
+INT 10 O - VESA SuperVGA BIOS v2.0 beta - GET PROTECTED-MODE CODE
+ AX = 4F0Ah
+ BX = function to be copied (see #00088)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ CX = number of bytes to copy
+ ES:DI -> code for requested function
+ 01h failed
+SeeAlso: AX=4F09h,AX=D000h"S3VBE"
+
+(Table 00088)
+Values for VESA VBE protected-mode function identifiers:
+ 0001h set bank (see AX=4F05h)
+ 0002h set display start (see AX=4F07h)
+ 0003h set palette (see AX=4F09h)
+--------V-104F0BBL00-------------------------
+INT 10 - VESA SuperVGA BIOS v3.0 - GET NEAREST PIXEL CLOCK
+ AX = 4F0Bh
+ BL = 00h get closest pixel clock
+ ECX = requested clock frequency in Hz
+ DX = video mode number
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ECX = nearest clock rate
+ 01h failed
+--------V-104F0B-----------------------------
+INT 10 - VESA SuperVGA BIOS - GET VBE/AF v1.0P DEVICE CONTEXT BUFFER
+ AX = 4F0Bh
+ BL = subfunction
+ 00h get length of device context buffer
+ 01h initialize device context buffer
+ ES:DI -> real-mode address of buffer (see #00089)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ CX = number of bytes required for buffer (if BL=00h on entry)
+ ES:DI buffer initialized (if BL=01h on entry)
+ 01h failed
+Note: this interface description is derived from the draft VBE/AF proposal
+ (version 1.0P, document revsion 0.12P, dated 13jan95)
+SeeAlso: AX=4F00h,AX=4F01h,AX=4F17h
+
+Format of VBE/AF v1.0P Device Context buffer:
+Offset Size Description (Table 00089)
+ 00h WORD maximum X coordinate in frame buffer (0 = left edge)
+ Note: application must never pass X coordinate greater than
+ this value to the SetClipRect function (values are
+ NOT range-checked!)
+ 02h WORD maximum Y coordinate in frame buffer (0 = top edge)
+ Note: application must never pass Y coordinate greater than
+ this value to the SetClipRect function
+ 04h DWORD -> "SetForeColor" to set foreground color/mix (see #00091)
+ 08h DWORD -> "SetBackColor" to set background color/mix (see #00092)
+ 0Ch DWORD -> "SetClipRect" set hardware clipping rectangle (see #00093)
+ 10h DWORD -> function "DrawScan" to draw a single scan line
+ 14h DWORD -> function "DrawScanList" to draw a list of scan lines
+ 18h DWORD -> function "DrawRect" to draw a solid rectangle
+ 1Ch DWORD -> function "DrawLine" to draw a solid line
+ 20h DWORD -> function "DrawPattScan" to draw a patterned scan line
+ 24h DWORD -> function "BitBlt" to perform screen-to-screen BitBLT
+ 28h DWORD -> "TransBitBlt" to perform transparent screen-to-screen BitBLT
+ 2Ch DWORD -> "MonoBitBlt" to monochrome expansion screen-to-screen BitBLT
+ 30h DWORD -> function "SetCursor" to download hardware cursor image
+ 34h DWORD -> function "SetCursorPos" to set hardware cursor position
+ 38h DWORD -> function "SetCursorColor" to set hardware cursor color
+ 3Ch DWORD -> function "ShowCursor" to show/hide hardware cursor
+ 40h DWORD -> function "WaitTillIdle" to wait until graphics engine idle
+ 44h DWORD -> "EnableDirectAccess" to enable direct framebuffer access
+ 48h DWORD -> "DisableDirectAccess" to disable direct framebuffer access
+ 4Ch DWORD -> "BankSwitchCB" bank-switching callback function
+ (set by application, may simply point at 32-bit VBE 2.0 bank
+ switching entry point)
+ 50h WORD "VidMemSel" selector for video memory (must be set by app)
+ 52h WORD "IOPortsOff" offset of I/O ports table in context buffer
+ 54h WORD "IOMemoryOff" offset of I/O memory table in context buffer
+ 56h WORD "IOMemSel1" selector for first I/O memory area specified by
+ I/O memory table (must be set by application)
+ 58h WORD "IOMemSel2" selector for second I/O memory area
+ 5Ah WORD "IOMemSel3" selector for third I/O memory area
+ 5Ch WORD "IOMemSel4" selector for fourth I/O memory area
+ 5Eh N BYTEs device-specific state buffer
+ N WORDs I/O port access table (list of ports, last entry is FFFFh)
+ N DWORDs I/O memory access table (list of physical-address/length pairs,
+ last entry is FFFFFFFFh)
+ N BYTEs 32-bit code for VBE/AF v1.0P function
+Notes: all function pointers are offsets into the 32-bit code within the
+ context buffer, and should be updated to point at the actual
+ functions after the application has copied the buffer from the
+ real-mode memory used for the interrupt call into its own flat-model
+ memory space
+ any functions which are not supported by the hardware have function
+ pointers which are set to 00000000h initially
+
+(Table 00090)
+Values for VBE/AF v1.0P color mixing mode:
+ 00h replace
+ 01h XOR with existing pixel
+ 02h OR with existing pixel
+ 03h AND with existing pixel
+SeeAlso: #00091,#00090
+
+(Table 00091)
+Call VBE/AF v1.0P function "SetForeColor" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = new foreground color (format varies by video mode)
+ BL = new foreground mixing mode (see #00090)
+SeeAlso: #00089,#00092,#00107
+
+(Table 00092)
+Call VBE/AF v1.0P function "SetbackColor" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = new background color (format varies by video mode)
+ BL = new background mixing mode (see #00090)
+SeeAlso: #00089,#00091,#00093
+
+(Table 00093)
+Call VBE/AF v1.0P function "SetClipRect" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = left clipping coordinate
+ EBX = top clipping coordinate
+ ECX = right clipping coordinate
+ EDX = bottom clipping coordinate
+SeeAlso: #00089,#00092,#00094,#00107
+
+(Table 00094)
+Call VBE/AF v1.0P function "DrawScan" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = X1 coordinate
+ EBX = Y coordinate
+ ECX = X2 coordinate
+Desc: draw a solid horizontal line from (X1,Y) to (X2,Y) in the currently-
+ active foreground color and mix, omitting the pixel at the largest
+ X coordinate
+SeeAlso: #00089,#00093,#00095,#00098,#00107
+
+(Table 00095)
+Call VBE/AF v1.0P function "DrawScanList" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = Y coordinate of first line
+ EBX = length of scan list
+ DS:ESI -> scanline list X coordinates (2N WORDs)
+Desc: draw multiple solid horizontal lines at successive Y coordinates,
+ using the currently-active foreground color and mix, omitting the
+ pixel at the largest X coordinate for each line
+Note: the scanline list consists of pairs of X coordinates; because the
+ last pixel is omitted, a scanline will be skipped if X1==X2
+SeeAlso: #00089,#00094,#00096,#00107
+
+(Table 00096)
+Call VBE/AF v1.0P function "DrawRect" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = left coordinate
+ EBX = top coordinate
+ ECX = right coordinate
+ EDX = bottom coordinate
+Desc: draw a solid rectangle in the currently-active foreground color and
+ mix, omitting the rightmost X coordinate and bottom-most scan line
+Note: results are undefined if EAX>ECX or EBX>EDX; nothing will be drawn if
+ EAX=ECX or EBX=EDX
+SeeAlso: #00089,#00094,#00095,#00097
+
+(Table 00097)
+Call VBE/AF v1.0P function "DrawLine" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = ??? (specified this way in the draft documentation!)
+ EBX = ???
+ ECX = ???
+ EDX = ???
+ ESI = ???
+Desc: draw a solid line in the currently-active foreground color and mix,
+ given the Bresenham parameters
+SeeAlso: #00089,#00094,#00096,#00098
+
+(Table 00098)
+Call VBE/AF v1.0P function "DrawPattScan" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = X1 coordinate
+ EBX = Y coordinate
+ ECX = X2 coordinate
+ DL = 8-bit stipple pattern
+Desc: draw a patterned horizontal line from (X1,Y) to (X2,Y) in the
+ currently-active foreground color and mix, omitting the pixel at
+ the largest X coordinate
+Note: for each pixel in the line, if DL bit (X mod 8) is set, the pixel is
+ drawn, and left untouched if the bit is clear
+SeeAlso: #00089,#00096,#00097,#00094,#00099,#00107
+
+(Table 00099)
+Call VBE/AF v1.0P function "BitBlt" with:
+ ES:EDI -> device context buffer (see #00089)
+ DS:ESI -> BitBlt parameter block (see #00100)
+ BL = mix operation
+ 00h replace
+ 01h XOR
+ 02h OR
+ 03h AND
+SeeAlso: #00089,#00094,#00098,#00101,#00107
+
+Format of VBE/AF BitBlt parameter block:
+Offset Size Description (Table 00100)
+ 00h WORD left coordinate of source rectangle
+ 02h WORD top coordinate of source rectangle
+ 04h WORD right coordinate of source rectangle
+ 06h WORD bottom coordinate of source rectangle
+ 08h WORD left coordinate of destination rectangle
+ 0Ah WORD top coordinate of destination rectangle
+ 0Ch BYTE horizontal direction: 00h = decrement X, 01h = increment X
+ 0Dh BYTE vertical direction: 00h = decrement Y, 01h = increment Y
+Notes: the rightmost pixel(s) and bottom-most scan line are not copied
+ the horizontal/vertical direction flags are used to ensure correct
+ copies when the source and destination rectangles overlap
+SeeAlso: #00099
+
+(Table 00101)
+Call VBE/AF v1.0P function "TransBitBlt" with:
+ ES:EDI -> device context buffer (see #00089)
+ DS:ESI -> BitBlt parameter block (see #00100)
+ BL = mix operation
+ 00h replace
+ 01h XOR
+ 02h OR
+ 03h AND
+ ECX = transparent color
+Desc: copy a rectangular area from one location to another, treating pixels
+ with the specified color as transparent (leaving the destination
+ unchanged)
+SeeAlso: #00089,#00099,#00102,#00107
+
+(Table 00102)
+Call VBE/AF v1.0P function "MonoBitBlt" with:
+ ES:EDI -> device context buffer (see #00089)
+ DS:ESI -> BitBlt parameter block (see #00100)
+ BL = mix operation
+ 00h replace
+ 01h XOR
+ 02h OR
+ 03h AND
+ BH = bit-plane from which to read
+Desc: copy a rectangular area from one location to another, expanding a
+ single bit of each source pixel
+SeeAlso: #00089,#00099,#00101
+
+(Table 00103)
+Call VBE/AF v1.0P function "SetCursor" with:
+ ES:EDI -> device context buffer (see #00089)
+ DS -> application's data segment
+ ESI -> 32x32 cursor data, in Windows 3.1 cursor-file format
+ (32 DWORDs of XOR mask followed by 32 DWORDs of AND mask)
+SeeAlso: #00089,#00094,#00104,#00105
+
+(Table 00104)
+Call VBE/AF v1.0P function "SetCursorPos" with:
+ ES:EDI -> device context buffer (see #00089)
+ EAX = cursor X coordinate
+ EBX = cursor Y coordinate
+ CL = cursor's X hotspot
+ CH = cursor's Y hotspot
+SeeAlso: #00089,#00103,#00105
+
+(Table 00105)
+Call VBE/AF v1.0P function "SetCursorColor" with:
+ ES:EDI -> device context buffer (see #00089)
+ AL = 8-bit color index, or color's Red value
+ AH = color's Green value (16-bpp, 24-bpp, 32-bpp modes)
+ BL = color's Blue value (16-bpp, 24-bpp, 32-bpp modes)
+SeeAlso: #00089,#00103,#00104,#00106
+
+(Table 00106)
+Call VBE/AF v1.0P function "ShowCursor" with:
+ ES:EDI -> device context buffer (see #00089)
+ AL = new visibility (00h hide cursor, 01h show cursor)
+SeeAlso: #00089,#00103,#00104,#00105
+
+(Table 00107)
+Call VBE/AF v1.0P function "WaitTillIdle" with:
+ ES:EDI -> device context buffer (see #00089)
+Desc: pause until the hardware accelerator has completed all pending
+ operations
+SeeAlso: #00089,#00108,#00109
+
+(Table 00108)
+Call VBE/AF v1.0P function "EnableDirectAccess" with:
+ ES:EDI -> device context buffer (see #00089)
+SeeAlso: #00089,#00109,#00107,AX=4F05h,#00078,#00080
+
+(Table 00109)
+Call VBE/AF v1.0P function "DisableDirectAccess" with:
+ ES:EDI -> device context buffer (see #00089)
+SeeAlso: #00089,#00108
+--------V-104F0C-----------------------------
+INT 10 - VESA SuperVGA BIOS - RESERVED FOR FUTURE SVGA FUNCTIONS
+ AX = 4F0Ch-4F0Fh
+SeeAlso: AX=4F00h
+--------V-104F0B-----------------------------
+INT 10 - Diamond Viper V330 - ???
+ AX = 4F0Bh
+ ECX = ???
+ ???
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ECX = ???
+ ???
+ 01h failed
+Note: in BIOS v1.62, ECX is in multiples of 10000 (decimal) for both input
+ and output, and this function never fails
+--------p-104F10BL00-------------------------
+INT 10 - VESA VBE/PM (Power Management) v1.0+ - GET CAPABILITIES
+ AX = 4F10h
+ BL = 00h
+ ES:DI = 0000h:0000h (reserved for future use as pointer to info block)
+Return: AL = 4Fh if function supported (installed)
+ AH = call status
+ 00h successful
+ else failed
+ ---if successful---
+ BL = VBE/PM version (bits 7-4: major, bits 3-0: minor)
+ BH = supported states (see #00110)
+ ES:DI unchanged
+Index: installation check;VESA VBE/Power Management|VESA DPMS
+SeeAlso: AX=4F10h/BL=01h,AX=4F10h/BL=02h
+
+Bitfields for VESA VBE/PM supported power states:
+Bit(s) Description (Table 00110)
+ 0 standby
+ 1 suspend
+ 2 off
+ 3 reduced on
+--------p-104F10BL01-------------------------
+INT 10 - VESA VBE/PM (Power Management) v1.0+ - SET DISPLAY POWER STATE
+ AX = 4F10h
+ BL = 01h
+ BH = new state (see #00111)
+Return: AL = 4Fh if function supported
+ AH = call status
+ 00h successful
+ else failed
+SeeAlso: AX=4F10h/BL=00h,AX=4F10h/BL=02h,AX=A00Ch
+
+(Table 00111)
+Values for VESA VBE/PM power state:
+ 00h On
+ 01h standby
+ 02h suspend
+ 04h Off
+ 08h reduced On (for flat screens)
+--------p-104F10BL02-------------------------
+INT 10 - VESA VBE/PM (Power Management) v1.0+ - GET DISPLAY POWER STATE
+ AX = 4F10h
+ BL = 02h
+Return: AL = 4Fh if function supported
+ AH = call status
+ 00h successful
+ BH = current power state (see #00111)
+ else failed
+SeeAlso: AX=4F10h/BL=00h,AX=4F10h/BL=01h,AX=A00Dh
+--------V-104F11-----------------------------
+INT 10 - VESA VBE/FP (Flat Panel Interface) - API
+ AX = 4F11h
+ BL = function
+ 00h installation check / get capabilities
+ other registers vary by function
+Return: varies by function
+--------V-104F12-----------------------------
+INT 10 - VESA VBE/CI (Cursor Interface) - API
+ AX = 4F12h
+ BL = function
+ other registers vary by function
+Return: varies by function
+SeeAlso: AX=4F4Dh
+--------s-104F13BX0000-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - INSTALLATION CHECK
+ AX = 4F13h
+ BX = 0000h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ BX = version (0010h for 1.00 -- note nonstandard value!)
+ 01h failed
+SeeAlso: AX=4F13h/BX=0001h,AX=4F13h/BX=0005h
+--------s-104F13BX0001-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - LOCATE DEVICE
+ AX = 4F13h
+ BX = 0001h
+ CX = 0000h ???
+ DX = type of device
+ 0001h Wave device
+ 0002h MIDI device
+ 0003h Volume device
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ CX = handle [returned 1 for DX=1 and 3, and 2 for DX=2]
+ 01h failed
+SeeAlso: AX=4F13h/BX=0000h,AX=4F13h/BX=0002h
+--------s-104F13BX0002-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - QUERY DEVICE
+ AX = 4F13h
+ BX = 0002h
+ CX = handle
+ DX = query
+ 0001h return length of GeneralDeviceClass
+ 0002h return copy of GeneralDeviceClass (see #00112)
+ 0003h return length of Volume Info Structure
+ 0004h return copy of Volume Info Structure (see #00122)
+ 0005h return length of Volume Services Structure
+ 0006h return copy of Volume Services Structure (see #00124)
+ 0007h-000Fh reserved
+ 0010h-FFFFh device-specific
+ SI:DI -> buffer (functions 0002h,0004h,0006h)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ SI:DI = length (functions 1,3,5)
+ SI:DI buffer filled (functions 2,4,6)
+ 01h failed
+Note: functions 0003h to 0006h are only supported for the Volume device
+
+Format of GeneralDeviceClass structure:
+Offset Size Description (Table 00112)
+ 00h 4 BYTEs name of the structure ("GENI")
+ 04h DWORD structure length
+ 08h WORD type of device (1=Wave, 2=MIDI)
+ 0Ah WORD version of VESA driver support (0100h for 1.00)
+ 10h var for CX=handle for Wave device:
+ Wave Info structure (see #00113)
+ some bytes ???
+ for CX=handle for MIDI device:
+ MIDI Info Structure (see #00118)
+ first 8 bytes of MIDI Service Structure ???
+SeeAlso: #00122,#00124
+
+Format of WAVE Info Structure:
+Offset Size Description (Table 00113)
+ 00h 4 BYTEs name of the structure ("WAVI")
+ 04h DWORD structure length [0000007Eh]
+ 08h DWORD driver software version [00000003h]
+ 0Ch 32 BYTEs vendor name, etc. (ASCIZ string)
+ 2Ch 32 BYTEs vendor product name
+ 4Ch 32 BYTEs vendor chip/hardware description
+ 6Ch BYTE installed board number
+ 6Dh 3 BYTEs unused data
+ 70h DWORD feature bits (see #00114)
+ 74h WORD user determined preference field
+ 76h WORD memory required for driver use [0200h]
+ 78h WORD number of timer tick callbacks per second [0000h]
+ 7Ah WORD channels: 1 = mono, 2 = stereo
+ stereo is assumed to be interleaved data
+ 7Ch WORD bitfield of max sample sizes (see #00115)
+SeeAlso: #00118
+
+Bitfields for Wave feature bits:
+Bit(s) Description (Table 00114)
+ 0 8000hz Mono Playback
+ 1 8000hz Mono Record
+ 2 8000hz Stereo Record
+ 3 8000hz Stereo Playback
+ 4 8000hz Full Duplex Play/Record
+ 5 11025hz Mono Playback
+ 6 11025hz Mono Record
+ 7 11025hz Stereo Record
+ 8 11025hz Stereo Playback
+ 9 11025hz Full Duplex Play/Record
+ 10 22050hz Mono Playback
+ 11 22050hz Mono Record
+ 12 22050hz Stereo Record
+ 13 22050hz Stereo Playback
+ 14 22050hz Full Duplex Play/Record
+ 15 44100hz Mono Playback
+ 16 44100hz Mono Record
+ 17 44100hz Stereo Record
+ 18 44100hz Stereo Playback
+ 19 44100hz Full Duplex Play/Record
+ 20-26 reserved (0)
+ 27 driver must pre-handle the data
+ 28 Variable Sample mono playback
+ 29 Variable Sample stereo playback
+ 30 Variable Sample mono record
+ 31 Variable Sample stereo record
+
+(Table 00115)
+Values for Sample data size:
+ 01h 8bit play
+ 02h 16bit play
+ 10h 8bit record
+ 20h 16bit record
+
+Format of WAVE Audio Services structure:
+Offset Size Description (Table 00116)
+ 00h 4 BYTEs name of the structure
+ 04h DWORD structure length
+ 08h 16 BYTEs for future expansion
+---entry points (details???)---
+ 18h DWORD DeviceCheck
+ 11h compression (see also #00117)
+ 12h driver state
+ 13h get current pos
+ 14h sample rate
+ 15h set preference
+ 16h get DMA,IRQ
+ 17h get IO address
+ 18h get mem address
+ 19h get mem free
+ 1Ah full duplex
+ 1Bh get block size
+ 1Ch get PCM format
+ 1Dh enable PCM format
+ 80h-.. vendors can add DevChks above 0x80
+ 1Ch DWORD PCMInfo
+ 20h DWORD PlayBlock
+ 24h DWORD PlayCont
+ 28h DWORD RecordBlock
+ 2Ch DWORD RecordCont
+ 30h DWORD PauseIO
+ 34h DWORD ResumeIO
+ 38h DWORD StopIO
+ 3Ch DWORD WavePrepare
+ 40h DWORD WaveRegister
+ 44h DWORD GetLastError
+ 01h unsupported feature/function
+ 02h bad sample rate
+ 03h bad block length
+ 04h bad block address
+ 05h app. missed an IRQ
+ 06h don't understand the PCM size/format
+ 80h-.. vendors specific errors
+ 48h DWORD TimerTick
+ 4Ch DWORD ApplPSyncCB: CallBack: play filled in by the app
+ 50h DWORD ApplRSyncCB: CallBack: rec filled in by the app
+SeeAlso: #00120,#00124
+
+(Table 00117)
+Values for type of compression:
+ 01h IMA play
+ 02h ALAW play
+ 03h ULAW play
+ 11h IMA record
+ 12h ALAW record
+ 13h ULAW record
+
+Format of MIDI Info Structure:
+Offset Size Description (Table 00118)
+ 00h 4 BYTEs name of the structure ("MIDI")
+ 04h DWORD structure length
+ 08h DWORD driver software version [00000003h]
+ 0Ch 32 BYTEs vendor name, etc. (ASCIZ string)
+ 2Ch 32 BYTEs vendor product name
+ 4Ch 32 BYTEs vendor chip/hardware description
+ 6Ch BYTE installed board number
+ 6Dh 3 BYTEs unused data
+ 70h 14 BYTEs the patch library file name [OPL2.BNK 00..]
+ 7Eh DWORD feature bits (see #00119)
+ 80h WORD user determined preference field
+ 82h WORD memory required for driver use
+ 84h WORD # of timer tick callbacks per second
+ 86h WORD max # of tones (voices, partials)
+SeeAlso: #00112,#00120,#00122
+
+Bitfields for MIDI feature bits:
+Bit(s) Description (Table 00119)
+ 0-3 reserved for GM extensions
+ 4 Transmitter/Receiver only
+ 5 Patches preloaded
+ 6 MIDI receive has time stamp
+ 8 MIDI interrupt driven input supported
+ 9 MIDI polled input supported
+ 10 MIDI remote patches supported
+
+Format of MIDI Service structure:
+Offset Size Description (Table 00120)
+ 00h 4 BYTEs name of the structure ("MIDS")
+ 04h DWORD structure length
+ 08h 16 WORDs patches loaded table bit field
+ 28h 16 BYTEs for future expansion
+---entry points (details???)---
+ 38h DWORD device check
+ 11h return available tones
+ 12h return TRUE/FALSE if patch is understood
+ 13h set preference
+ 14h allow/disallow voice stealing
+ 15h get FIFO sizes
+ 16h get DMA,IRQ
+ 17h get IO address
+ 18h get mem address
+ 19h get mem free
+ 80h-.. vendors can add DevChks above 0x80
+ 3Ch DWORD global reset
+ 40h DWORD MIDI msg
+ 44h DWORD poll MIDI
+ 48h DWORD preload patch
+ 4Ch DWORD unload patch
+ 50h DWORD timer tick
+ 54h DWORD get last error
+ 01h unsupported feature/function
+ 02h unknown patch type (see #00121)
+ 03h all tones are used
+ 04h messages are out of sync
+ 05h an incoming patch was incomplete
+ 06h an incoming patch couldn't be stored
+ 07h had to drop an incoming byte
+ 08h driver is failing a patch download
+ 80h-.. vendors specific errors
+ 58h DWORD Patch Block free callback
+ 5Ch DWORD MIDI byte avail. callback
+SeeAlso: #00116,#00124
+
+(Table 00121)
+Values for MIDI Registered Patch Types:
+ 10h OPL2
+ 11h OPL3
+
+Format of Volume Info Structure:
+Offset Size Description (Table 00122)
+ 00h 4 BYTEs name of the structure ("VOLI")
+ 04h DWORD structure length (00000092h)
+ 08h DWORD driver software version [00000001h]
+ 0Ch 32 BYTEs vendor name, etc. (ASCIZ string)
+ 2Ch 32 BYTEs vendor product name
+ 4Ch 32 BYTEs vendor chip/hardware description
+ 6Ch BYTE installed board number (0 for 1st/only board)
+ 6Dh 3 BYTEs unused data (0)
+ 70h 24 BYTEs text name of the mixer channel
+ 88h DWORD features bits (see #00123)
+ 8Ch WORD minimum volume setting
+ 8Eh WORD maximum volume setting
+ 90h WORD attenuation/gain crossover
+SeeAlso: #00112,#00124
+
+Bitfields for Volume feature bits:
+Bit(s) Description (Table 00123)
+ 0 Stereo Volume control available
+ 2 Low Pass Filter is available
+ 3 High Pass Filter is available
+ 4 Parametric Tone Control is available
+ 5 selectable output paths
+ 8 Azimuth Field positioning supported
+ 9 Phi Field positioning supported
+ 10-30 unused???
+ 31 Master Volume device
+
+Format of Volume Services Structure:
+Offset Size Description (Table 00124)
+ 00h 4 BYTEs name of the structure ("VOLS")
+ 04h DWORD structure length (00000038h)
+ 08h 16 BYTEs 16 bytes for future expansion (0)
+---entry points (details???)---
+ 18h DWORD device check
+ 0011h filter range
+ 0012h filter setting
+ 0013h filter current
+ 0014h tone range
+ 0015h tone setting
+ 0016h tone current
+ 0017h path
+ 0018h get IO address
+ 0080h-.. vendors can add DevChks above 0x80
+ 1Ch DWORD set vol to an absolute setting
+ 01h User master volume setting
+ 02h application master volume setting
+ 20h DWORD set 3D volume
+ 24h DWORD tone control
+ 28h DWORD filter control
+ 2Ch DWORD output path
+ 30h DWORD reset channel
+ 34h DWORD get last error
+ 01h unsupported feature/function
+ 02h out of range parameter value
+ 80h+ vendor-specific errors
+SeeAlso: #00116,#00120
+--------s-104F13BX0003-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - OPEN DEVICE
+ AX = 4F13h
+ BX = 0003h
+ CX = handle
+ DX = API set (16/32-bit)
+ SI = segment ???
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ SI:CX -> memory ???
+ 01h failed
+SeeAlso: AX=4F13h/BX=0000h,AX=4F13h/BX=0002h,AX=4F13h/BX=0004h
+--------s-104F13BX0004-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - CLOSE DEVICE
+ AX = 4F13h
+ BX = 0004h
+ CX = handle
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=4F13h/BX=0000h,AX=4F13h/BX=0003h,AX=4F13h/BX=0005h
+--------s-104F13BX0005-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - UNINSTALL DRIVER
+ AX = 4F13h
+ BX = 0005h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=4F13h/BX=0000h,AX=4F13h/BX=0006h
+--------s-104F13BX0006-----------------------
+INT 10 - VESA VBE/AI (Audio Interface) - DRIVER CHAIN/UNCHAIN
+ AX = 4F13h
+ BX = 0006h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=4F13h/BX=0000h,AX=4F13h/BX=0005h
+----------104F14-----------------------------
+INT 10 - VESA OEM Extensions - API
+ AX = 4F14h
+ BL = function
+ 00h installation check / get capabilities
+ other registers vary by function
+Return: varies by function
+Note: this function is provided for OEMs to implement system-specific
+ functionality in a VESA-compatible manner
+----------104F14-----------------------------
+INT 10 - VESA OEM Extensions - Matrox Millenium (BIOS v2.1)
+ AX = 4F14h
+ BL = function
+ 00h installation check / get capabilities
+ ES:DI -> 256-byte buffer for Matrox-specific information
+ (see #00125)
+ Return: ES:DI buffer filled
+ 01h read/write MGA indexed data register
+ BH = direction (00h = write, else read)
+ CL = register number (80h for most-recently used register)
+ CH = new value, if writing
+ Return: CH = current value, if reading
+ 02h read/write register in MGA control space
+ BH = direction and size
+ bit 4: read register instead of writing
+ bits 1-0: data size (00 = BYTE, 01 = WORD, 10 = DWORD)
+ SI = register address
+ CL/CX/ECX = new value if writing
+ Return: CL/CX/ECX = current value if reading
+ 03h read PINS byte
+ SI = offset of byte within PINS data (see #00126)
+ Return: CL = value of specified PINS byte
+ 04h ??? (related to PLL programming)
+ DX = ???
+ Return: CL,EDX destroyed
+ 05h read BIOS byte
+ SI = offset of byte relative to start of BIOS image
+ Return: CL = specified byte
+ else
+ Return: AX = FFFFh
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+Note: most of this info is from http:\\grafi.ii.pw.edu.pl\gbm\matrox
+SeeAlso: MEM C000h:7FFCh"Matrox"
+
+Format of Matrox-specific VESA extensions information:
+Offset Size Description (Table 00125)
+ 00h 7 BYTEs signature "VBE/MGA"
+ 07h 10 BYTEs ??? (01h 01h 00h 00h 00h 00h 00h 00h 00h 07h)
+ 11h WORD BIOS version (high byte = major, low byte = one-digit minor)
+ 13h DWORD -> manufacturer name (ASCIZ "Matrox")
+ 17h DWORD -> ASCIZ card name
+ 1Bh DWORD -> ??? ASCIZ string (empty string on card examined)
+ 1Fh DWORD -> ASCIZ vendor name
+ 23h DWORD -> ASCIZ BIOS file base name
+ 27h DWORD -> PINS
+ 2Bh WORD video memory size in 64K units
+ 2Dh DWORD linear address of linear frame buffer
+ 31h DWORD linear address of MGA control aperture
+ 35h WORD PCI bus/device for card???
+ 37h 201 BYTEs unused??? (cleared to 00h)
+
+Format of Matrox PINS data (version 3.0):
+Offset Size Description (Table 00126)
+ 00h 2 BYTEs signature ".A" (2Eh 41h)
+ 02h BYTE structure length (40h for v3.0)
+ 03h BYTE ???
+ 04h WORD PINS version (high byte = major, low byte = minor)
+ 06h WORD date last programmed
+ 08h WORD number of times programmed
+ 0Ah WORD flags
+ 0Ch 8 BYTEs ASCII serial number, three letters + five digits
+ 14h 8 BYTEs ???
+ 1Ch 4 BYTEs ASCII card version
+ 20h DWORD PCB revision
+ 24h BYTE maximum RAMDAC frequency in MHz (less 100)
+ 25h BYTE maximum RAMDAC frequency???
+ 26h BYTE maximum RAMDAc frequency???
+ 27h BYTE ???
+ 28h BYTE ??? timing data?
+ 29h BYTE ???
+ 2Ah BYTE ???
+ 2Bh BYTE ???
+ 2Ch BYTE ???
+ 2Dh BYTE ???
+ 2Eh BYTE ???
+ 2Fh BYTE ???
+ 30h 4 BYTEs ???
+ 34h BYTE ???
+ 35h BYTE ???
+ 36h BYTE ???
+ 37h BYTE memory size in 64K units
+ 38h BYTE ???
+ 39h BYTE ???
+ 3Ah BYTE ???
+ 3Bh BYTE ???
+ 3Ch BYTE ???
+ 3Dh BYTE ???
+ 3Eh BYTE ???
+ 3Fh BYTE checksum (to make sum of all bytes MOD 256 == 00h)
+--------V-104F15BL00-------------------------
+INT 10 - VESA VBE/DC (Display Data Channel) - INSTALLATION CHECK / CAPABILITIES
+ AX = 4F15h
+ BL = 00h
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ BX = ???
+ 01h failed
+ ???
+SeeAlso: AX=4F15h/BL=01h,AX=4F15h/BL=02h
+--------V-104F15BL01-------------------------
+INT 10 - VESA VBE/DC (Display Data Channel) - READ EDID
+ AX = 4F15h
+ BL = 01h
+ CX = 0000h
+ DX = 0000h
+ ES:DI -> 128-byte buffer for EDID record (see #00127)
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ES:DI buffer filled
+ 01h failed (e.g. non-DDC monitor)
+SeeAlso: AX=4F15h/BL=00h,AX=4F15h/BL=02h,I2C A0h"DDC"
+
+Format of VESA EDID record:
+Offset Size Description (Table 00127)
+ 00h 8 BYTEs padding (all FFh, or 00h FFh..FFh 00h)
+ 08h WORD big-endian manufacturer ID (see #00136)
+ bits 14-10: first letter (01h='A', 02h='B', etc.)
+ bits 9-5: second letter
+ bits 4-0: third letter
+ 0Ah WORD EDID ID code -- identifies monitor model
+ 0Ch DWORD serial number or FFFFFFFFh
+ for "MAG", subtract 7000000 to get actual serial number
+ for "OQI", subtract 456150000
+ for "PHL", subtract ???
+ for "VSC", subtract 640000000
+ 10h BYTE week number of manufacture
+ 11h BYTE manufacture year - 1990
+ 12h BYTE EDID version
+ 13h BYTE EDID revision
+ 14h BYTE video input type (see #00129)
+ 15h BYTE maximum horizontal size in cm
+ 16h BYTE maximum vertical size in cm
+ 17h BYTE gamma factor (gamma = 1.0 + factor/100, so max = 3.55)
+ 18h BYTE DPMS flags (see #00128)
+ 19h BYTE chroma information: green X'/Y' and red X'/Y'
+ 1Ah BYTE chroma information: white X'/Y' and blue X'/Y'
+ 1Bh BYTE chroma information: red Y
+ 1Ch BYTE chroma information: red X
+ 1Dh BYTE chroma information: green Y
+ 1Eh BYTE chroma information: green X
+ 1Fh BYTE chroma information: blue Y
+ 20h BYTE chroma information: blue X
+ 21h BYTE chroma information: white Y
+ 22h BYTE chroma information: white X
+ 23h BYTE established timings 1 (see #00130)
+ 24h BYTE established timings 2 (see #00131)
+ 25h BYTE manufacturer's reserved timing or 00h for none
+ bit 7: 1152x870 @ 75 Hz (Mac II, Apple)
+ 26h 8 WORDs standard timing identification
+ resolution (low byte) and vertical frequency (high byte) for
+ each of eight modes (see #00132)
+ X resolution = (lowbyte + 31) * 8
+ 36h 18 BYTEs detailed timing description #1 (see #00133)
+ (v1.1) alternately, text identification (see #00135)
+ 48h 18 BYTEs detailed timing description #2
+ (v1.1) alternately, text identification (see #00135)
+ 5Ah 18 BYTEs detailed timing description #3
+ (v1.1) alternately, text identification (see #00135)
+ 6Ch 18 BYTEs detailed timing description #4
+ (v1.1) alternately, text identification (see #00135)
+ 7Eh BYTE unused???
+ 7Fh BYTE checksum
+ (radix-complement: 256-low byte of 16-bit sum of 00h-7Eh)
+
+Bitfields for DPMS EDID flags:
+Bit(s) Description (Table 00128)
+ 2-0 unused???
+ 3 display type
+ =0 non-RGB multicolor
+ =1 RGB color
+ 4 unused???
+ 5 Active Off supported
+ 6 Suspend supported
+ 7 Standby supported
+SeeAlso: #00127
+
+Bitfields for DPMS input signal type:
+Bit(s) Description (Table 00129)
+ 0 separate sync
+ 1 composite sync
+ 2 sync on green
+ 4-3 unused???
+ 6-5 voltage level
+ 00 0.700V/0.300V (1.00 Vp-p)
+ 01 0.714V/0.286V
+ 10 0.100V/0.400V
+ 11 reserved
+ 7 =1 digital signal, =0 analog
+SeeAlso: #00127
+
+Bitfields for DPMS established timings 1:
+Bit(s) Description (Table 00130)
+ 0 720x400 @ 70 Hz (VGA 640x400, IBM)
+ 1 720x400 @ 88 Hz (XGA2)
+ 2 640x480 @ 60 Hz (VGA)
+ 3 640x480 @ 67 Hz (Mac II, Apple)
+ 4 640x480 @ 72 Hz (VESA)
+ 5 640x480 @ 75 Hz (VESA)
+ 6 800x600 @ 56 Hz (VESA)
+ 7 800x600 @ 60 Hz (VESA)
+SeeAlso: #00127,#00131
+
+Bitfields for DPMS established timings 2:
+Bit(s) Description (Table 00131)
+ 0 800x600 @ 72 Hz (VESA)
+ 1 800x600 @ 75 Hz (VESA)
+ 2 832x624 @ 75 Hz (Mac II)
+ 3 1024x768 @ 87 Hz interlaced (8514A)
+ 4 1024x768 @ 60 Hz (VESA)
+ 5 1024x768 @ 70 Hz (VESA)
+ 6 1024x768 @ 75 Hz (VESA)
+ 7 1280x1024 @ 75 Hz (VESA)
+SeeAlso: #00127,#00130
+
+Bitfields for DPMS standard timing information:
+Bit(s) Description (Table 00132)
+ 5-0 vertical refresh frequency - 60 (Hz)
+ 7-6 aspect ratio (Y resolution = X resolution * aspect ratio)
+ 00 ???
+ 01 0.75
+ 10 0.8
+ 11 0.5625
+Note: if both bytes of the timing are 00h or 01h, then the Standard Timing
+ is "None"
+SeeAlso: #00127
+
+Format of Detailed Timing Description:
+Offset Size Description (Table 00133)
+ 00h BYTE horizontal frequency in kHz (if 00h, may be text)(see #00135)
+ 01h BYTE vertical frequency in Hz
+ 02h BYTE horizontal active time (pixels) and X resolution
+ 03h BYTE horizontal blanking time (pixels)
+ 04h BYTE horizontal active time 2 / horizontal blanking time 2
+ 05h BYTE vertical active time (lines) and Y resolution
+ 06h BYTE vertical blanking time (lines)
+ 07h BYTE vertical active time 2 / vertical blanking time 2
+ 08h BYTE horizontal sync offset (pixels)
+ 09h BYTE horizontal sync pulsewidth (pixels)
+ 0Ah BYTE vertical sync offset / vertical sync pulsewidth
+ 0Bh BYTE vertical/horizontal sync offset 2 / vert/hor. sync pulsewidth 2
+ 0Ch BYTE horizontal image size (mm)
+ 0Dh BYTE vertical image size (mm)
+ 0Eh BYTE horizontal image size 2 / vertical image size 2
+ 0Fh BYTE horizontal border (pixels)
+ 10h BYTE vertical border (lines)
+ 11h BYTE type of display (see #00134)
+SeeAlso: #00127,#00135
+
+Bitfields for EDID detailed display type:
+Bit(s) Description (Table 00134)
+ 7 interlaced
+ 6-5 stereo mode
+ 00 normal display (no stereo)
+ 01 stereo, right stereo sync high
+ 10 stereo, left stereo sync high
+ 11 undefined
+ 4-3 sync type
+ 00 sync analog composite
+ 01 sync bipolar analog composite
+ 10 sync digital composite
+ 11 sync digital separate
+---sync digital separate---
+ 2 vertical sync polarity (0 = negative, 1 = positive)
+ 1 horizontal sync polarity (0 = negative, 1 = positive)
+---other sync types---
+ 2 serrate
+ 1 sync location (0 = on green, 1 = on RGB)
+------
+ 0 not used???
+SeeAlso: #00133
+
+Format of EDID Text Identification Strings:
+Offset Size Description (Table 00135)
+ 00h 3 BYTEs 00h 00h 00h (to distinguish from detailed timing description)
+ 03h BYTE text identifier
+ FFh serial number
+ FEh vendor name
+ FDh vertical/horizontal frequency range
+ FCh model name
+---frequency range---
+ 04h BYTE 00h ???
+ 05h BYTE minimum vertical refresh frequency in Hz
+ 06h BYTE maximum vertical refresh
+ 07h BYTE minimum horizontal frequency in kHz
+ 08h BYTE maximum horizontal frequency
+ 09h BYTE FFh ???
+---other---
+ 04h 14 BYTEs text, may be terminated with either a NUL (00h) or LF (0Ah)
+SeeAlso: #00132
+
+(Table 00136)
+Values for manufacturer ID:
+ "ACT" Targa
+ "ADI" ADI Corporation http://www.adi.com.tw
+ "AOC" AOC International (USA) Ltd. (see #00137)
+ "API" Acer America Corp. (see #00138)
+ "APP" Apple Computer, Inc. (see #00139)
+ "ART" ArtMedia
+ "AST" AST Research (see #00140)
+ "CPL" Compal Electronics, Inc. / ALFA (see #00141)
+ "CPQ" COMPAQ Computer Corp. (see #00142)
+ "CTX" CTX - Chuntex Electronic Co. (see #00143)
+ "DEC" Digital Equipment Corporation (see #00144)
+ "DEL" Dell Computer Corp. (see #00145)
+ "DPC" Delta Electronics, Inc. (see #00146)
+ "DWE" Daewoo Telecom Ltd (see #00147)
+ "ECS" ELITEGROUP Computer Systems (see #00148)
+ "EIZ" EIZO (see #00149)
+ "FCM" Funai Electric Company of Taiwan
+ "GSM" LG Electronics Inc. (GoldStar Technology, Inc.) (see #00158)
+ "GWY" Gateway 2000
+ "HEI" Hyundai Electronics Industries Co., Ltd. (see #00150)
+ "HIT" Hitachi (see #00151)
+ "HSL" Hansol Electronics (see #00152)
+ "HTC" Hitachi Ltd. / Nissei Sangyo America Ltd. (see #00153)
+ "HWP" Hewlett Packard (see #00154)
+ "IBM" IBM PC Company (see #00155)
+ "ICL" Fujitsu ICL (see #00156)
+ "IVM" Idek Iiyama North America, Inc. (see #00157)
+ "KFC" KFC Computek
+ "LKM" ADLAS / AZALEA
+ "LNK" LINK Technologies, Inc.
+ "LTN" Lite-On
+ "MAG" MAG InnoVision (see #00159)
+ "MAX" Maxdata Computer GmbH
+ "MEI" Panasonic Comm. & Systems Co. (see #00168)
+ "MEL" Mitsubishi Electronics (see #00160)
+ "MIR" miro Computer Products AG (see #00161)
+ "MTC" MITAC
+ "NAN" NANAO (see #00162)
+ "NEC" NEC Technologies, Inc. (see #00163)
+ "NOK" Nokia (see #00164)
+ "OQI" OPTIQUEST (see #00165)
+ "PBN" Packard Bell
+ "PGS" Princeton Graphic Systems (see #00166)
+ "PHL" Philips Consumer Electronics Co. (see #00167)
+ "REL" Relisys
+ "SAM" Samsung (see #00169)
+ "SDI" Samtron (see #00170)
+ "SMI" Smile
+ "SNI" Siemens Nixdorf
+ "SNY" Sony Corporation
+ "SPT" Sceptre
+ "SRC" Shamrock Technology
+ "STP" Sceptre
+ "TAT" Tatung Co. of America, Inc. (see #00171)
+ "TRL" Royal Information Company (see #00172)
+ "TSB" Toshiba, Inc.
+ "UNM" Unisys Corporation
+ "VSC" ViewSonic Corporation (see #00173)
+ "WTC" Wen Technology
+ "ZCM" Zenith Data Systems
+ "___" Targa
+SeeAlso: #00127
+
+(Table 00137)
+Values for AOC monitor EDID:
+ A566h AOC SPECTRUM 5Nlr
+ A782h AOC SPECTRUM 7Nlr
+ D350h AOC SPECTRUM 4V, 4VA, 4Vlr, 4VlrA
+ D566h AOC SPECTRUM 5Vlr, 5VlrA
+ E570h AOC SPECTRUM 5Glr
+ E750h AOC SPECTRUM 7DlrA
+SeeAlso: #00136,#00138
+
+(Table 00138)
+Values for Acer monitor EDID:
+ 0037h AcerView 55
+ 424Ch AcerView 76ie
+ 440Bh AcerView 11D
+ 4421h AcerView 33D
+ 4522h AcerView 7134e
+ 4536h AcerView 7154e
+ 4538h AcerView 7156e
+ 454Ch AcerView 7176ie
+ 454Eh AcerView 7178ie
+ 4938h AcerView 7156i
+ 494Ch AcerView 76i
+ 494Eh AcerView 78i
+ 4962h AcerView 98i
+ 4C21h AcerView 33DL
+ 4C22h AcerView 34TL
+ 4C37h AcerView 55L
+ 4C38h AcerView 56L
+ 4E4Ch AcerView 76N
+ 5321h AcerView 7133s
+ 5322h AcerView 7134s
+ 5336h AcerView 7154s
+ 5338h AcerView 7156s, 7156is
+ 534Ch AcerView 7176is
+ 5422h AcerView 34T
+SeeAlso: #00136,#00137,#00140
+
+(Table 00139)
+Values for Apple Computer monitor EDID:
+ 0352h AppleVision 850
+SeeAlso: #00136
+
+(Table 00140)
+Values for AST monitor EDID:
+ 8001h ASTVision 4V
+ 8002h ASTVision 4I
+ 8003h ASTVision 4N
+ 8004h ASTVision 4L
+ 8005h ASTVision 5L
+ 8006h ASTVision 7L
+ 8007h ASTVision 7H
+ 8008h ASTVision 20H
+ 8009h AST Sabre
+ 800Ah ASTVision 5V
+SeeAlso: #00136,#00127,#00138,#00141
+
+(Table 00141)
+Values for ALFA monitor EDID:
+ 096Bh ALFA TH-450
+SeeAlso: #00136,#00140,#00142
+
+(Table 00142)
+Values for Compaq monitor EDID:
+ 0011h COMPAQ 1024
+ 0012h COMPAQ 1024
+ 0013h COMPAQ 1024
+ 0014h COMPAQ 1024
+ 0015h COMPAQ 1024
+ 0016h COMPAQ 1024
+ 0017h COMPAQ PRB
+ 0018h COMPAQ PRB
+ 0019h COMPAQ PRB
+ 001Ah COMPAQ PRB
+ 0020h COMPAQ PRB
+ 0021h COMPAQ PRB
+ 0022h COMPAQ 151FS
+ 0023h COMPAQ 151FS
+ 0024h COMPAQ 151FS
+ 0025h COMPAQ 151FS
+ 0026h COMPAQ 151FS
+ 0027h COMPAQ 151FS
+ 0028h COMPAQ 151FS
+ 0029h COMPAQ PRB
+ 002Ah COMPAQ PRB
+ 002Bh COMPAQ PRB
+ 002Ch COMPAQ PRB
+ 002Dh COMPAQ 171FS
+ 002Eh COMPAQ 171FS
+ 002Fh COMPAQ 171FS
+ 0030h COMPAQ 171FS
+ 0031h COMPAQ 171FS
+ 0032h COMPAQ 171FS
+ 0033h COMPAQ 171FS
+ 0040h COMPAQ QVision 200
+ 0041h COMPAQ QVision 200
+ 0042h COMPAQ QVision 200
+ 0043h COMPAQ QVision 200
+ 0044h COMPAQ QVision 200
+ 0045h COMPAQ QVision 200
+ 0046h COMPAQ QVision 200
+ 0047h COMPAQ QVision 200
+ 0048h COMPAQ QVision 200
+ 0049h COMPAQ QVision 200
+ 0100h COMPAQ 1024
+ 0146h COMPAQ 1024
+ 0147h COMPAQ 1024
+ 0346h COMPAQ 151FS
+ 0347h COMPAQ 151FS
+ 0348h COMPAQ 151FS
+ 0349h COMPAQ 151FS
+ 034Ah COMPAQ 151FS
+ 034Bh COMPAQ 151FS
+ 0546h COMPAQ 171FS
+ 0547h COMPAQ 171FS
+ 0548h COMPAQ 171FS
+ 0549h COMPAQ 171FS
+ 0746h COMPAQ PRB
+ 0747h COMPAQ PRB
+ 0846h COMPAQ PRA
+ 0847h COMPAQ PRA
+ 0848h COMPAQ PRA
+ 0849h COMPAQ PRA
+ 084Ah COMPAQ PRA
+ 084Bh COMPAQ PRA
+ 084Ch COMPAQ PRA
+ 084Dh COMPAQ PRA
+ 0946h COMPAQ PRB
+ 0947h COMPAQ PRB
+ 0948h COMPAQ PRB
+ 0949h COMPAQ PRB
+ 0A46h COMPAQ PRA
+ 0A47h COMPAQ PRA
+ 0A48h COMPAQ PRA
+ 0A49h COMPAQ PRA
+ 0A4Ah COMPAQ PRA
+ 0A4Bh COMPAQ PRA
+ 0A4Ch COMPAQ PRA
+ 0A4Dh COMPAQ PRA
+ 0D46h COMPAQ 140
+ 0D47h COMPAQ 140
+ 0D48h COMPAQ 140
+ 0D49h COMPAQ 140
+ 0D4Ah COMPAQ 140
+ 0D4Bh COMPAQ 140
+ 0D4Ch COMPAQ 140
+ 0D4Dh COMPAQ 140
+ 0F46h COMPAQ 150
+ 0F47h COMPAQ 150
+ 0F48h COMPAQ 150
+ 0F49h COMPAQ 150
+ 0F4Ah COMPAQ 150
+ 0F4Bh COMPAQ 150
+ 0F4Ch COMPAQ 150
+ 0F4Dh COMPAQ 150
+SeeAlso: #00136,#00141,#00143
+
+(Table 00143)
+Values for "CTX" monitor EDID:
+ 1451h CTX 1451
+ 1551h CTX 1551
+ 1562h CTX 1562
+ 1565h CTX 1565
+ 1569h CTX 1569S 15-inch
+ 1765h CTX 1765
+ 1785h CTX 1785 XE
+ 2085h CTX 2085
+ 2185h CTX 2185
+SeeAlso: #00136,#00142,#00144
+
+(Table 00144)
+Values for Digital Equipment Corporation monitor EDID:
+ 06FAh Digital 21" Color (FR-PCXAV-WZ)
+ 073Ah Digital 17" Color (FR-PCXAV-YZ)
+ BA08h Digital 15" Color Monitor (FR-PCXBV-E*)
+ DA08h Digital 17" Color Monitor (FR-PCXBV-F*)
+SeeAlso: #00136,#00143,#00145
+
+(Table 00145)
+Values for Dell monitor EDID:
+ 139Ah Dell Ultrascan 14XE
+ 139Bh Dell Ultrascan 14XE
+ 139Ch Dell Ultrascan 14XE
+ 139Dh Dell Ultrascan 14XE
+ 2210h Dell Ultrascan V17X
+ 2211h Dell Ultrascan V17X
+ 2212h Dell Ultrascan V17X
+ 2213h Dell Ultrascan V17X
+ 2214h Dell Ultrascan 21TE
+ 2215h Dell Ultrascan 21TE
+ 2216h Dell Ultrascan 21TE
+ 2217h Dell Ultrascan 21TE
+ 3024h Dell VS17X
+ 3025h Dell VS17X
+ 3026h Dell VS17X
+ 3027h Dell VS17X
+ 4273h Dell VS15X
+SeeAlso: #00136,#00144,#00146
+
+(Table 00146)
+Values for Delta Electronics monitor EDID:
+ 0456h Delta DA-456
+ 1565h Delta DA-1565
+ 1765h Delta DA-1765
+SeeAlso: #00136,#00145,#00147
+
+(Table 00147)
+Values for Daewoo monitor EDID:
+ 1423h Daewoo CMC-1423B1
+ 1427h Daewoo CMC-1427X1
+ 1502h Daewoo CMC-1502B1
+ 1505h Daewoo CMC-1505X
+ 1507h Daewoo CMC-1507X1
+ 1703h Daewoo CMC-1703B
+ 5133h Daewoo CMC-1511B
+ 7044h Daewoo CMC-1704C
+SeeAlso: #00136,#00146,#00148
+
+(Table 00148)
+Values for ELITEGROUP Computer Systems monitor EDID:
+ 0001h ECS VERTOS 1401
+ 0002h ECS VERTOS 1501
+ 0003h ECS VERTOS 1502
+ 0004h ECS VERTOS 1503
+ 0005h ECS VERTOS 1700
+ 0006h ECS VERTOS 1701
+ 0007h ECS VERTOS 1700
+ 0008h ECS VERTOS 2101
+ 0009h ECS VERTOS 2102
+SeeAlso: #00136,#00147,#00149
+
+(Table 00149)
+Values for EIZO monitor EDID:
+ 0200h EIZO FlexScan F351
+ 0201h EIZO FlexScan F553
+ 0202h EIZO FlexScan F563
+ 0203h EIZO FlexScan F764
+ 0204h EIZO FlexScan F784
+ 0206h EIZO FlexScan 6600
+ 0300h EIZO FlexScan 6500
+ 0302h EIZO 9060S
+ 0303h EIZO 9065S
+ 0305h EIZO FlexScan T563
+ 0306h EIZO 9070S
+ 0307h EIZO 9080i
+ 0308h EIZO 9400i
+ 0309h EIZO 9500
+ 030Ah EIZO FlexScan F340iW
+ 030Ch EIZO FlexScan F552
+ 030Dh EIZO FlexScan F560iW
+ 030Fh EIZO FlexScan F760iW
+ 0310h EIZO FlexScan F780iW
+ 0311h EIZO FlexScan T560i
+ 0312h EIZO FlexScan T660i
+ 0313h EIZO FlexScan T562
+ 0314h EIZO FlexScan T662
+ 038Ch EIZO FlexScan F550iW
+SeeAlso: #00136,#00148,#00150
+
+(Table 00150)
+Values for Hyundai monitor EDID:
+ 0B42h Hyundai Deluxscan 21
+ 12F0h Hyundai Deluxscan 14S
+ 16D8h Hyundai Deluxscan 15B
+ 16E8h Hyundai Deluxscan 15G
+ 16EEh Hyundai Delucscan 15G+
+ 1E02h Hyundai Deluxscan 17 Pro
+ 1EB8h Hyundai Deluxscan 17B
+ 1EBEh Hyundai Deluxscan 17B+
+ 5864h Hyundai DeluxScan 15 Pro
+ B81Eh Hyundai DeluxScan 17
+SeeAlso: #00136,#00149,#00151
+
+(Table 00151)
+Values for Hitachi monitor EDID:
+ 1717h Hitachi Accuvue GX17L
+ 1727h Hitachi HM1764
+ 1827h Hitachi HM1782
+ 2147h Hitachi HM4721
+ 2149h Hitachi HM4921
+ 4020h Hitachi HM4020
+ 4021h Hitachi HM4021
+ 4711h Hitachi Accuvue UX4721
+ 4810h Hitachi Accuvue GX20
+ 4811h Hitachi Accuvue GX21
+ 4820h Hitachi HM4820
+ 4821h Hitachi HM4821
+ 4830h Hitachi Accuvue GX20H
+ 4911h Hitachi Accuvue UX4921
+ 6421h Hitachi HM6421
+ 6811h Hitachi Accuvue UX6821
+ 6821h Hitachi HM6821
+SeeAlso: #00136,#00150,#00152
+
+(Table 00152)
+Values for Hansol Electronics monitor EDID:
+ 0579 Hansol Electronics Mazellan14px
+ 057A Hansol Electronics Mazellan400A
+ 05DD Hansol Electronics Mazellan15ax
+ A605 Hansol Electronics Mazellan17px
+SeeAlso: #00136,#00151,#00153
+
+(Table 00153)
+Values for Hitachi, Ltd. monitor EDID:
+ AB6Fh CM-1711M
+ ABC2h CM-2112M
+ ABC7h CM-2111M
+ ABCCh CM-2110M
+ ABE0h Hitachi, Ltd CM802
+ ABE2h Hitachi, Ltd CM801
+ ABE3h Hitachi, Ltd CM800
+ ABEAh Hitachi, Ltd CM803
+ ABF4h Hitachi, Ltd CM701
+ AFC8h Hitachi, Ltd CM500
+ AFD2h Hitachi, Ltd CM600
+ AFD7h Hitachi, Ltd CM611
+SeeAlso: #00136,#00152,#00154
+
+(Table 00154)
+Values for Hewlett-Packard monitor EDID:
+ 0AF0h HP D2800A Ultra VGA 1600 21"
+ 0AF6h HP D2806A Ergo Ultra VGA 15"
+ 0AF8h HP D2808 1024 Low Emission
+ 0AFFh HP D2815A 1024 Low Emission 14"
+ 0F11h HP D3857A Multi Media 15"
+ 0F12h HP D3858A Multi Media 14"
+SeeAlso: #00136,#00151,#00155
+
+(Table 00155)
+Values for IBM monitor EDID:
+ 198Eh IBM G41
+ 198Fh IBM G50
+ 1990h IBM G70
+ 1991h IBM G200
+ 1999h IBM P50
+ 199Ah IBM P70
+ 199Bh IBM P200
+ 1BB7h IBM 7095
+ 1BB9h IBM 7097
+ 2112h IBM 2112
+ 2113h IBM 2113
+ 2114h IBM 2114
+ 2115h IBM 2115
+ 2117h IBM 2117
+ 2215h IBM 2215
+ 2238h IBM 2238
+ 2248h IBM 2248
+ 2264h IBM 2264
+ 2535h IBM 9525-0X1
+ 26ACh IBM Aptiva 9900
+ 27ADh IBM Aptiva 9901
+ 6312h IBM 6312
+ 6314h IBM 6314
+ 6315h IBM 6315
+ 6317h IBM 6317
+ 6319h IBM 6319
+ 6321h IBM 6321
+ 6322h IBM 6322
+ 6324h IBM 6324
+ 6325h IBM 6325
+ 6327h IBM 6327
+ 8504h IBM 8504
+ 8511h IBM 8511
+ 8512h IBM 8512
+ 8513h IBM 8513
+ 8514h IBM 8514
+ 8515h IBM 8515
+ 8517h IBM 8517
+ 8518h IBM 8518
+ 9504h IBM 9504
+ 9515h IBM 9515
+ 9517h IBM 9517
+ 9518h IBM 9518
+ 9521h IBM 9521
+ 9524h IBM 9524
+ 9525h IBM 9525
+ 9527h IBM 9527
+SeeAlso: #00136,#00154,#00156
+
+(Table 00156)
+Values for Fujitsu ICL monitor EDID:
+ 0100h Fujitsu ICL ErgoPro 211v
+ 0200h Fujitsu ICL ErgoPro 171p
+ 0400h Fujitsu ICL ErgoPro 171v
+ 0700h Fujitsu ICL ErgoPro 151p
+ 0800h Fujitsu ICL ErgoPro 151p AutoBrite
+ 0A00h Fujitsu ICL ErgoPro 151v
+ 0B00h Fujitsu ICL ErgoPro 141v
+ 0D00h Fujitsu ICL ErgoPro 141p
+ 0F00h Fujitsu ICL ErgoPro 152v
+ 1400h Fujitsu ICL ErgoPro 142v
+ 1600h Fujitsu ICL ErgoPro e153
+ 1900h Fujitsu ICL ErgoPro x173
+ 1A00h Fujitsu ICL ErgoPro x173a
+ 1C00h Fujitsu ICL ErgoPro x152
+ 1D00h Fujitsu ICL ErgoPro e173
+ 2200h FUJITSU ErgoPro e154
+ 2400h FUJITSU ErgoPro x174
+SeeAlso: #00136,#00155,#00157
+
+(Table 00157)
+Values for Idek Iiyama North America monitor EDID:
+ 1700h Iiyama Vision Master MF-8617
+SeeAlso: #00136,#00156,#00158
+
+(Table 00158)
+Values for LG Electronics monitor EDID:
+ 36B4h LG StudioWorks 44m
+ 36B9h LG StudioWorks 44i
+ 3AA0h LG 1505s
+ 3AA2h LG StudioWorks 56m
+ 3AAFh LG StudioWorks 56T 15-inch
+ 3AB0h LG StudioWorks 5D
+ 3AB6h LG StudioWorks 5D
+ 426Ch LG StudioWorks 78i
+ 426Dh LG StudioWorks 78T
+ 426Eh LG StudioWorks 76i
+ 4273h LG StudioWorks 76m
+ 4274h LG StudioWorks 78m
+ 4277h LG StudioWorks 74m
+ 4278h LG StudioWorks 74i
+ 427Eh LG StudioWorks 7D
+ 427Fh LG StudioWorks 78D
+ 4280h LG StudioWorks 78DT
+ 4281h LG StudioWorks 7DT
+ 4284h LG StudioWorks 76T
+ 42CFh LG 1725s
+ 4E21h LG StudioWorks 20i
+SeeAlso: #00136,#00157,#00159
+
+(Table 00159)
+Values for MAG monitor EDID:
+ 5620h DX1595
+ 5624h DX15T
+ 5626h DX1795
+SeeAlso: #00136,#00158,#00160
+
+(Table 00160)
+Values for Mitsubishi monitor EDID:
+ 0040h Mitsubishi Diamond Pro 21TX (THN-9105)
+ 2040h Mitsubishi Diamond Scan 20H (FR-8905)
+ 2040h Mitsubishi Diamond Pro 20X (FR-8905B)
+ 6140h Mitsubishi Diamond Scan 17HX (FFF8705)
+ 8040h Mitsubishi Diamond Pro 15H (SD-57xxC)
+ 4040h Mitsubishi Diamond Pro 17TX (TFG-8705)
+ 408Fh Mitsubishi Diamond Scan 15VX (SD58xx)
+ 40C0h Mitsubishi Diamond Pro 87TXM (TFM8705)
+SeeAlso: #00136,#00159,#00161
+
+(Table 00161)
+Values for Miro monitor EDID:
+ 0721h PROOFSCREEN miroC21107
+ 6815h miroD1568
+ 6817h PROOFSCREEN miroC1768
+ 6917h miroD1769
+ 8217h PROOFSCREEN miroC1782
+ 8520h PROOFSCREEN miroC2085 E
+ 8521h PROOFSCREEN miroC2185
+ 9321h PROOFSCREEN miroC2193
+SeeAlso: #00136,#00160,#00162
+
+(Table 00162)
+Values for Nanao monitor EDID:
+ 0000h NANAO USA FlexScan T2-20
+ 0400h NANAO USA F2-15
+ 0401h NANAO USA F2-17
+ 0402h NANAO USA F2-17EX
+ 0403h NANAO USA F2-21
+ 0404h NANAO USA FX2-21
+ 0405h NANAO USA FlexScan T2-17TS
+ 0406h NANAO FlexScan 6600
+ 0502h NANAO 9060S
+ 0503h NANAO 9065S
+ 0506h NANAO 9070U
+ 0507h NANAO 9080i
+ 0508h NANAO 9400i
+ 0509h NANAO 9500
+ 050Ah NANAO FlexScan F340iW
+ 050Bh NANAO FlexScan F550i
+ 050Ch NANAO FlexScan F550iW
+ 050Dh NANAO FlexScan F560iW
+ 050Eh NANAO FlexScan F750i
+ 050Fh NANAO FlexScan F760iW
+ 0510h NANAO FlexScan F780iW
+ 0511h NANAO FlexScan T560i
+ 0512h NANAO FlexScan T660i
+ 0513h NANAO USA FlexScan T2-17
+ 0514h NANAO USA FlexScan T2-20
+ 0580h NANAO USA FlexScan 6300
+ 0800h NANAO FlexScan 33F
+ 0802h NANAO FlexScan 88F
+ 0805h NANAO FlexScan 54T
+ 0882h NANAO FlexScan 52F
+ 0900h NANAO FlexScan 6500
+ 0902h NANAO 9060S
+ 0906h NANAO 9070U
+ 0907h NANAO 9080i
+ 090Ah NANAO FlexScan F347
+ 090Bh NANAO FlexScan F550i
+ 090Ch NANAO FlexScan F557
+ 090Fh NANAO FlexScan 77F
+ 0910h NANAO FlexScan F780iJ
+ 0911h NANAO FlexScan T560iJ
+ 0912h NANAO FlexScan T660iJ
+ 0913h NANAO FlexScan 56T
+ 0914h NANAO FlexScan 68T
+ 098Ah NANAO FlexScan F347II
+ 098Ch NANAO FlexScan 55F
+ 098Fh NANAO FlexScan 76F
+ 0991h NANAO FlexScan T567
+ 0993h NANAO FlexScan 53T
+SeeAlso: #00136,#00161,#00163
+
+(Table 00163)
+Values for NEC monitor EDID:
+ 37FAh NEC MultiSync XV14
+ 37FBh NEC MultiSync XV14
+ 3A66h NEC MultiSync C400
+ 3C00h NEC MultiSync XE15
+ 3C0Ah NEC MultiSync XP15
+ 3C14h NEC MultiSync XV15
+ 3C1Eh NEC MultiSync XE15
+ 3D5Eh NEC MultiSync XV15+
+ 3D68h NEC MultiSync M500
+ 3E4Eh NEC MultiSync C500
+ 43A8h NEC MultiSync XE17
+ 43B2h NEC MultiSync XE17
+ 43BCh NEC MultiSync XV17
+ 4416h NEC MultiSync XP17
+ 533Eh NEC MultiSync XE21
+ 53B6h NEC MultiSync XP21
+SeeAlso: #00136,#00162,#00164
+
+(Table 00164)
+Values for Nokia monitor EDID:
+ 008Dh NOKIA 449M
+ 0098h NOKIA 449X
+ 00A3h NOKIA 447KC
+ 00A9h NOKIA 447XI
+ 00ABh NOKIA 447KA
+ 00ADh NOKIA 447M
+ 00B7h NOKIA 447W
+ 00B8h NOKIA 447X
+ 00BBh NOKIA 447XAV
+ 00BCh NOKIA 447K
+ 00D2h NOKIA 445R
+SeeAlso: #00136,#00163,#00165
+
+(Table 00165)
+Values for OptiQuest monitor EDID:
+ 3138h OPTIQUEST VA656
+ 3141h OPTIQUEST 14ES
+ 3232h OPTIQUEST 1562A-2
+ 3233h OPTIQUEST 1769DC
+ 3234h OPTIQUEST 1000S-2
+ 3332h OPTIQUEST V655
+ 3333h OPTIQUEST V775
+ 3432h OPTIQUEST V650
+ 3832h OPTIQUEST V665
+ 4637h OPTIQUEST 1769DC
+SeeAlso: #00136,#00164,#00166
+
+(Table 00166)
+Values for Princeton Graphics monitor EDID:
+ 003Bh Princeton EO15
+ 003Dh Princeton EO17
+SeeAlso: #00136,#00165,#00167
+
+(Table 00167)
+Values for Philips monitor EDID:
+ 0200h Philips CM0200 (15C)
+ 0500h Philips CM0500 (20C)
+ 0700h Philips CM0700 (20T)
+ 0800h Philips CM0800 (15B)
+ 1200h Philips CM1200 (15A)
+ 1800h Philips CM1800 (15A)
+ 2000h Philips CM0200 (14B)
+ 2600h Philips 17TCM26
+ 2800h Philips 17BCM28
+ 3800h Philips 17ACM38
+ 5600h Philips CM5600 (20B)
+ 700Bh Philips CM0700 (21B)
+ 8000h Philips CM0800 (14A)
+SeeAlso: #00136,#00166,#00168
+
+(Table 00168)
+Values for Panasonic monitor EDID:
+ 1604h Panasonic TX-D2151W-ES
+ 1610h Panasonic TX-D2151NM
+SeeAlso: #00136,#00167,#00169
+
+(Table 00169)
+Values for Samsung monitor EDID:
+ 0000h Samsung SyncMaster 3Ne
+ 0100h Samsung SyncMaster 4S
+ 1530h Samsung 15GLsi
+ 4610h Samsung SyncMaster 21GLs
+ 4690h Samsung SyncMaster 20GLsi
+ 4D50h Samsung SyncMaster 15GLe
+ 4D51h Samsung SyncMaster 15GLi
+ 4D52h Samsung SyncMaster 15M
+ 4D70h Samsung SyncMaster 17GLi
+ 4D71h Samsung SyncMaster 17GLsi
+ 4D72h Samsung SyncMaster 6Ne
+ 4D73h Samsung 17GLi
+ 4D74h Samsung 17GLsi
+ 5450h Samsung SyncMaster 15Me
+ 6D20h Samsung SyncMaster 15GLe
+SeeAlso: #00136,#00168,#00170
+
+(Table 00170)
+Values for Samtron monitor EDID:
+ 1428h Samtron 428PT/PTL
+ 1528h Samtron SC-528TXL
+ 1529h Samtron SC-528UXL
+ 1530h Samtron SC-528MXLJ
+ 4690h Samtron SC-208DXL+
+ 4D70h Samtron SC-728FXL
+ 4D71h Samtron SC-726GXL
+ 5451h Samtron SC-528MDL
+SeeAlso: #00136,#00169,#00171
+
+(Table 00171)
+Values for Tatung monitor EDID:
+ 1F65h Intelliscan TM651x series 15"
+ 1F67h Intelliscan TM671x series 17"
+ 2F44h Intelliscan TM442x series 14"
+ 2F45h Intelliscan TM452x series 15"
+ 434Dh Tatung CM-17MC
+ 4855h Tatung CM-14UH
+SeeAlso: #00136,#00170,#00172
+
+(Table 00172)
+Values for Royal Information Company monitor EDID:
+ 061Ch TRL/RIC DL-1564
+ 0622h TRL/RIC DH-1570
+SeeAlso: #00136,#00171,#00173
+
+(Table 00173)
+Values for ViewSonic monitor EDID:
+ 0C00h ViewSonic 17GS
+ 0C0Fh ViewSonic 17PS
+ 0C1Fh ViewSonic 17GA
+ 1600h ViewSonic 21PS-2
+ 2601h ViewSonic 15GS
+ 2600h ViewSonic 15GS-2
+ 3141h ViewSonic 14ES
+ 3142h ViewSonic 14ES
+ 3143h ViewSonic 14ES
+ 3145h ViewSonic 15GS-3
+ 3252h ViewSonic 21PS-2
+ 3253h ViewSonic 21PS-2
+ 334Bh ViewSonic 17GS-2
+ 334Ch ViewSonic 17GS-2
+ 3351h ViewSonic PT810
+ 344Bh ViewSonic 17PS-2
+ 344Ch ViewSonic 17PS-2
+ 3451h ViewSonic PT810-2
+ 354Dh ViewSonic GT800
+ 354Eh ViewSonic GT800
+ 3550h ViewSonic GT800
+ 3644h ViewSonic 15GA
+ 3646h ViewSonic 15GA
+ 3648h ViewSonic 15GA
+ 364Ah ViewSonic PT770
+ 364Bh ViewSonic PT770
+ 364Ch ViewSonic PT770
+ 3744h ViewSonic 15G-2
+ 3746h ViewSonic 15G-2
+ 3748h ViewSonic 15G-2
+ 374Bh ViewSonic 17GA
+ 374Ch ViewSonic 17GA
+ 3844h ViewSonic 15ES-2
+ 3846h ViewSonic 15ES-2
+ 3848h ViewSonic 15ES-2
+ 384Ah ViewSonic 17EA
+ 384Bh ViewSonic 17EA
+ 384Ch ViewSonic 17EA
+ 3944h ViewSonic 15GS-2
+ 3946h ViewSonic 15GS-2
+ 3948h ViewSonic 15GS-2
+ 394Ah ViewSonic 17GS-2
+ 394Bh ViewSonic 17GS-2
+ 394Ch ViewSonic 17GS-2
+ 424Ah ViewSonic GT770
+ 424Bh ViewSonic GT770
+ 424Ch ViewSonic GT770
+ 434Ah ViewSonic 17PS-2
+ 434Bh ViewSonic 17PS-2
+ 434Ch ViewSonic 17PS-2
+ 4439h ViewSonic 15GS-2
+ 444Ah ViewSonic 17GA-2
+ 4637h ViewSonic 1769DC
+ 4745h ViewSonic G653 (VCDTS21444-2E)
+SeeAlso: #00136,#00172
+--------V-104F15BL02-------------------------
+INT 10 - VESA VBE/DC (Display Data Channel) - READ VDIF
+ AX = 4F15h
+ BL = 02h
+ ???
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ ???
+ 01h failed
+SeeAlso: AX=4F15h/BL=00h,AX=4F15h/BL=01h
+--------V-104F16-----------------------------
+INT 10 - VESA VBE/GC (Graphics System Configuration) - API
+ AX = 4F16h
+ BL = function
+ 00h installation check / get capabilities
+ other registers vary by function
+Return: varies by function
+--------V-104F17-----------------------------
+INT 10 - VESA VBE/AF (Accelerator Functions) - API
+ AX = 4F17h
+ BL = function
+ 00h installation check / get capabilities
+ other registers vary by function
+Return: AL = 4Fh if function supported
+ AH = status
+ 00h successful
+ 01h failed
+ 02h hardware does not support function
+ 03h function not available in current video mode
+ else reserved for future error codes
+ other vary by function
+Notes: the accelerator function code should be given a 32-bit protected
+ mode stack which has at least 1024 bytes available for use by the
+ VBE/AF code
+ when called, the I/O permission bitmap must allow access to any
+ ports which VBE/AF may require for operation
+SeeAlso: AX=4F0Bh
+--------V-104F4D-----------------------------
+INT 10 - VESA - VIDEO CURSOR INTERFACE REQUEST
+ AX = 4F4Dh
+ BX = number of bytes available for VCI use
+ DS:0000h -> buffer for VCI
+ ES:DI -> VCI driver callback function
+Return: AL = 4Fh if supported
+ AH = status
+ 00h successful
+ BX = number of bytes used by VCI
+ ES:DI -> VCI request handler
+ 01h failed
+Desc: allow the VESA BIOS Extensions to cooperate with a pointing-device
+ (typically mouse) driver
+SeeAlso: AX=4F12h
+--------V-104F70-----------------------------
+INT 10 - Avance Logic - GET ADAPTER INFORMATION
+ AX = 4F70h
+Return: AX = 004Fh if successful
+ BL = board information (see #00174)
+ BH = board type???
+ 00h on ALG2101
+ FFh otherwise
+SeeAlso: AX=4F00h
+
+Bitfields for Avance Logic board information:
+Bit(s) Description (Table 00174)
+ 0-1 video RAM size
+ 00 256K
+ 01 512K
+ 10 1M
+ 11 2M
+ 2 ???
+ 3 slot size???
+ =0 8-bit slot
+ =1 16-bit slot
+ 4 unused
+ 5 set on ALG2228/AL2301
+ 6-7 unused
+--------V-104FDD-----------------------------
+INT 10 - ATI M64VBE.COM - GET RESIDENT SEGMENT
+ AX = 4FDDh
+Return: AX = CS of resident code
+Program: M64VBE is a VESA VBE 2.0 driver TSR for ATI's Mach64 video chip
+SeeAlso: AX=4FFFh/BX=364Dh"M64VBE",INT 60"M64VBE"
+--------V-104FFF-----------------------------
+INT 10 - VESA SuperVGA BIOS - Everex - TURN VESA ON/OFF
+ AX = 4FFFh
+ DL = new state (00h off, 01h on)
+Return: AX = 0000h if successful
+--------V-104FFF-----------------------------
+INT 10 - Diamond Stealth 24 - SET/RESET DUAL DISPLAY MODE
+ AX = 4FFFh
+ BX = dual display mode
+ 00h reset
+ 01h set dual display, 32KB VGA test
+ 02h set dual display, 64KB VGA test
+Return: AX = 4F00h if successful
+ BX = number of scanlines off screen for test mode
+--------V-104FFFBX364D-----------------------
+INT 10 - ATI M64VBE.COM - UNINSTALL
+ AX = 4FFFh
+ BX = 364Dh ('6M')
+ CX = 5634h ('V4')
+Return: AX,DX,DS,ES destroyed
+Program: M64VBE is a VESA VBE 2.0 driver TSR for ATI's Mach64 video chip
+SeeAlso: AX=4FDDh"M64VBE",INT 60"M64VBE"
+--------U-1050-------------------------------
+INT 10 - SCROLOCK.COM - INSTALLATION CHECK
+ AH = 50h
+Return: BX = 1954h if installed
+ AL = 00h if inactive, nonzero if active
+Program: SCROLOCK is a utility supplied with System Enhancement Associates'
+ ARC archiver
+SeeAlso: AH=51h
+--------J-105000-----------------------------
+INT 10 - VIDEO - AX PC - SET SCREEN COUNTRY CODE
+ AX = 5000h
+ BX = country code
+ 0001h USA (English), 0051h Japan
+Return: AL = status
+ 00h successful
+ 01h bad country code
+ 02h other error
+Note: This function is called with BX=0051h by Japanese versions of
+ MS-DOS/PC DOS/DR DOS IO.SYS/IBMBIO.COM at initialization time.
+SeeAlso: AX=5001h,INT 16/AX=5000h
+--------J-105001-----------------------------
+INT 10 - VIDEO - AX PC - GET SCREEN COUNTRY CODE
+ AX = 5001h
+Return: AL = status
+ 00h successful
+ BX = country code
+ 02h error
+SeeAlso: AH=00h,AX=5000h,INT 16/AX=5001h,INT 21/AH=38h
+--------V-105049-----------------------------
+INT 10 - VIDEO - SCREENR v1.55+ - API
+ AX = 5049h ('PI')
+ BX = function
+ 0000h installation check
+ 0001h lock mode
+ 0002h unlock mode
+ 0003h lock palette
+ 0004h unlock palette
+Return: AX = 0000h if installed
+ BX = TSR version (BH=major,BL=minor)
+ CL = mode locking status
+ 00h mode not locked
+ 01h mode locked: INT 10/AH=00h disabled
+ CH = palette locking status
+ 00h palette not locked
+ 01h palette locked, the following functions are disabled:
+ AX=1000h, AX=1001h, AX=1002h, AX=1010h, AX=1012h
+Program: SCREENR is a TSR supplied with Patrick Ibbetson's SCREEN display
+ utility.
+Index: installation check;SCREENR
+--------U-1051-------------------------------
+INT 10 - SCROLOCK.COM - ENABLE/DISABLE
+ AH = 51h
+ AL = state
+ 00h disable
+ nonzero enable
+Return: nothing
+Program: SCROLOCK is a utility supplied with System Enhancement Associates'
+ ARC file archiver
+SeeAlso: AH=50h"SCROLOCK"
+--------J-105100-----------------------------
+INT 10 - VIDEO - AX PC - REGISTER EXTERNAL CHARACTER
+ AX = 5100h
+ BH = character width in bits (10h)
+ BL = character height (10h)
+ DX = character code (DH = F0h-F3h, DL=40h-7Eh,80h-FCh)
+ ES:BP -> character bitmap
+Return: AL = status (00h successful, 01h failed)
+SeeAlso: AX=5101h,INT 1F"SYSTEM DATA"
+--------J-105101-----------------------------
+INT 10 - VIDEO - AX PC - READ CHARACTER
+ AX = 5101h
+ BH = character width in bits
+ BL = character height
+ DX = character code (DH = 00h if 8-bit character)
+ ES:BP -> buffer for character bitmap
+Return: AL = status (00h successful, 01h failed)
+SeeAlso: AH=09h,AX=5100h
+--------J-105200-----------------------------
+INT 10 - VIDEO - AX PC - SET VIRTUAL TEXT RAM BUFFER
+ AX = 5200h
+ BX = segment of buffer
+Return: nothing
+SeeAlso: AX=5201h
+--------J-105201-----------------------------
+INT 10 - VIDEO - AX PC - GET VIRTUAL TEXT RAM BUFFER
+ AX = 5201h
+Return: BX = segment of buffer or 0000h if failed
+SeeAlso: AX=8300h,AH=FEh
+----------1053-------------------------------
+INT 10 - Show Partner F/X v3.6 - START PRESENTATION
+ AH = 53h
+ DS:DX -> ASCIZ name of presentation file (no path, extension forced to
+ .PR2)
+Return: ???
+SeeAlso: AH=55h
+----------1055-------------------------------
+INT 10 - Show Partner F/X v3.6 - UNINSTALL
+ AH = 55h
+Return: FXSHOW.EXE removed from memory
+SeeAlso: AH=53h
+--------V-105555-----------------------------
+INT 10 - VIDEO - ATI EGA/VGA Wonder Super Switch - INSTALLATION CHECK
+ AX = 5555h
+Return: AX = AAAAh if installed
+ BX:CX -> ??? routine in SMS.COM resident portion
+ -> data area (see #00175) in VCONFIG
+Program: Super Switch (SMS.COM) is a video mode switch program supplied with
+ ATI EGA Wonder. It also maps video mode 08h to 27h or 23h.
+SeeAlso: INT 10/AH=00h,INT 14/AX=AA01h,INT 2F/AX=6400h
+Index: screen saver;ATI Wonder SMS.COM
+
+Format of ATI Super Switch data area:
+Offset Size Description (Table 00175)
+ 00h DWORD original INT 09 vector
+ 04h DWORD original INT 10 vector
+ 08h DWORD original INT 1C vector
+ 0Ch WORD screen saver state, 0=off, 1=on
+ 0Eh WORD blanking interval in clock ticks
+----------105555BXAAAA-----------------------
+INT 10 - LIR - SET CONFIGURATION
+ AX = 5555h
+ BX = AAAAh
+ CL = new configuration flags (see #04118)
+ CH > 0 new video adapter configuration (see #04121)
+ = 0 do not update video adapter configuration
+ DL = new keyboard layout flags (see #04119)
+ DH = new alphabet flags (see #04120)
+Return: AX = A55Ah if installed
+Program: LIR is a DOS/Windows 3.xx codepage support package develoved by
+ LABAS u.a.b. It supports several screen and printer codepages as
+ well as various keyboard layouts used in Lithuania.
+ Download at: ftp://ftp.labas.com/pub/drivers/language/lir422.zip
+SeeAlso: AX=5555h/BX=BBBBh,INT 17/AX=5555h/BX=AAAAh
+
+Bitfields for LIR configuration flags:
+Bit(s) Description (Table 04118)
+ 7 program is active
+ 6 ???
+ 5-3 code page
+ 2 Lithuanian???
+ 1 Russian???
+ 0 enable beeps
+SeeAlso: #04119
+
+Bitfields for LIR keyboard layout flags:
+Bit(s) Description (Table 04119)
+ 7-5 keyboard layout
+ 100 QWERTY
+ 010 Lithuanian AZERTY
+ 001 Lithuanian ergonomic FZVPUJ
+ 4-3 reserved (0)
+ 2 Lithuanian keyboard???
+ 1 Russian keyboard???
+ 0 ???
+SeeAlso: #04118,#04120
+
+Bitfields for LIR Alphabet flags:
+Bit(s) Description (Table 04120)
+ 7-3 reserved (0)
+ 2 Lithuanian alphabetic symbol table???
+ 1 Russian alphabetic symbol table???
+ 0 reserved (0)
+SeeAlso: #04118,#04119,#04121
+
+Bitfields for LIR video adapter configuration:
+Bit(s) Description (Table 04121)
+ 7 Hercules Graphics Card (HGC)
+ 6-5 reserved (0)
+ 4 VGA
+ 3 MCGA
+ 2 EGA
+ 1 CGA
+ 0 reserved (0)
+Note: multiple bits may be set if more than one video adapter is installed
+SeeAlso: #04118
+----------105555BXBBBB-----------------------
+INT 10 - LIR - GET CONFIGURATION
+ AX = 5555h
+ BX = BBBBh
+Return: AX = magic signature A55Ah
+ BX = version number (BH = major version, BL = minor version),
+ e.g. BX = 0410h for LIR v4.10, or BX = 0422h for LIR v4.22)
+ CL = configuration flags (see #04118)
+ CH = video adapter configuration (see #04121)
+ DL = keyboard layout flags(see #04119)
+ DH = alphabet flags (see #04120)
+SeeAlso: AX=5555h/BX=AAAAh,INT 17/AX=5555h/BX=BBBBh
+--------V-105F00-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - RETURN CHIP INFORMATION
+ AX = 5F00h
+Return: AL = 5Fh function supported
+ BL = chip type (see #00176)
+ BH = video memory size (see #00177)
+ CX = miscellaneous information (see #00178)
+SeeAlso: AX=5F01h
+
+Bitfields for Chips&Technologies chip type:
+Bit(s) Description (Table 00176)
+ 7-4 chip type
+ 0000: 82c451
+ 0001: 82c452 / 82c452A
+ 0010: 82c455
+ 0011: 82c453
+ 0100: 82c450
+ 0101: 82c456
+ 0110: 82c457
+ 0111: F65520
+ 1000: F65530 / F65525
+ 1001: F66510
+ 1010: ???
+ 1011: F64300 "Wingine DGX"
+ 1100: F65535/F65545 ???
+ 1101: F65540
+ 1110: ???
+ 1111: ???
+ 3-0 revision number
+SeeAlso: #00177
+
+(Table 00177)
+Values for Chips&Technologies video memory size:
+ 00h 256KB
+ 01h 512KB
+ 02h 1MB
+ 03h 2MB
+SeeAlso: #00176
+
+Bitfields for Chips&Technologies miscellaneous information:
+Bit(s) Description (Table 00178)
+ 0 DAC size (0=6-bit, 1=8-bit)
+ 1 system type (0=PC/AT, 1=PS/2)
+ 2 extended text modes supported by BIOS
+ 3 reserved
+ 4 extended graphics modes supported by BIOS
+ 5 reserved
+ 6 BIOS supports graphics cursor
+ 7 BIOS supports anti-aliased font
+ 8 BIOS supports pre-programmed emulation
+ 9 BIOS supports auto emulation
+ 10 BIOS supports variable mode set at cold boot
+ 11 BIOS supports variable mode set on warm boot
+ 12 BIOS supports emulation mode set at cold boot
+ 13 BIOS supports emulation mode set on warm boot
+ 14-15 reserved
+--------V-105F00-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - RETURN CHIP VERSION
+ AX = 5F00h
+Return: AH = 00h, if successful
+ AL = chip version (the same value that VTEST.EXE reads)
+ 00h RTG3103???
+ 01h RTG31030/RTG3105
+ 02h RTG3106???
+ 3Fh non-Realtek chip
+BUG: in v3.C10, AX=5F00h on return due to improper stack restoration code
+SeeAlso: AX=5F01h"RTVGA"
+--------V-105F01-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - SET PREPROGRAMMED EMULATION
+ AX = 5F01h
+ BL = emulation type (see #00179)
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F00h,AX=5F02h,AH=FFh"Oak"
+
+(Table 00179)
+Values for Chips&Technologies emulation type:
+ 00h,01h reserved
+ 02h CGA
+ 03h MDA
+ 04h Hercules
+ 05h EGA
+ 06h VGA (disable emulation)
+--------V-105F01-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - WRITE RTVGA BIOS STRING TO DESTINATION
+ AX = 5F01h
+ ES:DI -> zero-filled buffer for BIOS ID string
+Return: AH = 00h if successful
+ ES:DI -> ASCII signature "REALTEK VGA BIOS Version 3C.10"
+BUG: in v3.C10, AX=5F01h on return due to improper stack restoration code
+SeeAlso: AX=5F00h"RTVGA",AX=5F02h"RTVGA"
+--------V-105F02-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - AUTO EMULATION CONTROL
+ AX = 5F02h
+ BL = new state of autmatic emulation (00h enabled, 01h disabled)
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F01h,AX=5F03h
+--------V-105F02-----------------------------
+INT 10 - Chips & Technologies '64300' BIOS - SET CLOCK
+ AX = 5F02h
+ BH = what to set
+ 02h dot clock
+ BL = speed in MHz (12-99)
+ 03h memory clock
+ BL = speed in MHz (12-99)
+ FFh default dot and memory clocks
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F00h"Chips",AX=5F03h"64300",AX=5F02h"65530"
+--------V-105F02-----------------------------
+INT 10 - Chips & Technologies '65530' BIOS - SET CLOCK
+ AX = 5F02h
+ BH = what to set
+ 02h dot clock
+ BL = new clock speed (see #00180)
+ 03h memory clock
+ BL = new clock speed (see #00180)
+ 04h set power-down register
+ BL = new value for power-down register (bits 3-0 only)
+ 06h (404 clock chip) set control register
+ BL = new vlaue for control register (bits 5-0 only)
+ 06h (404A/B/B-ES clock chips) set control register PWRDN1
+ BL = new value for control register
+ 07h (404A/B/B-ES clock chips) set control register PWRDN1
+ BL = new value for control register
+ FFh default dot and memory clocks
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F01h,AX=5F02h"64300",AX=5FA0h,#00184
+
+(Table 00180)
+Values for C&T '65530' BIOS clock speed:
+ 00h 12 MHz
+ 01h 14 MHz
+ 02h 16 MHz
+ 03h 18 MHz
+ 04h 20 MHz
+ 05h 25 MHz
+ 06h 28 MHz
+ 07h 32 MHz
+ 08h 36 MHz
+ 09h 40 MHz
+ 0Ah 45 MHz
+ 0Bh 50 MHz
+ 0Ch 56 MHz
+ 0Dh 60 MHz
+ 0Eh 65 MHz
+ 0Fh 66 MHz
+ 15h 34 MHz
+--------V-105F02-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - RETURN RTVGA ON-BOARD MEMORY SIZE
+ AX = 5F02h
+Return: AH = 00h, if successful
+ AL = on-board memory size
+ (00h = 256K, 01h = 512K, 02h = 768K, 03h = 1024K)
+BUG: in v3.C10, AX=5F02h on return due to improper stack restoration code
+SeeAlso: AX=5F01h"RTVGA",AX=5F03h"RTVGA"
+--------V-105F03-----------------------------
+INT 10 - VIDEO - Realtek RTVGA - SET ???
+ AX = 5F03h
+ BL = 0-3 (???)
+Return: AH = 00h if successful
+BUG: in v3.C10, AX=5F03h on return due to improper stack restoration code
+SeeAlso: AX=5F02h"RTVGA"
+--------V-105F03BL00-------------------------
+INT 10 - Chips & Technologies Extended BIOS - SET POWER-ON DISPLAY MODE
+ AX = 5F03h
+ BL = 00h
+ CL = display mode
+ CH = mode (see #00181)
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F02h,AX=5F03h/BL=01h"Chips",AX=5F90h
+
+Bitfields for Chips&Technologies display mode:
+Bit(s) Description (Table 00181)
+ 1-0 scanlines (00 = 200, 01 = 350, 10 = 400)
+ 7 persistence (0 reset on next boot, 1 until changed)
+--------V-105F03BH00-------------------------
+INT 10 - Chips & Technologies '64300' BIOS - GET CLOCK SPEED
+ AX = 5F03h
+ BH = 00h (get default memory clock)
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ BL = clock speed in MHz
+SeeAlso: AX=5F02h"64300",AX=5F04h"64300"
+--------V-105F03BL01-------------------------
+INT 10 - Chips & Technologies Extended BIOS - SET POWER-ON EMULATION MODE
+ AX = 5F03h
+ BL = 01h
+ CL = emulation mode (see #00181)
+ CH = permanence
+ bit 7 persistence (0 reset on next boot, 1 until changed)
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F02h,AX=5F03h/BL=00h"Chips",AX=5F90h
+--------V-105F04-----------------------------
+INT 10 - Chips & Technologies '64300' BIOS - GET REFRESH RATE
+ AX = 5F04h
+ BL = video mode number
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ BH = available refresh rates (see #00182)
+ BL = currently-set refresh rate (see #00182)
+SeeAlso: AX=5F03h"64300",AX=5F05h"64300"
+
+Bitfields for C&T 64300 refresh rates:
+Bit(s) Description (Table 00182)
+ 5 75 Hz
+ 4 72 Hz
+ 3 70 Hz
+ 2 60 Hz
+ 1 56 Hz
+ 0 interlaced
+--------V-105F05-----------------------------
+INT 10 - Chips & Technologies '64300' BIOS - SET REFRESH RATE
+ AX = 5F05h
+ BL = video mode number
+ BH = refresh rate to set (see #00182)
+ bit 7: =0 program new clock and CRT parametes
+ =1 keep current parameters
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F04h"64300"
+--------V-105F06-----------------------------
+INT 10 - Chips & Technologies '64300' BIOS - GET XRAM INFORMATION
+ AX = 5F06h
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ BL = XRAM presence (00h no XRAM, 01h present)
+SeeAlso: AX=5F05h,AX=5F08h
+--------V-105F08-----------------------------
+INT 10 - Chips & Technologies '64300' BIOS - SET LINEAR MEMORY START ADDRESS
+ AX = 5F08h
+ BX = desired start address in megabytes
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F06h
+--------V-105F10-----------------------------
+INT 10 - Chips & Technologies '64300'/'65530' BIOS - GET LINEAR MEMORY INFO
+ AX = 5F10h
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ BX:CX = linear memory base address
+ DX = virtual screen width offset (bytes)
+ SI;DI = linear memory size
+SeeAlso: AX=5F08h,AX=5FA0h
+--------V-105F50-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - GET LAPTOP DISPLAY STATUS
+ AX = 5F50h
+Return: DL = display status (see #00183)
+Note: this call can be used on Toshiba laptops since ~1995 instead of
+ INT 42/AX=7503h which is no longer supported with the F655xx chips
+SeeAlso: INT 42/AX=7503h
+
+Bitfields for display status:
+Bit(s) Description (Table 00183)
+ 7-4 always 0 ???
+ 3 1: both displays active (bit 1 also set)
+ 2 1: normal (monochrome display only), 0: inverse or color
+ 1 1: internal display active, 0: external only
+ 0 always set ???
+--------V-105F50-----------------------------
+INT 10 - Chips & Technologies '65530' BIOS - GET 655xx INFORMATION
+ AX = 5F50h
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ BX = width of flat panel in pixels
+ CX = height of flat panel in pixels
+ DX = F65520/525/530 status (see #00184)
+SeeAlso: AX=5F51h,INT 15/AX=5F31h
+
+Bitfields for C&T F65520/525/530 status:
+Bit(s) Description (Table 00184)
+ 15-0 reserved
+ 6-5 type of clock chip
+ 00 = 404
+ 01 = 404A
+ 10 = 404B ES
+ 11 = 404B
+ 4 accelerator enabled
+ 3 both displays active
+ 2 video polarity (1 = inverted)
+ 1 output device
+ 0 CRT
+ 1 flat panel (LCD)
+ 0 reserved
+--------V-105F51-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - SWITCH DISPLAY DEVICE
+ AX = 5F51h
+ BL = new active display
+ 00h CRT
+ 01h flat panel (LCD)
+ 02h both simultaneously
+ BH = 01h to allow reprogramming the DAC
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F50h,AX=5F53h
+--------V-105F53-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - EN/DISABLE ACCELERATOR SUPPORT
+ AX = 5F53h
+ BL = new support state
+ 00h disable buffer/accelerator
+ 01h enable buffer/acelerator
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F50h,AX=5F51h,AX=5F54h
+--------V-105F54-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - TURN FLAT PANEL ON/OFF
+ AX = 5F54h
+ BL = new state
+ 00h on
+ 01h off
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F50h,AX=5F51h,AX=5F53h,AX=5F5Ah
+--------V-105F5A-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - SET FLAT-PANEL VIDEO POLARITY
+ AX = 5F5Ah
+ BL = new video polarity
+ 00h normal
+ 01h inverted
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F50h,AX=5F54h
+--------V-105F5C-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - SET VERTICAL COMPENSATION
+ AX = 5F5Ch
+ BL = type of vertical compensation to use
+ 00h no compensation
+ 01h automatic centering
+ 02h set centering register
+ DX = centering value (bits 9-0 only)
+ 03h non-automatic centering
+ 04h set vertical line insertion register
+ DL = vertical line insertion (bits 3-0 only)
+ 05h set alternate maximum scanline register
+ DL = alternate maximum scanline (bits 4-0 only)
+ 06h enable text stretching, type 0
+ 07h enable text stretching, type 1
+ 08h enable text stretching, type 2
+ 09h enable text stretching, type 3
+ 0Ah disable text stretching
+ 0Bh set vertical line replication register
+ DL = vertical line replication (bits 3-0 only)
+ 0Ch enable graphics stretching, type 0
+ 0Dh enable graphics stretching, type 1
+ 0Eh disable vertical graphics stretching
+ 0Fh disable all horizontal and vertical compensation
+ 10h enable optimal compensation
+ 11h disable optimal compensation
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F50h,AX=5F5Eh,AX=5F5Fh
+--------V-105F5E-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - EN/DISABLE TALL FONT LOADING
+ AX = 5F5Eh
+ BL = new state of tall-font loading
+ 00h enable loading of 8x19/30/32 fonts
+ 01h disable loading of 8x19/30/32 fonts
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+Note: when tall fonts are enabled, the fonts are stretched by duplicating
+ scan lines as appropriate to convert an 8x16 font to the proper
+ height (scan lines 1/9/12 [8x19] or 2-15 [8x30] or all [8x32])
+SeeAlso: AX=5F5Ch,AX=5F5Fh
+--------V-105F5F-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - HORIZONTAL COMPENSATION
+ AX = 5F5Fh
+ BL = horizontal compensation type
+ 00h none
+ 01h automatic centering
+ 02h set centering register
+ DL = centering value
+ 03h non-automatic centering
+ 04h enable text compression (force 8xN fonts)
+ 05h disable text compression (allow 9xN fonts)
+ 06h enable auto doubling
+ 07h disable auto doubling
+ 0Fh disable all horizontal and vertical compensation
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AX=5F50h,AX=5FA0h
+--------V-105F90-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - GET SUPERVGA STATE BUFFER SIZE
+ AX = 5F90h
+ CX = state mask (see #00185)
+Return: AL = 5Fh if function supported
+ BX = number of 64-byte blocks required
+SeeAlso: AH=1Ch,AX=5F03h,AX=5F91h,AX=5F92h,AX=5FA0h
+
+Bitfields for Chips&Technologies state mask:
+Bit(s) Description (Table 00185)
+ 0 video hardware
+ 1 BIOS data state
+ 2 DAC state
+ 15 type (0 all state info, 1 SuperVGA state only)
+--------V-105F91-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - SAVE SUPERVGA STATE
+ AX = 5F91h
+ CX = state mask (see #00185)
+ ES:BX -> save buffer
+Return: AL = 5Fh if function supported
+ buffer at ES:BX filled
+SeeAlso: AH=1Ch,AX=5F03h,AX=5F90h,AX=5F92h,AX=5FA1h
+--------V-105F92-----------------------------
+INT 10 - Chips & Technologies Extended BIOS - RESTORE SUPERVGA STATE
+ AX = 5F92h
+ CX = state mask (see #00185)
+ ES:BX -> previously-filled save buffer
+Return: AL = 5Fh if function supported
+SeeAlso: AH=1Ch,AX=5F03h,AX=5F90h,AX=5F92h,AX=5FA2h
+--------V-105FA0-----------------------------
+INT 10 - Chips & Technologies Wingine DGX - GET EXTENDED BIOS SAVE BUFFER SIZE
+ AX = 5FA0h
+ CX = state(s) to be saved (see #00186)
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ BX = number of 64-byte blocks required for state
+SeeAlso: AH=1Ch,AX=5FA1h,AX=5FA2h,AX=5F90h,AX=4F04h
+
+Bitfields for C&T BIOS save/restore state type:
+Bit(s) Description (Table 00186)
+ 0 video hardware
+ 1 BIOS data
+ 2 DAC and color registers
+ 14 (65530 BIOS with AL=A1h only) clear emulation state
+ 15 extended registers
+SeeAlso: #00048,#00085
+--------V-105FA1-----------------------------
+INT 10 - Chips & Technologies Wingine DGX - SAVE VIDEO STATE
+ AX = 5FA1h
+ CX = state(s) to be saved (see #00186)
+ ES:BX -> buffer for state information
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+ ES:BX buffer filled
+SeeAlso: AH=1Ch,AX=5FA0h,AX=5FA2h,AX=5F91h
+--------V-105FA2-----------------------------
+INT 10 - Chips & Technologies Wingine DGX - RESTORE VIDEO STATE
+ AX = 5FA2h
+ CX = state(s) to be restored (see #00186)
+ ES:BX -> buffer containing previously-saved state information
+Return: AL = 5Fh if function supported
+ AH = status
+ 00h unsuccessful
+ 01h successful
+SeeAlso: AH=1Ch,AX=5FA0h,AX=5FA1h,AX=5F92h
+--------V-1060------------------------------------
+INT 10 - HUNTER 16 - SET GRAPHICS FONT
+ AH = 60h
+ AL = new font
+ bit 7 output characters in reverse video
+ bits 0-6 font number (see #00200 at AH=77h)
+Return: BH = cell width
+ BL = cell height
+Desc: select the font to use for output in mode 6; this can be used to mix
+ fonts on the screen
+Note: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+SeeAlso: AH=04h"HUNTER",AH=73h"HUNTER",AH=77h"HUNTER"
+--------V-1061------------------------------------
+INT 10 - HUNTER 16 - MOVE CURSOR TO GRAPHICS CO-ORDINATES
+ AH = 61h
+ CX = column
+ DX = row
+Return: nothing
+Note: this function is only valid in graphics modes
+SeeAlso: AH=62h
+--------V-1062------------------------------------
+INT 10 - HUNTER 16 - GET CURSOR POSITION IN GRAPHICS CO-ORDINATES
+ AH = 62h
+Return: CX = column
+ DX = row
+Note: this function is only valid in graphics modes
+SeeAlso: AH=61h
+--------V-1063------------------------------------
+INT 10 - HUNTER 16 - SET CONTRAST
+ AH = 63h
+ AL = contrast (0..127)
+Return: nothing
+Desc: set the LCD screen contrast to improve visibility
+SeeAlso: AH=64h,AH=75h
+--------V-1064------------------------------------
+INT 10 - HUNTER 16 - SET BACKLIGHT LEVEL
+ AH = 64h
+ AL = level (0..15)
+Return: nothing
+Desc: set the LCD backlight level to improve visibility in bad lighting
+SeeAlso: AH=63h,AH=65h,AH=74h,AH=78h"HUNTER",INT 15/AH=74h
+--------V-106500----------------------------------
+INT 10 - HUNTER 16 - GET BACKLIGHT TIMEOUT
+ AX = 6500h
+Return: BX = timeout in seconds (0-300)
+Desc: returns the time after which the backlight will turn off
+SeeAlso: AH=63h,AH=64h,AX=6501h,INT 15/AH=74h
+--------V-106501----------------------------------
+INT 10 - HUNTER 16 - SET BACKLIGHT TIMEOUT
+ AX = 6501h
+ BX = timeout in seconds (0-300)
+Return: nothing
+Desc: set the idle time after which the backlight will turn off
+SeeAlso: AH=64h,AX=6500h
+--------V-1066------------------------------------
+INT 10 - HUNTER 16 - SPLIT DISPLAY
+ AH = 66h
+ AL = control bits (see #00187)
+ BH = top row of lower section of LCD (0..7)
+ BL = top row of lower section of the virtual screen (0..24)
+Return: nothing
+Desc: split the LCD screen horizontally into two parts; each part may be
+ individually scrollable or fixed.
+Note: the Hunter 16 has a 240x64 LCD display which serves as a window into
+ a 640x200 virtual screen
+
+Bitfields for HUNTER 16 control bits:
+Bit(s) Description (Table 00187)
+ 0-1 01: no split, 10: allow split
+ 2 allow scrolling the upper part
+ 3 allow scrolling the lower part
+--------V-106A00BX0000-----------------------
+INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
+ AX = 6A00h
+ BX = 0000h
+ CX = 0000h
+ DX = buffer length (may be 0)
+ ES:DI -> buffer
+Return: BX = number of bytes stored in buffer
+ CX = bytes required for all descriptions (0 if no DGIS)
+Note: buffer contains descriptions and addresses of DGIS-compatible
+ display(s) and printer(s)
+SeeAlso: AX=6A02h
+--------V-106A01CX0000-----------------------
+INT 10 - Direct Graphics Interface Standard (DGIS) - REDIRECT CHARACTER OUTPUT
+ AX = 6A01h
+ CX = 0000h
+ ES:DI = address of device to send INT 10 output to
+Return: CX = 0000h output could not be redirected
+ else INT 10h output now routed to requested display
+SeeAlso: AX=6A02h
+--------V-106A02-----------------------------
+INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
+ AX = 6A02h
+ ES:DI = 0000h:0000h
+Return: ES:DI = 0000h:0000h if current display is non-DGIS
+ else address of the current DGIS INT 10 display
+SeeAlso: AX=6A00h,AX=6A01h
+--------V-106D74-----------------------------
+INT 10 - MTRFONTS - INSTALLATION CHECK
+ AX = 6D74h ('mt')
+ DS:0104h = signature "MtRfOnTs"
+Return: AX = 4D54h ('MT') if installed
+ ES = PSP segment of resident code
+Program: MTRFONTS is a shareware TSR (part of the MTR package) by Mechon Mamre
+ which provides Hebrew screen fonts
+SeeAlso: INT 16/AX=6D74h"MTRTSR"
+--------V-106E00-----------------------------
+INT 10 - Paradise VGA internal - GET ???
+ AX = 6E00h
+Return: BX = 5744h ('WD') if supported
+ DH:AH:AL = last three ASCII digits of ROM serial number
+ CL = ???
+ CH = ???
+SeeAlso: AX=6E04h,AX=6E05h
+--------V-106E04-----------------------------
+INT 10 - Paradise VGA internal - GET SCREEN SIZE AND ???
+ AX = 6E04h
+Return: BX = screen width (columns)
+ CX = screen height (lines)
+ AH = ??? (05h or FFh)
+ AL = ??? (04h or video mode)
+SeeAlso: AX=6E00h,AX=6E05h
+--------V-106E05-----------------------------
+INT 10 - Paradise VGA internal - SET MODE
+ AX = 6E05h
+ BL = mode
+Return: nothing
+Note: like AH=00h, AL=BL.
+SeeAlso: AH=00h,AX=6E00h,AX=6E04h,AX=6F05h
+--------V-106F00-----------------------------
+INT 10 - HP Vectra EX-BIOS - INSTALLATION CHECK
+ AX = 6F00h
+ BX <> 4850h (usually set to 0000h for simplicity)
+Return: BX = 4850h ('HP') indicates HP Extended BIOS video functions present
+ AX destroyed
+SeeAlso: AX=6F00h"Video7",AX=6F01h,AX=6F02h,AX=6F03h,AX=6F04h,AX=6F05h
+SeeAlso: INT 14/AX=6F00h,INT 16/AX=6F00h,INT 17/AX=6F00h,INT 33/AX=6F00h
+--------V-106F00BX0000-----------------------
+INT 10 - VIDEO - Video7 VGA,VEGA VGA - INSTALLATION CHECK
+ AX = 6F00h
+ BX = 0000h
+Return: BX = 5637h ('V7') indicates Video7 VGA/VEGA VGA extensions are present
+SeeAlso: AX=6F01h,AX=6F02h,AX=6F03h,AX=6F04h,AX=6F05h
+--------V-106F01-----------------------------
+INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP EX-BIOS - GET MONITOR INFO
+ AX = 6F01h
+Return: AL = monitor type code (HP,VEGA VGA only) (see #00188)
+ AH = status register information (see #00189)
+ CL = current value of Extended Control register (HP Ext BIOS, and only
+ if AL=41h) (see #00190)
+Notes: bits 0-3 are the same as the EGA/VGA status register bits 0-3
+ supported by original HP Vectra AT and by ES/QS/RS series Vectras
+
+(Table 00188)
+Values for monitor type code (HP Extended BIOS):
+ 00h non-HP card with ROM and possibly its own INT 10h driver
+ 41h MultiMode video display adapter
+ 42h-44h reserved
+ 45h industry standard monochrome display adapter
+ 46h industry standard color display adapter
+ 51h reserved
+
+Bitfields for status register information:
+Bit(s) Description (Table 00189)
+ 0 display enable
+ 0 = display enabled
+ 1 = vertical or horizontal retrace in progress
+ 1 light pen flip flop set
+ 2 light pen switch activated
+ 3 vertical sync
+ 4 monitor resolution
+ 0 = high resolution (>200 lines)
+ 1 = low resolution (<=200 lines)
+ 5 display type (0 = color, 1 = monochrome)
+ 6,7 diagnostic bits
+Note: bits 0-3 are the same as the EGA/VGA status register bits 0-3
+--------V-106F02-----------------------------
+INT 10 - HP Vectra EX-BIOS - SET MONITOR INFO
+ AX = 6F02h
+ BL = new value for extended control register (see #00190)
+Return: AX,BL destroyed
+Notes: this function is only valid when an HP MultiMode Video Display Adapter
+ is installed
+ the Extended Control register is at I/O address 3DDh
+SeeAlso: AX=6F01h,AX=6F03h
+
+Bitfields for HP Vectra extended control register:
+Bit(s) Description (Table 00190)
+ 0 screen resolution (0 = 200 lines, 1 = 400 lines)
+ 1 underline enable (if set, 'blue' of fg color = underline)
+ 2 font (0 = Standard-8, 1 = HP-Roman-8)
+ 3 memory disabled for CPU access
+ 4 allow access to full 32K memory instead of wrapping at 16K
+ 5 select second 16K page instead of first
+ 6,7 unused
+--------V-106F03-----------------------------
+INT 10 - HP Vectra EX-BIOS - MODIFY MONITOR INFO
+ AX = 6F03h
+ BH = exclude mask (set bits are not modified)
+ BL = new values for bits indicated by BH (see #00190)
+Return: AX destroyed
+Notes: this function is only valid when an HP MultiMode Video Display Adapter
+ is installed
+ supported by original HP Vectra AT and by ES/QS/RS series Vectras
+SeeAlso: AX=6F01h,AX=6F02h
+--------V-106F04-----------------------------
+INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Vectra - GET MODE AND SCREEN RESOLUTION
+ AX = 6F04h
+Return: AL = current video mode (see #00191)
+ BX = horizontal columns (text) or pixels (graphics)
+ CX = vertical columns (text) or pixels (graphics)
+SeeAlso: AX=6F05h
+--------V-106F05-----------------------------
+INT 10 - VIDEO - Video7 VGA,VEGA EXTENDED EGA/VGA,HP Vectra - SET VIDEO MODE
+ AX = 6F05h
+ BL = mode (see #00191)
+Return: AX,BL destroyed
+Notes: also supported by the HP Vectra Extended BIOS on the original
+ HP Vectra AT and by ES/QS/RS series Vectras
+ on the HP Vectra, this function rather than AH=00h must be used to
+ return to an IBM-standard mode after setting an HP-specified mode
+ from 08h to 0Fh.
+SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h
+
+(Table 00191)
+Values for Video7/VEGA video mode:
+ text/ text pixel pixel colors disply scrn system
+ grph resol box resolution pages addr
+ 00h-13h = standard IBM modes (see #00010 at AH=00h)
+ 08h = T 80x27 . . mono . . HP MultiMode Video
+ 09h = T 80x27 . . . . . HP MultiMode Video
+ 0Ah = T 40x27 . . mono . . HP MultiMode Video
+ 0Bh = T 40x27 . . . . . HP MultiMode Video
+ 0Ch = reserved HP MultiMode Video
+ 0Dh = G . . 640x400 . . . HP MultiMode Video
+ 0Eh = G . . 320x400 . . . HP MultiMode Video
+ 0Fh = G . . 320x400 . . . HP MultiMode Video
+ 40h = T 80x43 8x8 . . . . Video7/VEGA VGA
+ 41h = T 132x25 8x14 . . . . Video7/VEGA VGA
+ 42h = T 132x43 8x8 . . . . Video7/VEGA VGA
+ 43h = T 80x60 8x8 . . . . Video7/VEGA VGA
+ 44h = T 100x60 8x8 . . . . Video7/VEGA VGA
+ 45h = T 132x28 8x8 . . . . Video7/VEGA VGA
+ 60h = G . . 752x410 16 . . Video7 VGA, VEGA VGA
+ 61h = G . . 720x540 16 . . Video7 VGA, VEGA VGA
+ = G . . 720x540 16 . . Northgate, Headland 1024i
+ 62h = G . . 800x600 16 . . Video7 VGA, VEGA Ext EGA
+ = G . . 800x600 16 . . Headland 1024i
+ 63h = G . . 1024x768 2 . . Video7 VGA
+ 64h = G . . 1024x768 4 . . Video7 VGA
+ 65h = G . . 1024x768 16 . . Video7 VGA, VEGA Ext EGA
+ = G . . 1024x768 16 . . Headland 1024i
+ 66h = G . . 640x400 256 . . Video7 VGA, VEGA Ext VGA
+ = G . . 640x400 256 . . Northgate, Headland 1024i
+ 67h = G . . 640x480 256 . . Video7 VGA, VEGA Ext VGA
+ = G . . 640x480 256 . . Headland 1024i
+ 68h = G . . 720x540 256 . . Video7 VGA, VEGA Ext VGA
+ = G . . 720x540 256 . . Headland 1024i
+ 69h = G . . 800x600 256 . . Video7 VGA, VEGA Ext VGA
+ = G . . 800x600 256 . . Headland 1024i
+ 70h = G . . 752x410 16gray . . Video7 VGA, VEGA VGA
+ 71h = G . . 720x540 16gray . . Video7 VGA, VEGA VGA
+ 72h = G . . 800x600 16gray . . Video7 VGA
+ 73h = G . . 1024x768 2gray . . Video7 VGA
+ 74h = G . . 1024x768 4gray . . Video7 VGA
+ 75h = G . . 1024x768 16gray . . Video7 VGA
+ 76h = G . . 640x400 256gray . . Video7 VGA
+ 77h = G . . 640x480 256gray . . Video7 VGA
+ 78h = G . . 720x540 256gray . . Video7 VGA
+ 79h = G . . 800x600 256gray . . (future)
+SeeAlso: AH=00h,#00010,AX=0070h,#00011,AX=007Eh,AX=6F04h,#00083
+Index: video modes;Video 7|video modes;VEGA|video modes;Headland
+--------V-106F06-----------------------------
+INT 10 - VIDEO - Video7 VGA,VEGA VGA - SELECT AUTOSWITCH MODE
+ AX = 6F06h
+ BL = Autoswitch mode select
+ 00h select EGA/VGA-only modes
+ 01h select Autoswitched VGA/EGA/CGA/MGA modes
+ 02h select 'bootup' CGA/MGA modes
+ BH = enable/disable (00h enable, 01h = disable selection)
+Return: nothing
+--------V-106F07-----------------------------
+INT 10 - VIDEO - Video7 VGA,VEGA VGA - GET VIDEO MEMORY CONFIGURATION
+ AX = 6F07h
+Return: AL = 6Fh
+ AH = memory configuration
+ bits 0-6 = number of 256K blocks of video memory
+ bit 7 = DRAM/VRAM (0: DRAM, 1: VRAM)
+ BH = chip revision (SR8F) (S/C Chip in VEGA VGA)
+ BL = chip revision (SR8E) (G/A Chip in VEGA VGA)
+ CX = 0000h
+SeeAlso: AH=12h/BL=10h
+--------V-1070-------------------------------
+INT 10 - VIDEO - TANDY 2000 only - GET ADDRESS OF VIDEO RAM
+ AH = 70h
+Return: AX:BX -> WORD containing green plane's offset
+ AX:CX -> WORD containing green plane's segment
+ AX:DX -> WORD containing segment of red (offset 0) and blue (offset
+ 4000) planes
+SeeAlso: AH=71h
+--------V-1070------------------------------------
+INT 10 - HUNTER 16 - DRAW ELLIPSE/CIRCLE
+ AH = 70h
+ DS:BX -> control block (see #00192)
+Return: nothing
+Desc: Draws a circle or ellipse. Only valid in graphics modes.
+Note: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+SeeAlso: AH=71h"HUNTER"
+
+Format of HUNTER 16 control block:
+Offset Size Description (Table 00192)
+ 00h WORD center X co-ordinate
+ 02h BYTE center Y co-ordinate
+ 03h WORD radius in pixels
+ 05h BYTE color (00h white, 01h black, FFh invert)
+ 06h BYTE aspect ratio x:x (1-127)
+ 07h BYTE aspect ratio y:y (1-127)
+--------V-107000BX0000-----------------------
+INT 10 - Everex Extended Video BIOS - RETURN EMULATION STATUS
+ AX = 7000h
+ BX = 0000h
+Return: AL = 70h if Trident-based Everex card
+ CL = monitor type (see #00193)
+ CH = feature bits (see #00194)
+ DX = video board info
+ bits 4-15: board ID model (see #00195)
+ bits 0-3: board ID revision
+ DI = BCD BIOS version number
+SeeAlso: AX=5F01h,AH=FFh"Oak"
+
+(Table 00193)
+Values for Everex monitor type:
+ 00h mono
+ 01h CGA
+ 02h EGA
+ 03h digital multifrequency
+ 04h IBM PS/2
+ 05h IBM 8514
+ 06h SuperVGA
+ 07h analog multifrequency
+ 08h super multifrequency
+
+Bitfields for Everex feature bits:
+Bit(s) Description (Table 00194)
+ 7-6 memory size
+ 00 = 256K
+ 01 = 512K
+ 10 = 1024K
+ 11 = 2048K
+ 5 special oscillator present
+ 4 VGA protect enabled
+ 0 6845 emulation
+
+(Table 00195)
+Values for board model for Trident-based Everex cards:
+ 0236h Ultragraphics II
+ 0620h Vision VGA
+ 0673h EVGA
+ 0678h Viewpoint
+--------V-107000BX0004-----------------------
+INT 10 - Everex Extended Video BIOS - GET PAGING FUNCTION POINTER FOR CURR MODE
+ AX = 7000h
+ BX = 0004h
+Return: ES:DI -> FAR paging function (call with DL = page to set)
+Note: the word preceding ES:DI is the length of the function in bytes, and
+ the last byte of the function is a FAR return instruction.
+SeeAlso: AX=4F05h,AX=7000h/BX=0000h,AX=7000h/BX=0005h
+--------V-107000BX0005-----------------------
+INT 10 - Everex Extended Video BIOS - GET SUPPORTED MODE INFO
+ AX = 7000h
+ BX = 0005h
+ CL = maximum number of modes to get info for
+ CH = mode type to get info for (see #00196)
+ DL = monitor type to get info for
+ ES:DI -> buffer for mode info (see #00197)
+Return: CL = total number of modes fitting criteria
+ CH = size of each info record
+SeeAlso: AX=7000h/BX=0000h,AX=7000h/BX=0004h
+
+(Table 00196)
+Values for Everex mode type:
+ 00h all modes
+ 01h monochrome text modes
+ 02h color text modes
+ 03h four-color CGA graphics modes
+ 04h two-color CGA graphics modes
+ 05h 16-color graphics modes
+ 06h 256-color graphics modes
+
+Format of Everex mode information record:
+Offset Size Description (Table 00197)
+ 00h BYTE mode number (bit 7 set if extended mode)
+ 01h BYTE mode type (see #00196)
+ 02h BYTE info bits (see #00198)
+ 03h BYTE font height
+ 04h BYTE text columns on screen
+ 05h BYTE text rows on screen
+ 06h WORD number of scan lines
+ 08h BYTE color information
+ bits 7-4 reserved
+ 3-0 bits per pixel
+
+Bitfields for Everex info bits:
+Bit(s) Description (Table 00198)
+ 7,6 reserved
+ 5 monochrome mode
+ 4 interlaced display
+ 3 requires special oscillator
+ 2,1 memory required (00 = 256K, 01 = 512K, 10 = 1024K, 11 = 2048K)
+ 0 reserved
+--------V-1071-------------------------------
+INT 10 - VIDEO - TANDY 2000 only - GET ADDRESS OF INCRAM
+ AH = 71h
+Return: AX:BX -> WORD containing segment address of INCRAM
+ AX:CX -> WORD containing offset of INCRAM
+SeeAlso: AH=70h"TANDY"
+--------V-1071------------------------------------
+INT 10 - HUNTER 16 - DRAW LINE/BOX
+ AH = 71h
+ DS:BX -> control block (see #00199)
+Return: nothing
+Desc: Draws a line or box. Only valid in graphics modes.
+SeeAlso: AH=70h"HUNTER"
+
+Format of HUNTER 16 control block:
+Offset Size Description (Table 00199)
+ 00h WORD left edge X co-ordinate
+ 02h BYTE lower edge Y co-ordinate
+ 03h WORD right edge X co-ordinate
+ 05h BYTE upper edge Y co-ordinate
+ 06h BYTE color (00h white, 01h black, FFh invert)
+ 07h BYTE type (00h line, 01h box)
+ 08h BYTE if non-zero (and type is BOX) fill with color
+--------V-1072-------------------------------
+INT 10 - VIDEO - TANDY 2000 only - SCROLL RIGHT PART OR ALL OF SCREEN
+ AH = 72h
+ AL = number of columns to shift scroll area, 00h to clear entire area
+ BH = new attributes for blanked columns at left
+ CH,CL = row, column of upper left corner of scroll area
+ DH,DL = row, column of lower right corner of scroll area
+Return: nothing
+SeeAlso: AH=06h,AH=07h,AH=73h"TANDY",INT 15/AH=12h/BH=05h
+--------V-1072------------------------------------
+INT 10 - HUNTER 16 - SELECT TEXT-MODE INVERSE VIDEO MECHANISM
+ AH = 72h
+ AL = mechanism to use
+ 00h do not use inverse video
+ 01h emulate MDA. Display attribute 07h is normal video and 70h is
+ inverse video.
+ 02h use inverse video if background is non-black.
+ 03h use inverse video for high intensity text.
+ 04h use inverse video for text with background intensity greater
+ than foreground intensity.
+ 05h use inverse video for text with background color other than
+ black or high intensity foreground.
+Return: nothing
+SeeAlso: AH=70h"HUNTER",AH=71h"HUNTER"
+--------V-1073-------------------------------
+INT 10 - VIDEO - TANDY 2000 only - SCROLL LEFT PART OR ALL OF SCREEN
+ AH = 73h
+ AL = number of columns to shift scroll area, 00h to clear entire area
+ BH = new attributes for blanked columns at right
+ CH,CL = row, column of upper left corner of scroll area
+ DH,DL = row, column of lower right corner of scroll area
+Return: nothing
+SeeAlso: AH=06h,AH=07h,AH=72h"TANDY",INT 15/AH=12h/BH=05h
+--------V-1073------------------------------------
+INT 10 - HUNTER 16 - SELECT TEXT FONT
+ AH = 73h
+ AL = new font
+ 00h 7x7 in a 8x8 cell
+ 01h 5x7 in a 6x8 cell
+ 06h 3x5 in a 4x6 cell
+Return: BH = cell width
+ BL = cell height
+SeeAlso: AH=60h"HUNTER",AH=77h"HUNTER"
+--------V-1074------------------------------------
+INT 10 - HUNTER 16 - SET LCD WINDOWS POSITION
+ AH = 74h
+ DH = row (0..24)
+ DL = column (0..79)
+Return: nothing
+Desc: set the position in the virtual screen being displayed in the LCD
+ screen. If Split Screen (INT 10/AH=66h) is used, this call sets the
+ position for the window which has the cursor.
+SeeAlso: AH=66h"HUNTER",AH=75h,AH=76h
+--------V-1075------------------------------------
+INT 10 - HUNTER 16 - SET ZOOM
+ AH = 75h
+ AL = new Zoom state (00h off, nonzero on)
+Return: nothing
+SeeAlso: AH=74h,AH=76h
+--------V-1076------------------------------------
+INT 10 - HUNTER 16 - LOOKING KEYS
+ AH = 76h
+ AL = action
+ 00h home the window
+ 01h move up one line
+ 02h move down one line
+ 03h move left one character
+ 04h move right one character
+ 05h flip window to other side of virtual screen
+Return: nothing
+Desc: moves the displayed screen around the virtual screen
+SeeAlso: AH=74h,AH=75h
+--------V-1077------------------------------------
+INT 10 - HUNTER 16 - GET GRAPHICS FONT
+ AH = 77h
+Return: AL = font number (see #00200)
+SeeAlso: AH=60h"HUNTER",AH=73h"HUNTER"
+
+(Table 00200)
+Values for HUNTER 16 graphics font number:
+ 00h 7x7 in a 8x8 cell
+ 01h 5x7 in a 6x8 cell
+ 02h 7x9 in a 8x10 cell
+ 03h 14x9 in a 16x10 cell
+ 04h 7x18 in a 8x20 cell
+ 05h 14x18 in a 16x20 cell
+ 06h 3x5 in a 4x6 cell
+Note: size is X * Y
+--------V-1078------------------------------------
+INT 10 - HUNTER 16 - TURN BACKLIGHT ON/OFF
+ AH = 78h
+ AL = new state of backlight (00h on, 01h off)
+Return: nothing
+SeeAlso: AH=64h,INT 15/AH=74h
+--------V-107F-------------------------------
+INT 10 - Paradise SVGA - WD90C24 INSTALLATION CHECK
+ AH = 7Fh
+Return: AX = 1234h if WD90C24 chip installed
+--------V-107F00-----------------------------
+INT 10 - SOLLEX SuperVGA - GET EXTENSIONS INFO
+ AX = 7F00h
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ ES:DI -> info structure (see #00201)
+ 01h failed
+Program: the SOLLEX (Smos videO controLLer EXtensions) SuperVGA functions are
+ an extension to the VESA SuperVGA BIOS Extensions (see AX=4F00h) by
+ Seiko Epson Corporation intended to provided a standardized interface
+ to SuperVGA functionality not addressed by the VESA standard
+SeeAlso: AX=4F00h
+
+Format of SOLLEX SuperVGA info structure:
+Offset Size Description (Table 00201)
+ 00h DWORD pointer to VESA function dispatch table
+ 04h DWORD pointer to SOLLEX function dispatch table
+ 08h DWORD pointer to VESA SuperVGA info (see #00077 at AX=4F00h)
+ 0Ch DWORD pointer to mode info structure table, consisting of
+ alternating ResInfo (see #00202) and VESA mode information
+ (see #00079 at AX=4F01h) blocks, terminated with an FFFFh word
+ 10h DWORD pointer to font info structure table (see #00203)
+ 14h WORD high resolution crystal frequency in Hz (0000h = not present)
+ 16h DWORD pointer to ASCIZ ID string
+ 1Ah DWORD pointer to timeout reset table
+ array of bytes, each a multiple of the minimum time increment
+ 1Eh WORD minimum time increment in timer ticks
+ 20h BYTE inverse options supported
+ bit 0: inverse supported
+ bits 1-7: reserved
+ 21h BYTE normal color value
+ 22h BYTE inverse color value
+ 23h WORD port to be accessed for normal/inverse settings
+ 25h WORD type of interface chip (currently undefined)
+ 27h WORD program operational mode
+ bits 1-0: 00 no preference
+ 01 terse (minimum detail in program messages)
+ 10 verbose
+ 11 use menus if supported, verbose mode otherwise
+ bits 7-2: reserved
+ 29h WORD SOLLEX specification version
+ 2Bh WORD version of VESA/SOLLEX implementation
+ 2Dh DWORD offset to relocatable portion of SOLLEX extensions (for CONFIG)
+ 2Eh DWORD offset to unused section of the extensions ROM
+ 31h 16 BYTEs reserved
+Note: all DWORD pointers initially require segment fixups; if the segment
+ is 0000h, it should be changed to the returned ES, otherwise it
+ may be assumed to be correct
+
+Format of SOLLEX SuperVGA ResInfo:
+Offset Size Description (Table 00202)
+ 00h WORD 16-bit mode number
+ 02h WORD adapter type (00h VGA, 01h EGA, 02h CGA, 03h MDA)
+ 04h WORD display info (see #00206)
+ 06h DWORD pointer to video parameter table
+ 0Ah BYTE replacement entry in master Video Parameter
+ 0Bh BYTE mode requested for mode set by BIOS
+ 0Ch DWORD pointer to LoadReg table
+ 10h BYTE index into table of clock values (see #00204)
+SeeAlso: #00201
+
+Format of SOLLEX SuperVGA font info table [array] entry:
+Offset Size Description (Table 00203)
+ 00h BYTE required font height
+ 01h BYTE parameter to load text mode font
+ 02h BYTE parameter to load graphics mode font
+SeeAlso: #00201
+
+(Table 00204)
+Values for SOLLEX SuperVGA clock value index:
+ 00h 25 MHz
+ 01h 28 MHz
+ 02h PCLK
+ 03h 31.5 MHz (VESA 640x480)
+ 04h reserved
+ 05h 16 MHz (EGA)
+ 06h PCLK
+ 07h 24 MHz (EGA)
+ 08h 25 MHz
+ 09h 28 MHz
+ 0Ah 36 MHz
+ 0Bh 45 MHz (for 1024x768)
+ 0Ch 80 MHz
+ 0Dh 40 MHz
+ 0Eh 65 MHz
+ 0Fh 1 MHz (for powerdown)
+SeeAlso: #00201
+--------V-107F00BX4000-----------------------
+INT 10 - Diamond Stealth 24 - GET S3 INFORMATION BLOCK
+ AX = 7F00h
+ BX = 4000h
+Return: AX = 007Fh if supported
+ DX:BX -> DAC set mode routine
+SeeAlso: AX=7F00h/BX=4001h,AX=7F00h/BX=4002h,#00732 at INT 1A/AX=B102h
+--------V-107F00BX4001-----------------------
+INT 10 - Diamond Stealth 24 - GET LINEAR ADDRESS
+ AX = 7F00h
+ BX = 4001h
+Return: AX = 007Fh if supported
+ CX = current linear address base (high word)
+SeeAlso: AX=7F00h/BX=4000h,AX=7F00h/BX=4002h
+--------V-107F00BX4002-----------------------
+INT 10 - Diamond Stealth 24 - SET LINEAR ADDRESS
+ AX = 7F00h
+ BX = 4002h
+ CX = new linear address base (high word)
+Return: AX = 007Fh if supported
+SeeAlso: AX=7F00h/BX=4000h,AX=7F00h/BX=4001h
+--------V-107F01BL00-------------------------
+INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - SET ADAPTER
+ AX = 7F01h
+ BL = 00h
+ CX = adapter request (see #00205)
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+Note: initializes video hardware to a particular standard
+SeeAlso: AX=7F00h"SOLLEX",AX=7F01h/BL=01h,AX=7F01h/BL=02h
+
+Bitfields for SOLLEX SuperVGA adapter request:
+Bit(s) Description (Table 00205)
+ 1-0 adapter type (00 VGA, 01 EGA, 10 CGA, 11 MDA)
+ 2 reserved
+ 4-3 change displays (00 none, 01 analog 10 digital 11 panel)
+ 6-5 desired monitor sense (01 color, 10 mono, 11=8514)
+ 7 lock override
+ 8 alternate adapter mode
+ 15-9 reserved
+--------V-107F01BL01-------------------------
+INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - GET ADAPTER
+ AX = 7F01h
+ BL = 01h
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+ BX = adapter type (see #00205)
+ DX = display type (see #00206)
+SeeAlso: AX=7F00h"SOLLEX",AX=7F01h/BL=00h,AX=7F01h/BL=02h
+
+Bitfields for SOLLEX SuperVGA display type:
+Bit(s) Description (Table 00206)
+ 15-9 reserved
+ 8 alternate display active
+ 7 Enhanced Color Display monitor active
+ 6 multi-frequency digital monitor active
+ 5 PS/2-type monitor active
+ 4 plasma/electroluminescent panel active
+ 3 LCD panel active
+ 2 multi-frequency analog monitor active
+ 1-0 monitor sense (00 none, 01 color, 10 mono, 11=8514)
+--------V-107F01BL02-------------------------
+INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - DETERMINE ADAPTER SUPPORT
+ AX = 7F01h
+ BL = 02h
+ CX = adapter request (see #00205)
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h requested setting can successfully be made
+ 01h requested setting not available in this configuration
+SeeAlso: AX=7F00h"SOLLEX",AX=7F01h/BL=00h
+--------V-107F02BL00-------------------------
+INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - SET DISPLAY OUTPUT
+ AX = 7F02h
+ BL = 00h
+ CX = display output setting (see #00207)
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=7F00h"SOLLEX",AX=7F02h/BL=00h
+
+Bitfields for SOLLEX SuperVGA display output setting:
+Bit(s) Description (Table 00207)
+ 0 CRTC control in 2,1 valid
+ 1 enable digital output
+ 2 enable analog output
+ 3 panel control in 5,4 valid
+ 4 enable LCD output
+ 5 enable plasma/EL output
+ 6 inverse control in 7 valid
+ 7 0=normal, 1=inverse
+ 15-8 reserved
+--------V-107F02BL01-------------------------
+INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - GET DISPLAY OUTPUT
+ AX = 7F02h
+ BL = 01h
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ BX = display output setting (see #00207)
+ CX = displays attached (see #00208)
+ 01h failed
+SeeAlso: AX=7F00h"SOLLEX",AX=7F02h/BL=00h
+
+Bitfields for SOLLEX SuperVGA displays attached:
+Bit(s) Description (Table 00208)
+ 0 PS/2 display on analog output
+ 1 multi-frequency monitor on analog output
+ 2 LCD panel attached
+ 3 plasma/electroluminescent panel attached
+ 4 multi-frequency monitor on digital output
+ 5 Enhanced Color Display attached to digital outpt
+ 6 alternate display
+ 15-7 reserved
+--------V-107F03BL00-------------------------
+INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GET SUPPORT INFO
+ AX = 7F03h
+ BL = 00h
+ CX = support type
+ 0000h VGA, 0001h EGA, 0002h CGA, 0003h MDA, 0004h extensions,
+ 0005h-0012h reserved for SOLLEX, 0013h Hercules,
+ 0014h-001Fh reserved for SOLLEX, 0020h-00FFh reserved for OEM
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ CX = size of video support code
+ DX = segment of physical video support (0000h if no ROM)
+ ES = segment of active video support
+ ES:DI -> information block (DI = 0000h if none available)
+ 01h failed
+SeeAlso: AX=7F03h/BL=01h
+--------V-107F03BL01-------------------------
+INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - INITIALIZE VIDEO SUPPORT
+ AX = 7F03h
+ BL = 01h
+ CX = support request
+ ES = segment of support code
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+Note: initializes the indicated video support by calling ES:0003h; this
+ function may be used to switch the active video support back to
+ ROM after AX=7F03h/BL=02h
+SeeAlso: AX=7F03h/BL=00h
+--------V-107F03BL02-------------------------
+INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GO RAM RESIDENT
+ AX = 7F03h
+ BL = 02h
+ CX = support request
+ ES = destination segment
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=7F00h"SOLLEX",AX=7F03h/BL=01h
+--------V-107F04BL00-------------------------
+INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET POWER STATE
+ AX = 7F04h
+ BL = 00h
+ CX = new power state
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+Note: higher values progressively reduce the operations available on the
+ video adapter while yielding increasing power savings
+SeeAlso: AX=7F00h"SOLLEX",AX=7F04h/BL=01h
+--------V-107F04BL01-------------------------
+INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET POWER STATE
+ AX = 7F04h
+ BL = 01h
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ CX = current power state
+ DX = maximum state
+ 01h failed
+SeeAlso: AX=7F00h"SOLLEX",AX=7F04h/BL=00h
+--------V-107F04BL02-------------------------
+INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET TIMEOUT RESET
+ AX = 7F04h
+ BL = 02h
+ CX = timeout reset
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=7F00h"SOLLEX",AX=7F04h/BL=03h
+--------V-107F04BL03-------------------------
+INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET TIMEOUT RESET
+ AX = 7F04h
+ BL = 03h
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ BX = time increment
+ CX = current timeout reset
+ DX = maximum timeout reset
+ ES:DI -> timeout reset table (array of bytes)
+ 01h failed
+Note: the timeout period is computed as (BYTE ES:[DI+CX]) * BX timer ticks
+SeeAlso: AX=7F00h"SOLLEX",AX=7F04h/BL=02h
+--------V-107F05-----------------------------
+INT 10 - SOLLEX SuperVGA - LOAD REGISTER
+ AX = 7F05h
+ ES:DI -> register value table (see #00209)
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AH=F1h,AH=F3h,AH=F5h
+
+Format of SOLLEX SuperVGA register value table:
+Offset Size Description (Table 00209)
+ 00h WORD base I/O register (FFFFh = end of list)
+ 02h 2N BYTEs pairs of values to be written to the base I/O register as an
+ index value and the following register as a data byte
+ 2N+2 WORD FFFFh (end of data list)
+ ... (repeats until FFFFh base address)
+--------V-107F06-----------------------------
+INT 10 - SOLLEX SuperVGA - MULTIPLE FONT CONTROL
+ AX = 7F06h
+ BL = subfunction
+ 00h set multiple font state
+ CX = new state (00h off, 01h on)
+ 01h get multiple font state
+ Return: BL = current state (00h off, 01h on)
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AX=1100h,AX=1103h
+--------V-107F07-----------------------------
+INT 10 - SOLLEX SuperVGA - FILL VIDEO RAM
+ AX = 7F07h
+ BL = how much to fill
+ 00h regen size
+ 01h all video memory
+ CX = pattern to write (normally 0720h for text modes and 0000h for gr)
+Return: AL <> 7Fh if not supported
+ AL = 7Fh if supported
+ AH = status
+ 00h successful
+ 01h failed
+SeeAlso: AH=06h
+--------A-1080-------------------------------
+INT 10 - CU Writer v1.4 - GET OPTION
+ AH = 80h
+ AL = desired option
+Return: ???
+Program: CU Writer is a public-domain Thai-English word processor from
+ Chulalongkorn University, Bangkok
+SeeAlso: AH=81h"CU Writer"
+--------Q-1080--DX4456-----------------------
+INT 10 U - VIDEO - DESQview 2.0x only - internal - SET ??? HANDLER
+ AH = 80h
+ DX = 4456h ('DV')
+ ES:DI -> FAR subroutine to be called on ???
+Return: DS = segment of DESQview data structure for video buffer
+Note: this function is probably meant for internal use only, due to the magic
+ value required in DX
+ the subroutine seems to be called when the DESQview menu is accessed;
+ on entry, AL = 03h or 04h
+--------A-1081-------------------------------
+INT 10 - CU Writer v1.4 - SET OPTION
+ AH = 81h
+ ???
+Return: ???
+SeeAlso: AH=80h"CU Writer"
+--------Q-1081--DX4456-----------------------
+INT 10 U - VIDEO - DESQview 2.0x only - internal - GET ???
+ AH = 81h
+ DX = 4456h ('DV')
+Return: ES = segment of DESQview data structure for video buffer
+ BYTE ES:[0] = current window number in DV 2.0x
+Note: this function is probably meant for internal use only, due to the magic
+ value required in DX
+SeeAlso: AH=82h"DESQview"
+--------Q-1082--DX4456-----------------------
+INT 10 U - VIDEO - DESQview 2.0x only - internal - GET CURRENT WINDOW INFO
+ AH = 82h
+ DX = 4456h ('DV')
+Return: DS = segment in DESQview for data structure
+ in DV 2.00,
+ BYTE DS:[0] = window number
+ WORD DS:[1] = segment of other data structure
+ WORD DS:[3] = segment of window's object handle
+ ES = segment of DESQview data structure for video buffer
+ AL = current window number
+ AH = ???
+ BL = direct screen writes
+ 00h program does not do direct writes
+ 01h program does direct writes, so shadow buffer not usable
+ BH = ???
+ CL = current video mode
+ CH = ???
+Note: this function is probably meant for internal use only, due to the magic
+ value required in DX
+SeeAlso: AH=81h"DESQview"
+--------J-108200-----------------------------
+INT 10 - VIDEO - AX PC - GET/SET SCROLL MODE
+ AX = 8200h
+ BL = new scroll mode or FFh to get current mode
+ 00h dynamic, 01h software
+Return: AL = scroll mode (current mode if BL=FFh, previous mode otherwise)
+SeeAlso: AH=06h,AH=07h
+--------J-108300-----------------------------
+INT 10 - VIDEO - AX PC - GET VIDEO RAM ADDRESS
+ AX = 8300h
+Return: AX = offset of video RAM
+ ES:BX -> virtual text RAM buffer
+SeeAlso: AX=5201h
+----------1086-------------------------------
+INT 10 - ???
+ AH = 86h
+Note: called by Diamond Stealth64 Video STLTH64.VXD
+SeeAlso: INT 2F/AX=4021h
+--------N-108B-------------------------------
+INT 10 - Alloy MW386 - FORCE WORKSTATION SCREEN UPDATE
+ AH = 8Bh
+Return: nothing
+SeeAlso: AH=92h,AH=93h
+--------N-1090-------------------------------
+INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION DISPLAY MODE
+ AH = 90h
+Return: AL = current video mode (see #00010 at AH=00h)
+SeeAlso: AH=91h
+--------N-1091-------------------------------
+INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION ADAPTER TYPE
+ AH = 91h
+Return: AL = video adapter type (see #00210)
+Note: types less than 80h do not imply that the current user is on the host
+SeeAlso: AH=90h
+
+(Table 00210)
+Values for Alloy MW386 video adapter type:
+ 00h monochrome
+ 01h Hercules monochrome graphics
+ 02h CGA
+ 03h EGA
+ 04h VGA
+ 80h monochrome text terminal
+ 81h Hercules graphics terminal
+ 82h color graphics terminal
+--------N-1092-------------------------------
+INT 10 - Alloy MW386 - INHIBIT WORKSTATION SCREEN UPDATES
+ AH = 92h
+Return: nothing
+Note: the terminal will be updated even when screen updates are inhibited if
+ TTY output is used
+SeeAlso: AH=8Bh
+--------N-1093-------------------------------
+INT 10 - Alloy MW386 - REDRAW SCREEN
+ AH = 93h
+Return: nothing
+SeeAlso: AH=8Bh,AH=FFh
+--------V-109508-----------------------------
+INT 10 - VHRBIOS.SYS - ???
+ AX = 9508h
+Return: ???
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=96h"VHRBIOS.SYS",AH=F0h"VHRBIOS.SYS"
+--------V-1096-------------------------------
+INT 10 - VHRBIOS.SYS - GET OTHER DISPLAY INFO
+ AH = 96h
+Return: AL = display type (see AH=1Ah)
+ AH = ??? (possibly related to Micro Channel support)
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+Desc: returns info on any non-Genius video adapter in the system
+SeeAlso: AX=9508h"VHRBIOS.SYS",AH=F0h"VHRBIOS.SYS"
+--------A-10A0-------------------------------
+INT 10 - CU Writer v1.4 - SET PIXEL WRITE MODE
+ AH = A0h
+ ???
+Return: ???
+Program: CU Writer is a public-domain Thai-English word processor from
+ Chulalongkorn University, Bangkok
+SeeAlso: AH=80h"CU Writer",AH=B0h
+--------p-10A000-----------------------------
+INT 10 - ATI BIOS Extensions - ???
+ AX = A000h
+ CL = ??? (bits 2-0 may not be 000)
+ CH = ??? (81h or ???)
+ DX = segment of ??? (if CH=81h)
+ ???
+Return: AX = ???
+Program: the ATI BIOS extensions are supported by ATI graphics cards containing
+ the Mach64 or newer graphics chips (Rage Pro, Rage 128, etc.)
+SeeAlso: AX=4F10h/BL=00h,AX=A001h
+----------10A001-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A001h
+ CL = ??? flags
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A002h
+----------10A002-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A002h
+ CL = ??? (bits 2-0 may not be 000)
+ CH = ??? (81h or ???)
+ DX = segment of ??? (if CH=81h)
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+Note: executes AX=A000h, then AX=A001h if A000h was successful
+SeeAlso: AX=A000h,AX=A001h
+----------10A003-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A003h
+ BX = ???
+ ???
+Return: AH = status (00h successful)
+ ???
+SeeAlso: AX=A000h,AX=A002h
+--------V-10A004-----------------------------
+INT 10 - PhoenixVIEW/LC - VIDEO DISPLAY TYPE
+ AX = A004h
+ ???
+Return: ???
+Desc: configure display parameters
+SeeAlso: AX=A01Bh"PhoenixVIEW/LC"
+----------10A004-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A004h
+ BX = video mode??? (0000-00FFh)
+ DX = ??? (sent to some port [66ECh???] one bit at a time, high to low)
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A002h
+----------10A005-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A005h
+ CL = ??? flags (bits 0,2, others?)
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A002h
+----------10A006-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A006h
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A002h
+----------10A007-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ???
+ AX = A007h
+Return: AH = 00h (successful)
+ AL = ??? (00h)
+ BX = ??? (15A0h in examined BIOS)
+ DX = segment of BIOS
+SeeAlso: AX=A000h,AX=A002h
+----------10A008-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ??? SIZE
+ AX = A008h
+ CL = ??? flags
+ ???
+Return: AH = 00h (successful)
+ BX = size of ??? (0046h if CL bit 0 clear on entry)
+SeeAlso: AX=A000h,AX=A009h
+----------10A009-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ???
+ AX = A009h
+ DX:BX -> buffer for ???
+ CL = ??? flags
+ ???
+Return: AH = status
+ 00h successful
+ DX:BX buffer filled
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A008h
+----------10A00A-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ???
+ AX = A00Ah
+Return: AH = 00h (successful)
+ AL = ??? (01h)
+ BX = ??? (5938h)
+ CX = ??? (595Eh)
+ DX = segment of BIOS
+SeeAlso: AX=A000h,AX=A002h
+----------10A00B-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A00Bh
+ BX = ???
+ CL = ??? flags
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A002h
+--------p-10A00C-----------------------------
+INT 10 - ATI Mach64 BIOS - SET SLEEP MODE
+ AX = A00Ch
+ CL = new state
+ 00h normal operation
+ 01h standby
+ 02h suspend
+ 03h off
+Return: AH = status
+ 00h successful
+ 01h failed
+Note: CL bit 2 affects values written to video card's ports
+SeeAlso: AX=A000h,AX=A00Dh,AX=4F00h,AX=4F10h/BL=01h
+----------10A00D-----------------------------
+INT 10 - ATI Mach64 BIOS - GET SLEEP MODE
+ AX = A00Dh
+Return: AH = 00h (successful)
+ CL = current power mode
+ 00h normal operation
+ 01h standby
+ 02h suspend
+ 03h off
+SeeAlso: AX=A00Ch,AX=4F10h/BL=02h
+SeeAlso: AX=A00Ch,AX=A00Dh"Rage128"AX=4F10h/BL=02h
+--------V-10A00D-----------------------------
+INT 10 - ATI Rage128 BIOS - GET ???
+ AX = A00Dh
+ BL = subfunction
+ 00h ???
+ 01h ???
+ 02h ???
+ 03h ???
+ DX:DI -> buffer for results
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A00Dh"Mach64",AX=A015h
+----------10A00E-----------------------------
+INT 10 - ATI Mach64 BIOS - SET ???
+ AX = A00Eh
+ CL = ??? (00h-03h)
+Return: AH = status
+ 00h successful
+ 01h failed
+Notes: CL zero/nonzero are treated differently
+ NOP in All-in-Wonder 128 BIOS
+SeeAlso: AX=A000h,AX=A00Fh
+----------10A00F-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ???
+ AX = A00Fh
+Return: AH = 00h (successful)
+ CL = ??? (00h-03h, read from PORT 42ECh)
+Note: NOP in All-in-Wonder 128 BIOS
+SeeAlso: AX=A000h,AX=A00Eh
+----------10A010-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A010h
+ CL = ??? (80h/other)
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+Note: NOP in All-in-Wonder 128 BIOS
+SeeAlso: AX=A000h,AX=A002h
+----------10A011-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ???
+ AX = A011h
+Return: AH = 00h (successful)
+ BL = ??? (1Fh)
+ BH = ??? (0Fh)
+ CL = ??? (00h)
+ CH = ??? (0Fh)
+ DX = ??? (00FFh)
+Note: NOP in All-in-Wonder 128 BIOS
+SeeAlso: AX=A000h,AX=A010h
+--------V-10A012-----------------------------
+INT 10 - ATI Mach64 BIOS - GET ???
+ AX = A012h
+Return: AH = 00h (successful)
+ AL = ??? (00h)
+ BX = ??? (0000h)
+ CX = ??? (0000h)
+ DX = ??? (02ECh)
+Note: NOP in All-in-Wonder 128 BIOS
+SeeAlso: AX=A000h,AX=A002h
+--------V-10A013-----------------------------
+INT 10 - ATI Mach64 BIOS - ???
+ AX = A013h
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+Note: not implemented in examined Mach64 BIOS, always returns AH=01h; NOP in
+ examined All-in-Wonder 128 BIOS
+SeeAlso: AX=A000h,AX=A002h
+--------V-10A014-----------------------------
+INT 10 - ATI Rage128 BIOS - ???
+ AX = A014h
+ CH = ??? (bits 0,1,4)
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A000h,AX=A015h
+--------V-10A015-----------------------------
+INT 10 - ATI Rage128 BIOS - GET/SET ???
+ AX = A015h
+ CH = subfunction
+ 00h get ???
+ 01h set ???
+ CL = ??? (only bits 0,1 used on All-in-Wonder 128)
+ other NOP
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A014h,AX=A017h
+--------V-10A016-----------------------------
+INT 10 - ATI Rage128 BIOS - NOP
+ AX = A016h
+Return: nothing
+SeeAlso: AX=A000h,AX=A017h
+--------V-10A017-----------------------------
+INT 10 - ATI Rage128 BIOS - ???
+ AX = A017h
+ ???
+Return: AH = status
+ 00h successful
+ 01h failed
+ ???
+SeeAlso: AX=A014h,AX=A015h
+--------V-10A01B-----------------------------
+INT 10 - PhoenixVIEW/LC - CRT MONITOR DETECTION
+ AX = A01Bh
+ ???
+Return: ???
+Desc: determine whether an external display is currently attached
+SeeAlso: AX=A004h"PhoenixVIEW/LC"
+--------U-10AA-------------------------------
+INT 10 OU - Player's Tool 3.0 - UNINSTALL
+ AH = AAh
+Return: ???
+Note: this call has been removed in PT 3.996b
+Program: Player's Tool is a game cheater by Dmitry Yakunin & Andy Robinson
+SeeAlso: AH=ABh,INT 2F/AH=AAh
+--------U-10AB-------------------------------
+INT 10 OU - Player's Tool 3.0 - INSTALLATION CHECK
+ AH = ABh
+Return: BH = FFh
+ ???
+Note: this call has been removed in PT 3.996b
+SeeAlso: AH=AAh,INT 2F/AH=ABh
+--------A-10B0-------------------------------
+INT 10 - CU Writer v1.4 - PUT PIXEL
+ AH = B0h
+ ???
+Return: ???
+SeeAlso: AH=A0h"CU Writer",AH=B1h,AH=B2h,AH=B3h,AH=B4h,AH=B5h,AH=D0h
+--------A-10B1-------------------------------
+INT 10 - CU Writer v1.4 - MOVE TO
+ AH = B1h
+ ???
+Return: ???
+SeeAlso: AH=B0h,AH=B2h,AH=C0h"CU Writer"
+--------A-10B2-------------------------------
+INT 10 - CU Writer v1.4 - DRAW LINE TO
+ AH = B2h
+ ???
+Return: ???
+SeeAlso: AH=B0h,AH=B1h,AH=B3h,AH=B4h,AH=B5h
+--------A-10B3-------------------------------
+INT 10 - CU Writer v1.4 - FLOOD FILL
+ AH = B3h
+ ???
+Return: ???
+SeeAlso: AH=B2h,AH=B5h
+--------A-10B4-------------------------------
+INT 10 - CU Writer v1.4 - DRAW RECTANGLE
+ AH = B4h
+ ???
+Return: ???
+SeeAlso: AH=B0h,AH=B2h,AH=B3h,AH=B5h
+--------A-10B5-------------------------------
+INT 10 - CU Writer v1.4 - DRAW FILLED RECTANGLE
+ AH = B5h
+ ???
+Return: ???
+SeeAlso: AH=B0h,AH=B2h,AH=B3h,AH=B4h
+--------V-10BB-------------------------------
+INT 10 U - Doorway - SET BIOS/DIRECT REDIRECTION
+ AH = BBh
+ AL = new redirection mode
+ 00h BIOS (hook and redirect INT 10h,etc.)
+ 01h DIRECT (scan video memory for changes)
+Return: ???
+SeeAlso: INT 16/AH=67h"Doorway"
+--------V-10BD44-----------------------------
+INT 10 U - Compaq QVision - ???
+ AX = BD44h
+ ???
+Return: ???
+Note: called by Compaq's MTX132.COM, which places the QVision in 132-column
+ mode
+--------!---Section--------------------------
diff --git a/floppy/doc/INTERRUP.B b/floppy/doc/INTERRUP.B
new file mode 100644
index 0000000..a2a3f5a
--- /dev/null
+++ b/floppy/doc/INTERRUP.B
@@ -0,0 +1,9839 @@
+Interrupt List, part 2 of 18
+Copyright (c) 1989-1999,2000 Ralf Brown
+--------V-10BF--CX0000-----------------------
+INT 10 - Athena Digital HGCIBM.COM - INSTALLATION CHECK
+ AH = BFh
+ CX = 0000h (???)
+Return: CX = 0202h
+ DL = ??? (internal data, possibly version number)
+--------b-10BF00-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SELECT EXTERNAL MONITOR
+ AX = BF00h
+Return: nothing
+Desc: specify that the external monitor become the active monitor
+Note: all registers preserved and the internal monitor is blanked
+SeeAlso: AX=BF01h,AX=BF12h,AH=12h/BL=35h
+--------b-10BF01-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SELECT INTERNAL MONITOR
+ AX = BF01h
+Return: nothing
+Desc: specify that the internal monitor become the active monitor
+Note: all registers preserved and the external monitor is blanked
+SeeAlso: AX=BF00h,AX=BF12h,AH=12h/BL=35h
+--------b-10BF02-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SET MASTER MODE OF CURRENT CONTROLLER
+ AX = BF02h
+ BH = master mode
+ 04h CGA
+ 05h EGA
+ 07h MDA
+Return: nothing
+SeeAlso: AX=BF03h
+--------b-10BF03BX0000-----------------------
+INT 10 - VIDEO - Compaq Extensions - GET ENVIRONMENT
+ AX = BF03h
+ BX = 0000h
+Return: BH = active monitor
+ (00h = external, 01h = internal, 03h both, 04h neither)
+ BL = master mode (see #00211)
+ CH = ASIC type and version
+ 00h (reserved, very early Compaq VGCs)
+ 31h if QVision VGA
+ CL = switchable VDU modes supported (see #00212)
+ DH = internal monitor type (see #00213)
+ DL = external monitor type (see #00213)
+SeeAlso: AX=1A00h,AX=BF00h,AX=BF01h,AX=BF02h,AX=BF11h
+
+(Table 00211)
+Values for Compaq video master mode:
+ 00h switchable VDU not present
+ 04h CGA
+ 05h EGA
+ 07h MDA
+ 08h switchable LCD controller present
+ 09h plasma VGA
+ 0Ah TFT (active-matrix) VGA
+
+Bitfields for Compaq switchable VDU modes support:
+Bit(s) Description (Table 00212)
+ 0 CGA supported
+ 1,2 reserved (1)
+ 3 MDA supported
+ 4 BitBLT engine available
+ 5 132-column support availble
+ 6 640x480x256 mode available
+ 7 8-bit DAC mode available
+
+(Table 00213)
+Values for Compaq monitor type:
+ 00h none
+ 01h dual-mode monitor
+ 02h 5153 RGB monitor (RGBI 16-color)
+ 03h Compaq Color monitor
+ 04h 640x400 flat panel (Plasma CGA)
+ 05h VGC monochrome
+ 06h VGC color
+ 07h 8-level mono LCD VGA (internal)
+ 1024x768 mono VGA (external)
+ 08h 16-level mono plasma VGA (internal)
+ 1024x768 color VGA (external)
+ 09h 4-level mono LCD CGA
+ 0Ah 16-level mono LCD VGA
+ 0Bh active-matrix color VGA
+ 0Ch active-matrix mono VGA
+ 0Dh STN color VGA
+--------b-10BF04-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SET MODE SWITCH DELAY
+ AX = BF04h
+ BH = new state of delay (00h enabled, 01h disabled)
+Return: nothing
+Note: the 1993/04/08 sytem ROM appears to use BL instead of BH; a future
+ version of the list will provide more definite information
+SeeAlso: AX=BF05h
+--------b-10BF05-----------------------------
+INT 10 - VIDEO - Compaq Extensions - ENABLE/DISABLE DISPLAY
+ AX = BF05h
+ BH = new state of video
+ 00h off
+ 01h on
+Return: nothing
+Note: the 1993/04/08 sytem ROM appears to use BL instead of BH; a future
+ version of the list will provide more definite information
+SeeAlso: AH=12h/BL=36h,AX=BF04h
+--------b-10BF06-----------------------------
+INT 10 - VIDEO - Compaq SLT/286 - READ GRAY SCALE TABLE
+ AX = BF06h
+ CL = address to be read from gray scale table
+Return: AL = bit 3-0 - Value read from gray scale table
+ CL = address to be read from gray scale table
+SeeAlso: AH=12h/BL=33h,AX=BF07h
+--------b-10BF07-----------------------------
+INT 10 - VIDEO - Compaq SLT/286 - WRITE GRAY SCALE TABLE
+ AX = BF07h
+ CH = value to write to gray scale table
+ CL = address to be written to gray scale table
+Return: nothing
+SeeAlso: AX=BF06h,AX=BF08h
+--------b-10BF08-----------------------------
+INT 10 - VIDEO - Compaq SLT/286 - WRITE COLOR MIX REGISTERS
+ AX = BF08h
+ CH = bits 7-4 green weight
+ bits 3-0 blue weight
+ CL = bits 7-4 unused
+ bits 3-0 red weight
+Return: nothing
+SeeAlso: AH=12h/BL=33h,AX=BF07h
+--------b-10BF09-----------------------------
+INT 10 - VIDEO - Compaq Extensions - TURN ON REVERSE VIDEO
+ AX = BF09h
+Return: CF clear
+Notes: sets bit 6 of port 03CEh index 81h; in some cases also sets index 84h
+ to 6Fh and index 83h to 04h
+ supported by at least the QVision board and the LTE Lite ROM BIOS
+SeeAlso: AX=BF0Ah,AX=BF0Bh
+--------b-10BF0A-----------------------------
+INT 10 - VIDEO - Compaq Extensions - TURN OFF REVERSE VIDEO
+ AX = BF0Ah
+Return: CF clear
+Notes: clears bit 6 of port 03CEh index 81h; in some cases also sets index 84h
+ to 80h and index 83h to FBh
+ supported by at least the QVision board and the LTE Lite ROM BIOS
+SeeAlso: AX=BF09h,AX=BF0Bh
+--------b-10BF0B-----------------------------
+INT 10 - VIDEO - Compaq Extensions - CHECK WHETHER VIDEO REVERSED
+ AX = BF0Bh
+Return: CF clear
+ AX = state (0000h normal video, 0001h reverse video)
+Note: supported by at least the QVision board and the LTE Lite ROM BIOS
+SeeAlso: AX=BF09h,AX=BF0Ah
+--------b-10BF0C-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SET DAC 6-BIT MODE
+ AX = BF0Ch
+Return: CF clear
+Desc: specify that video DAC registers use only six bits of color info
+Note: supported by at least the QVision board and the SystemPro XL ROM BIOS
+SeeAlso: AX=BF0Dh,AX=BF0Eh
+--------b-10BF0D-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SET DAC 8-BIT MODE
+ AX = BF0Dh
+Return: CF clear
+Desc: specify that video DAC registers use all eight bits of color info
+Note: supported by at least the QVision board and the SystemPro XL ROM BIOS
+SeeAlso: AX=BF0Ch,AX=BF0Eh
+--------b-10BF0E-----------------------------
+INT 10 - VIDEO - Compaq Extensions - CHECK DAC 6-BIT/8-BIT mode
+ AX = BF0Eh
+Return: CF clear
+ AL = DAC mode
+ 00h in 6-bit mode
+ 01h in 8-bit mode
+Note: supported by at least the QVision board and the SystemPro XL ROM BIOS
+SeeAlso: AX=BF0Ch,AX=BF0Dh
+--------b-10BF0F-----------------------------
+INT 10 - VIDEO - Compaq Extensions - SET HIGH ADRESS MAP REGISTER
+ AX = BF0Fh
+ BX = high address map location in megabytes, or
+ 0000h to disable high address map, or
+ FFFFh to let ROM configure high address map
+Return: CF clear
+ AX = previous value of high address map register
+Notes: supported by at least the QVision board and the SystemPro XL and LTE
+ Lite ROM BIOSes
+SeeAlso: AX=BF10h
+--------b-10BF10-----------------------------
+INT 10 - VIDEO - Compaq Extensions - GET HIGH ADDRESS MAP REGISTER
+ AX = BF10h
+Return: CF clear
+ AX = current value of high address map register
+Notes: supported by at least the QVision board and the SystemPro XL and LTE
+ Lite ROM BIOSes
+ the Compaq QVision documentation (October 1993) says the value is
+ returned in BX, but this appears to be one of many typos
+SeeAlso: AX=BF0Fh
+--------b-10BF11-----------------------------
+INT 10 - VIDEO - Compaq Extensions - GET EXTENDED ENVIRONMENT
+ AX = BF11h
+Return: AL = BFh if supported
+ CF clear
+ ES:DI -> ASCII signature "COMPAQ"
+ ES:SI -> advanced functionality table (see #00214)
+Note: supported by at least the QVision board and the LTE Lite and ProSignia
+ ROM BIOSes
+SeeAlso: AX=1A00h,AX=BF03h
+
+Bitfields for Compaq advanced video functionality:
+Bit(s) Description (Table 00214)
+ 31 future graphics extensions (reserved, set to 0)
+ 30-16 reserved
+ 15-12 available video memory in 256K blocks, less one (0000 = 256K, etc.)
+ 11-8 reserved
+ 7 QVision modes supported
+ 6 Advanced VGA modes supported
+ 5 Accelerated VGA modes supported
+ 4 standard VGA modes supported
+ 3-2 reserved
+ 1 132-column modes supported
+ 0 reserved
+--------b-10BF12-----------------------------
+INT 10 - VIDEO - Compaq Extensions - NEW ACTIVE MONITOR
+ AX = BF12h
+ BH reserved
+ BL = function mask (see #00215)
+Return: CF clear
+Notes: this function is a NOP if the VGA subsystem is inactive or the current
+ Display Combination Code is 10h or higher
+ supported by at least the QVision board and the LTE Lite and ProSignia
+ ROM BIOSes
+SeeAlso: AX=BF01h,AX=BF02h,#00733
+
+Bitfields for function mask:
+Bit(s) Description (Table 00215)
+ 7 command mode
+ if set, bits 1 and 0 make the monitor active when set
+ if clear, bits 1 and 0 toggle the monitor's state when set
+ 6-2 reserved
+ 1 internal monitor
+ 0 external monitor
+--------b-10BF13-----------------------------
+INT 10 - VIDEO - Compaq QVision - GAMMA CORRECTION
+ AX = BF13h
+ BL = subfunction
+ 00h load gamma correction table for true-color mode
+ DS = BIOS data segment
+ 01h set palette RAM bypass
+ BH = 00h
+Return: nothing
+Note: these functions must be called after a video mode set, and are in
+ effect only for the current video mode
+SeeAlso: #00733
+--------V-10BFA0BXADAD-----------------------
+INT 10 - VIDEO - Compaq ADAPT.COM - INSTALLATION CHECK
+ AX = BFA0h
+ BX = ADADh
+Return: AX = BDBDh if newer ADAPT.COM installed
+ BX = BCD version (BH = major, BL = minor)
+ CL = ???
+ CH = ???
+ DL = ???
+ AX = ADADh if older version of ADAPT.COM installed
+Program: ADAPT is Compaq's Advanced Display Attribute Programming Tool, an
+ optionally-resident utility for setting display colors and cursor
+ size; when resident, it also includes a screen blanker
+SeeAlso: AX=BFA1h,AX=BFA2h,AX=DFA5h
+Index: screen saver;ADAPT
+--------V-10BFA1-----------------------------
+INT 10 - VIDEO - Compaq ADAPT.COM - GET ???
+ AX = BFA1h
+Return: AX = BDBEh if supported
+ CH = current value of ???
+ DL = current value of ???
+SeeAlso: AX=BFA0h,AX=BFA2h
+--------V-10BFA2-----------------------------
+INT 10 - VIDEO - Compaq ADAPT.COM - SET ???
+ AX = BFA2h
+ CH = new value for ???
+ DL = new value for ???
+Return: AX = BDBEh if supported
+SeeAlso: AX=BFA0h,AX=BFA1h
+--------A-10C0-------------------------------
+INT 10 - CU Writer v1.4 - GO TO TEXT ROW AND COLUMN
+ AH = C0h
+ ???
+Return: ???
+SeeAlso: AH=B1h,AH=C1h,AH=C2h,AH=C3h,AH=C4h
+--------V-10C000-----------------------------
+INT 10 - S3 SpeedUp v3.00+ - INSTALLATION CHECK
+ AX = C000h
+Return: AX = FFFFh if installed
+ DX = version number (binary, DH=major, DL=minor)
+ BX = resident code segment
+Program: S3SPDUP is a freeware TSR by Dietmar Meschede to improve the speed
+ of chained video modes (both VESA and VGA Mode 13) on S3-chipset
+ video cards
+SeeAlso: AX=C001h,AX=C002h,AX=C003h,AX=D000h"S3VBE"
+--------V-10C001-----------------------------
+INT 10 - S3 SpeedUp v3.00+ - GET ACTIVE OPTIONS
+ AX = C001h
+Return: AX = FFFFh if function supported
+ BX = currently active options (see #00216)
+SeeAlso: AX=C000h,AX=C002h,AX=C003h
+
+Bitfields for S3SpeedUp options:
+Bit(s) Description (Table 00216)
+ 0 speed up banked VESA modes
+ 1 speed up 320x200 VGA mode 13
+SeeAlso: #00222
+--------V-10C002-----------------------------
+INT 10 - S3 SpeedUp v3.00+ - SET ACTIVE OPTIONS
+ AX = C002h
+ BX = new value for active options (see #00216)
+Return: AX = FFFFh if function supported
+SeeAlso: AX=C000h,AX=C001h,AX=C003h,AX=D003h"S3VBE"
+--------V-10C003-----------------------------
+INT 10 - S3 SpeedUp v3.10+ - GET FLAGS
+ AX = C003h
+Return: AX = FFFFh if function supported
+ BX = flags
+ bit 0: SpeedUp is active
+ bit 1: Windows run after SpeedUp
+SeeAlso: AX=C000h,AX=C001h,AX=C002h,AX=D005h"S3VBE"
+--------V-10C004-----------------------------
+INT 10 - S3 SpeedUp v3.10+ - RESERVED FUNCTIONS
+ AX = C004h-C0FFh
+Return: AX = 5555h
+SeeAlso: AX=C000h
+--------A-10C1-------------------------------
+INT 10 - CU Writer v1.4 - OUTPUT TEXT
+ AH = C1h
+ ???
+Return: ???
+SeeAlso: AH=C0h,AH=C2h,AH=C3h,AH=C4h
+--------A-10C2-------------------------------
+INT 10 - CU Writer v1.4 - REVERSE TEXT
+ AH = C2h
+ ???
+Return: ???
+SeeAlso: AH=C0h,AH=C1h,AH=C3h,AH=C4h
+--------A-10C3-------------------------------
+INT 10 - CU Writer v1.4 - TEXT BAR
+ AH = C3h
+ ???
+Return: ???
+SeeAlso: AH=C0h,AH=C1h,AH=C4h
+--------A-10C4-------------------------------
+INT 10 - CU Writer v1.4 - TEXT MENU
+ AH = C4h
+ ???
+Return: ???
+SeeAlso: AH=C0h,AH=C1h,AH=C3h,AH=D0h
+--------V-10CB00-----------------------------
+INT 10 - UNCHAIN - SAVE CURRENT VGA REGISTERS
+ AX = CB00h
+Note: combined with AX=CB06h, this function permits the use of video mode
+ 13h together with the VGA's unchained mode
+SeeAlso: AX=CB06h,AX=CBFFh
+--------V-10CB01-----------------------------
+INT 10 - UNCHAIN - UPDATE PAGE 1 OFFSET
+ AX = CB01h
+ BX = offset of page 1
+Return: nothing
+Desc: inform UNCHAIN of the location of video page 1 in video memory; the
+ default is 0000h
+SeeAlso: AX=CB02h,AX=CB03h,AX=CB04h,AX=CBFFh
+--------V-10CB02-----------------------------
+INT 10 - UNCHAIN - UPDATE PAGE 2 OFFSET
+ AX = CB02h
+ BX = offset of page 2
+Return: nothing
+Desc: inform UNCHAIN of the location of video page 2 in video memory; the
+ default is 3E80h (16000, for 320x200)
+SeeAlso: AX=CB00h,AX=CB01h,AX=CB03h,AX=CB04h
+--------V-10CB03-----------------------------
+INT 10 - UNCHAIN - UPDATE PAGE 3 OFFSET
+ AX = CB03h
+ BX = offset of page 3
+Return: nothing
+Desc: inform UNCHAIN of the location of video page 3 in video memory; the
+ default is 7D00h (32000, for 320x200)
+SeeAlso: AX=CB01h,AX=CB02h,AX=CB04h
+--------V-10CB04-----------------------------
+INT 10 - UNCHAIN - UPDATE PAGE 4 OFFSET
+ AX = CB04h
+ BX = offset of page 4
+Return: nothing
+Desc: inform UNCHAIN of the location of video page 4 in video memory; the
+ default is BB80h (48000, for 320x200)
+SeeAlso: AX=CB01h,AX=CB02h,AX=CB03h,AX=CB05h
+--------V-10CB05-----------------------------
+INT 10 - UNCHAIN - SAVE PALETTE
+ AX = CB05h
+Return: nothing
+SeeAlso: AX=CB00h,AX=CB06h
+--------V-10CB06-----------------------------
+INT 10 - UNCHAIN - RESTORE VGA REGISTERS
+ AX = CB06h
+Return: nothing
+SeeAlso: AX=CB00h,AX=CB05h,AX=CBFFh
+--------V-10CBFF-----------------------------
+INT 10 - UNCHAIN - INSTALLATION CHECK
+ AX = CBFFh
+Return: AX = CCBBh if installed
+Program: UNCHAIN is a TSR by Colin Buckley which permits use of Borland
+ development tools with Mode X video in the absence of a second
+ monitor
+SeeAlso: AX=CB00h,AX=CB01h,AX=CB06h
+--------V-10CC00-----------------------------
+INT 10 - VIDEO - UltraVision - GET STATUS (INSTALLATION CHECK)
+ AX = CC00h
+ SI = magic value 0000h (if checking version)
+Return: CX = product signature
+ ABCDh UltraVision
+ 5546h ('UF') UltraFont
+ AL = Ultravision extensions
+ 00h enabled
+ FFh disabled
+ AH = card designator
+ BX:00F0h -> palette values (for compatibility with NEWFONT)
+ DX = support for high resolution modes
+ 00h not active
+ 01h active
+ SI = UltraVision version number (v1.2+), high byte=major,low byte=minor
+ unchanged for versions <1.2
+Note: UltraFont is a simplified version of UltraVision for Toshiba;
+ only the signature in CX and the status in AL will be returned
+SeeAlso: AX=CC01h,AX=CC02h
+--------V-10CC01-----------------------------
+INT 10 - VIDEO - UltraVision - DISABLE EXTENSIONS
+ AX = CC01h
+Return: nothing
+Notes: subsequent BIOS calls will be passed through to previous handler
+ should be followed immediately by mode set to restore normal EGA/VGA
+ state
+SeeAlso: AX=CC02h
+--------V-10CC02-----------------------------
+INT 10 - VIDEO - UltraVision - ENABLE EXTENSIONS
+ AX = CC02h
+Return: nothing
+Note: should be followed immediately by mode set to restore previous
+ UltraVision state
+SeeAlso: AX=CC01h
+--------U-10CCAB-----------------------------
+INT 10 - HiFont - INSTALLATION CHECK
+ AX = CCABh
+Return: AX = ABCCh
+Program: HiFont is a 8x19 font driver for standard VGA by Solar Designer
+--------V-10CD00-----------------------------
+INT 10 - VIDEO - UltraVision - LOAD ULTRAVISION PALETTE (color EGA,VGA)
+ AX = CD00h
+ CL = palette table number (01h-07h for v1.x, 01h-0Fh for v2+)
+ DS:DX -> 16-byte palette register list (colors for registers 00h-0Fh)
+Return: nothing
+Notes: if palette locking is in effect for the current mode, the new colors
+ will be displayed immediately; otherwise, the system reverts to the
+ default palette
+ palette table 0 is reserved for the default palette and cannot be set
+ UltraVision always sets the border color to black
+SeeAlso: AX=CD01h,AX=CD02h
+--------V-10CD01-----------------------------
+INT 10 - VIDEO - UltraVision - SET PALETTE LOCKING STATUS (color EGA,VGA)
+ AX = CD01h
+ CL = palette locking value
+ 00h none
+ 01h text modes only (02h,03h)
+ FFh all modes (all standard color text and graphics modes)
+Return: nothing
+Notes: intended for video modes with 16 or fewer colors
+SeeAlso: AX=1000h,AX=1002h,AX=CD00h,AX=CD03h
+--------V-10CD02-----------------------------
+INT 10 - VIDEO - UltraVision - GET ULTRAVISION PALETTE (EGA,VGA)
+ AX = CD02h
+Return: CL = palette table number
+ DS:DX -> 17-byte palette register list (see #00217)
+ DS:SI -> current font names table (see #00218,#00219)
+Note: only the font names are valid on monochrome EGA systems
+SeeAlso: AX=1009h,AX=CD00h
+
+Format of UltraVision palette register list:
+Offset Size Description (Table 00217)
+ 00h 16 BYTEs colors for palette registers 00h through 0Fh
+ 10h BYTE border color
+
+Format of UltraVision v2+ current font names table:
+Offset Size standard EGA HiRes EGA VGA (Table 00218)
+ 00h 8 BYTEs N/A F19 font F20 font
+ 08h 8 BYTEs F14 font F14 font F14 font
+ 10h 8 BYTEs N/A F11 font F10 font
+ 18h 8 BYTEs F8 font F8 font F8 font
+
+Format of UltraVision v1.x current font names table:
+Offset Size HiRes EGA (Table 00219)
+ 00h 8 BYTEs F19/F14 font
+ 08h 8 BYTEs F11/F8 font
+--------V-10CD03-----------------------------
+INT 10 - VIDEO - UltraVision - GET PALETTE LOCKING STATUS (color EGA,VGA)
+ AX = CD03h
+Return: CL = palette locking value
+ 00h none
+ 01h text modes only
+ FFh all modes
+SeeAlso: AX=CD01h
+--------V-10CD04-----------------------------
+INT 10 - VIDEO - UltraVision - GET UltraVision TEXT MODE (EGA,VGA)
+ AX = CD04h
+Return: AL = mode number (see #00220)
+SeeAlso: AH=0Fh,AX=CC00h,AH=CDh
+
+(Table 00220)
+Values for UltraVision video mode number:
+ 11h 80x25
+ 12h 80x43, 80x50
+ 13h 80x34, 80x36
+ 14h 80x60, 80x63
+ 19h 94x25
+ 1Ah 94x43, 94x50
+ 1Bh 94x36
+ 1Ch 94x63
+ 21h 108x25
+ 22h 108x43, 108x50
+ 23h 107x34, 108x36
+ 24h 108x60, 108x63
+ 31h 120x25
+ 32h 120x43, 120x50
+ 33h 132x25
+ 34h 132x44, 132x50
+ 39h 120x36
+ 3Ah 120x63
+ 3Bh 132x36
+ 3Ch 132x60
+Index: video modes;UltraVision
+--------V-10CD05-----------------------------
+INT 10 - VIDEO - UltraVision - SET CURSOR TYPE (EGA,VGA)
+ AX = CD05h
+ CL = type
+ 00h line cursor
+ FFh box cursor
+Return: nothing
+Note: sets default cursor type for text-based programs
+SeeAlso: AH=01h,AX=CD06h
+--------V-10CD06-----------------------------
+INT 10 - VIDEO - UltraVision - GET CURSOR TYPE (EGA,VGA)
+ AX = CD06h
+Return: CL = type
+ 00h line cursor
+ FFh box cursor
+SeeAlso: AH=03h,AX=CD05h
+--------V-10CD07-----------------------------
+INT 10 - VIDEO - UltraVision v1.2+ - SET UNDERLINE STATUS (EGA,VGA)
+ AX = CD07h
+ CL = hardware underline status (see #00221)
+ BL = foreground color for normal text (FFh = current)
+ BH = foreground color for bright text (FFh = current)
+Return: CL = hardware underline status
+ BL = current foreground color for normal text
+ BH = current foreground color for bright text
+Notes: when underline or strikeout is enabled in color text modes, the
+ specified colors will be assigned temporarily to colors 01h and 09h,
+ allowing affected text to match non-underlined text. The color
+ remapping uses values from the current onscreen palette regardless
+ of the palette locking status (see AX=CD01h)
+ specify the standard colors (BL=01h,BH=09h) to enable underline or
+ strikeout without color remapping
+SeeAlso: AX=CD08h
+
+(Table 00221)
+Values for hardware underline status:
+ 00h off (color systems only)
+ 01h underline below characters
+ 02h strike through characters
+--------V-10CD08-----------------------------
+INT 10 - VIDEO - UltraVision v1.2+ - GET UNDERLINE STATUS (EGA,VGA)
+ AX = CD08h
+Return: CL = hardware underline status (see #00221)
+ BL = foreground color for normal text
+ BH = foreground color for bright text
+Note: only CL is valid on monochrome EGA systems
+SeeAlso: AX=CD07h
+--------V-10CD0F-----------------------------
+INT 10 - VIDEO - UltraVision - GET POINTER TO ??? (EGA,VGA)
+ AX = CD0Fh
+Return: DS:DI -> pointer to ???
+Note: This gets called by DR DOS "Panther" SECURITY. SECURITY also issues a
+ number of calls to the other UltraVision functions in the AH=CCh and
+ AH=CDh range, and carefully checks signatures.
+SeeAlso: AX=1100h,AX=1103h
+--------V-10CD10-----------------------------
+INT 10 - VIDEO - UltraVision - LOAD USER FONT (EGA,VGA)
+ AX = CD10h
+ BH = bytes per character (08h,0Ah,0Bh,0Eh,13h,14h)
+ CX = ABCDh load 9xN alternate font (v2+)
+ else number of characters to load
+ DX = character offset into font table
+ DS:SI -> 8-byte ASCII font name
+ ES:BP -> font definitions
+Return: AX = FFFFh if invalid font parameters
+Notes: loads the designated characters into UltraVision's resident font area
+ should be followed by a video mode set to reload character generator
+SeeAlso: AX=1100h,AX=1103h
+--------V-10CD-------------------------------
+INT 10 - VIDEO - UltraVision - SET ULTRAVISION TEXT MODE (EGA,VGA)
+ AH = CDh
+ AL = text mode number (see #00220)
+Return: AX = CDCDh if invalid mode
+SeeAlso: AX=CD04h
+--------A-10D0-------------------------------
+INT 10 - CU Writer v1.4 - LOAD PICTURE
+ AH = D0h
+ ???
+Return: ???
+SeeAlso: AH=B0h"CU Writer",AH=C4h
+--------V-10D0-------------------------------
+INT 10 U - VIDEO - HP 100LX/200LX - SET ZOOM MODE
+ AH = D0h
+ AL = zoom mode
+ 02h 80x25 mono
+ 03h 80x25 color
+ 80h 64x18 mono
+ 81h 64x18 color
+ 82h 40x25 mono
+ 83h 40x25 color
+ 84h 40x16 mono
+ 85h 40x16 color
+Return: nothing
+Note: zoom mode can only be changed within zoom modes of the same color
+ scheme; if needed, set to mono/color with AH=00h,AL=02h/03h; with
+ mono video modes AL=07h or AL=21h only 80x25 and 40x16 will work
+ the current zoom mode is stored in the BIOS data area at 0040h:009Fh
+SeeAlso: AH=D1h,AH=D4h
+--------V-10D000-----------------------------
+INT 10 - S3VBE/Core2.0 v3.00+ - INSTALLATION CHECK
+ AX = D000h
+Return: AX = FFFFh if installed
+ BX = resident code segment
+ DX = version (binary, DH = major, DL = minor)
+Program: S3VBE/Core2.0 is a freeware TSR by Dietmar Meschede to provide
+ VESA 2.0 services on S3-based video cards with VESA 1.2 BIOS
+SeeAlso: AX=D001h"S3VBE",AX=D002h"S3VBE",AX=D003h"S3VBE",AX=D005h"S3VBE"
+--------V-10D001-----------------------------
+INT 10 - S3VBE/Core2.0 v3.00+ - GET ACTIVE OPTIONS
+ AX = D001h
+Return: AX = FFFFh if supported
+ BX = currently active options (see #00222)
+SeeAlso: AX=D000h"S3VBE",AX=D002h"S3VBE"
+
+Bitfields for S3VBE options:
+Bit(s) Description (Table 00222)
+ 0 VESA VBE v2.0 extensions enabled
+ 1 linear frame buffer enabled
+ 2 low-resolution video mode support enabled
+ 8 never clear video memory during VBE mode set (v3.10+)
+---debug options---
+ 12 report VBE version 1.2 (v3.10+)
+ 13 always fail AX=4F0Ah (v3.10+)
+ 14 don't copy video mode list (v3.12+)
+SeeAlso: #00216
+--------V-10D002-----------------------------
+INT 10 - S3VBE/Core2.0 v3.00+ - SET ACTIVE OPTIONS
+ AX = D002h
+ BX = new active options (see #00222)
+Return: AX = FFFFh if supported
+SeeAlso: AX=D000h"S3VBE",AX=D001h"S3VBE"
+--------V-10D003-----------------------------
+INT 10 U - S3VBE/Core2.0 v3.10+ - GET VBE/Core CAPABILITIES
+ AX = D003h
+Return: AX = FFFFh if supported
+ BX = capabilities
+ bit 0: SpeedUp = activate/deactivate linear addressing at
+ A0000h for VBE functions 04h/05h
+SeeAlso: AX=D000h"S3VBE",AX=D001h"S3VBE",AX=D004h"S3VBE",AX=D005h"S3VBE"
+--------V-10D004-----------------------------
+INT 10 U - S3VBE/Core2.0 v3.10+ - ACTIVATE SPEED-UP
+ AX = D004h
+Return: AX = FFFFh if supported
+ BX = status
+ 0000h SpeedUp activated
+ 0001h SpeedUp not possible (wrong memory organization for mode)
+ 0002h SpeedUp not possible (linear frame buffer active)
+Note: called by S3 SpeedUp (see AX=C000h)
+SeeAlso: AX=C000h"SpeedUp",AX=D000h"S3VBE",AX=D003h"S3VBE",AX=D005h"S3VBE"
+--------V-10D005-----------------------------
+INT 10 U - S3VBE/Core2.0 v3.10+ - DEACTIVATE SPEED-UP
+ AX = D005h
+Return: AX = FFFFh if supported
+ BX = status
+ 0000h SpeedUp deactivated
+ 0001h SpeedUp not possible (wrong memory organization for mode)
+ 0002h SpeedUp not possible (linear frame buffer active)
+Notes: called by S3 SpeedUp (see AX=C000h)
+ functions 06h-FFh (e.g. AX=D006h-D0FFh) are considered reserved by
+ v3.10+ and return AX=5555h
+SeeAlso: AX=C000h"SpeedUp",AX=D000h"S3VBE",AX=D003h"S3VBE",AX=D004h"S3VBE"
+--------V-10D1-------------------------------
+INT 10 U - VIDEO - HP 100LX/200LX - INTERNAL - ???
+ AH = D1h
+ AL = 01h
+Return: ???
+Note: called by AH=D0h
+SeeAlso: AH=D0h,AH=D4h
+--------V-10D4-------------------------------
+INT 10 U - VIDEO - HP 100LX/200LX - INTERNAL - ???
+ AH = D4h
+ AL = 29h
+Return: ???
+Note: called by AH=D0h
+SeeAlso: AH=D0h,AH=D1h
+--------V-10D5-------------------------------
+INT 10 - Netroom SCRNCLK - ???
+ AH = D5h
+ ???
+Return: ???
+Program: SCRNCLK is a "cloaked" screen accelerator included with Netroom
+--------t-10DAAD-----------------------------
+INT 10 - TSRUNIT v1.10 - INSTALLATION CHECK
+ AX = DAADh
+ BX = check signature (different for each TSR)
+ CX = 0000h
+Return: CX = return signature (nonzero) if installed
+ ES = program segment prefix
+Program: TSRUNIT is a Turbo Pascal unit for creating TSRs by Nir Sofer
+--------V-10DFA5-----------------------------
+INT 10 U - VIDEO - Compaq ADAPT.COM - GET ??? DATA AREA
+ AX = DFA5h
+Return: AX = BDBFh if supported
+ ES:DI -> ??? data area
+ BX = ES
+SeeAlso: AX=BFA0h
+--------V-10EE-------------------------------
+INT 10 - VIDEO - IBM "Private" Function
+ AH = EEh
+SeeAlso: INT 13/AH=FFh"IBM"
+--------V-10EF-------------------------------
+INT 10 - VIDEO - MSHERC.COM - GET VIDEO ADAPTER TYPE AND MODE
+ AH = EFh
+Return: DL = video adapter type
+ 00h original Hercules
+ 01h Hercules Plus (port 03BAh reads x001xxxxx)
+ 02h Hercules InColor (port 03BAh reads x101xxxxx)
+ FFh not a Hercules-compatible card (port 03BAh bit 7 not pulsing)
+ DH = memory mode byte
+ 00h "half" mode
+ 01h "full" mode
+ FFh not a Hercules-compatible card
+Program: MSHERC.COM/QBHERC.COM is a support program for the Microsoft Quick
+ languages which makes their graphics libraries compatible with a
+ Hercules card by adding video modes 08h and 88h, and supporting
+ text in the new graphics modes.
+Notes: while in mode 08h or 88h, INT 10 supports the Hercules card much like
+ a CGA.
+ MSHERC performs an installation check by setting DL=FFh and testing
+ whether it has been changed on return, which causes it to reinstall
+ itself when no HGC is present (or HGC emulation has temporarily been
+ disabled); a better installation check would be to use DX=80FFh and
+ check whether DX has been changed
+ reportedly returns DH=00h on some not-entirely-Hercules-compatible
+ cards
+Index: installation check;MSHERC
+--------V-10F0-------------------------------
+INT 10 - EGA Register Interface Library - READ ONE REGISTER
+ AH = F0h
+ BL = register number
+ BH = 00h
+ DX = group index (see #00223)
+Return: BL = data
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others; it is used for software virtualization
+ of write-only registers on an EGA video adapter, so that multiple
+ programs may peacefully coexist without clobbering each other's
+ display settings
+SeeAlso: AH=F1h"EGA",AH=F2h"EGA",AH=FAh"EGA",INT 2F/AX=BC00h
+
+(Table 00223)
+Values for group index:
+ Pointer/data chips
+ 00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
+ 08h Sequencer (5 registers) 3C4h
+ 10h Graphics Controller (9 registers) 3CEh
+ 18h Attribute Controller (20 registers) 3C0h
+ Single registers
+ 20h Miscellaneous Output register 3C2h
+ 28h Feature Control register (3BAh mono modes, 3DAh color modes)
+ 30h Graphics 1 Position register 3CCh
+ 38h Graphics 2 Position register 3CAh
+--------V-10F0-------------------------------
+INT 10 - VHRBIOS.SYS - INSTALLATION CHECK
+ AH = F0h
+Return: BX = 4F4Bh ('OK')
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F1h"VHRBIOS.SYS",AH=F2h"VHRBIOS.SYS",AH=F4h"VHRBIOS.SYS"
+SeeAlso: AH=96h"VHRBIOS.SYS"
+--------V-10F1-------------------------------
+INT 10 - EGA Register Interface Library - WRITE ONE REGISTER
+ AH = F1h
+ DX = group index (see #00223)
+ if single register:
+ BL = value to write
+ otherwise
+ BL = register number
+ BH = value to write
+Return: BL = data
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AX=7F05h,AH=F0h"EGA",AH=F3h"EGA",AH=FAh"EGA"
+--------V-10F1-------------------------------
+INT 10 - VHRBIOS.SYS - SET REVERSE VIDEO
+ AH = F1h
+ AL = new video state
+ (bit 5 set for black text on white, clear for white on black)
+Return: ???
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F0h"VHRBIOS.SYS",AH=F3h"VHRBIOS.SYS"
+--------V-10F2-------------------------------
+INT 10 - EGA Register Interface Library - READ REGISTER RANGE
+ AH = F2h
+ CH = starting register number
+ CL = number of registers (>1)
+ DX = group index (00h,08h,10h,18h) (see #00223)
+ ES:BX -> buffer, CL bytes
+Return: nothing
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AH=F0h"EGA",AH=F3h"EGA",AH=FAh"EGA"
+--------V-10F2-------------------------------
+INT 10 - VHRBIOS.SYS - ???
+ AH = F2h
+Return: ???
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F0h"VHRBIOS.SYS",AH=F4h"VHRBIOS.SYS"
+--------V-10F3-------------------------------
+INT 10 - EGA Register Interface Library - WRITE REGISTER RANGE
+ AH = F3h
+ CH = starting register
+ CL = number of registers (>1)
+ DX = group index (00h,08h,10h,18h) (see #00223)
+ ES:BX -> buffer, CL bytes
+Return: nothing
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AX=7F05h,AH=F1h"EGA",AH=F2h"EGA",AH=F4h"EGA"
+--------V-10F3-------------------------------
+INT 10 - VHRBIOS.SYS - SWITCH BETWEEN DUAL MONITORS???
+ AH = F3h
+Return: ???
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F0h"VHRBIOS.SYS",AH=F4h"VHRBIOS.SYS",AH=F6h"VHRBIOS.SYS"
+--------V-10F4-------------------------------
+INT 10 - EGA Register Interface Library - READ REGISTER SET
+ AH = F4h
+ CX = number of registers to read (>1)
+ ES:BX -> table of register records (see #00224)
+Return: register values in table filled in
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AH=F0h"EGA",AH=F2h"EGA",AH=F5h"EGA"
+
+Format of EGA RIL entries in table of register records:
+Offset Size Description (Table 00224)
+ 00h WORD group index
+ Pointer/data chips
+ 00h CRTC (3B4h mono modes, 3D4h color modes)
+ 08h Sequencer 3C4h
+ 10h Graphics Controller 3CEh
+ 18h Attribute Controller 3C0h
+ Single registers
+ 20h Miscellaneous Output register 3C2h
+ 28h Feature Control register (3BAh mono modes, 3DAh color)
+ 30h Graphics 1 Position register 3CCh
+ 38h Graphics 2 Position register 3CAh
+ 02h BYTE register number (0 for single registers)
+ 03h BYTE register value
+--------V-10F4-------------------------------
+INT 10 - VHRBIOS.SYS - GET VERSION
+ AH = F4h
+Return: AX = driver version (AH = major, AL = minor)
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F0h"VHRBIOS.SYS",AH=F5h"VHRBIOS.SYS"
+--------V-10F5-------------------------------
+INT 10 - EGA Register Interface Library - WRITE REGISTER SET
+ AH = F5h
+ CX = number of registers to write (>1)
+ ES:BX -> table of records (see #00224)
+Return: nothing
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AX=7F05h,AH=F1h"EGA",AH=F3h"EGA",AH=F4h"EGA"
+--------V-10F5-------------------------------
+INT 10 - VHRBIOS.SYS - GET VENDOR ID
+ AH = F5h
+Return: AXBX = vendor ID (4D44h:5349h = 'MDSI' for Micro Display Systems Inc.)
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F0h"VHRBIOS.SYS",AH=F4h"VHRBIOS.SYS",AH=F6h"VHRBIOS.SYS"
+--------V-10F6-------------------------------
+INT 10 - EGA Register Interface Library - REVERT TO DEFAULT REGISTERS
+ AH = F6h
+Return: nothing
+Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and
+ others
+SeeAlso: AH=F5h"EGA",AH=F7h"EGA"
+--------V-10F6-------------------------------
+INT 10 - VHRBIOS.SYS - GET INFO
+ AH = F6h
+ AL = what to get
+ 00h device driver state
+ Return: AX = device driver state
+ 01h video mode info
+ Return: AL = video mode
+ DH = screen height in rows
+ DL = screen width in columns
+Program: VHRBIOS.SYS is a driver for the Micro Display Systems "TheGenius"
+ black&white A4/portrait monitor
+SeeAlso: AH=F0h"VHRBIOS.SYS",AH=F4h"VHRBIOS.SYS",AH=96h"VHRBIOS.SYS
+--------V-10F7-------------------------------
+INT 10 - EGA Register Interface Library - DEFINE DEFAULT REGISTER TABLE
+ AH = F7h
+ DX = port number
+ Pointer/data chips
+ 00h CRTC (3B4h mono modes, 3D4h color modes)
+ 08h Sequencer 3C4h
+ 10h Graphics Controller 3CEh
+ 18h Attribute Controller 3C0h
+ Single registers
+ 20h Miscellaneous Output register 3C2h
+ 28h Feature Control register (3BAh mono modes, 3DAh color modes)
+ 30h Graphics 1 Position register 3CCh
+ 38h Graphics 2 Position register 3CAh
+ ES:BX -> table of one-byte entries, one byte to be written to each
+ register
+Return: nothing
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AH=F0h"EGA",AH=F6h"EGA"
+--------V-10FA--BX0000-----------------------
+INT 10 - EGA Register Interface Library - INTERROGATE DRIVER
+ AH = FAh
+ BX = 0000h
+Return: BX = 0000h if RIL driver not present
+ ES:BX -> EGA Register Interface version number, if present:
+ byte 0 = major release number
+ byte 1 = minor release number
+Note: the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
+ compatibility box, and others
+SeeAlso: AH=F0h"EGA",AH=F6h"EGA",INT 2F/AX=BC00h
+--------K-10FA-------------------------------
+INT 10 - FASTBUFF.COM - INSTALLATION CHECK
+ AH = FAh
+Return: AX = 00FAh if installed
+ ES = segment of resident code
+Program: FASTBUFF.COM is a keyboard speedup/screen blanking utility by David
+ Steiner
+Index: screen saver;FASTBUFF
+--------V-10FE-------------------------------
+INT 10 - TopView - GET SHADOW BUFFER
+ AH = FEh
+ ES:DI -> assumed video buffer
+ B800h:0000h color text/CGA graphics, B000h:0000h mono text,
+ or A000h:0000h EGA/VGA graphics (RSIS environments only)
+Return: ES:DI -> actual video buffer for calling process
+Desc: Determine the address of the virtual screen to which the program
+ should write instead of the actual video memory; this permits
+ programs to be multitasked without interfering with each other's
+ output, and allows memory managers to move the video memory to
+ permit larger programs to be loaded.
+Notes: if no multitasker or RSIS-compliant environment is installed, ES:DI is
+ returned unchanged; RSIS is the Relocated Screen Interface
+ Specification
+ for display pages other than 0, use AH=05h and AH=0Fh to determine
+ whether a particular page exists
+ TopView requires a call to AH=FFh to notify it that the screen has
+ changed; DESQview will check for changes itself until the first call
+ to AH=FFh
+SeeAlso: AH=05h,AX=5201h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
+SeeAlso: INT 21/AH=ECh"DoubleDOS"
+--------V-10FF-------------------------------
+INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
+ AH = FFh
+ CX = number of consecutive changed characters
+ ES:DI -> first changed character in shadow buffer
+Return: nothing
+Notes: avoid CX=0000h
+ DESQview will discontinue the automatic screen updating initiated by
+ AH=FEh after this call
+ not supported (ignored) by DESQview/X 1.0x
+SeeAlso: AH=93h,AH=FEh
+--------E-10FF-------------------------------
+INT 10 - DJ GO32.EXE 80386+ DOS extender - VIDEO EXTENSIONS
+ AH = FFh
+ AL = video mode (see #00225)
+Program: GO32.EXE is a DOS extender included as part of the 80386 port of the
+ GNU C/C++ compiler by DJ Delorie and distributed as DJGPP
+SeeAlso: AH=00h,INT 21/AH=FFh"GO32"
+
+(Table 00225)
+Values for GO32 video mode number:
+ 00h 80x25 text
+ 01h default text
+ 02h CXxDX text
+ 03h biggest text
+ 04h 320x200 graphics
+ 05h default graphics
+ 06h CXxDX graphics
+ 07h biggest non-interlaced graphics
+ 08h biggest graphics
+Index: video modes;GO32
+--------V-10FF-------------------------------
+INT 10 - VIDEO - Oak VGA BIOS v1.02+ - SET EMULATION
+ AH = FFh
+ AL = emulation
+ 43h ('C') CGA emulation
+ 45h ('E') EGA emulation
+ 4Dh ('M') Hercules emulation
+ 56h ('V') VGA emulation
+ ES:DI -> signature string "Calamity"
+Return: VGA switched to suggested mode
+SeeAlso: AH=00h,AX=007Fh/BH=00h,AX=007Fh/BH=02h,AX=5F01h
+--------R-10FF00-----------------------------
+INT 10 - CARBON COPY PLUS v5.0 - CHECK IF CC CONNECTED TO CCHELP
+ AX = FF00h
+Return: BL = state
+ 00h not connected
+ 01h connected
+SeeAlso: AX=FF01h,AX=FF02h
+--------R-10FF01-----------------------------
+INT 10 - CARBON COPY PLUS v5.0 - DISCONNECT AND RESET LINE
+ AX = FF01h
+Return: nothing
+SeeAlso: AX=FF00h,AX=FF02h
+--------R-10FF02-----------------------------
+INT 10 - CARBON COPY PLUS v5.0 - GET LAST PHONE NUMBER DIALED
+ AX = FF02h
+Return: ES:DI -> ASCIZ phone number
+SeeAlso: AX=FF00h,AX=FF01h
+--------C-11---------------------------------
+INT 11 - CPU-generated (80486+) - ALIGNMENT CHECK
+Desc: automatically generated by the CPU when the AC flag is set, the current
+ privilege level is 3, and a misaligned memory access (WORD not on an
+ even address or DWORD not on a multiple of 4) is made
+Note: not all V86 monitors allow the AC flag to be set, such as Turbo
+ Debugger 386
+SeeAlso: INT 12"CPU"
+--------B-11---------------------------------
+INT 11 - BIOS - GET EQUIPMENT LIST
+Return: (E)AX = BIOS equipment list word (see #00226,#03215 at INT 4B"Tandy")
+Note: since older BIOSes do not know of the existence of EAX, the high word
+ of EAX should be cleared before this call if any of the high bits
+ will be tested
+SeeAlso: INT 4B"Tandy 2000",MEM 0040h:0010h
+
+Bitfields for BIOS equipment list:
+Bit(s) Description (Table 00226)
+ 0 floppy disk(s) installed (number specified by bits 7-6)
+ 1 80x87 coprocessor installed
+ 3-2 number of 16K banks of RAM on motherboard (PC only)
+ number of 64K banks of RAM on motherboard (XT only)
+ 2 pointing device installed (PS)
+ 3 unused (PS)
+ 5-4 initial video mode
+ 00 EGA, VGA, or PGA
+ 01 40x25 color
+ 10 80x25 color
+ 11 80x25 monochrome
+ 7-6 number of floppies installed less 1 (if bit 0 set)
+ 8 DMA support installed (PCjr, Tandy 1400LT)
+ DMA support *not* installed (Tandy 1000's)
+ 11-9 number of serial ports installed
+ 12 game port installed
+ 13 serial printer attached (PCjr)
+ internal modem installed (PC/Convertible)
+ 15-14 number of parallel ports installed
+---Compaq, Dell, and many other 386/486 machines--
+ 23 page tables set so that Weitek coprocessor addressable in real mode
+ 24 Weitek math coprocessor present
+---Compaq Systempro---
+ 25 internal DMA parallel port available
+ 26 IRQ for internal DMA parallel port (if bit 25 set)
+ 0 = IRQ5
+ 1 = IRQ7
+ 28-27 parallel port DMA channel
+ 00 DMA channel 0
+ 01 DMA channel 0 ???
+ 10 reserved
+ 11 DMA channel 3
+Notes: Some implementations of Remote (Initial) Program Loader (RPL/RIPL)
+ don't set bit 0 to indicate a "virtual" floppy drive, although the
+ RPL requires access to its memory image through a faked drive A:.
+ This may have caused problems with releases of DOS 3.3x and earlier,
+ which assumed A: and B: to be invalid drives then and would discard
+ any attempts to access these drives. Implementations of RPL should
+ set bit 0 to indicate a "virtual" floppy.
+ The IBM PC DOS 3.3x-2000 IBMBIO.COM contains two occurences of code
+ sequences like:
+ INT 11h
+ JMP SHORT skip
+ DB 52h,50h,53h; "RPS"
+ skip: OR AX,1
+ TEST AX,1
+ While at the first glance this seems to be a bug since it just
+ wastes memory and the condition is always true, this could well be
+ a signature for an applyable patch to stop it from forcing AX bit 0
+ to be always on. MS-DOS IO.SYS does not contain these signatures,
+ however.
+BUGs: Some old BIOSes didn't properly report the count of floppy drives
+ installed to the system. In newer systems INT 13h/AH=15h can be
+ used to retrieve the number of floppy drives installed.
+ Award BIOS v4.50G and v4.51PG erroneously set bit 0 even if there are
+ no floppy drives installed; use two calls to INT 13/AH=15h to
+ determine whether any floppies are actually installed
+SeeAlso: INT 12"BIOS",#03215 at INT 4B"Tandy 2000"
+--------d-11----SI6A6A-----------------------
+INT 11 - Columbia Data Products Standard Device Level Protocol (SDLP) 1.6
+ SI = 6A6Ah
+ AH = command (see #00227)
+ AL = SCSI Addressing (see #00228)
+Return: CF clear if successful
+ DI = 6A6Ah if AH=01h on entry (maybe for all functions???)
+ AH = ??? for command 01h
+ CF set on error
+ AL = error code
+SeeAlso: INT 21/AX=4402h"ASPI"
+
+(Table 00227)
+Values for SDLP command:
+ 00h SDLP initialization
+ 01h SDLP System Identify
+ 02h simple read sectors
+ 03h simple write sectors
+ 04h simple verify sectors/seek to sector
+ 05h get device size/type
+ 06h ready unit
+ 07h format unit
+ 08h diagnostics
+ 09h rewind
+ 0Ah erase
+ 0Bh write filemarks
+ 0Ch space
+ 0Dh prevent/allow media removal
+ 0Eh load/unload media
+ 0Fh reserved - returns good status
+ 10h set block size
+ 11h write setmark
+ 12h set error level
+ 13h get address of Request Sense Buffer
+ 14h get SDLP error via Request Sense
+ F0h Vendor Unique Function (WD7000-FASST2 only)
+ FDh reset current SCSI HAC
+ FEh get/set current SCSI HAC
+ FFh execute SCSI command
+
+Bitfields for SDLP SCSI addressing:
+Bit(s) Description (Table 00228)
+ 7-6 Host Adapter
+ 5-3 SCSI Target ID
+ 2-0 SCSI Target LUN (logical unit number)
+--------V-110225BX6900-----------------------
+INT 11 - Blank-It Screen Blanker - INSTALLATION CHECK
+ AX = 0225h
+ BX = 6900h
+Return: BL = 23h
+ ES:DI -> ASCIZ "BLNKIT"
+Program: Blank-It is a resident screen blanker by Rhode Island Soft Systems,
+ Inc.
+SeeAlso: AX=0225h/BX=6902h,AX=0225h/BX=6908h,AX=0225h/BX=6909h,INT 14/AX=AA01h
+Index: screen saver;Blank-It
+--------V-110225BX6901-----------------------
+INT 11 - Blank-It Screen Blanker - SET TIMEOUT FOR SCREEN BLANKING
+ AX = 0225h
+ BX = 6901h
+ CX = timeout in timer ticks (18.2/second) or 0000h to disable timeout
+ largest value is 59 minutes (FBACh or 64428)
+Return: CF clear if successful
+ DI = 6A6Ah (possibly also 6A6Ah for all following functions)
+ AH = ???
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6904h
+Index: screen saver;Blank-It
+--------V-110225BX6902-----------------------
+INT 11 - Blank-It Screen Blanker - ENABLE THE SOFTWARE
+ AX = 0225h
+ BX = 6902h
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6903h
+Index: screen saver;Blank-It
+--------V-110225BX6903-----------------------
+INT 11 - Blank-It Screen Blanker - DISABLE THE SOFTWARE
+ AX = 0225h
+ BX = 6903h
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6902h
+Index: screen saver;Blank-It
+--------V-110225BX6904-----------------------
+INT 11 - Blank-It Screen Blanker - GET BLANKING TIMEOUT
+ AX = 0225h
+ BX = 6904h
+Return: CF clear if successful
+ BX = timeout (see AX=0225h/BX=6901h)
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6901h
+Index: screen saver;Blank-It
+--------V-110225BX6905-----------------------
+INT 11 - Blank-It Screen Blanker - ENABLE WINDOWS COMPATIBILITY MODE
+ AX = 0225h
+ BX = 6905h
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6906h
+Index: screen saver;Blank-It
+--------V-110225BX6906-----------------------
+INT 11 - Blank-It Screen Blanker - DISABLE WINDOWS COMPATIBILITY MODE
+ AX = 0225h
+ BX = 6906h
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+Program: Blank-It is a resident screen blanker by Rhode Island Soft Systems,
+ Inc.
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6905h
+Index: screen saver;Blank-It
+--------V-110225BX6907-----------------------
+INT 11 - Blank-It Screen Blanker - UNBLANK THE SCREEN
+ AX = 0225h
+ BX = 6907h
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6908h
+Index: screen saver;Blank-It
+--------V-110225BX6908-----------------------
+INT 11 - Blank-It Screen Blanker - BLANK THE SCREEN
+ AX = 0225h
+ BX = 6908h
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+SeeAlso: AX=0225h/BX=6900h,AX=0225h/BX=6907h
+Index: screen saver;Blank-It
+--------V-110225BX6909-----------------------
+INT 11 - Blank-It Screen Blanker - SET HOTKEY FOR MANUAL BLANKING
+ AX = 0225h
+ BX = 6909h
+ CL = key scan code (see #00229)
+Return: CF clear if successful
+ CF set on error
+ AL = error code
+Program: Blank-It is a resident screen blanker by Rhode Island Soft Systems,
+ Inc.
+SeeAlso: AX=0225h/BX=6900h
+Index: screen saver;Blank-It|hotkeys;Blank-It
+
+(Table 00229)
+Values for Blank-It hotkey scan code:
+ 00h No hot key
+ 1Dh Left CTRL
+ 2Ah Left Shift
+ 36h Right Shift
+ 57h F11
+ 58h F12
+SeeAlso: #00006
+--------G-1105D7-----------------------------
+INT 11 CU - Borland C++ IDE - INSTALLED CALLOUT
+ AX = 05D7h
+ BX = product ID (0088h)
+Note: called by the BC++ IDE when an application calls
+ INT 12/AX=05D7h/BX=05D7h
+SeeAlso: INT 12/AX=05D7h/BX=05D7h
+Index: installation check;Borland C++ IDE
+--------F-1177-------------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - OPERATIONAL CONTROL
+ AH = 77h
+ AL = subfunction
+ 01h request SFENGINE start
+ Return: AX = 0001h
+ 02h check if SFENGINE started
+ Return: AX = 0000h or 0001h
+ 03h request SFENGINE stop
+ Return: AX = 0001h
+ 04h check if SFENGINE stopped
+ Return: AX = 0000h or 0001h
+ 05h installation check
+ Return: AX = 0001h
+ 06h uninstall???
+ BX:DX -> return address for successful uninstall???
+ Return: (at caller's address)
+ AX = 0000h
+ else
+ Return: AX = FFFFh (invalid subfunction)
+Return: ES:DX -> ASCIZ signature string "SFAX ENGINE V1.0"
+ followed by internal data area???
+SeeAlso: AH=78h,AH=79h,AH=7Ah,AH=7Ch
+Index: installation check;RainbowFAX|installation check;SFENGINE
+Index: uninstall;RainbowFAX|uninstall;SFENGINE
+--------F-1178-------------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - ???
+ AH = 78h
+ AL = subfunction
+ 01h set ???
+ BX = new state for ???
+ 0000h ???
+ else ???
+ Return: AX = 0001h
+ 02h set ???
+ BX = ???
+ CX = ???
+ Return: AX = 0001h
+ 03h set ???
+ BX = new state for ???
+ 0000h ???
+ else ???
+ Return: AX = 0001h
+ else
+ Return: AX = FFFFh (invalid subfunction)
+SeeAlso: AH=77h,AH=79h,AH=7Ah,AH=7Ch
+--------F-1179-------------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - ???
+ AH = 79h
+ AL = subfunction
+ 01h set ??? flag
+ Return: AX = previous state (0000h already set, 0001h clear)
+ 02h clear ??? flag (refer to subfunc 01h)
+ Return: AX = 0001h
+ 03h set ??? flag (different from subfn 02h or 04h)
+ Return: AX = 0001h
+ 04h clear ??? flag (different from subfn 02h or 03h)
+ Return: AX = 0001h
+ else
+ Return: AX = FFFFh (invalid subfunction)
+SeeAlso: AH=77h,AH=78h,AH=7Ah,AH=7Ch
+--------F-117A-------------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - ???
+ AH = 7Ah
+ AL = subfunction
+ 01h set ??? flag
+ Return: AX = previous state (0000h already set, 0001h clear)
+ 02h clear ??? flag
+ Return: AX = 0001h
+ 03h set ??? flag (different from subfn 02h)
+ Return: AX = 0001h
+ else
+ Return: AX = FFFFh (invalid subfunction)
+SeeAlso: AH=77h,AH=78h,AH=79h,AH=7Ch
+--------F-117C01-----------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - SET ??? FLAG
+ AX = 7C01h
+Return: AX = 0001h
+SeeAlso: AH=77h,AH=78h,AH=79h,AH=7Ah,AX=7C02h,AX=7C03h
+--------F-117C02-----------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - CLEAR ??? FLAG
+ AX = 7C02h
+Return: AX = 0001h
+SeeAlso: AH=77h,AH=78h,AH=79h,AH=7Ah,AX=7C01h,AX=7C03h
+--------F-117C03-----------------------------
+INT 11 - RainbowFAX v1.3 - SFENGINE API - UNSUPPORTED FUNCTIONS
+ AX = 7C03h-7CFFh
+Return: AX = FFFFh
+SeeAlso: AH=77h,AX=7C01h,AX=7C02h
+--------S-11BC--DX1954-----------------------
+INT 11 - BNU FOSSIL - INSTALLATION CHECK
+ AH = BCh
+ DX = 1954h
+Return: AX = 1954h
+ ES:DX -> entry point of driver (instead of INT 14)
+SeeAlso: INT 14/AH=04h"FOSSIL"
+--------d-11FF--SI6A6A-----------------------
+INT 11 - WD7000 SDLP interface - EXECUTE GENERIC SCSI COMMAND
+ AH = FFh
+ SI = 6A6Ah
+ AL = SCSI Addressing (see #00230)
+ CX = bytes of data to be transmitted (max FFF0h)
+ DH = 00h
+ DL = length of SCSI Command Descriptor Block
+ DS:DI -> SCSI Command Descriptor Block
+ ES:BX -> data buffer
+Return: CF set on error
+ AL = error code
+ CF clear if successful
+Note: because of busmaster operations with WD7000FASST avoid accessing
+ video memory directly; check 386 memory manager for VDS support.
+ The WD7000XTAT works with programmed IO and does not have this
+ limitation.
+SeeAlso: INT 21/AX=4402h"ASPI",INT 2F/AX=7F01h
+
+Bitfields for SDLP SCSI addressing:
+Bit(s) Description (Table 00230)
+ 2-0 SCSI Target LUN (logical unit number)
+ 5-3 SCSI Target ID
+ 7 write flag, set for write operations, clear otherwise
+--------T-11FFFECXFFFE-----------------------
+INT 11 - BACK&FORTH (before v1.62) API
+ AX = FFFEh
+ CX = FFFEh
+ BX = function
+ 00h installation check
+ Return: AX = installation state
+ 0001h BNFHIGH and BNFLOW both loaded
+ 0003h only BNFHIGH loaded
+ else neither loaded
+ 01h ???
+ Return: DX:AX -> ???
+ 02h ???
+ 03h ???
+ 04h ???
+ 05h ??? switches current PSP segment and stack if BNFLOW has not
+ yet announced itself installed
+ 06h ???
+ Return: AX = ???
+SeeAlso: INT 12/AX=FFFEh
+Index: installation check;BACK&FORTH
+--------B-12---------------------------------
+INT 12 - BIOS - GET MEMORY SIZE
+Return: AX = kilobytes of contiguous memory starting at absolute address 00000h
+Note: this call returns the contents of the word at 0040h:0013h; in PC and
+ XT, this value is set from the switches on the motherboard
+SeeAlso: INT 11"BIOS",INT 2F/AX=4A06h,INT 4C"Tandy 2000",MEM 0040h:0013h
+--------C-12---------------------------------
+INT 12 - CPU-generated (Pentium +) - MACHINE CHECK EXCEPTION
+Notes: Intel documents this interrupt as CPU model-dependent
+ for current Pentium processors, the reason for the machine check
+ exception may be read from model-specific registers 00h and 01h
+ (described, for example, in Christian Ludloff's 4P package)
+ for Pentium Pro/II processors, the reason may be read from the
+ MCG_STATUS MSR (see MSR 0000017Ah)
+ this exception is enabled by bit 6 of CR4
+SeeAlso: INT 11"CPU",MSR 00000000h,MSR 00000001h,MSR 0000017Ah
+--------K-12----CX1806-----------------------
+INT 12 - KEYBUI v2.0+ - INSTALLATION CHECK
+ CX = 1806h
+Return: AX = kilobytes of contiguous memory starting at absolute address 00000h
+ CX = 1960h if installed
+Program: KEYBUI is a resident keyboard driver by Johan Zwiekhorst which allows
+ accented characters and box drawing on standard QWERTY keyboards; it
+ also provides break-to-DOS and screen blanking capabilities
+SeeAlso: INT 14/AX=AA01h
+Index: screen saver;KEYBUI
+--------d-12----CX1807-----------------------
+INT 12 - PARKER v2.0+ - INSTALLATION CHECK
+ CX = 1807h
+Return: AX = kilobytes of contiguous memory starting at absolute address 00000h
+ CX = 1961h if installed
+Program: PARKER is an optionally-resident hard disk parking program by Johan
+ Zwiekhorst
+--------G-1205D7BX05D7-----------------------
+INT 12 U - Borland C++ IDE - INSTALLATION CHECK
+ AX = 05D7h (1495d)
+ BX = 05D7h
+Note: the BC++ IDE will call INT 11/AX=05D7h/BX=0088h if it is loaded
+SeeAlso: INT 11/AX=05D7h
+--------v-124350BX4920-----------------------
+INT 12 C - CPI-standard virus - "FRIEND" CHECK
+ AX = 4350h
+ BX = 4920h
+ CX = AB46h
+ DX = 554Eh
+Return: if friendly (not to be infected)
+ CX:DX -> ASCIZ identity code (changes yearly)
+SeeAlso: INT 13/AX=EC00h"VIRUS",INT 13/AX=5001h,INT 21/AX=0B56h
+--------T-12FFFECXFFFE-----------------------
+INT 12 - Back&Forth v1.62+ - API
+ AX = FFFEh
+ CX = FFFEh
+ BX = function
+ 00h installation check
+ Return: AX = 0001h installed
+ else not loaded
+ 01h (reserved)
+ 02h build program ID list (shareware Back&Forth)
+ ES:DI -> buffer of at least 100 bytes, to be filled with words
+ Return: AX = number of programs defined
+ ES:DI buffer filled with AX words
+ 02h get memory statistics (Back&Forth Professional)
+ Return: AX = available swap memory, KBytes
+ BX = maximum task size, KBytes
+ DX = fixed overhead per task, excluding video/macro
+ storage
+ 03h switch to specified task (task need not be open yet)
+ DX = two-letter program ID
+ Return: AX = status
+ 0000h if task undefined
+ 0001h task switch will occur when safe
+ 04h (reserved)
+ 05h (reserved)
+ 06h get version (documented only for Back&Forth Professional)
+ Return: AX = version * 100 (v1.71 = 00ABh)
+ 07h spawn program (Back&Forth Professional only???)
+ ES:DI -> BF_SPAWN record (see #00232)
+ Return: AX = status
+ 0000h if no task handles free
+ 0001h spawn will occur when safe
+ 08h get open tasks (documented only for Back&Forth Professional)
+ ES:DI -> task info buffer (see #00231,#00233)
+ Return: AX = number of open tasks (max 20)
+ Note: the supplied buffer must be large enough to hold 21
+ task entries
+ 09h (reserved)
+ ---Back&Forth Professional---
+ 0Ah get active clipboard filename
+ Return: DX:AX -> ASCIZ clipboard filename
+ 0Bh get active task number
+ AX = active task number (00h-13h)
+ BX = number of tasks allocated
+ DX = maximum number of tasks
+ 0Ch (reserved)
+ 0Dh (reserved)
+ 0Eh (reserved)
+ 0Fh stuff string into keyboard buffer
+ ES:DI -> ASCIZ string to be stuffed
+ Return: nothing
+ 10h check if in graphics mode
+ Return: AX = state
+ 0000h color text mode
+ 0004h mono text mode
+ FFFFh graphics mode
+ 11h get Back&Forth Professional user number
+ Return: AX = user number (0000h-00FFh)
+ 12h switch task by task number
+ DX = task number
+ Return: AX = status
+ 0000h attempted to switch to active task
+ 0001h task switch will occur when safe
+ FFFFh invalid task number
+ 13h delete (kill) task
+ DX = task number
+ Return: AX = status
+ 0000h attempted to delete the active task
+ 0001h successfully deleted
+ FFFFh invalid task number
+ Note: the active task number will change if the deleted task
+ was lower in the task list than the active task
+ 14h get next available task handle
+ Return: AX = next available task handle
+ FFFFh if task table is full
+Program: Back & Forth is a task switcher by Progressive Solutions, Inc.
+SeeAlso: INT 11/AX=FFFEh
+Index: installation check;BACK&FORTH
+
+Format of Back&Forth task info buffer:
+Offset Size Description (Table 00231)
+ 00h 21 BYTEs ASCIZ task name
+ 15h BYTE hotkey shift state (as for INT 16/AH=02h)
+ 16h WORD hotkey scan code (see also #00006)
+ 18h WORD program ID
+Index: hotkeys;Back&Forth
+SeeAlso: #00232,#00233
+
+Format of Back&Forth Professional BF_SPAWN record:
+Offset Size Description (Table 00232)
+ 00h 21 BYTEs task description
+ 15h BYTE flag: disable hotkeys
+ 16h WORD environment size in bytes
+ 18h BYTE hotkey shift flags
+ 19h WORD hotkey scancode
+ 1Bh WORD maximum number of EMS pages
+ 1Dh WORD required memory in KBytes
+ 1Fh 3 BYTEs DESQview-style two-letter program ID
+ 22h 13 BYTEs base name of program to be run (no path or extension)
+ 2Fh 66 BYTEs directory from which to start program
+ 71h 66 BYTEs initial current directory for program
+SeeAlso: #00231,#00233
+
+Format of Back&Forth Professional BF_TASK record:
+Offset Size Description (Table 00233)
+ 00h DWORD Unix-style task start time (seconds since 1970/1/1)
+ 04h 21 BYTEs task description
+ 19h DWORD elapsed time in task (seconds)
+ 1Dh WORD task ID
+ 1Fh BYTE task hotkey keyboard flags
+ 20h WORD task hotkey scan code (see also #00006)
+ 22h DWORD time task was suspended/exited
+ 26h WORD task handle
+SeeAlso: #00231,#00232
+--------B-1300-------------------------------
+INT 13 - DISK - RESET DISK SYSTEM
+ AH = 00h
+ DL = drive (if bit 7 is set both hard disks and floppy disks reset)
+Return: AH = status (see #00234)
+ CF clear if successful (returned AH=00h)
+ CF set on error
+Note: forces controller to recalibrate drive heads (seek to track 0)
+ for PS/2 35SX, 35LS, 40SX and L40SX, as well as many other systems,
+ both the master drive and the slave drive respond to the Reset
+ function that is issued to either drive
+SeeAlso: AH=0Dh,AH=11h,INT 21/AH=0Dh,INT 4D/AH=00h"TI Professional"
+SeeAlso: INT 56"Tandy 2000",MEM 0040h:003Eh
+--------B-1301-------------------------------
+INT 13 - DISK - GET STATUS OF LAST OPERATION
+ AH = 01h
+ DL = drive (bit 7 set for hard disk)
+Return: CF clear if successful (returned status 00h)
+ CF set on error
+ AH = status of previous operation (see #00234)
+Note: some BIOSes return the status in AL; the PS/2 Model 30/286 returns the
+ status in both AH and AL
+SeeAlso: AH=00h,INT 4D/AH=01h,MEM 0040h:0041h,MEM 0040h:0074h
+
+(Table 00234)
+Values for disk operation status:
+ 00h successful completion
+ 01h invalid function in AH or invalid parameter
+ 02h address mark not found
+ 03h disk write-protected
+ 04h sector not found/read error
+ 05h reset failed (hard disk)
+ 05h data did not verify correctly (TI Professional PC)
+ 06h disk changed (floppy)
+ 07h drive parameter activity failed (hard disk)
+ 08h DMA overrun
+ 09h data boundary error (attempted DMA across 64K boundary or >80h sectors)
+ 0Ah bad sector detected (hard disk)
+ 0Bh bad track detected (hard disk)
+ 0Ch unsupported track or invalid media
+ 0Dh invalid number of sectors on format (PS/2 hard disk)
+ 0Eh control data address mark detected (hard disk)
+ 0Fh DMA arbitration level out of range (hard disk)
+ 10h uncorrectable CRC or ECC error on read
+ 11h data ECC corrected (hard disk)
+ 20h controller failure
+ 31h no media in drive (IBM/MS INT 13 extensions)
+ 32h incorrect drive type stored in CMOS (Compaq)
+ 40h seek failed
+ 80h timeout (not ready)
+ AAh drive not ready (hard disk)
+ B0h volume not locked in drive (INT 13 extensions)
+ B1h volume locked in drive (INT 13 extensions)
+ B2h volume not removable (INT 13 extensions)
+ B3h volume in use (INT 13 extensions)
+ B4h lock count exceeded (INT 13 extensions)
+ B5h valid eject request failed (INT 13 extensions)
+ B6h volume present but read protected (INT 13 extensions)
+ BBh undefined error (hard disk)
+ CCh write fault (hard disk)
+ E0h status register error (hard disk)
+ FFh sense operation failed (hard disk)
+SeeAlso: #M0022
+--------B-1302-------------------------------
+INT 13 - DISK - READ SECTOR(S) INTO MEMORY
+ AH = 02h
+ AL = number of sectors to read (must be nonzero)
+ CH = low eight bits of cylinder number
+ CL = sector number 1-63 (bits 0-5)
+ high two bits of cylinder (bits 6-7, hard disk only)
+ DH = head number
+ DL = drive number (bit 7 set for hard disk)
+ ES:BX -> data buffer
+Return: CF set on error
+ if AH = 11h (corrected ECC error), AL = burst length
+ CF clear if successful
+ AH = status (see #00234)
+ AL = number of sectors transferred (only valid if CF set for some
+ BIOSes)
+Notes: errors on a floppy may be due to the motor failing to spin up quickly
+ enough; the read should be retried at least three times, resetting
+ the disk with AH=00h between attempts
+ most BIOSes support "multitrack" reads, where the value in AL
+ exceeds the number of sectors remaining on the track, in which
+ case any additional sectors are read beginning at sector 1 on
+ the following head in the same cylinder; the MSDOS CONFIG.SYS command
+ MULTITRACK (or the Novell DOS DEBLOCK=) can be used to force DOS to
+ split disk accesses which would wrap across a track boundary into two
+ separate calls
+ the IBM AT BIOS and many other BIOSes use only the low four bits of
+ DH (head number) since the WD-1003 controller which is the standard
+ AT controller (and the controller that IDE emulates) only supports
+ 16 heads
+ AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
+ than 1024 cylinders by placing bits 10 and 11 of the cylinder number
+ into bits 6 and 7 of DH
+ under Windows95, a volume must be locked (see INT 21/AX=440Dh/CX=084Bh)
+ in order to perform direct accesses such as INT 13h reads and writes
+ all versions of MS-DOS (including MS-DOS 7 [Windows 95]) have a bug
+ which prevents booting on hard disks with 256 heads (FFh), so many
+ modern BIOSes provide mappings with at most 255 (FEh) heads
+ some cache drivers flush their buffers when detecting that DOS is
+ bypassed by directly issuing INT 13h from applications. A dummy
+ read can be used as one of several methods to force cache
+ flushing for unknown caches (e.g. before rebooting).
+BUGS: When reading from floppies, some AMI BIOSes (around 1990-1991) trash
+ the byte following the data buffer, if it is not arranged to an even
+ memory boundary. A workaround is to either make the buffer word
+ aligned (which may also help to speed up things), or to add a dummy
+ byte after the buffer.
+ MS-DOS may leave interrupts disabled on return from this function.
+ Apparently some BIOSes or intercepting resident software have bugs
+ that may destroy DX on return or not properly set the Carry flag.
+ At least some Microsoft software frames calls to this function with
+ PUSH DX, STC, INT 13h, STI, POP DX.
+ on the original IBM AT BIOS (1984/01/10) this function does not disable
+ interrupts for harddisks (DL >= 80h). On these machines the MS-DOS/
+ PC DOS IO.SYS/IBMBIO.COM installs a special filter to bypass the
+ buggy code in the ROM (see CALL F000h:211Eh)
+SeeAlso: AH=03h,AH=0Ah,AH=06h"V10DISK.SYS",AH=21h"PS/1",AH=42h"IBM"
+SeeAlso: INT 21/AX=440Dh/CX=084Bh,INT 4D/AH=02h
+--------B-1303-------------------------------
+INT 13 - DISK - WRITE DISK SECTOR(S)
+ AH = 03h
+ AL = number of sectors to write (must be nonzero)
+ CH = low eight bits of cylinder number
+ CL = sector number 1-63 (bits 0-5)
+ high two bits of cylinder (bits 6-7, hard disk only)
+ DH = head number
+ DL = drive number (bit 7 set for hard disk)
+ ES:BX -> data buffer
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234)
+ AL = number of sectors transferred
+ (only valid if CF set for some BIOSes)
+Notes: errors on a floppy may be due to the motor failing to spin up quickly
+ enough; the write should be retried at least three times, resetting
+ the disk with AH=00h between attempts
+ most BIOSes support "multitrack" writes, where the value in AL
+ exceeds the number of sectors remaining on the track, in which
+ case any additional sectors are written beginning at sector 1 on
+ the following head in the same cylinder; the CONFIG.SYS command
+ MULTITRACK can be used to force DOS to split disk accesses which
+ would wrap across a track boundary into two separate calls
+ the IBM AT BIOS and many other BIOSes use only the low four bits of
+ DH (head number) since the WD-1003 controller which is the standard
+ AT controller (and the controller that IDE emulates) only supports
+ 16 heads
+ AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
+ than 1024 cylinders by placing bits 10 and 11 of the cylinder number
+ into bits 6 and 7 of DH
+ under Windows95, an application must issue a physical volume lock on
+ the drive via INT 21/AX=440Dh before it can successfully write to
+ the disk with this function
+SeeAlso: AH=02h,AH=0Bh,AH=07h"V10DISK.SYS",AH=22h"PS/1",AH=43h"IBM"
+SeeAlso: INT 21/AX=440Dh"DOS 3.2+",INT 4D/AH=03h
+--------B-1304-------------------------------
+INT 13 - DISK - VERIFY DISK SECTOR(S)
+ AH = 04h
+ AL = number of sectors to verify (must be nonzero)
+ CH = low eight bits of cylinder number
+ CL = sector number 1-63 (bits 0-5)
+ high two bits of cylinder (bits 6-7, hard disk only)
+ DH = head number
+ DL = drive number (bit 7 set for hard disk)
+ ES:BX -> data buffer (PC,XT,AT with BIOS prior to 1985/11/15)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234)
+ AL = number of sectors verified
+Notes: errors on a floppy may be due to the motor failing to spin up quickly
+ enough (timeout error 80h); the write should be retried at least
+ three times, resetting the disk with AH=00h between attempts
+ on floppys, the operation should also be retried on media change
+ (06h) detection.
+ this function does not compare the disk with memory, it merely
+ checks whether the sector's stored CRC matches the data's actual CRC
+ the IBM AT BIOS and many other BIOSes use only the low four bits of
+ DH (head number) since the WD-1003 controller which is the standard
+ AT controller (and the controller that IDE emulates) only supports
+ 16 heads
+ AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
+ than 1024 cylinders by placing bits 10 and 11 of the cylinder number
+ into bits 6 and 7 of DH
+BUG: some Epson ROM BIOSes sometimes have problems properly handling this
+ function. The workaround is to reset the disk (INT 13/AH=00h) before
+ the call.
+SeeAlso: AH=02h,AH=44h,INT 4D/AH=04h,INT 4D/AH=06h
+--------B-1305-------------------------------
+INT 13 - FLOPPY - FORMAT TRACK
+ AH = 05h
+ AL = number of sectors to format
+ CH = track number
+ DH = head number
+ DL = drive number
+ ES:BX -> address field buffer (see #00235)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234)
+Notes: on AT or higher, call AH=17h first
+ the number of sectors per track is read from the diskette parameter
+ table pointed at by INT 1E
+BUG: some old Compaq BIOSes have a bug when attempting to call this function
+ from Windows Standard Mode with EMM386 loaded. A possible workaround
+ is to call this function from Real Mode e.g. through DPMI function
+ "Call Real Mode function with FAR return" (see INT 31/AX=0301h).
+SeeAlso: AH=05h"FIXED",AH=17h,AH=18h,INT 1E
+
+Format of floppy format address field buffer entry (one per sector in track):
+Offset Size Description (Table 00235)
+ 00h BYTE track number
+ 01h BYTE head number (0-based)
+ 02h BYTE sector number
+ 03h BYTE sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024)
+--------B-1305-------------------------------
+INT 13 - FIXED DISK - FORMAT TRACK
+ AH = 05h
+ AL = interleave value (XT-type controllers only)
+ ES:BX -> 512-byte format buffer
+ the first 2*(sectors/track) bytes contain F,N for each sector
+ F = sector type
+ 00h for good sector
+ 20h to unassign from alternate location
+ 40h to assign to alternate location
+ 80h for bad sector
+ N = sector number
+ CH = cylinder number (bits 8,9 in high bits of CL)
+ CL = high bits of cylinder number (bits 7,6)
+ DH = head
+ DL = drive
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234)
+Notes: AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
+ than 1024 cylinders by placing bits 10 and 11 of the cylinder number
+ into bits 6 and 7 of DH
+ for XT-type controllers on an AT or higher, AH=0Fh should be called
+ first
+ the IBM AT BIOS and many other BIOSes use only the low four bits of
+ DH (head number) since the WD-1003 controller which is the standard
+ AT controller (and the controller that IDE emulates) only supports
+ 16 heads
+ not all controller support sector types 20h and 40h
+ under Windows95, an application must issue a physical volume lock on
+ the drive via INT 21/AX=440Dh before it can successfully write to
+ the disk with this function
+SeeAlso: AH=05h"FLOPPY",AH=06h"FIXED",AH=07h"FIXED",AH=0Fh,AH=18h,AH=1Ah
+--------d-1305-------------------------------
+INT 13 - Future Domain SCSI BIOS - SEND SCSI MODE SELECT COMMAND
+ AH = 05h
+ DL = hard drive ID
+ ES:BX -> mode select data (see #00236)
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234)
+Notes: this function can be called before AH=07h"SCSI" or AH=06h"SCSI" to
+ format a SCSI disk with the desired parameters
+ the mode select data below is from the SCSI-1 specification
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=06h"SCSI",AH=07h"SCSI",INT 4F/AX=8100h
+
+Format of Future Domain SCSI mode select data:
+Offset Size Description (Table 00236)
+ 00h BYTE number of bytes of remaining data (12 + vendor unique length)
+ 01h BYTE reserved (0)
+ 02h BYTE medium type (0 for hard disk)
+ 03h BYTE reserved (0)
+ 04h BYTE block descriptor length (8)
+ 05h BYTE density code (0 for hard disk)
+ 06h 3 BYTEs (big-endian) number of blocks (000000h for entire disk)
+ 09h BYTE reserved (0)
+ 0Ah 3 BYTEs (big-endian) block length (512 standard, or 256)
+ 0Dh ??? vendor-specific parameter bytes (optional)
+--------d-13057FSI324D-----------------------
+INT 13 - 2M - FORMAT TRACK
+ AX = 057Fh
+ SI = 324Dh ("2M")
+ CH = track number
+ DH = head number
+ DL = drive number
+ ES:BX -> boot sector of future 2M diskette
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234)
+Program: 2M is a TSR developed by Ciriaco Garc¡a de Celis to support
+ non standard diskettes with 820-902/1476-1558K (5.25 DD/HD)
+ and 984-1066/1804-1886K/3608-3772K (3.5 DD/HD/ED)
+InstallCheck: must search for a "CiriSOFT:2M:1.3" or "CiriSOFT:2MX:3.0" or
+ similar (recomended ":2M:", ":2MX:", or ":2MB:" substrings) in the
+ CiriSOFT TSR interface
+Notes: it is not necessary to call AH=17h or AH=18h first (will be ignored)
+ the diskette format must always begin on cylinder 0 head 0
+ the boot sector can be obtained from an already-formatted 2M diskette
+ (by calling AH=02h with head number 00h in 2M v1.x and with head
+ number 80h for 2M v2+)
+ since 2M v2.0, the BOOT sector is emulated using the first physical
+ sector of FAT2; the second-sixth physical sectors of FAT2 in HD or ED
+ diskettes store the SuperBOOT code. To skip the FAT2 emulation (using
+ FAT1) of 2M, in order to read the SuperBOOT code, head number must be
+ 80h-81h instead 0-1 (bit 7 active) in standard read/write functions.
+ This lets diskcopy programs format 2M target diskettes copying
+ SuperBOOT code. If the target diskette is already 2MF formatted
+ (containing boot code) this trick it is not necessary.
+ when using STV technology (offset 65 of boot sector equal to 1) it is
+ necessary to write the full track before formatting (except track 0
+ side 0) to complete the format and skip future CRC errors on read; in
+ track 0 side 1 the head used must be 81h instead 1. Diskcopy programs
+ may do a format-write-verify sequential phases to improve performance
+SeeAlso: AH=05h"FLOPPY",AH=18h/CX=5055h,INT 2F"CiriSOFT"
+--------B-1306-------------------------------
+INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
+ AH = 06h
+ AL = interleave value
+ CH = cylinder number (bits 8,9 in high bits of CL)
+ CL = sector number
+ DH = head
+ DL = drive
+Return: AH = status code (see #00234)
+Note: AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
+ than 1024 cylinders by placing bits 10 and 11 of the cylinder number
+ into bits 6 and 7 of DH
+SeeAlso: AH=05h"FIXED",AH=07h"FIXED"
+--------d-1306-------------------------------
+INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE WITH BAD SECTOR MAPPING
+ AH = 06h
+ AL = interleave
+ (0 = default, 1 = consecutive sectors, 2 - 255 = vendor unique)
+ DL = hard drive ID
+ DH = defect list info (see #00237)
+ ES:BX -> defect table A, B or C (see #00238,#00239,#00240)
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234)
+Notes: block addresses must be in ascending order (for table B, cylinder is
+ most significant, byte from index least significant; for table C,
+ cylinder is most significant, sector number least significant)
+ table B defect bytes from index of FFFFFFFFh indicates that the entire
+ track shall be reassigned
+ table C defect sector number of FFFFFFFFh indicates that the entire
+ track shall be reassigned
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=05h"SCSI",AH=06h"FIXED",AH=07h"SCSI"
+
+Bitfields for Future Domain SCSI defect list info:
+Bit(s) Description (Table 00237)
+ 7-5 drive LUN
+ 4 defect list is available
+ 3 defect list is complete (erase drive's defect list)
+ 2-0 defect table format
+ (000=use defect table A, 100=use defect table B,
+ 101=use defect table C)
+
+Format of Future Domain SCSI defect table A:
+Offset Size Description (Table 00238)
+ 00h WORD number of bytes remaining in table
+ 02h BYTE reserved (0)
+ 03h BYTE reserved (0)
+ 04h WORD (big-endian) defect list length (4*number of defects)
+ 06h 4 DWORDs (big-endian) defect block addresses
+
+Format of Future Domain SCSI defect table B:
+Offset Size Description (Table 00239)
+ 00h WORD number of bytes remaining in table
+ 02h BYTE reserved (0)
+ 03h BYTE reserved (0)
+ 04h WORD (big-endian) defect list length (8*number of defects)
+ 06h 8N BYTEs defect list [array] (see #00241)
+
+Format of Future Domain SCSI defect table C:
+Offset Size Description (Table 00240)
+ 00h WORD number of bytes remaining in table
+ 02h BYTE reserved (0)
+ 03h BYTE reserved (0)
+ 04h WORD (big-endian) defect list length (8*number of defects)
+ 06h 8N BYTEs defect list [array] (see #00241)
+
+Format of Future Domain SCSI defect list entry:
+Offset Size Description (Table 00241)
+ 00h 3 BYTEs (big-endian) cylinder number of defect
+ 03h BYTE head number of defect
+ 04h DWORD (big-endian) defect bytes from index
+--------d-1306-------------------------------
+INT 13 - Adaptec AHA-154xA/Bustek BT-542 BIOS - IDENTIFY SCSI DEVICES
+ AH = 06h
+Return: AH = status code (see #00234)
+ CF clear if successful
+ AL = first drive supported
+ (80h nonconcurrent operation, 81h concurrent operation)
+ CF set on error
+Desc: determine the number of the first supported SCSI drive
+Note: the return value is 80h when two SCSI drives are supported, 81h if
+ only one SCSI drive is installed
+SeeAlso: AH=08h"PC",#00732 at INT 1A/AX=B102h
+--------d-1306-------------------------------
+INT 13 - V10DISK.SYS - READ DELETED SECTORS
+ AH = 06h
+ AL = number of sectors
+ CH = cylinder number (bits 8,9 in high bits of CL)
+ CL = sector number
+ DH = head
+ DL = drive
+ ES:BX -> buffer
+Return: AH = status code (see #00234)
+Program: V10DISK.SYS is a driver for the Flagstaff Engineering 8" floppies
+SeeAlso: AH=02h,AH=07h"V10DISK.SYS"
+--------B-1307-------------------------------
+INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
+ AH = 07h
+ AL = interleave value (XT only)
+ ES:BX = 512-byte format buffer (see AH=05h)
+ CH = cylinder number (bits 8,9 in high bits of CL)
+ CL = sector number
+ DH = head
+ DL = drive
+Return: AH = status code (see #00234)
+Note: AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
+ than 1024 cylinders by placing bits 10 and 11 of the cylinder number
+ into bits 6 and 7 of DH
+SeeAlso: AH=05h"FIXED",AH=06h"FIXED",AH=1Ah
+--------d-1307-------------------------------
+INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE
+ AH = 07h
+ AL = interleave (0 = default, 1 = consecutive sectors,
+ 2 - 255 = vendor unique)
+ DL = hard drive ID
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234)
+SeeAlso: AH=05h"SCSI",AH=06h"SCSI",AH=07h"FIXED"
+--------d-1307-------------------------------
+INT 13 - V10DISK.SYS - WRITE DELETED SECTORS
+ AH = 07h
+ AL = number of sectors
+ CH = cylinder number (bits 8,9 in high bits of CL)
+ CL = sector number
+ DH = head
+ DL = drive
+ ES:BX -> buffer
+Return: AH = status code (see #00234)
+Program: V10DISK.SYS is a driver for the Flagstaff Engineering 8" floppies
+SeeAlso: AH=03h,AH=06h"V10DISK.SYS"
+--------B-1308-------------------------------
+INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
+ AH = 08h
+ DL = drive (bit 7 set for hard disk)
+ ES:DI = 0000h:0000h to guard against BIOS bugs
+Return: CF set on error
+ AH = status (07h) (see #00234)
+ CF clear if successful
+ AH = 00h
+ AL = 00h on at least some BIOSes
+ BL = drive type (AT/PS2 floppies only) (see #00242)
+ CH = low eight bits of maximum cylinder number
+ CL = maximum sector number (bits 5-0)
+ high two bits of maximum cylinder number (bits 7-6)
+ DH = maximum head number
+ DL = number of drives
+ ES:DI -> drive parameter table (floppies only)
+Notes: may return successful even though specified drive is greater than the
+ number of attached drives of that type (floppy/hard); check DL to
+ ensure validity
+ for systems predating the IBM AT, this call is only valid for hard
+ disks, as it is implemented by the hard disk BIOS rather than the
+ ROM BIOS
+ the IBM ROM-BIOS returns the total number of hard disks attached
+ to the system regardless of whether DL >= 80h on entry.
+ Toshiba laptops with HardRAM return DL=02h when called with DL=80h,
+ but fail on DL=81h. The BIOS data at 40h:75h correctly reports 01h.
+ may indicate only two drives present even if more are attached; to
+ ensure a correct count, one can use AH=15h to scan through possible
+ drives
+ Reportedly some Compaq BIOSes with more than one hard disk controller
+ return only the number of drives DL attached to the corresponding
+ controller as specified by the DL value on entry. However, on
+ Compaq machines with "COMPAQ" signature at F000h:FFEAh,
+ MS-DOS/PC DOS IO.SYS/IBMBIO.COM call INT 15/AX=E400h and
+ INT 15/AX=E480h to enable Compaq "mode 2" before retrieving the count
+ of hard disks installed in the system (DL) from this function.
+ the maximum cylinder number reported in CX is usually two less than
+ the total cylinder count reported in the fixed disk parameter table
+ (see INT 41h,INT 46h) because early hard disks used the last cylinder
+ for testing purposes; however, on some Zenith machines, the maximum
+ cylinder number reportedly is three less than the count in the fixed
+ disk parameter table.
+ for BIOSes which reserve the last cylinder for testing purposes, the
+ cylinder count is automatically decremented
+ on PS/1s with IBM ROM DOS 4, nonexistent drives return CF clear,
+ BX=CX=0000h, and ES:DI = 0000h:0000h
+ machines with lost CMOS memory may return invalid data for floppy
+ drives. In this situation CF is cleared, but AX,BX,CX,DX,DH,DI,
+ and ES contain only 0. At least under some circumstances, MS-DOS/
+ PC DOS IO.SYS/IBMBIO.COM just assumes a 360 KB floppy if it sees
+ CH to be zero for a floppy.
+ the PC-Tools PCFORMAT program requires that AL=00h before it will
+ proceed with the formatting
+ if this function fails, an alternative way to retrieve the number
+ of floppy drives installed in the system is to call INT 11h.
+ In fact, the MS-DOS/PC-DOS IO.SYS/IBMBIO.COM attempts to get the
+ number of floppy drives installed from INT 13/AH=08h, when INT 11h
+ AX bit 0 indicates there are no floppy drives installed. In addition
+ to testing the CF flag, it only trusts the result when the number of
+ sectors (CL preset to zero) is non-zero after the call.
+BUGS: several different Compaq BIOSes incorrectly report high-numbered
+ drives (such as 90h, B0h, D0h, and F0h) as present, giving them the
+ same geometry as drive 80h; as a workaround, scan through disk
+ numbers, stopping as soon as the number of valid drives encountered
+ equals the value in 0040h:0075h
+ a bug in Leading Edge 8088 BIOS 3.10 causes the DI,SI,BP,DS, and ES
+ registers to be destroyed
+ some Toshiba BIOSes (at least before 1995, maybe some laptops???
+ with 1.44 MB floppies) have a bug where they do not set the ES:DI
+ vector even for floppy drives. Hence these registers should be
+ preset with zero before the call and checked to be non-zero on
+ return before using them. Also it seems these BIOSes can return
+ wrong info in BL and CX, as S/DOS 1.0 can be configured to preset
+ these registers as for an 1.44 MB floppy.
+ the PS/2 Model 30 fails to reset the bus after INT 13/AH=08h and
+ INT 13/AH=15h. A workaround is to monitor for these functions
+ and perform a transparent INT 13/AH=01h status read afterwards.
+ This will reset the bus. The MS-DOS 6.0 IO.SYS takes care of
+ this by installing a special INT 13h interceptor for this purpose.
+ AD-DOS may leave interrupts disabled on return from this function.
+ Some Microsoft software explicitly sets STI after return.
+SeeAlso: AH=06h"Adaptec",AH=13h"SyQuest",AH=48h,AH=15h,INT 1E
+SeeAlso: INT 41"HARD DISK 0"
+
+(Table 00242)
+Values for diskette drive type:
+ 01h 360K
+ 02h 1.2M
+ 03h 720K
+ 04h 1.44M
+ 05h ??? (reportedly an obscure drive type shipped on some IBM machines)
+ 2.88M on some machines (at least AMI 486 BIOS)
+ 06h 2.88M
+ 10h ATAPI Removable Media Device
+--------d-1308-------------------------------
+INT 13 - V10DISK.SYS - SET FORMAT
+ AH = 08h
+ AL = number of sectors
+ CH = cylinder number (bits 8,9 in high bits of CL)
+ CL = sector number
+ DH = head
+ DL = drive
+Return: AH = status code (see #00234)
+Program: V10DISK.SYS is a driver for the Flagstaff Engineering 8" floppies
+Note: details not available
+SeeAlso: AH=03h,AH=06h"V10DISK.SYS"
+--------y-130800DLF0-------------------------
+INT 13 - SecureDrive - INSTALLATION CHECK
+ AX = 08000h
+ DL = F0h
+Return: AX = EDCBh for version 1.0-1.2
+ AX = EDCCh for version 1.3
+ CX = code segment
+ DX = data address within code segment
+Program: SecureDrive by Mike Ingle <mikeingle@delphi.com> allows you to create
+ an encrypted partition on your harddisk.
+--------B-1309-------------------------------
+INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS)
+ AH = 09h
+ DL = drive (80h for first, 81h for second)
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00234)
+Notes: on the PC and XT, this function uses the parameter table pointed at by
+ INT 41
+ on the AT and later, this function uses the parameter table pointed at
+ by INT 41 if DL=80h, and the parameter table pointed at by INT 46 if
+ DL=81h
+SeeAlso: INT 41"HARD DISK 0",INT 46"HARD DISK 1"
+--------B-130A-------------------------------
+INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later)
+ AH = 0Ah
+ AL = number of sectors (01h may be only value supported)
+ CH = low eight bits of cylinder number
+ CL = sector number (bits 5-0)
+ high two bits of cylinder number (bits 7-6)
+ DH = head number
+ DL = drive number (80h = first, 81h = second)
+ ES:BX -> data buffer
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00234)
+ AL = number of sectors transferred
+Notes: this function reads in four to seven bytes of error-correcting code
+ along with each sector's worth of information
+ data errors are not automatically corrected, and the read is aborted
+ after the first sector with an ECC error
+ used for diagnostics only on PS/2 systems; IBM officially classifies
+ this function as optional
+BUG: on the original IBM AT BIOS (1984/01/10) this function does not disable
+ interrupts for harddisks (DL >= 80h). On these machines the MS-DOS/
+ PC DOS IO.SYS/IBMBIO.COM installs a special filter to bypass the
+ buggy code in the ROM (see CALL F000h:211Eh)
+SeeAlso: AH=02h,AH=0Bh,MEM 0040h:0074h
+--------B-130B-------------------------------
+INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later)
+ AH = 0Bh
+ AL = number of sectors (01h may be only value supported)
+ CH = low eight bits of cylinder number
+ CL = sector number (bits 5-0)
+ high two bits of cylinder number (bits 7-6)
+ DH = head number
+ DL = drive number (80h = first, 81h = second)
+ ES:BX -> data buffer
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00234)
+ AL = number of sectors transferred
+Notes: each sector's worth of data must be followed by four to seven bytes of
+ error-correction information
+ used for diagnostics only on PS/2 systems; IBM officially classifies
+ this function as optional
+SeeAlso: AH=03h,AH=0Ah,MEM 0040h:0074h
+--------B-130C-------------------------------
+INT 13 - HARD DISK - SEEK TO CYLINDER
+ AH = 0Ch
+ CH = low eight bits of cylinder number
+ CL = sector number (bits 5-0)
+ high two bits of cylinder number (bits 7-6)
+ DH = head number
+ DL = drive number (80h = first, 81h = second hard disk)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234)
+SeeAlso: AH=00h,AH=02h,AH=0Ah,AH=47h
+--------B-130D-------------------------------
+INT 13 - HARD DISK - RESET HARD DISKS
+ AH = 0Dh
+ DL = drive number (80h = first, 81h = second hard disk)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234)
+Notes: reinitializes the hard disk controller, resets the specified drive's
+ parameters, and recalibrates the drive's heads (seek to track 0)
+ for PS/2 35SX, 35LS, 40SX and L40SX, as well as many other systems,
+ both the master drive and the slave drive respond to the Reset
+ function that is issued to either drive
+ not for PS/2 ESDI drives
+SeeAlso: AH=00h,INT 21/AH=0Dh
+--------B-130E-------------------------------
+INT 13 - HARD DISK - READ SECTOR BUFFER (XT only)
+ AH = 0Eh
+ DL = drive number (80h = first, 81h = second hard disk)
+ ES:BX -> buffer
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234)
+Notes: transfers controller's sector buffer. No data is read from the drive
+ used for diagnostics only on PS/2 systems
+SeeAlso: AH=0Ah
+--------B-130F-------------------------------
+INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only)
+ AH = 0Fh
+ DL = drive number (80h = first, 81h = second hard disk)
+ ES:BX -> buffer
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234)
+Notes: does not write data to the drive
+ should be called before formatting to initialize an XT-type
+ controller's sector buffer
+ used for diagnostics only on PS/2 systems
+SeeAlso: AH=0Bh
+--------B-1310-------------------------------
+INT 13 - HARD DISK - CHECK IF DRIVE READY
+ AH = 10h
+ DL = drive number (80h = first, 81h = second hard disk)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AH=11h
+--------B-1311-------------------------------
+INT 13 - HARD DISK - RECALIBRATE DRIVE
+ AH = 11h
+ DL = drive number (80h = first, 81h = second hard disk)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+Note: causes hard disk controller to seek the specified drive to cylinder 0
+SeeAlso: AH=00h,AH=0Ch,AH=10h,AH=19h"FIXED DISK",MEM 0040h:003Eh
+--------B-1312-------------------------------
+INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS)
+ AH = 12h
+ DL = drive number (80h = first, 81h = second hard disk)
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234 at AH=01h)
+ AL = 00h
+SeeAlso: AH=13h,AH=14h
+--------d-1312-------------------------------
+INT 13 - Future Domain SCSI CONTROLLER - STOP SCSI DISK
+ AH = 12h
+ DL = hard drive ID
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234 at AH=01h)
+Notes: available at least on the TMC-870 8-bit SCSI controller BIOS v6.0A
+ if the given drive is a SCSI device, the SCSI Stop Unit command is sent
+ and either "Disk prepared for shipping" or "Disk Stop command failed"
+ is displayed
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+--------d-1312-------------------------------
+INT 13 - SyQuest - START/STOP SCSI DISK
+ AH = 12h
+ AL = subfunction
+ 00h start disk
+ 01h stop disk
+ CX = wait flag
+ 00h wait for ready
+ 01h don't wait for ready
+ DL = hard drive ID (bit 7 for hard disks must be set)
+Return: CF set on error
+ CF clear if successful
+ AH = status
+ 00h successful
+ 01h invalid function request
+ 80h timeout
+SeeAlso: AH=12h"Future Domain",AH=13h"SyQuest"
+--------B-1313-------------------------------
+INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS)
+ AH = 13h
+ DL = drive number (80h = first, 81h = second hard disk)
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234 at AH=01h)
+ AL = 00h
+SeeAlso: AH=12h"HARD DISK",AH=14h"HARD DISK"
+--------d-1313-------------------------------
+INT 13 - SyQuest - READ DRIVE PARAMATERS (for DOS 5+)
+ AH = 13h
+ DL = drive ID (bit 7 set for hard disks)
+Return: CF set on error
+ AH = status (07h) (see #00234 at AH=01h)
+ CF clear if successful
+ AH = 00h
+ BL = drive type (AT/PS2 floppies only) (see #00242)
+ CH = low eight bits of maximum cylinder number
+ CL = maximum sector number (bits 5-0)
+ high two bits of maximum cylinder number (bits 7-6)
+ DH = maximum head number
+ DL = number of drives
+ ES:DI -> drive parameter table (floppies only)
+Notes: the return values are identical to the standard INT 13/AH=08h, but the
+ number of drives is not limited to 2, so
+ scanning all possible drive numbers with the Read DASD Type call
+ (AH=15h) should generally be preferred to determine the number of
+ drives attached to the system.
+SeeAlso: AH=08h"PC",AH=12h"SyQuest",AH=15h,AH=59h"SyQuest"
+--------B-1314-------------------------------
+INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC
+ AH = 14h
+Return: CF set on error
+ CF clear if successful
+ AH = status code (see #00234 at AH=01h)
+ AL = 00h
+SeeAlso: AH=12h,AH=13h
+--------B-1315-------------------------------
+INT 13 - DISK - GET DISK TYPE (XT 1986/1/10 or later,XT286,AT,PS)
+ AH = 15h
+ DL = drive number (bit 7 set for hard disk)
+ (AL = FFh, CX = FFFFh, see Note)
+Return: CF clear if successful
+ AH = type code
+ 00h no such drive
+ (SpeedStor) AL = 03h hard disk
+ CX:DX = number of 512-byte sectors
+ 01h floppy without change-line support
+ 02h floppy (or other removable drive) with change-line support
+ 03h hard disk
+ CX:DX = number of 512-byte sectors
+ CF set on error
+ AH = status (see #00234 at AH=01h)
+Note: SyQuest can report type 01h or 02h for 'hard disks', since its media
+ is removable
+BUGS: many versions of the Award 486 BIOS do not return the sector count
+ because the BIOS exit code restores CX and DX to their original
+ values after the function had already set them to correct values
+ Some releases of PC Tools REBUILD preset CX=FFFFh and only trust the
+ results if CH <= 2 on return (which would cut off drives > 16 Gb).
+ several different Compaq BIOSes incorrectly report high-numbered
+ drives (such as 90h, B0h, D0h, and F0h) as present, giving them the
+ same geometry as drive 80h; as a workaround, scan through disk
+ numbers, stopping as soon as the number of valid drives encountered
+ equals the value in 0040h:0075h
+ the PS/2 Model 30 fails to reset the bus after INT 13/AH=08h and
+ INT 13/AH=15h. A workaround is to monitor for these functions
+ and perform a transparent INT 13/AH=01h status read afterwards.
+ This will reset the bus. The MS-DOS 6.0 IO.SYS takes care of
+ this by installing a special INT 13h interceptor for this purpose.
+ Some releases of SpeedStor have a bug where it reports AX=0003h instead
+ of correctly reporting AH=03h for hard disks. A possible workaround
+ when testing for hard disks is to check for AH=03h and AX=0003h.
+ In this case this function should be invoked with a bogus fixed
+ value in AL, e.g. AL=FFh.
+SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h"SCSI",MEM 0040h:0075h
+--------B-1316-------------------------------
+INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1986/1/10 or later,XT286,AT,PS)
+ AH = 16h
+ DL = drive number (00h-7Fh)
+ SI = 0000h (to avoid crash on AT&T 6300)
+Return: CF clear if change line inactive
+ AH = 00h (disk not changed)
+ CF set if change line active
+ AH = status
+ 01h invalid command (SyQuest)
+ 06h change line active or not supported
+ 80h drive not ready or not present
+Notes: call AH=15h first to determine whether the drive supports a change
+ line
+ this call also clears the media-change status, so that a disk change
+ is only reported once
+BUGS: some versions of Award 386 Modular BIOS and AMI BIOS fail to clear
+ the media-change status
+ AT&T 6300 WGS systems crash if SI <> 0 on entry.
+ some pre 1986/08/04 Compaq ROM BIOS have a serious bug where this
+ function may re-configure a hard disk depending on what is located
+ at ES:[BX] and data indexed to by it. MS-DOS/PC DOS IO.SYS/IBMBIO.COM
+ install a special filter when they detect Compaq ROM BIOSes with
+ earlier dates.
+ some Compaq 286 systems have a bug in all INT 13h functions >= 16h,
+ which causes the byte at DS:0074h to be destroyed when called for
+ hard disks (DL >= 80h). MS-DOS/PC DOS IO.SYS/IBMBIO.COM performs a
+ test on this bug using this sub-function, and if found installs a
+ special filter which points DS into ROM, so that it cannot cause
+ any harm.
+ some drives (or controllers???) forget the change line status
+ if another drive is accessed afterwards. The DOS BIOS takes care
+ of this by not relying on the reported change line status when
+ the change line is not active and a different drive is accessed,
+ instead it reports "don't know" to the DOS kernel.
+SeeAlso: AH=15h,AH=49h
+--------B-1317-------------------------------
+INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS)
+ AH = 17h
+ AL = format type
+ 01h = 320/360K disk in 360K drive
+ 02h = 320/360K disk in 1.2M drive
+ 03h = 1.2M disk in 1.2M drive
+ 04h = 720K disk in 720K or 1.44M drive
+ DL = drive number
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+Note: this function does not handle 1.44M drives; use AH=18h instead
+SeeAlso: AH=15h,AH=18h
+--------d-131700-----------------------------
+INT 13 - Future Domain SCSI CONTROLLER - GET INQUIRY INFO FROM SCSI DEVICE
+ AX = 1700h
+ CL = length of buffer
+ DL = hard drive ID
+ ES:BX -> buffer for info (see #00243)
+Return: CF clear if successful
+ CH = number of bytes returned in buffer???
+ CF set on error
+ AH = status code (see #00234 at AH=01h)
+Notes: this function is not available with 8-bit controller ROM versions < 7.0
+ information block bytes 5-n are vendor-specific in older SCSI devices
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=18h"SCSI",AH=1Bh"SCSI"
+
+Format of Future Domain SCSI inquiry information block:
+Offset Size Description (Table 00243)
+ 00h BYTE device type
+ bits 0-4: peripheral device type (see #00244)
+ bits 5-7: peripheral qualifier (see #00245)
+ 01h BYTE device type modifier
+ bits 0-6: device type modifier
+ bit 7: removable medium
+ 02h BYTE SCSI version (see #00246)
+ 03h BYTE data format/capabilities (see #00247)
+ 04h BYTE additional data length (total remaining bytes)
+ 05h 2 BYTEs reserved
+ 07h BYTE device capabilities (see #00248)
+ 08h 8 BYTEs vendor identification (space-padded ASCII)
+ 10h 8 BYTEs product identification (space-padded ASCII)
+ 20h 4 BYTEs product revision level (space-padded ASCII)
+ 24h 20 BYTEs vendor specific
+ 38h 40 BYTEs reserved
+ 60h var vendor specific parameters
+
+(Table 00244)
+Values for Future Domain SCSI peripheral device type:
+ 00h direct-access device (e.g., magnetic disk)
+ 01h sequential-access device (e.g., magnetic tape)
+ 02h printer device
+ 03h processor device
+ 04h write-once device (e.g., some optical disks)
+ 05h CD-ROM device
+ 06h scanner device
+ 07h optical memory device (e.g., some optical disks)
+ 08h medium changer device (e.g., jukeboxes)
+ 09h communications device
+ 0Ah (defined by ASC IT8)
+ 0Bh (defined by ASC IT8)
+ 0Ch-1Eh reserved
+ 1Fh unknown or no device type
+
+(Table 00245)
+Values for Future Domain SCSI peripheral qualifier:
+ 000b device is currently connected to this logical unit and available
+ 001b target is capable of supporting the specified peripheral, but the
+ physical device is not currently connected to this logical unit
+ 010b reserved
+ 011b target can't support a physical device on this logical unit
+ 1xxb vendor specific
+
+Bitfields for Future Domain SCSI version:
+Bit(s) Description (Table 00246)
+ 0-2 ANSI-approved version
+ 000 device might or might not comply to ANSI standard
+ 001 device complies to ANSI SCSI-1
+ 010 device complies to ANSI SCSI-2
+ other reserved
+ 3-5 ECMA version
+ 6-7 ISO version
+
+Bitfields for Future Domain SCSI data format/capabilities:
+Bit(s) Description (Table 00247)
+ 0-2 response data format
+ 000 information block is as specified in SCSI-1
+ 001 information block is as specified in CCS
+ 010 information block is as specified in SCSI-2
+ other reserved
+ 4-5 reserved
+ 6 terminate I/O process supported
+ 7 asynchronous event notification supported
+
+Bitfields for Future Domain SCSI device capabilities:
+Bit(s) Description (Table 00248)
+ 0 device responds to RESET with a hard RESET
+ 1 tagged command queuing supported
+ 2 reserved
+ 3 linked commands supported
+ 4 synchronous data transfer supported
+ 5 16-transfers supported
+ 6 32-transfers supported
+ 7 relative addressing supported
+--------B-1318-------------------------------
+INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
+ AH = 18h
+ DL = drive number
+ CH = lower 8 bits of highest cylinder number (number of cylinders - 1)
+ CL = sectors per track (bits 0-5)
+ top 2 bits of highest cylinder number (bits 6,7)
+Return: AH = status
+ 00h requested combination supported
+ 01h function not available
+ 0Ch not supported or drive type unknown
+ 80h there is no disk in the drive
+ ES:DI -> 11-byte parameter table (see #01264 at INT 1E)
+Note: this function does not set the INT 1E vector to point at the returned
+ parameter table; it is the caller's responsibility to do so
+SeeAlso: AH=05h,AH=07h,AH=17h,INT 1E
+--------d-1318-------------------------------
+INT 13 - Future Domain SCSI BIOS - GET SCSI CONTROLLER INFORMATION
+ AH = 18h
+ DL = hard drive ID
+Return: CF set on error
+ AH = status code (see #00234 at AH=01h)
+ CF clear if successful
+ AX = 4321h (magic number)
+ CX = controller family code (see #00249)
+ ---if family code=0200h
+ DH = number of exclusively ROM-controlled SCSI devices
+ DL = canonical SCSI device number for specified drive
+ ---if family code <> 0200h
+ BH = number of exclusively ROM-controlled SCSI devices
+ BL = canonical SCSI device number for specified drive
+Notes: also sets an internal flag (non-resettable) which prevents some
+ controller messages from being displayed, allows writes to
+ removable devices (use caution!), and enables the INT 13 interface
+ for more than one drive (i.e. DL >= 81h) in at least some ROM
+ versions
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=05h"SCSI",AX=1700h"SCSI",AH=1Bh"SCSI",INT 4F/AX=8100h
+
+(Table 00249)
+Values for Future Domain SCSI controller family code:
+ 0200h TMC-1680/? (ROM 3.0)
+ 0203h TMC-1650/1660/1670/1680 (ROM 2.0)
+ 040Ah TMC-820/830/840/850/860/870/875/880/885 (ROM <= 6.0A)
+ 050Dh TMC-840/841/880/881 (ROM 5.2D)
+ 0700h TMC-830/850/860/875/885 (ROM 7.0)
+--------d-1318--CX5055-----------------------
+INT 13 - PU_1700.COM - INSTALLATION CHECK
+ AH = 18h
+ CX = 5055h ('PU')
+ DL = 00h
+Return: AX = 7570h ('up') if PU_1700 is installed
+Program: PU_1700 is a BIOS enhancer from PU Service Systems which permits
+ formatting diskettes at higher capacity (1.78M instead of 1.44M)
+SeeAlso: AX=057Fh/SI=324Dh"2M"
+--------d-1318--CXD2C9-----------------------
+INT 13 - XDF.COM - API
+ AH = 18h
+ CX = D2C9h ("R"+80h, "I"+80h = Roger Ivey)
+ DX = 0000h
+ BX = function
+ 0000h installation check
+ Return: AH = 0Ch
+ CX = 7269h ("ri" = Roger Ivey)
+ ES = segment of driver
+ CF set
+ 2F64h ("/d") disable the driver
+ Return: AH = 0Ch
+ ES:BX = pointer to activation flag (it is set to 0:
+ set it to 1 to enable the driver again)
+ CX = 7269h
+ CF set
+ 2F75h ("/u") unload the driver (restore interrupts & free memory)
+ Return: AH = 0Ch
+ DL = 55h ("U") if successful
+ = 00h if fails
+ CX = 7269h
+ ES = segment of driver
+ CF set
+ AL, BX, DH, and DI destroyed
+Program: XDF is a TSR provided with PC-DOS 7.0 to support XDF 1.84M disks,
+ developed by Roger D. Ivey
+Note: After disabling or enabling the driver, a disk change must be performed
+ or simulated to reset the driver.
+--------B-1319-------------------------------
+INT 13 - FIXED DISK - PARK HEADS ON ESDI DRIVE (XT286,PS)
+ AH = 19h
+ DL = drive
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AH=11h
+--------d-1319-------------------------------
+INT 13 - Future Domain SCSI CONTROLLER - REINITIALIZE DRIVE
+ AH = 19h
+ DL = hard drive ID
+Return: CF set on error
+ AH = status code (see #00234 at AH=01h)
+ CF clear if successful
+ AH = disk type (03h = fixed disk)
+ CX:DX = number of 512-byte sectors
+Notes: sends SCSI Read Capacity command to get number of logical blocks and
+ adjusts the result for 512-byte sectors
+ displays either "Error in Read Capacity Command" or "nnn Bytes per
+ sector" (nnn=256 or 512, the only sizes supported in the translation
+ code)
+ should probably be called when a removable device has its media changed
+ returns the same values as AH=15h
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=15h,AH=1Ah,INT 4F/AX=8100h
+--------d-131A-------------------------------
+INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
+ AH = 1Ah
+ AL = defect table entry count
+ CL = format modifiers (see #00250)
+ DL = drive (80h,81h)
+ ES:BX -> defect table (see #00251), ignored if AL=00h
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+Note: if periodic interrupt selected, INT 15/AH=0Fh is called after each
+ cylinder is formatted
+SeeAlso: AH=07h,INT 15/AH=0Fh
+
+Bitfields for ESDI format modifiers:
+Bit(s) Description (Table 00250)
+ 4 generate periodic interrupt
+ 3 perform surface analysis
+ 2 update secondary defect map
+ 1 ignore secondary defect map
+ 0 ignore primary defect map
+
+Format of defect table entry [array]:
+Offset Size Description (Table 00251)
+ 00h 3 BYTEs relative sector address (little-endian)
+ 03h BYTE flags and defect count
+ bit 7: last logical sector on track
+ bit 6: first logical sector on track
+ bit 5: last logical sector on cylinder
+ bit 4: logical sectors are pushed onto next track
+ bits 3-0: number of defects pushed from previous cylinder
+--------d-131A-------------------------------
+INT 13 - Future Domain SCSI CONTROLLER - GET SCSI PARTIAL MEDIUM CAPACITY
+ AH = 1Ah
+ CH = track (bits 8,9 in high bits of CL)
+ CL = sector (01h to number of sectors/track for drive)
+ DH = head
+ DL = hard drive ID
+Return: CF set on error
+ AH = status code (see #00234 at AH=01h)
+ CX:DX = logical block number of last quickly-accessible block after
+ given block
+Notes: sends SCSI Read Capacity command with the PMI bit set to obtain the
+ logical block address of the last block after which a substantial
+ delay in data transfer will be encountered (usually the last block
+ on the current cylinder). No translation to 512 byte sectors is
+ performed on the result if data is stored on the disk in other than
+ 512 byte sectors.
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=15h,AH=19h"SCSI"
+--------d-131B-------------------------------
+INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER
+ AH = 1Bh
+ AL = number of sectors to read
+ DL = drive
+ ES:BX -> buffer for manufacturing header (defect list)
+Return: CF set on error
+ CF clear if successful
+ AH = status
+Note: manufacturing header format (Defect Map Record format) can be found
+ in IBM 70MB, 115MB Fixed Disk Drives Technical Reference
+ the first sector read contains the manufacturing header with the number
+ of defect entries and the beginning of the defect map; the remaining
+ sectors contain the remainder of the defect map
+--------d-131B-------------------------------
+INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO SCSI DISK INFO BLOCK
+ AH = 1Bh
+ DL = hard drive ID
+Return: CF set on error
+ AH = status code (see #00234 at AH=01h)
+ CF clear if successful
+ ES:BX -> SCSI disk information block (see #00252)
+Notes: also sets a non-resettable flag which prevents some controller messages
+ from being displayed
+ the TMC-950 does not support any Future Domain BIOS calls; instead,
+ it provides a full CAM implementation (see INT 4F/AX=8100h)
+SeeAlso: AH=18h"SCSI",AH=1Ch"SCSI"
+
+Format of Future Domain SCSI disk information block:
+Offset Size Description (Table 00252)
+ 00h BYTE drive physical information (see #00253)
+ 01h WORD translated number of cylinders
+ 03h BYTE translated number of heads
+ 04h BYTE translated number of sectors per track (17, 34, or 63)
+ 05h BYTE drive address
+ bits 0-2: logical unit number
+ bits 3-5: device number
+ 06h BYTE 01h at initialization
+ 07h BYTE sense code byte 00h, or extended sense code byte 0Ch
+ 08h BYTE 00h
+ 09h BYTE 00h or extended sense code byte 02h (sense key)
+ 0Ah BYTE 00h
+ 0Bh 10 BYTEs copy of Command Descriptor Block (CDB) (see #03236,#03237)
+ 15h DWORD translated number of sectors on device
+
+Bitfields for Future Domain SCSI device physical information:
+Bit(s) Description (Table 00253)
+ 0 ???
+ 1 device uses parity
+ 2 256 bytes per sector instead of 512
+ 3 don't have capacity yet???
+ 4 disk is removable
+ 5 logical unit number is not present
+--------d-131C-------------------------------
+INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO FREE CONTROLLER RAM
+ AH = 1Ch
+ DL = hard drive ID (any valid SCSI hard disk)
+Return: CF set on error
+ AH = status code (see #00234 at AH=01h)
+ CF clear if successful
+ ES:BX -> first byte of free RAM on controller
+Notes: the Future Domain TMC-870 contains 1024 bytes of RAM at offsets 1800h
+ to 1BFFh on-board the controller for storing drive information and
+ controller status; ES:BX points to the first byte available for other
+ uses
+ ES contains the segment at which the controller resides; the
+ controller's two memory-mapped I/O ports are at offsets 1C00h, 1E00h
+SeeAlso: AH=1Bh"SCSI"
+--------d-131C-------------------------------
+INT 13 U - ESDI FIXED DISK - ???
+ AH = 1Ch
+ AL = subfunction (01h-06h)
+ DL = drive (80h,81h)
+ ???
+Return: ???
+Note: these functions perform a controller command 0612h without DMA
+SeeAlso: AX=1C08h,PORT 3510h"ESDI"
+--------d-131C08-----------------------------
+INT 13 U - ESDI FIXED DISK - GET COMMAND COMPLETION STATUS
+ AX = 1C08h
+ DL = drive (80h,81h)
+ ES:BX -> buffer for Command Complete Status Block (see #00254)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AX=1C09h,AX=1C0Ah,PORT 3510h"ESDI"
+
+Format of ESDI Command Complete Status Block:
+Offset Size Description (Table 00254)
+ 00h BYTE 07h
+ 01h BYTE size of block in words (07h)
+ 02h BYTE command error code (see #00255)
+ 03h BYTE command status code (see #00256)
+ 04h BYTE device error code, group 1 (see #00257)
+ 05h BYTE device error flags, group 2 (see #00258)
+ 06h WORD number of unprocessed sectors due to abnormal termination
+ 08h DWORD last Relative Sector Address processed by command
+ 0Ch WORD number of sectors corrected by ECC codes
+
+(Table 00255)
+Values for ESDI command error code:
+ 00h successful
+ 01h parameter invalid
+ 02h unknown function
+ 03h unsupported command
+ 04h command cancelled
+ 05h unknown function
+ 06h controller diagnostics failed
+ 07h formatting failed
+ 08h format error in primary map
+ 09h format error in secondary map
+ 0Ah diagnostic failure during formatting
+ 0Bh warning: secondary map too large during formatting
+ 0Ch warning: non-zero defect
+ 0Dh system checksum error during formatting
+ 0Eh warning: incompatible device
+ 0Fh warning: push table overflowed
+ 10h warning: more than 15 sectors pushed to next cylinder
+ 11h internal hardware error
+ 12h warning: errors found while verifying sectors
+ 13h invalid device
+ FFh device error
+
+(Table 00256)
+Values for ESDI command status code:
+ 01h successful
+ 03h successful after ECC
+ 05h successful after retries
+ 06h format partially completed
+ 07h successful after ECC and retries
+ 08h command completed with warning (see #00255)
+ 09h abort complete
+ 0Ah reset complete
+ 0Bh data transfer ready (no status block)
+ 0Ch command completed with failure (see #00257,#00258)
+ 0Dh DMA error
+ 0Eh command block error (see #00255)
+ 0Fh bad attention code
+SeeAlso: #00257
+
+(Table 00257)
+Values for ESDI device error code, group 1:
+ 00h successful
+ 01h seek fault detected by device
+ 02h interface fault
+ 03h sector ID not found
+ 04h disk not formatted
+ 05h unrecoverable ECC error
+ 06h ECC error in sector ID
+ 07h invalid relative sector address
+ 08h timeout
+ 09h sector defective
+ 0Ah disk changed (removable media)
+ 0Bh selection error
+ 0Ch write protected (removable media)
+ 0Dh write fault
+ 0Eh read fault
+ 0Fh no index or sector pulse
+ 10h device not ready
+ 11h seek error detected by adapter
+ 12h bad format
+ 13h volume overflow
+ 14h data address mark not found
+ 15h sector ID not found
+ 16h missing device configuration data
+ 17h first/last relative sector flags missing
+ 18h track empty
+ 81h timeout while waiting for stop
+ 82h timeout while waiting for end of data transfer
+ 84h stopped awaiting data transfer during formatting
+ 85h timeout while waiting for head switch
+ 86h timeout while awaiting DMA completion
+SeeAlso: #00256,#00258
+
+Bitfields for ESDI device error flags, group 2:
+Bit(s) Description (Table 00258)
+ 7-5 unused
+ 4 ready
+ 3 selected
+ 2 write fault
+ 1 on track 0
+ 0 seek/command complete
+SeeAlso: #00257
+--------d-131C09-----------------------------
+INT 13 U - ESDI FIXED DISK - GET DEVICE STATUS
+ AX = 1C09h
+ DL = drive (80h,81h)
+ ES:BX -> buffer for Device Status Block (see #00259)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AX=1C08h,AX=1C0Ah,PORT 3510h"ESDI"
+
+Format of ESDI Device Status Block:
+Offset Size Description (Table 00259)
+ 00h BYTE 08h
+ 01h BYTE number of words in block (09h)
+ 02h BYTE error flags
+ 03h BYTE unused
+ 04h BYTE command error code (see #00255)
+ 05h BYTE command status code (see #00256)
+ 06h WORD ESDI standard status
+ 08h 5 WORDs ESDI vendor-specific status codes
+--------d-131C0A-----------------------------
+INT 13 U - ESDI FIXED DISK - GET DEVICE CONFIGURATION
+ AX = 1C0Ah
+ DL = drive (80h,81h)
+ ES:BX -> buffer for Drive Configuration Status Block (see #00260)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+Note: device configuration format can be found in IBM ESDI Fixed Disk Drive
+ Adapter/A Technical Reference
+SeeAlso: AX=1C08h,AX=1C0Bh,AX=1C0Ch
+
+Format of ESDI Drive Configuration Status Block:
+Offset Size Description (Table 00260)
+ 00h BYTE 09h
+ 01h BYTE number of words in block (06h)
+ 02h BYTE flags
+ 03h BYTE number of spare sectors per cylinder
+ 04h DWORD total number of usable sectors
+ 08h WORD total number of cylinders
+ 0Ah BYTE tracks per cylinder
+ 0Bh BYTE sectors per track
+--------d-131C0B-----------------------------
+INT 13 U - ESDI FIXED DISK - GET ADAPTER CONFIGURATION
+ AX = 1C0Bh
+ ES:BX -> buffer for Controller Configuration Status Block (see #00261)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AX=1C0Ch
+
+Format of ESDI Controller Configuration Status Block:
+Offset Size Description (Table 00261)
+ 00h BYTE E9h
+ 01h BYTE number of words in block (06h)
+ 02h WORD unused (0000h)
+ 04h DWORD controller microcode revision level
+ 08h 2 WORDs unused (0000h)
+--------d-131C0C-----------------------------
+INT 13 U - ESDI FIXED DISK - GET POS INFORMATION
+ AX = 1C0Ch
+ ES:BX -> buffer for POS Information Status Block (see #00262)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AX=1C0Bh
+
+Format of ESDI POS Information Status Block:
+Offset Size Description (Table 00262)
+ 00h BYTE EAh
+ 01h BYTE number of words in block (05h)
+ 02h WORD magic value FFDDh
+ 04h BYTE POS register 3
+ 05h BYTE POS register 2
+ 06h BYTE POS register 5 (unused, FFh)
+ 07h BYTE POS register 4 (unused, FFh)
+ 08h BYTE POS register 7 (unused, FFh)
+ 09h BYTE POS register 6 (unused, FFh)
+--------d-131C0D-----------------------------
+INT 13 U - ESDI FIXED DISK - ???
+ AX = 1C0Dh
+ DL = drive (80h,81h)
+ ???
+Return: ???
+Note: invokes controller command 0614h without DMA
+SeeAlso: AH=1Ch"ESDI",AX=1C0Fh,PORT 3510h"ESDI"
+--------d-131C0E-----------------------------
+INT 13 U - ESDI FIXED DISK - TRANSLATE RBA TO ABA
+ AX = 1C0Eh
+ CH = low 8 bits of cylinder number
+ CL = sector number, high two bits of cylinder number in bits 6 and 7
+ DH = head number
+ DL = drive number (80h,81h)
+ ES:BX -> ABA number
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00234 at AH=01h)
+Note: ABA (absolute block address) format can be found in IBM ESDI Adapter
+ Technical Reference by using its Device Configuration Status Block
+SeeAlso: AX=1C08h,AX=1C0Fh,PORT 3510h"ESDI"
+--------d-131C0F-----------------------------
+INT 13 U - ESDI FIXED DISK - ???
+ AX = 1C0Fh
+ DL = drive (80h,81h)
+ ???
+Return: ???
+Note: invokes controller command 0614h without DMA
+SeeAlso: AH=1Ch"ESDI",AX=1C0Dh,AX=1C12h,PORT 3510h"ESDI"
+--------d-131C12-----------------------------
+INT 13 U - ESDI FIXED DISK - ???
+ AX = 1C12h
+ DL = drive (80h,81h)
+ ???
+Return: ???
+Note: invokes controller command 0612h without DMA
+SeeAlso: AH=1Ch"ESDI",AX=1C0Fh,PORT 3510h"ESDI"
+--------c-131D-------------------------------
+INT 13 - IBMCACHE.SYS - CACHE STATUS
+ AH = 1Dh
+ AL = subfunction
+ 01h get status record
+ DL = drive???
+ Return: ES:BX -> status record (see #00263)
+ CF set on error
+ AH = error code
+ 02h set cache status
+ ES:BX -> status record (see #00263)
+ DL = drive???
+ Return: CF set on error
+
+Format of IBMCACHE.SYS status record:
+Offset Size Description (Table 00263)
+ 00h DWORD total number of read requests
+ 04h DWORD total number of hits
+ 08h DWORD number of physical disk reads
+ 0Ch DWORD total number of sectors requested by physical disk reads
+ 10h 6 BYTEs ???
+ 16h DWORD pointer to start of error list (see #00264)
+ 1Ah DWORD pointer to end of error list
+ 1Eh WORD ???
+ 20h BYTE using extended memory if nonzero
+ 21h BYTE ???
+ 22h 4 BYTEs ASCII version number
+ 26h WORD cache size in KB
+ 28h WORD sectors per page
+
+Format of IBMCACHE.SYS error list:
+Offset Size Description (Table 00264)
+ 00h DWORD relative block address of bad page
+ 04h BYTE drive
+ 05h BYTE sector bit-map
+ 06h WORD next error
+--------d-131F-------------------------------
+INT 13 - SyQuest - DOOR LATCH/DOOR BUTTON DETECT
+ AH = 1Fh
+ AL = subfunction
+ 00h allow media removal
+ 01h prevent media removal (lock door)
+ DL = drive ID (bit 7 set for hard disks)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code
+ 00h successful
+ 01h invalid function request
+ 80h timeout
+ DDh media change requested
+SeeAlso: AH=12h"SyQuest",AH=13h"SyQuest",AH=59h"SyQuest"
+--------d-1320-------------------------------
+INT 13 - DISK - ??? (Western Digital "Super BIOS")
+ AH = 20h
+ ???
+Return: ???
+Notes: returns some kind of status related to whether the drive contains its
+ default media type
+ QEMM v6.00 calls INT 13/AX=2000h/DL=81h in some cases
+--------b-1320-------------------------------
+INT 13 U - Compaq, ATAPI Removable Media Device - GET CURRENT MEDIA FORMAT
+ AH = 20h
+ DL = drive number (00h,01h)
+Return: CF clear if successful
+ AL = media type (see #00265)
+ AH = 00h
+ CF set on error
+ AH = error code
+ 01h invalid request
+ 30h drive does not support media sense
+ 31h no such drive / media not present
+ 32h non-default media / drive does not support media type
+Notes: this function is supported by the 1993/3/8 Compaq ROM BIOS, but only
+ partially (AL is always 00h when successful) by the 1993/8/3 version
+ this function is also supported by some recent versions of the Phoenix
+ 486 BIOS
+ this function does not seem to be supported by some Toshiba BIOSes
+ (at least before 1995, maybe some laptops??? with 1.44 MB floppies),
+ because S/DOS 1.0 contains code to bypass a call to this function,
+ always assuming the drive would not support media sense.
+SeeAlso: AH=15h
+
+(Table 00265)
+Values for Compaq/ATAPI diskette media type:
+ 03h 720K (1M unformatted)
+ 04h 1.44M (2M unformatted)
+ 06h 2.88M (4M unformatted)
+ 0Ch 360K
+ 0Dh 1.2M
+ 0Eh Toshiba 3mode
+ 0Fh NEC 3mode (1024-byte sectors)
+ 10h ATAPI Removable Media Device
+--------c-1320-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - DISMOUNT
+ AH = 20h
+ AL = drive (00h = A:, etc. or 7Fh for all removable drives???
+ or FFh for all drives)
+Return: AX = status (0000h successful)
+Program: QUICKCACHE II is a shareware disk cache by P.R. Glassel and
+ Associates, Inc.
+Desc: flush any dirty buffers for the specified drive(s) and then discard
+ those sector buffers
+SeeAlso: AH=21h"QUICKCACHE",AH=22h"QUICKCACHE",AH=28h
+--------d-1321-------------------------------
+INT 13 - HARD DISK - PS/1 and newer PS/2 - READ MULTIPLE DISK SECTORS
+ AH = 21h
+ AL = number of sectors to write
+ CH = low byte of 12-bit cylinder number
+ CL = starting sector (bits 0-5) and bits 8-9 of cylinder (bits 6-7)
+ DH = head number (bits 0-5) and bits 10-11 of cylinder (bits 6-7)
+ DL = drive number (80h,81h)
+ ES:BX -> buffer for data to be read
+Return: CF clear if successful
+ ES:BX buffer filled
+ CF set on error
+ AH = status (see #00234 at AH=01h)
+Desc: read from the disk using the Multiple Block mode available on newer
+ IDE drives and some hard disk controllers, which generates an
+ interrupt only after the end of transferring a group of sectors
+ rather than after each sector
+Notes: must call AH=24h"PS/1" before using this function
+ input values in CL and DH are not range-checked
+ the byte at address 0040h:0074h is set to the status of the operation
+SeeAlso: AH=02h,AH=22h"PS/1",AH=23h"PS/1",AH=24h"PS/1"
+--------c-1321-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - FLUSH CACHE
+ AH = 21h
+Return: AX = status (0000h successful)
+Desc: immediately write all dirty sectors back to disk
+Note: this is one out of several cache flush calls issued by the PTS-DOS 6.51
+ and S/DOS 1.0 kernel before rebooting. It is called with DL=80h and
+ conflicts with the PS/2 function of the same function number, because
+ the kernel does not perform Quickcache's installation check first.
+SeeAlso: AH=25h"QUICKCACHE",AH=2Eh,AH=2Fh
+--------d-1322-------------------------------
+INT 13 - HARD DISK - PS/1 and newer PS/2 - WRITE MULTIPLE DISK SECTORS
+ AH = 22h
+ AL = number of sectors to write
+ CH = low byte of 12-bit cylinder number
+ CL = starting sector (bits 0-5) and bits 8-9 of cylinder (bits 6-7)
+ DH = head number (bits 0-5) and bits 10-11 of cylinder (bits 6-7)
+ DL = drive number (80h,81h)
+ ES:BX -> buffer containing data to be written
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00234 at AH=01h)
+Desc: write to the disk using the Multiple Block mode available on newer
+ IDE drives and some hard disk controllers, which generates an
+ interrupt only after the end of transferring a group of sectors
+ rather than after each sector
+Notes: must call AH=24h"PS/1" before using this function
+ input values in CL and DH are not range-checked
+ the byte at address 0040h:0074h is set to the status of the operation
+SeeAlso: AH=03h,AH=21h"PS/1",AH=23h"PS/1",AH=24h"PS/1"
+--------c-1322-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - ENABLE/DISABLE CACHE
+ AH = 22h
+ AL = new state (00h disabled, 01h enabled)
+Return: AX = status (0000h successful)
+Note: enables/disables caching of all drives
+SeeAlso: AH=2Ch,AH=2Dh,AH=32h,AH=33h,AH=A3h,AH=A4h
+--------d-1323-------------------------------
+INT 13 U - HARD DISK - PS/1 and newer PS/2 - SET CONTROLLER FEATURES REGISTER
+ AH = 23h
+ AL = feature number (see #00266)
+ DL = drive number (80h,81h)
+ ???
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00234 at AH=01h)
+SeeAlso: AH=21h"PS/1",AH=22h"PS/1",AH=24h"PS/1",AH=25h"PS/1"
+
+(Table 00266)
+Values for PS/1 hard disk feature number:
+ 01h select 8-bit data transfers instead of 16-bit
+ 02h enable write cache
+ 22h Write Same, user-specified area
+ 33h disable retries
+ 44h set number of ECC bytes for read long/write long (see AH=0Ah,AH=0Bh)
+ 54h set cache segments
+ 55h disable lookahead
+ 66h disable reverting to power-on defaults
+ 77h disable error correctioni
+ 81h select 16-bit data transfers (default)
+ 82h disable write cache
+ 88h enable error correction (default)
+ 99h enable retries (default)
+ AAh enable lookahead
+ BBh set ECC length for read long/write long to four bytes
+ CCh enable reverting to power-on defaults
+ DDh Write Same, entire disk
+SeeAlso: #P0535
+--------c-1323-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - GET ??? ADDRESS
+ AH = 23h
+Return: AX = status (0000h successful)
+ ES = segment of ??? data
+--------d-1324-------------------------------
+INT 13 - HARD DISK - PS/1 and newer PS/2 - SET MULTIPLE MODE
+ AH = 24h
+ AL = number of sectors per block (2,4,8,16)
+ DL = drive number (80h,81h)
+Return: CF clear if successful
+ CF set onerror
+ AH = status (see #00234 at AH=01h)
+Desc: specify how many sectors the controller should transfer as a group
+ between operation-complete interrupts when using the Read Multiple
+ and Write Multiple functions (AH=21h,AH=22h)
+Notes: set the number of sectors to 0 to disable multiple-transfer mode
+ the maximum value for the block size depends on the fixed disk
+ drive type. The value is stored in byte 15h of the fixed disk
+ drive parameter table that is created by POST.
+ the byte at address 0040h:0074h is set to status of operation.
+SeeAlso: AH=21h"PS/1",AH=22h"PS/1",AH=23h"PS/1",AH=25h"PS/1"
+--------c-1324-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - SET SECTORS
+ AH = 24h
+ BX = new number of sector buffers in cache
+Return: AX = status
+ 0000h successful
+ 0001h failed--size adjusted
+ 8000h cache cannot be resized while enabled
+SeeAlso: AH=36h
+--------d-1325-------------------------------
+INT 13 - HARD DISK - PS/1 and newer PS/2 - IDENTIFY DRIVE
+ AH = 25h
+ DL = drive number (80h,81h)
+ ES:BX-> 512 byte buffer for reply packet
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00234 at AH=01h)
+ buffer filled with ATA/IDE-style drive information block (see #00267)
+Desc: retrieves the 256 words of drive data stored on an IDE hard disk
+Notes: the byte at address 0040h:0074h is set to the status of the operation
+ IBM officially classifies this function as optional
+SeeAlso: AH=23h"PS/1"
+
+Format of drive information block:
+Offset Size Description (Table 00267)
+ 00h WORD general drive configuration (see #00268)
+ 02h WORD number of cylinders
+ 04h WORD reserved
+ 06h WORD number of heads
+ 08h WORD number of unformatted bytes per track
+ 0Ah WORD number of unformatted bytes per sector
+ 0Ch WORD number of sectors per track
+ 0Eh 6 BYTEs vendor unique
+ 14h 20 BYTEs serial number in ASCII, 0000h=not specified)
+ 28h WORD buffer type
+ 2Ah WORD buffer size in 512 byte increments (0000h=not specified)
+ 2Ch WORD number of ECC bytes passed on Read/Write Long cmds
+ 0000h = not specified
+ 2Eh 8 BYTEs firmware revision in ASCII, 0000h=not specified
+ 36h 40 BYTEs model number in ASCII, 0000h=not specified
+ 5Eh WORD bits 15-8 Vendor Unique
+ bits 7-0 00h = Read/Write Multiple commands not implemented
+ xxh = Maximum number of sectors that can be
+ transferred per interrupt on Read and Write
+ Multiple commands
+ 60h WORD 0000h = cannot perform doubleword I/O
+ 0001h = can perform doubleword I/O
+ 62h WORD capabilities
+ bit 15-9 0=reserved
+ bit 8 1=DMA Supported
+ bit 7-0 Vendor Unique
+ 64h WORD reserved
+ 66h WORD bits 15-8 PIO data transfer cycle timing mode
+ bits 7-0 Vendor Unique
+ 68h WORD bits 15-8 DMA data transfer cycle timing mode
+ bits 7-0 Vendor Unique
+ 6Ah WORD bits 15-1 reserved
+ bit 0 1=the fields reported in tranlation mode are valid
+ 0=the fields reported in translation mode may be valid
+ 6Ch WORD number of current cylinders
+ 6Eh WORD number of current heads
+ 70h WORD number of current sectors per track
+ 72h DWORD current capacity in sectors
+ 76h WORD reserved
+ 78h 136 BYTEs not defined by ATA spec 2.6
+100h 64 BYTEs vendor unique
+140h 96 BYTEs reserved
+Note: the above description is as in the ATA (AT Attachment) Specification.
+SeeAlso: #P0516
+
+Bitfields for general drive configuration:
+Bit(s) Description (Table 00268)
+ 15 0 reserved for non-magnetic drives
+ 14 format speed tolerance gap required
+ 13 track offset option available
+ 12 data strobe offset option available
+ 11 rotational speed tolerance is > 0.5%
+ 10 disk transfer rate > 10 Mbs
+ 9 disk transfer rate > 5Mbs but <= 10Mbs
+ 8 disk transfer rate <= 5Mbs
+ 7 removable cartridge drive
+ 6 fixed drive
+ 5 spindle motor control option implemented
+ 4 head switch time > 15 usec
+ 3 not MFM encoded
+ 2 soft sectored
+ 1 hard sectored
+ 0 reserved (0)
+--------c-1325-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - SET FLUSH INTERVAL
+ AH = 25h
+ BX = interval
+Return: AX = status (0000h successful)
+Desc: specify how often the cache should write dirty buffers to disk when
+ buffered writes are enabled
+SeeAlso: AH=21h"QUICKCACHE",AH=2Ch,AH=2Eh
+--------c-1326-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - UNINSTALL
+ AH = 26h
+Return: AX = status
+ 0000h successful
+ 0001h-00FFh interrupt vector which was hooked by another TSR
+SeeAlso: AH=27h
+--------c-1327--BX0000-----------------------
+INT 13 u - QUICKCACHE II v4.20 - INSTALLATION CHECK
+ AH = 27h
+ BX = 0000h
+Return: AX = 0000h if installed
+ BX nonzero if installed
+ BH = major version
+ BL = binary minor version
+Program: QUICKCACHE II is a shareware disk cache by P.R. Glassel and
+ Associates, Inc.
+SeeAlso: AH=26h,AH=A0h,INT 16/AX=FFA5h/CX=1111h
+--------c-1328-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET AUTOMATIC DISMOUNT
+ AH = 28h
+ AL = new state (00h disabled, 01h enabled)
+Return: AX = status (0000h successful)
+SeeAlso: AH=20h"QUICKCACHE"
+--------c-1329-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - NOP
+ AH = 29h
+Return: AX = 0000h
+--------c-132A-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - SET BUFFER SIZE
+ AH = 2Ah
+ AL = buffer size (1-30)
+Return: AX = status (0000h successful)
+Desc: specify the number of cache sector buffers to dedicate to buffered read
+ and write operations
+SeeAlso: AH=2Ch,AH=2Dh,AH=39h,AH=3Ah
+--------c-132B-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - DRIVE ACCESS SOUNDS
+ AH = 2Bh
+ AL = new state (00h disabled, 01h enabled)
+Return: AX = status (0000h successful)
+--------c-132C-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - SET BUFFERED WRITES
+ AH = 2Ch
+ AL = new state (00h disabled, 01h enabled)
+Return: AX = status (0000h successful)
+Desc: specify whether the cache should delay disk writes
+Note: this function enables or disables delayed writes for all drives; use
+ AH=38h to change a single drive
+SeeAlso: AH=25h"QUICKCACHE",AH=2Dh,AH=2Eh,AH=38h
+--------c-132D-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - SET BUFFERED READ
+ AH = 2Dh
+ AL = new state (00h disabled, 01h enabled)
+Return: AX = status (0000h successful)
+Desc: specify whether the cache should attempt to read ahead of actual
+ requests
+Note: this function enables or disables read-ahead for all drives; use AH=37h
+ to change a single drive
+SeeAlso: AH=2Ch,AH=37h
+--------c-132E-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - SET FLUSH COUNT
+ AH = 2Eh
+ BX = flush count
+Return: AX = status (0000h successful)
+Desc: specify how many dirty sectors the cache should write after each flush
+ interval (see AH=25h"QUICKCACHE") when buffered writes are enabled
+SeeAlso: AH=21h"QUICKCACHE",AH=25h"QUICKCACHE",AH=2Ch
+--------c-132F-------------------------------
+INT 13 - QUICKCACHE II v4.20 - FORCE IMMEDIATE INCREMENTAL FLUSH
+ AH = 2Fh
+Return: AX = status (0000h successful)
+Desc: immediately flush up to "flushcount" dirty sectors to disk as if the
+ flush interval had expired
+SeeAlso: AH=21h"QUICKCACHE"
+--------c-1330-------------------------------
+INT 13 u - QUICKCACHE II v4.20 - GET INFO
+ AH = 30h
+ AL = what to get
+ 00h system info (see #00269)
+ 01h drive info (see #00270)
+ 02h access frequency (array of 30 words)
+ 03h drive index
+ (array of 32 bytes indicating BIOS drive for DOS drive)
+ DS:DX -> buffer for info
+Return: AX = status (0000h successful, 8000h invalid info specifier)
+Program: QUICKCACHE II is a shareware disk cache by P.R. Glassel and
+ Associates, Inc.
+
+Format of QUICKCACHE II system info:
+Offset Size Description (Table 00269)
+ 00h BYTE flag: cache enabled
+ 01h BYTE flag: buffered writes enabled
+ 02h BYTE flag: buffered reads enabled
+ 03h BYTE flag: sounds enabled
+ 04h BYTE flag: autodismount enabled
+ 05h BYTE ???
+ 06h BYTE flag: ???
+ 07h BYTE flag: ???
+ 08h BYTE flag: "em_assigned"
+ 09h BYTE flag: emulated EMS
+ 0Ah BYTE single sector bonus
+ 0Bh BYTE "sticky_max"
+ 0Ch BYTE write sector bonus
+ 0Dh BYTE bonus threshold
+ 0Eh WORD flush interval
+ 10h WORD flush count
+ 12h WORD reserve pool size
+ 14h WORD remaining space in reserve pool
+ 16h WORD required free memory
+ 18h WORD total cache sectors
+ 1Ah WORD dirty cache sectors
+ 1Ch BYTE trace buffer size
+ 1Dh BYTE reserved (padding)
+SeeAlso: #00270
+
+Format of QUICKCACHE II drive info [16-element array, one element]:
+Offset Size Description (Table 00270)
+ 00h BYTE DOS drive number
+ 01h BYTE BIOS drive number
+ 02h BYTE maximum sector number
+ 03h BYTE maximum head number
+ 04h BYTE read buffer size
+ 05h BYTE write buffer size
+ 06h BYTE last status
+ 07h BYTE flag: enabled
+ 08h BYTE flag: buffered write enabled
+ 09h BYTE flag: buffered read enabled
+ 0Ah BYTE flag: in use (drive info is valid)
+ 0Bh BYTE flag: cylinder flush
+ 0Ch BYTE reserved (padding)
+ 0Dh BYTE sectors per track
+ 0Eh WORD sector size
+ 10h WORD sectors assigned
+ 12h WORD dirty sectors
+ 14h WORD reserved sectors
+ 16h WORD number of read errors
+ 18h WORD number of write errors
+ 1Ah DWORD "rio_count"
+ 1Eh DWORD number of cache misses
+ 22h DWORD "wio_count"
+ 26h DWORD "dio_count"
+SeeAlso: #00269
+--------c-1331-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - RESERVE MEMORY
+ AH = 31h
+ BX = number of paragraphs of conventional memory to reserve for apps
+Return: AX = status (0000h successful)
+--------c-1332-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - ENABLE CACHING FOR SPECIFIC DRIVE
+ AH = 32h
+ AL = drive number (00h=A:)
+Return: AX = status (0000h successful)
+SeeAlso: AH=22h"QUICKCACHE",AH=33h
+--------c-1333-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - DISABLE CACHING FOR SPECIFIC DRIVE
+ AH = 33h
+ AL = drive number (00h=A:)
+Return: AX = status (0000h successful)
+SeeAlso: AH=22h"QUICKCACHE",AH=32h
+--------c-1334-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SECTOR LOCKING
+ AH = 34h
+ AL = function
+ 00h end sector locking/unlocking
+ 01h lock all accessed sectors into cache
+ 02h unlock all accessed sectors and discard from cache
+Return: AX = status (0000h successful)
+SeeAlso: AH=20h"QUICKCACHE",AH=35h
+--------c-1335-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET LOCK POOL SIZE
+ AH = 35h
+ BX = number of sectors in lock pool
+Return: AX = status (0000h successful)
+Desc: specify the number of cache sector buffers which may be dedicated to
+ data locked into the cache
+SeeAlso: AH=34h
+--------c-1336-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET TRACE BUFFER SIZE
+ AH = 36h
+ AL = new size of trace buffer
+Return: AX = status (0000h successful)
+Note: called with AL=05h during an INT 13/AH=24h"QUICKCACHE" call
+SeeAlso: AH=24h"QUICKCACHE"
+--------c-1337-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET BUFFERED READS FOR SPECIFIC DRIVE
+ AH = 37h
+ AL = new state (00h disabled, else enabled)
+ DL = drive number (00h = A:)
+Return: AX = status (0000h successful)
+SeeAlso: AH=2Dh,AH=38h
+--------c-1338-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET BUFFERED WRITES FOR SPECIFIC DRIVE
+ AH = 38h
+ AL = new state (00h disabled, else enabled)
+ DL = drive number (00h = A:)
+Return: AX = status (0000h successful)
+SeeAlso: AH=2Ch,AH=37h
+--------c-1339-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET READ BUFFER SIZE FOR SPECIFIC DRIVE
+ AH = 39h
+ AL = new size of read buffer
+ DL = drive number (00h = A:)
+Return: AX = status (0000h successful)
+Program: QUICKCACHE II is a shareware disk cache by P.R. Glassel and
+ Associates, Inc.
+SeeAlso: AH=2Ah,AH=3Ah
+--------c-133A-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET WRITE BUFFER SIZE FOR SPECIFIC DRIVE
+ AH = 3Ah
+ AL = new size of write buffer
+ DL = drive number (00h = A:)
+Return: AX = status (0000h successful)
+SeeAlso: AH=2Ah,AH=39h
+--------c-133B-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - ENABLE/DISABLE ???
+ AH = 3Bh
+ AL = new state of ??? (01h enabled, else disabled)
+Return: AX = status (0000h successful)
+Note: is affected by the flag reported at offset 05h of the system info
+ returned by AH=30h, and sets the flag at offset 06h
+SeeAlso: AH=3Ch
+--------c-133C-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - ENABLE/DISABLE ???
+ AH = 3Ch
+ AL = new state of ??? (01h enabled, else disabled)
+Return: AX = status (0000h successful)
+Note: is affected by the flag reported at offset 05h of the system info
+ returned by AH=30h, and sets the flag at offset 07h
+SeeAlso: AH=3Bh
+--------c-133D-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - ENABLE/DISABLE CYLINDER FLUSH FOR DRIVE
+ AH = 3Dh
+ AL = new state (01h enabled, else disabled)
+ DL = drive number (00h = A:)
+Return: AX = status (0000h successful)
+--------c-133E-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET SINGLE-SECTOR BONUS
+ AH = 3Eh
+ AL = new value for bonus
+Return: AX = status (0000h successful)
+Desc: specify the bonus score to give to single-sector transfers in order to
+ keep those sectors in the cache longer
+--------c-133F-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET BONUS THRESHOLD
+ AH = 3Fh
+ AL = new value for bonus threshold
+Return: AX = status (0000h successful)
+--------c-1340-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SET "sticky_max"
+ AH = 40h
+ AL = new value for "sticky_max"
+Return: AX = status (0000h successful)
+SeeAlso: AH=41h"QUICKCACHE"
+--------d-1341--BX55AA-----------------------
+INT 13 - IBM/MS INT 13 Extensions - INSTALLATION CHECK
+ AH = 41h
+ BX = 55AAh
+ DL = drive (80h-FFh)
+Return: CF set on error (extensions not supported)
+ AH = 01h (invalid function)
+ CF clear if successful
+ BX = AA55h if installed
+ AH = major version of extensions
+ 01h = 1.x
+ 20h = 2.0 / EDD-1.0
+ 21h = 2.1 / EDD-1.1
+ 30h = EDD-3.0
+ AL = internal use
+ CX = API subset support bitmap (see #00271)
+ DH = extension version (v2.0+ ??? -- not present in 1.x)
+Note: the Phoenix Enhanced Disk Drive Specification v1.0 uses version 2.0 of
+ the INT 13 Extensions API
+SeeAlso: AH=42h"INT 13 Ext",AH=48h"INT 13 Ext"
+
+Bitfields for IBM/MS INT 13 Extensions API support bitmap:
+Bit(s) Description (Table 00271)
+ 0 extended disk access functions (AH=42h-44h,47h,48h) supported
+ 1 removable drive controller functions (AH=45h,46h,48h,49h,INT 15/AH=52h)
+ supported
+ 2 enhanced disk drive (EDD) functions (AH=48h,AH=4Eh) supported
+ extended drive parameter table is valid (see #00273,#00278)
+ 3-15 reserved (0)
+--------c-1341-------------------------------
+INT 13 U - QUICKCACHE II v4.20 - SAVE/RESTORE ???
+ AH = 41h
+ AL = direction
+ 01h save to file
+ else restore from file
+ ES:DI -> 1024-byte buffer for ???
+Return: AX = status (0000h successful, 8000h failed)
+Program: QUICKCACHE II is a shareware disk cache by P.R. Glassel and
+ Associates, Inc.
+SeeAlso: AH=40h"QUICKCACHE"
+--------d-1342-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - EXTENDED READ
+ AH = 42h
+ DL = drive number
+ DS:SI -> disk address packet (see #00272)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (see #00234)
+ disk address packet's block count field set to number of blocks
+ successfully transferred
+SeeAlso: AH=02h,AH=41h"INT 13 Ext",AH=43h"INT 13 Ext"
+
+Format of disk address packet:
+Offset Size Description (Table 00272)
+ 00h BYTE size of packet (10h or 18h)
+ 01h BYTE reserved (0)
+ 02h WORD number of blocks to transfer (max 007Fh for Phoenix EDD)
+ 04h DWORD -> transfer buffer
+ 08h QWORD starting absolute block number
+ (for non-LBA devices, compute as
+ (Cylinder*NumHeads + SelectedHead) * SectorPerTrack +
+ SelectedSector - 1
+ 10h QWORD (EDD-3.0, optional) 64-bit flat address of transfer buffer;
+ used if DWORD at 04h is FFFFh:FFFFh
+--------N-134257DX1234-----------------------
+INT 13 U - Beame&Whiteside BWLPD - INSTALLATION CHECK
+ AX = 4257h ("BW")
+ DX = 1234h
+Return: BX = 414Ch if installed
+Program: BWLPD is the printer daemon from the BW-NFS package
+SeeAlso: INT 62/AH=00h"ETHDEV"
+--------d-1343-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - EXTENDED WRITE
+ AH = 43h
+ AL = write flags
+ ---v1.0,2.0---
+ bit 0: verify write
+ bits 7-1 reserved (0)
+ ---v2.1+ ---
+ 00h,01h write without verify
+ 02h write with verify
+ DL = drive number
+ DS:SI -> disk address packet (see #00272)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (see #00234)
+ disk address packet's block count field set to number of blocks
+ successfully transferred
+Note: the BIOS returns CF set/AH=01h (invalid function) if verify is
+ requested but not supported
+SeeAlso: AH=03h,AH=41h"INT 13 Ext",AH=42h"INT 13 Ext",AH=44h
+--------d-1344-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - VERIFY SECTORS
+ AH = 44h
+ DL = drive number
+ DS:SI -> disk address packet (see #00272)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (see #00234)
+ disk address packet's block count field set to number of blocks
+ successfully verified
+SeeAlso: AH=04h,AH=41h"INT 13 Ext",AH=42h"INT 13 Ext",AH=47h
+--------d-1345-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - LOCK/UNLOCK DRIVE
+ AH = 45h
+ AL = operation
+ 00h lock media in drive
+ 01h unlock media
+ 02h check lock status
+ DL = drive number
+Return: CF clear if successful
+ AH = 00h
+ AL = lock state (00h = unlocked)
+ CF set on error
+ AH = error code (see #00234)
+Notes: this function is required to be supported for any removable drives
+ numbered 80h or higher
+ a device may be locked even if no media is present in the drive
+ up to 255 locks may be placed on a drive, and the media will not
+ be physically unlocked until all locks have been removed
+SeeAlso: AH=41h"INT 13 Ext",AH=46h,AH=49h,INT 15/AH=52h"INT 13 Extensions"
+--------d-1346-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - EJECT MEDIA
+ AH = 46h
+ AL = 00h (reserved)
+ DL = drive number
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (see #00234)
+SeeAlso: AH=49h,INT 15/AH=52h"INT 13 Extensions"
+--------d-1347-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - EXTENDED SEEK
+ AH = 47h
+ DL = drive number
+ DS:SI -> disk address packet (see #00272)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (see #00234)
+Note: this function initiates the seek, and may return before the seek
+ actually completes
+SeeAlso: AH=0Ch,AH=42h"INT 13 Ext"
+--------d-1348-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - GET DRIVE PARAMETERS
+ AH = 48h
+ DL = drive (80h-FFh)
+ DS:SI -> buffer for drive parameters (see #00273)
+Return: CF clear if successful
+ AH = 00h
+ DS:SI buffer filled
+ CF set on error
+ AH = error code (see #00234)
+BUGS: several different Compaq BIOSes incorrectly report high-numbered
+ drives (such as 90h, B0h, D0h, and F0h) as present, giving them the
+ same geometry as drive 80h; as a workaround, scan through disk
+ numbers, stopping as soon as the number of valid drives encountered
+ equals the value in 0040h:0075h
+ Dell machines using PhoenixBIOS 4.0 Release 6.0 fail to correctly
+ handle this function if the flag word at DS:[SI+2] is not 0000h
+ on entry
+SeeAlso: AH=08h,AH=41h,AH=49h,MEM 0040h:0075h
+
+Format of IBM/MS INT 13 Extensions drive parameters:
+Offset Size Description (Table 00273)
+ 00h WORD (call) size of buffer
+ (001Ah for v1.x, 001Eh for v2.x, 42h for v3.0)
+ (ret) size of returned data
+ 02h WORD information flags (see #00274)
+ 04h DWORD number of physical cylinders on drive
+ 08h DWORD number of physical heads on drive
+ 0Ch DWORD number of physical sectors per track
+ 10h QWORD total number of sectors on drive
+ 18h WORD bytes per sector
+---v2.0+ ---
+ 1Ah DWORD -> EDD configuration parameters (see #00278)
+ FFFFh:FFFFh if not available
+---v3.0 ---
+ 1Eh WORD signature BEDDh to indicate presence of Device Path info
+ 20h BYTE length of Device Path information, including signature and this
+ byte (24h for v3.0)
+ 21h 3 BYTEs reserved (0)
+ 24h 4 BYTEs ASCIZ name of host bus ("ISA" or "PCI")
+ 28h 8 BYTEs ASCIZ name of interface type
+ "ATA"
+ "ATAPI"
+ "SCSI"
+ "USB"
+ "1394" IEEE 1394 (FireWire)
+ "FIBRE" Fibre Channel
+ 30h 8 BYTEs Interface Path (see #00275)
+ 38h 8 BYTEs Device Path (see #00276)
+ 40h BYTE reserved (0)
+ 41h BYTE checksum of bytes 1Eh-40h (two's complement of sum, which makes
+ the 8-bit sum of bytes 1Eh-41h equal 00h)
+Note: if the size is less than 30 on call, the final DWORD will not be
+ returned by a v2.x implementation; similarly for the Device Path info
+SeeAlso: #00277,#03196
+
+Bitfields for IBM/MS INT 13 Extensions information flags:
+Bit(s) Description (Table 00274)
+ 0 DMA boundary errors handled transparently
+ 1 cylinder/head/sectors-per-track information is valid
+ 2 removable drive
+ 3 write with verify supported
+ 4 drive has change-line support (required if drive >= 80h is removable)
+ 5 drive can be locked (required if drive >= 80h is removable)
+ 6 CHS information set to maximum supported values, not current media
+ 15-7 reserved (0)
+Note: bits 4-6 are only valid if bit 2 is set
+SeeAlso: #00273
+
+Format of EDD v3.0 Interface Path:
+Offset Size Description (Table 00275)
+---ISA---
+ 00h WORD 16-bit base address
+ 02h 6 BYTEs reserved (0)
+---PCI---
+ 00h BYTE PCI bus number
+ 01h BYTE PCI device number
+ 02h BYTE PCI function number
+ 03h 5 BYTEs reserved (0)
+SeeAlso: #00273,#00276
+
+Format of EDD v3.0 Device Path:
+Offset Size Description (Table 00276)
+---ATA---
+ 00h BYTE flag: 00h = master, 01h = slave
+ 01h 7 BYTEs reserved (0)
+---ATAPI---
+ 00h BYTE flag: 00h = master, 01h = slave
+ 01h BYTE logical unit number
+ 02h 6 BYTEs reserved (0)
+---SCSI---
+ 00h BYTE logical unit number
+ 01h 7 BYTEs reserved (0)
+---USB---
+ 00h BYTE to be determined
+ 01h 7 BYTEs reserved (0)
+---IEEE1394---
+ 00h QWORD 64-bit FireWire General Unique Identifier (GUID)
+---FibreChannel---
+ 00h QWORD Word Wide Number (WWN)
+SeeAlso: #00273,#00275
+
+Format of Phoenix Enhanced Disk Drive Spec translated drive parameter table:
+Offset Size Description (Table 00277)
+ 00h WORD number of cylinders
+ 02h BYTE number of heads
+ 03h BYTE A0h (signature indicating translated table)
+ 04h BYTE number of physical sectors per track
+ 05h WORD starting write precompensation cylinder number
+ 07h BYTE reserved
+ 08h BYTE control byte (see #03198 at INT 41"DISK 0")
+ 09h WORD number of physical cylinders
+ 0Bh BYTE number of physical heads
+ 0Ch WORD cylinder number of landing zone
+ 0Eh BYTE number of logical sectors per track
+ 0Fh BYTE checksum
+Program: the Phoenix Enhanced Disk Drive Specification is an addition to the
+ IBM/MS INT 13 extensions
+SeeAlso: #00278,#03196
+
+Format of Phoenix Enhanced Disk Drive Spec Fixed Disk Parameter Table:
+Offset Size Description (Table 00278)
+ 00h WORD physical I/O port base address
+ 02h WORD disk-drive control port address
+ 04h BYTE drive flags (see #00279)
+ 05h BYTE proprietary information
+ bits 7-4 reserved (0)
+ bits 3-0: Phoenix proprietary (used by BIOS)
+ 06h BYTE IRQ for drive (bits 3-0; bits 7-4 reserved and must be 0)
+ 07h BYTE sector count for multi-sector transfers
+ 08h BYTE DMA control
+ bits 7-4: DMA type (0-2) as per ATA-2 specification
+ bits 3-0: DMA channel
+ 09h BYTE programmed I/O control
+ bits 7-4: reserved (0)
+ bits 3-0: PIO type (1-4) as per ATA-2 specification
+ 0Ah WORD drive options (see #00280)
+ 0Ch 2 BYTEs reserved (0)
+ 0Eh BYTE extension revision level (high nybble=major, low nybble=minor)
+ (currently 10h for v1.0 and 11h for v1.1-3.0)
+ 0Fh BYTE 2's complement checksum of bytes 00h-0Eh
+ 8-bit sum of all bytes 00h-0Fh should equal 00h
+Note: this structure is also called the Device Paramter Table Extension
+ (DPTE)
+SeeAlso: #00277
+
+Bitfields for Phoenix Enhanced Disk Drive Spec drive flags:
+Bit(s) Description (Table 00279)
+ 7 reserved (1)
+ 6 LBA enabled
+ 5 reserved (1)
+ 4 drive is slave
+ 3-0 reserved (0)
+SeeAlso: #00278,#00280
+
+Bitfields for Phoenix Enhanced Disk Drive Spec drive options:
+Bit(s) Description (Table 00280)
+ 0 fast PIO enabled
+ 1 fast DMA access enabled
+ 2 block PIO (multi-sector transfers) enabled
+ 3 CHS translation enabled
+ 4 LBA translation enabled
+ 5 removable media
+ 6 ATAPI device (CD-ROM)
+ 7 32-bit transfer mode
+---v1.1+ ---
+ 8 ATAPI device uses DRQ to signal readiness for packet command
+ (must be 0 if bit 6 is 0)
+ 10-9 translation type (must be 00 if bit 3 is 0)
+ 00 Phoenix bit-shifting translation
+ 01 LBA-assisted translation
+ 10 reserved
+ 11 proprietary translation
+---v3.0---
+ 11 Ultra DMA access enabled
+ 15-12 reserved (0)
+SeeAlso: #00278,#00279
+--------d-1349-------------------------------
+INT 13 - IBM/MS INT 13 Extensions - EXTENDED MEDIA CHANGE
+ AH = 49h
+ DL = drive number
+Return: CF clear if media has not changed
+ AH = 00h
+ CF set if media may have changed
+ AH = 06h (see #00234)
+Note: unlike AH=16h, any drive number may be specified
+SeeAlso: AH=16h,AH=41h"INT 13 Ext",AH=46h
+--------d-134A-------------------------------
+INT 13 - Bootable CD-ROM - INITIATE DISK EMULATION
+ AH = 4Ah
+ AL = 00h
+ DS:SI -> specification packet (see #00281)
+Return: CF clear if successful
+ CF set on error (drive will not be in emulation mode)
+ AX = return codes
+SeeAlso: AH=48h,AX=4B00h,AH=4Ch,AH=4Dh
+
+Format of Bootable CD-ROM Specification Packet:
+Offset Size Description (Table 00281)
+ 00h BYTE size of packet in bytes (13h)
+ 01h BYTE boot media type (see #00282)
+ 02h BYTE drive number
+ 00h floppy image
+ 80h bootable hard disk
+ 81h-FFh nonbootable or no emulation
+ 03h BYTE CD-ROM controller number
+ 04h DWORD Logical Block Address of disk image to emulate
+ 08h WORD device specification (see also #00282)
+ (IDE) bit 0: drive is slave instead of master
+ (SCSI) bits 7-0: LUN and PUN
+ bits 15-8: bus number
+ 0Ah WORD segment of 3K buffer for caching CD-ROM reads
+ 0Ch WORD load segment for initial boot image
+ if 0000h, load at segment 07C0h
+ 0Eh WORD number of 512-byte virtual sectors to load
+ (only valid for AH=4Ch)
+ 10h BYTE low byte of cylinder count (for INT 13/AH=08h)
+ 11h BYTE sector count, high bits of cylinder count (for INT 13/AH=08h)
+ 12h BYTE head count (for INT 13/AH=08h)
+SeeAlso: #00283,AH=08h
+
+Bitfields for Bootable CD-ROM boot media type:
+Bit(s) Description (Table 00282)
+ 3-0 media type
+ 0000 no emulation
+ 0001 1.2M diskette
+ 0010 1.44M diskette
+ 0011 2.88M diskette
+ 0100 hard disk (drive C:)
+ other reserved
+ 5-4 reserved (0)
+ 6 image contains ATAPI driver
+ 7 image contains SCSI driver(s)
+SeeAlso: #00281
+--------d-134B00-----------------------------
+INT 13 - Bootable CD-ROM - TERMINATE DISK EMULATION
+ AX = 4B00h
+ DL = drive number or 7Fh to terminate all emulations
+ DS:SI -> empty specification packet (see #00281)
+Return: CF clear if successful
+ CF set on error (drive will still be in emulation mode)
+ AX = return codes
+ DS:SI specification packet filled
+SeeAlso: AH=48h,AH=4Ah,AX=4B00h,AH=4Ch,AH=4Dh
+--------d-134B01-----------------------------
+INT 13 - Bootable CD-ROM - GET STATUS
+ AX = 4B01h
+ DL = drive number
+ DS:SI -> empty specification packet (see #00281)
+Return: CF clear if successful
+ CF set on error
+ AX = return codes
+ DS:SI specification packet filled
+Note: same as AX=4B00h, but does not terminate emulation
+SeeAlso: AH=48h,AH=4Ah,AX=4B00h,AH=4Ch,AH=4Dh
+--------d-134C-------------------------------
+INT 13 - Bootable CD-ROM - INITIATE DISK EMULATION AND BOOT
+ AH = 4Ch
+ AL = 00h
+ DS:SI -> specification packet (see #00281)
+Return: never, if successful
+ CF set (error while attempting to boot)
+ AX = error codes
+SeeAlso: AH=48h,AH=4Ah,AX=4B00h,AH=4Dh
+--------d-134D00-----------------------------
+INT 13 - Bootable CD-ROM - RETURN BOOT CATALOG
+ AX = 4D00h
+ DS:SI -> command packet (see #00283)
+Return: CF clear if successful
+ CF set on error
+ AX = return codes
+SeeAlso: AH=48h,AH=4Ah,AX=4B00h,AH=4Ch
+
+Format of Bootable CD-ROM "get boot catalog" command packet:
+Offset Size Description (Table 00283)
+ 00h BYTE size of packet in bytes (08h)
+ 01h BYTE number of sectors of boot catalog to read
+ 02h DWORD -> buffer for boot catalog
+ 06h WORD first sector in boot catalog to transfer
+SeeAlso: #00281
+--------d-134E-------------------------------
+INT 13 - IBM/MS INT 13 Extensions v2.1+ - SET HARDWARE CONFIGURATION
+ AH = 4Eh
+ AL = function
+ 00h enable prefetch
+ 01h disable prefetch
+ 02h set maximum PIO transfer mode
+ 03h set PIO mode 0
+ 04h set default PIO transfer mode
+ 05h enable INT 13h DMA maximum mode
+ 06h disable INT 13h DMA
+ DL = drive number
+Return: CF clear if successful
+ AH = 00h
+ AL = status
+ 00h command was safe (only affected specified drive)
+ 01h other devices are affected
+ CF set on error
+ AH = error code (see #00234)
+Note: DMA and PIO modes are mutually exclusive, so selecting DMA disables
+ PIO (for either the specified device or all devices on that
+ controller), and selecting PIO disables DMA
+SeeAlso: AH=41h"INT 13 Extensions",AX=5001h"Enhanced Disk Drive"
+--------d-135001-----------------------------
+INT 13 - Enhanced Disk Drive Spec v3.0 - SEND PACKET COMMAND
+ AX = 5001h
+ DL = drive number
+ ES:BX -> command packet (see #00284)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code
+Desc: send data to and from a serial packet-oriented device, such as IEEE1394
+ and USB
+SeeAlso: AH=41h"INT 13 Extensions",AH=4Eh
+
+Format of Enhanced Disk Drive Spec v3.0 command packet:
+Offset Size Description (Table 00284)
+ 00h WORD signature B055h
+ 02h BYTE length of packet in bytes
+ 03h BYTE reserved (0)
+ 04h N BYTEs formatted packet data
+--------v-135001------------------------
+INT 13 - VIRUS - "Andropinis" - INSTALLATION CHECK
+ AX = 5001h
+Return: AX = 0150h if resident
+SeeAlso: AX=FD50h"VIRUS",INT 21/AX=0B56h
+--------v-135342CX0001-----------------------
+INT 13 - ScanBoot - INSTALLATION CHECK
+ AX = 5342h ("SB")
+ CX = 0001h
+ DX = 0000h
+Return: CF clear if ScanBoot installed
+ AX = 0000h
+ CX = serial number ("SW" if shareware release)
+ DX = version
+ BX,SI,ES destroyed
+Program: ScanBoot is a virus-detection TSR by PanSoft
+--------d-135501-----------------------------
+INT 13 - Seagate ST01/ST02 - Inquiry
+ AX = 5501h
+ DH = number of bytes to transfer
+ DL = drive ID (80h, 81h, ...)
+ ES:BX -> buffer for results
+Return: ES:BX buffer filled with the Inquiry results
+Notes: the ST01/ST02 BIOS does not return any success/failure indication,
+ so all commands must be assumed to have been successful
+ the ST01/ST02 BIOS always maps its drives after the previous BIOS
+ drives without changing the BIOS drive count at 0040h:0075h
+ this command is identical to the SCSI Inquiry command
+--------d-135502-----------------------------
+INT 13 - Seagate ST01/ST02 - RESERVED
+ AX = 5502h
+--------d-135503-----------------------------
+INT 13 - Seagate ST01/ST01 - Set Device Type Qualifier (DTQ)
+ AX = 5503h
+ DH = DTQ byte (see #00285)
+ DL = drive ID (80h, 81h, ...)
+Return: nothing
+
+Bitfields for DTQ byte:
+Bit(s) Description (Table 00285)
+ 7 reserved
+ 6 SCSI drive attached
+ 5 reserved
+ 4 selected drive is ST225N/NP (Paired)
+ 3 selected drive is ST225N
+ 2 Host Adapter checks parity on the selected drive
+ 1 selected drive has been installed
+ 0 Seagate installation software present
+--------d-135504-----------------------------
+INT 13 U - Seagate - ??? - RETURN IDENTIFICATION
+ AX = 5504h
+ DX = drive (bit 7 set for hard disk)
+Return: CF clear if successful
+ AX = 4321h if ST01/ST02h
+ AX = 4322h if ??? Seagate controller
+ CF set on error
+SeeAlso: AX=5505h,AX=5514h
+--------d-135504-----------------------------
+INT 13 - Seagate ST01/ST02 - RETURN IDENTIFICATION
+ AX = 5504h
+ DL = drive ID (80h, 81h, ...)
+Return: AX = 4321h
+ BL = selected drive number (00h, 01h)
+ BH = number of drives attached to Host Adapter (max. 2)
+--------d-135505-----------------------------
+INT 13 - Seagate - ??? - PARK HEADS
+ AX = 5505h
+ DX = drive (bit 7 set for hard disk)
+Return: CF clear if successful
+ CF set on error
+SeeAlso: AX=5504h,AX=5515h
+--------d-135505-----------------------------
+INT 13 - Seagate ST01/ST02 - PARK HEADS
+ AX = 5505h
+ DL = drive ID (80h, 81h, ...)
+ DH = subfunction
+ 00h park heads (SCSI Stop command)
+ 01h un-park heads (SCSI Start command)
+Return: nothing
+--------d-135506-----------------------------
+INT 13 - Seagate ST01/ST02 - SCSI Bus Parity
+ AX = 5506h
+ DL = drive ID (80h, 81h, ...)
+ DH = subfunction
+ 00h disable parity check
+ 01h enable parity check
+ 02h return current parity setting
+Return: AL = status
+ 00h parity checking disabled
+ 01h parity checking enabled
+--------d-135507-----------------------------
+INT 13 - Seagate ST01/ST02 - RESERVED FUNCTIONS
+ AX = 5507h to 550Dh
+Note: officially listed as "reserved"
+--------d-135514-----------------------------
+INT 13 U - Seagate - ???
+ AX = 5514h
+ DX = drive (bit 7 set for hard disk)
+Return: CF clear if successful
+ CF set on error
+ AX = return value (FEBEh,FEBFh,FEDAh,FEDBh)
+SeeAlso: AX=5504h,AX=5515h
+--------d-135515-----------------------------
+INT 13 U - Seagate - PARK HEADS???
+ AX = 5515h
+ DX = drive (bit 7 set for hard disk)
+Return: CF clear if successful
+ CF set on error
+Note: appears to be identical to AX=5505h
+SeeAlso: AX=5504h,AX=5505h
+--------d-1359-------------------------------
+INT 13 - SyQuest - Generic SCSI pass through
+ AH = 59h
+ CX = HOST_ID, 0-based
+ DX = 80h
+ ES:BX pointer to SCSI structure (see #00286)
+Return: CF clear
+ AH = 95h
+SeeAlso: AH=12h"SyQuest",AH=13h"SyQuest",AH=1Fh"SyQuest"
+
+Format of SyQuest SCSI structure:
+Offset Size Description (Table 00286)
+ 00h WORD opcode (see #00287)
+ 02h BYTE target's SCSI ID
+ 03h BYTE target's logical unit number
+ 04h BYTE data direction (00h no data xfer, 01h data in, FFh data out)
+ 05h BYTE host status
+ 00h successful
+ 01h selection time out
+ 02h data over-run or under-run
+ 06h BYTE target status at command completion
+ 00h successful
+ 02h check status
+ 08h busy
+ 07h BYTE command data block length
+ 08h DWORD request data length
+ 0Ch DWORD result data length (actual length of data transferred)
+ 10h DWORD -> CDB (see #03236,#03237,#03238)
+ 14h DWORD -> data buffer
+Note: The handler does not perform a 'Request Sense' command if there was an
+ error
+
+(Table 00287)
+Values for SCSI opcode:
+ 00h verify interface
+ clears carry flag and returns if function is available
+ 01h returns the ID of the INT 13h Handler in a NULL terminated string of
+ length less than 40 byte including the terminator.
+ The string is stored in the buffer pointed by p_buf.
+ 02h device mapping info. The caller provides a one byte buffer.
+ The handler stores the Int 13h Device ID (80h or above) in the buffer.
+ It stores 0 if that target does not exists.
+ 03h execute SCSI command
+ 04h device reset
+ 05h SCSI bus reset
+SeeAlso: #00286
+--------d-1370-------------------------------
+INT 13 - Priam EDVR.SYS DISK PARTITIONING SOFTWARE???
+ AH = 70h
+ ???
+Return: ???
+Note: Priam's EDISK.EXE (FDISK replacement) and EFMT.EXE (low-level
+ formatting program) make this call, presumably to EDVR.SYS (the
+ partitioning driver)
+SeeAlso: AH=ADh
+----------1375-------------------------------
+INT 13 - ???
+ AH = 75h
+ ???
+Return: AH = ???
+ ???
+Note: intercepted by PC-Cache (v5.1 only)
+----------1376-------------------------------
+INT 13 - ???
+ AH = 76h
+ ???
+Return: AH = ???
+ ???
+Note: intercepted by PC-Cache (v5.1 only)
+--------c-137B00-----------------------------
+INT 13 - NOW! v3.05 - GET INFORMATION
+ AX = 7B00h
+ CX:DX -> 1F8h-byte buffer for information record (see #00288)
+Return: AX = 0000h
+ BX = segment of main resident code
+ ES = ???
+Program: NOW! is a disk cache by Vertisoft Systems, Inc.
+SeeAlso: AX=7B02h,AH=EFh
+
+Format of NOW! information record:
+Offset Size Description (Table 00288)
+ 00h 80 BYTEs name of directory from which NOW! was started
+ 50h 424 BYTEs ???
+ 81h ? BYTEs array of bytes for ???
+ F7h 250 BYTEs array of 25 entries, one per drive???
+ Offset Size Description
+ 00h 2 BYTEs ???
+ 02h WORD ???
+ 04h WORD ???
+ 06h 4 BYTEs ???
+1F1h 7 BYTEs ???
+--------c-137B01-----------------------------
+INT 13 - NOW! v3.05 - ???
+ AX = 7B01h
+Return: DX = segment of ???
+SeeAlso: AX=7B00h
+--------c-137B02-----------------------------
+INT 13 - NOW! v3.05 - SET INFORMATION
+ AX = 7B02h
+ BX = segment of ??? (10h above a PSP)
+ CX:DX -> 1F8h-byte information record (see #00288)
+Return: ???
+Program: NOW! is a disk cache by Vertisoft Systems, Inc.
+Note: NOW! grabs the INT 24h value from the PSP reached via the segment in
+ BX
+SeeAlso: AX=7B00h
+--------c-137B03-----------------------------
+INT 13 - NOW! v3.05 - ???
+ AX = 7B03h
+ ???
+Return: ???
+SeeAlso: AX=7B00h,AX=7B04h
+--------c-137B04-----------------------------
+INT 13 - NOW! v3.05 - ???
+ AX = 7B04h
+ ???
+Return: ???
+SeeAlso: AX=7B03h
+--------c-137B05-----------------------------
+INT 13 - NOW! v3.05 - GET DISK ACCESSES???
+ AX = 7B05h
+Return: BX:AX = number of physical accesses???
+ DX:CX = total disk accesses???
+SeeAlso: AX=7B00h,AX=7B06h
+--------c-137B06-----------------------------
+INT 13 - NOW! v3.05 - GET ???
+ AX = 7B06h
+ BX = ???
+Return: AX = 0000h
+ BX = ???
+SeeAlso: AX=7B05h,AX=7B07h
+--------c-137B07-----------------------------
+INT 13 - NOW! v3.05 - GET ???
+ AX = 7B07h
+Return: AX = ???
+ BX = ???
+ CX = ???
+ DX = ???
+SeeAlso: AX=7B06h
+--------c-137B08-----------------------------
+INT 13 - NOW! v3.05 - ???
+ AX = 7B08h
+ CX = ??? (default 00h)
+Return: ???
+SeeAlso: AX=7B00h
+--------c-1380--CX6572-----------------------
+INT 13 - FAST! v4.02+ - API
+ AH = 80h
+ CX = 6572h
+ DX = 1970h
+ ES:BX -> request packet (see #00290)
+ AL = function number (see #00289)
+Return: AH = status (except function 06h)
+ 00h if successful
+ 01h invalid function
+ 05h not supported by the installed variant
+ CF clear if successful
+ CF set on error
+ AL may be destroyed
+Program: FAST! is a disk cache by Future Computing Systems and marketed by
+ BLOC Publishing Corp.
+SeeAlso: AX=8001h,AX=8006h,AX=8007h
+Index: hotkeys;FAST!
+
+(Table 00289)
+Values for FAST! function:
+ 01h get cache information (see AX=8001h)
+ 04h disable cache
+ 05h enable cache and reset statistics
+ 06h installation check (see AX=8006h)
+ 07h unhook interrupts (see AX=8007h)
+ 09h flush cache
+ 0Ah (v4.02+) enable staged writes
+ 0Bh (v4.02+) disable staged writes
+ 0Ch (v4.02+) enable beep on flush
+ 0Dh (v4.02+) disable beep on flush
+ 0Eh ???
+ 0Fh ???
+ 10h (v4.12+) enable hotkeys
+ 11h (v4.12+) disable hotkeys
+ 12h (v4.13+) set idle delay
+ 13h (v4.13+) set flush dirty percentage
+ 14h (v5.00+) enable mouse checks
+ 15h (v5.00+) disable mouse checks
+ 16h (v5.00d+) reduce cache size to minimum
+ 17h (v5.00d+) increase cache size to maximum
+
+Format of FAST! request packet:
+Offset Size Description (Table 00290)
+ 00h DWORD pointer to 19-byte signature string (see #00291)
+ 04h DWORD pointer to buffer for data (if needed by function)
+
+(Table 00291)
+Values for FAST! v4.04-v5.03 signature string:
+ 13h 07h 06h 08h 11h 18h 0Fh 0Eh 02h 18h 13h 08h 0Bh 08h 01h 00h 04h 08h 15h
+--------c-138001CX6572-----------------------
+INT 13 - FAST! v4.02+ - GET CACHE INFORMATION
+ AX = 8001h
+ CX = 6572h
+ DX = 1970h
+ ES:BX -> request packet (see #00292)
+Return: AH = 00h if successful
+SeeAlso: AH=80h,AX=8006h
+
+Format of FAST! request packet:
+Offset Size Description (Table 00292)
+ 00h DWORD -> 19-byte signature string (see #00291)
+ 04h DWORD -> buffer for cache information (see #00293)
+
+Format of FAST! cache information (v5.00-5.03):
+Offset Size Description (Table 00293)
+ 00h WORD binary version number of FAST! (v5.00 = 01F4h)
+ 02h BYTE revision letter (61h = X.XXa, 62h = X.XXb, etc.)
+ 03h BYTE FAST! variant
+ (01h = FASTE, 02h = FASTX BIOS, 04h = FASTC, 20h = FASTX XMS)
+ 04h DWORD total number of read requests
+ 08h DWORD number of physical disk reads
+ 0Ch DWORD grabbed hash buckets
+ 10h DWORD "st_386mem"
+ 14h DWORD total number of writes (only counted when staging enabled)
+ 18h DWORD number of physical disk writes (only when staging enabled)
+ 1Ch DWORD number of write errors while flushing cache
+ 20h WORD flags1 (see #00294)
+ 22h WORD flags
+ bit 0: ???
+ bit 1: staged writes enabled
+ 24h WORD ???
+ 26h WORD maximum cache size in KB
+ 28h WORD minimum cache size in KB
+ 2Ah WORD segment of first cache buffer (FASTC)
+ segment of EMS page frame (FASTE)
+ XMS handle (FASTX XMS)
+ 2Ch WORD number of hash buckets containing no entries
+ 2Eh WORD number of hash buckets containing one entry
+ 30h WORD number of hash buckets containing two entries
+ 32h WORD number of hash buckets containing three entries
+ 34h WORD number of hash buckets containing four entries
+ 36h WORD number of hash buckets containing five entries
+ 38h WORD maximum contiguous sectors
+ 3Ah WORD hash factor
+ 3Ch WORD number of paragraphs of memory used below 1M
+ 3Eh WORD entries per hash bucket
+ 40h WORD idle delay in seconds
+ 42h 2 BYTEs ???
+ 44h WORD staged write threshold percentage
+ 46h 2 BYTEs ???
+ 48h WORD number of dirty sectors
+ 4Ah WORD number of staged write buffers
+ 4Ch WORD current cache size in KB
+ 4Eh WORD beep frequency in Hz
+ 50h WORD ???
+ 52h WORD ???
+
+Bitfields for FAST! flags1:
+Bit(s) Description (Table 00294)
+ 0 beep on flush
+ 3 hotkeys enabled
+ 4 mouse idle check enabled
+ 8 caching enabled
+ 13 ???
+--------c-138006CX6572-----------------------
+INT 13 - FAST! v4.02+ - INSTALLATION CHECK
+ AX = 8006h
+ CX = 6572h
+ DX = 1970h
+ ES:BX -> request packet (see #00295)
+Return: AX = 1965h if installed
+SeeAlso: AH=80h,AX=8001h,AX=8007h
+
+Format of FAST! request packet:
+Offset Size Description (Table 00295)
+ 00h DWORD -> 19-byte signature string (see #00291)
+--------c-138007CX6572-----------------------
+INT 13 - FAST! v4.02+ - UNHOOK INTERRUPTS
+ AX = 8007h
+ CX = 6572h
+ DX = 1970h
+ ES:BX -> request packet (see #00296)
+Return: AX = 1965h if installed
+SeeAlso: AH=80h,AX=8006h
+Index: uninstall;FAST!
+
+Format of FAST! request packet:
+Offset Size Description (Table 00296)
+ 00h DWORD -> 19-byte signature string (see #00291)
+--------c-1381--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = 81h
+ SI = 4358h
+ ???
+Return: ???
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call (PC-Cache v5.1 corresponds
+ to PC-Kwik v3.20 and PC-Cache v5.5 to PC-Kwik v3.27)
+ returns immediately in PC-Cache v5.x
+Index: PC-Cache|Qualitas Qcache
+--------c-1382--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = 82h
+ SI = 4358h
+ ???
+Return: AL = ???
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call
+SeeAlso: AH=84h
+Index: PC-Cache|Qualitas Qcache
+--------c-1383--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = 83h
+ SI = 4358h
+ AL = ???
+ ES:BX -> ???
+ ???
+Return: ???
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call
+SeeAlso: AH=85h
+Index: PC-Cache|Qualitas Qcache
+--------c-1384--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = 84h
+ SI = 4358h
+ AL = ???
+ ???
+Return: AL = ???
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call
+SeeAlso: AH=82h
+Index: PC-Cache|Qualitas Qcache
+--------c-1385--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = 85h
+ SI = 4358h
+ AL = ???
+ DL = ???
+ ???
+Return: ???
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call (PC-Cache v5.1 corresponds
+ to PC-Kwik v3.20)
+SeeAlso: AH=83h
+Index: PC-Cache|Qualitas Qcache
+--------c-1386--SI4358-----------------------
+INT 13 - Super PC-Kwik v4.00+ - ???
+ AH = 86h
+ SI = 4358h
+ ???
+Return: ???
+Note: Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
+ thus supports this call
+Index: Qualitas Qcache
+--------c-1387--SI4358-----------------------
+INT 13 - Super PC-Kwik v4.00+ - ???
+ AH = 87h
+ SI = 4358h
+ ???
+Return: AH = status??? (00h)
+ CX = ???
+ DX = ??? (0000h)
+Note: Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
+ thus supports this call
+Index: Qualitas Qcache
+--------c-1388--SI4358-----------------------
+INT 13 - Super PC-Kwik v4.00+ - ???
+ AH = 88h
+ SI = 4358h
+ ???
+Return: AH = status??? (00h)
+ CX = ???
+ DX = ??? (0000h)
+Note: Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
+ thus supports this call
+Index: Qualitas Qcache
+--------c-1389--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 89h
+ SI = 4358h
+ ???
+Return: ???
+--------c-138A--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 8Ah
+ SI = 4358h
+ ???
+Return: ???
+--------c-138EED-----------------------------
+INT 13 - HyperDisk v4.01+ - ???
+ AX = 8EEDh
+ ???
+Return: ???
+Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
+SeeAlso: AX=8EEEh,AX=8EEFh,AH=EEh,INT 2F/AX=DF00h
+--------c-138EEE-----------------------------
+INT 13 - HyperDisk v4.01+ - ???
+ AX = 8EEEh
+Return: CF set
+ AX = CS of HyperDisk resident code
+ ???
+Note: identical to AX=8EEFh in HYPERDKX v4.21-4.30
+SeeAlso: AX=8EEDh,AX=8EEFh,AH=EEh
+--------c-138EEF-----------------------------
+INT 13 - HyperDisk v4.01+ - ???
+ AX = 8EEFh
+Return: CF set
+ AX = CS of HyperDisk resident code
+ ???
+Note: identical to AX=8EEEh in HYPERDKX v4.21-4.30
+SeeAlso: AX=8EEDh,AX=8EEEh,AH=EEh
+--------c-1392--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 92h
+ SI = 4358h
+ ???
+Return: AH = status??? (00h)
+ DL = ???
+SeeAlso: AH=93h
+--------c-1393--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 93h
+ SI = 4358h
+ ???
+Return: AH = status??? (00h)
+ AL = ???
+SeeAlso: AH=92h
+--------c-1394--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 94h
+ SI = 4358h
+ ???
+Return: ???
+--------c-1395--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 95h
+ SI = 4358h
+ ???
+Return: AH = status??? (00h)
+ DX = ???
+--------c-1396--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 96h
+ SI = 4358h
+ AL = ??? (01h)
+ BX = ??? (0790h)
+ DL = ???
+Return: AH = status??? (00h)
+ DX = ???
+--------c-1397--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 97h
+ SI = 4358h
+ ???
+Return: ???
+--------c-1398--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 98h
+ SI = 4358h
+ ???
+Return: ???
+--------c-1399--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 99h
+ SI = 4358h
+ ???
+Return: ???
+--------c-139A--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 9Ah
+ SI = 4358h
+ ???
+Return: ???
+--------c-139B--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 9Bh
+ SI = 4358h
+ ???
+Return: ???
+--------c-139C--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 9Ch
+ SI = 4358h
+ ???
+Return: ???
+Note: functions 9Ch and 9Dh are the only ones which are fully reentrant; all
+ other PC-Kwik API calls (INT 13/81h-B0h) return AX=0200h and CF clear
+ if a previous call is still in progress
+--------c-139D--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = 9Dh
+ SI = 4358h
+ ???
+Return: ???
+--------c-13A0--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - GET RESIDENT CODE SEGMENT
+ AH = A0h
+ SI = 4358h
+Return: AX = segment of resident code
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call (note that PC-Cache v5.5
+ corresponds to PC-Kwik v3.27)
+SeeAlso: INT 16/AX=FFA5h/CX=1111h
+Index: PC-Cache|Qualitas Qcache
+--------c-13A1--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - FLUSH CACHE
+ AH = A1h
+ SI = 4358h
+Return: CF clear
+ AH = 00h (v5.10)
+Notes: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call (note that PC-Cache v5.1
+ corresponds to PC-Kwik v3.20)
+ this function is one out of several cache flush calls issued by the
+ PTS-DOS 6.51 and S/DOS 1.0 kernel before rebooting.
+SeeAlso: INT 16/AX=FFA5h/CX=FFFFh
+Index: PC-Cache|Qualitas Qcache
+--------c-13A2--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = A2h
+ SI = 4358h
+ ???
+Return: ???
+Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
+ Super PC-Kwik, and thus support this call (note that PC-Cache v5.1
+ corresponds to PC-Kwik v3.20)
+Index: PC-Cache|Qualitas Qcache
+--------c-13A3--SI4358-----------------------
+INT 13 U - Super PC-Kwik v5.10+ - DISABLE CACHE
+ AH = A3h
+ SI = 4358h
+Return: CF clear
+SeeAlso: AH=A4h
+--------c-13A4--SI4358-----------------------
+INT 13 U - Super PC-Kwik v5.10+ - ENABLE CACHE
+ AH = A4h
+ SI = 4358h
+Return: CF clear
+SeeAlso: AH=A3h
+--------c-13A5--SI4358-----------------------
+INT 13 CU - Super PC-Kwik v5.10+ - PROGRAM TERMINATION NOTIFICATION
+ AH = A5h
+ SI = 4358h
+Return: AX = ???
+ SI = ???
+Notes: called and used internally by Super PC-Kwik when a program terminates
+ via INT 21/AH=00h, INT 21/AH=31h, or INT 21/AH=4Ch
+ this call is not supported by Qualitas Qcache 4.00
+Index: PC-Cache
+SeeAlso: AH=A6h,AH=A9h,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
+--------c-13A6--SI4358-----------------------
+INT 13 CU - Super PC-Kwik v5.10+ - PROGRAM LOAD NOTIFICATION
+ AH = A6h
+ SI = 4358h
+ DS:DX -> ASCIZ program name
+ ES:BX -> EXEC data block (see #01590 at INT 21/AH=4Bh)
+Return: ???
+Note: called and used internally by Super PC-Kwik when a program is loaded
+ with INT 21/AX=4B00h
+SeeAlso: AH=A5h,AH=A9h,INT 21/AH=4Bh
+--------c-13A7--SI4358-----------------------
+INT 13 CU - Super PC-Kwik 5.1 - ???
+ AH = A7h
+ SI = 4358h
+Return: ???
+Note: called and used internally by Super PC-Kwik on some INT 21 calls
+SeeAlso: AH=A5h,AH=A6h,AH=A8h
+--------v-13A759-----------------------------
+INT 13 U - Novell DOS 7 - SDRes v27.03 - ???
+ AX = A759h
+Return: AX = 59A7h if installed
+ DX:BX -> ??? data
+Program: SDRes is the resident portion of the Search&Destroy antiviral by
+ Fifth Generation Systems, as bundled with Novell DOS 7
+SeeAlso: INT 21/AH=0Eh/DL=ADh
+--------c-13A8--SI4358-----------------------
+INT 13 CU - Super PC-Kwik 5.1 - ???
+ AH = A8h
+ SI = 4358h
+Return: ???
+Note: called and used internally by Super PC-Kwik on some INT 21 calls
+SeeAlso: AH=A5h,AH=A6h,AH=A7h
+--------c-13A9--SI4358-----------------------
+INT 13 CU - Super PC-Kwik 5.1 - EXITCODE RETRIEVAL NOTIFICATION
+ AH = A9h
+ SI = 4358h
+Return: ???
+Note: called and used internally by Super PC-Kwik when an application issues
+ INT 21/AH=4Dh
+SeeAlso: AH=A5h,AH=A6h,INT 21/AH=4Dh
+--------c-13AA--SI4358-----------------------
+INT 13 - Super PC-Kwik v4+ - ???
+ AH = AAh
+ SI = 4358h
+ ???
+Return: ???
+Note: Qualitas Qcache is an OEM version of Super PC-Kwik, and thus supports
+ this call
+--------c-13AB--SI4358-----------------------
+INT 13 - Super PC-Kwik v4+ - ???
+ AH = ABh
+ SI = 4358h
+ ???
+Return: ???
+Note: Qualitas Qcache is an OEM version of Super PC-Kwik, and thus supports
+ this call
+--------c-13AC--SI4358-----------------------
+INT 13 - Super PC-Kwik v4+ - ???
+ AH = ACh
+ SI = 4358h
+ ???
+Return: ???
+Note: Qualitas Qcache is an OEM version of Super PC-Kwik, and thus supports
+ this call
+--------d-13AD-------------------------------
+INT 13 - Priam HARD DISK CONTROLLER???
+ AH = ADh
+ ???
+Return: ???
+Note: this call is made from Priam's EFMT.EXE (low-level formatter), probably
+ to check the ROM type on the controller for their hard disk kits
+SeeAlso: AH=70h
+--------c-13AD--SI4358-----------------------
+INT 13 - Super PC-Kwik v4+ - ???
+ AH = ADh
+ SI = 4358h
+ ???
+Return: ???
+Note: Qualitas Qcache is an OEM version of Super PC-Kwik, and thus supports
+ this call
+--------c-13AE--SI4358-----------------------
+INT 13 - Super PC-Kwik v5.10+ - ???
+ AH = AEh
+ SI = 4358h
+ ???
+Return: ???
+--------c-13B0--SI4358-----------------------
+INT 13 - Super PC-Kwik v3.20+ - ???
+ AH = B0h
+ SI = 4358h
+ ???
+Return: ???
+Note: PC Tools PC-Cache 5.x is an OEM version of Super PC-Kwik, and thus
+ supports this call; Qualitas Qcache does not support it
+Index: PC-Cache
+----------13BF00-----------------------------
+INT 13 - Mylex/Adaptec??? - ???
+ AX = BF00h
+ BX = PCI address???
+ DI = 0000h ???
+ DL = drive number (80h = C:)
+Return: ???
+Note: some poorly-commented code using this function notes that there had
+ been a workaround for some Mylex BIOS bug by setting DL to 8Fh
+--------d-13E000-----------------------------
+INT 13 - XBIOS - COMMAND
+ AX = E000h
+ CX = 0
+ DL = drive number (80h,81h,82h,83h)
+ ES:BX = pointer to XBIOS Command Block (see #00297)
+Return: CF clear if successful
+ CX = 1234h XBIOS Signature
+ CF set on error
+Program: XBIOS is a driver in some versions of Disk Manager that is
+ loaded from the disk MBR, replacing the ROM BIOS disk support
+ e.g. adding LBA mode support, and read/write multiple.
+SeeAlso: AH=F9h"SWBIOS"
+
+Format of XBIOS Command Block:
+Offset Size Description (Table 00297)
+ 00h BYTE function
+ 0Eh Get XBIOS Configuration Information
+ Return: buffer points to Ontrackr_Ref_Data structure
+ (see #00298)
+ 01h BYTE reserved (must be zero before function call)
+ 02h DWORD buffer pointer - Input or output depending on opcode
+SeeAlso: #00298,#00299
+
+Format of Ontrackr_Ref_Data structure:
+Offset Size Description (Table 00298)
+ 00h WORD Size of structure (33h)
+ 02h BYTE VxD Chain mode
+ 03h 12 BYTEs Drive 1: Ontrackr_VxD_Data structure (see #00299)
+ 0Fh 12 BYTEs Drive 2: Ontrackr_VxD_Data structure
+ 1Bh 12 BYTEs Drive 3: Ontrackr_VxD_Data structure
+ 27h 12 BYTEs Drive 4: Ontrackr_VxD_Data structure (see #00299)
+SeeAlso: #00297,#00299
+
+Format of Ontrackr_VxD_Data structure:
+Offset Size Description (Table 00299)
+ 00h BYTE INT 13h drive number
+ 01h DWORD Delta skew value
+ 05h BYTE Physical heads (Word 3 of Identify Data)
+ 06h BYTE Physical sectors per track (Word 6 of Identify Data)
+ 07h BYTE Multiple Block Size (Blocking factor)
+ 08h BYTE Read/Write Multiple disable flags
+ 00001000b drive supports r/w multiple
+ 00000100b do not use read multiple
+ 00000010b do not use write multiple
+ 09h WORD Base port address (1F0/170)
+ 0Bh BYTE Hardware interrupt channel (14/15)
+SeeAlso: #00298
+--------v-13EC00-----------------------------
+INT 13 - VIRUS - "Tiso" - INSTALLATION CHECK
+ AX = EC00h
+Return: CF clear if installed
+SeeAlso: AH=F2h,INT 12/AX=4350h/BX=4920h
+--------d-13EE-------------------------------
+INT 13 - SWBIOS - SET 1024-CYLINDER FLAG
+ AH = EEh
+ DL = drive number (80h, 81h)
+Return: CF clear
+ AH = 00h
+Program: SWBIOS is a TSR by Ontrack Computer Systems
+Desc: the following INT 13 call will add 1024 to the specified cylinder
+ number to get the actual cylinder number desired
+Notes: the flag is cleared by all INT 13 calls except AH=EEh and AH=EFh
+ Disk Manager also supports these calls
+ this function is also supported by HyperDisk v4.01+ and PC-Cache v5.5+,
+ in order to allow caching of drives using SWBIOS to access more than
+ 1024 cylinders
+ for software which supports that call, this function is equivalent to
+ calling AH=EFh with CX=0400h
+SeeAlso: AH=F9h,AH=FEh,INT 16/AX=FFA5h/CX=1111h,INT 2F/AX=DF00h
+Index: PC-Cache;huge disks|Disk Manager
+--------c-13EF-------------------------------
+INT 13 - Ontrack Drive Rocket - SET CYLINDER OFFSET
+ AH = EFh
+ CX = cylinder offset for next INT 13 call
+ DL = drive number (80h, 81h)
+Return: CF clear
+ AH = 00h
+Program: Drive Rocket is a drive accelerator by Ontrack Computer Systems for
+ IDE drives supporting the read multiple and write multiple commands
+Desc: the following INT 13 call will add the number given by this call to
+ the specified cylinder to get the actual cylinder number, then reset
+ the offset to zero
+Note: this function is also supported by the NOW! disk cache, and presumably
+ newer versions of SWBIOS and Disk Manager
+ for software which supports this call, AH=EEh is equivalent to calling
+ this function with CX=0400h
+ the cylinder offset is reset to 0 by all INT 13 called except AH=EEh
+ and AH=EFh
+SeeAlso: AX=7B00h
+--------v-13F2-------------------------------
+INT 13 - VIRUS - "Neuroquila" - INSTALLATION CHECK
+ AH = F2h
+Return: CF ??? if installed
+SeeAlso: AX=EC00h,INT 12/AX=4350h/BX=4920h,INT 21/AX=0B56h
+--------d-13F9-------------------------------
+INT 13 - SWBIOS - INSTALLATION CHECK
+ AH = F9h
+ DL = drive number (80h,81h)
+Return: CF clear
+ DX = configuration word
+ bit 15 set if other SWBIOS extensions available
+ CF set on error
+Program: SWBIOS is a TSR by Ontrack Computer Systems
+ XBIOS is a driver in some versions of Disk Manager that is
+ loaded from the disk MBR, replacing the ROM BIOS disk support
+ eg adding LBA mode support, and read/write multiple.
+Note: Disk Manager also supports these calls
+SeeAlso: AH=EEh,AX=E000h"XBIOS",AH=FFh"EZ-Drive"
+Index: Disk Manager
+--------v-13FA--DX5945-----------------------
+INT 13 - PC Tools v8+ VSAFE, VWATCH - API
+ AH = FAh
+ DX = 5945h
+ AL = function (00h-07h)
+Return: varies by function
+ if not installed:
+ CF set
+ AH = 01h
+Note: this API is identical to the ones on INT 16/AH=FAh and INT 21/AH=FAh,
+ so it is listed in its entirety under INT 16/AX=FA00h and following
+SeeAlso: INT 16/AX=FA00h
+--------v-13FD50------------------------
+INT 13 - VIRUS - "Predator" - INSTALLATION CHECK
+ AX = FD50h
+Return: AX = 50FDh if resident
+SeeAlso: AX=5001h"VIRUS",INT 16/AH=DDh"VIRUS"
+--------d-13FE-------------------------------
+INT 13 - SWBIOS - GET EXTENDED CYLINDER COUNT
+ AH = FEh
+ DL = drive number (80h, 81h)
+Return: CF clear
+ DX = number of cylinders beyond 1024 on drive
+Program: SWBIOS is a TSR by Ontrack Computer Systems
+Notes: standard INT 13/AH=08h will return a cylinder count truncated to 1024
+ BIOS without this extension would return count modulo 1024
+ Disk Manager also supports these calls
+SeeAlso: AH=EEh
+----------13FF-------------------------------
+INT 13 - EZ-Drive - INSTALLATION CHECK
+ AH = FFh
+ DL = drive number (80h)
+Return: CF clear
+ AX = AA55h
+ ES:BX -> string "AERMH13Vxx", where xx is the version number of
+ the EZ-Drive driver
+ CF set on error
+Program: EZ-Drive is a driver by Micro House that is loaded from the
+ hard disk MBR, replacing the ROM BIOS disk support, eg adding
+ LBA mode support, and read/write multiple.
+Note: this function is called by the Windows95 Master Boot Record
+SeeAlso: AX=E000h"XBIOS",AH=F9h"SWBIOS"
+--------B-13FF-------------------------------
+INT 13 - IBM SurePath BIOS - Officially "Private" Function
+ AH = FFh
+--------U-13FFFFBHAA-------------------------
+INT 13 - UNIQUE UX Turbo Utility - SET TURBO MODE
+ AX = FFFFh
+ BH = AAh
+ BL = subfunction
+ 00h installation check
+ Return: AX = 1234h if installed
+ 01h turn on Turbo mode
+ 02h turn off Turbo mode
+ 03h set Turbo mode according to hardware switch
+ 04h set disk access to Turbo mode
+ 05h set disk access to Normal mode
+Return: nothing
+SeeAlso: INT 15/AH=DFh
+Index: installation check;UNIQUE UX Turbo Utility
+--------S-14---------------------------------
+INT 14 - SERIAL - Digiboard DigiCHANNEL PC/X* Extender INT 14 (XAPCM232.SYS)
+InstallCheck: determine whether the "~DOSXAM~" character device exists
+Index: installation check;Digiboard DigiCHANNEL
+--------S-1400-------------------------------
+INT 14 - SERIAL - INITIALIZE PORT
+ AH = 00h
+ AL = port parameters (see #00300)
+ DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
+Return: AH = line status (see #00304)
+ FFh if error on Digiboard XAPCM232.SYS
+ AL = modem status (see #00305)
+Notes: default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes
+ since the PCjr supports a maximum of 4800 bps, attempting to set 9600
+ bps will result in 4800 bps
+ various network and serial-port drivers support the standard BIOS
+ functions with interrupt-driven I/O instead of the BIOS's polled I/O
+ the 1993/04/08 Compaq system ROM uses only the low two bits of DX
+ the default setting used by DOS (MS-DOS 6, DR-DOS 7.03, PTS-DOS) when
+ (re-)initializing the serial devices is AL=A3h (2400 bps, no parity,
+ 1 stop bit, 8 data bits).
+SeeAlso: AH=04h"SERIAL",AH=04h"MultiDOS",AH=05h"SERIAL",AH=57h
+SeeAlso: AX=8000h"ARTICOM",AH=81h"COMM-DRV",AH=82h"COURIERS",AH=8Ch
+SeeAlso: MEM 0040h:0000h,PORT 03F8h"Serial"
+
+Bitfields for serial port parameters:
+Bit(s) Description (Table 00300)
+ 7-5 data rate (110,150,300,600,1200,2400,4800,9600 bps)
+ 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
+ 2 stop bits (set = 2, clear = 1)
+ 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
+SeeAlso: #00302,#00307,#00308,#00309
+--------S-1400-------------------------------
+INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
+ AH = 00h
+ AL = initializing parameters
+ 7 - 6 - 5 4 - 3 2 1 - 0
+ -BAUD RATE- PARITY STOP WORD
+ BITS LENGTH
+ 000 19200 bd 00 none 0: 1 00: 5
+ 001 38400 bd 01 odd 1: 2 01: 6
+ 010 300 bd 11 even 10: 7
+ 011 600 bd 11: 8
+ 100 1200 bd
+ 101 2400 bd
+ 110 4800 bd
+ 111 9600 bd (4800 on PCjr)
+ DX = port number (0-3 or FFh if only performing non-I/O setup)
+Return: AH = RS-232 status code bits (see #00301)
+ AL = modem status bits
+ bit 3: always 1
+ bit 7: DCD - carrier detect
+SeeAlso: #00300,AH=05h"FOSSIL",AH=81h"COMM-DRV",AH=82h"COURIERS"
+
+Bitfields for FOSSIL RS-232 status:
+Bit(s) Description (Table 00301)
+ 0 RDA - input data is available in buffer
+ 1 OVRN - data has been lost
+ 5 THRE - room is available in output buffer
+ 6 TSRE - output buffer empty
+--------S-1400-------------------------------
+INT 14 - Tandy 2000 - SERIAL - RESET COMM PORT
+ AH = 00h
+ AL = RS-232C parameters (see #00302)
+ DL = port number
+ DH = protocol
+ bit 0: use XON/XOFF on received data
+ bit 1: use XON/XOFF when transmitting
+Return: AH = line status (see #00304)
+ AL = modem status (see #00305)
+Note: this interrupt is identical to INT 53 on the Tandy 2000
+SeeAlso: AH=04h"Tandy 2000",INT 53"Tandy 2000"
+--------S-1400-------------------------------
+INT 14 - MBBIOS - INITIALIZE PORT
+ AH = 00h
+ AL = port parameters (see #00302)
+ DX = port number
+Return: AH = line status (see #00304)
+ AL = modem status (see #00305)
+Note: MBBIOS was written by H. Roy Engehausen
+SeeAlso: AH=04h"MBBIOS",AH=05h"MBBIOS",AH=09h"MBBIOS"
+
+Bitfields for MBBIOS port parameters:
+Bit(s) Description (Table 00302)
+ 7-5 data rate
+ (normally 110,150,300,600,1200,2400,4800,9600 bps;
+ 9600,14400,19200,28800,38400,57600,115200,330400 bps
+ if the high-speed option is set)
+ 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
+ 2 stop bits (set = 2, clear = 1)
+ 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
+SeeAlso: #00300
+--------N-1400--DXFFFF-----------------------
+INT 14 - Connection Manager - MODIFY DEFAULT CONNECTION PARAMETERS
+ AH = 00h
+ DX = FFFFh
+ ES:DI -> vector string specifying new parameters
+Return: AH = return code (00h,03h) (see #00303)
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+Note: if DX is 0-3 on entry, Connection Manager emulates the standard BIOS
+ function, but redirects the port over the network; if DX is any other
+ value, the call is chained
+SeeAlso: AH=04h/DX=FFFFh,AH=08h/DX=FFFFh,AH=0Ah/DX=FFFFh
+
+(Table 00303)
+Values for Connection Manager return code:
+ 00h successful
+ 01h no such connection
+ 02h invalid connection ID
+ 03h invalid subvector found
+ 04h communication error (check BH)
+ 06h insufficient resources, retry later
+ FFh no data available
+--------S-1401-------------------------------
+INT 14 - SERIAL - WRITE CHARACTER TO PORT
+ AH = 01h
+ AL = character to write
+ DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
+Return: AH bit 7 clear if successful
+ AH bit 7 set on error
+ AH bits 6-0 = port status (see #00304)
+Notes: various network and serial-port drivers support the standard BIOS
+ functions with interrupt-driven I/O instead of the BIOS's polled I/O
+ the 1993/04/08 Compaq system ROM uses only the low two bits of DX
+SeeAlso: AH=02h,AH=0Bh"FOSSIL",AX=8000h"ARTICOM",AH=89h,MEM 0040h:007Ch
+--------N-1401--DXFFFF-----------------------
+INT 14 - Connection Manager - SEND CHARACTER
+ AH = 01h
+ DX = FFFFh
+ BH = character to send
+Return: AH = return code (00h-02h,06h) (see #00303)
+Notes: if DX is 0-3 on entry, Connection Manager emulates the standard BIOS
+ function, but redirects the port over the network; if DX is any other
+ value, the call is chained
+ this function is provided primarily for compatibility; AH=06h/DX=FFFFh
+ is the preferred function because it provides better performance
+SeeAlso: AH=02h/DX=FFFFh,AH=06h/DX=FFFFh,AH=09h/DX=FFFFh
+--------S-1402-------------------------------
+INT 14 - SERIAL - READ CHARACTER FROM PORT
+ AH = 02h
+ AL = 00h (ArtiCom)
+ DX = port number (00h-03h (04h-43h for Digiboard XAPCM232.SYS))
+Return: AH = line status (see #00304)
+ AL = received character if AH bit 7 clear
+Notes: will timeout if DSR is not asserted, even if function 03h returns
+ data ready
+ various network and serial-port drivers support the standard BIOS
+ functions with interrupt-driven I/O instead of the BIOS's polled I/O
+ the 1993/04/08 Compaq system ROM uses only the low two bits of DX
+SeeAlso: AH=01h,AH=02h"FOSSIL",AH=84h,AH=FCh
+--------S-1402-------------------------------
+INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
+ AH = 02h
+ DX = port number (0-3)
+Return: AL = character received
+ AH = 00h
+SeeAlso: AH=01h,AH=02h"SERIAL"
+--------N-1402--DXFFFF-----------------------
+INT 14 - Connection Manager - RECEIVE CHARACTER
+ AH = 02h
+ DX = FFFFh
+ BH = character to send
+Return: AH = return code (00h-02h,04h,FFh) (see #00303)
+ BH = line status (see #00304)
+ AL = received character (if any)
+Notes: if DX is 0-3 on entry, Connection Manager emulates the standard BIOS
+ function, but redirects the port over the network; if DX is any other
+ value, the call is chained
+ this function is provided primarily for compatibility; AH=07h/DX=FFFFh
+ is the preferred function because it provides better performance
+SeeAlso: AH=02h/DX=FFFFh,AH=03h/DX=FFFFh,AH=06h/DX=FFFFh
+--------S-1403-------------------------------
+INT 14 - SERIAL - GET PORT STATUS
+ AH = 03h
+ AL = 00h (ArtiCom)
+ DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
+Return: AH = line status (see #00304)
+ AL = modem status (see #00305)
+ AX = 9E00h if disconnected (ArtiCom)
+Note: the 1993/04/08 Compaq system ROM uses only the low two bits of DX
+SeeAlso: AH=00h,AH=07h"MultiDOS",AX=8000h"ARTICOM",AH=81h"COURIERS",AX=FD02h
+
+Bitfields for serial line status:
+Bit(s) Description (Table 00304)
+ 7 timeout
+ 6 transmit shift register empty
+ 5 transmit holding register empty
+ 4 break detected
+ 3 framing error
+ 2 parity error
+ 1 overrun error
+ 0 receive data ready
+Note: for COMM-DRV, if bit 7 is set, an error occurred, and may be retrieved
+ through a separate call (see AX=8000h"COMM-DRV")
+
+Bitfields for modem status:
+Bit(s) Description (Table 00305)
+ 7 carrier detect
+ 6 ring indicator
+ 5 data set ready
+ 4 clear to send
+ 3 delta carrier detect
+ 2 trailing edge of ring indicator
+ 1 delta data set ready
+ 0 delta clear to send
+--------N-1403--DXFFFF-----------------------
+INT 14 - Connection Manager - RETURN COMMUNICATION PORT STATUS
+ AH = 03h
+ DX = FFFFh
+ AL = connection ID
+Return: AH = return code (00h-02h) (see #00303)
+ BH = line status (see #00306)
+ BL = modem status (see #00305) (only bits 4,5,7; all others zero)
+Notes: if DX is 0-3 on entry, Connection Manager emulates the standard BIOS
+ function, but redirects the port over the network; if DX is any other
+ value, the call is chained
+SeeAlso: AH=00h/DX=FFFFh,AH=04h/DX=FFFFh,AH=0Ah/DX=FFFFh
+
+Bitfields for Connection Manager line status:
+Bit(s) Description (Table 00306)
+ 7 CTS changed
+ 6 current CTS state
+ 5 timeout
+ 4 break
+ 3 framing error
+ 2 parity error
+ 1 overrun
+ 0 current carrier state (0 active, 1 no carrier)
+--------S-1404-------------------------------
+INT 14 - SERIAL - EXTENDED INITIALIZE (CONVERTIBLE,PS)
+ AH = 04h
+ AL = break status
+ 00h if break
+ 01h if no break
+ BH = parity (see #00307)
+ BL = number of stop bits
+ 00h one stop bit
+ 01h two stop bits (1.5 if 5 bit word length)
+ CH = word length (see #00308)
+ CL = bps rate (see #00309)
+ DX = port number
+Return: AX = port status code (see #00304,#00305)
+SeeAlso: AH=00h,AH=1Eh,AX=8000h"ARTICOM"
+
+(Table 00307)
+Values for serial port parity:
+ 00h no parity
+ 01h odd parity
+ 02h even parity
+ 03h stick parity odd
+ 04h stick parity even
+SeeAlso: #00300,#00308,#00309,#00310
+
+(Table 00308)
+Values for serial port word length:
+ 00h 5 bits
+ 01h 6 bits
+ 02h 7 bits
+ 03h 8 bits
+SeeAlso: #00300,#00307,#00309,#00345
+
+(Table 00309)
+Values for serial port bps rate:
+ 00h 110 (19200 if ComShare installed)
+ 01h 150 (38400 if ComShare installed)
+ 02h 300
+ 03h 600 (14400 if ComShare installed)
+ 04h 1200
+ 05h 2400
+ 06h 4800 (28800 if ComShare installed)
+ 07h 9600
+ 08h 19200
+---ComShare---
+ 09h 38400
+ 0Ah 57600
+ 0Bh 115200
+SeeAlso: #00300,#00307,#00309,#00346,#00353,AH=36h,#00364,#00606,#02923
+--------S-1404-------------------------------
+INT 14 - Tandy 2000 - SERIAL - FLUSH COMM BUFFER
+ AH = 04h
+ DL = port number
+ DH = protocol
+ bit 0: use XON/XOFF on received data
+ bit 1: use XON/XOFF when transmitting
+Return: nothing
+Desc: clears the serial interface buffer
+Note: this interrupt is identical to INT 53 on the Tandy 2000
+SeeAlso: AH=00h"Tandy 2000",INT 53"Tandy 2000"
+--------S-1404-------------------------------
+INT 14 - FOSSIL - INITIALIZE DRIVER
+ AH = 04h
+ DX = port number
+ optionally BX=4F50h
+ ES:CX -> byte to be set upon ^C
+Return: AX = 1954h (if successful)
+ BL = maximum function number supported (excluding 7Eh and above)
+ BH = revision of FOSSIL specification supported
+ DTR is raised
+Note: the word at offset 6 in the interrupt handler contains 1954h, and the
+ following byte contains the maximum function number supported; this
+ can serve as an installation check
+SeeAlso: AH=05h"FOSSIL",AH=1Ch,INT 11/AH=BCh
+Index: installation check;FOSSIL
+--------S-1404-------------------------------
+INT 14 - MultiDOS Plus IODRV - INITIALIZE PORT
+ AH = 04h
+Return: port initialized; if Hayes-compatible modem, a connection has been
+ established
+Note: the port number is stored at offset BEh in the Task Control Block
+ (see #00456 at INT 15/AH=13h"MultiDOS")
+SeeAlso: AH=00h,AH=05h"MultiDOS",AH=20h"MultiDOS",INT 15/AH=13h"MultiDOS"
+--------S-1404-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE BAUD RATE
+ AH = 04h
+ AL = initializing parameters (see #00310)
+ BX = baud rate
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ FFh error
+SeeAlso: AH=05h"Digiboard"
+
+Bitfields for Digiboard initializing parameters:
+Bit(s) Description (Table 00310)
+ 7-5 unused
+ 4-3 parity (00 none, 01 odd, 11 even)
+ 2 stop bits (0 = one, 1 = two)
+ 1-0 data bits (00 = five, 01 = six, 10 = seven, 11 = eight)
+SeeAlso: #00307,#00308
+--------S-1404-------------------------------
+INT 14 - MBBIOS - INSTALLATION CHECK
+ AH = 04h
+ DX = port number
+Return: AX = AA55h if installed on specified port
+SeeAlso: AH=00h"MBBIOS",AH=09h"MBBIOS"
+--------N-1404--DXFFFF-----------------------
+INT 14 - Connection Manager - OPEN COMMUNICATION
+ AH = 04h
+ DX = FFFFh
+ ES:DI -> Connection Request protocol vector (see #00311)
+Return: AH = return code
+ 00h successful
+ AL = connection ID
+ BH = connection type
+ 00h direct connection or no dialing
+ 01h Connection Server dialed phone
+ 01h no response from Connection Server
+ 03h invalid request
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+Desc: initiate a connection to the Connection Server listed in the current
+ Client parameter set
+Notes: if DX is 0-3 on entry, Connection Manager emulates the standard BIOS
+ function, but redirects the port over the network; if DX is any other
+ value, the call is chained
+ all subvectors of the Connection Request vector are optional; if
+ missing, default values are provided by the default connection
+ parameter set
+SeeAlso: AH=00h/DX=FFFFh,AH=05h/DX=FFFFh,AH=06h/DX=FFFFh,AH=07h/DX=FFFFh
+SeeAlso: AH=0Ah/DX=FFFFh,AH=0Ch/DX=FFFFh
+
+Format of Connection Manager protocol command vector:
+Offset Size Description (Table 00311)
+ 00h WORD (big-endian) total length of command (including this word)
+ 02h WORD (big-endian) command code
+ EF01h Connection Request
+ EF06h Modify Connection Parameters
+ 04h N BYTEs list of subvectors (see #00313)
+ allowable subvector types are 01h-04h,17h,18h for command code
+ EF01h; 03h,04h for command code EF06h (see #00312)
+
+(Table 00312)
+Values for Connection Manager subvector type code:
+ 01h Connection ID
+ 02h Destination ID
+ 03h Asynchronous line parameters
+ 04h Data transfer parameters
+ 09h Line speed
+ 0Ah Serial coding
+ 0Bh Packet size
+ 0Ch Timers
+ 0Dh Special characters
+ 0Eh Target ID
+ 0Fh Telephone number
+ 10h ASCII destination ID
+ 11h Parity
+ 12h Bits per character
+ 13h Number of stop bits
+ 14h Packet timer
+ 15h Intercharacter timer
+ 17h Flags
+ 18h Parameter ranges
+ 19h Flow control
+
+Format of Connection Manager subvector:
+Offset Size Description (Table 00313)
+ 00h BYTE length of subvector
+ 01h BYTE type code (see #00312)
+ 02h N-2 BYTEs data, which may include subvectors
+SeeAlso: #00314,#00315,#00316,#00317,#00318,#00319,#00320,#00321,#00322,#00323,#00324
+SeeAlso: #00325,#00326,#00328,#00329,#00330,#00331,#00332,#00333,#00311
+
+Format of Connection ID subvector:
+Offset Size Description (Table 00314)
+ 00h BYTE 03h (length)
+ 01h BYTE 01h (subvector "Connection ID")
+ 02h BYTE connection ID
+SeeAlso: #00313
+
+Format of Destination ID subvector:
+Offset Size Description (Table 00315)
+ 00h BYTE length
+ 01h BYTE 02h (subvector "Destination ID")
+ 02h N BYTEs subvector(s) of type 0Eh, 0Fh, or 10h
+SeeAlso: #00313
+
+Format of Asynchronous line parameters subvector:
+Offset Size Description (Table 00316)
+ 00h BYTE length
+ 01h BYTE 03h (subvector "Asynchronous line parameters")
+ 02h N BYTEs subvector(s) of type 09h, 0Ah, or 19h
+SeeAlso: #00313
+
+Format of Data transfer parameters subvector:
+Offset Size Description (Table 00317)
+ 00h BYTE length
+ 01h BYTE 04h (subvector "Data transfer parameters")
+ 02h N BYTEs subvector(s) of type 0Bh, 0Ch, or 0Dh
+SeeAlso: #00313
+
+Format of Line speed subvector:
+Offset Size Description (Table 00318)
+ 00h BYTE 04h (length)
+ 01h BYTE 09h (subvector "Line speed")
+ 02h WORD bit map, highest set bit selects speed
+ bit 0: 2400
+ bits 1-7: 1800, 1200, 600, 300, 115200, 150, 110 bps
+ bits 8-15: 57600, 38400, 19200, 14400, 9600, 7200, 4800, 3600
+SeeAlso: #00313
+
+Format of Serial coding subvector:
+Offset Size Description (Table 00319)
+ 00h BYTE length
+ 01h BYTE 0Ah (subvector "Serial coding")
+ 02h N BYTEs subvector(s) of type 11h, 12h, or 13h
+SeeAlso: #00313
+
+Format of Packet size subvector:
+Offset Size Description (Table 00320)
+ 00h BYTE 04h (length)
+ 01h BYTE 0Bh (subvector "Packet size")
+ 02h WORD (big-endian) packet size, 1 to 1024
+SeeAlso: #00313
+
+Format of Timers subvector:
+Offset Size Description (Table 00321)
+ 00h BYTE length
+ 01h BYTE 0Ch (subvector "Timers")
+ 02h 8 BYTEs subvector of type 14h or 15h
+SeeAlso: #00313
+
+Format of Special characters subvector:
+Offset Size Description (Table 00322)
+ 00h BYTE length
+ 01h BYTE 0Dh (subvector "Special characters")
+ 02h N BYTEs list of ASCII characters to be used as EOM or EOB
+SeeAlso: #00313
+
+Format of Target ID:
+Offset Size Description (Table 00323)
+ 00h BYTE length
+ 01h BYTE 0Eh (subvector "Target ID")
+ 02h N BYTEs target ID, 1-16 bytes
+SeeAlso: #00313
+
+Format of Telephone number subvector:
+Offset Size Description (Table 00324)
+ 00h BYTE length
+ 01h BYTE 0Fh (subvector "Telephone number")
+ 02h N BYTEs telephone number
+SeeAlso: #00313
+
+Format of ASCII destination ID subvector:
+Offset Size Description (Table 00325)
+ 00h BYTE length
+ 01h BYTE 10h (subvector "ASCII destination ID")
+ 02h N BYTEs destination ID
+SeeAlso: #00313
+
+Format of Parity subvector:
+Offset Size Description (Table 00326)
+ 00h BYTE 03h (length)
+ 01h BYTE 11h (subvector "Parity")
+ 02h BYTE parity type (see #00327)
+SeeAlso: #00313
+
+Bitfields for Connection Manager parity type:
+Bit(s) Description (Table 00327)
+ 7 odd
+ 6 even
+ 5 mark
+ 4 space
+ 3 none
+SeeAlso: #00326
+
+Format of Bits per character subvector:
+Offset Size Description (Table 00328)
+ 00h BYTE 03h (length)
+ 01h BYTE 12h (subvector "Bits per character")
+ 02h BYTE bits per character
+ bit 7: seven
+ bit 6: eight
+SeeAlso: #00313
+
+Format of Number of stop bits subvector:
+Offset Size Description (Table 00329)
+ 00h BYTE 03h (length)
+ 01h BYTE 13h (subvector "Number of stop bits")
+ 02h BYTE stop bits
+ bit 7: one
+ bit 6: 1.5
+ bit 5: two
+SeeAlso: #00313
+
+Format of Packet timer and Intercharacter timer subvectors:
+Offset Size Description (Table 00330)
+ 00h BYTE 04h (length)
+ 01h BYTE subvector type
+ 14h Packet timer
+ 15h Intercharacter timer
+ 02h WORD (big-endian) unit of value representing 20ms
+SeeAlso: #00313
+
+Format of Flags subvector:
+Offset Size Description (Table 00331)
+ 00h BYTE 03h (length)
+ 01h BYTE 17h (subvector "Flags")
+ 02h BYTE flags
+ bit 7: queueing requested
+SeeAlso: #00313
+
+Format of Parameter ranges subvector:
+Offset Size Description (Table 00332)
+ 00h BYTE length
+ 01h BYTE 18h (subvector "Parameter ranges")
+ 02h N BYTEs subvector(s) of type 09h, 11h, 12h, or 13h
+SeeAlso: #00313
+
+Format of Flow control subvector:
+Offset Size Description (Table 00333)
+ 00h BYTE length (02h-04h)
+ 01h BYTE 19h (subvector "Flow control")
+ 02h BYTE XOFF character
+ 03h BYTE XON character
+Note: if length is 02h, flow control is disabled; if length is 03h, any
+ character will be accepted as XON after an XOFF
+SeeAlso: #00313
+--------S-140400-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - INSTALLATION CHECK
+ AX = 0400h
+Return: AX = 0FF0h
+SeeAlso: AX=0401h,AX=0408h
+--------S-140401-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - INITIALIZE MODE
+ AX = 0401h
+ CX = mode
+Return: nothing
+SeeAlso: AX=0400h,AX=0402h
+--------S-140402-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - EXTENDED INITIALIZE
+ AX = 0402h
+ CL = parameters
+Return: nothing
+SeeAlso: AX=0400h,AX=0401h
+--------S-140403-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - SET TIMEOUT
+ AX = 0403h
+ CX = timeout
+Return: nothing
+SeeAlso: AX=0400h
+--------S-140404-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - CLEAR THE RECEIVE BUFFER
+ AX = 0404h
+Return: nothing
+SeeAlso: AX=0400h,AX=0405h,AX=0406h
+--------S-140405-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - GET RECEIVE BUFFER COUNT
+ AX = 0405h
+Return: AX = number of characters in buffer
+SeeAlso: AX=0400h,AX=0404h,AX=0407h
+--------S-140406-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - CLEAR THE TRANSMIT BUFFER
+ AX = 0406h
+Return: nothing
+SeeAlso: AX=0400h,AX=0404h,AX=0407h
+--------S-140407-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - GET TRANSMIT BUFFER COUNT
+ AX = 0407h
+Return: AX = number of characters in the buffer
+SeeAlso: AX=0400h,AX=0405h,AX=0406h
+--------S-140408-----------------------------
+INT 14 - Microsoft Systems Journal TSRCOMM INT14 - UNINSTALL
+ AX = 0408h
+Return: nothing
+SeeAlso: AX=0400h
+--------S-1405-------------------------------
+INT 14 - SERIAL - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
+ AH = 05h
+ AL = function
+ 00h read modem control register
+ Return: BL = modem control register (see #00334)
+ AH = status
+ 01h write modem control register
+ BL = modem control register (see #00334)
+ Return: AX = status
+ DX = port number
+Note: also supported by ArtiCom
+SeeAlso: AH=00h,AH=1Fh,AX=8000h"ARTICOM",AH=FBh
+
+Bitfields for modem control register:
+Bit(s) Description (Table 00334)
+ 0 data terminal ready
+ 1 request to send
+ 2 OUT1
+ 3 OUT2
+ 4 LOOP
+ 5-7 reserved
+--------S-1405-------------------------------
+INT 14 - FOSSIL - DEINITIALIZE DRIVER
+ AH = 05h
+ DX = port number
+Return: none
+ DTR is not affected
+SeeAlso: AH=00h,AH=04h"FOSSIL",AH=1Dh,AH=8Dh
+--------S-1405-------------------------------
+INT 14 - MultiDOS Plus IODRV - READ CHARACTER FROM PORT
+ AH = 05h
+ AL = timeout in seconds (00h = never)
+Return: AL = status
+ 00h successful
+ AH = character read
+ 01h read error
+ 02h timed out
+ other modem status (CTS, DSR) changed
+Note: the port number is stored at offset BEh in the Task Control Block
+SeeAlso: AH=02h,AH=04h"MultiDOS",AH=06h"MultiDOS",AH=22h"MultiDOS"
+SeeAlso: INT 15/AH=13h"MultiDOS"
+--------S-1405-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE PROTOCOL
+ AH = 05h
+ AL = protocol (see #00335)
+ BH = new XOFF character (00h = current)
+ BL = new XON character (00h = current)
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ FFh error
+SeeAlso: AH=04h"Digiboard"
+
+Bitfields for Digiboard protocol:
+Bit(s) Description (Table 00335)
+ 7-4 unused
+ 3 RTS/CTS
+ 2 DSR
+ 1,0 XON/XOFF
+--------S-1405-------------------------------
+INT 14 - MBBIOS - DROP DTR AND RTS
+ AH = 05h
+ DX = port number
+Return: none
+SeeAlso: AH=00h"MBBIOS",AH=06h"MBBIOS",AH=06h"FOSSIL"
+--------S-1405-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - CHANGE PORT PROTOCOL
+ AH = 05h
+ AL = new port protocol (see #00336)
+ BH = new XOFF character
+ BL = new XON character
+ DX = port number
+Return: AH = FFh if invalid protocol
+SeeAlso: AH=00h,AH=04h"SERIAL",AH=06h"PC-MOS"
+
+Bitfields for PC-MOS/386 serial port protocol:
+Bit(s) Description (Table 00336)
+ 7 set to enable/disable CD monitoring, clear to set protocol
+---bit 7 set---
+ 4 CD monitoring enabled
+ 5 automatic restart enabled
+---bit 7 clear---
+ 0 receive XON/XOFF
+ 1 transmit XON/XOFF
+ 2 DTR/DSR
+ 3 RTS/CTS
+----------1405-------------------------------
+INT 14 - PhysTechSoft PTS ROM-DOS - SET PACKET
+ AH = 05h
+ CX = packet length
+ DX = port number
+ DS:SI -> packet
+Return: AH = error code (0 = no error, -1 = error)
+Notes: The embedded PC can send messages at any time. The managing PC may
+ force the embedded PC to receive messages only after causing a reset
+ on the remote embedded PC.
+ !!!from Matthias Paul:
+ Description of the high-level control packets:
+ After the reset the embedded PC will send a 4-byte packet "LOAD"
+ to the managing PC to indicate it is now able to receive commands.
+ The managing PC can send commands using 6-byte sized packets starting
+ with "COMM" followed by a 2-byte command code:
+ "01" demand setup information
+ "02" demand sending of diagnostic information
+ If diagnostic information is requested, the embedded PC will send back
+ a header packet starting with 4-byte "DIAG" followed by 2 bytes
+ indicating the count of diagnostic data packets following. Each
+ diagnostic data packet is sized 134 bytes, starting with the 4-byte
+ "DIAG", a 2-byte number packet, followed by 128 bytes of data.
+ If setup information is requested, the embedded PC will send back
+ 8 bytes length packets starting with "SETP" and 2 byte of setup
+ information of the LOADER and BIOS. The contents varies.
+ If the embedded PC requests the managing PC to send a BIOS it will
+ send a 4 byte packet "BIOS".
+ The managing PC will then send back a 6-byte sized BIOS header packet
+ starting with "BIOS" and a 2-byte indicator of the BIOS image size
+ in packets.
+ The embedded PC will answer by sending a 6 byte packet starting with
+ "BIOS" followed by the running number of the demanded packet.
+ The managing PC will then send the requested part of the BIOS image
+ in a 134 byte sized packet, starting with "BIOS", the 2 byte running
+ number of the packet and 128 bytes of the actual BIOS info.
+ The embedded PC acknowledges that it received the BIOS with a 6-byte
+ packet "BIOS", followed by 2-bytes of 0.
+ If the embedded PCs requests the managing PC to send the operating
+ system, it will follow the same proceduce as for requesting the
+ BIOS. The only difference is that instead of "BIOS", the string
+ "PTOS" will be used in the communication.
+ Debug information packets have a length of 32 bytes starting with
+ the 4-byte "DEBU" signature, and followed by the contents of the
+ PCU registers in the following order: SP, SS, ES, DS, BP, DI, SI,
+ DX, CX, BX, AX, IP, CS, Flags. Debug information is send after
+ reaching the corresponding breakpoint.
+ Description of the low-level packet protocol:
+ Before sending a packet the sending side sends a byte 52h and for a
+ certain time (ca. 1 second for the embedded PC) waits for
+ confirmation (41h) from the receiving side. If no acknowledge is
+ received this procedure is repeated 4 more times before an error is
+ returned.
+ If acknowledge was received the following information is sent:
+ 2 BYTEs synchronization (50h, 50h)
+ BYTE data packet size - 1
+ 2 BYTEs CRC of the data
+ var. data
+ 2 BYTEs synchronization (F0h, F0h)
+ The receiving side must acknowledge this by sending back two bytes
+ 59h, 59h. If the sender does not receive the confirmation, it
+ tries 4 more times before returning an error.
+SeeAlso: INT 14h/AH=06h, INT 15h/AX=E908h, INT 15h/E909h
+--------N-1405--DXFFFF-----------------------
+INT 14 - Connection Manager - CLOSE COMMUNICATION
+ AH = 05h
+ DX = FFFFh
+ AL = connection ID
+Return: AH = return code
+ 00h successful
+ 01h no such connection
+ 02h invalid connection ID
+ AL = correct connection ID
+Desc: terminate existing connection to allow another one to be established
+Note: if DX is 0-3 on entry, Connection Manager emulates the standard BIOS
+ function, but redirects the port over the network; if DX is any other
+ value, the call is chained
+SeeAlso: AH=04h/DX=FFFFh,AH=0Dh/DX=FFFFh
+--------S-1406-------------------------------
+INT 14 - FOSSIL - RAISE/LOWER DTR
+ AH = 06h
+ DX = port
+ AL = DTR state to be set
+ 00h = lower
+ 01h = raise
+Return: nothing
+SeeAlso: AH=05h"MBBIOS",AH=1Ah
+--------S-1406-------------------------------
+INT 14 - MultiDOS Plus IODRV - WRITE CHARACTER TO PORT
+ AH = 06h
+ AL = character
+Return: AL = status
+ 00h successful
+Notes: the port number is stored at offset BEh in the Task Control Block
+ if output queue is full, the calling task is blocked until the
+ character can be stored
+SeeAlso: AH=01h,AH=04h"MultiDOS",AH=05h"MultiDOS",AH=21h"MultiDOS"
+SeeAlso: INT 15/AH=13h"MultiDOS"
+--------S-1406-------------------------------
+INT 14 - MBBIOS - RAISE DTR AND RTS
+ AH = 06h
+ DX = port number
+Return: none
+SeeAlso: AH=05h"MBBIOS",AH=07h"MBBIOS"
+--------S-1406-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DRIVER 'ID' FUNCTION
+ AH = 06h
+ DX = port number
+Return: AH bit 7 set
+ AL = number of highest function supported by driver
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+SeeAlso: AH=18h"PC-MOS"
+--------N-1406-------------------------------
+INT 14 - TelAPI - WRITE BLOCK
+ AH = 06h
+ CX = number of characters to write
+ DX = port number
+ ES:DI -> buffer containing data
+Return: AX = number of characters actually sent (negative on error)
+ CX = ???
+SeeAlso: AH=07h"TelAPI",AH=E0h"TelAPI",AH=E3h"TelAPI"
+----------1406-------------------------------
+INT 14 - PhysTechSoft PTS ROM-DOS - GET PACKET
+ AH = 06h
+ CX = buffer size for packet
+ DX = port number
+ DS:SI -> buffer for packet
+Return: AH = error code (00h = no error, FFh = error)
+ CX = packet size
+SeeAlso: AH=05h"PTS ROM-DOS",INT 15/AX=E908h,INT 15/AX=E909h
+--------N-1406--DXFFFF-----------------------
+INT 14 - Connection Manager - SEND CHARACTER BLOCK
+ AH = 06h
+ DX = FFFFh
+ AL = connection ID
+ CX = number of characters to send
+ ES:DI -> buffer containing data to be sent
+Return: AH = return code (see #00303)
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=04h/DX=FFFFh,AH=07h/DX=FFFFh,AH=09h/DX=FFFFh
+--------S-1407-------------------------------
+INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
+ AH = 07h
+Return: AL = timer tick interrupt number
+ AH = ticks per second on interrupt number in AL
+ DX = approximate number of milliseconds per tick
+SeeAlso: AH=16h
+--------S-1407-------------------------------
+INT 14 - MultiDOS Plus IODRV - GET PORT STATUS
+ AH = 07h
+Return: CL = modem status (see #00305)
+ CH = character at head of input queue (if any)
+ DX = number of characters in input queue
+Note: the port number is stored at offset BEh in the Task Control Block
+SeeAlso: AH=03h,AH=05h"MultiDOS",AH=08h"MultiDOS",AH=09h"MultiDOS"
+SeeAlso: AH=23h"MultiDOS",INT 15/AH=13h"MultiDOS"
+--------S-1407-------------------------------
+INT 14 - MBBIOS - SEND BREAK
+ AH = 07h
+ DX = port number
+Return: none
+SeeAlso: AH=06h"MBBIOS",AH=FAh"EBIOS"
+--------S-1407-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - SEND RS-232 BREAK
+ AH = 07h
+ BX = duration of break in clock ticks
+ DX = port number
+Return: nothing
+--------N-1407-------------------------------
+INT 14 - TelAPI - READ BLOCK
+ AH = 07h
+ CX = length of buffer in bytes
+ DX = port number
+ ES:DI -> buffer for data
+Return: AX > 0000h number of characters actually read
+ AX = 0000h host has closed connection
+ AX < 0000h error code (see #00397)
+ CX = ???
+Note: translates CRLF into local EOL if the connection is in ASCII mode,
+ negotiates various Telnet options, and immediately executes several
+ different Telnet action commands
+SeeAlso: AH=06h"TelAPI",AH=E0h"TelAPI",AH=E2h"TelAPI"
+--------N-1407--DXFFFF-----------------------
+INT 14 - Connection Manager - RECEIVE CHARACTER BLOCK
+ AH = 07h
+ DX = FFFFh
+ AL = connection ID
+ BL = flag
+ 00h wait for data
+ nonzero do not wait if no data avaiable
+ CX = size of receive buffer
+ ES:DI -> buffer for received characters
+Return: AH = return code (00h-02h,04h,FFh) (see #00303)
+ BH = line status (see #00306)
+ CX = number of characters received
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=01h/DX=FFFFh,AH=04h/DX=FFFFh,AH=06h/DX=FFFFh
+--------S-1408-------------------------------
+INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
+ AH = 08h
+ DX = port number
+Return: nothing
+SeeAlso: AH=09h"FOSSIL"
+--------S-1408-------------------------------
+INT 14 - MultiDOS Plus 4.0 IODRV - GET AND RESET PORT LINE STATUS
+ AH = 08h
+Return: AL = line status (see #00304)
+ AH destroyed
+Notes: the port number is stored at offset BEh in the Task Control Block
+ on every line status change, the line status is ORed with the line
+ status accumulator; this function returns the accumulator and clears
+ it
+SeeAlso: AH=03h,AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
+--------S-1408-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - ALTERNATE STATUS CHECK
+ AH = 08h
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = RS232 status bits (see #00304 at AH=03h)
+ ZF set if no characters queued
+ ZF clear if character available
+ AL = next character
+SeeAlso: AH=03h,AH=08h"PC-MOS",AH=09h"Digiboard",AH=14h"Digiboard"
+--------S-1408-------------------------------
+INT 14 - MBBIOS - NON-DESTRUCTIVE READ
+ AH = 08h
+ DX = port number
+Return: AL = character (if AH bit 0 set)
+ AH = status (see #00304)
+SeeAlso: AH=0Bh"MBBIOS",AH=0Ch"FOSSIL"
+--------S-1408-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - INPUT STATUS CHECK
+ AH = 08h
+ DX = port number
+Return: CF set if carrier loss detected
+ ZF set if input buffer empty
+ ZF clear if characters available
+ AL = next character dequeued
+--------N-1408--DXFFFF-----------------------
+INT 14 - Connection Manager - RETURN DEFAULT CONNECTION PARAMETERS
+ AH = 08h
+ DX = FFFFh
+ CX = size of buffer for parameters or 0000h to get length
+ ES:DI -> buffer for parameter vector (see #00311)
+Return: AH = return code
+ 00h successful
+ CX = number of bytes required (if CX=0000h on entry)
+ CX = number of bytes omitted for lack of space (if CX nonzero)
+ nonzero invalid request
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=00h/DX=FFFFh,AH=0Fh/DX=FFFFh
+--------S-1409-------------------------------
+INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
+ AH = 09h
+ DX = port number
+Return: nothing
+SeeAlso: AH=08h"FOSSIL",AH=0Ah"FOSSIL",AH=88h
+--------S-1409-------------------------------
+INT 14 - MultiDOS Plus IODRV - RESET PORT STATUS
+ AH = 09h
+Return: modem status byte cleared
+Note: the port number is stored at offset BEh in the Task Control Block
+SeeAlso: AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
+--------S-1409-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR BUFFERS
+ AH = 09h
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ FFh error
+SeeAlso: AH=08h"Digiboard",AH=0Ah"Digiboard",AH=10h"Digiboard"
+--------S-1409-------------------------------
+INT 14 - MBBIOS - GET/SET OPTIONS
+ AH = 09h
+ AL = option byte (see #00337)
+ DX = port number???
+Return: AL = old option byte
+SeeAlso: AH=00h"MBBIOS",AH=04h"MBBIOS",AH=10h"FOSSIL"
+
+Bitfields for MBBIOS option byte:
+Bit(s) Description (Table 00337)
+ 0 transmit buffering enabled
+ 2 hardware handshaking enabled
+ 5 high-speed option enabled (see AH=00h"MBBIOS",#00302)
+ other reserved
+--------S-1409-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - RESET I/O BUFFER POINTERS
+ AH = 09h
+ DX = port number
+Return: nothing
+SeeAlso: AH=13h"PC-MOS"
+--------N-1409--DXFFFF-----------------------
+INT 14 - Connection Manager - SEND BREAK
+ AH = 09h
+ DX = FFFFh
+ AL = connection ID
+Return: AH = return code (00h-02h) (see #00303 at AH=00h/DX=FFFFh)
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=02h/DX=FFFFh,AH=03h/DX=FFFFh
+--------S-140A-------------------------------
+INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT
+ AH = 0Ah
+ DX = port number
+Return: nothing
+SeeAlso: AH=09h"FOSSIL",AH=85h
+--------S-140A-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - INPUT QUEUE CHECK
+ AH = 0Ah
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AX = number of characters available in buffer
+Note: this function is also supported by the PC-MOS/386 v5.01 $serial.sys
+SeeAlso: AH=09h"Digiboard",AH=0Dh"Digiboard"
+--------S-140A-------------------------------
+INT 14 - MBBIOS - WRITE BUFFER
+ AH = 0Ah
+ CX = count
+ ES:DI -> buffer (see #00338)
+Return: AX = status (see #00304,#00305)
+ CX = unsent character count
+ DI updated
+Note: the PACCOM version of MBBIOS does not use CX or ES:DI; instead, ES
+ contains the segment of a buffer containing the packet to be sent,
+ which by default will be freed once the packet has been sent. Use
+ AH=0Ch"MBBIOS" to allocate the buffer.
+SeeAlso: AH=01h,AH=0Bh"MBBIOS",AH=0Ch"MBBIOS",AH=19h"FOSSIL"
+
+Format of MBBIOS PACCOM buffer:
+Offset Size Description (Table 00338)
+ 00h 504 BYTEs data area
+1F8h WORD length of data in data area
+1FAh BYTE flags/status
+ bit 7: don't discard buffer after transmitting data
+ bit 6: buffer has been transmitted
+1FBh BYTE reserved (0) for additional flags/status
+1FCh WORD user data
+1FEh WORD MBBIOS-internal pointer to next buffer
+--------N-140A--DXFFFF-----------------------
+INT 14 - Connection Manager - MODIFY ACTIVE CONNECTION PARAMETERS
+ AH = 0Ah
+ DX = FFFFh
+ ES:DI -> vector string containing new parameters (see #00311)
+Return: AH = return code (00h-03h,06h) (see #00303)
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+Note: any subvectors valid for the Change Parameters command replace the
+ existing values in the current set
+SeeAlso: AH=00h/DX=FFFFh,AH=0Fh/DX=FFFFh
+--------S-140B-------------------------------
+INT 14 - FOSSIL - TRANSMIT NO WAIT
+ AH = 0Bh
+ AL = character
+ DX = port number
+Return: AX = result
+ 0000h character not accepted
+ 0001h character accepted
+SeeAlso: AH=01h
+--------S-140B-------------------------------
+INT 14 - MBBIOS - READ BUFFER
+ AH = 0Bh
+ CX = size of buffer
+ ES:DI -> buffer
+Return: AH = composite line status (see #00304) formed by ORing all statuses
+ on receive interrupts; bit 0 set if additional characters
+ available
+ AL = composite modem status (see #00305) formed by ORing all statuses
+ CX = number of characters actually read
+ DI updated
+Note: the PACCOM version of MBBIOS does not use CX or ES:DI on call,
+ instead returning ES set to the segment of the buffer containing a
+ received packet, or 0000h if no packets available; the buffer may
+ be freed with AH=0Ch"MBBIOS"
+SeeAlso: AH=02h,AH=08h"MBBIOS",AH=0Ah"MBBIOS",AH=0Ch"MBBIOS",AH=18h"FOSSIL"
+--------N-140B--DXFFFF-----------------------
+INT 14 - Connection Manager - PREPARE FOR INBOUND CONNECTION
+ AH = 0Bh
+ DX = FFFFh
+ AL = service name
+ 00h use parameter file or default
+ 01h use specified name
+ ES:DI -> 16-byte blank-padded name
+ BH = connection notification
+ 00h program awaiting connection, don't notify user
+ 01h notify user on connecting
+ BL = connection type
+ 00h connection will use Connection Manager API
+Return: AH = return code (00h-02h) (see #00303 at AH=00h/DX=FFFFh)
+ AL = connection ID if AH=00h
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=04h/DX=FFFFh,AH=0Ch/DX=FFFFh,AH=10h/DX=FFFFh
+--------S-140C-------------------------------
+INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
+ AH = 0Ch
+ DX = port number
+Return: AX = FFFFh character not available
+ AX = 00xxh character xx available
+SeeAlso: AH=08h"MBBIOS",AH=20h"FOSSIL"
+--------S-140C-------------------------------
+INT 14 - MBBIOS PACCOM support - BUFFER MANAGEMENT
+ AH = 0Ch
+ ES = segment of buffer to free, or 0000h to allocate new buffer
+Return: ES = segment of allocated buffer (if ES=0000h on entry)
+Note: the PACCOM version of MBBIOS uses only ES as buffer address for
+ AH=0Ah and AH=0Bh
+SeeAlso: AH=0Ah"MBBIOS",AH=0Bh"MBBIOS"
+--------N-140C--DXFFFF-----------------------
+INT 14 - Connection Manager - TEST FOR INBOUND CONNECTION REQUEST
+ AH = 0Ch
+ DX = FFFFh
+ AL = connection ID from AH=0Bh/DX=FFFFh
+Return: AH = return code (00h-03h) (see also #00303 at AH=00h/DX=FFFFh)
+ 03h not prepared for inbound connection
+ AL = connection ID (if AH=00h) or correct connection ID (if AH=02h)
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=03h/DX=FFFFh,AH=04h/DX=FFFFh,AH=0Bh/DX=FFFFh
+--------S-140D-------------------------------
+INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
+ AH = 0Dh
+Return: AX = result
+ FFFFh character not available
+ xxyyh standard IBM-style scan code
+SeeAlso: AH=0Eh
+--------S-140D-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - GET POINTER TO CH_KEY_RDY FLAG
+ AH = 0Dh
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: ES:BX -> CH_KEY_RDY flag (see #00339)
+SeeAlso: AH=0Ah"Digiboard"
+
+(Table 00339)
+Values for Digiboard CH_KEY_RDY flag:
+ 00h receive buffer empty
+ FFh characters available
+--------S-140D-------------------------------
+INT 14 - MBBIOS PACCOM support - SET TXD
+ AH = 0Dh
+ AL = new setting (FFh = 1.0)
+Return: nothing
+Desc: specify the time from RTS to start or packet
+SeeAlso: AX=0D00h,AH=0Eh"MBBIOS",AH=0Fh"MBBIOS"
+--------N-140D--DXFFFF-----------------------
+INT 14 - Connection Manager - TERMINATE CONNECTION CLIENT ACTIVITY
+ AH = 0Dh
+ DX = FFFFh
+Return: AH = return code
+ 00h successful
+ nonzero operation not terminated
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+Desc: end all Connection Client TSR activity to allow it to be removed from
+ memory
+SeeAlso: AH=05h/DX=FFFFh,AH=6Fh/BX=FFFFh
+--------S-140D00-----------------------------
+INT 14 - MBBIOS - GET AVAILABLE BYTES
+ AX = 0D00h
+Return: AX = bytes in transmit buffer
+ CX = bytes in receive buffer
+SeeAlso: AH=0Ah"MBBIOS",AH=0Bh"MBBIOS"
+--------S-140D01-----------------------------
+INT 14 - MBBIOS - LOWER ALL MODEM CONTROL SIGNALS
+ AX = 0D01h
+Return: nothing
+Note: this function lowers DTR, RTS, etc.
+SeeAlso: AX=0D02h
+--------S-140D02-----------------------------
+INT 14 - MBBIOS - RAISE ALL MODEM CONTROL SIGNALS
+ AX = 0D02h
+Return: nothing
+Note: this function raises DTR, RTS, etc.
+SeeAlso: AX=0D01h
+--------S-140D03-----------------------------
+INT 14 - MBBIOS - SET HANDSHAKE BYTE
+ AX = 0D03h
+ CL = new handshake byte
+Return: CL = previous handshake byte
+Note: this function lowers DTR, RTS, etc.
+--------S-140E-------------------------------
+INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
+ AH = 0Eh
+Return: AX = xxyyh standard IBM-style scan code
+SeeAlso: AH=0Dh"FOSSIL"
+--------S-140E-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - WRITE STRING
+ AH = 0Eh
+ CX = number of characters to write
+ ES:BX -> string
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AX = number of characters actually written
+ ZF clear if successful
+ ZF set on error
+SeeAlso: AH=0Fh"Digiboard"
+--------S-140E-------------------------------
+INT 14 - MBBIOS PACCOM support - SET PERSISTENCE
+ AH = 0Eh
+ AL = new setting (FFh = 1.0)
+Return: nothing
+Desc: specify the time from end of DCD to RTS
+SeeAlso: AH=0Dh"MBBIOS",AH=0Fh"MBBIOS"
+--------N-140E--DXFFFF-----------------------
+INT 14 - Connection Manager - SET HARDWARE FLOW STATE
+ AH = 0Eh
+ DX = FFFFh
+ AL = connection ID from AH=04h/DX=FFFFh
+ BL = RTS state (00h off, 01h on)
+Return: AH = return code (00h-03h) (see also #00303 at AH=00h/DX=FFFFh)
+ 03h invalid request (BL not 00h or 01h)
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=03h/DX=FFFFh,AH=0Ah/DX=FFFFh
+--------S-140F-------------------------------
+INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
+ AH = 0Fh
+ AL = bit mask describing requested flow control (see #00340)
+ DX = port number
+Return: nothing
+SeeAlso: AH=09h"MBBIOS",AH=10h"FOSSIL"
+
+Bitfields for FOSSIL requested flow control:
+Bit(s) Description (Table 00340)
+ 0 XON/XOFF on transmit (watch for XOFF while sending)
+ 1 CTS/RTS (CTS on transmit/RTS on receive)
+ 2 reserved
+ 3 XON/XOFF on receive (send XOFF when buffer near full)
+ 4-7 all 1
+--------S-140F-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - READ STRING
+ AH = 0Fh
+ CX = number of characters to read
+ ES:BX -> buffer
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AX = number of characters read
+ ZF clear if successful
+ ZF set on error (line status or wrong number of characters)
+SeeAlso: AH=0Eh"Digiboard"
+--------S-140F-------------------------------
+INT 14 - MBBIOS PACCOM support - SET SLOT TIME
+ AH = 0Fh
+ AL = new setting in clock ticks
+Return: nothing
+Desc: specify the time from end of DCD to RTS
+SeeAlso: AH=0Dh"MBBIOS",AH=0Eh"MBBIOS",AH=10h"MBBIOS"
+--------N-140F--DXFFFF-----------------------
+INT 14 - Connection Manager - RETURN ACTIVE CONNECTION PARAMETERS
+ AH = 0Fh
+ DX = FFFFh
+ AL = connection ID
+ CX = size of buffer or 0000h to get length of returned vector
+ ES:DI -> buffer for connection parameter vector (see #00311)
+Return: AH = return code (00h-02h,06h) (see #00303 at AH=00h/DX=FFFFh)
+ CX = number of bytes which could not be returned because the given
+ buffer was too small
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+SeeAlso: AH=08h/DX=FFFFh,AH=0Ah/DX=FFFFh
+--------S-1410-------------------------------
+INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
+ AH = 10h
+ AL = bit mask
+ bit 0: enable/disable ^C/^K checking
+ bit 1: enable/disable the transmitter
+ DX = port number
+Return: nothing
+SeeAlso: AH=0Fh"FOSSIL"
+--------S-1410-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER
+ AH = 10h
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ FFh error
+SeeAlso: AH=09h"Digiboard",AH=11h"Digiboard"
+--------S-1410-------------------------------
+INT 14 - MBBIOS PACCOM support - SET CRC WAIT
+ AH = 10h
+ AL = new setting in clock ticks (should be at least 5 character times)
+Return: nothing
+Desc: specify the time from start of last character to dropping RTS
+SeeAlso: AH=0Dh"MBBIOS",AH=0Fh"MBBIOS"
+--------N-1410--DXFFFF-----------------------
+INT 14 - Connection Manager - QUERY SERVICE NAMES
+ AH = 10h
+ DX = FFFFh
+ CL = subfunction
+ 00h search first
+ 01h search next
+ ES:DI -> pattern buffer (see #00341)
+Return: AH = return code (00h,01h,03h,06h) (see also #00303 at AH=00h/DX=FFFFh)
+ 01h no (more) matching names
+ 03h invalid request
+ ES:DI buffer filled with reply buffer (see #00341) containing matched
+ name if AH=00h
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+Desc: obtain the names of groups and lines available for connection requests,
+ and the names of active Connection Servers
+SeeAlso: AH=04h/DX=FFFFh,AH=0Bh/DX=FFFFh
+
+Format of Connection Manager pattern/reply buffer:
+Offset Size Description (Table 00341)
+ 00h WORD length of pattern (30h or 32h)
+ 02h 16 BYTEs server pattern or name
+ 12h 16 BYTEs group pattern or name
+ 22h 16 BYTEs line pattern or name
+ 23h BYTE (optional) ???
+ 24h BYTE (optional, returned) current line status
+ 00h available
+ 01h out of service
+ 02h currently allocated to a connection
+Note: pattern may include '?' wildcard to match any character
+--------S-1411-------------------------------
+INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
+ AH = 11h
+ DH = row
+ DL = column
+Return: nothing
+Note: this is the same as INT 10/AH=02h
+SeeAlso: AH=12h"FOSSIL"
+--------S-1411-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER
+ AH = 11h
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ FFh error
+SeeAlso: AH=09h"Digiboard",AH=10h"Digiboard"
+--------S-1411-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DISABLE PORT
+ AH = 11h
+ DX = port number
+Return: AL = status
+ 00h successful
+ 01h IRQ for port is shared
+ 02h IRQ was reserved
+SeeAlso: AH=04h"SERIAL",AH=05h"SERIAL",AH=12h"PC-MOS"
+--------S-1412-------------------------------
+INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
+ AH = 12h
+Return: DH = row
+ DL = column
+Note: this is the same as INT 10/AH=03h
+SeeAlso: AH=11h"FOSSIL"
+--------S-1412-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE
+ AH = 12h
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AX = number of bytes free
+SeeAlso: AH=0Ah"Digiboard",AH=14h"Digiboard"
+--------S-1412-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - GET CURRENT PORT PARAMETERS
+ AH = 12h
+ DX = port number
+Return: AH = status
+ FFh port number invalid
+ AL = line parameters (see #00304)
+ AH = flow control configuration (see #00336 at AH=05h"PC-MOS")
+ CX:BX = bps rate
+ DL = XOFF character or 00h for none
+ DH = XON character or 00h for none
+--------S-1413-------------------------------
+INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
+ AH = 13h
+ AL = character
+Return: nothing
+Note: should not be called if it is unsafe to call DOS
+SeeAlso: AH=15h
+--------S-1413-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - REGISTER A PORT WITH A TERMINAL
+ AH = 13h
+ DX = port number
+Return: AH = status
+ FFh port number invalid
+ else
+ ES:BX -> BYTE flag (00h buffer empty, FFh buffer contains data)
+SeeAlso: AH=17h"PC-MOS"
+--------S-1414-------------------------------
+INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
+ AH = 14h
+ AL = 01h enable watchdog
+ 00h disable watchdog
+ DX = port number
+Return: nothing
+SeeAlso: INT 21/AH=2Bh/CX=6269h"WDTSR"
+--------S-1414-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - OUTPUT STRING
+ AH = 14h
+ CX = number of characters in string
+ DX = port number
+ ES:BX -> string to be sent
+ SI = timeout in timer ticks or 0000h for default
+Return: AX = number of bytes actually sent
+ ZF clear if successful
+ ZF set on timeout
+SeeAlso: AH=01h,AH=15h"PC-MOS"
+--------S-1414-------------------------------
+INT 14 - Digiboard - GET NUMBER OF BOARDS INSTALLED
+ AH = 14h
+Return: AX = number of boards installed
+SeeAlso: AH=08h"Digiboard",AH=15h"Digiboard"
+--------S-1415-------------------------------
+INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
+ AH = 15h
+ AL = character
+Return: nothing
+SeeAlso: AH=13h"FOSSIL"
+--------S-1415-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - INPUT STRING
+ AH = 15h
+ CX = size of buffer
+ DX = port number
+ ES:BX -> buffer for received characters
+ SI = timeout in clock ticks or 0000h for default
+Return: AX = number of characters actually read
+ ZF set on timeout (no data available)
+SeeAlso: AH=02h,AH=14h"PC-MOS",AH=16h"PC-MOS"
+--------S-1415-------------------------------
+INT 14 - Digiboard - ENABLE/DISABLE MEMORY
+ AH = 15h
+ AL = new state (00h disabled, 01h enabled)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=14h"Digiboard",AH=16h"Digiboard"
+--------S-1416-------------------------------
+INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
+ AH = 16h
+ AL = function
+ 00h = delete
+ 01h = add
+ ES:DX -> routine to call
+Return: AX = status
+ 0000h successful
+ 0001h unsuccessful
+SeeAlso: AH=07h"FOSSIL"
+--------S-1416-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - LINK TO ANOTHER SERIAL DRIVER
+ AH = 16h
+ ES:BX -> calling driver's INT 14 entry point
+Return: nothing
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+--------S-1416-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND
+ AH = 16h
+ AL = CCB command number (see #00342) (see also following entries)
+ BL = byte 2
+ BH = byte 3
+ CL = byte 1 (for all channel functions except 4Eh and 4Fh)
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AX=1646h,AH=18h"Digiboard"
+
+(Table 00342)
+Values for Digiboard CCB command number:
+ 40h Set Receive Mid Water Mark
+ 41h Set Receive High Water Mark
+ 42h Flush Receive Buffer
+ 43h Flush Transmit Buffer
+ 44h Transmit Pause
+ 45h Transmit Resume
+ 46h Set Interrupt to Host Mask
+ 47h Set Baud, Data, Stop and Parity
+ 48h Send Break
+ 49h Set Modem Lines
+ 4Ah Set Break Count
+ 4Bh Set Handshake
+ 4Ch Set Xon/Xoff Characters
+ 4Dh Set Transmit Mid Water Mark
+ 4Eh IRQ Polling Timer to Host
+ 4Fh Buffer Set All
+ 50h Port On
+ 51h Port Off
+ 52h Receive Pause
+ 53h Special Character Interrupt
+ 54h RS-422 Enable
+--------S-141646-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET INTERRUPT TO HOST MASK
+ AX = 1646h
+ BL = bits to set
+ BH = bits to clear
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=1647h
+--------S-141647-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET BAUD/DATABITS/STOPBITS/PARITY
+ AX = 1647h
+ BL = baud
+ BH = datatype
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=1646h,AX=1649h
+--------S-141649-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET MODEM LINES
+ AX = 1649h
+ BL = bits to set
+ BH = bits to clear
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=1647h
+--------S-14164A-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET BREAK COUNT
+ AX = 164Ah
+ BL = break count
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=1649h,AX=164Bh
+--------S-14164B-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET HANDSHAKE
+ AX = 164Bh
+ BL = bits to set
+ BH = bits to clear
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=1649h,AX=164Ch
+--------S-14164C-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET XON/XOFF CHARACTERS
+ AX = 164Ch
+ BL = XON character
+ BH = XOFF character
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=164Bh,AX=164Dh
+--------S-14164D-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SET TRANSMIT MID-WATER MARK
+ AX = 164Dh
+ BX = new mid-water mark
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=164Ch,AX=164Eh,AX=164Fh
+--------S-14164E-----------------------------
+INT 14 - Digiboard - CCB COMMAND - IRQ POLLING TIMER TO HOST
+ AX = 164Eh
+ BL = ticks
+ BH = ???
+ CL = mode
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=164Dh
+--------S-14164F-----------------------------
+INT 14 - Digiboard - CCB COMMAND - BUFFER SET ALL
+ AX = 164Fh
+ BL = size
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=164Dh
+--------S-141653-----------------------------
+INT 14 - Digiboard - CCB COMMAND - SPECIAL CHARACTER INTERRUPT
+ AX = 1653h
+ BL = enable/disable
+ BH = special character
+ CL = byte 1
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h error
+ FFh error
+SeeAlso: AH=16h"Digiboard",AX=1646h
+--------S-1417-------------------------------
+INT 14 - FOSSIL - REBOOT SYSTEM
+ AH = 17h
+ AL = method
+ 00h = cold boot
+ 01h = warm boot
+SeeAlso: INT 16/AX=E0FFh,INT 19,INT 60/DI=0606h
+--------S-1417-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - WRITE MODEM CONTROL REGISTER
+ AH = 17h
+ AL = new value for UART's modem control register
+ DX = port number
+Return: nothing
+--------S-1418-------------------------------
+INT 14 - FOSSIL - READ BLOCK
+ AH = 18h
+ CX = maximum number of characters to transfer
+ DX = port number
+ ES:DI -> user buffer
+Return: AX = number of characters transferred
+SeeAlso: AH=19h"FOSSIL",AH=83h"COURIERS",AX=FF02h,INT 6B/AX=0100h
+--------S-1418-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND
+ AH = 18h
+ ES:BX -> 16-byte command string
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ 80h timeout
+ AL = mailbox status
+ 00h no errors
+ 8Xh BIOS error
+ ES:BX buffer filled in with mailbox string
+ ZF clear if no errors
+ ZF set if either status byte contains an error code
+SeeAlso: AH=16h"Digiboard"
+--------S-1418-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - GET DRIVER DESCRIPTION
+ AH = 18h
+ DX = port number
+Return: DS:BX -> 40-byte buffer containing a string identifying the serial
+ driver
+SeeAlso: AH=06h"PC-MOS"
+--------S-1419-------------------------------
+INT 14 - FOSSIL - WRITE BLOCK
+ AH = 19h
+ CX = maximum number of characters to transfer
+ DX = port number
+ ES:DI -> user buffer
+Return: AX = number of characters transferred
+SeeAlso: AH=18h"FOSSIL",AH=86h,INT 6B/AX=0000h
+--------S-1419-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT
+ AH = 19h
+ BL = flag
+ 00h disable special character interrupt
+ FFh enable interrupt
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: AH = status
+ 00h successful
+ FFh failed
+SeeAlso: AH=1Ah"Digiboard"
+--------S-1419-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - SELECTIVE BUFFER FLUSH
+ AH = 19h
+ AL = what to flush
+ bit 0: input buffer
+ bit 1: output buffer
+ DX = port number
+Return: nothing
+SeeAlso: AH=09h"PC-MOS"
+--------S-141A-------------------------------
+INT 14 - FOSSIL - BREAK BEGIN OR END
+ AH = 1Ah
+ AL = 00h stop sending 'break'
+ 01h start sending 'break'
+ DX = port number
+Return: nothing
+SeeAlso: AH=06h"FOSSIL",AH=8Ah,AH=FAh
+--------S-141A-------------------------------
+INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER
+ AH = 1Ah
+ BX = subfunction
+ 00h return pointer to special character flag byte
+ 01h return pointer to special character counter word
+ DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
+Return: ES:BX -> special character flag or counter
+Notes: flag is FFh if one or more special characters are in the receive
+ buffer; it is 00h and the counter is invalid if no special characters
+ are in the receive buffer
+ counter (if valid) contains the number of characters in the receive
+ buffer up to and including the last-received special character
+--------S-141B-------------------------------
+INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
+ AH = 1Bh
+ DX = port number
+ CX = size of user buffer
+ ES:DI -> user buffer for driver info (see #00343)
+Return: AX = number of characters transferred
+ CX = 3058h ("0X") (X00 FOSSIL only)
+ DX = 2030h (" 0") (X00 FOSSIL only)
+
+Format of FOSSIL driver info:
+Offset Size Description (Table 00343)
+ 00h WORD size of structure in bytes
+ 02h BYTE FOSSIL spec driver conforms to
+ 03h BYTE revision level of this specific driver
+ 04h DWORD pointer to ASCIZ identification string
+ 08h WORD size of the input buffer
+ 0Ah WORD number of bytes left in buffer
+ 0Ch WORD size of the output buffer
+ 0Eh WORD number of bytes left in buffer
+ 10h BYTE width of screen
+ 11h BYTE length of screen
+ 12h BYTE actual baud rate, computer to modem
+--------S-141C-------------------------------
+INT 14 - X00 FOSSIL - ACTIVATE PORT
+ AH = 1Ch
+ DX = port number
+Return: AX = 1954h if successful
+ BL = maximum function number supported (not including 7Eh and above)
+ BH = revision of FOSSIL specification supported
+Note: this is a duplicate of AH=04h, so that AH=04h may be made compatible
+ with the PS/2 BIOS in a future release
+SeeAlso: AH=04h"FOSSIL",AH=1Dh
+--------S-141D-------------------------------
+INT 14 - X00 FOSSIL - DEACTIVATE PORT
+ AH = 1Dh
+ DX = port number
+Return: none
+Notes: this is a duplicate of AH=05h, so that AH=05h may be made compatible
+ with the PS/2 BIOS in a future release
+ ignored if the port was never activated with AH=04h or AH=1Ch
+SeeAlso: AH=05h"FOSSIL",AH=1Ch
+--------S-141E-------------------------------
+INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION
+ AH = 1Eh
+ AL = break status
+ 00h if break
+ 01h if no break
+ BH = parity (see #00344)
+ BL = number of stop bits
+ 00h one stop bit
+ 01h two stop bits (1.5 if 5 bit word length)
+ CH = word length (see #00345)
+ CL = bps rate (see #00346)
+ DX = port number
+Return: AX = port status code (see #00304,#00305)
+Notes: this function is intended to exactly emulate the PS/2 BIOS AH=04h call
+ if the port was locked at X00 load time, the appropriate parameters are
+ ignored
+SeeAlso: AH=00h,AH=04h"SERIAL"
+
+(Table 00344)
+Values for X00 FOSSIL parity:
+ 00h no parity
+ 01h odd parity
+ 02h even parity
+ 03h stick parity odd
+ 04h stick parity even
+SeeAlso: #00307,#00345,#00346
+
+(Table 00345)
+Values for X00 FOSSIL word length:
+ 00h 5 bits
+ 01h 6 bits
+ 02h 7 bits
+ 03h 8 bits
+SeeAlso: #00308,#00344,#00346
+
+(Table 00346)
+Values for X00 FOSSIL bps rate:
+ 00h 110
+ 01h 150
+ 02h 300
+ 03h 600
+ 04h 1200
+ 05h 2400
+ 06h 4800
+ 07h 9600
+ 08h 19200
+SeeAlso: #00309,#00344,#00345
+--------S-141E------------------------------------
+INT 14 - HUNTER 16 - READ COMMS PARAMETERS
+ AH = 1Eh
+ CX = channel number (00h COM1, 01h COM2, ...)
+ DS:BX -> buffer for communications parameters (see #00347)
+Return: DS:BX buffer filled
+Note: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+SeeAlso: AH=20h"HUNTER"
+
+Format of HUNTER 16 communications parameters:
+Offset Size Description (Table 00347)
+ 00h BYTE communications type (00h IBM, nonzero Husky)
+ 01h BYTE port number (00h COM1, 01h COM2)
+ 02h BYTE baud rate (00h 110 bps, 01h 150, 02h 300, 03h 600, 04h 1200,
+ 05h 2400, 06h 4800, 07h 9600, 08h 19200, 09h 38400)
+ 03h BYTE data bits (01h seven, 02h eight)
+ 04h BYTE parity (00h none, 01h odd, 02h even)
+ 05h BYTE stop bits (00h one, 01h two)
+ 06h BYTE handshake (see #00348)
+ 07h BYTE handshake protocol (00h none, 01h Xon/Xoff, 02h HWK3780)
+ 08h BYTE Nulls after CR (0-20)
+ 09h BYTE LF (00h off, 01h on)
+ 0Ah BYTE Serig. 0..7Fh: Ignore this character
+ 80h: Serig off
+ 0Bh BYTE echo (00h off, 01h on)
+ 0Ch BYTE transmit timeout in seconds (1-60) or 00h to disable
+ 0Dh BYTE receive timeout in seconds (1-60) or 00h to disable
+ 0Eh 5 BYTEs reserved
+
+Bitfields for HUNTER 16 handshake:
+Bit(s) Description (Table 00348)
+ 0-1 0: RTS off, 1: RTS hold, 2: RTS true
+ 2 DTR enabled
+ 4 CTS enabled
+ 5 DSR enabled
+ 6 DCD enabled
+--------S-141F-------------------------------
+INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL
+ AH = 1Fh
+ DX = port number
+ AL = direction
+ 00h read modem control register
+ Return: BL = modem control register (see #00349)
+ AH = status
+ 01h write modem control register
+ BL = modem control register (see #00349)
+ Return: AX = status
+Notes: this function is intended to exactly emulate the PS/2 BIOS AH=05h call
+ X00 forces BL bit 3 set (interrupts cannot be disabled)
+SeeAlso: AH=00h,AH=05h"SERIAL"
+
+Bitfields for X00 FOSSIL modem control register:
+Bit(s) Description (Table 00349)
+ 0 data terminal ready
+ 1 request to send
+ 2 OUT1
+ 3 OUT2 (interrupts) enabled
+ 4 LOOP
+ 5-7 reserved
+--------S-1420-------------------------------
+INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT
+ AH = 20h
+ DX = port number
+Return: AH = 00h if character was available
+ AL = next character (removed from receive buffer)
+ AX = FFFFh if no character available
+SeeAlso: AH=0Ch,AH=21h"X00"
+--------S-1420-------------------------------
+INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT
+ AH = 20h
+ AL = logical port (01h COM1, 02h COM2)
+ DX = physical port number
+Return: AX = status
+ 0000h successful
+ FFFFh failed
+SeeAlso: AH=21h"Alloy",AH=22h"Alloy",AH=23h"Alloy",INT 17/AH=8Bh"Alloy"
+--------S-1420-------------------------------
+INT 14 - MultiDOS Plus - INITIALIZE PORT
+ AH = 20h
+ AL = port parameters (see #00300 at AH=00h"SERIAL")
+ DX = port number (0-3)
+Return: AH = status
+ 00h successful
+ 41h no such port
+ 64h monitor mode already active
+SeeAlso: AH=00h"SERIAL",AH=04h"MultiDOS",AH=21h"MultiDOS",AH=23h"MultiDOS"
+--------S-1420-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - CHECK OUTPUT QUEUE
+ AH = 20h
+ DX = port number
+Return: AX = number of bytes in output buffer
+SeeAlso: AH=0Ah"Digiboard"
+--------S-1420------------------------------------
+INT 14 - HUNTER 16 - SELECT COMMS PARAMETERS
+ AH = 20h
+ CX = channel number (00h COM1, 01h COM2, ...)
+ DS:BX -> buffer with communications parameter (see #00347)
+Return: AX = status
+ 0000h successful
+ 0001h invalid parameter
+SeeAlso: AH=1Eh"HUNTER",AH=21h"HUNTER"
+--------S-1421-------------------------------
+INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER
+ AH = 21h
+ AL = character
+ DX = port number
+Return: nothing
+Notes: the given character is inserted at the end of the receive buffer as if
+ it had just arrived from the serial port; all normal receive
+ processing (XON/XOFF, ^C/^K) is performed on the character
+ fully re-entrant
+SeeAlso: AH=20h"X00"
+--------S-1421-------------------------------
+INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT
+ AH = 21h
+ DX = physical port number
+Return: AX = status
+ 0000h successful
+ FFFFh failed
+SeeAlso: AH=20h"Alloy",AH=22h"Alloy"
+--------S-1421-------------------------------
+INT 14 - MultiDOS Plus - TRANSMIT CHARACTER
+ AH = 21h
+ AL = character to send
+ DX = port number
+Return: AH = status (see #00350)
+Note: monitor mode must have been turned on with AH=24h before calling
+SeeAlso: AH=20h"MultiDOS",AH=22h"MultiDOS",AH=24h"MultiDOS"
+
+(Table 00350)
+Values for MultiDOS Plus status:
+ 00h successful
+ 39h no DSR or CTS
+ 3Ch no DSR
+ 3Bh no CTS
+ 41h no such port
+ 42h monitor mode not active
+ 97h timed out
+--------S-1421-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - OUTPUT CHARACTER, WITH TIMEOUT
+ AH = 21h
+ AL = char to send
+ DX = port number
+ SI = timeout in timer ticks (0000h = default)
+Return: after character is sent or timeout expires
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+SeeAlso: AH=01h,AH=0Eh"Digiboard",AH=22h"PC-MOS"
+--------S-1421------------------------------------
+INT 14 - HUNTER 16 - EXTENDED CONTROL
+ AH = 21h
+ AL = command
+ 01h force transmission of buffer
+ 02h clear transmit buffer
+ 03h clear receive buffer
+ DX = port (00h COM1, 01h COM2)
+Return: AH = extended status
+Desc: executes the command on the selected port
+SeeAlso: AH=1Eh"HUNTER",AH=20h"HUNTER",AH=22h"HUNTER",AH=24h"HUNTER"
+--------S-1422-------------------------------
+INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT
+ AH = 22h
+ AL = logical port (01h COM1, 02h COM2)
+Return: AX = status (0000h successful)
+SeeAlso: AH=20h"Alloy",AH=21h"Alloy"
+--------S-1422-------------------------------
+INT 14 - MultiDOS Plus - RECEIVE CHARACTER
+ AH = 22h
+ DX = port number
+Return: AH = status (see also AH=21h"MultiDOS")
+ 00h successful
+ AL = character
+ 3Dh framing and parity error
+ 3Eh overrun error
+ 3Fh framing error
+ 40h parity error
+ 96h ring buffer overflow
+Note: if no character is available, this function waits until a character
+ arrives or an implementation-dependent timeout elapses
+SeeAlso: AH=20h"MultiDOS",AH=21h"MultiDOS",AH=27h
+--------S-1422-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - RECEIVE CHARACTER, WITH TIMEOUT
+ AH = 22h
+ DX = port number
+ SI = timeout in timer ticks (0000h = default)
+Return: AH = port status (see also #00304 at AH=03h)
+ bit 7 = 1 indicates time-out
+ AL = character received
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+SeeAlso: AH=02h,AH=0Fh"Digiboard",AH=21h"PC-MOS"
+--------S-1422------------------------------------
+INT 14 - HUNTER 16 - EXTENDED STATUS
+ AH = 22h
+ DX = port (00h COM1, 01h COM2)
+Return: AH = extended status
+ BX = number of characters in input buffer
+ CX = number of characters in output buffer
+Desc: returns the most recent Extended Status code for the port
+SeeAlso: AH=21h"HUNTER"
+--------S-1423-------------------------------
+INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID
+ AH = 23h
+ AL = logical port (01h COM1, 02h COM2)
+ DH = user ID
+ DL = process ID (DH,DL both FFh for current task)
+Return: AL = MW386 port mode (see #00351)
+ CX = MW386 port number
+ DH = owner's user ID
+ DL = owner's task ID
+SeeAlso: AH=20h"Alloy",INT 17/AH=8Bh"Alloy"
+
+Bitfields for MW386 port mode:
+Bit(s) Description (Table 00351)
+ 0 port is shared (spooler only)
+ 1 port is spooled instead of direct (spooler only)
+ 2 port is assigned as logical COM device, not in spooler
+ 3 port is free
+--------S-1423-------------------------------
+INT 14 - MultiDOS Plus - GET PORT STATUS
+ AH = 23h
+ DX = port number
+Return: AH = line status (see #00304 at AH=03h)
+ AL = modem status (see #00305 at AH=03h)
+SeeAlso: AH=03h,AH=07h"MultiDOS",AH=20h"MultiDOS"
+--------S-1423-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DECLARE PORT OWNERSHIP
+ AH = 23h
+ DX = port number
+ BX = TCB segment/selector address of owner task
+Return: nothing
+SeeAlso: AH=0Dh"Digiboard",AH=21h"PC-MOS",AH=22h"PC-MOS"
+--------S-1423------------------------------------
+INT 14 - HUNTER 16 - CONTROL HANDSHAKE LINES
+ AH = 23h
+ BH = handshake line to set (00h RTS, 01h DTR)
+ BL = new level (00h low, 01h high)
+Return: nothing
+Desc: sets the handshake lines of COM1 to the desired level
+SeeAlso: AH=21h"HUNTER",AH=24h"HUNTER"
+--------S-1424-------------------------------
+INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS
+ AH = 24h
+ CX = physical I/O port number
+ DS:DX -> configuration table (see #00352)
+Return: AH = 00h
+Note: invalid port numbers are merely ignored
+SeeAlso: INT 17/AH=96h
+
+Format of Alloy MW386 configuration table:
+Offset Size Description (Table 00352)
+ 00h BYTE baud rate (see #00353)
+ 01h BYTE data bits (00h=5, 01h=6, 02h=7, 03h=8)
+ 02h BYTE parity (00h none, 01h odd, 02h even)
+ 03h BYTE stop bits (00h=1, 01h=2)
+ 04h BYTE receive flow control
+ 00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS
+ 05h BYTE transmit flow control (as for receive)
+
+(Table 00353)
+Values for Alloy MW386 baud rate:
+ 00h 38400
+ 01h 19200
+ 02h 9600
+ 03h 7200
+ 04h 4800
+ 05h 3600
+ 06h 2400
+ 07h 2000
+ 08h 1200
+ 09h 600
+ 0Ah 300
+ 0Bh 150
+ 0Ch 134.5
+SeeAlso: #00309
+--------S-1424-------------------------------
+INT 14 - MultiDOS Plus - SET MONITOR MODE
+ AH = 24h
+ AL = port status storage
+ 00h single status for entire receive buffer
+ 01h separate status kept for each byte in receive buffer
+ DX = port number
+Return: AH = status
+ 00h successful
+ 3Ah invalid status storage specified
+ 41h no such port
+ 64h monitor mode already active
+Note: in monitor mode, MultiDOS redirects all BIOS video output to a serial
+ port
+SeeAlso: AH=20h"MultiDOS",AH=25h
+--------S-1424-------------------------------
+INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - ???
+ AH = 24h
+Return: ???
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+--------S-1424------------------------------------
+INT 14 - HUNTER 16 - CONTROL CTS HANDSHAKING
+ AH = 24h
+ AL = new CTS handshake state for COM1 (00h disabled, 01h enabled)
+Return: nothing
+SeeAlso: AH=23h"HUNTER",AH=25h"HUNTER",AH=26h"HUNTER"
+--------S-1425-------------------------------
+INT 14 - MultiDOS Plus - CLEAR BUFFERS
+ AH = 25h
+ AL = function
+ 00h only clear buffers
+ 01h clear buffers and deactivate
+ DX = port number
+Return: AH = status
+ 00h successful
+ 3Ah invalid function
+ 41h no such port
+ 42h monitor mode not active
+SeeAlso: AH=20h"MultiDOS",AH=24h"MultiDOS"
+--------S-1425------------------------------------
+INT 14 - HUNTER 16 - CONTROL RS232 DRIVERS
+ AH = 25h
+ AL = new state of RS232 drivers (00h off, 01h on)
+Return: nothing
+Note: this function can be used to save power by turning off the RS232
+ drivers. It can also be used to turn on the RS232 drivers before
+ connecting to a remote system to avoid "garbage" while the drivers
+ turn on.
+SeeAlso: AH=23h"HUNTER",AH=24h"HUNTER",AH=26h"HUNTER"
+--------S-1426------------------------------------
+INT 14 - HUNTER 16 - CONTROL RI POWER UP
+ AH = 26h
+ AL = 00h enable RI power up
+ else disable RI power up
+Return: nothing
+Desc: control whether the Ring Indicator handshake can power up the Hunter
+--------S-1427-------------------------------
+INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT
+ AH = 27h
+ DX = port number
+Return: AH = status
+ 00h successful
+ 41h no such port
+ 42h monitor mode not active
+ AL = number of characters in receive buffer
+--------S-1427------------------------------------
+INT 14 - HUNTER 16 - GET INSTALLED PROTOCOLS COUNT
+ AH = 27h
+ AL = number of extended protocols installed (since last call)
+Return: AL = total number installed, including new ones
+Desc: Returns the number of extended communication protocols installed
+SeeAlso: AH=25h"HUNTER",AH=28h"HUNTER"
+--------S-1428------------------------------------
+INT 14 - HUNTER 16 - GET PROTOCOL NAME
+ AH = 28h
+ AL = protocol handle
+ DS:BX -> 8 character buffer for protocol name
+Return: AH = status
+ 00h successful
+ DS:BX buffer filled with the protocol name
+ FFh failed
+SeeAlso: AH=27h"HUNTER",AH=29h"HUNTER"
+--------S-1429------------------------------------
+INT 14 - HUNTER 16 - GET PROTOCOL HANDLE
+ AH = 29h
+ DS:BX -> buffer containing the protocol name
+Return: AH = status
+ 00h successful
+ AL = handle
+ FFh failed
+SeeAlso: AH=28h"HUNTER",AH=2Ah"HUNTER"
+--------S-142A------------------------------------
+INT 14 - HUNTER 16 - EXTENDED PROTOCOL MENU
+ AH = 2Ah
+ AL = protocol handle
+Return: AH = status
+ 00h successful
+ FFh failed
+ AL = menu handle
+SeeAlso: AH=29h"HUNTER",AH=2Bh"HUNTER"
+--------S-142B------------------------------------
+INT 14 - HUNTER 16 - GET EXTENDED PROTOCOL PARAMETERS
+ AH = 2Bh
+ AL = protocol handle
+ DS:BX -> buffer for extended protocol parameters
+Return: AH = status
+ 00h successful
+ DS:BX buffer filled with extended parameters
+ FFh failed
+SeeAlso: AH=2Ah"HUNTER"
+--------S-142C00----------------------------------
+INT 14 - HUNTER 16 - GET DTR
+ AX = 2C00h
+Return: AH = 00h
+ BL = current state
+ 00h normal DTR operation
+ else DTR is forced high
+Desc: Indicates whether the DTR signal on COM1 is forced high
+Note: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+SeeAlso: AH=2Ch"SET DTR"
+--------S-142C------------------------------------
+INT 14 - HUNTER 16 - SET DTR
+ AH = 2Ch
+ AL nonzero
+ BL = new state
+ 00h normal operation
+ else force DTR high
+Return: AH = 00h
+Desc: determine whether the DTR signal on COM1 should be forced high
+SeeAlso: AX=2C00h
+--------N-1436-------------------------------
+INT 14 - ComShare - INSTALLATION CHECK
+ AH = 36h
+Return: AX = 4353h ('CS') if installed
+ BX = bitmap of installed ports (bit 0: COM1 is gateway, etc.)
+ CX reserved for future use
+ WORD DX:[0100h] = ComShare version number
+Program: The ComShare System is a modem-sharing program for NetBIOS and
+ NetWare-based networks by NashaKala Corporation
+Note: ComShare supports the standard BIOS INT 14h calls with a slight
+ change in the interpretation of speed values
+ (see #00309 at AH=04h"SERIAL")
+SeeAlso: AH=00h"SERIAL",AH=04h"SERIAL",AX=F4FFh
+--------t-144000-----------------------------
+INT 14 - I1541 - INSTALLATION CHECK
+ AX = 4000h
+Return: AX = 1541h if installed
+ BH = I1541 major version (BCD)
+ BL = I1541 minor version (BCD)
+ CX = 0000h
+--------t-144001-----------------------------
+INT 14 - I1541 - TEST IF 1541 CABLE CONNECTED
+ AX = 4001h
+Return: CF clear if connected
+ BL = LPT number where 1541 cable is connected (1..3)
+ CF set if cable not connected
+Desc: scan all the LPT ports searching for the adapter cable
+SeeAlso: AX=4000h
+--------t-144002-----------------------------
+INT 14 - I1541 - SELECT LPT PORT FOR OUTPUT
+ AX = 4002h
+ BL = LPT number (1..3)
+Return: CF clear if successful
+ CF set otherwise
+Desc: force the input output routines to work on the cable placed on LPT BL
+SeeAlso: AX=4001h
+--------t-144003-----------------------------
+INT 14 - I1541 - RESET ALL DEVICES
+ AX = 4003h
+Return: nothing
+Desc: send a reset pulse of 100ms to all CBM devices
+Note: it is necessary to wait about 2 seconds after reset before executing
+ other instructions
+SeeAlso: AX=4000h,AX=4004h
+--------t-144004-----------------------------
+INT 14 - I1541 - SEND LISTEN SIGNAL
+ AX = 4004h
+ BH = device number (0..15)
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see #00354)
+SeeAlso: AX=4005h,AX=4006h
+
+(Table 00354)
+Values for I1541 error number:
+ 00h device not present
+ 01h listener not ready
+ 02h missing EOI time-out
+ 03h EOI not completed
+ 04h data not released
+ 05h frame error
+--------t-144005-----------------------------
+INT 14 - I1541 - SEND SECONDARY ADDRESS FOR LISTEN
+ AX = 4005h
+ BL = channel number and mode (see #00355)
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see #00354)
+SeeAlso: AX=4004h,AX=4006h
+
+Bitfields for I1541 channel number and mode:
+Bit(s) Description (Table 00355)
+ 7-4 mode
+ 0110 read/write
+ 1110 close channel
+ 1111 open channel
+ 3-0 channel number
+--------t-144006-----------------------------
+INT 14 - I1541 - SEND UNLISTEN SIGNAL
+ AX = 4006h
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see #00354)
+SeeAlso: AX=4004h,AX=4005h
+--------t-144007-----------------------------
+INT 14 - I1541 - SEND TALK SIGNAL
+ AX = 4007h
+ BH = device number (0-15)
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see #00354)
+SeeAlso: AX=4008h,AX=4009h
+--------t-144008-----------------------------
+INT 14 - I1541 - SEND SECONDARY ADDRESS FOR TALK
+ AX = 4008h
+ BL = channel number and mode (see #00355)
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see also #00354)
+ 40h turn around time-out
+SeeAlso: AX=4007h,AX=4009h
+--------t-144009-----------------------------
+INT 14 - I1541 - SEND UNTALK SIGNAL
+ AX = 4009h
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see #00354)
+SeeAlso: AX=4007h,AX=4008h
+--------t-14400A-----------------------------
+INT 14 - I1541 - SEND A BYTE TO A DEVICE
+ AX = 400Ah
+ BL = byte to send
+ CL = last-byte flag
+ 00h more bytes follow
+ 01h this is the last byte to be sent
+Return: CF clear if successful
+ CF set on error
+ AL = error number (see #00354)
+SeeAlso: AX=4000h,AX=400Bh
+--------t-14400B-----------------------------
+INT 14 - I1541 - RECEIVE A BYTE FROM A DEVICE
+ AX = 400Bh
+Return: CF clear if successful
+ AL = byte received
+ CL = last-byte flag
+ 00h more bytes to follow
+ 01h received byte is the last
+ CF set on error
+ AL = error number
+ 80h EOI response required
+ 81h talker not ready
+ 82h clock not set
+ 83h clock not released
+ CL = 00h
+SeeAlso: AX=4000h,AX=400Ah
+--------t-14400C-----------------------------
+INT 14 - I1541 - WAIT
+ AX = 400Ch
+ CX = number of 838ns microticks to wait (0000h means 65536, ~55ms)
+Return: after wait period elapses
+SeeAlso: AX=4000h,AX=400Dh
+--------t-14400D-----------------------------
+INT 14 - I1541 - LONGWAIT
+ AX = 400Dh
+ DX:CX = number of 838ns microticks to wait
+ (0000h:0000h means 4294967296, about one hour)
+Example: To wait 1s you must set DX:CX=(1s/838ns)=1193180
+SeeAlso: AX=4000h,AX=400Ch
+--------t-14400E-----------------------------
+INT 14 - I1541 - GET INFO
+ AX = 400Eh
+Return: AX = LPT port I/O address in use (0000h if no cable in use)
+ BL = LPT number (1..3) in use (00h if no cable in use)
+ CF set if the cable is auto-detectable
+ CF clear if cable could not be auto-detected or is not present
+SeeAlso: AX=4000h
+--------S-1456-------------------------------
+INT 14 U - BWCOM14 - INSTALLATION CHECK
+ AH = 56h
+Return: CX = 0001h if installed
+Program: BWCOM14 is a network serial port emulator (simulating a Hayes modem
+ connected to the serial port) distributed as part of the
+ Beame&Whiteside BW-NFS package
+SeeAlso: AH=57h,AH=58h,INT 2F/AX=DF00h/BX=5445h
+--------S-1457-------------------------------
+INT 14 U - BWCOM14 - INITIALIZE
+ AH = 57h
+ DL = port number
+Return: AL = initialization status (00h successful, 01h already initialized)
+ CX = port status (0001h port redirected, 0002h and FFFFh failed)
+Note: after this call, all invocations of INT 14/AH=00h-03h for the specified
+ port will be handled by BWCOM14 until AH=58h is called
+SeeAlso: AH=00h"SERIAL",AH=56h,AH=58h
+--------S-1458-------------------------------
+INT 14 U - BWCOM14 - SHUTDOWN
+ AH = 58h
+Return: CX = status (0001h successful, 0002h not initialized)
+Note: after this call, BWCOM14 will no longer redirect the COM port
+SeeAlso: AH=56h,AH=57h
+--------N-146F--BXFFFE-----------------------
+INT 14 U - Connection Manager - ???
+ AH = 6Fh
+ BX = FFFEh
+ ???
+Return: ???
+Program: Connection Manager by Softwarehouse Corp. permits the sharing of
+ serial ports over an IPX or NetBIOS-based network
+--------N-146F--BXFFFF-----------------------
+INT 14 - Connection Manager - INSTALLATION CHECK
+ AH = 6Fh
+ BX = FFFFh
+Return: DX:BX -> Connection Manager Communication Table if installed
+ BX = FFFFh if not installed
+SeeAlso: AH=0Dh/DX=FFFFh
+--------S-146F00-----------------------------
+INT 14 - HP Vectra EX-BIOS - "F14_INQUIRE" - INSTALLATION CHECK
+ AX = 6F00h
+ BX <> 4850h (usually set to 0000h for simplicity)
+Return: BX = 4850h ("HP") if HP Extended BIOS serial port extensions available
+ AX destroyed
+Note: supported by original HP Vectra AT and by ES/QS/RS series Vectras
+SeeAlso: AX=6F01h,AX=6F02h,AX=6F03h,AX=6F04h,INT 10/AX=6F00h,INT 14/AX=6F00h
+SeeAlso: INT 17/AX=6F00h,INT 33/AX=6F00h
+--------S-146F01-----------------------------
+INT 14 - HP Vectra EX-BIOS - "F14_EXINIT" - INITIALIZE SERIAL PORT
+ AX = 6F01h
+ BX = port attributes (see #00356)
+ DX = port number (0-3)
+Return: AH = line status (see #00304)
+ AL = modem status (see #00305)
+Note: supported by original HP Vectra AT and by ES/QS/RS series Vectras
+SeeAlso: AX=6F00h
+
+Bitfields for HP Vectra Extended BIOS serial port attributes:
+Bit(s) Description (Table 00356)
+ 8-5 data rate (110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200)
+ 4-3 parity
+ 00 none
+ 01 odd
+ 10 none
+ 11 even
+ 2 stop bits (0 = one, 1 = two)
+ 1-0 bits per character
+ 10 seven-bit characters
+ 11 eight-bit characters
+ 0x undefined
+--------S-146F02-----------------------------
+INT 14 - HP Vectra EX-BIOS - "F14_PUT_BUFFER" - TRANSMIT BUFFER
+ AX = 6F02h
+ CX = number of characters in buffer
+ DX = port number (0-3)
+ ES:DI -> buffer containing characters
+Return: AH = line status (see #00304)
+ AL = modem status (see #00305)
+ CX = number of bytes actually sent
+ ES:DI -> next byte to be transferred (unchanged if all bytes sent)
+Desc: send characters from the specified buffer until all characters have
+ been sent or an error/timeout is encountered
+Note: supported by original HP Vectra AT and by ES/QS/RS series Vectras
+SeeAlso: AX=6F00h,AX=6F03h,AX=6F04h,INT 17/AX=6F02h
+--------S-146F03-----------------------------
+INT 14 - HP Vectra EX-BIOS - "F14_GET_BUFFER" - READ DATA INTO BUFFER
+ AX = 6F03h
+ CX = size of buffer
+ DX = port number (0-3)
+ ES:DI -> buffer for received characters
+Return: AH = line status (see #00304)
+ ---on error (AH bit 7 set)---
+ AL = 00h
+ ES:DI -> next byte to be transferred
+ ---if successful---
+ AL = last byte read
+ ES:DI unchanged
+ CX = number of bytes read
+Desc: read characters into the specified buffer until the buffer is filled
+ or a timeout occurs
+Notes: supported by original HP Vectra AT and by ES/QS/RS series Vectras
+ polls the Data Set Ready modem status and Data Ready line status bits
+ to determine when characters are available
+SeeAlso: AX=6F00h,AX=6F02h,AX=6F04h
+--------S-146F04-----------------------------
+INT 14 - HP Vectra EX-BIOS - "F14_TRM_BUFFER" - READ UNTIL TERMINATOR
+ AX = 6F04h
+ BL = lowest termination character
+ BH = highest termination character
+ CX = size of buffer
+ DX = port number (0-3)
+ ES:DI -> buffer for received characters
+Return: AH = line status (see #00304)
+ ---on error (AH bit 7 set)---
+ AL = 00h
+ ES:DI -> next byte to be transferred
+ ---if successful---
+ AL = last byte read
+ ES:DI unchanged
+ CX = number of bytes read
+Desc: read characters into the specified buffer until the buffer is filled,
+ a character in the specified range is received, or a timeout occurs
+Notes: supported by original HP Vectra AT and by ES/QS/RS series Vectras
+ polls the Data Set Ready modem status and Data Ready line status bits
+ to determine when characters are available
+SeeAlso: AX=6F00h,AX=6F02h,AX=6F03h
+--------U-147000-----------------------------
+INT 14 - NEWCOM - INSTALLATION CHECK
+ AX = 7000h
+Return: AX = 4E43h ('NC') if installed
+ BX = 4F4Dh ('OM') if installed
+ CH = major version number
+ CL = minor version number
+ DH = patch level
+ DL = language (currently: 00h English, 01h French)
+Program: Newcom is a DOS commandline-enhancer by kilobug@kali.isicom.fr
+SeeAlso: INT 2F/AX=D44Dh
+--------S-147E-------------------------------
+INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
+ AH = 7Eh
+ AL = code assigned to external application (80h-BFh)
+ 80h reserved for communications FOSSIL
+ 81h video FOSSIL
+ 82h reserved for keyboard FOSSIL
+ 83h reserved for system FOSSIL
+ ES:DX -> entry point
+Return: AX = 1954h
+ BL = code assigned to application (same as input AL)
+ DH = status
+ 00h failed
+ 01h successful
+SeeAlso: AH=7Fh,AH=80h"FOSSIL",AX=8100h,AH=82h"FOSSIL",AH=83h"FOSSIL"
+--------S-147F-------------------------------
+INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
+ AH = 7Fh
+ AL = code assigned to external application
+ ES:DX -> entry point
+Return: AX = 1954h
+ BL = code assigned to application (same as input AL)
+ DH = status
+ 00h failed
+ 01h successful
+SeeAlso: AH=7Eh
+--------S-1480-------------------------------
+INT 14 - COMMUNICATIONS FOSSIL
+ AH = 80h
+SeeAlso: AH=7Eh
+--------S-1480-------------------------------
+INT 14 - COURIERS.COM - INSTALLATION CHECK
+ AH = 80h
+Return: AH = E8h if loaded
+Program: COURIERS is a TSR utility by PC Magazine
+--------S-148000-----------------------------
+INT 14 - ARTICOM - INSTALLATION CHECK
+ AX = 8000h
+Return: AL = FFh if installed
+ BH = major version
+ BL = minor version
+Program: ArtiCom is an asynchronous communications driver by Artisoft which
+ works on top of NetBIOS and allows modem/serial-port sharing by
+ programs using INT 14 for serial I/O.
+Note: ArtiCom supports 32 simultaneous COM ports using multiport cards and
+ drivers
+SeeAlso: AH=00h"SERIAL",AH=01h,AH=02h,AH=03h,AH=04h"SERIAL",AH=05h"SERIAL"
+SeeAlso: AX=8001h,AX=8002h
+--------S-148000-----------------------------
+INT 14 - COMM-DRV v14.0 - READ PORT METRICS - GET ERROR CODE AND BUFFER STATUS
+ AX = 8000h
+ DX = port number
+Return: AX = code for last error (see #00357)
+ BX = number of characters in output buffer
+ CX = nubmer of characters in input buffer
+ DX = state flag (see #00358)
+Program: COMM-DRV is a universal serial communications driver by Willies'
+ Computer Software Company, which supports standard INT 14 and
+ FOSSIL calls as well as its own interfaces
+SeeAlso: AX=8001h"COMM-DRV",AX=8002h"COMM-DRV",AX=8003h"COMM-DRV"
+
+(Table 00357)
+Values for COMM-DRV error code:
+ 00h no error
+ 01h buffer not set or attempted to change buffer for active port
+ 02h port not active
+ 03h transmit buffer full
+ 04h receive buffer full
+ 05h syntax error
+ 06h invalid buffer size
+ 07h invalid port
+ 08h handler changed
+ 09h invalid baud rate
+ 0Ah invalid parity setting
+ 0Bh invalid data length
+ 0Ch invalid number of stop bits
+ 0Dh invalid protocol number
+ 0Eh IRQ changed
+ 0Fh port changged
+ 10h invalid threshold setting
+ 11h invalid IRQ number
+ 12h interrupts not enabled
+ 13h invalid break syntax
+ 14h fatal error
+ 15h CTS error
+ 16h invalid RS232 I/O port address
+ 17h environment variable not set
+ 18h error on IOCTL call
+ 19h error during atexit cleanup
+ 1Ah error mapping for direct calls
+ 1Bh error opening device
+ 1Ch unable to allocate memory
+ 1Dh error on external micro card
+ 1Eh card changed error
+ 1Fh card type error
+ 20h not supported
+ 21h parent port error
+ 22h card command buffer full
+ 23h no subdevice for this port
+ 24h unknown error
+ 25h external card busy
+ 26h no more timers available
+ 27h INT 14 vector changed
+ 28h INT 08 vector changed
+ 29h DPMI error
+ 2Ah TSR buffer too small (or nonexistent)
+ 2Bh out of asynchronous resources
+ 2Ch out of timer resources
+ 2Dh out of "other" timer resources
+ 2Eh file I/O error
+ 2Fh hardware memory > 64K
+
+Bitfields for state flag :
+Bit(s) Description (Table 00358)
+ 0 port is active
+ 1 output throttled (XOFF received, or DSR or CTS reset)
+ 2 input throttled (XOFF sent, or DTR or RTS reset)
+--------S-148001-----------------------------
+INT 14 - ARTICOM - UNLOAD ASYNCHRONOUS REDIRECTOR FROM MEMORY
+ AX = 8001h
+Return: AX = error code, if error (see #00360)
+SeeAlso: AX=8000h"ARTICOM",AX=8002h"ARTICOM",AX=8003h"ARTICOM"
+Index: uninstall;ARTICOM
+--------S-148001-----------------------------
+INT 14 - COMM-DRV v14.0 - READ PORT METRICS - GET PORT PARAMETERS
+ AX = 8001h
+ DX = port number
+Return: BX:DI -> Port Control Block (see #00367)
+SeeAlso: AX=8000h"COMM-DRV",AX=8002h"COMM-DRV",AX=8003h"COMM-DRV"
+--------S-148002-----------------------------
+INT 14 - ARTICOM - GET ASYNCHRONOUS REDIRECTOR STATUS
+ AX = 8002h
+ ES:DI -> buffer for redirector status structure (see #00359)
+Return: AX = error code, if error (see #00360)
+SeeAlso: AX=8000h"ARTICOM",AX=8003h"ARTICOM"
+
+Format of ARTICOM redirector status:
+Offset Size Description (Table 00359)
+ 00h WORD redirector major and minor version numbers
+ 02h WORD redirectable ports found
+ 04h WORD redirectable ports + local ports found
+ 06h WORD redirector internal buffer size
+ 08h WORD maximum servers maintained
+ 0Ah WORD number of adapters found
+--------S-148002-----------------------------
+INT 14 - COMM-DRV v14.0 - READ PORT METRICS - GET PORT PARAMETERS
+ AX = 8002h
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+ BX:DI -> Port Control Block (see #00367) (modifyable portion only)
+SeeAlso: AX=8000h"COMM-DRV",AX=8001h"COMM-DRV",AX=8003h"COMM-DRV"
+--------S-148003-----------------------------
+INT 14 - ARTICOM - TRANSLATE ERROR CODE TO ERROR STRING
+ AX = 8003h
+ CX = error number to translate (see #00360)
+Return: ES:DI -> ASCIZ error text or 0000h:0000h if unable to translate
+SeeAlso: AX=8000h
+
+(Table 00360)
+Values for ARTICOM error codes:
+ 00h "No error"
+ 01h "An invalid port number was specified"
+ 02h "Port is already redirected"
+ 03h "Too many ports redirected"
+ 04h "Cannot locate the server"
+ 05h "Server is busy"
+ 06h "Access denied"
+ 07h "Resource in use"
+ 08h "Resource in use - request queued"
+ 09h "No such resource"
+ 0Ah "Invalid username/password pair"
+ 0Bh "Noncompatible version number"
+ 0Ch "Can't remove from memory"
+ 0Dh "Bad NETBIOS adapter number"
+ 0Eh "No more entries in list"
+ 0Fh "Resource is not available at this time"
+ 10h "Invalid value to INT 14 call"
+--------S-148003-----------------------------
+INT 14 - COMM-DRV v14.0 - READ PORT METRICS - GET I/O BUFFER SIZES
+ AX = 8003h
+ DX = port number
+Return: AX = number of characters in input buffer
+ BX = input buffer size
+ CX = number of characters in output buffer
+ DX = output buffer size
+SeeAlso: AX=8000h"COMM-DRV",AX=8001h"COMM-DRV",AX=8002h"COMM-DRV"
+--------S-148004-----------------------------
+INT 14 - ARTICOM - ATTACH ASYNCHRONOUS RESOURCE
+ AX = 8004h
+ DX = port to redirect (COM1=0, COM2=1, ...)
+ CH = attach type
+ CL = adapter to use for attach, 0FFh to search all
+ ES:DI -> attachment structure (see #00361)
+Return: AX = error code, if error (see #00360)
+Note: The wildcard '*' is supported in the server and resource fields. If
+ wild cards are used then the first matching available server is
+ attached.
+SeeAlso: AX=8000h,AX=8003h,AX=8005h
+
+Format of ARTICOM attachment structure:
+Offset Size Description (Table 00361)
+ 00h 16 BYTEs server to look for attach
+ 10h 16 BYTEs attach to resource name
+ 20h 16 BYTEs username for attach
+ 30h 16 BYTEs password for username or resource
+ 40h BYTE attach type
+ 00h normal
+ 01h queue if resource is in use (not yet supported in v1.00)
+--------S-148005-----------------------------
+INT 14 - ARTICOM - DETACH ASYNCHRONOUS RESOURCE
+ AX = 8005h
+ DX = port to detach (COM1=0, COM2=1, ...)
+Return: AX = error code, if error (see #00360)
+Note: only a previously attached resource can be detached
+SeeAlso: AX=8000h,AX=8003h,AX=8004h
+--------S-148006-----------------------------
+INT 14 - ARTICOM - GET RESOURCE INFORMATION
+ AX = 8006h
+ BX = remote port (COM1=0, COM2=1, ...)
+ CL = adapter number, FFh to try all adapters
+ ES:DI -> resource information structure (see #00362)
+ DS:SI -> 16 byte server name. See note.
+Return: AX = error code, if error (see #00360)
+ BX = next remote port, recall to get next resource info
+Note: Wild cards supported in both the resource field and server name
+ string DS:SI. If wild cards used then first matching available
+ resource information is searched. Set the resource field to FFh to
+ return all resources.
+SeeAlso: AX=8000h,AX=8002h,AX=8003h,AX=8007h
+
+Format of ARTICOM resource information structure:
+Offset Size Description (Table 00362)
+ 00h BYTE 00h = free, else used
+ 01h 16 BYTEs resource name
+ 11h 16 BYTEs username of resource user
+ 21h WORD amount of time used
+ 23h WORD amount of time remaining
+ 53h 48 BYTEs description of resource
+ 93h 64 BYTEs initialization string for modem
+ B3h 32 BYTEs dial string for modem
+ D3h 32 BYTEs hang-up string for modem
+--------S-148007-----------------------------
+INT 14 - ARTICOM - GET REDIRECTED PORT INFORMATION
+ AX = 8007h
+ DX = port index (COM1=0, COM2=1, ...)
+ ES:DI -> buffer for port information structure (see #00363)
+Return: CF clear if redirection info returned and port is redirected
+ CF set if not a redirected port
+ AX = error code, if error (see #00360)
+SeeAlso: AX=8000h,AX=8003h,AX=8006h,AX=8008h
+
+Format of ARTICOM port information structure:
+Offset Size Description (Table 00363)
+ 00h 16 BYTEs server name resource is on
+ 10h BYTE adapter number server is on
+ 11h 16 BYTEs resource name
+ 21h WORD remote port index, use to get additional information
+ 23h WORD buffer size
+ 25h WORD baud rate (see #00364)
+ 26h BYTE modem status register
+ 27h BYTE modem control register
+ 28h BYTE line status register
+ 29h BYTE line control register
+ 2Ah BYTE flow control in use: 0 - NONE, 1 - XON/XOFF, 2 - RTS/CTS
+ 2Bh WORD send timeout in ticks
+ 2Dh WORD receive timeout in ticks
+ 2Fh WORD time used on remote port
+ 31h WORD time left before timeout
+ 33h BYTE if server changes allowed?
+ 34h WORD FFFFh (-1) if connection ok, else old port index
+
+(Table 00364)
+Values for ARTICOM baud rate:
+ 00h 110
+ 01h 150
+ 02h 300
+ 03h 600
+ 04h 1200
+ 05h 2400
+ 06h 4800
+ 07h 9600
+ 08h 19200
+ 09h 38400
+ 0Ah 57600
+ 0Bh 115200
+ 0Ch 134.5
+ 0Dh 1800
+ 0Eh 2000
+ 0Fh 3600
+ 10h 7200
+SeeAlso: #00309
+--------S-148008-----------------------------
+INT 14 - ARTICOM - GET AVAILABLE SERVER NAME
+ AX = 8008h
+ BX = server index (0,1,...)
+ ES:DI -> server name structure (see #00365)
+Return: AX = error code, if error (see #00360)
+ BX = next remote port, repeat call to get next available server
+Note: the wildcard '*' is supported in the server name field. Set the
+ server name to FFh to search for all servers.
+SeeAlso: AX=8000h,AX=8003h,AX=8007h
+
+Format of ARTICOM server name structure:
+Offset Size Description (Table 00365)
+ 00h 16 BYTEs (call) ASCIZ server name
+ 10h BYTE (ret) the adapter server is found
+--------S-148009-----------------------------
+INT 14 - ARTICOM - SET SEND AND RECEIVE TIMEOUTS
+ AX = 8009h
+ BX = send timeout in ticks
+ CX = receive timeout in ticks
+ DX = port index (COM1=0, COM2=1, ...)
+Return: nothing
+SeeAlso: AX=8000h,AX=800Ah
+--------S-14800A-----------------------------
+INT 14 - ARTICOM - MODIFY FLOW CONTROL
+ AX = 800Ah
+ BL = flow control type (00h none, 01h XON/XOFF, 02h RTS/CTS)
+ DX = port index (COM1=0, COM2=1, ...)
+Return: AX = error code, if error (see #00360)
+Note: for attached ports only!
+SeeAlso: AX=8000h,AX=8003h,AX=8009h
+--------S-148025-----------------------------
+INT 14 - ARTICOM - SET INTERNAL SEND/RECEIVE VECTOR
+ AX = 8025h
+ DS:DX -> address of trap function (see #00366) to call on read/write
+Return: nothing
+Note: setting the vector to a user function allows the redirector's activity
+ to be monitored.
+SeeAlso: AX=8000h,AX=8035h,INT 21/AH=25h
+
+(Table 00366)
+Values ARTICOM trap function is called with:
+ AH = operation
+ 80h reading character
+ 81h writing character
+ AL = character
+Return: AX must be preserved
+ far JUMP to old trap function (see AX=8035h)
+--------S-148035-----------------------------
+INT 14 - ARTICOM - GET INTERNAL SEND/RECEIVE VECTOR
+ AX = 8035h
+Return: ES:BX -> address of current send/receive routine
+Note: this function returns the address of the routine which is called
+ inside A-REDIR.EXE each time a character is received or sent on the
+ active COM port.
+SeeAlso: AX=8000h,AX=8025h,INT 21/AH=35h
+--------S-1481-------------------------------
+INT 14 - COURIERS.COM - CHECK IF PORT BUSY
+ AH = 81h
+ AL = port number (1-4)
+Return: AH = status
+ 00h port available
+ 01h port exists but already in use
+ 02h port nonexistent
+Program: COURIERS is a TSR utility by PC Magazine
+SeeAlso: AH=83h,AH=8Dh
+--------S-1481-------------------------------
+INT 14 - COMM-DRV - EXTENDED INITIALIZATION
+ AH = 81h
+ BX:DI -> port control block (see #00367)
+ DX = port number
+Return: AH = line status register (see #00304)
+ error if bit 7 set
+ AL = modem status register (see #00305)
+Program: COMM-DRV is a universal serial communications driver by Willies'
+ Computer Software Company, which supports standard INT 14 and
+ FOSSIL calls as well as its own interfaces
+Note: AX=8001h should be called first to fill in the port control block
+SeeAlso: AH=00h,AX=8001h,AH=82h"COMM-DRV",AH=86h"COMM-DRV"
+
+Format of COMM-DRV port control block:
+Offset Type Description (Table 00367)
+ 00h WORD port IO address
+ 02h WORD port IRQ
+ 04h WORD baud rate
+ 06h WORD parity
+ 08h WORD data bits
+ 0Ah WORD stop bits
+ 0Ch WORD break status (0000h off)
+ 0Eh WORD flow control protocol
+ 10h BYTE input block
+ 11h BYTE output block
+ 12h WORD low threshold
+ 14h WORD high threshold
+ 16h WORD segment of buffer
+ 18h WORD offset of buffer
+ 1Ah WORD input buffer length
+ 1Ch WORD output buffer length
+ 1Eh BYTE auxiliary address
+ 1Fh BYTE spare
+ 20h 4 WORDs spares
+--------V-148100-----------------------------
+INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION
+ AX = 8100h
+ ES:DI -> buffer for VFOSSIL information (see #00368)
+Return: AX = 1954h if installed
+SeeAlso: AH=7Eh,AX=8101h
+
+Format of VFOSSIL information:
+Offset Size Description (Table 00368)
+ 00h WORD size of information in bytes, including this field
+ 02h WORD VFOSSIL major version
+ 04h WORD VFOSSIL revision level
+ 06h WORD highest VFOSSIL application function supported
+--------V-148101-----------------------------
+INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
+ AX = 8101h
+ ES:DI -> buffer for application function table (see #00369)
+ CX = length of buffer in bytes
+Return: AX = 1954h if installed
+ BH = highest VFOSSIL application function supported
+Note: the number of initialized pointers in the application function table
+ will never exceed CX/4; if the buffer is large enough, BH+1 pointers
+ will be initialized
+SeeAlso: AX=8102h
+
+Format of VFOSSIL application function table:
+Offset Size Description (Table 00369)
+ 00h DWORD -> function to query current video mode (VioGetMode)(see #00374)
+ 04h DWORD -> function to set video mode (VioSetMode) (see #00375)
+ 08h DWORD -> function to query hardware config (VioGetConfig) (see #00376)
+ 0Ch DWORD -> function to write data in TTY mode (VioWrtTTY) (see #00377)
+ 10h DWORD -> function to get current ANSI state (VioGetANSI) (see #00378)
+ 14h DWORD -> function to set new ANSI state (VioSetANSI) (see #00379)
+ 18h DWORD -> function to get curr cursor position (VioGetCurPos)
+ (see #00380)
+ 1Ch DWORD -> function to set cursor position (VioSetCurPos) (see #00381)
+ 20h DWORD -> function to get cursor shape (VioGetCurType) (see #00382)
+ 24h DWORD -> function to set cursor shape (VioSetCurType) (see #00383)
+ 28h DWORD -> function to scroll screen up (VioScrollUp) (see #00384)
+ 2Ch DWORD -> function to scroll screen down (VioScrollDn) (see #00385)
+ 30h DWORD -> function to read cell string from screen (VioReadCellStr)
+ (see #00386)
+ 34h DWORD -> function to read char string from screen (VioReadCharStr)
+ (see #00387)
+ 38h DWORD -> function to write a cell string (VioWrtCellStr)
+ (see #00388)
+ 3Ch DWORD -> function to write char string, leaving attr (VioWrtCharStr)
+ (see #00389)
+ 40h DWORD -> function to write char string,const attr (VioWrtCharStrAttr)
+ (see #00390)
+ 44h DWORD -> function to replicate an attribute (VioWrtNAttr)
+ (see #00391)
+ 48h DWORD -> function to replicate a cell (VioWrtNCell)
+ (see #00392)
+ 4Ch DWORD -> function to replicate a character (VioWrtNChar)
+ (see #00393)
+
+Format of VFOSSIL video mode data structure:
+Offset Size Description (Table 00370)
+ 00h WORD length of structure including this field
+ 02h BYTE mode characteristics
+ bit 0: clear if MDA, set otherwise
+ bit 1: graphics mode
+ bit 2: color disabled (black-and-white)
+ 03h BYTE number of colors supported (1=2 colors, 4=16 colors, etc)
+ 04h WORD number of text columns
+ 06h WORD number of text rows
+ 08h WORD reserved
+ 0Ah WORD reserved
+ 0Ch DWORD reserved
+SeeAlso: #00374,#00375
+
+Format of VFOSSIL video configuration data:
+Offset Size Description (Table 00371)
+ 00h WORD structure length including this field
+ 02h WORD adapter type
+ 00h monochrome/printer
+ 01h CGA
+ 02h EGA
+ 03h VGA
+ 07h 8514/A
+ 04h WORD display type
+ 00h monochrome
+ 01h color
+ 02h enhanced color
+ 09h 8514
+ 06h DWORD adapter memory size
+SeeAlso: #00376
+
+Format of VFOSSIL cursor type record:
+Offset Size Description (Table 00372)
+ 00h WORD cursor start line
+ 02h WORD cursor end line
+ 04h WORD cursor width (always 01h)
+ 06h WORD cursor attribute (FFFFh = hidden)
+
+(Table 00373)
+Values for VFOSSIL error code:
+ 0000h successful
+ 0074h internal VIO failure
+ 0163h unsupported mode
+ 0166h invalid row value
+ 0167h invalid column value
+ 017Eh buffer too small
+ 01A5h invalid VIO parameter
+ 01B4h invalid VIO handle
+
+(Table 00374)
+Call VioGetMode with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to video mode data structure (see #00370)
+Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see #00373)
+SeeAlso: #00375
+
+(Table 00375)
+Call VioSetMode with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to video mode data structure (see #00370)
+Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see #00373)
+SeeAlso: #00374
+
+(Table 00376)
+Call VioGetConfig with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to video configuration data buffer (see #00371)
+Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see #00373)
+
+(Table 00377)
+Call VioWrtTTY with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD length of string
+ DWORD pointer to character string to be written to screen
+Return: AX = error code (00h, 74h, 1B4h) (see #00373)
+Notes: write wraps at end of line and terminates if it reaches end of screen
+ in ANSI mode, ANSI control sequences are interpreted, and this func is
+ not required to be reentrant; in non-ANSI mode, the function is
+ reentrant and may be called from within an MS-DOS function call
+
+(Table 00378)
+Call VioGetANSI with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to WORD which will be set to 00h if ANSI is off
+ or 01h if ANSI is on
+Return: AX = error code (00h, 74h, 1B4h) (see #00373)
+SeeAlso: #00379
+
+(Table 00379)
+Call VioSetANSI with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to WORD indicating new state of ANSI
+ 00h off, 01h on
+Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see #00373)
+SeeAlso: #00378
+
+(Table 00380)
+Call VioGetCurPos with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to WORD to hold current cursor column (0-based)
+ DWORD pointer to WORD to hold current cursor row (0-based)
+Return: AX = error code (00h, 74h, 1B4h) (see #00373)
+SeeAlso: #00381
+
+(Table 00381)
+Call VioSetCurPos with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD cursor column
+ WORD cursor row
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: if either coordinate is invalid, the cursor is not moved
+SeeAlso: #00380
+
+(Table 00382)
+Call VioGetCurType with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to cursor type record (see #00372)
+Return: AX = error code (00h, 74h, 1B4h) (see #00373)
+SeeAlso: #00383
+
+(Table 00383)
+Call VioSetCurType with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to cursor type record (see #00372)
+Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see #00373)
+SeeAlso: #00384
+
+(Table 00384)
+Call VioScrollUp with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to char/attr cell for filling emptied rows
+ WORD number or rows to scroll (FFFFh = clear area)
+ WORD right column of scroll area
+ WORD bottom row of scroll area
+ WORD left column of scroll area
+ WORD top row of scroll area
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+SeeAlso: #00385,INT 10/AH=06h
+
+(Table 00385)
+Call VioScrollDn with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to char/attr cell for filling emptied rows
+ WORD number or rows to scroll (FFFFh = clear area)
+ WORD right column of scroll area
+ WORD bottom row of scroll area
+ WORD left column of scroll area
+ WORD top row of scroll area
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+SeeAlso: #00384,INT 10/AH=07h
+
+(Table 00386)
+Call VioReadCellStr with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start reading
+ WORD row at which to start reading
+ DWORD pointer to WORD containing length of buffer in bytes
+ on return, WORD contains number of bytes actually read
+ DWORD pointer to buffer for cell string
+Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see #00373)
+
+(Table 00387)
+Call VioReadCharStr with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start reading
+ WORD row at which to start reading
+ DWORD pointer to WORD containing length of buffer in bytes
+ on return, WORD contains number of bytes actually read
+ DWORD pointer to buffer for character string
+Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see #00373)
+
+(Table 00388)
+Call VioWrtCellStr with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start writing
+ WORD row at which to start writing
+ WORD length of cell string in bytes
+ DWORD pointer to cell string to write
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: write wraps at end of line and terminates if it reaches end of screen
+
+(Table 00389)
+Call VioWrtCharStr with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start writing
+ WORD row at which to start writing
+ WORD length of character string
+ DWORD pointer to character string to write
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: write wraps at end of line and terminates if it reaches end of screen
+
+(Table 00390)
+Call VioWrtCharStrAttr with:
+ STACK: WORD VIO handle (must be 00h)
+ DWORD pointer to attribute to be applied to each character
+ WORD column at which to start writing
+ WORD row at which to start writing
+ WORD length of character string
+ DWORD pointer to character string to write
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: write wraps at end of line and terminates if it reaches end of screen
+
+(Table 00391)
+Call VioWrtNAttr with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start writing
+ WORD row at which to start writing
+ WORD number of times to write attribute
+ DWORD pointer to display attribute to replicate
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: write wraps at end of line and terminates if it reaches end of screen
+
+(Table 00392)
+Call VioWrtNCell with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start writing
+ WORD row at which to start writing
+ WORD number of times to write cell
+ DWORD pointer to cell to replicate
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: write wraps at end of line and terminates if it reaches end of screen
+
+(Table 00393)
+Call VioWrtNChar with:
+ STACK: WORD VIO handle (must be 00h)
+ WORD column at which to start writing
+ WORD row at which to start writing
+ WORD number of times to write character
+ DWORD pointer to character to replicate
+Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see #00373)
+Note: write wraps at end of line and terminates if it reaches end of screen
+--------V-148102-----------------------------
+INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL
+ AX = 8102h
+Return: AX = 1954h
+Note: terminates all operations; after this call, the video FOSSIL may either
+ be removed from memory or reinitialized
+SeeAlso: AX=8101h,AX=8103h
+--------V-148103-----------------------------
+INT 14 - VIDEO FOSSIL - UNINSTALL
+ AX = 8103h
+Return: AX = 1954h
+Note: this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM
+--------K-1482-------------------------------
+INT 14 - KEYBOARD FOSSIL
+ AH = 82h
+SeeAlso: AH=7Eh
+--------S-1482-------------------------------
+INT 14 - COURIERS.COM - CONFIGURE PORT
+ AH = 82h
+ AL = port number (1-4)
+ BX = speed (bps)
+ CX = bit flags
+ bit 0: enable input flow control
+ bit 1: enable output flow control
+ bit 2: use X.PC protocol (not yet implemented)
+Return: nothing
+SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC"
+--------S-1482-------------------------------
+INT 14 - COMM-DRV v14.0 - PORT CLEANUP
+ AH = 82h
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+Desc: reset the port to its state before the AH=81h initialization and unhook
+ any interrupts used by the port
+SeeAlso: AH=81h"COMM-DRV",AH=83h"COMM-DRV"
+----------1483-------------------------------
+INT 14 - SYSTEM FOSSIL
+ AH = 83h
+SeeAlso: AH=7Eh
+--------S-1483-------------------------------
+INT 14 - COURIERS.COM - START INPUT
+ AH = 83h
+ ES:BX -> circular input buffer
+ CX = length of buffer
+ (should be at least 128 bytes if input flow control enabled)
+Return: nothing
+SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI"
+--------S-1483-------------------------------
+INT 14 - COMM-DRV v14.0 - FLUSH COMMUNICATION BUFFERS
+ AH = 83h
+ DX = port number
+ AL = subfunction
+ 00h flush input buffer
+ 01h flush output buffer
+ 02h flush both buffers
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+SeeAlso: AH=81h"COMM-DRV",AH=84h"COMM-DRV"
+--------S-1484-------------------------------
+INT 14 - COURIERS.COM - READ CHARACTER
+ AH = 84h
+Return: ZF set if no characters available
+ ZF clear
+ AL = character
+ AH = modem status bits
+ bit 7: set on input buffer overflow
+SeeAlso: AH=02h,AH=86h,AH=89h
+--------S-1484-------------------------------
+INT 14 - COMM-DRV v14.0 - SEND PACKET
+ AH = 84h
+ CX = packet length in bytes
+ DX = port number
+ ES:DI -> packet to be sent
+Return: AH = line status (see #00304)
+ bit 7 set on error
+ AL destroyed
+SeeAlso: AH=83h"COMM-DRV",AH=85h"COMM-DRV",AH=86h"COMM-DRV"
+--------S-1485-------------------------------
+INT 14 - COURIERS.COM - FLUSH PENDING INPUT
+ AH = 85h
+Return: nothing
+SeeAlso: AH=0Ah,AH=88h"COURIERS"
+--------S-1485-------------------------------
+INT 14 - COMM-DRV v14.0 - RECEIVE PACKET
+ AH = 85h
+ CX = length of packet in bytes
+ DX = port number
+ ES:DI -> buffer for packet
+Return: AH = line status (see #00304)
+ bit 7 set on error
+ AL destroyed
+Note: this call requires that at least the requested number of bytes are
+ already present in the input buffer, and will fail if there are
+ fewer bytes available
+SeeAlso: AH=84h"COMM-DRV",AH=86h"COMM-DRV",AH=8Eh"COMM-DRV"
+--------S-1486-------------------------------
+INT 14 - COURIERS.COM - START OUTPUT
+ AH = 86h
+ ES:BX -> output buffer
+ CX = length of output buffer
+Return: nothing
+SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI"
+--------S-1486-------------------------------
+INT 14 - COMM-DRV v14.0 - SET INPUT/OUTPUT TIMEOUTS
+ AH = 86h
+ BL = maximum clock ticks to wait before signalling error on input func
+ BH = maximum clock ticks to wait before signalling error on output
+ DX = port number
+ SI = input timeout in clock ticks if BL=FFh and BH=FFh
+ DI = output timeout in clock ticks if BL=FFh and BH=FFh
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+Note: functions 02h, 85h, and 8Eh will wait for the input timeout before
+ returning an error when no data is available; functions 01h and 84h
+ will wait for the output timeout before returning an error if there
+ is no space to output the data
+SeeAlso: AH=01h,AH=02h,AH=84h"COMM-DRV",AH=85h"COMM-DRV",AH=8Eh"COMM-DRV"
+--------S-1487-------------------------------
+INT 14 - COURIERS.COM - OUTPUT STATUS
+ AH = 87h
+Return: AX = number of unsent characters
+SeeAlso: AH=88h"COURIERS"
+--------S-1487-------------------------------
+INT 14 - COMM-DRV v14.0 - TURN ON DTR
+ AH = 87h
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+SeeAlso: AX=8000h"COMM-DRV",AH=88h"COMM-DRV",AH=89h"COMM-DRV"
+--------S-1488-------------------------------
+INT 14 - COURIERS.COM - ABORT OUTPUT
+ AH = 88h
+SeeAlso: AH=09h"FOSSIL",AH=85h"COURIERS"
+--------S-1488-------------------------------
+INT 14 - COMM-DRV v14.0 - TURN OFF DTR
+ AH = 88h
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+Program: COMM-DRV is a universal serial communications driver by Willies'
+ Computer Software Company, which supports standard INT 14 and
+ FOSSIL calls as well as its own interfaces
+SeeAlso: AX=8000h"COMM-DRV",AH=87h"COMM-DRV",AH=8Ah"COMM-DRV"
+--------S-1489-------------------------------
+INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
+ AH = 89h
+ CL = character to send
+Return: nothing
+SeeAlso: AH=01h,AH=84h"COURIERS"
+--------S-1489-------------------------------
+INT 14 - COMM-DRV v14.0 - TURN ON RTS
+ AH = 89h
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+SeeAlso: AX=8000h"COMM-DRV",AH=87h"COMM-DRV",AH=8Ah"COMM-DRV"
+--------S-148A-------------------------------
+INT 14 - COURIERS.COM - SEND BREAK
+ AH = 8Ah
+Return: nothing
+SeeAlso: AH=89h"COURIERS",AH=FAh
+--------S-148A-------------------------------
+INT 14 - COMM-DRV v14.0 - TURN OFF RTS
+ AH = 8Ah
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+SeeAlso: AX=8000h"COMM-DRV",AH=88h"COMM-DRV",AH=89h"COMM-DRV"
+--------S-148B-------------------------------
+INT 14 - COMM-DRV v14.0 - SET USER INTERRUPT ROUTINE
+ AH = 8Bh
+ CX = bitmask of interrupt to process
+ 00h = deinstall
+ BX:DI -> DWORD containing address of function to be called
+Return: AH bit 7 clear if successful
+ AH bit 7 set on error
+--------S-148C-------------------------------
+INT 14 - COURIERS.COM - SET SPEED
+ AH = 8Ch
+ BX = speed in bps
+Return: nothing
+SeeAlso: AH=00h,AH=82h"COURIERS"
+--------S-148C-------------------------------
+INT 14 - COMM-DRV v14.0 - READ UART REGISTER
+ AH = 8Ch
+ AL = register offset
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+ AL = contents of UART register
+SeeAlso: AH=8Dh"COMM-DRV"
+--------S-148D-------------------------------
+INT 14 - COURIERS.COM - DECONFIGURE PORT
+ AH = 8Dh
+Return: nothing
+SeeAlso: AH=82h"COURIERS"
+--------S-148D-------------------------------
+INT 14 - COMM-DRV v14.0 - WRITE UART REGISTER
+ AH = 8Dh
+ AL = register offset
+ BL = new value for UART register
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+SeeAlso: AH=8Ch"COMM-DRV"
+--------S-148E-------------------------------
+INT 14 - COMM-DRV v14.0 - READ PACKET NONDESTRUCTIVELY
+ AH = 8Eh
+ CX = length of packet in bytes
+ DX = port number
+ ES:DI -> buffer for packet
+Return: AH = line status (see #00304)
+ bit 7 set on error (see AX=8000h"COMM-DRV")
+ AL destroyed
+Program: COMM-DRV is a universal serial communications driver by Willies'
+ Computer Software Company, which supports standard INT 14 and
+ FOSSIL calls as well as its own interfaces
+Desc: retrieve a packet from the input buffer without removing it from the
+ buffer
+Note: this call requires that at least the requested number of bytes are
+ already present in the input buffer, and will fail if there are
+ fewer bytes available
+SeeAlso: AX=8000h"COMM-DRV",AH=84h"COMM-DRV",AH=85h"COMM-DRV",AH=86h"COMM-DRV"
+--------S-14A0-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT
+ AH = A0h
+ ES:BX -> ASCIZ internet host name
+ CX = length of name
+Return: AH = return code (00h,04h-06h,08h,0Ah-0Ch) (see #00394)
+ CL = session ID
+Program: the Bridge Application Program Interface is a set of functions which
+ makes many of the details of LAN communications transparent
+Note: Novell TELAPI.EXE returns AH=09h (not supported) and CL=00h
+SeeAlso: AH=A1h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AX=AF00h
+
+(Table 00394)
+Values for 3com BAPI return code:
+ 00h successful
+ 01h no characters written
+ 02h no characters read
+ 03h no such session
+ 04h clearinghouse name not found
+ 05h no response from host
+ 06h no more sessions available
+ 07h session aborted
+ 08h invalid clearinghouse name
+ 09h not supported
+ 0Ah internal (general) network error
+ 0Bh out of memory
+ 0Ch invalid IP address
+--------S-14A0--CXFFFF-----------------------
+INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT
+ AH = A0h
+ CX = FFFFh
+Return: CF clear if successful
+ AX = 5445h ('TE')
+ CX <> FFFFh
+ DX = port number
+ CF set on error
+Program: TES is a network serial port emulation program
+SeeAlso: AH=A1h"TES"
+--------S-14A1-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT
+ AH = A1h
+ DH = session ID (00h for external session managment)
+Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see #00394)
+ AL destroyed (Novell TELAPI.EXE)
+SeeAlso: AH=A0h"BAPI"
+--------S-14A1-------------------------------
+INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS
+ AH = A1h
+Return: CX = number of active sessions
+ ES:SI -> status array (see #00395)
+SeeAlso: AH=A2h"TES",AH=A3h"TES"
+
+Format of Interconnections TES status array entry:
+Offset Size Description (Table 00395)
+ 00h BYTE status
+ 01h WORD offset of name
+--------S-14A2-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - WRITE CHARACTER
+ AH = A2h
+ AL = character
+ DH = session ID (00h for external session managment)
+Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see #00394)
+SeeAlso: AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
+--------S-14A2-------------------------------
+INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES
+ AH = A2h
+Return: CX = number of servers
+ ES:SI -> array of offsets from ES for server names
+SeeAlso: AH=A1h"TES"
+--------S-14A3-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - READ CHARACTER
+ AH = A3h
+ DH = session ID (00h for external session managment)
+Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see #00394)
+ AL = character read or 00h if none available
+SeeAlso: AH=A0h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AH=A7h"BAPI"
+--------S-14A3-------------------------------
+INT 14 - Interconnections Inc. TES - START A NEW SESSION
+ AH = A3h
+ ES:SI -> ???
+Return: CF clear if successful
+ AX = 5445h ('TE')
+ CX <> FFFFh
+ DX = port number
+ CF set on error
+SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES"
+--------S-14A4-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK
+ AH = A4h
+ CX = length of buffer in bytes
+ DH = session ID (00h for external session managment)
+ ES:BX -> buffer containing data
+Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see #00394)
+ CX = number of bytes actually sent
+SeeAlso: AH=19h,AH=86h,AH=A0h"BAPI",AH=A5h"BAPI"
+--------S-14A4-------------------------------
+INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION
+ AH = A4h
+ ???
+Return: ???
+SeeAlso: AH=A3h"TES",AH=A5h"TES"
+--------S-14A5-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - READ BLOCK
+ AH = A5h
+ CX = length of buffer
+ DH = session ID (00h for external session managment)
+ ES:BX -> buffer for data
+Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see #00394)
+ CX = number of bytes actually read
+SeeAlso: AH=18h,AH=83h"COURIERS",AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
+SeeAlso: AH=A7h"BAPI",AX=FF02h
+--------S-14A5-------------------------------
+INT 14 - Interconnections Inc. TES - RESUME A SESSION
+ AH = A5h
+ AL = session number
+Return: ???
+SeeAlso: AH=A4h"TES",AH=A6h"TES"
+--------S-14A6-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK
+ AH = A6h
+ DH = session ID (00h for external session managment)
+Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see #00394)
+Desc: generate a short break signal; if data delivery was turned off by the
+ break, wait for the host to turn it on again
+SeeAlso: AH=1Ah,AH=8Ah,AH=FAh,AH=A0h"BAPI"
+--------S-14A6-------------------------------
+INT 14 - Interconnections Inc. TES - DROP A SESSION
+ AH = A6h
+ AL = session number
+Return: AH = status
+ 00h successful
+ else error
+SeeAlso: AH=A3h"TES",AH=A5h"TES"
+--------S-14A7-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - READ STATUS
+ AH = A7h
+ DH = session ID (00h for external session managment)
+Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see #00394)
+ CX = number of bytes available for reading
+Note: Novell TELAPI.EXE v4.01 always returns either 0 or 1 bytes available
+SeeAlso: AH=A5h"BAPI"
+--------S-14A7-------------------------------
+INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION
+ AH = A7h
+ ???
+Return: ???
+SeeAlso: AH=A3h"TES",AH=A5h"TES"
+--------S-14A8-------------------------------
+INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER
+ AH = A8h
+ AL = 00h no visible response
+ ES:SI -> ASCIZ command
+Return: ???
+--------N-14A8-------------------------------
+INT 14 - Novell TelAPI v4.01 - CONNECTION INFORMATION???
+ AH = A8h
+ DH = session ID???
+ CH = subfunction
+ 02h ???
+ 0Dh ???
+ 0Fh ???
+ 10h ???
+ 11h ???
+ 28h ???
+ else
+ Return: AH = 09h (not supported)
+Return: AH = return code (see #00394)
+ 00h successful
+ CL = ??? (0/1/8) (subfunctions 02h,0Dh,0Fh,10h)
+ CL = ??? (7Fh/FFh) (subfunction 28h)
+ CX = ??? (subfunction 11h)
+SeeAlso: AH=A9h"TelAPI"
+--------N-14A9-------------------------------
+INT 14 - Novell TelAPI v4.01 - CONNECTION CONTROL???
+ AH = A9h
+ DH = session ID???
+ CH = subfunction
+ 02h ???
+ 0Dh ???
+ 0Fh ???
+ 10h ???
+ 11h ???
+ 28h ???
+ else
+ Return: AH = 09h (not supported)
+ ???
+Return: AH = return code (see #00394)
+ ???
+SeeAlso: AH=A8h"TelAPI",AH=E4h,INT 6B/AX=0600h
+--------V-14AA01-----------------------------
+INT 14 - DimVGA v2.0+ - INSTALLATION CHECK
+ AX = AA01h
+Return: AX = FFFFh if installed, unchanged
+ BX = version (v1.5+ only), BH = major, BL = minor (v1.5 = 0105h)
+ CX = resident segment (v3.1+)
+Program: DimVGA is a public domain screen saver by Menno Pieters
+SeeAlso: AX=AA02h,AX=AA03h,AX=AA06h,INT 11/AX=0225h/BX=6900h,INT 12"KEYBUI"
+SeeAlso: INT 2D/AL=10h"Burnout Plus",INT 2F/AX=6400h,INT 2F/AH=93h
+SeeAlso: INT 2F/AX=C000h"VGAsave",INT 2F/AX=C000h"AD-DOS",INT 2F/AX=C050h
+SeeAlso: INT 2F/AX=E300h
+Index: screen saver;DimVGA
+--------V-14AA02-----------------------------
+INT 14 - DimVGA v2.0+ - SET TIME-OUT (DIMMING/BLANKING) PERIOD
+ AX = AA02h
+ BX = number of clock ticks
+Return: AX = FFFFh
+Note: on screen modes with 256 or less colors DimVGA will dim the screen,
+ when more than 256 colors can be used DimVGA will blank the screen.
+SeeAlso: AX=AA01h,AX=AA03h,AX=AA04h,AX=AA06h
+Index: screen saver;DimVGA
+--------V-14AA03-----------------------------
+INT 14 - DimVGA v2.0+ - SET DIMMING FACTOR
+ AX = AA03h
+ BX = percentage remaining visible (1-99)
+Return: AX = FFFFh
+SeeAlso: AX=AA02h,AX=AA05h,AX=AA06h
+Index: screen saver;DimVGA
+--------V-14AA04-----------------------------
+INT 14 - DimVGA v2.0+ - GET TIME-OUT PERIOD
+ AX = AA04h
+Return: AX = FFFFh
+ BX = current time-out in clock ticks
+SeeAlso: AX=AA02h,AX=AA05h,AX=AA0Ah
+Index: screen saver;DimVGA
+--------V-14AA05-----------------------------
+INT 14 - DimVGA v2.0+ - GET DIMMING FACTOR
+ AX = AA05h
+Return: AX = FFFFh
+ BX = current dimming factor
+SeeAlso: AX=AA03h,AX=AA04h,AX=AA0Ah
+Index: screen saver;DimVGA
+--------V-14AA06-----------------------------
+INT 14 - DimVGA v2.0+ - DISABLE
+ AX = AA06h
+Return: AX = FFFFh
+SeeAlso: AX=AA01h,AX=AA07h,AX=AA0Ah
+Index: screen saver;DimVGA
+--------V-14AA07-----------------------------
+INT 14 - DimVGA v2.0+ - ENABLE
+ AX = AA07h
+Return: AX = FFFFh
+SeeAlso: AX=AA01h,AX=AA06h,AX=AA0Ah
+Index: screen saver;DimVGA
+--------V-14AA08-----------------------------
+INT 14 - DimVGA v2.0+ - DIM SCREEN 'MANUALLY'
+ AX = AA08h
+Return: AX = FFFFh
+Note: this function will dim the screen immediately, even if DimVGA is
+ currently disabled
+SeeAlso: AX=AA01h,AX=AA02h,AX=AA09h
+Index: screen saver;DimVGA
+--------V-14AA09-----------------------------
+INT 14 - DimVGA v2.0+ - UNDIM SCREEN 'MANUALLY'
+ AX = AA09h
+Return: AX = FFFFh
+Note: this function will undim the screen immediately, even if DimVGA is
+ currently disabled
+SeeAlso: AX=AA01h,AX=AA08h
+Index: screen saver;DimVGA
+--------V-14AA0A-----------------------------
+INT 14 - DimVGA v2.0+ - CHECK WHETHER ENABLED
+ AX = AA0Ah
+Return: AX = FFFFh
+ BX = current state (0000h disabled, 0001h enabled)
+SeeAlso: AX=AA01h,AX=AA06h,AX=AA07h
+Index: screen saver;DimVGA
+--------V-14AA0B-----------------------------
+INT 14 - DimVGA v2.1+ - SET HOTKEY
+ AX = AA0Bh
+ BH = shift state (see #00396)
+ BL = keyboard scancode
+Return: AX = FFFFh
+SeeAlso: AX=AA01h,AX=AA0Ch
+Index: screen saver;DimVGA
+
+Bitfields for DimVGA hotkey shift state:
+Bit(s) Description (Table 00396)
+ 7-4 unused
+ 3 Alt key pressed
+ 2 Ctrl key pressed
+ 1 Left shift key pressed
+ 0 Right shift key pressed
+--------V-14AA0C-----------------------------
+INT 14 - DimVGA v2.1+ - GET HOTKEY
+ AX = AA0Ch
+Return: AX = FFFFh
+ BH = shift state (see #00396)
+ BL = keyboard scancode
+SeeAlso: AX=AA01h,AX=AA0Bh
+Index: screen saver;DimVGA
+--------V-14AA0D-----------------------------
+INT 14 - DimVGA v3.0+ - SET MOUSE CHECK STATUS
+ AX = AA0Dh
+ BX = new mouse check status
+ 0000h mouse checking off
+ 0001h mouse checking on
+Return: AX = FFFFh
+Note: before switching mouse checking on, a mouse driver should be
+ found in memory. If no mouse driver is found, mouse checking
+ should be switched off (resident DimVGA does not check by itself).
+SeeAlso: AX=AA01h,AX=AA0Eh
+Index: screen saver;DimVGA
+--------V-14AA0E-----------------------------
+INT 14 - DimVGA v3.0+ - GET MOUSE CHECK STATUS
+ AX = AA0Eh
+Return: BX = mouse check status (0000h disabled, 0001h enabled)
+SeeAlso: AX=AA01h,AX=AA0Dh
+Index: screen saver;DimVGA
+--------V-14AA0F-----------------------------
+INT 14 - DimVGA v3.4 - SET LOCKING STATUS
+ AX = AA0Fh
+ BX = locking status
+ 0000h disabled
+ 0001h enabled
+Return: AX = FFFFh
+SeeAlso: AX=AA01h,AX=AA0Dh,AX=AA10h
+Index: screen saver;DimVGA
+--------V-14AA10-----------------------------
+INT 14 - DimVGA v3.4 - GET MOUSE CHECK STATUS
+ AX = AA10h
+Return: BX = locking status (0000h disabled, 0001h enabled)
+SeeAlso: AX=AA01h,AX=AA0Dh,AX=AA0Fh
+Index: screen saver;DimVGA
+----------14AD-------------------------------
+INT 14 - IBM SurePath BIOS - Officially "Private" Function
+ AH = ADh
+SeeAlso: AH=AEh"IBM",AH=AFh"IBM"
+----------14AE-------------------------------
+INT 14 - IBM SurePath BIOS - Officially "Private" Function
+ AH = AEh
+SeeAlso: AH=ADh"IBM",AH=AFh"IBM"
+----------14AF-------------------------------
+INT 14 - IBM SurePath BIOS - Officially "Private" Function
+ AH = AFh
+SeeAlso: AH=ADh"IBM",AH=AEh"IBM"
+--------S-14AF00BXAAAA-----------------------
+INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK
+ AX = AF00h
+ BX = AAAAh
+Return: AX = AF01h if installed
+ BH = protocol type (if BX=AAAAh on entry)
+ 01h NetManage TCP/IP
+ BL = version for protocol type (if BX=AAAAh on entry)
+Note: early versions of the BAPI and the ROM BIOS simply destroy AX; this
+ behavior is used to determine whether the newer functions (AH=B0h,
+ AH=B1h,etc) are available
+SeeAlso: AH=A0h"BAPI"
+--------S-14B0-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - EN/DISABLE "ENTER COMMAND MODE" (ECM) CHARACTER
+ AH = B0h
+ AL = new state (00h disabled, 01h enabled)
+Return: AH = return code (00h,07h,0Ah) (see #00394)
+Note: disabling the ECM character allows applications to send data which
+ includes the ECM character
+SeeAlso: AX=AF00h"BAPI",AH=B1h,AH=B2h
+--------S-14B1-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE
+ AH = B1h
+Return: AH = return code (00h,07h,0Ah) (see #00394)
+Desc: provide a means for the application or terminal emulator to perform
+ the same action normally caused by the ECM character
+SeeAlso: AH=B0h,AH=B2h
+--------S-14B2-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - GET ECM WATCH STATE
+ AH = B2h
+Return: AH = return code (00h,07h,0Ah) (see #00394)
+ AL = watch flag (00h disabled, 01h enabled)
+Desc: determine whether the ECM character is enabled
+SeeAlso: AH=B0h,AH=B1h
+--------S-14B3-------------------------------
+INT 14 - 3com BAPI SERIAL I/O - GET/SET CONFIGURATION INFO
+ AH = B3h
+ AL = direction (00h get, 01h set)
+ DH = session ID (00h for external session managment)
+ DL = configuration item (00h = end-of-line mapping)
+ CX = new configuration item value (if AL=01h)
+ ---if DL=00h---
+ CH = application EOL type (app to Telnet client)
+ 01h application will send lone CR
+ 02h application will send CR-? pair
+ CL = driver EOL type (Telnet client to Telnet server)
+ 01h driver should send CR-NUL pair
+ 02h driver should send CR-LF pair
+Return: AH = return code (00h,03h,09h-0Bh) (see #00394)
+ ---if AL=00h---
+ CX = configuration item value (above)
+SeeAlso: AH=B2h
+--------N-14E0-------------------------------
+INT 14 - TelAPI - "telopen" - CREATE TELNET CONNECTION (BLOCKING)
+ AH = E0h
+ BX = port number to connect with (default 0017h used if <= 0)
+ CX:DX = Internet address of remote host
+ DS:DI -> 2-byte remote host (session) identifier
+ ES:SI -> 1700-byte buffer for Telnet state record
+ 0000h:0000h to use TelAPI internally-allocated space
+Return: AX = status (0000h-0009h,FED3h,FF37h,FFBDh,FFC0h,FFCDh) (see #00397)
+ ES:SI buffer filled with state record
+ ES:SI -> internally-allocated state record in some versions
+Note: the remote host identifier may be used to refer to this connection
+SeeAlso: AH=E1h,AH=ECh,AX=FF00h
+
+(Table 00397)
+Values for TelAPI status:
+ 0000h-7FFFh successful (session number)
+ FED3h (-301) no session allocated, or out of TelAPI data space
+ FF37h (-201) all sessions in use
+ FFBDh (-67) unknown hostname
+ FFC0h (-64) host not functioning
+ FFC3h (-61) connection attempt refused
+ FFC4h (-60) connection attempt timed out
+ FFC8h (-56) socket already connected
+ FFCDh (-51) network is unreachable
+ FFDDh (-35) operation would block
+--------S-14E000-----------------------------
+INT 14 - MX5 Extended FOSSIL - GET MNP STATUS BLOCK
+ AX = E000h
+ DX = port number (0-3)
+Return: ES:BX -> status block (see #00398)
+Program: MX5 is a FOSSIL driver by MagicSoft which emulates MNP Level 5, and
+ ships with the METZ terminal program as MTEMNP.DRV (a TSR despite
+ the .DRV extension)
+SeeAlso: AX=E006h
+
+Format of MX5 Extended FOSSIL status block:
+Offset Size Description (Table 00398)
+ 00h BYTE flag: active (00h no, 01h yes)
+ 01h BYTE MNP level (2,4,5)
+ 02h BYTE series ID from remote MNP
+ 03h DWORD total packets transmitted
+ 07h DWORD duplicate packets transmitted
+ 0Bh DWORD maximum speed
+ 0Fh DWORD total packets received
+ 13h DWORD duplicate packets received
+ 17h DWORD maximum speed
+--------S-14E001-----------------------------
+INT 14 - MX5 Extended FOSSIL - GET/SET MNP LEVEL
+ AX = E001h
+ BH = function
+ 00h get MNP level
+ 01h set MNP level
+ BL = new level (00h none, 02h/04h/05h MNP level N)
+ DX = port number (0-3)
+Return: BL = MNP level
+SeeAlso: AX=E002h,AX=E003h,AX=E004h,AX=E006h
+--------S-14E002-----------------------------
+INT 14 - MX5 Extended FOSSIL - GET/SET MNP ANSWER/ORIGINATE MODE
+ AX = E002h
+ BH = function
+ 00h get answer/originate mode
+ 01h set mode
+ BL = new mode (00h originate [default], 01h answer)
+ DX = port number (0-3)
+Return: BL = answer/originate mode
+SeeAlso: AX=E001h,AX=E003h,AX=E006h
+--------S-14E003-----------------------------
+INT 14 - MX5 Extended FOSSIL - GET/SET MNP WAIT TICKS
+ AX = E003h
+ BH = function
+ 00h get wait ticks
+ 01h set wait ticks
+ BL = MNP wait ticks (default 0Eh)
+ DX = port number (0-3)
+Return: BL = wait ticks
+SeeAlso: AX=E001h,AX=E002h,AX=E006h
+--------S-14E004-----------------------------
+INT 14 - MX5 Extended FOSSIL - GET/SET MNP CONNECT SOUND LEVEL
+ AX = E004h
+ BH = function
+ 00h get sound level
+ 01h set sound level
+ BL = new sound level (00h off, 01h on [default])
+ DX = port number
+Return: BL = sound state
+Desc: specify whether MX5 should generate beeps after an MNP connection
+ (three high beeps if successful, high then low on connection failure)
+SeeAlso: AX=E002h,AX=E006h
+--------S-14E005-----------------------------
+INT 14 - MX5 Extended FOSSIL - UNINSTALL
+ AX = E005h
+Return: BX = segment of MX5's memory block or 0000h on failure
+Note: caller must free the returned memory block to complete the uninstall
+SeeAlso: AX=E006h
+--------S-14E006BX0000-----------------------
+INT 14 - MX5 Extended FOSSIL - INSTALLATION CHECK
+ AX = E006h
+ BX = 0000h
+Return: BX = 4D58h ('MX') if installed
+ AH = major version
+ AL = minor version
+SeeAlso: AX=E000h,AX=E001h,AX=E005h,AX=E007h
+--------S-14E007-----------------------------
+INT 14 - MX5 Extended FOSSIL - WAIT SPECIFIED NUMBER OF TICKS
+ AX = E007h
+ CX = number of ticks to wait
+Return: nothing
+SeeAlso: AX=E006h
+--------N-14E1-------------------------------
+INT 14 - TelAPI - "telclose" - TERMINATE TELNET CONNECTION
+ AH = E1h
+ BX = connection ID
+Return: AX = status (0000h,FFF7h,maybe others) (see #00397)
+Note: flushes and releases all buffers and data space used by the connection
+SeeAlso: AH=E0h,AH=E6h,AX=FF00h
+--------N-14E2-------------------------------
+INT 14 - TelAPI - "telread" - BUFFERED READ
+ AH = E2h
+ BX = connection ID (see AH=E0h"TelAPI")
+ CX = length of buffer in bytes
+ ES:SI -> buffer for data
+Return: AX > 0000h number of characters actually read
+ AX = 0000h host has closed connection
+ AX < 0000h error code (see #00397)
+Note: translates CRLF into local EOL if the connection is in ASCII mode,
+ negotiates various Telnet options, and immediately executes several
+ different Telnet action commands
+SeeAlso: AH=07h"TelAPI",AH=E3h,AH=E6h,AX=FF00h,INT 6B/AH=01h
+--------N-14E3-------------------------------
+INT 14 - TelAPI - "telwrite" - BUFFERED WRITE
+ AH = E3h
+ BX = connection ID
+ CX = length of buffer in bytes
+ ES:SI -> buffer containing data
+Return: AX > 0000h number of characters actually written
+ AX < 0000h error code (see #00397)
+Note: translates local EOL into CRLF if the connection is in ASCII mode,
+ sends the appropriate Telnet commands for the characters selected
+ for IP, AYT, AO, EC, EL, and Break
+SeeAlso: AH=06h"TelAPI",AH=E2h,AH=E6h,AX=FF00h,INT 6B/AH=00h
+--------N-14E4-------------------------------
+INT 14 - TelAPI - "telioctl" - CONNECTION CONTROL
+ AH = E4h
+ BX = connection ID (see AH=E0h"TelAPI")
+ CX = Telnet command/option identifier (see #00400)
+ ES:SI -> buffer containing command/option argument (see #00399)
+Return: AX = status (0000h, etc.) (see #00397)
+Desc: start filter control, initiate Telnet option negotiation, or get filter
+ control status
+SeeAlso: AH=A9h,AH=E6h,AX=FF00h,INT 6B/AX=0600h
+
+Format of TelAPI Telnet command/option argument:
+Offset Size Description (Table 00399)
+ 00h 5 WORD numeric arguments
+ 0Ah DWORD -> ASCIZ string
+SeeAlso: #00400
+
+(Table 00400)
+Values for TelAPI Telnet command/option identifier:
+ 01h ASCII args: none
+ 02h BINARY args: none
+ 03h LOCALECHO args: none client echos data
+ 04h REMOTEECHO args: none server echos data
+ 05h SGA args: none Suppress Go-Ahead signal
+ 07h CHARMODE args: none no line-buffering
+ 08h LINEMODE args: -> erase-line ch perform line-buffering
+ 09h RECVEOL args: EOL type
+ 0Ah SENDEOL args: EOL type
+ 0Bh EOR args: none enable end-of-record sequence
+ 0Dh BREAK args: -> break char
+ 0Eh VERBOSE args: verbosity display Telnet negotiations?
+ 0Fh AYT args: -> AYT escape ch
+ 10h AO args: -> AO escape char
+ 11h IP args: -> IP escape char
+ 12h EC args: -> escape char
+ 13h EL args: -> escape char
+ 14h STATUS args: type; returns data in structure
+ 18h TERMTYPE args: -> terminal type
+ 19h ATTACHPORT args: port number ; returns session number
+ 1Bh TRANSMIT_EOR args: EOR enabled append EOR to every telwrite?
+SeeAlso: #00399
+--------N-14E5-------------------------------
+INT 14 - TelAPI - "telreset" - RESET ALL CONNECTIONS
+ AH = E5h
+Return: AX = status (0000h,other) (see also #00397)
+ FFFFh unable to reset
+Desc: close all sessions and reset TelAPI to defaults
+SeeAlso: AH=E1h,AH=E6h,AX=FF00h
+--------N-14E6-------------------------------
+INT 14 - TelAPI - "telunload" - UNINSTALL
+ AH = E6h
+Return: AX = status
+ 0000h successful
+ FFFFh unable to uninstall
+Notes: TelAPI also supports the NASI/NACS and NCSI APIs on INT 6B
+ this function invokes AH=E5h internally
+SeeAlso: AH=E5h,AX=FF00h,INT 6B/AH=00h,INT 6B/AH=10h
+--------N-14E7-------------------------------
+INT 14 - TelAPI - "tellist" - GET TELNET SESSION LIST
+ AH = E7h
+ ES:SI -> 10-word buffer for session list
+Return: AX = 0000h (successful)
+ ES:SI buffer filled
+Desc: determine, for each of the ten allowable sessions, whether the session
+ is currently available
+Note: each word in the buffer is filled with either 0000h to indicate that
+ the corresponding sesion is unavailable, or 0001h if available
+SeeAlso: AH=E0h,AH=E5h,AX=FF00h
+--------N-14E8-------------------------------
+INT 14 - TelAPI - "telattach" - ATTACH COM PORT TO/FROM TELNET SESSION
+ AH = E8h
+ BX = connection ID (see AH=E0h"TelAPI")
+ CX = serial port number (0000h-0003h = COM1-COM4)
+Return: AX = status
+ 0000h successful
+ FFFFh failed
+SeeAlso: AH=E0h,AH=E9h,AX=FF00h
+--------N-14E9-------------------------------
+INT 14 - TelAPI - "telportosn" - GET SESSION NUMBER FOR COM PORT
+ AH = E9h
+ DX = serial port number (0000h-0003h = COM1-COM4)
+Return: AX >= 0000h session number
+ AX < 0000h error code (see #00397)
+SeeAlso: AH=E0h,AH=E8h,AH=EAh,AX=FF00h
+--------N-14EA-------------------------------
+INT 14 - TelAPI - "telstatus" - GET TELNET CONNECTION STATUS INFORMATION
+ AH = EAh
+ BX = connection ID (see AH=E0h"TelAPI")
+ ES:SI -> buffer for status info (see #00401)
+Return: AX = status (0000h,FFFFh,etc.)
+SeeAlso: AH=E9h,AH=EBh,AX=FF00h
+
+Format of TelAPI Telnet connection status information:
+Offset Size Description (Table 00401)
+ 00h 4 BYTEs remote host IP address
+ 04h 20 BYTEs reserved
+ 18h WORD local port number
+ 1Ah BYTE connection mode (00h = ASCII, 01h = Binary)
+ 1Bh BYTE echo flag (00h local, 01h remote)
+ 1Ch BYTE SGA flag (00h will, 01h won't)
+ 1Dh BYTE EOR negotation flag (00h do negotiate, 01h don't)
+ 1Eh BYTE buffering (00h line mode, 01h character mode)
+ 1Fh BYTE reserved
+ 20h BYTE verbose flag (00h no, 01h verbose mode)
+ 21h BYTE received EOL (00h no xlat, 01h CR, 02h LF, 03h CRLF)
+ 22h BYTE sent EOL (00h no translation, 01h CR, 02h LF)
+ 23h BYTE break character
+ 24h BYTE IP escape character
+ 25h BYTE AO escape character
+ 26h BYTE AYT escape character
+ 27h BYTE EC escape character
+ 28h BYTE EL escape character
+ 29h 41 BYTEs ASCIZ Telnet-negotiated terminal type
+ 52h 9 BYTEs session ID
+SeeAlso: #00402
+--------N-14EB-------------------------------
+INT 14 - TelAPI - "telname" - GET AVAILABLE/INUSE STATUS FOR ALL SESSIONS
+ AH = EBh
+ ES:SI -> buffer for session statuses (see #00402)
+Return: ES:SI buffer filled
+SeeAlso: AH=E9h,AH=EAh,AX=FF00h
+
+Format of TelAPI session status information [array]:
+Offset Size Description (Table 00402)
+ 00h BYTE session state (00h available, 01h connected)
+ 01h 9 BYTEs session ID if connected
+ 0Ah WORD attached COM port if connected, FFFFh if not
+SeeAlso: #00401
+--------N-14EC-------------------------------
+INT 14 - TelAPI - "telnblkopen" - CREATE TELNET CONNECTION (NON-BLOCKING)
+ AH = ECh
+ BX = port number to connect with (default 0017h used if <= 0)
+ CX:DX = Internet address of remote host
+ DS:DI -> 2-byte remote host (connection) identifier
+ ES:SI -> 1700-byte buffer for Telnet state record
+ 0000h:0000h to use TelAPI internally-allocated space
+Return: AX = status (0000h-0009h,FED3h,FF37h,FFBDh,FFC0h,FFCDh) (see #00397)
+ ES:SI buffer filled with state record
+ ES:SI -> internally-allocated state record in some versions
+Notes: the remote host identifier may be used to refer to this connection
+ this function returns immediately; use AH=EDh to check whether the
+ connection has been established yet
+ this function is not supported by the Microdyne TelAPI v3.7
+SeeAlso: AH=E0h"TelAPI",AH=EDh,AX=FF00h
+--------N-14ED-------------------------------
+INT 14 - TelAPI - "telpoll" - POLL TELNET SESSION FOR CONNECTION COMPLETION
+ AH = EDh
+ BX = connection ID (see AH=ECh)
+Return: AX = status (0000h,0001h,FFFFh,etc.) (see also #00397)
+ 0000h session now connected
+ 0001h connection still in progress
+Note: this function is not supported by the Microdyne TelAPI v3.7
+SeeAlso: AH=EDh,AX=FF00h
+--------a-14F0F0-----------------------------
+INT 14 - ASAP v1.0 - ???
+ AX = F0F0h
+ DX = ???
+ ???
+Return: ???
+Program: ASAP (Automatic Screen Access Program) is a shareware screen reader
+ by MicroTalk
+SeeAlso: AX=F0F1h
+--------a-14F0F1DX0000-----------------------
+INT 14 - ASAP v1.0 - INSTALLATION CHECK
+ AX = F0F1h
+ DX = 0000h
+Return: DX = segment of resident code
+ 0000h if not installed
+Program: ASAP (Automatic Screen Access Program) is a shareware screen reader
+ by MicroTalk
+SeeAlso: AX=F0F0h,INT 10/AX=3800h
+--------S-14F4FF-----------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK
+ AX = F4FFh
+ DX = port (00h-03h)
+Return: CF clear if present
+ AX = 0000h
+ CF set if not present
+ AX <> 0000h
+SeeAlso: AH=36h"ComShare",AH=F9h,AH=FCh
+--------S-14F9-------------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL
+ AH = F9h
+ DX = port (00h-03h)
+Return: nothing
+SeeAlso: AX=F4FFh
+--------S-14FA-------------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK
+ AH = FAh
+ DX = port (00h-03h)
+Return: nothing
+SeeAlso: AH=07h"MBBIOS",AH=1Ah,AH=8Ah
+--------S-14FB-------------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS
+ AH = FBh
+ AL = modem control register (see #00334 at AH=05h"SERIAL")
+ DX = port (00h-03h)
+Return: nothing
+SeeAlso: AH=05h"SERIAL"
+--------S-14FC-------------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT
+ AH = FCh
+ DX = port (00h-03h)
+Return: AH = RS232 status bits (see #00304 at AH=03h)
+ AL = character
+SeeAlso: AH=02h,AH=0Ch,AX=FF02h
+--------S-14FD02-----------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS
+ AX = FD02h
+Return: CX = number of characters available
+--------N-14FF00-----------------------------
+INT 14 - TelAPI - "telcheck" - INSTALLATION CHECK
+ AX = FF00h
+Return: AX = 00FFh if installed
+ BX = version number * 100 (decimal)
+SeeAlso: AH=E6h,AX=F4FFh
+--------S-14FF01-----------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - SET SEND BUFFER
+ AX = FF01h
+ CX = length of buffer (0000h to cancel buffer assignment)
+ DX = port (00h-03h)
+ ES:BX -> send buffer
+Return: nothing
+SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh,AX=FF02h
+--------S-14FF02-----------------------------
+INT 14 - IBM/Yale EBIOS SERIAL I/O - SET RECEIVE BUFFER
+ AX = FF02h
+ CX = length of buffer (0000h to cancel buffer assignment)
+ DX = port (00h-03h)
+ ES:BX -> receive buffer
+Return: nothing
+SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh,AX=FF01h
+--------S-14FFF8-----------------------------
+INT 14 - COMM-DRV v14.0 - SET BAUD RATE DIVISOR
+ AX = FFF8h
+ BX = card type (sub-device number)
+ CX = new baudrate divisor
+ DX = index to baud rate
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+Program: COMM-DRV is a universal serial communications driver by Willies'
+ Computer Software Company, which supports standard INT 14 and
+ FOSSIL calls as well as its own interfaces
+SeeAlso: AX=8000h"COMM-DRV"
+--------S-14FFFB-----------------------------
+INT 14 - COMM-DRV v14.0 - GET HIGHEST ALLOWED PORT NUMBER
+ AX = FFFBh
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+ BX = highest port number
+--------S-14FFFC-----------------------------
+INT 14 - COMM-DRV v14.0 - GET INT 14 FLAGS
+ AX = FFFCh
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+ BX = flags (see #00403)
+SeeAlso: AX=FFFDh
+
+Bitfields for INT 14h flags:
+Bit(s) Description (Table 00403)
+ 0 port active for INT 14h
+ 1 interface behaving like a FOSSIL driver
+--------S-14FFFD-----------------------------
+INT 14 - COMM-DRV v14.0 - SET INT 14 FLAGS
+ AX = FFFDh
+ BX = flags (see #00403)
+ DX = port number
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+SeeAlso: AX=FFFCh
+--------S-14FFFE-----------------------------
+INT 14 - COMM-DRV v14.0 - RESTORE INT 14 VECTOR TO ORIGINAL
+ AX = FFFEh
+Return: AH bit 7 set on error
+ AH bit 7 clear if successful
+--------S-14FFFF-----------------------------
+INT 14 - COMM-DRV v14.0 - GET INT 14 INFORMATION AREA
+ AX = FFFFh
+ BX:SI -> DWORD buffer for address of information area (see #00404)
+ (initialized to zeros)
+Return: BX:SI buffer filled with nonzero value if installed
+Program: COMM-DRV is a universal serial communications driver by Willies'
+ Computer Software Company, which supports standard INT 14 and
+ FOSSIL calls as well as its own interfaces
+Index: installation check;COMM-DRV
+
+Format of COMM-DRV information area:
+Offset Size Description (Table 00404)
+ 00h 8 BYTEs signature "COMM-DRV"
+ 08h 2 BYTEs 00h,00h
+ 0Ah DWORD -> direct address mapping table
+ 0Eh DWORD previous INT 14 vector
+--------t-15---------------------------------
+INT 15 - Microsoft TSR Specification
+ No additional information available at this time.
+--------B-1500-------------------------------
+INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
+ AH = 00h
+Return: CF set on error
+ AH = 86h no cassette present
+ CF clear if successful
+SeeAlso: AH=01h"CASSETTE",MEM 0040h:0067h"PC"
+--------M-1500-------------------------------
+INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
+ AH = 00h
+Return: CX = signed X count
+ DX = signed Y count
+--------O-1500-------------------------------
+INT 15 - VMiX v2+ - INSTALLATION CHECK
+ AH = 00h
+Return: DX = 0798h if installed
+ AX = version (AH = major, AL = minor)
+--------T-1500-------------------------------
+INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
+ AH = 00h
+Return: nothing
+Note: if issued by the highest-priority task while MultiDOS is using
+ priority-based rather than round-robin scheduling, control will be
+ returned to the caller immediately
+SeeAlso: AH=03h"MultiDOS",AX=1000h
+--------B-1501-------------------------------
+INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
+ AH = 01h
+Return: CF set on error
+ AH = 86h no cassette present
+ CF clear if successful
+SeeAlso: AH=00h"CASSETTE"
+--------b-1501-------------------------------
+INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
+ AH = 01h
+ AL = NVRAM location (00h to 3Fh) (see #00405)
+ BL = NVRAM data value
+Return: AH = return code
+ 00h OK
+ 01h address bad
+ 02h write error
+SeeAlso: AH=02h"Amstrad"
+
+Format of Amstrad NVRAM:
+Offset Size Description (Table 00405)
+ 00h BYTE time of day: seconds
+ 01h BYTE alarm time: seconds
+ 02h BYTE time of day: minutes
+ 03h BYTE alarm time: minutes
+ 04h BYTE time of day: hours
+ 05h BYTE alarm time: hours
+ 06h BYTE day of week, 1 = Sunday
+ 07h BYTE day of month
+ 08h BYTE month
+ 09h BYTE year mod 100
+ 0Ah BYTE RTC status register A (see #00406)
+ 0Bh BYTE RTC status register B (see #00407)
+ 0Ch BYTE RTC status register C (read-only) (see #00408)
+ 0Dh BYTE RTC status register D
+ bit 7: battery good
+ 0Eh 6 BYTEs time and date machine last used
+ 14h BYTE user RAM checksum
+ 15h WORD Enter key scancode/ASCII code
+ 17h WORD Forward delete key scancode/ASCII code
+ 19h WORD Joystick fire button 1 scancode/ASCII code
+ 1Bh WORD Joystick fire button 2 scancode/ASCII code
+ 1Dh WORD mouse button 1 scancode/ASCII code
+ 1Fh WORD mouse button 2 scancode/ASCII code
+ 21h BYTE mouse X scaling factor
+ 22h BYTE mouse Y scaling factor
+ 23h BYTE initial VDU mode and drive count
+ 24h BYTE initial VDU character attribute
+ 25h BYTE size of RAM disk in 2K blocks
+ 26h BYTE initial system UART setup byte
+ 27h BYTE initial external UART setup byte
+ 28h 24 BYTEs available for user application
+Note: bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
+ the clock chip
+
+Bitfields for RTC status register A:
+Bit(s) Description (Table 00406)
+ 7 set if date/time being updated
+ 6-4 time base speed, default 010 = 32768 Hz
+ 3-0 interrupt rate selection, default 0110 = 1024 Hz
+SeeAlso: #00405
+
+Bitfields for RTC status register B:
+Bit(s) Description (Table 00407)
+ 7 clear if normal update, set if abort update
+ 6 periodic interrupt enable
+ 5 alarm interrupt enable
+ 4 update end interrupt enable
+ 3 square wave enable
+ 2 date mode (clear = BCD, set = binary)
+ 1 24-hour format
+ 0 daylight saving time enable
+SeeAlso: #00405
+
+Bitfields for RTC status register C:
+Bit(s) Description (Table 00408)
+ 7 IRQF flag
+ 6 PF flag
+ 5 AF flag
+ 4 UF flag
+SeeAlso: #00405
+--------O-1501-------------------------------
+INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
+ AH = 01h
+ STACK: WORD object ID of requestor
+ DWORD pointer to ASCIZ name of requested method
+ "assign" assign channel to object
+ "deassign" deassign channel
+ "cursor" set cursor on/off
+ "init" initialize comm port
+ "open" open I/O channel
+ "position" set cursor position
+ "receive" get buffered packet from comm port
+ "send" send buffered packet to comm port
+ "vio" set current virtual I/O to specified channel
+ "window" make window at cursor position
+ ---if "assign"---
+ WORD object UID
+ WORD caller UID/PID
+ DWORD CSL with port
+ ---if "deassign"---
+ WORD channel ID
+ ---if "cursor"---
+ WORD channel ID (must be a SRCSINK)
+ WORD new state (0000h off, 0001h on)
+ ---if "init"---
+ WORD channel ID (must be a SRCSINK)
+ WORD comm port number (00h-03h)
+ WORD UART init code
+ ---if "open"---
+ WORD channel ID
+ ---if "position"---
+ WORD channel ID (must be a SRCSINK)
+ WORD position (high byte = row, low byte = column)
+ ---if "receive"---
+ DWORD pointer to buffer
+ ---if "send"---
+ WORD length of buffer
+ DWORD pointer to buffer
+ ---if "vio"---
+ WORD channel ID (must be a SRCSINK)
+ ---if "window"---
+ WORD top left (high byte = row, low byte = column)
+ WORD bottom right (high byte = row, low byte = column)
+Return: DX:AX -> IRP structure or 0000h:0000h
+SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
+--------T-1501-------------------------------
+INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
+ AH = 01h
+ AL = semaphore number (00h-3Fh)
+Return: AH = status
+ 00h successful
+ 02h invalid semaphore number
+Notes: if the semaphore is not owned, ownership is assigned to the calling
+ task and the call returns immediately
+ if the semaphore is already owned by another task, the calling task
+ is placed on a queue for the semaphore and suspended until it can
+ become owner of the semaphore
+ semaphore 0 is used internally by MultiDOS to synchronize DOS access
+SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
+--------B-1502-------------------------------
+INT 15 - CASSETTE - READ DATA (PC and PCjr only)
+ AH = 02h
+ CX = number of bytes to read
+ ES:BX -> buffer
+Return: CF clear if successful
+ DX = number of bytes read
+ ES:BX -> byte following last byte read
+ CF set on error
+ AH = status (see #00409)
+SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE",MEM 0040h:0069h,MEM 0040h:006Bh"PC"
+
+(Table 00409)
+Values for Cassette status:
+ 00h successful
+ 01h CRC error
+ 02h bad tape signals
+ 04h no data
+ 80h invalid command
+ 86h no cassette present
+--------b-1502-------------------------------
+INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
+ AH = 02h
+ AL = NVRAM location (00h to 3Fh)
+Return: AH = return code
+ 00h OK
+ 01h address bad
+ 02h checksum error
+ AL = NVRAM data value
+SeeAlso: AH=01h"Amstrad"
+--------O-1502-------------------------------
+INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
+ AH = 02h
+ STACK: WORD object ID of requestor
+ DWORD pointer to ASCIZ name of requested method
+ "assign" allocate low memory block
+ "assign extended" allocate extended memory pages
+ "assign gdt" allocate GDT selector
+ "paged" allocate low paged memory
+ "paged extended" alllocate extended memory pages
+ "deassign" free memory block
+ "deassign gdt" free GDT selector
+ "getvpage" get physical address for virtual page
+ "setvpage" set physical address for virtual page
+ "info" get VMiX memory usage info block
+ "move" move contents of 32-bit memory
+ "newmcb" make new DOS memory control block
+ "owner" get process ID of MCB or PSP owner
+ "umb" allocate upper memory block
+ "video" toggle system use of video memory and get stat
+ ---if "assign"---
+ WORD number of objects
+ WORD size in bytes (multiple of 512 bytes)
+ ---if "assign extended"---
+ WORD number of objects
+ WORD size in bytes (multiple of 4K)
+ ---if "assign gdt"---
+ WORD access type (low byte)
+ WORD segment size in paragraphs
+ DWORD pointer to start of physical segment
+ ---if "paged"---
+ WORD number of 512-byte pages
+ ---if "paged extended"
+ WORD number of 4K pages
+ ---if "deassign"---
+ DWORD pointer returned by previous allocation call
+ ---if "deassign gdt"---
+ WORD GDT selector
+ ---if "getvpage"---
+ WORD owner's process ID
+ DWORD pointer to buffer for page structure (struct VPGE)
+ ---if "setvpage"---
+ WORD owner's process ID
+ DWORD pointer to new page structure (struct VPGE)
+ ---if "info"---
+ no additional arguments
+ ---if "move"
+ DWORD 32-bit source address
+ DWORD 32-bit destination address
+ WORD number of words to move
+ ---if "newmcb"---
+ DWORD pointer to new MCB's location
+ WORD size of memory block
+ DWORD pointer to ASCIZ name string (max 8 chars)
+ ---if "owner"---
+ WORD MCB or PSP segment
+ ---if "umb"---
+ WORD size in paragraphs
+ ---if "video"---
+ no additional arguments
+Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
+SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
+--------T-1502-------------------------------
+INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
+ AH = 02h
+ AL = semaphore number (00h-3Fh)
+Return: AH = status
+ 00h successful
+ 01h not semaphore owner
+ 02h invalid semaphore number
+Notes: if any tasks are waiting for the semaphore, the first task on the wait
+ queue will become the new owner and be reawakened
+ do not use within an interrupt handler
+SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
+--------B-1503-------------------------------
+INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
+ AH = 03h
+ CX = number of bytes to write
+ ES:BX -> data buffer
+Return: CF clear if successful
+ ES:BX -> byte following last byte written
+ CF set on error
+ AH = status (see #00409)
+ CX = 0000h
+SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
+--------V-1503-------------------------------
+INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
+ AH = 03h
+ AL = value (I,R,G,B bits)
+Return: nothing
+SeeAlso: AH=04h"Amstrad"
+--------O-1503-------------------------------
+INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
+ AH = 03h
+ STACK: DWORD pointer to ASCII prompt
+ WORD field outline character
+ WORD length of input field (max 7Fh)
+ DWORD address of pointer to input buffer
+Return: AX = length of input (input buffer is padded with blanks)
+SeeAlso: AH=04h"VMiX"
+--------T-1503-------------------------------
+INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
+ AH = 03h
+ DX = number of time slices to remain suspended
+Return: after specified interval has elapsed
+Note: when priority-based scheduling is in use, high-priority tasks should
+ use this function to yield the processor
+SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
+--------B-1504-------------------------------
+INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
+ AH = 04h
+ ES:DI -> 32-byte results buffer for System Parameter Table (see #00410)
+ DS = segment containing ABIOS RAM extensions (zero if none)
+Return: CF clear if successful
+ AH = 00h success
+ ES:DI buffer filled
+ AL destroyed
+ CF set on failure
+ AX destroyed
+ AH = 80h/86h if not supported
+SeeAlso: AH=05h"ABIOS",AH=C1h
+
+Format of ABIOS System Parameter Table:
+Offset Size Description (Table 00410)
+ 00h DWORD FAR address of ABIOS Common Start Routine
+ 04h DWORD FAR address of ABIOS Interrupt Routine
+ 08h DWORD FAR address of ABIOS Time-out Routine
+ 0Ch WORD number of bytes of stack required by this ABIOS implementation
+ 0Eh 16 BYTEs reserved
+ 1Eh WORD number of entries in initialization table
+--------V-1504-------------------------------
+INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
+ AH = 04h
+ AL = value (RDSEL1 and RDSEL0)
+Return: nothing
+SeeAlso: AH=03h"Amstrad",AH=05h"Amstrad"
+--------O-1504-------------------------------
+INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
+ AH = 04h
+ STACK: DWORD control string
+ DWORD array of arguments
+Return: nothing
+SeeAlso: AH=03h"VMiX"
+--------T-1504-------------------------------
+INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
+ AH = 04h
+ AL = mailbox number (00h-3Fh)
+ CX = message length in bytes
+ DS:SI -> message
+Return: AH = status
+ 00h successful
+ 01h out of message memory
+ 02h invalid mailbox number
+Note: the message is copied into a system buffer; the caller may immediately
+ reuse its buffer
+SeeAlso: AH=05h"MultiDOS"
+--------B-1505-------------------------------
+INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
+ AH = 05h
+ ES:DI -> results buffer of length 18h * Number_of_Entries (see #00411)
+ DS = segment containing ABIOS RAM extensions (zero if none)
+Return: CF clear if successful
+ AH = 00h success
+ ES:DI buffer filled
+ AL destroyed
+ CF set on failure
+ AX destroyed
+ AH = 80h/86h if not supported
+SeeAlso: AH=04h"ABIOS",AH=C1h
+
+Format of one entry of ABIOS Initialization Table:
+Offset Size Description (Table 00411)
+ 00h WORD device ID (see #00412)
+ 02h WORD number of Logical IDs
+ 04h WORD Device Block length (zero for ABIOS patch or extension)
+ 06h DWORD -> init routine for Device Block and Function Transfer Table
+ 0Ah WORD request block length
+ 0Ch WORD Function Transfer Table length (zero for a patch)
+ 0Eh WORD Data Pointers length (in Common Data Area)
+ 10h BYTE secondary device ID (hardware level this ABIOS ver supports)
+ 11h BYTE revision (device driver revision level this ABIOS supports)
+ 12h 6 BYTEs reserved
+
+(Table 00412)
+Values for ABIOS device ID:
+ 00h ABIOS internal calls
+ 01h floppy disk
+ 02h hard disk
+ 03h video
+ 04h keyboard
+ 05h parallel port
+ 06h serial port
+ 07h system timer
+ 08h real-time clock
+ 09h system services
+ 0Ah NMI
+ 0Bh mouse
+ 0Eh CMOS RAM
+ 0Fh DMA
+ 10h Programmable Option Select (POS)
+ 16h keyboard password
+--------V-1505-------------------------------
+INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
+ AH = 05h
+ AL = value (I,R,G,B bits)
+Return: nothing
+SeeAlso: AH=04h"Amstrad"
+--------O-1505-------------------------------
+INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
+ AH = 05h
+Return: AX = process ID
+SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
+--------T-1505-------------------------------
+INT 15 - MultiDOS Plus - CHECK MAILBOX
+ AH = 05h
+ AL = mailbox number (00h-3Fh)
+Return: AH = status
+ 00h successful
+ DX = length of first message in queue, 0000h if no message
+ 02h invalid mailbox number
+SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
+--------b-1506-------------------------------
+INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
+ AH = 06h
+Return: BX = version number
+--------O-1506-------------------------------
+INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
+ AH = 06h
+ STACK: WORD process ID
+Return: DX:AX -> process control block
+SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
+--------T-1506-------------------------------
+INT 15 - MultiDOS Plus - READ MAILBOX
+ AH = 06h
+ AL = mailbox number (00h-3Fh)
+ CX = size of buffer in bytes
+ ES:DI -> buffer for message
+Return: AH = status
+ 00h successful
+ CX = number of bytes copied
+ DX = actual length of message
+ 02h invalid mailbox number
+Note: if the caller's buffer is not large enough, the message is truncated
+ and the remainder is lost
+SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
+--------O-1507-------------------------------
+INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
+ AH = 07h
+ STACK: WORD object type
+Return: DX:AX -> object control block
+SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
+----------1507-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 07h
+SeeAlso: AH=08h"IBM"
+--------T-1507-------------------------------
+INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
+ AH = 07h
+ BX:CX = entry point of new task
+ DX = stack size in paragraphs
+Return: AH = status
+ 00h successful
+ 01h no free task control blocks
+ 02h no free memory for task's stack
+Note: execution returns immediately to calling task
+SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
+--------O-1508-------------------------------
+INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
+ AH = 08h
+ STACK: WORD channel ID
+Return: DX:AX -> channel control block
+SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
+--------B-1508-------------------------------
+INT 15 - IBM SurePath BIOS - WAIT REQUESTED TIME PERIOD
+ AH = 08h
+ AL = function
+ 00h wait in increments of 15.025 microseconds
+ CX = number of time increments to wait (0000h = maximum)
+ 80h wait in increments of 840 ns
+ ECX = number of time increments to wait
+ 81h I/O event wait
+ BH = bitmask of bits to check
+ BL = expected pattern
+ DX = I/O port address
+ ECX = number of 840 ns microticks to wait
+ Return: ECX = 00000000h if expected pattern did not occur
+ 82h memory event wait
+ BH = bitmask of bits to check
+ BL = expected pattern
+ ES:SI -> BYTE to check
+ ECX = number of 840 ns microticks to wait
+ Return: ECX = 00000000h if expected pattern did not occur
+ other reserved
+Return: CF clear if successful
+ CF set on error
+ AH = status
+ 00h successful
+ 01h used 15.025 microsecond interval, time rounded up
+ 08h reserved subfunction
+ 86h function not supported
+Notes: IBM classifies this function as optional
+ if the POST determines that the timer is nonfunctional, this function
+ uses the 15.025 microsecond refresh timer instead of the
+ full-resolution timer
+SeeAlso: AH=07h"IBM",AH=09h"IBM",AH=86h
+--------T-1508-------------------------------
+INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
+ AH = 08h
+Return: calling task terminated, so execution never returns to caller
+Notes: an internal task must be terminated with this function rather than a
+ DOS termination function
+ task's stack space is returned to parent task's memory pool
+SeeAlso: AH=07h"MultiDOS"
+--------O-1509-------------------------------
+INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
+ AH = 09h
+ STACK: WORD queue ID (0 = process queue, 1 = object, 3 = type)
+ WORD subqueue ID
+Return: AX = queue ID
+SeeAlso: AH=0Ah"VMiX"
+----------1509-------------------------------
+INT 15 - IBM BIOS - RESERVED FOR PCMCIA SYSTEM RESOURCE TABLE ACCESS
+ AH = 09h
+ no further details available
+SeeAlso: AH=08h"IBM"
+--------T-1509-------------------------------
+INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
+ AH = 09h
+ AL = new priority
+Return: nothing
+Note: the priority has different meanings depending on whether priority-
+ based or round-robin scheduling is used
+SeeAlso: AH=07h"MultiDOS"
+--------O-150A-------------------------------
+INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
+ AH = 0Ah
+ STACK: WORD queue ID (0 = process queue, 1 = object, 3 = type)
+ WORD ID of current element in queue chain
+Return: AX = ID of next element
+SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
+--------T-150A-------------------------------
+INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
+ AH = 0Ah
+ AL = new interval
+ 00h = 55.0 ms (default)
+ 80h = 27.5 ms
+ 40h = 13.75 ms
+ 20h = 6.88 ms
+ 10h = 3.44 ms
+ 08h = 1.72 ms
+SeeAlso: AH=03h"MultiDOS"
+--------O-150B-------------------------------
+INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
+ AH = 0Bh
+ STACK: WORD caller's UID
+ DWORD pointer to ASCIZ name of requested method
+ "abort" abort current send/receive on comm port
+ "block" start/end critical section
+ "close" terminate interrupt-drive comm I/O
+ "open" prepare comm port for interrupt-driven I/O
+ "delay" set delay timer and wait
+ "hibernate" put process to sleep
+ "ints" enable/disable interrupt-driven INT 14h
+ "length" get current send/receive buffer offsets
+ "kswitch" switch stacks
+ "numproc" get number of active processes
+ "protocol" set protocol function for comm interrupts
+ "relocate" set/reset VMiX flag for relocating to himem
+ "status" get current open comm port status
+ "wake" awaken a process
+ "xport" get comm port polled for logins
+ ---if "abort"---
+ no additional arguments
+ ---if "block"---
+ WORD 0000h end, 0001h start
+ ---if "close"---
+ no additional arguments
+ ---if "open"---
+ WORD comm port (00h-03h)
+ WORD BIOS parameter byte (see #00300 at INT 14/AH=00h),
+ except bits 7-5: 000 = 19200, 001 = 38400, 011 = 115200
+ ---if "delay"---
+ WORD time in seconds
+ ---if "hibernate"---
+ WORD process ID
+ ---if "ints"---
+ WORD 0000h if no, 0001h if yes
+ ---if "length","numproc","relocate","status","xport"---
+ no additional arguments
+ ---if "kswitch"---
+ DWORD pointer to new stack
+ ---if "protocol"---
+ DWORD pointer to function (must be in low "assign"ed memory
+ when in 386 mode)
+ ---if "wake"---
+ WORD process ID
+Return: DX:AX -> result or 0000h:0000h
+ ---if "length"---
+ BYTE receive offset
+ BYTE send offset
+ ---if "kswitch"---
+ DWORD old stack pointer
+ ---if "numproc"---
+ WORD number of active processes
+ ---if "status"---
+ current open comm port status
+ ---if "xport"---
+ current comm port being polled for logins
+Note: the "delay" command reportedly disables the keyboard until the delay
+ completes
+SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
+--------T-150B-------------------------------
+INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
+ AH = 0Bh
+Return: nothing
+Notes: sets calling task's screen pointer to actual screen memory; the pointer
+ may be restored with AH=0Ch
+ caller's video mode must be same as foreground task's video mode
+ any text written while in the background will be saved to the
+ foreground task's virtual screen when it switches to the background
+ useful if a background task wants to display a message on the
+ foreground screen
+SeeAlso: AH=0Ch"MultiDOS"
+--------O-150C-------------------------------
+INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
+ AH = 0Ch
+ STACK: WORD process ID
+Return: DX:AX -> TSS stack store
+SeeAlso: AH=00h"VMiX"
+--------T-150C-------------------------------
+INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
+ AH = 0Ch
+Return: nothing
+Note: restores task's screen pointer saved by AH=0Bh; must not be called
+ unless AH=0Bh has been called first
+SeeAlso: AH=0Bh"MultiDOS"
+--------O-150D-------------------------------
+INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
+ AH = 0Dh
+ STACK: DWORD ASCIZ string starting with requested I/O channel and
+ followed by standard VMiX shell command string
+Return: AX = process ID or error code "SYS_ERROR"
+Note: the maximum string length is 7Fh characters
+SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
+--------T-150D-------------------------------
+INT 15 - MultiDOS Plus - DISABLE MULTITASKING
+ AH = 0Dh
+Return: nothing
+Note: calling task receives all time slices until AH=0Eh is called; this
+ allows time-critical events or nonreentrant code to be processed
+SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
+--------O-150E-------------------------------
+INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
+ AH = 0Eh
+ STACK: WORD process ID
+Return: AX = status (SYS_OK or SYS_ERROR)
+SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
+--------T-150E-------------------------------
+INT 15 - MultiDOS Plus - ENABLE MULTITASKING
+ AH = 0Eh
+Return: nothing
+SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
+--------d-150F-------------------------------
+INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
+ AH = 0Fh
+ AL = phase code
+ 00h reserved
+ 01h surface analysis
+ 02h formatting
+Return: CF clear if formatting should continue
+ CF set if formatting should terminate
+Note: called during ESDI drive formatting after each cylinder is completed
+SeeAlso: INT 13/AH=1Ah
+--------O-150F-------------------------------
+INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
+ AH = 0Fh
+ STACK: WORD queue ID (0 = process queue, 1 = object q, 3 = type q)
+ WORD ID of element in queue chain
+Return: AX = key
+SeeAlso: AH=0Ah"VMiX"
+--------T-150F-------------------------------
+INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
+ AH = 0Fh
+ DS:BX -> ASCIZ command
+Return: after command has been processed
+Notes: specified string is executed as if it had been typed at the MultiDOS
+ command prompt
+ the task is placed on a queue which MultiDOS examines periodically and
+ is suspended until MultiDOS has processed the command
+ all lowercase characters up to the first blank are converted to upper
+ case within the given buffer
+--------!---Section--------------------------
diff --git a/floppy/doc/INTERRUP.C b/floppy/doc/INTERRUP.C
new file mode 100644
index 0000000..600e0fc
--- /dev/null
+++ b/floppy/doc/INTERRUP.C
@@ -0,0 +1,9446 @@
+Interrupt List, part 3 of 18
+Copyright (c) 1989-1999,2000 Ralf Brown
+--------O-1510-------------------------------
+INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
+ AH = 10h
+ STACK: DWORD pointer to function
+ N WORDs function args
+Return: AX = function's return value??? (not specified in documentation)
+Note: while the function is executing, the following global descriptors are
+ available:
+ 20h stack segment
+ 38h code segment of function
+ 40h data alias for function's code segment
+ additional GDT descriptors can be allocated using AH=02h with
+ function "assign gdt"
+SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
+--------T-1510-------------------------------
+INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
+ AH = 10h
+ AL = semaphore number (00h-3Fh)
+Return: AH = status
+ 00h semaphore not in use
+ 01h semaphore owned by another task
+ 02h invalid semaphore number
+ 03h semaphore owned by caller
+SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
+--------Q-151000-----------------------------
+INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
+ AX = 1000h
+Return: after other processes run
+Note: under DESQview, if the process issuing this call has hooked INT 08h,
+ the current time-slice is set to expire at the next clock tick rather
+ than immediately
+SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
+SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 6F/AH=2Ah"F_YIELD"
+SeeAlso: INT 7A/BX=000Ah,INT 7F/AH=02h"MultiLink",INT 7F/AH=E8h
+--------Q-151001-----------------------------
+INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
+ AX = 1001h
+ BX = number of bytes to allocate
+Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
+ AX = status (DV v2.42)
+ 0000h successful
+ 0001h failed
+Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
+ common memory. Under DV v2.42, this call never generates a user
+ prompt regardless of the SETERROR value; instead, it always returns
+ AX=0001h and ES:DI=0000h:0000h if out of memory
+SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
+--------Q-151002-----------------------------
+INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
+ AX = 1002h
+ ES:DI -> previously allocated block
+Return: block freed
+SeeAlso: AX=1001h,AX=DE0Dh
+--------Q-151003-----------------------------
+INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
+ AX = 1003h
+ BH = attribute
+ BL = character
+ DX = segment of object handle for window
+Return: nothing
+Note: BX=0000h does not display anything, it only positions the hardware
+ cursor to the logical cursor's current position
+--------Q-1510-------------------------------
+INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
+ AH = 10h
+ AL = 04h thru 12h
+Return: pops up "Programming error" window in DV 2.x
+--------Q-151013-----------------------------
+INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
+ AX = 1013h
+ ES:DI -> FAR service routine
+Return: BX = bit mask indicating which bit was allocated
+ 0000h if no more bits available
+SeeAlso: AX=1014h,AX=1015h
+Note: only a few TopView/DESQview API calls are allowed during a hardware
+ interrupt; if other calls need to be made, the interrupt handler
+ must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
+--------Q-151014-----------------------------
+INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
+ AX = 1014h
+ BX = bit mask from INT 15/AX=1013h
+Return: nothing
+SeeAlso: AX=1013h,AX=1015h
+--------Q-151015-----------------------------
+INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
+ AX = 1015h
+ BX = bit mask for interrupts to post
+Return: indicated routines will be called: (DV 2.0x) at next task switch
+ (DV 2.2x) immediately on return from
+ hardware interrupt
+Notes: this is one of the few TopView calls which are allowed from a hardware
+ interrupt handler
+ the handler will be called with ES containing the segment of the handle
+ of the next task to be executed; on return, ES must be the segment of
+ a task handle
+SeeAlso: AX=1013h,AX=1014h
+--------Q-151016-----------------------------
+INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
+ AX = 1016h
+ ES:DI = possible object handle
+Return: BX = status
+ FFFFh if ES:DI is a valid object handle (see #00414)
+ 0000h if ES:DI is not
+Note: under DESQview versions prior to 2.50, an object handle is always a
+ pointer to the object; for versions 2.50 and up, only task handles
+ are always pointers--other handles may consist of a unique object
+ number and offset into DESQview's common memory (see #00423)
+SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
+
+(Table 00413)
+Values for DESQview object type:
+ 00h window/task
+ 01h mailbox
+ 02h keyboard
+ 03h timer
+ 04h pointer
+ 05h panel
+ 06h objectq
+
+Format of DESQview object:
+Offset Size Description (Table 00414)
+ 00h WORD offset in common memory of previous object of same type
+ 02h WORD offset in common memory of next object of same type
+ 04h WORD signature FEDCh (DV 2.42-)
+ signature FEDCh or object number (DV 2.50+)
+ 06h WORD object type (see #00413)
+ 08h DWORD object handle to return to caller
+ 0Ch DWORD canonicalized object address (segment = common memory)
+ 10h WORD offset in common memory of owning task
+ (0000h for unowned OBJECTQs)
+ 12h WORD mapping context
+ offset in common memory of mapping context record (see #00416)
+ remainder varies by object type and DESQview version
+---v2.42 keyboard object---
+ 14h WORD flag bits (see also AH=12h/BH=0Ah"OBJECT")
+ bit 15: keyboard opened
+ 16h 4 BYTEs ???
+ 1Ah WORD priority in OBJECTQ???
+ 1Ch ...
+ 25h WORD offset in common memory of ??? task
+ 27h 4 BYTEs ???
+---v2.42 objectq object---
+ 14h WORD flag bits (see also AH=12h/BH=0Ah"OBJECT")
+ bit 15: OBJECTQ opened
+ 16h 2 BYTEs ???
+ 18h WORD offset in common memory of ??? task
+ 1Ah 6 BYTEs ???
+---v2.42 mailbox object---
+ 14h WORD flag bits (see also AH=12h/BH=0Ah"OBJECT")
+ bit 15: mailbox opened
+ 1Ah WORD priority in OBJECTQ???
+ 1Ch 6 BYTEs ???
+ 22h WORD offset in common memory of mailbox name (counted string)
+ 0000h if no name
+ <= 5 BYTEs ???
+---v2.22-2.42,2.52,2.60 window/task object---
+ 14h BYTE 00h window, 01h task
+ 15h BYTE internal (not Switch menu) window number???
+ 16h BYTE internal (not Switch menu) window number???
+ 17h WORD segment of internal window record (see #00417)
+ 19h 2 BYTEs ???
+ 1Bh BYTE cursor row
+ 1Ch BYTE cursor column
+ 1Dh BYTE visible window origin, row
+ 1Eh BYTE visible window origin, column
+ 1Fh BYTE window height (logical)
+ 20h BYTE window width (logical)
+ 21h BYTE window position, row
+ 22h BYTE window position, column
+ 23h BYTE window height (visible)
+ 24h BYTE window width (visible)
+ 25h BYTE row of top of frame (or window if unframed)
+ 26h BYTE column of left of frame (or window if unframed)
+ 27h BYTE window height (physical, including frame)
+ 28h BYTE window width (physical, including frame)
+ 29h BYTE unzoomed visible origin, row (00h before first zoom)
+ 2Ah BYTE unzoomed visible origin, column (00h before first zoom)
+ 2Bh BYTE unzoomed window position, row (00h before first zoom)
+ 2Ch BYTE unzoomed window position, column (00h before first zoom)
+ 2Dh BYTE unzoomed window height (00h before first zoom)
+ 2Eh BYTE unzoomed window width (00h before first zoom)
+ unzoomed parameters above are updated when window is zoomed
+ to full screen
+ 2Fh BYTE ??? initially logical window height
+ 30h BYTE ??? initially logical window width
+ 31h 2 BYTEs ???
+ 33h BYTE minimum height of window
+ 34h BYTE minimum width of window
+ 35h BYTE maximum height of window
+ 36h BYTE maximum width of window
+ 37h 3 BYTEs ???
+ 3Ah 8 BYTEs window frame characters: ul,ur,ll,lr,t,b,l,r
+ 42h 24 BYTEs attributes???
+ 5Ah 8 BYTEs window frame characters: ul,ur,ll,lr,t,b,l,r
+ 62h 3 BYTEs ???
+ 65h BYTE ??? bitflags
+ 66h BYTE bit 0: window is zoomed
+ 67h BYTE ???
+ 68h WORD offset in common memory of window name or 0000h if untitled
+ 6Ah WORD length of window name
+ 6Ch 2 BYTEs ???
+ 6Eh WORD offset of logical cursor in window (in character cells)
+ 70h DWORD pointer to field table for window
+ 74h BYTE ???
+ 75h 2 BYTEs ???
+ 77h BYTE number of last-visited field
+ 78h DWORD pointer to field table entry for last-visited field
+ 7Ch 3 BYTEs ???
+ 7Fh BYTE select field marker character
+ 80h BYTE ??? bit flags
+ bit 0: allow ECh window stream opcode to change reverse logattr
+ bit 1: alternate field processing mode selected
+ 81h BYTE ???
+ 82h DWORD notification function (manager stream opcode 8Ah)
+ no notification if segment = 0000h
+ 86h DWORD notification argument (manager stream opcode 8Bh)
+ 8Ah WORD offset in common memory of ??? window object or 0000h
+ 8Ch WORD offset in common memory of ??? window object or 0000h
+ 8Eh WORD offset in common memory of ??? window object or 0000h
+ 90h BYTE ??? bitflags
+ 91h BYTE ???
+ ---task object only
+ 92h BYTE bit flags (bits 0-4)
+ 93h BYTE character for ??? (default 20h)
+ 94h BYTE ??? flag
+ 95h WORD offset in common memory of ???
+ 97h 2 BYTEs ???
+ 99h WORD ???
+ 9Bh BYTE ??? bit flags
+ bit 3: ???
+ bit 6: perform protected-attribute processing on select fields
+ 9Ch BYTE ???
+ 9Dh WORD offset in common memory of current register save record
+ (see #00415). No register save record in use if < 01C0h
+ 9Fh WORD offset in common memory of task's keyboard object
+ A1h WORD offset in common memory of task's OBJECTQ object
+ A3h WORD offset in common memory of task's mailbox object
+ A5h WORD semaphore: FFFFh if on user stack, else on task's private stack
+ A7h DWORD user's SS:SP
+ ABh WORD task's private SP (SS read from offset 0Ah)
+ ADh 6 BYTEs ???
+ B3h BYTE ??? bit flags
+ bit 0: run in foreground only
+ B4h BYTE ???
+ B5h BYTE ??? bitflags
+ B6h BYTE task status (see #00555 at AX=DE2Ch)
+ B7h 9 BYTEs ???
+ C0h WORD head pointer for keyboard buffer (wraps back to 00h after 80h)
+ C2h WORD tail pointer for keyboard buffer (wraps back to 00h after 80h)
+ C4h 2 BYTEs ??? (0000h)
+ C6h WORD segment of keyboard buffer for task
+ C8h WORD offset in common memory of ??? keyboard object
+ CAh BYTE ???
+---v2.22-2.42
+ CBh WORD offset in common memory of ??? object
+ CEh BYTE ??? flag
+ CFh WORD offset in common memory of default notify window for task
+ or 0000h if none
+ D1h 4 BYTEs ???
+ D5h BYTE window number on Switch Window menu
+ D6h 5 BYTEs ???
+ DBh WORD offset in common memory of ??? object
+ DDh 2 BYTEs ???
+ DFh WORD API level for task
+ E1h WORD offset in common memory of object task is waiting on if task
+ status is 'waiting', else 0000h
+ E7h WORD segment of ???
+ E9h 4 BYTEs ???
+ EDh WORD EMS handle of virtualization buffer, 0000h if no virtualization
+ F1h 12 BYTEs ???
+ FBh WORD ???
+ FDh BYTE ???
+ FFh 12 BYTEs ???
+10Bh DWORD pointer to process record (see #00418,#00419)
+10Dh 10 BYTEs ???
+119h DWORD SS:SP for ???
+11Dh 4 BYTEs ???
+121h DWORD pointer to ???
+125h 25 BYTEs ???
+13Eh DWORD pointer to ??? in system memory
+---v2.22
+142h 3 BYTEs ???
+145h task's default keyboard object
+---v2.42
+142h DWORD pointer to first task instance data record in system memory
+148h DWORD pointer to last task instance data record in system memory
+ (see #00420)
+14Ah BYTE ???
+14Dh 42 BYTEs task's default keyboard object
+177h 32 BYTEs task's ObjectQ object
+197h 41 BYTEs task's default mailbox object
+1C0h 24 BYTEs first register save record
+450h -- default top of private stack
+---v2.52 (probably all DV/X)
+Same as v2.60 below except there is an extra 29 bytes inserted somewhere
+ before offset 9Fh, but not yet known exactly where. Also, for the WAIT_ON
+ field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
+ 0000h even when waiting.
+---v2.60
+ CBh WORD ??? (added in 2.50 - rest is same as 2.42)
+ CDh WORD offset in common memory of ??? object
+ D0h BYTE ??? flag
+ D1h WORD offset in common memory of default notify window for task
+ or 0000h if none
+ D3h 4 BYTEs ???
+ D7h BYTE window number on Switch Window menu
+ D8h 5 BYTEs ???
+ DDh WORD offset in common memory of ??? object
+ DFh 2 BYTEs ???
+ E1h WORD API level for task
+ E3h WORD If status at B6h=waiting, offset in common memory of object
+ that task is waiting on, else 0000h. (Task with CPU also
+ has 0000h here)
+ E9h WORD segment of ???
+ EBh 4 BYTEs ???
+ EFh WORD EMS handle of virtualization buffer, 0 if no virtualization
+ F3h 12 BYTEs ???
+ FDh WORD ???
+ FFh BYTE ???
+101h 8 BYTEs ???
+109h DWORD pointer to process record in system memory
+10Dh 14 BYTEs ???
+11Bh DWORD SS:SP for ???
+11Fh 4 BYTEs ???
+123h DWORD pointer to ???
+127h 25 BYTEs ???
+140h DWORD pointer to ??? in system memory
+144h DWORD pointer to first task instance data record in system memory
+148h DWORD pointer to last task instance data record in system memory
+ (from INT 15/AX=DE27h) (see #00420)
+14Ch BYTE ???
+14Eh 42 BYTEs task's default keyboard object
+179h 32 BYTEs task's ObjectQ object
+199h 41 BYTEs task's default mailbox object
+1C2h 24 BYTEs first register save record
+452h -- default top of private stack
+
+Format of DESQview Register Save Record:
+Offset Size Description (Table 00415)
+ 00h WORD AX
+ 02h WORD BX
+ 04h WORD CX
+ 06h WORD DX
+ 08h WORD DI
+ 0Ah WORD SI
+ 0Eh WORD DS
+ 10h WORD ES
+ 12h DWORD return address
+ 16h WORD original flags
+
+Format of DESQview mapping context record:
+Offset Size Description (Table 00416)
+ 00h WORD lowest segment in process's memory
+ (often start of system memory chain)
+ 02h WORD size of process's memory in paragraphs
+ 04h BYTE flag: 00h if process swapped out, 01h otherwise
+ 05h BYTE flag: 00h if allocated in conventional memory, 01h if EMS
+ 06h 2 BYTEs ???
+ 08h WORD EMS handle if in EMS, else 0
+ 0Ah 2 BYTEs ??? (nonzero if system memory resides in shared mem???)
+ 0Ch WORD segment of system memory block that contains process record,
+ referenced from segment of start of system memory chain
+ 0Eh BYTE ???
+ 0Fh WORD size of system memory block that contains process record
+ and DOS memory in paragraphs
+ 11h BYTE bit flags
+ Bit 0: Swapped out???
+ Bit 1: ???
+ Bit 2: Swapped out???
+ 12h BYTE ???
+ 13h BYTE reference count
+ ---v2.31
+ 14h 10 BYTEs ???
+ 1Eh WORD segment of process record
+ 20h 2 BYTEs ???
+ 22h WORD segment of ??? (in first free system memory block???)
+ 24h WORD segment of end of system memory chain
+ 26h WORD segment of start of system memory chain
+ 28h 8 BYTEs ???
+ 2Ah DWORD pointer to ??? (process record???)
+ 2Dh 10 BYTEs ???
+ 37h BYTE lowest interrupt vector to save on context switch
+ 38h BYTE highest interrupt vector to save on context switch
+ 39h WORD offset in common memory of main task with this context
+ 3Ah 12 BYTEs ???
+ 46h BYTE internal mapping context number
+ 47h 12 BYTEs ???
+ ---v2.5x-2.60
+ 14h 6 BYTEs ???
+ 1Ah WORD segment of process record
+ 1Ch 2 BYTEs ???
+ 1Eh WORD segment of first free system memory block
+ 20h WORD segment of start of system memory chain
+ 22h WORD segment of end of system memory chain
+ 24h 8 BYTEs ???
+ 2Ch DWORD pointer to ??? (1 segment into process record???)
+ 30h 3 BYTEs ???
+ 33h WORD Offset in common memory of main task with this context
+ 35h 7 BYTEs ???
+ 3Ch BYTE internal mapping context number
+ 3Dh 14 BYTEs ???
+ 4Bh WORD first DOS memory segment (first MCB segment+1)
+ 4Dh BYTE ??? (flag???)
+ ---v2.53 (2.5x???)
+ 4Eh 12 BYTEs ???
+ ---v2.60
+ 4Eh WORD segment of script buffer (see #00421)
+ 50h 6 BYTEs ???
+
+Format of DESQview Internal Window Record (v2.31-2.60):
+Offset Size Description (Table 00417)
+ 00h BYTE internal window number???
+ 01h BYTE display page???
+ 02h BYTE video mode
+ 03h 3 BYTEs ???
+ 06h BYTE logical window height
+ 07h BYTE logical window width
+ 08h DWORD pointer to text video buffer
+ 0Ch 116 BYTEs ???
+
+Format of DESQview process record (v2.31):
+Offset Size Description (Table 00418)
+-470h 13 BYTEs filename of ??? Script
+-463h 1117 BYTEs ??? (script buffer???)
+ -6h 6 BYTEs ???
+ 00h WORD segment of parent PSP in process
+ 02h 5 BYTEs ???
+ 07h WORD segment of current PSP in process
+ 09h WORD segment of first MCB in process
+ 0Bh 13 BYTEs ???
+ 18h 1024 BYTEs process's interrupt vector table
+418h 376 BYTEs ???
+590h first MCB in process
+SeeAlso: #00419
+
+Format of DESQview process record (v2.52-v2.60) (probably also 2.5x):
+Offset Size Description (Table 00419)
+ 00h 28 BYTEs EXE header of last EXE, ??? if last program run was COM
+ 1Ch ??? BYTEs overwritten with ASCIZ filename of last program run (EXE/COM)
+11Ch WORD segment of parent PSP in process
+11Eh 4 BYTEs ???
+122h WORD segment of current PSP
+124h WORD segment of current PSP
+126h WORD segment of first MCB in process
+128h 4 BYTEs ???
+12Ch DWORD pointer to first process instance data record in system memory
+130h DWORD pointer to last process instance data record in system memory
+ (from INT 15/AX=DE27h) (see #00420)
+134h 8 BYTEs ???
+13Ch WORD size of current environment
+13Eh WORD segment of current environment
+140h WORD segment of current PSP
+142h DWORD entry point of current program
+146h 10 BYTEs ???
+---v2.52 (v2.5x???)
+150h BYTE ???
+151h WORD segment of parent PSP in process
+153h WORD ???
+155h WORD ???
+157h WORD ???
+159h 4 BYTEs ???
+15Dh WORD segment of current environment
+15Fh WORD segment of current PSP
+161h WORD segment of ???
+162h WORD ???
+164h 3 BYTEs ???
+168h 1024 BYTEs process's interrupt vector table
+568h 120 BYTEs ???
+5E0h first MCB in process
+---v2.60
+150h WORD segment of parent PSP in process
+152h WORD ???
+154h WORD ???
+156h WORD ???
+158h 4 BYTEs ???
+15Ch WORD segment of current environment
+15Eh WORD segment of current PSP
+160h WORD segment of ???
+162h WORD ???
+164h 1024 BYTEs process's interrupt vector table
+564h 108 BYTEs ???
+5D0h first MCB in process
+SeeAlso: #00418
+
+Format of DESQview task or process instance data record (v2.5x???, v2.60):
+Offset Size Description (Table 00420)
+ 00h DWORD pointer to next record of same type or 00000000
+ 04h DWORD pointer to previous record of same type or 00000000
+ 08h DWORD pointer to source area of memory during restore state
+ 0Ch WORD number of bytes to save/restore
+ 0Eh DWORD pointer to destination area of memory during restore state
+ 12h WORD ??? (0)
+ 14h N BYTEs source memory buffer during restore state
+
+Format of DESQview script buffer (v2.60):
+Offset Size Description (Table 00421)
+ 00h 13 BYTEs ASCIZ Script filename
+ 0Dh 80 BYTEs ???
+ 5Eh N BYTEs script records (see #00422)
+
+Format of one DESQview script record (v2.60):
+Offset Size Description (Table 00422)
+ 00h BYTE signature 12h
+ 01h 18 BYTEs blank-padded script name
+ 13h BYTE ASCII code of key attached to script or 0 if non-ASCII key
+ 14h BYTE scan code of key attached to script if non-ASCII, else 0
+ 15h BYTE ???
+ 16h WORD size of script in bytes
+ 18h N BYTEs script (ASCII code of each keystroke; if 0, next byte is
+ scan code of non-ASCII key)
+SeeAlso: #00421
+
+Format of DESQview Common Memory Header (v2.31-2.60):
+Offset Size Description (Table 00423)
+ 00h WORD offset of lowest used block
+ 02h WORD bytes of commom memory, including header
+ 04h WORD offset of first free block
+ 06h N BYTEs size depends of DV version, ??? (DVP buffer???)
+Note: the above is located at the beginning of the commom memory segment
+SeeAlso: #00424,#00425,#00433
+
+Format of DESQview Free block header:
+Offset Size Description (Table 00424)
+ 00h WORD size of block in bytes including header
+ 02h WORD offset of next free block
+ 04h N BYTEs free block
+SeeAlso: #00423,#00425
+
+Format of DESQview Used block header:
+Offset Size Description (Table 00425)
+ 00h WORD size of block in bytes including header
+ 02h N BYTEs used block
+SeeAlso: #00423,#00424
+--------Q-151017-----------------------------
+INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
+ AX = 1017h
+Return: pops up "Programming error" window in DV 2.x
+--------Q-151018-----------------------------
+INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
+ AX = 1018h
+ BH = column
+ BL = row
+ ES = segment of object handle for window below which to search
+ 0000h = start search with topmost window
+Return: ES = segment of object handle for window which is visible at the
+ indicated position, or covered by indicated window
+ 0000h if no window
+SeeAlso: AX=1023h,AX=1024h
+--------Q-151019-----------------------------
+INT 15 - TopView - "SOUND" - MAKE TONE
+ AX = 1019h
+ BX = frequency in Hertz (0000h = silence)
+ CX = duration in clock ticks (18.2 ticks/sec)
+Return: immediately, tone continues to completion
+Notes: if another tone is already playing, the new tone does not start until
+ completion of the previous one. Up to 32 tones may be queued before
+ the process is blocked until a note completes.
+ in DV 2.00, the lowest tone allowed is 20 Hz
+ if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
+ notes are also cancelled
+SeeAlso: AH=82h"HUNTER",INT 16/AH=73h
+--------Q-15101A-----------------------------
+INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
+ AX = 101Ah
+Return: stack switched
+Notes: this call may not be nested; a second call must be preceded by a call
+ to "USTACK" (AX=1025h)
+ while TopView requires many API calls to be executed while on the
+ task's internal stack, DESQview allows those calls to be executed
+ regardless of the current stack
+SeeAlso: AX=1025h
+--------Q-15101B-----------------------------
+INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
+ AX = 101Bh
+Return: task-switching temporarily disabled
+Notes: will not task-switch until "ENDC" (AX = 101Ch) called unless task
+ voluntarily releases the CPU (upon regaining the CPU, task-switching
+ will again be disabled)
+ suspends the caller until DOS is free
+SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
+SeeAlso: INT 60/DI=0602h
+--------Q-15101C-----------------------------
+INT 15 - TopView - "ENDC" - END CRITICAL REGION
+ AX = 101Ch
+Return: task-switching enabled
+Note: this API call may be made from within a hardware interrupt handler
+SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
+--------Q-15101D-----------------------------
+INT 15 - TopView - "STOP" - STOP TASK
+ AX = 101Dh
+ ES = segment of object handle for task to be stopped
+ (== handle of main window for that task)
+Return: indicated task will not get any CPU time until restarted with AX=101Eh
+Note: once a task has been stopped, additional "STOP"s are ignored
+BUG: in DV 2.00, this function is ignored unless the indicated task is the
+ current task
+SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
+--------Q-15101E-----------------------------
+INT 15 - TopView - "START" - START TASK
+ AX = 101Eh
+ ES = segment of object handle for task to be started
+ (== handle of main window for that task)
+Return: indicated task is started up again
+Note: once a task has been started, additional "START"s are ignored
+SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
+--------Q-15101F-----------------------------
+INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
+ AX = 101Fh
+ BX = bit fields
+ bits 0-12: number of characters to display
+ bits 13,14: which mouse button may be pressed to remove window
+ 00 = either
+ 01 = left
+ 10 = right
+ 11 = either
+ bit 15: beep if 1
+ ES:DI -> text of message
+ CH = width of error window (0 = default)
+ CL = height of error window (0 = default)
+ DX = segment of object handle
+Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
+Note: window remains on-screen until ESC or indicated mouse button is pressed
+--------Q-151020-----------------------------
+INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
+ AX = 1020h
+Return: pops up "Programming error" window in DV v2.00+
+--------Q-151021-----------------------------
+INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
+ AX = 1021h
+ BX = segment of object handle for task to interrupt (not self)
+ DX:CX -> FAR routine to jump to next time task is run
+Return: nothing
+Notes: the FAR routine is entered with the current ES, DS, SI, DI, and BP
+ values, using the task's internal stack (see AX=101Ah); only SS:SP
+ needs to be preserved
+ multiple PGMINTs to a single task are processed last-in first-out
+ if the other task is in a DOS or DV API call, the interruption will
+ occur on return from that call
+--------Q-151022BX0000-----------------------
+INT 15 - TopView - "GETVER" - GET VERSION
+ AX = 1022h
+ BX = 0000h
+Return: BX nonzero, TopView or compatible loaded
+ (BL = major version, BH = minor version)
+Notes: TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
+--------Q-151023-----------------------------
+INT 15 - TopView - "POSWIN" - POSITION WINDOW
+ AX = 1023h
+ BX = segment of object handle for parent window within which to
+ position the window (0 = full screen)
+ ES = segment of object handle for window to be positioned
+ DL = general window position (see #00426)
+ CH = number of columns to offset from position specified by DL
+ CL = number of rows to offset from position specified by DL
+Return: nothing
+
+Bitfields for TopView general window position:
+Bit(s) Description (Table 00426)
+ 0,1 horizontal position
+ 00 = current, 01 = center, 10 = left, 11 = right
+ 2,3 vertical position
+ 00 = current, 01 = center, 10 = top, 11 = bottom
+ 4 don't redraw screen if set
+ 5-7 not used
+--------Q-151024-----------------------------
+INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
+ AX = 1024h
+ BX = segment of object handle for window (0000h = use default)
+Return: ES:DI -> virtual screen
+ CX = size of virtual screen in bytes
+ DL = screen type
+ 00h text screen
+ 01h graphics screen
+SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
+--------Q-151025-----------------------------
+INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
+ AX = 1025h
+Return: stack switched back
+Notes: call only after having switched to internal stack with AX=101Ah
+ while TopView requires many API calls to be executed while on the
+ task's private stack, DESQview allows those calls to be executed
+ regardless of the current stack
+SeeAlso: AX=101Ah
+--------Q-1510-------------------------------
+INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
+ AH = 10h
+ AL = 26h thru 2Ah
+Return: pops up "Programming error" window in DV 2.x
+--------Q-15102B-----------------------------
+INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
+ AX = 102Bh
+ BX = segment of object handle for task
+Return: nothing
+Note: forces a task which is waiting on its objectq to continue by placing
+ the handle for the task on the objectq
+SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
+--------Q-15102C-----------------------------
+INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
+ AX = 102Ch
+ ES:DI -> contents of .PIF/.DVP file (see #00427)
+ BX = size of .PIF/.DVP info
+Return: BX = segment of object handle for new task
+ 0000h on error
+SeeAlso: AX=DE24h,INT 21/AH=4Bh
+
+Format of .PIF/.DVP file:
+Offset Size Description (Table 00427)
+ 00h BYTE reserved (0)
+ 01h BYTE checksum of bytes 02h through 170h
+ 02h 30 BYTEs blank-padded program title
+ 20h WORD maximum memory to allocate to partition in KB
+ 22h WORD minimum memory required in KB
+ 24h 64 BYTEs ASCIZ program pathname
+ 64h BYTE default drive letter ('A',...)
+ 65h 64 BYTEs ASCIZ default directory name
+ A5h 64 BYTEs ASCIZ program parameters
+ E5h BYTE initial screen mode (0-7) (also see offset 189h)
+ E6h BYTE number of text pages used
+ E7h BYTE number of first interrupt to save
+ E8h BYTE number of last interrupt to save
+ E9h BYTE rows in virtual screen buffer
+ EAh BYTE columns in virtual screen buffer
+ EBh BYTE initial window position, row
+ ECh BYTE initial window position, column
+ EDh WORD system memory in KB
+ EFh 64 BYTEs ASCIZ shared program name
+12Fh 64 BYTEs ASCIZ shared program data file
+16Fh BYTE program flags 1 (see #00428)
+170h BYTE flags2
+ bit 6: uses command-line parameters in field at A5h
+ bit 5: swaps interrupt vectors
+---information unique to .DVP files---
+171h 2 BYTEs keys to use on open menu
+173h WORD size of script buffer in bytes
+175h WORD automatically give up CPU after this many tests for keyboard
+ input in one clock tick (default 0 = never)
+177h BYTE nonzero = "uses own colors"
+178h BYTE nonzero if application swappable
+179h 3 BYTEs reserved (0) according to Quarterdeck documentation
+ in actual .DVP files, frequently 01h
+17Ch BYTE nonzero to automatically close on exit (see also #00430)
+17Dh BYTE nonzero if copy-protect floppy is required
+---information unique to DESQview 2.0+---
+17Eh BYTE .DVP version number
+ 00h DESQview v1.2+
+ 01h DESQview v2.0+
+ 02h DESQview v2.2+
+17Fh BYTE reserved (0)
+180h BYTE initial number of rows in physical window
+181h BYTE initial number of columns in physical window
+182h WORD maximum expanded memory to allow, in KB
+184h BYTE DVP program flags 3 (see #00429)
+185h BYTE keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
+ (see #00431)
+186h BYTE number of graphics pages used
+187h WORD extra system memory size
+189h BYTE initial screen mode (FFh = default) (overrides offset E5h)
+---information unique to DESQview 2.2+---
+18Ah BYTE serial port usage
+ FFh uses all serial ports
+ 00h no serial ports
+ 01h only COM1
+ 02h only COM2
+18Bh BYTE DVP program flags 4 (see #00430)
+18Ch BYTE protection level for 386 machines
+18Dh 19 BYTEs reserved (0) for regular DESQview
+---information unique to DESQview/X 1.0---
+18Dh BYTE X flags
+ bits 3-7: unused (0)
+ bit 2: don't display wait message when opening window
+ bit 1: don't display DOS window
+ bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
+ (NEWPROC) inherit DOS client layer usage
+18Eh BYTE X keyboard behavior (0-3)
+18Fh BYTE font scaling
+ 00h fixed fonts
+ 01h scalable fonts
+190h 10 BYTEs reserved (0)
+19Ah WORD length of data follownig XDVP signature
+19Ch 4 BYTEs signature "XDVP"
+1A0h N BYTEs list of variable length records (see #00432)
+
+Bitfields for .PIF/.DVP program flags 1:
+Bit(s) Description (Table 00428)
+ 7 writes text directly to screen
+ 6 runs in foreground only (see also #00427 offset 184h)
+ 5 uses math coprocessor
+ 4 accesses system keyboard buffer directly
+ 3-1 reserved (0)
+ 0 swappable
+SeeAlso: #00427,#00429,#00430
+
+Bitfields for .DVP program flags 3:
+Bit(s) Description (Table 00429)
+ 7 automatically assign window position
+ 5 maximum memory value has been specified
+ 4 disallow "Close" command
+ 3 foreground-only when doing graphics
+ set by DV 2.3+ when "Runs in Background" = "D" (undoc)
+ 2 don't virtualize (see also #00430)
+ 1 foreground-only during DOS calls
+ set by DV 2.3+ when "Runs in Background" = "D" (undoc)
+SeeAlso: #00427,#00428,#00430
+
+Bitfields for .DVP program flags 4:
+Bit(s) Description (Table 00430)
+ 7 automatically close application on exit if .COM or .EXE specified
+ (see also #00427 offset 17Ch)
+ 6 swappable if not using serial ports
+ 5 start program with window hidden (v2.26+)
+ 4 start program in background (v2.26+)
+ 3 virtualize text (see also #00429)
+ 2 virtualize graphics (see also #00429)
+ 1 share CPU when foreground
+ 0 share EGA when foreground and zoomed
+SeeAlso: #00427,#00428,#00429
+
+Bitfields for DESQview keyboard conflict level:
+Bit(s) Description (Table 00431)
+ 3 save/restore entire INT 09 handler state every taskswtch
+ 2 take special precautions for programs which read the BIOS keyboard
+ buffer directly from memory
+ 1 never indicate keystroke available during scripts/xfers
+ 0 only indicate keystroke available every sixth poll
+SeeAlso: #00427
+
+Format of DESQview/X variable length record:
+Offset Size Description (Table 00432)
+ 00h WORD length of following record, 0000h if end of record list
+ 02h BYTE record type
+ 01h script filename, up to 64 characters
+ 02h command-line parameters (allows >64 characters on cmdline)
+ 03h environment inheritance
+ 04h environment string
+ 05h starting window position
+---types 01h,02h,04h---
+ 03h N BYTEs ASCII data
+---type 03h---
+ 03h BYTE inheritance
+ 00h do not inherit
+ 01h inherit environment
+---type 05h---
+ 03h N BYTEs ASCII copy of fields as typed into DVPMAN, separated by commas:
+ starting row, starting column, starting height, starting width
+Note: if there are multiple occurrences of record types 01h, 02h, or 03h,
+ only the last instance of each type is used; multiple occurrences of
+ type 04h are concatenated
+SeeAlso: #00427
+--------Q-15102D-----------------------------
+INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
+ AX = 102Dh
+ BL = subfunction
+ 00h determine whether using keyboard mouse
+ Return: BL = 00h using real mouse
+ 01h using keyboard mouse
+ 01h turn keyboard mouse on
+ 02h turn keyboard mouse off
+SeeAlso: INT 33/AX=0024h
+--------Q-15102E-----------------------------
+INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
+ AX = 102Eh
+ BX = number of bytes
+Return: AX = status
+ 0000h successful
+ ES:DI -> allocated system memory (see #00433)
+ 0001h failed
+ ES:DI = 0000h:0000h
+Note: under DV 2.42, this call is identical to AX=1001h
+SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
+
+Format of DESQview system memory block header:
+Offset Size Description (Table 00433)
+ 00h WORD segment of next header or 0000h
+ 02h WORD segment of previous header or 0000h
+ 04h WORD size of block in paragraphs, including header
+ 06h BYTE availability flag (00h in use, 01h free)
+Note: this header is located one paragraph before the memory block proper
+SeeAlso: #00423
+--------Q-1511-------------------------------
+INT 15 - TopView commands
+ AH = 11h
+ AL = various (except 17h)
+Return: varies by function
+Note: in DESQview 2.x, these function calls are identical to AH=DEh, so
+ see those below
+SeeAlso: AX=DE00h,AX=DE22h,AX=DE30h
+--------T-1511-------------------------------
+INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
+ AH = 11h
+ STACK: DWORD pointer to ASCIZ string containing a VMiX shell
+ request (max len = 127)
+Return: AX = status (SYS_OK or SYS_ERROR)
+SeeAlso: AH=0Ch"VMiX"
+--------T-1511-------------------------------
+INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
+ AH = 11h
+Note: disables the Alt-Z MultiDOS command/program-selection hotkey
+SeeAlso: AH=12h"MultiDOS"
+Index: hotkeys;MultiDOS Plus
+--------Q-151117BX0000-----------------------
+INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
+ AX = 1117h
+ BX = 0000h get current mapping context without setting
+ nonzero set new mapping context
+Return: BX = mapping context in effect before call
+ interrupts enabled
+Notes: this function differs from AX = DE17h for DESQview v2.20 through 2.25
+ mapping contexts determine conventional-memory addressability; setting
+ a mapping context ensures that the associated program and data areas
+ are in memory for access. Usable by drivers, TSRs and shared
+ programs.
+ caller need not be running under DESQview, but must ensure that the
+ stack in use will not be mapped out by the call
+SeeAlso: AX=DE17h,INT 2F/AX=1685h
+--------m-1511DE-----------------------------
+INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
+ AX = 11DEh
+Return: CF clear if installed
+ AX = segment at which QEXT.SYS is located
+Desc: QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
+ versions also implement the XMS standard
+Note: a private entry point (see #00434) may be found by searching the
+ beginning of the returned segment for the signature string
+ "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
+ prior to the signature contains the QEXT version number in BCD,
+ and the word prior to that contains the offset within the QEXT
+ code segment of the private entry point
+SeeAlso: INT 2F/AX=4310h"XMS",INT 67/AH=3Fh
+
+(Table 00434)
+Call QEXT.SYS private entry point with:
+ AH = 00h ???
+ AH = nonzero ???
+--------T-1512-------------------------------
+INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
+ AH = 12h
+ STACK: WORD process ID
+Return: AX = status (SYS_OK or SYS_ERROR)
+SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
+--------T-1512-------------------------------
+INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
+ AH = 12h
+Note: enables the Alt-Z MultiDOS command/program-selection hotkey
+SeeAlso: AH=11h"MultiDOS"
+Index: hotkeys;MultiDOS Plus
+--------Q-1512--BH00-------------------------
+INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
+ AH = 12h
+ BH = 00h
+ BL = which handle to return
+ 00h handle in DWORD on top of stack
+ 01h current task's window handle
+ 02h given task's mailbox handle (task's handle on stack)
+ 03h current task's mailbox handle
+ 04h given task's keyboard handle (task's handle on stack)
+ 05h current task's keyboard object handle
+ 06h given task's OBJECTQ handle (task's handle on stack)
+ 07h current task's OBJECTQ handle
+ 08h \
+ thru > return 0000:0000 under DV < 2.26
+ 10h /
+ 0Ch (2.26+) task owning object with handle in DWORD on top of stack
+ 0Dh (2.26+) task handle of owner (parent) of current task
+Return: DWORD on top of stack is object handle
+Note: BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
+ mailbox, panel, pointer, and timer objects) or is an orphan (task,
+ window)
+SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
+--------Q-1512--BH01-------------------------
+INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
+ AH = 12h
+ BH = 01h
+ BL = object type to create (see #00435)
+ STACK: (only if window object or WINDOW class)
+ DWORD address to jump to (no new task if high word == 0)
+ DWORD (reserved) 0 = non-task window, FFFFh = task window
+ DWORD bytes for task's private stack (FFFFh == default of 0100h)
+ DWORD bytes system memory for input buffer for READ/READN
+ (0 == none, -1 == default--same as logical window size)
+ DWORD window size, columns
+ DWORD window size, rows
+ DWORD length of window title
+ DWORD address of window title
+Return: DWORD on top of stack is new object handle
+Notes: if a new task is created, it is started with
+ AX = BX = SI = DI = BP = 0
+ DX:CX = handle of parent task
+ DS = ES = SS = segment of private stack (and new task's handle)
+ new windows are orphans, inherit the colors/hidden status of the
+ creating task's window, and are placed in the upper left hand corner
+ of the screen but not automatically redrawn
+ new keyboards are closed, and have all object bits cleared except for
+ the hardware cursor bit
+SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
+
+(Table 00435)
+Values for TopView/DESQview object type (for creation):
+ 00h (DV 2.0x only) handle is DWORD on top of stack
+ 01h (DV 2.0x only) use task's window handle
+ 02h (DV 2.0x only) given task's mailbox (task's handle on stack)
+ 03h (DV 2.0x only) current task's mailbox
+ 04h (DV 2.0x only) given task's keyboard (task's handle on stack)
+ 05h (DV 2.0x only) current task's keyboard object
+ 08h WINDOW class
+ 09h MAILBOX class
+ 0Ah KEYBOARD class
+ 0Bh TIMER object (counts down 32-bit time in 10ms increments)
+ 0Fh POINTER object
+ 10h PANEL object
+--------Q-1512--BH02-------------------------
+INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
+ AH = 12h
+ BH = 02h
+ BL = object
+ 00h handle in DWORD on top of stack
+ window: close window and free
+ timer: free timer
+ panel: free panel object
+ pointer: free pointer
+ 01h task's window handle - kills task, never returns
+ 02h given task's mailbox (task's handle on top of stack)
+ 03h current task's mailbox
+ 04h given task's keyboard (task's handle on top of stack)
+ 05h current task's keyboard object
+Return: STACK popped if handle passed on stack
+Notes: when a window is freed, its keyboard and pointer objects are freed;
+ task windows also free any mailbox, objectq, and panel objects held
+ by the task and any child tasks
+ if the keyboard being freed is the default keyboard for a task, this
+ call is equivalent to CLOSE
+ panel and pointer objects are automatically closed if open
+SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
+--------Q-1512--BH03-------------------------
+INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
+ AH = 12h
+ BH = 03h
+ BL = object
+ 00h mailbox handle in DWORD on top of stack
+ 02h sender of last msg read from mailbox (task's handle on stack)
+ 03h sender of last msg read from current task's mailbox
+Return: DWORD on stack is task handle of message sender
+SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
+--------Q-1512--BH03-------------------------
+INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
+ AH = 12h
+ BH = 03h
+ BL = window to be connected
+ 00h handle of window to be attached in DWORD on top of stack
+ 01h attach current task's main window
+ STACK: DWORD handle of window to attach to or 00000000h to detach
+Return: STACK popped
+Notes: when two windows are connected, both will move if the user moves either
+ multiple windows may be attached to a single window, but each window
+ may only be attached to one window at a time
+SeeAlso: AH=12h/BH=83h
+--------Q-1512--BX0300-----------------------
+INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
+ AH = 12h
+ BX = 0300h
+ STACK: DWORD handle of panel object (see #00436)
+Return: STACK: DWORD length of directory (always multiple of 14 bytes)
+ DWORD address of directory
+Note: a null string is returned if the object is not open
+SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
+
+Format of TopView panel file:
+Offset Size Description (Table 00436)
+ 00h 2 BYTEs C0h C3h
+ 02h BYTE number of panels in file
+ 03h for each panel in file:
+ 8 BYTEs blank-padded panel name
+ DWORD panel offset in file
+ WORD panel length
+ data for panels (each consists of one or more window/query/manager
+ streams); first byte of each panel must be 1Bh, fifth byte must be
+ E5h
+--------Q-1512--BH04-------------------------
+INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
+ AH = 12h
+ BH = 04h
+ BL = window to read from
+ 00h handle is DWORD on top of stack
+ 01h use calling task's default window
+ 0Ch (DV 2.26+) default window of task owning handle on top of stack
+ 0Dh (DV 2.26+) default window of parent task of current task
+Return: STACK: DWORD number of bytes read
+ DWORD address of buffer
+Notes: reading starts at the current logical cursor position; the cursor is
+ updated to point at the character following the last one read
+ any translucent blanks (FFh) which are visible on screen are changed
+ to the character which is seen through them
+ the string produced by the read is placed in an input buffer which may
+ be reused by the next READ or READN of a window
+ window stream opcodes D8h and D9h determine whether the read returns
+ characters or attributes
+SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
+--------Q-1512--BH04-------------------------
+INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
+ AH = 12h
+ BH = 04h
+ BL = object
+ 00h handle is DWORD on top of stack
+ mailbox: wait for and get next message
+ keyboard: wait for and get pointer to next input buffer
+ pointer: wait for and get next message
+ 02h get next message from mailbox (task's handle on top of stack)
+ 03h get next message from current task's mailbox
+ 04h get the next input from keyboard (handle on top of stack)
+ 05h get the next input from task's default keyboard
+ 06h wait for input from any object in OBJECTQ (handle on stack)
+ 07h wait for input from any object in task's default OBJECTQ
+Return: STACK: (if objectq) DWORD handle of object with input
+ (otherwise) DWORD number of bytes
+ DWORD address of pointer message (see #00437)
+Notes: for a keyboard in keystroke mode, the input buffer is a single byte
+ containing the character code as returned by the BIOS; the BIOS scan
+ code is available via the STATUS call if the character is zero
+ for a keyboard in field mode, the input buffer format is determined
+ by the field table header for the window the keyboard is attached to
+ keyboard input buffers and mailbox message buffers may be invalidated
+ by the next READ, ERASE, CLOSE, or FREE message to the same object
+SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
+
+Format of DESQview pointer message:
+Offset Size Description (Table 00437)
+ 00h WORD row
+ 02h WORD column
+ 04h BYTE status (see #00438)
+ 05h BYTE field number or zero (APILEVEL >= 2.00 only)
+
+Bitfields for DESQview pointer status:
+Bit(s) Description (Table 00438)
+ 7-2 number of clicks-1 if multiple-click mode active
+ 7 set when press/release mode active and button pressed
+ 6 set when press/release mode active and button released
+ 1-0 button pressed (00=none,01=button1,10=button2)
+SeeAlso: #00437
+--------Q-1512--BX0400-----------------------
+INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
+ AH = 12h
+ BX = 0400h
+ STACK: DWORD timer's handle
+Return: after timer expires
+ STACK: DWORD time in 1/100 sec after midnight when timer expired
+SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
+--------Q-1512--BX0400-----------------------
+INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
+ AH = 12h
+ BX = 0400h
+ STACK: DWORD handle of panel object
+ DWORD window's handle (or 0 for current task's window)
+ DWORD length of panel name
+ DWORD pointer to panel name
+Return: STACK: DWORD handle of window which was used
+ DWORD handle of keyboard or 0
+Notes: status of APPLY may be checked with STATUS message
+ panel MUST have the following format
+ first byte must be 1Bh (i.e. must start with a stream)
+ first opcode in stream must be E5h
+ single byte arg of opcode is interpreted thus:
+ bits 7,6 11 means create new window
+ 10 means create new field table for existing window
+ 01 means use existing window and field table
+ bit 5 if set, panel contains a field table
+ (creates a new keyboard and puts it in field mode)
+ bit 4 if set, panel contains input fields
+ bit 3 if set, panel contains select fields but no input fields
+ if the panel contains input or select fields, a keyboard handle is
+ returned; either the window's current open keyboard or a
+ newly-created keyboard object. The caller should read that keyboard
+ to obtain input from the panel.
+SeeAlso: AH=12h/BH=84h
+--------Q-1512--BH05------------------------
+INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
+ AH = 12h
+ BH = 05h
+ BL = object
+ 00h handle is DWORD on top of stack
+ timer: start timer to end at a specified time
+ keyboard: add input buffer to queue
+ pointer: move pointer icon to specified position
+ 02h send message by value/status=0 to mbox (task's handle on stack)
+ 03h send message by value/status=0 to current task's mailbox
+ 04h add input buffer to KEYBOARD queue (handle on top of stack)
+ 05h add input buffer to task's default KEYBOARD queue
+ 06h add an object to OBJECTQ (handle on top of stack)
+ 07h add an object to task's default OBJECTQ
+ STACK: (if mailbox) DWORD length
+ DWORD address
+ (if keyboard) DWORD status (scan code in keystroke mode)
+ DWORD length (should be 1 in keystroke mode)
+ DWORD address
+ (if objectq) DWORD handle of object to add
+ (if timer) DWORD 1/100ths seconds since midnight (actually
+ only accurate to 1/18 sec)
+ (if pointer) DWORD column relative to origin of window
+ DWORD row relative to origin of window
+Return: STACK popped
+Notes: under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
+ the data and status written to a keyboard object must match the format
+ returned by the keyboard object in the current mode
+ the pointer position is scaled according to the current scaling factors
+SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
+--------Q-1512--BH05-------------------------
+INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
+ AH = 12h
+ BH = 05h
+ BL = window to write to
+ 00h DWORD on top of stack is window handle
+ 01h write string to task's default window
+ 0Ch (DV 2.26+) default window of task owning handle on top of stack
+ 0Dh (DV 2.26+) default window of parent of current task
+ STACK: DWORD object handle if handle passed on stack
+ DWORD total length of string (high word == 0)
+ DWORD address of string to display (see #00439)
+Return: indicated actions performed
+ a. non-control characters are displayed (opcodes DEh and DFh control
+ whether the attributes are left or changed to the current attrib)
+ b. CR/LF/BS/Tab cause the usual cursor movement
+ c. ESC starts a data structure with additional commands if following
+ byte is less than 20h; otherwise, it is written to the window
+ STACK: DWORD handle of new window if window stream opcode E6h
+ else nothing (arguments have been popped)
+SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
+
+Format of stream data structure:
+Offset Size Description (Table 00439)
+ 00h BYTE 1Bh magic value identifying start of stream
+ 01h BYTE stream type (00h, 01h, 10h, 14h-1Fh legal)
+ (see #00440,#00446,#00447,#00448)
+ 02h WORD length of remainder of stream in bytes
+ var-length fields follow, each an OPCODE followed by
+ zero or more args
+
+(Table 00440)
+Values for MODE 00h (set or display values) "WINDOW STREAM" opcodes:
+Opcodes:args
+ 00h display 20h blanks with the default attribute
+ 01h-1Fh display OPCODE blanks with the default attribute
+ 20h display char with default attribute 20h times
+ BYTE char to repeat
+ 21h-3Fh display char with default attribute OPCODE-20h times
+ BYTE char to repeat
+ 40h display 20h blanks with specified attribute
+ BYTE attribute of blanks
+ 41h-5Fh display OPCODE-40h blanks with specified attribute
+ BYTE attribute of blanks
+ 60h display next 20h characters
+ 20h BYTEs characters to display
+ 61h-7Fh display next OPCODE-60h characters
+ N BYTEs characters to display
+ 80h-87h display N blanks with default attribute
+ BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
+ [000h means 800h]
+ 88h-8Fh display N copies of the character
+ BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
+ [000h means 800h]
+ BYTE character to repeat
+ 90h-97h display N blanks with specified attribute
+ BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
+ [000h means 800h]
+ BYTE attribute
+ 98h-9Fh display string at logical cursor pos
+ BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
+ [000h means 800h]
+ N BYTEs string to display
+ A0h set logical cursor row
+ BYTE row number (0 is top)
+ A1h set logical cursor column
+ BYTE column number (0 is leftmost)
+ A2h set top edge of scrolling region
+ BYTE row
+ A3h set left edge of scrolling region
+ BYTE column
+ A4h set row of physical window position
+ BYTE line
+ A5h set column of physical window position
+ BYTE column
+ A6h set height of physical window
+ BYTE number of rows
+ A7h set width of physical window
+ BYTE number of columns
+ A8h set viewport row
+ BYTE row
+ A9h set viewport column
+ BYTE column
+ AAh set virtual screen height [contents of window unpredictable after]
+ BYTE rows
+ ABh set virtual screen width [contents of window unpredictable after]
+ BYTE columns
+ ACh-AEh unused
+ AFh set compatible/preferred video modes
+ BYTE compatibility/preference mask
+ bit 7 compatible with monochrome
+ bit 6 compatible with color text, EGA/VGA graphics
+ bit 5 compatible with medium-resolution CGA graphics
+ bit 4 compatible with high-resolution CGA graphics
+ bit 3 prefer monochrome
+ bit 2 prefer color text, EGA/VGA graphics
+ bit 1 prefer medium-resolution CGA graphics
+ bit 0 prefer high-resolution CGA graphics
+ B0h move logical cursor down
+ BYTE number of rows (signed, negative values move up)
+ [if rows=0 and hardware cursor owner, update hardware cursor]
+ B1h move logical cursor right
+ BYTE number of columns (signed, negative values move left)
+ [if cols=0 and hardware cursor owner, update hardware cursor]
+ B2h shift top edge of scrolling region
+ BYTE number of rows (signed)
+ B3h shift left edge of scrolling region
+ BYTE number of columns (signed)
+ B4h shift physical window down
+ BYTE number of lines (signed)
+ B5h shift physical window right
+ BYTE number of columns (signed)
+ B6h expand physical window vertically
+ BYTE number of lines (signed)
+ B7h expand physical window horizontally
+ BYTE number of columns (signed)
+ B8h adjust viewport row
+ BYTE number of rows (signed)
+ B9h adjust viewport column
+ BYTE number of columns (signed)
+ BAh adjust virtual screen height [contents of window unpredict after]
+ BYTE number of rows to increase (signed)
+ BBh adjust virtual screen width [contents of window unpredictbl after]
+ BYTE number of columns to increase (signed)
+ BCh-BFh reserved (currently unused)
+ C0h set logical cursor position
+ BYTE row number (0 is top border)
+ BYTE column number (0 is left border)
+ C1h set top left corner of scrolling region
+ BYTE row
+ BYTE column
+ C2h set physical window pos
+ BYTE upper left row (no top border if 0)
+ BYTE upper left column (no left border if 0)
+ C3h set current window size
+ BYTE number of rows
+ BYTE number of columns
+ C4h set upper left corner of viewport (portion of virtual screen displayed
+ in window)
+ BYTE row
+ BYTE column
+ C5h set size of virtual screen [contents unpredictable afterwards]
+ BYTE number of rows
+ BYTE number of columns
+ C6h unused
+ C7h unused
+ C8h set logical cursor relative to current position
+ BYTE number of rows to move down (signed)
+ BYTE number of columns to move right (signed)
+ [if rows=cols=0 and hardware cursor owner, update hardw cursor]
+ C9h shift top left corner of scrolling region
+ BYTE number of rows (signed)
+ BYTE number of columns (signed)
+ CAh set window pos relative to current position
+ BYTE number of rows to shift down (signed)
+ BYTE number of columns to shift right (signed)
+ CBh set window size relative to current size
+ BYTE number of rows to expand (signed)
+ BYTE number of cols to expand (signed)
+ CCh shift viewport relative to current position
+ BYTE rows to shift (signed)
+ BYTE cols to shift (signed)
+ CDh resize virtual screen
+ BYTE number of rows to expand (signed)
+ BYTE number of columns to expand (signed)
+ CEh scroll text when using E8h-EBh/F8h-FBh opcodes (default)
+ CFh scroll attributes when using E8h-EBh/F8h-FBh opcodes
+ D0h allow window frame to extend beyond screen
+ D1h always display a complete frame, even if window extends beyond edge of
+ screen
+ D2h allow DV to change logical colors on video mode switch (default)
+ D3h application changes logical attributes
+ D4h window is visible [must redraw to actually make visible]
+ D5h window is hidden [must redraw to actually remove]
+ D6h window has frame (default)
+ D7h window unframed [must redraw to actually remove frame]
+ D8h READ/READN will read characters from window (default)
+ D9h READ/READN will read attributes from window
+ DAh use logical attributes, which may be remapped (see #00441)
+ DBh use physical attributes for characters
+ DCh enable special actions for control characters (default)
+ DDh disable special control char handling, all chars displayable by BIOS TTY
+ call
+ DEh write both character and attribute (default)
+ DFh write character only, leave attribute untouched
+ E0h repeat following commands through E1h opcode
+ BYTE number of times to repeat (00h means 256 times)
+ E1h end of commands to repeat, start repeating them
+ E2h set current output color
+ BYTE color
+ E3h clear virtual screen from scroll origin to end using current color
+ E4h redraw window
+ E5h select menu style
+ BYTE style (normally 18h)
+ bits 5,4 = 01 use two-letter menu entries for remainder of
+ this stream
+ E5h (panel file only)
+ BYTE modifier
+ bits 7,6 = 11 panel stream creates new window
+ = 10 panel defines new field table for existing window
+ = 01 panel stream uses existing window & field table
+ bit 5 = 1 stream contains a field table (create kyboard object)
+ bit 4 = 1 stream defines input fields (create keyboard object)
+ bit 3 = 1 stream defines select fields but not input fields
+ bit 2 = 1 stream defines exclusive input window (DV 2.2)
+ bit 1 reserved
+ bit 0 reserved
+ E6h create new window and perform rest of manipulations in new window
+ BYTE number of rows
+ BYTE number of columns
+ Return: DWORD object handle of new window returned on stack at end
+ Note: the window is created with a physical size of 0x0 at the
+ same position as the window to which this stream was sent
+ E7h no operation
+ E8h scroll area up (top left corner defined by opcode C1h)
+ BYTE height
+ BYTE width
+ E9h scroll area down (top left corner defined by opcode C1h)
+ BYTE height
+ BYTE width
+ EAh scroll area left (top left corner defined by opcode C1h)
+ BYTE height
+ BYTE width
+ EBh scroll area right (top left corner defined by opcode C1h)
+ BYTE height
+ BYTE width
+ ECh set logical attributes for window contents
+ BYTE video modes command applies to
+ bit 7 monochrome
+ bit 6 color text, EGA/VGA graphics
+ bit 5 medium-resolution CGA graphics
+ bit 4 high-resolution CGA graphics
+ BYTE which attributes to set
+ bit 7 if set, copy single following byte to indicated attribs
+ bits 4-6 number of first attribute to change - 1
+ bits 0-3 number of consecutive attributes to change
+ N BYTEs new attributes
+ EDh set logical attributes for window frame
+ BYTE video modes command applies to (also see opcode ECh)
+ BYTE which attributes to set
+ bit 7 if set, copy single following byte to indicated attrs
+ bits 4-6 number of first attribute to change - 1
+ bits 0-3 number of consecutive attributes to change
+ N BYTEs new attributes
+ attributes
+ 1 = top left corner
+ 2 = top right corner
+ 3 = bottom left corner
+ 4 = bottom right corner
+ 5 = top edge
+ 6 = bottom edge
+ 7 = left edge
+ 8 = right edge
+ EEh set characters for window frame
+ BYTE video modes command applies to (also see opcode ECh)
+ BYTE which characters to set
+ bit 7 if set, copy single following byte to indicated chars
+ bits 4-6 number of first character to change - 1
+ bits 0-3 number of consecutive characters to change
+ N BYTEs new chars (same relative position as attributes above)
+ EFh set window name
+ BYTE length of name (should be in range 0 to logical screen width)
+ N BYTEs name
+ F0h clear input field to blanks
+ BYTE field number
+ F1h fill input field with character
+ BYTE field number
+ BYTE char
+ F2h set color of input field
+ BYTE field number (1-N)
+ BYTE attribute
+ F3h set initial contents of input field
+ BYTE field number (1-N)
+ N BYTEs enough chars to exactly fill field as defined by op FFh
+ F4h position cursor to start of specific input field
+ BYTE field number (1-N)
+ F5h change field table entry
+ BYTE field number
+ 7-8 BYTEs field table entry (also see opcode FFh below)
+ F6h set field type
+ BYTE field number
+ BYTE type
+ 00h inactive
+ 40h output field
+ 80h input field
+ C0h deselected field
+ C2h selected field
+ F7h "broadcast write" write data to fields with program output bit set in
+ the field table entry, in field number order
+ N BYTEs (total length of all program output fields)
+ F8h scroll field up a line
+ BYTE field number
+ F9h scroll field down a line
+ BYTE field number
+ FAh scroll field left
+ BYTE field number
+ FBh scroll field right
+ BYTE field number
+ FCh set field table header
+ 6 BYTEs field table header (see #00442)
+ FDh reset modified bit for all fields
+ FEh reset selected and modified bits for all fields
+ FFh set up input fields
+ 6 BYTEs table header (see #00442)
+ 7/8N BYTEs the field table entries, one for each field (see #00444)
+ Note: DESQview uses and updates the actual copy of the information
+ which is contained in the stream. Thus this info must remain
+ intact until after the data entry is complete.
+SeeAlso: #00439,#00446
+
+(Table 00441)
+Values for TopView logical attributes:
+ 01h normal text
+ 02h highlighted normal text
+ 03h help text
+ 04h highlighted help text
+ 05h error message
+ 06h highlighted error message
+ 07h emphasized text
+ 08h marked text
+ 9-16 reverse video versions of 1-8
+SeeAlso: #00440
+
+Format of TopView field table header:
+Offset Size Description (Table 00442)
+ 00h BYTE number of fields (must be <= existing number of fields)
+ 01h BYTE screen behavior bits (see #00443)
+ 02h BYTE current input field (updated by DESQview)
+ 03h BYTE current select field (updated by DESQview)
+ 04h BYTE attribute for select fields when they are pointed at
+ 05h BYTE attribute for select fields which have been selected
+SeeAlso: #00440,#00444
+
+Bitfields for TopView screen behavior bits:
+Bit(s) Description (Table 00443)
+ 7 reserved
+ 6 menu items may be selected via keyboard
+ 5 left mouse button in "status" mode (press anywhere in window
+ immediately returns control to application)
+ 4 right mouse button in "status" mode
+ 3 select fields return contents or blanks rather than 'Y' or 'N'
+ 2 modified bits reset on return to application
+ 1-0 type of data returned
+ 00 no data returned on read of keyboard
+ 01 data returned as array of characters containing all fields packed
+ together, with no field numbers
+ 10 data returned as numbered variable-length records for all fields
+ 11 data returned as numbered variable-length records for the fields
+ which were modified
+SeeAlso: #00440
+
+Format of TopView field table entry:
+Offset Size Description (Table 00444)
+ 00h BYTE start row \
+ 01h BYTE start column \ if menu selection and start is to
+ 02h BYTE end row / right or below end, select from kbd only
+ 03h BYTE end column /
+ 04h BYTE field type (see #00445)
+ 05h BYTE modifier
+ if type is fill-in, then bit flags to determine behavior
+ bit 7 automatically enter CR when field full
+ bit 6 move to next field when current field is full
+ bit 5 enter text from right end (for numbers)
+ bit 4 force input to uppercase
+ bit 3 clear old contents on first keystroke
+ bit 2 input returned when cursor moves out of
+ modified field ("validate", API level 2.02+)
+ bit 1 reserved
+ bit 0 reserved
+ if select field, first key to press to activate
+ 00h if have to point-&-click or is an extended-ASCII
+ keystroke (only if two-key menus enabled)
+ 06h BYTE (select field only) normal color of field
+ 07h BYTE second key for select field. This byte is present iff
+ two-letter menu entries selected with opcode E5h, and in that
+ case is present regardless of field type
+SeeAlso: #00442
+
+Bitfields for TopView field type:
+Bit(s) Description (Table 00445)
+ 7,6 field class
+ 00 inactive (non-entry) field
+ 01 echos keystrokes input to make menu selection
+ 10 fill-in field
+ 11 select field
+ 5 field can be filled by broadcast write (F7h opcode)
+ 4 reserved
+ 3 reserved
+ 2 reserved
+ 1 set if field selected
+ 0 set if field modified
+SeeAlso: #00444
+
+(Table 00446)
+Values for MODE 01h "QUERY STREAM" opcodes:
+(valid only for those opcodes listed here)
+ A0h return logical cursor row in next byte
+ A1h return logical cursor column in next byte
+ A2h return top row of scrolling region in next byte
+ A3h return left column of scrolling region in next byte
+ A4h return row of physical window origin in next byte
+ A5h return column of physical window origin in next byte
+ A6h return height of physcial window in next byte
+ A7h return width of physical window in next byte
+ A8h return row of viewport origin in next byte
+ A9h return column of viewport origin in next byte
+ AAh return height of virtual screen in next byte
+ ABh return width of virtual screen in next byte
+ AFh return current video mode in next byte
+ C0h return current logical cursor position in next two bytes
+ C1h return top left corner of scrolling region in next two bytes
+ C2h return current window position in next two bytes
+ C3h return current window size in next two bytes
+ C4h return current viewport origin in next two bytes
+ C5h return current virtual screen size in next two bytes
+ D0h \ overwritten with D0h if frames may fall off screen edge
+ D1h / D1h if frames always displayed entirely
+ D2h \ overwritten with D2h if DESQview controls color palette
+ D3h / D3h if application changes color palette
+ D4h \ overwritten with D4h if window visible
+ D5h / D5h if window hidden
+ D6h \ overwritten with D6h if window has frame
+ D7h / D7h if window unframed
+ D8h \ overwritten with D8h if reading characters from window
+ D9h / D9h if reading attributes from window
+ DAh \ overwritten with DAh if using logical attributes
+ DBh / DBh if using physical attributes
+ DCh \ overwritten with DCh if TTY control char interpretation on
+ DDh / DDh if TTY control char interpretation off
+ DEh \ overwritten with DEh if writing both characters and attributes
+ DFh / DFh if leaving attributes untouched
+ E2h return current color in next byte
+ ECh get logical attributes for window contents
+ BYTE execute call if currently in specified video mode
+ bit 7 monochrome
+ bit 6 color text, EGA/VGA graphics
+ bit 5 medium-resolution CGA graphics
+ bit 4 high-resolution CGA graphics
+ BYTE which attributes to get
+ bit 7 unused???
+ bits 4-6 first attribute to get - 1
+ bits 0-3 number of consecutive attributes
+ N BYTEs buffer to hold attributes
+ EDh get logical attributes for window frame
+ BYTE execute call if currently in video mode (also see opcode ECh)
+ BYTE which attributes to get
+ bit 7 unused???
+ bits 4-6 first attribute to get - 1
+ bits 0-3 number of consecutive attributes
+ N BYTEs buffer to hold attributes
+ EEh get characters for window frame
+ BYTE execute call if currently in video mode (also see opcode ECh)
+ BYTE which attributes to get
+ bit 7 unused???
+ bits 4-6 first char to get - 1
+ bits 0-3 number of consecutive chars
+ N BYTEs buffer to hold chars
+ EFh return first N characters of current window name
+ BYTE max length of returned name
+ N BYTEs buffer to hold window name
+ F3h return contents of specified field
+ BYTE field number
+ N BYTEs buffer to hold field contents (size equal to field size)
+ F5h get field table entry
+ BYTE field number
+ 7-8 BYTEs buffer to hold field table entry (see #00444)
+ Notes: DV < 2.26 always returns 7 bytes
+ DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field table
+ is using 8-byte entries and eighth byte after F5h is E7h
+ (NOP); otherwise, 7 bytes are returned
+ DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes depending
+ on the field table entry size
+ F6h get type of a field
+ BYTE field number
+ BYTE type
+ FCh get field table header
+ 6 BYTEs buffer to store field table header (see #00442)
+SeeAlso: #00439,#00447
+
+(Table 00447)
+Values for MODE 10h "MANAGER STREAM" opcodes (valid only for those listed):
+ 00h allow window to be moved horizontally
+ 01h allow window to be moved vertically
+ 02h allow window to change width
+ 03h allow window to change height
+ 04h allow window to be scrolled horizontally
+ 05h allow window to be scrolled vertically
+ 06h allow "Close Window" menu selection for application
+ 07h allow "Hide Window" menu selection for application
+ 08h allow application to be suspended ("Rearrange/Freeze")
+ 0Eh allow "Scissors" menu
+ 10h allow DESQview main menu to be popped up
+ 11h allow "Switch Windows" menu
+ 12h allow "Open Window" menu
+ 13h allow "Quit" menu selection
+ 20h-33h opposite of 00h-13h, disallow specified action
+ 40h notify if horizontal position of window changes
+ 41h notify if vertical position of window changes
+ 42h notify if width of window changes
+ 43h notify if height of window changes
+ 44h notify if window scrolled horizontally
+ 45h notify if window scrolled vertically
+ 46h notify if window is closed--program has to clean up and exit itself
+ 47h notify if window is hidden
+ 48h notify if "?" on main menu selected
+ 49h notify if pointer message sent to window
+ 4Ah notify if window is placed in foreground
+ 4Bh notify if window is placed in background
+ 4Ch notify if video mode changes
+ 4Dh notify if "Scissors" menu "Cut" option selected
+ 4Eh notify if "Scissors" menu "Copy" option selected
+ 4Fh notify if "Scissors" menu "Paste" option selected
+ 50h notify if DESQview main menu about to pop up
+ 51h notify if DESQview main menu popped down
+ 60h-71h opposite of 40h-51h: don't notify on specified event
+ 84h attach window to parent task's window (both move together)
+ 85h detach window from parent task's window (may move independently)
+ 86h disable background operation for application
+ 87h enable running in background
+ 88h set minimum size of physical window
+ BYTE rows
+ BYTE columns
+ 89h set maximum size of physical window
+ BYTE rows
+ BYTE cols
+ 8Ah set primary asynchronous notification routine (see #00449)
+ DWORD address of routine, 0000h:0000h means none (see also below)
+ 8Bh set async notification parameter
+ DWORD 32-bit value passed to 8Ah async routine in DS:SI
+ ACh (DV2.2+) perform regular select field attribute processing
+ ADh (DV2.2+) protect attributes in selected field from being lost
+ AEh make window default notify window for owning app (API level 2.00+)
+ AFh set selected field marker character
+ BYTE character to display at left edge of selected fields
+ BCh set standard field processing mode
+ BDh set alternate field processing mode (enables cursor pad for menus)
+ BEh disables changing reverse logical attributes with ECh opcode
+ BFh enables changing reverse logical attributes with ECh opcode
+ 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 orphan current window (also hides it)
+ Note: must be last in stream; all subsequent commands ignored
+ C6h show all 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 cancel current window manager operation, remove DV menu, give control
+ to topmost application
+ CCh orphan window and give it to the system for use as paste data
+ CEh reorder windows
+ DWORD pointer to null-terminated list of words; each word is segment
+ of object handle for a window
+ FFh no operation
+SeeAlso: #00439,#00446,#00448
+
+(Table 00448)
+Values for 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 = number of bytes in stream
+ ES:DI = window's handle
+SeeAlso: #00446,#00447
+
+(Table 00449)
+Values asynchronous notification routine defined by man.stream 8Ah called with:
+ ES:DI = handle of window
+ DS:SI is 32-bit value set by 8Bh manager stream opcode
+ mailbox contains message indicating event
+ Opcode
+ 40h horizontal movement
+ DWORD object handle of window
+ BYTE new row
+ BYTE new col
+ 41h vertical movement
+ DWORD object handle of window
+ BYTE new row
+ BYTE new col
+ 42h horizontal size change
+ DWORD object handle of window
+ BYTE new rows
+ BYTE new cols
+ 43h vertical size change
+ DWORD object handle of window
+ BYTE new rows
+ BYTE new cols
+ 44h scrolled horizontally
+ DWORD object handle of window
+ BYTE mouse row within window
+ BYTE mouse column within window
+ BYTE field mouse is on, 0 if none
+ BYTE amount moved: >0 right, <0 left, 0 done
+ 45h scrolled vertically
+ DWORD object hande of window
+ BYTE mouse row within window
+ BYTE mouse column within window
+ BYTE field mouse is on, 0 if none
+ BYTE amount moved: >0 down, <0 up, 0 done
+ 46h window close request
+ DWORD object handle of window
+ BYTE mouse pointer row
+ BYTE mouse pointer column
+ BYTE field mouse is on, 0 if none
+ 47h application's windows hidden
+ 48h Help for Program selected
+ DWORD object handle of window
+ BYTE mouse pointer row
+ BYTE mouse pointer column
+ BYTE field mouse is on, 0 if none
+ 49h pointer message sent to window
+ DWORD pointer handle which received message
+ 4Ah switched to window from another ("raise")
+ 4Bh switched away from the window ("lower")
+ 4Ch video mode changed
+ BYTE new BIOS video mode
+ 4Dh Scissors/cUt selected
+ DWORD object handle of window
+ BYTE row of upper left corner
+ BYTE column of upper left corner
+ BYTE field number ul corner is in, 0=none
+ DWORD handle of orphaned window created with
+ copy of data from specified region
+ BYTE height of region
+ BYTE width of region
+ 4Eh Scissors/Copy selected
+ DWORD object handle of window
+ BYTE row of upper left corner
+ BYTE column of upper left corner
+ BYTE field number ul corner is in, 0=none
+ DWORD handle of orphaned window created with
+ copy of data from specified region
+ BYTE height of region
+ BYTE width of region
+ 4Fh Scissors/Paste selected
+ DWORD object handle of window
+ BYTE row of upper left corner
+ BYTE column of upper left corner
+ BYTE field number ul corner is in, 0=none
+ DWORD handle of orphaned window with data
+ BYTE height of region
+ BYTE width of region
+ Note: orphaned data window should be adopted or freed
+ when done
+ 50h main menu about to pop up
+ 51h main menu popped down
+Return: all registers unchanged
+--------Q-1512--BH06-------------------------
+INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
+ AH = 12h
+ BH = 06h
+ BL = object
+ 00h object handle in DWORD on top of stack
+ mailbox, keyboard, pointer, or timer
+ (DV 2.50+) window
+ 01h (DV 2.50+) current task's window
+ 04h given task's keyboard (task's handle on top of stack)
+ 05h current task's default keyboard
+ STACK: DWORD new priority of object in task's OBJECTQ
+ (new priority of task if window handle)
+Return: STACK popped
+Notes: initially all objects have the same default value. Should only make
+ relative adjustments to this default value.
+ when changing priorities, all objects already on the objectq are
+ reordered
+ for window handles, only the non-blocked task(s) with the highest
+ priority receive CPU time under DESQview 2.50-2.52; the default
+ priority is 0Ah
+SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
+--------Q-1512--BH07-------------------------
+INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
+ AH = 12h
+ BH = 07h
+ BL = object
+ 00h object handle in DWORD on top of stack
+ mailbox, keyboard, pointer, or timer
+ (DV 2.50+) window
+ 01h (DV 2.50+) current task's window
+ 04h given task's keyboard (task's handle on top of stack)
+ 05h current task's default keyboard
+Return: STACK: DWORD object priority
+Note: initially all objects have the same default value. Should only make
+ relative adjustments to this default value.
+SeeAlso: AH=12h/BH=06h
+--------Q-1512--BH08-------------------------
+INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
+ AH = 12h
+ BH = 08h
+ BL = object
+ 00h handle in DWORD on top of stack
+ window: total character positions in window
+ timer: elapsed time since timer started
+ pointer: number of messages queued to pointer object
+ panel: number of panels in panel file
+ keyboard: number of input buffers queued
+ 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
+ 0Ch (DV 2.26+) total chars in window owning handle on top of stack
+ 0Dh (DV 2.26+) total chars in parent task's window
+Return: DWORD on top of stack is result (any handle on stack has been popped)
+Note: for panel objects, a count of zero is returned if no panel file is open
+ for the object
+SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
+--------Q-1512--BH09-------------------------
+INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
+ AH = 12h
+ BH = 09h
+ BL = object
+ 00h handle in DWORD on top of stack
+ window: get chars/line
+ timer: get 1/100 seconds remaining before timer expires
+ mailbox: (DV/X) get number of bytes queued to mailbox
+ 01h get number of chars/line in current task's default window
+ 0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
+ 0Dh (DV 2.26+) get chars/line in parent task's window
+Return: DWORD on top of stack is length (any handle on stack has been popped)
+SeeAlso: AH=12h/BH=08h
+--------Q-1512--BH0A-------------------------
+INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
+ AH = 12h
+ BH = 0Ah
+ BL = window to write to
+ 00h window handle is DWORD on top of stack
+ 01h current task's default window
+ 0Ch (DV 2.26+) default window of task owning handle on top of stack
+ 0Dh (DV 2.26+) default window of parent of current task
+ STACK: DWORD count of attributes
+ DWORD address of attribute string
+ DWORD count of characters
+ DWORD address of character string
+Return: STACK popped
+Notes: if one string is longer than the other, the shorter one will be reused
+ until the longer one is exhausted
+ the cursor is left just after the last character written
+SeeAlso: AH=12h/BH=0Bh"WINDOW"
+--------Q-1512--BH0A-------------------------
+INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
+ AH = 12h
+ BH = 0Ah
+ BL = mailbox to write to
+ 00h handle is DWORD on top of stack
+ 02h default mailbox of task whose handle is on top of stack
+ 03h current task's default mailbox
+ STACK: DWORD status (low byte)
+ DWORD length of message
+ DWORD address of message
+Return: STACK popped
+Notes: the message is copied into either system or common memory
+ insufficient memory normally causes the process to be aborted; under
+ DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
+SeeAlso: AH=12h/BH=0Bh"MAILBOX"
+--------Q-1512--BH0A-------------------------
+INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
+ AH = 12h
+ BH = 0Ah
+ BL = object
+ 00h handle is DWORD on top of stack
+ timer: start timer for specified interval
+ pointer: set control flags (see #00451)
+ keyboard: set control flags (see #00450)
+ 04h set control flags on KEYBOARD object (handle on top of stack)
+ 05h set control flags on task's default KEYBOARD object
+ STACK: (if timer) DWORD duration in 1/100 seconds
+ (otherwise) DWORD bits to set
+Return: STACK popped
+SeeAlso: AH=12h/BH=0Bh"OBJECT"
+
+Bitfields for DESQview keyboard object bits:
+Bit(s) Description (Table 00450)
+ 15 reserved, can't be set
+ 14 unused
+ 13 reserved, can't be set
+ 12-6 unused
+ 5 (DV 2.2+) exclusive input
+ 4 filter all keys (used with handler established by SETESC)
+ if 0, only keys that would normally be displayed are filtered
+ 3 program continues executing while input in progress
+ 2 insert mode active for field mode
+ 1 hardware cursor displayed when task is hardware cursor owner
+ must be set if keyboard in field mode and field table includes input
+ fields
+ 0 keyboard is in field mode rather than keystroke mode
+
+Bitfields for DESQview pointer object bits:
+Bit(s) Description (Table 00451)
+ 15 reserved, can't be set
+ 14-8 unused
+ 7 mouse pointer is hidden while in window
+ 6 get messages even if window not topmost
+ 5 get messages even if window not foreground
+ 4 multiple clicks separated by less than 1/3 second are counted and
+ returned in a single message
+ 3 pointer position is relative to screen origin, not window origin
+ 2 send message on button release as well as button press
+ 1 (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever the
+ pointer leaves the window
+ 0 send message only on button activity, not movement
+ DV-specific, and INT 15/AX=DE0Fh must have been called first
+--------Q-1512--BH0B-------------------------
+INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
+ AH = 12h
+ BH = 0Bh
+ BL = window to write attributes to
+ 00h handle is DWORD on top of stack
+ 01h current task's default window
+ 0Ch (DV 2.26+) default window of task owning handle on top of stack
+ 0Dh (DV 2.26+) default window of parent of current task
+ STACK: DWORD number of attributes to write
+ DWORD address of attributes
+Return: STACK popped
+Note: the attributes are written starting at the current cursor position; the
+ cursor is left just after the last position written
+SeeAlso: AH=12h/BH=0Ah"WINDOW"
+--------Q-1512--BH0B-------------------------
+INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
+ AH = 12h
+ BH = 0Bh
+ BL = mailbox to write to
+ 00h handle is DWORD on top of stack
+ 02h default mailbox of task whose handle is on top of stack
+ 03h current task's default mailbox
+ STACK: DWORD status (low byte)
+ DWORD length of message
+ DWORD address of message
+Return: STACK popped
+Notes: only a pointer to the message is stored, but the write may still fail
+ due to insufficient memory
+ under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
+SeeAlso: AH=12h/BH=0Ah"MAILBOX"
+--------Q-1512--BH0B-------------------------
+INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
+ AH = 12h
+ BH = 0Bh
+ BL = OBJECTQ from which to remove all copies of a particular object
+ 06h OBJECTQ of task whose handle is on top of stack
+ 07h task's default OBJECTQ
+ STACK: DWORD handle of object to remove
+Return: STACK popped
+Note: should be sent whenever an object is erased or closed
+--------Q-1512--BH0B-------------------------
+INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
+ AH = 12h
+ BH = 0Bh
+ BL = object
+ 00h handle is DWORD on top of stack
+ pointer: reset control flags
+ keyboard: reset control flags
+ 04h clear control flags on KEYBOARD object (handle on top of stack)
+ 05h clear control flags on task's default KEYBOARD object
+ STACK: DWORD which bits to clear (see #00450,#00451)
+Return: STACK popped
+SeeAlso: AH=12h/BH=0Ah"OBJECT"
+--------Q-1512--BH0C-------------------------
+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 from scroll origin to end
+ 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 char from scrl org to end
+ 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
+ 0Ch (DV 2.26+) fill def window of task owning handle on top of stck
+ 0Dh (DV 2.26+) fill default window of parent of current task
+ 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 or resident panel
+ DWORD address of filename or resident panel
+ (otherwise) nothing
+Return: STACK popped
+Notes: if first byte of panel file name is 1Bh, then the "name" IS a panel
+ 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
+ logical cursor is left at scroll origin after filling window
+ the task opening a mailbox becomes its owner, and the only task allowed
+ to read the mailbox
+ messages are only sent to a pointer object when the mouse is positioned
+ in the window to which the pointer has been attached
+ there is no need to explicitly open a timer object, as ADDTO and WRITE
+ messages automatically open the timer
+SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
+--------Q-1512--BH0D-------------------------
+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 and discard queued input
+ pointer: stop taking input
+ panel: close
+ mailbox: close, unlock, and discard any pending messages
+ 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 given task's OBJECTQ (task's handle on top of stack)
+ 07h close current task's OBJECTQ
+Return: STACK popped if handle passed on stack
+Notes: when an OBJECTQ is closed, each object in the OBJECTQ is sent an
+ ERASE message (AH=12h/BH=0Eh)
+ when a panel object is closed, the panel file and any panels currently
+ in use are freed; window and keyboard objects created by APPLY are
+ not affected, but field mode input ceases
+ open but idle timer objects consume a small amount of CPU time
+SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
+--------Q-1512--BH0E-------------------------
+INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
+ AH = 12h
+ BH = 0Eh
+ BL = object
+ 00h handle is DWORD on top of stack
+ window: clear from scroll origin to end of window
+ keyboard: discard input
+ timer: cancel current interval
+ pointer: discard all pending messages
+ mailbox: discard all pending messages
+ 01h clear task's default window from scroll origin to end
+ 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
+ 0Ch (DV 2.26+) clear window of task owning handle on top of stack
+ 0Dh (DV 2.26+) clear default window of parent of current task
+Return: STACK popped if handle passed on stack
+Note: when an OBJECTQ is erased, each object in the OBJECTQ is also erased
+SeeAlso: AH=12h/BH=02h
+--------Q-1512--BH0F-------------------------
+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 stat 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 (any handle passed on stack popped)
+Notes: if object is a panel object, the status indicates the error code:
+ 00h successful
+ 14h panel name not in panel directory
+ 15h not enough memory to apply panel
+ 16h invalid panel format
+ 17h panel file already open
+ 81h-92h DOS error codes+80h \ codes > 80h indicate
+ 95h not enough memory to open panel file > that the panel was
+ 98h null panel file name / not opened
+ if object is a timer, the status is:
+ 00000000h open but not running
+ 40000000h open and running
+ 80000000h closed
+ if object is an OBJECTQ, the status is:
+ 00000000h open
+ 80000000h closed
+ if object is a keyboard in keystroke mode, the status is the extended
+ character code (scan code) of the last keystroke
+ if object is a keyboard in field mode, the status indicates the reason
+ for the last return from the field manager
+ 00h Enter key pressed
+ 01h Button 1 or keystroke selection
+ 02h Button 2
+ 03h validation
+ 04h auto Enter on field
+ 1Bh Escape pressed
+ 46h ^Break pressed
+ other: extended code for key terminating input
+ the status of mailbox messages sent by the window manager is always 80h
+ the status of a pointer message is the same as the status field in the
+ message
+SeeAlso: AH=12h/BH=04h"READ"
+--------Q-1512--BH10-------------------------
+INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
+ AH = 12h
+ BH = 10h
+ BL = object
+ 00h handle is DWORD on top of stack
+ window: return TRUE if logical cursor past end of window
+ mailbox: ???
+ 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
+ 0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
+ 0Dh (DV 2.26+) check log cursor of window of parent task
+Return: DWORD on top of stack is status (any handle on stack has been popped)
+--------Q-1512--BH11-------------------------
+INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
+ AH = 12h
+ BH = 11h
+ BL = window for which to move cursor
+ 00h window's handle is DWORD on top of stack
+ 01h task's default window
+ 0Ch (DV 2.26+) default window of task owning handle on top of stack
+ 0Dh (DV 2.26+) default window of parent of current task
+ STACK: DWORD column
+ DWORD row
+Return: STACK popped
+--------Q-1512--BH11-------------------------
+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
+Return: STACK popped
+SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
+--------Q-1512--BX1100-----------------------
+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
+Return: STACK popped
+SeeAlso: AH=12h/BX=1200h
+--------Q-1512--BH12-------------------------
+INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
+ AH = 12h
+ BH = 12h
+ BL = window to read from
+ 00h handle is DWORD on top of stack
+ 01h read next N chars or attributes on task's default window
+ 0Ch (DV 2.26+) read window of task owning handle on top of stack
+ 0Dh (DV 2.26+) read default window of parent of current task
+ STACK: DWORD count
+Return: STACK: DWORD number of bytes actually read
+ DWORD address of buffer containing data
+Notes: reading starts at the current logical cursor position; the cursor is
+ updated to point at the character following the last one read
+ any translucent blanks (FFh) which are visible on screen are changed
+ to the character which is seen through them
+ the string produced by the read is placed in an input buffer which may
+ be reused by the next READ or READN of a window
+ window stream opcodes D8h and D9h determine whether the read returns
+ characters or attributes
+SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
+--------Q-1512--BH12-------------------------
+INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
+ AH = 12h
+ BH = 12h
+ BL = mailbox for which to retrieve 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 buffer for name
+ DWORD pointer to buffer
+Return: STACK: DWORD length of returned name (or size of buffer, if less)
+Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
+Note: the returned name is not NUL-terminated
+SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
+--------Q-1512--BX1200-----------------------
+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
+SeeAlso: AH=12h/BX=1100h
+--------Q-1512--BH13-------------------------
+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
+ 0Ch (DV 2.26+) redraw window of task owning handle on top of stack
+ 0Dh (DV 2.26+) redraw default window of parent of current task
+Return: STACK popped if handle was passed on stack
+SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
+--------Q-1512--BH13-------------------------
+INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
+ AH = 12h
+ BH = 13h
+ BL = mailbox from which to read
+ 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 size of buffer in bytes
+ DWORD pointer to buffer
+Return: STACK: DWORD number of bytes read
+Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
+Notes: this call blocks if no input is available, but will return less than
+ the requested number of bytes if some (but insufficient) data is
+ available
+ use this call instead of AH=12h/BH=04h if the mailbox has flag bits
+ 4 or 5 set, as common memory may be exhausted by that call when
+ attempting to read the next message
+SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
+--------Q-1512--BX1300-----------------------
+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
+Return: STACK popped
+--------Q-1512--BH14-------------------------
+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 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 (see #00452)
+Return: STACK popped
+
+(Table 00452)
+Values keyboard filter function is called with when keyboard is in field mode:
+ AL = character
+ AH = 00h or extended ASCII code if AL = 00h
+ BL = 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
+ DS:DI -> field table entry for field containing the cursor
+Return: AH = action to take
+ 00h use keystroke
+ 01h ignore keystroke
+ FFh beep and ignore keystroke
+Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
+--------Q-1512--BH14-------------------------
+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
+Return: STACK popped if BL=00h
+Note: release exclusive access by sending CLOSE message to mailbox
+ access may be requested multiple times, and requires multiple CLOSEs
+SeeAlso: AH=12h/BH=0Dh
+--------Q-1512--BH15-------------------------
+INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
+ 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 flags (see #00453,#00454)
+Return: STACK popped
+Notes: only available if the API level has been set to at least 2.20
+ equivalent to performing SUBFROM and ADDTO calls on the object
+ if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
+ "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
+SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
+
+Bitfields for DESQview mailbox object flags:
+Bit(s) Description (Table 00453)
+ 0 all mail messages in common memory
+ 1 allow write even if closed
+ 2 don't erase messages when mailbox closed
+ 4 (DV/X) append messages with like status and sender (stream-oriented
+ mail)
+ 5 (DV/X) store mail in expanded memory (pool grows as needed)
+ 6 (DV/X) make mailbox into non-owned mailbox
+
+Bitfields for DESQview keyboard object flags:
+Bit(s) Description (Table 00454)
+ 5 exclusive input when keyboard in use for input
+--------Q-1512--BH16-------------------------
+INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
+ 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 current control flags (see #00453,#00454)
+Notes: only available if the API level has been set to at least 2.20
+ if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
+ "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
+SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
+--------Q-1512--BH17-------------------------
+INT 15 - DESQview v2.42-2.52 - BUG
+ AH = 12h
+ BH = 17h
+ 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 popped if handle passed on stack
+Notes: due to a fencepost error, message 17h is accepted for mailboxes,
+ keyboards, and pointers, but causes a random branch
+ DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
+--------Q-1512--BH80-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 80h
+Note: this function is identical to AH=12h/BH=00h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=00h
+
+(Table 00455)
+Values for DESQview error code:
+ 00h no error
+ 01h invalid values
+ 02h alias invalid
+ 03h handle valid but wrong type
+ 04h invalid handle
+--------Q-1512--BH81-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 81h
+Note: this function is identical to AH=12h/BH=01h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=01h
+--------Q-1512--BH82-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 82h
+Note: this function is identical to AH=12h/BH=02h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=02h
+--------Q-1512--BH83-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 83h
+Note: this function is identical to AH=12h/BH=03h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
+--------Q-1512--BH84-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 84h
+Note: this function is identical to AH=12h/BH=04h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
+--------Q-1512--BH85-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 85h
+Note: this function is identical to AH=12h/BH=05h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=05h
+--------Q-1512--BH86-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 86h
+Note: this function is identical to AH=12h/BH=06h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=06h
+--------Q-1512--BH87-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 87h
+Note: this function is identical to AH=12h/BH=07h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=07h
+--------Q-1512--BH88-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 88h
+Note: this function is identical to AH=12h/BH=08h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=08h
+--------Q-1512--BH89-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 89h
+Note: this function is identical to AH=12h/BH=09h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=09h
+--------Q-1512--BH8A-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
+ AH = 12h
+ BH = 8Ah
+Note: this function is identical to AH=12h/BH=0Ah, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=0Ah
+--------Q-1512--BH8B-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
+ AH = 12h
+ BH = 8Bh
+Note: this function is identical to AH=12h/BH=0Bh, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=0Bh
+--------Q-1512--BH8C-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
+ AH = 12h
+ BH = 8Ch
+Note: this function is identical to AH=12h/BH=0Ch, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=0Ch
+--------Q-1512--BH8D-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
+ AH = 12h
+ BH = 8Dh
+Note: this function is identical to AH=12h/BH=0Dh, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=0Dh
+--------Q-1512--BH8E-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
+ AH = 12h
+ BH = 8Eh
+Note: this function is identical to AH=12h/BH=0Eh, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=0Eh
+--------Q-1512--BH8F-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
+ AH = 12h
+ BH = 8Fh
+Note: this function is identical to AH=12h/BH=0Fh, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=0Fh
+--------Q-1512--BH90-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 90h
+Note: this function is identical to AH=12h/BH=10h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=10h
+--------Q-1512--BH91-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 91h
+Note: this function is identical to AH=12h/BH=11h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
+--------Q-1512--BH92-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 92h
+Note: this function is identical to AH=12h/BH=12h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
+--------Q-1512--BH93-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 93h
+Note: this function is identical to AH=12h/BH=13h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=13h
+--------Q-1512--BH94-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 94h
+Note: this function is identical to AH=12h/BH=14h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=14h
+--------Q-1512--BH95-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 95h
+Note: this function is identical to AH=12h/BH=15h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=15h
+--------Q-1512--BH96-------------------------
+INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
+ AH = 12h
+ BH = 96h
+Note: this function is identical to AH=12h/BH=16h, except that DESQview will
+ not pop up a "Programming Error" window, instead returning an error
+ code in AL (see #00455)
+SeeAlso: AH=12h/BH=16h
+--------T-1513-------------------------------
+INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
+ AH = 13h
+ STACK: WORD process ID
+Return: AX = status (SYS_OK or SYS_ERROR)
+SeeAlso: AH=12h"VMiX"
+--------T-1513-------------------------------
+INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
+ AH = 13h
+Return: BX:AX -> task control block (see #00456)
+SeeAlso: AH=15h"MultiDOS"
+
+Format of MultiDOS Plus v4.0 task control block:
+Offset Size Description (Table 00456)
+ 00h DWORD pointer to next TCB
+ 04h 8 BYTEs ASCIZ task name
+ 0Ch 2 BYTEs ???
+ 0Eh WORD task PSP segment
+ 10h WORD abort/suspend flags
+ 12h WORD current screen segment (see AH=0Bh,AH=0Ch)
+ 14h WORD priority level (0000h-FFFEh)
+ 16h WORD time slice counter
+ 18h 2 BYTEs ???
+ 1Ah WORD suspend timer value
+ 1Ch WORD stack segment
+ 1Eh WORD stack pointer
+ 20h WORD display type
+ 22h WORD display memory
+ 24h 2 BYTEs ???
+ 26h WORD termination count
+ 28h WORD equipment flag for BIO10 driver
+ 2Ah BYTE background CRT mode
+ 2Bh WORD screen width in columns
+ 2Dh WORD screen size in bytes
+ 2Fh WORD segment of physical screen memory
+ 31h 16 BYTEs eight cursor positions
+ 41h WORD current cursor shape
+ 43h BYTE active display page
+ 44h WORD CRT controller I/O port base
+ 46h 2 BYTEs ???
+ 48h WORD foreground task flag
+ 4Ah 6 BYTEs ???
+ 50h WORD saved video segment (see AH=0Bh,AH=0Ch)
+ 52h DWORD old INT 22
+ 56h DWORD old INT 23
+ 5Ah DWORD old INT 24
+ 5Eh WORD top of memory for task
+ 60h 4 BYTEs ???
+ 64h WORD DTA segment (see INT 21/AH=1Ah)
+ 66h WORD DTA offset
+ 68h 4 BYTEs ???
+ 6Ch BYTE current ANSI.SYS attribute
+ 6Dh BYTE current ANSI.SYS column
+ 6Eh BYTE current ANSI.SYS row
+ 6Fh BYTE current ANSI.SYS display state
+ 70h BYTE maximum ANSI.SYS columns
+ 71h BYTE current ANSI.SYS page
+ 72h WORD saved ANSI.SYS cursor position
+ 74h BYTE ANSI.SYS parameter buffer index
+ 75h BYTE current ANSI.SYS screen mode
+ 76h BYTE ANSI.SYS wrap flag
+ 77h 6 BYTEs ANSI.SYS parameter buffer
+ 7Dh BYTE ANSI.SYS keyboard DSR state
+ 7Eh 7 BYTEs ANSI.SYS keyboard DSR buffer
+ 85h 3 BYTEs ???
+ 88h 16 BYTEs request header for DOS driver calls
+ 98h 14 BYTEs ???
+ A6h WORD segment of EMS map if EMS task
+ A8h WORD flag: task makes EMS calls
+ AAh WORD EMS handle for task
+ ACh WORD keyboard shift state
+ AEh 12 BYTEs ???
+ BAh WORD TCB of parent if child task
+ BCh WORD termination code
+ BEh WORD COM port number
+ C0h 4 BYTEs ???
+ C4h WORD current IRQ number
+ C6h 2 BYTEs ???
+ C8h WORD miscellaneous flag word
+ CAh 2 BYTEs ???
+ CCh DWORD old INT 10
+ D0h WORD EMS alternate map set number
+ D2h 414 BYTEs DOS current disk and directory context (optional)
+--------T-1514-------------------------------
+INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
+ AH = 14h
+ STACK: WORD top left corner of window (high byte = row, low = col)
+ WORD bottom right corner of window (high = row, low = col)
+Return: AX = status (SYS_OK)
+Note: clears window to color set with "sys_setcolors" (AH=18h)
+SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
+--------T-1514-------------------------------
+INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
+ AH = 14h
+Return: AX = current state
+ 0000h MultiDOS Plus command prompt is background task
+ 0001h command prompt is foreground task
+SeeAlso: AH=0Bh"MultiDOS"
+--------T-1515-------------------------------
+INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
+ AH = 15h
+ STACK: DWORD pointer to ASCIZ banner message for top of screen
+Return: AX = status (SYS_OK)
+SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
+--------T-1515-------------------------------
+INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
+ AH = 15h
+Return: BX:AX -> system block (see #00457)
+SeeAlso: AH=13h"MultiDOS"
+
+Format of MultiDOS Plus 4.0 system block:
+Offset Size Description (Table 00457)
+ 00h WORD segment of system control block
+ 02h WORD redirection flag set by /NOREDIRECT
+ 04h WORD no-INT 10 flag set by /NO10
+ 06h DWORD old INT 10
+ 0Ah DWORD new INT 10
+ 0Eh DWORD pointer to WORD with current TCB offset (see #00456)
+ 12h DWORD pointer to WORD with idle task TCB offset
+ 16h DWORD pointer to WORD with foreground TCB offset (see #00456)
+ 1Ah DWORD pointer to WORD with MultiDOS TCB offset (see #00456)
+ 1Eh WORD Task Control Block size
+ 20h WORD number of TCBs
+ 22h WORD flag: EMS present
+ 24h WORD EMS page frame base segment
+ 26h WORD 16K pages in EMS page frame
+ 28h WORD base segment for conventional memory tasks
+ 2Ah WORD conventional memory size in paragraphs
+ 2Ch DWORD pointer to list of queue pointers
+--------T-1516-------------------------------
+INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
+ AH = 16h
+ STACK: DWORD pointer to I/O Request Packet
+ WORD top left corner of window (high byte = row, low = col)
+ WORD bottom right corner of window (high = row, low = col)
+Return: AX = status (SYS_OK or SYS_ERROR)
+SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
+--------T-1516-------------------------------
+INT 15 - MultiDOS Plus - INITIALIZATION
+ AH = 16h
+Note: used internally during initialization; any other calls will cause
+ unpredictable results
+--------T-1517-------------------------------
+INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
+ AH = 17h
+Return: AH = foreground color
+ AL = background color
+SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
+--------T-1517-------------------------------
+INT 15 - MultiDOS Plus - MAP IRQ
+ AH = 17h
+ AL = IRQ to map (01h-0Fh)
+ BX = offset of task control block (see #00456) to associate with IRQ
+Return: AX = status
+ 0000h successful
+ other invalid IRQ
+Note: the EMS map of the specified TCB is associated with the given interrupt
+SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
+--------T-1518-------------------------------
+INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
+ AH = 18h
+ STACK: WORD new background/foreground colors
+ bits 3-0: foreground
+ bits 7-4: background
+ bits 15-8: unused
+Return: AX = color
+SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
+--------T-1518-------------------------------
+INT 15 - MultiDOS Plus - UNMAP IRQ
+ AH = 18h
+ AL = IRQ to unmap (01h-0Fh)
+Return: AX = status
+ 0000h successful
+ 0001h invalid IRQ
+Note: results are unpredictable if the IRQ has not been mapped
+SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
+--------T-1519-------------------------------
+INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
+ AH = 19h
+ STACK: WORD new background/foreground colors
+ bits 3-0: foreground
+ bits 7-4: background
+ bits 15-8: unused
+Return: AX = color
+SeeAlso: AH=18h"VMiX"
+--------T-1519-------------------------------
+INT 15 - MultiDOS Plus - UNMAP ALL IRQs
+ AH = 19h
+Return: AX destroyed
+Note: for MultiDOS internal use only
+SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
+--------T-151A-------------------------------
+INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
+ AH = 1Ah
+ STACK: WORD interrupt number
+ DWORD pointer to register structure
+Return: AX = returned flags
+--------T-151A-------------------------------
+INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
+ AH = 1Ah
+ DS:SI -> 8-byte name
+Return: AL = status
+ 00h successful
+ AH = semaphore number (20h-3Fh)
+ 04h out of string space
+Notes: all eight bytes of the name are significant
+ if the name does not already exist, it is added to the name table and
+ associated with a free semaphore number
+ names cannot be destroyed
+SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
+--------T-151B-------------------------------
+INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
+ AH = 1Bh
+ STACK: DWORD source address
+ DWORD destination address
+ WORD number of words to move
+Return: nothing
+--------T-151B-------------------------------
+INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
+ AH = 1Bh
+ DS:SI -> 8-byte name
+Return: AH = status
+ 00h successful
+ 02h invalid semaphore number
+ 03h caller already owns semaphore
+ 04h out of string space
+Notes: (see AH=01h"MultiDOS")
+ equivalent to AH=1Ah followed by AH=01h
+SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
+--------T-151C-------------------------------
+INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
+ AH = 1Ch
+ STACK: WORD AND/OR pixel with background (00h = OR, 01h = AND)
+ DWORD pointer to object bitmap
+ WORD object width in pixels
+ WORD object height in pixels
+Return: nothing
+SeeAlso: AH=1Dh"VMiX"
+--------T-151C-------------------------------
+INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
+ AH = 1Ch
+ DS:SI -> 8-byte name
+Return: AH = status
+ 00h successful
+ 01h not semaphore owner
+ 02h invalid semaphore number
+ 04h out of string space
+Notes: (see AH=02h"MultiDOS")
+ equivalent to AH=1Ah followed by AH=02h
+SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
+--------T-151D-------------------------------
+INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
+ AH = 1Dh
+Return: AX = current font number (00h-03h)
+SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
+--------T-151D-------------------------------
+INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
+ AH = 1Dh
+ DS:SI -> 8-byte name
+Return: AH = status
+ 00h semaphore not in use
+ 01h semaphore owned by another task
+ 02h invalid semaphore number
+ 03h caller owns semaphore
+ 04h out of string space
+Notes: (see AH=10h"MultiDOS")
+ equivalent to AH=1Ah followed by AH=10h
+SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
+--------T-151E-------------------------------
+INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
+ AH = 1Eh
+ STACK: WORD new font number (00h-03h)
+Return: AX = current font number (00h-03h)
+SeeAlso: AH=1Dh"VMiX"
+--------T-151E00-----------------------------
+INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
+ AX = 1E00h
+ DX = event/trigger number (00h-3Fh)
+Return: AH = status
+ 00h successful
+SeeAlso: AX=1E01h,AX=1E02h
+--------T-151E01-----------------------------
+INT 15 - MultiDOS Plus - TRIGGER EVENT
+ AX = 1E01h
+ DX = event/trigger number (00h-3Fh)
+Return: AH = status
+ 00h successful
+ 01h invalid event/trigger number
+Notes: schedules any task waiting for event; if no task is waiting, the event
+ counter is incremented (and will roll over if it was 65535)
+ may be invoked by interrupt handler
+SeeAlso: AX=1E00h,AX=1E02h
+--------T-151E02-----------------------------
+INT 15 - MultiDOS Plus - WAIT FOR EVENT
+ AX = 1E02h
+ DX = event/trigger number (00h-3Fh)
+Return: AH = status
+ 00h successful
+ 01h invalid event/trigger number
+Note: if the event counter is zero, the task is suspended until the event is
+ triggered with AX=1E01h; else, the counter is decremented and the
+ call returns immediately
+SeeAlso: AX=1E00h,AX=1E01h
+--------T-151E08-----------------------------
+INT 15 - MultiDOS Plus 4.01 - SET CONTEXT-SWITCH FUNCTIONS
+ AX = 1E08h
+ DX:BX -> context save handler (see #00458)
+ DX:CX -> context restore handler (see #00458)
+Return: nothing
+Note: handlers may be removed by setting addresses to 0000h:0000h
+
+(Table 00458)
+Values MultiDOS Plus context-switch handlers are called with:
+ ES:BX -> task's TCB
+Return: all registers preserved
+--------T-151F-------------------------------
+INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
+ AH = 1Fh
+ STACK: WORD top left corner of window (high byte = row, low = col)
+ WORD bottom right corner of window
+Return: AX = status (SYS_OK)
+SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
+--------T-151F-------------------------------
+INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
+ AH = 1Fh
+Return: BX = first segment of conventional memory
+ DX = first segment of EMS swap frame into which MultiDOS will load
+ programs
+--------T-1520-------------------------------
+INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
+ AH = 20h
+Return: AX = current state
+ 0000h multitasking enabled
+ other TCB of task that disabled multitasking
+SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
+--------c-152000-----------------------------
+INT 15 U - DOS 3.0+ PRINT.COM - DISABLE CRITICAL REGION FLAG
+ AX = 2000h
+Return: nothing
+Desc: stop setting user flag on entry to PRINT critical region
+Note: also supported by PC Network v1.00 RECEIVER.COM
+SeeAlso: AX=2001h
+--------c-152001-----------------------------
+INT 15 U - DOS 3.0+ PRINT.COM - SET CRITICAL REGION FLAG
+ AX = 2001h
+ ES:BX -> byte which is to be incremented while in a DOS call
+Return: nothing
+Desc: specify a user flag which PRINT should set to let an interested
+ application know it is in a critical region
+Note: also supported by PC Network v1.00 RECEIVER.COM
+SeeAlso: AX=2000h
+--------O-152010-----------------------------
+INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
+ AX = 2010h
+ ???
+Return: ???
+SeeAlso: AX=2011h
+--------O-152011-----------------------------
+INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
+ AX = 2011h
+ ???
+Return: ???
+SeeAlso: AX=2010h
+--------B-1521-------------------------------
+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 clear if successful
+ CF set on error
+ AH = status
+ 00h OK
+ 01h list full
+ 02h unsupported subfunction
+ 80h invalid command
+ 86h unsupported function
+ if function 00h:
+ BX = number of error codes stored
+ ES:DI -> error log
+Notes: the log is a series of words, the first byte of which identifies the
+ error code and the second the device.
+ supported by AMI PCI BIOS
+ IBM considers this a required BIOS function
+ if the device ID is FFh, the "error code" is the actual device number
+ minus 255 (thus these devices have no specific error codes)
+SeeAlso: AH=23h"SYSTEM",AH=24h"SYSTEM"
+--------B-1522-------------------------------
+INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
+ AH = 22h
+Return: CF set on error
+ AH = status (86h if function not supported)
+ CF clear on success
+ AH = 00h
+ ES:BX -> ROM BASIC
+Notes: if this function is not supported, ROM BASIC is at F600h:0000h
+ IBM classifies this function as optional
+SeeAlso: INT 86"BASIC",INT F0"BASIC"
+--------B-152300-----------------------------
+INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ??? CMOS DATA
+ AX = 2300h
+Return: CF clear if successful
+ CL = value of CMOS location 2Dh
+ CH = value of CMOS location 2Eh
+ CF set on error
+ AH = error code (80h,86h)
+Note: IBM classifies this function as optional
+SeeAlso: AX=2301h,AX=2304h,AX=2305h
+--------B-152301-----------------------------
+INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SET ??? CMOS DATA
+ AX = 2301h
+ CL = new value for CMOS location 2Dh
+ CH = new value for CMOS location 2Eh
+Return: CF clear if successful
+ CF set on error
+ AH = error code (80h,86h)
+Notes: sets the contents of CMOS locations 2Dh and 2Eh
+ IBM classifies this function as optional
+SeeAlso: AX=2300h,AX=2304h,AX=2305h
+--------B-152302-----------------------------
+INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ROM STARTUP VIDEO REG TABLES
+ AX = 2302h
+ BL = data index (00h-0Dh) (see #00459)
+Return: ES:BX -> table for register (see #00460,#00461)
+ CX = size of table in bytes (may be 0000h)
+Note: IBM classifies this function as optional
+SeeAlso: AX=2300h,AX=2301h,AX=2303h
+
+(Table 00459)
+Values for PS/1 ROM startup video register tables:
+ 00h DAC registers
+ 01h ???
+ 02h Palette registers
+ 03h-0Dh ???
+
+Format of PS/1 ROM startup DAC register table:
+Offset Size Description (Table 00460)
+ 00h WORD number of DAC registers in table
+ 02h var array of 3-byte DAC register values, starting at register 00h
+SeeAlso: #00459
+
+Format of PS/1 ROM startup Palette register table:
+Offset Size Description (Table 00461)
+ 00h 16 BYTEs colors for palette registers 00h through 0Fh
+ 10h BYTE border color
+SeeAlso: #00459,#00018
+--------B-152303-----------------------------
+INT 15 U - IBM BIOS - SMART ENERGY SYSTEM - ???
+ AX = 2303h
+ BX = ??? ('x')
+ DX = 'y' and 'z'
+ bits 15-7 = 'y'
+ bits 6-3 unused
+ bits 2-0 = 'z'
+ DI = ??? (0352h)
+Return: ???
+Notes: performs graphics functions, writes to segment A000h and VGA I/O ports
+ IBM classifies this function as optional
+--------B-152304-----------------------------
+INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SYSTEM SETUP
+ AX = 2304h
+ DX = segment of 32K buffer
+Return: CF clear if successful
+ AX = 0003h (left over from setting video mode 3)
+ BX,CX,DX,BP,DS,ES destroyed
+ CF set on error
+ AH = error code (80h,86h)
+Desc: run system setup utility, and optionally save any changed settings to
+ CMOS RAM
+Note: IBM classifies this function as optional
+SeeAlso: AX=2301h,AX=2305h
+--------B-152305-----------------------------
+INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET PROCESSOR SPEED
+ AX = 2305h
+Return: CF clear if successful
+ AL = processor speed in MHz
+ CF set on error
+ AL = FFh (speed unknown or >80 MHz)
+ AL = error code (80h,86h = unsupported function)
+Note: IBM classifies this function as optional
+SeeAlso: AX=2301h,AX=2304h,AH=BCh
+--------b-152400-----------------------------
+INT 15 - SYSTEM - later PS/2s - DISABLE A20 GATE
+ AX = 2400h
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status
+ 01h keyboard controller is in secure mode
+ 86h function not supported
+Notes: also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
+ IBM classifies this function as optional
+BUG: AMI BIOS v1.00.03.AV0M never reports an error on failure to disable
+ the A20 gate; it simply writes 0 to PORT 0092h
+SeeAlso: AX=2401h,AX=2402h,AX=2403h,PORT 0092h
+--------b-152401-----------------------------
+INT 15 - SYSTEM - later PS/2s - ENABLE A20 GATE
+ AX = 2401h
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status
+ 01h keyboard controller is in secure mode
+ 86h function not supported
+Notes: also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
+ IBM classifies this function as optional
+SeeAlso: AX=2400h,AX=2402h,PORT 0092h
+--------b-152402-----------------------------
+INT 15 - SYSTEM - later PS/2s - GET A20 GATE STATUS
+ AX = 2402h
+Return: CF clear if successful
+ AH = 00h
+ AL = current state (00h disabled, 01h enabled)
+ CX = ??? (set to 0000h-000Bh or FFFFh by AMI BIOS v1.00.03.AV0M)
+ FFFFh if keyboard controller does not become ready within C000h
+ read attempts
+ CF set on error
+ AH = status
+ 01h keyboard controller is in secure mode
+ 86h function not supported
+Notes: also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
+ IBM classifies this function as optional
+SeeAlso: AX=2400h,AX=2401h
+--------b-152403-----------------------------
+INT 15 - SYSTEM - later PS/2s - QUERY A20 GATE SUPPORT
+ AX = 2403h
+Return: CF clear if successful
+ AH = 00h
+ BX = status of A20 gate support (see #00462)
+ CF set on error
+ AH = status
+ 01h keyboard controller is in secure mode
+ 86h function not supported
+Notes: also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
+ IBM classifies this function as optional
+BUG: at one point early in processing INT 15/AH=24h, the AMI PCI BIOS
+ version 1.00.05.AX1 compares whether AL==03h instead of AL>=03h,
+ thus causing a random branch on any value of AL greater than 3.
+SeeAlso: AX=2402h
+
+Bitfields for A20 gate support status:
+Bit(s) Description (Table 00462)
+ 0 supported on keyboard controller
+ 1 supported with bit 1 of I/O port 92h
+ 14-2 reserved
+ 15 additional data is available (location not yet defined)
+--------T-153000-----------------------------
+INT 15 - Object Kernel for DOS - INSTALLATION CHECK
+ AX = 3000h
+Return: AX:BX = 4F42h:4A21h ('OBJ!') if installed
+ CX = resident segment
+Program: the Object Kernel is a program by M.W. Pieters which is currently
+ under development
+Note: Central Point's CPBACKUP v9 calls INT 15/AX=3000h at startup, but it
+ may be checking for a different program's presence
+SeeAlso: AX=3001h,AX=3008h
+--------T-153001-----------------------------
+INT 15 - Object Kernel for DOS - GET STATUS BLOCK
+ AX = 3001h
+Return: AX = FFFFh
+ ES:DI -> status block
+SeeAlso: AX=3000h,AX=3008h
+--------T-153002-----------------------------
+INT 15 - Object Kernel for DOS - KILL PROCESS
+ AX = 3002h
+ (not yet implemented)
+SeeAlso: AX=3000h
+--------T-153003-----------------------------
+INT 15 - Object Kernel for DOS - STOP PROCESS
+ AX = 3003h
+ (not yet implemented)
+SeeAlso: AX=3000h
+--------T-153004-----------------------------
+INT 15 - Object Kernel for DOS - START PROCESS
+ AX = 3004h
+ (not yet implemented)
+SeeAlso: AX=3000h
+--------T-153005-----------------------------
+INT 15 - Object Kernel for DOS - RESTART PROCESS
+ AX = 3005h
+ (not yet implemented)
+SeeAlso: AX=3000h
+--------T-153006-----------------------------
+INT 15 - Object Kernel for DOS - EXECUTE PROCESS
+ AX = 3006h
+ (not yet implemented)
+SeeAlso: AX=3000h
+--------T-153007-----------------------------
+INT 15 - Object Kernel for DOS - LIST PROCESSES
+ AX = 3007h
+ (not yet implemented)
+SeeAlso: AX=3000h
+--------T-153008-----------------------------
+INT 15 - Object Kernel for DOS - SWITCH ObjectKernel ON/OFF
+ AX = 3008h
+ BH = new state (00h disabled, 01h enabled)
+Return: AX = FFFFh
+SeeAlso: AX=3000h,AX=3009h
+--------T-153009-----------------------------
+INT 15 - Object Kernel for DOS - RESERVED FOR FUTURE USE
+ AX = 3009h to 30FFh
+SeeAlso: AX=3000h
+Program: the Object Kernel is a program by M.W. Pieters which is currently
+ under development
+----------153D-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 3Dh
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+----------153E-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 3Eh
+SeeAlso: AH=3Dh"IBM",AH=3Fh"IBM"
+----------153F-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 3Fh
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+--------B-1540-------------------------------
+INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
+ AH = 40h
+ AL = subfunction
+ 00h get system profile in CX and BX
+ 01h set system profile from CX and BX
+ 02h get internal modem profile in BX
+ 03h set internal modem profile from BX
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status (80h = profile execution failed)
+--------V-154000-----------------------------
+INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
+ AX = 4000h
+Return: AX = 4000h
+ CL = timeout in minutes, 00h if disabled
+SeeAlso: AX=4001h,AX=4600h
+--------V-154001-----------------------------
+INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
+ AX = 4001h
+ CL = timeout in minutes, 00h to disable
+Return: AL = status
+ 00h timeout modified
+ 01h timeout cannot be modified
+ 40h timeout cannot be modified
+ CL = timeout in minutes, 00h if disabled
+SeeAlso: AX=4000h,AX=4601h
+--------B-1541-------------------------------
+INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
+ AH = 41h
+ AL = condition type (see #00463)
+ BH = condition compare or mask value
+ BL = timeout value times 55 milliseconds
+ 00h means no timeout
+ DX = I/O port address if AL bit 4 set
+ ES:DI -> user byte if AL bit 4 clear
+Return: after event or timeout occurs
+Note: call AH=C0h and examine bit 3 of feature byte 1 to determine whether
+ this function is supported
+SeeAlso: AH=83h,AH=86h,AH=C0h
+
+Bitfields for external event wait condition type:
+Bit(s) Description (Table 00463)
+ 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
+ 3 reserved
+ 4 1=port address, 0=user byte
+ 5-7 reserved
+--------B-1542-------------------------------
+INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
+ AH = 42h
+ AL = suspend type
+ 00h to use system profile
+ 01h to force suspend regardless of system profile
+Return: nothing
+Note: the HP 95LX apparently suspends regardless of the value in AL; on
+ power-up, execution will resume following the instruction calling
+ this function
+SeeAlso: AH=44h
+--------b-154280-----------------------------
+INT 15 - Compaq SLT/286 - ENTER STANDBY
+ AX = 4280h
+Return: AH = 42h
+ CF clear if successful
+ CF set if unable to enter standby
+SeeAlso: AX=4600h,AX=5307h/CX=0001h"STAND-BY"
+--------B-1543-------------------------------
+INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
+ AH = 43h
+Return: AL = status bits (see #00464)
+
+Bitfields for Convertible system status:
+Bit(s) Description (Table 00464)
+ 7 power low
+ 6 external power in use
+ 5 standby power lost
+ 4 power activated by alarm
+ 3 internal modem powered on
+ 2 RS232/parallel adapter powered on
+ 1 reserved
+ 0 LCD detached
+--------B-1544-------------------------------
+INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
+ AH = 44h
+ AL = new modem power state (00h power off, 01h power on)
+Return: nothing
+SeeAlso: AH=42h
+--------b-1544C0-----------------------------
+INT 15 - Olivetti Quaderno - INITIALIZE DIGITAL SIGNAL PROCESSING???
+ AX = 44C0h
+ ES:DI -> new DSP procedure (exchanged with CMOS[28h])
+ ES:SI -> ??? buffer
+Return: ES:DI -> old DSP procedure
+ ES:SI buffer filled with ten bytes from CMOS (addresses 14h-1Ch)
+ followed by 00h (addresses 15h-1Ch copied only if less than 21h)
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C9h
+--------b-1544C1-----------------------------
+INT 15 - Olivetti Quaderno - ???
+ AX = 44C1h
+ ???
+Return: ???
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C9h
+--------b-1544C2-----------------------------
+INT 15 - Olivetti Quaderno - ???
+ AX = 44C2h
+ DL = byte to be written to I/O port 350h
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C3h,AX=44C9h
+--------b-1544C3-----------------------------
+INT 15 - Olivetti Quaderno - GET ???
+ AX = 44C3h
+Return: DH = bitfields (see #00465)
+ DL = value read from I/O port 350h
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C2h,AX=44C9h
+
+Bitfields for Olivetti Quaderno ???:
+Bit(s) Description (Table 00465)
+ 5-7 5-7 read from I/O port 351h
+ 2-4 zero
+ 1-0 "tres complique"
+--------b-1544C4-----------------------------
+INT 15 - Olivetti Quaderno - ???
+ AX = 44C4h and 44C5h
+ ???
+Return: ???
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C9h
+--------b-1544C6-----------------------------
+INT 15 - Olivetti Quaderno - READ LCD
+ AX = 44C6h
+Return: DX = FFFFh clock is displayed on LCD display
+ DX = other: hex number displayed in first four positions of display
+ BH = left alphanumeric character on display (see #00466)
+ BL = right alphanumeric character on display (see #00466)
+ CL = colon flags (see #00467)
+Notes: the LCD display has the format HH:HH:AA, where H is a hex digit and A
+ is an alphanumeric character
+ this function is also supported by XBIOS.COM
+SeeAlso: AX=44C7h,AX=44C9h
+
+(Table 00466)
+Values for Olivetti Quaderno LCD alphanumeric characters:
+ 00h-0Fh hex digit
+ 2Bh "+"
+ 2Dh "-"
+ 30h-39h "0" to "9"
+ 41h-5Ah "A" to "Z"
+ 61h-6Ah "a" to "z"
+ else blank
+
+Bitfields for Olivetti Quaderno LCD colon flags:
+Bit(s) Description (Table 00467)
+ 0 left colon on
+ 1 right colon on
+ 2-7 unused
+--------b-1544C7-----------------------------
+INT 15 - Olivetti Quaderno - WRITE LCD
+ AX = 44C7h
+ DX = hex display
+ FFFFh display clock and "HI", "Md", or "Lo"
+ BH,BL,CL unused
+ other: display specified hex number in first four positions
+ BH = left alphanumeric character on display (see #00466)
+ BL = right alphanumeric character on display (see #00466)
+ CL = colon flags (see #00467)
+Return: nothing
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C6h
+--------b-1544C8-----------------------------
+INT 15 - Olivetti Quaderno - ???
+ AX = 44C8h
+ CL = ??? (00h,02h,21h)
+ CH = ???
+ ???
+Return: ???
+Note: this function is also supported by XBIOS.COM
+SeeAlso: AX=44C9h
+--------b-1544C9-----------------------------
+INT 15 - Olivetti Quaderno - GET XBIOS VERSION
+ AX = 44C9h
+Return: AL = major version
+ AH = minor version
+Note: this function is also supported by XBIOS.COM
+--------B-1544F1-----------------------------
+INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
+ AX = 44F1h
+ DS:DX -> byte with 00h ???
+Return: ???
+Note: used by Toshiba BIOS setup utility TSETUP.EXE to distinguish
+ between USER and SUPERVISOR security level
+SeeAlso: AX=44F2h,AX=44F3h
+--------B-1544F2BX0604-----------------------
+INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
+ AX = 44F2h
+ BX = 0604h ???
+Return: CF = ???
+ AH = ???
+ DX = ???
+Note: used by Toshiba BIOS setup utility TSETUP.EXE to distinguish
+ between USER and SUPERVISOR security level
+SeeAlso: AX=44F1h,AX=44F3h
+--------B-1544F3-----------------------------
+INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
+ AX = 44F3h
+ DS:DX -> byte with 00h or 01h ???
+Return: DS:DX -> changed ???
+Note: used by Toshiba BIOS setup utility TSETUP.EXE to distinguish
+ between USER and SUPERVISOR security level
+SeeAlso: AX=44F1h,AX=44F2h
+--------b-1545-------------------------------
+INT 15 U - HP 100LX/200LX - SET DISPLAY CONTROL STATUS
+ AH = 45h
+ AL = new display control status
+ bit 0: DISPCTL flag +C instead of -C
+ bit 1: DISPCTL flag +K instead of -K
+SeeAlso: AH=46h"HP",AH=47h"HP"
+--------b-1546-------------------------------
+INT 15 U - HP 100LX/200LX - SET POWER OFF TIMEOUT
+ AH = 46h
+ BX = timeout value in ticks
+ 0000h inhibit auto power off
+Note: the 200LX default timeout is 0CCDh = 3277 ticks = approx. 3 min.
+SeeAlso: AH=45h"HP",AH=47h"HP"
+--------b-154600-----------------------------
+INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
+ AX = 4600h
+Return: AH = modem configuration information (see #00468)
+ AL = power conservation status information (see #00469)
+ BH = default system inactivity timeout (1-21 minutes)
+ BL = current system inactivity timeout (1-21 minutes)
+ CH = default video display inactivity timeout (1-63 minutes)
+ CL = current video display inactivity timeout (1-63 minutes)
+ DH = default fixed disk drive inactivity timeout (1-21 minutes)
+ DL = current fixed disk drive inactivity timeout (1-21 minutes)
+SeeAlso: AX=4280h,AX=4601h,INT 77
+
+Bitfields for Compaq SLT/286 modem configuration information:
+Bit(s) Description (Table 00468)
+ 0 powerup state (0 off, 1 on)
+ 1 modem installed
+ 2 IRQ line assignment (0 IRQ 4, 1 IRQ 3)
+ 3 COM port assignment (0 = COM 2, 1 = COM 1)
+ 4 modem state (0 not assigned, 1 assigned)
+ 5 modem is on
+
+Bitfields for Compaq SLT/286 power conservation status:
+Bit(s) Description (Table 00469)
+ 0 power source (0 internal, 1 external)
+ 1-2 low battery state
+ 00 no low battery condition
+ 01 low battery 1
+ 10 reserved
+ 11 low battery 2
+ 3-4 power conservation mode
+ 00 automatic, 01 on, 10 off, 11 reserved
+--------b-154601-----------------------------
+INT 15 - Compaq SLT/286 - MODIFY POWER CONSERVATION/MODEM CONFIGURATION
+ AX = 4601h
+ BL = system inactivity timeout (1-21 minutes)
+ FFh do not change
+ CL = video display inactivity timeout (1-63 minutes)
+ FFh do not change
+ DL = current fixed disk drive inactivity timeout (1-21 minutes)
+ FFh do not change
+ DH = new modem state (00h turn off, 01h turn on, FFh don't change)
+Return: CF clear if successful
+ AH = 00h
+ BL = current system inactivity timeout (1-21 minutes)
+ CL = current video display inactivity timeout (1-63 minutes)
+ DL = current fixed disk drive inactivity timeout (1-21 minutes)
+ DH = modem state (FFh unchanged, 00h turned off, 01h turned on)
+ CF set on error
+ AH = error code
+ 01h input is out of range
+ 02h no modem present
+SeeAlso: AX=4600h,INT 77
+--------b-154604-----------------------------
+INT 15 - Compaq Contura 486 and "Alladin" 1993/08/05 ROMs - GET ???
+ AX = 4604h
+Return: CF clear if successful
+ AL = byte read from I/O port 03F8h
+ CF set on error (not supported)
+ AH = 86h (unsupported function)
+Note: also supported by 1993/7/26 LTE Lite 386 ROM
+--------b-154605-----------------------------
+INT 15 - Compaq Contura 486 and "Alladin" 1993/08/05 ROMs - ???
+ AX = 4605h
+Return: CF clear if successful
+ CF set on error (not supported)
+ AH = 86h (unsupported function)
+Note: this function is a NOP (other than clearing CF) in the 1993/08/05
+ version of the Contura 486/486c/486cx and "Aladdin" ROM, and the
+ 1993/7/26 LTE Lite 386 ROM
+--------b-1547-------------------------------
+INT 15 U - HP 100LX/200LX - GET/SET DISPLAY CONTRAST
+ AH = 47h
+ AL = subfunction
+ 00h set contrast
+ BL = new contrast
+ (00h-0Fh, 0Fh is darkest, 10h-FFh are same as 0Fh)
+ other get current contrast
+Return: AL = contrast (00h-0Fh, 0Fh is darkest)
+Note: may be for backward compatibility with HP95LX, as INT 15/AH=62h does
+ substantially the same thing as this function
+SeeAlso: AH=45h"HP",AH=48h"HP",AH=62h"HP"
+--------b-1548-------------------------------
+INT 15 U - HP 100LX/200LX - SET BUZZER VOLUME
+ AH = 48h
+ AL = volume (00h-03h; 03h is loudest, 04h-FFh are same as 03h)
+SeeAlso: AH=47h"HP"
+--------S-1549-------------------------------
+INT 15 U - HP 100LX/200LX - SERIAL INTERFACE SELECT
+ AH = 49h
+ AL = serial interface
+ 00h wired (COM1)
+ 01h infrared
+Note: interface should only be changed in deactivated state (see AH=4Ah)
+SeeAlso: AH=4Ah"HP"
+--------J-154900-----------------------------
+INT 15 - Far East MS-DOS - GET BIOS TYPE
+ AX = 4900h
+Return: CF clear if successful
+ AH = 00h
+ BL = BIOS mode
+ 00h DOS/V
+ 01h standard DBCS DOS (hardware DBCS support)
+ CF set on error
+ AH = 86h (function not supported)
+Note: in practice, DOS/J returns AH=86h; AX DOS does not support this call
+SeeAlso: AH=50h,INT 21/AH=30h
+--------S-154A-------------------------------
+INT 15 U - HP 100LX/200LX - SERIAL INTERFACE CONTROL
+ AH = 4Ah
+ AL = control
+ 00h deactivate
+ 01h activate
+Note: interface selected with AH=49h will be (de)activated
+SeeAlso: AH=49h"HP",AH=4Bh"HP"
+--------b-154B-------------------------------
+INT 15 U - HP 100LX/200LX - ADJUST SYSTEM TIME
+ AH = 4Bh
+Desc: adjust system time based on real-time clock
+SeeAlso: AH=4Ah"HP",INT 1A/AH=02h,INT 21/AH=2Ch
+--------b-154DD4-----------------------------
+INT 15 - HP 95LX/100LX/200LX - INSTALLATION CHECK
+ AX = 4DD4h
+Return: BX = 4850h ("HP") if HP 95LX/100LX/200LX
+ CX = model
+ 0101h HP 95LX
+ 0102h HP 100LX/200LX
+ DH = ???
+ 02h HP 200LX 2MB BIOS 1.01 A D german
+ DL = ???
+ 00h HP 95LX
+ 01h HP 200LX 2MB BIOS 1.01 A D german
+SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
+SeeAlso: INT 61"HP 95LX"
+--------b-154E-------------------------------
+INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
+ AH = 4Eh
+ AL = light sleep
+ 00h disabled
+ 01h enabled
+Note: when light sleep is disabled, the system will continue running at full
+ speed; when enabled, it may automatically slow to conserve batteries
+SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
+----------154E-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 4Eh
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+--------B-154F-------------------------------
+INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
+ AH = 4Fh
+ AL = hardware scan code (see #00006)
+ CF set
+Return: CF set to continue processing scan code
+ AL = possibly-altered hardware scan code (see #00006)
+ CF clear
+ scan code should be ignored
+Notes: called by INT 09 handler to translate scan codes; the INT 09 code does
+ not examine the scan code it reads from the keyboard until after
+ this function returns. This permits software to rearrange the
+ keyboard; for example, swapping the CapsLock and Control keys, or
+ turning the right Shift key into Enter.
+ DOS 6 KEYB.COM will not pass through this function if Ctrl-Alt-Del is
+ pressed and a SmartDrive v4-compatible cache is installed which has
+ dirty cache buffers; some other disk caches such as HyperDisk
+ operate similarly in order to prevent loss of cached data which has
+ not yet been written to disk
+ IBM classifies this function as required
+SeeAlso: INT 09,INT 15/AH=C0h
+--------J-1550-------------------------------
+INT 15 - DOS/V - FONT SUBSYSTEM ACCESS
+ AH = 50h
+ AL = which function address to retrieve
+ 00h "read font" function
+ 01h "write font" function
+ BL = 00h
+ BH = character size (00h single-byte, 01h double-byte)
+ DH = width of character cell
+ DL = height of character cell
+ BP = code page (see #00470)
+Return: CF clear if successful
+ AH = 00h
+ ES:BX -> requested function's address
+ CF set on error
+ AH = error code (see #00471)
+SeeAlso: AH=49h
+
+(Table 00470)
+Values for DOS/V code page:
+ 0 default
+ 437 US English
+ 932 Japanese
+ 934 Korea
+ 936 China
+ 938 Taiwan
+SeeAlso: #01757
+
+(Table 00471)
+Values for DOS/V error code:
+ 01h invalid font type in BH
+ 02h BL not zero
+ 03h invalid font size
+ 04h invalid code page
+ 80h unsupported function (PC)
+ 86h unsupported function (XT)
+SeeAlso: #01680
+--------T-1550-------------------------------
+INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
+ AH = 50h
+ BX = segment of page directory table
+ CX = page number of page table
+SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
+--------T-1551-------------------------------
+INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
+ AH = 51h
+ STACK: DWORD selector:offset of function
+Return: registers as returned by function
+Note: executes function with privilege level 0 (highest privilege)
+SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
+--------B-155101-----------------------------
+INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
+ AX = 5101h
+Return: CF set if successful
+ AH = 00h
+ AL = current configuration number
+ 00h system unit only
+ FFh configuration not recognized
+ BX = status flag
+ bits 0-14: reserved
+ bit 15: additional data is available (location TBD)
+ CF clear on error
+ AH = status
+ 01h expansion unit is not present
+ 86h function not supported
+Note: CF convention is the reverse of the standard convention for this
+ interrupt. (Perhaps a typo in the IBM BIOS Tech Ref?)
+--------T-1552-------------------------------
+INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
+ AH = 52h
+SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
+--------d-1552-------------------------------
+INT 15 C - IBM/MS INT 13 Extensions - MEDIA EJECT INTERCEPT
+ AH = 52h
+ DL = drive number
+Return: CF clear if OK to eject media
+ AH = 00h
+ CF set if ejection disallowed
+ AH = error code (B1h,B3h) (see #00234)
+Note: called by the IBM/MS INT 13 Extensions driver/BIOS when an ejection
+ request is made
+SeeAlso: INT 13/AH=46h"INT 13 Extensions"
+--------p-155300-----------------------------
+INT 15 - Advanced Power Management v1.0+ - INSTALLATION CHECK
+ AX = 5300h
+ BX = device ID of system BIOS (0000h)
+Return: CF clear if successful
+ AH = major version (BCD)
+ AL = minor version (BCD)
+ BX = 504Dh ("PM")
+ CX = flags (see #00472)
+ CF set on error
+ AH = error code (06h,09h,86h) (see #00473)
+BUG: early versions of the Award Modular BIOS with built-in APM support
+ reportedly do not set BX on return
+
+Bitfields for APM flags:
+Bit(s) Description (Table 00472)
+ 0 16-bit protected mode interface supported
+ 1 32-bit protected mode interface supported
+ 2 CPU idle call reduces processor speed
+ 3 BIOS power management disabled
+ 4 BIOS power management disengaged (APM v1.1)
+ 5-7 reserved
+
+(Table 00473)
+Values for APM error code:
+ 01h power management functionality disabled
+ 02h interface connection already in effect
+ 03h interface not connected
+ 04h real-mode interface not connected
+ 05h 16-bit protected-mode interface already connected
+ 06h 16-bit protected-mode interface not supported
+ 07h 32-bit protected-mode interface already connected
+ 08h 32-bit protected-mode interface not supported
+ 09h unrecognized device ID
+ 0Ah invalid parameter value in CX
+ 0Bh (APM v1.1) interface not engaged
+ 0Ch (APM v1.2) function not supported
+ 0Dh (APM v1.2) Resume Timer disabled
+ 0Eh-1Fh reserved for other interface and general errors
+ 20h-3Fh reserved for CPU errors
+ 40h-5Fh reserved for device errors
+ 60h can't enter requested state
+ 61h-7Fh reserved for other system errors
+ 80h no power management events pending
+ 81h-85h reserved for other power management event errors
+ 86h APM not present
+ 87h-9Fh reserved for other power management event errors
+ A0h-FEh reserved
+ FFh undefined
+--------p-155301-----------------------------
+INT 15 - Advanced Power Management v1.0+ - CONNECT REAL-MODE INTERFACE
+ AX = 5301h
+ BX = device ID of system BIOS (0000h)
+Return: CF clear if successful
+ CF set on error
+ AH = error code (02h,05h,07h,09h) (see #00473)
+Note: on connection, an APM v1.1 or v1.2 BIOS switches to APM v1.0
+ compatibility mode until it is informed that the user supports a
+ newer version of APM (see AX=530Eh)
+SeeAlso: AX=5302h,AX=5303h,AX=5304h
+--------p-155302-----------------------------
+INT 15 R - Advanced Power Management v1.0+ - CONNECT 16-BIT PROTMODE INTERFACE
+ AX = 5302h
+ BX = device ID of system BIOS (0000h)
+Return: CF clear if successful
+ AX = real-mode segment base address of protected-mode 16-bit code
+ segment
+ BX = offset of entry point
+ CX = real-mode segment base address of protected-mode 16-bit data
+ segment
+ ---APM v1.1---
+ SI = APM BIOS code segment length
+ DI = APM BIOS data segment length
+ CF set on error
+ AH = error code (02h,05h,06h,07h,09h) (see #00473)
+Notes: the caller must initialize two consecutive descriptors with the
+ returned segment base addresses; these descriptors must be valid
+ whenever the protected-mode interface is called, and will have
+ their limits arbitrarily set to 64K.
+ the protected mode interface is invoked by making a far call with the
+ same register values as for INT 15; it must be invoked while CPL=0,
+ the code segment descriptor must have a DPL of 0, the stack must be
+ in a 16-bit segment and have enough room for BIOS use and possible
+ interrupts, and the current I/O permission bit map must allow access
+ to the I/O ports used for power management.
+ functions 00h-03h are not available from protected mode
+ on connection, an APM v1.1 or v1.2 BIOS switches to APM v1.0
+ compatibility mode until it is informed that the user supports a
+ newer version of APM (see AX=530Eh)
+SeeAlso: AX=5301h,AX=5303h,AX=5304h
+--------p-155303-----------------------------
+INT 15 - Advanced Power Management v1.0+ - CONNECT 32-BIT PROTMODE INTERFACE
+ AX = 5303h
+ BX = device ID of system BIOS (0000h)
+Return: CF clear if successful
+ AX = real-mode segment base address of protected-mode 32-bit code
+ segment
+ EBX = offset of entry point
+ CX = real-mode segment base address of protected-mode 16-bit code
+ segment
+ DX = real-mode segment base address of protected-mode 16-bit data
+ segment
+ ---APM v1.1---
+ SI = APM BIOS code segment length
+ DI = APM BIOS data segment length
+ CF set on error
+ AH = error code (02h,05h,07h,08h,09h) (see #00473)
+Notes: the caller must initialize three consecutive descriptors with the
+ returned segment base addresses for 32-bit code, 16-bit code, and
+ 16-bit data, respectively; these descriptors must be valid whenever
+ the protected-mode interface is called, and will have their limits
+ arbitrarily set to 64K.
+ the protected mode interface is invoked by making a far call to the
+ 32-bit code segment with the same register values as for INT 15; it
+ must be invoked while CPL=0, the code segment descriptor must have a
+ DPL of 0, the stack must be in a 32-bit segment and have enough room
+ for BIOS use and possible interrupts, and the current I/O permission
+ bit map must allow access to the I/O ports used for power management.
+ functions 00h-03h are not available from protected mode
+ on connection, an APM v1.1 or v1.2 BIOS switches to APM v1.0
+ compatibility mode until it is informed that the user supports a
+ newer version of APM (see AX=530Eh)
+SeeAlso: AX=5301h,AX=5302h,AX=5304h
+--------p-155304-----------------------------
+INT 15 - Advanced Power Management v1.0+ - DISCONNECT INTERFACE
+ AX = 5304h
+ BX = device ID of system BIOS (0000h)
+Return: CF clear if successful
+ CF set on error
+ AH = error code (03h,09h) (see #00473)
+SeeAlso: AX=5301h,AX=5302h,AX=5303h
+--------p-155305-----------------------------
+INT 15 - Advanced Power Management v1.0+ - CPU IDLE
+ AX = 5305h
+Return: CF clear if successful (after system leaves idle state)
+ CF set on error
+ AH = error code (03h,0Bh) (see #00473)
+Notes: call when the system is idle and should be suspended until the next
+ system event or interrupt
+ should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+ if an interrupt causes the system to resume normal processing, the
+ interrupt may or may not have been handled when the BIOS returns
+ from this call; thus, the caller should allow interrupts on return
+ interrupt handlers may not retain control if the BIOS allows
+ interrupts while in idle mode even if they are able to determine
+ that they were called from idle mode
+ the caller should issue this call continuously in a loop until it needs
+ to perform some processing of its own
+SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
+--------p-155306-----------------------------
+INT 15 - Advanced Power Management v1.0+ - CPU BUSY
+ AX = 5306h
+Return: CF clear if successful
+ CF set on error
+ AH = error code (03h,0Bh) (see #00473)
+Notes: called to ensure that the system runs at full speed even on systems
+ where the BIOS is unable to recognize increased activity (especially
+ if interrupts are hooked by other programs and not chained to the
+ BIOS)
+ this call may be made even when the system is already running at full
+ speed, but it will create unnecessary overhead
+ should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+SeeAlso: AX=5305h
+--------p-155307-----------------------------
+INT 15 - Advanced Power Management v1.0+ - SET POWER STATE
+ AX = 5307h
+ BX = device ID (see #00474)
+ CX = system state ID (see #00475)
+Return: CF clear if successful
+ CF set on error
+ AH = error code (01h,03h,09h,0Ah,0Bh,60h) (see #00473)
+Note: should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+SeeAlso: AX=530Ch
+
+(Table 00474)
+Values for APM device IDs:
+ 0000h system BIOS
+ 0001h all devices for which the system BIOS manages power
+ 01xxh display (01FFh for all attached display devices)
+ 02xxh secondary storage (02FFh for all attached secondary storage devices)
+ 03xxh parallel ports (03FFh for all attached parallel ports)
+ 04xxh serial ports (04FFh for all attached serial ports)
+---APM v1.1+ ---
+ 05xxh network adapters (05FFh for all attached network adapters)
+ 06xxh PCMCIA sockets (06FFh for all)
+ 0700h-7FFFh reserved
+ 80xxh system battery devices (APM v1.2)
+ 8100h-DFFFh reserved
+ Exxxh OEM-defined power device IDs
+ F000h-FFFFh reserved
+
+(Table 00475)
+Values for system state ID:
+ 0000h ready (not supported for device ID 0001h)
+ 0001h stand-by
+ 0002h suspend
+ 0003h off (not supported for device ID 0001h in APM v1.0)
+---APM v1.1---
+ 0004h last request processing notification (only for device ID 0001h)
+ 0005h last request rejected (only for device ID 0001h)
+ 0006h-001Fh reserved system states
+ 0020h-003Fh OEM-defined system states
+ 0040h-007Fh OEM-defined device states
+ 0080h-FFFFh reserved device states
+--------p-155307CX0001-----------------------
+INT 15 - Advanced Power Management v1.0+ - SYSTEM STAND-BY
+ AX = 5307h
+ CX = 0001h
+ BX = 0001h (device ID for all power-managed devices)
+Return: CF clear
+Notes: puts the entire system into stand-by mode; normally called in response
+ to a System Stand-by Request notification after any necessary
+ processing, but may also be invoked at the caller's discretion
+ should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+ the stand-by state is typically exited on an interrupt
+SeeAlso: AX=4280h,AX=5307h/CX=0002h"SUSPEND",AX=5307h/CX=0003h,AX=530Bh
+--------p-155307CX0002-----------------------
+INT 15 - Advanced Power Management v1.0+ - SUSPEND SYSTEM
+ AX = 5307h
+ CX = 0002h
+ BX = 0001h (device ID for all power-managed devices)
+Return: after system is resumed
+ CF clear
+Notes: puts the entire system into a low-power suspended state; normally
+ called in response to a Suspend System Request notification after
+ any necessary processing, but may also be invoked at the caller's
+ discretion
+ should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+ the caller may need to update its date and time values because the
+ system could have been suspended for a long period of time
+SeeAlso: AX=5307h/CX=0001h"STAND-BY",AX=530Bh
+--------p-155307CX0003-----------------------
+INT 15 - Advanced Power Management v1.2 - TURN OFF SYSTEM
+ AX = 5307h
+ CX = 0003h
+ BX = 0001h (device ID for all power-managed devices)
+Return: after system is resumed
+ CF clear
+Notes: if supported by the system's power supply, turns off the system power
+SeeAlso: AX=5307h/CX=0001h"STAND-BY",AX=530Bh
+--------p-155308-----------------------------
+INT 15 - Advanced Power Management v1.0+ - ENABLE/DISABLE POWER MANAGEMENT
+ AX = 5308h
+ BX = device ID for all devices power-managed by APM
+ 0001h (APM v1.1+)
+ FFFFh (APM v1.0)
+ CX = new state
+ 0000h disabled
+ 0001h enabled
+Return: CF clear if successful
+ CF set on error
+ AH = error code (01h,03h,09h,0Ah,0Bh) (see #00473)
+Notes: when power management is disabled, the system BIOS will not
+ automatically power down devices, enter stand-by or suspended mode,
+ or perform any power-saving actions in response to AX=5305h calls
+ should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+ the APM BIOS should never be both disabled and disengaged at the same
+ time
+SeeAlso: AX=5309h,AX=530Dh,AX=530Fh
+--------p-155309-----------------------------
+INT 15 - Advanced Power Management v1.0+ - RESTORE POWER-ON DEFAULTS
+ AX = 5309h
+ BX = device ID for all devices power-managed by APM
+ 0001h (APM v1.1)
+ FFFFh (APM v1.0)
+Return: CF clear if successful
+ CF set on error
+ AH = error code (03h,09h,0Bh) (see #00473)
+Note: should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+SeeAlso: AX=5308h
+--------p-15530A-----------------------------
+INT 15 - Advanced Power Management v1.0+ - GET POWER STATUS
+ AX = 530Ah
+ BX = device ID
+ 0001h all devices power-managed by APM
+ 80xxh specific battery unit number XXh (01h-FFh) (APM v1.2)
+Return: CF clear if successful
+ BH = AC line status
+ 00h off-line
+ 01h on-line
+ 02h on backup power (APM v1.1)
+ FFh unknown
+ other reserved
+ BL = battery status (see #00476)
+ CH = battery flag (APM v1.1+) (see #00477)
+ CL = remaining battery life, percentage
+ 00h-64h (0-100) percentage of full charge
+ FFh unknown
+ DX = remaining battery life, time (APM v1.1) (see #00478)
+ ---if specific battery unit specified---
+ SI = number of battery units currently installed
+ CF set on error
+ AH = error code (09h,0Ah) (see #00473)
+Notes: should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+ supported in real mode (INT 15) and both 16-bit and 32-bit protected
+ mode
+
+(Table 00476)
+Values for APM v1.0+ battery status:
+ 00h high
+ 01h low
+ 02h critical
+ 03h charging
+ FFh unknown
+ other reserved
+SeeAlso: #00477,#00478
+
+Bitfields for APM v1.1+ battery flag:
+Bit(s) Description (Table 00477)
+ 0 high
+ 1 low
+ 2 critical
+ 3 charging
+ 4 selected battery not present (APM v1.2)
+ 5-6 reserved (0)
+ 7 no system battery
+Note: all bits set (FFh) if unknown
+SeeAlso: #00476,#00478
+
+Bitfields for APM v1.1+ remaining battery life:
+Bit(s) Description (Table 00478)
+ 15 time units: 0=seconds, 1=minutes
+ 14-0 battery life in minutes or seconds
+Note: all bits set (FFFFh) if unknown
+SeeAlso: #00476,#00477
+--------p-15530B-----------------------------
+INT 15 - Advanced Power Management v1.0+ - GET POWER MANAGEMENT EVENT
+ AX = 530Bh
+Return: CF clear if successful
+ BX = event code (see #00479)
+ CX = event information (APM v1.2) if BX=0003h or BX=0004h
+ bit 0: PCMCIA socket was powered down in suspend state
+ CF set on error
+ AH = error code (03h,0Bh,80h) (see #00473)
+Notes: although power management events are often asynchronous, notification
+ will not be made until polled via this call to permit software to
+ only receive event notification when it is prepared to process
+ power management events; since these events are not very time-
+ critical, it should be sufficient to poll once or twice per second
+ the critical resume notification is made after the system resumes
+ from an emergency suspension; normally, the system BIOS only notifies
+ its partner that it wishes to suspend and relies on the partner to
+ actually request the suspension, but no notification is made on an
+ emergency suspension
+ should not be called from within a hardware interrupt handler to avoid
+ reentrance problems
+SeeAlso: AX=5307h,AX=5307h/CX=0001h"STAND-BY",AX=5307h/CX=0002h"SUSPEND"
+
+(Table 00479)
+Values for APM event code:
+ 0001h system stand-by request
+ 0002h system suspend request
+ 0003h normal resume system notification
+ 0004h critical resume system notification
+ 0005h battery low notification
+---APM v1.1---
+ 0006h power status change notification
+ 0007h update time notification
+ 0008h critical system suspend notification
+ 0009h user system standby request notification
+ 000Ah user system suspend request notification
+ 000Bh system standby resume notification
+---APM v1.2---
+ 000Ch capabilities change notification (see AX=5310h)
+------
+ 000Dh-00FFh reserved system events
+ 01xxh reserved device events
+ 02xxh OEM-defined APM events
+ 0300h-FFFFh reserved
+--------p-15530C-----------------------------
+INT 15 - Advanced Power Management v1.1+ - GET POWER STATE
+ AX = 530Ch
+ BX = device ID (see #00474)
+Return: CF clear if successful
+ CX = system state ID (see #00475)
+ CF set on error
+ AH = error code (01h,09h) (see #00473)
+SeeAlso: AX=5307h
+--------p-15530D-----------------------------
+INT 15 - Advanced Power Management v1.1+ - EN/DISABLE DEVICE POWER MANAGEMENT
+ AX = 530Dh
+ BX = device ID (see #00474)
+ CX = function
+ 0000h disable power management
+ 0001h enable power management
+Return: CF clear if successful
+ CF set on error
+ AH = error code (01h,03h,09h,0Ah,0Bh) (see #00473)
+Desc: specify whether automatic power management should be active for a
+ given device
+SeeAlso: AX=5308h,AX=530Fh
+--------p-15530E-----------------------------
+INT 15 - Advanced Power Management v1.1+ - DRIVER VERSION
+ AX = 530Eh
+ BX = device ID of system BIOS (0000h)
+ CH = APM driver major version (BCD)
+ CL = APM driver minor version (BCD) (02h for APM v1.2)
+Return: CF clear if successful
+ AH = APM connection major version (BCD)
+ AL = APM connection minor version (BCD)
+ CF set on error
+ AH = error code (03h,09h,0Bh) (see #00473)
+SeeAlso: AX=5300h,AX=5303h
+--------p-15530F-----------------------------
+INT 15 - Advanced Power Management v1.1+ - ENGAGE/DISENGAGE POWER MANAGEMENT
+ AX = 530Fh
+ BX = device ID (see #00474)
+ CX = function
+ 0000h disengage power management
+ 0001h engage power management
+Return: CF clear if successful
+ CF set on error
+ AH = error code (01h,09h) (see #00473)
+Notes: unlike AX=5308h, this call does not affect the functioning of the APM
+ BIOS
+ when cooperative power management is disengaged, the APM BIOS performs
+ automatic power management of the system or device
+SeeAlso: AX=5308h,AX=530Dh
+--------p-155310-----------------------------
+INT 15 - Advanced Power Management v1.2 - GET CAPABILITIES
+ AX = 5310h
+ BX = device ID (see #00474)
+ 0000h (APM BIOS)
+ other reserved
+Return: CF clear if successful
+ BL = number of battery units supported (00h if no system batteries)
+ CX = capabilities flags (see #00480)
+ CF set on error
+ AH = error code (01h,09h,86h) (see #00473)
+Notes: this function is supported via the INT 15, 16-bit protected mode, and
+ 32-bit protected mode interfaces; it does not require that a
+ connection be established prior to use
+ this function will return the capabilities currently in effect, not
+ any new settings which have been made but do not take effect until
+ a system restart
+SeeAlso: AX=5300h,AX=530Fh,AX=5311h,AX=5312h,AX=5313h
+
+Bitfields for APM v1.2 capabilities flags:
+Bit(s) Description (Table 00480)
+ 15-8 reserved
+ 7 PCMCIA Ring Indicator will wake up system from suspend mode
+ 6 PCMCIA Ring Indicator will wake up system from standby mode
+ 5 Resume on Ring Indicator will wake up system from suspend mode
+ 4 Resume on Ring Indicator will wake up system from standby mode
+ 3 resume timer will wake up system from suspend mode
+ 2 resume timer will wake up system from standby mode
+ 1 can enter global suspend state
+ 0 can enter global standby state
+--------p-155311-----------------------------
+INT 15 - Advanced Power Management v1.2 - GET/SET/DISABLE RESUME TIMER
+ AX = 5311h
+ BX = device ID (see #00474)
+ 0000h (APM BIOS)
+ other reserved
+ CL = function
+ 00h disable Resume Timer
+ 01h get Resume Timer
+ 02h set Resume Timer
+ CH = resume time, seconds (BCD)
+ DL = resume time, minutes (BCD)
+ DH = resume time, hours (BCD)
+ SI = resume date (BCD), high byte = month, low byte = day
+ DI = resume date, year (BCD)
+Return: CF clear if successful
+ ---if getting timer---
+ CH = resume time, seconds (BCD)
+ DL = resume time, minutes (BCD)
+ DH = resume time, hours (BCD)
+ SI = resume date (BCD), high byte = month, low byte = day
+ DI = resume date, year (BCD)
+ CF set on error
+ AH = error code (03h,09h,0Ah,0Bh,0Ch,0Dh,86h) (see #00473)
+Notes: this function is supported via the INT 15, 16-bit protected mode, and
+ 32-bit protected mode interfaces
+SeeAlso: AX=5300h,AX=5310h,AX=5312h,AX=5313h
+--------p-155312-----------------------------
+INT 15 - Advanced Power Management v1.2 - ENABLE/DISABLE RESUME ON RING
+ AX = 5312h
+ BX = device ID (see #00474)
+ 0000h (APM BIOS)
+ other reserved
+ CL = function
+ 00h disable Resume on Ring Indicator
+ 01h enable Resume on Ring Indicator
+ 02h get Resume on Ring Indicator status
+Return: CF clear if successful
+ CX = resume status (0000h disabled, 0001h enabled)
+ CF set on error
+ AH = error code (03h,09h,0Ah,0Bh,0Ch,86h) (see #00473)
+Notes: this function is supported via the INT 15, 16-bit protected mode, and
+ 32-bit protected mode interfaces
+SeeAlso: AX=5300h,AX=5310h,AX=5311h,AX=5313h
+--------p-155313-----------------------------
+INT 15 - Advanced Power Management v1.2 - ENABLE/DISABLE TIMER-BASED REQUESTS
+ AX = 5313h
+ BX = device ID (see #00474)
+ 0000h (APM BIOS)
+ other reserved
+ CL = function
+ 00h disable timer-based requests
+ 01h enable timer-based requests
+ 02h get timer-based requests status
+Return: CF clear if successful
+ CX = timer-based requests status (0000h disabled, 0001h enabled)
+ CF set on error
+ AH = error code (03h,09h,0Ah,0Bh,86h) (see #00473)
+Notes: this function is supported via the INT 15, 16-bit protected mode, and
+ 32-bit protected mode interfaces
+ some BIOSes set AH on return even when successful
+SeeAlso: AX=5300h,AX=5310h,AX=5311h,AX=5312h
+--------p-155380BH00-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET SUSPEND/GLOBAL STANDBY MODE
+ AX = 5380h
+ BH = 00h
+Return: CF clear if successful
+ AL = 82360SL Auto Power Off Timer High Count (APWR_TMRH)
+ BL = sustdbymode (see #00481)
+SeeAlso: AX=5380h/BH=01h,AX=5380h/BH=02h,AX=5380h/BH=7Fh
+
+Bitfields for APM SL sustdbymode:
+Bit(s) Description (Table 00481)
+ 2 ???
+ 1 Auto Power Off Timer Enable (APWR_TMR_EN)
+ 0 ???
+--------p-155380BH01-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET SUSPEND/GLOBAL STANDBY MODE
+ AX = 5380h
+ BH = 01h
+ BL = sustdbymode (see #00481)
+Return: CF clear if successful
+SeeAlso: AX=5380h/BH=00h,AX=5380h/BH=7Fh
+--------p-155380BH02-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET GLOBAL STANDBY TIMER
+ AX = 5380h
+ BH = 02h
+Return: CF clear if successful
+ SI:DI = timer count in seconds (actually 1.024 seconds)
+Desc: reads the value of 82360SL GSTDBY_TMRH & GSTDBY_TMRL registers
+SeeAlso: AX=5380h/BH=00h,AX=5380h/BH=03h,AX=5380h/BH=04h,AX=5380h/BH=7Fh
+--------p-155380BH03-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET GLOBAL STANDBY TIMER
+ AX = 5380h
+ BH = 03h
+ SI:DI = timer count in seconds (actually 1.024 seconds)
+Return: CF clear if successful
+Desc: sets the value of 82360SL GSTDBY_TMRH & GSTDBY_TMRL registers
+Note: the maximum timer count is 268431 seconds
+SeeAlso: AX=5380h/BH=02h,AX=5380h/BH=7Fh
+--------p-155380BH04-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET AUTO POWER OFF TIMER
+ AX = 5380h
+ BH = 04h
+Return: CF clear if successful
+ SI:DI = timer count in seconds (actually 1.024 seconds)
+Desc: reads the value of 82360SL APWR_TMRH & APWR_TMRL registers
+SeeAlso: AX=5380h/BH=02h,AX=5380h/BH=05h,AX=5380h/BH=06h,AX=5380h/BH=7Fh
+--------p-155380BH05-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET AUTO POWER OFF TIMER
+ AX = 5380h
+ BH = 05h
+ SI:DI = timer count in seconds (actually 1.024 seconds)
+Return: CF clear if successful
+Desc: sets the value of 82360SL APWR_TMRH & APWR_TMRL registers
+Note: the maximum timer count is 134213 seconds
+SeeAlso: AX=5380h/BH=04h,AX=5380h/BH=7Fh
+--------p-155380BH06-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET RESUME CONDITION
+ AX = 5380h
+ BH = 06h
+Return: CF clear if successful
+ BL = resume condition (see #00482)
+Desc: reads the value of 82360SL RESUME_MASK register
+SeeAlso: AX=5380h/BH=04h,AX=5380h/BH=07h,AX=5380h/BH=08h,AX=5380h/BH=7Fh
+
+Bitfields for APM SL resume condition:
+Bit(s) Description (Table 00482)
+ 7-2 reserved (0)
+ 1 alarm enabled (resume on CMOS alarm)
+ 0 ring enabled
+--------p-155380BH07-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET RESUME CONDITION
+ AX = 5380h
+ BH = 07h
+ BL = resume condition (see #00482)
+Return: CF clear if successful
+Desc: sets the value of 82360SL RESUME_MASK register
+SeeAlso: AX=5380h/BH=06h,AX=5380h/BH=7Fh
+--------p-155380BH08-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET CALENDAR EVENT TIME
+ AX = 5380h
+ BH = 08h
+Return: CF clear if successful
+ CH = hours
+ CL = minutes
+ SI = seconds
+ CF set on error
+ AH = error code (see #00483)
+Desc: gets calendar event time from CMOS ram
+SeeAlso: AX=5380h/BH=06h,AX=5380h/BH=09h,AX=5380h/BH=0Ah,AX=5380h/BH=7Fh
+
+(Table 00483)
+Values for APM SL error code:
+ 02h no alarm set
+ 03h no battery
+--------p-155380BH09-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET CALENDAR EVENT TIME
+ AX = 5380h
+ BH = 09h
+ CH = hours
+ CL = minutes
+ SI = seconds
+Return: CF clear if successful
+ CF set on error
+ AH = error code (see #00483)
+Desc: sets calendar event time in CMOS ram, enables Alarm resume
+SeeAlso: AX=5380h/BH=08h,AX=5380h/BH=7Fh
+--------p-155380BH0A-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET CALENDAR EVENT DATE
+ AX = 5380h
+ BH = 0Ah
+Return: CF clear if successful
+ SI = century
+ DI = year
+ CH = month
+ CL = day
+ CF set on error
+ AH = error code (see #00483)
+Desc: reads calendar event date from Extended CMOS ram
+SeeAlso: AX=5380h/BH=08h,AX=5380h/BH=0Bh,AX=5380h/BH=0Ch,AX=5380h/BH=7Fh
+--------p-155380BH0B-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET CALENDAR EVENT DATE
+ AX = 5380h
+ BH = 0Bh
+ SI = century
+ DI = year
+ CH = month
+ CL = day
+Return: CF clear if successful
+ CF set on error
+ AH = error code (see #00483)
+Desc: sets calendar event date in Extended CMOS ram
+SeeAlso: AX=5380h/BH=0Ah,AX=5380h/BH=7Fh
+--------p-155380BH0C-------------------------
+INT 15 - APM SL Enhanced v1.0 - GET CPU SPEED MODE
+ AX = 5380h
+ BH = 0Ch
+Return: CF clear if successful
+ CL = CPU clock divider (1,2,4 or 8)
+ BL = autocpumode ???
+Desc: reads bits 4-5 of CPUPWRMODE register
+SeeAlso: AX=5380h/BH=0Ah,AX=5380h/BH=0Dh,AX=5380h/BH=7Fh
+--------p-155380BH0D-------------------------
+INT 15 - APM SL Enhanced v1.0 - SET CPU SPEED MODE
+ AX = 5380h
+ BH = 0Dh
+ CL = CPU clock divider (1,2,4 or 8)
+ BL = autocpumode ???
+Return: CF clear if successful
+Desc: writes bits 4-5 of CPUPWRMODE register
+SeeAlso: AX=5380h/BH=0Ch,AX=5380h/BH=7Eh,AX=5380h/BH=7Fh
+--------p-155380BH7E-------------------------
+INT 15 - APM SL Enhanced v1.0 - SL HW PARAMETER
+ AX = 5380h
+ BH = 7Eh
+Return: AL = ???
+ 03h on A-Step 386SL BIOSes
+ 12h on later steps
+ BX = Control port (00B0h)
+SeeAlso: AX=5380h/BH=00h,AX=5380h/BH=7Fh
+--------p-155380BH7F-------------------------
+INT 15 - Advanced Power Management v1.1 - OEM APM INSTALLATION CHECK
+ AX = 5380h
+ BH = 7Fh
+Return: CF clear if successful
+ BX = OEM identifier
+ all other registers OEM-defined
+ ---Intel SL Enhanced Option BIOS---
+ BX = 534Ch ('SL')
+ CL = 4Fh ('O')
+ AL = version (10h = 1.0)
+ ---HP APM BIOS---
+ BX = 4850h ('HP')
+ CX = version (0001h)
+ CF set on error
+ AH = error code (03h) (see #00473)
+SeeAlso: AX=5380h/BH=00h
+--------p-155380-----------------------------
+INT 15 - Advanced Power Management v1.1 - OEM APM FUNCTIONS
+ AX = 5380h
+ BH <> 7Fh
+ all other registers OEM-defined
+Return: OEM-defined
+SeeAlso: AX=5380h/BH=7Fh
+--------p-155380BX8000-----------------------
+INT 15 U - Phoenix BIOS 4.0 Rel 6.0 - ???
+ AX = 5380h
+ BX = 8000h
+ CX = 0020h
+Return: ???
+Note: although a check for the indicated value is present in the examined
+ copy of the BIOS, no code was associated with it (possibly an OEM
+ option not included in that copy) and this function always returns
+ CF set/AH=03h if CX=0020h and CF set/AH=86h for CX<>0020h
+SeeAlso: AX=5380h/BX=8001h
+--------p-155380BX8001-----------------------
+INT 15 U - Phoenix BIOS 4.0 Rel 6.0 - ???
+ AX = 5380h
+ BX = 8001h
+ CX = 0020h
+Return: ???
+Note: although a check for the indicated value is present in the examined
+ copy of the BIOS, no code was associated with it (possibly an OEM
+ option not included in that copy)
+SeeAlso: AX=5380h/BX=8000h
+--------X-1553B0BH00-------------------------
+INT 15 - Intel System Management Bus - RESERVED
+ AX = 53B0h
+ BH = 00h
+Program: the SMBus is a variant of ACCESS.bus being used by Intel and Duracell
+ for the Smart Battery proposal, but designed to be generic enough to
+ handle other devices besides batteries
+--------X-1553B0BH01-------------------------
+INT 15 - Intel System Management Bus - INSTALLATION CHECK
+ AX = 53B0h
+ BH = 01h
+ BL = 72h ('r')
+ CX = 6164h ('ad')
+Return: CF clear if installed
+ AH = SMBus BIOS Interface Specification major version (01h)
+ AL = SMBus BIOS Interface Specification minor version (00h)
+ BL = number of SMBus devices present
+ CX = 6941h ('iA')
+ DX = vendor-specified SMBus hardware code
+ 0000h means undefined hardware type
+ CF set if error
+ AH = Error code 0Ah, 86h (see #00484)
+Note: this function is only supported in INT 15h mode
+SeeAlso: AX=53B0h/BH=02h,AX=53B0h/BH=03h,AX=53B0h/BH=04h,AX=53B0h/BH=06h
+SeeAlso: #01105 at INT 1A/AX=B10Ah/SF=8086h
+
+(Table 00484)
+Values for Intel System Management Bus error codes:
+ 00h SMBus OK
+ 01h SMBus connect failed
+ 02h SMBus already connected (see also #00485)
+ 03h SMBus disconnect failed
+ 04h SMBus not connected
+ 05h SMBus INT 15 interface disabled
+ 06h SMBus device address request out of range
+ 07h SMBus unknown failure
+ 08h SMBus message list empty
+ 09h SMBus message list overflow
+ 0Ah SMBus invalid signature
+ 10h SMBus device address not acknowledged
+ 11h SMBus device error detected
+ 12h SMBus device command access denied
+ 13h SMBus unknown error
+ 14h SMBus transaction pending
+ 15h SMBus no transaction pending
+ 16h SMBus request does not match pending transaction
+ 17h SMBus device access denied
+ 18h SMBus timeout
+ 19h SMBus protocol not supported
+ 1Ah SMBus busy
+ 1Bh SMBus SMI detected
+ 80h SMBus OK (previously unreported SMI occurred)
+ 86h SMBus not supported
+
+(Table 00485)
+Values for Intel System Management Bus Already Connected sub-error codes:
+ 01h real mode connect already established
+ 02h 16-bit PMode connect already established
+ 03h 32-bit PMode connect already established
+SeeAlso: #00484
+--------X-1553B0BH02-------------------------
+INT 15 - Intel System Management Bus - REAL MODE CONNECT
+ AX = 53B0h
+ BH = 02h
+ CX = 6941h ('iA')
+Return: CF clear if successful
+ AX = SMBus Real mode code segment
+ BX = offset of entry point into SMBus BIOS Interface
+ CX = SMBus Real mode data segment
+ CF set if error
+ AH = error code (01h,02h,0Ah,86h) (see #00484)
+ AL = sub-error code if error code is 02h (see #00485)
+Desc: connect to SMBus interface; once connected, all SMBus calls are made
+ to the supplied entry point instead of INT 15 (with registers
+ identical to those described here for INT 15)
+Notes: Support for this function is optional
+ this function is only supported in INT 15 mode when implemented
+SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=03h,AX=53B0h/BH=04h,AX=53B0h/BH=05h
+--------X-1553B0BH03-------------------------
+INT 15 - Intel System Management Bus - 16-BIT PROTECTED-MODE CONNECT
+ AX = 53B0h
+ BH = 03h
+ CX = 6941h ('iA')
+Return: CF clear if successful
+ AX = SMBus 16-bit code segment (real mode base address)
+ BX = offset of entry point into SMBus BIOS Interface
+ CX = SMBus 16-bit data segment (real mode base address)
+ SI = code segment length in bytes
+ DI = data segment length in bytes
+ CF set if error
+ AH = error code (01h,02h,0Ah,86h) (see #00484)
+ AL = sub-error code if error code is 02h (see #00485)
+Desc: connect to SMBus interface; once connected, all SMBus calls are made
+ to the supplied entry point instead of INT 15 (with registers
+ identical to those described here for INT 15)
+Notes: before calling the entry point, two descriptors must be initialized
+ in the GDT or LDT. They must be consecutive and be in the order of
+ code, then data. At the time of the call, the descriptors must be
+ valid and have CPL=0.
+ the code descriptor must be ring-0 privilege
+ this function is only supported in INT 15 mode
+SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=02h,AX=53B0h/BH=04h,AX=53B0h/BH=05h
+--------X-1553B0BH04-------------------------
+INT 15 - Intel System Management Bus - 32-BIT PROTECTED-MODE CONNECT
+ AX = 53B0h
+ BH = 04h
+ CX = 6941h ('iA')
+Return: CF clear if successful
+ AX = SMBus 32-bit code segment (real mode base address)
+ EBX = offset of entry point into SMBus BIOS Interface
+ CX = SMBus 16-bit code segment (real mode base address)
+ DX = SMBus data segment (real mode base address)
+ SI = code segment length in bytes
+ DI = data segment length in bytes
+ CF set if error
+ AH = error code (01h,02h,0Ah,86h) (see #00484)
+ AL = sub-error code if error code is 02h (see #00485)
+Desc: connect to SMBus interface; once connected, all SMBus calls are made
+ to the supplied entry point instead of INT 15 (with registers
+ identical to those described here for INT 15)
+Notes: before calling the entry point, two descriptors must be initialized in
+ the GDT or LDT. They must be consecutive and be in the order of
+ 32-bit code, 16-bit code, then data. At the time of the call, the
+ descriptors must be valid and have CPL=0.
+ the code descriptors must be ring-0 privilege
+ this function is supported only in INT 15 mode
+SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=02h,AX=53B0h/BH=03h,AX=53B0h/BH=05h
+--------X-1553B0BH05-------------------------
+INT 15 - Intel System Management Bus - DISCONNECT
+ AX = 53B0h
+ BH = 05h
+ CX = 6941h ('iA')
+Return: CF clear if successful
+ AH = 00h (SMBus OK)
+ CF set if error
+ AH = error code (03h,04h,05h,0Ah,86h) (see #00484)
+Note: this function is supported in connected mode (far CALL entry point)
+ only
+SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=02h,AX=53B0h/BH=03h,AX=53B0h/BH=04h
+--------X-1553B0BH06-------------------------
+INT 15 - Intel System Management Bus - GET DEVICE ADDRESSES
+ AX = 53B0h
+ BH = 06h
+ BL = position in list to report
+ CH = 6941h ('iA')
+Return: CF clear if successful
+ AH = 00h (SMBus OK)
+ BH = number of SMBus devices
+ BL = SMBus Device Address of device at position BL in list
+ (see #00486)
+ CF set if error
+ AH = error code (06h,0Ah,86h) (see #00484)
+Desc: retrieves already assigned SMBus device addresses
+Notes: this function is supported in INT 15h mode only
+ bit 0 of the device address indicates read/write, so a device may
+ be listed at both xxxxxxx0b and xxxxxxx1b
+SeeAlso: I2C A0h [and I2C.LST in general]
+
+(Table 00486)
+Values for System Management Bus predefined device addresses:
+ 10h SMBus host
+ 12h Smart Battery charger
+ 14h Smart Battery selector
+ 16h Smart Battery
+ 18h SMBus Alert response
+ 50h ACCESS.bus host
+ 58h LCD contrast controller
+ 5Ah CCFL backlight driver
+ 6Eh ACCESS.bus default address
+ 80h-86h PCMCIA socket controllers
+ 88h VGA graphics controller
+ 90h-96h unrestricted addresses
+ 82h SMBus device default address
+--------X-1553B0BH07-------------------------
+INT 15 - Intel System Management Bus - RETRIEVE CRITICAL MESSAGES
+ AX = 53B0h
+ BH = 07h
+ CX = 6941h ('iA')
+Return: CF clear if successful
+ AH = 00h (SMBus OK)
+ AL = device address
+ BX = device message
+ CF set if error
+ AH = error code (05h,07h,08h,09h,0Ah,86h) (see #00484)
+Desc: retrieves oldest queued critical message from an SMBus device to the
+ host
+Notes: up to five messages are queued; if the queue is full, messages will be
+ lost and error 09h returned
+--------X-1553B0BH08-------------------------
+INT 15 - Intel System Management Bus - RESERVED
+ AX = 53B0h
+ BH = 08h-0Fh
+--------X-1553B0BH10-------------------------
+INT 15 - Intel System Management Bus - REQUEST
+ AX = 53B0h
+ BH = 10h
+ BL = protocol (see #00487)
+ CH = device address
+ CL = device command (see #00488)
+ DH = MSB Data or block length (for BlockWrite)
+ DL = LSB Data or first byte of block (for BlockWrite)
+Return: CF clear if successful
+ AH = 00h or 80h (SMBus OK)
+ (80h indicates a previously unreported SMI took place)
+ CF set if error
+ AH = error code (05h,10h,11h,12h,13h,14h,17h,19h,1Ah,86h)
+ (see #00484)
+Desc: request access to a device on the SMBus
+SeeAlso: AX=53B0h/BH=11h, AX=53B0h/BH=13h
+
+(Table 00487)
+Values for Intel System Management Bus protocol codes:
+ 00h Quick Command
+ 01h Send Byte
+ 02h Receive Byte
+ 03h Write Byte
+ 04h Read Byte
+ 05h Write Word
+ 06h Read Word
+ 07h Block Write
+ 08h Block Read
+ 09h Process Call
+ 0Ah-FFh reserved
+SeeAlso: #00488
+
+(Table 00488)
+Values for Intel System Management Bus Smart Battery command codes:
+ Cmd Protocol(s) Description
+ 00h Rd/Wr Word "ManufacturerAccess" implementation-specific
+ 01h Rd/Wr Word get/set Low Capacity Alarm threshold
+ 02h Rd/Wr Word get/set Remaining Time Alarm value (in minutes)
+ 03h Rd/Wr Word get/set battery characteristics (see #00489)
+ 04h Rd/Wr Word "AtRate" indicate charge/discharge rate
+ 05h Read Word "AtRateTimeToFull" time to completely charge (in min.)
+ 06h Read Word "AtRateTimeToEmpty" time to entirely discharge (min.)
+ 07h Read Word "AtRateOK" boolean: can battery supply another 10sec?
+ 08h Read Word internal battery temperature (in 0.1 Kelvins)
+ 09h Read Word current battery voltage in millivolts
+ 0Ah Read Word current flowing through battery in milliamperes
+ (positive if charging, negative if discharging)
+ 0Bh Read Word average current over the past minute
+ 0Ch Read Word expected error margin in capacity computations in %
+ 0Dh Read Word predicted remaining charge as % of full charge
+ 0Eh Read Word predicted remaining charge as % of design capacity
+ 0Fh Read Word predicted remaining charge in mAh or 10mWh
+ 10h Read Word predicted full charge capacity in mAh or 10mWh
+ 11h Read Word predicted remaining battery life in minutes
+ FFFFh = not discharging
+ 12h Read Word rolling average of predicted life over past minute
+ 13h Read Word rolling average of predicted charge time over past min.
+ FFFFh = not charging
+ 14h Read Word get battery's desired charging current in mA
+ 14h Write Word set charging current in mA
+ 15h Read Word get battery's desired charging current in mV
+ 15h Write Word set desired charging voltage in mV
+ 16h Read Word get current battery status (see #00490)
+ 17h Read Word get number of charge/discharge cycles for battery
+ 18h Read Word get design capacity in mAh or 10mWh
+ 19h Read Word get design voltage
+ 1Ah Read Word get specification information (see #00491)
+ 1Bh Read Word get manufacture date (see #01665 at INT 21/AX=5700h)
+ 1Ch Read Word get serial number
+ 1Dh-1Fh reserved
+ 20h Read Block get manufacturer's name
+ 21h Read Block get device name
+ 22h Read Block get device chemistry (see #00492)
+ 23h Read Block get manufacturer data
+ 24h-2Eh reserved
+ 2Fh manufacturer-specific
+ 30h-3Bh reserved
+ 3Ch-3Fh manufacturer-specific
+Note: bits 7-6 are reserved for addressing multiple batteries in a future
+ version of the specification
+SeeAlso: #00487
+
+Bitfields for Smart Battery battery characteristics:
+Bit(s) Description (Table 00489)
+ 0 battery has internal charge controller (read-only)
+ 1 primary/secondary battery support (read-only)
+ 6-2 reserved
+ 7 conditioning cycle requested
+ 8 internal charge controller enabled
+ 9 battery operating in primary mode
+ 13-10 reserved
+ 14 disable broadcast to charger
+ 15 report capacity in units of 10mW / 10mWh instead of mA / mAh
+SeeAlso: #00488,#00490
+
+Bitfields for Smart Battery battery status:
+Bit(s) Description (Table 00490)
+ 15 overcharged
+ 14 terminate-charge alarm
+ 13 reserved
+ 12 over-temperature alarm
+ 11 terminate-discharge alarm
+ 10 reserved
+ 9 remaining-capacity alarm
+ 8 remaining-time alarm
+ 7 initialized
+ 6 charging
+ 5 fully charged
+ 4 fully discharged
+ 3-0 error codes
+ 0000 OK
+ 0001 busy
+ 0010 reserved command
+ 0011 unsupported command
+ 0100 access denied (tried to write to read-only value)
+ 0101 overflow/underflow
+ 0110 bad size
+ 0111 unknown error
+SeeAlso: #00488,#00489,#00491
+
+Bitfields for Smart Battery specification information:
+Bit(s) Description (Table 00491)
+ 3-0 SmartBattery specification minor revision number
+ 7-4 SmartBattery specification version number
+ 11-8 voltage scaling (0-3, multiply voltages by 10^scale)
+ 15-12 current scaling (0-3, multiply currents by 10^scale)
+SeeAlso: #00488,#00490
+
+(Table 00492)
+Values for Smart Battery device chemistry (not case-sensitive):
+ "LION" Lithium ion
+ "NiMH" Nickel metal hydride
+ "PbAc" lead-acid
+ "NiCd" Nickel Cadmium
+ "NiZn" Nickel Zinc
+ "RAM" rechargeable Alkaline Manganese
+ "ZnAr" Zinc-Air
+SeeAlso: #00488
+--------X-1553B0BH11-------------------------
+INT 15 - Intel System Management Bus - REQUEST CONTINUATION
+ AX = 53B0h
+ BH = 11h
+ BL = protocol (see #00487)
+ CH = device address
+ CL = number of valid bytes in DX (1 or 2)
+ DH = MSB Data (CL = 1 or 2)
+ DL = LSB Data (CL = 2)
+Return: CF clear if successful
+ AH = 00h (SMBus OK)
+ CL = SMBus status
+ 00h SMBus hardware not ready for more data
+ 01h SMBus hardware ready for 2 more data bytes
+ CF set if error
+ AH = error code (05h,11h,13h,15h,16h,18h,1Bh,86h) (see #00484)
+Desc: continue WriteBlock protocol started with function 10h
+SeeAlso: AX=53B0h/BH=10h, AX=53B0h/BH=13h
+--------X-1553B0BH12-------------------------
+INT 15 - Intel System Management Bus - REQUEST ABORT
+ AX = 53B0h
+ BH = 12h
+ BL = protocol (see #00487)
+ CH = device address
+ CL = device command
+Return: CF clear if successful
+ AH = 00h (SMBus OK)
+ CF set if error
+ AH = error code (05h,13h,15h,16h,86h) (see #00484)
+Desc: stop the currently pending SMBus request; usually used to terminate
+ a request after an SMI Detected error
+--------X-1553B0BH13-------------------------
+INT 15 - Intel System Management Bus - REQUEST DATA AND STATUS
+ AX = 53B0h
+ BH = 13h
+ BL = protocol (see #00487)
+ CH = device address
+ CL = device command
+Return: CF clear if successful
+ AH = 00h (SMBus OK)
+ CH = status
+ 00h no data pending, transaction complete
+ 01h no data pending, transaction continues
+ 02h data pending
+ CL = number of valid bytes in DX (0-2)
+ DH = MSB data
+ DL = LSB data
+ CF set if error
+ AH = error code (05h,10h,11h,13h,15h,16h,18h,1Bh,86h) (see #00484)
+Desc: determine when a transaction is complete, gather data returned by read
+ transactions
+Note: for Block Read protocol (08h), first call returns block length in DH
+ and the first byte of the block in DL
+----------1554-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 54h
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+--------T-155400-----------------------------
+INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
+ AX = 5400h
+ ES:BX -> device information tables
+ DI:DX -> dispatcher entry point
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5407h,INT 2F/AX=DE00h
+--------T-155401-----------------------------
+INT 15 C - Omniview Multitasker - PROCESS CREATION
+ AX = 5401h
+ ES:BX = process handle
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5402h,INT 2F/AX=DE04h
+--------T-155402-----------------------------
+INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
+ AX = 5402h
+ ES:DX = process handle
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5401h,INT 2F/AX=DE05h
+--------T-155403-----------------------------
+INT 15 C - Omniview Multitasker - SAVE
+ AX = 5403h
+ ES:DX = process swapping out
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5404h,INT 2F/AX=DE08h
+--------T-155404-----------------------------
+INT 15 C - Omniview Multitasker - RESTORE
+ AX = 5404h
+ ES:DX = process swapping in
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5403h,INT 2F/AX=DE09h
+--------T-155405-----------------------------
+INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
+ AX = 5405h
+ ES:DX = process swapping in
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5406h
+--------T-155406-----------------------------
+INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
+ AX = 5406h
+ ES:DX = process swapping in
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5405h
+--------T-155407-----------------------------
+INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
+ AX = 5407h
+Note: called by OmniView to notify programs loaded before OmniView of state
+ changes inside OmniView
+SeeAlso: AX=5400h,INT 2F/AX=DE03h
+--------V-155F31-----------------------------
+INT 15 C - Chips & Technologies '65530' BIOS - POST INITIALIZATION NOTIFICATION
+ AX = 5F31h
+Return: nothing
+Desc: this function is called after the video BIOS completes power-up
+ initialization and just prior to displaying the sign-on message
+SeeAlso: AX=5F33h,AX=5F35h,INT 10/AX=5F50h
+--------V-155F33-----------------------------
+INT 15 C - Chips & Technologies '65530' BIOS - MODE SET HOOK
+ AX = 5F33h
+ BL = current width in characters
+ BH = curent video mode
+ CH = active display page
+Return: nothing
+Desc: this function is called at the end of a video mode set
+Note: the OEM has the option of enabling or disabling this callout, as well
+ as specifying whether the callout occurs on INT 15h or INT 42h
+SeeAlso: AX=5F31h,AX=5F35h,INT 10/AX=5F50h,INT 42/AX=5F33h
+--------V-155F35-----------------------------
+INT 15 C - Chips & Technologies '65530' BIOS - MONITOR SENSING HOOK
+ AX = 5F35h
+Return: DL = boot display
+ 00h CRT
+ 01h flat panel (LCD)
+ 02h both simultaneously
+ leave unchanged to boot according to BIOS settings
+SeeAlso: AX=5F31h,AX=5F33h,INT 10/AX=5F50h
+--------b-1560------------------------------------
+INT 15 - HUNTER 16 - SET SYSTEM CLOCK SPEED
+ AH = 60h
+ AL = new speed
+ 00h normal (8 MHz)
+ 01h Slow Mode 1 (4 MHz)
+ 02h Slow Mode 2 (2 MHz)
+Note: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+SeeAlso: AX=6301h
+--------p-156000-----------------------------
+INT 15 U - HP 100LX/200LX - GET MAIN BATTERY LEVEL
+ AX = 6000h
+Return: AX = battery level
+Note: multiply the returned value with 1Bh and add 622h to get millivolts
+SeeAlso: AX=6001h,AX=6002h,AX=6003h,AX=6004h
+--------p-156001-----------------------------
+INT 15 U - HP 100LX/200LX - GET BACKUP BATTERY LEVEL
+ AX = 6001h
+Return: AX = battery level
+Note: multiply the returned value with 1Bh and add 622h to get millivolts
+SeeAlso: AX=6000h,AX=6002h
+--------p-156002-----------------------------
+INT 15 U - HP 100LX/200LX - GET POWER INFO
+ AX = 6002h
+Return: AL = power settings (see #00493)
+SeeAlso: AX=6000h,AX=6003h,AX=6004h
+
+Bitfields for power settings:
+Bit(s) Description (Table 00493)
+ 0-1 unused ???
+ 2 card battery status low (OK if bit clear)
+ 3 battery charging off (disabled if bits 3-5 clear)
+ 4 battery charging slow
+ 5 battery charging fast
+ 6 power adaptor active
+ 7 battery type NiCad (alkaline if bit clear)
+--------p-156003-----------------------------
+INT 15 U - HP 100LX/200LX - SET MAIN BATTERY TYPE
+ AX = 6003h
+ BL = battery type
+ 00h alkaline
+ 01h NiCad
+SeeAlso: AX=6000h,AX=6004h
+--------p-156004-----------------------------
+INT 15 U - HP 100LX/200LX - SET BATTERY CHARGING MODE
+ AX = 6004h
+ BL = charging
+ 00h disabled
+ 01h enabled
+SeeAlso: AX=6000h,AX=6003h
+--------b-1561------------------------------------
+INT 15 - HUNTER 16 - GET POWER LEVEL
+ AH = 61h
+Return: AH = percentage of full power left (0..100)
+Desc: determine how much battery power is left
+SeeAlso: AH=62h,AH=66h,AH=73h"HUNTER"
+--------b-1561-------------------------------
+INT 15 U - HP 100LX/200LX - SET ANNOUNCIATORS POSITION
+ AH = 61h
+ AL = position (20h = left, 60h = right)
+Note: The announciators are the indicator symbols for the Shift and Fn keys
+ in the bottom line
+SeeAlso: AH=62h"HP",INT 16/AH=02h
+--------b-1562------------------------------------
+INT 15 - HUNTER 16 - SET LOW POWER THRESHOLD
+ AH = 62h
+ AL = level (00h 5%, 01h 10%, ... 12h 95%)
+ BX = interval between power low warnings in seconds (1..600)
+Return: AH = Status
+Desc: set the level (relative to full power) when power-low warnings begin
+ and the interval between the warnings
+SeeAlso: AH=61h,AH=65h,AH=66h
+--------b-1562-------------------------------
+INT 15 U - HP 100LX/200LX - SET DISPLAY CONTRAST
+ AH = 62h
+ BL = contrast (00h-1Fh, 1Fh is the darkest)
+SeeAlso: AH=47h"HP",AH=61h"HP"
+--------b-156300----------------------------------
+INT 15 - HUNTER 16 - GET IDLE TIMEOUT
+ AX = 6300h
+Return: AH = status
+ BX = timeout in seconds (0-3600)
+Desc: get the idle timeout value, the interval without keyboard or
+ communications activity before the system shuts down
+SeeAlso: AX=6301h
+--------b-156301----------------------------------
+INT 15 - HUNTER 16 - SET IDLE TIMEOUT
+ AX = 6301h
+ BX = timeout in seconds (0-3600)
+Desc: sets the idle timeout value, the interval without keyboard or
+ communications activity before the system shuts down
+SeeAlso: AX=6300h
+--------b-1564------------------------------------
+INT 15 - HUNTER 16 - CONTROL RESUME MODE
+ AH = 64h
+ AL = new state
+ 00h disable Resume mode
+ 01h enable Resume mode
+Return: AH = status
+Desc: turn Resume mode on or off. In Resume mode the system starts in
+ the application that was running when it shut down as if nothing
+ had happened.
+SeeAlso: AH=67h,AH=68h,AH=69h
+--------b-1565------------------------------------
+INT 15 - HUNTER 16 - AUTHORISE CHARGING
+ AH = 65h
+ AL = charging level
+ 01h charging not allowed
+ 02h charging allowed until power down
+ 03h charging allowed until batteries changed or fail.
+ Ask user if charging is still allowed on next poweron
+ 04h charging allowed indefinitely
+ BX = 0203h
+ CX = 0405h
+ DX = 0607h
+Return: AH = status
+SeeAlso: AH=66h,AH=68h
+--------b-1566------------------------------------
+INT 15 - HUNTER 16 - SET BATTERY LEVEL
+ AH = 66h
+ AL = level in percent of maximum (0..100)
+Return: AH = status
+SeeAlso: AH=61h,AH=65h
+--------b-1567------------------------------------
+INT 15 - HUNTER 16 - CONTROL STOP MODE
+ AH = 67h
+ AL = mode when waiting for input
+ 00h use STOP mode (allows communication)
+ 01h use HALT mode (disallows communication)
+Return: AH = status
+Desc: select the power save mode to use when waiting for input
+SeeAlso: AH=69h
+----------156700BXFFFF-----------------------
+INT 15h - Arabic/Hebrew MS-DOS 5.0???+ - INSTALLATION CHECK
+ AX = 6700h
+ BX = FFFFh
+Return: BX = FFFFh (Arabic/Hebrew MS-DOS not installed)
+ BX = version (e.g. 0101h for Arabic/Hebrew MS-DOS 5.0)
+Note: This call is made by the SK_HGC.COM TSR for HGC and HGC/RAMFont
+ graphics adapters to ensure it runs on the correct version of
+ Arabic or Hebrew MS-DOS.
+ The function is probably implemented in the ARABIC.COM/HEBREW.COM
+ driver.
+ Arabic/Hebrew versions of MS-DOS 3.3 existed, but no details are
+ available.
+SeeAlso: AX=67C3h,INT 2F/AX=AD41h
+----------1567C3CX1Bh
+-----------------------
+INT 15h - Arabic/Hebrew MS-DOS 5.0???+ - HGC & HGC/RAMFont support???
+ AX = 67C3h
+ CX = 1Bh
+ CS|DS???:SI -> buffer
+Return: ES:DI -> ???
+ AX = ???
+Program: The SK_HGC.COM TSR is used to support operation of ARABIC.COM/
+ HEBREW.COM with the Hercules Graphic Card series of video adapters.
+ It is provided for compatibility with ADOS 3.30/HDOS 3.30 only.
+ This file must be loaded immediately after ARABIC.COM/HEBREW.COM
+ to insure correct operation with these devices.
+Notes: This call is made by the SK_HGC.COM TSR for HGC and HGC/RAMFont
+ graphics adapters when it has successfully detected an Arabic/Hebrew
+ issue of MS-DOS via INT15h/6700h/BX=FFFFh to ensure it runs on the
+ correct version of Arabic or Hebrew MS-DOS.
+ At some unknown offset in the buffer it contains a flag indicating
+ if a HGC or HGC/RAMFont adapter is present or not.
+ ARABIC/HEBREW does not operate with Monochrome Display Adapters (MDA)
+ and the Hercules Graphic Card Plus (HGC+). ARABIC/HEBREW does operate
+ with Hercules Graphic Card (HGC) with a burnt-in ROM/EPROM font (many
+ HGC cards, even the highly integrated ones, allow for this kind of
+ user customization), though this is not officially supported.
+ In some pre-1987 IBM XT/AT and compatibles, the Hercules Graphic
+ Card Plus operates like a MDA card. This hardware limitation
+ prevents ARABIC/HEBREW from running on this combination of hardware.
+SeeAlso: AX=6700h
+--------b-1568------------------------------------
+INT 15 - HUNTER 16 - REQUEST POWER DOWN
+ AH = 68h
+Desc: turns off the Hunter 16 if power down is allowed (see AH=69h)
+SeeAlso: AH=69h
+--------b-1569------------------------------------
+INT 15 - HUNTER 16 - CONTROL POWER DOWN AVAILABILITY
+ AH = 69h
+ AL = mode
+ 00h inhibit power down
+ 01h allow power down
+Return: AH = status
+SeeAlso: AH=67h,AH=68h,AH=6Ah
+--------b-156A------------------------------------
+INT 15 - HUNTER 16 - CONTROL SLOW MODE
+ AH = 6Ah
+ AL = mode
+ 00h inhibit Slow mode
+ 01h allow Slow mode
+Return: AH = status
+SeeAlso: AH=69h
+--------b-156B------------------------------------
+INT 15 - HUNTER 16 - GET ROM BIOS VERSION
+ AH = 6Bh
+Return: BH = version number (ASCII)
+ BL = release number (ASCII)
+ CH = major??? release number (ASCII)
+ CL = minor??? release number (ASCII)
+SeeAlso: AH=6Ch
+--------b-156C------------------------------------
+INT 15 - HUNTER 16 - GET SERIAL NUMBER
+ AH = 6Ch
+Return: BL:CX = BCD serial number
+Note: when shipped, all Hunter 16s have the same Serial Number, but a
+ different number can be stored (see AH=72h)
+SeeAlso: AH=6Bh,AH=72h
+--------b-156D------------------------------------
+INT 15 - HUNTER 16 - GET EVENT DETAIL
+ AH = 6Dh
+Return: AH = 00h if successful
+ CX:BX = event flags bit 0..31 (see #00494)
+Note: this function allows testing for events
+SeeAlso: AH=6Eh,AH=6Fh
+
+Bitfields for HUNTER 16 events:
+Bit(s) Description (Table 00494)
+ 6 RI received
+ 5 RTC Alarm
+ 4 data received on COM2
+ 3 data received on COM1
+ 2 error on COM2
+ 1 error on COM1
+ 0 PWR button pressed
+--------b-156E------------------------------------
+INT 15 - HUNTER 16 - ENABLE/TRAP EVENT
+ AH = 6Eh
+ AL = Software Interrupt
+ 00h do not trap event
+ else trap as software interrupt number AL
+ BH = event number (see AH=6Dh)
+ BL = enable mask
+ 00h disable event
+ 01h enable event
+Return: AH = 00h if successful
+SeeAlso: AH=6Dh,AH=6Fh
+--------b-156F------------------------------------
+INT 15 - HUNTER 16 - ACKNOWLEDGE EVENT
+ AH = 6Fh
+ AL = event number (see AH=6Dh)
+Return: AH = 00h if successful
+Desc: Acknowledges the event, so the next similar event can be detected
+SeeAlso: AH=6Dh"HUNTER",AH=6Eh
+--------b-1570------------------------------------
+INT 15 - HUNTER 16 - CONTROL SOUND
+ AH = 70h
+ AL = new state
+ 00h disable sound
+ else enable sound
+Note: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+--------x-157000-----------------------------
+INT 15 - Tandy 1000SL/TL - READ FROM EEPROM
+ AX = 7000h
+ BL = number of word to read (00h-3Fh)
+Return: CF clear if function supported
+ DX = contents of EEPROM word
+Note: newer Tandy 1000-series machines use EEPROM instead of CMOS RAM in
+ the clock chip to store system configuration information
+SeeAlso: AX=7001h
+--------x-157001-----------------------------
+INT 15 - Tandy 1000SL/TL - WRITE TO EEPROM
+ AX = 7001h
+ BL = number of word to read (00h-3Fh)
+ DX = new value for EEPROM word
+Return: CF clear if function supported
+Note: the EEPROMs are normally written only by the system setup program;
+ changing the values can badly mess up a Tandy
+SeeAlso: AX=7000h
+----------157002-----------------------------
+INT 15 U - Tandy 1000 Model ??? - GET ROM PAGE
+ AX = 7002h
+Return: AL = ROM page mapped at 0E0000h (0-6 (13?))
+Note: some Tandy machines have DOS and DeskMate in a 512k paged ROM. The
+ BIOS uses this call to determine what ROM page is mapped in the 64k
+ segment at 0E0000h.
+ the 1000TL has 8 64k ROM pages; page 7 is permanently mapped at
+ 0F0000h. There may be 16 32k ROM pages on other systems.
+SeeAlso: AX=7003h,INT E0"DeskMate"
+----------157003-----------------------------
+INT 15 U - Tandy 1000 Model ??? - SET ROM PAGE
+ AX = 7003h
+ DL = ROM page to be mapped at 0E0000h (0-6 (13?))
+Return: CF clear if valid ROM page specified
+Note: Some Tandy machines have DOS and DeskMate in a 512k paged ROM. The
+ BIOS uses this call to map ROM pages in the 64k segment at 0E0000h.
+ The 1000TL has 8 64k ROM pages; page 7 is permanently mapped at
+ 0F0000h. There may be 16 32k ROM pages on other systems.
+SeeAlso: AX=7002h,INT E0"DeskMate"
+--------b-1571------------------------------------
+INT 15 - HUNTER 16 - SELECT POWER UP KEYS
+ AH = 71h
+ BL = column
+ BH = row
+ AL = column switch (00h disable, 01h enable)
+ CL = row switch (00h disable, 01h enable)
+Return: AH = status
+SeeAlso: AH=7Bh,AH=88h
+--------b-157200----------------------------------
+INT 15 - HUNTER 16 - RESET SERIAL NUMBER
+ AX = 7200h
+Return: AH = 00h if successful
+Desc: reset the serial number to the default serial number present when the
+ Hunter 16 was shipped
+SeeAlso: AH=6Ch,AH=72h
+--------b-1572------------------------------------
+INT 15 - HUNTER 16 - REDIRECT SERIAL NUMBER
+ AH = 72h
+ AL nonzero
+ DS:BX -> new serial number (6 ASCII digits)
+Return: AH = 00h if successful
+Desc: install a new serial number
+SeeAlso: AH=6Ch,AX=7200h
+--------b-1573------------------------------------
+INT 15 - HUNTER 16 - GET ORACLE GT POWER LEVEL
+ AH = 73h
+ AL = drive (0: A:, 1: B:)
+Return: AH = status
+ 00h successful
+ FFh Oracle GT drive not connected
+ AL = power level in percent of maximum (0..100)
+Desc: get the power remaining in the Oracle GT batteries
+SeeAlso: AH=61h
+--------b-1574------------------------------------
+INT 15 - HUNTER 16 - SET BACKLIGHT POWER UP STATE
+ AH = 74h
+ AL = new level
+ 01h off
+ 02h unchanged
+ 03h change level
+ BL = desired level (00h-7Fh)
+Return: AH = status
+Desc: select the backlight level to use when the Hunter is next turned on
+SeeAlso: AH=64h,AH=75h,INT 10/AH=64h,INT 10/AH=78h
+--------b-1575------------------------------------
+INT 15 - HUNTER 16 - SET CONTRAST POWER UP STATE
+ AH = 75h
+ AL = new level
+ 01h off
+ 02h unchanged
+ 03h change level
+ BL = desired level (00h-7Fh)
+Return: AH = status
+Desc: select the LCD contrast level to use when the Hunter is next turned on
+SeeAlso: AH=63h,AH=74h
+--------b-1576------------------------------------
+INT 15 - HUNTER 16 - CONTROL POWER SAVE
+ AH = 76h
+ BX = power save control (see #00495)
+SeeAlso: AH=74h
+
+Bitfields for HUNTER 16 power save control:
+Bit(s) Description (Table 00495)
+ 0 power save enabled
+ 1 inhibit power save when waiting for COM1 data
+ 2 inhibit power save when waiting for COM2 data
+ 3 inhibit power save when waiting for data from barcode wand
+ 4 inhibit power up on timer tick
+--------b-1579------------------------------------
+INT 15 - HUNTER 16 - REDIRECT LPT1
+ AH = 79h
+ AL = port to which to redirect (00h COM1, 01h COM2)
+--------b-157A------------------------------------
+INT 15 - HUNTER 16 - INVOKE HOT KEY
+ AH = 7Ah
+Desc: this function has the same effect as pressing the HOT key
+SeeAlso: AH=7Bh
+--------b-157B------------------------------------
+INT 15 - HUNTER 16 - CONTROL HOT KEY
+ AH = 7Bh
+ AL = 00h prevent HOT key
+ else allow HOT key
+Desc: Allow or prevent the HOT key function which is used to examine and
+ change the Hunter setup
+SeeAlso: AH=71h,AH=7Ah,AH=7Ch
+--------b-157C------------------------------------
+INT 15 - HUNTER 16 - CONTROL HOT KEY POWER OPTION
+ AH = 7Ch
+ AL = 00h prevent HOT key power option
+ else allow HOT key power option
+Desc: allow or prevent changing the power options
+SeeAlso: AH=7Bh,AH=7Dh
+--------b-157D------------------------------------
+INT 15 - HUNTER 16 - OVERRIDE LOW POWER TURN OFF
+ AH = 7Dh
+ AL = 00h turn off after 10 warnings
+ else never turn off
+Desc: specify whether the Hunter 16 turns off after 10 low power warnings
+SeeAlso: AH=7Ch
+--------b-157E------------------------------------
+INT 15 - HUNTER 16 - CONTROL BATTERY CHANGE FACILITIES (APM)
+ AH = 7Eh
+ AL = 00h do not prompt
+ else prompt
+Desc: select whether the user is prompted for the battery state if the
+ battery cap has been off when the system is turned on
+SeeAlso: AH=7Fh
+--------b-157F------------------------------------
+INT 15 - HUNTER 16 - SET BATTERY TYPE (APM)
+ AH = 7Fh
+ AL = battery type
+ 00h non-rechargeable
+ else rechargeable
+SeeAlso: AH=7Eh
+--------B-1580-------------------------------
+INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
+ AH = 80h
+ BX = device ID
+ CX = process ID
+ CF clear
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status (see #00496)
+Note: this function should be hooked by a multitasker which wishes to keep
+ track of device ownership; the default BIOS handler merely returns
+ successfully
+SeeAlso: AH=81h,AH=82h
+
+(Table 00496)
+Values for status:
+ 80h invalid command (PC,PCjr)
+ 86h function not supported (XT)
+--------b-1580------------------------------------
+INT 15 - HUNTER 16 - GET/SET BATTERY CAPACITY (APM)
+ AH = 80h
+ AL = function
+ 00h get
+ Return: AL = capacity (500mA + AL * 50mA, max 40 = 2500mA)
+ else set
+ BL = battery capacity (same as AL above)
+SeeAlso: AH=61h"HUNTER",AH=81h"HUNTER"
+--------B-1581-------------------------------
+INT 15 C - OS HOOK - DEVICE CLOSE
+ AH = 81h
+ BX = device ID
+ CX = process ID
+ CF clear
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status (see #00496)
+Note: this function should be hooked by a multitasker which wishes to keep
+ track of device ownership; the default BIOS handler merely returns
+ successfully
+SeeAlso: AH=80h,AH=82h
+--------b-1581------------------------------------
+INT 15 - HUNTER 16 - CONTROL POWER OUTPUT
+ AH = 81h
+ AL = new state of power output (00h off, nonzero on)
+Desc: turn the +5V low power output on or off
+SeeAlso: AH=80h"HUNTER"
+--------B-1582-------------------------------
+INT 15 C - OS HOOK - PROGRAM TERMINATION
+ AH = 82h
+ BX = process ID
+ CF clear
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status (see #00496)
+Notes: closes all devices opened by the given process ID with function 80h
+ this function should be hooked by a multitasker which wishes to keep
+ track of device ownership; the default BIOS handler merely returns
+ successfully
+SeeAlso: AH=80h,AH=81h
+--------b-1582------------------------------------
+INT 15 - HUNTER 16 - SOUND OUTPUT
+ AH = 82h
+ DX = length (duration in seconds = DX * 666670 / frequency)
+ BX = pitch (see #00497)
+Desc: Sound the tone specified in BX for the duration in DX
+SeeAlso: AX=1019h
+
+(Table 00497)
+Values for HUNTER 16 sound pitch:
+BX(dec) Note Frequency BX(dec) Note Frequency
+ 425 G 1568.000 1515 A 440.000
+ 451 F# 1479.503 1605 G# 415.307
+ 477 F 1396.900 1701 G 392.000
+ 506 E 1318.500 1802 F# 369.998
+ 536 D# 1244.523 1909 F 349.230
+ 568 D 1174.700 2022 E 329.630
+ 601 C# 1108.749 2143 D# 311.127
+ 637 C 1046.500 2270 D 293.660
+ 675 B 958.770 2405 C# 277.183
+ 715 A# 932.329 2548 MID C 261.630
+ 758 A 880.000 2700 B 246.940
+ 803 G# 830.609 2860 A# 233.081
+ 850 G 783.990 3030 A 220.000
+ 901 F# 739.990 3210 G# 207.654
+ 954 F 698.460 3401 G 196.000
+ 1011 E 659.260 3604 F# 184.996
+ 1071 D# 622.257 3818 F 174.610
+ 1135 D 587.330 4045 E 164.810
+ 1203 C# 554.365 4286 D# 155.560
+ 1274 C 523.250 4540 D 146.830
+ 1350 B 493.880 4668 C# 142.827
+ 1430 A# 466.162 4803 C 138.810
+--------B-1583-------------------------------
+INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
+ AH = 83h
+ AL = subfunction
+ 00h set interval
+ CX:DX = microseconds to delay
+ ES:BX -> byte whose high bit is to be set at end of interval
+ 01h cancel wait interval
+Return: CF set on error or function already busy
+ AH = status
+ 80h invalid command (PC,PCjr)
+ 86h function not supported (XT and later)
+ CF clear if successful
+Notes: the resolution of the wait period is 977 microseconds on many systems
+ because many BIOSes use the 1/1024 second fast interrupt from the AT
+ real-time clock chip which is available on INT 70
+ IBM AT 1984/1/10 BIOS ignores AL and always performs subfunction 00h
+SeeAlso: AH=41h,AH=86h,INT 70,MEM 0040h:0098h,MEM 0040h:009Ch
+--------b-1583------------------------------------
+INT 15 - HUNTER 16 - CONTROL SCREEN SYNCHRONISATION
+ AH = 83h
+ AL = state of LCD window (00h disabled, nonzero enabled)
+Desc: Enable/disable the facility where the displayed window tracks the
+ cursor output to keep the focus visible
+--------B-1584-------------------------------
+INT 15 - BIOS - JOYSTICK SUPPORT (XT after 1982/11/8,AT,XT286,PS)
+ AH = 84h
+ DX = subfunction
+ 0000h read joystick switches
+ Return: AL bits 7-4 = switch settings
+ 0001h read positions of joysticks
+ Return: AX = X position of joystick A
+ BX = Y position of joystick A
+ CX = X position of joystick B
+ DX = Y position of joystick B
+Return: CF set on error
+ AH = status (see #00496)
+ CF clear if successful
+Notes: if no game port is installed, subfunction 0000h returns AL=00h (all
+ switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
+ a 250kOhm joystick typically returns 0000h-01A0h
+SeeAlso: AH=84h"V20-XT-BIOS"
+--------b-1584-------------------------------
+INT 15 - V20-XT-BIOS - JOYSTICK SUPPORT
+ AH = 84h
+ DX = subfunction
+ 0000h read joystick switches
+ Return: AL bits 7-4 = switch settings
+ other: read positions of joysticks as indicated by bits 0-3
+ Return: AX = X position of joystick A (if DX bit 0 set)
+ BX = Y position of joystick A (if DX bit 1 set)
+ CX = X position of joystick B (if DX bit 2 set)
+ DX = Y position of joystick B (if DX bit 3 set)
+Return: CF set on error
+ AH = status (see #00496)
+ CF clear if successful
+Program: V20-XT-BIOS is a ROM BIOS replacement with extensions by Peter
+ Koehlmann / c't magazine
+SeeAlso: AH=84h"PS",INT 10/AH=0Eh/CX=ABCDh
+----------1584--DX0002-----------------------
+INT 15 - AMIGATSR - INSTALLATION CHECK
+ AH = 84h
+ DX = 0002h
+Return: AX = 1234h if installed
+Program: AMIGATSR is a serial-port driver for using an Amiga gamepad on a PC
+SeeAlso: AH=84h/DX=0002h"MULTIJOY"
+----------1584--DX0002-----------------------
+INT 15 - MULTIJOY - INSTALLATION CHECK
+ AH = 84h
+ DX = 0002h
+Return: AX = 4321h if installed
+SeeAlso: AH=84h/DX=0002h"AMIGATSR",AH=84h/DX=0003h"MULTIJOY"
+----------1584--DX0003-----------------------
+INT 15 - MULTIJOY - GET ACTIVE JOYSTICK
+ AH = 84h
+ DX = 0003h
+Return: AX = number of the currently-active joystick device
+ BX = device classification (see #04098)
+SeeAlso: AH=84h/DX=0002h"MULTIJOY"
+ !!! more info to follow
+
+Bitfields for MULTIJOY device classification:
+Bit(s) Description (Table 04098)
+ 15 device connected and ready
+ 14 no buttons (overrides bits 12-9)
+ 13 no axes (overrides bits 8-5)
+ 12-9 number of buttons, less one
+ 8-5 number of axes, less one
+ 4 digital device rather than analog
+ 3-0 device type
+ 0000 keyboard emulating joystick
+ 0001 gamepad
+ 0010 joystick
+ 0011 steering wheel
+ 0100 flight yoke
+ 0101 mouse emulating joystick
+ 0110 trackball emulating joystick
+ 0111 GlidePoint (touchpad) emulating joystick
+ 1000 touchscreen emulating joystick
+ 1001 steering wheel
+ 1010 light pen emulating joystick
+ 1011 speech recognition emulating joystick
+ 1100 TV remote emulating joystick
+ 1101 network/Internet remote control
+ 1110 PC software-controlled (demo mode, etc.)
+ 1111 other device
+----------1584--DX0004-----------------------
+INT 15 - MULTIJOY - SELECT JOYSTICK
+ AH = 84h
+ DX = 0004h
+ BX = number of the joystick device to make active
+Return: ???
+SeeAlso: AH=84h/DX=0003h"MULTIJOY"
+--------b-158400----------------------------------
+INT 15 - HUNTER 16 - GET DISKETTE PORT
+ AX = 8400h
+ BH = Drive (0: A:, 1: B:)
+Return: AL = Port (0: COM1, >0: COM2)
+Desc: return the COM port used for the floppy drive
+SeeAlso: AX=8401h
+--------b-158401----------------------------------
+INT 15 - HUNTER 16 - SET DISKETTE PORT
+ AX = 8401h
+ BH = Drive (0: A:, 1: B:)
+ BL = Port (0: COM1, >0: COM2)
+Desc: set the COM port used for the floppy drive
+SeeAlso: AX=8400h
+--------B-1585-------------------------------
+INT 15 C - OS HOOK - SysReq KEY ACTIVITY (AT,PS)
+ AH = 85h
+ AL = SysReq key action (00h pressed, 01h released)
+ CF clear
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status (see #00496)
+Notes: called by keyboard decode routine
+ the default handler simply returns successfully; programs which wish
+ to monitor the SysReq key must hook this call
+ the SysReq key is often labeled SysRq
+SeeAlso: INT 09
+--------b-158500----------------------------------
+INT 15 - HUNTER 16 - RESTORE POWER MENU (APM)
+ AX = 8500h
+Desc: restore the standard power menu
+SeeAlso: AX=8501h"HUNTER"
+--------b-158501----------------------------------
+INT 15 - HUNTER 16 - SET POWER MENU (APM)
+ AX = 8501h
+ BL = user software interrupt number
+Desc: install an alternate power menu routine
+SeeAlso: AX=8500h"HUNTER"
+--------B-1586-------------------------------
+INT 15 - BIOS - WAIT (AT,PS)
+ AH = 86h
+ CX:DX = interval in microseconds
+Return: CF clear if successful (wait interval elapsed)
+ CF set on error or AH=83h wait already in progress
+ AH = status (see #00496)
+Note: the resolution of the wait period is 977 microseconds on many systems
+ because many BIOSes use the 1/1024 second fast interrupt from the AT
+ real-time clock chip which is available on INT 70; because newer
+ BIOSes may have much more precise timers available, it is not
+ possible to use this function accurately for very short delays unless
+ the precise behavior of the BIOS is known (or found through testing)
+SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70
+--------b-1586------------------------------------
+INT 15 - HUNTER 16 - GET/SET SCREEN ATTRIBUTE TABLE
+ AH = 86h
+ AL = function (00h get, nonzero set)
+ BX = 1234h
+ DS:SI -> 256-byte Attribute buffer
+Note: In text modes each character has its attribute byte XOR'd with the
+ corresponding byte in the attribute table. If the attribute is 15,
+ 15 is XOR'd with Table[15]
+--------B-1587-------------------------------
+INT 15 - SYSTEM - COPY EXTENDED MEMORY
+ AH = 87h
+ CX = number of words to copy (max 8000h)
+ ES:SI -> global descriptor table (see #00499)
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00498)
+Notes: copy is done in protected mode with interrupts disabled by the default
+ BIOS handler; many 386 memory managers perform the copy with
+ interrupts enabled
+ on the PS/2 30-286 & "Tortuga" this function does not use the port 92h
+ for A20 control, but instead uses the keyboard controller (8042).
+ Reportedly this may cause the system to crash when access to the
+ 8042 is disabled in password server mode (see also PORT 0064h,#P0398)
+ this function is incompatible with the OS/2 compatibility box
+SeeAlso: AH=88h,AH=89h,INT 1F/AH=90h
+
+(Table 00498)
+Values for extended-memory copy status:
+ 00h source copied into destination
+ 01h parity error
+ 02h interrupt error
+ 03h address line 20 gating failed
+ 80h invalid command (PC,PCjr)
+ 86h unsupported function (XT,PS30)
+
+Format of global descriptor table:
+Offset Size Description (Table 00499)
+ 00h 16 BYTEs zeros (used by BIOS)
+ 10h WORD source segment length in bytes (2*CX-1 or greater)
+ 12h 3 BYTEs 24-bit linear source address, low byte first
+ 15h BYTE source segment access rights (93h)
+ 16h WORD (286) zero
+ (386+) extended access rights and high byte of source address
+ 18h WORD destination segment length in bytes (2*CX-1 or greater)
+ 1Ah 3 BYTEs 24-bit linear destination address, low byte first
+ 1Dh BYTE destination segment access rights (93h)
+ 1Eh WORD (286) zero
+ (386+) extended access rights and high byte of destin. address
+ 20h 16 BYTEs zeros (used by BIOS to build CS and SS descriptors)
+--------b-1587------------------------------------
+INT 15 - HUNTER 16 - SET INT 72h VECTOR
+ AH = 87h
+ DS:DX = new service routine
+Desc: set the INT 72h vector which is called in 2 cases:
+ - when the machine is about to turn off or reboot, INT 72h is called
+ with AH=0
+ - when the machine is powering up INT 72h is called with AH=01h
+Note: the actual INT 72h vector must also be changed with INT 21/AH=25h
+--------B-1588-------------------------------
+INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
+ AH = 88h
+Return: CF clear if successful
+ AX = number of contiguous KB starting at absolute address 100000h
+ CF set on error
+ AH = status
+ 80h invalid command (PC,PCjr)
+ 86h unsupported function (XT,PS30)
+Notes: TSRs which wish to allocate extended memory to themselves often hook
+ this call, and return a reduced memory size. They are then free to
+ use the memory between the new and old sizes at will.
+ the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h
+ for memory beyond 16MB
+ not all BIOSes correctly return the carry flag, making this call
+ unreliable unless one first checks whether it is supported through
+ a mechanism other than calling the function and testing CF
+ Due to applications not dealing with more than 24-bit descriptors
+ (286), Windows 3.0 has problems when this function reports more
+ than 15 MB. Some releases of HIMEM.SYS are therefore limited to use
+ only 15 MB, even when this function reports more.
+SeeAlso: AH=87h,AH=8Ah"Phoenix",AH=C7h,AX=DA88h,AX=E801h,AX=E820h
+--------b-1588------------------------------------
+INT 15 - HUNTER 16 - GET POWER UP KEYS
+ AH = 88h
+Return: AH = 00h
+ BX = column
+ CL = row
+SeeAlso: AH=71h
+--------B-1589-------------------------------
+INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
+ AH = 89h
+ BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
+ BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
+ ES:SI -> GDT for protected mode (see #00500)
+Return: CF set on error
+ AH = FFh error enabling address line 20
+ CF clear if successful
+ AH = 00h
+ in protected mode at specified address
+ BP may be destroyed; all segment registers change
+Notes: BL and BH must be multiples of 8
+ the protected-mode CS must reference the same memory as the CS this
+ function is called from because execution continues with the address
+ following the interrupt call
+SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
+
+Format of BIOS switch-to-protected-mode Global Descriptor Table:
+Offset Size Description (Table 00500)
+ 00h 8 BYTEs null descriptor (initialize to zeros)
+ 08h 8 BYTEs GDT descriptor (see #00501)
+ 10h 8 BYTEs IDT descriptor
+ 18h 8 BYTEs DS descriptor
+ 20h 8 BYTEs ES
+ 28h 8 BYTEs SS
+ 30h 8 BYTEs CS
+ 38h 8 BYTEs uninitialized, used to build descriptor for BIOS CS
+
+Format of segment descriptor table entry:
+Offset Size Description (Table 00501)
+ 00h WORD segment limit, low word
+ 02h 3 BYTEs segment base address, low 24 bits
+ 05h BYTE access mode (see #00502)
+ 06h BYTE 386+ extended access mode (see #00505)
+ 07h BYTE 386+ segment base address, high 8 bits
+SeeAlso: #00500,INT 2C/AX=0002h,INT 31/AX=0009h
+
+Bitfields for segment descriptor table access mode field:
+Bit(s) Description (Table 00502)
+ 3-0 segment type (see #00503,#00504)
+ 4 descriptor type (1 = application, 0 = system)
+ 6-5 descriptor privilege level
+ 7 segment is present in RAM
+SeeAlso: #00501,#00505
+
+(Table 00503)
+Values for system segment descriptor type:
+ 0 reserved
+ 1 available 16-bit TSS
+ 2 LDT
+ 3 busy 16-bit TSS
+ 4 16-bit call gate
+ 5 task gate
+ 6 16-bit interrupt gate
+ 7 16-bit trap gate
+ 8 reserved
+ 9 available 32-bit TSS
+ 10 reserved
+ 11 busy 32-bit TSS
+ 12 32-bit call gate
+ 13 reserved
+ 14 32-bit interrupt gate
+ 15 32-bit trap gate
+SeeAlso: #00502,#00504
+
+Bitfields for application segment descriptor type:
+Bit(s) Description (Table 00504)
+ 3 code/data
+ 0 date
+ 1 code
+---data segments---
+ 2 expand down
+ 1 writeable
+---code segments---
+ 2 conforming
+ 1 readable
+------
+ 0 accessed
+SeeAlso: #00502,#00503
+
+Bitfields for 386+ segment descriptor table extended access mode field:
+Bit(s) Description (Table 00505)
+ 3-0 high 4 bits of segment limit
+ 4 available
+ 5 reserved (0)
+ 6 default operation size (1 = 32 bits, 0 = 16 bits)
+ 7 granularity (1 = 4K, 0 = byte)
+SeeAlso: #00501,#00502,#02557
+--------b-158900----------------------------------
+INT 15 - HUNTER 16 - GET POWER MODE
+ AX = 8900h
+Return: AH = 00h
+ BL = current power mode
+ 00h Standard Power Mode (SPM)
+ 01h Advanced Power Mode (APM)
+SeeAlso: AX=8901h
+--------b-158901----------------------------------
+INT 15 - HUNTER 16 - SET POWER MODE
+ AX = 8901h
+ BL = new mode
+ 00h Standard Power Mode (SPM)
+ 01h Advanced Power Mode (APM)
+Return: AH = 00h
+SeeAlso: AX=8900h
+--------b-158A------------------------------------
+INT 15 - HUNTER 16 - CONTROL POWER INPUT (SPM)
+ AH = 8Ah
+ AL = new state of Power Input (00h disabled, nonzero enabled)
+ SI = 1234h
+ DI = 5678h
+Return: AH = status
+ 00h success
+ FFh failure
+Desc: Enable or disable Power Input. When Power Input is disabled the AC
+ adapter will neither charge the batteries nor supply power to the
+ Hunter 16. Disable Power Input if using Alkaline batteries.
+--------b-158A-------------------------------
+INT 15 - Phoenix BIOS v4.0 - GET BIG MEMORY SIZE
+ AH = 8Ah
+Return: DX:AX = extended memory size in K
+SeeAlso: AH=88h,AX=E801h,AX=E820h
+--------b-158B------------------------------------
+INT 15 - HUNTER 16 - GET/SET CHARGER TEMPERATURE OVERRIDE
+ AH = 8Bh
+ AL = function
+ 00h get
+ Return: BH = Maximum charging temperature
+ Temp = -20 + (n * 0.63) degrees Centigrade
+ BL = Minimum charging temperature
+ else set
+ BH = maximum charging temperature (as above)
+ BL = minimum charging temperature (as above)
+Return: AH = status
+ 00h success
+ FFh failure
+Desc: get/set the temperature interval within which the charger should
+ operate
+--------b-158C------------------------------------
+INT 15 - HUNTER 16 - GET/SET POWER SAVE ENTRY FLAG
+ AH = 8Ch
+ AL = function
+ 00h get
+ Return: BX = which operations disable power save (see #00506)
+ else set
+ BX = which operations should disable power save (see #00506)
+SeeAlso: AH=8Dh
+
+Bitfields for HUNTER 16 operations disabling power save:
+Bit(s) Description (Table 00506)
+ 0 INT 10h prevents power save
+ 1 INT 13h prevents power save
+ 2 INT 14h prevents power save
+ 3 INT 15h prevents power save
+ 4 INT 1Ah prevents power save
+ 5 INT 21h prevents power save
+ 6 direct write to video RAM prevents power save
+ 7 access to 8250 UART prevents power save
+ 8 access to 8253 (Sound) prevents power save
+--------b-158D------------------------------------
+INT 15 - HUNTER 16 - GET/SET BOOST CHARGE (SPM)
+ AH = 8Dh
+ AL = function
+ 00h get
+ Return: AL = Fast Charge state (00h prevented, else allowed)
+ nonzero set
+ BH = Fast Charge state (00h prevent, nonzero allow)
+Return: AH = status
+ 00h success
+ FFh failure
+Desc: control whether Fast Charging (200ma rather than 70ma) is allowed
+SeeAlso: AH=8Ch
+--------B-1590-------------------------------
+INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
+ AH = 90h
+ AL = device type (see #00507)
+ ES:BX -> request block for type codes 80h through BFh
+ CF clear
+Return: CF set if wait time satisfied
+ CF clear if driver must perform wait
+ AH = 00h
+Notes: 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
+ floppy and hard disk BIOS code uses this call to implement a timeout;
+ for device types 00h and 01h, a return of CF set means that the
+ timeout expired before the disk responded.
+ this function should be hooked by a multitasker to allow other tasks
+ to execute while the BIOS is waiting for I/O completion; the default
+ handler merely returns with AH=00h and CF clear
+SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
+
+(Table 00507)
+Values for device type:
+ 00h disk
+ 01h diskette
+ 02h keyboard
+ 03h PS/2 pointing device
+ 21h waiting for keyboard input (Phoenix BIOS)
+ 80h network
+ FBh digital sound (Tandy)
+ FCh disk reset (PS)
+ FDh diskette motor start
+ FEh printer
+--------B-1591-------------------------------
+INT 15 - OS HOOK - DEVICE POST (AT,PS)
+ AH = 91h
+ AL = device type (see #00507)
+ ES:BX -> request block for type codes 80h through BFh
+ CF clear
+Return: AH = 00h
+Note: this function should be hooked by a multitasker to allow other tasks
+ to execute while the BIOS is waiting for I/O completion; the default
+ handler merely returns with AH=00h and CF clear
+SeeAlso: AH=90h
+--------B-1592-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 92h
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+--------B-15A0-------------------------------
+INT 15 - IBM SurePath BIOS - ACCESS LOADABLE-ABIOS SIGNATURE
+ AH = A0h
+ AL = function
+ 00h get loadable-ABIOS signature
+ Return: BL = signature value
+ 00h loadable-ABIOS prompting not required
+ A1h loadable-ABIOS prompting is required
+ 01h write loadable-ABIOS signature
+ BL = new signature value
+ 00h loadable-ABIOS prompting not required
+ A1h loadable-ABIOS prompting is required
+Return: CF clear if successful
+ CF set on error
+ AH = status
+ 00h successful
+ 01h invalid subfunction
+ 02h unable to read/write signature
+ 86h function not supported
+Note: IBM classifies this function as optional
+SeeAlso: AH=08h"IBM"
+--------x-15A100-----------------------------
+INT 15 U - AMI PCI BIOS - SET ??? FLAG
+ AX = A100h
+Return: AX = 0000h
+ CF clear
+ BX,CX,DI may be destroyed
+Desc: sets bit 7 of CMOS RAM location 37h and updates the CMOS checksum in
+ locations 3Eh and 3Fh
+Notes: in the examined version of the BIOS, nonzero values in AL cause it to
+ drop through to checking the next possible value of AH, i.e. only
+ subfunction 00h is supported
+ also supported by Dell XPS P90 and IBM PS/PV 6384, which also use
+ AMI BIOSes
+--------B-15AB-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = ABh
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+----------15B001CX5354-----------------------
+INT 15 - Stac STACKER - INSTALLATION CHECK
+ AX = B001h
+ CX = 5354h ('ST')
+ DX = 4143h ('AC')
+Return: AX = 4F4Bh ('OK') if installed
+Note: this function is encapsulated in Stac's STACKER.LIB C library; it is
+ called by Novell DOS 7+ NWCACHE v1.01, which makes use of this
+ library
+--------n-15BA10-----------------------------
+INT 15 - HP OmniShare - Pen Driver - REPORT PEN CONTROL AREA EVENT
+ AX = BA10h
+ BL = event
+ 00h the pen left control areas
+ 01h the pen entered the Brightness- area
+ 02h the pen entered the Brightness+ area
+ 03h the pen entered the Contrast- area
+ 04h the pen entered the Contrast+ area
+Return: CF clear if successfully processed
+ CF set on error (function not supported, ie. not an OmniShare BIOS)
+Note: The pen driver is responsible for detecting when the pen enters and
+ leaves control areas of the OmniShare tablet, and notifying the BIOS.
+ The BIOS manages the events, including the autorepetition, and sets
+ the status LEDs.
+SeeAlso: AX=BA20h,AX=BA13h
+--------n-15BA11-----------------------------
+INT 15 - HP OmniShare - Pen Driver - SET THE COMMUNICATION LED STATE
+ AX = BA11h
+ BL = new LED state (00h steady, 01h flashing)
+Return: CF clear if successful
+ CF set on error
+Note: this function is for use by communication software to give visual
+ feedback of active communications even if the display is in standby
+ mode.
+SeeAlso: AX=BA10h,AX=BA24h
+--------n-15BA12-----------------------------
+INT 15 - HP OmniShare - Pen Driver - STORE PEN BATTERY CHARGE
+ AX = BA12h
+ BL = new battery state (00h good, 01h low charge)
+Return: CF set on error
+ CF clear if successfully stored in CMOS
+Note: The last report will be displayed by the Power-On Self Test the next
+ time the OmniShare boots. This allows something meaningful to be
+ reported even if the pen is not detected during the POST.
+SeeAlso: AX=BA13h
+--------n-15BA13-----------------------------
+INT 15 - HP OmniShare - Pen Driver - GET PEN BATTERY CHARGE
+ AX = BA13h
+Return: CF clear if successful
+ BL = pen battery state (00h good, 01h low charge)
+ CF set on error
+Note: returns the last value set by AX=BA12h.
+SeeAlso: AX=BA12h
+--------p-15BA20-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - INSTALLATION CHECK
+ AX = BA20h
+Return: CF clear if successful (installed)
+ CF set on error (not installed)
+Notes: The display controller can enter a standby mode after a given timeout,
+ to conserve power or (for the OmniShare) to increase the life of
+ the backlight.
+ A side effect of standby mode is that the communications LED turns on
+ automatically when the display is in standby mode. This is done in
+ hardware, and is intended to show that the unit is still on.
+SeeAlso: AX=BA10h,AX=BA20h,AX=BA22h,AX=BA24h,AX=BA26h
+--------p-15BA21-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - SET STANDBY DURATION
+ AX = BA21h
+ BL = new timeout before standby mode in minutes (01h-0Fh)
+ 00h to disable automatic switch to standby mode
+Return: CF clear if successful
+ CF set on error (function not supported)
+Note: The actual timeout with a GD6205 controller is ((N*64)-32) seconds,
+ instead of (N*60) seconds as documented.
+SeeAlso: AX=BA20h,AX=BA22h
+--------p-15BA22-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - GET STANDBY DURATION
+ AX = BA22h
+Return: CF clear if successful
+ BL = standy duration in minutes (01h-0Fh), or 00h if disabled
+ CF set on error (function not supported)
+Note: The actual timeout with a GD6205 controller is ((N*64)-32) seconds,
+ instead of (N*60) seconds as documented.
+SeeAlso: AX=BA20h,AX=BA21h
+--------p-15BA23-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - TURN ON THE SCREEN IMMEDIATELY
+ AX = BA23h
+Return: CF clear if successful
+ CF set on error
+SeeAlso: AX=BA11h,AX=BA20h,AX=BA24h
+--------p-15BA24-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - TURN OFF THE SCREEN IMMEDIATELY
+ AX = BA24h
+Return: CF clear if successful
+ CF set on error
+Note: This function is not implemented yet. Reserved for future versions
+ of the OmniShare.
+SeeAlso: AX=BA11h,AX=BA20h,AX=BA23h
+--------p-15BA25-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - PREPARE FOR UNINSTALL
+ AX = BA25h
+Return: CF clear if successful
+ AX = 25BAh
+ BX = PSP of STANDBY.COM resident portion
+ DX:CX -> previous INT 15 handler
+ CF set on error
+Note: This function is used internally by the STANDBY.COM /u option, and
+ should not be used by application programs.
+SeeAlso: AX=BA20h
+--------p-15BA26-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - IS THE DISPLAY IN STANDBY MODE?
+ AX = BA26h
+Return: CF clear if successful
+ AL = display state (00h active, 01h in standby mode)
+ CF set on error (function not supported)
+SeeAlso: AX=BA20h,AX=BA23h
+--------p-15BA27-----------------------------
+INT 15 - HP OmniShare - STANDBY.COM - RESERVED FUNCTIONS
+ AX = BA27h to BA2Fh
+Desc: reserved for future use
+--------b-15BC-------------------------------
+INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED FOR DELAY LOOPS
+ AH = BCh
+Return: CF clear
+ (Phoenix 1.10 10a) BYTE 0040h:00B0h set to delay loop count
+ (Dell 4xxDE BIOS A11) WORD 0040h:00ECh set to delay loop count
+Note: this function reads system timer channel 0 twice, then does
+ calculations on the returned values to determine the delay loop
+ counter needed by the BIOS for beeps and floppy timeouts
+SeeAlso: AX=2305h,MEM 0040h:00B0h
+--------E-15BF00-----------------------------
+INT 15 - Rational Systems DOS/16M - ???
+ AX = BF00h
+ ???
+Return: ???
+Note: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
+SeeAlso: AX=BF02h
+--------E-15BF01-----------------------------
+INT 15 - Rational Systems DOS/16M - ???
+ AX = BF01h
+ ???
+Return: ???
+Notes: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
+ called by DOS/4GW
+SeeAlso: AX=BF00h,AX=BF02h
+--------E-15BF02DX0000-----------------------
+INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
+ AX = BF02h
+ DX = 0000h
+Return: DX = nonzero if installed
+ DX:SI -> XBRK structure (see #00508)
+Note: this function is also supported by DOS/4G
+SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
+SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
+
+Format of DOS/16M XBRK structure:
+Offset Size Description (Table 00508)
+ 00h DWORD linear address of first available byte
+ 04h DWORD linear address of last available byte + 1 ???
+ 08h DWORD real-mode address of XBRK structure???
+ 0Ch DWORD ???
+ 10h 2 BYTEs ???
+ 12h WORD segment of ???
+ 14h 8 BYTEs ???
+ 1Ch 512 BYTEs protected-mode IDT
+21Ch N BYTEs protected-mode GDT
+--------E-15BF03-----------------------------
+INT 15 - Rational Systems DOS/4GW - UNINSTALL???
+ AX = BF03h
+ BX = PSP segment of extender
+ ???
+Return: ???
+Note: if BX is not the PSP segment of the extender, it passes the call down
+ the INT 15 chain; this allows nested instances of the extender
+SeeAlso: AX=BF06h
+--------E-15BF04-----------------------------
+INT 15 - Rational Systems DOS/4GW - ???
+ AX = BF04h
+ BX = PSP segment of extender
+Return: nothing???
+Notes: if BX is not the PSP segment of the extender, it passes the call down
+ the INT 15 chain; this allows nested instances of the extender
+ grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
+SeeAlso: INT 2F/AX=1607h/BX=22C0h
+--------E-15BF05-----------------------------
+INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
+ AX = BF05h
+ BX = PSP segment of extender
+Return: nothing???
+Notes: if BX is not the PSP segment of the extender, it passes the call down
+ the INT 15 chain; this allows nested instances of the extender
+ calls INT 67/AX=DE01h if ???
+--------E-15BF06-----------------------------
+INT 15 - Rational Systems DOS/4GW - ???
+ AX = BF06h
+ BX = PSP segment of extender
+ ???
+Return: ???
+Note: if BX is not the PSP segment of the extender, it passes the call down
+ the INT 15 chain; this allows nested instances of the extender
+SeeAlso: AX=BF03h
+--------E-15BFDCDX0000-----------------------
+INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
+ AX = BFDCh
+ DX = 0000h
+ SI = 0000h
+Return: DX = nonzero if installed
+ DX:SI -> XBRK structure (see #00508)
+SeeAlso: AX=BF02h
+--------E-15BFDEBX0000-----------------------
+INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
+ AX = BFDEh
+ BX = 0000h
+Return: AX = ??? (0003h)
+ BX = FFFFh
+SeeAlso: AX=BF02h
+--------E-15BFDEBX0001-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
+ AX = BFDEh
+ BX = 0001h
+Return: BX = 0000h (success)
+ CX:DX -> name of process manager executable
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX0002-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
+ AX = BFDEh
+ BX = 0002h
+ CX:DX -> ???
+Return: BX = 0000h (success)
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
+--------E-15BFDEBX0003-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
+ AX = BFDEh
+ BX = 0003h
+Return: BX = 0000h (success)
+ CX:DX -> ???
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
+--------E-15BFDEBX0004-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 0004h
+ CL = ???
+Return: BX = 0000h (success)
+ CX:DX -> XBRK structure (see #00508)
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX0005-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 0005h
+ CX = new value for ???
+Return: BX = 0000h (success)
+ AX = old value of ???
+ DS:SI -> ??? (if AX nonzero on return)
+ ES:DI -> ??? (if AX zero on return)
+Note: called by DOS4GW.EXE
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX0006-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
+ AX = BFDEh
+ BX = 0006h
+Return: BX = 0000h (success)
+ AH = interrupt number??? (BEh)
+ CX:DX = ???
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
+--------E-15BFDEBX0007-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
+ AX = BFDEh
+ BX = 0007h
+ CX:DX = ???
+Return: BX = 0000h (success)
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
+--------E-15BFDEBX0008-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 0008h
+ CX = segment of ???
+ DS = ???
+Return: BX = status
+ 0000h successful
+ AL = ??? (80h or C0h)
+ DX = ??? (0603h) if AL=C0h
+ 0001h failed
+ AX = 0000h
+Note: called by DOS4GW.EXE
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX0009-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
+ AX = BFDEh
+ BX = 0009h
+Return: BX = 0000h (success)
+ CX:DX -> full pathname to LOAD32.EXP
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX000A-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
+ AX = BFDEh
+ BX = 000Ah
+Return: BX = 0000h (success)
+ AX = new value of ??? counter
+Notes: also resets a variety of values if the counter goes negative
+ called by DOS4GW.EXE
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
+--------E-15BFDEBX000B-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
+ AX = BFDEh
+ BX = 000Bh
+Return: AX = new value of ??? counter
+Note: called by DOS4GW.EXE
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
+--------E-15BFDEBX000C-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 000Ch
+ CL = ???
+ 00h
+ nonzero
+Return: ???
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX000D-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 000Dh
+ ???
+Return: ???
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX000E-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 000Eh
+ DX:CX -> ???
+Return: AX = segment of handle for calling task
+ BX = ??? (probably destroyed)
+ DX:CX -> ???
+SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
+--------E-15BFDEBX000F-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
+ AX = BFDEh
+ BX = 000Fh
+Return: AX = segment of handle for calling task
+ BX = ??? (probably destroyed)
+ DX:CX -> ???
+Note: identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
+SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
+--------E-15BFDEBX0010-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
+ AX = BFDEh
+ BX = 0010h
+Return: AX = segment of caller's task handle
+ BX destroyed
+SeeAlso: AX=BFDEh/BX=000Fh
+--------E-15BFDEBX0011-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
+ AX = BFDEh
+ BX = 0011h
+Return: CX = code segment of DVDOS4GX.DVR
+ BX = ??? (0004h)
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX0012-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
+ AX = BFDEh
+ BX = 0012h
+Return: DX = code segment of DVDOS4GX.DVR
+ BX = ??? (012Ch)
+ CX = ??? (0006h)
+SeeAlso: AX=BFDEh/BX=0000h
+--------E-15BFDEBX0013-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
+ AX = BFDEh
+ BX = 0013h
+Return: DX:CX -> ???
+SeeAlso: AX=BFDEh/BX=000Eh
+--------E-15BFDEBX0014-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
+ AX = BFDEh
+ BX = 0014h
+ CX = index of ??? mailbox
+ (0000h-0004h valid, but no range checking done)
+Return: AX,BX destroyed
+SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
+--------E-15BFDEBX0015-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
+ AX = BFDEh
+ BX = 0015h
+ CX = index of ??? mailbox
+ (0000h-0004h valid, but no range checking done)
+Return: AX,BX destroyed
+SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
+--------E-15BFDEBX0016-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
+ AX = BFDEh
+ BX = 0016h
+ CX = index of ??? mailbox
+ (0000h-0004h valid, but no range checking done)
+Return: AX = status
+ 0000h no one owns mailbox
+ 0001h mailbox has an owner
+ BX destroyed
+SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
+--------E-15BFDEBX0017-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
+ AX = BFDEh
+ BX = 0017h
+ CX = index of ??? mailbox
+ (0000h-0004h valid, but no range checking done)
+Return: AX = segment of mailbox owner's handle
+ BX = segment of caller's task handle
+SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
+--------E-15BFDEBXFFFD-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
+ AX = BFDEh
+ BX = FFFDh
+Return: CX:DX = ???
+SeeAlso: AX=BFDEh/BX=FFFEh
+--------E-15BFDEBXFFFE-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
+ AX = BFDEh
+ BX = FFFEh
+ CX:DX = ???
+SeeAlso: AX=BFDEh/BX=FFFDh
+--------E-15BFDEBXFFFF-----------------------
+INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
+ AX = BFDEh
+ BX = FFFFh
+SeeAlso: AX=BFDEh/BX=0000h
+--------B-15C0-------------------------------
+INT 15 - SYSTEM - GET CONFIGURATION (XT >1986/1/10,AT mdl 3x9,CONV,XT286,PS)
+ AH = C0h
+Return: CF set if BIOS doesn't support call
+ CF clear on success
+ ES:BX -> ROM table (see #00509)
+ AH = status
+ 00h successful
+ The PC XT (since 1986/01/10), PC AT (since 1985/06/10), the
+ PC XT Model 286, the PC Convertible and most PS/2 machines
+ will clear the CF flag and return the table in ES:BX.
+ 80h unsupported function
+ The PC and PCjr return AH=80h/CF set
+ 86h unsupported function
+ The PC XT (1982/11/08), PC Portable, PC AT (1984/01/10),
+ or PS/2 prior to Model 30 return AH=86h/CF set
+Notes: the 1986/1/10 XT BIOS returns an incorrect value for the feature byte
+ the configuration table is at F000h:E6F5h in 100% compatible BIOSes
+ Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
+ and a model byte at absolute address FE845h (see #00516)
+ Hewlett-Packard machines contain the signature "HP" at F000h:00F8h and
+ a product identifier at F000h:00FAh (see #00519)
+ Compaq machines can be identified by the signature string "COMPAQ" at
+ F000h:FFEAh, and is preceded by additional information (see #00517)
+ Tandy 1000 machines contain 21h in the byte at F000h:C000h and FFh in
+ the byte at FFFFh:000Eh; Tandy 1000SL/TL machines only provide the
+ first three data bytes (model/submodel/revision) in the returned
+ table
+ the ID at F000h:C000h is used by some Microsoft software before
+ trusting the floppy flags bits 1 and 0 at 0040h:00B5h.
+ the Wang PC contains the signature "WANG" at FC00h:0000h. This is used
+ by Peter Reilley's portable binary editor and viewer BEAV to detect
+ a Wang PC.
+ Toshiba laptops contain the signature "TOSHIBA" at FE010h as part of
+ a laptop information record at F000h:E000h (see #00520)
+ some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
+ past the end of the configuration table
+ the Phoenix 386 BIOS contains a second version and date string
+ (presumably the last modification for that OEM version) beginning at
+ F000h:FFD8h, with each byte doubled (so that both ROM chips contain
+ the complete information)
+SeeAlso: AH=C7h,AH=C9h,AX=D100h,AX=D103h
+
+Format of ROM configuration table:
+Offset Size Description (Table 00509)
+ 00h WORD number of bytes following
+ 02h BYTE model (see #00515)
+ 03h BYTE submodel (see #00515)
+ 04h BYTE BIOS revision: 0 for first release, 1 for 2nd, etc.
+ 05h BYTE feature byte 1 (see #00510)
+ 06h BYTE feature byte 2 (see #00511)
+ 07h BYTE feature byte 3 (see #00512)
+ 08h BYTE feature byte 4 (see #00513)
+ 09h BYTE feature byte 5 (see #00514)
+ ??? (08h) (Phoenix 386 v1.10)
+ ??? (0Fh) (Phoenix 486 v1.03 PCI)
+---AWARD BIOS---
+ 0Ah N BYTEs AWARD copyright notice
+---Phoenix BIOS---
+ 0Ah BYTE ??? (00h)
+ 0Bh BYTE major version
+ 0Ch BYTE minor version (BCD)
+ 0Dh 4 BYTEs ASCIZ string "PTL" (Phoenix Technologies Ltd)
+ also on Phoenix Cascade BIOS
+---Quadram Quad386---
+ 0Ah 17 BYTEs ASCII signature string "Quadram Quad386XT"
+---Toshiba (Satellite Pro 435CDS at least)---
+ 0Ah 7 BYTEs signature "TOSHIBA"
+ 11h BYTE ??? (8h)
+ 12h BYTE ??? (E7h) product ID??? (guess)
+ 13h 3 BYTEs "JPN"
+
+Bitfields for feature byte 1:
+Bit(s) Description (Table 00510)
+ 7 DMA channel 3 used by hard disk BIOS
+ 6 2nd interrupt controller (8259) installed
+ 5 Real-Time Clock installed
+ 4 INT 15/AH=4Fh called upon INT 09h
+ 3 wait for external event (INT 15/AH=41h) supported
+ 2 extended BIOS area allocated (usually at top of RAM)
+ 1 bus is Micro Channel instead of ISA
+ 0 system has dual bus (Micro Channel + ISA)
+SeeAlso: #00509,#00511
+
+Bitfields for feature byte 2:
+Bit(s) Description (Table 00511)
+ 7 32-bit DMA supported
+ 6 INT 16/AH=09h (keyboard functionality) supported (see #00585)
+ 5 INT 15/AH=C6h (get POS data) supported
+ 4 INT 15/AH=C7h (return memory map info) supported
+ 3 INT 15/AH=C8h (en/disable CPU functions) supported
+ 2 non-8042 keyboard controller
+ 1 data streaming supported
+ 0 reserved
+SeeAlso: #00509,#00512,AH=C6h,AH=C7h,AH=C8h,INT 16/AH=09h
+
+Bitfields for feature byte 3:
+Bit(s) Description (Table 00512)
+ 7 not used
+ 6-5 reserved
+ 4 POST supports ROM-to-RAM enable/disable
+ 3 SCSI subsystem supported on system board
+ 2 information panel installed
+ 1 IML (Initial Machine Load) system (BIOS loaded from disk)
+ 0 SCSI supported in IML
+SeeAlso: #00509,#00511,#00512
+
+Bitfields for feature byte 4:
+Bit(s) Description (Table 00513)
+ 7 IBM "private" (set on N51SX, CL57SX)
+ 6 system has EEPROM
+ 5-3 ABIOS presence
+ 001 not supported
+ 010 supported in ROM
+ 011 supported in RAM (must be loaded)
+ 2 "private"
+ 1 system supports memory split at/above 16M
+ 0 POSTEXT directly supported by POST
+SeeAlso: #00509,#00512,#00514
+
+Bitfields for feature byte 5 (IBM):
+Bit(s) Description (Table 00514)
+ 7-5 IBM "private"
+ 4-2 reserved
+ 1 system has enhanced mouse mode
+ 0 flash EPROM
+SeeAlso: #00509,#00513
+
+(Table 00515)
+Values for model/submodel/revision:
+Model Submdl Rev BIOS date System
+ FFh * * 04/24/81 PC (original)
+ FFh * * 10/19/81 PC (some bugfixes)
+ FFh * * 10/27/82 PC (HD, 640K, EGA support)
+ FFh 00h rev ??? Tandy 1000SL
+ FFh 01h rev ??? Tandy 1000TL
+ FFh 46h *** ??? Olivetti M15
+ FEh * * 08/16/82 PC XT
+ FEh * * 11/08/82 PC XT and Portable
+ FEh * * ../..x.. Toshiba laptops up to ~1987
+ ("x"=product ID) (see #00521)
+ FEh 00h *** * ??? Olivetti M19
+ FEh 43h *** ??? Olivetti M240
+ FEh A6h ??? ??? Quadram Quad386
+ FDh * * 06/01/83 PCjr
+ FCh * * 01/10/84 AT models 068,099 6 MHz 20MB
+ FCh * * 02/25/93 Linux DOSEMU (all versions)
+ FCh 00h 00h ??? PC3270/AT
+ FCh 00h 01h 06/10/85 AT model 239 6 MHz 30MB
+ FCh 00h > 01h ??? 7531/2 Industrial AT
+ FCh 01h 00h 11/15/85 AT models 319,339 8 MHz, Enh Keyb, 3.5"
+ FCh 01h 00h 09/17/87 Tandy 3000
+ FCh 01h 00h ../..x.. Toshiba laptops since ~1988
+ ("x"=product ID) (see #00521)
+ FCh 01h 00h 03/08/93 Compaq DESKPRO/i
+ FCh 01h 00h various Compaq DESKPRO, SystemPro, ProSignia
+ FCh 01h 00h 07/20/93 Zenith Z-Lite 425L
+ FCh 01h 00h 04/09/90 AMI BIOS
+ FCh 01h 20h 06/10/92 AST
+ FCh 01h 30h ??? Tandy 3000NL
+ FCh 01h ??? ??? Compaq 286/386
+ FCh 02h 00h 04/21/86 PC XT-286
+ FCh 02h 00h various Compaq LTE Lite
+ FCh 02h 00h 08/05/93 Compaq Contura 486/486c/486cx
+ FCh 02h 00h 08/11/88 SoftWindows 1.0.1 (Power Macintosh)
+ FCh 04h 00h 02/13/87 ** PS/2 Model 50 (10 MHz/1 ws 286)
+ FCh 04h 01h 05/09/87 PS/2 Model 50 (10 Mhz 286, LW-type 32)
+ FCh 04h 02h ??? PS/2 Model 50
+ FCh 04h 02h 01/28/88 PS/2 Model 50Z (10 Mhz 286, LW-type 33)
+ FCh 04h 03h 04/18/88 PS/2 Model 50Z (10 MHz/0 ws 286)
+ FCh 04h 04h ??? PS/2 Model 50Z
+ FCh 05h 00h 02/13/87 ** PS/2 Model 60 (10 MHz 286)
+ FCh 06h 00h ??? IBM 7552-140 "Gearbox"
+ FCh 06h 01h ??? IBM 7552-540 "Gearbox"
+ FCh 08h *** ??? Epson, unknown model
+ FCh 08h 00h ??? PS/2 Model 25/286
+ FCh 09h 00h ??? PS/2 Model 25 (10 MHz 286)
+ FCh 09h 00h 08/25/88 PS/2 Model 30 286 (10 Mhz, LW-type 37)
+ FCh 09h 02h 06/28/89 PS/2 Model 30-286
+ FCh 09h 02h 06/28/89 PS/2 Model 25 286 (10 Mhz, LW-type 37)
+ FCh 0Bh 00h 12/01/89 PS/1 (LW-Type 44)
+ FCh 0Bh 00h 02/16/90 PS/1 Model 2011 (10 MHz 286)
+ FCh 20h 00h 02/18/93 Compaq ProLinea
+ FCh 25h 09h 12/07/91 PS/2 Model 56 SLC (20 MHz 386SLC)
+ FCh 30h *** ??? Epson, unknown model
+ FCh 31h *** ??? Epson, unknown model
+ FCh 33h *** ??? Epson, unknown model
+ FCh 42h *** ??? Olivetti M280
+ FCh 45h *** ??? Olivetti M380 (XP 1, XP3, XP 5)
+ FCh 48h *** ??? Olivetti M290
+ FCh 4Fh *** ??? Olivetti M250
+ FCh 50h *** ??? Olivetti M380 (XP 7)
+ FCh 51h *** ??? Olivetti PCS286
+ FCh 52h *** ??? Olivetti M300
+ FCh 81h 00h 01/15/88 Phoenix 386 BIOS v1.10 10a
+ FCh 81h 01h ??? "OEM machine"
+ FCh 82h 01h ??? "OEM machine"
+ FCh 94h 00h ??? Zenith 386
+ FBh 00h 01h 01/10/86 PC XT-089, Enh Keyb, 3.5" support
+ FBh 00h 01h 05/13/94 HP 200LX 2MB BIOS 1.01 A D german
+ FBh 00h 02h 05/09/86 PC XT
+ FBh 00h 04h 08/19/93 HP 100LX 1MB BIOS 1.04 A
+ FBh 4Ch *** ??? Olivetti M200
+ FAh 00h 00h 09/02/86 PS/2 Model 30 (8 MHz 8086)
+ FAh 00h 01h 12/12/86 PS/2 Model 30
+ FAh 00h 02h 02/05/87 PS/2 Model 30
+ FAh 01h 00h 06/26/87 PS/2 Model 25/25L (8 MHz 8086)
+ FAh 30h 00h ??? IBM Restaurant Terminal
+ FAh 4Eh *** ??? Olivetti M111
+ FAh FEh 00h ??? IBM PCradio 9075
+ F9h 00h 00h 09/13/85 PC Convertible
+ F9h FFh 00h ??? PC Convertible
+ F8h 00h 00h 03/30/87 ** PS/2 Model 80 (16MHz 386)
+ F8h 00h 00h ??? PS/2 Model 75 486 (33Mhz 486)
+ F8h 01h 00h 10/07/87 PS/2 Model 80 (20MHz 386)
+ F8h 02h 00h ??? PS/2 Model 55-5571
+ F8h 04h 00h 01/29/88 PS/2 Model 70 (20 Mhz 386DX,LW-type 33)
+ F8h 04h 02h 04/11/88 PS/2 Model 70 20MHz, type 2 system brd
+ F8h 04h 03h 03/17/89 PS/2 Model 70 20MHz, type 2 system brd
+ F8h 05h 00h ??? IBM PC 7568
+ F8h 06h 00h ??? PS/2 Model 55-5571
+ F8h 07h 00h ??? IBM PC 7561/2
+ F8h 07h 01h ??? PS/2 Model 55-5551
+ F8h 07h 02h ??? IBM PC 7561/2
+ F8h 07h 03h ??? PS/2 Model 55-5551
+ F8h 09h 00h 01/29/88 PS/2 Model 70 16MHz 386DX, type 1 sysbd
+ F8h 09h 02h 04/11/88 PS/2 Model 70 some models
+ F8h 09h 03h 03/17/89 PS/2 Model 70 some models
+ F8h 09h 04h 12/15/89 PS/2 Model 70 (16 Mhz 386, LW-type 33)
+ F8h 0Bh 00h 01/18/89 PS/2 Model P70 (8573-121) typ 2 sys brd
+ F8h 0Bh 02h 12/16/89 PS/2 Model P70 ??
+ F8h 0Ch 00h 11/02/88 PS/2 Model 55SX (16 MHz 386SX)
+ F8h 0Dh 00h ??? PS/2 Model 70 25MHz, type 3 system brd
+ F8h 0Dh 00h 06/08/88 PS/2 Model 70 386 25MHz, type 3 sys brd
+ F8h 0Dh 01h 02/20/89 PS/2 Model 70 386 25MHz, type 3 sys brd
+ F8h 0Dh ??? 12/01/89 PS/2 Model 70 486 25Mhz, type 3 sys brd
+ F8h 0Eh 00h ??? PS/1 486SX
+ F8h 0Fh 00h ??? PS/1 486DX
+ F8h 10h 00h ??? PS/2 Model 55-5551
+ F8h 11h 00h 10/01/90 PS/2 Model 90 XP (25 MHz 486)
+ F8h 12h 00h ??? PS/2 Model 95 XP
+ F8h 13h 00h 10/01/90 PS/2 Model 90 XP (33 MHz 486)
+ F8h 14h 00h 10/01/90 PS/2 Model 90-AK9 (25 MHz 486), 95 XP
+ F8h 15h 00h ??? PS/2 Model 90 XP
+ F8h 16h 00h 10/01/90 PS/2 Model 90-AKD / 95XP486 (33MHz 486)
+ F8h 17h 00h ??? PS/2 Model 90 XP
+ F8h 19h 05h ??? PS/2 Model 35/35LS or 40 (20 MHz 386SX)
+ F8h 19h 05h 03/15/91 PS/2 Model 35 SX / 40 SX (LW-type 37)
+ F8h 19h 06h 04/04/91 PS/2 Model 35 SX / 40 SX (LW-type 37)
+ F8h 1Ah 00h ??? PS/2 Model 95 XP
+ F8h 1Bh 00h 09/29/89 PS/2 Model 70 486 (25 Mhz 386DX)
+ F8h 1Bh 00h 10/02/89 PS/2 Model 70-486 (25 MHz 486)
+ F8h 1Ch 00h 02/08/90 PS/2 Model 65-121 / 65 SX (16MHz 386SX)
+ F8h 1Eh 00h 02/08/90 PS/2 Model 55LS (16 MHz 386SX)
+ F8h 23h 00h ??? PS/2 Model L40 SX
+ F8h 23h 01h ??? PS/2 Model L40 SX (20 MHz 386SX)
+ F8h 23h 02h 02/27/91 PS/2 Model L40 SX (20Mhz386SX,LW-typ37)
+ F8h 25h 00h ??? PS/2 Model 57 SLC
+ F8h 25h 06h ??? PS/2 Model M57 (20 MHz 386SLC)
+ F8h 26h 00h ??? PS/2 Model 57 SX
+ F8h 26h 01h ??? PS/2 Model 57 (20 MHz 386SX)
+ F8h 26h 02h 07/03/91 PS/2 Model 57 SX (20Mhz 386SX, SCSI)
+ F8h 28h 00h ??? PS/2 Model 95 XP
+ F8h 29h 00h ??? PS/2 Model 90 XP
+ F8h 2Ah 00h ??? PS/2 Model 95 XP (50 MHz 486)
+ F8h 2Bh 00h ??? PS/2 Model 90 / 90XP486 (50 MHz 486)
+ F8h 2Ch 00h ??? PS/2 Model 95 XP
+ F8h 2Ch 01h ??? PS/2 Model 95 (20 MHz 486SX)
+ F8h 2Dh 00h ??? PS/2 Model 90 XP (20 MHz 486SX)
+ F8h 2Eh 00h ??? PS/2 Model 95 XP
+ F8h 2Eh 00h ??? PS/2 Model 95 XP486 (20 Mhz 486SX)
+ F8h 2Eh 01h ??? PS/2 Model 95 (20 MHz 486SX + 487SX)
+ F8h 2Fh 00h ??? PS/2 Model 90 XP (20 MHz 486SX + 487SX)
+ F8h 30h 00h ??? PS/1 Model 2121 (16 MHz 386SX)
+ F8h 33h 00h ??? PS/2 Model 30-386
+ F8h 34h 00h ??? PS/2 Model 25-386
+ F8h 36h 00h ??? PS/2 Model 95 XP
+ F8h 37h 00h ??? PS/2 Model 90 XP
+ F8h 38h 00h ??? PS/2 Model 57
+ F8h 39h 00h ??? PS/2 Model 95 XP
+ F8h 3Fh 00h ??? PS/2 Model 90 XP
+ F8h 40h 00h ??? PS/2 Model 95 XP
+ F8h 41h 00h ??? PS/2 Model 77
+ F8h 45h 00h ??? PS/2 Model 90 XP (Pentium)
+ F8h 46h 00h ??? PS/2 Model 95 XP (Pentium)
+ F8h 47h 00h ??? PS/2 Model 90/95 E (Pentium)
+ F8h 48h 00h ??? PS/2 Model 85
+ F8h 49h 00h ??? PS/ValuePoint 325T
+ F8h 4Ah 00h ??? PS/ValuePoint 425SX
+ F8h 4Bh 00h ??? PS/ValuePoint 433DX
+ F8h 4Eh 00h ??? PS/2 Model 295
+ F8h 50h 00h ??? PS/2 Model P70 (8573) (16 MHz 386)
+ F8h 50h 01h 12/16/89 PS/2 Model P70 (8570-031)
+ F8h 52h 00h ??? PS/2 Model P75 (33 MHz 486)
+ F8h 56h 00h ??? PS/2 Model CL57 SX
+ F8h 57h 00h ??? PS/2 Model 90 XP
+ F8h 58h 00h ??? PS/2 Model 95 XP
+ F8h 59h 00h ??? PS/2 Model 90 XP
+ F8h 5Ah 00h ??? PS/2 Model 95 XP
+ F8h 5Bh 00h ??? PS/2 Model 90 XP
+ F8h 5Ch 00h ??? PS/2 Model 95 XP
+ F8h 5Dh 00h ??? PS/2 Model N51 SLC
+ F8h 5Eh 00h ??? IBM ThinkPad 700
+ F8h 61h *** ??? Olivetti P500
+ F8h 62h *** ??? Olivetti P800
+ F8h 80h 00h ??? PS/2 Model 80 (25 MHz 386)
+ F8h 80h 01h 11/21/89 PS/2 Model 80-A21 (25 Mhz 386)
+ F8h 81h 00h ??? PS/2 Model 55-5502
+ F8h 87h 00h ??? PS/2 Model N33SX
+ F8h 88h 00h ??? PS/2 Model 55-5530T
+ F8h 97h 00h ??? PS/2 Model 55 Note N23SX
+ F8h 99h 00h ??? PS/2 Model N51 SX
+ F8h F2h 30h ??? Reply Model 32
+ F8h F6h 30h ??? Memorex Telex
+ F8h FDh 00h ??? IBM Processor Complex (with VPD)
+ F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX)
+ F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX)
+ F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX + 487SX)
+ F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX + 487SX)
+ E4h ??? ??? ??? Triumph Adler PC/XT
+ E1h ??? ??? ??? ??? (checked for by DOS4GW.EXE)
+ E1h 00h 00h ??? PS/2 Model 55-5530 Laptop
+ D9h ??? ??? ??? Peacock XT
+ 9Ah * * ??? Compaq XT/Compaq Plus
+ 30h ??? ??? ??? Sperry PC
+ 2Dh * * ??? Compaq PC/Compaq Deskpro
+ ??? 56h ??? ??? Olivetti, unknown model
+ ??? 74h ??? ??? Olivetti, unknown model
+Notes: BIOS dates may vary without changes to the revision code, especially
+ for non-IBM machines
+ * This BIOS call is not implemented in these early versions or under
+ Linux's DOSEMU. Read the Model byte at F000h:FFFEh and BIOS date at
+ F000h:FFF5h instead.
+ ** These BIOS versions require the DASDDRVR.SYS patches.
+ *** These Olivetti and Epson machines store the submodel in the byte at
+ F000h:FFFDh.
+SeeAlso: #00509,#00516
+
+(Table 00516)
+Values for Dell model byte:
+ 02h Dell 200
+ 03h Dell 300
+ 05h Dell 220
+ 06h Dell 310
+ 07h Dell 325
+ 09h Dell 310A
+ 0Ah Dell 316
+ 0Bh Dell 220E
+ 0Ch Dell 210
+ 0Dh Dell 316SX
+ 0Eh Dell 316LT
+ 0Fh Dell 320LX
+ 11h Dell 425E
+SeeAlso: #00509,#00515
+
+Format of Compaq product information:
+Address Size Description (Table 00517)
+ F000h:FFE4h BYTE product family code (first byte)
+ F000h:FFE5h BYTE Point release number
+ F000h:FFE6h BYTE ROM version code
+ F000h:FFE7h BYTE product family code (second byte)
+ F000h:FFE8h WORD BIOS type code
+SeeAlso: #00518,#00520
+
+Format of Hewlett-Packard ROM ID at F000h:00F8h:
+Offset Size Description (Table 00518)
+ 00h 2 BYTEs signature "HP" (48h 50h)
+ 02h 2 BYTEs 00h 00h
+ 04h BYTE secondary code revision
+ 05h BYTE primary code revision
+ 06h BYTE date code, year-1960 (BCD)
+ 07h BYTE date code, week of year (BCD)
+SeeAlso: #00517,#00519
+
+Bitfields for Hewlett-Packard product identifier:
+Bit(s) Description (Table 00519)
+ 4-0 machine code
+ 0 original Vectra
+ 1 ES/12
+ 2 RS/20
+ 3 Portable/CS
+ 4 ES
+ 5 CS
+ 6 RS/16
+ other reserved
+ 7-5 CPU type
+ 0 = 80286
+ 1 = 8088
+ 2 = 8086
+ 3 = 80386
+ other reserved
+SeeAlso: #00518
+
+Format of Toshiba laptop information:
+Offset Size Description (Table 00520)
+ 00h 8 BYTEs ASCII product number (e.g. "T2200SX ")
+ 08h 8 BYTEs ASCII version number (e.g. "V1.20 ")
+ 10h 8 BYTEs ASCII signature string "TOSHIBA "
+ 18h 8 BYTEs always zero???
+ 20h DWORD -> built-in BIOS setup program entry point or 0000h:0000h
+Note: this record is located at F000h:E000h
+SeeAlso: #00517,#00518
+
+(Table 00521)
+Values for Toshiba product ID:
+model prodID version date product number
+ FEh 29h ../..).. Toshiba T1000LE
+ FEh 2Ah ../..*.. Toshiba T1000XE
+ FEh 2Bh ../..+.. Toshiba T1000SE
+ FEh 2Ch ../..,.. Toshiba T1000
+ FEh 2Dh ../..-.. Toshiba T1200F
+ FEh 2Dh V4.00 12/26-87 Toshiba T1200H
+ FEh 2Eh ../..... Toshiba T1100+
+ FCh 22h ../..".. Toshiba T8500
+ FCh 26h 01/15&88 Toshiba T5200
+ FCh 27h ../..'.. Toshiba T5100
+ FCh 28h ../..(.. Toshiba T2000
+ FCh 2Ah 12/26*89 Toshiba T1200XE
+ FCh 2Bh ../..+.. Toshiba T1600
+ FCh 2Ch ../..,.. Toshiba T3100e
+ FCh 2Dh ../..-.. Toshiba T3200
+ FCh 2Fh ../../.. Toshiba T3100
+ FCh 34h V1.50 02/04494 Toshiba T100X
+ FCh 38h ../..8.. Toshiba T2000SXe
+ FCh 39h V1.20 09/16991 Toshiba T2200SX
+ FCh 39h V1.40 10/01992 Toshiba T2200SX
+ FCh 3Ch V1.50 01/28<91 Toshiba T2000SX
+ FCh 3Dh ../..=.. Toshiba T3200SXC
+ FCh 3Eh ../..>.. Toshiba T3100SX
+ FCh 3Fh ../..?.. Toshiba T3200SX
+ FCh 40h ../..@.. Toshiba T4500C
+ FCh 41h V1.20 04/05A92 Toshiba T4500 ("T4500SXC" ???)
+ FCh 45h V3.20 04/14E92 Toshiba T4400SX ("C" or "SXC" on cover)
+ FCh 45h 01/13E93 Toshiba T4400SXC
+ FCh 46h * ../..F.. Toshiba T6400
+ FCh 46h * ../..F.. Toshiba T6400C
+ FCh 5Fh V1.40 01/18_94 Toshiba T3300SL
+ FCh 69h ../..i.. Toshiba T1900C ("T1900CT" ???)
+ FCh 6Ah V1.30 05/19j93 Toshiba T1900 ("T1900S" ???)
+ FCh 6Dh V1.10 12/25m92 Toshiba T1850C
+ FCh 6Eh V1.00 08/19n92 Toshiba T1850
+ FCh 6Eh V1.10 12/25n92 Toshiba T1850
+ FCh 6Fh V1.00 07/17o92 Toshiba T1800
+ FCh 6Fh V1.10 12/25o92 Toshiba T1800
+ FCh 7Eh V1.30 06/17~93 Toshiba T4600C
+ FCh 7Fh V1.40 11/10x94 Toshiba T4600
+ FCh 8Ah V1.30 10/22x93 Toshiba T6600C
+ FCh 91h V1.20 07/15x94 Toshiba T2400CT
+ FCh 91h V5.00 07/28x95 Toshiba T2400CS/CT
+ FCh 92h V5.00 07/28x95 Toshiba T3600CT
+ FCh 96h * V1.40 12/08x94 Toshiba T200
+ FCh 96h * V1.50 12/08x94 Toshiba T200CS (T200)
+ FCh 97h ../..x.. Toshiba T4800CT
+ FCh 98h * V1.10 12/22x93 Toshiba T1910
+ FCh 98h * V2.40 07/12x94 Toshiba T1910/CS (T19XX)
+ FCh 99h ../..x.. Toshiba T4700CS
+ FCh 9Bh V2.30 01/31x94 Toshiba T4700CT
+ FCh 9Bh V2.50 03/22x94 Toshiba T4700CT
+ FCh 9Bh V5.00 07/28x95 Toshiba T4700CT
+ FCh 9Ch V1.30 01/11x94 Toshiba T1950CT
+ FCh 9Ch V2.50 07/22x94 Toshiba T1950CT (T19XX)
+ FCh 9Dh * V2.40 07/12x94 Toshiba T1950/CS (T19XX)
+ FCh 9Eh * V1.20 12/25x93 Toshiba T3400
+ FCh 9Eh * V1.30 03/22x94 Toshiba T3400/CT
+ FCh B5h ** V5.10 08/25x95 Toshiba T2110/CS (T21XX)
+ FCh B5h V5.10 08/25x95 Toshiba T2130CS/CT (T21XX)
+ FCh BAh V1.30 02/16x95 Toshiba T2150CDS/CDT
+ FCh BAh V5.00 07/27x95 Toshiba T2150CDS/CDT (T2150)
+ FCh BBh ** V1.30 01/25x95 Toshiba T2100/CS/CT
+ FCh BBh ** V5.00 07/27x95 Toshiba T2100/CS/CT
+ FCh BCh V1.20 12/05x94 Toshiba T2450CT
+ FCh BCh V5.00 07/28x95 Toshiba T2450CT
+ FCh BEh V5.00 07/28x95 Toshiba T4850CT
+ FCh C0h V5.20 05/30x96 Toshiba 420CDS/CDT
+ FCh C1h V5.20 03/27x96 Toshiba 100CS
+ FCh C3h V5.60 07/19x96 Toshiba 710CDT / 720CDT
+ FCh C6h V5.30 11/30x95 Toshiba 410CS/CDT
+ FCh CAh V5.10 08/18x95 Toshiba 400CS/CDT
+ FCh CAh V5.40 12/18x95 Toshiba 400CS/CDT
+ FCh CBh V5.10 09/01x95 Toshiba 610CT
+ FCh CCh V5.50 06/13x96 Toshiba 700CS/CT
+ FCh CFh V5.00 08/07x95 Toshiba T4900CT
+ FCh DCh V5.10 06/17x96 Toshiba 650CT
+ FCh DCh V5.10 05/10x96 Toshiba 110CS/CT
+ FCh DDh V5.10 05/10x96 Toshiba 110CS/CT
+ FCh DFh V5.20 05/27x96 Toshiba 500CS/CDT
+ FCh ??? V5.??? ../..x.. Toshiba 620CT
+ FCh ??? V5.??? ../..x.. Toshiba 660CDT
+ FCh ??? V5.30 11/22/96 Toshiba 730CDT
+ FCh ??? V6.00 09/20/96 Toshiba 200CDS/CDT
+ FCh ??? V6.20 11/14/96 Toshiba 430CDS/CDT
+ FCh ??? V6.40 12/05/96 Toshiba 510CS/CDT
+Notes: the 8-bit ASCII graphics character in the "date" column above
+ has been substituted by "x" if larger than 80h
+ BIOS version numbers and dates may vary, esp. due to harddisk and
+ (flash) BIOS upgrades; all BIOS versions 5.xx are flash updates
+ for Windows95, the product number may indicate the series only
+ (T21XX) or does no longer contain the exact type suffix (CS/CT)
+ the most recent versions of the BIOS have stopped including the
+ product ID code in the BIOS date
+ [*] These models have monochrome and color versions which can be
+ distinguished with INT 42/AX=7503h (WD90C24 chipset)
+ [**] These models have monochrome and color versions which can be
+ distinguished with INT 10/AX=5F50h (CT655xx chipset)
+ models not found here like T21x5 are variants differing only in
+ bundled software
+SeeAlso: #00515
+--------B-15C1-------------------------------
+INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
+ AH = C1h
+Return: CF set on error
+ CF clear if successful
+ ES = segment of data area (see #M0001,#M0004,#M0005)
+SeeAlso: AH=04h"ABIOS",MEM 0040h:000Eh"DATA"
+--------M-15C200-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
+ AX = C200h
+ BH = new state
+ 00h disabled
+ 01h enabled
+Return: CF set on error
+ AH = status (see #00522)
+Note: IBM classifies this function as required
+SeeAlso: AX=C201h,AX=C207h,AX=C208h
+
+(Table 00522)
+Values for pointing device function status:
+ 00h successful
+ 01h invalid function
+ 02h invalid input
+ 03h interface error
+ 04h need to resend
+ 05h no device handler installed
+--------M-15C201-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
+ AX = C201h
+Return: CF set on error
+ AH = status (see #00522)
+ CF clear if successful
+ BH = device ID
+ BL = value returned by attached device after reset
+ AAh if device is a mouse
+Notes: after successful completion of this call, the pointing device is set
+ as follows: disabled, sample rate 100 Hz, resolution 4 counts/mm,
+ scaling 1:1, unchanged data package size
+ this function should be called before rebooting the system (see
+ INT 15/AH=4Fh), since otherwise the mouse may behave erratically on
+ some systems after the boot. Before calling this function, the
+ caller should check that the INT 15h vector is in fact initialized
+ (on some very old machines the IVT may contain 0000h:0000h).
+ IBM classifies this function as required
+SeeAlso: INT 33/AX=0000h,AX=C200h,AX=C207h
+--------M-15C202-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
+ AX = C202h
+ BH = sampling rate
+ 00h 10/second
+ 01h 20/second
+ 02h 40/second
+ 03h 60/second
+ 04h 80/second
+ 05h 100/second
+ 06h 200/second
+Return: CF set on error
+ AH = status (see #00522)
+SeeAlso: INT 33/AX=001Ch
+--------M-15C203-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
+ AX = C203h
+ BH = resolution (see #00523)
+Return: CF set on error
+ AH = status (see #00522)
+
+(Table 00523)
+Values for pointing device resolution:
+ 00h one count per mm
+ 01h two counts per mm
+ 02h four counts per mm
+ 03h eight counts per mm
+--------M-15C204-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
+ AX = C204h
+Return: CF set on error
+ AH = status (see #00522)
+ CF clear if successful
+ BH = device ID
+--------M-15C205-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
+ AX = C205h
+ BH = data package size (1 - 8 bytes)
+Return: CF set on error
+ AH = status (see #00522)
+Note: the pointing device is set as follows: disabled, 100 Hz sample rate,
+ resolution 4 counts/mm, scaling 1:1
+SeeAlso: AX=C201h
+--------M-15C206-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS
+ AX = C206h
+ BH = subfunction
+ 00h return device status
+ Return: BL = pointing device status (see #00524)
+ CL = resolution (see #00523)
+ DL = sample rate, reports per second
+ 01h set scaling at 1:1
+ 02h set scaling at 2:1
+Return: CF set on error
+ AH = status (see #00522)
+
+Bitfields for pointing device status:
+Bit(s) Description (Table 00524)
+ 0 right button pressed
+ 1 reserved
+ 2 left button pressed
+ 3 reserved
+ 4 0 if 1:1 scaling, 1 if 2:1 scaling
+ 5 device enabled
+ 6 0 if stream mode, 1 if remote mode
+ 7 reserved
+--------M-15C207-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
+ AX = C207h
+ ES:BX -> FAR user device handler or 0000h:0000h to cancel
+Return: CF set on error
+ AH = status (see #00522)
+Note: when the subroutine is called, it is passed the following values on
+ the stack; the handler should return with a FAR return without
+ popping the stack:
+ WORD 1: status (see #00525)
+ WORD 2: X data (high byte = 00h)
+ WORD 3: Y data (high byte = 00h)
+ WORD 4: 0000h
+SeeAlso: INT 33/AX=000Ch
+
+Bitfields for pointing device status:
+Bit(s) Description (Table 00525)
+ 15-8 reserved (0)
+ 7 Y data overflowed
+ 6 X data overflowed
+ 5 Y data is negative
+ 4 X data is negative
+ 3 reserved (1)
+ 2 reserved (0)
+ 1 right button pressed
+ 0 left button pressed
+--------M-15C208-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE - WRITE TO POINTER PORT
+ AX = C208h
+ BL = byte to be sent to the pointing device
+Note: IBM classifies this function as optional
+SeeAlso: AX=C200h,AX=C209h
+--------M-15C209-----------------------------
+INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE - READ FROM POINTER PORT
+ AX = C209h
+Return: BL = first byte read from pointing device
+ CL = second byte read
+ DL = third byte read
+Note: IBM classifies this function as optional
+SeeAlso: AX=C200h,AX=C208h
+--------M-15C2-------------------------------
+INT 15 - IBM SurePath BIOS - Officially "Private" Function
+ AH = C2h
+ AL = 10h-23h
+SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
+--------B-15C3------------------------------
+INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
+ AH = C3h
+ AL = function
+ 00h disable PS/2 watchdog timer
+ 01h enable PS/2 watchdog timer
+ BX = timer counter (0001h-00FFh)
+ 02h disable Gearbox system
+ 03h enable Gearbox system
+Return: CF set on error
+ CF clear if successful
+Note: the watchdog timer generates an NMI
+SeeAlso: INT 21/AH=2Bh/CX=6269h"WDTSR"
+--------B-15C4-------------------------------
+INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
+ AH = C4h
+ AL = subfunction
+ 00h return base POS register address
+ 01h enable selected slot for setup
+ BL = slot number (1 to 8)
+ 02h disable setup for all slots (enable adapter)
+Return: CF set on error
+ DX = base POS register address (if subfunction 00h)
+SeeAlso: AH=C6h
+--------B-15C5-------------------------------
+INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
+ AH = C5h
+ AL = interrupt being invoked
+ 01h INT 19
+ 02h INT 14
+ 03h INT 16
+ 04h INT 40 (floppy INT 13)
+ 05h INT 17
+ 06h INT 10
+ 07h INT 12
+ 08h INT 11
+ 09h INT 1A
+Return: all registers except AX must be preserved
+Notes: called as the very first action of the indicated ROM BIOS interrupt
+ handlers on the PS/2 Models 30/286, 50Z, and 95
+ default handler does nothing and returns CF clear for the above
+ subfunctions, CF set and AH=86h for all other subfunctions
+ value of AX passed to the original interrupt handler is pushed on
+ stack immediately prior to call
+--------B-15C6-------------------------------
+INT 15 U - later PS/2 models - GET POS DATA
+ AH = C6h
+ ???
+Return: ???
+Notes: this function is referenced by name and number in some IBM BIOS manuals
+ IBM reports that "there are a number of problems with this call" and
+ does not recommend its use.
+SeeAlso: AH=C4h
+--------B-15C7-------------------------------
+INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
+ AH = C7h
+ DS:SI -> user supplied memory map table (see #00526)
+Return: CF set on error
+ CF clear if successful
+Notes: call AH=C0h and examine bit 4 of feature byte 2 to check if this
+ function is supported
+ IBM classifies this function as optional
+ Windows95 OSR2 reportedly does not support this function even though
+ INT 15/AH=C0h indicates that it is available (observed on several
+ different systems)
+SeeAlso: AH=C0h,AH=C9h,AH=D1h,AX=E820h
+
+Format of memory-map table structure:
+Offset Size Description (Table 00526)
+ 00h WORD length of table (excluding this word)
+ 02h DWORD local memory between 1M and 16M, in 1K blocks
+ 06h DWORD local memory between 16M and 4G, in 1K blocks
+ 0Ah DWORD system memory between 1M and 16M, in 1K blocks
+ 0Eh DWORD system memory between 16M and 4G, in 1K blocks
+ 12h DWORD cacheable memory between 1M and 16M, in 1K blocks
+ 16h DWORD cacheable memory between 16M and 4G, in 1K blocks
+ 1Ah DWORD 1K blocks before start of non-system memory between 1M and 16M
+ 1Eh DWORD 1K blocks before start of non-system memory between 16M and 4G
+ 22h WORD start segment of largest free block from C0000h-DFFFFh
+ 24h WORD size of largest free block
+ 26h DWORD reserved
+--------B-15C8-------------------------------
+INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
+ AH = C8h
+ AL = function
+ 00h disable L1 cache
+ 01h enable L1 cache
+ ---models 90 and 95 only---
+ 02h disable L2 cache
+ 03h enable L2 cache
+ 04h disable both caches
+ 05h enable both caches
+ 06h return status of both caches
+ 07h-FFh Reserved
+Return: CF set on error
+ CF clear if successful
+ AH = status (see #00527)
+ For subfunction 06h only:
+ BL = status of L1 cache
+ 00h enabled
+ 01h disabled or not installed
+ 02h disabled due to test error (can not be enabled)
+ BH = status of L2 cache (same codes as BL)
+Notes: supported by at least PS/2 70, 70/486, 80-A21, 90, 95
+ call AH=C0h and examine bit 3 of feature byte 2 to check if this
+ function is supported.
+ on a 486 system, any external caches must be disabled when the
+ on-chip cache (L1) is disabled.
+SeeAlso: AH=C0h
+
+(Table 00527)
+Values for status:
+ 00h operation successful
+ 01h function choice (in AL) is invalid
+ 02h NVRAM data is invalid
+ 03h cache test error
+ 04h (90 and 95 only) cannot perform operation requested due to state of
+ other cache (also see note above)
+ 05h no L2 cache is present
+ 07h invalid input values
+ 09h CPU in protected mode
+--------B-15C9-------------------------------
+INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
+ AH = C9h
+ AL = 10h (may be required on some non-PS BIOSes)
+Return: CF clear if successful
+ AH = 00h
+ CH = CPU type (see #00528)
+ CL = mask revision (stepping level) (see #00529)
+ CF set on error
+ AH = status (80h,86h = function not supported)
+Notes: the BIOS must save DX at startup in order to be able to support this
+ call; PS/2 Models 56, 57, 90, and 95 are known to support it
+ the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
+ IBM classifies this function as optional
+SeeAlso: AX=D100h,AX=DA92h,MEM 0040h:00BCh
+
+(Table 00528)
+Values for CPU type:
+ 03h 80386DX or clone
+ 04h 80486
+ 05h Pentium
+ 23h 80386SX or clone
+ 33h Intel i376
+ 43h 80386SL or clone
+ A3h IBM 386SLC
+ A4h IBM 486SLC
+
+(Table 00529)
+Values for stepping level:
+---i376 (type code 33h)---
+ 05h A0
+ 08h B
+---80386/80386DX (type code 03h)---
+ 03h Intel B1 to B10, Am386DX/DXL step A
+ 05h Intel D0
+ 08h Intel D1/D2/E1, Am386DX/DXL step B
+---80386SL (type code 43h)---
+ 05h A
+ 1xh B
+---80386SX (type code 23h)---
+ 04h Intel A0
+ 05h Intel B, Am386SX/SXL step A1
+ 08h Intel C/D1, Am386SX/SXL step B
+ 09h Intel 386CX/386EX/386SXstatic step A
+---80486DX (type code 04h)---
+ 00h Intel A0/A1
+ 01h Intel B2 to B6
+ 02h Intel C0
+ 03h Intel C1
+ 04h Intel D0
+ 10h Intel cA2/cA3, Cx486SLC step A
+ 11h Intel cB0/cB1
+---486DX2 (type code 04h)---
+ 02h Am486DX2 (unknown stepping)
+ 32h Intel DX2/Overdrive steps A0 to A2
+ 33h Intel DX2/Overdrive step B1
+---486SX (type code 04h)---
+ 20h Intel A0
+ 22h Intel B0
+ 27h Intel cA0
+ 28h Intel cB0
+---486SL (type code 04h)---
+ 40h Intel A
+---IntelSX2 (type code 04h)---
+ 5xh Intel A
+---IntelDX4 (type code 04h)---
+ 8xh Intel A
+---487SX (type code 04h)---
+ 20h Intel A0
+ 21h Intel B0
+---Pentium (type code 05h)---
+ 0xh Intel P5 steps Ax (1993)
+ 1xh Intel P5 steps Bx (1994)
+ 2xh Intel P54C step A
+---RapidCAD (type code 03h)---
+ 40h A
+--------B-15CA-------------------------------
+INT 15 U - PS/2 Model 95 - READ/WRITE CMOS MEMORY
+ AH = CAh
+ AL = function
+ 00h read CMOS
+ Return: CL = value of CMOS location
+ 01h write CMOS
+ CL = new value for CMOS location
+ BL = CMOS location (0Eh-3Fh)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (see #00530)
+Note: writes do not update the CMOS checksum
+
+(Table 00530)
+Values for CMOS read/write error code:
+ 01h CMOS lost power or has invalid checksum
+ 03h specified location out of range (too high)
+ 04h specified location out of range (too low)
+ 80h unsupported function (PC)
+ 86h unsupported function (XT)
+--------B-15CB-------------------------------
+INT 15 U - PS/2 Model 95 - RESERVED
+ AH = CBh
+ ???
+Return: ???
+--------B-15CC-------------------------------
+INT 15 U - PS/2 Model 95 - RESERVED
+ AH = CCh
+ ???
+Return: ???
+--------V-15CCCC-----------------------------
+INT 15 U - Toshiba laptops - VCHAD.EXE - INSTALLATION CHECK
+ AX = CCCCh
+Return: AX = ABCDh if installed
+Note: supported by Toshiba VGA change display utility VCHAD.EXE ver 2.90+
+ older versions have the string "VCHAD" 2 bytes after the address of
+ the INT 15 handler which is hooked by all versions for the SysReq key
+SeeAlso: AH=85h
+--------B-15CD-------------------------------
+INT 15 U - PS/2 Model 95 - RESERVED
+ AH = CDh
+ ???
+Return: ???
+--------B-15CE--BL00-------------------------
+INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
+ AH = CEh
+ BL = 00h-0Eh arbitration level to be allocated
+ 0Fh-FFh reserved
+ AL = option byte
+ bit 7-1: reserved (0)
+ bit 0: 0 = need DMA channel for arbitration level requested
+ 1 = no channel required for arbitration level
+Return: CF set on error
+ AH = status (80h,86h = function not supported)
+ CF clear on success
+ AL = channel number
+ 00h-07h channel number allocated for the arbiration level
+ 08h-FEh reserved
+ FFh no channel requested for arbitration level
+ AH = status (see #00531)
+Notes: arbitration level 00h has the highest priority, 0Eh the lowest
+ to perform a DMA transfer operation, be sure to call this function
+ first, and call AH=CFh afterward. Failure to use this function
+ can cause unpredictable results.
+SeeAlso: AH=CFh
+
+(Table 00531)
+Values for DMA arbitration status:
+ 00h success
+ 01h arbitration level not available
+ 02h channel not available
+ 03h invalid arbitration level passed
+--------B-15CF-------------------------------
+INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
+ AH = CFh
+ BL = arbitration level to be deallocated (see AH=CEh)
+Return: CF set on error
+ AH = status (80h,86h = function not supported)
+ CF clear on success
+ AH = status
+ 00h success
+ 04h arbitration level not allocated
+SeeAlso: AH=CEh
+--------B-15D0-------------------------------
+INT 15 - later PS/2s - RESERVED
+ AH = D0h
+ ???
+Return: ???
+----------15D042BL00-------------------------
+INT 15 R - Intel Pentium Pro BIOS UPDATE - INSTALLATION CHECK
+ AX = D042h
+ BL = 00h
+Return: CF clear if successful
+ CF set on error
+ AH = status
+ 00h successful
+ EBX:ECX = signature "INTELPEP"
+ EDX = BIOS update loader version
+ SI = number of 2K update blocks which can be recorded in NVRAM
+ 86h not implemented
+ AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
+ 00h successful
+Program: the Pentium Pro BIOS update allows the system BIOS or other software
+ to install a microcode patch into the Pentium Pro processor
+Notes: this API must be called from actual real mode, not V86 mode
+ at least 32K stack space must be available when this function is called
+SeeAlso: AX=D042h/BL=01h,AX=D042h/BL=02h,AX=D042h/BL=03h
+SeeAlso: @xxxxh:xxxxh"Intel BIOS Upgrade",MSR 00000079h
+----------15D042BL01-------------------------
+INT 15 R - Intel Pentium Pro BIOS UPDATE - WRITE BIOS UPDATE AREA
+ AX = D042h
+ BL = 01h
+ ES:DI -> microcode update block (see #00533)
+ CX,DX,SI = segments of three 64K scratchpad areas for BIOS use
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00532)
+ AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
+ 00h successful
+Notes: a microcode update may also be initiated by a WRMSR instruction
+ with ECX=0079h, EDX=00000000h, and EAX=linear address of update
+ block (see #00533)
+ at least 32K stack space must be available when this function is called
+SeeAlso: AX=D042h/BL=00h,AX=D042h/BL=02h,AX=D042h/BL=03h,MSR 00000079h
+
+(Table 00532)
+Values for Pentium Pro BIOS update status:
+ 00h successful
+ 86h not implemented
+ 90h unable to erase NVRAM device
+ 91h unable to write to NVRAM device
+ 92h unable to read storage
+ 93h NVRAM is full
+ 94h specified processor stepping is not present in system
+ 95h invalid header or loader version
+ 96h wrong checksum in header
+ 97h processor rejected the update
+ 98h the same or a more recent update is already stored
+ 99h update block number was out of range
+
+Format of Pentium Pro microcode update block:
+Offset Size Description (Table 00533)
+ 00h DWORD update header version number (currently 00000001h)
+ FFFFFFFFh = unused block
+ 04h DWORD revision number of this microcode update
+ 08h DWORD update creation date, as BCD mmddyyyy (month,day,year)
+ 0Ch DWORD family/model/stepping of processor to which update applied
+ (same value as returned by CPUID instruction)
+ 10h DWORD checksum (used to force sum of all 512 DWORDs of the update
+ block to 00000000h)
+ 14h DWORD revision number of loader needed to install update
+ (currently 00000001h)
+ 18h 24 BYTEs reserved for future expansion
+ 30h 2000 BYTEs encrypted microcode data
+SeeAlso: MSR 00000079h,OPCODE "CPUID"
+----------15D042BL02-------------------------
+INT 15 R - Intel Pentium Pro BIOS UPDATE - BIOS UPDATE CONTROL
+ AX = D042h
+ BL = 02h
+ BH = function
+ 01h enable update loading at initialization time
+ 02h check whether update loading is enabled
+ CX,DX,SI = segments of three 64K scratchpad areas for BIOS use
+Return: CF clear if successful
+ CF set on error
+ AH = status (see #00532)
+ 00h successful
+ BL = enabled/disabled flag
+ 86h not implemented
+ AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
+ 00h successful
+Notes: this API must be called from actual real mode, not V86 mode
+ at least 32K stack space must be available when this function is called
+ there is no call to disable update loading due to security risks; the
+ BIOS setup can disable loading
+SeeAlso: AX=D042h/BL=00h,AX=D042h/BL=02h,AX=D042h/BL=03h
+----------15D042BL03-------------------------
+INT 15 R - Intel Pentium Pro BIOS UPDATE - READ BIOS UPDATE AREA
+ AX = D042h
+ BL = 03h
+ ES:DI -> buffer for microcode update block (see #00533)
+ ECX = two real-mode 64K scratchpad segments (upper and lower words)
+ DX = segment of 64K scratchpad area for BIOS use
+ SI = zero-based index number of update block to retrieve
+Return: CF clear if successful
+ CF set on error
+ AH = status
+ 00h successful
+ ES:DI buffer filled with 2048-byte update block
+ 86h not implemented
+ AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
+ 00h successful
+Program: the Pentium Pro BIOS update allows the system BIOS or other software
+ to install a microcode patch into the Pentium Pro processor
+Notes: this API must be called from actual real mode, not V86 mode
+ at least 32K stack space must be available when this function is called
+SeeAlso: AX=D042h/BL=00h,AX=D042h/BL=01h,AX=D042h/BL=03h
+--------B-15D100DX0000-----------------------
+INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
+ AX = D100h
+ DX = 0000h (reserved, must set to 0)
+Return: BL = size of one DDT entry, in bytes
+ CX = number of DDT entries
+ AH = return code (see #00534)
+ CF set on error
+ CF clear on success
+SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h
+
+(Table 00534)
+Values for return code:
+ 00h success
+ 01h requested DDT entry not found
+ 02h DDT data not valid
+ 86h function not supported
+--------B-15D101-----------------------------
+INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
+ AX = D101h
+ BX = number of requested entry (starting with 1)
+ DX = 0000h (reserved, must be set to 0)
+ ES:DI -> buffer to contain DDT entry (see #00535)
+Return: AH = return code (see #00534)
+ CF set on error
+ CF clear on success
+ ES:DI buffer filled with DDT entry
+SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h
+
+Format of Device Descriptor Table (DDT):
+Offset Size Description (Table 00535)
+ 00h BYTE bits 7-4: reserved (set to 0)
+ bits 3-0: slot of device (0 = system board)
+ 01h BYTE bits 7-4: second interrupt for this device (0 = none)
+ bits 3-0: first interrupt for this device (0 = none)
+ 02h BYTE bits 7-4: second arbitration level for this device
+ bits 3-0: first arbitration level for this device
+ 03h WORD DDT indicators (see #00536)
+ 05h BYTE reserved (0)
+ 06h WORD device ID (0 = none)
+ 08h WORD starting address of first I/O block (0 = none)
+ 0Ah WORD starting address of second I/O block (0 = none)
+ OCh WORD starting address of third I/O block (0 = none)
+ OEh DWORD start of first non-system memory block (0 = none)
+ 12h WORD size of first non-system memory block (in kilobytes)
+ 14h DWORD start of second non-system memory block (0 = none)
+ 18h WORD size of second non-system memory block (in kilobytes)
+ 1Ah BYTE implementation identifier of the device
+ 1Bh BYTE implementation revision level of the device
+Note: I/O block addresses and non-system memory addresses are listed in
+ ascending order in each DDT entry.
+
+Bitfields for DDT indicators:
+Bit(s) Description (Table 00536)
+ 15 reserved (0)
+ 14 second arbitration level exists
+ 13 first arbitration level exists
+ 12 serial interface is RS-422
+ 11 not address limited
+ 10 DMA channel used
+ 9 second arbitration level can be shared
+ 8 first arbitration level can be shared
+ 7-0 reserved (0)
+--------B-15D102-----------------------------
+INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
+ AX = D102h
+ BX = entry number at which to start searching
+ CX = requested I/O port address
+ DX = 0000h (reserved, must be set to 0)
+ ES:DI -> buffer to contain DDT entry (see #00535)
+Return: AH = return code (see #00534)
+ BX = DDT entry number where I/O port was found, or total entries
+ plus 1 if port was not found.
+ CF set on error
+ CF clear on success
+ ES:DI buffer filled with DDT entry
+Desc: the DDT is searched from the specified entry for the I/O port in CX,
+ and the first entry in which it is found is returned
+SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104h
+--------B-15D103DX0000-----------------------
+INT 15 - later PS/2s - RETURN ENTIRE DDT
+ AX = D103h
+ DX = 0000h (reserved, must be set to 0)
+ ES:DI -> buffer to contain DDT entry (see #00535)
+Return: AH = return code (see #00534)
+ CF set on error
+ CF clear on success
+ ES:DI buffer filled with DDT entry
+SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104h
+--------B-15D104-----------------------------
+INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
+ AX = D104h
+ BX = entry number at which to start searching
+ CX = requested device ID
+ DX = 0000h (reserved, must be set to 0)
+ ES:DI -> buffer to contain DDT entry (see #00535)
+Return: AH = return code (see #00534)
+ BX = DDT entry number where device ID was found, or total entries
+ plus 1 if port was not found.
+ CF set on error
+ CF clear on success
+ ES:DI buffer filled with DDT entry
+Desc: the DDT is searched from the specified entry for the device ID in CX,
+ and the first entry in which it is found is returned.
+SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h
+--------B-15D2-------------------------------
+INT 15 - later PS/2s - RESERVED
+ AH = D2h
+ ???
+Return: ???
+--------B-15D3-------------------------------
+INT 15 - later PS/2s - RESERVED
+ AH = D3h
+ ???
+Return: ???
+--------B-15D4-------------------------------
+INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
+ AH = D4h
+ DL = logical fixed disk drive number
+Return: AH = return code (see #00537)
+ CF set on error
+ CF clear on success
+ AL = physical fixed disk drive number
+
+(Table 00537)
+Values for return code:
+ 00h success
+ 01h specified logical drive number is invalid
+ 80h function not supported (on PCjr and PC)
+ 86h function not supported
+--------B-15D5-------------------------------
+INT 15 - later PS/2s - RESERVED
+ AH = D5h
+ ???
+Return: ???
+--------B-15D600BL00-------------------------
+INT 15 - later PS/2s - READ BOOT DEVICE ID
+ AX = D600h
+ BL = 00h
+ DX = device ID
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = status (86h for function not supported)
+SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602h
+--------B-15D600BL01-------------------------
+INT 15 - later PS/2s - WRITE BOOT DEVICE ID
+ AX = D600h
+ BL = 01h
+ DX = device ID
+Return: CF clear on success
+ AH = 00h
+ CF set on error
+ AH = status (86h for function not supported)
+SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h
+--------B-15D601BL00-------------------------
+INT 15 - later PS/2s - READ BOOT DEVICE KEY
+ AX = D601h
+ BL = 00h
+ DX = device ID
+Return: CF clear on success
+ AH = 00h
+ CF set on error
+ AH = status (86h for function not supported)
+SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602h
+--------B-15D601BL01-------------------------
+INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
+ AX = D601h
+ BL = 01h
+ DX = device ID
+Return: CF clear on success
+ AH = 00h
+ CF set on error
+ AH = status (86h for function not supported)
+SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h
+--------B-15D602-----------------------------
+INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
+ AX = D602h
+Return: CF clear on success
+ AH = 00h
+ AL = status of reference-partition boot request
+ 00h boot not requested
+ 01h boot requested
+ CF set on error
+ AH = status (86h for function not supported)
+SeeAlso: AX=D601h/BL=00h
+--------X-15D800-----------------------------
+INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
+ AX = D800h
+ CL = slot number (including embedded and virtual)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (80h,82h,83h,86h,87h)(see #00539)
+ AL = bit flags (see #00538)
+ BH = major revision level of configuration utility
+ BL = minor revision level of configuration utility
+ CX = checksum of configuration file
+ DH = number of device functions
+ DL = combined function information byte (see #00540)
+ SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
+Note: call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
+SeeAlso: AX=D801h,AX=D804h
+
+Bitfields for EISA AL bit flags:
+Bit(s) Description (Table 00538)
+ 7 set if duplicate IDs
+ 6 set if product ID readable
+ 4,5 slot type (00=expansion, 01=embedded, 10=virtual device)
+ 0-3 duplicate ID number if bit 7 set
+SeeAlso: #00540
+
+(Table 00539)
+Values for EISA error code:
+ 80h invalid slot number
+ 81h invalid function number
+ 82h EISA CMOS corrupt
+ 83h empty slot
+ 84h error clearing CMOS
+ 85h EISA CMOS is full
+ 86h invalid BIOS-FW function call
+ 87h invalid system configuration
+ 88h config utility version not supported
+
+Bitfields for EISA combined function information byte:
+Bit(s) Description (Table 00540)
+ 7 reserved
+ 6 slot has free-form data entries
+ 5 slot has port initialization entries
+ 4 slot has port-range entries
+ 3 slot has DMA entries
+ 2 slot has IRQ entries
+ 1 slot has memory entries
+ 0 slot has function type entries
+SeeAlso: #00538
+--------X-15D801-----------------------------
+INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
+ AX = D801h
+ CH = function number to read
+ CL = slot number (including embedded and virtual)
+ DS:SI -> 320-byte buffer for standard configuration data block
+Return: CF clear if successful
+ AH = 00h
+ DS:SI buffer filled
+ CF set on error
+ AH = error code (80h-83h,86h,87h) (see #00539)
+ BX destroyed
+Note: call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
+ this function is also supported by the Compaq SystemPro 486, but it
+ uses more than 1297 bytes of stack.
+BUG: some implementations appear to destroy the DF direction flag;
+ the Novell DOS 7+ memory managers explicitly clear it afterwards.
+--------X-15D802-----------------------------
+INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
+ AX = D802h
+ BH = EISA config utility major revision level
+ BL = EISA config utility minor revision level
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (84h,86h,88h) (see #00539)
+Note: call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
+SeeAlso: AX=D803h
+--------X-15D803-----------------------------
+INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
+ AX = D803h
+ CX = length of data structure (0000h = empty slot)
+ includes two bytes for config file checksum
+ DS:SI -> configuration data
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (84h-86h) (see #00539)
+Note: call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
+SeeAlso: AX=D802h
+--------X-15D804-----------------------------
+INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
+ AX = D804h
+ CL = slot number (including embedded and virtual)
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (80h,83h,86h) (see #00539)
+ SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
+Note: call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
+SeeAlso: AX=D800h
+--------b-15D820-----------------------------
+INT 15 - Compaq LTE Lite - GET ???
+ AX = D820h
+ DS:SI -> 17-byte buffer for ???
+Return: DS:SI buffer filled (first byte is length of remaining data, unless
+ it is greater than 10h, in which case the second byte is 00h and no
+ other data is returned)
+Note: this function is also supported by Compaq's EISA System ROM, Contura
+ 486/486c/486cx and recent DESKPRO/i ROMs
+SeeAlso: AX=D821h
+--------b-15D821-----------------------------
+INT 15 - Compaq LTE Lite - SET ???
+ AX = D821h
+ DS:SI -> counted string (should not be more than 16 bytes)
+Return: AH = 00h
+Note: this function is also supported by Compaq's EISA System ROM, Contura
+ 486/486c/486cx and recent DESKPRO/i ROMs
+SeeAlso: AX=D820h
+--------b-15D822BL00-------------------------
+INT 15 - Compaq EISA System ROM 04/08/93 - GET ???
+ AX = D822h
+ BL = 00h
+ CX = size of buffer or 0000h to retrieve required buffer size
+ DS:SI -> buffer for ??? (if CX nonzero)
+Return: CF clear if successful
+ AH = 00h
+ DH = 08h
+ CX = required buffer size to retrieve all data (if CX=0 on entry)
+ DS:SI buffer filled (if CX nonzero on entry)
+ CF set on error (BL nonzero)
+ AH = 86h
+--------b-15D823-----------------------------
+INT 15 - Compaq EISA System ROM 04/08/93 - ???
+ AX = D823h
+ BL = subfunction??? (00h or 80h)
+ BH = ???
+ DS:SI -> buffer for ??? (see #00541)
+Return: CF clear if successful
+ AH = 00h
+ DH = 08h
+ DL = ???
+ CF set on error
+ AH = error code
+ 86h BL neither 00h nor 80h
+ 87h ???
+
+Format of Compaq EISA buffer:
+Offset Size Description (Table 00541)
+ 00h BYTE ???
+ 01h WORD ???
+ 03h BYTE ???
+ 04h WORD ???
+ 06h WORD ???
+ ???
+----------15D824-----------------------------
+INT 15 - Compaq EISA System ROM 04/08/93 - ???
+ AX = D824h
+ CX = ???
+ DS:SI -> ASCIZ string containing ???
+Return: CF clear if successful
+ AH = 00h
+ CX = ???
+ CF set on error
+ AH = error code
+ 87h ??? failed
+ 88h ???
+Note: these functions are only available if ??? from keyboard controller
+ command C0h
+----------15D825-----------------------------
+INT 15 - Compaq EISA System ROM 04/08/93 - ???
+ AX = D825h
+ CX = ???
+ SI = ???
+ DI = ???
+ ???
+Return: CF clear if successful
+ AH = 00h
+ CX = ???
+ CF set on error
+ AH = error code
+ 87h ??? failed
+ 88h ???
+ CX = ???
+Note: these functions are only available if ??? from keyboard controller
+ command C0h
+----------15D826-----------------------------
+INT 15 - Compaq EISA System ROM 04/08/93 - ???
+ AX = D826h
+ BX = ???
+ CX = size of buffer in bytes
+ DS:SI -> buffer for ???
+ ???
+Return: CF clear if successful
+ AH = 00h
+ CX = ???
+ CF set on error
+ AH = error code
+ 87h ??? failed
+ 88h ???
+Note: these functions are only available if ??? from keyboard controller
+ command C0h
+--------X-15D8-------------------------------
+INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
+ AH = D8h
+ AL = 80h to 84h
+ other registers as appropriate for AL=00h to 04h
+Return: as appropriate for AL=00h to 04h
+Note: these functions are identical to AX=D800h to D804h, except that they
+ should be called when using 32-bit CS addressing mode (pointers use
+ ESI rather than SI as offset) instead of 16-bit addressing mode
+SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
+--------b-15D8-------------------------------
+INT 15 - Compaq EISA System ROM 04/08/93 - 32-bit CS ADDRESSING MODE CALLS
+ AH = D8h
+ AL = A0h to A6h
+ other registers as appropriate for AL=20h to 26h
+Return: as appropriate for AL=20h to 26h
+Note: these functions are identical to AX=D820h to D826h, except that they
+ should be called when using 32-bit CS addressing mode
+----------15DA-------------------------------
+INT 15 U - AMI PCI BIOS v1.00.05.AX1 - ???
+ AH = DAh
+ AL = function (00h-08h,12h,14h,15h,19h,88h-8Eh,92h,99h)
+ other registers vary by function
+Return: CF clear if successful
+ varies by function
+ CF set on error
+ AH = error code (86h unsupported [sub]function)
+Note: functions not listed above always return CF set and AH=86h; in the
+ examined BIOS, functions 02h-04h,06h-07h,89h-8Bh, and 8Dh also
+ always return CF set and AH=86h
+SeeAlso: AX=DA00h,AX=DA01h,AX=DA88h,AX=DA99h,AX=DB00h
+--------b-15DA00-----------------------------
+INT 15 U - AMI PCI BIOS - ???
+ AX = DA00h
+ CL = subfunction
+ 00h ???
+ 01h ???
+ 02h get ???
+ ???
+Return: CF clear if successful
+ ???
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Note: in the v1.00.05.AX1 BIOS, subfunctions 00h and 01h always return
+ failure
+SeeAlso: AX=DA01h
+--------b-15DA01-----------------------------
+INT 15 U - AMI PCI BIOS - CPU SPEED CONTROL
+ AX = DA01h
+ CL = subfunction (00h-02h)
+ 00h set low CPU speed
+ 01h set high CPU speed
+ 02h get current CPU speed
+Return: CF clear if successful
+ AH = current/new CPU speed (00h low, 01h high)
+ AL = ??? (00h)
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Notes: in the v1.00.05.AX1 BIOS, subfunctions 00h and 01h are NOPs in both
+ protected and V86 modes due to a test of MSW bit 0
+ setting the CPU speed also generates the same audible signals generated
+ when manually switching speeds with Ctrl-Alt-Gray- and Ctrl-Alt-Gray+
+BUG: the BIOS apparently intends to return CF set if ???, but fails to use
+ a different exit path in that case, resulting in CF clear
+----------15DA05-----------------------------
+INT 15 U - AMI PCI BIOS - GET ??? AND BIOS REVISION STRINGS
+ AX = DA05h
+ ES:SI -> 8-byte buffer for ??? and BIOS revision strings
+Return: CF clear
+ ES:SI buffer filled
+ AL = 00h
+ CX = ??? (0000h)
+Notes: for BIOS v1.00.05.AX1, the ??? string is "IDNO" and the BIOS revision
+ string is "AX1 "
+SeeAlso: AX=DA15h,AX=DB04h
+----------15DA08-----------------------------
+INT 15 U - AMI PCI BIOS - ???
+ AX = DA08h
+ ???
+Return: CF clear if successful
+ ???
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Note: in the examined v1.00.05.AX1 BIOS, this call always returns failure
+----------15DA12-----------------------------
+INT 15 U - AMI PCI BIOS - v1.00.05.AX1 - ???
+ AX = DA12h
+ CL = subfunction
+ 00h ???
+ 01h ???
+ 02h get ???
+ 03h ???
+ 04h ???
+ ???
+Return: CF clear if successful
+ ???
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Desc: ??? performs various manipulations on system chipset registers
+Notes: subfunctions 00h and 01h are NOPs in protected and V86 modes due to
+ a test of MSW bit 0
+ subfunctions 00h-02h always return success
+----------15DA14-----------------------------
+INT 15 U - AMI PCI BIOS - GET/SET ???
+ AX = DA14h
+ CL = subfunction
+ 00h read
+ 01h write
+ DH = new value for ??? (00h-02h)
+ DL = index of ??? (00h-03h, but not range-checked)
+ ???
+Return: CF clear if successful
+ DH = current value of ??? if reading
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Note: the values for indexes 00h and 01h are stored in CMOS RAM location 19h,
+ and the values for 02h and 03h are stored in location 36h
+BUG: the v1.00.05.AX1 BIOS range-checks DH on subfunction 00h instead of
+ subfunction 01h, even though DH is never used by subfunction 00h
+----------15DA15-----------------------------
+INT 15 U - AMI PCI BIOS - GET ??? AND BIOS REVISION STRINGS
+ AX = DA15h
+ ES:DI -> 8-byte buffer for ??? and BIOS revision strings
+Return: CF clear
+ ES:DI buffer filled
+ AL = 00h
+Note: for BIOS v1.00.05.AX1, the ??? string is "IDNO" and the BIOS revision
+ string is "AX1 "
+SeeAlso: AX=DA05h,AX=DB04h
+----------15DA19-----------------------------
+INT 15 U - AMI PCI BIOS - GET/SET ???
+ AX = DA19h
+ CL = subfunction
+ 00h get first ???
+ 01h get second ???
+ 02h set first ???
+ BX = ???
+ DX = ???
+ 03h set second ???
+ BX = ???
+ DX = ???
+Return: CF clear if successful
+ AX = 0000h
+ BX,DX = ??? (subfunctions 00h and 01h only)
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Note: the first ??? is stored in CMOS RAM locations 1Bh-1Eh, the second in
+ locations 1Fh-22h in the v1.00.05.AX1 BIOS
+--------b-15DA20-----------------------------
+INT 15 U - AMI PCI BIOS v1.00.12.AX1T - CMOS RAM BITFIELD MANIPULATION
+ AX = DA20h
+ BL = subfunction
+ 00h set CMOS data field
+ BH = CMOS data field number (00h-4Dh)
+ CH = new value for bitfield (in lowest bits of register)
+ 01h read CMOS data field
+ BH = CMOS data field number (00h-4Dh)
+ Return: CH = value of bitfield
+ CL = mask of valid bits
+ Note: both CL/CH shifted to move valid bits into lowest pos
+ 02h set CMOS byte
+ CL = CMOS RAM address (00h-7Fh)
+ CH = new value for CMOS byte
+ 03h get CMOS byte
+ CL = CMOS RAM address (00h-7Fh)
+ Return: CH = value of CMOS byte
+ 04h update CMOS checksums
+ Note: sets 2Eh/2Fh to checksum of 10h-2Dh and 7Eh/7Fh to
+ checksum of 48h-7Dh
+ 05h verify CMOS checksums
+ Return: CF clear if checksums OK
+ AH = 00h
+ CF set if checksum mismatch
+ AH = 01h
+Return: CF clear if successful
+ AH = 00h
+ CF set on error
+ AH = error code (86h unsupported function/data field)
+Notes: this function was not supported by the v1.00.05.AX1 BIOS, but had been
+ added by 1.00.12.AX1T
+ after using subfunctions 00h or 02h, the application must call
+ subfunction 04h to update the checksums to prevent an error the next
+ time the system is booted
+
+(Table 00542)
+Values for AMI BIOS v1.00.12.AX1T CMOS bitfield identifier:
+ ID address bit(s) contents
+ 00h 1Ah 7-6
+ 01h 1Dh 7-6
+ 02h 6Eh 1
+ 03h 77h 0
+ 04h 77h 1
+ 05h 77h 2
+ 06h 77h 3
+ 07h 77h 5
+ 08h 77h 6
+ 09h 77h 7
+ 0Ah 78h 7 power management enabled???
+ 0Bh 78h 6
+ 0Ch 10h 7-4 first floppy drive type
+ 0Dh 10h 3-0 second floppy drive type
+ 0Eh 11h 7
+ 0Fh 20h 4-0 selected language for error messages/setup utility
+ 10h 11h 2-1
+ 11h 11h 4
+ 12h 11h 0
+ 13h 11h 3
+ 14h 13h 7
+ 15h 13h 6-5
+ 16h 13h 4-2
+ 17h 19h 7
+ 18h 19h 6
+ 19h 19h 5
+ 1Ah 19h 4
+ 1Bh 1Eh 2-0
+ 1Ch 1Bh 7-6
+ 1Dh 1Ch 7
+ 1Eh 1Ch 3
+ 1Fh 1Ah 5-4
+ 20h 1Dh 5-4
+ 21h 1Bh 5-4
+ 22h 1Ch 6
+ 23h 1Ch 2
+ 24h 1Ah 3-2
+ 25h 1Dh 3-2
+ 26h 1Bh 3-2
+ 27h 1Ch 5
+ 28h 1Ch 1
+ 29h 1Ah 1-0
+ 2Ah 1Dh 1-0
+ 2Bh 1Bh 1-0
+ 2Ch 1Ch 4
+ 2Dh 1Ch 0
+ 2Eh 50h 7-0
+ 2Fh 51h 7-0
+ 30h 52h 7-0
+ 31h 53h 7-0
+ 32h 60h 0
+ 33h 60h 0
+ 34h 60h 0
+ 35h 60h 0
+ 36h 60h 0
+ 37h 60h 0
+ 38h 60h 1
+ 39h 61h 7
+ 3Ah 60h 2
+ 3Bh 61h 6-4
+ 3Ch 61h 2-0
+ 3Dh 60h 7-6
+ 3Eh 60h 5-4
+ 3Fh 78h 5-4
+ 40h 6Eh 5
+ 41h 1Eh 3
+ 42h 6Eh 0
+ 43h 6Eh 2
+ 44h 6Fh 1-0
+ 45h 6Fh 1-0
+ 46h 28h 4-2
+ 47h 28h 7-5
+ 48h 6Eh 4
+ 49h 6Eh 3
+ 4Ah 76h 7-0
+ 4Bh 77h 4
+ 4Ch 11h 6
+ 4Dh 1Fh 7-0
+----------15DA88-----------------------------
+INT 15 U - AMI PCI BIOS - GET EXTENDED MEMORY SIZE
+ AX = DA88h
+Return: CF clear (successful)
+ AX = 0000h
+ CL:BX = extended memory size in KBytes
+SeeAlso: AH=88h
+----------15DA8C-----------------------------
+INT 15 U - AMI PCI BIOS - GET BIOS AND CHIPSET IDENTIFICATION
+ AX = DA8Ch
+ CL = subfunction
+ 00h get BIOS version string
+ ES:DI -> 12-byte buffer for version string
+ 01h get chipset identification
+ BL = what to retrieve
+ (00h host/PCI bridge,01h motherboard chipset)
+ ES:DI -> 12-byte buffer for chipset identification (see #00543)
+Return: CF clear if successful
+ ES:DI buffer filled
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Notes: the v1.00.05.AX1 BIOS returns "1.00.05.AX1 " as its version string
+ subfunction 01h returns the five bytes read from the PCI configuration
+ registers 00h-05h (see #00878), padded to 12 bytes with NULs
+SeeAlso: AX=DB04h,PORT C000h"Neptune"
+
+Format of AMI PCI BIOS chipset identification:
+Offset Size Description (Table 00543)
+ 00h WORD vendor ID (see #00732 at AX=B102h)
+ 8086h = Intel
+ 02h WORD device ID
+ 0484h (BL=01h)
+ 04A3h (BL=00h)
+ 04h BYTE low byte of PCI Command Register
+ 05h 7 BYTEs unused (00h)
+----------15DA8E-----------------------------
+INT 15 U - AMI PCI BIOS - ???
+ AX = DA8Eh
+ ???
+Return: CF clear if successful
+ ???
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Note: in the v1.00.05.AX1 BIOS, this call always returns failure
+----------15DA92-----------------------------
+INT 15 U - AMI PCI BIOS - GET CPU TYPE AND SPEED
+ AX = DA92h
+Return: CF clear (successful)
+ AL = CPU stepping (see also #00529 at INT 15/AH=C9h)
+ AH = CPU model
+ BL = CPU family (05h = Pentium, etc.)
+ CX = external clock speed in MHz (BCD)
+ (0040h,0050h,0060h,0066h are possible return values on my
+ Pentium with the Intel "Neptune" chipset)
+ EAX high word destroyed
+Note: 90 MHz and faster Pentium CPUs can be configured to run at varying
+ multiples of the external clock speed, i.e. a typical 90 MHz Pentium
+ system will run the motherboard at 60 MHz (my 90 MHz Pentium returns
+ 0060h in CX)
+SeeAlso: AH=C9h
+----------15DA99-----------------------------
+INT 15 U - AMI PCI BIOS - GET/SET ??? FLAG
+ AX = DA99h
+ CL = subfunction
+ 00h check if ???
+ 01h set ??? flag
+ 02h clear ??? flag
+Return: CF clear if successful
+ AH = ??? (00h,01h)
+ AL = 00h
+ CF set on error
+ AH = error code (86h unsupported subfunction)
+Note: the flag is stored in bit 0 of CMOS RAM location 2Ch for BIOS
+ v1.00.05.AX1
+--------b-15DB00-----------------------------
+INT 15 U - AMI BIOS - Flash ROM - READ FLASH BIOS
+ AX = DB00h
+ DS:SI -> parameter block (see #00544)
+ ES:DI -> buffer for copied information
+Return: CF clear if successful
+ CF set on error
+ AH = status (86h if not implemented)
+ DS,ES destroyed, possibly other registers
+Note: used by FMUP.EXE, Intel's Flash Memory Update utility
+SeeAlso: AH=DAh,AX=DB01h,AX=DB04h
+
+Format of AMI BIOS Flash ROM parameter block:
+Offset Size Description (Table 00544)
+ 00h 32 BYTEs ASCIZ description of the file's contents
+ 20h BYTE Logical area type (see #00545)
+ 21h DWORD logical area size (overall size of area)
+ 25h BYTE flag: load from file (FF=yes, 00=no)
+ 26h BYTE flag: reboot after update (FF=yes, 00=no)
+ 27h BYTE flag: update entire image (FF=yes, 00=no)
+ 28h 24 BYTEs ASCIZ logical area name (cooresponds to offset 20)
+ "System BIOS"
+ "Logo Data Area", etc.
+ 40h 15 BYTEs ASCIZ time stamp string: MM/DD/YY-HH:MM
+ 4Fh BYTE checksum for this header (sum of all bytes except this one)
+ if checksum would be 00h,01h, or FFh, it is set to 2Ah
+ 50h DWORD this file's starting address (offset in image)
+ 54h DWORD size of image chunk in this file
+ 58h BYTE logical area type - same as offset 20h
+ 59h BYTE flag: last file in chain (FF=yes, 00=no)
+ 5Ah 6 BYTEs ASCIZ signature "FLASH"
+ 60h 16 BYTEs ASCIZ filename of next file in chain
+ 70h 16 BYTEs ASCIZ BIOS reserved string (usually version #)
+Notes: this block is identical in format to the 128-byte header on an AMI
+ BIOS Update file
+ for AX=DB00h, the following fields must be specified: 50h,54h,58h;
+ the fields at offset 20h and 5Ah should also be set if possible
+ the fields at offsets 40h and 70h will be set on return, if available
+SeeAlso: #00546
+--------b-15DB01-----------------------------
+INT 15 U - AMI BIOS - Flash ROM - GET BIOS SUBSYSTEM INFORMATION
+ AX = DB01h
+ CL = BIOS subsystem information identifier (see #00545)
+Return: CF clear if successful
+ AX = 0000h
+ ES:DI -> 56-byte record describing subsystem (see #00546)
+ CF set on error
+ AH = status
+ 01h nonexistent subsystem
+ 86h function not supported
+ AL = 00h
+Note: used by FMUP.EXE, Intel's Flash Memory Update utility
+SeeAlso: AX=DB00h,AX=DB02h
+
+(Table 00545)
+Values for AMI BIOS subsystem identifier:
+ 00h recovery code
+ 01h system BIOS
+ 02h PCI configuration data
+ 03h OEM logo data area (see #00547)
+ 04h system BIOS/Language Set (one system)
+ configuration utility (another system)
+SeeAlso: #00546
+
+Format of AMI BIOS subsystem information:
+Offset Size Description (Table 00546)
+ 00h BYTE subsystem identifier/logical area type (see #00545)
+ 01h DWORD subsystem (FlashROM page) size in bytes
+ 05h BYTE flag: loadable from file (FFh=yes)
+ 06h BYTE flag: reboot after update (FFh=yes)
+ 07h BYTE flag: update entire image (FFh=yes)
+ 08h 24 BYTEs subsystem/logical area name
+ 20h BYTE subsystem identifier???
+ 21h BYTE flag: reprogrammable if FFh
+ 22h BYTE ??? (01h,02h seen)
+ 23h 5 BYTEs ??? (apparently always 00h)
+ 28h 16 BYTEs BIOS reserved string (usually version number)
+SeeAlso: #00544
+
+Format of AMI OEM Logo data area:
+Offset Size Description (Table 00547)
+ 00h 8 BYTEs signature
+ "TEXTLOGO" if text-mode OEM logo
+ 8 DUP (FFh) if unused
+ 08h WORD offset of logo font definition table
+ 0Ah WORD offset of logo data
+ 0Ch WORD size of logo font table in words
+ 0Eh WORD offset of upper left corner of logo in video page
+ 10h WORD width of logo
+ 12h WORD height of logo
+ 14h BYTE reserved???
+ var var logo font definition (16 bytes per character)
+ var var logo data as character/attribute pairs
+Note: the attribute for the logo characters specifies which font will be used
+ for that character. If bit 3 is cleared, the normal system font is
+ used; if bit 3 is set, the logo font is used, with screen colors
+ adjusted to match the corresponding non-bright attribute for the
+ system font
+SeeAlso: #00545,#00546
+--------b-15DB02-----------------------------
+INT 15 U - AMI BIOS - Flash ROM - GET SIZE OF FLASH ROM PROGRAMMING CODE
+ AX = DB02h
+Return: CF clear
+ AX = 0000h
+ BX = size of ROM programming code in bytes
+Note: used by FMUP.EXE, Intel's Flash Memory Update utility
+SeeAlso: AX=DB00h,AX=DB03h
+--------b-15DB03-----------------------------
+INT 15 U - AMI BIOS - Flash ROM - GET FLASH ROM PROGRAMMING CODE
+ AX = DB03h
+ DS:SI -> ???
+ ES:DI -> buffer for Flash ROM programming code
+ BX = ???
+ DX = ???
+Return: CF clear if successful
+ AH = ???
+ BX = ???
+ DX = ???
+ CF set on error
+ AH = error code
+Notes: the entry point for the copied code (which is fully relocatable) is
+ the very first byte (see #00548)
+ used by FMUP.EXE, Intel's Flash Memory Update utility
+SeeAlso: AX=DB00h,AX=DB02h
+
+(Table 00548)
+Call AMI BIOS ??? code with:
+ AL = function
+ 00h erase Flash ROM block
+ CX = ???
+ bit 8: address line A16 inverted
+ ???
+ 01h program new data into Flash ROM
+ ???
+ 02h perform cold reboot
+ DS:SI -> ??? (see #00549)
+ ES:DI -> ???
+Return: AH = status
+ 00h successful
+ 01h invalid function
+ 02h ???
+ 03h ???
+ 04h ???
+Note: DS:SI and ES:DI are ignored for function 02h
+
+Format of AMI BIOS Flash ROM programming parameters:
+Offset Size Description (Table 00549)
+ 00h 32 BYTEs ???
+ 20h BYTE BIOS section number
+ 21h DWORD length of BIOS code/data in bytes
+ 25h 43 BYTEs ???
+ 50h DWORD ???
+ 54h 44 BYTEs ???
+SeeAlso: #00548
+--------b-15DB04-----------------------------
+INT 15 U - AMI BIOS - Flash ROM - GET BIOS REVISION
+ AX = DB04h
+Return: CF clear if supported
+ BL:BH:DL:DH = BIOS revision string
+ (e.g. 'AX1 ' for v1.00.05.AX1, 'AV0M' for v1.00.03.AV0M)
+ CL = flag: DH valid?
+ 00h ignore DH; ignore DL as well if 20h (space)
+ 01h ignore DH if 20h (space)
+ CH = BIOS status
+ 00h normal mode
+ 01h ROM recovery mode
+ AL = ??? (02h)
+Note: used by FMUP.EXE, Intel's Flash Memory Update utility
+SeeAlso: AX=DA05h,AX=DA15h,AX=DA8Ch,AX=DB00h,AX=DB03h
+--------Q-15DE00-----------------------------
+INT 15 - DESQview - GET PROGRAM NAME
+ AX = DE00h
+Return: AX = offset into DESQVIEW.DVO of program most recently selected from
+ the "Switch Windows" menu (see #00550)
+Note: always returns AX=0000h under DESQview/X
+SeeAlso: AX=DE07h
+
+Format of program entry in DESQVIEW.DVO:
+Offset Size Description (Table 00550)
+ 00h BYTE length of name (FFh if end of file)
+ 01h N BYTEs name
+ 2 BYTEs keys to invoke program (second = 00h if only one key used)
+ BYTE program type
+ 00h normal program
+ 04h divider
+ 80h Delete a Program
+ 81h Change a Program
+ WORD ??? apparently always 0000h
+--------Q-15DE01-----------------------------
+INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
+ AX = DE01h
+Return: nothing
+Notes: reads DESQVIEW.DVO, disables Open menu if file not in current directory
+ NOP for DESQview/X
+--------Q-15DE02-----------------------------
+INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
+ AX = DE02h
+Return: nothing
+Note: this call is a NOP in DV 2.x
+SeeAlso: AX=DE03h
+--------Q-15DE03-----------------------------
+INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
+ AX = DE03h
+Return: AX = ??? for current window
+ BX = ??? for current window
+Note: this call is a NOP in DV 2.x
+SeeAlso: AX=DE02h
+--------Q-15DE04-----------------------------
+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
+SeeAlso: AX=DE05h,AX=DE06h
+--------Q-15DE05-----------------------------
+INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
+ AX = DE05h
+Return: BX = KB of memory available
+ CX = largest block available
+ DX = total conventional memory in KB
+SeeAlso: AX=DE04h,AX=DE06h
+--------Q-15DE06-----------------------------
+INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
+ AX = DE06h
+Return: BX = KB of expanded memory available
+ CX = largest block available
+ DX = total expanded memory in KB
+SeeAlso: AX=DE04h,AX=DE05h
+--------Q-15DE07-----------------------------
+INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
+ AX = DE07h
+Return: AX = number of program as it appears on the "Switch Windows" menu
+Note: this API call may be made from a hardware interrupt handler
+SeeAlso: AX=DE00h
+--------Q-15DE08-----------------------------
+INT 15 - DESQview - GET ???
+ AX = DE08h
+Return: AX = 0000h if ??? is not set to the current task
+ 0001h if ??? is set to the current task
+--------Q-15DE09-----------------------------
+INT 15 - DESQview - UNIMPLEMENTED
+ AX = DE09h
+Return: nothing (NOP in DV 1.x and 2.x)
+--------Q-15DE0A-----------------------------
+INT 15 - DESQview v2.00+ - "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
+ this API call may be made from a hardware interrupt handler
+SeeAlso: AX=1003h
+--------Q-15DE0B-----------------------------
+INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
+ AX = DE0Bh
+ BL = API level minor version number
+ BH = API level major version number
+Return: AX = maximum API level (AH = major, AL = minor)
+Notes: if the requested API level is greater than the version of DESQview, a
+ "You need a newer version" error window is popped up
+ the API level defaults to 1.00, and is inherited by child tasks
+--------Q-15DE0C-----------------------------
+INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
+ AX = DE0Ch
+ BX = number of bytes
+Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
+Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
+ system memory
+SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
+--------Q-15DE0D-----------------------------
+INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
+ AX = DE0Dh
+ ES:DI -> previously allocated block
+Return: nothing
+SeeAlso: AX=1002h,AX=DE0Ch
+--------Q-15DE0E-----------------------------
+INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
+ AX = DE0Eh
+ ES:DI -> name to find (see #00551)
+ CX = length of name
+Return: BX = 0000h not found
+ 0001h found
+ DS:SI = object handle
+SeeAlso: AH=12h/BH=11h,AH=12h/BH=12h"GETNAME"
+
+(Table 00551)
+Values for special DESQview mailbox names:
+ "COM1" ... "COM4" RBcomm using COM1 ... COM4
+ "DESQview/X Help Engine"
+ "DESQview/X Network Server" Network Manager
+ "DESQview X Server0" X-Windows server
+ "DESQview X Server7" X-Windows printing service
+ "INBOX" DESQview/X LPD requests
+ "OUTBOX" DESQview/X LPD responses
+ "WAITBOX" semaphore to synchronize DESQview/X LPD communications
+ "_DVNM_" DV/X v1.10 network manager
+--------Q-15DE0F-----------------------------
+INT 15 - DESQview v2.00+ - 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
+--------Q-15DE10-----------------------------
+INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
+ AX = DE10h
+ BH = scan code
+ BL = character
+Return: nothing
+Notes: a later read will get the keystroke as if it had been typed by the user
+ multiple pushes are read last-in first-out
+ if a script exists for the pushed key in the current application, the
+ script will be executed
+ early copies of DV 2.00 destroy AX, BX, ES, and DI
+SeeAlso: INT 16/AH=05h
+--------Q-15DE11BL00-------------------------
+INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
+ AX = DE11h
+ BL = 00h viewport will not move automatically
+ nonzero viewport will move to keep cursor visible (default)
+Return: nothing
+--------Q-15DE12BX0000-----------------------
+INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
+ AX = DE12h
+ BX = 0000h select normal style (linefeed only moves down)
+ nonzero select C style (linefeed moves to start of next line)
+Return: nothing
+Note: set on a per-task basis, and inherited from the parent task
+--------Q-15DE13-----------------------------
+INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
+ AX = DE13h
+Return: BX = number of calls to BEGINC or ENTERC
+ (see INT 15/AX=101Bh,INT 15/AX=DE1Ch) without matching ENDC
+ (see INT 15/AX=101Ch)
+Note: this API call may be made from within a hardware interrupt handler
+SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
+--------Q-15DE14-----------------------------
+INT 15 - DESQview v2.20+ - 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
+SeeAlso: AX=1016h
+--------Q-15DE15-----------------------------
+INT 15 - DESQview v2.20+ - SET ERROR HANDLING
+ AX = DE15h
+ BL = error handling mode
+ 00h post system error on all error conditions
+ 01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
+ messages sent to mailboxes which fail due to lack of system
+ or common memory
+ 02h (v2.26+) same as 01h, but also return null pointer for GETMEM
+ calls which fail due to lack of system memory
+Return: nothing
+SeeAlso: AX=DE0Ch,AX=DE16h
+--------Q-15DE16-----------------------------
+INT 15 - DESQview v2.20+ - GET ERROR HANDLING
+ AX = DE16h
+Return: BL = current mode
+ 00h always post system error
+ 01h return carry flag set on failed mailbox writes
+ 02h return CF set on failed mailbox writes and NULL on failed
+ GETMEM calls
+SeeAlso: AX=DE15h
+--------Q-15DE17-----------------------------
+INT 15 - DESQview v2.20-2.25 - reserved
+ AX = DE17h
+Return: pops up "Programming error" window
+Note: AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
+SeeAlso: AX=1117h
+--------Q-15DE17-----------------------------
+INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
+ AX = DE17h
+ BX = function
+ 0000h get current mapping context without setting
+ nonzero set new mapping context to BX
+Return: BX = mapping context in effect before call
+Notes: mapping contexts determine conventional-memory addressability; setting
+ a mapping context ensures that the associated program and data areas
+ are in memory for access. Usable by drivers, TSRs and shared
+ programs.
+ caller need not be running under DESQview
+ this API call may be made from a hardware interrupt handler
+SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
+--------Q-15DE18-----------------------------
+INT 15 - DESQview v2.20+ - internal - ???
+ AX = DE18h
+ BP = function number
+ high byte must be 10h
+ low byte is function
+ 00h set ???
+ BL = ??? (00h-10h, video mode???)
+ BH = value to store
+ 03h set ???
+ BL = ??? (stored in driver)
+ 0Ah get ???
+ ES:DI -> 18-byte buffer to hold ???
+Note: calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
+--------Q-15DE19-----------------------------
+INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
+ AX = DE19h
+ BX = number of bytes to allocate
+Return: AX = 0000h successful
+ ES:DI -> allocated block
+ nonzero insufficient memory
+Note: this API call may be made from within a hardware interrupt handler
+SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
+--------Q-15DE1A-----------------------------
+INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
+ AX = DE1Ah
+ ES:DI -> previously allocated block
+Return: AX = 0000h (successful)
+Note: this function may be called from within a hardware interrupt handler
+SeeAlso: AX=DE0Dh,AX=DE19h
+--------Q-15DE1B-----------------------------
+INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
+ AX = DE1Bh
+Return: nothing
+SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
+--------Q-15DE1C-----------------------------
+INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
+ AX = DE1Ch
+Return: nothing
+Notes: similar to AX=101Bh, but begins the critical region without ensuring
+ that DOS is free
+ the official documentation states that this call should be paired with
+ "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
+ this API call may be made from within a hardware interrupt handler
+SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
+--------Q-15DE1D-----------------------------
+INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
+ AX = DE1Dh
+ DX = segment of handle for task to receive keystroke
+ BL = character
+ BH = scan code
+Return: AX = 0000h if successful
+ nonzero if receiver's keyboard buffer was full
+Notes: the key is treated as though the user had pressed it, ignoring any
+ script which may be bound to the key, and using the current field
+ table if the keyboard object is in field processing mode
+ multiple PUTKEYs are seen in the order in which they are executed
+SeeAlso: AX=DE10h
+--------Q-15DE1E-----------------------------
+INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
+ AX = DE1Eh
+Return: CL = actual number of rows on screen
+ CH = actual number of columns on screen
+ BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
+Note: this API call may be made from a hardware interrupt handler
+SeeAlso: INT 10/AH=0Fh
+--------Q-15DE1F-----------------------------
+INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
+ AX = DE1Fh
+Return: BX = segment of task handle or 0000h if no tasks are using DOS
+Note: this API call may be made from within a hardware interrupt handler
+SeeAlso: AX=DE13h,INT 21/AH=34h
+--------Q-15DE20-----------------------------
+INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
+ AX = DE20h
+ BX = segment of handle of task to interupt
+ DX:CX -> FAR interrupt routine
+ BP,SI,DI,DS,ES as required by interrupt routine
+Return: nothing
+Notes: unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
+ making the DISPATCHINT call
+ multiple "DISPATCHINT" calls are processed in the order in which they
+ were executed
+ the FAR routine is entered with the current ES, DS, SI, DI, and BP
+ values, using the task's internal stack (see AX=101Ah); only SS:SP
+ needs to be preserved
+ this API call may be made from within a hardware interrupt handler
+SeeAlso: AX=1021h,AX=DE2Ah
+--------Q-15DE21-----------------------------
+INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
+ AX = DE21h
+ BX = new state
+ 0000h turn off
+ nonzero turn on
+Return: BX = old state of virtualization
+Notes: this API call may be made from within a hardware interrupt handler
+ under DV 2.40 and 2.42, this call appears to have no effect and always
+ returns a nonzero value in BX which appears to be the offset within
+ the DV common memory segment of the caller's task object; it may
+ only have an effect within a hardware interrupt handler
+SeeAlso: AX=1117h,AX=DE17h
+--------Q-15DE22-----------------------------
+INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
+ AX = DE22h
+ DX = segment of task handle
+Return: DX = total amount of memory in paragraphs
+ BX = amount of system memory in paragraphs
+ CX = largest block of system memory available in paragraphs
+ AX = memory flags (see #00552)
+Notes: if the task handle is a child task, the returned values will be for the
+ process containing the task, rather than the task itself
+ if the process's system memory is swapped out, BX,CX,DX remain
+ unchanged, because the memory usage cannot be determined
+SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
+
+Bitfields for DESQview process memory flags:
+Bit(s) Description (Table 00552)
+ 0 system memory resides in shared memory
+ 1 process's memory is swapped out
+ 2 process's system memory is swapped out
+--------Q-15DE23-----------------------------
+INT 15 U - DESQview v2.31+ - ???
+ AX = DE23h
+ BX = ??? IRQ number on first PIC?
+ CX = ??? IRQ number on second PIC?
+Return: ???
+Note: called by QEMM 6.00+
+--------Q-15DE24-----------------------------
+INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
+ AX = DE24h
+ BX = length of .DVP data
+ CX = length of ??? string
+ DS:SI -> ??? string
+ ES:DI -> .DVP data (see #00427 at AX=102Ch)
+Return: BX = segment of task handle??? or 0000h on error
+Note: this call is similar to AX=102Ch except that it can interpret the
+ extended DVP data
+SeeAlso: AX=102Ch
+--------Q-15DE25-----------------------------
+INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
+ AX = DE25h
+ ES:DI -> 67-byte buffer for ASCIZ directory name
+Return: ES:DI buffer filled with directory from which DESQview was started
+BUG: DV 2.42 does not place a terminating NUL at the end of the directory
+ name, so if the buffer is not cleared to zeros before the call,
+ there is no way to tell where the directory name ends. This bug
+ has been fixed in DV 2.52 (DV/X 1.02)
+SeeAlso: AX=DE2Eh,INT 21/AH=47h
+--------Q-15DE26-----------------------------
+INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
+ AX = DE26h
+Return: BX = segment of handle for task with keyboard focus
+Note: under DESQview/X, the X server always has the keyboard focus unless a
+ "direct" window is active
+SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
+--------Q-15DE27-----------------------------
+INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
+ AX = DE27h
+ BX = type
+ 0000h process
+ 0001h task
+ ES:DI -> list of Instance Item Structures (see #00553)
+Return: CF clear if successful
+ AX = ???
+ BX = ???
+ CF set on error
+ AX = error code???
+ 0004h invalid BX value
+Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
+
+Format of DESQview Instance Item Structure [one element of list]:
+Offset Size Description (Table 00553)
+ 00h WORD length of data area DESQview should save and restore on context
+ switches (0000h = end of list)
+ 02h DWORD pointer to area to be saved/restored
+--------Q-15DE28-----------------------------
+INT 15 U - DESQview v2.50+ - ???
+ AX = DE28h
+ BX = segment of ??? or 0000h for default
+ ???
+Return: ???
+Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+SeeAlso: AX=DE2Ah
+--------Q-15DE29BX0000-----------------------
+INT 15 U - DESQview/X - ???
+ AX = DE29h
+ BX = 0000h
+ ???
+Return: CF clear if successful
+ ???
+ CF set on error
+Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+ under DESQview 2.60, this function and all other subfunctions of
+ AX=DE29h always return CF set, as they are unique to DESQview/X
+--------Q-15DE29BX0001-----------------------
+INT 15 U - DESQview/X - ???
+ AX = DE29h
+ BX = 0001h
+ DX = segment of window handle
+Return: CF clear if successful
+ AX = ???
+ DX = ???
+ CF set on error
+Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+--------Q-15DE29BX0002-----------------------
+INT 15 U - DESQview/X - ???
+ AX = DE29h
+ BX = 0002h
+ DX = segment of window handle
+Return: CF clear if successful
+ AX = ???
+ DX = ???
+ CF set on error
+Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+--------Q-15DE29BX0003-----------------------
+INT 15 U - DESQview/X - ???
+ AX = DE29h
+ BX = 0003h
+ DX = segment of window handle
+Return: CF clear if successful
+ ???
+ CF set on error
+Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+--------Q-15DE29BX0004-----------------------
+INT 15 U - DESQview/X - GET DISPLAY NAME
+ AX = DE29h
+ BX = 0004h
+ CX = size of buffer in bytes
+ DX = segment of window handle
+ ES:DI -> buffer for display name
+Return: CF clear if successful
+ buffer filled with ASCIZ display name (truncated if necessary) or
+ null string if no display
+ CF set on error
+Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+ the name ":0" refers to the local display
+--------Q-15DE29BX0005-----------------------
+INT 15 U - DESQview/X - ???
+ AX = DE29h
+ BX = 0005h
+ ???
+Return: CF clear if successful
+ ???
+ CF set on error
+Note: under DESQview 2.60, this function and all other subfunctions of
+ AX=DE29h always return CF set, as they are unique to DESQview/X
+--------Q-15DE2A-----------------------------
+INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
+ AX = DE2Ah
+ BX = segment of handle for task to interrupt or 0000h for caller
+ DX:CX -> interrupt routine
+ BP,SI,DI,DS,ES as required by interrupt routine
+Return: nothing
+Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+ this call is the same as AX=DE20h except that it will delay
+ interrupting the specified task until after it has exited DOS
+SeeAlso: AX=1021h,AX=DE20h
+--------Q-15DE2B-----------------------------
+INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
+ AX = DE2Bh
+ ES:DI -> starting object
+ 0000h:0000h for first object in list???
+Return: AX = status
+ 0000h successful
+ ES:DI -> next object of same type (window/non-window)
+ 0001h failed (ES:DI was not a valid handle)
+Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+ there are two separate lists, one for window/task objects and one
+ for all other objects
+SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
+--------Q-15DE2C-----------------------------
+INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
+ AX = DE2Ch
+ DX = window information format version (0100h for DESQview 2.5x)
+ BX = segment of window handle or 0000h for default
+ ES:DI -> buffer for window information (see #00554)
+Return: AX = status
+ 0000h successful
+Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
+
+Format of DESQview window information:
+Offset Size Description (Table 00554)
+ 00h BYTE task flag: 00h window, 01h task
+ 01h BYTE process number if owner task
+ 00h if non-owner task
+ 02h WORD segment of owner's handle, 0000h if orphaned
+ 04h WORD mapping context (see #00416 at AX=1016h)
+ 06h BYTE task status (see #00555)
+ 07h BYTE unused
+ 08h WORD status bits (see #00556)
+ 0Ah BYTE 01h if foreground-only window
+
+(Table 00555)
+Values for DESQview task status:
+ 00h "Waiting" waiting for input
+ 01h "Idle" keyboard poll limit reached
+ 03h same as 01h
+ 04h "Pausing" INT 15/AX=1000h pause called
+ 04h DV/X direct: user did something to allow task switch
+ 05h "ModeChg" video mode about to be changed
+ 06h "ModeNtf" notify that video mode changed
+ 07h "MoniCh" requested change to other monitor
+ 08h "StartPgm" control relinquished to start new process
+ 09h "MgrCan" made window manager CANCEL command
+ 0Ah "Slicing" time slice expired
+ 0Bh "Exit DOS" notify on DOS calls
+ 0Ch "Enter DOS" process is re-entering DOS
+ 0Dh "Terminate" INT 21/AH=4Ch or task freed
+ 0Eh "BrkNxt" Control-Break pressed
+ 0Fh "MgrCol" keyboard focus taken away
+ 10h "PgmInt" interrupted by API call from another task
+ 11h "BldOpen" call to INT 15/AX=DE01h
+
+Bitfields for DESQview task status bits:
+Bit(s) Description (Table 00556)
+ 6 task is freeing another task
+ 5 process is being created
+ 4 user suspended process
+ 3 process suspended itself
+ 2 process is resized direct window (suspended)
+ 1 process swapped out
+ 0 DESQview process
+--------Q-15DE2D-----------------------------
+INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
+ AX = DE2Dh
+ CX = direction
+ FFFFh set socket handler
+ DX:BX -> FAR function for socket interface
+ must be of the format described under INT 63"DESQview"
+ at #03515
+ other get socket handler
+ Return: DX:BX -> socket handler (see #03515)
+Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+ the "set" subfunction is normally called only by SOCKET.DVR
+SeeAlso: AX=DE2Eh,INT 63"DESQview",#03515
+--------Q-15DE2E-----------------------------
+INT 15 U - DESQview v2.50+ - SOCKET API
+ AX = DE2Eh
+ DX:BX -> socket record (see #00558)
+ 0000h:0000h to create a new socket record
+Return: CX = size of socket record in bytes
+ DX:BX -> socket record which was used
+Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
+ socket records are allocated from common memory
+ for Unix compatibility, each socket and connection on a socket is
+ allocated a DOS file handle (referencing an SFT for NUL) which is
+ used on various calls to specify which of possibly multiple
+ connections is to be operated upon
+SeeAlso: AX=DE2Dh,INT 61/AX=0001h/SF=0001h"VINES",INT 63"DESQview"
+
+(Table 00557)
+Values for DESQview/X socket API function number:
+ 0000h initialize socket???
+ 0001h "gethostname"
+ 0002h "ioctl" check for input
+ 0003h "sleep" delay for specified period
+ 0004h "htons" convert word to network (big-endian) byte order
+ 0005h "select"
+ 0006h "bsd_close"/"so_close" close socket
+ 0007h NOP
+ 0008h "connect" initiate connection on socket
+ 0009h "recv"/"recvfrom" read from socket
+ 000Ah "socket"
+ 000Bh ???
+ 000Ch "gethostbyname"
+ 000Dh "send"/"sendto" write to socket
+ 000Eh ??? (does something to all connections for process)
+ 000Fh "getpid" get process identifier
+ 0010h "gettimeofday"
+ 0011h "bind" assign name to socket
+ 0012h "listen" listen for connections on socket
+ 0013h "accept" accept connection on socket
+ 0014h connect to X server
+ 0015h "gethostbyaddr" get host information for an address
+ 0016h "getprotobyname"
+ 0017h "getprotobynumber"
+ 0018h "getservbyname"
+ 0019h "getservbyport"
+ 001Ah "getsockname" determine name bound to socket
+ 001Bh "getpeername" get name of connected peer
+ 001Ch "getsockopt"/"setsockopt"
+ 001Dh "so_exit" close all sockets for calling process
+ 001Eh "issock" determine whether file handle references socket
+ 001Fh "so_attach" reattach previously detached socket
+ 0020h "so_detach" temporarily detach socket
+ 0021h "dvpath" get DESQview directory (see also AX=DE24h)
+ 0022h "NewProc" start new application (see also AX=102Ch)
+ 0023h "so_linkup"
+ 0024h "CanonicalPath" canonicalize filename (see also INT 21/AH=60h)
+ 0025h indirect INT 15h call
+ 0026h Network Manager interface
+ 0027h "so_unlink" close connection from "so_linkup"
+ 0028h "raisepriority"
+ 0029h "lowerpriority"
+ 002Ah "so_private" ???
+ FFFFh "NetExit" (appears to be a NOP)
+
+Format of DESQview/X socket record:
+Offset Size Description (Table 00558)
+ 00h WORD signature F0ADh
+ 02h WORD function number (see #00557)
+ 04h WORD returned error code (see #00578)
+ 06h WORD maximum message size??? (usually 0400h)
+ 08h WORD PSP segment to use or 0000h if socket not valid
+ 0Ah WORD scratch space (JFT size)
+ 0Ch DWORD scratch space (JFT address)
+ 10h DWORD mailbox handle (initialized by function 0000h)
+ 14h DWORD timer object handle (initialized by function 0000h)
+---function 0000h---
+ 18h WORD (ret) ???
+---function 0001h---
+ 18h WORD (ret) status???
+ 1Ah 128 BYTEs (ret) ASCIZ hostname (empty string if not on network)
+ 9Ah WORD maximum length of hostname to return
+---function 0002h---
+ 18h WORD (ret) status
+ 1Ah WORD socket's file handle
+ 1Ch WORD IOCTL function
+ 05h "FIONREAD" determine available input
+ 06h "FIONBIO" set blocking state of socket
+ 1Eh WORD (return, subfn 05h) number of bytes available for reading
+ (call, subfn 06h) 0000h blocking, nonzero nonblocking
+---function 0003h---
+ 18h 2 BYTEs unused
+ 1Ah WORD delay time in seconds
+---function 0004h---
+ 18h WORD (ret) result in network (big-endian) byte order
+ 1Ah WORD value to convert to network byte order
+---function 0005h---
+ 18h WORD (ret) number of handles meeting the specified conditions???
+ 1Ah WORD number of file handles in each bitset
+ 1Ch DWORD bitset of socket handles to check for readability
+ 20h DWORD bitset of socket handles to check for writability
+ 24h DWORD bitset of socket handles to check for errors
+ 28h WORD timeout in ??? or 0000h to block until some socket ready
+ 2Ah DWORD ???
+ 2Eh DWORD ???
+---function 0006h---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+---function 0008h---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD 0001h if socket name specified, 0000h if not
+ 1Eh WORD length of socket name
+ 20h N BYTEs name of socket to which to connect
+---function 0009h---
+ 18h WORD (ret) number of bytes actually read, 0000h if connection
+ closed, or FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD number of bytes to read
+ 1Eh WORD flags
+ 20h WORD 0000h if no source address desired
+ 0001h if source address is to be stored (datagram sockets)
+ 22h WORD length of source address
+ 24h 110 BYTEs source address
+ 92h 1K BYTEs buffer for data to be read
+---function 000Ah---
+ 18h WORD (ret) socket's file handle or FFFFh on error
+ 1Ah WORD address family (0001h,0002h)
+ 1Ch WORD socket type
+ 1Eh WORD protocol
+---function 000Bh---
+ 18h WORD (ret) 0001h if ??? or FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Eh WORD (call) ???
+---function 000Ch---
+ 18h 128 BYTEs ASCIZ hostname (special case if empty string or "unix")
+ 98h ??? (ret) packed 'hostent' structure
+ A2h ??? (ret) ???
+---function 000Dh---
+ 18h WORD (ret) number of bytes actually written or FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD number of bytes to write
+ 1Eh WORD number of bytes to follow in subsequent writes???
+ 20h WORD flags
+ 22h WORD 0000h if no destination specified, 0001h if destination present
+ 24h WORD 0001h if broadcast message???, 0000h if not
+ (ignored if no destination specified)
+ 26h WORD length of destination address
+ 28h 110 BYTEs destination address
+ 96h 1K BYTEs buffer containing data to be written
+---function 000Eh---
+ no additional fields
+---function 000Fh---
+ 18h DWORD (ret) DESQview task handle of calling process
+---function 0010h---
+ 18h DWORD (ret) current time
+ 1Ch DWORD (ret) ???
+---function 0011h---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD length of name
+ 1Eh N BYTEs buffer for socket name
+---function 0012h---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD maximum backlog of pending connections allowed on socket
+---function 0013h---
+ 18h WORD (ret) file handle for new connection or FFFFh on error
+ 1Ah WORD listen()ing socket's file handle
+ 1Ch WORD (call) length of buffer for connecting entity's address
+ (ret) actual length of address
+ 1Eh N BYTEs buffer for connecting entity's address (110 bytes???)
+---function 0014h---
+ 18h WORD (ret) socket's file handle or FFFFh on error
+ 1Ah 4 BYTEs (ret) ???
+ 1Eh WORD (ret) ???
+ 20h WORD (ret) ???
+ 22h 256 BYTEs ASCIZ X display name
+122h ???
+---function 0015h---
+ 18h WORD (call) type of address??? (test for 0001h seen)
+ 1Ah WORD (call) length of buffer for host address
+ 1Ch 110 BYTEs buffer containing ASCIZ host address
+ 8Ah WORD (ret) offset of official host name
+ 8Ch WORD (ret) offset of alias list???
+ 8Eh WORD (ret) address type???
+ 90h WORD (ret) length of an address in bytes???
+ 92h WORD (ret) offset of address???
+ 9Ah N BYTEs (ret) buffer for hostname, alias list, and host address
+---function 0016h---
+ 18h ??? buffer for ASCIZ protocol name
+ 98h ???
+---function 0017h---
+ 18h WORD (call) protocol number
+ 1Ah WORD (ret) ??? or 0001h
+---function 0018h---
+ 18h 128 BYTEs buffer containing ASCIZ ???
+ 98h 128 BYTEs buffer containing ASCIZ ???
+118h WORD (ret) ???
+---function 0019h---
+ 18h WORD port number
+ 1Ah 128 BYTEs (call) ASCIZ host name
+ (ret) packed servent strctures???
+ 9Ah WORD (ret) ???
+---function 001Ah---
+ 18h WORD (ret) 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD (call) length of buffer for socket name
+ (ret) actual length of socket name
+ 1Eh N BYTEs buffer for socket name
+---function 001Bh---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch WORD (call) size of buffer for name
+ (ret) actual size of name
+ 1Eh N BYTEs buffer for peer's name
+---function 001Ch---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD direction: 0000h to get, 0001h to set
+ 1Ch WORD socket's file handle
+ 1Eh WORD option level
+ 20h WORD option name
+ 22h WORD (call) length of buffer for option value
+ (ret) actual length of option value
+ 24h N BYTEs buffer for option value
+---function 001Dh---
+ no additional fields
+---function 001Eh---
+ 18h WORD (ret) status: 0000h ??? or 0001h ???
+ 1Ah WORD file handle which may or may not be a socket
+---function 001Fh---
+ 18h WORD (ret) file handle or FFFFh on error
+ 1Ah DWORD (call) pointer to Socket Context Record (see #00579) of a
+ previously detached socket
+---function 0020h---
+ 18h WORD (ret) status: 0000h if successful or FFFFh on error
+ 1Ah WORD socket's file handle
+ 1Ch DWORD (ret) pointer to Socket Context Record (see #00579) for
+ the file handle
+---function 0021h---
+ 18h 64 BYTEs buffer for DESQview startup directory (see AX=DE25h)
+---function 0022h---
+ 18h DWORD (ret) task handle of new application
+ 1Ch WORD size of .DVP data
+ 1Eh 129 BYTEs ASCIZ ???
+ 9Fh N BYTEs .DVP data (see #00427 at AX=102Ch)
+---function 0023h---
+ 18h WORD (ret) ??? or FFFFh on error
+ 1Ah WORD socket's file handle???
+---function 0024h---
+ 18h WORD (ret) DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
+ 0000h if successful
+ 1Ah 129 BYTEs ASCIZ filename/pathname
+11Bh 129 BYTEs ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
+---function 0025h---
+ 18h WORD value of AX
+ 1Ah WORD value of BX
+ 1Ch WORD (call) value of CX for call if AH value other than 12h
+ (call) number of stack parameters if AH value is 12h
+ (ret) returned CX for calls other than INT 15/AH=12h
+ 1Eh WORD value of DX
+ 20h WORD value of DI
+ 22h WORD value of SI
+ 24h WORD value of DS
+ 26h WORD value of ES
+ 28h WORD (ret) value of FLAGS after call
+ 2Ah N DWORDs (call) stack parameters for INT 15/AH=12h call
+ (ret) stack results from INT 15/AH=12h call
+---function 0026h---
+ 18h WORD (call) Network Manager subfunction (see #00559)
+ (ret) status??? (0000h on error)
+ 1Ah WORD (call) size of parameter data
+ (ret) size of returned data
+ 1Ch N BYTEs (call) parameter data required by call (see #00560,#00561,#00577)
+ (ret) result data (see #00570,#00571,#00576)
+---function 0027h---
+ 18h WORD (ret) status: 0000h if successful, FFFFh on error
+ 1Ah WORD socket's file handle
+---functions 0028h,0029h---
+ 18h WORD (call) file handle for which to set priority low/high
+ FFFFh to change calling task's priority
+---function 002Ah---
+ no additional fields
+
+(Table 00559)
+Values for DESQview/X Network Manager subfunction:
+ 0004h "so_exit"???
+ 0005h "gethostbyname"
+ 0006h "gethostname"
+ 0009h "socket"
+ 000Dh "gethostbyaddr"
+ 000Fh "getprotobyname"
+ 0010h get protocol name for protocol number
+ 0011h "getservbyname"
+ 0012h "getservbyport" (see #00563)
+ 0013h "getsockname"??? (see #00564)
+ 0016h "shutdown" (see #00565)
+ 0017h kill Network Manager
+ 0018h "getpeername"??? (see #00566)
+ 0019h ??? (called by socket function 0000h) (see #00567)
+ 001Ah ??? (see #00568)
+ 001Bh "so_linkup" (see #00569)
+ 001Dh "getnetstatus" get network services (see #00570)
+ 001Fh "getpwuid"
+ 0020h "getpwnam"
+ 0021h "getpwvar"
+ 0022h "crypt"
+ 0023h "so_unlink"
+ 0024h "getlogin" (see #00571)
+ 0028h "sethostent"
+ 0029h "gethostent"
+ 002Ah "soaddhost"
+ 002Bh "soupdatehost"
+ 002Ch "sodeletehost"
+ 002Dh "setservent"
+ 002Eh "getservent"
+ 002Fh "setpwent"
+ 0030h "getpwent" (see #00572)
+ 0031h "sethostpath" (see #00573)
+ 0032h "endservent"
+ 0033h "endhostent"
+ 0034h "getnettype" get IP network number (see #00574)
+ 0035h ??? (pops up Network Manager window)
+ 0037h "getnettimeout" (see #00575)
+ 0038h get machine name and IP address (see #00576)
+ 0039h "getuid" (see #00577)
+---DV/X v2.0+ ---
+ 0041h "deletepwnam"
+ 0045h "renamepw"
+
+Format of Function 0026h/Subfunction 000Fh data:
+Offset Size Description (Table 00560)
+ 00h 8 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 0010h data:
+Offset Size Description (Table 00561)
+ 00h 2 BYTEs (ret) ???
+ 02h WORD (ret) protocol number
+ 04h WORD (call) protocol number for which to get name
+ 06h WORD (ret) ???
+ 08h var (ret) ASCIZ protocol name
+ N var (ret) ASCIZ protocol name
+
+Format of Function 0026h/Subfunction 0011h data:
+Offset Size Description (Table 00562)
+ 00h 8 BYTEs ???
+ 08h var (ret) ASCIZ protocol name
+ var (ret) ASCIZ ??? name
+ var (ret) ASCIZ ??? name
+
+Format of Function 0026h/Subfunction 0012h data:
+Offset Size Description (Table 00563)
+ 00h 8 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 0013h data:
+Offset Size Description (Table 00564)
+ 00h 116 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 0016h ("shutdown") data:
+Offset Size Description (Table 00565)
+ 00h WORD (ret) shutdown status (0000h successful, FFFFh error)
+ 02h 4 BYTEs (ret) ???
+ 04h WORD (call) socket handle
+ 06*h WORD (call) what (0 = receives, 1 = sends, 2 = both)
+
+Format of Function 0026h/Subfunction 0018h data:
+Offset Size Description (Table 00566)
+ 00h 116 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 0019h data:
+Offset Size Description (Table 00567)
+ 00h 4 BYTEs (ret) ???
+ 04h DWORD (ret) task handle of ???
+
+Format of Function 0026h/Subfunction 001Ah data:
+Offset Size Description (Table 00568)
+ 00h 38 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 001Bh data:
+Offset Size Description (Table 00569)
+ 00h 10 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 001Dh return data [array]:
+Offset Size Description (Table 00570)
+ 00h WORD ??? or FFFFh if end of array
+ 02h 7 BYTEs ???
+ 09h 27 BYTEs ASCIZ name of service
+
+Format of Function 0026h/Subfunction 0024h return data:
+Offset Size Description (Table 00571)
+ 00h var ASCIZ username
+
+Format of Function 0026h/Subfunction 0030h data:
+Offset Size Description (Table 00572)
+ 00h WORD (call) UID or 0000h for current user
+ (ret) ???
+ 02h WORD (ret) UID
+ 04h 6 BYTEs (ret) ???
+ 0Ah var (ret) ASCIZ username
+ var (ret) ASCIZ encrypted password
+ var (ret) ASCIZ initial ("home") directory
+
+Format of Function 0026h/Subfunction 0031h ("sethostpath") data:
+Offset Size Description (Table 00573)
+ 00h 4 BYTEs ???
+ 04h 144 BYTEs ASCIZ ???
+
+Format of Function 0026h/Subfunction 0034h data:
+Offset Size Description (Table 00574)
+ 00h 1-3 BYTEs IP network number of caller's machine (low byte first)
+
+Format of Function 0026h/Subfunction 0037h ("getnettimeout") return data:
+Offset Size Description (Table 00575)
+ 00h WORD (ret) timeout
+ 02h 2 BYTEs (ret) ???
+
+Format of Function 0026h/Subfunction 0038h return data:
+Offset Size Description (Table 00576)
+ 00h BYTE ???
+ 01h 4 BYTEs IP address
+ 05h var ASCIZ machine name
+ ???
+
+Format of Function 0026h/Subfunction 0039h ("getuid") return data:
+Offset Size Description (Table 00577)
+ 00h WORD user ID
+ 02h 2 BYTEs ???
+SeeAlso: #00573,#00576
+
+(Table 00578)
+Values for DESQview/X socket error code:
+ 0000h successful
+ 0009h "BADF" bad file handle
+ 000Ch "ENOMEM" out of memory
+ 000Eh "EFAULT" bad address
+ 0016h "EINVAL" invalid argument
+ 0018h "EMFILE" too many open files
+ 0020h "EPIPE" ??? broken pipe
+ 0023h "EWOULDBLOCK" operation cannot be completed at this time
+ 0024h "EINPROGRESS" operation now in progress
+ 0026h "ENOTSOCK" socket invalid
+ 0028h "EMSGSIZE" message too long to send atomically
+ 002Ch "ESOCKTNOSUPPORT" socket type not supported
+ 002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
+ 0031h "EDOM" argument too large
+ 0038h "EISCONN" socket is already connected
+ 0039h "ENOTCONN" socket is not connected
+
+Format of DESQview/X Socket Context Record:
+Offset Size Description (Table 00579)
+ 00h DWORD pointer to next Socket Context Record, 0000h:0000h if last
+ 04h WORD SFT index for socket, 00FFh if not connected, FFFFh if detached
+ 06h WORD PSP segment of owner or 0000h
+ 08h WORD mapping context of owning window (see #00416 at AX=1016h)
+ 0Ah 2 BYTEs ???
+ 0Ch WORD address family
+ 0Eh WORD socket type
+ 10h WORD protocol
+ 12h WORD socket state
+ 0001h created
+ 0002h bound
+ 0003h listening???
+ 0005h connected
+ 14h DWORD timer object handle
+ 18h DWORD object handle (mailbox???)
+ 1Ch DWORD object handle of parent of above object or 0000h:0000h
+ 20h DWORD pointer to ??? or 0000h
+ 24h 6 BYTEs ???
+ 2Ah WORD file handle for socket or FFFFh
+ 2Ch 2 BYTEs ???
+ 2Eh WORD nonzero if socket nonblocking
+---network connections only---
+ 30h 2 BYTEs ???
+ 32h WORD ???
+ 34h 4 BYTEs (big-endian) IP address of remote
+ 38h 6 BYTEs ???
+--------Q-15DE2F-----------------------------
+INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
+ AX = DE2Fh
+Return: BX = status
+ 0001h keyboard focus has been given to a direct window since the
+ last call
+ 0000h if not
+Notes: DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
+ Quarterdeck stated that this call would not be available under future
+ versions of DESQview Classic, but it is still present in v2.60
+--------Q-15DE30-----------------------------
+INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
+ AX = DE30h
+Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
+Notes: DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
+ you must first check the DESQview version to verify that it is 2.50 or
+ greater
+SeeAlso: INT 21/AH=2Bh/CX=4445h
+--------Q-15DE31-----------------------------
+INT 15 - DESQview/X v1.10 - ???
+ AX = DE31h
+ CX = ???
+ 0000h ???
+ nonzero ???
+ ???
+Return: ???
+--------b-15DF-------------------------------
+INT 15 - Juko UNIQUE UX BIOS - TURBO MODE CONTROL
+ AH = DFh
+ AL = function
+ 00h turn on Turbo mode
+ 01h turn off Turbo mode
+ 02h set Turbo mode according to hardware switch
+SeeAlso: INT 13/AX=FFFFh
+--------b-15E00F-----------------------------
+INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
+ AX = E00Fh
+ ES:BX -> start of 2nd processor's execution
+Return: AL = status
+ 0Fh successful
+ 00h failure
+SeeAlso: AX=E10Eh,AX=E200h
+--------b-15E10E-----------------------------
+INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
+ AX = E10Eh
+ ES:BX -> start of 2nd processor's execution
+Return: AL = status
+ 0Fh successful (halted)
+ 00h failure (not halted)
+SeeAlso: AX=E00Fh,AX=E200h
+--------b-15E200-----------------------------
+INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
+ AX = E200h
+Return: AX bit 15 set if 2nd processor available
+SeeAlso: AX=E00Fh,AX=E10Eh
+--------b-15E4-------------------------------
+INT 15 - Tandy??? - ???
+ AH = E4h
+ AL = subfunction
+ 21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
+ DL = ???
+Return: DL = 00h if successful???
+Note: the section of code in 386MAX which calls these functions also checks
+ whether the ROM BIOS has both Tandy and Phoenix Technologies
+ signatures if these calls fail; the Tandy 1000SL/TL BIOS does not
+ support this function, however, returning the usual CF set/AH=86h for
+ "unsupported function".
+--------b-15E4-------------------------------
+INT 15 - Compaq ROM BIOS 1993/08/03 and newer - ???
+ AH = E4h
+ AL = subfunction
+ 00h get advanced system info
+ Return: CF clear
+ AH = 00h
+ CX = 0000h
+ BX = advanced system info flags (read from [XBDA:0094h])
+ bit 4: "mode 2" (dual harddisk controller) enabled
+ 01h,02h unsupported by this ROM version
+ Return: CF set, AH = 86h
+ 80h set advanced system info
+ BX = advanced system info flags
+ bit 4: enable "mode 2" (dual harddisk controller)
+ ???
+ Return: ???
+ Note: On Compaq machines with "COMPAQ" signature at
+ F000h:FFEAh (see also MEM F000h:FFE0h), MS-DOS/PC DOS
+ IO.SYS/IBMBIO.COM use this function to set bit 4
+ before calling INT 13h/AH=08h to retrieve the number
+ of hard disks installed (DL).
+ 90h,A0h,B0h,C0h,D0h,E0h,F0h set ???
+ Return: CF clear
+ AH = 00h
+ CX = 0000h
+ BX = ???
+ 81h,91h,A1h,B1h,C1h,D1h,E1h,F1h unsupported by 3/8/93&4/8/93 ROMs
+ Return: CF set, AH = 86h
+Notes: functions 80h/90h/etc. are not supported by the 4/8/93 EISA System ROM
+ these functions are not supported by the 7/26/93 LTE Lite 386 ROM
+--------!---Section--------------------------
diff --git a/floppy/doc/INTERRUP.D b/floppy/doc/INTERRUP.D
new file mode 100644
index 0000000..0520299
--- /dev/null
+++ b/floppy/doc/INTERRUP.D
@@ -0,0 +1,7948 @@
+Interrupt List, part 4 of 18
+Copyright (c) 1989-1999,2000 Ralf Brown
+--------b-15E800-----------------------------
+INT 15 - Compaq Contura - GET ???
+ AX = E800h
+Return: AX = 0000h
+ BH = 00h
+ BL = ??? (read from port 0C7Ch)
+ CH = ???
+ CL = ???
+ DX = 0000h
+Note: also supported by 3/8/93 DESKPRO/i and 7/26/93 LTE Lite 386 ROM BIOS
+--------b-15E800-----------------------------
+INT 15 - Compaq Contura Aero, Contura 400 - GET SYSTEM MODEL CODE???
+ AX = E800h
+ BX = ??? (0000h)
+Return: CF clear if successful
+ BH = 02h
+ BL = submodel??? (0Ch,0Dh,34h,38h,40h,44h,48h,64h,68h)
+ CF set on error
+ others???
+Notes: used by Compaq's SOFTPAQ number 0937 EPPBIOS.SYS to determine whether
+ the Enhanced Parallel Port expected by that driver is available
+ used by Compaq's SOFTPAW number 0856 VOLCTRL.EXE to determine whether
+ volume control hardware expected by that driver is available
+--------b-15E800-----------------------------
+INT 15 - Compaq Prolinea - GET ???
+ AX = E800h
+ BX = ??? (1369h)
+Return: BH = 01h
+ BL = ???
+ others???
+Note: used by Compaq's SOFTPAQ number 0718 INT10_04.SYS to determine whether
+ the fix that driver applies is required (will not install if BX on
+ return is other than 010Eh or 010Fh)
+SeeAlso: AX=E802h
+--------b-15E801-----------------------------
+INT 15 - Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS
+ AX = E801h
+Return: CF clear if successful
+ AX = extended memory between 1M and 16M, in K (max 3C00h = 15MB)
+ BX = extended memory above 16M, in 64K blocks
+ CX = configured memory 1M to 16M, in K
+ DX = configured memory above 16M, in 64K blocks
+ CF set on error
+Notes: supported by the A03 level (6/14/94) and later XPS P90 BIOSes, as well
+ as the Compaq Contura, 3/8/93 DESKPRO/i, and 7/26/93 LTE Lite 386 ROM
+ BIOS
+ supported by AMI BIOSes dated 8/23/94 or later
+ on some systems, the BIOS returns AX=BX=0000h; in this case, use CX
+ and DX instead of AX and BX
+ this interface is used by Windows NT 3.1, OS/2 v2.11/2.20, and is
+ used as a fall-back by newer versions if AX=E820h is not supported
+ this function is not used by MS-DOS 6.0 HIMEM.SYS when an EISA machine
+ (for example with parameter /EISA) (see also MEM F000h:FFD9h), or no
+ Compaq machine was detected, or parameter /NOABOVE16 was given.
+SeeAlso: AH=8Ah"Phoenix",AX=E802h,AX=E820h,AX=E881h"Phoenix"
+--------b-15E802-----------------------------
+INT 15 - Compaq Contura - GET ???
+ AX = E802h
+Return: CF clear
+ AX = 0000h
+ BX = ???
+ CX = 0000h
+Note: this function is also supported by the LTE Lite 25c, 25E, and 486; not
+ supported by LTE Lite 20 and 25.
+SeeAlso: AX=E801h"Phoenix"
+--------b-15E820-----------------------------
+INT 15 - newer BIOSes - GET SYSTEM MEMORY MAP
+ AX = E820h
+ EAX = 0000E820h
+ EDX = 534D4150h ('SMAP')
+ EBX = continuation value or 00000000h to start at beginning of map
+ ECX = size of buffer for result, in bytes (should be >= 20 bytes)
+ ES:DI -> buffer for result (see #00581)
+Return: CF clear if successful
+ EAX = 534D4150h ('SMAP')
+ ES:DI buffer filled
+ EBX = next offset from which to copy or 00000000h if all done
+ ECX = actual length returned in bytes
+ CF set on error
+ AH = error code (86h) (see #00496 at INT 15/AH=80h)
+Notes: originally introduced with the Phoenix BIOS v4.0, this function is
+ now supported by most newer BIOSes, since various versions of Windows
+ call it to find out about the system memory
+ a maximum of 20 bytes will be transferred at one time, even if ECX is
+ higher; some BIOSes (e.g. Award Modular BIOS v4.50PG) ignore the
+ value of ECX on entry, and always copy 20 bytes
+ some BIOSes expect the high word of EAX to be clear on entry, i.e.
+ EAX=0000E820h
+ if this function is not supported, an application should fall back
+ to AX=E802h, AX=E801h, and then AH=88h
+ the BIOS is permitted to return a nonzero continuation value in EBX
+ and indicate that the end of the list has already been reached by
+ returning with CF set on the next iteration
+ this function will return base memory and ISA/PCI memory contiguous
+ with base memory as normal memory ranges; it will indicate
+ chipset-defined address holes which are not in use and motherboard
+ memory-mapped devices, and all occurrences of the system BIOS as
+ reserved; standard PC address ranges will not be reported
+SeeAlso: AH=C7h,AX=E801h"Phoenix",AX=E881h,MEM xxxxh:xxx0h"ACPI"
+
+Format of Phoenix BIOS system memory map address range descriptor:
+Offset Size Description (Table 00580)
+ 00h QWORD base address
+ 08h QWORD length in bytes
+ 10h DWORD type of address range (see #00581)
+
+(Table 00581)
+Values for System Memory Map address type:
+ 01h memory, available to OS
+ 02h reserved, not available (e.g. system ROM, memory-mapped device)
+ 03h ACPI Reclaim Memory (usable by OS after reading ACPI tables)
+ 04h ACPI NVS Memory (OS is required to save this memory between NVS
+ sessions)
+ other not defined yet -- treat as Reserved
+SeeAlso: #00580
+--------b-15E881-----------------------------
+INT 15 - Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS (32-bit)
+ AX = E881h
+Return: CF clear if successful
+ EAX = extended memory between 1M and 16M, in K (max 3C00h = 15MB)
+ EBX = extended memory above 16M, in 64K blocks
+ ECX = configured memory 1M to 16M, in K
+ EDX = configured memory above 16M, in 64K blocks
+ CF set on error
+Notes: supported by AMI BIOSes dated 8/23/94 or later
+ this interface is used by Windows NT 3.1, OS/2 v2.11/2.20, and is
+ used as a fall-back by newer versions if AX=E820h is not supported
+SeeAlso: AX=E801h"Phoenix",AX=E820h"Phoenix"
+----------15E900-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - RESET WATCHDOG TIMER
+ AX = E900h
+Return: nothing
+----------15E901-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - WRITE DIAGNOSTIC CONTROL POINT CODE
+ AX = E901h
+ CX = control point code (codes 000h-1FFh system backup)
+Return: nothing
+Note: Provided by PhysTechSoft's PTS ROM-DOS and displayed by SETUP.COM.
+SeeAlso: AX=E902h,INT 14/AH=05h"PTS ROM-DOS",INT 14/AH=06h"PTS ROM-DOS"
+
+(Table 04093)
+Values for PhysTechSoft PTS ROM-DOS control point code:
+ ??? LOADER: Stack loaded
+ LOADER: IVT initialized
+ LOADER: Channel initialized
+ LOADER: Local loading
+ LOADER: Flash tested
+ LOADER: Load from ROM
+ LOADER: Load ROM comp.
+ LOADER: Load from Flash
+ LOADER: Load Flash co.
+ BIOS: Chipset initialized
+ BIOS: CPU tested
+ BIOS: Stack tested
+ BIOS: CRC tested
+ BIOS: IVT initialized
+ BIOS: Vars initialized
+ BIOS: Resident init
+ BIOS: Channel initialized
+ BIOS: Memory tested
+ BIOS: SRAM tested
+ BIOS: EMS tested
+ BIOS: PIC initialized
+ BIOS: PPI initialized
+ BIOS: DMA initialized
+ BIOS: Timer initialized
+ BIOS: Disks initialized
+ BIOS: Boot loaded
+ BIOS: Failed boot
+ DOS: Job point: (up to 25???)
+SeeAlso: #04091
+----------15E902-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - SET DIAGNOSTIC DOS ERROR FLAG
+ AX = E902h
+ CX = diagnostic flag mask (see #04091,#04092)
+Return: nothing
+Note: Provided by PhysTechSoft's PTS ROM-DOS and displayed by SETUP.COM.
+ DOS error flags can be assigned by application software.
+SeeAlso: AX=E901h,INT 14/AH=05h"PTS ROM-DOS", INT 14/AH=06h"PTS ROM-DOS"
+
+Bitfields for PhysTechSoft PTS ROM-DOS BIOS error flags:
+Bit(s) Description (Table 04091)
+ ??? Processor test failed.
+ Stack test failed.
+ BIOS code damaged.
+ Conventional memory test failed.
+ SRAM test failed.
+ EMS test failed.
+ Boot-sector damaged.
+ Boot-sector read error.
+ Loader setup damaged.
+ BIOS setup damaged.
+SeeAlso: #04092,#04093
+
+Bitfields for PhysTechSoft PTS ROM-DOS LOADER error flags::
+Bit(s) Description (Table 04092)
+ ??? Processor test failed.
+ Loader code damaged.
+ Loader code in RAM damaged.
+ Loader setup in flash-memory damaged.
+ BIOS setup in flash-memory damaged.
+ BIOS offset in flash-memory field damaged.
+ BIOS size in flash-memory field damaged.
+ BIOS in flash-memory damaged.
+ BIOS in ROM damaged.
+ Last operation field damaged.
+ Channel error.
+ Setup in flash-memory damaged.
+ Loading BIOS from control channel failed.
+ Loading DOS from control channel failed.
+SeeAlso: #04091
+----------15E903-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - WRITE-ENABLE FLASH-DISK
+ AX = E903h
+Return: nothing
+Note: Enabling writing on Flash disk can lead to corruption of EMS disk info.
+SeeAlso: AX=E904h,AX=E905h
+----------15E904-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - WRITE-PROTECT FLASH-DISK
+ AX = E904h
+Return: nothing
+SeeAlso: AX=E903h,AX=E905h
+----------15E905-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - WRITE IMAGE OF BIOS TO FLASH-MEMORY
+ AX = E905h
+ DS:SI -> buffer
+Return: nothing
+SeeAlso: AX=E903h,INT 14/AH=05h"PTS ROM-DOS",INT 14/AH=06h"PTS ROM-DOS"
+----------15E906-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - READ SETUP INFORMATION FROM FLASH-DISK
+ AX = E906h
+ DS:SI -> buffer
+Return: AL = error code (00h = no error, 01h = setup information not found)
+SeeAlso: AX=E907h,INT 14/AH=05h"PTS ROM-DOS",INT 14/AH=06h"PTS ROM-DOS"
+----------15E907-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - WRITE SETUP INFORMATION ON FLASH-DISK
+ AX = E907h
+ DS:SI -> buffer
+Return: nothing
+SeeAlso: AX=E906h
+----------15E908-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - SET BREAKPOINT
+ AX = E908h
+ CL = flags
+ bit 1: =0 operate in one-fold mode
+ =1 operate in many-fold mode
+ bit 0: =0 send debug information to control channel
+ =1 activate handler
+ ES:SI = breakpoint address
+ DX:DI = handler address
+Return: AH = error code
+ 00h no error
+ 01h incorrect parameter
+ 02h no room in breakpoint table
+SeeAlso: AX=E909h,INT 14/AH=05h"PTS ROM-DOS",INT 14/AH=06h"PTS ROM-DOS"
+----------15E909-----------------------------
+INT 15 - PhysTechSoft PTS ROM-DOS - REMOVE BREAKPOINT
+ AX = E909h
+ ES:SI = breakpoint address
+Return: AH = error code
+ 00h no error
+ 01h incorrect parameter
+SeeAlso: AX=E908h,INT 14/AH=05h"PTS ROM-DOS",INT 14/AH=06h"PTS ROM-DOS"
+--------m-15F200CX454D-----------------------
+INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALIZATION CHECK ???
+ AX = F200h
+ CX = 454Dh
+Return: CF clear if hardware already initialised
+ BX = upper RAM areas in use
+ bit 0: C000-C3FF
+ bit 1: C400-C7FF
+ ...
+ bit 11: EC00-EFFF
+ CF set if hardware not initialised yet
+--------B-1600-------------------------------
+INT 16 - KEYBOARD - GET KEYSTROKE
+ AH = 00h
+Return: AH = BIOS scan code
+ AL = ASCII character
+Notes: on extended keyboards, this function discards any extended keystrokes,
+ returning only when a non-extended keystroke is available
+ the BIOS scan code is usually, but not always, the same as the hardware
+ scan code processed by INT 09. It is the same for ASCII keystrokes
+ and most unshifted special keys (F-keys, arrow keys, etc.), but
+ differs for shifted special keys
+ some (older) clone BIOSes do not discard extended keystrokes and manage
+ function AH=00h and AH=10h the same
+ the K3PLUS v6.00+ INT 16 BIOS replacement doesn't discard extended
+ keystrokes (same as with functions 10h and 20h), but will always
+ translate prefix E0h to 00h. This allows old programs to use extended
+ keystrokes and should not cause compatibility problems
+SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,AX=AF4Dh"K3PLUS",INT 18/AH=00h
+SeeAlso: INT 09,INT 15/AH=4Fh
+--------B-1601-------------------------------
+INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
+ AH = 01h
+Return: ZF set if no keystroke available
+ ZF clear if keystroke available
+ AH = BIOS scan code
+ AL = ASCII character
+Note: if a keystroke is present, it is not removed from the keyboard buffer;
+ however, any extended keystrokes which are not compatible with 83/84-
+ key keyboards are removed by IBM and most fully-compatible BIOSes in
+ the process of checking whether a non-extended keystroke is available
+ some (older) clone BIOSes do not discard extended keystrokes and manage
+ function AH=00h and AH=10h the same
+ the K3PLUS v6.00+ INT 16 BIOS replacement doesn't discard extended
+ keystrokes (same as with functions 10h and 20h), but will always
+ translate prefix E0h to 00h. This allows old programs to use extended
+ keystrokes and should not cause compatibility problems
+SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h,INT 09,INT 15/AH=4Fh
+--------B-1602-------------------------------
+INT 16 - KEYBOARD - GET SHIFT FLAGS
+ AH = 02h
+Return: AL = shift flags (see #00582)
+ AH destroyed by many BIOSes
+SeeAlso: AH=12h,AH=22h,INT 17/AH=0Dh,INT 18/AH=02h,MEM 0040h:0017h
+
+Bitfields for keyboard shift flags:
+Bit(s) Description (Table 00582)
+ 7 Insert active
+ 6 CapsLock active
+ 5 NumLock active
+ 4 ScrollLock active
+ 3 Alt key pressed (either Alt on 101/102-key keyboards)
+ 2 Ctrl key pressed (either Ctrl on 101/102-key keyboards)
+ 1 left shift key pressed
+ 0 right shift key pressed
+SeeAlso: #00587,#03743,MEM 0040h:0017h,#M0010
+--------B-1603-------------------------------
+INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
+ AH = 03h
+ AL = subfunction
+ 00h set default delay and rate (PCjr and some PS/2)
+ 01h increase delay before repeat (PCjr)
+ 02h decrease repeat rate by factor of 2 (PCjr)
+ 03h increase delay and decrease repeat rate (PCjr)
+ 04h turn off typematic repeat (PCjr and some PS/2)
+ 05h set repeat rate and delay (AT,PS)
+ BH = delay value (00h = 250ms to 03h = 1000ms)
+ BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
+ 06h get current typematic rate and delay (newer PS/2s)
+ Return: BL = repeat rate (above)
+ BH = delay (above)
+Return: AH destroyed by many BIOSes
+Note: use INT 16/AH=09h to determine whether some of the subfunctions are
+ supported
+SeeAlso: INT 16/AH=09h,AH=29h"HUNTER",AH=2Ah"HUNTER"
+--------B-1604-------------------------------
+INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
+ AH = 04h
+ AL = keyclick state
+ 00h off
+ 01h on
+Return: AH destroyed by many BIOSes
+SeeAlso: AH=03h,AH=04h"K3PLUS"
+--------b-1604-------------------------------
+INT 16 - Tandy 2000 - KEYBOARD - FLUSH KEYBOARD BUFFER
+ AH = 04h
+Note: this interrupt is identical to INT 51 on the Tandy 2000
+SeeAlso: INT 16/AH=00h,INT 16/AH=02h,INT 16/AH=05h"Tandy 2000"
+SeeAlso: INT 51"Tandy 2000"
+--------K-1604-------------------------------
+INT 16 - K3PLUS v6.22+ - SET KEYCLICK
+ AH = 04h
+ AL = keyclick state
+ 00h keyclick off, leave loudness setting unchanged
+ 01h keyclick on, leave loudness setting unchanged
+ else
+ bit 0: keyclick enabled if set
+ bits 7-1: new keyclick loudness (non-zero)
+Return: AH destroyed by many BIOSes
+Note: Applications which try to set a new loudness, but are unsure of the
+ results of other INT 16/AH=04h implementations, should set the new
+ loudness first, and then call this function again with AL=01h or
+ AL=00h
+SeeAlso: AH=03h,AH=04h"KEYBOARD",AX=AF4Dh
+--------B-1605-------------------------------
+INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
+ AH = 05h
+ CH = BIOS scan code
+ CL = ASCII character
+Return: AL = status
+ 00h if successful
+ 01h if keyboard buffer full
+ AH destroyed by many BIOSes
+Notes: under DESQview, a number of "keystrokes" invoke specific
+ DESQview-related actions when they are read from the keyboard
+ buffer (see #00583)
+ similarly, some "keystrokes" invoke special functions on the HP 100LX
+ and HP 200LX (see #00584)
+SeeAlso: AH=00h,AH=25h"K3",AH=71h,AX=AF4Dh,AH=FFh,INT 15/AX=DE10h
+SeeAlso: MEM 0040h:001Eh
+
+(Table 00583)
+Values for pseudo-keystrokes for DESQview:
+ 38FBh or FB00h switch to next window (only if main menu already popped up)
+ 38FCh or FC00h pop up DESQview main menu
+ 38FEh or FE00h close the current window
+ 38FFh or FF00h pop up DESQview learn menu
+
+(Table 00584)
+Values for pseudo-keystrokes for HP 100LX/200LX:
+ EE00h pop up topcard display and set other system manager applications
+ into sleep mode
+--------B-1605-------------------------------
+INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
+ AH = 05h
+ AL = function
+ 01h set keyboard layout to French
+ 02h set keyboard layout to German
+ 03h set keyboard layout to Italian
+ 04h set keyboard layout to Spanish
+ 05h set keyboard layout to UK
+ 80h check if function supported
+ Return: AL <> 80h if supported
+Return: ???
+ AH destroyed by many BIOSes
+Note: this function is called by the DOS 3.2 KEYBxx.COM
+SeeAlso: AH=92h,AH=A2h,AX=AF4Dh
+--------b-1605-------------------------------
+INT 16 - Tandy 2000 - KEYBOARD - RESET KEYBOARD
+ AH = 05h
+Desc: reset the keyboard and flush the keyboard buffer
+Note: this interrupt is identical to INT 51 on the Tandy 2000
+SeeAlso: INT 16/AH=00h,INT 16/AH=02h,INT 16/AH=03h,INT 51"Tandy 2000"
+----------160600-----------------------------
+INT 16 - AAKEYS - GET NEXT KEYBOARD EVENT
+ AX = 0600h
+Return: CF clear if successful
+ AL = next keyboard event in event buffer, FFh if buffer overflowed
+ CF set on error
+ AL = 00h buffer empty
+ BX destroyed
+Program: AAKEYS is a TSR by Anthony Appleyard which records keyboard scan
+ codes in a 256-byte buffer in addition to any normal processing which
+ takes place
+Note: the installation check consists of calling INT 16/AX=06xxh (where 'xx'
+ is any subfunction other than those listed here) and testing whether
+ AX=BEEFh on return
+SeeAlso: AX=0601h,AX=0602h,AX=0603h,AX=0604h
+----------160601-----------------------------
+INT 16 - AAKEYS - EMPTY KEY-EVENT BUFFER
+ AX = 0601h
+Return: nothing
+SeeAlso: AX=0600h,AX=0602h,AX=0603h,AX=0604h
+----------160602-----------------------------
+INT 16 - AAKEYS - DISABLE AAKEYS
+ AX = 0602h
+Return: AX,DX destroyed
+Desc: restores INT 09 and INT 16 and clears the TSRs signature byte
+SeeAlso: AX=0600h,AX=0601h,AX=0603h,AX=0604h
+----------160603-----------------------------
+INT 16 - AAKEYS - GET KEY-EVENT BUFFER
+ AX = 0603h
+Return: ES:BX -> 256-byte circular key-event buffer
+ ES:[AX] = offset of head of buffer
+ ES:[AX+1] = offset of tail of buffer
+SeeAlso: AX=0600h,AX=0601h,AX=0602h,AX=0604h
+----------160604-----------------------------
+INT 16 - AAKEYS - EMPTY BIOS KEYBOARD BUFFER
+ AX = 0604h
+Return: AX destroyed
+SeeAlso: AX=0600h,AX=0601h,AX=0602h,AX=0603h
+--------B-1609-------------------------------
+INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
+ AH = 09h
+Return: AL = supported keyboard functions (see #00585)
+ AH destroyed by many BIOSes
+Note: this function is only available if bit 6 of the second feature byte
+ returned by INT 15/AH=C0h is set (see #00509)
+SeeAlso: AH=03h,AH=0Ah,AH=10h,AH=11h,AH=12h,AH=20h,AH=21h,AH=22h,INT 15/AH=C0h
+
+Bitfields for supported keyboard functions:
+Bit(s) Description (Table 00585)
+ 7 reserved
+ 6 INT 16/AH=20h-22h supported (122-key keyboard support)
+ 5 INT 16/AH=10h-12h supported (enhanced keyboard support)
+ 4 INT 16/AH=0Ah supported
+ 3 INT 16/AX=0306h supported
+ 2 INT 16/AX=0305h supported
+ 1 INT 16/AX=0304h supported
+ 0 INT 16/AX=0300h supported
+SeeAlso: #00511
+--------K-160A-------------------------------
+INT 16 - KEYBOARD - GET KEYBOARD ID
+ AH = 0Ah
+Return: BX = keyboard ID (see #00586)
+ AH destroyed by many BIOSes
+Notes: check return value from AH=09h to determine whether this function is
+ supported
+ this function is also supported by the K3PLUS v6.00+ INT 16 BIOS
+ replacement
+SeeAlso: AH=09h,AX=AF4Dh,MEM 0040h:00C2h"AMI"
+
+(Table 00586)
+Values for keyboard ID:
+ 0000h no keyboard attached
+ 41ABh Japanese "G" keyboard (translate mode)
+ MF2 Keyboard (usually in translate mode)
+ 54ABh Japanese "P" keyboard (translate mode)
+ 83ABh Japanese "G" keyboard (pass-through mode)
+ MF2 Keyboard (pass-through mode)
+ 84ABh Japanese "P" keyboard (pass-through mode)
+ 86ABh 122-key keyboard
+ 90ABh old Japanese "G" keyboard
+ 91ABh old Japanese "P" keyboard
+ 92ABh old Japanese "A" keyboard
+--------B-1610-------------------------------
+INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
+ AH = 10h
+Return: AH = BIOS scan code
+ AL = ASCII character
+Notes: if no keystroke is available, this function waits until one is placed
+ in the keyboard buffer
+ the BIOS scan code is usually, but not always, the same as the hardware
+ scan code processed by INT 09. It is the same for ASCII keystrokes
+ and most unshifted special keys (F-keys, arrow keys, etc.), but
+ differs for shifted special keys.
+ unlike AH=00h, this function does not discard extended keystrokes
+ INT 16/AH=09h can be used to determine whether this function is
+ supported, but only on later model PS/2s
+SeeAlso: AH=00h,AH=09h,AH=11h,AH=20h,MEM 0040h:0019h,MEM 0040h:001Eh
+--------B-1611-------------------------------
+INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
+ AH = 11h
+Return: ZF set if no keystroke available
+ ZF clear if keystroke available
+ AH = BIOS scan code
+ AL = ASCII character
+Notes: if a keystroke is available, it is not removed from the keyboard buffer
+ unlike AH=01h, this function does not discard extended keystrokes
+ some versions of the IBM BIOS Technical Reference erroneously report
+ that CF is returned instead of ZF
+ INT 16/AH=09h can be used to determine whether this function is
+ supported, but only on later model PS/2s
+SeeAlso: AH=01h,AH=09h,AH=10h,AH=21h,INT 09,INT 15/AH=4Fh
+--------B-1612-------------------------------
+INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
+ AH = 12h
+Return: AL = shift flags 1 (same as returned by AH=02h) (see #00587)
+ AH = shift flags 2 (see #00588)
+Notes: AL bit 3 set only for left Alt key on many machines
+ AH bits 7 through 4 always clear on a Compaq SLT/286
+ INT 16/AH=09h can be used to determine whether this function is
+ supported, but only on later model PS/2s
+ many BIOSes (including at least some versions of Phoenix and AMI) will
+ destroy AH on return from functions higher than AH=12h, returning
+ 12h less than was in AH on entry (due to a chain of DEC/JZ
+ instructions)
+SeeAlso: AH=02h,AH=09h,AH=22h,AH=51h,INT 17/AH=0Dh,MEM 0040h:0017h
+
+Bitfields for keyboard shift flags 1:
+Bit(s) Description (Table 00587)
+ 7 Insert active
+ 6 CapsLock active
+ 5 NumLock active
+ 4 ScrollLock active
+ 3 Alt key pressed (either Alt on 101/102-key keyboards)
+ 2 Ctrl key pressed (either Ctrl on 101/102-key keyboards)
+ 1 left shift key pressed
+ 0 right shift key pressed
+SeeAlso: #00582,#00588,MEM 0040h:0017h,#M0010
+
+Bitfields for keyboard shift flags 2:
+Bit(s) Description (Table 00588)
+ 7 SysReq key pressed (SysReq is often labeled SysRq)
+ 6 CapsLock pressed
+ 5 NumLock pressed
+ 4 ScrollLock pressed
+ 3 right Alt key pressed
+ 2 right Ctrl key pressed
+ 1 left Alt key pressed
+ 0 left Ctrl key pressed
+SeeAlso: #00587,MEM 0040h:0018h,#M0011
+--------J-1613-------------------------------
+INT 16 - DOS/V - DOUBLE-BYTE CHARACTER SET SHIFT CONTROL
+ AH = 13h
+ AL = function
+ 00h set shift status
+ DX = shift status (see #00589), must preserve internal status
+ bits
+ 01h get shift status
+ Return: DX = current shift status (see #00589)
+Note: these functions are supplied by the Japanese Front-End Processor
+SeeAlso: AH=14h,INT 21/AX=6301h
+
+Bitfields for DOS/V shift status:
+Bit(s) Description (Table 00589)
+ 0 full-size rather than half-size
+ 2-1 character input mode
+ 00 alphanumeric, 01 Katakana, 10 Hiragana, 11 unused
+ 5-3 internal status
+ 6 Romaji enabled
+ 7 Katakana to Kanji conversion enabled
+ 15-8 internal status
+--------J-1614-------------------------------
+INT 16 - DOS/V - SHIFT STATUS DISPLAY CONTROL
+ AH = 14h
+ AL = function
+ 00h enable display
+ 01h disable display
+ 02h get display state
+ Return: AL = current state (00h enabled, 01h disabled)
+Desc: control the screen-bottom shift status row(s) for the Japanese
+ Front-End Processor
+SeeAlso: AH=13h,INT 10/AH=19h,INT 10/AH=1Dh
+--------B-1620-------------------------------
+INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE (122-key kbd support only)
+ AH = 20h
+Return: AH = BIOS scan code (see AH=10h)
+ AL = ASCII character
+Note: use AH=09h to determine whether this function is supported
+SeeAlso: AH=00h,AH=09h,AH=10h,AH=21h,AH=22h
+--------b-1620------------------------------------
+INT 16 - HUNTER 16 - SET TEMPORARY SHIFT
+ AH = 20h
+ AL = shift status (see #00590)
+Notes: the Husky Hunter 16 is an 8088-based ruggedized laptop. Other family
+ members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
+ the user can override the specified settings by pressing the keys
+
+Bitfields for HUNTER 16 shift status:
+Bit(s) Description (Table 00590)
+ 4 Scroll Lock on
+ 5 Num Lock on
+ 6 Caps Lock on
+--------K-1620-------------------------------
+INT 16 O - K3 v1.5x, K3PLUS v5.xx - GET EXTENDED BUFFER STATE
+ AH = 20h
+Return: AX = K3 version
+ ES:BX -> extended keyboard buffer start
+ ES:DX -> extended keyboard buffer end
+ ES:SI -> next keystroke
+ ES:DI -> last keystroke in buffer
+ CX = number of keystrokes in buffer
+Program: K3PLUS is an extended keyboard driver by Matthias Paul and Axel C.
+ Frinke, originally based on the K3 extended German keyboard driver
+ by Martin Gerdes published in c't magazine in 1988
+Note: this function was normally unsupported under K3PLUS v6.00-v6.22 and
+ is no longer supported by v6.30+; use AX=AF20h instead
+SeeAlso: AH=25h"K3",AX=AF20h,INT 2F/AX=D44Fh/BX=0000h,INT 2F/AX=ED58h
+--------B-1621-------------------------------
+INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE (122-key kbd support only)
+ AH = 21h
+Return: ZF set if no keystroke available
+ ZF clear if keystroke available
+ AH = BIOS scan code
+ AL = ASCII character
+Notes: use AH=09h to determine whether this function is supported
+ some versions of the IBM BIOS Technical Reference erroneously report
+ that CF is returned instead of ZF
+ K3PLUS v6.00+ supports this function as an alias of AH=11h
+SeeAlso: AH=01h,AH=09h,AH=11h,AH=20h,AH=21h
+--------b-1621------------------------------------
+INT 16 - HUNTER 16 - CONTROL SHIFT KEYS
+ AH = 21h
+ AL = shift keys to control (see #00582)
+ BL = shift state for disabled keys
+Note: If a bit in AL is set the key is disabled and set to the state of the
+ corresponding bit in BL
+SeeAlso: AH=20h"HUNTER",AH=22h"HUNTER"
+--------B-1622-------------------------------
+INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS (122-key kbd support only)
+ AH = 22h
+Return: AL = shift flags 1 (see #00587)
+ AH = shift flags 2 (see #00588)
+Notes: use AH=09h to determine whether this function is supported
+ K3PLUS v6.00+ supports this function as an alias of AH=12h
+SeeAlso: AH=02h,AH=09h,AH=12h,AH=20h,AH=21h
+--------b-1622------------------------------------
+INT 16 - HUNTER 16 - CONTROL CTRL-ALT-DEL
+ AH = 22h
+ AL = new Ctrl-Alt-Del state (00h enabled, nonzero disabled)
+ BX = 0708h
+ CX = 0910h
+ DX = 1112h
+Return: AL = 00h if successful
+SeeAlso: AH=21h"HUNTER",AH=23h"HUNTER",AH=2Ah
+--------b-1623------------------------------------
+INT 16 - HUNTER 16 - CONTROL EMERGENCY BREAKOUT
+ AH = 23h
+ AL = new state of breakout (00h enabled, nonzero disabled)
+ BX = 0708h
+ CX = 0910h
+ DX = 1112h
+Return: AL = 00h if successful
+Desc: Enables or disables the emergency breakout feature, where the
+ Hunter 16 at power on checks whether the X and P keys are pressed.
+ If so the machine will boot rather than continue the running program
+SeeAlso: AH=22h"HUNTER"
+--------b-1624------------------------------------
+INT 16 - HUNTER 16 - REDEFINE KEY CODES
+ AH = 24h
+ AL = Matrix Code (see #00591)
+ BL = new Key code
+Return: AL = status (00h successful, nonzero failed)
+SeeAlso: AH=2Bh,AH=2Ch
+
+(Table 00591)
+Values for HUNTER 16 Matrix Code:
+ Code Key Code Key Code Key
+ 00h Esc key 1Eh Space 3Bh L
+ 01h 1 21h 0 3Ch ,
+ 02h Q 22h - 3Eh Right shift
+ 03h Tab 23h ' 42h 8
+ 04h Num Lock 24h Keypad 4 43h 7
+ 05h \ 25h Enter 44h U
+ 08h LShift 26h Keypad 7 45h I
+ 09h Ctrl 27h . 46h J
+ 0Ah "Paw" key 28h Keypad 1 47h K
+ 0Bh 2 29h Keypad 0 48h M
+ 0Ch W 2Ch = 49h N
+ 0Dh A 2Dh Backspace 4Ah /
+ 0Eh S 2Eh Keypad 8 4Dh 6
+ 0Fh Z 2Fh Keypad 9 4Eh 5
+ 11h Alt 30h Keypad 5 4Fh T
+ 16h 4 31h Keypad 6 50h Y
+ 17h 3 32h Keypad 2 51h G
+ 18h E 33h Keypad 3 52h H
+ 19h R 34h Keypad . 53h B
+ 1Ah D 37h 9 54h V
+ 1Bh F 38h O 55h #
+ 1Ch X 39h P 58h Pwr
+ 1Dh C 3Ah ; 59h Shift Pwr
+--------b-1625------------------------------------
+INT 16 - HUNTER 16 - RESET KEYBOARD
+ AH = 25h
+Return: AL = 00h
+Desc: restores the standard keyboard layout after any remapping
+SeeAlso: AH=24h,AH=2Bh,AH=2Ch
+--------K-1625-------------------------------
+INT 16 O - K3 v1.5x, K3PLUS v5.xx - COPY INTO EXTENDED BUFFER
+ AH = 25h
+ CX = number of keystrokes to copy
+ ES:SI -> buffer containing keystrokes
+Return: CF clear if successful
+ CF set on error (i.e. buffer full)
+ CX = number of keystrokes NOT transferred
+ ES:SI -> first keystroke not transferred
+Note: this function was normally unsupported under K3PLUS v6.00-v6.22 and
+ is no longer supported by v6.30+; use AX=AF25h instead
+SeeAlso: AH=05h,AH=20h"K3",AX=AF25h,INT 2F/AX=D44Fh/BX=0001h
+--------b-1626------------------------------------
+INT 16 - HUNTER 16 - CONTROL KEYCLICK
+ AH = 26h
+ AL = new state of keyclicks (00h disabled, 01h enabled)
+Return: AL = 00h
+SeeAlso: AH=2Ah
+--------b-1627------------------------------------
+INT 16 - HUNTER 16 - CONTROL SCREEN DUMP AREA
+ AH = 27h
+ AL = what to dump
+ 00h whole (virtual) window
+ 01h LCD window only
+Return: AL = 00h
+Desc: control whether printscren dumps the whole 80x25 screen or only the
+ part displayed in the LCD window
+Note: the Hunter 16 has a 240x64 LCD display which serves as a window into
+ a 640x200 virtual screen
+--------b-1629------------------------------------
+INT 16 - HUNTER 16 - GET KEY REPEAT
+ AH = 29h
+Return: BL = Typematic rate (characters per second) (see #00592)
+ BH = delay (00h = 250ms, 01h = 500ms, 02h = 750ms, 03h = 1s)
+SeeAlso: AH=03h,AH=2Ah
+
+(Table 00592)
+Values for HUNTER 16 Typematic rate:
+ 00h 30.0 08h 15.0 10h 7.5 18h 3.7
+ 01h 26.7 09h 13.3 11h 6.7 19h 3.3
+ 02h 24.0 0Ah 12.0 12h 6.0 1Ah 3.0
+ 03h 21.8 0Bh 10.9 13h 5.5 1Bh 2.7
+ 04h 20.0 0Ch 10.0 14h 5.0 1Ch 2.5
+ 05h 18.5 0Dh 9.2 15h 4.6 1Dh 2.3
+ 06h 17.1 0Eh 8.6 16h 4.3 1Eh 2.1
+ 07h 16.0 0Fh 8.0 17h 4.0 1Fh 2.0
+SeeAlso: AH=2Ah
+--------b-162A------------------------------------
+INT 16 - HUNTER 16 - CONTROL KEY REPEAT
+ AH = 2Ah
+ AL = new state of keyboard autorepeat (00h disabled, 01h enabled)
+SeeAlso: AH=03h,AH=26h,AH=29h,AH=2Bh
+--------b-162B------------------------------------
+INT 16 - HUNTER 16 - REDEFINE KEY SCAN CODES
+ AH = 2Bh
+ AL = which key table to redefine
+ 00h unshifted
+ 01h shifted
+ 02h Numlock
+ BH = standard scan code of key (00h-80h)
+ BL = new scan code
+Desc: redefine the generated scan code from BH to BL
+SeeAlso: AH=24h,AH=2Ah,AH=2Ch
+--------b-162C------------------------------------
+INT 16 - HUNTER 16 - REDEFINE RAW KEY CODES
+ AH = 2Ch
+ AL = Matrix code of key (see AH=29h)
+ BL = new key code
+Return: AL = status (00h success, nonzero failed)
+Desc: redefine the key code generated by holding the PAW key down and
+ pressing the key in AL
+SeeAlso: AH=24h,AH=2Bh
+--------b-162D------------------------------------
+INT 16 - HUNTER 16 - CONTROL BREAK KEYS
+ AH = 2Dh
+ AL = enabled break keys
+ bit 0 Ctrl-C
+ bit 1 Ctrl-Break
+ BX = 0708h
+ CX = 0910h
+ DX = 1112h
+Return: AL = status (00h success, FFh failed)
+SeeAlso: AH=21h"HUNTER"
+--------U-163577-----------------------------
+INT 16 U - TextWare TWTSR - API
+ AX = 3577h
+ CX = function
+ 00CBh ???
+ Return: AX = 0000h
+ BX = 0000h
+ DX:CX -> ???
+ 00CCh uninstall
+ Return: AX = status
+ 0000h successful
+ FFFDh unable to unload because vectors taken
+ 00CDh ???
+ Return: AX = 0000h
+ BX = 0000h
+ DX:CX -> ???
+ other
+ Return: AX = 5345h ('SE')
+Program: TWTSR is a TSR which allows the TextWare hypertext browser to be
+ popped up via hotkey
+SeeAlso: AX=D724h
+--------U-164252-----------------------------
+INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
+ AX = 4252h
+Return: AX = 5242h if installed
+Program: TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of
+ the PC Magazine utility CAPTURE written by Tom Kihlken
+SeeAlso: AX=4253h,AX=4254h
+--------U-164253-----------------------------
+INT 16 - TEXTCAP 2.0 - UNINSTALL
+ AX = 4253h
+Return: AX = segment of resident code
+Notes: the uninstall code does not check whether interrupt vectors have been
+ chained by other programs
+ the caller must free the main memory block (using the returned segment)
+SeeAlso: AX=4252h,AX=4254h
+--------U-164254-----------------------------
+INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
+ AX = 4254h
+Return: AX = status
+ 4254h if screen dump will be written as soon as disk becomes idle
+ 5442h if screen dump written
+SeeAlso: AX=4252h,AX=4253h
+--------e-164500-----------------------------
+INT 16 - Shamrock Software EMAIL - GET STATUS
+ AX = 4500h
+ DL = port number (01h = COM1)
+ ES:BX -> 13-byte buffer for ASCIZ name
+Return: AX = 4D00h if EMAIL installed on specified port
+ ES:BX -> "" if no connection
+ -> "*" if connection but caller has not identified name
+ -> name otherwise
+ CX = version (CH = major, CL = minor)
+ DL = privilege level of user (00h = guest)
+ DH = chosen language (00h German, 01h English)
+SeeAlso: AX=4501h,AX=4502h
+--------e-164501-----------------------------
+INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
+ AX = 4501h
+ DL = port number (01h = COM1)
+Return: AX = 4D00h if EMAIL installed on specified port
+ BX = maximum connect time in clock ticks
+ CX = maximum connect time for guests (without name) in clock ticks
+ DX = elapsed connect time of current user in clock ticks
+SeeAlso: AX=4500h
+--------e-164502-----------------------------
+INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
+ AX = 4502h
+ DL = port number (01h = COM1)
+Return: AX = 4D00h if EMAIL installed on specified port
+ BL = current value of serial port's Line Control Register
+ BH = flags (see #00593)
+ CX = selected country code (33 = France, 49 = Germany, etc)
+ DX = baudrate divisor (115200/DX = baudrate)
+SeeAlso: AX=4500h
+
+Bitfields for Shamrock Software EMAIL flags:
+Bit(s) Description (Table 00593)
+ 0 ISO code
+ 1 pause
+ 2 linefeed
+ 3 ANSI sequences
+--------e-164503-----------------------------
+INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
+ AX = 4503h
+ DL = port number (01h = COM1)
+ DH = maximum execution time in clock ticks (00h = 5 seconds)
+ ES:BX -> ASCIZ string with new user command-word
+Return: AX = 4D00h if EMAIL installed on specified port
+Notes: a single user command (consisting of only uppercase letters and digits)
+ may be defined, and remains valid until it is overwritten or the
+ EMAIL program terminates; the user command must be activated by
+ calling AX=4504h at least once.
+ an existing command word may be redefined with this function
+SeeAlso: AX=4504h,AX=4505h
+--------e-164504-----------------------------
+INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
+ AX = 4504h
+ DL = port number (01h = COM1)
+ ES:BX -> 80-byte buffer for ASCIZ user input line
+Return: AX = 4D00h if EMAIL installed on specified port
+ DL = flags
+ bit 0: user function supported (always set)
+ bit 1: user entered user-function command word
+ if DL bit 1 set,
+ ES:BX buffer contains line entered by user which begins with
+ the defined command word and has been converted to all
+ caps
+Note: caller must process the returned commandline and invoke AX=4505h
+ within five seconds with the result of that processing
+SeeAlso: AX=4503h,AX=4505h
+--------e-164505-----------------------------
+INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
+ AX = 4505h
+ DL = port number (01h = COM1)
+ DH = error flag
+ bit 3: set on error
+ ES:BX -> ASCIZ text to return to user, max 1024 bytes
+Return: AH = 4Dh if EMAIL installed on specified port
+ AL = status
+ 00h successful
+ 02h unable to perform function (timeout, prev call not complete)
+ other error
+Notes: if the error flag in DH is set, the string is not sent and an error
+ message is generated instead; if this function is not called within
+ five seconds of AX=4504h, EMAIL automatically generates an error
+ message
+ the string is copied into an internal buffer, allowing this function's
+ caller to continue immediately
+SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
+--------e-164506-----------------------------
+INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
+ AX = 4506h
+ DL = port number (01h = COM1)
+ ES:BX -> 13-byte buffer for ASCIZ filename
+Return: AX = 4D00h if EMAIL installed on specified port
+ DH = Xmodem status
+ 00h no XGET command given
+ 01h XGET in progress
+ 02h XGET completed successfully
+ ES:BX buffer filled with last filename given to XGET command
+ (without path)
+Note: DH=02h will only be returned once per XGET; subsequent calls will
+ return DH=00h
+SeeAlso: AX=4500h,INT 17/AX=2408h
+--------K-164B-------------------------------
+INT 16 - Frank Klemm Keyboard Driver v2.0 - API
+ AH = 4Bh
+ CX = code or action
+ 0000h-FEFFh key code
+ FF00h-FFFFh action (see #00594)
+ BL = scan code (normal keys) or scan code + 60h (enhanced keys)
+ BH = shift state (see #00595)
+Return: CX = previous code or action
+
+(Table 00594)
+Values for Frank Klemm Keyboard Driver action code:
+ FF00h no action
+ FF01h hardcopy
+ FF02h left shift
+ FF03h right shift
+ FF04h left Ctrl
+ FF05h right Ctrl
+ FF06h left Alt
+ FF07h right Alt / AltGr
+ FF08h CapsLock
+ FF09h NumLock
+ FF0Ah ScrlLock
+ FF0Bh Insert (returns code 5200h or 52E0h)
+ FF0Ch Pause
+ FF0Dh Ctrl-Break function
+ FF0Eh warm boot via far jump to F000h:FFF0h
+ FF0Fh terminate current program
+ FF10h key for entering keys via Alt-numpad (read-only)
+ FF11h clear keyboard buffer
+ FF12h reset (warmboot on XT)
+ FF13h mouse sensitivity (read-only)
+ FF14h keyjobs (read-only)
+ FF15h SysRq
+ FF16h turn on CPU cache (486+)
+ FF17h turn off CPU cache (486+)
+SeeAlso: #00595
+
+(Table 00595)
+Values for Frank Klemm Keyboard Driver shift state:
+ 00h no shift keys
+ 01h either Shift
+ 02h either Ctrl
+ 03h left Alt
+ 04h Ctrl + Alt
+---standard keyboard---
+ 05h right Alt / AltGr
+---Russian keyboard---
+ 05h Russian + no shift keys
+ 06h Russian + either Shift
+SeeAlso: #00594
+--------K-164D4F-----------------------------
+INT 16 - M16_KBD.COM v5.6 - INSTALLATION CHECK
+ AX = 4D4Fh
+Return: AX = 6F6Dh if installed
+ ES = segment of resident code
+Program: M16_KBD is a shareware Cyrillic keyboard driver by I.V. Morozov
+SeeAlso: INT 10/AX=1130h/BX=4D4Fh
+--------J-165000-----------------------------
+INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
+ AX = 5000h
+ BX = country code
+ 0001h USA (English), 0051h Japan
+Return: AL = status
+ 00h successful
+ 01h bad country code
+ 02h other error
+Notes: This function is called with BX=0051h by Japanese versions of
+ MS-DOS/PC DOS/DR DOS IO.SYS/IBMBIO.COM at initialization time.
+ the K3PLUS v6.00+ INT 16 BIOS replacement will switch between the
+ supported country specific layout (e.g. BX=0031h Germany, BX=001Fh
+ Netherlands, BX=0020h Belgium, BX=0022h Spain) (as with <Ctrl>+
+ <Alt>+<F2>) and K3PLUS' transparent mode (as with <Ctrl>+<Alt>+<F1>).
+ In transparent mode (BX=0001h), K3PLUS chains to the underlying
+ driver (normally the BIOS driver with US-layout). K3PLUS beeps on
+ mode changes
+SeeAlso: AX=5001h,AX=AF4Dh,INT 10/AX=5000h,INT 17/AX=5000h
+--------J-165001-----------------------------
+INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
+ AX = 5001h
+Return: AL = status
+ 00h successful
+ BX = country code
+ 02h error
+Note: also supported by K3PLUS v6.00+
+SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
+--------J-1651-------------------------------
+INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
+ AH = 51h
+Return: AL = standard shift key states (see #00582,#00587)
+ AH = Kana lock (00h off, 01h on)
+Note: also supported by K3PLUS v6.00+, but K3PLUS always returns AH=00h
+SeeAlso: AH=02h,AH=12h,AH=22h
+--------t-165453BX5242-----------------------
+INT 16 - TSRBONES - INSTALLATION CHECK
+ AX = 5453h ('TS')
+ BX = 5242h ('RB')
+ CX = 4F4Eh ('ON')
+ DX = 4553h ('ES')
+Return: AX = 4553h if installed
+ BX = 4F4Eh if installed
+ CX = 5242h if installed
+ DX = 5453h if installed
+Program: TSRBONES is a skeletal TSR framework by Robert Curtis Davis
+Note: these values are the default as the TSRBONES package is distributed,
+ but will normally be changed when implementing an actual TSR with
+ the TSRBONES skeleton
+SeeAlso: INT 2D/AL=00h"AMIS"
+--------K-165472BX4C54-----------------------
+INT 16 - TrLit - API
+ AX = 5472h ('Tr')
+ BX = 4C54h ('Lt')
+ CL = function
+ 00h installation check
+ Return: DX = 1234h if installed
+ AX = 100*version (binary, 00E9h = v2.33)
+ CX = resident code segment
+ 01h get original INT 09 vector
+ Return: ES:BX -> previous handler
+ 02h get original INT 16 vector
+ Return: ES:BX -> previous handler
+ else chained
+ CH = 00h (for backward compatibility with versions before 2.30)
+Program: TrLit is a Russian keyboard transliterator by Rostislav Krasny
+Index: installation check;TrLit
+--------A-165500-----------------------------
+INT 16 C - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
+ AX = 5500h
+Return: AX = 4D53h ('MS') if keyboard TSR present
+Notes: during startup, Microsoft Word tries to communicate with any TSRs
+ that are present through this call.
+ if the return is not 4D53h, Word installs its own INT 09 and INT 16
+ handlers; otherwise it assumes that the TSR will handle the keyboard
+SeeAlso: AX=55FFh,INT 1A/AX=3601h
+--------A-1655FE-----------------------------
+INT 16 CU - Microsoft QBASIC internal - MICROSOFT COOPERATION WITH TSR
+ AX = 55FEh
+ DX = function
+ 0000h initialize
+ ES:BX -> ??? function
+ ES:CX -> ??? structure
+ FFFFh shutdown/reset
+Return: AX = result
+ 4D4Bh only the INT 1B handler will be installed.
+ other: handlers for INT 08, INT 09, INT 16, INT 1B, and INT 1C
+ are installed
+Notes: The pointer in ES:CX seems to point at a structure defining a callback
+ function when new keyboard keys are pressed. If a TSR returns
+ AX=4D4Bh, QBASIC will stop (with IRQ's and interrupts enabled).
+ these calls are also made by MS-DOS 6.0's DOSSHELL at startup, exit,
+ and before/after shelling out
+ since EDIT.COM and HELP.COM merely invoke QBASIC, those two programs
+ will also cause this interface to be invoked
+ K3PLUS v6.07+ supports this function, but will never invoke the
+ callback function
+SeeAlso: AX=5500h,AX=AF4Dh,INT 1A/AX=3601h
+--------U-1655FF-----------------------------
+INT 16 C - Microsoft Word - TSR COOPERATION???
+ AX = 55FFh
+ BX >= 0004h (version of Microsoft Word [BL = major] ???)
+ CX = function
+ 0000h set ??? flag
+ other clear ??? flag
+Notes: hooks intercepting this call are present in SWAPSH and SWAPDT v1.77j,
+ distributed with PC Tools v7, as well as the Trusted Access
+ SCRNBLNK.COM; this may be part of the standard TesSeRact library
+ known to be called by the German edition of Microsoft Word 5.0
+SeeAlso: AX=5500h,INT 2F/AX=5453h
+--------c-165758BX4858-----------------------
+INT 16 U - Netroom CACHECLK - INSTALLATION CHECK
+ AX = 5758h
+ BX = 4858h ('HX')
+ DX = 4443h ('DC')
+ CX <> 5758h
+Return: BX = 6878h if installed
+ CX = 6463h if installed
+ AX = code segment of TSR
+ CX = internal version??? (v3.00 returns 0100h)
+Program: CACHECLK is a "cloaked" disk cache included with Netroom
+Notes: if CX=5758h on entry, CACHECLK returns with all registers unchanged
+ the cache statistics are located early in the segment pointed at by
+ AX on return
+SeeAlso: INT 2F/AX=5758h
+--------m-165758BX5754-----------------------
+INT 16 U - Netroom ??? - ???
+ AX = 5758h
+ BX = 5754h
+ ???
+Return: ???
+--------m-165758BX5755-----------------------
+INT 16 U - Netroom ??? - ???
+ AX = 5758h
+ BX = 5755h
+ DS:SI -> ???
+Return: ???
+--------m-165758BX5756-----------------------
+INT 16 U - Netroom ??? - INSTALLATION CHECK
+ AX = 5758h
+ BX = 5756h
+Return: BX <> 5756h if installed
+--------m-165758BX5858-----------------------
+INT 16 U - Netroom PRENET - GET OLD INTERRUPT VECTORS
+ AX = 5758h
+ BX = 5858h
+Return: CF clear
+ DX:BX -> saved copy of interrupt vector table
+InstallCheck: call this function and compare BX against 5858h on return; if
+ it has changed, PRENET is installed
+SeeAlso: AX=5758h/BX=5859h
+Index: installation check;Netroom PRENET
+--------m-165758BX5859-----------------------
+INT 16 U - Netroom POSTNET - GET OLD INTERRUPT VECTORS
+ AX = 5758h
+ BX = 5859h
+Return: CF clear
+ DX:BX -> saved copy of interrupt vector table
+InstallCheck: call this function and compare BX against 5859h on return; if
+ it has changed, POSTNET is installed
+SeeAlso: AX=5758h/BX=5858h
+Index: installation check;Netroom POSTNET
+----------1667-------------------------------
+INT 16 - Doorway v2.x+ - INSTALLATION CHECK / REDIRECTION CONTROLa
+ AH = 67h
+ AL = Doorway mode
+ 00h turn off DOS redirection
+ 01h turn on DOS redirection
+Return: AH = 80h if Doorway is actively redirecting output
+ AL = 80h if Doorway was already in requested mode
+Program: Doorway is a program by Marshall Dudley which allows most DOS programs
+ to run as a BBS door without modification
+Note: to perform an installation check without changing the redirection
+ state, if is necessary to restore the original mode if AL was not
+ 80h on return
+SeeAlso: INT 10/AH=BBh"Doorway"
+--------U-166969BX6968-----------------------
+INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
+ AX = 6969h
+ BX = 6968h
+Return: resident code unhooked, but not removed from memory
+Index: uninstall;BACKTALK
+--------U-166969BX6969-----------------------
+INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
+ AX = 6969h
+ BX = 6969h
+ DX = 0000h
+Return: DX nonzero if installed
+ BX = CS of resident code
+ DX = PSP segment of resident code
+ DS:SI -> ASCIZ identification string "CPoint Talk"
+--------i-166A6B-----------------------------
+INT 16 U - FastJuice - DISABLE/UNLOAD???
+ AX = 6A6Bh
+Return: ???
+Program: FastJuice is a resident battery-power monitor by SeaSide Software
+SeeAlso: AX=7463h
+Index: uninstall;FastJuice
+--------G-166C63-----------------------------
+INT 16 U - TMED v1.6a - INSTALLATION CHECK
+ AX = 6C63h ('lc')
+Return: AX = 4C43h ('LC') if installed
+Program: TMED is a freeware resident memory editor by Liang Chen
+--------U-166D74-----------------------------
+INT 16 - MTRTSR - INSTALLATION CHECK
+ AX = 6D74h ('mt')
+Return: AX = 4D54h ('MT') if installed
+Program: MTRTSR is a part of the shareware MTR package by Mechon Mamre which
+ permits searching the large corpus of classical Hebrew texts in the
+ package
+SeeAlso: INT 10/AX=6D74h"MTRFONTS"
+--------b-166F00-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_INQUIRE" - Extended BIOS INSTALLATION CHECK
+ AX = 6F00h
+ BX <> 4850h (usually set to 0000h for simplicity)
+Return: BX = 4850h ("HP") if present
+Notes: called by recent MS Mouse drivers looking for an HP-HIL mouse
+ supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+SeeAlso: AX=6F01h,AX=6F04h,AX=6F07h,AX=6F09h,AX=6F0Dh,AX=6F11h,AX=6F12h
+SeeAlso: INT 14/AX=6F00h,INT 17/AX=6F00h,INT 33/AX=6F00h
+SeeAlso: INT 6F/AH=00h"HP Vectra"
+--------b-166F01-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_DEF_ATTR" - GET DEFAULT TYPEMATIC VALUES
+ AX = 6F01h
+Return: AH = 00h (successful)
+ CX = 0004h (size of returned buffer)
+ ES:SI -> buffer for typematic info (see #00596)
+Note: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+SeeAlso: AX=6F00h,AX=6F02h,AX=6F03h,AX=6F04h
+
+Format of HP Vectra EX-BIOS typematic info:
+Offset Size Description (Table 00596)
+ 00h BYTE delay before repeat for all non-Cursor Control Pad keys
+ (see #00597)
+ 01h BYTE typematic rate for all non-Cursor Control Pad keys (see #00598)
+ 02h BYTE delay before repeat for Cursor Control Pad keys (see #00599)
+ 03h BYTE typematic rate for Cursor Control Pad keys (see #00598)
+
+(Table 00597)
+Values for HP Vectra EX-BIOS non-CCP delay time:
+ 00h 17 ms
+ 01h 150 ms
+ 02h 283 ms
+ 03h 417 ms
+ 04h 550 ms
+ 05h 683 ms
+ 06h 817 ms
+ 07h 950 ms
+ 08h 1083 ms
+ 09h 1217 ms
+ 0Ah 1350 ms
+ 0Bh 1483 ms
+ 0Ch 1617 ms
+ 0Dh 1750 ms
+ 0Eh 1883 ms
+ 0Fh 2017 ms
+Note: the above values assume that the key repeat rate has been set to 60 Hz;
+ double the times if set to 30 Hz
+SeeAlso: #00596,#00598,#00599
+
+(Table 00598)
+Values for HP Vectra EX-BIOS typematic rate:
+ 00h 60 / sec
+ 01h 30 / sec
+ 02h 20
+ 03h 15
+ 04h 12
+ 05h 10
+ 06h 8.57
+ 07h 7.5
+ 08h 6.66
+ 09h 6 / sec
+ 0Ah 5.45
+ 0Bh 5
+ 0Ch 4.62
+ 0Dh 4.28
+ 0Eh 4 / sec
+ 0Fh typematic disabled
+Note: the above values assume that the key repeat rate has been set to 60 Hz;
+ halve the rates if set to 30 Hz
+SeeAlso: #00597,#00599
+
+(Table 00599)
+Values for HP Vectra EX-BIOS CCP delay time:
+ 00h 17 ms
+ 01h 83 ms
+ 02h 150 ms
+ 03h 217 ms
+ 04h 283 ms
+ 05h 350 ms
+ 06h 417 ms
+ 07h 483 ms
+ 08h 550 ms
+ 09h 617 ms
+ 0Ah 683 ms
+ 0Bh 750 ms
+ 0Ch 817 ms
+ 0Dh 883 ms
+ 0Eh 950 ms
+ 0Fh 1017 ms
+Note: the above values assume that the key repeat rate has been set to 60 Hz;
+ double the times if set to 30 Hz
+SeeAlso: #00597,#00598
+--------b-166F02-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_GET_ATTR" - GET CURRENT TYPEMATIC VALUES
+ AX = 6F02h
+Return: AH = 00h (successful)
+ CX = 0004h (size of returned buffer)
+ ES:SI -> buffer for typematic info (see #00596)
+Note: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+SeeAlso: AX=6F00h,AX=6F02h,AX=6F03h,AX=6F04h
+SeeAlso: AX=6F00h,AX=6F01h,AX=6F03h
+--------b-166F03-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_SET_ATTR" - SET TYPEMATIC VALUES
+ AX = 6F03h
+ ES:SI -> buffer containing typematic info (see #00596)
+Return: AH = 00h (successful)
+Note: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+SeeAlso: AX=6F00h,AX=6F02h,AX=6F03h,AX=6F04h
+SeeAlso: AX=6F00h,AX=6F01h,AX=6F02h
+--------b-166F04-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_DEF_MAPPING" - GET DEFAULT KEY MAPPINGS
+ AX = 6F04h
+ ES:SI -> mapping buffer (see #00600)
+Return: AH = 00h (successful)
+ CX = 001Eh (number of bytes in buffer)
+ ES:SI buffer filled
+Notes: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+ the HIL input system translates the HIL keyboard events to simulate
+ an IBM-compatible keyboard; the translation can be altered
+ dynamically by applications
+SeeAlso: AX=6F00h,AX=6F05h,AX=6F06h
+
+Format of HP Vectra EX-BIOS keyboard mapping info:
+Offset Size Description (Table 00600)
+ 00h 3 WORDs entry for V_QWERTY driver (IP, CS, DS)
+ 06h 3 WORDs entry for V_SOFTKEY driver (IP, CS, DS)
+ 0Ch 3 WORDs entry for V_FUNCTION driver
+ 12h 3 WORDs entry for V_NUMPAD driver
+ 18h 3 WORDs entry for V_CCP driver
+--------b-166F05-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_GET_MAPPING" - GET CURRENT KEY MAPPINGS
+ AX = 6F05h
+ ES:SI -> mapping buffer (see #00600)
+Return: AH = 00h (successful)
+ CX = 001Eh (number of bytes in buffer)
+ ES:SI buffer filled
+Note: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+SeeAlso: AX=6F04h,AX=6F06h
+--------b-166F06-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_SET_MAPPING" - SET KEY MAPPINGS
+ AX = 6F06h
+ CX = number of bytes in buffer (001Eh)
+ ES:SI -> mapping buffer (see #00600)
+Return: AH = 00h (successful)
+Notes: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+ any application which modifies the key mappings should restore them
+ before terminating
+ drivers installed with this function are assured of 32 bytes of stack
+ space when they are invoked
+SeeAlso: AX=6F04h,AX=6F05h,AX=6F07h
+--------b-166F07-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_SET_XLATORS" - SET CCP AND SOFTKEY PADS
+ AX = 6F07h
+ BL = translation to set (see #00601)
+Return: AH = 00h (successful)
+Notes: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+ this function may no longer work properly if the application has
+ modified the key mappings with AX=6F06h
+SeeAlso: AX=6F06h,AX=6F09h
+
+(Table 00601)
+Values for HP Vectra keyboard translation specifier:
+ 00h map V_CCP to V_CCPCUR, forcing the cursor pad to return cursor keys
+ 01h map V_CCP to V_CCPNUM, forcing the cursor pad to always return numbers
+ 02h map V_CCP to V_OFF, disabling the cursor pad
+ 03h map V_CCP to V_CCPGID, converting cursor pad keys to GID data
+ 04h map V_CCP to V_RAW, passing cursor pad data untranslated to INT 09
+ 05h map V_SOFTKEY to V_SKEY2KFEY, translating into standard function keys
+ 06h map V_SOFTKEY to V_RAW, passing Softkey scancodes direct to INT 09
+ 07h map V_SOFTKEY to V_OFF, disabling HP Softkeys
+SeeAlso: #00602
+
+(Table 00602)
+Values for HP Vectra scancodes and BIOS keycodes for V_RAW translator:
+ INT 09 INT 16 keycode
+ Key scan code Default Shifted Ctrl Alt
+ * (NumPd) 37h 2Ah (Prt Sc) 00/72h 00/37H
+ Sysreq 54h -- -- -- --
+ CCP-Up 60h 00/D9h 00/BFh 00/A5h 00/8BH
+ CCP-Left 61h 00/DAh 00/C0h 00/A6h 00/8CH
+ CCP-Down 62h 00/DBh 00/C1h 00/A7h 00/8DH
+ CCP-Right 63h 00/DCh 00/C2h 00/A8h 00/8EH
+ CCP-Home 64h 00/DDh 00/C3h 00/A9h 00/8FH
+ CCP-PgUp 65h 00/DEh 00/C4h 00/AAh 00/90H
+ CCP-End 66h 00/DFh 00/C5h 00/ABh 00/91H
+ CCP-PgDn 67h 00/E0h 00/C6h 00/ACh 00/92H
+ CCP-Ins 68h 00/E1h 00/C7h 00/ADh 00/93H
+ CCP-Del 69h 00/E2h 00/C8h 00/AEh 00/94H
+ CCP-CNTR 6Ah 00/E3h 00/C9h 00/AFh 00/95H
+ f1 70h 00/E9h 00/CFh 00/B5h 00/9BH
+ f2 71h 00/EAh 00/D0h 00/B6h 00/9CH
+ f3 72h 00/EBh 00/D1h 00/B7h 00/9DH
+ f4 73h 00/ECh 00/D2h 00/B8h 00/9EH
+ f5 74h 00/EDh 00/D3h 00/B9h 00/9FH
+ f6 75h 00/EEh 00/D4h 00/BAh 00/A0H
+ f7 76h 00/EFh 00/D5h 00/BBh 00/A1H
+ f8 77h 00/F0h 00/D6h 00/BCh 00/A2H
+Note: only HP-specific codes are listed in this table; see INT 09 for a full
+ list of standard scan codes
+SeeAlso: #00006,#00601
+--------b-166F08-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_KBD" - GET KEYBOARD INFORMATION
+ AX = 6F08h
+Return: AH = status
+ 00h successful
+ 02h unsupported (non-HIL, i.e. standard, keyboard)
+ BH = HP-HIL address (HP Vectra AT only???)
+ BL = HP-HIL ID (HP Vectra AT only???)
+ BL = keyboard language (ES/QS/RS only???) (see #00603)
+Notes: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+ the driver's address in the HP_VECTOR_TABLE (see INT 6F/AH=00h) may
+ be computed as (BH-1)*6 + N, where N is the address of the first
+ HP-HIL device driver (see INT 6F/AH=0Ah"F_INQUIRE_FIRST")
+SeeAlso: AX=6F05h,AX=6F09h,INT 6F/AH=0Ah"F_INQUIRE_FIRST"
+
+(Table 00603)
+Values for HP HIL keyboard language code:
+ 00h reserved
+ 01h Arabic-French
+ 02h Kanji
+ 03h Swiss-French
+ 04h Portugese
+ 05h Arabic
+ 06h Hebrew
+ 07h Canadian-English
+ 08h Turkish
+ 09h Greek
+ 0Ah Thai
+ 0Bh Italian
+ 0Ch Hangul (Korean)
+ 0Dh Dutch
+ 0Eh Swedish
+ 0Fh German
+ 10h Chinese (PRC)
+ 11h Chinese (Taiwan)
+ 12h Swiss (French ii)
+ 13h Spanish
+ 14h Swiss (German ii)
+ 15h Belgian (Flemish)
+ 16h Finnish
+ 17h United Kingdom
+ 18h French-Canadian
+ 19h French-German
+ 1Ah Norwegian
+ 1Bh French
+ 1Ch Danish
+ 1Dh Katakana
+ 1Eh Latin American Spanish
+ 1Fh United States-American
+ 20h-FEh reserved
+ FFh non-HP keyboard (IBM AT keyboard and IBM Enhanced keyboard)
+--------b-166F09-----------------------------
+INT 16 - HP Vectra EX-BIOS - "F16_KBD_RESET" - RESET KEYBOARD TO DEFAULTS
+ AX = 6F09h
+Return: AH = 00h (successful)
+Desc: reset all keyboard mappings to their default translators, and reset
+ typematic values to their defaults
+Note: supported by the original HP Vectra AT and ES/QS/RS series HP Vectras
+SeeAlso: AX=6F04h,AX=6F07h,AX=6F08h
+--------b-166F0A-----------------------------
+INT 16 - HP Vectra ES/QS/RS EX-BIOS - READ PROCESSOR SPEED
+ AX = 6F0Ah
+Return: AH = 00h (successful)
+ BX = speed code
+ 0Bh for low speed (see #00604)
+ 12h for medium speed (see #00604)
+ 0Ch for high speed (see #00604)
+Note: supported by ES, QS, and RS series of HP Vectras
+SeeAlso: AX=6F00h
+
+(Table 00604)
+Values for HP Vetra CPU speed:
+ Vectra Low Medium High
+ ES 8 MHz - 8 MHz
+ ES/12 8 MHz - 12 MHz
+ QS/16, RS/16 8 MHz - 16 MHz
+ QS/16S 8 MHz - 16 MHz
+ QS/20, RS/20 8 MHz - 20 MHz
+ RS/20C 5 MHz 10 MHz 20 MHz
+ RS/25C 5 MHz 12.5 MHz 25 MHz
+--------b-166F0B-----------------------------
+INT 16 - HP Vectra ES/QS/RS EX-BIOS - SET PROCESSOR SPEED TO LOW
+ AX = 6F0Bh
+Return: AH = 00h (successful)
+Notes: see AX=6F0Ah for speed definitions
+ supported by ES, QS, and RS series of HP Vectras
+SeeAlso: AX=6F00h,AX=6F0Ah
+--------b-166F0C-----------------------------
+INT 16 - HP Vectra ES/QS/RS EX-BIOS - SET PROCESSOR SPEED TO HIGH
+ AX = 6F0Ch
+Return: AH = 00h (successful)
+Notes: see AX=6F0Ah for speed definitions
+ supported by ES, QS, and RS series of HP Vectras
+SeeAlso: AX=6F00h,AX=6F0Ah
+--------b-166F0D-----------------------------
+INT 16 - HP Vectra ES/QS/RS EX-BIOS - GET HIL Extended BIOS INTERRUPT NUMBER
+ AX = 6F0Dh
+Return: AH = interrupt number (default 6Fh, 02h means 6Fh as well)
+Notes: supported by ES, QS, and RS series of HP Vectras
+ called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
+ input system
+SeeAlso: AX=6F00h,AX=6F0Eh,INT 6F/AH=00h"HP Vectra",INT 6F/AH=0Ah"HP"
+--------b-166F0E-----------------------------
+INT 16 - HP Vectra ES/QS/RS EX-BIOS - SET HIL Extended BIOS INTERRUPT NUMBER
+ AX = 6F0Eh
+ BL = new interrupt number (60h-6Fh,78h-7Fh)
+Return: AH = status (00h = successful)
+Desc: allows the HIL Extended BIOS software to use a non-default interrupt
+ number in case of an interrupt conflict with another application
+Notes: supported by ES, QS, and RS series of HP Vectras
+ called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
+ input system
+SeeAlso: AX=6F00h,AX=6F0Dh,INT 6F/AH=00h"HP",INT 6F/AH=0Ah"HP"
+--------b-166F0F-----------------------------
+INT 16 - HP Vectras RS/20C and RS/25C - ENABLE MEMORY CACHING
+ AX = 6F0Fh
+Return: AH = status
+ 00h successful
+ FEh cache subsystem is bad
+SeeAlso: AX=6F00h,AX=6F10h,AX=6F11h
+--------b-166F10-----------------------------
+INT 16 - HP Vectras RS/20C and RS/25C - DISABLE MEMORY CACHING
+ AX = 6F10h
+Return: AH = 00h (successful)
+SeeAlso: AX=6F00h,AX=6F0Fh,AX=6F11h
+--------b-166F11-----------------------------
+INT 16 - HP Vectras RS/20C and RS/25C - GET MEMORY CACHING STATE
+ AX = 6F11h
+Return: AH = 00h (successful)
+ AL bit 0 = cache state
+ 0 cache disabled
+ 1 cache enabled
+SeeAlso: AX=6F00h,AX=6F0Fh,AX=6F10h
+--------b-166F12-----------------------------
+INT 16 - HP Vectras RS/20C and RS/25C - SET PROCESSOR SPEED TO MEDIUM
+ AX = 6F12h
+Return: AH = 00h (successful)
+Note: see AX=6F0Ah for speed definitions
+SeeAlso: AX=6F00h,AX=6F0Ah
+--------K-1670-------------------------------
+INT 16 - FAKEY.COM - INSTALLATION CHECK
+ AH = 70h
+Return: AX = 1954h if installed
+Program: FAKEY is a keystroke faking utility by System Enhancement Associates
+--------K-1671-------------------------------
+INT 16 - FAKEY.COM - PUSH KEYSTROKES
+ AH = 71h
+ CX = number of keystrokes
+ DS:SI -> array of words containing keystrokes to be returned by AH=00h
+Program: FAKEY is a keystroke faking utility by System Enhancement Associates
+SeeAlso: AH=05h,AH=72h
+--------K-1672-------------------------------
+INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
+ AH = 72h
+Program: FAKEY is a keystroke faking utility by System Enhancement Associates
+SeeAlso: AH=71h
+--------K-1673-------------------------------
+INT 16 - FAKEY.COM - PLAY TONES
+ AH = 73h
+ CX = number of tones to play
+ DS:SI -> array of tones (see #00605)
+Program: FAKEY is a keystroke faking utility by System Enhancement Associates
+SeeAlso: INT 15/AX=1019h
+
+Format of FAKEY.COM tone array entries:
+Offset Size Description (Table 00605)
+ 00h WORD divisor for timer channel 2
+ 02h WORD duration in clock ticks
+--------i-167463-----------------------------
+INT 16 U - FastJuice - INSTALLATION CHECK
+ AX = 7463h ("tc")
+Return: AX = 5443h ("TC") if installed
+Program: FastJuice is a resident battery-power monitor by SeaSide Software
+SeeAlso: AX=6A6Bh
+--------R-1675-------------------------------
+INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
+ AH = 75h
+ AL = number of ticks between checks for new screen changes
+--------R-1676-------------------------------
+INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
+ AH = 76h
+ AL = error checking type
+ 00h none
+ 01h fast
+ 02h slow
+--------R-1677-------------------------------
+INT 16 - pcANYWHERE III - LOG OFF
+ AH = 77h
+ AL = mode
+ 00h wait for another call
+ 01h leave in Memory Resident Mode
+ 02h leave in Automatic Mode
+ FFh leave in current operating mode
+--------U-167761-----------------------------
+INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
+ AX = 7761h ('wa')
+Return: AX = 5741h ('WA') if installed
+Note: WATCH.COM is part of the "TSR" package by Kim Kokkonen
+SeeAlso: INT 21/AX=7761h
+--------U-167788BX7789-----------------------
+INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
+ AX = 7788h
+ BX = 7789h
+ DS:SI -> signature "PUSHDIR VERSION 1.0"
+Return: AX = 7789h if installed and signature correct
+ BX = 7788h
+ SI destroyed
+--------R-1679-------------------------------
+INT 16 - pcANYWHERE III - CHECK STATUS
+ AH = 79h
+Return: AX = status
+ FFFFh if resident and active
+ FFFEh if resident but not active
+ FFFDh if in Memory Resident mode
+ FFFCh if in Automatic mode
+ other value if not resident
+SeeAlso: AX=7B00h,INT 21/AX=2B44h
+--------R-167A-------------------------------
+INT 16 - pcANYWHERE III - CANCEL SESSION
+ AH = 7Ah
+--------R-167B00-----------------------------
+INT 16 - pcANYWHERE III - SUSPEND
+ AX = 7B00h
+SeeAlso: AH=79h,AX=7B01h
+--------R-167B01-----------------------------
+INT 16 - pcANYWHERE III - RESUME
+ AX = 7B01h
+SeeAlso: AH=79h,AX=7B00h
+--------R-167C-------------------------------
+INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
+ AH = 7Ch
+Return: AH = port number
+ AL = baud rate (see #00606)
+SeeAlso: AX=7B00h,AH=7Eh
+
+(Table 00606)
+Values for pcANYWHERE III baud rate:
+ 00h 50 baud
+ 01h 75 baud
+ 02h 110 baud
+ 03h 134.5 baud
+ 04h 150 baud
+ 05h 300 baud
+ 06h 600 baud
+ 07h 1200 baud
+ 08h 1800 baud
+ 09h 2000 baud
+ 0Ah 2400 baud
+ 0Bh 4800 baud
+ 0Ch 7200 baud
+ 0Dh 9600 baud
+ 0Eh 19200 baud
+SeeAlso: #00309
+--------R-167D-------------------------------
+INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
+ AH = 7Dh
+ AL = subfunction
+ 00h set terminal parameters
+ 01h get terminal parameters
+ 02h get configuration header and terminal parameters
+ DS:CX -> terminal parameter block
+SeeAlso: AH=7Ch,AH=7Eh
+--------R-167E-------------------------------
+INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
+ AH = 7Eh
+ AL = subfunction
+ 01h port input status
+ Return AX = 0 if no characer ready,
+ AX = 1 if character ready
+ 02h port input character
+ Return AL = received character
+ 03h port output character in CX
+ 11h hang up phone
+SeeAlso: AH=7Ch
+--------R-167F-------------------------------
+INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
+ AH = 7Fh
+ AL = subfunction
+ 00h enable remote keyboard only
+ 01h enable host keyboard only
+ 02h enable both keyboards
+ 08h display top 24 lines
+ 09h display bottom 24 lines
+ 10h Hayes modem
+ 11h other modem
+ 12h direct connect
+--------U-1680-------------------------------
+INT 16 - MAKEY.COM - INSTALLATION CHECK
+ AH = 80h
+Return: AX = 1954h if installed
+Program: MAKEY is a utility by System Enhancement Associates
+--------K-1687-------------------------------
+INT 16 - DK.COM v1.03 - INSTALLATION CHECK
+ AH = 87h
+Return: AX = 4A57h ('JW') if installed
+Program: DK.COM is the resident part of a small keyboard macro utility
+ by Digital Mechanics.
+--------U-168765BX4321-----------------------
+INT 16 - AT.COM version 8/26/87 - API
+ AX = 8765h
+ BX = 4321h
+ CX = ??? or FFFFh
+ if CX = FFFFh
+ DX = number of event to remove or FFFFh
+Return: ES:BX -> event record array (see #00607)
+Program: AT.COM is a resident scheduler by Bill Frolik
+
+Format of AT.COM event record:
+Offset Size Description (Table 00607)
+ 00h BYTE in-use flag (00h free, 01h in use, FFh end of array)
+ 01h BYTE day of date on which to trigger
+ 02h BYTE month of date on which to trigger
+ 03h BYTE trigger time, minute
+ 04h BYTE trigger time, hour
+ 05h WORD offset of command to be executed
+--------K-1692-------------------------------
+INT 16 - KEYB.COM KEYBOARD CAPABILITIES CHECK (not an actual function!)
+ AH = 92h
+Return: AH <= 80h if enhanced keyboard functions (AH=10h-12h) supported
+Desc: this function is called by the DOS 3.2 KEYBxx.COM and DOS 5+ KEYB.COM
+ to determine the highest supported keyboard function
+Note: many BIOSes (including at least some versions of Phoenix and AMI) will
+ destroy AH on return from functions higher than AH=12h, returning
+ 12h less than was in AH on entry (due to a chain of DEC/JZ
+ instructions)
+SeeAlso: AH=05h"PCjr",AH=A2h,INT 2F/AX=AD80h
+--------U-1699-------------------------------
+INT 16 - SCOUT v5.4 - GET ???
+ AH = 99h
+Return: AX = ABCDh
+ BX:CX -> ??? (appears to be start of PSP for resident portion)
+Program: Scout is a memory-resident file manager by New-Ware
+SeeAlso: AH=9Eh
+--------U-169E-------------------------------
+INT 16 - SCOUT v5.4 - INSTALLATION CHECK
+ AH = 9Eh
+Return: AX = ABCDh if installed
+Program: Scout is a memory-resident file manager by New-Ware
+SeeAlso: AH=99h
+--------K-16A2-------------------------------
+INT 16 - KEYB.COM KEYBOARD CAPABILITIES CHECK (not an actual function!)
+ AH = A2h
+Return: AH <= 80h if 122-key keyboard functions (AH=20h-22h) supported
+Desc: this function is called by the DOS 3.2 KEYBxx.COM and DOS 5+ KEYB.COM
+ to determine the highest supported keyboard function
+Note: many BIOSes (including at least some versions of Phoenix and AMI) will
+ destroy AH on return from functions higher than AH=12h, returning
+ 12h less than was in AH on entry (due to a chain of DEC/JZ
+ instructions)
+SeeAlso: AH=05h"PCjr",AH=92h,INT 2F/AX=AD80h
+--------V-16AA-------------------------------
+INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
+ AH = AAh
+ Various registers set up by high level language.
+Return: Graphics performed
+Note: PT stands for Paint Tools which is a graphics library for Turbo Pascal,
+ Modula 2 and others from DataBiten in Sweden. The library is
+ installed as a memory resident driver.
+--------U-16AABBBXEEFF-----------------------
+INT 16 U - JORJ v4.3 - INSTALLATION CHECK
+ AX = AABBh
+ BX = EEFFh
+Return: AX = EEFFh if installed
+ BX = AABBh if installed
+ CL = hotkey name (default 6Ah 'j' for Alt-J)
+Program: JORJ is a shareware dictionary with phonetic lookup by Jorj Software
+ Co.
+Index: hotkeys;JORJ
+--------K-16AF20BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.0+) - GET EXTENDED BUFFER STATE
+ AX = AF20h
+ BX = 4B33h ('K3')
+Return: AX = K3 version (same as returned in BX by AX=AF4Dh)
+ ES:BX -> extended keyboard buffer start
+ ES:DX -> extended keyboard buffer end
+ ES:SI -> next keystroke
+ ES:DI -> last keystroke in buffer
+ CX = number of keystrokes in buffer
+Program: K3PLUS is an extended keyboard driver by Matthias Paul and Axel C.
+ Frinke, originally based on the K3 extended German keyboard driver
+ by Martin Gerdes published in c't magazine in 1988
+Note: this function replaces the identical function AH=20h"K3"
+SeeAlso: AH=20h"K3",AX=AF25h,AX=AF4Dh,AX=AF50h,INT 2F/AX=ED58h
+--------K-16AF25BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.0+) - COPY INTO EXTENDED BUFFER
+ AX = AF25h
+ BX = 4B33h ('K3')
+ CX = number of keystrokes to copy
+ ES:SI -> buffer containing keystrokes
+Return: CF clear if successful
+ CF set on error (i.e. buffer full)
+ CX = number of keystrokes NOT transferred
+ ES:SI -> first keystroke not transferred
+Note: this function replaces the identical function AH=25h"K3"
+SeeAlso: AH=25h"K3",AX=AF20h,AX=AF4Dh,AX=AF50h,INT 2F/AX=D44Fh/BX=0001h
+--------K-16AF4DBX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.0+) - GET VERSION INFORMATION
+ AX = AF4Dh
+ BX = 4B33h ('K3')
+Return: AL = 50h if installed
+ BX = K3 version
+ DX = API version
+ ES:CX -> K3 structure (version-dependent) (see #00608)
+Program: K3PLUS is an extended keyboard driver by Matthias Paul and Axel C.
+ Frinke, originally based on the K3 extended German keyboard driver
+ by Martin Gerdes published in c't magazine in 1988
+SeeAlso: AX=AF20h,AX=AF50h,AX=AF80h,AX=AF82h/BX=4B33h,INT 2F/AX=D44Fh/BX=0000h
+SeeAlso: INT 2F/AX=ED58h
+Index: installation check;K3PLUS
+
+Format of internal K3 structure:
+Offset Size Description (Table 00608)
+ 00h 3 BYTEs signature "K3$"
+ 03h BYTE length of structure, including this byte and signature
+ 04h WORD compiler switch option flags A (see #00609)
+ 06h WORD compiler switch option flags B (see #00610)
+ 08h BYTE internal flags A (see #00611)
+ 09h BYTE internal flags B (see #00612)
+ 0Ah WORD DOS version recorded at startup
+ 0Ch WORD "ActTypeSpeed"
+ 0Eh WORD last Keyboard-ID sent
+ 41ABh translated, 83ABh native (pass-through)
+ 10h WORD offset of K3TAB Special
+ 12h WORD offset of K3TAB German
+ 14h WORD offset of K3TAB Alt
+ 16h WORD offset of K3TAB AltGr
+ 18h WORD offset of K3TAB Ctrl
+ 1Ah WORD offset of K3TAB NPad
+ 1Ch WORD offset of K3TAB CtrlNPad
+ 1Eh WORD offset of K3TAB AltNPad
+ 20h WORD offset of K3TAB ApoTbl or 0000h
+ 22h WORD offset of K3TAB UmlautTbl or 0000h
+ 24h WORD offset of K3TAB UmlautTblExp or 0000h
+ 26h WORD length of video mode table
+ 28h WORD offset of VidMdTbl or 0000h
+ 2Ah BYTE '$' end marker
+
+Bitfields for K3PLUS compiler switch option flags A:
+Bit(s) Description (Table 00609)
+ 15 GuINT16Fct2 (general use of INT 16 function 2)
+ 14 Int15df (INT 15 has to be predefined)
+ 13 GuAltNP (general use of Alt Numpad)
+ 12 SupAT (ATs+ supported)
+ 11 GuINT16Fct3 (general use of INT 16 function 3)
+ 10 GuINT16Ret (general use of INT16 bad function return)
+ 9-8 Layout (0-2, 3 reserved; 0=PC, 1=AT, 2=MF)
+ 7 ForceMF (force MF decode without read-ID)
+ 6 KXlate (translate keys for special keyboard)
+ 5 UmlautX (umlaut translation capability included)
+ 4 ApoX (translate apostrophe)
+ 3 DoINT16 (INT 16 handler included)
+ 2 UseCC (CopyCursor included)
+ 1-0 UseEB
+ 0=no extended keystroke buffer, 1=reserve mem, 2=use PSP, 3=reserved
+
+Bitfields for K3 compiler switch option flags B:
+Bit(s) Description (Table 00610)
+ 15-11 reserved (0)
+ 10 CtrlSeq (Ctrl macro capability included)
+ 9-8 SupINT16fct55FE
+ 6 DoInstallCheck (check for double installation)
+ 5 SupINT16fct5PcJr (INT 16/AH=05h"PCjr" supported)
+ 4 SendOut (sound and message output supported)
+ 3 SupInt16fct5500 (INT 16/AX=5500h supported)
+ 2 GuINT15Fct4F (calls to INT 15/AH=4Fh supported)
+ 1-0 UseBufferStart (0=use standard area, 1=set standard area,
+ 2=use internal indexes, 3=reserved)
+
+Bitfields for K3 internal flags A:
+Bit(s) Description (Table 00611)
+ 7 DoingUmlautExp
+ 6 CallINT15fct4F
+ 5 Beep1 (requires SendOut set in option flags B)
+ 4 ATflag (set for AT, 386, PS/2 Models 50-80)
+ 3 XTflag (set for PC, PC/XT, Micromint PC, Pencock PC, PS/2 Model 30)
+ 2 KeyClick
+ 1 UmlautExp
+ 0 UmlautTrans
+
+Bitfields for K3 internal flags B:
+Bit(s) Description (Table 00612)
+ 7-5 reserved
+ 4 TranslateE0 enabled
+ 3 Boot enabled
+ 2 PrintScreen enabled
+ 1 Break enabled
+ 0 ApoPendingBeep
+--------K-16AF50BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.0+) - CHECK IF FUNCTION SUPPORTED
+ AX = AF50h
+ BX = 4B33h ('K3')
+ CH = function
+ 00h get function flags
+ CL = 00h
+ Return: CX = supported function flags (see #00613)
+ nonzero reserved for extensions
+SeeAlso: AX=AF20h,AX=AF4Dh,AX=AF51h,AX=AF80h
+
+Bitfields for K3PLUS supported function list:
+Bit(s) Description (Table 00613)
+ 0 function 4Dh supported
+ 1 function 50h supported
+ 2-3 reserved (0)
+ 4 function 20h supported
+ 5 function 25h supported
+ 6 function 51h supported
+ 7 reserved (0)
+ 8 function 80h supported
+ 9 function 81h supported
+ 10 function 82h supported
+ 11-15 reserved (0)
+--------K-16AF51BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.00+) - SET OPTIONS
+ AX = AF51h
+ BX = 4B33h ('K3')
+ CX = switches
+Return: AL = status
+ 00h done
+ CX = previous switch settings
+ 01h switch not supported
+ FFh other error
+SeeAlso: AX=AF4Dh,AX=AF50h,AX=AF80h
+--------K-16AF80BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.00+) - GET ORIGINAL INT 09h VECTOR
+ AX = AF80h
+ BX = 4B33h ('K3')
+Return: AL = status
+ 00h not supported
+ 81h if successful
+ ES:CX -> original INT 09 handler
+SeeAlso: AX=AF4Dh,AX=AF50h,AX=AF81h,AX=AF82h
+--------K-16AF81BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.00+) - GET ORIGINAL INT 16h HANDLER
+ AX = AF81h
+ BX = 4B33h ('K3')
+Return: AL = status
+ 00h not supported
+ 82h if successful
+ ES:CX -> original INT 16 handler
+SeeAlso: AX=AF4Dh,AX=AF50h,AX=AF80h,AX=AF82h
+--------K-16AF82BX4B33-----------------------
+INT 16 - K3PLUS v6.00+ (API v2.00+) - GET ORIGINAL INT 10h HANDLER
+ AX = AF82h
+ BX = 4B33h ('K3')
+Return: AL = status
+ 00h not supported
+ 83h if successful
+ ES:CX -> original INT 10 handler
+Program: K3PLUS is an extended keyboard driver by Matthias Paul and Axel C.
+ Frinke, originally based on the K3 extended German keyboard driver
+ by Martin Gerdes published in c't magazine in 1988
+SeeAlso: AX=AF4Dh,AX=AF50h,AX=AF80h,AX=AF81h,INT 2F/AX=ED58h
+--------m-16B0B1-----------------------------
+INT 16 - VGARAM v1.00 - INSTALLATION CHECK
+ AX = B0B1h
+ ES:DI -> 6 byte signature "VGARAM"
+Return: AX = B1B0h if installed,
+ DS:BX -> VGARAM Status byte: 0 = OFF, 1 = ON
+Program: VGARAM is a utility by Brett Warthen which makes VGA memory which is
+ not used in text modes available for DOS
+--------K-16CA--BX736B-----------------------
+INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
+ AH = CAh
+ BX = 736Bh ("sk")
+ CX = 736Bh
+ AL = function
+ 00h installation check
+ Return: DX = words available in keyboard buffer
+ 01h place keystroke in buffer
+ DX = keystroke (DH = scan code, DL = ASCII character)
+ Return: DX = words available in keyboard buffer
+ FFFFh on error
+ 02h flush STACKEY and BIOS keyboard buffers
+Return: AX = CAFFh if installed
+ BX = segment of resident code
+ CX = STACKEY version (CH = major, CL = minor)
+Program: STACKEY is a shareware keyboard-input faking TSR
+Index: installation check;STACKEY
+--------V-16CA00BX6570-----------------------
+INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
+ AX = CA00h
+ BX = 6570h ("ep")
+ CX = 6570h
+Return: AX = CAFFh if installed
+ BX = segment of resident code
+ CX = ??? (0090h)
+Program: EGAPAL is a TSR supplied with STACKEY which makes EGA palette
+ settings permanent across mode switches
+SeeAlso: AX=CA00h/BX=7670h
+--------V-16CA00BX7670-----------------------
+INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
+ AX = CA00h
+ BX = 7670h ("vp")
+ CX = 7670h
+Return: AX = CAFFh if installed
+ BX = segment of resident code
+ CX = ??? (0090h)
+Program: VGAPAL is a TSR supplied with STACKEY which makes VGA palette
+ settings permanent across mode switches
+SeeAlso: AX=CA00h/BX=6570h
+--------U-16CB00-----------------------------
+INT 16 - PUPClip v1.12+ - INSTALLATION CHECK
+ AX = CB00h
+Return: BX = 4342h if installed
+ AX = version (AH = major version, AL = BCD minor version)
+Program: PUPClip is the freeware PopUP Clipboard for DOS and Windows DOS
+ sessions by SkullC0DEr
+SeeAlso: AX=CB01h,AX=CB02h,AX=CB03h,AX=CB04h,AX=CB05h,AX=CB06h,AX=CB08h
+SeeAlso: INT 2F/AX=1701h
+--------U-16CB01-----------------------------
+INT 16 - PUPClip v1.12+ - GET CLIPBOARD CURSOR POSITION
+ AX = CB01h
+Return: BL = column (0-79)
+ BH = row (0-49)
+SeeAlso: AX=CB00h,AX=CB02h,AX=CB03h
+--------U-16CB02-----------------------------
+INT 16 - PUPClip v1.12+ - SET CLIPBOARD CURSOR POSITION
+ AX = CB02h
+ BL = column (0-79)
+ BH = row (0-49)
+Return: CF clear if successful
+ CF set on error (invalid position)
+SeeAlso: AX=CB00h,AX=CB01h,AX=CB04h
+--------U-16CB03-----------------------------
+INT 16 - PUPClip v1.12+ - GET CHARACTER FROM CURRENT CLIPBOARD CURSOR POSITION
+ AX = CB03h
+Return: BL = ASCII character at current position
+SeeAlso: AX=CB00h,AX=CB02h,AX=CB04h,INT 2F/AX=1705h
+--------U-16CB04-----------------------------
+INT 16 - PUPClip v1.12+ - WRITE CHARACTER TO CURRENT CLIPBOARD CURSOR POSITION
+ AX = CB04h
+ BL = ASCII character to store
+SeeAlso: AX=CB00h,AX=CB02h,AX=CB03h,AX=CB05h,INT 2F/AX=1703h
+--------U-16CB05-----------------------------
+INT 16 - PUPClip v1.12+ - CLEAR CLIPBOARD CONTENTS
+ AX = CB05h
+Return: nothing
+SeeAlso: AX=CB00h,AX=CB04h,AX=CB06h,AX=CB07h,INT 2F/AX=1702h
+--------U-16CB06-----------------------------
+INT 16 - PUPClip v1.12+ - SCROLL UP CLIPBOARD CONTENTS
+ AX = CB06h
+Return: nothing
+SeeAlso: AX=CB00h,AX=CB05h,AX=CB07h
+--------U-16CB07-----------------------------
+INT 16 - PUPClip v1.12+ - SCROLL DOWN CLIPBOARD CONTENTS
+ AX = CB07h
+Return: nothing
+SeeAlso: AX=CB00h,AX=CB05h,AX=CB06h
+--------U-16CB08-----------------------------
+INT 16 - PUPClip v1.12+ - POP UP
+ AX = CB08h
+Return: CF clear if successful
+ CF set on error (unsupported video mode)
+SeeAlso: AX=CB00h
+--------U-16D724CX00CB-----------------------
+INT 16 U - APCAL v3.20 - GET ???
+ AX = D724h
+ CX = 00CBh
+Return: AX = 0000h
+ BX = 0000h
+ DX:CX -> ??? or 0000h:0000h
+Program: APCAL is an optionally-resident shareware appointment calendar by
+ Gamma Software
+SeeAlso: AX=3577h,AX=D724h/CX=00CCh,AX=D724h/CX=00CDh
+--------U-16D724CX00CC-----------------------
+INT 16 U - APCAL v3.20 - GET ???
+ AX = D724h
+ CX = 00CCh
+Return: AX = 0000h
+ BX = 0000h
+ DX:CX -> ??? (apparently an internal data area)
+SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CDh
+--------U-16D724CX00CD-----------------------
+INT 16 U - APCAL v3.20 - GET ???
+ AX = D724h
+ CX = 00CDh
+Return: AX = ??? (5345h seen)
+SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CCh
+--------v-16DD--------------------------
+INT 16 - VIRUS - "Frumble" - INSTALLATION CHECK
+ AH = DDh
+Return: AL = DDh if resident
+SeeAlso: INT 13/AX=FD50h,INT 21/AX=010Fh,INT 21/AX=0B56h
+--------s-16DFDF-----------------------------
+INT 16 U - Corel PowerSCSI - FDAUDIO.COM - INSTALLATION CHECK
+ AX = DFDFh
+Return: ES:DI -> ASCII signature "FDAUDIO/CD" followed by ASCII date, i.e.
+ "06/18/93" if installed
+--------b-16E000-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - GET VERSION NUMBER
+ AX = E000h
+Return: CF clear if successful
+ AL = FAh
+ BX = version number (BCD) (0200h = v2.00)
+ CF set on error (not implemented)
+Notes: this interface is available on AMI BIOSes built from AMI core version
+ 8/8/93 (HiFlex BIOS) or 11/15/93 (WinBIOS) or later
+ the "Meningitis" virus uses this API when attacking a system equipped
+ with an AMI BIOS; it is supposedly able to write itself into the
+ Flash ROM and thus make itself part of the BIOS
+SeeAlso: AX=E001h,AX=E004h,AX=E006h,AX=E008h,AX=E00Ah,AX=E00Bh,AX=E0FFh
+--------b-16E001-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - GET CHIPSET SAVE/RESTORE SIZE
+ AX = E001h
+Return: CF clear if successful
+ AL = FAh
+ BX = number of bytes required to save chipset configuration
+ CF set on error
+SeeAlso: AX=E000h,AX=E002h,AX=E003h
+--------b-16E002-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - SAVE CHIPSET STATUS & PREPARE CHPSET
+ AX = E002h
+ ES:DI -> buffer for storing chipset status
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+SeeAlso: AX=E000h,AX=E001h,AX=E003h
+--------b-16E003-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - RESTORE CHIPSET STATUS
+ AX = E003h
+ ES:DI -> buffer in which chipset status was previously stored
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+SeeAlso: AX=E000h,AX=E001h,AX=E002h
+--------b-16E004-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - LOWER PROGRAMMING VOLTAGE Vpp
+ AX = E004h
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Note: this function does not return until the voltage level stabilizes
+SeeAlso: AX=E000h,AX=E005h,AX=E006h
+--------b-16E005-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - RAISE PROGRAMMING VOLTAGE Vpp
+ AX = E005h
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Note: this function does not return until the voltage level stabilizes
+SeeAlso: AX=E000h,AX=E004h,AX=E007h
+--------b-16E006-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - FLASH WRITE PROTECT
+ AX = E006h
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Note: this function performs any delay required to allow the Flash ROM to
+ stabilize in the write-protected state
+SeeAlso: AX=E000h,AX=E004h,AX=E007h
+--------b-16E007-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - FLASH WRITE ENABLE
+ AX = E007h
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Note: this function performs any delay required to allow the Flash ROM to
+ stabilize in the write-enabled state
+SeeAlso: AX=E000h,AX=E005h,AX=E006h,AX=E008h
+--------b-16E008-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - FLASH SELECT
+ AX = E008h
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Desc: select the Flash ROM if the system contains both EPROM and Flash ROM
+Note: this function performs any delay required to allow the Flash ROM to
+ stabilize in the selected state; if no EPROM is present, this
+ function always returns successfully
+SeeAlso: AX=E000h,AX=E007h,AX=E009h
+--------b-16E009-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - FLASH DE-SELECT
+ AX = E009h
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Desc: select the EPROM if the system contains both EPROM and Flash ROM
+Note: this function performs any delay required to allow the Flash ROM to
+ stabilize in the de-selected state; if no EPROM is present, this
+ function always returns successfully
+SeeAlso: AX=E000h,AX=E006h,AX=E008h
+--------b-16E00A-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - VERIFY ALLOCATED MEMORY
+ AX = E00Ah
+ BX = number of paragraphs
+ ES = starting segment of memory
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Desc: determine whether the specified memory may be used for flash
+ programming
+Note: always returns error if BX is zero on entry
+SeeAlso: AX=E000h,AX=E00Bh
+--------b-16E00B-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - SAVE INTERNAL CACHE STATUS
+ AX = E00Bh
+ ES:DI -> buffer for internal cache status (minimum 4Kbytes)
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Note: always returns error if the hardware does not contain internal
+ cache or this call is made in protected mode
+SeeAlso: AX=E000h,AX=E00Ah,AX=E00Ch
+--------b-16E00C-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - RESTORE INTERNAL CACHE STATUS
+ AX = E00Ch
+ ES:DI -> buffer containing internal cache status (minimum 4Kbytes)
+Return: CF clear if successful
+ AL = FAh
+ CF set on error
+Note: always returns error if the hardware does not contain internal
+ cache or this call is made in protected mode
+SeeAlso: AX=E000h,AX=E00Bh
+--------t-16E0E0-----------------------------
+INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
+ AX = E0E0h
+Return: AX = 1F1Fh if installed
+ DWORD 0040h:00F0h -> last data block in TSR list (see #00615)
+Note: the returned TSR list provides support for communication among TSRs
+ built with TurboPower's Turbo Professional and Object Professional
+ libraries for Turbo Pascal
+SeeAlso: AX=F0F0h
+--------b-16E0FF-----------------------------
+INT 16 - AMI BIOS - BIOS-FLASH Interface - GENERATE CPU RESET
+ AX = E0FFh
+Return: never
+SeeAlso: AX=E000h,INT 14/AH=17h"FOSSIL"
+--------U-16ED--BHED-------------------------
+INT 16 - BORLAND TURBO LIGHTNING - API
+ AH = EDh
+ BH = EDh
+ BL = function
+ 00h installation check
+ Return: AX = 5205h
+ CH = major version
+ CL = minor version
+ 01h identical to function 00h???
+ 02h get resident data segment
+ Return: AX = data segment of resident portion
+ 03h get resident ???
+ Return: AX = offset of some buffer in resident code seg
+ 04h redefine auxiliary dictionary
+ DS:SI -> counted filename string
+ Return: AL = result code
+ 05h select active environment
+ AL = environment (00h to 0Ch)
+ Return: AX = status
+ 0000h if OK
+ 0001h if out of range
+ 06h toggle AutoProof???
+ AL = state (00h off, 01h on)
+ 07h ???
+ 08h ???
+ AL = char???
+ CX = ???
+ DX = ???
+ Return: AX = 0, 1 or 2
+ 09h ???
+ 0Ah ???
+ CX = ???
+ DX = ???
+ Return: AX = ???
+ 0Bh check dictionary integrity???
+ DS:SI -> counted dictionary filename string
+ Return: AX = 0, 40h, 80h
+ 0Ch spellcheck string (disk dictionary, possibly RAM dict as well)
+ DS:SI -> counted string to check
+ Return: AH = 0
+ AL = result code
+ 00h string found in dictionary
+ 20h string begins more than one word
+ 40h string not found
+ 0Dh set ???
+ (sets an internal flag)
+ 0Eh spellcheck string (RAM dictionary only)
+ DS:SI -> counted string to check
+ Return: AH = 00h
+ AL = result code
+ 00h string found in dictionary
+ 01h string not found
+ 02h ???
+ 0Fh ???
+ 10h ???
+Notes: AX in general returns an error code from most functions.
+Index: installation check;Turbo Lightning
+--------U-16EF-------------------------------
+INT 16 - CALCULATOR - INSTALLATION CHECK
+ AH = EFh
+Return: AX = 0088h if installed
+Program: CALCULATOR is a shareware popup calculator by Andrzej Brzezinski and
+ Marek Kosznik
+--------b-16F0-------------------------------
+INT 16 - Compaq 386 and newer - SET CPU SPEED
+ AH = F0h
+ AL = speed code (see #00614)
+ if AL=09h,
+ CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
+Note: also supported by some versions of AMI BIOS dated June 1992 or later;
+ speed codes 0 or 1 are used for Low Speed, 2 for High Speed
+SeeAlso: AH=F1h,AH=F3h
+
+(Table 00614)
+Values for speed code:
+ 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
+--------t-16F0F0-----------------------------
+INT 16 - TurboPower TSRs - INSTALLATION CHECK
+ AX = F0F0h
+Return: AX = 0F0Fh if installed
+ ES:DI -> last data block in TSR list (see #00615)
+Note: the returned TSR list provides support for communication among TSRs
+ built with TurboPower's Turbo Professional and Object Professional
+ libraries for Turbo Pascal
+SeeAlso: AX=E0E0h
+
+Format of TurboPower TSR data block:
+Offset Size Description (Table 00615)
+ 00h DWORD pointer to program tag (counted ASCII string)
+ 04h WORD interface version number (0400h)
+ 06h DWORD pointer to command entry point
+ 0Ah DWORD pointer to previous data block (0000h:0000h if none)
+ 0Eh DWORD pointer to next data block (0000h:0000h if none)
+---swappable TSRs only---
+ 12h DWORD pointer to swapping data
+ 16h DWORD pointer to user data
+ more???
+--------b-16F1-------------------------------
+INT 16 - Compaq 386 and newer - READ CURRENT CPU SPEED
+ AH = F1h
+Return: AL = speed code (see #00614)
+ if AL = 09h, CX = speed code
+Note: also supported by some versions of AMI BIOS dated June 1992 or later
+SeeAlso: AH=F0h,AH=F3h
+--------b-16F2-------------------------------
+INT 16 - Compaq 386 and newer - 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
+ AH = 00h (04/08/93 system ROM)
+SeeAlso: MEM 0040h:00C2h
+--------b-16F3-------------------------------
+INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
+ AH = F3h
+ AL = new limit
+ 00h limit is 6 Mhz
+ 01h limit is 8 Mhz/6 Mhz
+SeeAlso: AH=F0h,AH=F1h
+--------U-16F398-----------------------------
+INT 16 U - NORTON GUIDES - INSTALLATION CHECK
+ AX = F398h
+Return: AX = 6A73h ("js")
+ BH = BIOS scan code of current hot key
+ BL = ASCII code of current hot key
+Note: NG.EXE was written by John Socha
+--------b-16F400-----------------------------
+INT 16 - Compaq Systempro and higher - CACHE CONTROLLER STATUS
+ AX = F400h
+Return: AH = E2h (*)
+ AL = status
+ 00h not present
+ 01h enabled
+ 02h disabled
+ CX = cache memory size
+ bit 15: cache size information is NOT valid
+ bits 14-0: cache memory size in kilobytes
+ DH = cache write technology
+ bit 7: cache write information is NOT valid
+ bits 6-1: reserved (0)
+ bit 0: 0 = Write-through caching
+ 1 = Write-back caching
+ DL = cache type
+ bit 7: cache type information is NOT valid
+ bits 6-1: reserved (0)
+ bit 0: 0 = Direct mapped
+ 1 = Two-way set-associative
+Notes: also supported by some versions of AMI BIOS dated June 1992 or later
+ many (most) BIOSes return a modified AH when called for an unsupported
+ or non-keyboard function (typically, the highest supported keyboard
+ function [normally 12h] is subtracted from the original AH)
+SeeAlso: AX=F401h,AX=F402h
+--------b-16F401-----------------------------
+INT 16 - Compaq Systempro and higher - ENABLE CACHE CONTROLLER
+ AX = F401h
+Return: AX = E201h
+Notes: also supported by some versions of AMI BIOS dated June 1992 or later
+ many (most) BIOSes return a modified AH when called for an unsupported
+ or non-keyboard function (typically, the highest supported keyboard
+ function [normally 12h] is subtracted from the original AH)
+SeeAlso: AX=F400h,AX=F402h
+--------b-16F402-----------------------------
+INT 16 - Compaq Systempro and higher - DISABLE CACHE CONTROLLER
+ AX = F402h
+Return: AX = E202h
+Notes: also supported by some versions of AMI BIOS dated June 1992 or later
+ many (most) BIOSes return a modified AH when called for an unsupported
+ or non-keyboard function (typically, the highest supported keyboard
+ function [normally 12h] is subtracted from the original AH)
+SeeAlso: AX=F400h,AX=F401h
+--------v-16FA00DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK
+ AX = FA00h
+ DX = 5945h
+Return: CF clear
+ DI = 4559h
+ BX = BIOS hotkey scancode (default 2F00h) (VSAFE only)
+ FFFFh if disabled
+Note: MS-DOS 6.0 bundles VSAFE and VWATCH as part of its virus protection
+SeeAlso: AX=FA05h,INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
+--------v-16FA01DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
+ AX = FA01h
+ DX = 5945h
+Return: CF clear if successful
+ DI = 4559h
+SeeAlso: AX=FA00h
+--------v-16FA02DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET/SET OPTIONS
+ AX = FA02h
+ DX = 5945h
+ BL = new parameter flags (see #00616)
+Return: CF clear
+ DI = 4559h
+ CL = old value of parameter flags
+
+Bitfields for VSAFE/VWATCH parameter flags:
+Bit(s) Description (Table 00616)
+ 7 Protect executable files
+ 6 Protect FD boot sector
+ 5 Protect HD boot sector
+ 4 Boot sector viruses
+ 3 Check executable files
+ 2 General write protect
+ 1 Resident
+ 0 HD Low level format
+--------v-16FA03DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
+ AX = FA03h
+ DX = 5945h
+Return: CF clear
+ DI = 4559h
+ AX = 0002h
+--------v-16FA04DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE - GET HOTKEY DISABLE FLAG
+ AX = FA04h
+ DX = 5945h
+Return: CF clear
+ DI = 4559h
+ BL = hotkey disable flag (nonzero if hotkey disabled)
+Note: this function is a NOP under VWATCH, merely returning CF clear/DI=4559h
+SeeAlso: AX=FA00h,AX=FA05h
+--------v-16FA05DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE - SET HOTKEY DISABLE FLAG
+ AX = FA05h
+ DX = 5945h
+ BL = new value of hotkey disable flag (nonzero to disable hotkey)
+Return: CF clear
+ DI = 4559h
+Note: this function is a NOP under VWATCH, merely returning CF clear/DI=4559h
+SeeAlso: AX=FA00h,AX=FA04h
+--------v-16FA06DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET NETWORK DRIVES TEST FLAG
+ AX = FA06h
+ DX = 5945h
+Return: CF clear
+ DI = 4559h
+ BL = test status
+ 00h don't monitor network drives (default for VWATCH v2.1)
+ FFh monitor network drives (default for VSAFE v2.0)
+ CL = ??? (only VSAFE 2.0)
+SeeAlso: AX=FA07h
+--------v-16FA07DX5945-----------------------
+INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET NETWORK DRIVES TEST FLAG
+ AX = FA07h
+ DX = 5945h
+ BL = new state
+ 00h don't monitor
+ 01h monitor network drives
+Return: CF clear
+ DI = 4559h
+Note: VWATCH v2.1 (from PC Tools 9.0) returns CF set instead
+SeeAlso: AX=FA00h,AX=FA06h
+--------v-16FA08DX5945-----------------------
+INT 16 U - PC Tools v9+ VWATCH v2.1 - ???
+ AX = FA08h
+ DX = 5945h
+Return: CF clear
+ DI = 4559h
+ AX = ??? (0002h)
+ BX = version (BH=major, BL=two-digit minor)
+Note: this function is not supported by the PC Tools 9.0 VSAFE v2.0
+SeeAlso: AX=FA00h,AX=FA06h
+--------U-16FE55-----------------------------
+INT 16 U - PC Tools v8+ programs - GET ???
+ AX = FE55h
+ CX = segment of resident program or 0000h for last loaded
+ DX = 0000h
+Return: DX = resident code segment (unchanged if CX=0000h on entry)
+ AX = ??? or 0000h
+Note: this call is supported by CPSCHED, CPTASK, DATAMON, DPROTECT, DRIVEMAP,
+ and DSKLIGHT beginning in PC Tools v8.0; programs other than CPTASK
+ seem to hook it merely to return the same AX as the CPTASK loaded
+ prior to them returned
+--------U-16FEA4-----------------------------
+INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - RESET ???
+ AX = FEA4h
+Return: nothing
+Note: this function is identical to AX=FFA4h, and is implemented by the same
+ code in DESKTOP
+SeeAlso: AX=FFA4h
+--------U-16FEC6-----------------------------
+INT 16 U - PC Tools v7+ CPSCHED - ENABLE/DISABLE CPSCHED API
+ AX = FEC6h
+ BL = new state (00h enabled, nonzero disabled)
+Return: nothing
+Desc: specify whether CPSCHED API calls other than this one and AX=FE55h will
+ be honored
+--------U-16FED3-----------------------------
+INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
+ AX = FED3h
+ DS:SI -> 92-byte data record for ???
+Return: ???
+Note: this function is identical to AX=FFD3h, and is implemented by the same
+ code in DESKTOP
+SeeAlso: AX=FFD3h
+--------U-16FEDC-----------------------------
+INT 16 U - PC Tools v7+ CPSCHED - UNHOOK INTERRUPTS
+ AX = FEDCh
+Return: AX,DX destroyed
+Index: uninstall;CPSCHED
+--------U-16FEEFCX0000-----------------------
+INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
+ AX = FEEFh
+ CX = 0000h
+Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
+ BX = segment of resident portion
+ DX = (CPSCHED v8.0) resident CS
+Note: this function is identical to AX=FFD3h, and is implemented by the same
+ code in DESKTOP
+SeeAlso: AX=FFEFh
+--------U-16FEF1-----------------------------
+INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
+ AX = FEF1h
+ BX = ???
+Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
+ DX = 5555h
+Note: this function is identical to AX=FFD3h, and is implemented by the same
+ code in DESKTOP
+SeeAlso: AX=FFF1h
+--------K-16FF-------------------------------
+INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
+ AH = FFh
+ DX = scan code
+Return: AL = status
+ 00h success
+ 01h failure
+Program: KBUF is a keyboard buffer expander by Mark Adler
+SeeAlso: AH=05h
+--------V-16FF-------------------------------
+INT 16 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - QUERY ZOOM INTERRUPT
+ AH = FFh
+Return: AL = interrupt number to which BIOS keyboard handler has been relocated
+ AL+1 = Zoom interrupt number
+ BX = hotkey
+Notes: the default interrupts are 60h for keyboard and 61h for Zoom interrupt;
+ the default hot key is F10
+ not all vendors include the Tseng TSR which supports these functions
+SeeAlso: INT 61/AX=0000h"OPTIMA",INT 61/AX=0005h"OPTIMA"
+Index: hotkeys;OPTIMA 1024 VGA
+----------16FF--BH00-------------------------
+INT 16 - FREEZE.COM - INSTALLATION CHECK
+ AH = FFh
+ BH = 00h
+Return: BH = FFh if installed
+Program: FREEZE is a PC Magazine utility
+--------d-16FF70BX0000-----------------------
+INT 16 U - PC Tools v8+ DRIVEMAP - INSTALLATION CHECK
+ AX = FF70h
+ BX = 0000h
+ CX = 4C69h ('Li')
+ DX = 6E6Bh ('nk')
+Return: AX = 0000h
+ CX = 4350h ('CP')
+ DH = major version
+ DL = minor version
+Program: DRIVEMAP is a redirector which allows drives on computers connected
+ over the parallel or serial ports to appear as local drives
+SeeAlso: AX=FF70h/BX=0001h,AX=FF70h/BX=0002h
+--------d-16FF70BX0001-----------------------
+INT 16 U - PC Tools v8+ DRIVEMAP - ???
+ AX = FF70h
+ BX = 0001h
+ DL = ???
+Return: AX = ???
+ DH = ???
+SeeAlso: AX=FF70h/BX=0000h,AX=FF70h/BX=0002h
+--------d-16FF70BX0002-----------------------
+INT 16 U - PC Tools v8+ DRIVEMAP - ???
+ AX = FF70h
+ BX = 0002h
+ CX = ???
+ DX = ???
+Return: AX = ??? or FFFEh/FFFFh on error
+ DL = ???
+BUG: DRIVEMAP will branch to random locations for BX values other than
+ those listed above for v8.0-9.0 because a) the incorrect register is
+ range-tested, resulting in BX=0003h-5CD6h being accepted as valid
+ function numbers, and b) the conditional which branches on invalid
+ function numbers jumps to the following instruction, becoming a NOP
+SeeAlso: INT 2F/AX=9203h"DRIVEMAP"
+Index: installation check;DRIVEMAP
+--------T-16FF80BX0000-----------------------
+INT 16 U - PC Tools v8+ CPTASK - INSTALLATION CHECK
+ AX = FF80h
+ BX = 0000h
+ CX = 0000h
+ DX = 0000h
+Return: CX = 5555h if installed
+Program: CPTASK is a task switcher by Central Point Software
+--------T-16FF80BX0001-----------------------
+INT 16 U - PC Tools v8+ CPTASK - GET ???
+ AX = FF80h
+ BX = 0001h
+ ???
+Return: DX:SI -> task list??? (ten entries of 70h bytes in v9.0)
+ BX = ??? (PSP segment of resident code???)
+--------T-16FF80BX0002-----------------------
+INT 16 U - PC Tools v8+ CPTASK - GET ???
+ AX = FF80h
+ BX = 0002h
+Return: DX:SI -> ???
+--------T-16FF80BX0003-----------------------
+INT 16 U - PC Tools v8+ CPTASK - GET ??? FLAGS
+ AX = FF80h
+ BX = 0003h
+Return: AX = flags (see #00617)
+SeeAlso: AX=FF80h/BX=0004h,AX=FF80h/BX=0006h
+
+Bitfields for CPTASK flags:
+Bit(s) Description (Table 00617)
+ 10 ???
+ 13 ???
+ 14 ???
+ 15 ???
+--------T-16FF80BX0004-----------------------
+INT 16 U - PC Tools v8+ CPTASK - SET ???
+ AX = FF80h
+ BX = 0004h
+ CX = new value of ???
+Return: ???
+Note: this function also sets bit 14 of the flags word returned by
+ AX=FF80h/BX=0003h
+--------T-16FF80BX0005-----------------------
+INT 16 U - PC Tools v8+ CPTASK - GET NUMBER OF ACTIVE TASKS???
+ AX = FF80h
+ BX = 0005h
+Return: AX = number of active tasks???
+--------T-16FF80BX0006-----------------------
+INT 16 U - PC Tools v8+ CPTASK - GET AND CLEAR ??? FLAG
+ AX = FF80h
+ BX = 0006h
+Return: AX = old state (0000h clear, 0001h set)
+Note: the tested flag is bit 13 of the flags returned by AX=FF80h/BX=0003h
+--------T-16FF80BX0007-----------------------
+INT 16 U - PC Tools v8+ CPTASK - ???
+ AX = FF80h
+ BX = 0007h
+ ES:DI -> ???
+ ???
+Return: ???
+--------T-16FF80BX0008-----------------------
+INT 16 U - PC Tools v8+ CPTASK - ???
+ AX = FF80h
+ BX = 0008h
+ ???
+Return: ???
+--------T-16FF80BX0009-----------------------
+INT 16 U - PC Tools v8+ CPTASK - GET ???
+ AX = FF80h
+ BX = 0009h
+Return: CL = ???
+ CH = ??? (01h or 02h)
+--------T-16FF80BX000A-----------------------
+INT 16 U - PC Tools v9+ CPTASK - SET ???
+ AX = FF80h
+ BX = 000Ah
+ DS:SI -> 128-byte buffer containing ???
+--------T-16FF80BX000B-----------------------
+INT 16 U - PC Tools v9+ CPTASK - SET ???
+ AX = FF80h
+ BX = 000Bh
+ DX = index of ??? task (1-10)
+--------T-16FF80BX000C-----------------------
+INT 16 U - PC Tools v9+ CPTASK - SET IDLE??? DELAY
+ AX = FF80h
+ BX = 000Ch
+ CX = new delay time in minutes
+--------T-16FF80BX4350-----------------------
+INT 16 U - PC Tools v8+ CPTASK - UNINSTALL
+ AX = FF80h
+ BX = 4350h ('CP')
+ CX = 5354h ('ST')
+Return: never returns; terminates all tasks and exits to program originally
+ calling CPTASK
+--------U-16FF90-----------------------------
+INT 16 U - PC Tools v8+ DESKTOP - ???
+ AX = FF90h
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FF91-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FF91h
+ ???
+Return: AX = 0000h
+Note: calls AX=FFFDh after ???
+SeeAlso: AX=FF92h,AX=FFFDh
+--------U-16FF92-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FF92h
+ ???
+Return: AX = 0000h
+Note: like AX=FF91h, but temporarily sets ??? to 3
+SeeAlso: AX=FF91h,AX=FFFDh
+--------U-16FF93-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
+ AX = FF93h
+--------U-16FF94-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - SET ???
+ AX = FF94h
+ CX = ??? (default 0017h)
+--------U-16FF95-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - SET ???
+ AX = FF95h
+ BX = ???
+--------U-16FF96-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FF96h
+ CL = ???
+Return: AX = ???
+--------U-16FF97-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FF97h
+ DS:DX -> buffer for ??? (see #00618)
+Return: ???
+
+Format of PC Tools DESKTOP buffer:
+Offset Size Description (Table 00618)
+ 00h 48 BYTEs ???
+ 30h 128 BYTEs ???
+--------U-16FF98-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
+ AX = FF98h
+ DX = byte offset in file of overlay header (see #00619)
+Return: BX = file handle for DESK.OVL file
+Desc: open the DESK.OVL file, seek to the specified offset, read in the
+ overlay header, and seek to the offset specified by the header
+
+Format of PC Tools DESKTOP overlay header:
+Offset Size Description (Table 00619)
+ 00h 12 BYTEs NUL-padded ASCII overlay filename
+ 0Ch DWORD offset within DESK.OVL file of actual overlay
+--------U-16FF99-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FF99h
+ ???
+Return: ???
+--------U-16FF9A-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
+ AX = FF9Ah
+Return: ES:BX -> name of current color scheme
+Note: available even if not popped up
+--------U-16FF9B-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - UNUSED
+ AX = FF9Bh
+Return: ???
+Note: sounds triple-length beep
+--------T-16FF9C-----------------------------
+INT 16 U - PC Tools v8+ CPTASK - SET/CLEAR ??? POINTER
+ AX = FF9Ch
+ BL = function
+ 00h set ??? pointer
+ DS:SI -> ???
+ 01h clear pointer to 0000h:0000h
+----------16FF9D-----------------------------
+INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
+ AX = FF9Dh
+ ES:BX -> ??? word
+Return: ???
+Note: if ES is non-zero, the word pointed at by ES:BX determines whether the
+ ??? flag is cleared (word = 0000h) or set (word is nonzero). The
+ flag is always cleared if ES=0000h.
+--------U-16FF9E-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FF9Eh
+ DL = ???
+ bit 7: ???
+ bits 6-0: function number??? (00h,01h,other)
+ ???
+Return: ???
+--------U-16FFA1-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FFA1h
+ ???
+Return: ???
+Note: same as AX=FFA2h, except ??? set to FFh
+SeeAlso: AX=FFA2h
+--------U-16FFA2-----------------------------
+INT 16 U - PC Tools v7+ DESKTOP - ???
+ AX = FFA2h
+ ???
+Return: ???
+Note: calls AX=FFC7h (remove window) and AX=FFFDh
+SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
+--------y-16FFA3BX0000-----------------------
+INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - INSTALLATION CHECK
+ AX = FFA3h
+ BX = 0000h
+ CX = 0000h
+Return: AX = segment of resident code
+ BX = 5555h
+ CX = 5555h
+Note: also supported by DOS 6 UNDELETE which is licensed from PC Tools
+SeeAlso: INT 21/AH=3Fh"NB.SYS",INT 21/AX=4101h,INT 2F/AX=6284h
+--------y-16FFA3BX0001-----------------------
+INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
+ AX = FFA3h
+ BX = 0001h
+ CX = 0001h
+Return: AX:BX -> ???
+ CX = BX
+--------y-16FFA3BX0002-----------------------
+INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
+ AX = FFA3h
+ BX = 0002h
+ CX = 0002h
+Return: AX = ??? (0 or 1)
+ CX = BX = AX
+--------y-16FFA3BX0003-----------------------
+INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
+ AX = FFA3h
+ BX = 0003h
+ CX = 0003h
+Return: AX = ??? (0 or 1)
+ CX = BX = AX
+--------y-16FFA3BX0004-----------------------
+INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
+ AX = FFA3h
+ BX = 0004h
+ CX = 0004h
+SeeAlso: AX=FFA3h/BX=0005h
+--------y-16FFA3BX0005-----------------------
+INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
+ AX = FFA3h
+ BX = 0005h
+ CX = 0005h
+SeeAlso: AX=FFA3h/BX=0004h
+--------y-16FFA3BX0006-----------------------
+INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
+ AX = FFA3h
+ BX = 0006h
+ CX = 0006h
+ DX = current PSP segment as known to DOS??? or 0000h
+--------d-16FFA3BXFFA3-----------------------
+INT 16 U - PC Tools v9 DSKLIGHT - INSTALLATION CHECK
+ AX = FFA3h
+ BX = FFA3h
+ CX = FFA3h
+Return: BX = CX = 5555h if installed
+ AX = resident code segment
+Program: DSKLIGHT is a TSR included with PC Tools v9+ which displays a disk-
+ access indicator on the screen; in v7 and v8, this function was
+ provided by DATAMON
+Note: DSKLIGHT chains to the previous handler if BX or CX is not FFA3h
+--------U-16FFA4-----------------------------
+INT 16 U - PC Tools v7-8 DESKTOP - ???
+ AX = FFA4h
+Return: ???
+Notes: available even when not popped up
+ sets unknown flag if ??? conditions met
+SeeAlso: AX=FEA4h
+--------c-16FFA5CX1111-----------------------
+INT 16 - PC-Cache v6+ - INSTALLATION CHECK
+ AX = FFA5h
+ CX = 1111h
+Return: CH = 00h if installed
+ ES:DI -> internal data (see #00620)
+ CL = cache state
+ 01h enabled
+ 02h disabled
+SeeAlso: INT 13/AH=27h,INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
+
+Format of PC-Cache internal data:
+Offset Size Description (Table 00620)
+-1Ch 20 BYTEs cached drive list, one byte per drive A: to T:
+ each byte is either blank (20h) or drive letter (41h-54h)
+ -8 BYTE ???
+ -7 WORD number of physical transfers (scaled down to 0000h-7FFFh)
+ -5 WORD number of saved transfers (scaled down to 0000h-7FFFh)
+ -3 3 BYTEs ???
+--------c-16FFA5CXAAAA-----------------------
+INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
+ AX = FFA5h
+ CX = AAAAh
+Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
+SeeAlso: AX=FFA5h/CX=CCCCh
+--------c-16FFA5CXCCCC-----------------------
+INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
+ AX = FFA5h
+ CX = CCCCh
+Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
+Note: delayed writes are automatically disabled on EXECing
+ (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
+ however, delayed writes are not automatically reenabled upon the
+ program's termination in v6.
+SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
+--------c-16FFA5CXDDDD-----------------------
+INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
+ AX = FFA5h
+ CX = DDDDh
+SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
+--------c-16FFA5CXEEEE-----------------------
+INT 16 - PC-Cache v6+ - ENABLE CACHE
+ AX = FFA5h
+ CX = EEEEh
+SeeAlso: AX=FFA5h/CX=DDDDh
+--------c-16FFA5CXFFFF-----------------------
+INT 16 - PC-Cache v6+ - FLUSH CACHE
+ AX = FFA5h
+ CX = FFFFh
+SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
+--------U-16FFA6-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ???
+ AX = FFA6h
+Return: DS:SI -> ???
+Note: available only when popped up
+--------U-16FFA7-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ??? PATH
+ AX = FFA7h
+Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
+--------U-16FFA8-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
+ AX = FFA8h
+ DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
+ ???
+Return: ???
+Notes: available only when popped up
+ strings copied into internal buffer, among other actions
+--------U-16FFA9-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET VERSION STRING
+ AX = FFA9h
+Return: DS:SI -> version string
+--------U-16FFAA-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
+ AX = FFAAh
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFAB-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET EDITOR SETTINGS???
+ AX = FFABh
+Return: DS:SI -> editor setting strings???
+--------U-16FFAC-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
+ AX = FFACh
+ DL = ???
+Note: available only when popped up
+--------U-16FFAD-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
+ AX = FFADh
+ DL = ???
+--------U-16FFAE-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ???
+ AX = FFAEh
+Return: AL = ???
+--------U-16FFAF-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
+ AX = FFAFh
+ DL = ???
+--------U-16FFB0-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
+ AX = FFB0h
+ BL = ???
+--------U-16FFB1-----------------------------
+INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
+ AX = FFB1h
+ ???
+Return: ???
+--------U-16FFB2-----------------------------
+INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET ???
+ AX = FFB2h
+Return: DS:SI -> ???
+--------U-16FFB3-----------------------------
+INT 16 U - PC Tools v5.5-8.0 DESKTOP - ???
+ AX = FFB3h
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFB4-----------------------------
+INT 16 U - PC Tools v5.5-8.0 DESKTOP - SET ??? FLAG
+ AX = FFB4h
+Note: available only when popped up
+SeeAlso: AX=FFBBh
+--------U-16FFB5-----------------------------
+INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET/SET WINDOW PARAMETERS
+ AX = FFB5h
+ BX = window specifier (000Fh to 0019h) (see #00621)
+ DX = 0000h get, nonzero = set
+ ES:DI -> window parameter buffer (see #00622)
+SeeAlso: AX=FFCBh
+
+(Table 00621)
+Values for PC Tools DESKTOP window specifier:
+ 000Fh comm/FAX
+ 0014h hotkey selection
+ 0015h ASCII table
+ 0016h system colors menu
+
+Format of PC Tools DESKTOP window parameters:
+Offset Size Description (Table 00622)
+ 00h BYTE rows in window, not counting frame
+ 01h BYTE columns in window, not counting frame
+ 02h BYTE row number of top of window
+ 03h BYTE 2*column number of left of window
+ 04h BYTE character attribute for ???
+ 05h BYTE character attribute for background/border
+ 06h BYTE character attribute for ???
+ 07h DWORD pointer to ??? on screen
+ 0Bh 4 BYTEs ???
+ 0Fh BYTE nonzero if window may be resized
+Note: if running in monochrome mode, character attributes at offsets 04h to
+ 06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
+ are changed to 07h on reading
+--------U-16FFB6-----------------------------
+INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET ???
+ AX = FFB6h
+Return: AH = ???
+ AL = ???
+--------U-16FFB7-----------------------------
+INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET/SET ???
+ AX = FFB7h
+ BX = direction
+ 0000h copy to buffer
+ else copy from buffer
+ DS:SI -> 70-byte buffer with ???
+Return: data copied
+Note: available only when popped up under v6.0+
+--------U-16FFB8-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET/SET???
+ AX = FFB8h
+ BH = subfunction
+ 00h get
+ Return: BL = old value of ???
+ CL = old value of ??? (v6.0+)
+ CH = old value of ??? (v6.0+)
+ nonzero set
+ BL = new value for ???
+ CL = new value for ??? (v6.0+)
+ CH = new value for ??? (v6.0+)
+ DH = ???
+ Return: AL = old value replaced by CL (v6.0+)
+ AH = old value replaced by CH (v6.0+)
+--------U-16FFB9-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFB9h
+ ???
+Return: AX = ???
+ CX = ???
+ DS:SI -> ???
+ ES:DI -> ???
+--------U-16FFBA-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFBAh
+ ???
+Return: AX = ???
+Note: available only when popped up
+--------U-16FFBB-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - CLEAR ??? FLAG
+ AX = FFBBh
+Note: available only when popped up
+SeeAlso: AX=FFB4h
+--------U-16FFBC-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - RESTORE ORIGINAL SCREEN???
+ AX = FFBCh
+--------U-16FFBD-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ??? DATABASE INDEXING MESSAGES
+ AX = FFBDh
+ ???
+Return: ???
+--------U-16FFBE-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFBEh
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFBF-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFBFh
+ BX = DOS file handle to write on
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFC0-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFC0h
+ ???
+Return: AX = 0000h if successful
+ AX = FFFFh on error
+Note: available only when popped up
+--------U-16FFC1-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFC1h
+ BL = ???
+ ES:DI -> data structure (see #00623)
+ ???
+Return: AX = ???
+Note: available only when popped up
+SeeAlso: AX=FFC2h,AX=FFC3h
+
+Format of PC Tools DESKTOP data structure:
+Offset Size Description (Table 00623)
+ 00h WORD ???
+ 02h WORD ???
+ 04h WORD ???
+ 06h WORD ???
+ 08h WORD ???
+ 0Ah BYTE ???
+ 0Bh BYTE ??? (zero/nonzero)
+---v7.1---
+ 0Ch WORD ???
+ 0Eh BYTE ???
+ 0Fh WORD ???
+ 11h WORD ???
+ ???
+--------U-16FFC2-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFC2h
+ BL = ???
+ ES:DI -> data structure (see #00623)
+ ???
+Return: AH = ???
+ CX = ???
+ DH = ???
+ DL = ???
+Note: available only when popped up
+SeeAlso: AX=FFC1h,AX=FFC3h
+--------U-16FFC3-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFC3h
+ BL = ???
+ ES:DI -> data structure (see #00623)
+ ???
+Return: AH = ???
+ CX = ???
+ DH = ???
+ DL = ???
+Note: available only when popped up
+SeeAlso: AX=FFC1h,AX=FFC2h
+--------U-16FFC4-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
+ AX = FFC4h
+Return: AL = ???
+ BX = segment of scratch space???
+ CX = segment of stored screen data (section covered by window???)
+ DX = segment of window parameters for ???
+ ES:BP -> ???
+Note: available only when popped up in versions prior to 6.0
+--------U-16FFC5-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - CHECK WHETHER DESKTOP LOADED RESIDENT
+ AX = FFC5h
+Return: BL = Desktop state
+ 00h if nonresident
+ nonzero if loaded resident
+Note: available only when popped up; should call AX=FFEFh first to ensure
+ that DESKTOP is active
+SeeAlso: AX=FFEFh,AX=FFF3h
+--------U-16FFC6-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
+ AX = FFC6h
+ BL = new value for ???
+--------U-16FFC7-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - REMOVE WINDOW
+ AX = FFC7h
+ ???
+Return: ???
+--------U-16FFC8-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
+ AX = FFC8h
+Return: DS:SI -> ???
+Note: valid only while popped up
+--------U-16FFC9-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - COPY DATA TO CLIPBOARD
+ AX = FFC9h
+ DS:SI -> characters to store in clipboard
+ CX = size in bytes
+Return: CF set on error
+Notes: available only when popped up
+ while copying, bytes of 00h and 0Ah are skipped
+--------U-16FFCA-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
+ AX = FFCAh
+ DX = ???
+Return: AX destroyed
+Note: available only when popped up
+--------U-16FFCB-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SELECT WINDOW PARAMETERS???
+ AX = FFCBh
+ DX = window specifier???
+Return: AX destroyed
+Note: available only when popped up
+SeeAlso: AX=FFB5h
+--------U-16FFCC-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY ASCIZ STRING CENTERED IN WINDOW
+ AX = FFCCh
+ DS:SI -> ASCIZ string
+Return: AX = ???
+ CX = ???
+ ES:DI -> address past last character displayed (v5.1/5.5)
+ -> ??? on menu bar (v6.0)
+--------U-16FFCD-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFCDh
+ DS:DX -> ???
+Return: ???
+Note: available only when popped up
+--------U-16FFCE-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ??? DELAYS
+ AX = FFCEh
+ CX = ???
+Return: nothing???
+--------U-16FFCF-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - CLOSE PRINTER/PRINT FILE
+ AX = FFCFh
+Note: available only when popped up
+--------U-16FFD0-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - PREPARE TO PRINT???
+ AX = FFD0h
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFD1-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY PRINT OPTIONS MENU
+ AX = FFD1h
+Return: BX = number of copies
+ DX = destination
+ 00h cancel
+ 01h LPT1
+ 02h LPT2
+ 03h LPT3
+ 04h COM1
+ 05h COM2
+ 06h disk file
+Note: available only when popped up
+--------U-16FFD2-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFD2h
+ BX = ???
+Return: BL = ???
+Note: available only when popped up
+--------U-16FFD3-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFD3h
+ DS:SI -> 92-byte data record for ???
+Return: ???
+SeeAlso: AX=FED3h
+--------U-16FFD4BH3C-------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - CREATE/OPEN/DELETE FILE
+ AX = FFD4h
+ BH = 3Ch create file (with no attributes)
+ 3Dh open file
+ 41h delete file
+ BL = access mode
+ 00h read only
+ 01h write only
+ 02h read/write
+ DS:SI -> ASCIZ filename
+Return: BX = file handle
+ 0000h on error
+Note: operation is attempted in (in order) the directory from which the
+ desktop was started/run???, the directory specified with the
+ filename, X:\PCTOOLS\, and X:\
+--------U-16FFD5-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFD5h
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFD6-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFD6h
+ BX = ???
+ CX = ???
+ DX = offset in ???
+ ???
+Return: ???
+Note: available only when popped up
+--------U-16FFD7-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFD7h
+ ???
+Return: BL = ???
+Note: available only when popped up
+--------U-16FFD8-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SAFE CREATE FILE
+ AX = FFD8h
+ DS:BX -> ASCIZ filename
+Return: BX = file handle
+ 0000h on error
+Note: pops up confirmation menu if file already exists
+ only available when popped up???
+--------U-16FFD9-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
+ AX = FFD9h
+Return: AX = ???
+Note: available only when popped up
+--------U-16FFDA-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET NAME OF LAST FILE OPENED
+ AX = FFDAh
+ DS:SI -> ??? (v5.1/5.5 only)
+Return: DS:SI -> filename
+--------U-16FFDB-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
+ AX = FFDBh
+ BL = ???
+Note: available only when popped up
+--------U-16FFDC-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - UNHOOK
+ AX = FFDCh
+Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
+ original values
+Index: uninstall;PC Tools DESKTOP
+--------U-16FFDDBX0000-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
+ AX = FFDDh
+ BX = 0000h
+Return: CX = 5555h
+ DX = 5555h if PCShell installed in resident mode
+--------U-16FFDDBX0001-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
+ AX = FFDDh
+ BX = 0001h
+Return: CF clear if request successful (PCShell will pop up)
+ CF set on error
+SeeAlso: AX=FFDDh/BX=0003h
+--------U-16FFDDBX0002-----------------------
+INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
+ AX = FFDDh
+ BX = 0002h
+Return: AL =
+ 00h ???
+ 01h ???
+Note: PCShell v6.0+ displays the error message "Incorrect PCRUN version",
+ awaits a keystroke, and aborts the current process
+--------U-16FFDDBX0003-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
+ AX = FFDDh
+ BX = 0003h
+SeeAlso: AX=FFDDh/BX=0001h
+--------U-16FFDDBX0004-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - GET ???
+ AX = FFDDh
+ BX = 0004h
+Return: CF clear if successful
+ DS:SI -> ???
+--------U-16FFDDBX0005-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - ???
+ AX = FFDDh
+ BX = 0005h
+ ???
+Return: ???
+Note: resets various variables if certain conditions are met
+--------U-16FFDDBX0006-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - ???
+ AX = FFDDh
+ BX = 0006h
+ ???
+Return: ???
+Note: resets various variables if certain conditions are met
+--------U-16FFDDBX0007-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
+ AX = FFDDh
+ BX = 0007h
+Return: CF clear if successful
+SeeAlso: AX=FFDDh/BX=0008h
+--------U-16FFDDBX0008-----------------------
+INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
+ AX = FFDDh
+ BX = 0008h
+Return: CF undefined
+SeeAlso: AX=FFDDh/BX=0007h
+--------U-16FFDDBX0009-----------------------
+INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
+ AX = FFDDh
+ BX = 0009h
+Return: CF clear if successful
+ DS:SI -> list of pointers (see #00624)
+
+Format of PC Tools PCShell returned pointer list:
+Offset Size Description (Table 00624)
+ 00h WORD offset of WORD containing ???
+ 02h WORD offset of name of program to execute
+ 04h WORD offset of 80-byte buffer for ???
+ 06h WORD offset of buffer for ??? (length in WORD preceding buffer)
+ 08h WORD offset of buffer for ??? (length in WORD preceding buffer)
+--------U-16FFDDBX000A-----------------------
+INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
+ AX = FFDDh
+ BX = 000Ah
+Return: CX = 5555h if running
+ DX = 5555h
+Note: also sets a flag
+--------U-16FFDDBX000B-----------------------
+INT 16 U - PC Tools v6.0+ PCRUN API - ???
+ AX = FFDDh
+ BX = 000Bh
+ ???
+Return: CX = 5555h if PCRUN active
+ DX = 5555h
+Note: also clears flag set by AX=FFDDh/BX=000Ah
+--------U-16FFDE-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY POPUP MENU
+ AX = FFDEh
+ DS:DX -> menu description (must be on a paragraph boundary)
+Return: AX = ???
+ AL seems to be the number of the selected button
+Note: available only when popped up
+SeeAlso: AX=FFEEh
+--------U-16FFDF-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFDFh
+ ???
+Return: ???
+--------U-16FFE0-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFE0h
+ CX = ???
+ DX = ???
+Note: available only when popped up
+--------U-16FFE1-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - BEEP
+ AX = FFE1h
+--------U-16FFE2-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFE2h
+ DX = ???
+Return: ???
+Note: available only when popped up
+--------U-16FFE3-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - PRINT CHARACTER
+ AX = FFE3h
+ BL = character to print to currently open printer or print file
+Return: CF set on error
+Note: available only when popped up
+SeeAlso: INT 17/AH=00h
+--------U-16FFE4-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFE4h
+ DX = segment of ???
+Return: ???
+Note: available only when popped up
+--------U-16FFE5-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - POP UP FILE SELECTION MENU
+ AX = FFE5h
+ DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
+ DX = segment of window parameters???
+Return: AX = DOS file handle for file
+ DS:DX -> filename???
+ FFFFh if function cancelled by user
+Note: available only when popped up
+SeeAlso: AX=FFDAh
+--------U-16FFE6-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - CHECK FOR AND GET KEYSTROKE
+ AX = FFE6h
+Return: AX = 0000h if no key available
+ else BIOS keycode
+Notes: available only when popped up
+ invokes INT 28 idle interrupt before checking for key
+--------U-16FFE7-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFE7h
+ BX = segment of ???
+Return: ???
+Note: available only when popped up
+--------U-16FFE8-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY NUMBER
+ AX = FFE8h
+ CX = number
+ DH = attribute
+ DS:SI -> destination for ASCII number
+Return: DS:SI buffer filled in with alternating characters and attributes
+--------U-16FFE9-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET FILE LIST???
+ AX = FFE9h
+Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
+Note: available only when popped up
+--------U-16FFEA-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY COUNTED STRING
+ AX = FFEAh
+ DS:SI -> counted string (count byte followed by string)
+Return: ???
+Note: available only when popped up
+--------U-16FFEB-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFEBh
+ ???
+Return: ???
+--------U-16FFEC-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET KEY
+ AX = FFECh
+ DS:SI -> FAR routine to ???
+ BX = ???
+ ???
+Return: AX = keystroke
+ FFFFh if F10 pressed to go to menu
+Notes: available only when popped up
+ invokes INT 28 while waiting for keystroke
+ F10 is hotkey to Desktop menu
+Index: hotkeys;PC Tools DESKTOP
+--------U-16FFED-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
+ AX = FFEDh
+Return: AX = ???
+Note: available only when popped up
+--------U-16FFEE-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE PULLDOWN MENUS
+ AX = FFEEh
+ DS:SI -> pulldown menu system description (see #00625)
+Return: AX destroyed
+Notes: available only when popped up
+ if the accessory does not need any menu items of its own, it should
+ call AX=FFFAh instead
+SeeAlso: AX=FFF7h,AX=FFFAh
+
+Format of PC Tools DESKTOP pulldown menu system description:
+Offset Size Description (Table 00625)
+ 00h WORD offset of menu bar contents (counted string)
+ 02h WORD number of items on menu bar
+ 04h 10 BYTEs scan codes for hotkeying to each of up to ten menu items
+ 0Eh 10 BYTEs which character to highlight in each menu item (01h=first)
+ 18h WORD offset of first menu definition (see #00626)
+ 1Ah WORD offset of second menu definition
+ ...
+
+Format of PC Tools DESKTOP menu definition:
+Offset Size Description (Table 00626)
+ 00h WORD offset of menu contents (see #00627)
+ 02h WORD number of entries in menu
+ 04h for each entry:
+ Offset Size Description
+ 00h BYTE scancode of Alt-key to invoke entry
+ 01h BYTE character to highlight (01h=first, etc)
+ 02h WORD offset of FAR routine to handle selection
+
+Format of PC Tools DESKTOP menu contents:
+Offset Size Description (Table 00627)
+ 00h BYTE number of lines in menu
+ 01h BYTE width of menu
+ 02h N BYTEs counted strings, one for each line in menu
+--------U-16FFEFCX0000-----------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - INSTALLATION CHECK
+ AX = FFEFh
+ CX = 0000h
+Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
+ BX = segment of resident portion
+ AX = ??? (v5.1/5.5 only)
+SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
+--------U-16FFF0-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
+ AX = FFF0h
+ DX = ???
+Return: AX destroyed
+Note: available only when popped up
+--------U-16FFF1BX0000-----------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ALTERNATE INSTALLATION CHECK
+ AX = FFF1h
+ BX = 0000h leave ??? flag as is
+ nonzero set ??? flag
+Return: CX = 5555h if installed
+ DX = 5555h
+--------U-16FFF2-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY HELP LINE
+ AX = FFF2h
+ DS:SI -> ASCIZ function key label string (each label preceded by '[')
+ or help text
+Return: AX destroyed
+Notes: available only when popped up
+ if the specified string does not start with '[', it is displayed
+ centered on the bottom line, else the function key labels are shown
+--------U-16FFF3-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - PREPARE TO UNLOAD RESIDENT DESKTOP
+ AX = FFF3h
+Note: releases any EMS being used; restores video mode, page, and cursor
+ shape; and restores interrupt vectors
+SeeAlso: AX=FFC5h,AX=FFEFh
+Index: uninstall;PC Tools DESKTOP
+--------U-16FFF4-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
+ AX = FFF4h
+ ???
+Return: ???
+Note: available only when popped up
+SeeAlso: AX=FFF6h
+--------U-16FFF5-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET SCREEN ATTRIBUTE ARRAY
+ AX = FFF5h
+Return: ES:BX -> screen attributes data structure (see #00628)
+ AL = ??? (v6.0+)
+
+Format of PC Tools DESKTOP attribute data structure:
+Offset Size Description (Table 00628)
+ -1 BYTE attribute for desktop background
+ 00h BYTE attribute for normal characters on desktop menu
+ 01h BYTE attribute for highlighted characters on desktop menu
+ 02h 5 BYTEs ???
+ 07h BYTE attribute for dialog boxes
+ 08h 15 BYTEs ???
+ 17h BYTE attribute for message boxes
+--------U-16FFF6-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - INVOKE NOTEPAD EDITOR
+ AX = FFF6h
+ DS = segment of editor buffer structure (see #00629)
+ BX = ???
+ DX = segment of window parameters structure (see #00622)
+Return: ???
+Note: available only when popped up
+SeeAlso: AX=FFF4h
+
+Format of PC Tools DESKTOP editor buffer structure:
+Offset Size Description (Table 00629)
+ 00h WORD offset of current cursor position in buffer segment
+ 02h 2 BYTEs ???
+ 04h WORD offset of beginning of file data in buffer segment
+ 06h 10 BYTEs ???
+ 10h N BYTEs ASCIZ name of file being edited
+--------U-16FFF7-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - PROCESS MENU BAR ENTRY???
+ AX = FFF7h
+ DS:SI -> ???
+ ???
+Return: ???
+Notes: available only when popped up
+ performs input processing on the menu bar set up with AX=FFEEh
+SeeAlso: AX=FFEEh,AX=FFFBh
+--------U-16FFF8-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DRAW EMPTY WINDOW
+ AX = FFF8h
+ DS:0000h -> window parameters structure (see #00622)
+ DS:BX -> DWORD to store address of ??? on screen
+Return: ???
+--------U-16FFF9-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE SCREEN REFRESH ROUTINE
+ AX = FFF9h
+ ES:BX -> FAR routine to redisplay the utility's window
+Note: available only when popped up
+--------U-16FFFA-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE STANDARD PULLDOWN MENUS
+ AX = FFFAh
+Notes: available only when popped up
+ adds the "Window" option to the "Desktop" option which is the only one
+ available when no accessories are active. Unlike AX=FFEEh, no
+ additional menu items are added between "Desktop" and "Window"
+SeeAlso: AX=FFEEh,AX=FFFBh
+--------U-16FFFB-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - PROCESS STANDARD MENU BAR
+ AX = FFFBh
+Return: ???
+Notes: available only when popped up
+ performs input processing on the standard menu bar set up with AX=FFFAh
+SeeAlso: AX=FFF7h
+--------U-16FFFC-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET HOTKEYS AND KEYBOARD VECTOR
+ AX = FFFCh
+Return: ES:BX -> hotkey table (see #00630)
+ DS:DX = original INT 09 vector
+
+Format of PC Tools DESKTOP hotkey table:
+Offset Size Description (Table 00630)
+ 00h 2 BYTEs scancode/shift state for desktop hotkey
+ 02h 2 BYTEs scancode/shift state for clipboard paste key
+ 04h 2 BYTEs scancode/shift state for clipboard copy key
+ 06h 2 BYTEs scancode/shift state for screen autodial key
+--------U-16FFFD-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - COPY ???
+ AX = FFFDh
+Return: AX destroyed
+Note: copies 4000 bytes from ??? to ??? under certain circumstances
+SeeAlso: AX=FF91h,AX=FF92h
+--------M-16FFFE-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - SHOW MOUSE CURSOR
+ AX = FFFEh
+SeeAlso: AX=FFFFh,INT 33/AX=0001h
+--------M-16FFFF-----------------------------
+INT 16 U - PC Tools v5.1-8.0 DESKTOP - HIDE MOUSE CURSOR
+ AX = FFFFh
+SeeAlso: AX=FFFEh,INT 33/AX=0002h
+--------P-17----DX0ABC-----------------------
+INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
+ DX = 0ABCh
+Return: AX = AAAAh
+ DX = BAAAh
+ ES = code segment of resident portion
+--------P-17----DX0B90-----------------------
+INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
+ DX = 0B90h
+Return: DX = ABBBh
+ ES = code segment of resident portion
+--------P-17----DX0B91-----------------------
+INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
+ DX = 0B91h
+Return: DX = ABCBh
+ ES = code segment of resident portion
+--------P-17----DX0F5F-----------------------
+INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
+ DX = 0F5Fh
+Return: AX = AAAAh
+ DX = F555h
+ ES = code segment of resident portion
+--------B-1700-------------------------------
+INT 17 - PRINTER - WRITE CHARACTER
+ AH = 00h
+ AL = character to write
+ DX = printer number (00h-02h)
+Return: AH = printer status (see #00631)
+Note: Under PhysTechSoft's PTS ROM-DOS the parallel port can also be
+ accessed as COM5.
+BUGS: Some print spoolers trash the BX register on return.
+ Some original IBM BIOSes set more than one printer status bits at
+ a time, while only one of them is correct.
+SeeAlso: AH=02h,AH=84h"AX",AX=6F02h,AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
+SeeAlso: INT 4B/AH=00h,PORT 0278h"PRINTER",MEM 0040h:0008h,MEM 0040h:0078h
+
+Bitfields for printer status:
+Bit(s) Description (Table 00631)
+ 7 not busy
+ 6 acknowledge
+ 5 out of paper
+ 4 selected
+ 3 I/O error
+ 2-1 unused
+ 0 timeout
+Notes: If both, bit 5 "out of paper" and 4 "selected" are set, the MS-DOS/
+ PC DOS kernel assumes that no printer is attached.
+ for Tandy 2000, bit 7 indicates printer-busy when set rather than clear
+--------B-1701-------------------------------
+INT 17 - PRINTER - INITIALIZE PORT
+ AH = 01h
+ DX = printer number (00h-02h)
+Return: AH = printer status (see #00631)
+Note: some printers report that they are ready immediately after
+ initialization when they actually are not; a more reliable result may
+ be obtained by calling AH=02h after a brief delay
+SeeAlso: AH=02h,AH=FFh"PC-MOS",INT 1A/AH=10h"NEC",INT 4B/AH=01h
+--------B-1702-------------------------------
+INT 17 - PRINTER - GET STATUS
+ AH = 02h
+ DX = printer number (00h-02h)
+Return: AH = printer status (see #00631)
+Note: PRINTFIX from MS-DOS 5.0 hooks this function and always returns AH=90h
+SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC",INT 4B/AH=02h
+--------P-1702--DX0000-----------------------
+INT 17 - INSET - INSTALLATION CHECK
+ AH = 02h
+ DX = 0000h
+ CX = 07C3h (1987d)
+Return: CX = 07C2h (1986d) if installed
+Program: INSET is a text/graphics integration program
+--------b-170200BX5050-----------------------
+INT 17 - Enhanced Parallel Port (EPP) BIOS - INSTALLATION CHECK
+ AX = 0200h
+ BX = 5050h ('PP')
+ CH = 45h ('E')
+ DX = printer port number (00h-02h)
+Return: AH = status
+ 00h if installed and port is an enhanced parallel port
+ CX:AL = installed BIOS type
+ 5050h:45h ('PPE') if EPP v3.0+ BIOS installed
+ 4550h:50h ('EPP') if EPP v1.0 BIOS installed
+ ---EPP 1.0, 3.0---
+ DX:BX -> far entry point to Advanced BIOS (see #00632)
+ ---EPP Revision 7---
+ DX = EPP I/O base address
+ ES:BX -> far entry point to EPP BIOS (see #00632,#00633)
+ 03h if installed but specified port not supported
+ CF set
+Program: The Enhanced Parallel Port BIOS provides support for parallel
+ port peripherals using the enhanced modes of the IEEE 1284.
+SeeAlso: AH=E0h,MEM 0040h:0008h,MEM 0040h:00DCh
+
+(Table 00632)
+Call EPP BIOS entry point with:
+ DL = port number (v1.0,v3.0)
+ DX = (Revision 7) EPP port I/O base address
+ AH = function
+ 00h Query Configuration
+ Return: AH = 00h if successful
+ AL = IRQ number used by port or FFh if no IRQ
+ BH = EPP BIOS revision (major in high nybble,
+ minor in low nybble)
+ BL = I/O capabilities (see #00635)
+ ES:DI -> ASCIZ driver information/version text
+ ---v1.0,v3.0---
+ CX = I/O port base address for parallel port
+ ---Revision 7---
+ CL = EPP chipset code (see #00636)
+ CH = hardware manufacturer's product code
+ 01h Set Mode
+ AL = mode bits (see #00637)
+ Return: AX,BX destroyed
+ 02h Get Mode
+ Return: AL = mode bits (see also #00637)
+ bit 7: EPP port interrupts enabled
+ AH = 00h
+ CF clear
+ BX destroyed
+ 03h Interrupt Control
+ AL = subfunction
+ 00h enable parallel port interrupts
+ 01h disable parallel port interrupts
+ Return: AH = status (00h,05h,06h) (see also #00634)
+ 04h EPP Reset
+ Return: AH = 00h if successful
+ AL destroyed
+ 05h perform Address-Write/Device-Select I/O cycle
+ AL = device address
+ Return: AH = status
+ AL destroyed
+ 06h perform Address-Read I/O cycle
+ Return: AL = returned address/device data
+ AH = status
+ 07h write byte
+ AL = data byte to write
+ Return: AH = status
+ 08h output block of data
+ DS:SI -> block of data to be sent to parallel port
+ CX = number of bytes to output
+ Return: AH = status (see #00634)
+ CX = number of unsent bytes
+ 09h read byte of data
+ Return: AH = status (see #00634)
+ AL = byte read from parallel port
+ 0Ah read block of data
+ ES:DI -> buffer for received data
+ CX = number of bytes to read from paralle port
+ Return: AH = status (see #00634)
+ ES:DI buffer filled if successful
+ CX = number of bytes not transferred
+ 0Bh Address/Byte-Read
+ AL = device address
+ Return: AH = status (see #00634)
+ AL = byte read if successful
+ 0Ch Address/Byte-Write
+ AL = device address
+ DH = data byte (v1.0,v3.0)
+ CL = data byte (Revision 7)
+ Return: AH = status (see #00634)
+ 0Dh Address/Block-Read
+ AL = device address
+ ES:DI -> buffer for received data
+ CX = number of bytes to read
+ Return: AH = status (see #00634)
+ CX = number of bytes NOT transferred
+ 0Eh Address/Block-Write
+ AL = device address
+ ES:DI -> data to be sent (v1.0,v3.0)
+ DS:SI -> data to be send (Revision 7)
+ CX = number of bytes to write
+ Return: AH = status (see #00634)
+ CX = number of bytes NOT transferred
+ 0Fh Lock Port
+ AL = multiplexor port number
+ bits 7-4: daisy chain port number (1-8)
+ bits 3-0: mux device port number (1-8, 0 if no mux)
+ Return: AH = status (00h,03h,05h) (see #00634)
+ 10h Unlock Port
+ AL = multiplexor port number
+ bits 7-4: daisy chain port number (1-8)
+ bits 3-0: mux device port number (1-8, 0 if no mux)
+ Return: AH = status (00h,03h,05h) (see #00634)
+ 11h Device Interrupt
+ BL = multiplexor port number
+ 00h if no multiplexor, else mux device port (01h-08h)
+ AL = subfunction
+ 00h disable device interrupts
+ 01h enable device interrupt
+ ES:DI -> interrupt event handler
+ Return: AH = status (00h,03h,05h,06h) (see #00634)
+ Note: AMI BIOS v1.00.12.AX1T ignores the multiplexor port
+ number; it also always sets INT 0F to the address
+ specified in ES:DI
+ 12h Real-Time Mode
+ AL = subfunction
+ 00h check whether any real-time devices present
+ 01h add (advertise) real-time device
+ 02h remove real-time device
+ Return: AH = status (00h,05h,06h,07h) (see #00634)
+ AL = real-time devices present? (00h no, 01h yes)
+ Note: unlike all other functions, this one does not use DL/DX
+Return: AH = status (see #00634)
+ CF clear if successful
+ CF set on error
+ BX destroyed
+SeeAlso: #00633
+
+(Table 00633)
+Call EPP BIOS (Revision 7) entry point multiplexor functions with:
+ DX = EPP port base I/O address
+ AH = function
+ 40h Query Mux
+ Return: AH = status (see #00634)
+ AL = currently-selected port
+ CH = status flags
+ bit 0: channel locked
+ bit 1: interrupt pending
+ BH destroyed
+ Note: the PhoenixBIOS v4.0 documentation lists BL as the
+ currently-selected port and AL as the status flags
+ 41h Query Device Port
+ AL = EPP multiplex device port (1-8)
+ Return: AH = status (see #00634)
+ CH = status flags (see #00638)
+ BX = EPP product/device ID (0000h if undefined)
+ Note: the PhoenixBIOS v4.0 documentation lists AL as the
+ status flags and CX as the device ID
+ 42h Set Product ID
+ AL = EPP multiplex device port (1-8)
+ CX = EPP product ID
+ Return: AH = status (see #00634)
+ BX destroyed
+ 50h Query Daisy Chain
+ AL = EPP multiplexor device port (1-8)
+ Return: AH = status (see #00634)
+ CH = status flags
+ bit 0: channel locked
+ bit 1: interrupt pending
+ BL = currently-selected device
+ BH = EPP daisy chain revision (high nybble = major)
+ CL = daisy-chain depth (00h if no daisy chain)
+ ES:DI -> ASCIZ driver vendor identification string
+ Note: the PhoenixBIOS v4.0 documentation lists AH=51h as
+ "Query Daisy Chain" and BL as the multiplexor port;
+ it also lists AL as status flags on return
+ 51h Rescan Daisy Chain (dynamically reassign port numbers)
+ AL = EPP multiplexor device port (1-8)
+ Return: AH = status (see #00634)
+ BX destroyed
+ Note: the PhoenixBIOS v4.0 documentation lists AH=50h as
+ "Rescan Daisy Chain" and BL as the multiplexor port
+Notes: these functions are only valid if a port multiplexor or daisy chain
+ is present
+ PhoenixBIOS 4.0 documents function 50h as "Rescan" and 51h as
+ "Query Daisy Chain"
+SeeAlso: #00632,INT 2D/AL=DCh
+
+(Table 00634)
+Values for EPP BIOS function status:
+ 00h successful
+ 02h unsupported command/feature
+ 03h unsupported parallel port
+ 05h unsupported in current mode
+ 06h invalid subfunction
+ 07h already ???
+ 20h multiplexor not present (AMI)
+ 40h multiplexor not present
+ 41h multiplexor currently locked
+ 80h I/O timeout
+ FFh invalid/unsupported function
+SeeAlso: #00632,#00633
+
+Bitfields for EPP (v3.0, Revision 7) I/O capabilities:
+Bit(s) Description (Table 00635)
+ 0 multiplexor present
+ 1 PS/2 bi-directional capable
+ 2 daisy chain present
+ 3 ECP capable
+ 4 EPP software emulation supported
+ 5 EPP capable
+ 6 fast Centronics supported
+ 7 standard EPP I/O map
+SeeAlso: #00632
+
+(Table 00636)
+Values for EPP (Revision 7) chipset code:
+ 00h Intel SL
+ 01h FarPoint Communications
+ 02h SMC
+ 03h Chips&Technologies
+ 04h Western Digital
+ 05h National Semiconductor
+SeeAlso: #00632
+
+Bitfields for EPP BIOS mode bits:
+Bit(s) Description (Table 00637)
+ 0 set compatibility mode
+ 1 set bi-directional mode
+ 2 set EPP mode
+---Revision 7,v3.0---
+ 3 set ECP mode
+ 4 set EPP software emulation
+ 5 set fast Centronics mode
+ 6-7 reserved (0)
+SeeAlso: #00632,#M0053
+
+Bitfields for EPP BIOS multiplex status flags:
+Bit(s) Description (Table 00638)
+ 0 port is selected
+ 1 port is locked
+ 2 interrupts are enabled
+ 3 interrupt pending
+SeeAlso: #00633
+--------P-1703-------------------------------
+INT 17 U - Emulaser ELTSR - INSTALL INTERRUPT HANDLERS
+ AH = 03h
+Return: BX = ???
+ CX = ???
+Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
+ Vertisoft Systems, Inc.
+SeeAlso: AH=04h"Emulaser",AH=0Eh,INT 1A/AH=E5h
+----------1703-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 03h
+SeeAlso: AH=04h"IBM",AH=05h"IBM"
+--------c-1703-------------------------------
+INT 17 - PC-MOS/386 v5.01 - PRINT SPOOLER - PRINT STRING
+ AH = 03h
+ DX = printer port number
+ CX = number of characters to print
+ DS:SI -> string
+Return: AH = printer status (see #00631)
+ CX = number of characters actually printed
+Desc: send an entire string of chars to the print spooler with a single call
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+SeeAlso: AH=00h,AH=01h,AH=02h,AH=FFh"PC-MOS"
+--------c-1703--BX5A00-----------------------
+INT 17 - DMP Print Spooler v2.03 - INSTALLATION CHECK
+ AH = 03h
+ BX = 5A00h
+Return: AX = 5ACBh
+ DI = 0000h
+ ES = DMP code segment (also data segment)
+Program: DMP is a Printer driver/spooler, by DMP (USA), available on the
+ PCTODAY disk, volume 10, March 1991
+--------N-170300-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "socket"
+ AX = 0300h
+ CX = type of socket from socket( domain, type, protocol )
+ DX = local identifier of socket (0 - 31)
+Return: AX = 0000h success
+ CX = segment of 4500 byte transfer buffer
+ DX = offset of 4500 byte transfer buffer
+ = FFFFH failure
+ CX = error code
+ ENFILE 23
+Program: DOSISODE is the ISO developers environment which has been ported to
+ DOS and will run with the Waterloo TCP turned into a resident TSR.
+ Currently it allows a maximum of 6 open sockets.
+Note: this function will initialize the interface the first time it is
+ called
+SeeAlso: AX=0400h"DOSISODE",AX=0600h"DOSISODE",AX=0800h"DOSISODE"
+SeeAlso: AX=0A00h"DOSISODE",AX=0C00h"DOSISODE",AX=0E00h"DOSISODE"
+--------P-1704-------------------------------
+INT 17 U - Emulaser ELTSR - BEGIN CAPTURING OUTPUT
+ AH = 04h
+Note: has no effect unless ELTSR is deactivated (see AX=0503h)
+SeeAlso: AH=03h"Emulaser",AX=0503h,INT 1A/AH=E5h
+----------1704-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 04h
+SeeAlso: AH=03h"IBM",AH=05h"IBM"
+--------N-170400-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "bind"
+ AX = 0400h
+Note: this function just returns
+SeeAlso: AX=0300h"DOSISODE",AX=0500h"DOSISODE",AX=0C00h"DOSISODE"
+----------1705-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 05h
+SeeAlso: AH=03h"IBM",AH=04h"IBM"
+--------P-170500-----------------------------
+INT 17 U - Emulaser ELTSR - ???
+ AX = 0500h
+ ???
+Return: AX = unload status (0001h safe to unload, 0002h not safe)
+ BX = ???
+ CX = PSP segment of ELTSR
+ DX = activity flag (0000h disabled, 0001h capturing, 0002h ???printing)
+ SI = ???
+ DI = ???
+SeeAlso: AH=04h,INT 1A/AH=E5h
+--------N-170500-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "connect"
+ AX = 0500h
+SeeAlso: AX=0400h"DOSISODE",AX=0700h"DOSISODE",AX=0C00h"DOSISODE"
+--------P-170501-----------------------------
+INT 17 U - Emulaser ELTSR - UNHOOK INTERRUPTS
+ AX = 0501h
+Return: (see AX=0500h)
+Note: restores interrupt vectors without checking whether they have been
+ hooked by later programs; should only be called if ELTSR reports
+ that it is safe to unload
+SeeAlso: AH=04h,AX=0500h,AX=0503h,INT 1A/AH=E5h
+Index: uninstall;Emulaser ELTSR
+--------P-170502-----------------------------
+INT 17 U - Emulaser ELTSR - SET ???
+ AX = 0502h
+ BL = Emulaser port (31h = LPT1, 32h = LPT2, 33h = LPT3)
+ CL = ???
+ DL = ???
+Return: (see AX=0500h)
+SeeAlso: AH=04h,AX=0500h,INT 1A/AH=E5h
+--------P-170503-----------------------------
+INT 17 U - Emulaser ELTSR - DEACTIVATE???
+ AX = 0503h
+Return: (see AX=0500h)
+SeeAlso: AH=04h,AX=0500h,AX=0501h,INT 1A/AH=E5h
+--------P-1706-------------------------------
+INT 17 U - Emulaser ELTSR - ???
+ AH = 06h
+ ???
+Return: ???
+SeeAlso: AX=0500h,AX=0503h,AH=07h"ELTSR",INT 1A/AH=E5h
+--------N-170600-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "listen"
+ AX = 0600h
+Note: this function just returns
+SeeAlso: AX=0300h"DOSISODE",AX=0700h"DOSISODE",AX=0C00h"DOSISODE"
+SeeAlso: AX=0E00h"DOSISODE"
+--------P-1707-------------------------------
+INT 17 U - Emulaser ELTSR - OPEN CAPTURE FILE
+ AH = 07h
+ ES:DX -> ASCIZ filename to be opened
+Return: ???
+Note: new output will be appended to the specified file
+SeeAlso: AH=08h,INT 1A/AH=E5h
+--------N-170700-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "accept"
+ AX = 0700h
+Note: this function just returns
+SeeAlso: AX=0600h"DOSISODE",AX=0800h"DOSISODE",AX=0C00h"DOSISODE"
+--------P-1708-------------------------------
+INT 17 U - Emulaser ELTSR - CLOSE CAPTURE FILE
+ AH = 08h
+ ???
+Return: ???
+Desc: close the file previously opened by function 07h
+SeeAlso: AH=07h,INT 1A/AH=E5h
+--------N-170800-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "recvfrom"
+ AX = 0800h
+SeeAlso: AX=0500h"DOSISODE",AX=0900h"DOSISODE",AX=0A00h"DOSISODE"
+--------P-1709-------------------------------
+INT 17 U - Emulaser ELTSR - PRINT CAPTURE FILE???
+ AH = 09h
+ BX = ???
+ CX = ???
+ DX = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
+Return: AX = status
+ 00h successful
+ FFh failed
+Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
+ Vertisoft Systems, Inc.
+Note: this function calls through to INT 1A/AX=E401h, and thus requires
+ that either ELSPL or Disk Spool II be installed
+SeeAlso: AH=0Ah,INT 1A/AX=E401h,INT 1A/AH=E5h
+--------N-170900-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "sendto"
+ AX = 0900h
+SeeAlso: AX=0700h"DOSISODE",AX=0800h"DOSISODE",AX=0A00h"DOSISODE"
+--------P-170A-------------------------------
+INT 17 U - Emulaser ELTSR - SET ??? FILENAME
+ AH = 0Ah
+ ES:BX -> ??? buffer
+ CX = length of ??? buffer
+Return: ???
+Note: copies the specified name into the buffer passed to ELSPL as the
+ filename by AH=09h
+SeeAlso: AH=09h,INT 1A/AH=E5h
+--------N-170A00-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "select"
+ AX = 0A00h
+SeeAlso: AX=0800h"DOSISODE",AX=0B00h"DOSISODE",AX=0E00h"DOSISODE"
+--------P-170B-------------------------------
+INT 17 U - Emulaser ELTSR - GET ???
+ AH = 0Bh
+Return: AX:BX -> ???
+SeeAlso: AH=0Ah,INT 1A/AH=E5h
+----------170B-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 0Bh
+SeeAlso: AH=03h"IBM",AH=0Ch"IBM"
+--------N-170B00-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "ioctl"
+ AX = 0B00h
+ DX = local identifier of socket (0 - 31)
+Note: this function sets the socket into non_block mode
+SeeAlso: AX=0A00h"DOSISODE",AX=0C00h"DOSISODE",AX=0E00h"DOSISODE"
+--------P-170C-------------------------------
+INT 17 U - Emulaser ELTSR - SET ??? FLAG
+ AH = 0Ch
+ ???
+Return: ???
+SeeAlso: AH=0Bh,INT 1A/AH=E5h
+----------170C-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 0Ch
+SeeAlso: AH=0Bh"IBM",AH=0Dh"IBM"
+--------N-170C00-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "close"
+ AX = 0C00h
+SeeAlso: AX=0300h"DOSISODE",AX=0500h"DOSISODE",AX=0D00h"DOSISODE"
+--------P-170D-------------------------------
+INT 17 U - Emulaser ELTSR - GET TRUE ScrlLk STATE
+ AH = 0Dh
+Return: AX = state (0000h off, 0010h on)
+Desc: determine the actual state of ScrlLk even when Emulaser is controlling
+ the ScrlLk light as its activity indicator
+SeeAlso: AH=0Ch,INT 16/AH=02h,INT 1A/AH=E5h
+----------170D-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 0Dh
+SeeAlso: AH=0Ch"IBM",AH=0Eh"IBM"
+--------N-170D00-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - "shutdown" - SHUTDOWN INTERFACE
+ AX = 0D00h
+Note: this function is used to shutdown the interface
+SeeAlso: AX=0C00h"DOSISODE",AX=0E00h"DOSISODE"
+--------P-170E-------------------------------
+INT 17 U - Emulaser ELTSR - BACKGROUND PROCESSING
+ AH = 0Eh
+Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
+ Vertisoft Systems, Inc.
+Note: this function is called by ELTSR on every INT 08 to allow data to be
+ processed in the background, but may also be called by applications
+ to give Emulaser additional CPU time
+SeeAlso: AH=0Dh,INT 1A/AH=E5h
+----------170E-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 0Eh
+SeeAlso: AH=03h"IBM",AH=0Dh"IBM",AH=80h"IBM"
+--------N-170E00-----------------------------
+INT 17 - DOSISODE to WATTCP TSR Interface - INSTALLATION CHECK
+ AX = 0E00h
+Return: CX = 1234h if installed
+Program: DOSISODE is the ISO developers environment which has been ported to
+ DOS and will run with the Waterloo TCP turned into a resident TSR.
+ Currently it allows a maximum of 6 open sockets.
+Note: this function is used to check if the interface is loaded
+SeeAlso: AX=0300h"DOSISODE",AX=0A00h"DOSISODE"
+--------P-172000-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - INSTALLATION CHECK
+ AX = 2000h
+ BL = printer number???
+Return: AX = status (see #00639)
+ BX = driver version number (BH=major,BL=minor)
+ CH = ??? (00h)
+ CL = ???
+ DX = ??? (0100h)
+Note: also enables the remaining printer driver functions (2001h-2007h)
+SeeAlso: AX=2001h,AX=2002h,AX=2003h,AX=2004h,AX=2005h,AX=2006h,AX=2007h
+
+(Table 00639)
+Values for PC Paint function status:
+ 0000h successful
+ 0001h invalid printer???
+ 0002h ???
+ 0003h invalid subfunction
+ 0005h driver disabled, must call function 00h first
+ 0009h unknown printer error
+ 000Bh printer not selected
+ 000Ch printer out of paper
+ 000Eh error while writing to serial printer
+ 000Fh ???
+ 0010h invalid function number
+ 0011h value out of range
+--------P-172001-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - SET ??? FLAG
+ AX = 2001h
+ BL = printer number???
+Return: AX = status (see #00639)
+--------P-172002-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET INFORMATION
+ AX = 2002h
+ BL = printer number???
+ CL = desired information
+ 00h printer type
+ Return: ES:DI -> ASCIZ printer name
+ 01h paper size
+ DX = size index
+ Return: ES:DI -> ASCIZ paper size description
+ 02h ???
+ Return: BX = ???
+ 03h printer information???
+ DX = ???
+ ES:BX -> buffer for ??? (min 134 bytes)
+Return: AX = status (see #00639)
+SeeAlso: AX=2000h,AX=2004h
+--------P-172003-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ???
+ AX = 2003h
+ ES:BX -> ???
+Return: AX = status (see #00639)
+SeeAlso: AX=2000h,AX=2004h
+--------P-172004-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET ???
+ AX = 2004h
+ BL = printer number???
+Return: AX = status (see #00639)
+ ES:DI -> ???
+SeeAlso: AX=2000h,AX=2003h
+--------P-172005-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE PRINTER TO NEXT PAGE
+ AX = 2005h
+ BL = printer number???
+Return: AX = status (see #00639)
+Note: this function also clears the flag set by AX=2001h
+SeeAlso: AX=2000h,AX=2001h,AX=2006h
+--------P-172006-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE TO NEXT PAGE & SHUT DOWN
+ AX = 2006h
+ BL = printer number???
+Return: AX = status (see #00639)
+Note: this function also clears the flag set by AX=2001h and disables
+ functions other than AX=2000h
+SeeAlso: AX=2000h,AX=2001h,AX=2005h
+--------P-172007-----------------------------
+INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - UNIMPLEMENTED
+ AX = 2007h
+Return: AX unchanged
+SeeAlso: AX=2000h
+--------N-172400-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
+ AX = 2400h
+ DL = new state
+ 00h disabled
+ 01h enabled
+Return: DL = 24h if installed
+ DH = minor version number
+ CX = network address of this machine
+ AL = status (see #00640)
+SeeAlso: AX=2403h,INT 16/AX=4500h
+
+(Table 00640)
+Values for NET.24 function status:
+ 00h successful
+ 01h timeout
+ 02h header error
+ 03h data error
+ 04h busy
+ 05h invalid parameters
+--------N-172401-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
+ AX = 2401h
+ BL = timeout in clock ticks
+Return: AL = status (see #00640)
+ DX:BX -> receive buffer
+SeeAlso: AX=2402h,AX=2404h,AX=2408h
+--------N-172402-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
+ AX = 2402h
+ transmit buffer filled (see AX=2403h)
+Return: AL = status (see #00640)
+SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
+--------N-172403-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
+ AX = 2403h
+Return: AL = status (see #00640)
+ CX = number of characters in receive ring buffer
+ DX:BX -> transmit buffer
+SeeAlso: AX=2400h,AX=2402h
+--------N-172404-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
+ AX = 2404h
+ BX = target address
+Return: AL = status (see #00640)
+SeeAlso: AX=2402h,AX=2405h
+--------N-172405-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
+ AX = 2405h
+ BX = target address
+Return: AL = status (see #00640)
+SeeAlso: AX=2402h,AX=2404h
+--------N-172406-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
+ AX = 2406h
+Return: AL = status (see #00640)
+SeeAlso: AX=2407h,AX=240Ah
+--------N-172407-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
+ AX = 2407h
+Return: AL = status (see also #00640)
+ 06h end of data
+ DL = received character
+SeeAlso: AX=2406h
+--------N-172408-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
+ AX = 2408h
+Return: AL = status (see also #00640)
+ 06h end of data
+ CX = number of bytes in receive buffer
+ DX:SI -> receive buffer
+SeeAlso: AX=2401h,AX=2405h,AX=2409h
+--------N-172409-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
+ AX = 2409h
+ BX = target address
+ CX = number of data bytes
+ DL = command code to send
+ DS:SI -> data bytes for command
+Return: AL = status (see also #00640)
+ 03h no response
+ 06h remote currently unable to perform command
+SeeAlso: AX=2405h,AX=2408h
+--------N-17240A-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
+ AX = 240Ah
+Return: AL = status (see #00640)
+SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
+--------N-17240B-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
+ AX = 240Bh
+ DL = character to send
+Return: AL = status (see also AX=2400h)
+ 03h transmission error
+ 06h write error
+SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
+--------N-17240C-----------------------------
+INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
+ AX = 240Ch
+Return: AL = status (see also AX=2400h)
+ 03h transmission error
+ 06h remote breaks connection
+SeeAlso: AX=240Ah,AX=240Bh
+--------p-174B00-----------------------------
+INT 17 - Brother P-Touch - INSTALLATION CHECK
+ AX = 4B00h
+Return: AX = 4249h ('BI' = Brother International) if installed
+ BX = program ID
+ 4550h ('EP') for "Epson FX-80 Emulator"
+ 5047h ('PG') for "Printer to Disk Utility"
+ CX = numbero of parallel port being emulated or intercepted
+SeeAlso: AX=4B01h
+--------p-174B01-----------------------------
+INT 17 - Brother P-Touch - UNINSTALL
+ AX = 4B01h
+Return: AX = segment of resident program or 0000h if unable to uninstall
+Note: the calling program must manually free both the indicated segment
+ and the environment segment for the TSR with INT 21/AH=49h
+ (the environment is pointed at by the WORD at AX:002Ch)
+SeeAlso: AX=4B00h,INT 21/AH=49h
+--------J-175000-----------------------------
+INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
+ AX = 5000h
+ BX = country code
+ 0001h USA (English), 0051h Japan
+Return: AL = status
+ 00h successful
+ 01h bad country code
+ 02h other error
+SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
+--------J-175001-----------------------------
+INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
+ AX = 5001h
+Return: AL = status
+ 00h successful
+ BX = country code
+ 02h error
+SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
+--------J-1751-------------------------------
+INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
+ AH = 51h
+ DX = 2-byte JIS code
+Return: DX = shift-JIS value or 0000h on error
+Note: one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
+ characters to Shift-JIS characters, and the other performs the
+ opposite conversion
+SeeAlso: AX=5000h,AH=52h
+--------J-1752-------------------------------
+INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
+ AH = 52h
+ DX = 2-byte shift-JIS code
+Return: DX = JIS code or 0000h on error
+Note: one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
+ characters to Shift-JIS characters, and the other performs the
+ opposite conversion
+SeeAlso: AH=51h
+--------P-175555BXAAAA-----------------------
+INT 17 - LR - SET CONFIGURATION
+ AX = 5555h
+ BX = AAAAh
+ CL = configuration flags (see #04117)
+ DX = LPT number
+Return: AX = A55Ah
+ BX = BBBBh
+Program: LR_xxxx.COM files are a set of printer-hardware dependent printer
+ drivers found in the LIR DOS/Windows 3.xx codepage support package
+ develoved by LABAS u.a.b. LIR supports several different screen and
+ printer codepages and various keyboard layouts used in Lithuania.
+ Download at: ftp://ftp.labas.com/pub/drivers/language/lir422.zip
+SeeAlso: AX=5555h/BX=BBBBh,INT 10/AX=5555h/BX=AAAAh
+
+Bitfields for LR_xxxx.COM configuration flags:
+Bit(s) Description (Table 04117)
+ 7 ESC sequence???
+ 6 ESC sequence???
+ 5-3 printer code page
+ 2 Lithuanian alphabet???
+ 1 Russian alphabet???
+ 0 ???
+--------P-175555BXBBBB-----------------------
+INT 17 - LR - GET CONFIGURATION
+ AX = 5555h
+ BX = BBBBh
+ DX = LPT number
+Return: AX = A55Ah
+ BX = CCCCh
+ CL = configuration flags (see #04117)
+SeeAlso: AX=5555h/BX=AAAAh,INT 10/AX=5555h/BX=BBBBh
+--------V-1760-------------------------------
+INT 17 - FLASHUP.COM - INSTALLATION CHECK
+ AH = 60h
+Return: AL = 60h
+ DX = CS of resident code
+Notes: FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
+ FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
+ consisting of an 80h followed by the actual command
+SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
+--------V-1761-------------------------------
+INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
+ AH = 61h
+Return: AL = 61h
+ DX = CS of resident code
+Note: SPEEDSCR.COM is by The Software Bottling Co.
+--------P-1762-------------------------------
+INT 17 U - T2PS v1.0 - UNINSTALL
+ AH = 62h
+Return: nothing
+SeeAlso: AH=63h,AH=64h,INT 05/AX=554Eh
+--------P-1763-------------------------------
+INT 17 U - T2PS v1.0 - SET PARAMETERS
+ AH = 63h
+ ES:SI -> settings (see #00641)
+Program: T2PS is a shareware ASCII-to-PostScript converter by A.N.D.
+ Technologies
+SeeAlso: AH=62h,AH=64h,INT 05/AX=4E57h
+
+Format of T2PS settings:
+Offset Size Description (Table 00641)
+ 00h WORD LPT port number (0=LPT1, etc.)
+ 02h WORD page heigh in points
+ 04h WORD page width in points
+ 06h WORD top margin in points
+ 08h WORD bottom margin in points
+ 0Ah WORD left margin in points
+ 0Ch WORD right margin in points
+ 0Eh WORD font size in points
+ 10h WORD tab size
+ 12h WORD timeout in clock ticks
+--------P-1764-------------------------------
+INT 17 U - T2PS v1.0 - GET PARAMETERS
+ AH = 64h
+ ES:SI -> buffer for settings (see #00641)
+Return: ES:SI buffer filled
+SeeAlso: AH=62h,AH=63h,INT 05/AX=5053h
+--------b-176F00BX0000-----------------------
+INT 17 - HP Vectra - EXTENDED BIOS - "F17_INQUIRE" - INSTALLATION CHECK
+ AX = 6F00h
+ BX = 0000h
+Return: BX = 4850h ("HP") if HP Extended BIOS printer extensions available
+SeeAlso: AX=6F02h,INT 14/AX=6F00h,INT 10/AX=6F00h,INT 14/AX=6F00h
+SeeAlso: INT 33/AX=6F00h,INT 6F/AH=00h"HP Vectra"
+--------b-176F02-----------------------------
+INT 17 - HP Vectra - EXTENDED BIOS - "F17_PUT_BUFFER" - PRINT BUFFER
+ AX = 6F02h
+ CX = size of buffer in bytes
+ DX = port number (0-3)
+ ES:DI -> buffer containing characters to be printed
+Return: AH = printer status (see #00631)
+ CX = number of bytes successfully printed
+ ---on error (AH bit 0 set)---
+ ES:DI -> next byte to be sent
+ ---if successful---
+ ES:DI unchanged
+SeeAlso: AH=00h,AX=6F00h,INT 14/AX=6F02h
+----------1780-------------------------------
+INT 17 - IBM SurePath BIOS - Officially "Private" Function
+ AH = 80h
+SeeAlso: AH=03h"IBM",AH=0Bh"IBM"
+--------N-1781-------------------------------
+INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
+ AH = 81h
+ AL = 00h (NTNX compatibility mode)
+ CL = number of jobs to cancel
+Return: AL = status (see #00642)
+Note: this function cancels the last CL printouts for the current task
+SeeAlso: AH=82h
+
+(Table 00642)
+Values for Alloy status:
+ 00h success
+ 01h-7Fh warning
+ 80h general failure
+ 81h host overloaded (NTNX only)
+ 82h module busy (NTNX only)
+ 83h host busy (NTNX only)
+ 84h re-entry flag set
+ 85h invalid request
+ 86h invalid printer
+ 87h invalid process ID
+ 89h access denied
+ 8Ah option not available for given port type
+ 8Bh option not available for given task type
+ 91h printer busy
+ C2h file not found
+ C3h path not found
+ C4h file access failure
+--------N-1782-------------------------------
+INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
+ AH = 82h
+ AL = 00h (NTNX compatibility mode)
+Return: AL = status (see #00642)
+SeeAlso: AH=81h
+--------N-1783-------------------------------
+INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
+ AH = 83h
+ AL = mode
+ 00h NTNX compatibility
+ CL = number of copies (max 99, default 1)
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ CX = number of copies
+Return: AL = status (see #00642)
+Note: in NTNX compatibility mode, this function only affects LPT1
+--------N-1784-------------------------------
+INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
+ AH = 84h
+ AL = mode
+ 00h NTNX compatibility
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+Note: closes spool file and tells spooler to queue the print job (LPT1 only
+ under MW386 in NTNX compatibility mode)
+--------J-1784-------------------------------
+INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
+ AH = 84h
+ AL = character
+ DX = printer number
+Return: AH = printer status (see #00631)
+SeeAlso: AH=00h,AH=85h
+--------J-1785-------------------------------
+INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
+ AH = 85h
+ AL = new state (00h enabled, 01h disabled)
+SeeAlso: AH=84h"AX"
+--------N-1787-------------------------------
+INT 17 - Alloy NTNX - SET INDOS POINTER
+ AH = 87h
+ AL = 00h
+ CX:BX -> buffer for user-written printer drivers
+Return: BX,CX destroyed
+Note: must be executed before the printer is enabled
+SeeAlso: AH=8Ah
+--------N-1788-------------------------------
+INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
+ AH = 88h
+ AL = mode
+ 00h NTNX compatibility
+ DX = NTNX printer number (see #00643)
+ 01h MW386
+ DX = MW386 printer number
+Return: AH = status (see #00642)
+Note: removes specified printer from the spooler's list of printers
+SeeAlso: AH=89h,AH=8Bh
+
+(Table 00643)
+Values for Alloy NTNX printer number:
+ 00h host LPT1
+ 01h host LPT2
+ 02h host LPT3
+ 03h host LPT4
+ 04h host COM1
+ 05h host COM2
+ 06h user's logical COM2
+ 07h user's terminal AUX port
+ 08h user's logical COM1 (MW386 only)
+--------N-1789-------------------------------
+INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
+ AH = 89h
+ AL = mode
+ 00h NTNX compatibility
+ DX = NTNX printer number (see #00643)
+ 01h MW386
+ DX = MW386 printer number
+Return: AL = status (see #00642)
+Note: the specified printer is added to the spooler's list of available
+ printers
+SeeAlso: AH=88h,AH=8Bh
+--------N-178A-------------------------------
+INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
+ AH = 8Ah
+ ???
+SeeAlso: AH=92h
+--------N-178B-------------------------------
+INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
+ AH = 8Bh
+ DS:DX -> ASCIZ printer name
+Return: AL = status (see also AH=81h)
+ 00h successful
+ DX = physical device number
+SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
+--------N-178C-------------------------------
+INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
+ AH = 8Ch
+ DX = physical device number
+ ES:DI -> 17-byte buffer for ASCIZ device name
+Return: AL = status (see also AH=81h)
+ 00h successful
+ ES:DI buffer filled
+SeeAlso: AH=88h,AH=8Bh
+--------N-178D-------------------------------
+INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
+ AH = 8Dh
+ AL = 00h
+Return: AL = status (see #00642)
+Notes: clears all buffers and resets spooler to boot-up values
+ MW386 supports this function for compatibility only; it is a NOP
+--------N-178E-------------------------------
+INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
+ AH = 8Eh
+ AL = 00h
+Return: CX:BX -> INT 28 entry point
+SeeAlso: AH=8Fh
+--------N-178F-------------------------------
+INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
+ AH = 8Fh
+ AL = 00h
+Return: CX:BX -> DOS intercept routine
+SeeAlso: AH=8Eh
+--------N-1790-------------------------------
+INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
+ AH = 90h
+ AL = mode
+ 00h NTNX compatibility
+ DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
+ DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ CX:SI -> ASCIZ pathname
+Return: AL = status (see #00642)
+Note: in mode 00h, the file is always sent to logical LPT1
+SeeAlso: AH=A0h
+--------N-1791-------------------------------
+INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
+ AH = 91h
+ AL = mode
+ 00h NTNX compatibility
+ Return: CX = user number (00h = host)
+ DX = currently selected printer number (00h-08h)
+ 01h MW386
+ Return: CX = user number
+ DX = physical dev number of currently selected printer
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ Return: CX = user number
+ DX = physical device number
+Return: AL = status (see #00642)
+SeeAlso: AH=8Ch
+--------N-1792-------------------------------
+INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
+ AH = 92h
+ AL = 00h
+ CL = 00h
+Return: CL = driver state
+ 01h initialized
+ 80h not initialized
+ AX = status (see #00642)
+SeeAlso: AH=8Ah
+--------N-1794-------------------------------
+INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
+ AH = 94h
+ AL = mode
+ 00h NTNX compatibility
+ DX = NTNX printer number (see #00643)
+ 01h MW386
+ DX = MW386 printer number
+ 02h MW386 v2+
+ BX = logical printer number
+ DX = MW386 printer number
+Return: AL = status (see #00642)
+Note: modes 00h and 01h affect only logical LPT1
+SeeAlso: AH=8Bh,AH=95h
+--------N-1795-------------------------------
+INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
+ AH = 95h
+ AL = mode
+ 00h NTNX compatibility
+ Return: DX = NTNX printer number (see #00643)
+ (FFFFh if current printer not compatible with NTNX)
+ 01h MW386
+ Return: DX = MW386 printer number
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ Return: DX = MW386 printer number (FFFFh = none)
+Return: AL = status (see #00642)
+Note: modes 00h and 01h return the printer number of logical LPT1 only
+SeeAlso: AH=94h
+--------N-1796-------------------------------
+INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
+ AH = 96h
+ AL = 00h
+Note: documentation states that this is a NOP, doing only XOR AX,AX before
+ returning
+SeeAlso: INT 14/AH=24h
+--------N-1797-------------------------------
+INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
+ AH = 97h
+ AL = mode
+ 00h NTNX compatibility
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ CH,CL,DH = three character break sequence
+ DL = subfunction
+ 00h set break string
+ else reset break
+Return: AL = status (see #00642)
+Notes: mode 00h affects only logical LPT1
+ when the break string is encountered, the spool file will be closed and
+ queued for printing automatically
+ the break string is not permanently saved, and will be reset each time
+ MW386 or the user is rebooted
+SeeAlso: AH=9Bh
+--------N-1798-------------------------------
+INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
+ AH = 98h
+ AL = 00h
+ DL = printer number (FFh=current)
+Return: AL = status
+ 00h successful
+ 01h incorrect printer
+ 02h task not found
+Note: MW386 supports this function for compatibility only; it is a NOP
+--------N-1799-------------------------------
+INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
+ AH = 99h
+ AL = mode
+ 00h NTNX compatibility
+ DL = NTNX printer number (see #00643)
+ (FFh = task's current logical LPT1)
+ DH = mode (see #00644)
+ 01h MW386
+ DX = MW386 printer number
+ CL = mode (as for DH above)
+Return: AL = status (see #00642)
+ DH = mode (bits 1 and 2 set as above)
+ DL = printer owner's user number if not spooled
+
+Bitfields for Alloy printer mode:
+ 0 get mode if 1, set mode if 0 (Table 00644)
+ 1 private ("attached")
+ 2 direct instead of spooled
+ 3-7 reserved (0)
+--------N-179A-------------------------------
+INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
+ AH = 9Ah
+ AL = mode
+ 00h NTNX compatibility
+ DX = NTNX printer number (see #00643)
+ (FFFFh = current logical LPT1)
+ 01h MW386
+ DX = MW386 printer number
+ CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
+Return: AL = status (see #00642)
+Note: beginning with MW386 v2.0, tab expansion is set on a per-printer basis
+ rather than a per-user basis; NTNX and MW386 v1.x ignore DX
+SeeAlso: AH=A4h
+--------N-179B-------------------------------
+INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
+ AH = 9Bh
+ AL = mode
+ 00h NTNX compatibility
+ CX = timeout value in clock ticks (1/18 sec) (00h = never)
+ 01h MW386
+ CX = timeout value in seconds (00h = never)
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ CX = timeout value in seconds (00h = never)
+Return: AL = status (see #00642)
+Notes: modes 00h and 01h affect only the current logical LPT1
+ if no data is sent to a printer for the specified amount of time, the
+ spool file will be closed and queued for printing automatically
+SeeAlso: AH=97h
+--------N-17A0-------------------------------
+INT 17 - Alloy MW386 - SPOOL COPY OF FILE
+ AH = A0h
+ AL = mode
+ 00h NTNX compatibility
+ DX = ??? (NTNX, MW386 v1.x only)
+ 02h MW386 v2+
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+ CX:SI -> ASCIZ pathname
+Return: AL = status (see #00642)
+Notes: makes a copy of the specified file in the spooler's directory, allowing
+ the original file to be modified or deleted while the copy is printed
+ in mode 00h, the file is printed on logical LPT1
+SeeAlso: AH=90h
+--------N-17A4-------------------------------
+INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
+ AH = A4h
+ AL = new state
+ 00h form feed after end of print job disabled
+ 01h form feed enabled
+Return: AL = status (see #00642)
+Note: only affects the current logical LPT1
+SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
+--------N-17A6-------------------------------
+INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
+ AH = A6h
+ AL = new state
+ 00h banner page before print job disabled
+ 01h banner page enabled
+Return: AL = status (see #00642)
+Note: only affects the current logical LPT1
+SeeAlso: AH=A4h
+--------N-17A7-------------------------------
+INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
+ AH = A7h
+ AL = spool flags (see #00645)
+ BX = logical device number
+ 00h-03h = LPT1-LPT4
+ 04h-07h = COM1-COM4
+Return: AL = status (see #00642)
+Note: the documentation does not state which register contains the result of
+ a GET
+SeeAlso: AH=A4h,AH=A6h
+
+Bitfields for Alloy spool flags:
+Bit(s) Description (Table 00645)
+ 0 banner page enabled (see AH=A6h)
+ 1 form feed enabled (see AH=A4h)
+ 2-6 reserved (0)
+ 7 set flags if 1, get flags if 0
+--------N-17A8-------------------------------
+INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
+ AH = A8h
+ CX:SI -> ASCIZ filename without extension (max 8 chars)
+Return: AL = status (see #00642)
+Note: allows application to specify banner page filename for spool files
+ collected from the application's printer output
+SeeAlso: AH=A9h
+--------N-17A9-------------------------------
+INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
+ AH = A9h
+ AL = new spool drive (2=C:,3=D:,etc)
+Return: AL = status (see #00642)
+Note: does not remove previous spooling directory since jobs may be pending
+SeeAlso: AH=A8h
+--------N-17AA-------------------------------
+INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
+ AH = AAh
+ AL = mode
+ 00h NTNX
+ DX = NTNX printer number (see #00643)
+ 01h MW386
+ DX = MW386 printer number
+Return: AH = instantaneous printer status
+ 00h printer ready
+ 01h not ready
+ 12h off line
+ 13h out of paper
+ 14h general device failure
+ 15h device timeout
+ 16h bad device number
+--------N-17AF-------------------------------
+INT 17 - Alloy MW386 - CHECK SPOOLER
+ AH = AFh
+Return: AX = 55AAh if spooler available
+--------c-17C0-------------------------------
+INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
+ AH = C0h
+ DX = printer port (0-3)
+Return: ES:BX -> control block (see #00646)
+SeeAlso: AH=C1h
+
+Format of PCSpool control block:
+Offset Size Description (Table 00646)
+ 00h WORD printer number
+ 02h WORD address of printer status port
+ 04h WORD number of first record in queue
+ 06h WORD number of last record in queue
+ 08h DWORD characters already printed
+ 0Ch DWORD number of characters remaining
+ 10h DWORD pointer to dequeue buffer
+ 14h DWORD previous count of characters printed
+ 18h DWORD number of clock ticks taken to print them
+ 1Ch WORD offset of next character to output
+ 1Eh WORD offset of next character to print
+ 20h WORD pointer to spooling queue record
+ 22h BYTE current spooling status
+ 23h BYTE current printer status:
+ 00h OK
+ 01h not ready
+ 02h paused with message
+ 03h paused
+ 04h initializing
+ FEh non-existent port
+ FFh not spooled
+ 24h BYTE current control record type
+ 25h WORD observed printer speed
+ 27h WORD characters to print per service
+ 29h BYTE 01h if disk write needed
+ 2Ah BYTE 01h if queued data should be flushed
+ 2Bh BYTE 01h to update cps status
+--------c-17C1--------------------------------
+INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
+ AH = C1h
+ DX = printer port (0-3)
+ DS:SI -> ASCIZ string to save for display
+Note: flushes pending writes
+SeeAlso: AH=C0h,AH=C2h
+--------c-17C2-------------------------------
+INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
+ AH = C2h
+ DX = printer port (0-3)
+SeeAlso: AH=C3h
+--------c-17C3-------------------------------
+INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
+ AH = C3h
+ DX = printer port (0-3)
+SeeAlso: AH=C2h,AH=C7h
+--------c-17C4-------------------------------
+INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
+ AH = C4h
+Return: DI = B0BFh
+ SI = segment
+--------c-17C5-------------------------------
+INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
+ AH = C5h
+ DX = printer port (0-3)
+Note: cancels up to the pause record
+--------c-17C6-------------------------------
+INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
+ AH = C6h
+ DX = printer port (0-3)
+Return: AX = queue status
+ 0000h printer not active or at pause
+ 0001h printer busy
+--------c-17C7-------------------------------
+INT 17 - PC Magazine PCSpool - CLOSE QUEUE
+ AH = C7h
+ DX = printer port (0-3)
+SeeAlso: AH=C3h
+--------P-17CD00-----------------------------
+INT 17 - INSET - EXECUTE COMMAND STRING
+ AX = CD00h
+ DS:DX -> ASCIZ command string (max 80 bytes)
+Return: CX = 07C2h (1986d)
+Note: user interface menus pop up after last command, unless that command
+ exits INSET
+--------P-17CD01-----------------------------
+INT 17 - INSET - GET IMAGE SIZE
+ AX = CD01h
+ DS:DX -> ASCIZ name of image file
+Return: AX = height in 1/720th inch
+ BX = width in 1/720th inch
+ CX = 07C2h (1986d)
+--------P-17CD02-----------------------------
+INT 17 - INSET - INITIALIZE
+ AX = CD02h
+Return: CX = 07C2h (1986d)
+Note: all open files are closed and the printer is reset
+SeeAlso: AX=CD04h
+--------P-17CD03-----------------------------
+INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
+ AX = CD03h
+Return: CX = 07C2h (1986d)
+--------P-17CD04-----------------------------
+INT 17 - INSET - INITIALIZE LINKED MODE
+ AX = CD04h
+ ES:SI -> FAR routine for linked mode (see #00647)
+Return: CX = 07C2h
+SeeAlso: AX=CD02h,AX=CD08h
+
+(Table 00647)
+Values INSET linked-mode routine is called with:
+ AL = function
+ 00h send character to printer
+ BL = character to send
+ 01h send string to printer
+ CX = number of bytes to send
+ DS:DX -> buffer containing data
+ 02h move print head to horizontal starting position of image
+Return: AX = status
+ 0000h success
+ 0001h failure
+--------P-17CD05-----------------------------
+INT 17 - INSET - START MERGING IMAGE INTO TEXT
+ AX = CD05h
+ DS:DX -> ASCIZ name of PIX file
+ CX = left margin of text in 1/720th inch
+Return: AH = printer type
+ 00h page-oriented (multiple images may be placed side-by-side)
+ 01h line-oriented (use AX=CD06h for vertical paper movement)
+ CX = 07C2h (1986d)
+SeeAlso: AX=CD07h
+--------P-17CD06-----------------------------
+INT 17 - INSET - GRAPHICS LINE FEED
+ AX = CD06h
+Return: AH = completion status
+ 00h image complete
+ 01h image incomplete
+ CX = 07C2h (1986d)
+SeeAlso: AX=CD09h
+--------P-17CD07-----------------------------
+INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
+ AX = CD07h
+Return: CX = 07C2h
+SeeAlso: AX=CD05h
+--------P-17CD08-----------------------------
+INT 17 - INSET - CANCEL LINK MODE
+ AX = CD08h
+Return: CX = 07C2h
+SeeAlso: AX=CD04h
+--------P-17CD09-----------------------------
+INT 17 - INSET - ALTER TEXT LINE SPACING
+ AX = CD09h
+ CX = line spacing in 1/720th inch
+Return: CX = 07C2h
+Note: not yet implemented, line spacing is currently fixed at 1/6 inch
+SeeAlso: AX=CD06h
+--------P-17CD0A-----------------------------
+INT 17 - INSET - GET SETUP
+ AX = CD0Ah
+ DS:DX -> buffer for IN.SET data
+Return: CX = 07C2h
+--------P-17CD0B-----------------------------
+INT 17 - INSET - START GETTING SCALED IMAGE
+ AX = CD0Bh
+ DS:SI -> ASCIZ pathname of .PIX file
+ BX = number of bitplanes
+ CX = number of rows in output bitmap
+ DX = number of columns in output bitmap
+Return: AX = status
+ 0000h OK
+ FFFFh error
+Note: image is returned in strips by repeated calls to AX=CD0Ch
+--------P-17CD0C-----------------------------
+INT 17 - INSET - GET NEXT IMAGE STRIP
+ AX = CD0Ch
+Return: AX = status
+ 0000h OK but not complete
+ 0001h OK and image complete
+ FFFFh error
+ DS:SI -> buffer (max 4K) for bit map strip
+ CX = start row
+ DX = number of rows
+ BX = offset in bytes between bit planes
+Note: buffer may be overwritten by subsequent calls
+SeeAlso: AX=CD0Bh
+--------P-17E0-------------------------------
+INT 17 - EPP BIOS - INSTALLATION CHECK
+ AH = E0h
+Return: ??? (AH <> E0h if installed ???)
+SeeAlso: AX=0200h"EPP",AH=E1h,AH=E2h
+--------P-17E1-------------------------------
+INT 17 - EPP BIOS - DISABLE EPP
+ AH = E1h
+ ???
+Return: ???
+SeeAlso: AX=0200h"EPP",AH=E0h,AH=E2h
+--------P-17E2-------------------------------
+INT 17 - EPP BIOS - ENABLE EPP
+ AH = E2h
+ ???
+Return: ???
+SeeAlso: AX=0200h"EPP",AH=E0h,AH=E1h
+--------P-17F0-------------------------------
+INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
+ AH = F0h
+ DX = printer port (0-3)
+Return: AX = 0001h Jetstream present
+ else non-Jetstream port
+Note: NorthNet Jetstream is a high-performance DMA-driven parallel card able
+ to drive printers at up to 80000 characters per second
+--------P-17F1-------------------------------
+INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
+ AH = F1h
+ CX = data buffer length
+ DX = printer port (0-3)
+ DS:SI -> data buffer
+Return: AX = status
+ 0000h printer not ready (see also AH=02h)
+ other printing started
+SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
+--------P-17F2-------------------------------
+INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
+ AH = F2h
+ DX = printer port (0-3)
+Return: AX = status
+ 0000h prior print request finished
+ other number of characters left to print
+SeeAlso: AH=02h,AH=F1h,AH=F3h
+--------P-17F3-------------------------------
+INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
+ AH = F3h
+ DX = printer port (0-3)
+Return: AX = number of unprinted characters due to abort
+SeeAlso: AH=F1h,AH=F4h
+--------P-17F4-------------------------------
+INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
+ AH = F4h
+ DX = printer port (0-3)
+ DS:DS -> FAR post address (called with interrupts on)
+SeeAlso: AH=F1h,AH=F3h
+--------P-17F5-------------------------------
+INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
+ AH = F5h
+ CX = data buffer length
+ DX = printer port (0-3)
+ DS:SI -> data buffer (32-bit physical address)
+Return: AX = status
+ 0000h printer not ready (see also AH=02h)
+ other printing started
+SeeAlso: AH=F1h
+--------c-17FF--BX0000-----------------------
+INT 17 U - PC-MOS/386 v5.01 - PRINT SPOOLER - CLOSE SPOOL FILE
+ AH = FFh
+ BX = 0000h
+ CX = 0000h
+ DX = printer port number
+Return: AH = printer status (see #00631 at AH=00h)
+Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
+ operating system by The Software Link, Inc.
+Desc: close the spool file immediately instead of waiting for the close time
+ to elapse
+SeeAlso: AH=01h,AH=03h"PC-MOS"
+--------B-18---------------------------------
+INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
+Desc: called when there is no bootable disk available to the system
+Notes: very few PCs other than those produced by IBM contain BASIC in ROM, so
+ the action is unpredictable on compatibles; this interrupt often
+ reboots the system, and often has no effect at all
+ some PC and XT clones had an optional IBM CASSETTE BASIC stored
+ in the ROM, too.
+ most BIOSes will display an error message similar to "NO BASIC", and
+ either reboot or return to the caller.
+ PS/2 machines usually pop up a graphical box to the effect that
+ the user should enter a floppy and press F1.
+ Some clones display the message "No boot device available,
+ strike F1 to retry, F2 for setup utility"
+ network cards with their own BIOS can hook this interrupt to allow
+ a diskless boot off the network (even when a hard disk is present
+ if none of the partitions is marked as the boot partition)
+SeeAlso: INT 2F/AX=4A06h,INT 86"NetBIOS",INT 2F/AX=4A06h,INT 2F/AX=4A07h
+--------J-1800-------------------------------
+INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
+ AH = 00h
+Return: AX = keystroke
+SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
+--------J-1801-------------------------------
+INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
+ AH = 01h
+Return: BH = status
+ 00h no keystrokes available
+ 01h keystroke available
+ AX = keystroke
+SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
+--------J-1802-------------------------------
+INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
+ AH = 02h
+Return: AL = shift flags
+SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
+--------J-1803-------------------------------
+INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
+ AH = 03h
+ ???
+Return: ???
+SeeAlso: AH=00h,AH=04h
+--------J-1804-------------------------------
+INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
+ AH = 04h
+ ???
+Return: ???
+Note: details are not available at this time
+SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
+--------J-18---------------------------------
+INT 18 - NEC PC-9800 series - VIDEO
+ AH = function
+ 0Ah set video mode
+ 0Bh get video mode
+ 0Ch start text screen display
+ 0Dh end text screen display
+ 0Eh set single display area
+ 0Fh set multiple display area
+ 10h set cursor shape
+ 11h display cursor
+ 12h terminate cursor
+ 13h set cursor position
+ 14h read font patter
+ 16h initialize text video RAM
+ 1Ah define user character
+ others
+ ???
+Return: ???
+Notes: details are not available at this time
+ text video RAM is located at segments A000h (characters) and A200h
+ (attributes), graphics video RAM at segment C000h
+
+Bitfields for NEC PC-9800 series video attributes:
+Bit(s) Description (Table 00648)
+ 0 disable drawing character
+ 1 blinking
+ 2 reverse video
+ 3 underline
+ 4 vertical line
+ 7-5 color
+ (0=black, 1=blue, 2=red, 3=purple, 4=green, 5=cyan, 6=yellow, 7=white)
+--------J-180E-------------------------------
+INT 18 - NEC PC-9800 series - SET SINGLE DISPLAY AREA
+ AH = 0Eh
+ DX = offset of first byte to display???
+Return: ???
+SeeAlso: AH=1Bh,MEM 0050h:0001h
+--------J-181B-------------------------------
+INT 18 - NEC PC-9800 series - SET DISPLAY MODE
+ AH = 1Bh
+ AL = ??? (00h for text mode)
+Return: ???
+--------r-185350BX4849-----------------------
+INT 18 - SPHINX C-- - WB.COM - API
+ AX = 5350h ('SP')
+ BX = 4849h ('HI')
+ CX = 4E58h ('NX')
+ DH = function
+ 01h set ???
+ DL = ???
+ 02h get ???
+ Return: DL = ???
+ 03h get ???
+ Return: ES:DI -> ??? data buffer
+ 06h ???
+Return: AX = 7370h ('sp') if installed
+ BX = 6869h ('hi') if installed
+ CX = 6E78h ('nx') if installed
+Program: SPHINX C-- is a shareware compiler by Peter Cellik for a language
+ which is a cross between C and assembler; WB.COM is the driver which
+ launches the WorkBench
+--------s-186900-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - GET STATUS
+ AX = 6900h
+Return: AX = amount of DRAM on card or 0000h if GUS not available
+Program: YEA_GUS is a driver for the Graphics Ultra Sound which hooks INT 18h
+ and then shells out the the program requiring its services
+SeeAlso: AX=6901h,AX=690Ah,AX=690Bh
+--------s-186901-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - RESET
+ AX = 6901h
+ BX = number of active voices (14-32)
+Return: nothing
+SeeAlso: AX=6900h
+--------s-186902-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET VOLUME FOR SPECIFIC VOICE
+ AX = 6902h
+ BX = voice number (00h-1Fh)
+ CX = linear volume (0000h-01FFh)
+Return: nothing
+SeeAlso: AX=6900h,AX=6903h,AX=6904h,AX=6909h,AX=690Ah
+--------s-186903-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET FREQUENCY FOR VOICE
+ AX = 6903h
+ BX = voice number (00h-1Fh)
+ CX = frequency in Hz (0-44100)
+Return: nothing
+SeeAlso: AX=6902h,AX=6904h
+--------s-186904-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET LEFT/RIGHT BALANCE
+ AX = 6904h
+ BX = voice number (00h-1Fh)
+ CX = balance (0 = left, 7 = even, 15 = right)
+Return: nothing
+SeeAlso: AX=6902h,AX=6903h
+--------s-186905-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - PLAY MUSIC
+ AX = 6905h
+ BL = voice number
+ BH = sample type (0 = 8-bit, 1 = 16-bit)
+ CL = looping type (0 = none, 1 = forward, 2 = back and forth)
+ CH:DI = 20-bit starting address for voice data
+ DL:SI = 20-bit address for loop start
+ DH:BP = 20-bit address for loop end
+SeeAlso: AX=6903h,AX=6906h,AX=690Bh
+--------s-186906-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - LOAD SOUND DATA
+ AX = 6906h
+ BL = data format (1 = twos-complement, 0 = not)
+ BH = sample type (0 = 8-bit, 1 = 16-bit)
+ CX = number of bytes to send
+ ES:SI -> buffer containing data
+ DL:DI = 20-bit address of GUS DRAM at which to load sound data
+SeeAlso: AX=6900h,AX=6905h,AX=690Ch
+--------s-186907-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - STOP VOICE
+ AX = 6907h
+ BX = voice number (00h-1Fh)
+Return: nothing
+SeeAlso: AX=6908h,AX=690Dh
+--------s-186908-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET VOICE END
+ AX = 6908h
+ BX = voice number (00h-1Fh)
+ CL:DX = 20-bit ending address
+Return: nothing
+SeeAlso: AX=690Bh
+--------s-186909-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - RAMP VOLUME
+ AX = 6909h
+ BL = voice number (00h-1Fh)
+ BH = looping type (0 = none, 1 = forward, 2 = back and forth)
+ CX = starting volume
+ DX = ending volume
+ DI:SI = time
+Return: nothing
+SeeAlso: AX=6902h,AX=690Ah
+--------s-18690A-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - GET VOLUME
+ AX = 690Ah
+ BX = voice number (00h-1Fh)
+Return: AX = current non-linear volume for voice
+SeeAlso: AX=6902h,AX=6909h
+--------s-18690B-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - GET POSITION
+ AX = 690Bh
+ BX = voice number
+Return: BX:AX = 20-bit address at which voice is playing
+SeeAlso: AX=6900h,AX=6905h,AX=6908h
+--------s-18690C-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SAVE SOUND DATA
+ AX = 690Ch
+ BL = data format (1 = twos-complement, 0 = not)
+ BH = sample type (0 = 8-bit, 1 = 16-bit)
+ CX = number of bytes to get
+ ES:SI -> buffer for retrieved data
+ DL:DI = 20-bit address in GUS DRAM from which to read voice data
+Return: nothing
+SeeAlso: AX=6906h
+--------s-18690D-----------------------------
+INT 18 - Gravis Ultra Sound YEA_GUS.EXE - RESTART VOICE
+ AX = 690Dh
+ BX = voice
+ CX = sample type (0 = 8-bit, 1 = 16-bit)
+ DX = looping type (0 = none, 1 = forward, 2 = back and forth)
+Return: CX = balance value
+SeeAlso: AX=6907h,AX=6908h
+--------s-188000-----------------------------
+INT 18 - Gravis Ultra Sound EURO_MOD.EXE - INITIALIZE
+ AX = 8000h
+Program: EURO_MOD is a .MOD file player for the Gravis Ultra Sound which hooks
+ INT 18h and then shells out to the program requiring its services
+SeeAlso: AX=8001h,AX=8004h
+--------s-188001-----------------------------
+INT 18 - Gravis Ultra Sound EURO_MOD.EXE - LOAD .MOD FILE
+ AX = 8001h
+ BX:CX -> ASCIZ filename
+SeeAlso: AX=8000h,AX=8002h
+--------s-188002-----------------------------
+INT 18 - Gravis Ultra Sound EURO_MOD.EXE - PLAY .MOD FILE
+ AX = 8002h
+SeeAlso: AX=8002h,AX=8003h
+--------s-188003-----------------------------
+INT 18 - Gravis Ultra Sound EURO_MOD.EXE - STOP PLAYING
+ AX = 8003h
+--------s-188004-----------------------------
+INT 18 - Gravis Ultra Sound EURO_MOD.EXE - SHUTDOWN
+ AX = 8004h
+SeeAlso: AX=8000h,AX=8003h
+--------B-19---------------------------------
+INT 19 - SYSTEM - BOOTSTRAP LOADER
+Desc: This interrupt reboots the system without clearing memory or restoring
+ interrupt vectors. Because interrupt vectors are preserved, this
+ interrupt usually causes a system hang if any TSRs have hooked
+ vectors from 00h through 1Ch, particularly INT 08.
+Notes: Usually, the BIOS will try to read sector 1, head 0, track 0 from drive
+ A: to 0000h:7C00h. If this fails, and a hard disk is installed, the
+ BIOS will read sector 1, head 0, track 0 of the first hard disk.
+ This sector should contain a master bootstrap loader and a partition
+ table (see #00650). After loading the master boot sector at
+ 0000h:7C00h, the master bootstrap loader is given control
+ (see #00653). It will scan the partition table for an active
+ partition, and will then load the operating system's bootstrap
+ loader (contained in the first sector of the active partition) and
+ give it control.
+ true IBM PCs and most clones issue an INT 18 if neither floppy nor hard
+ disk have a valid boot sector
+ to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
+ 0040h:0072h and jump to FFFFh:0000h. For a cold boot equivalent to
+ a reset, store 0000h at 0040h:0072h before jumping.
+ VDISK.SYS hooks this interrupt to allow applications to find out how
+ much extended memory has been used by VDISKs (see #00649). DOS 3.3+
+ PRINT hooks INT 19 but does not set up a correct VDISK header block
+ at the beginning of its INT 19 handler segment, thus causing some
+ programs to overwrite extended memory which is already in use.
+ the default handler is at F000h:E6F2h for 100% compatible BIOSes
+ MS-DOS 3.2+ hangs on booting (even from floppy) if the hard disk
+ contains extended partitions which point at each other in a loop,
+ since it will never find the end of the linked list of extended
+ partitions
+ under Windows Real and Enhanced modes, calling INT 19 will hang the
+ system in the same was as under bare DOS; under Windows Standard
+ mode, INT 19 will successfully perform a cold reboot as it appears
+ to have been redirected to a MOV AL,0FEh/OUT 64h,AL sequence
+BUG: when loading the remainder of the DOS system files fails, various
+ versions of IBMBIO.COM/IO.SYS incorrectly restore INT 1E before
+ calling INT 19, assuming that the boot sector had stored the
+ contents of INT 1E at DS:SI instead of on the stack as it actually
+ does
+SeeAlso: INT 14/AH=17h,INT 18"BOOT HOOK",INT 49"Tandy 2000",INT 5B"PC Cluster"
+SeeAlso: MEM 0040h:0067h,MEM F000h:FFF0h,CMOS 0Fh
+
+Format of VDISK header block (at beginning of INT 19 handler's segment):
+Offset Size Description (Table 00649)
+ 00h 18 BYTEs n/a (for VDISK.SYS, the device driver header)
+ 12h 11 BYTEs signature string "VDISK Vn.m" for VDISK.SYS version n.m
+ 1Dh 15 BYTEs n/a
+ 2Ch 3 BYTEs linear address of first byte of available extended memory
+
+Format of hard disk master boot sector:
+Offset Size Description (Table 00650)
+ 00h 446 BYTEs Master bootstrap loader code
+1BEh 16 BYTEs partition record for partition 1 (see #00651)
+1CEh 16 BYTEs partition record for partition 2
+1DEh 16 BYTEs partition record for partition 3
+1EEh 16 BYTEs partition record for partition 4
+1FEh WORD signature, AA55h indicates valid boot block
+
+Format of partition record:
+Offset Size Description (Table 00651)
+ 00h BYTE boot indicator (80h = active partition)
+ 01h BYTE partition start head
+ 02h BYTE partition start sector (bits 0-5)
+ 03h BYTE partition start track (bits 8,9 in bits 6,7 of sector)
+ 04h BYTE operating system indicator (see #00652)
+ 05h BYTE partition end head
+ 06h BYTE partition end sector (bits 0-5)
+ 07h BYTE partition end track (bits 8,9 in bits 6,7 of sector)
+ 08h DWORD sectors preceding partition
+ 0Ch DWORD length of partition in sectors
+SeeAlso: #00650
+
+(Table 00652)
+Values for operating system indicator:
+ 00h empty partition-table entry
+ 01h DOS 12-bit FAT
+ 02h XENIX root file system
+ 03h XENIX /usr file system (obsolete)
+ 04h DOS 16-bit FAT (up to 32M)
+ 05h DOS 3.3+ extended partition
+ 06h DOS 3.31+ Large File System (16-bit FAT, over 32M)
+ 07h QNX
+ 07h OS/2 HPFS
+ 07h Windows NT NTFS
+ 07h Advanced Unix
+ 07h see partition boot record; could be any of the above or others
+ 08h OS/2 (v1.0-1.3 only)
+ 08h AIX bootable partition, SplitDrive
+ 08h Commodore DOS
+ 08h DELL partition spanning multiple drives
+ 09h AIX data partition
+ 09h Coherent filesystem
+ 0Ah OS/2 Boot Manager
+ 0Ah OPUS
+ 0Ah Coherent swap partition
+ 0Bh Windows95 with 32-bit FAT
+ 0Ch Windows95 with 32-bit FAT (using LBA-mode INT 13 extensions)
+ 0Eh logical-block-addressable VFAT (same as 06h but using LBA-mode INT 13)
+ 0Fh logical-block-addressable VFAT (same as 05h but using LBA-mode INT 13)
+ 10h OPUS
+ 11h OS/2 Boot Manager hidden 12-bit FAT partition
+ 12h Compaq Diagnostics partition
+ 14h (resulted from using Novell DOS 7.0 FDISK to delete Linux Native part)
+ 14h OS/2 Boot Manager hidden sub-32M 16-bit FAT partition
+ 16h OS/2 Boot Manager hidden over-32M 16-bit FAT partition
+ 17h OS/2 Boot Manager hidden HPFS partition
+ 17h hidden NTFS partition
+ 18h AST special Windows swap file ("Zero-Volt Suspend" partition)
+ 19h Willowtech Photon coS
+ 1Bh hidden Windows95 FAT32 partition
+ 1Ch hidden Windows95 FAT32 partition (using LBA-mode INT 13 extensions)
+ 1Eh hidden LBA VFAT partition
+ 20h Willowsoft Overture File System (OFS1)
+ 21h officially listed as reserved
+ 21h FSo2
+ 23h officially listed as reserved
+ 24h NEC MS-DOS 3.x
+ 26h officially listed as reserved
+ 31h officially listed as reserved
+ 33h officially listed as reserved
+ 34h officially listed as reserved
+ 36h officially listed as reserved
+ 38h Theos
+ 3Ch PowerQuest PartitionMagic recovery partition
+ 40h VENIX 80286
+ 41h Personal RISC Boot
+ 41h PowerPC boot partition
+ 42h SFS (Secure File System) by Peter Gutmann
+ 45h EUMEL/Elan
+ 46h EUMEL/Elan
+ 47h EUMEL/Elan
+ 48h EUMEL/Elan
+ 4Fh Oberon boot/data partition
+ 50h OnTrack Disk Manager, read-only partition
+ 51h OnTrack Disk Manager, read/write partition
+ 51h NOVELL
+ 52h CP/M
+ 52h Microport System V/386
+ 53h OnTrack Disk Manager, write-only partition???
+ 54h OnTrack Disk Manager (DDO)
+ 55h EZ-Drive (see also INT 13/AH=FFh"EZ-Drive")
+ 56h GoldenBow VFeature
+ 5Ch Priam EDISK
+ 61h SpeedStor
+ 63h Unix SysV/386, 386/ix
+ 63h Mach, MtXinu BSD 4.3 on Mach
+ 63h GNU HURD
+ 64h Novell NetWare 286
+ 64h SpeedStore
+ 65h Novell NetWare (3.11)
+ 67h Novell
+ 68h Novell
+ 69h Novell
+ 70h DiskSecure Multi-Boot
+ 71h officially listed as reserved
+ 73h officially listed as reserved
+ 74h officially listed as reserved
+ 75h PC/IX
+ 76h officially listed as reserved
+ 7Eh F.I.X.
+ 80h Minix v1.1 - 1.4a
+ 81h Minix v1.4b+
+ 81h Linux
+ 81h Mitac Advanced Disk Manager
+ 82h Linux Swap partition
+ 82h Prime
+ 82h Solaris (Unix)
+ 83h Linux native file system (ext2fs/xiafs)
+ 84h OS/2-renumbered type 04h partition (related to hiding DOS C: drive)
+ 85h Linux EXT
+ 86h FAT16 volume/stripe set (Windows NT)
+ 87h HPFS Fault-Tolerant mirrored partition
+ 87h NTFS volume/stripe set
+ 93h Amoeba file system
+ 94h Amoeba bad block table
+ 98h Datalight ROM-DOS SuperBoot
+ 99h Mylex EISA SCSI
+ A0h Phoenix NoteBIOS Power Management "Save-to-Disk" partition
+ A1h officially listed as reserved
+ A3h officially listed as reserved
+ A4h officially listed as reserved
+ A5h FreeBSD, BSD/386
+ A6h OpenBSD
+ A9h NetBSD (http://www.netbsd.org/)
+ B1h officially listed as reserved
+ B3h officially listed as reserved
+ B4h officially listed as reserved
+ B6h officially listed as reserved
+ B6h Windows NT mirror set (master), FAT16 file system
+ B7h BSDI file system (secondarily swap)
+ B7h Windows NT mirror set (master), NTFS file system
+ B8h BSDI swap partition (secondarily file system)
+ BEh Solaris boot partition
+ C0h DR DOS/DR-DOS/Novell DOS secured partition
+ C0h CTOS
+ C1h DR DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition
+ C4h DR DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition
+ C6h DR DOS 6.0 LOGIN.EXE-secured Huge partition
+ C6h corrupted FAT16 volume/stripe set (Windows NT)
+ C6h Windows NT mirror set (slave), FAT16 file system
+ C7h Syrinx Boot
+ C7h corrupted NTFS volume/stripe set
+ C7h Windows NT mirror set (slave), NTFS file system
+ CBh Reserved for DR DOS/DR-DOS/OpenDOS secured FAT32
+ CCh Reserved for DR DOS/DR-DOS secured FAT32 (LBA)
+ CEh Reserved for DR DOS/DR-DOS secured FAT16 (LBA)
+ D0h Multiuser DOS secured FAT12
+ D1h Old Multiuser DOS secured FAT12
+ D4h Old Multiuser DOS secured FAT16 (<= 32M)
+ D5h Old Multiuser DOS secured extended partition
+ D6h Old Multiuser DOS secured FAT16 (> 32M)
+ D8h CP/M-86
+ DBh CP/M, Concurrent CP/M, Concurrent DOS
+ DBh CTOS (Convergent Technologies OS)
+ E1h SpeedStor 12-bit FAT extended partition
+ E2h DOS read-only (Florian Painke's XFDISK 1.0.4)
+ E3h DOS read-only
+ E3h Storage Dimensions
+ E4h SpeedStor 16-bit FAT extended partition
+ E5h officially listed as reserved
+ E6h officially listed as reserved
+ EBh BeOS BFS (BFS1)
+ F1h Storage Dimensions
+ F2h DOS 3.3+ secondary partition
+ F3h officially listed as reserved
+ F4h SpeedStor
+ F4h Storage Dimensions
+ F5h Prologue
+ F6h officially listed as reserved
+ FEh LANstep
+ FEh IBM PS/2 IML (Initial Microcode Load) partition
+ FFh Xenix bad block table
+Note: for partition type 07h, one should inspect the partition boot record
+ for the actual file system type
+SeeAlso: #00651
+
+(Table 00653)
+Values Bootstrap loader is called with (IBM BIOS):
+ CS:IP = 0000h:7C00h
+ DH = access
+ bits 7-6,4-0: don't care
+ bit 5: =0 device supported by INT 13
+ DL = boot drive
+ 00h first floppy
+ 80h first hard disk
+--------B-1A00-------------------------------
+INT 1A - TIME - GET SYSTEM TIME
+ AH = 00h
+Return: CX:DX = number of clock ticks since midnight
+ AL = midnight flag, nonzero if midnight passed since time last read
+Notes: there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
+ (except on Tandy 2000, where the clock runs at 20 ticks per second)
+ IBM and many clone BIOSes set the flag for AL rather than incrementing
+ it, leading to loss of a day if two consecutive midnights pass
+ without a request for the time (e.g. if the system is on but idle)
+ since the midnight flag is cleared, if an application calls this
+ function after midnight before DOS does, DOS will not receive the
+ midnight flag and will fail to advance the date
+ Modern releases of MS-DOS/PC DOS (5.0+???) assume that AL is a day
+ rollover counter rather than a flag, as expected by older releases.
+ DOS 5 - 7.10 (Windows 98 SE) provide an undocumented CONFIG.SYS
+ SWITCHES=/T option to force the old behaviour of the day advancing
+ code, that is using a flag instead of a counter.
+ DR DOS 3.31 - DR-DOS 7.03 handle AL as a flag.
+SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 55"Tandy 2000",INT 4E/AH=02h"TI"
+SeeAlso: INT 62/AX=0099h,MEM 0040h:006Ch,MEM 0040h:0070h
+--------B-1A01-------------------------------
+INT 1A - TIME - SET SYSTEM TIME
+ AH = 01h
+ CX:DX = number of clock ticks since midnight
+Return: nothing
+Notes: there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
+ (except on Tandy 2000, where the clock runs at 20 ticks per second)
+ this call resets the midnight-passed flag
+SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
+--------B-1A02-------------------------------
+INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
+ AH = 02h
+ CF clear to avoid bug (see below)
+Return: CF clear if successful
+ CH = hour (BCD)
+ CL = minutes (BCD)
+ DH = seconds (BCD)
+ DL = daylight savings flag (00h standard time, 01h daylight time)
+ CF set on error (i.e. clock not running or in middle of update)
+Notes: this function is also supported by the Sperry PC, which predates the
+ IBM AT; the data is returned in binary rather than BCD on the Sperry,
+ and DL is always 00h
+ MS-DOS/PC DOS IO.SYS/IBMBIO.COM use this function to detect if a RTC
+ is preset by checking if the returned values are non-zero. If they
+ are, this function is called one more time, before it is assumed
+ that no RTC is present.
+BUG: some BIOSes leave CF unchanged if successful, so CF should be cleared
+ before calling this function
+SeeAlso: AH=00h,AH=03h,AH=04h,INT 21/AH=2Ch
+--------b-1A02-------------------------------
+INT 1A - Tandy 2000 - TIME - GET DATE AND TIME
+ AH = 02h
+Return: BX = number of days since January 1, 1980
+ CH = hours
+ CL = minutes
+ DH = seconds
+ DL = hundredths
+SeeAlso: AH=03h"Tandy 2000",INT 55"Tandy 2000"
+--------B-1A03-------------------------------
+INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
+ AH = 03h
+ CH = hour (BCD)
+ CL = minutes (BCD)
+ DH = seconds (BCD)
+ DL = daylight savings flag (00h standard time, 01h daylight time)
+Return: nothing
+Note: this function is also supported by the Sperry PC, which predates the
+ IBM AT; the data is specified in binary rather than BCD on the
+ Sperry, and the value of DL is ignored
+SeeAlso: AH=01h,AH=03h,AH=05h,INT 21/AH=2Dh,INT 4B/AH=01h
+--------b-1A03-------------------------------
+INT 1A - Tandy 2000 - TIME - SET DATE AND TIME
+ AH = 03h
+ BX = number of days since January 1, 1980
+ CH = hours
+ CL = minutes
+ DH = seconds
+ DL = hundredths
+Return: nothing
+SeeAlso: AH=02h"Tandy 2000",INT 55"Tandy 2000"
+--------B-1A04-------------------------------
+INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
+ AH = 04h
+ CF clear to avoid bug (see below)
+Return: CF clear if successful
+ CH = century (BCD)
+ CL = year (BCD)
+ DH = month (BCD)
+ DL = day (BCD)
+ CF set on error
+Notes: DR-DOS 7.02 (after 1998-06-06) and 7.03 hook this function and correct
+ the century to 20xx if the reported year is 1900..1980 to auto-fix
+ ROM-BIOSes which are not Year 2000 compliant. On a running system,
+ it would also correct the rollover bug from 1999/12/31 to 2000/01/01.
+ The latter can be turned off using the new CONFIG.SYS YEAR2000=ON|OFF
+ command, as hooking INT 1Ah can sometimes cause compatibility
+ problems with 3rd party software, e.g. NCR/Symbios/LSI Logic-based
+ SDMS PCI SCSI drivers (including all OEM drivers like from Asus,
+ Noma, etc.), some Flash-BIOS software like Asus PFLASH, Quarterdeck's
+ QEMM Stealth and Quick-Boot features.
+ Using EXCLUDESTEALTHINT=1A, though, will allow QEMM's Stealth features
+ to coexist with the DR-DOS Year 2000 rollover support.
+ Actually, the Y2K-fix is provided since OpenDOS 7.02 BETA 2+
+ (1997-08-13), but although these older releases corrected the
+ ROM-BIOS, they didn't pass all Y2K-test suites and had some obscure
+ and inexplicable PCI problems due to the fact that the original
+ INT 1Ah was called via indirect means. Newer releases, however, use
+ a dynamically fixed-up direct jump to avoid these problems.
+ PC DOS 7 plus Y2K fixes and PC DOS 2000 provide similar, though not
+ identical means, which cannot be switched off.
+ MS-DOS and older issues of PC DOS do not provide any such means, and
+ thus requires extra Y2K-TSRs to be loaded when run on buggy BIOSes.
+BUG: some BIOSes, such as the 1998/07/25 system ROM in the Compaq Deskpro
+ EP/SB, leave CF unchanged if successful, so CF should be cleared
+ before calling this function
+SeeAlso: AH=02h,AH=04h"Sperry",AH=05h,INT 21/AH=2Ah,INT 4B/AH=02h"TI"
+--------b-1A04-------------------------------
+INT 1A - Sperry PC - GET REAL-TIME CLOCK DATE
+ AH = 04h
+Return: CF clear if successful
+ CL = year-1980
+ DH = month (binary) (01h-0Ch)
+ DL = day (binary) (01h-1Fh)
+ CF set on error
+SeeAlso: AH=02h,AH=04h,AH=05h"Sperry",INT 21/AH=2Ah,INT 4B/AH=02h"TI"
+----------1A04--CX4555-----------------------
+INT 1A - CheckIt Year 2000 Fix v2.06 - INSTALLATION CHECK
+ AH = 04h
+ CX = 4555h ('EU')
+ DX = 524Fh ('RO')
+ BX = 0000h
+Return: BX <> 0000h if installed
+ BX = major/minor/sub version (2068h = version 2.06.8)
+Program: CheckIt is a TSR by Eurosoft (UK) Ltd. which corrects some Y2K-related
+ RTC bugs
+--------B-1A05-------------------------------
+INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
+ AH = 05h
+ CH = century (BCD)
+ CL = year (BCD)
+ DH = month (BCD)
+ DL = day (BCD)
+Return: nothing
+SeeAlso: AH=04h,INT 21/AH=2Bh"DATE",INT 4B/AH=00h"TI"
+--------b-1A05-------------------------------
+INT 1A - Sperry PC - SET REAL-TIME CLOCK DATE
+ AH = 05h
+ CL = year-1980
+ CH = 00h (???)
+ DH = month (binary) (01h-0Ch)
+ DL = day (binary) (01h-1Fh)
+Return: nothing
+SeeAlso: AH=02h,AH=04h"Sperry",AH=05h,INT 21/AH=2Bh"DATE"
+--------B-1A06-------------------------------
+INT 1A - TIME - SET ALARM (AT,XT286,PS)
+ AH = 06h
+ CH = hour (BCD)
+ CL = minutes (BCD)
+ DH = seconds (BCD)
+Return: CF set on error (alarm already set or clock stopped for update)
+ CF clear if successful
+Notes: the alarm occurs every 24 hours until turned off, invoking INT 4A each
+ time
+ the BIOS does not check for invalid values for the time, so the CMOS
+ clock chip's "don't care" setting (any values between C0h and FFh)
+ may be used for any or all three parts. For example, to create an
+ alarm once a minute, every minute, call with CH=FFh, CL=FFh, and
+ DH=00h.
+SeeAlso: AH=07h,AH=0Ch,INT 4A"SYSTEM"
+--------B-1A07-------------------------------
+INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
+ AH = 07h
+Return: alarm disabled
+Note: does not disable the real-time clock's IRQ
+SeeAlso: AH=06h,AH=0Dh,INT 70
+--------B-1A08-------------------------------
+INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
+ AH = 08h
+ CH = hours in BCD
+ CL = minutes in BCD
+ DH = seconds in BCD
+SeeAlso: AH=09h
+--------B-1A09-------------------------------
+INT 1A - TIME - 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
+ 00h alarm not enabled
+ 01h alarm enabled but will not power up system
+ 02h alarm will power up system
+SeeAlso: AH=08h
+--------B-1A0A-------------------------------
+INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
+ AH = 0Ah
+Return: CF set on error
+ CF clear if successful
+ CX = count of days since Jan 1,1980
+SeeAlso: AH=04h,AH=0Bh
+--------B-1A0B-------------------------------
+INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
+ AH = 0Bh
+ CX = count of days since Jan 1,1980
+Return: CF set on error
+ CF clear if successful
+SeeAlso: AH=05h,AH=0Ah
+--------B-1A0C-------------------------------
+INT 1A - TIME - SET RTC DATE/TIME ACTIVATED POWER-ON MODE (IBM)
+ AH = 0Ch
+ CH = hours (BCD)
+ CL = minutes (BCD)
+ DH = seconds (BCD)
+ DL = day of month (BCD)
+Return: CF clear if successful
+ CF set on error (alarm already set or clock nonfunctional)
+Desc: set an automatic power-on for a given time in the future
+Note: IBM classifies this function as optional
+SeeAlso: AH=06h,AH=0Dh,AH=0Eh,INT 4A
+--------B-1A0D-------------------------------
+INT 1A - TIME - RESET RTC DATE/TIME ACTIVATED POWER-ON MODE (IBM)
+ AH = 0Dh
+Return: CF clear if successful
+ CF set on error
+Desc: cancel a previously-set power-on alarm
+Note: IBM classifies this function as optional
+SeeAlso: AH=07h,AH=0Ch,AH=0Eh
+--------B-1A0E-------------------------------
+INT 1A - TIME - GET RTC DATE/TIME ALARM AND STATUS (IBM)
+ AH = 0Eh
+Return: CF clear if successful
+ BH = alarm status
+ 00h disabled
+ 01h enabled but will not power-up system
+ 02h enabled, system will power-up on activation
+ CH = alarm time, hours (BCD)
+ CL = alarm time, minutes (BCD)
+ DH = seconds (BCD)
+ DL = day of month (BCD)
+ CF set on error
+SeeAlso: AH=0Ch,AH=0Dh,AH=0Fh
+--------B-1A0F-------------------------------
+INT 1A - TIME - INITIALIZE REAL-TIME CLOCK
+ AH = 0Fh
+ AL = reserved (0)
+Return: CF clear if successful
+ CF set on error
+SeeAlso: AH=0Ch,AH=0Dh,AH=0Eh
+--------J-1A10-------------------------------
+INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
+ AH = 10h
+ ???
+Return: ???
+SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
+--------J-1A1000-----------------------------
+INT 1A - NEC PC-9800 series - INSTALLATION CHECK
+ AX = 1000h
+Return: AX <> 1000h if NEC
+--------J-1A11-------------------------------
+INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
+ AH = 11h
+ ???
+Return: ???
+SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
+--------J-1A12-------------------------------
+INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
+ AH = 12h
+ ???
+Return: ???
+SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
+--------A-1A3601-----------------------------
+INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
+ AX = 3601h
+Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
+ ASCIZ string "WPCORP\0"
+Notes: WordPerfect 5.0 will call this interrupt at start up to determine if a
+ third party product wants to interface with it. The third party
+ product must intercept this interrupt and return the address of a
+ keyboard monitor routine.
+ Before checking for keyboard input, and after every key entered by the
+ user, Word Perfect will call the routine whose address was provided
+ in DS:SI with the following parameters:
+ Entry: AX = key code or 0
+ BX = WordPerfect state flag
+ Exit: AX = 0 or key code
+ BX = 0 or segment address of buffer with key codes
+ See the "WordPerfect 5.0 Developer's Toolkit" for further information.
+SeeAlso: INT 16/AX=5500h
+--------N-1A6108-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
+ AX = 6108h
+ STACK: WORD conversation ID (0000h-0009h)
+ DWORD pointer to message buffer
+ WORD length of message
+ DWORD pointer to reply buffer
+ WORD length of reply buffer
+ WORD 0000h (use default "Cparams" structure)
+Return: AX = status (see #00654)
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+SeeAlso: AX=6205h
+
+(Table 00654)
+Values for SNAP.EXE status:
+ 0000h successful
+ F830h "SNAP_ABORTED"
+ FC04h "SNAP_SERVERDIED"
+ FC05h "SNAP_RESEND"
+ FC06h "SNAP_SELECTFAILED"
+ FC07h "SNAP_WRONGVERSION"
+ FC08h "SNAP_INVALIDACK"
+ FC09h "SNAP_TIMEOUT"
+ FC0Ah "SNAP_SERVERREJECT"
+ FC0Bh "SNAP_NOREPLYDUE"
+ FC0Ch "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
+ FC0Dh "SNAP_NOINIT"
+ FC0Eh "SNAP_SOCKETERROR"
+ FC0Fh "SNAP_BUFFERLIMIT"
+ FC10h "SNAP_INVALIDCID"
+ FC11h "SNAP_INVALIDOP"
+ FC12h "SNAP_XMITFAIL"
+ FC13h "SNAP_NOMORERETRIES"
+ FC14h "SNAP_BADPARMS"
+ FC15h "SNAP_NOMEMORY"
+ FC16h "SNAP_NOMORECONVS"
+ FFFFh failed (invalid function/parameter)
+--------N-1A6205-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
+ AX = 6205h
+ STACK: WORD conversation ID (0000h-0009h)
+ DWORD pointer to message
+ WORD length of message
+ WORD 0000h (use default "Cparms" structure)
+Return: AX = status (see #00654)
+ STACK unchanged
+SeeAlso: AX=6108h
+--------N-1A6308-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
+ AX = 6308h
+ STACK: WORD offset of ASCIZ "guardian"
+ WORD offset of ASCIZ hostname
+ WORD offset of ASCIZ server name
+ WORD offset of ASCIZ userid
+ WORD offset of ASCIZ password
+ WORD offset of password length
+ WORD offset of password type
+ WORD offset of "Cparms" structure (see #00655)
+Return: ???
+ STACK unchanged
+Note: all stacked offsets are within the SNAP data segment (use AX=6A01h
+ to allocate a buffer)
+SeeAlso: AX=6405h,AX=7202h
+
+Format of SNAP.EXE Cparms structure:
+Offset Size Description (Table 00655)
+ 00h WORD retry delay in seconds
+ 02h WORD timeout delay in seconds
+ 04h WORD maximum buffer size
+ 06h WORD encryption level
+--------N-1A6405-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
+ AX = 6405h
+ STACK: WORD conversation ID (0000h-0009h)
+ DWORD pointer to message buffer
+ WORD length of message
+ WORD 0000h (use default "Cparms" structure)
+Return: AX = status (see #00654)
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+SeeAlso: AX=6308h
+--------N-1A6900-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
+ AX = 6900h
+Return: AX = value used for DS by resident code
+SeeAlso: AX=6A01h,AX=6F01h
+--------N-1A6A01-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
+ AX = 6A01h
+ STACK: WORD number of bytes to allocate
+Return: AX = offset of allocated buffer or 0000h if out of memory
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+SeeAlso: AX=6B01h
+--------N-1A6B01-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
+ AX = 6B01h
+ STACK: WORD offset within SNAP data segment of previously allocated
+ buffer
+Return: STACK unchanged
+Note: this call is a NOP if the specified offset is 0000h
+SeeAlso: AX=6A01h
+--------N-1A6C04-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
+ AX = 6C04h
+ STACK: WORD offset within SNAP data segment of dest (nonzero)
+ WORD segment of source buffer
+ WORD offset of source buffer
+ WORD number of bytes to copy
+Return: AX = offset of byte after last one copied to destination
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+SeeAlso: AX=6D04h
+--------N-1A6D04-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
+ AX = 6D04h
+ STACK: WORD offset within SNAP data segment of source buffer
+ WORD segment of destination buffer
+ WORD offset of destination buffer
+ WORD number of bytes to copy
+Return: AX = offset of byte after last one copied from source
+ buffer filled
+ STACK unchanged
+SeeAlso: AX=6C04h
+--------N-1A6E01-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
+ AX = 6E01h
+ STACK: WORD new value for ???
+Return: AX = old value of ???
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+--------N-1A6F01-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
+ AX = 6F01h
+ STACK: WORD 0000h
+Return: AX = status
+ 0000h SNAP is resident
+ other SNAP not present
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol, and is
+ required by PCVENUS (a network shell). The combination of SNAP and
+ PCVENUS allows the use of the Andrew File System as one or more
+ networked drives.
+SeeAlso: AX=6900h,AX=7400h
+--------N-1A7002-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
+ AX = 7002h
+ STACK: WORD anchor number (0000h-0009h)
+ WORD new value for the anchor
+Return: AX = status
+ 0000h successful
+ FFFFh failed (top word on stack not in range 00h-09h)
+ STACK unchanged
+SeeAlso: AX=7101h
+--------N-1A7101-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
+ AX = 7101h
+ STACK: WORD anchor number (0000h-0009h)
+Return: AX = anchor's value
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+SeeAlso: AX=7002h
+--------N-1A7202-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
+ AX = 7202h
+ STACK: WORD conversation ID (0000h-0009h)
+ WORD offset within resident data segment of "Cparms"
+ structure (see #00655)
+Return: AX = status???
+ STACK unchanged
+SeeAlso: AX=6308h
+--------N-1A7302-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
+ AX = 7302h
+ STACK: WORD conversation ID (0000h-0009h)
+ WORD offset within resident data segment of ???
+Return: AX = ???
+ ???
+ STACK unchanged
+SeeAlso: AX=7400h
+--------N-1A7400-----------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
+ AX = 7400h
+Return: AX = version (AH=major, AL=minor)
+Note: this call is only valid if SNAP is installed
+SeeAlso: AX=7302h,INT 1A/AX=6F01h
+--------N-1A75-------------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
+ AH = 75h
+ AL = ???
+Return: AX = ??? (0000h)
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+--------N-1A76-------------------------------
+INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
+ AH = 76h
+ AL = ???
+Return: AX = ???
+--------N-1A77-------------------------------
+INT 1A - SNAP.EXE 3.4 - ???
+ AH = 77h
+ AL = ??? (at least 01h)
+ STACK: WORD ???
+ ???
+Return: ???
+ STACK unchanged
+--------N-1A7802-----------------------------
+INT 1A - SNAP.EXE 3.4 - ???
+ AX = 7802h
+ STACK: WORD ???
+ WORD ???
+Return: ???
+ STACK unchanged
+Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
+ which implements the Simple Network Application Protocol
+--------s-1A7F-------------------------------
+INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
+ AH = 7Fh
+ ???
+Return: ???
+Note: this function is not supported by the Tandy 1000SL/TL BIOS
+SeeAlso: AH=80h,AH=83h,AH=85h
+--------s-1A80-------------------------------
+INT 1A - PCjr, Tandy 2500???, Tandy 1000SL/TL - SET UP SOUND MULTIPLEXOR
+ AH = 80h
+ AL = 00h source is 8253 channel 2
+ 01h source is cassette input
+ 02h source is I/O channel "Audio IN"
+ 03h source is sound generator chip
+Note: although documented in the 1000TL Technical Reference, the 1000TL
+ BIOS has just an IRET for this call
+SeeAlso: AH=7Fh,AH=83h
+--------X-1A80-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET NUMBER OF ADAPTERS
+ AH = 80h
+Return: CF clear if successful
+ CX = 5353h ('SS') if Socket Services installed
+ AL = number of adapters present (0-16)
+ AH destroyed
+ CF set on error
+ AH = error code (see #00656)
+SeeAlso: AH=83h"PCMCIA"
+
+(Table 00656)
+Values for PCMCIA error codes:
+ 01h "BAD_ADAPTER" nonexistent adapter
+ 02h "BAD_ATTRIBUTE" invalid attribute specified
+ 03h "BAD_BASE" invalid system memory base address
+ 04h "BAD_EDC" invalid EDC generator specified
+ 05h "BAD_INDICATOR" invalid indicator specified
+ 06h "BAD_IRQ" invalid IRQ channel specified
+ 07h "BAD_OFFSET" invalid PCMCIA card offset specified
+ 08h "BAD_PAGE" invalid page specified
+ 09h "BAD_READ" unable to complete request
+ 0Ah "BAD_SIZE" invalid window size specified
+ 0Bh "BAD_SOCKET" nonexistent socket specified
+ 0Ch "BAD_TECHNOLOGY" unsupported Card Technology for writes
+ 0Dh "BAD_TYPE" unavailable window type specified
+ 0Eh "BAD_VCC" invalid Vcc power level index specified
+ 0Fh "BAD_VPP" invalid Vpp1 or Vpp2 power level index specified
+ 10h "BAD_WAIT" invalid number of wait states specified
+ 11h "BAD_WINDOW" nonexistent window specified
+ 12h "BAD_WRITE" unable to complete request
+ 13h "NO_ADAPTERS" no adapters installed, but Socket Services is present
+ 14h "NO_CARD" no card in socket
+ 15h function not supported
+ 16h invalid mode
+ 17h invalid speed
+ 18h busy
+--------X-1A81-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - REGISTER STATUS CHANGE CALLBACK
+ AH = 81h
+ DS:DX -> callback routine (see #00657) or 0000h:0000h to disable
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (see #00656)
+Note: the callback will be invoked on any socket changes whose notification
+ has not been disabled with the status change enable mask; it may be
+ invoked either while processing a hardware interrupt from the adapter
+ or while processing the following Socket Services request
+SeeAlso: AH=80h"PCMCIA",AH=82h"PCMCIA"
+
+(Table 00657)
+Values PCMCIA callback routine is invoked with:
+ AL = adapter number
+ BH = status change interrupt enable mask (see #00658)
+ BL = socket number
+ DH = current socket status (see #00659)
+ DL = current card status (see #00660)
+Return: all registers preserved
+Notes: the callback may be invoked during a hardware interrupt, and may not
+ call on Socket Services
+ the callback will be invoked once for each socket with a status change
+
+Bitfields for PCMCIA status change interrupt enable mask:
+Bit(s) Description (Table 00658)
+ 7 card detect change
+ 6 ready change
+ 5 battery warning change
+ 4 battery dead change
+ 3 insertion request
+ 2 ejection request
+ 1-0 reserved (0)
+
+Bitfields for PCMCIA current socket status:
+Bit(s) Description (Table 00659)
+ 7 card changed
+ 6 reserved (0)
+ 5 card insertion complete
+ 4 card ejection complete
+ 3 card insertion request pending
+ 2 card ejection request pending
+ 1 card locked
+ 0 reserved (0)
+
+Bitfields for PCMCIA current card status:
+Bit(s) Description (Table 00660)
+ 7 card detect
+ 6 ready
+ 5 battery voltage detect 2 (battery warning)
+ 4 battery voltage detect 1 (battery dead)
+ 3-1 reserved (0)
+ 0 write protected
+--------s-1A8100-----------------------------
+INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
+ AX = 8100h
+Return: AL > 80h if supported
+ AX = 00C4h if supported (1000SL/TL)
+ CF set if sound chip is busy
+ CF clear if sound chip is free
+Note: the value of CF is not definitive; call this function until CF is
+ clear on return, then call AH=84h"Tandy"
+--------s-1A82-------------------------------
+INT 1A - Tandy 2500???, Tandy 1000SL/TL - DIGITAL SOUND - RECORD SOUND
+ AH = 82h
+ ES:BX -> buffer for sound samples
+ CX = length of buffer
+ DX = transfer rate (1-4095, 1 is fastest)
+Return: AH = 00h
+ CF set if sound busy
+ CF clear if sound chip free
+Note: the value in DX should be 1/10 the corresponding value for
+ INT 1A/AH=83h on the 1000TL, 1/11.5 on the 1000SL. Call
+ INT 1A/AX=8100h and INT 1A/AH=84h before invoking this function.
+ The BIOS issues an INT 15/AX=91FBh when the input is complete
+ DMA across a 64K boundary is masked by the BIOS
+--------X-1A82-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - REGISTER CARD TECHNOLOGY CALLBACK
+ AH = 82h
+ DS:DX -> callback routine (see #00661) or 0000h:0000h
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (see #00656)
+Note: the callback is invoked on a Write Multiple request with an unsupported
+ card technology type
+SeeAlso: AH=81h"PCMCIA",AH=94h
+
+(Table 00661)
+Values PCMCIA callback routine is invoked with:
+ ES:AX -> Low-Level Socket Services Routines (see #00663)
+ BH = socket attributes (see #00662)
+ CX = number of bytes or words to write
+ DS:SI -> data buffer to be written
+ DX:DI -> 26-bit linear card address
+ BP = card technology type
+Return: CF clear if successful
+ CF set on error
+ AH = error code (07h,0Ch,12h,14h) (see #00656)
+
+Bitfields for PCMCIA socket attributes:
+Bit(s) Description (Table 00662)
+ 7-4 reserved (0)
+ 3 packed buffer
+ 2 even bytes only (only valid if 1 set)
+ 1 data width (clear = byte, set = word)
+ 0 memory type (clear = common, set = attribute)
+
+Format of PCMCIA Low-Level Socket Services Routines:
+Offset Size Description (Table 00663)
+ 00h WORD offset of Write Many routine (see #00664)
+ 02h WORD offset of Write One routine (see #00665)
+ 04h WORD offset of Read One routine (see #00666)
+ 06h WORD offset of Increment Offset routine (see #00667)
+ 08h WORD offset of Set Offset routine (see #00668)
+ 0Ah WORD offset of Get Status routine (see #00669)
+
+(Table 00664)
+Call Write Many routine with:
+ BH = socket attributes (see #00662)
+ CX = number of bytes or words to write
+ DS:SI -> data to be written
+Return: CF clear if successful
+ CF set on error
+
+(Table 00665)
+Call Write One routine with:
+ AL/AX = data to be written
+ BH = socket attributes (see #00662)
+Return: CF clear if successful
+ CF set on error
+
+(Table 00666)
+Call Read One routine with:
+ BH = socket attributes (see #00662)
+Return: CF clear if successful
+ AL/AX = data read
+ CF set on error
+
+(Table 00667)
+Call Increment Offset routine with:
+ BH = socket attributes (see #00662)
+Return: CF clear if successful
+ CF set on error
+
+(Table 00668)
+Call Set Offset routine with:
+ DX:DI = new offset address
+Return: CF clear if successful
+ CF set on error
+
+(Table 00669)
+Call Get Status routine with:
+ nothing
+Return: AL = current card status (see #00660)
+--------s-1A83-------------------------------
+INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
+ AH = 83h
+ AL = volume (0=silence, 7=highest)
+ CX = number of bytes to play
+ DX = time between sound samples (multiples of 273 nanoseconds)
+ only bits 11-0 used
+ ES:BX -> sound data (array of 8-bit unsigned PCM samples)
+Return: AH = 00h
+ CF set if sound is busy
+ CF clear if sound chip is free
+Notes: this call returns immediately while the sound plays in the
+ background; the sound chip is clocked at 3.57 MHz, with the low 12
+ bits of DX specifying the clock divisor
+ The BIOS appears to call INT 15/AX=91FBh when the sound device
+ underflows to allow another INT 1A/AH=83h for seamless playing of
+ long sounds.
+SeeAlso: AH=84h"Tandy",INT 15/AH=91h
+--------X-1A83-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET SOCKET SERVICES VERSION NUMBER
+ AH = 83h
+ AL = adapter number
+Return: CF clear if successful
+ AX = Socket Services version (BCD)
+ BX = implementation version (BCD)
+ CX = 5353h ("SS")
+ DS:SI -> ASCIZ implementor description
+ CF set on error
+ AH = error code (01h) (see #00656)
+Note: the current version (from the Revision A.00 documentation) of Socket
+ Services is 1.00 (AX=0100h)
+SeeAlso: AH=80h"PCMCIA"
+--------s-1A84-------------------------------
+INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
+ AH = 84h
+Return: ???
+Note: the BIOS will call INT 15/AX=91FBh when the sound has stopped playing
+SeeAlso: AH=83h"Tandy",AH=85h"Tandy"
+--------X-1A84-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - INQUIRE ADAPTER
+ AH = 84h
+ AL = adapter number
+Return: CF clear if successful
+ AH destroyed
+ BH = number of windows
+ BL = number of sockets (1-16)
+ CX = number of EDCs
+ DH = capabilities (see #00670)
+ DL = status change interrupt used (only if DH bit 3 set)(see #00671)
+ CF set on error
+ AH = error code (01h) (see #00656)
+SeeAlso: AH=80h"PCMCIA",AH=85h"PCMCIA",AH=87h
+
+Bitfields for PCMCIA capabilities:
+Bit(s) Description (Table 00670)
+ 7-6 reserved (0)
+ 5 status change interrupt is hardware shareable
+ 4 status change interrupt is software shareable
+ 3 status change interrupt
+ 2 data bus width is per-socket rather than per-window
+ 1 power management is per-adapter rather than per-socket
+ 0 indicators are per-adapter rather than per-socket
+
+(Table 00671)
+Values for PCMCIA status change interrupt usage:
+ 00h-0Fh IRQ level
+ 10h NMI
+ 11h I/O check
+ 12h bus error
+ 13h vendor specific
+ 14h-FFh reserved
+--------s-1A85-------------------------------
+INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
+ AH = 85h
+ ???
+Return: ???
+Note: this function is not supported by the Tandy 1000SL/TL BIOS
+SeeAlso: AH=7Fh,AH=83h"Tandy"
+--------X-1A85-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET ADAPTER
+ AH = 85h
+ AL = adapter number
+Return: CF clear if successful
+ AH destroyed
+ DH = adapter attributes (see #00672)
+ CF set on error
+ AH = error code (01h) (see #00656)
+SeeAlso: AH=84h"PCMCIA",AH=86h
+
+Bitfields for PCMCIA adapter attributes:
+Bit(s) Description (Table 00672)
+ 7-5 reserved (0)
+ 4 hardware share status change
+ 3 software share status change
+ 2 enable status change interrupts
+ 1 adapter preserves state information during reduced power consumption
+ 0 attempting to reduce power consumption
+--------X-1A86-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - SET ADAPTER
+ AH = 86h
+ AL = adapter number
+ DH = new adapter attributes (see #00672)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h) (see #00656)
+SeeAlso: AH=84h"PCMCIA",AH=85h"PCMCIA"
+--------X-1A87-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - INQUIRE WINDOW
+ AH = 87h
+ AL = adapter number
+ BH = window number
+Return: CF clear if successful
+ AH destroyed
+ BL = capabilities (see #00673)
+ CX = bitmap of assignable sockets
+ DH = EISA A15-A12 address lines (in bits 7-4, bits 3-0 = 0)
+ DL = supported access speeds (see #00674)
+ DS:SI -> Memory Window Characteristics table (see #00675)
+ DS:DI -> I/O Window Characteristics table (see #00676)
+ CF set on error
+ AH = error code (01h,11h) (see #00656)
+SeeAlso: AH=84h"PCMCIA",AH=88h,AH=89h,AH=8Ch
+
+Bitfields for PCMCIA window capabilities:
+Bit(s) Description (Table 00673)
+ 7-5 reserved (0)
+ 4 separate enable for EISA comon space
+ 3 EISA I/O mappable
+ 2 I/O space
+ 1 attribute memory
+ 0 common memory
+
+Bitfields for PCMCIA supported access speeds:
+Bit(s) Description (Table 00674)
+ 7 reserved (0)
+ 6 600 ns
+ 5 300 ns
+ 4 250 ns
+ 3 200 ns
+ 2 150 ns
+ 1 100 ns
+ 0 WAIT line monitoring
+
+Format of PCMCIA Memory Window Characteristics table:
+Offset Size Description (Table 00675)
+ 00h WORD window capabilities (see #00677)
+ 02h WORD minimum base address in 4K pages
+ 04h WORD maximum base address in 4K pages
+ 06h WORD minimum window size in 4K pages
+ 08h WORD maximum window size in 4K pages
+ 0Ah WORD window size granularity (4K units)
+ 0Ch WORD required base address alignment (4K units)
+ 0Eh WORD required card offset alignment (4K units)
+
+Format of PCMCIA I/O Window Characteristics table:
+Offset Size Description (Table 00676)
+ 00h WORD window capabilities (see #00677)
+ 02h WORD minimum base address in bytes
+ 04h WORD maximum base address in bytes
+ 06h WORD minimum window size in bytes
+ 08h WORD maximum window size in bytes
+ 0Ah WORD window size granularity (bytes)
+
+Bitfields for PCMCIA window capabilities:
+Bit(s) Description (Table 00677)
+ 0 programmable base address
+ 1 programmable window size
+ 2 window disable/enable supported
+ 3 8-data bus
+ 4 16-data bus
+ 5 base address alignment on size boundary required
+ 6 power-of-two size granularity
+---memory windows---
+ 7 card offset must be aligned on size boundary
+ 8 paging hardware available
+ 9 paging hardware shared
+ 10 page disable/enable supported
+ 11-15 reserved (0)
+---I/O windows---
+ 7-15 reserved (0)
+--------X-1A88-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET WINDOW
+ AH = 88h
+ AL = adapter number
+ BH = window number
+Return: CF clear if successful
+ AH destroyed
+ BL = socket number (0-16) (0 = not assigned)
+ CX = window size (bytes for I/O window, 4K units for memory window)
+ DH = window attributes (see #00678)
+ DL = access speed (only one bit set) (see #00674)
+ SI = window base address (bytes if I/O, 4K units if memory)
+ DI = card offset address (memory only, 4K units)
+ CF set on error
+ AH = error code (01h,11h) (see #00656)
+SeeAlso: AH=87h,AH=89h,AH=8Ah
+
+Bitfields for PCMCIA window attributes:
+Bit(s) Description (Table 00678)
+ 0 memory-mapped rather than I/O-mapped
+ 1 attribute memory rather than common (memory-mapped)
+ EISA mapped (I/O)
+ 2 enabled
+ 3 16-data path
+ 4 subdivided into pages (memory-mapped only)
+ 5 non-specific access slot enable (EISA-mapped only)
+ 6-7 reserved (0)
+--------X-1A89-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - SET WINDOW
+ AH = 89h
+ AL = adapter number
+ BH = window number
+ BL = socket number
+ CX = window size (bytes if I/O window, 4K units if memory window)
+ DH = window attributes (see #00678)
+ DL = access speed (only one bit set) (see #00674)
+ SI = window base address (bytes if I/O, 4K units if memory window)
+ DI = card offset addrress (memory only, 4K units)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,03h,07h,08h,0Ah,0Bh,0Dh,10h,11h) (see #00656)
+SeeAlso: AH=87h,AH=88h,AH=8Bh
+--------X-1A8A-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET PAGE
+ AH = 8Ah
+ AL = adapter number
+ BH = window number
+ BL = page number
+Return: CF clear if successful
+ AH destroyed
+ DX = page attributes (see #00679)
+ DI = memory card offset (4K units)
+ CF set on error
+ AH = error code (01h,08h,11h) (see #00656)
+Notes: this function is only valid for memory-mapped windows
+ the socket being operated on is implied by the previous AH=89h call
+SeeAlso: AH=88h,AH=8Bh
+
+Bitfields for PCMCIA page attributes:
+Bit(s) Description (Table 00679)
+ 0 page enabled
+ 15-1 reserved (0)
+--------X-1A8B-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - SET PAGE
+ AH = 8Bh
+ AL = adapter number
+ BH = window number
+ BL = page number
+ DX = page attributes (see #00679)
+ DI = memory card offset (4K units)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,02h,07h,08h,11h) (see #00656)
+Notes: this function is only valid for memory-mapped windows
+ the socket being operated on is implied by the previous AH=89h call
+SeeAlso: AH=89h,AH=8Ah
+--------X-1A8C-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - INQUIRE SOCKET
+ AH = 8Ch
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+Return: CF clear if successful
+ AH destroyed
+ DH = capabilities (see #00680)
+ DL = hardware indicators (see #00681)
+ DS:SI -> Socket Characteristics table (see #00682)
+ DS:DI -> Power Management table (see #00684)
+ CF set on error
+ AH = error code (01h,0Bh) (see #00656)
+SeeAlso: AH=87h,AH=8Dh,AH=8Eh
+
+Bitfields for PCMCIA socket capabilities:
+Bit(s) Description (Table 00680)
+ 0 card change
+ 1 card lock
+ 2 insert card (motor control)
+ 3 eject card (motor control)
+ 4-7 reserved (0)
+
+Bitfields for PCMCIA socket hardware indicators:
+Bit(s) Description (Table 00681)
+ 0 busy status
+ 1 write-protected
+ 2 battery status
+ 3 card lock status
+ 4 XIP status (eXecute-In-Place)
+ 5-7 reserved (0)
+
+Format of PCMCIA Socket Characteristics table:
+Offset Size Description (Table 00682)
+ 00h WORD supported card types (see #00683)
+ 02h WORD steerable IRQ levels (bit 0 = IRQ0 to bit 15 = IRQ15)
+ 04h WORD additional steerable IRQ levels
+ bit 0: NMI
+ bit 1: I/O check
+ bit 2: bus error
+ bit 3: vendor-unique
+ bits 4-7 reserved (0)
+
+Bitfields for supported card types:
+Bit(s) Description (Table 00683)
+ 0 memory card
+ 1 I/O card
+ 2-7 reserved (0)
+
+Format of PCMCIA Power Management table:
+Offset Size Description (Table 00684)
+ 00h WORD number of entries in table (0 if power management not avail)
+ 02h 2N BYTEs power levels
+ byte 0: voltage in 0.1V units
+ byte 1: power supply
+ bit 7: Vcc
+ bit 6: Vpp1
+ bit 5: Vpp2
+--------X-1A8D-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET SOCKET
+ AH = 8Dh
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+Return: CF clear if successful
+ AH destroyed
+ BH = status change interrupt enable mask (see #00658)
+ CH = Vcc level (lower nybble) (see #00684)
+ CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
+ DH = current socket status (see #00659)
+ DL = indicators (see #00681)
+ SI = card type (see #00685)
+ DI = IRQ level steering (I/O only) (see #00686)
+ CF set on error
+ AH = error code (01h,0Bh) (see #00656)
+SeeAlso: AH=8Ch,AH=8Eh
+
+Bitfields for PCMCIA card type:
+Bit(s) Description (Table 00685)
+ 0 memory
+ 1 I/O
+ 2-15 reserved (0)
+
+Bitfields for PCMCIA I/O level steering:
+Bit(s) Description (Table 00686)
+ 15 interrupt steering enabled
+ 14-5 reserved (0)
+ 4-0 IRQ level (0-15=IRQ,16=NMI,17=I/O check,18=bus error,19=vendor)
+--------X-1A8E-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - SET SOCKET
+ AH = 8Eh
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+ BH = status change interrupt enable mask (see #00658)
+ CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
+ DH = current socket status (see #00659)
+ DL = indicators (see #00681)
+ SI = card type (see #00685)
+ DI = IRQ level steering (I/O only) (see #00686)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,02h,05h,06h,0Bh,0Eh,0Fh) (see #00656)
+SeeAlso: AH=8Ch,AH=8Dh
+--------X-1A8F-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET CARD
+ AH = 8Fh
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+Return: CF clear if successful
+ AH destroyed
+ DL = current card status (see #00660)
+ CF set on error
+ AH = error code (01h,0Bh) (see #00656)
+SeeAlso: AH=8Dh,AH=90h
+--------X-1A90-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - RESET CARD
+ AH = 90h
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,0Bh,14h) (see #00656)
+Note: toggles RESET pin of the specified card, but does not wait after
+ toggling the pin; it is the caller's responsibility to avoid
+ accessing the card before it is ready again
+--------X-1A91-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - READ ONE
+ AH = 91h
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+ BH = attributes (see #00687)
+ DX:SI = card address
+Return: CF clear if successful
+ AH destroyed
+ CL/CX = value read
+ CF set on error
+ AH = error code (01h,07h,09h,0Bh,14h) (see #00656)
+ CX may be destroyed
+Note: this function is only valid for I/O-mapped sockets
+SeeAlso: AH=92h,AH=93h,INT 21/AX=440Dh"DOS 3.2+"
+
+Bitfields for PCMCIA attributes:
+Bit(s) Description (Table 00687)
+ 2 even bytes only
+ 1 word rather than byte
+ 0 attribute memory instead of common memory
+--------X-1A92-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - WRITE ONE
+ AH = 92h
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+ BH = attributes (see #00687)
+ CL/CX = value to write
+ DX:SI = card address
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,07h,0Bh,12h,14h) (see #00656)
+Note: this function is only valid for I/O-mapped sockets; it also does not
+ implement Card Technology handling--use AH=94h when writing to
+ non-RAM technologies
+SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"DOS 3.2+"
+--------X-1A93-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - READ MULTIPLE
+ AH = 93h
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+ BH = attributes (see #00687)
+ CX = number of bytes or words to read
+ DX:SI = card address
+ DS:DI -> data buffer to be filled
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,07h,09h,0Bh,14h) (see #00656)
+Note: this function is only available on I/O-mapped sockets
+SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"DOS 3.2+"
+--------X-1A94-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - WRITE MULTIPLE
+ AH = 94h
+ AL = adapter number
+ BL = socket number (01h to maximum supported by adapter)
+ BH = attributes (see #00687)
+ CX = number of bytes or words to read
+ DX:DI = card address
+ DS:SI -> buffer containing data
+ BP = Card Technology type (0000h = RAM)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,07h,0Bh,0Ch,12h,14h) (see #00656)
+Notes: this function is only available on I/O-mapped sockets
+ Socket Services calls the Card Technology callback (see #00661) for
+ any card technology it does not directly support
+SeeAlso: AH=82h"PCMCIA",AH=92h,AH=93h,INT 21/AX=440Dh"DOS 3.2+"
+--------X-1A95-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - INQUIRE ERROR DETECTION CODE
+ AH = 95h
+ AL = adapter number
+ BH = EDC generator number
+Return: CF clear if successful
+ AH destroyed
+ CX = bitmap of assignable sockets
+ DH = EDC capabilities (see #00688)
+ DL = supported EDC types (see #00689)
+ CF set on error
+ AH = error code (01h,04h) (see #00656)
+SeeAlso: AH=96h,AH=9Ch
+
+Bitfields for EDC capabilities:
+Bit(s) Description (Table 00688)
+ 0 unidirectional only generation
+ 1 bidirectional only generation
+ 2 register-based (I/O-mapped) support
+ 3 memory-mapped support
+ 4 pausable
+ 5-7 reserved (0)
+
+Bitfields for supported EDC types:
+Bit(s) Description (Table 00689)
+ 0 8-checksum
+ 1 16-CRC-SDLC
+ 2-7 reserved (0)
+--------X-1A96-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - GET ERROR DETECTION CODE
+ AH = 96h
+ AL = adapter number
+ BH = EDC generator number
+Return: CF clear if successful
+ AH destroyed
+ BL = socket number
+ DH = EDC attributes (see #00690)
+ DL = EDC type (see #00689) (only one bit set)
+ CF set on error
+ AH = error code (01h,04h) (see #00656)
+SeeAlso: AH=95h,AH=97h,AH=9Ch
+
+Bitfields for EDC attributes:
+Bit(s) Description (Table 00690)
+ 0 unidirectional only
+ 1 (if 0 set) clear=read, set=write
+ 2-7 reserved (0)
+--------X-1A97-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - SET ERROR DETECTION CODE
+ AH = 97h
+ AL = adapter number
+ BH = EDC generator
+ BL = socket number
+ DH = EDC attributes (see #00690)
+ DL = EDC type (see #00689) (only one bit may be set)
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,02h,04h,0Bh) (see #00656)
+SeeAlso: AH=96h,AH=9Ch
+--------X-1A98-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - START ERROR DETECTION CODE
+ AH = 98h
+ AL = adapter number
+ BH = EDC generator
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,04h) (see #00656)
+SeeAlso: AH=96h,AH=99h,AH=9Bh,AH=9Ch
+--------X-1A99-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - PAUSE ERROR DETECTION CODE
+ AH = 99h
+ AL = adapter number
+ BH = EDC generator
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,04h) (see #00656)
+SeeAlso: AH=9Ah
+--------X-1A9A-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - RESUME ERROR DETECTION CODE
+ AH = 9Ah
+ AL = adapter number
+ BH = EDC generator
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (01h,04h) (see #00656)
+SeeAlso: AH=99h,AH=98h
+--------X-1A9B-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - STOP ERROR DETECTION CODE
+ AH = 9Bh
+ AL = adapter number
+ BH = EDC generator
+Return: CF clear if successful
+ AH destroyed
+ CF set on error
+ AH = error code (see #00656)
+SeeAlso: AH=98h,AH=99h,AH=9Ch
+--------X-1A9C-------------------------------
+INT 1A - PCMCIA Socket Services v1.00 - READ ERROR DETECTION CODE
+ AH = 9Ch
+ AL = adapter number
+ BH = EDC generator
+Return: CF clear if successful
+ AH destroyed
+ DL/DX = computed checksum or CRC
+ CF set on error
+ AH = error code (01h,04h) (see #00656)
+SeeAlso: AH=95h,AH=96h,AH=98h,AH=99h,AH=9Bh
+--------X-1A9D-------------------------------
+INT 1A - PCMCIA Socket Services v2.1??? - GET VENDOR INFO
+ AH = 9Dh
+ AL = adapter number
+ BH = EDC generator
+ ES:EDI -> vendor information structure (see #00691)
+Return: CF clear if successful
+ AH destroyed
+ DX = vendor release number in BCD
+ ES:EDI unchanged
+ CF set on error
+ AH = error code (01h,15h) (see #00656)
+Notes: this API is supported by recent versions of the AMI BIOS
+ the low-level API described here is hidden by the higher-level
+ ExCA API once Card Services has been installed
+SeeAlso: AH=9Dh"ExCA"
+
+Format of Vendor Information structure:
+Offset Size Description (Table 00691)
+ 00h WORD buffer length (set to size of buffer below)
+ 04h WORD (ret) data length
+ 08h x BYTEs implementor name (ASCIIZ string)
+--------X-1A9D-------------------------------
+INT 1A - Intel PCMCIA ExCA Card Services - API
+ AH = 9Dh
+ AL = subfunction (see #00692)
+ ???
+Return: ???
+SeeAlso: AH=9Dh"ExCA",#00891
+
+(Table 00692)
+Values for PCMCIA ExCA Card Services subfunction number:
+ 00h Client Services: Get Number of Sockets
+ 01h Advanced Client Utilities: Initialize
+ 02h Client Services: Register Client
+ 03h Client Services: Deregister Client
+ 04h Advanced Client Utilities: Enumerate Clients
+ 05h Client Services: Register SCB
+ 06h Client Services: Deregister SCB
+ 07h Advanced Client Utilities: Register MTD
+ 08h Advanced Client Utilities: Deregister MTD
+ 09h Advanced Client Utilities: Enumerate MTD
+ 0Ah Client Services: Get Status
+ 0Bh Client Services: Reset Card
+ 0Ch Client Utilities: Get First Tuple
+ 0Dh Client Utilities: Get Next Tuple
+ 0Eh Client Utilities: Determine First Region
+ 0Fh Client Utilities: Determine Next Region
+ 10h Client Utilities: Get First Region
+ 11h Client Utilities: Get Next Region
+ 12h Client Utilities: Get First Partition
+ 13h Client Utilities: Get Next Partition
+ 14h Bulk Memory Services: Open Region
+ 15h Bulk Memory Services: Read Memory
+ 16h Bulk Memory Services: Write Memory
+ 17h Bulk Memory Services: Copy Memory
+ 18h Bulk Memory Services: Erase Memory
+ 19h Resource Management: Request I/O
+ 1Ah Resource Management: Release I/O
+ 1Bh Resource Management: Request Memory
+ 1Ch Client Services: Modify Window
+ 1Dh Resource Management: Release Memory
+ 1Eh Client Services: Map Mem Page
+ 1Fh Advanced Client Utilities: Return SS Entry
+ 20h Advanced Client Utilities: Map Log to Phy
+ 21h Advanced Client Utilities: Map Log Phy to Log
+ 22h Resource Management: Request IRQ
+ 23h Resource Management: Release IRQ
+ 24h Bulk Memory Services: Close Region
+--------X-1A9E-------------------------------
+INT 1A - PCMCIA Socket Services v2.1 - ACKNOWLEDGE INTERRUPT
+ AH = 9Eh
+ AL = adapter number
+Return: CF clear if successful
+ AH destroyed
+ CX = bitmap representing sockets which have changed status
+ CF set on error
+ AH = error code (01h) (see #00656)
+Note: this API is supported by recent versions of the AMI BIOS
+--------X-1A9F-------------------------------
+INT 1A - PCMCIA Socket Services v2.1 - GET/SET PRIOR INT 1A HANDLER
+ AH = 9Fh
+ AL = adapter number
+ BL = mode
+ 00h get prior INT 1Ah handler
+ 01h set prior INT 1Ah handler
+ CX:DX -> new prior handler
+Return: CF clear if successful
+ AH destroyed
+ CX:DX -> old prior handler
+ CF set on error
+ AH = error code (01h,15h,18h) (see #00656)
+Desc: allows hooking of INT 16h "behind" the Socket Services hook
+Note: this API is supported by recent versions of the AMI BIOS
+SeeAlso: AH=9Eh,AH=A0h"PCMCIA",AH=AEh"PCMCIA"
+--------c-1AA0-------------------------------
+INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
+ AH = A0h
+Return: AH = B0h if installed
+ AL = pending INT 1A/AH=D0h subfunction if nonzero???
+ ES = code segment
+ ES:BX -> name of current spool file
+ ES:SI -> current despool file
+ CL = despooler state (00h disabled, 41h enabled)
+ CH = spooler state (00h disabled, 41h enabled)
+ DL = despooler activity
+ 00h currently active printing a file
+ 41h standing by
+ DH = 00h ???
+ = 41h ???
+ DI = 0000h ???
+ 0001h ???
+Program: Disk Spool II is a shareware disk-based print spooler by Budget
+ Software Company
+Note: this function is also supported by Vertisoft's Emulaser utility ELSPL,
+ as that is a licensed version of Disk Spool II
+SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
+--------X-1AA0-------------------------------
+INT 1A - PCMCIA Socket Services v2.1 - GET/SET SOCKET SERVICES ADDRESS
+ AH = A0h
+ AL = adapter number
+ BH = mode
+ 00h real mode
+ 01h 16:16 protected mode
+ 02h 16:32 protected mode
+ 03h 00:32 (Flat) protected mode
+ BL = subfunction
+ 00h return number of additional data areas (see #00693)
+ 01h return description of additional data areas (see #00694)
+ 02h accept mode-specific pointers to data areas (see #00695)
+ ES:EDI -> buffer supplied by caller
+Return: CF clear if successful
+ AH destroyed
+ CX = number of additional data areas
+ ES:EDI unchanged
+ CF set on error
+ AH = error code (01h,02h,15h,16h,18h) (see #00656)
+SeeAlso: AH=9Fh,AH=AEh
+
+Format of PCMCIA Subfunction 00h Buffer Table Entry structure:
+Offset Size Description (Table 00693)
+ 00h DWORD 32-bit linear base address of the code segment
+ 04h DWORD segment limit of the code segment
+ 08h DWORD entry point offset
+ 0Ch DWORD 32-bit linear base address of the data segment
+ (ignored in 00:32 flat mode)
+ 10h DWORD segment limit of the data segment
+ 14h DWORD data area offset. Only used in 32-bit protected mode.
+SeeAlso: #00694,#00695
+
+Format of PCMCIA Additional Data Area Description structure [array]:
+Offset Size Description (Table 00694)
+ 00h DWORD 32-bit linear base address of the additional data segment
+ (ignored in 00:32 flat mode)
+ 04h DWORD segment limit of the code segment
+ 08h DWORD data area offset (only used in 32-bit protected mode)
+SeeAlso: #00693,#00695
+
+Format of PCMCIA Subfunction 02h Buffer Table Entry structure:
+Offset Size Description (Table 00695)
+ 00h DWORD 32-bit offset(ignored in 16:16 protected mode)
+ 04h DWORD selector (only used in 00:32 flat mode)
+ 08h DWORD reserved
+SeeAlso: #00693,#00694
+--------X-1AA1-------------------------------
+INT 1A - PCMCIA Socket Services v2.1 - GET ACCESS OFFSETS
+ AH = A1h
+ AL = adapter number
+ BH = Mode
+ 00h = Real Mode
+ 01h = 16:16 Protected Mode
+ 02h = 16:32 Protected Mode
+ 03h = 00:32 Protected Mode
+ CX = Number of access offsets
+ ES:EDI -> buffer supplied by caller, CX words long (see #00696)
+Return: CF clear if successful
+ AH destroyed
+ DX = number of access offsets supported
+ ES:EDI unchanged
+ CF set on error
+ AH = error code (01h,15h,16h) (see #00656)
+Desc: Returns an array of low-level adapter-specific optimized
+ PC Card access routines for adapters that use registers
+ or I/O ports to access PC Card memory. Adapters that access
+ PC Card memory through windows mapped to host system memory
+ do not support this function.
+Note: offsets returned are 16-bit offsets into the
+ Socket Services code segment. They must be called
+ appropriately for the processor mode selected.
+ (Real, 16:16 and 16:32 modes use FAR CALL,
+ Flat 00:32 mode uses a 32-bit NEAR CALL).
+SeeAlso: AH=AEh
+
+Format of Offset Table structure:
+Offset Size Description (Table 00696)
+ 00h WORD Set Address
+ 02h WORD Set Auto Increment
+ 04h WORD Read Byte
+ 06h WORD Read Word
+ 08h WORD Read Byte with Auto Increment
+ 0Ah WORD Read Word with Auto Increment
+ 0Ch WORD Read Words
+ 0Eh WORD Read Words with Auto Increment
+ 10h WORD Write Byte
+ 12h WORD Write Word
+ 14h WORD Write Byte with Auto Increment
+ 16h WORD Write Word with Auto Increment
+ 18h WORD Write Words
+ 1Ah WORD Write Words with Auto Increment
+ 1Ch WORD Compare Byte
+ 1Eh WORD Compare Byte with Auto Increment
+ 20h WORD Compare Words
+ 22h WORD Compare Words with Auto Increment
+--------X-1AA2-------------------------------
+INT 1A - CardBus Socket Services - ACCESS CONFIGURATION SPACE
+ AH = A2h
+ ??? details not available
+Return: ???
+--------X-1AA4-------------------------------
+INT 1A - CardBus Socket Services - GET BRIDGE WINDOW / WINDOW CAPABILITIES
+ AH = A4h
+ ??? details not available
+Return: ???
+SeeAlso: AH=A5h"CardBus"
+--------X-1AA5-------------------------------
+INT 1A - CardBus Socket Services - SET BRIDGE WINDOW
+ AH = A5h
+ ??? details not available
+Return: ???
+SeeAlso: AH=A4h"CardBus"
+--------c-1AAB-------------------------------
+INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
+ AH = ABh
+Return: AH = BAh if installed
+ AL = pending INT 1A/AH=ADh subfunction if nonzero???
+ ES = code segment
+ ES:BX -> name of current spool file
+ ES:SI -> current despool file
+ CL = despooler state (00h disabled, 41h enabled)
+ CH = spooler state (00h disabled, 41h enabled)
+ DL = despooler activity
+ 00h currently active printing a file
+ 41h standing by
+ DH = 00h ???
+ = 41h ???
+ DI = 0000h ???
+ 0001h ???
+Program: Disk Spool II is a shareware disk-based print spooler by Budget
+ Software Company
+SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
+--------c-1AAC-------------------------------
+INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
+ AH = ACh
+Return: (see AH=ABh)
+Note: this function is identical to AH=ABh
+SeeAlso: AH=A0h,AH=ABh,AH=ADh
+--------c-1AAD-------------------------------
+INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
+ AH = ADh
+ AL = function code (see #00697)
+Return: AH = 00h if successful
+SeeAlso: AH=ABh
+
+(Table 00697)
+Values for Disk Spool function code:
+ 02h enable spooler only
+ 03h enable the despooler
+ 04h disable the despooler
+ 08h inhibit popup menu
+ 09h enable popup menu
+ 0Ah ???
+ 0Bh disable the spooler
+ 0Ch start despooler after last successfully printed document???
+ 0Dh start despooler at the exact point where it last left off???
+ 0Eh pop up the menu
+ 0Fh ???
+ 11h ???
+ 14h ???
+ 15h ???
+ 16h ???
+ 17h ???
+ 18h ???
+ 19h ???
+ 20h clear file pointed to by the despooler???
+ 21h ???
+ 22h ???
+ 23h ???
+ 30h ???
+--------X-1AAE-------------------------------
+INT 1A - PCMCIA Socket Services v2.1 - VENDOR SPECIFIC
+ AH = AEh
+ AL = adapter number
+ all other registers are vendor-specific
+Return: vendor specific
+SeeAlso: AH=A1h,AH=AFh
+--------X-1AAE-------------------------------
+INT 1A - PCMCIA Socket Services v2.1 - API
+ AH = AEh
+ SI = function
+ 0002h ???
+ 0100h ???
+ 0101h ???
+ 8000h ???
+ 8001h ???
+ details not yet available
+Return: CF clear if successful
+ CF set on error
+ AH = error code (02h,0Bh,11h,15h,17h) (see #00656)
+SeeAlso: AH=9Eh
+--------X-1AAF-------------------------------
+INT 1A - PCMCIA v2 Card Services - API
+ AH = AFh
+ AL = function
+ 00h close memory
+ 01h copy memory
+ 02h deregister client
+ 03h get client information (see #00702)
+ 04h get configuration information (see #00704)
+ 05h get first partition
+ 06h get first region
+ 07h get first tuple (see #00711)
+ 08h get next partition
+ 09h get next region
+ 0Ah get next tuple
+ 0Bh get Card Services information (see #00700)
+ 0Ch get status
+ 0Dh get tuple data (see #00712)
+ 0Eh get first client (see #00701)
+ 0Fh get/register Erase Queue
+ 10h register client (see #00713)
+ 11h reset function
+ 12h map logical socket
+ 13h map logical window
+ 14h map memory page
+ 15h map physical socket
+ 16h map physical window
+ 17h modify window
+ 18h open memory
+ 19h read memory
+ 1Ah register MTD
+ 1Bh release I/O
+ 1Ch release IRQ (see #00715)
+ 1Dh release window
+ 1Eh release configuration (see #00716)
+ 1Fh request I/O (see #00717)
+ 20h request IRQ (see #00718)
+ 21h reqeust window (see #00720)
+ 22h request socket mask
+ 23h return SS entry
+ 24h write memory
+ 25h deregister Erase Queue
+ 26h check Erase Queue
+ 27h modify configuration
+ 28h register timer
+ 29h set region
+ 2Ah get next client
+ 2Bh validate CIS
+ 2Ch request exclusive access (see #00723)
+ 2Dh release exclusive access (see #00723)
+ 2Eh get event mask
+ 2Fh release socket mask
+ 30h request configuration (see #00724)
+ 31h set event mask
+ 32h add Socket Service
+ 33h replace Socket Service
+ 34h vendor-specific
+ 35h adjust resource information
+ 36h access configuration register
+ 37h get first window
+ 38h get next window
+ 39h get memory page
+ 3Ah request DMA
+ 3Bh release DMA
+ further details not yet available
+Return: ??? = result code (see #00698)
+SeeAlso: AH=AEh
+
+(Table 00698)
+Values for PCMCIA Card Services result codes:
+ 00h successful
+ 01h invalid adapter number
+ 02h bad value for attribute field
+ 03h bad value for base system memory address
+ 04h invalid EDC generator specified
+ 05h (reserved for historical reasons)
+ 06h invalid IRQ level specified
+ 07h invalid PC Card memory array offset
+ 08h invalid page number specified
+ 09h unable to complete read request
+ 0Ah invalid size specified
+ 0Bh invalid socket number
+ 0Ch (reserved for historical reasons)
+ 0Dh invalid window or interface type
+ 0Eh invalid Vcc power level specified
+ 0Fh invalid Vpp1 or Vpp2 power level specified
+ 10h (reserved for historical reasons)
+ 11h invalid window number
+ 12h unable to complete write request
+ 13h (reserved for historical reasons)
+ 14h no PC Card in socket
+ 15h service not supported by implementation
+ 16h unsupported processor mode
+ 17h specified speed not available
+ 18h busy -- retry later
+ 19h undefined error (general failure)
+ 1Ah storage medium write protected
+ 1Bh argument length in (E)CX is invalid
+ 1Ch bad value(s) in argument packet
+ 1Dh configuration has already been locked
+ 1Eh requested resource already in use
+ 1Fh no more items of requested type available
+ 20h out of resources
+ 21h invalid client handle
+ 22h unsupported client version
+
+(Table 00699)
+Values for Card Services Callback Event codes:
+ 01h battery dead
+ 02h battery low
+ 03h card locked
+ 04h card has become ready
+ 05h card removed
+ 06h card unlocked
+ 07h motorized ejection complete
+ 08h ejection requested
+ 09h insertion complete
+ 0Ah insertion requested
+ 0Bh power management: resume
+ 0Ch power management: suspend
+ 0Dh exclusive access granted
+ 0Eh exclusive access requested
+ 0Fh perform physical reset
+ 10h physical reset requested
+ 11h card has been reset
+ 12h MTD request (read/write/etc)
+ 14h request for client info
+ 15h timer has expired
+ 16h Socket Service was modified
+ 17h write-protected
+ 18h attention requested
+ 40h card insertion
+ 80h reset complete
+ 81h erase complete
+ 82h registration complete
+
+Format of Card Services Information:
+Offset Size Description (Table 00700)
+ 00h WORD length of information record in bytes
+ 02h WORD signature
+ 04h WORD number of sockets
+ 06h WORD revision level
+ 08h WORD Card Services level
+ 0Ah WORD offset of vendor string
+ 0Ch WORD length of vendor string
+ 0Eh WORD number of functions
+ 10h 255 BYTEs vendor string
+SeeAlso: #00702
+
+Format of Card Services Client structure:
+Offset Size Description (Table 00701)
+ 00h WORD PCMCIA socket number
+ 02h WORD client attributes
+
+Format of Cards Services Client Information:
+Offset Size Description (Table 00702)
+ 00h WORD maximum length of data in bytes (180)
+ 02h WORD (ret) length of returned data
+ 04h WORD attributes (see #00703)
+ 06h WORD revision level (BCD)
+ 08h WORD Card Services level (BCD)
+ 0Ah WORD revision date (DOS packed date format) (see #01666)
+ 0Ch WORD offset to name
+ 0Eh WORD length of name
+ 10h WORD offset to vendor string
+ 12h WORD length of vendor string
+ 14h 80 BYTEs buffer for name
+ 64h 80 BYTEs buffer for vendor string
+SeeAlso: #00700,#00704
+
+Bitfields for Card Services client attributes:
+Bit(s) Description (Table 00703)
+ 0 memory client
+ 1 MTD client
+ 2 I/O client
+ 3 all clients can share this card
+ 4 only one client can use this card at a time
+SeeAlso: #00702
+
+Format of Card Services configuration information:
+Offset Size Description (Table 00704)
+ 00h WORD socket (usually 0000h)
+ 02h WORD attributes (see #00705)
+ 04h BYTE Vcc value
+ 05h BYTE Vpp1 value
+ 06h BYTE Vpp2 value
+ 07h BYTE interface type (see #00706)
+ 08h DWORD base address of configuration registers
+ 0Ch BYTE card's Status register setting (if present)
+ 0Dh BYTE card's Pin register setting (if present)
+ 0Eh BYTE card's Socket/Copy register setting (if present)
+ 0Fh BYTE card's Option register setting (if present)
+ 10h BYTE bitmap of present card configuration registers
+ 11h BYTE first device type
+ 12h BYTE function code
+ 13h BYTE SysInit mask
+ 14h WORD manufacturer code
+ 16h WORD manufacturer information
+ 18h BYTE valie card register values
+ 19h BYTE IRQ number assigned to PC Card
+ 1Ah WORD IRQ attributes (see #00708)
+ 1Ch WORD base port address (for I/O range 1)
+ 1Eh BYTE number of contiguous ports (for I/O range 1)
+ 1Fh BYTE bitmap of port attributes (for I/O range 1) (see #00709)
+ 20h WORD base port address (for I/O range 2)
+ 22h BYTE number of contiguous ports (for I/O range 2)
+ 23h BYTE bitmap of port attributes (for I/O range 2) (see #00709)
+ 24h BYTE number of I/O address lines decoded (16-bit PC Card only)
+ 25h BYTE extended status register setting (if present)
+ 26h BYTE bitmap of DMA attributes (see #00710)
+ (note: value at call is used to set!)
+ 27h BYTE assigned DMA channel
+ 28h BYTE number of I/O windows in use on logical socket
+ 29h BYTE number of memory windows in use on logical socket
+SeeAlso: #00703,#00724
+
+Bitfields for Card Services Configuration attributes:
+Bit(s) Description (Table 00705)
+ 0 exclusive
+ 1 IRQ active
+ 2 CardBus card
+ 3-5 reserved (0)
+ 6 DMA channel is active
+ 7 reserved (0)
+ 8 valid client
+ 9 overwrite voltage value
+ 10-15 reserved (0)
+SeeAlso: #00704
+
+Bitfields for Card Services Configuration interface type:
+Bit(s) Description (Table 00706)
+ 0 memory interface
+ 1 I/O and memory interface
+ 2 CardBus interface
+ 3-7 reserved (0)
+SeeAlso: #00704
+
+Bitfields for Card Services Configuration registers:
+Bit(s) Description (Table 00707)
+ 0 option value is value
+ 1 status value
+ 2 pin-replacement value
+ 3 copy value
+ 4 extended status value
+ 5-7 reserved (0)
+SeeAlso: #00704
+
+Bitfields for Card Services Configuration IRQ attributes:
+Bit(s) Description (Table 00708)
+ 1-0 sharing
+ 00 no sharing
+ 01 time-multiplex sharing
+ 10 dynamic sharing
+ 11 reserved
+ 2 force pulse mode
+ 3 first used together
+ 4-7 reserved
+ 8 pulse IRQ has been assigned
+ 9-15 reserved
+SeeAlso: #00704,#00709,#00710,#00715,#00718
+
+Bitfields for Card Services Configuration Port attributes:
+Bit(s) Description (Table 00709)
+ 0 shared I/O ports
+ 1 "CS_FirstCommonUsedCard"
+ 2 force alias access
+ 3 =1 sixteen-bit I/O
+ =0 eight-bit I/O
+ 7-4 reserved (0)
+SeeAlso: #00704,#00708,#00710,#00717
+
+Bitfields for Card Services Configuration DMA attributes:
+Bit(s) Description (Table 00710)
+ 1-0 sharing mode
+ 00 no sharing
+ 01 time-multiplex sharing
+ 10 dynamic sharing
+ 11 reserved
+ 3-2 DMA request signal
+ 00 reserved
+ 01 DMARQ uses pin SPKR#
+ 10 DMARQ uses pin IOIS16#
+ 11 DMARQ uses pin INPACK#
+ 4 DMA size
+ 0 eight bits
+ 1 sixteen bits
+ 7-5 reserved (0)
+SeeAlso: #00704,#00708,#00709
+
+Format of Card Services Tuple information:
+Offset Size Description (Table 00711)
+ 00h WORD logical socket number
+ 02h WORD attributes
+ bit 0: return Link tuples
+ 04h BYTE code value of desired tuple
+ 05h BYTE reserved (0)
+ 06h WORD (ret) TupleFlags
+ 08h DWORD (ret) -> Card Services Link State Information
+ 0Ch DWORD (ret) -> Card Services CIS State Information
+ 10h BYTE (ret) code for tuple
+ 11h BYTE (ret) link value for tuple
+SeeAlso: #00712
+
+Format of Card Services GetTupleData record:
+Offset Size Description (Table 00712)
+ 00h WORD logical socket
+ 02h WORD attributes
+ 04h BYTE code value of desired tuple
+ 05h BYTE offset into tuple from link byte
+ 06h WORD flags
+ 08h DWORD -> Link
+ 0Ch DWORD -> CIS
+ 10h WORD (call) maximum amount of data to return (0004h)
+ 12h WORD (ret) amount of data returned
+ 14h DWORD (ret) tuple data
+SeeAlso: #00711
+
+Format of Card Services Client Registration record:
+Offset Size Description (Table 00713)
+ 00h WORD attributes
+ 02h WORD event mask
+ 04h WORD client data (passed to client event handler in DI)
+--- 16-bit code ---
+ 06h WORD client data selector (passed to event handler in DS)
+ 08h WORD client data offset (passed to event handler in SI)
+ 0Ah WORD reserved
+--- 32-bit code ---
+ 06h WORD reserved
+ 08h DWORD client data offset (passed to event handler in ESI)
+------
+ 0Ch WORD expected Card Services version (0210h for v2.10)
+
+Bitfields for Card Services client event codes:
+Bit(s) Description (Table 00714)
+ 0 change in write-protect status
+ 1 change in card lock
+ 2 ejection request
+ 3 insertion request
+ 4 battery is dead
+ 5 battery low
+ 6 change in Ready
+ 7 change in Card Detect
+ 8 power management change
+ 9 reset
+ 10 Socket Services updated
+ 11 extended status change
+SeeAlso: #00713
+
+Format of Card Services ReleaseIRQ record:
+Offset Size Description (Table 00715)
+ 00h WORD logical socket number
+ 02h WORD attributes (see #00708)
+ 04h BYTE assigned IRQ number to be released
+
+Format of Card Services Release Configuration record:
+Offset Size Description (Table 00716)
+ 00h WORD logical socket number
+
+Format of Card Services Request I/O record:
+Offset Size Description (Table 00717)
+ 00h WORD logical socket number
+ 02h WORD base port 1
+ 04h BYTE size of port range 1
+ 05h BYTE attributes for port range 1 (see #00709)
+ 06h WORD base port 2
+ 08h BYTE size of port range 2
+ 09h BYTE attributes for port range 2 (see #00709)
+ 0Ah BYTE number of address lines (typically 16)
+SeeAlso: #00718,#00716
+
+Format of Card Services Request IRQ record:
+Offset Size Description (Table 00718)
+ 00h WORD logical socket number
+ 02h WORD attributes (see #00708)
+ 04h BYTE (ret) assigned IRQ number, if successful
+ 05h BYTE IRQ info (see #00719)
+ 06h WORD bitmap of available IRQs (bit 0 = IRQ0, etc.)
+ (only if bit 4 of IRQ info set)
+SeeAlso: #00717,#00716
+
+Bitfields for Card Services Request IRQ info flags:
+Bit(s) Description (Table 00719)
+ 7 IRQ is shared
+ 6 pulse (edge-triggered) interrupt
+ 5 level interrupt
+ 4 use IRQ bitmap
+--- bit 4 set ---
+ 3 vendor-specific interrupt
+ 2 bus error
+ 1 I/O check interrupt
+ 0 NMI
+--- bit 4 clear ---
+ 3-0 IRQ number
+SeeAlso: #00718
+
+Format of Card Services Request Window record:
+Offset Size Description (Table 00720)
+ 00h WORD logical socket number
+ 02h WORD attributes (see #00721)
+ 04h DWORD system base adress
+ 08h DWORD size of memory window
+ 0Ch BYTE additional info
+ if attributes bit ??? is set, this is the address-lines field
+ otherwise, this is the access-speed field (see #00722)
+
+Bitfields for Card Services Request Window attributes:
+Bit(s) Description (Table 00721)
+ 0 I/O window instead of memory window
+ 1 attribute memory instead of normal memory (16-bit PC Cards only)
+ 2 window enabled
+ 3 16-bit data path instead of 8-bit path (16-bit PC Cards only, v2.10+)
+ (ignored if bit 9 set)
+ 4 size is given in 16K pages (invalid for CardBus PC Cards)
+ 5 shared (invalid for CardBus)
+ 6 first shared (invalid for CardBus)
+ 7 "CS_BindingSpecific" (memory window only)
+ 8 card offsets are window-size granular (16-bit PC Card memory window)
+ 9 32-bit data path (CardBus only)
+ 10 reserved (0)
+ 12-11 prefetch/cache
+ 00 neither prefetchable nor cacheable
+ 01 prefetchable but not cacheable
+ 10 prefetchable and cachable
+ 11 reserved
+ 15-13 decoded base address register number (CardBus only)
+SeeAlso: #00720,#00722
+
+Bitfields for Card Services Request Window access-speed:
+Bit(s) Description (Table 00722)
+ 6-3 mantissa
+ 0000 use device speed code
+ 0001 1.0
+ 0010 1.2
+ 0011 1.2 ???
+ 0100 1.5
+ 0101 2.0
+ 0110 2.5
+ 0111 3.0
+ 1000 3.5
+ 1001 4.0
+ 1010 4.5
+ 1011 5.0
+ 1100 5.5
+ 1101 6.0
+ 1110 7.0
+ 1111 8.0
+--- if mantissa==0 ---
+ 2-0 device speed code
+ 000 reserved
+ 001 250 ns
+ 010 200 ns
+ 011 150 ns
+ 100 100 ns
+ 101-111 reserved
+--- if mantissa<>0 ---
+ 2-0 speed exponent
+ 000 1 ns
+ 001 10 ns
+ 010 100 ns
+ 011 1 us
+ 100 10 us
+ 101 100 us
+ 110 1 ms
+ 111 10 ms
+SeeAlso: #00720,#00721
+
+Format of Card Services Request/Release Exclusive Access record:
+Offset Size Description (Table 00723)
+ 00h WORD logical socket number
+ 02h WORD attributes (currently all reserved, must be 0000h)
+
+Format of Card Services Request Configuration record:
+Offset Size Description (Table 00724)
+ 00h WORD socket (usually 0000h)
+ 02h WORD attributes (see #00705)
+ 04h BYTE Vcc value
+ 05h BYTE Vpp1 value
+ 06h BYTE Vpp2 value
+ 07h BYTE interface type (see #00706)
+ 08h DWORD base address of configuration registers
+ 0Ch BYTE card's Status register setting (if present)
+ 0Dh BYTE card's Pin register setting (if present)
+ 0Eh BYTE card's Socket/Copy register setting (if present)
+ 0Fh BYTE card's Option register setting (if present)
+ 10h BYTE bitmap of present card configuration registers
+ 11h BYTE extended status register setting (if present)
+SeeAlso: #00704
+--------X-1AB000-----------------------------
+INT 1A U - HP 100LX/200LX - PCMCIA - ???
+ AX = B000h
+ ES:BX -> parameter block ???
+Return: CF clear if ???
+ CF set if ???
+Note: called by HP 100LX/200LX PCMCIA client CIC100.EXE
+--------d-1AB001CX4D52-----------------------
+INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
+ AX = B001h
+ CX = 4D52h ("MR")
+ DX = 4349h ("CI")
+Return: CX = 4943h ("IC") if installed
+ DX = 524Dh ("RM") if installed
+ ES:DI -> MRCINFO structure (see #00725)
+Note: this call is functionally identical to INT 2F/AX=4A12h, which should
+ be called first, as this call is used for the first, ROM-based
+ MRCI server, while the other call is used for RAM-based servers
+ which may be partially or entirely replacing a prior server
+SeeAlso: INT 2F/AX=4A12h
+
+Format of MRCINFO structure:
+Offset Size Description (Table 00725)
+ 00h 4 BYTEs vendor signature
+ "MSFT" Microsoft
+ 04h WORD server version (high=major)
+ 06h WORD MRCI specification version
+ 08h DWORD address of server entry point (see #00727)
+ 0Ch WORD bit flags: server capabilities (see #00726)
+ 0Eh WORD bit flags: hardware assisted capabilities (see #00726)
+ 10h WORD maximum block size supported by server (at least 8192 bytes)
+
+Bitfields for MRCI capabilities:
+Bit(s) Description (Table 00726)
+ 0 standard compress
+ 1 standard decompress
+ 2 update compress
+ 3 MaxCompress (not present in initial public release)
+ 4 reserved
+ 5 incremental decompress
+ 6 MRCI 2.0 standard compress
+ 7 MRCI 2.0 standard decompress
+ 8-14 reserved
+ 15 this structure is in ROM and can't be modified
+ (server capabilities only)
+
+(Table 00727)
+Call MRCI entry point with:
+ DS:SI -> MRCREQUEST structure (see #00728)
+ CX = type of client (0000h application, 0001h file system)
+ AX = operation
+ 0001h perform standard compression
+ 0002h perform standard decompression
+ 0004h perform update compression
+ 0008h perform MaxCompress
+ 0020h perform incremental decompression
+ 0040h perform MRCI 2.0 standard compression
+ 0080h perform MRCI 2.0 standard decompression
+ AX = FFFFh clear flags
+ BX = bitmask of flags to clear (set bits in BX are flags to clear)
+Return: AX = status
+ 0000h successful
+ 0001h invalid function
+ 0002h server busy, try again
+ 0003h destination buffer too small
+ 0004h incompressible data
+ 0005h bad compressed data format
+ BP destroyed (MS-DOS 6.2)
+Note: MRCI driver may chain to a previous driver
+
+Format of MRCREQUEST structure:
+Offset Size Description (Table 00728)
+ 00h DWORD pointer to source buffer
+ 04h WORD size of source buffer (0000h = 64K)
+ 06h WORD (UpdateCompress only)
+ (call) offset in source buffer of beginning of changed data
+ (ret) offset in destination buffer of beginning of changed
+ compressed data
+ 08h DWORD pointer to destination buffer
+ must contain original compressed data for UpdateCompress
+ 0Ch WORD size of destination buffer (0000h = 64K)
+ any compression: size of buffer for compressed data
+ standard decompression: number of bytes to be decompressed
+ incremental decompression: number of byte to decompress now
+ (ret) actual size of resulting data
+ 0Eh WORD client compressed data storage allocation size
+ 10h DWORD incremental decompression state data
+ set to 00000000h before first incremental decompression call
+Notes: the source and destination buffers may not overlap
+ the source and destination buffer sizes should normally be the same
+ application should not update the contents of the MRCREQUEST structure
+ between incremental decompression calls
+--------!---Section--------------------------
diff --git a/floppy/doc/LINKS b/floppy/doc/LINKS
new file mode 100644
index 0000000..2dc5f26
--- /dev/null
+++ b/floppy/doc/LINKS
@@ -0,0 +1,16 @@
+similar projects
+
+https://www.insentricity.com/a.cl/283
+https://github.com/yeokm1/gentoo-on-486
+https://github.com/MiSTer-devel/Main_MiSTer/wiki
+https://yeokhengmeng.com/2018/01/make-the-486-great-again
+
+alternatives to "standard" Linux:
+
+ELKS linux-i386 for 16-bit
+Minix
+NetBSD
+
+https://www.kernel.org/doc/html/latest/x86/boot.html
+https://0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-2.html
+https://www.kernel.org/doc/html/latest/x86/zero-page.html
diff --git a/floppy/doc/NEEDHELP.TXT b/floppy/doc/NEEDHELP.TXT
new file mode 100644
index 0000000..b0a3b23
--- /dev/null
+++ b/floppy/doc/NEEDHELP.TXT
@@ -0,0 +1,30 @@
+VOLUNTEERS NEEDED
+-----------------
+
+15jul00:
+
+I haven't been managing any transcriptions for a while due to lack of
+time, but I hope to restart the process this fall. Once I'm ready to
+go, I'll contact everyone who has volunteered in the past.
+
+
+30aug98:
+
+If you've always wanted to show your appreciation of the interrupt
+list, but never had anything to contribute before, here's your chance!
+I continue to have a need for volunteers to transcribe and condense the
+information in various on-line documents into a suitable form for
+inclusion in the list. A good job of transcription can save me 90% of
+the effort it would otherwise take me, which means that I can get far
+more information into the list -- and that helps everyone.
+
+If you're interested in transcribing one or more documents, send me
+mail and I'll provide you with the URL and a brief style guide. Let me
+know whether you're willing to work on a large document or only a
+small(ish) one. As an added incentive, those who contribute at least
+120K of additions (roughly equivalent to the info from four motherboard
+chipsets; figure around 50 hours of effort) get a free autographed
+copy of one of my books.
+
+
+
diff --git a/floppy/doc/OVERVIEW.LST b/floppy/doc/OVERVIEW.LST
new file mode 100644
index 0000000..642dc5d
--- /dev/null
+++ b/floppy/doc/OVERVIEW.LST
@@ -0,0 +1,262 @@
+[Provided by Bent Lynggaard <lynggaard@risoe.dk>. Last Edit 6/5/94]
+This list is a brief description of each of the 256 interrupts. Each
+description begins with "INT nn " where "nn" is a two digit hexadecimal
+number 00 - FF. For automatic processing, do not rely on the order being
+consecutive.
+--------!---TITLES---------------------------
+INT 00 - CPU-generated - DIVIDE ERROR
+INT 01 - CPU-generated - SINGLE STEP; (80386+) - DEBUGGING EXCEPTIONS
+INT 02 - external hardware - NON-MASKABLE INTERRUPT
+INT 03 - CPU-generated - BREAKPOINT
+INT 04 - CPU-generated - INTO DETECTED OVERFLOW
+INT 05 - PRINT SCREEN; CPU-generated (80186+) - BOUND RANGE EXCEEDED
+INT 06 - CPU-generated (80286+) - INVALID OPCODE
+INT 07 - CPU-generated (80286+) - PROCESSOR EXTENSION NOT AVAILABLE
+INT 08 - IRQ0 - SYSTEM TIMER; CPU-generated (80286+)
+INT 09 - IRQ1 - KEYBOARD DATA READY; CPU-generated (80286,80386)
+INT 0A - IRQ2 - LPT2/EGA,VGA/IRQ9; CPU-generated (80286+)
+INT 0B - IRQ3 - SERIAL COMMUNICATIONS (COM2); CPU-generated (80286+)
+INT 0C - IRQ4 - SERIAL COMMUNICATIONS (COM1); CPU-generated (80286+)
+INT 0D - IRQ5 - FIXED DISK/LPT2/reserved; CPU-generated (80286+)
+INT 0E - IRQ6 - DISKETTE CONTROLLER; CPU-generated (80386+)
+INT 0F - IRQ7 - PARALLEL PRINTER
+INT 10 - VIDEO; CPU-generated (80286+)
+INT 11 - BIOS - GET EQUIPMENT LIST; CPU-generated (80486+)
+INT 12 - BIOS - GET MEMORY SIZE
+INT 13 - DISK
+INT 14 - SERIAL
+INT 15 - CASSETTE
+INT 16 - KEYBOARD
+INT 17 - PRINTER
+INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
+INT 19 - SYSTEM - BOOTSTRAP LOADER
+INT 1A - TIME
+INT 1B - KEYBOARD - CONTROL-BREAK HANDLER
+INT 1C - TIME - SYSTEM TIMER TICK
+INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
+INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
+INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
+INT 20 - DOS 1+ - TERMINATE PROGRAM
+INT 21 - DOS 1+ - Function Calls
+INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
+INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
+INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
+INT 25 - DOS 1+ - ABSOLUTE DISK READ
+INT 26 - DOS 1+ - ABSOLUTE DISK WRITE
+INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
+INT 28 - DOS 2+ - DOS IDLE INTERRUPT
+INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
+INT 2A - NETBIOS
+INT 2B - DOS 2+ - RESERVED
+INT 2C - DOS 2+ - RESERVED
+INT 2D - DOS 2+ - RESERVED
+INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
+INT 2F - Multiplex
+INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction
+INT 31 - overwritten by CP/M jump instruction in INT 30
+INT 32 - (no special use)
+INT 33 - MS MOUSE
+INT 34 - FLOATING POINT EMULATION - OPCODE D8h
+INT 35 - FLOATING POINT EMULATION - OPCODE D9h
+INT 36 - FLOATING POINT EMULATION - OPCODE DAh
+INT 37 - FLOATING POINT EMULATION - OPCODE DBh
+INT 38 - FLOATING POINT EMULATION - OPCODE DCh
+INT 39 - FLOATING POINT EMULATION - OPCODE DDh
+INT 3A - FLOATING POINT EMULATION - OPCODE DEh
+INT 3B - FLOATING POINT EMULATION - OPCODE DFh
+INT 3C - FLOATING POINT EMULATION - SEGMENT OVERRIDE
+INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
+INT 3E - FLOATING POINT EMULATION - Borland "SHORTCUT" CALL
+INT 3F - Overlay manager interrupt (Microsoft/Borland)
+INT 40 - DISKETTE - RELOCATED ROM BIOS DISKETTE HANDLER
+INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE; CPU - MS Windows
+INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
+INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
+INT 44 - VIDEO DATA - CHARACTER FONT (PCjr); Novell NetWare
+INT 45 - Z100/Acorn
+INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
+INT 47 - Z100/Acorn/Western Digital/SQL Base
+INT 48 - KEYBOARD (PCjr) - Z100/Watstar/Acorn/Western Digital/Compaq
+INT 49 - SYSTEM DATA (PCjr) - Z100/TI/Watstar/Acorn/MAGic
+INT 4A - SYSTEM - USER ALARM HANDLER
+INT 4B - IBM SCSI interface; Virtual DMA Specification (VDS)
+INT 4C - Z100/Acorn/TI
+INT 4D - Z100
+INT 4E - TI/Z100
+INT 4F - Common Access Method SCSI
+INT 50 - IRQ0 relocated by software
+INT 51 - IRQ1 relocated by software
+INT 52 - IRQ2 relocated by software
+INT 53 - IRQ3 relocated by software
+INT 54 - IRQ4 relocated by software
+INT 55 - IRQ5 relocated by software
+INT 56 - IRQ6 relocated by software
+INT 57 - IRQ7 relocated by software
+INT 58 - IRQ8/0 relocated by software
+INT 59 - IRQ9/1 relocated by software; GSS Computer Graphics Interface
+INT 5A - IRQ10/2 relocated by software
+INT 5B - IRQ11/3 relocated by software; Network
+INT 5C - IRQ12/4 relocated by software; Network Interface
+INT 5D - IRQ13/5 relocated by software
+INT 5E - IRQ14/6 relocated by software
+INT 5F - IRQ15/7 relocated by software; HP 95LX GRAPHICS PRIMITIVES
+INT 60 - reserved for user interrupt; multiple purposes
+INT 61 - reserved for user interrupt; multiple purposes
+INT 62 - reserved for user interrupt; multiple purposes
+INT 63 - reserved for user interrupt; multiple purposes
+INT 64 - reserved for user interrupt; multiple purposes
+INT 65 - reserved for user interrupt; multiple purposes
+INT 66 - reserved for user interrupt; multiple purposes
+INT 67 - reserved for user interrupt; LIM EMS; multiple purposes
+INT 68 - multiple purposes
+INT 69 - multiple purposes
+INT 6A - multiple purposes
+INT 6B - multiple purposes
+INT 6C - CONVERTIBLE; DOS 3.2; DECnet DOS network scheduler
+INT 6D - VGA - internal
+INT 6E - DECnet DOS - DECnet NETWORK PROCESS API
+INT 6F - Novell NetWare; 10NET; MS Windows 3.0
+INT 70 - IRQ8 - CMOS REAL-TIME CLOCK
+INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
+INT 72 - IRQ10 - RESERVED
+INT 73 - IRQ11 - RESERVED
+INT 74 - IRQ12 - POINTING DEVICE (PS)
+INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
+INT 76 - IRQ14 - HARD DISK CONTROLLER (AT and later)
+INT 77 - IRQ15 - RESERVED (AT,PS); POWER CONSERVATION (Compaq)
+INT 78 - DOS extenders; multiple purposes
+INT 79 - multiple purposes
+INT 7A - Novell NetWare; IBM 3270; multiple purposes
+INT 7B - multiple purposes
+INT 7C - multiple purposes
+INT 7D - multiple purposes
+INT 7E - RESERVED FOR DIP, Ltd. ROM LIBRARY; multiple purposes
+INT 7F - multiple purposes
+INT 80 - reserved for BASIC; multiple purposes
+INT 81 - reserved for BASIC
+INT 82 - reserved for BASIC
+INT 83 - reserved for BASIC
+INT 84 - reserved for BASIC
+INT 85 - reserved for BASIC
+INT 86 - IBM ROM BASIC - used while in interpreter; multiple purposes
+INT 87 - IBM ROM BASIC - used while in interpreter
+INT 88 - IBM ROM BASIC - used while in interpreter; multiple purposes
+INT 89 - IBM ROM BASIC - used while in interpreter
+INT 8A - IBM ROM BASIC - used while in interpreter
+INT 8B - IBM ROM BASIC - used while in interpreter
+INT 8C - IBM ROM BASIC - used while in interpreter
+INT 8D - IBM ROM BASIC - used while in interpreter
+INT 8E - IBM ROM BASIC - used while in interpreter
+INT 8F - IBM ROM BASIC - used while in interpreter
+INT 90 - IBM ROM BASIC - used while in interpreter
+INT 91 - IBM ROM BASIC - used while in interpreter
+INT 92 - IBM ROM BASIC - used while in interpreter; multiple purposes
+INT 93 - IBM ROM BASIC - used while in interpreter
+INT 94 - IBM ROM BASIC - used while in interpreter; multiple purposes
+INT 95 - IBM ROM BASIC - used while in interpreter
+INT 96 - IBM ROM BASIC - used while in interpreter
+INT 97 - IBM ROM BASIC - used while in interpreter
+INT 98 - IBM ROM BASIC - used while in interpreter
+INT 99 - IBM ROM BASIC - used while in interpreter
+INT 9A - IBM ROM BASIC - used while in interpreter
+INT 9B - IBM ROM BASIC - used while in interpreter
+INT 9C - IBM ROM BASIC - used while in interpreter
+INT 9D - IBM ROM BASIC - used while in interpreter
+INT 9E - IBM ROM BASIC - used while in interpreter
+INT 9F - IBM ROM BASIC - used while in interpreter
+INT A0 - IBM ROM BASIC - used while in interpreter
+INT A1 - IBM ROM BASIC - used while in interpreter
+INT A2 - IBM ROM BASIC - used while in interpreter
+INT A3 - IBM ROM BASIC - used while in interpreter
+INT A4 - IBM ROM BASIC - used while in interpreter
+INT A5 - IBM ROM BASIC - used while in interpreter
+INT A6 - IBM ROM BASIC - used while in interpreter
+INT A7 - IBM ROM BASIC - used while in interpreter
+INT A8 - IBM ROM BASIC - used while in interpreter
+INT A9 - IBM ROM BASIC - used while in interpreter
+INT AA - IBM ROM BASIC - used while in interpreter
+INT AB - IBM ROM BASIC - used while in interpreter
+INT AC - IBM ROM BASIC - used while in interpreter
+INT AD - IBM ROM BASIC - used while in interpreter
+INT AE - IBM ROM BASIC - used while in interpreter
+INT AF - IBM ROM BASIC - used while in interpreter
+INT B0 - IBM ROM BASIC - used while in interpreter
+INT B1 - IBM ROM BASIC - used while in interpreter
+INT B2 - IBM ROM BASIC - used while in interpreter
+INT B3 - IBM ROM BASIC - used while in interpreter
+INT B4 - IBM ROM BASIC - used while in interpreter
+INT B5 - IBM ROM BASIC - used while in interpreter
+INT B6 - IBM ROM BASIC - used while in interpreter
+INT B7 - IBM ROM BASIC - used while in interpreter
+INT B8 - IBM ROM BASIC - used while in interpreter
+INT B9 - IBM ROM BASIC - used while in interpreter
+INT BA - IBM ROM BASIC - used while in interpreter
+INT BB - IBM ROM BASIC - used while in interpreter
+INT BC - IBM ROM BASIC - used while in interpreter
+INT BD - IBM ROM BASIC - used while in interpreter
+INT BE - IBM ROM BASIC - used while in interpreter
+INT BF - IBM ROM BASIC - used while in interpreter
+INT C0 - IBM ROM BASIC - used while in interpreter
+INT C1 - IBM ROM BASIC - used while in interpreter
+INT C2 - IBM ROM BASIC - used while in interpreter
+INT C3 - IBM ROM BASIC - used while in interpreter
+INT C4 - IBM ROM BASIC - used while in interpreter
+INT C5 - IBM ROM BASIC - used while in interpreter
+INT C6 - IBM ROM BASIC - used while in interpreter
+INT C7 - IBM ROM BASIC - used while in interpreter
+INT C8 - IBM ROM BASIC - used while in interpreter
+INT C9 - IBM ROM BASIC - used while in interpreter
+INT CA - IBM ROM BASIC - used while in interpreter
+INT CB - IBM ROM BASIC - used while in interpreter
+INT CC - IBM ROM BASIC - used while in interpreter
+INT CD - IBM ROM BASIC - used while in interpreter
+INT CE - IBM ROM BASIC - used while in interpreter
+INT CF - IBM ROM BASIC - used while in interpreter
+INT D0 - IBM ROM BASIC - used while in interpreter
+INT D1 - IBM ROM BASIC - used while in interpreter
+INT D2 - IBM ROM BASIC - used while in interpreter
+INT D3 - IBM ROM BASIC - used while in interpreter
+INT D4 - IBM ROM BASIC - used while in interpreter
+INT D5 - IBM ROM BASIC - used while in interpreter
+INT D6 - IBM ROM BASIC - used while in interpreter
+INT D7 - IBM ROM BASIC - used while in interpreter
+INT D8 - IBM ROM BASIC - used while in interpreter
+INT D9 - IBM ROM BASIC - used while in interpreter
+INT DA - IBM ROM BASIC - used while in interpreter
+INT DB - IBM ROM BASIC - used while in interpreter
+INT DC - IBM ROM BASIC - used while in interpreter
+INT DD - IBM ROM BASIC - used while in interpreter
+INT DE - IBM ROM BASIC - used while in interpreter
+INT DF - IBM ROM BASIC - used while in interpreter
+INT E0 - IBM ROM BASIC - used while in interpreter; multiple purposes
+INT E1 - IBM ROM BASIC - used while in interpreter
+INT E2 - IBM ROM BASIC - used while in interpreter
+INT E3 - IBM ROM BASIC - used while in interpreter
+INT E4 - IBM ROM BASIC - used while in interpreter
+INT E5 - IBM ROM BASIC - used while in interpreter
+INT E6 - IBM ROM BASIC - used while in interpreter
+INT E7 - IBM ROM BASIC - used while in interpreter
+INT E8 - IBM ROM BASIC - used while in interpreter
+INT E9 - IBM ROM BASIC - used while in interpreter
+INT EA - IBM ROM BASIC - used while in interpreter
+INT EB - IBM ROM BASIC - used while in interpreter
+INT EC - IBM ROM BASIC - used while in interpreter
+INT ED - IBM ROM BASIC - used while in interpreter
+INT EE - IBM ROM BASIC - used while in interpreter
+INT EF - BASIC - ORIGINAL INT 09 VECTOR
+INT F0 - BASICA.COM, GWBASIC, compiled BASIC - ORIGINAL INT 08 VECTOR
+INT F1 - reserved for user interrupt
+INT F2 - reserved for user interrupt
+INT F3 - reserved for user interrupt
+INT F4 - reserved for user interrupt
+INT F5 - reserved for user interrupt
+INT F6 - reserved for user interrupt
+INT F7 - reserved for user interrupt
+INT F8 - reserved for user interrupt
+INT F9 - reserved for user interrupt
+INT FA - reserved for user interrupt
+INT FB - reserved for user interrupt
+INT FC - reserved for user interrupt
+INT FD - reserved for user interrupt
+INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
+INT FF - AT/XT286/PS50+ - destroyed by return from protected mode
diff --git a/floppy/doc/RBROWN.TXT b/floppy/doc/RBROWN.TXT
new file mode 100644
index 0000000..70ebefa
--- /dev/null
+++ b/floppy/doc/RBROWN.TXT
@@ -0,0 +1,487 @@
+Public Domain/Freeware/Shareware by Ralf Brown:
+
+(URLs for use with your favorite WWW browser are at the end of this file)
+
+The x86/MSDOS Interrupt List
+ A comprehensive listing of more than 8500 functions available through
+ interrupt calls on IBM PCs and compatibles. Includes both
+ documented and undocumented functions, plus lists of I/O port, CMOS,
+ and memory locations, far-call entry points, model-specific
+ registers, and system-management mode state save areas.
+ Current version: INTER61A (release 61, 16jul00)
+ INTER61B
+ INTER61C
+ INTER61D
+ INTER61E (utility programs)
+ INTER61F (hypertext conversion programs)
+
+DVINT
+ An extract of the MSDOS Interrupt List containing the DESQview
+ and QEMM API calls. Updated whenever there have been significant
+ additions to the DESQview/QEMM calls in the Interrupt List.
+ Current version: DVINT43 (06jun94)
+
+RBcomm
+ A DESQview-aware communications program which sports seamless DSZ,
+ PCZ, or PUMA/MPt integration for file transfers; ANSI/VT102, VT52,
+ and AVATAR emulation (including 132 columns); speeds to 115200 bps;
+ a powerful macro language; dialing directory; ANSI music; and
+ more. Runs in 65K with DSZ, 47K without. While it works under
+ plain DOS, additional features are available under DESQview.
+ Current version: RBCOM346 (v3.46 29jan95)
+
+RBdualVGA
+ Use two color displays on one PC.
+ Current version: RBDUAL09 (v0.9 02jun96)
+ DUAL093S (v0.93 source code, 11sep98)
+
+RBkeyswap
+ Exchange left control and CapsLock keys, as well as Esc and `/~.
+ Loads itself high, using just 64 bytes; needs only 128 bytes low
+ if no high memory is available.
+ Current version: RBKEYSWP (v2.0 22jun91; v3.0 included in AMISLIB)
+
+RBpci
+ Print out more than you ever wanted to know about the devices
+ on the PCI bus inside your computer. All device-specific data
+ files are plain text, to let you update/customize them yourself
+ (updates for new chips which are sent to the author will be
+ included in the following release). Includes full source code
+ for the program.
+ Current version: RBPCI119 (v1.19, 10jan99)
+
+SPAWNO
+ A replacement for the Turbo C and Microsoft C spawn..() functions
+ which swaps the current program to disk, EMS, XMS, or raw extended
+ memory while the spawned program executes, leaving less than 300
+ bytes in memory. Also includes a variant for Turbo Pascal v4.0 or
+ higher.
+ Current version: SPWNO413 (v4.13 12dec92)
+ Price: libraries free, full source code $100.
+
+AMISLIB
+ Public Domain library (with full source code and five sample TSRs)
+ for creating self-highloading TSRs which may be unloaded in any
+ order. Up to 256 TSRs created with AMISLIB may be installed
+ simultaneously, and TSRs can be as small as 128 bytes resident,
+ 1.4K on disk. One of the sample TSRs is a popup which accesses
+ DOS.
+ Current version: AMISL092 (v0.92 24sep95)
+
+DV-GLUE
+ DESQview API bindings for Turbo/Borland C (also mostly compatible
+ with MS C).
+ Current version: DVGLU172 (source & compiled) (v1.72 01oct95)
+
+DVKPOLL
+ "Poor man's version" of TAME. Makes programs give up CPU time when
+ they are in an idle loop polling the keyboard for keystrokes.
+ Current version: DVKPOLL2 (18jun88)
+ Note: This program has been superseded by DVPTAME.
+
+DVPTAME
+ "Not-so-poor man's version" of TAME. Tells DESQview to give the
+ remainder of a time slice away if the program is in an idle loop
+ polling the keyboard for keystrokes. Uses 0 bytes of memory.
+ Current version: DVPTAME (04jun91)
+
+DVdevload
+ Load device drivers only in those DESQview windows which need the
+ services of the driver, reducing the pre-DESQview overhead and thus
+ permitting larger DESQview windows.
+ Current version: DVDEVL12 (v1.20 03jan93)
+ Note: as of DESQview 2.40, Quarterdeck's DEVICE.COM is able to install
+ drivers into the device chain in the same manner as DVdevload;
+ however, DEVICE uses eight times as much memory as DVdevload and
+ has a serious interaction with 4DOS/NDOS that can lead to system
+ crashes.
+
+RBspeed
+ Switch the CPU speed of an Intel Pentium motherboard using the
+ "Neptune" chipset. Public Domain.
+ Current version: RBSPEED1 (v1.00 08sep94)
+
+SPTURBO
+ An integrated environment for Borland's Sprint word processor and
+ Turbo C, Turbo Pascal, Turbo Assembler, Turbo Debugger, and CDECL.
+ Knows which compiler to invoke based on the file's extension, and
+ can run MAKE for multi-file projects.
+ Current version: SPTURBO (v2.3 Aug 1,1989)
+ Note: There will be no further updates of this package.
+
+PURGEMSG
+ Delete or copy *.MSG files such that you only see those messages
+ from a Fidonet echomail area which interest you.
+ Current version: PURGEMSG (v1.00, 04aug91)
+
+--------------
+Authentication
+--------------
+
+Beginning 1/1/91, all packages are distributed in PKZIP archives with
+authenticity verification (v1.1 before 4/1/93, v2.0 after). Please
+redistribute only the original archives to preserve the authenticity
+information. If you receive an archive dated after 1/1/91 which fails
+the authenticity check, you should treat it with caution. If you
+receive an archive which passes the PKZIP check but displays an
+authenticity code other than NWS235, then the archive has been
+deliberately tampered with and should be deleted IMMEDIATELY.
+
+Beginning 9/24/95, all packages additionally include detached PGP
+signatures in an enclosed archive named PGP-SIGS.ZIP. My PGP keys
+are available from http://pobox.com/~ralf/ralf.asc or
+ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/ralf.asc
+
+
+-------------
+Availability:
+-------------
+
+On the Internet, by standard anonymous FTP from FTP.CS.CMU.EDU [128.2.206.173].
+ Change directly to directory /afs/cs.cmu.edu/user/ralf/pub with a
+ single command (directories above this are not accessible via
+ anonymous FTP). [DV-GLUE is not available here]
+ Don't forget to set "binary" mode! If you are refused access to
+ the directory, try again later; a fileserver may have been down.
+
+If connected to AFS, you can simply perform standard Unix/VMS/whatever
+ directory listing and file copies from the above directory.
+
+Or visit my home page, and grab the files with your favorite web browser:
+ http://www.pobox.com/~ralf
+
+On FIDOnet, from Soundingboard BBS 1:129/26 1-412-621-4604 28.8k HST, file req.
+ My programs are kept in file area 8 for those wishing to download
+ manually.
+
+Alternate Distribution Points (new versions will be available here
+usually within 24 hours of release):
+Internet: SimTel Software Repository mirrors in directories /SimTel/msdos/X.
+ X is 'info' for the Interrupt List, 'modem' for RBcomm, 'c' for
+ SPAWNO, 'asmutl' for AMISLIB, 'desqview' for DV-GLUE/DVKPOLL/DVPTAME,
+ and 'sprint' for SPTURBO. Note that you must use mode "binary" to
+ successfully FTP the files. The SimTel mirror sites include
+ oak.oakland.edu [141.210.10.117], wuarchive.wustl.edu [128.252.135.4],
+ ftp.uu.net [137.39.1.9], nic.funet.fi [128.214.6.100],
+ src.doc.ic.ac.uk [146.169.3.7] and archie.au [139.130.4.6].
+ Some packages are also on GARBO.UWASA.FI in /pc/programming.
+
+Bitnet users may also retrieve items on SimTel via the following automated
+mail servers:
+ (in the US) LISTSERV@RPITSVM (alias VM.ITS.RPI.EDU)
+ LISTSERV@NDSUVM1 (alias VM1.NODAK.EDU)
+ (in Europe) TRICKLE@AWIWUW11 (Austria)
+ TRICKLE@BANUFS11 (Belgium)
+ TRICKLE@DKTC11 (Denmark)
+ TRICKLE@FRMOP11 (France)
+ BITFTP@BITFTP.BITNET (Germany)
+ TRICKLE@IMIPOLI (Italy)
+ TRICKLE@HEARN (Netherlands)
+ TRICKLE@EB0UB011 (Spain)
+ TRICKLE@SEARN (Sweden)
+ TRICKLE@TREARN (Turkey)
+ (elsewhere) TRICKLE@UNALCOL (Colombia)
+ TRICKLE@TAUNIVM (Israel)
+Send a mail message containing the line
+ /HELP
+in the body for instructions.
+
+DV-GLUE, DVKPOLL, DVINT, DVPTAME, DVdevload, and RBcomm are also available on
+Fidonet BBSs belonging to DVNet (listed below).
+
+The Interrupt List and SPAWNO are also available on Fidonet BBSs belonging
+to the Programmer's Distribution Network. Selected PDN member boards as of
+March, 1998:
+
+ 1:232/16 Martin Belcke Peoria, IL (http://www.filegate.org) 1-309-672-4430
+ 1:270/101 George Peace Harrisburg, PA -paonline.com (Internet)
+ 1:3615/50 Planet Connect Satellite Systems
+ 1:154/280 EXEC-PC BBS Elm Grove, WI
+ 1:124/3210 Glenn O'Gorman Garland, TX
+ 1:167/132 Roland Larocque Canada
+ 1:115/10 Tom Huber Crystal Lake, IL
+ 1:2320/38 Janis Kracht Louisville, KY (PDN,MISSING,UTIL,PAS,PCB,HAM,STN)
+ (http://jkracht.aye.net) BBS: 1-502-245-6778
+ 1:272/125 Thomas Gabrinowiz Montgomery, NY
+ 1:140/53 Frank Cox Melville Sask. Canada
+ 1:285/85 Richard Rasmussen Omaha, Nebraska
+ 1:153/9117 Darrell Harder Whiterock, BC
+ 1:321/212 Vern Pero Dalton MA
+ 1:342/52 Vincent Danen Edmonton_AB
+ 1:2605/638 Douglas Vogt Bridewater NJ
+ 1:3803/7 Ben Ritchey Lafayette, LA
+ 2:20/11 Peter Bygden Stockholm, Sweden
+ 2:341/68 Juan Enrique Gomez Madrid, Spain
+ 2:5032/5 Dmitry Maevsky Novgorod, Russia
+ 3:774/605 Barry Blackford Hamilton, NZ
+ 1:133/2 Chuck Robinson Lawrenceville, GA (ftp://ftp.ftbbs.com/fdn)
+ 2:25/75 Graham Print (RAR, T-MAIL, FSFAN)
+ 2:254/61 Dave Carter Croydon, Surrey
+ 2:254/211 Bill Hayles Foots Cray, Kent
+ 2:254/212 Bill Hayles Foots Cray, Kent
+ 2:254/233 Peter Friedlos London
+ 2:254/620 Michael Mehmet London
+ 2:251/21 Mike Forbes Southsea
+ 2:251/50 Jim Reeves Gosport, Hampshire
+ 2:251/101 Roy Arnold Bournemouth
+ 2:251/203 Robert Leach Fareham, Hampshire
+ 2:252/7 Andrew Eaves Princes Risborough, Buckinghamshire
+ 2:252/314 Dwayne Heaton Binfield, Hants
+ 2:252/555 Andrew Chant Farnborough
+ 2:255/1 John Burden Exeter. MNL
+ 2:257/71 Darren Parker Hitchin, Herts
+ 2:443/13 Colin Turner Bangor, Co. Down, N.Ireland
+ 2:481/56 Rafel Slimakowski Poland
+ 2:281/506 Ron Huiskes (SDC,LUX,NOVL,PAS)
+ 2:245/5530 Michael Bauer Mainz, Germany
+ 2:205/498 Bo Jakobsen Alta, Sweeden
+ 2:235/200 Brian Vinberg Copenhagen, Denmark
+ 2:236/64 Richard Hansen Glumsoe, Denmark
+ 2:236/1111 Jrgen llgrd Slangerup, Denmark
+ 2:244/1530 Edgar Schaettle Schwalbach, Germany
+ 2:291/709 Pierre-Claude Demanet Brussels, Belgium
+ 2:292/826 Gerry Van Steerteghem Zoersel, Belgium
+ 2:301/714 Rolf Taschler Zuerich, Switzerland
+ 2:310/700 Sascha Vogt Vienna, Austria
+ 2:333/304 Enzo Gasparini Padova, Italy
+ 2:403/138 Nemrod Kedem Rishon le Zion, Israel
+ 2:2480/220 Uwe Schirm Muenchen, Germany
+ 3:633/2 Malcolm Miles Melbourne Victoria Australia
+ 4:823/1 Adolfo Justiniano Bolivia, South America
+ 4:806/7 Brazil Marcio Gordiano
+ 4:901/148 Argentina Fernando Bertuccelli
+ 4:840/1 Peru Daniel Pizarro
+ 4:851/1 Uruguay Alejandro Hernandez
+ 5:7104/2 Henk Wolsink Port Elizabeth, Rep. of South Africa
+ 6:751/321 Terry Roati Makati City, Philippines
+ 6:750/213 Manila (Albert Godinez)
+ 6:750/401 Kalookan City (Albert Uy)
+ 6:751/15 San Fernando (Jun Martin)
+ 6:751/2 Quezon City (William Villanueva)
+ 6:751/20 Olongapo City (Rudy Ordiz)
+ 6:751/101 Pasig (Victor Reyes)
+ 6:751/222 Greenhills (Stewart Buckingham)
+ 6:751/417 Paranaque (Marco Antonio Cabrazal)
+ 6:754/10 Cebu City (Jojo Sybico)
+ 6:754/201 Bacolod City (Eduardo M Joven)
+
+------------------------------------------------------------------------
+
+DVNet nodes as of August 1994:
+
+ DVNet node listing as of AUG 03, 1994
+
+ USA
+ ------------------------------ --------- ------------ --------
+AK 65'North, Fairbanks 1:355/38 907-452-1460 VFCV32b
+AR Phil's BBS, Walnut Ridge 1:389/10 501-886-1701 HSTV32b
+AR CrossFire, N Little Rock 1:3821/2 501-791-2993 H16V32b
+AR MinnTelligence, Little Rock 1:3821/6 501-664-2237 V32b
+AZ Analog Gate, Sierra Vista 1:309/9 602-458-0451 HSTV32
+CA Carl's Corner, San Jose 1:10/1 408-248-9704 HSTV32
+CA Central Computer Banks, LA 1:102/851 213-256-0871 HSTV32b
+CA Gandalf's, El Cajon 1:202/302 619-466-9505 HSTV32
+CA Stingray!, Clovis 1:205/12 209-298-9461 HST
+CA Bertha Board, Manteca 1:208/1 209-823-0093 HST
+CO Hole in the Wall, Parker 1:104/651 303-841-5515 HSTV32b
+CO Prgrmmrs Playhouse, Colo Springs 1:128/60 719-380-8813 HST
+CT Treasure Island, Danbury 1:141/730 203-791-8532 HSTV32b
+CT Ascii Neighborhood, W Haven 1:141/333 203-934-9852 HST
+CT Death's Domain, Enfield 1:142/629 203-749-6103 HSTV32
+CT Plainfield News, Plainfield 1:327/452 203-564-8579 HST
+DE KnowledgeBase BBS, Wilmington 1:150/360 302-633-4797 HSTV32
+FL Stan's Shack, Jacksonville 1:112/5 904-768-3854 HSTV32
+FL Silicon Dreams, Bradenton 1:137/200 813-746-7788 V32
+FL Jos' Lounge, Naples 1:3630/40 813-592-1535 HSTV32
+FL Other World, Tallahassee 1:3605/56 904-668-1092 HST
+FL The Dog House, Tamarac 1:369/54 305-720-3637 HSTV32
+FL archonRAINBOW, Ft Myers 1:371/13 813-939-3394 HST
+FL Strat's Asylum, Cape Canaveral 1:374/12 407-799-0390 HSTV32b
+FL E.I.L.C. BBS, Palm Bay 1:374/60 407-676-2998 HSTV32b
+FL Southern Systems, Tampa 1:377/9 813-977-7065 HSTV32
+GA Galaxy Info System, Atlanta 1:133/411 404-671-1024 V32
+GA Code Plus, Warner Robins 1:3611/15 912-953-1053 HSTV32b
+GA Combat Override, Albany 1:3617/3 912-883-1421 HST
+HI CocoNuts BBS Service, Honolulu 1:345/2 808-845-7054 HSTV32
+IA Icarus, Iowa City 1:283/657 319-337-9878 HSTV32
+IL Midrange System, Mt Prospect 1:115/439 708-439-9679 HSTV32
+IL Buzzard's Roost, Peoria 1:232/17 309-691-5469 HSTV32b
+IN Someplace BBS, Indianapolis 1:231/120 317-353-9981 HST
+IN Joker's Wild, Indianapolis 1:231/510 317-843-1371 HSTV32
+IN The Jokerman BBS, Bluffton 1:236/12 219-824-5628 ZYXV32b
+LA My Secret Garden, Shreveport 1:380/5 318-865-4503 H16V32b
+LA *Silver Streak RBBS, New Orleans 1:396/15 504-888-6515 HSTV32b
+MA Rainbow's Edge, Westwood 1:101/1 617-551-0495 HSTV32
+MA Pioneer Valley PCUG1, Amherst 1:321/109 413-256-1037 HST
+MA Denis's Opus, Ayer 1:322/2 508-772-6373 HSTV32
+MA Waystar BBS, Marlborough 1:322/14 508-481-7147 HST
+MA The Business Card, Lawrence 1:324/121 508-682-5329 HSTV32b
+MD Addict's Attic, Germantown 1:109/423 301-428-8998 V32
+MD AviTechnic ,Lutherville 1:261/662 301-252-0717 HSTV32
+MI The Red Eye BBS, Westland 1:2410/213 313-728-0213 V32b
+MI Fast Eddies BBS, Monroe 1:2380/101 313-243-0944 ZYXV32b
+MN Riverside BBS, Elk River 1:282/1008 612-241-9963 V32
+MO Cheswick's, St Louis 1:100/375 314-965-5296 HSTV32
+MO Summit Forum, Holt's Summit 1:289/13 314-896-5393 HSTV32
+MO Cmos, St Joseph 1:294/1 816-233-1357 HSTV32b
+NC Crossed Wires, Dudley 1:3660/809 919-580-7194 H16V32b
+NC Psychotronic BBS, Durham 1:3641/1 919-286-7738 HSTV32
+NC Programmer's Asstnt, Charlotte 1:379/4 704-544-0010 HST
+NH Our BBS Yours and Mine, Derry 1:132/193 603-432-5287 HSTV32b
+NJ University BBS, Eatontown 1:107/411 908-544-8193 HSTV32b
+NJ Maple Shade Opus, Maple Shade 1:266/12 609-482-8604 HSTV32b
+NJ APFL- The BBS, Tenafly 1:2604/306 201-567-6994 HSTV32b
+NJ Fleet Street, Somerville 1:2605/625 908-722-8962 V32
+NJ Atrium Way, Morris Plains 1:2606/583 201-984-5555 HSTV32
+NM Construction Net #6, Los Alamos 1:15/20 505-662-0659 HST
+NV $in City Bit Pit, Las Vegas 1:209/711 702-647-4427 HSTV32
+NV Danger Zone, Reno 1:213/720 702-828-4907 HSTV32
+NY Rivendell * TAP/1, Syracuse 1:260/1 716-646-0227 HSTV32
+OH The Mountain Top, Cincinnati 1:108/107 513-921-5568 HST
+OH Blue Byte BBS, Enon 1:110/270 513-864-1143 HST
+OH Nerd's Nook, Rocky River 1:157/3 216-356-1882 HSTV32b
+OH NHampton Data, Cuyahoga Falls 1:157/533 216-928-8565 HSTV32
+OH Computer Room, Pickerington 1:226/110 614-861-8377 HSTV32
+OH Steel Valley BBS, Girard 1:237/500 216-545-2318 HSTV32
+OH The Outer Limits, Chillicothe 1:2220/10 614-772-5520 H16VFC
+OH South of the Bauder, Chillicothe 1:2220/70 614-773-2423 H16V32b
+OK Ascension, Norman 1:147/46 405-360-4261 HST
+OR Bink of an Aye, Portland 1:105/42 503-297-9043 PEPV32
+OR Atarian BBS, Portland 1:105/10 503-245-9730 HSTV32
+OR Busker's Boneyard, Portland 1:105/14 503-771-4773 PEP
+OR Dimension 7, Eugene 1:152/7 503-461-2219 HST
+PA The Other BBS, Harrisburg 1:270/101 717-657-2223 HST
+PA Walsh Microsys, Philadelphia 1:273/917 215-725-9134 HST
+PA Optical Illusion, Allentown 1:273/603 215-797-7409 HSTV32
+PA U.S.S. Intrepid, Spring House 1:273/703 215-641-0270 HST
+PA Programmer's Haven, Allentown 1:2607/103 610-797-9378 V32BVFC
+PA Cheyenne BBS, Upper Darby 1:2614/409 215-544-0819 HSTV32b
+PR Island Sun, Caparra Heights 1:367/15 809-783-9542 HST
+SC Dreadnaught BBS, Columbia 1:376/50 803-731-3884 V32
+SC Special Projects, Beech Island 1:360/13 803-827-1725 HSTV32b
+SC Carolina Collections, Sumter 1:3647/1 803-499-4316 HSTV32b
+TN EET BBS, Nashville 1:116/24 615-353-3476 HSTV32
+TX Conch Opus, Houston 1:106/357 713-667-7213 HSTPCP
+TX Inns of Court, Dallas 1:124/6101 214-458-2620 HSTV32
+TX Spare Parts, Bedford 1:130/38 817-540-3527 HST
+TX Southern Crossroads, Dallas 1:124/4115 817-481-8984 ZYXV32b
+TX The Gas Company, Arlington 8:930/201 817-265-8938 HST
+TX Wireline, Corpus Christi 1:160/40 512-241-1120 HST
+TX Middle Earth, San Antonio 1:382/19 512-835-4848 HST
+TX Hair of the Dog, Austin 1:382/44 512-219-9446 V32b
+TX Last Chance TBBS, San Antonio 1:387/800 512-822-7519 HST
+TX TSTI INFO NET, Waco 1:388/1000 817-799-1570 HST
+TX Direct Connect!, Victoria 1:3802/213 512-573-0245 HSTV32b
+VA Diving Board, Richmond 1:264/180 804-965-9082 HST
+VA Host D, Newport News 1:271/295 804-887-0577 V32b
+VA Host D, Newport News 1:271/296 804-887-2490 ZYXV32b
+VA Host D, Newport News 1:271/294 804-887-8235 HST
+VA ThunderBolt BBS, Fredericksburg 1:274/13 703-373-9289 HST
+VA Terrapin Station, Norfolk 1:275/13 804-489-7450 HSTV32b
+VT The Ozone Layer, Williston 1:325/118 802-862-5058 HSTV32b
+WA Pacifier BBS, Vancouver 1:105/103 206-253-9770 HSTV32
+WA Seattle/Everett Hub, Seattle 1:343/300 206-244-8860 HST
+WA Sno-Valley SW Exchange, N Bend 1:343/108 206-888-9249 HSTV32
+WA Sleepy Hollow BBS, Wenatchee 1:344/78 509-664-4021 V32b
+WA Gecko Control, Fairchild AFB 1:346/26 509-244-0944 V32
+WA SunDial BBS, Pasco 1:347/7 509-545-1789 HST
+WI County Line BBS, W Allis 1:154/100 414-476-8468 HSTV32b
+WI The Inn, Chippewa Falls 1:2300/10 715-723-3552 HSTV32b
+WY Oregon Trail XRoads, Casper 1:303/5 307-472-3615 H96V32
+WY Black Diamond, Greybull 1:15/24 307-682-6944 H14V32b
+
+ CANADA
+ ------------------------------ --------- ------------ ----------
+AB Logical Solutions, Calgary 1:134/10 403-299-9917 HST
+AB Information Corner, Edmonton 1:342/20 403-483-1896 HST
+BC Kiwi-Land, Surrey 1:153/909 604-536-0831 H16V32b
+MB Polar Bear Heaven Winnipeg 1:348/405 204-837-9704 HST
+NB Atlantic Access, St John W 1:255/2 506-635-1964 HST
+ON AFI Comm, Nepean 1:163/115 613-829-0282 HST
+ON Ned's Opus HST Ottawa 1:163/211 613-523-8965 HST
+ON Alpha City BBS, Oshawa 1:229/2 416-579-6302 H14V32b
+ON The Aardvark, Burlington 1:259/110 905-332-4127 H16V32b
+PQ Arcane BBS, Laval 1:167/116 514-687-9586 HST
+SK The DataForce, Regina 1:140/72 306-585-1958 HST
+
+ ZONE 2
+ --------------------------------- --------- -------------- -------
+AU ZAP #3/Cuckoo's Nest 2:310/3 43-1-454330 HSTV32b
+
+BE The Optimist, Antwerpen 2:292/856 32-3-2811450 ZYXV32b
+
+DE The 49er's, Wuppertal 2:243/7801 49-202-305803 HST
+DE Median, Berlin 2:2410/305 49-30-735148 H16V32Terbo
+DE BoersenBox, Friedrichshafen 2:246/8501 49-7541-53191 HSTV32b
+
+FR The Lys Valley, Comines 2:322/2 33-20631262 HSTV32Terbo
+
+GB Enigma Variations, Worcester 2:2/544 44-905-795002 HST
+GB GABBS, Gosport Hants 2:251/16 44-705-524805 HSTV32b
+GB Komputer Knowledge, Cheddington 2:252/7 44-296-668148 HSTV32
+GB Aureal, Market Harborough 2:254/153 44-858-466594 HST
+GB Trinity I, Exeter 2:255/112 44-392-495899 HSTV32b
+GB Dog & Duck, Hull 2:2503/3 44-482-444650 HSTV32
+GB Power BBS, Wrexham Clwyd 2:442/78 44-978-824278 HSTV32b
+GB Piston Popper's, Hastings 2:441/80 44-424-853361 HSTV32
+
+IL Small BBS, Jerusalem 2:402/777 V32b
+
+IT Venus, Pavia PV 2:331/318 39-382-575369 V32bZYX
+IT Genova 2000, Genova 2:332/201 39-10-3770080 V32b
+IT SUBALPINA's_Hub, Torino 2:334/300 39-11-6624400 HSTV32
+
+NL TouchDown, Hoofddorp 2:280/414 31-2503-52030 H14V32b
+NL Interface HQ, Den Haag 2:281/506 31-70-3360698 V32b
+NL Kiss Software, Almelo 2:283/314 31-5490-13932 ZYXV32b
+NL Programmers Support, Helmond 2:2802/108 31-4920-13558 H14V32b
+NL Byteline! Systems, Hardinxveld 2:285/101 31-1846-17611 H14V32b
+NL DOSSBoss Twente, Delden 2:500/149 31-5407-64701 ZYXV32b
+NL The HEKOM Board 2:500/223 31-3483-4072 V32b
+NL MotherBoard 2:512/197 31-50-187669 H14V32b
+
+SE Capital City BBS,Haninge 2:201/111 46-8-53043088 H14V32
+SE Fenix, Viksj” 2:201/298 46-8-58011629 V32b
+
+ ZONE 3
+ ------------------------------ --------- ------------- -------
+AU Marwick's MadHouse, Brisbane 3:640/820 61-7-3870-2972 PEPV32
+AU Sentry, Lane Cove NSW 3:711/401 61-2-9428-4687 PEPV32
+AU Sentry's Shadow, Lane Cove NSW 3:711/501 61-2-9418-6682 V32bTerbo
+AU Revelstone BBS, Doveton Vic 3:632/348 61-3-9741-2353 PEP
+AU Southern Mail CBCS Croyton Vic 3:632/386 61-3-9725-1621 PEP
+AU COMPUlink, Perth WA 3:690/628 61-8-9451-7288 2400
+AU Phone Box,Inglewood SA 3:800/854 61-8-8380-5505 V32
+
+ The following phone number will come into effect in November 1997
+AU OZ-Board, Townsville Qsnlnd 3:640/715 61-7-4721-3592 PEPV32RE
+
+ ZONE 6
+ ------------------------------ --------- ------------- -------
+HK TAIC Maximus Kowloon 6:700/1 85-2-789-1267 PEPV32
+
+
+======================================================================
+
+URLs:
+
+Home page: http://www.pobox.com/~ralf
+
+Files in my FTP area:
+ http://www.pobox.com/~ralf/files.html
+ ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/
+
+Files on SimTel and mirrors:
+ ftp://ftp.simtel.net/pub/simtelnet/msdos/info/ [look for inter???.zip]
+ ftp://ftp.simtel.net/pub/simtelnet/msdos/c/spwno413.zip
+ ftp://ftp.simtel.net/pub/simtelnet/msdos/desqview/dvint43.zip
+ ftp://ftp.simtel.net/pub/simtelnet/msdos/desqview/dvglu172.zip
+ ftp://ftp.simtel.net/pub/simtelnet/msdos/modem/rbcom346.zip
+
+Files at Garbo:
+ ftp://garbo.uwasa.fi/pc/programming/inter61a.zip
+ ftp://garbo.uwasa.fi/pc/programming/inter61b.zip
+ ftp://garbo.uwasa.fi/pc/programming/inter61c.zip
+ ftp://garbo.uwasa.fi/pc/programming/inter61d.zip
+ ftp://garbo.uwasa.fi/pc/programming/inter61e.zip
+ ftp://garbo.uwasa.fi/pc/programming/inter61f.zip
diff --git a/floppy/doc/README.1 b/floppy/doc/README.1
new file mode 100644
index 0000000..3899362
--- /dev/null
+++ b/floppy/doc/README.1
@@ -0,0 +1,18 @@
+This is the first of six archives containing the x86/MSDOS Interrupt List,
+release 61. It should contain the following files:
+
+ README.NOW
+ README.1
+ INTERRUP.A
+ INTERRUP.B
+ INTERRUP.C
+ INTERRUP.D
+ FAQ.LST
+ OVERVIEW.LST
+ TABLES.LST
+ SAMPLE.FLT
+ SAMPLE1.FLT
+ SAMPLE2.FLT
+ NEEDHELP.TXT
+ RBROWN.TXT
+ _ADVERT.TXT
diff --git a/floppy/doc/README.NOW b/floppy/doc/README.NOW
new file mode 100644
index 0000000..53d92fd
--- /dev/null
+++ b/floppy/doc/README.NOW
@@ -0,0 +1,76 @@
+As usual, I still have a queue of unprocessed submissions.... If
+you've sent in any contributions which don't appear in this release but
+which I've acknowledged, they are still on my queue and will appear in
+the future.
+
+Still on the queue: more OpenDOS info, the rest of the TI Professional
+info, lots of chipset info (see NEEDHELP.TXT), ....
+
+
+UPCOMING CHANGES
+================
+
+The individual sections of the list will be larger in future releases
+so that there are fewer parts. I'm planning on 720K per section unless
+there are strong objections.
+
+
+WHAT'S NEW
+==========
+
+INTER61
+-------
+New files:
+ FAQ.LST start of an FAQ -- submissions welcome!
+
+updated files:
+ OPCODES.LST
+
+new info:
+ over 400k of additions, including: AHA-154x commands, ATASPI,
+ more MSRs (including AMD Athlon), lots of DR-DOS/OpenDOS/PTS-DOS/S-DOS
+ info (with more still to be added), AMIGATSR, MULTIJOY, USB4DOS,
+ VXDLDR, etc.
+
+Other changes:
+ INTERxxF and INTERxxG have been merged.
+
+Note: I have deliberately omitted the usual renumbering of tables because
+ I still have lots of pending updates referencing tables using the
+ numbering from INTER60 (and there are no doubt some dangling
+ cross-references due to incomplete updating). As a result, many
+ table numbers will be out of order.
+
+
+INTER60
+-------
+updated files:
+ OPCODES.LST
+
+updated programs:
+ INT2WHLP can now handle the new five-character table numbers
+
+new info:
+ Econet, VESA VBE/AF, Matrox VESA-OEM functions, more Soft-ICE backdoor
+ commands, XBIOS, EZ-Drive, Adaptec AIC-7xxx and AHA-152x ports,
+ GEM/ViewMAX, WinTel API, TrLit API, VHRBIOS.SYS, Philips SAA7110(A),
+ Intel 82595FX
+
+
+INTER59
+-------
+format changes:
+ all table numbers are now five characters in length, and just in time,
+ too: PORTS.LST now has 1014 tables....
+
+updated files:
+ OPCODES.LST
+
+new info:
+ chipsets: Intel 440BX/EX/LX, Intel 82371MX, OPTi "Vendetta", OPTi
+ 82C493/82C382, Via VT82C496G "486SXWB", Via VT82C570M "Apollo Master"
+ PicoPower Vesuvius
+ other hardware: C&T 82C9001A, C&T 64200/64310, Ensoniq ES1370/1371,
+ Cirrus CL-PD6710/6722, Cirrus CL-PD6729
+ Award-BIOS password algorithm, more PCI vendor IDs
+
diff --git a/floppy/doc/SAMPLE.FLT b/floppy/doc/SAMPLE.FLT
new file mode 100644
index 0000000..602ebf2
--- /dev/null
+++ b/floppy/doc/SAMPLE.FLT
@@ -0,0 +1,25 @@
+# Sample filtering file. Lines starting with a hash mark in the first
+# column are comments. Actual filtering lines start with either a dash
+# or a plus sign in the first column (additional modes may be added in
+# the future). Lines starting with a dash specify that interrupt list
+# entries containing that string in the first line will be omitted from
+# the formatted output; lines starting with a plus sign specify that
+# interrupt list entries containing that string are to be included in
+# the formatted output unless one of the minus lines matches.
+
+# Extract MS-DOS calls, but exclude DR-DOS-specific, DOS-extender, and
+# non-DOS networking calls. Note: a few extraneous calls are still included.
+#
++ DOS
+-DR DOS
+-DR-DOS
+-DR Multiuser DOS
+-Concurrent DOS
+-DOS/16M
+-DOS4GX
+-DOS/4G
+-extender
+-LAN Manager
+-DECnet DOS
+#
+# end of SAMPLE.FLT
diff --git a/floppy/doc/SAMPLE1.FLT b/floppy/doc/SAMPLE1.FLT
new file mode 100644
index 0000000..4378d04
--- /dev/null
+++ b/floppy/doc/SAMPLE1.FLT
@@ -0,0 +1,19 @@
+# SAMPLE1.FLT
+# Sample filtering file number 1, using only title includes/excludes.
+# Extract MS-DOS calls, but exclude DR-DOS-specific, DOS-extender, and
+# non-DOS networking calls.
+# Note: a few extraneous calls are still included.
+#
++ DOS
+-DR DOS
+-DR-DOS
+-DR Multiuser DOS
+-Concurrent DOS
+-DOS/16M
+-DOS4GX
+-DOS/4G
+-extender
+-LAN Manager
+-DECnet DOS
+#
+# end of SAMPLE1.FLT
diff --git a/floppy/doc/SAMPLE2.FLT b/floppy/doc/SAMPLE2.FLT
new file mode 100644
index 0000000..5821274
--- /dev/null
+++ b/floppy/doc/SAMPLE2.FLT
@@ -0,0 +1,17 @@
+# SAMPLE2.FLT
+# Sample filtering file number 2, using category includes/excludes. Extract
+# MS-DOS and DR-DOS calls, but exclude OS/2 and other operating systems.
+#
+# unconditionally include the DOS category
+>D
+# include 'other OSes' category, but remove OS/2, VMiX, PC-MOS, etc.
+iO
+-OS/2
+-VMiX
+-PC-MOS
+-STARLITE
+-WinDOS
+-Acorn BBC
+-Linux DOSEMU
+#
+# end of SAMPLE2.FLT
diff --git a/floppy/doc/TABLES.LST b/floppy/doc/TABLES.LST
new file mode 100644
index 0000000..69eae93
--- /dev/null
+++ b/floppy/doc/TABLES.LST
@@ -0,0 +1,184 @@
+SELECTED TABLES Release 61 Last change 16jul00
+Copyright (c) 1989-1999,2000 Ralf Brown
+--------!------------------------------------
+
+Buses
+ EISA (see INT 15/AX=D800h)
+ I2C / IIC bus (see I2C 00h)
+ PCI bus -- see below
+ System Management Bus (see INT 15/AX=53B0h/BH=01h)
+ Universal Serial Bus OpenHCI (see #00902 at INT 1A/AX=B10Ah)
+
+Country-Specific Information:
+ country codes (see #01400 at INT 21/AH=38h)
+ country-specific information (see #01398,#01399)
+ country-dependent capitalization (see INT 21/AX=6520h)
+ code pages (see #00470,#01757)
+ extended country-specific info (see #01750 at INT 21/AX=6500h)
+ uppercase table (see #01751)
+ filename uppercase table (see #01753)
+ filename terminator table (see #01754)
+ collating table (see #01755)
+ DBCS lead byte table (see #01756)
+ yes/no response (see INT 21/AX=6523h)
+
+DESQview
+ .PIF / .DVP file format (see #00427 at INT 15/AX=102Ch)
+ TopView panel file format (see #00436 at INT 15/AH=12h)
+ TopView/DESQview streams (see #00446,#00447,#00448 at INT 15/AH=12h)
+
+Device Drivers
+ command code (see #02595 at INT 2F/AX=0802h)
+ device driver header (see #01646 at INT 21/AH=52h)
+ device attributes (see #01647,#01648 at INT 21/AH=52h)
+ error codes (see #02598 at INT 2F/AX=0802h)
+ request header (see #02596 at INT 2F/AX=0802h)
+
+Disks
+ BIOS Parameter Block (BPB) (see #01663)
+ diskette drive type (see #00242 at INT 13/AH=08h)
+ diskette parameter table (see #01264 at INT 1E)
+ DOS drive parameter block (see #01357 at INT 21/AH=1Fh)
+ DOS media ID byte (see #01356 at INT 21/AH=1Bh)
+ hard disk master boot sector (see #00650 at INT 19)
+ hard disk partition record (see #00651 at INT 19)
+ IDE controller commands (see #P0515 at PORT 01F0h)
+ Partition Types (see #00652 at INT 19)
+ serial number (see #01565 at INT 21/AX=440Dh,#01766 at INT 21/AH=69h)
+
+DOS (general)
+ DOS commandline (see #02585 at INT 2E)
+ DOS Environment block (see #01378 at INT 21/AH=26h,#01395)
+ DOS memory allocation strategy (see #01679 at INT 21/AH=58h)
+ DOS OEM number (see #01394 at INT 21/AH=30h)
+
+DOS error codes (see INT 21/AH=59h)
+ critical error (see #02545 at INT 24)
+ extended error codes (see #01680)
+ error class (see #01682)
+ error locus (see #01684)
+ media ID structure (see #01681)
+ recommended action (see #01683)
+
+DOS EXEC function (see INT 21/AH=4Bh):
+ EXEC parameter block (see #01590,#01591,#01592)
+ .EXE file formats (see #01594,#01596,#01609,#01616)
+ Program Segment Prefix (PSP) (see #01378 at INT 21/AH=26h)
+
+DOS extenders
+ DPMI error codes (see #03143 at INT 21/AX=0000h)
+ DPMI mode switch (see #02718 at INT 2F/AX=1687h)
+ DPMI vendor-specific API (see #02719 at INT 2F/AX=168Ah)
+ DPMS registration structure (see #02793 at INT 2F/AX=43E0h)
+ VCPI (see INT 67/AX=DE00h)
+ mode switch (see #03665 at INT 67/AX=DE0Ch)
+
+DOS-internal data (see INT 21/AH=52h)
+ Current Directory Structure (see #01643,#01644,#01645)
+ Disk buffer (see #01649,#01650,#01652,#01653,#01655)
+ DOS Parameter List (DPL) (see #01686 at INT 21/AX=5D00h)
+ IFS entry point (see #01658)
+ List of Lists (SYSVARS) (see #01627)
+ Memory Control Block (see #01628,#01630,#01633)
+ Novell DOS (see #01584,#01585 at INT 21/AX=4458h)
+ SHARE hooks (see #01636)
+ Swappable Data Area (SDA) (see #01687,#01690 at INT 21/AX=5D0Bh)
+ System File Table (SFT) (see #01639,#01640,#01641,#01642)
+
+Error Codes (Other)
+ AMI/Award/C&T/etc. BIOS diagnostics (POST) codes (see #P0410,#P0412)
+ Advanced Power Management [APM] (see #00473 at INT 15/AX=5300h)
+ EMS (see #03648 at INT 67/AH=40h)
+ PRINT.EXE (see #02594 at INT 2F/AX=0101h)
+ XMS (see #02775 at INT 2F/AX=4310h)
+
+Files and Directories
+ Directory Entry: MS-DOS, DR DOS, Novell DOS (see #01352)
+ file attributes (see #01401 at INT 21/AH=3Ch)
+ File Control Block (FCB) (see #01345 at INT 21/AH=0Fh)
+ File Date and Time (see #01665,#01666 at INT 21/AX=5700h)
+ file-sharing behavior (see #01403 at INT 21/AH=3Dh)
+ FindFirst data block (see #01626 at INT 21/AH=4Eh)
+ Long File Names (see INT 21/AH=71h,#01355 at INT 21/AH=11h)
+
+Keyboard
+ keyboard controller commands (see #P0386,#P0401)
+ scan codes (see #00006 at INT 09"IRQ1")
+ shift states (see #00587,#00588 at INT 16/AH=12h)
+
+Memory
+ memory size (see INT 12,INT 15/AH=88h,INT 15/AX=E820h)
+ SDRAM/DIMM configuration data (see #I0047 at I2C A0h)
+
+NetWare
+ DOS Requester entry point (see #02859 at INT 2F/AX=7A20h)
+ error codes (see #01807 at INT 21/AH=BCh,#01811,#01834 at INT 21/AH=E1h)
+ LSL status (see #02989 at INT 2F/AX=C000h"LSL")
+ NetWare Core Protocol functions (see #02095 at INT 21/AH=F2h)
+ VLM error codes (see #02860 at INT 2F/AX=7A20h)
+ VLM header (see #02862 at INT 2F/AX=7A20h)
+ VLM identifier (see #02861 at INT 2F/AX=7A20h)
+
+PCI Bus
+ PCI BIOS error codes (see #00729 at INT 1A/AX=B101h)
+ PCI configuration data (see #00878 at INT 1A/AX=B10Ah)
+ PCI vendor ID (see #00732 at INT 1A/AX=B102h)
+ PCI IRQ Routing Table (see #01259 at INT 1A/AX=B406h)
+
+Plug-and-Play
+ Plug-and-Play Installation Structure (see #F0024)
+ Plug-and-Play error codes (see #F0081)
+ Plug-and-Play device type codes (see #F0085)
+ Extended System Configuration Data (ESCD)(see #01244 at INT 1A/AX=B401h)
+ generic device IDs (see #F0086)
+
+Power Management
+ Advanced Power Management [APM] (see INT 15/AX=5300h)
+ Advanced Configuration and Power Interface [ACPI]
+ (see #M0094 at MEM xxxxh:xxx0h"ACPI")
+
+Real-Time Clock (see also CMOS.LST)
+ status registers (see #00406,#00407,#00408 at INT 15/AH=01h"Amstrad")
+
+Serial Port
+ serial port parameters (see #00300 at INT 14/AH=00h)
+ serial line status (see #00304 at INT 14/AH=03h)
+ modem status (see #00305 at INT 14/AH=03h)
+
+Sound
+ Adlib/SoundBlaster registers (see #P0645 at PORT 0388h"AdLib")
+ Gravis UltraSound
+ registers (see #P0593 at PORT 0340h"Gravis")
+ board version (see PORT 0746h"Gravis")
+ MegaEm (see INT 21/AX=FD12h,#03975 at INT 81/AX=0200h)
+ SoundBlaster SBSIM (see #03972 at INT 80"SBSIM")
+ Windows Sound System (see #P0895 at PORT 0530h"Windows Sound")
+
+Video
+ character attributes (see #00014 at INT 10/AH=08h)
+ Display Combination Code (DCC) (see #00039 at INT 10/AX=1A00h)
+ TopView/RSIS shadow buffer [virtual screen] (see INT 10/AH=FEh)
+ VESA DDC monitor information (see #00127 at INT 10/AX=4F15h/BL=01h)
+ VESA SuperVGA information (see #00077 at INT 10/AX=4F00h)
+ video modes
+ mode numbers (see #00010 at INT 10/AH=00h)
+ UltraVision modes (see #00220 at INT 10/AX=CD04h)
+ VESA modes (see #00083 at INT 10/AX=4F02h)
+ video parameters (see #01263 at INT 1D)
+
+Windows
+ Global EMM Import record (see #01515 at INT 21/AX=4402h)
+ Startup Information Structure (see #02631 at INT 2F/AX=1605h)
+ VMMCALL (see INT 20"Windows")
+ VxD identifiers (see #02642 at INT 2F/AX=1684h)
+
+Other Tables
+ AMIS signatures (see #02569,#02570 at INT 2D/AH=00h)
+ BIOS equipment list (see #00226 at INT 11)
+ BIOS32 Service Directory (see #F0021)
+ Interrupt Sharing Protocol (ISP) header (see #02568 at INT 2D)
+ Multiprocessor Specification - Floating Pointer Structure (see #M0113)
+ Option ROM header (see #F0082)
+ ROM configuration table (see #00509 at INT 15/AH=C0h)
+--------!---CONTACT_INFO---------------------
+E-mail: ralf@pobox.com (currently forwards to ralf@telerama.lm.com)
diff --git a/floppy/doc/_ADVERT.TXT b/floppy/doc/_ADVERT.TXT
new file mode 100644
index 0000000..ab95220
--- /dev/null
+++ b/floppy/doc/_ADVERT.TXT
@@ -0,0 +1,112 @@
+Warning: Blatant advertisements follow
+
+Tired of wearing out printer ribbons getting a hardcopy of the interrupt
+list? Want the list split up by subject and thoroughly indexed? Try
+
+ PC Interrupts:
+ A Programmer's Reference to BIOS, DOS, and Third-Party Calls
+ (second edition)
+ Ralf Brown and Jim Kyle
+ 1210 pages
+ Addison-Wesley
+ ISBN 0-201-62485-0
+ $39.95
+
+Corresponds to the non-networking portions of INTER36 with a few of the
+additions from INTER37.
+
+The companion book Network Interrupts corresponds to the networking
+portions of INTER37 with a few of the additions from INTER38.
+
+ Network Interrupts: A Programmer's Reference to Network APIs
+ Ralf Brown and Jim Kyle
+ 730 pages
+ Addison-Wesley 1994
+ ISBN 0-201-6644-6
+ $29.95
+
+Now (December 1994) available:
+
+ Uninterrupted Interrupts: A Programmer's CD-ROM Reference to
+ Network APIs, and to the BIOS, DOS, and Third-Party Calls
+ Ralf Brown and Jim Kyle
+ Addison-Wesley
+ ISBN 0-201-40966-6
+ $49.95
+
+CD-ROM containing the full text of both PC Interrupts (2nd ed) and
+Network Interrupts, updated to include information added through INTER42.
+
+-------
+
+PC Interrupts is now available in Chinese. I don't know the exact title
+(and couldn't reproduce it here), but it is a three-volume set which
+appears to be a straight translation of the Interrupt List, circa
+INTER26.
+
+ ISBN 957-652-272-2 (INT 00h-1Fh) 516 pages, NT$ 300
+ ISBN 957-652-271-4 (INT 20h-30h) 704 pages, NT$ 400
+ ISBN 957-652-261-7 (INT 31h-FFh) 488 pages, NT$ 280
+
+Also available in Russian.... ISBN 5-03-002989-3 (vol. 1)
+ ISBN 5-03-002990-7 (vol. 2)
+The Russian version is a translation of the first edition.
+
+-------
+
+ Undocumented DOS:
+ A Programmer's Guide to Reserved MS-DOS Functions and Data Structures
+ (second edition)
+ Andrew Schulman, Ralf Brown, David Maxey, Raymond J. Michels, and
+ Jim Kyle
+
+ 880 pages, 7-3/8" x 9-1/8"
+ Addison-Wesley
+ ISBN 0-201-63287-X
+ $44.95 (book and 1.44M disk)
+
+Includes a repackaged version of INTER36, script-based interrupt
+monitoring utility, source for a sample network redirector, discussions
+of TSRs/multitasking/networks/installable file systems/debugging,
+lots of examples, etc.
+
+Jolt Productivity Award winner, 1991 (first edition)
+
+-------
+
+Undocumented DOS (first edition) is now also available in Chinese.
+ISBN 7-302-01071-4.
+
+-------
+
+WindowBook, Inc., the folks who prepared the hypertext version for
+_Undocumented_DOS_, first edition, is tracking my releases of the
+interrupt list, and offering the WindowBook version for $39.95 ($19.95
+for updates). You can reach them at 800-524-0380 or 617-661-9515. Note
+that I have no financial interest whatsoever in WindowBook's offering,
+I'm just letting people know of value-added versions of the list.
+
+ Window Book, Inc.
+ 61 Howard Street
+ Cambridge, MA 02139
+
+-------
+
+The following books may also be of interest:
+
+ DOS Internals
+ Geoff Chappell
+ 740 pages + 1.44M disk, $39.95
+ Addison-Wesley
+ ISBN 0-201-60835-9
+
+ The Undocumented PC: A Programmer's Guide to I/O, CPUs, and
+ Fixed Memory Areas
+ Frank van Gilluwe
+ 916 pages + 1.44M disk, $44.95
+ Addison-Wesley
+ ISBN 0-201-62277-7
+
+Again, I have no financial interest in the above (though I have met both
+authors).
+
diff --git a/floppy/doc/dc0d32.blogspot.com_2010_06_real-mode-in-c-with-gcc-writing.txt b/floppy/doc/dc0d32.blogspot.com_2010_06_real-mode-in-c-with-gcc-writing.txt
new file mode 100644
index 0000000..6834acd
--- /dev/null
+++ b/floppy/doc/dc0d32.blogspot.com_2010_06_real-mode-in-c-with-gcc-writing.txt
@@ -0,0 +1,892 @@
+ #[1]dc0d32 - Atom [2]dc0d32 - RSS [3]dc0d32 - Atom
+
+[4]dc0d32
+
+Tuesday, June 15, 2010
+
+Real mode in C with gcc : writing a bootloader
+
+ Usually the x86 boot loader is written in assembler. We will be
+ exploring the possibility of writing one in C language (as much as
+ possible) compiled with gcc, and runs in real mode. Note that you can
+ also use the 16 bit bcc or TurboC compiler, but we will be focusing on
+ gcc in this post. Most open source kernels are compiled with gcc, and
+ it makes sense to write C bootloader with gcc instead of bcc as you get
+ a much cleaner toolchain :)
+ As of today (20100614), gcc 4.4.4 officially only emits code for
+ protected/long mode and does not support the real mode natively (this
+ may [5]change in future).
+ Also note that we will not discuss the very fundamentals of booting.
+ This article is fairly advanced and assumes that you know what it takes
+ to write a simple boot-loader in assembler. It is also expected that
+ you know how to write gcc inline assembly. Not everything can be done
+ in C!
+
+getting the tool-chain working
+
+.code16gcc
+
+ As we will be running in 16 bit real mode, this tells gas that the
+ assembler was generated by gcc and is intended to be run in real mode.
+ With this directive, gas automatically adds addr32 prefix wherever
+ required. For each C file which contains code to be run in real mode,
+ this directive should be present at the top of effectively generated
+ assembler code. This can be ensured by defining in a header and
+ including it before any other.
+#ifndef _CODE16GCC_H_
+#define _CODE16GCC_H_
+__asm__(".code16gcc\n");
+#endif
+
+ This is great for bootloaders as well as parts of kernel that must run
+ in real mode but are desired written in C instead of asm. In my opinion
+ C code is a lot easier to debug and maintain than asm code, at expense
+ of code size and performance at times.
+
+Special linking
+
+ As bootloader is supposed to run at physical 0x7C00, we need to tell
+ that to linker. The mbr/vbr should end with the proper boot signature
+ 0xaa55.
+ All this can be taken care of by a simple linker script.
+ENTRY(main);
+SECTIONS
+{
+ . = 0x7C00;
+ .text : AT(0x7C00)
+ {
+ _text = .;
+ *(.text);
+ _text_end = .;
+ }
+ .data :
+ {
+ _data = .;
+ *(.bss);
+ *(.bss*);
+ *(.data);
+ *(.rodata*);
+ *(COMMON)
+ _data_end = .;
+ }
+ .sig : AT(0x7DFE)
+ {
+ SHORT(0xaa55);
+ }
+ /DISCARD/ :
+ {
+ *(.note*);
+ *(.iplt*);
+ *(.igot*);
+ *(.rel*);
+ *(.comment);
+/* add any unwanted sections spewed out by your version of gcc and flags here */
+ }
+}
+
+ gcc emits elf binaries with sections, whereas a bootloader is a
+ monolithic plain binary with no sections. Conversion from elf to binary
+ can be done as follows:
+$ objcopy -O binary vbr.elf vbr.bin
+
+The code
+
+ With the toolchain set up, we can start writing our hello world
+ bootloader!
+ vbr.c (the only source file) looks something like this:
+/*
+ * A simple bootloader skeleton for x86, using gcc.
+ *
+ * Prashant Borole (boroleprashant at Google mail)
+ * */
+
+/* XXX these must be at top */
+#include "code16gcc.h"
+__asm__ ("jmpl $0, $main\n");
+
+
+#define __NOINLINE __attribute__((noinline))
+#define __REGPARM __attribute__ ((regparm(3)))
+#define __NORETURN __attribute__((noreturn))
+
+/* BIOS interrupts must be done with inline assembly */
+void __NOINLINE __REGPARM print(const char *s){
+ while(*s){
+ __asm__ __volatile__ ("int $0x10" : : "a"(0x0E00 | *s), "b"(7))
+;
+ s++;
+ }
+}
+/* and for everything else you can use C! Be it traversing the filesystem, or ve
+rifying the kernel image etc.*/
+
+void __NORETURN main(){
+ print("woo hoo!\r\n:)");
+ while(1);
+}
+
+
+ compile it as
+$ gcc -c -g -Os -march=i686 -ffreestanding -Wall -Werror -I. -o vbr.o vbr.c
+$ ld -static -Tlinker.ld -nostdlib --nmagic -o vbr.elf vbr.o
+$ objcopy -O binary vbr.elf vbr.bin
+
+ and that should have created vbr.elf file (which you can use as a
+ symbols file with gdb for source level debugging the vbr with gdbstub
+ and qemu/bochs) as well as 512 byte vbr.bin. To test it, first create a
+ dummy 1.44M floppy image, and overwrite it's mbr by vbr.bin with dd.
+$ dd if=/dev/zero of=floppy.img bs=1024 count=1440
+$ dd if=vbr.bin of=floppy.img bs=1 count=512 conv=notrunc
+
+ and now we are ready to test it out :D
+$ qemu -fda floppy.img -boot a
+
+ and you should see the message!
+ Once you get to this stage, you are pretty much set with respect to the
+ tooling itself. Now you can go ahead and write code to read the
+ filesystem, search for next stage or kernel and pass control to it.
+ Here is a simple example of a floppy boot record with no filesystem,
+ and the next stage or kernel written to the floppy immediately after
+ the boot record. The next image LMA and entry are fixed in a bunch of
+ macros. It simply reads the image starting one sector after boot record
+ and passes control to it. There are many obvious holes, which I left
+ open for sake of brevity.
+/*
+ * A simple bootloader skeleton for x86, using gcc.
+ *
+ * Prashant Borole (boroleprashant at Google mail)
+ * */
+
+/* XXX these must be at top */
+#include "code16gcc.h"
+__asm__ ("jmpl $0, $main\n");
+
+
+#define __NOINLINE __attribute__((noinline))
+#define __REGPARM __attribute__ ((regparm(3)))
+#define __PACKED __attribute__((packed))
+#define __NORETURN __attribute__((noreturn))
+
+#define IMAGE_SIZE 8192
+#define BLOCK_SIZE 512
+#define IMAGE_LMA 0x8000
+#define IMAGE_ENTRY 0x800c
+
+/* BIOS interrupts must be done with inline assembly */
+void __NOINLINE __REGPARM print(const char *s){
+ while(*s){
+ __asm__ __volatile__ ("int $0x10" : : "a"(0x0E00 | *s), "b"(7))
+;
+ s++;
+ }
+}
+
+#if 0
+/* use this for the HD/USB/Optical boot sector */
+typedef struct __PACKED TAGaddress_packet_t{
+ char size;
+ char :8;
+ unsigned short blocks;
+ unsigned short buffer_offset;
+ unsigned short buffer_segment;
+ unsigned long long lba;
+ unsigned long long flat_buffer;
+}address_packet_t ;
+
+int __REGPARM lba_read(const void *buffer, unsigned int lba, unsigned short
+blocks, unsigned char bios_drive){
+ int i;
+ unsigned short failed = 0;
+ address_packet_t packet = {.size = sizeof(address_packet_t), .blocks
+= blocks, .buffer_offset = 0xFFFF, .buffer_segment = 0xFFFF, .lba = lba, .flat_b
+uffer = (unsigned long)buffer};
+ for(i = 0; i < 3; i++){
+ packet.blocks = blocks;
+ __asm__ __volatile__ (
+ "movw $0, %0\n"
+ "int $0x13\n"
+ "setcb %0\n"
+ :"=m"(failed) : "a"(0x4200), "d"(bios_drive), "S
+"(&packet) : "cc" );
+ /* do something with the error_code */
+ if(!failed)
+ break;
+ }
+ return failed;
+}
+#else
+/* use for floppy, or as a fallback */
+typedef struct {
+ unsigned char spt;
+ unsigned char numh;
+}drive_params_t;
+
+int __REGPARM __NOINLINE get_drive_params(drive_params_t *p, unsigned char
+bios_drive){
+ unsigned short failed = 0;
+ unsigned short tmp1, tmp2;
+ __asm__ __volatile__
+ (
+ "movw $0, %0\n"
+ "int $0x13\n"
+ "setcb %0\n"
+ : "=m"(failed), "=c"(tmp1), "=d"(tmp2)
+ : "a"(0x0800), "d"(bios_drive), "D"(0)
+ : "cc", "bx"
+ );
+ if(failed)
+ return failed;
+ p->spt = tmp1 & 0x3F;
+ p->numh = tmp2 >> 8;
+ return failed;
+}
+
+int __REGPARM __NOINLINE lba_read(const void *buffer, unsigned int lba, uns
+igned char blocks, unsigned char bios_drive, drive_params_t *p){
+ unsigned char c, h, s;
+ c = lba / (p->numh * p->spt);
+ unsigned short t = lba % (p->numh * p->spt);
+ h = t / p->spt;
+ s = (t % p->spt) + 1;
+ unsigned char failed = 0;
+ unsigned char num_blocks_transferred = 0;
+ __asm__ __volatile__
+ (
+ "movw $0, %0\n"
+ "int $0x13\n"
+ "setcb %0"
+ : "=m"(failed), "=a"(num_blocks_transferred)
+ : "a"(0x0200 | blocks), "c"((s << 8) | s), "d"((h << 8) | bios_driv
+e), "b"(buffer)
+ );
+ return failed || (num_blocks_transferred != blocks);
+}
+#endif
+
+/* and for everything else you can use C! Be it traversing the filesystem, or ve
+rifying the kernel image etc.*/
+
+void __NORETURN main(){
+ unsigned char bios_drive = 0;
+ __asm__ __volatile__("movb %%dl, %0" : "=r"(bios_drive)); /* the B
+IOS drive number of the device we booted from is passed in dl register */
+
+ drive_params_t p = {};
+ get_drive_params(&p, bios_drive);
+
+ void *buff = (void*)IMAGE_LMA;
+ unsigned short num_blocks = ((IMAGE_SIZE / BLOCK_SIZE) + (IMAGE_SIZE %
+BLOCK_SIZE == 0 ? 0 : 1));
+ if(lba_read(buff, 1, num_blocks, bios_drive, &p) != 0){
+ print("read error :(\r\n");
+ while(1);
+ }
+ print("Running next image...\r\n");
+ void* e = (void*)IMAGE_ENTRY;
+ __asm__ __volatile__("" : : "d"(bios_drive));
+ goto *e;
+}
+
+
+ removing __NOINLINE may result in even smaller code in this case. I had
+ it in place so that I could figure out what was happening.
+
+Concluding remarks
+
+ C in no way matches the code size and performance of hand tuned
+ size/speed optimized assembler. Also, because of an extra byte (0x66,
+ 0x67) wasted (in addr32) with almost every instruction, it is highly
+ unlikely that you can cram up the same amount of functionality as
+ assembler.
+ Global and static variables, initialized as well as uninitialized, can
+ quickly fill those precious 446 bytes. Changing them to local and
+ passing around instead may increase or decrease size; there is no thumb
+ rule and it has to be worked out on per case basis. Same goes for
+ function in-lining.
+ You also need to be extremely careful with various gcc optimization
+ flags. For example, if you have a loop in your code whose number of
+ iterations are small and deducible at compile time, and the loop body
+ is relatively small (even 20 bytes), with default -Os, gcc will unroll
+ that loop. If the loop is not unrolled (-fno-tree-loop-optimize), you
+ might be able to shave off big chunk of bytes there. Same holds true
+ for frame setups on i386 - you may want to get rid of them whenever not
+ required using -fomit-frame-pointer. Moral of the story : you need to
+ be extra careful with gcc flags as well as version update. This is not
+ much of an issue for other real mode modules of the kernel where size
+ is not of this prime importance.
+ Also, you must be very cautious with assembler warnings when compiling
+ with .code16gcc. Truncation is common. It is a very good idea to use
+ --save-temp and analyze the assembler code generated from your C and
+ inline assembly. Always take care not to mess with the C calling
+ convention in inline assembly and meticulously check and update the
+ clobber list for inline assembly doing BIOS or APM calls (but you
+ already knew it, right?).
+ It is likely that you want to switch to protected/long mode as early as
+ possible, though. Even then, I still think that maintainability wins
+ over asm's size/speed in case of a bootloader as well as the real mode
+ portions of the kernel.
+ It would be interesting if someone could try this with
+ c++/java/fortran. Please let me know if you do!
+ at [6]June 15, 2010
+ [7]Email This[8]BlogThis![9]Share to Twitter[10]Share to
+ Facebook[11]Share to Pinterest
+ Labels: [12]assembler, [13]bootloader, [14]c, [15]gas, [16]gcc,
+ [17]kernel, [18]osdev
+
+25 comments:
+
+ 1. [19]Girija[20]Tuesday, June 15, 2010 at 6:12:00 PM GMT+5:30
+ Dokyaawarun 10 foot.. kiwwa jaastach.
+ :-|
+ Reply[21]Delete
+ Replies
+ Reply
+ 2. [22]descent[23]Tuesday, December 21, 2010 at 1:10:00 PM GMT+5:30
+ Hi,
+ Thank you for your sharing.
+ in void __NOINLINE __REGPARM print(const char *s)
+ I change the print function to access pointer,
+ like this:
+ videoram[0]='H';
+ but I got the warning message:
+ /tmp/cc5qsy9l.s:33: Warning: 00000000000b8000 shortened to
+ 0000000000008000
+ Do I miss something?
+ Reply[24]Delete
+ Replies
+ Reply
+ 3. [25]descent[26]Tuesday, December 21, 2010 at 2:05:00 PM GMT+5:30
+ Hi,
+ I use gcc-3.4 to compile again.
+ I see no warning message, but in qemu,
+ I still cannot see char H.
+ videoram is static variable.
+ static unsigned char *videoram = (unsigned char *) 0xb8000;
+ Reply[27]Delete
+ Replies
+ Reply
+ 4. [28]descent[29]Tuesday, December 21, 2010 at 3:16:00 PM GMT+5:30
+ Hi,
+ I got something. In 16bit mode, the pointer is 16bit length. So
+ 0xb8000 shortened to 0x8000.
+ I write a c file and a function,
+ void put_char()
+ {
+ unsigned char *videoram = (unsigned char *) 0xb8000;
+ videoram[0]='H';
+ videoram[2]='H';
+ videoram[40]='H';
+ }
+ no include code16gcc.h, I think the pointer is 32bits length, but I
+ still can not see the H character.
+ Reply[30]Delete
+ Replies
+ Reply
+ 5. [31]Prashant[32]Tuesday, December 21, 2010 at 7:16:00 PM GMT+5:30
+ @descent: check the '--save-temps' preserved assembler version of
+ the C function.
+ This article assumes that the reader has low level programming
+ experience with x86.
+ To access the vidmem with b8000h, you have 2 options:
+ 1. write inline assembly to set es to b800h, and di to the address
+ in the real mode segment. Then write byte/word to es:di.
+ 2. Enter unreal mode. Then you can use the full 4G memory,
+ one-to-one mapped.
+ I personally would not recommend any of these methods for printing
+ - BIOS int 10h is pretty good. Remember - do not try and do
+ anything fancy in the (m/v)br; do it in the next stage instead as
+ you have pretty much unconstrained image size in later stages.
+ Reply[33]Delete
+ Replies
+ Reply
+ 6. [34]descent[35]Wednesday, December 22, 2010 at 9:41:00 AM GMT+5:30
+ Hi Prashant,
+ Thank you for your explanation.
+ Because in protected mode, I can use C,
+ and direct access 0xb8000, so I am confused.
+ real/protect mode, gcc/gas 16/32 bit also confuse me.
+ They are very complicate.
+ Reply[36]Delete
+ Replies
+ Reply
+ 7. [37]Sebastian[38]Saturday, March 12, 2011 at 6:26:00 PM GMT+5:30
+ you are a genius!
+ Reply[39]Delete
+ Replies
+ Reply
+ 8. [40]Unknown[41]Sunday, April 17, 2011 at 5:48:00 AM GMT+5:30
+ I've got that infamous runtime error...
+ bootloader.exe has encountered a problem and needs to close. We are
+ sorry for the inconvenience.
+ Reply[42]Delete
+ Replies
+ Reply
+ 9. [43]Unknown[44]Saturday, May 21, 2011 at 2:39:00 AM GMT+5:30
+ Managed to do it in C++.
+ Code is the same.
+ Linker file needs to discard eh_frame.
+ When building on x86-64 add -m32 to g++ and -melf_i386 on ld
+ command line.
+ Trying to rewrite it in a more c++-ish style.
+ My e-mail is boskovits@cogito-top.hu .
+ Reply[45]Delete
+ Replies
+ Reply
+ 10. [46]Prashant[47]Saturday, May 21, 2011 at 3:02:00 AM GMT+5:30
+ @abraker95: are you trying to run the MZ/PE image in windows? that
+ is like sinning and then spitting on the devil when in hell.
+ @boskov1985: cool man! let us know how it goes :D
+ Reply[48]Delete
+ Replies
+ Reply
+ 11. Anonymous[49]Friday, November 25, 2011 at 2:50:00 AM GMT+5:30
+ It's easier to to this without objcopy. Modern ld versions support
+ --oformat=binary , so just one line does the direct compilation
+ job.
+ gcc -g -Os -march=i686 -ffreestanding -Wall -Werror -I. -static
+ -nostdlib -Wl,-Tlinker.ld -Wl,--nmagic -Wl,--oformat=binary -o
+ loader.bin loader.c
+ Reply[50]Delete
+ Replies
+ Reply
+ 12. [51]Prashant[52]Friday, November 25, 2011 at 8:01:00 AM GMT+5:30
+ I can't verify right now whether it works, but thanks for letting
+ us know, rpfh!
+ Reply[53]Delete
+ Replies
+ Reply
+ 13. [54]descent[55]Sunday, December 4, 2011 at 9:42:00 PM GMT+5:30
+ Hi,
+ The c code uses function call, why need not set stack (ss:esp)?
+ Reply[56]Delete
+ Replies
+ Reply
+ 14. [57]Prashant[58]Tuesday, December 6, 2011 at 10:18:00 AM GMT+5:30
+ good point @decent. I guess you will need to set up the stack first
+ in main, probably in assembler.
+ Reply[59]Delete
+ Replies
+ Reply
+ 15. [60]descent[61]Saturday, December 24, 2011 at 8:02:00 PM GMT+5:30
+ I change %ss:%esp to 0x07a0:0000,
+ Is any side effect?
+ void __NORETURN main(){
+ __asm__ ("mov %cs, %ax\n");
+ __asm__ ("mov %ax, %ds\n");
+ __asm__ ("mov $0x07a0, %ax\n");
+ __asm__ ("mov %ax, %ss\n");
+ __asm__ ("mov $0, %esp\n");
+ print("woo hoo!\r\n:)");
+ while(1);
+ }
+ Reply[62]Delete
+ Replies
+ Reply
+ 16. [63]descent[64]Monday, July 30, 2012 at 8:16:00 AM GMT+5:30
+ Hi,
+ I test c bootloader in real machine, in my eeepc 904, need add some
+ code to setup stack.
+ http://descent-incoming.blogspot.tw/2012/05/x86-bootloader-hello-wo
+ rld.html
+ The article is written by Chinese, but the code, picture can give
+ some reference.
+ cppb.cpp is cpp version (compile by g++), it can work, I test it in
+ real machine(eeepc 904).
+ Reply[65]Delete
+ Replies
+ Reply
+ 17. [66]axiomfinity[67]Saturday, April 20, 2013 at 10:46:00 AM GMT+5:30
+ linker fails whats up with it..?
+ Reply[68]Delete
+ Replies
+ Reply
+ 18. [69]Prashant[70]Sunday, April 21, 2013 at 9:34:00 AM GMT+5:30
+ Fails how? Can you please elaborate?
+ Reply[71]Delete
+ Replies
+ Reply
+ 19. [72]Unknown[73]Wednesday, November 13, 2013 at 12:51:00 PM GMT+5:30
+ Thank you for detaile explanation
+ Linker failed nt sure why..ld: error: load segment overlap [0x7c00
+ -> 0x7e50] and [0x7dfe -> 0x7e00]
+ Reply[74]Delete
+ Replies
+ Reply
+ 20. [75]osdev[76]Saturday, May 31, 2014 at 1:35:00 AM GMT+5:30
+ someone here? I need to test, but...
+ "c"((s << 8) | s) <-- duplicate s in CH and CL?
+ c = lba / (p->numh * p->spt); <-- 'c' is never used...
+ maybe -> "c"((c << 8) | s)
+ Reply[77]Delete
+ Replies
+ Reply
+ 21. [78]Unknown[79]Thursday, February 5, 2015 at 8:39:00 PM GMT+5:30
+ Thank you for your nice post! I'm trying to run it on my x86-64
+ linux box, but gcc reports errors like "bad register name rax", I'm
+ a little confused by the various compiler options here, could you
+ please give me suggestions on how to compile the C source file on
+ x86-64 machines? Thanks
+ Reply[80]Delete
+ Replies
+ 1. [81]Jose Fernando Lopez Fernandez[82]Friday, January 20, 2017
+ at 2:56:00 PM GMT+5:30
+ rax is a 64 bit register. A bootloader is running in 16 bits,
+ so you cannot use rax (64 bit) or eax (32 bit). You have to
+ use ax.
+ Also, you said your computer is an x86-64. Which one is it?
+ x86 (32 bit) or 64 (64 bit)? If you have an x86, it will have
+ no idea what rax is, since it has no knowledge of 64 bit
+ registers.
+ I'm just speculating as to your problem here, though. If
+ anything here is incorrect/misguided by all means let me know,
+ I'm only a beginner too
+ [83]Delete
+ Replies
+ Reply
+ 2. [84]Jose Fernando Lopez Fernandez[85]Friday, January 20, 2017
+ at 2:57:00 PM GMT+5:30
+ @Jing Peng
+ rax is a 64 bit register. A bootloader is running in 16 bits,
+ so you cannot use rax (64 bit) or eax (32 bit). You have to
+ use ax.
+ Also, you said your computer is an x86-64. Which one is it?
+ x86 (32 bit) or 64 (64 bit)? If you have an x86, it will have
+ no idea what rax is, since it has no knowledge of 64 bit
+ registers.
+ I'm just speculating as to your problem here, though. If
+ anything here is incorrect/misguided by all means let me know,
+ I'm only a beginner too
+ [86]Delete
+ Replies
+ Reply
+ Reply
+ 22. [87]Unknown[88]Thursday, February 5, 2015 at 8:40:00 PM GMT+5:30
+ Thank you for your nice post! I'm trying to run it on my x86-64
+ linux box, but gcc reports errors like "bad register name rax", I'm
+ a little confused by the various compiler options here, could you
+ please give me suggestions on how to compile the C source file on
+ x86-64 machines? Thanks
+ Reply[89]Delete
+ Replies
+ Reply
+ 23. [90]Unknown[91]Sunday, February 7, 2016 at 8:43:00 PM GMT+5:30
+ hello i ma atif
+ Reply[92]Delete
+ Replies
+ Reply
+
+ Add comment
+ Load more...
+
+ [93]Newer Post [94]Older Post [95]Home
+ Subscribe to: [96]Post Comments (Atom)
+ * [97]Real mode in C with gcc : writing a bootloader
+ Usually the x86 boot loader is written in assembler. We will be
+ exploring the possibility of writing one in C language (as much as
+ possible)...
+ * [98]Writing kernel in Windows with Visual Studio C/C++
+ Most hobby osdev projects prefer *nix+gcc combination these days,
+ primarily because there are a bunch of nice tutorials and examples
+ availab...
+ * [99]Debugging kernel with qemu and gdb
+ Assuming that you have your (or Linux/*BSD/Solaris/Windows or any
+ other) kernel on a bootable device, you can debug the kernel and
+ also the ...
+
+Blog Archive
+
+ * [100]|> [101]2012 (1)
+ + [102]|> [103]Feb 2012 (1)
+
+ * [104]v [105]2010 (7)
+ + [106]v [107]Jun 2010 (2)
+ o [108]Cold boot attack
+ o [109]Real mode in C with gcc : writing a bootloader
+ + [110]|> [111]May 2010 (2)
+ + [112]|> [113]Apr 2010 (1)
+ + [114]|> [115]Mar 2010 (1)
+ + [116]|> [117]Feb 2010 (1)
+
+ * [118]|> [119]2009 (12)
+ + [120]|> [121]Dec 2009 (1)
+ + [122]|> [123]Nov 2009 (2)
+ + [124]|> [125]Sep 2009 (1)
+ + [126]|> [127]Aug 2009 (1)
+ + [128]|> [129]Jul 2009 (2)
+ + [130]|> [131]Feb 2009 (2)
+ + [132]|> [133]Jan 2009 (3)
+
+ * [134]|> [135]2008 (9)
+ + [136]|> [137]Nov 2008 (2)
+ + [138]|> [139]Oct 2008 (3)
+ + [140]|> [141]Aug 2008 (1)
+ + [142]|> [143]Jun 2008 (3)
+
+Labels
+
+ [144]linux [145]kernel [146]8800 [147]FreeBSD [148]gdb [149]nvidia
+ [150]osdev [151]windows 7 [152]bochs [153]boot [154]bootloader
+ [155]debug [156]dual boot [157]gas [158]gcc [159]overclock [160]pidgin
+ [161]windows [162]windows server 2008 [163]2k8 [164]3DMark [165]3DMark
+ vantage [166]820 [167]DRAM [168]Directx 10 [169]Dirext 11 [170]Java
+ [171]OpenJDK [172]OpenOffice [173]Pentium D [174]RAID [175]Sun
+ [176]UUID [177]Unicode [178]VirtualBox [179]X [180]Xorg [181]ageis
+ [182]assembler [183]authentication [184]bash [185]c [186]coolbits
+ [187]dx10 [188]fedora [189]fortune [190]gdm [191]ghostscript [192]gnome
+ [193]google [194]gs [195]gtalk [196]heat sink [197]invisible
+ [198]jabber [199]kde [200]latex [201]lvm [202]lyx [203]mount
+ [204]networked audio [205]networked sound [206]nvclock [207]oolatex
+ [208]ooolatex [209]perl [210]phonon [211]physics [212]physx [213]picasa
+ [214]plugin [215]proxy [216]pulseaudio [217]qemu [218]rsync [219]rtp
+ [220]scp [221]scp stdin [222]security [223]server [224]shell [225]squid
+ [226]ssh [227]sync [228]tar [229]udev [230]unix [231]xdm [232]xfce
+ [233]xmpp [234]xorg.conf [235]zsh
+ [236]visit counter for blogspot
+
+ Theme images by [237]5ugarless. Powered by [238]Blogger.
+
+References
+
+ Visible links:
+ 1. http://dc0d32.blogspot.com/feeds/posts/default
+ 2. http://dc0d32.blogspot.com/feeds/posts/default?alt=rss
+ 3. http://dc0d32.blogspot.com/feeds/6370208028763486595/comments/default
+ 4. http://dc0d32.blogspot.com/
+ 5. http://gcc.gnu.org/ml/gcc/1999-07n/msg00483.html
+ 6. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html
+ 7. https://www.blogger.com/share-post.g?blogID=35813921&postID=6370208028763486595&target=email
+ 8. https://www.blogger.com/share-post.g?blogID=35813921&postID=6370208028763486595&target=blog
+ 9. https://www.blogger.com/share-post.g?blogID=35813921&postID=6370208028763486595&target=twitter
+ 10. https://www.blogger.com/share-post.g?blogID=35813921&postID=6370208028763486595&target=facebook
+ 11. https://www.blogger.com/share-post.g?blogID=35813921&postID=6370208028763486595&target=pinterest
+ 12. http://dc0d32.blogspot.com/search/label/assembler
+ 13. http://dc0d32.blogspot.com/search/label/bootloader
+ 14. http://dc0d32.blogspot.com/search/label/c
+ 15. http://dc0d32.blogspot.com/search/label/gas
+ 16. http://dc0d32.blogspot.com/search/label/gcc
+ 17. http://dc0d32.blogspot.com/search/label/kernel
+ 18. http://dc0d32.blogspot.com/search/label/osdev
+ 19. https://www.blogger.com/profile/06904019980664523275
+ 20. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1276605767623#c7537756629084768590
+ 21. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=7537756629084768590
+ 22. https://www.blogger.com/profile/17992312956580227764
+ 23. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1292917257855#c7916645211913421716
+ 24. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=7916645211913421716
+ 25. https://www.blogger.com/profile/17992312956580227764
+ 26. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1292920505936#c6914976194912758237
+ 27. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=6914976194912758237
+ 28. https://www.blogger.com/profile/17992312956580227764
+ 29. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1292924802000#c3509490007866551116
+ 30. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=3509490007866551116
+ 31. https://www.blogger.com/profile/15716533043357974705
+ 32. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1292939196737#c8552773997968662641
+ 33. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=8552773997968662641
+ 34. https://www.blogger.com/profile/17992312956580227764
+ 35. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1292991102048#c3691472389082213083
+ 36. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=3691472389082213083
+ 37. https://www.blogger.com/profile/04546527990311411722
+ 38. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1299934567958#c8861407369344586215
+ 39. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=8861407369344586215
+ 40. https://www.blogger.com/profile/13931402888317484377
+ 41. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1302999537204#c1796379189090357880
+ 42. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=1796379189090357880
+ 43. https://www.blogger.com/profile/10664008816666619973
+ 44. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1305925792707#c309698377277262219
+ 45. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=309698377277262219
+ 46. https://www.blogger.com/profile/15716533043357974705
+ 47. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1305927124224#c7619831240140737017
+ 48. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=7619831240140737017
+ 49. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1322169605658#c1693276418345545837
+ 50. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=1693276418345545837
+ 51. https://www.blogger.com/profile/15716533043357974705
+ 52. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1322188282688#c6259496576598783959
+ 53. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=6259496576598783959
+ 54. https://www.blogger.com/profile/17992312956580227764
+ 55. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1323015134989#c3945832952459710949
+ 56. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=3945832952459710949
+ 57. https://www.blogger.com/profile/15716533043357974705
+ 58. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1323146939454#c2066813635755540091
+ 59. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=2066813635755540091
+ 60. https://www.blogger.com/profile/17992312956580227764
+ 61. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1324737140263#c7908397772486068687
+ 62. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=7908397772486068687
+ 63. https://www.blogger.com/profile/17992312956580227764
+ 64. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1343616406999#c8117194716929362278
+ 65. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=8117194716929362278
+ 66. https://www.blogger.com/profile/00410755183408310829
+ 67. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1366435009449#c1258130037332531147
+ 68. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=1258130037332531147
+ 69. https://www.blogger.com/profile/15716533043357974705
+ 70. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1366517094365#c8123329091843779139
+ 71. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=8123329091843779139
+ 72. https://www.blogger.com/profile/17234059656421576642
+ 73. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1384327289704#c4134298820836763034
+ 74. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=4134298820836763034
+ 75. https://www.blogger.com/profile/16683260877229099988
+ 76. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1401480336214#c455729903293178418
+ 77. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=455729903293178418
+ 78. https://www.blogger.com/profile/07765096042053323038
+ 79. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1423148995473#c7126019925062815723
+ 80. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=7126019925062815723
+ 81. https://www.blogger.com/profile/01833111909520604012
+ 82. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1484904386672#c7038618115198897417
+ 83. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=7038618115198897417
+ 84. https://www.blogger.com/profile/01833111909520604012
+ 85. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1484904424918#c1284220459583274955
+ 86. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=1284220459583274955
+ 87. https://www.blogger.com/profile/07765096042053323038
+ 88. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1423149010339#c2287827836063649127
+ 89. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=2287827836063649127
+ 90. https://www.blogger.com/profile/17596900636592437710
+ 91. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html?showComment=1454858010555#c4198004625201390279
+ 92. https://www.blogger.com/delete-comment.g?blogID=35813921&postID=4198004625201390279
+ 93. http://dc0d32.blogspot.com/2010/06/cold-boot-attack.html
+ 94. http://dc0d32.blogspot.com/2010/05/how-not-to-look-like-fool-on-facebook.html
+ 95. http://dc0d32.blogspot.com/
+ 96. http://dc0d32.blogspot.com/feeds/6370208028763486595/comments/default
+ 97. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html
+ 98. http://dc0d32.blogspot.com/2012/02/writing-kernel-in-windows-with-visual.html
+ 99. http://dc0d32.blogspot.com/2010/03/debugging-kernel-with-qemu-and-gdb.html
+ 100. javascript:void(0)
+ 101. http://dc0d32.blogspot.com/2012/
+ 102. javascript:void(0)
+ 103. http://dc0d32.blogspot.com/2012/02/
+ 104. javascript:void(0)
+ 105. http://dc0d32.blogspot.com/2010/
+ 106. javascript:void(0)
+ 107. http://dc0d32.blogspot.com/2010/06/
+ 108. http://dc0d32.blogspot.com/2010/06/cold-boot-attack.html
+ 109. http://dc0d32.blogspot.com/2010/06/real-mode-in-c-with-gcc-writing.html
+ 110. javascript:void(0)
+ 111. http://dc0d32.blogspot.com/2010/05/
+ 112. javascript:void(0)
+ 113. http://dc0d32.blogspot.com/2010/04/
+ 114. javascript:void(0)
+ 115. http://dc0d32.blogspot.com/2010/03/
+ 116. javascript:void(0)
+ 117. http://dc0d32.blogspot.com/2010/02/
+ 118. javascript:void(0)
+ 119. http://dc0d32.blogspot.com/2009/
+ 120. javascript:void(0)
+ 121. http://dc0d32.blogspot.com/2009/12/
+ 122. javascript:void(0)
+ 123. http://dc0d32.blogspot.com/2009/11/
+ 124. javascript:void(0)
+ 125. http://dc0d32.blogspot.com/2009/09/
+ 126. javascript:void(0)
+ 127. http://dc0d32.blogspot.com/2009/08/
+ 128. javascript:void(0)
+ 129. http://dc0d32.blogspot.com/2009/07/
+ 130. javascript:void(0)
+ 131. http://dc0d32.blogspot.com/2009/02/
+ 132. javascript:void(0)
+ 133. http://dc0d32.blogspot.com/2009/01/
+ 134. javascript:void(0)
+ 135. http://dc0d32.blogspot.com/2008/
+ 136. javascript:void(0)
+ 137. http://dc0d32.blogspot.com/2008/11/
+ 138. javascript:void(0)
+ 139. http://dc0d32.blogspot.com/2008/10/
+ 140. javascript:void(0)
+ 141. http://dc0d32.blogspot.com/2008/08/
+ 142. javascript:void(0)
+ 143. http://dc0d32.blogspot.com/2008/06/
+ 144. http://dc0d32.blogspot.com/search/label/linux
+ 145. http://dc0d32.blogspot.com/search/label/kernel
+ 146. http://dc0d32.blogspot.com/search/label/8800
+ 147. http://dc0d32.blogspot.com/search/label/FreeBSD
+ 148. http://dc0d32.blogspot.com/search/label/gdb
+ 149. http://dc0d32.blogspot.com/search/label/nvidia
+ 150. http://dc0d32.blogspot.com/search/label/osdev
+ 151. http://dc0d32.blogspot.com/search/label/windows%207
+ 152. http://dc0d32.blogspot.com/search/label/bochs
+ 153. http://dc0d32.blogspot.com/search/label/boot
+ 154. http://dc0d32.blogspot.com/search/label/bootloader
+ 155. http://dc0d32.blogspot.com/search/label/debug
+ 156. http://dc0d32.blogspot.com/search/label/dual%20boot
+ 157. http://dc0d32.blogspot.com/search/label/gas
+ 158. http://dc0d32.blogspot.com/search/label/gcc
+ 159. http://dc0d32.blogspot.com/search/label/overclock
+ 160. http://dc0d32.blogspot.com/search/label/pidgin
+ 161. http://dc0d32.blogspot.com/search/label/windows
+ 162. http://dc0d32.blogspot.com/search/label/windows%20server%202008
+ 163. http://dc0d32.blogspot.com/search/label/2k8
+ 164. http://dc0d32.blogspot.com/search/label/3DMark
+ 165. http://dc0d32.blogspot.com/search/label/3DMark%20vantage
+ 166. http://dc0d32.blogspot.com/search/label/820
+ 167. http://dc0d32.blogspot.com/search/label/DRAM
+ 168. http://dc0d32.blogspot.com/search/label/Directx%2010
+ 169. http://dc0d32.blogspot.com/search/label/Dirext%2011
+ 170. http://dc0d32.blogspot.com/search/label/Java
+ 171. http://dc0d32.blogspot.com/search/label/OpenJDK
+ 172. http://dc0d32.blogspot.com/search/label/OpenOffice
+ 173. http://dc0d32.blogspot.com/search/label/Pentium%20D
+ 174. http://dc0d32.blogspot.com/search/label/RAID
+ 175. http://dc0d32.blogspot.com/search/label/Sun
+ 176. http://dc0d32.blogspot.com/search/label/UUID
+ 177. http://dc0d32.blogspot.com/search/label/Unicode
+ 178. http://dc0d32.blogspot.com/search/label/VirtualBox
+ 179. http://dc0d32.blogspot.com/search/label/X
+ 180. http://dc0d32.blogspot.com/search/label/Xorg
+ 181. http://dc0d32.blogspot.com/search/label/ageis
+ 182. http://dc0d32.blogspot.com/search/label/assembler
+ 183. http://dc0d32.blogspot.com/search/label/authentication
+ 184. http://dc0d32.blogspot.com/search/label/bash
+ 185. http://dc0d32.blogspot.com/search/label/c
+ 186. http://dc0d32.blogspot.com/search/label/coolbits
+ 187. http://dc0d32.blogspot.com/search/label/dx10
+ 188. http://dc0d32.blogspot.com/search/label/fedora
+ 189. http://dc0d32.blogspot.com/search/label/fortune
+ 190. http://dc0d32.blogspot.com/search/label/gdm
+ 191. http://dc0d32.blogspot.com/search/label/ghostscript
+ 192. http://dc0d32.blogspot.com/search/label/gnome
+ 193. http://dc0d32.blogspot.com/search/label/google
+ 194. http://dc0d32.blogspot.com/search/label/gs
+ 195. http://dc0d32.blogspot.com/search/label/gtalk
+ 196. http://dc0d32.blogspot.com/search/label/heat%20sink
+ 197. http://dc0d32.blogspot.com/search/label/invisible
+ 198. http://dc0d32.blogspot.com/search/label/jabber
+ 199. http://dc0d32.blogspot.com/search/label/kde
+ 200. http://dc0d32.blogspot.com/search/label/latex
+ 201. http://dc0d32.blogspot.com/search/label/lvm
+ 202. http://dc0d32.blogspot.com/search/label/lyx
+ 203. http://dc0d32.blogspot.com/search/label/mount
+ 204. http://dc0d32.blogspot.com/search/label/networked%20audio
+ 205. http://dc0d32.blogspot.com/search/label/networked%20sound
+ 206. http://dc0d32.blogspot.com/search/label/nvclock
+ 207. http://dc0d32.blogspot.com/search/label/oolatex
+ 208. http://dc0d32.blogspot.com/search/label/ooolatex
+ 209. http://dc0d32.blogspot.com/search/label/perl
+ 210. http://dc0d32.blogspot.com/search/label/phonon
+ 211. http://dc0d32.blogspot.com/search/label/physics
+ 212. http://dc0d32.blogspot.com/search/label/physx
+ 213. http://dc0d32.blogspot.com/search/label/picasa
+ 214. http://dc0d32.blogspot.com/search/label/plugin
+ 215. http://dc0d32.blogspot.com/search/label/proxy
+ 216. http://dc0d32.blogspot.com/search/label/pulseaudio
+ 217. http://dc0d32.blogspot.com/search/label/qemu
+ 218. http://dc0d32.blogspot.com/search/label/rsync
+ 219. http://dc0d32.blogspot.com/search/label/rtp
+ 220. http://dc0d32.blogspot.com/search/label/scp
+ 221. http://dc0d32.blogspot.com/search/label/scp%20stdin
+ 222. http://dc0d32.blogspot.com/search/label/security
+ 223. http://dc0d32.blogspot.com/search/label/server
+ 224. http://dc0d32.blogspot.com/search/label/shell
+ 225. http://dc0d32.blogspot.com/search/label/squid
+ 226. http://dc0d32.blogspot.com/search/label/ssh
+ 227. http://dc0d32.blogspot.com/search/label/sync
+ 228. http://dc0d32.blogspot.com/search/label/tar
+ 229. http://dc0d32.blogspot.com/search/label/udev
+ 230. http://dc0d32.blogspot.com/search/label/unix
+ 231. http://dc0d32.blogspot.com/search/label/xdm
+ 232. http://dc0d32.blogspot.com/search/label/xfce
+ 233. http://dc0d32.blogspot.com/search/label/xmpp
+ 234. http://dc0d32.blogspot.com/search/label/xorg.conf
+ 235. http://dc0d32.blogspot.com/search/label/zsh
+ 236. http://www.statcounter.com/blogger/
+ 237. http://www.istockphoto.com/portfolio/5ugarless?platform=blogger
+ 238. https://www.blogger.com/
+
+ Hidden links:
+ 240. https://www.blogger.com/post-edit.g?blogID=35813921&postID=6370208028763486595&from=pencil
+ 241. https://www.blogger.com/comment/frame/35813921?po=6370208028763486595&hl=en
diff --git a/floppy/doc/github.com_yeokm1_gentoo-on-486.txt b/floppy/doc/github.com_yeokm1_gentoo-on-486.txt
new file mode 100644
index 0000000..b477703
--- /dev/null
+++ b/floppy/doc/github.com_yeokm1_gentoo-on-486.txt
@@ -0,0 +1,1114 @@
+ #[1]GitHub
+
+ [2]Skip to content
+
+ [3]Sign up (BUTTON)
+ (BUTTON)
+
+ * Product
+ + [4]Features
+ + [5]Mobile
+ + [6]Actions
+ + [7]Codespaces
+ + [8]Copilot
+ + [9]Packages
+ + [10]Security
+ + [11]Code review
+ + [12]Issues
+ + [13]Integrations
+ + [14]GitHub Sponsors
+ + [15]Customer stories
+ * [16]Team
+ * [17]Enterprise
+ * Explore
+ + [18]Explore GitHub
+ + Learn and contribute
+ + [19]Topics
+ + [20]Collections
+ + [21]Trending
+ + [22]Skills
+ + [23]GitHub Sponsors
+ + [24]Open source guides
+ + Connect with others
+ + [25]The ReadME Project
+ + [26]Events
+ + [27]Community forum
+ + [28]GitHub Education
+ + [29]GitHub Stars program
+ * [30]Marketplace
+ * Pricing
+ + [31]Plans
+ + [32]Compare plans
+ + [33]Contact Sales
+ + [34]Education
+
+ ____________________
+ * In this repository All GitHub RET
+ Jump to RET
+
+ * No suggested jump to results
+
+ * In this repository All GitHub RET
+ Jump to RET
+ * In this user All GitHub RET
+ Jump to RET
+ * In this repository All GitHub RET
+ Jump to RET
+
+ [35]Sign in
+ [36]Sign up
+
+ (BUTTON)
+ {{ message }}
+
+ [37]yeokm1 / [38]gentoo-on-486 Public
+ * [39]Notifications
+ * [40]Fork 6
+ * [41]Star 57 (BUTTON)
+
+ Instructions on how to install modern Gentoo Linux on ancient 486-based
+ PCs.
+ [42]yeokhengmeng.com/2018/01/make-the-486-great-again/
+
+License
+
+ [43]MIT license
+ [44]57 stars [45]6 forks
+ [46]Star (BUTTON)
+ [47]Notifications
+
+ * [48]Code
+ * [49]Issues 1
+ * [50]Pull requests 0
+ * [51]Actions
+ * [52]Projects 0
+ * [53]Wiki
+ * [54]Security
+ * [55]Insights
+
+ More
+ * [56]Code
+ * [57]Issues
+ * [58]Pull requests
+ * [59]Actions
+ * [60]Projects
+ * [61]Wiki
+ * [62]Security
+ * [63]Insights
+
+yeokm1/gentoo-on-486
+
+ This commit does not belong to any branch on this repository, and may
+ belong to a fork outside of the repository.
+ master
+
+ Switch branches/tags (BUTTON)
+ ____________________
+ (BUTTON) Branches (BUTTON) Tags
+ Could not load branches
+ Nothing to show
+ [64]{{ refName }} default
+
+ [65]View all branches
+ Could not load tags
+ Nothing to show
+ [66]{{ refName }} default
+
+ [67]View all tags
+ [68]1 branch [69]0 tags
+ Code
+
+Latest commit
+
+
+Git stats
+
+ * [70]12 commits
+
+Files
+
+ [71]Permalink
+ Failed to load latest commit information.
+ Type
+ Name
+ Latest commit message
+ Commit time
+ [72]images
+
+
+ [73].config
+
+
+ [74]LICENSE
+
+
+ [75]README.md
+
+
+ [76]gentoo-on-486-presentation.pptx
+
+
+ (BUTTON) View code
+ ____________________
+ [77]gentoo-on-486 [78]The Hardware [79]Deployment machine : IBM PS/1
+ Consultant 2133 19C (released in 1993) [80]Compilation machine:
+ Thinkpad T430 (released in 2012) [81](Optional) Machine to issue SSH
+ commands to compilation machine [82]Instructions [83]1. Preparing the
+ install media/disks [84]2. Networking and SSH [85]3. Preparing the
+ disks [86]4. Installing stage3 [87]5. Installing base system [88]Read
+ the news [89]Set system profile [90]Configure timezone [91]Configure
+ locale [92]6. Configuring the kernel [93]Find out system specs [94]Just
+ take the latest stable kernel [95]Download a particular kernel version
+ [96]Kernel options [97]64-bit Kernel [98]Processor type and features:
+ [99]Bus Options [100]Device Drivers [101]File Systems [102]Backup
+ kernel configuration [103]Compiling the kernel [104]7. Configuring the
+ system [105]Configuring /etc/fstab [106]Set hostname [107]Network info
+ [108]System config [109]8. Installing tools [110]Required installs
+ [111]Correct syslog issues [112]Optional installs [113]9. Configuring
+ the bootloader [114]Install Bootloader [115]Configure LILO [116]10.
+ Finalising install [117]Create non-root user [118]Unmount and
+ reboot/poweroff system [119]11. Boot on i486 [120]Change preferred
+ Python version [121]Update time [122]Sound test [123]Configure Web
+ Server [124]Bonus step:
+
+[125]README.md
+
+gentoo-on-486
+
+ Instructions on how to install modern Gentoo Linux on ancient 486-based
+ PCs. This is for a command-line install only.
+
+ As Gentoo is a source-based distribution, we have to compile every
+ package we install from scratch including the kernel and bootloader.
+
+ This is too time-consuming to do on the 486 PC so I use a modern
+ machine to do the compilation then move the disk over to the ancient
+ PC.
+
+ I have written a [126]companion blog post that explains the motivations
+ and less-technical details.
+
+The Hardware
+
+Deployment machine : [127]IBM PS/1 Consultant 2133 19C (released in 1993)
+
+ [128]Screen
+ * AMD 5X86 486-clone running at 133mhz (similar performance to
+ Pentium 75Mhz)
+ * Cirrus Logic VLB CL-GD5424 Graphics 512KiB VRAM
+ * 64MB SDRAM
+ * 48x IDE CD ROM Drive
+ * [129]Gotek 1.44MB floppy emulator
+ * CompactFlash-IDE adapter + 32GB Sandisk Extreme CF card
+ * 10Mbps 3Com Etherlink III [130]3c509B (ISA)
+ * [131]Sound Blaster 16 CT2950 PnP (ISA) Unfortunately, this card
+ uses [132]CQM.
+ * 1x Parallel Port
+ * 2x Serial Port
+ * 1x VGA port
+
+Compilation machine: [133]Thinkpad T430 (released in 2012)
+
+ [134]Screen
+ * Intel Core i7-3520M (3.50 GHz, 4MB L3, 1333MHz FSB)
+ * Intel HD Graphics 4000
+ * 16GB DDR3 - 1600MHz
+ * Gigabit Ethernet
+ * Ultrabay DVD-RW
+ * 2x USB 3.0, 2x USB 2.0
+ * USB-CF adapter to compile on CF card
+ * SSD removed to avoid corrupting it by accident during install
+
+(Optional) Machine to issue SSH commands to compilation machine
+
+ This can be any machine capable of SSH. This will be explained later.
+
+Instructions
+
+ I heavily reference official [135]Gentoo Wiki x86 handbook with some
+ tweaks to suit the 486 as well as ease of repeated builds. Please note
+ that my instructions are a compliment and are not a replacement to the
+ official guide.
+
+1. Preparing the install media/disks
+
+ [136]Gentoo Wiki: Choosing the media
+
+ I use a CompactFlash card as my hard disk for my 486 PC to make it easy
+ to transfer the image back and forth between it and the compilation PC.
+
+ Download the x86 Minimal Installation CD ISO image from [137]official
+ download page. You can burn the ISO image to CD or to a USB flash drive
+ but I opt for the former for simplicity.
+
+ Once you are done, boot from the install media using your modern
+ compilation machine. You might have to adjust your BIOS settings to do
+ so.
+
+2. Networking and SSH
+
+ [138]Gentoo Wiki: Configuring the network
+
+ The official guide included quite a bit of information on setting
+ things up.
+
+ For my case, I used a wired LAN with DHCP and everything just worked on
+ boot. If you need a special configuration, consult that guide.
+
+ I highly recommend that you turn on SSH at this point so you can
+ copy-paste the commands to run instead of manually typing in the
+ commands. You can even do additional configuration while the packages
+ are compiling.
+passwd root
+New Password: blahblah
+Again: blahblah
+
+/etc/init.d/sshd start
+ifconfig
+
+ Use the third machine and ssh root@X.X.X.X
+
+3. Preparing the disks
+
+ [139]Gentoo Wiki: Preparing the disks
+
+ The guide suggests 4 partitions with the first one being for the BIOS
+ boot partition for EFI systems. Since our 486 obviously predates EFI, I
+ opt to ignore that and use the following layout instead.
+ Partition Filesystem Size Description
+ /dev/sda1 ext2 128M Boot
+ /dev/sda2 (swap) 2048M Swap
+ /dev/sda3 ext4 Rest of disk Root
+
+ Just a note, ancient PCs have a [140]504MiB barrier. This means that
+ the boot partition should reside entirely within this limit to be
+ bootable. Once Linux is started, it can recognise the entire disk.
+
+ I created my partitions using the fdisk tool. Note for the swap
+ partition, you have to set the partition type. Type t to set the
+ partition type, 2 to select the partition just created and then type in
+ 82 to set the partition type to "Linux Swap".
+
+ Once done, format the partitions:
+mkfs.ext2 /dev/sda1
+mkswap /dev/sda2
+swapon /dev/sda2
+mkfs.ext4 /dev/sda3
+
+mount /dev/sda3 /mnt/gentoo
+
+4. Installing stage3
+
+ [141]Gentoo Wiki: Installing Stage 3
+
+ stage3 contains almost all the files to create a bare minimum system.
+date
+# If date is wrong, use ntpd to update your PC's clock.
+ntpd -q -g
+
+ Download the latest i486 stage3 tarball which at the time of writing is
+ named stage3-i486-20180117T214502Z.tar.xz. I highly recommend
+ downloading from a mirror close to you instead of using the official
+ one.
+cd /mnt/gentoo
+wget http://gentoo.aditsu.net:8000/releases/x86/autobuilds/current-stage3-i486/s
+tage3-i486-20180117T214502Z.tar.xz
+
+# Untar the tarball. If you wish, you can add the `v` verbose option.
+tar xpf stage3-i486-20180117T214502Z.tar.xz --xattrs-include='*.*' --numeric-own
+er
+
+ The guide says you should edit the /mnt/gentoo/etc/portage/make.conf
+ and adjust the CFLAGS and CXXFLAGS to suit your system. However for
+ this case, we can skip this as the default is already the 486. But do
+ verify just in case.
+CFLAGS="-O2 -march=i486 -pipe"
+CHOST="i486-pc-linux-gnu"
+
+MAKEOPTS="-j5" # A good choice is the number of CPU cores in the system plus 1
+USE="-kde -qt4 -qt5 ffmpeg mp3 alsa"
+
+ If you want to, you can add the MAKEOPTS setting to benefit the
+ compilation machine. The optional USE flags is to remove unwanted GUI
+ support as well as add some audio support when compiling. MP3 support
+ is extremely poor due to the slow processor speed, but you can give it
+ a shot.
+
+5. Installing base system
+
+ [142]Gentoo Wiki: Installing base system
+
+ Just run the following commands I lifted from the guide.
+mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
+# To avoid having to run mirrorselect manually in your next build, you can save
+your list and add it next time.
+# GENTOO_MIRRORS="http://gentoo.aditsu.net:8000/ http://ftp.iij.ad.jp/pub/linux/
+gentoo/ http://ftp.jaist.ac.jp/pub/Linux/Gentoo/ http://ftp.daum.net/gentoo/ htt
+p://ftp.kaist.ac.kr/pub/gentoo/ http://ftp.lanet.kr/pub/gentoo/ http://ftp.tware
+n.net/Linux/Gentoo/"
+
+mkdir --parents /mnt/gentoo/etc/portage/repos.conf
+cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos
+.conf/gentoo.conf
+cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
+
+mount --types proc /proc /mnt/gentoo/proc
+mount --rbind /sys /mnt/gentoo/sys
+mount --make-rslave /mnt/gentoo/sys
+mount --rbind /dev /mnt/gentoo/dev
+mount --make-rslave /mnt/gentoo/dev
+
+chroot /mnt/gentoo /bin/bash
+source /etc/profile
+export PS1="(chroot) ${PS1}"
+
+mkdir /boot # This can be ignored as it seems to exist already
+mount /dev/sda1 /boot
+emerge-webrsync
+
+Read the news
+
+eselect news list
+eselect news read
+
+Set system profile
+
+ The default system profile is [10] default/linux/x86/17.0 (stable)
+ which I use.
+
+ Changing system profiles will invoke a long compilation process
+ especially for GCC, to save time, you can skip this step for your
+ initial test builds.
+eselect profile list
+
+# Example changing to profile "default/linux/x86/17.0" which is the 10th profile
+ at time of writing
+eselect profile set 10
+# If profile change is required, run the following:
+emerge --ask --update --deep --newuse @world
+
+Configure timezone
+
+ls /usr/share/zoneinfo # To see available locales
+echo "Asia/Singapore" > /etc/timezone
+emerge --config sys-libs/timezone-data
+
+Configure locale
+
+nano -w /etc/locale.gen
+#Adjust your locale settings
+
+locale-gen
+
+eselect locale list
+eselect locale set 4 # Change 4 to the one you prefer. Use the one with UTF
+env-update && source /etc/profile && export PS1="(chroot) $PS1"
+
+6. Configuring the kernel
+
+ [143]Gentoo Wiki: Configuring the kernel
+
+ The wiki suggest using genkernel tool. It does not seem to work for the
+ 486 setting so we must use the manual configuration method.
+
+Find out system specs
+
+ pciutils entirely optional especially since my system does not have PCI
+ bus.
+emerge sys-apps/pciutils sys-apps/lshw
+
+Just take the latest stable kernel
+
+emerge sys-kernel/gentoo-sources
+
+Download a particular kernel version
+
+ I decided to use the 4.14.x kernel release as the previous stable
+ 4.12.x is rather old by now. However 4.14 is not marked stable, see
+ this [144]issue.
+emerge --ask =sys-kernel/gentoo-sources-4.14.8-r1 # Then make the config file ch
+anges
+dispatch-conf # Press 'u' to accept
+emerge --ask =sys-kernel/gentoo-sources-4.14.8-r1
+
+Kernel options
+
+cd /usr/src/linux
+make menuconfig
+
+ Kernel options I used on top of the default. It might differ for your
+ setup. I chose to compile everything into the kernel instead of using
+ modules.
+
+ I enable traditional options as well as some modern ones as so the
+ kernel can still work with my modern machine if I need to compile new
+ packages in future.
+
+64-bit Kernel
+
+ * Uncheck this!!!
+
+Processor type and features:
+
+ * Uncheck "Symmetric multi-processing support"
+ * Processor Family - Check 486
+ * Check Generic x86 support
+
+Bus Options
+
+ * Check ISA support
+
+Device Drivers
+
+ * Plug and Play support
+ *
+ + ISA Plug and Play support
+ *
+ + Plug and Play BIOS support
+ * SCSI device support
+ *
+ + SCSI disk support
+ * SATA and PATA drivers
+ *
+ + Generic ATA support
+ *
+ + Legacy ISA PATA support (Experimental)
+ * Network device support
+ *
+ + Ethernet driver support
+ *
+ +
+ o 3Com devices
+ *
+ +
+ o
+ # 3c509/3c579 "Etherlink III" support
+ * Sound card support
+ *
+ + ALSA
+ *
+ +
+ o ISA sound devices
+ *
+ +
+ o
+ # Check SB16 (PnP)
+ * USB Support
+ *
+ + xHCI HCD (USB 3.0) Support
+ *
+ +
+ o Generic xHCI driver for a platform device
+ *
+ + USB Mass Storage support
+ *
+ +
+ o Tick everything related to cards and bridges
+ * MMC/SD/SDIO card support
+
+File Systems
+
+ * Enable all Ext2 and Ext4 relevant options
+ * CD-ROM/DVD Filesystems
+ *
+ + Tick all
+ * DOS/FAT/NT Filesystems
+ *
+ + Tick the NTFS options
+ * Network File Systems
+ *
+ + SMB3 and CIFS support
+ *
+ +
+ o Tick relevant sub options
+
+Backup kernel configuration
+
+ To make it easier to do subsequent rebuilds, you might want to backup
+ the current configuration. Once you do so, you just have to upload
+ .config and don't have to run make menuconfig.
+# Backup
+scp root@X.X.X.X:/mnt/gentoo/usr/src/linux/.config .
+
+# Put back
+scp .config root@X.X.X.X:/mnt/gentoo/usr/src/linux/
+
+Compiling the kernel
+
+make -j5 #Replace 5 with num CPU cores + 1
+make modules_install
+make install
+
+# This is entirely optional for such an old system but might be useful for your
+compilation machine
+emerge sys-kernel/linux-firmware
+
+7. Configuring the system
+
+ [145]Gentoo Wiki: Configuring the system
+
+ I only adjust a subset of the settings in the guide that are relevant
+ to me.
+
+Configuring /etc/fstab
+
+nano -w /etc/fstab
+
+# Those are my settings based on my partition layout above
+/dev/sda1 /boot ext2 defaults,noatime 0 2
+/dev/sda2 none swap sw 0 0
+/dev/sda3 / ext4 noatime 0 1
+/dev/cdrom /mnt/cdrom auto noauto,user 0 0
+
+Set hostname
+
+nano -w /etc/conf.d/hostname
+hostname="tux"
+
+Network info
+
+emerge --noreplace net-misc/netifrc
+
+nano -w /etc/conf.d/net
+
+# Replace eth0 with the actual network interface name. Use `ifconfig` to check.
+# You can put multiple as well to easily transit between the compilation and 486
+ PC.
+# eth0 is used by my 3Com NIC in the 486 PC
+# enxxxx is used by my compilation machine
+
+config_eth0="dhcp"
+config_enxxxx="dhcp"
+## End
+
+cd /etc/init.d
+
+ln -s net.lo net.eth0
+rc-update add net.eth0 default
+
+ln -s net.lo net.enxxxx
+rc-update add net.enxxxx default
+
+System config
+
+# Set root password
+passwd
+
+nano -w /etc/conf.d/hwclock
+# Set local clock instead of UTC if you wish
+clock="local"
+
+8. Installing tools
+
+ [146]Gentoo Wiki: Installing tools
+
+Required installs
+
+# Install system logger
+emerge app-admin/sysklogd
+rc-update add sysklogd default
+
+# Install cron daemon
+emerge sys-process/cronie
+rc-update add cronie default
+
+# Install file indexing tools
+emerge sys-apps/mlocate
+
+# Start SSH on boot
+rc-update add sshd default
+
+# Install file systems tools
+emerge sys-fs/e2fsprogs sys-fs/dosfstools
+
+# Install DHCP
+emerge net-misc/dhcpcd
+
+# NTP
+emerge net-misc/ntp
+
+# If ALSA is enabled in the USE flags
+emerge media-libs/alsa-lib
+emerge media-sound/alsa-utils
+rc-update add alsasound boot
+
+# If FFmpeg is enabled in the USE flags
+emerge media-video/ffmpeg
+
+Correct syslog issues
+
+ I tested after reboot, I got No such file or directory errors on some
+ files. Since I do not need them, I just made the following changes.
+nano /etc/syslog.conf
+
+# Comment out the following lines
+#news.crit /var/log/news/news.crit
+#news.err /var/log/news/news.err
+#news.notice -/var/log/news/news.notice
+
+# Change
+*.=notice;*.=warn |/dev/xconsole
+# to
+*.=notice;*.=warn |/dev/tty6 # Or any other tty since I don't use xconsole
+ on my system.
+
+Optional installs
+
+ Note that the following may take a significant amount time to compile.
+emerge sys-apps/hwinfo
+emerge www-servers/nginx
+emerge dev-vcs/git
+emerge media-sound/moc
+
+# Golang only works for Pentium MMX CPUs and up. But you can install this to see
+ the failure message for fun.
+emerge dev-lang/go
+
+# Gentoo's default Python version is only 3.5 at time of writing. You can instal
+l Python 3.6 but Portage and others will still remain on Python 3.5.
+emerge dev-lang/python:3.6
+
+# Command line web browsers
+emerge www-client/elinks
+emerge www-client/w3m
+emerge www-client/lynx
+
+9. Configuring the bootloader
+
+ [147]Gentoo Wiki: Configuring the bootloader
+
+Install Bootloader
+
+ In theory, one should use the modern Grub2 bootloader. Grub2 loads ok
+ but the system reboots the moment I select a boot option. This seems
+ like a known issue given the age of the system. So I use the older LILO
+ instead.
+emerge sys-boot/lilo
+
+Configure LILO
+
+ Adjust the kernel version to suit yours
+nano -w /etc/lilo.conf
+### Add the following
+boot=/dev/sda # Install LILO in the MBR
+prompt # Give the user the chance to select another section
+timeout=50 # Wait 5 (five) seconds before booting the default sec
+tion
+default=gentoo # When the timeout has passed, boot the "gentoo" secti
+on
+
+image=/boot/vmlinuz-4.14.8-gentoo-r1
+ label=gentoo
+ read-only
+ root=/dev/sda3
+ vga=4 # This will set the VGA mode to 80x30
+
+image=/boot/vmlinuz-4.14.8-gentoo-r1
+ label=gentoo-ask-vga
+ read-only
+ root=/dev/sda3
+ vga=ask # Linux will ask you to pick the VGA mode on startup
+
+image=/boot/vmlinuz-4.14.8-gentoo-r1
+ label=gentoo-rescue
+ read-only
+ root=/dev/sda3
+ append="init=/bin/bb"
+### End
+
+/sbin/lilo
+
+10. Finalising install
+
+ [148]Gentoo Wiki: Finalizing
+
+Create non-root user
+
+#Add non-root user. By default, you cannot SSH in as root user.
+useradd -m -G users,wheel,audio -s /bin/bash john
+passwd john
+
+Unmount and reboot/poweroff system
+
+exit
+cd
+umount -l /mnt/gentoo/dev{/shm,/pts,}
+umount -R /mnt/gentoo
+
+reboot # This is preferred so the SSH keys can be generated for the first time o
+n your compilation machine instead of taking like ages on the 486 PC.
+poweroff
+
+ For some strange reason, I cannot reliably boot with a USB-CF card
+ adapter. Subsequent powerups on my Thinkpad sometimes fail. Booting up
+ with a native SATA-CF adapter works fine. See the bonus step.
+
+11. Boot on i486
+
+ Transfer the disk to the 486 PC and hope it boots! Very slowly.... but
+ it'll work. Good luck!
+
+ All commands below except ALSA stuff are only usable if you are the
+ root user but I'm sure you can find a way to solve that. You also
+ cannot SSH in via the root user by default.
+
+Change preferred Python version
+
+ If you installed another Python version earlier.
+eselect python list
+# Select your preferred Python version
+eselect python set 2
+
+Update time
+
+ Just in case...
+ntpd -q -g
+
+Sound test
+
+ If you want to test the sound, you can run the following commands:
+alsamixer # Remember to increase PCM volume
+speaker-test -t wav -c 2
+
+Configure Web Server
+
+ If you installed nginx earlier, you can try your hand at hosting
+ something. [149]Reference
+mkdir /var/www/localhost/htdocs
+# Create a dummy page
+echo 'Hello, world!' > /var/www/localhost/htdocs/index.html
+nano /etc/nginx/nginx.conf
+# Change `listen 127.0.0.1;` -> `listen 0.0.0.0;`
+
+/etc/init.d/nginx start
+
+# Start on boot
+rc-update add nginx default
+
+Bonus step:
+
+ If for some reason you need to rescue the Gentoo installation (say if
+ kernel fails), you can try booting up from the install CD and mount the
+ disk instead of installing from scratch. These are the instructions you
+ can use based on above:
+# These are if you want to SSH into the system
+passwd root
+New Password: blahblah
+Again: blahblah
+
+/etc/init.d/sshd start
+ifconfig
+#
+
+mount /dev/sda3 /mnt/gentoo
+
+mount --types proc /proc /mnt/gentoo/proc
+mount --rbind /sys /mnt/gentoo/sys
+mount --make-rslave /mnt/gentoo/sys
+mount --rbind /dev /mnt/gentoo/dev
+mount --make-rslave /mnt/gentoo/dev
+
+chroot /mnt/gentoo /bin/bash
+source /etc/profile
+export PS1="(chroot) ${PS1}"
+
+mkdir /boot # This can be ignored as it seems to exist already
+mount /dev/sda1 /boot
+
+About
+
+ Instructions on how to install modern Gentoo Linux on ancient 486-based
+ PCs.
+ [150]yeokhengmeng.com/2018/01/make-the-486-great-again/
+
+Topics
+
+ [151]linux [152]linux-kernel [153]gentoo [154]486
+
+Resources
+
+ [155]Readme
+
+License
+
+ [156]MIT license
+
+Stars
+
+ [157]57 stars
+
+Watchers
+
+ [158]10 watching
+
+Forks
+
+ [159]6 forks
+
+[160]Releases
+
+ No releases published
+
+[161]Packages 0
+
+ No packages published
+
+Footer
+
+ © 2022 GitHub, Inc.
+
+Footer navigation
+
+ * [162]Terms
+ * [163]Privacy
+ * [164]Security
+ * [165]Status
+ * [166]Docs
+ * [167]Contact GitHub
+ * [168]Pricing
+ * [169]API
+ * [170]Training
+ * [171]Blog
+ * [172]About
+
+ (BUTTON) You can't perform that action at this time.
+
+ You signed in with another tab or window. [173]Reload to refresh your
+ session. You signed out in another tab or window. [174]Reload to
+ refresh your session.
+
+ (BUTTON)
+
+References
+
+ Visible links:
+ 1. https://github.com/opensearch.xml
+ 2. https://github.com/yeokm1/gentoo-on-486#start-of-content
+ 3. https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&source=header-repo
+ 4. https://github.com/features
+ 5. https://github.com/mobile
+ 6. https://github.com/features/actions
+ 7. https://github.com/features/codespaces
+ 8. https://github.com/features/copilot
+ 9. https://github.com/features/packages
+ 10. https://github.com/features/security
+ 11. https://github.com/features/code-review
+ 12. https://github.com/features/issues
+ 13. https://github.com/features/integrations
+ 14. https://github.com/sponsors
+ 15. https://github.com/customer-stories
+ 16. https://github.com/team
+ 17. https://github.com/enterprise
+ 18. https://github.com/explore
+ 19. https://github.com/topics
+ 20. https://github.com/collections
+ 21. https://github.com/trending
+ 22. https://skills.github.com/
+ 23. https://github.com/sponsors/explore
+ 24. https://opensource.guide/
+ 25. https://github.com/readme
+ 26. https://github.com/events
+ 27. https://github.community/
+ 28. https://education.github.com/
+ 29. https://stars.github.com/
+ 30. https://github.com/marketplace
+ 31. https://github.com/pricing
+ 32. https://github.com/pricing#compare-features
+ 33. https://github.com/enterprise/contact
+ 34. https://education.github.com/
+ 35. https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fyeokm1%2Fgentoo-on-486
+ 36. https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&source=header-repo&source_repo=yeokm1%2Fgentoo-on-486
+ 37. https://github.com/yeokm1
+ 38. https://github.com/yeokm1/gentoo-on-486
+ 39. https://github.com/login?return_to=%2Fyeokm1%2Fgentoo-on-486
+ 40. https://github.com/login?return_to=%2Fyeokm1%2Fgentoo-on-486
+ 41. https://github.com/login?return_to=%2Fyeokm1%2Fgentoo-on-486
+ 42. http://yeokhengmeng.com/2018/01/make-the-486-great-again/
+ 43. https://github.com/yeokm1/gentoo-on-486/blob/master/LICENSE
+ 44. https://github.com/yeokm1/gentoo-on-486/stargazers
+ 45. https://github.com/yeokm1/gentoo-on-486/network/members
+ 46. https://github.com/login?return_to=%2Fyeokm1%2Fgentoo-on-486
+ 47. https://github.com/login?return_to=%2Fyeokm1%2Fgentoo-on-486
+ 48. https://github.com/yeokm1/gentoo-on-486
+ 49. https://github.com/yeokm1/gentoo-on-486/issues
+ 50. https://github.com/yeokm1/gentoo-on-486/pulls
+ 51. https://github.com/yeokm1/gentoo-on-486/actions
+ 52. https://github.com/yeokm1/gentoo-on-486/projects?type=beta
+ 53. https://github.com/yeokm1/gentoo-on-486/wiki
+ 54. https://github.com/yeokm1/gentoo-on-486/security
+ 55. https://github.com/yeokm1/gentoo-on-486/pulse
+ 56. https://github.com/yeokm1/gentoo-on-486
+ 57. https://github.com/yeokm1/gentoo-on-486/issues
+ 58. https://github.com/yeokm1/gentoo-on-486/pulls
+ 59. https://github.com/yeokm1/gentoo-on-486/actions
+ 60. https://github.com/yeokm1/gentoo-on-486/projects?type=beta
+ 61. https://github.com/yeokm1/gentoo-on-486/wiki
+ 62. https://github.com/yeokm1/gentoo-on-486/security
+ 63. https://github.com/yeokm1/gentoo-on-486/pulse
+ 64. https://github.com/yeokm1/gentoo-on-486/tree/{{%20urlEncodedRefName%20}}
+ 65. https://github.com/yeokm1/gentoo-on-486/branches
+ 66. https://github.com/yeokm1/gentoo-on-486/tree/{{%20urlEncodedRefName%20}}
+ 67. https://github.com/yeokm1/gentoo-on-486/tags
+ 68. https://github.com/yeokm1/gentoo-on-486/branches
+ 69. https://github.com/yeokm1/gentoo-on-486/tags
+ 70. https://github.com/yeokm1/gentoo-on-486/commits/master
+ 71. https://github.com/yeokm1/gentoo-on-486/tree/207a5cddd0411495da608736e4e02bb79d1f5780
+ 72. https://github.com/yeokm1/gentoo-on-486/tree/master/images
+ 73. https://github.com/yeokm1/gentoo-on-486/blob/master/.config
+ 74. https://github.com/yeokm1/gentoo-on-486/blob/master/LICENSE
+ 75. https://github.com/yeokm1/gentoo-on-486/blob/master/README.md
+ 76. https://github.com/yeokm1/gentoo-on-486/blob/master/gentoo-on-486-presentation.pptx
+ 77. https://github.com/yeokm1/gentoo-on-486#gentoo-on-486
+ 78. https://github.com/yeokm1/gentoo-on-486#the-hardware
+ 79. https://github.com/yeokm1/gentoo-on-486#deployment-machine--ibm-ps1-consultant-2133-19c-released-in-1993
+ 80. https://github.com/yeokm1/gentoo-on-486#compilation-machine-thinkpad-t430-released-in-2012
+ 81. https://github.com/yeokm1/gentoo-on-486#optional-machine-to-issue-ssh-commands-to-compilation-machine
+ 82. https://github.com/yeokm1/gentoo-on-486#instructions
+ 83. https://github.com/yeokm1/gentoo-on-486#1-preparing-the-install-mediadisks
+ 84. https://github.com/yeokm1/gentoo-on-486#2-networking-and-ssh
+ 85. https://github.com/yeokm1/gentoo-on-486#3-preparing-the-disks
+ 86. https://github.com/yeokm1/gentoo-on-486#4-installing-stage3
+ 87. https://github.com/yeokm1/gentoo-on-486#5-installing-base-system
+ 88. https://github.com/yeokm1/gentoo-on-486#read-the-news
+ 89. https://github.com/yeokm1/gentoo-on-486#set-system-profile
+ 90. https://github.com/yeokm1/gentoo-on-486#configure-timezone
+ 91. https://github.com/yeokm1/gentoo-on-486#configure-locale
+ 92. https://github.com/yeokm1/gentoo-on-486#6-configuring-the-kernel
+ 93. https://github.com/yeokm1/gentoo-on-486#find-out-system-specs
+ 94. https://github.com/yeokm1/gentoo-on-486#just-take-the-latest-stable-kernel
+ 95. https://github.com/yeokm1/gentoo-on-486#download-a-particular-kernel-version
+ 96. https://github.com/yeokm1/gentoo-on-486#kernel-options
+ 97. https://github.com/yeokm1/gentoo-on-486#64-bit-kernel
+ 98. https://github.com/yeokm1/gentoo-on-486#processor-type-and-features
+ 99. https://github.com/yeokm1/gentoo-on-486#bus-options
+ 100. https://github.com/yeokm1/gentoo-on-486#device-drivers
+ 101. https://github.com/yeokm1/gentoo-on-486#file-systems
+ 102. https://github.com/yeokm1/gentoo-on-486#backup-kernel-configuration
+ 103. https://github.com/yeokm1/gentoo-on-486#compiling-the-kernel
+ 104. https://github.com/yeokm1/gentoo-on-486#7-configuring-the-system
+ 105. https://github.com/yeokm1/gentoo-on-486#configuring-etcfstab
+ 106. https://github.com/yeokm1/gentoo-on-486#set-hostname
+ 107. https://github.com/yeokm1/gentoo-on-486#network-info
+ 108. https://github.com/yeokm1/gentoo-on-486#system-config
+ 109. https://github.com/yeokm1/gentoo-on-486#8-installing-tools
+ 110. https://github.com/yeokm1/gentoo-on-486#required-installs
+ 111. https://github.com/yeokm1/gentoo-on-486#correct-syslog-issues
+ 112. https://github.com/yeokm1/gentoo-on-486#optional-installs
+ 113. https://github.com/yeokm1/gentoo-on-486#9-configuring-the-bootloader
+ 114. https://github.com/yeokm1/gentoo-on-486#install-bootloader
+ 115. https://github.com/yeokm1/gentoo-on-486#configure-lilo
+ 116. https://github.com/yeokm1/gentoo-on-486#10-finalising-install
+ 117. https://github.com/yeokm1/gentoo-on-486#create-non-root-user
+ 118. https://github.com/yeokm1/gentoo-on-486#unmount-and-rebootpoweroff-system
+ 119. https://github.com/yeokm1/gentoo-on-486#11-boot-on-i486
+ 120. https://github.com/yeokm1/gentoo-on-486#change-preferred-python-version
+ 121. https://github.com/yeokm1/gentoo-on-486#update-time
+ 122. https://github.com/yeokm1/gentoo-on-486#sound-test
+ 123. https://github.com/yeokm1/gentoo-on-486#configure-web-server
+ 124. https://github.com/yeokm1/gentoo-on-486#bonus-step
+ 125. https://github.com/yeokm1/gentoo-on-486#readme
+ 126. http://yeokhengmeng.com/2018/01/make-the-486-great-again/
+ 127. https://en.wikipedia.org/wiki/IBM_PS/1
+ 128. https://github.com/yeokm1/gentoo-on-486/blob/master/images/gentoo-486-capabilities.jpg
+ 129. https://www.philscomputerlab.com/gotek-floppy-emulator.html
+ 130. https://en.wikipedia.org/wiki/3Com_3c509
+ 131. https://en.wikipedia.org/wiki/Sound_Blaster_16
+ 132. https://en.wikipedia.org/wiki/Sound_Blaster_16#OPL-3_FM_and_CQM_Synthesis_options
+ 133. http://www.thinkwiki.org/wiki/Category:T430
+ 134. https://github.com/yeokm1/gentoo-on-486/blob/master/images/gentoo-486-t430.jpg
+ 135. https://wiki.gentoo.org/wiki/Handbook:X86
+ 136. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Media
+ 137. https://www.gentoo.org/downloads/
+ 138. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Networking
+ 139. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Disks
+ 140. http://www.pcguide.com/ref/hdd/bios/sizeMB504-c.html
+ 141. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Stage
+ 142. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Base
+ 143. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Kernel
+ 144. https://archives.gentoo.org/gentoo-dev/message/57f754009e47732a56bb2e0259f2ac3e
+ 145. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/System
+ 146. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Tools
+ 147. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Bootloader
+ 148. https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Finalizing
+ 149. https://wiki.gentoo.org/wiki/Nginx
+ 150. http://yeokhengmeng.com/2018/01/make-the-486-great-again/
+ 151. https://github.com/topics/linux
+ 152. https://github.com/topics/linux-kernel
+ 153. https://github.com/topics/gentoo
+ 154. https://github.com/topics/486
+ 155. https://github.com/yeokm1/gentoo-on-486#readme
+ 156. https://github.com/yeokm1/gentoo-on-486/blob/master/LICENSE
+ 157. https://github.com/yeokm1/gentoo-on-486/stargazers
+ 158. https://github.com/yeokm1/gentoo-on-486/watchers
+ 159. https://github.com/yeokm1/gentoo-on-486/network/members
+ 160. https://github.com/yeokm1/gentoo-on-486/releases
+ 161. https://github.com/users/yeokm1/packages?repo_name=gentoo-on-486
+ 162. https://docs.github.com/en/github/site-policy/github-terms-of-service
+ 163. https://docs.github.com/en/github/site-policy/github-privacy-statement
+ 164. https://github.com/security
+ 165. https://www.githubstatus.com/
+ 166. https://docs.github.com/
+ 167. https://support.github.com/?tags=dotcom-footer
+ 168. https://github.com/pricing
+ 169. https://docs.github.com/
+ 170. https://services.github.com/
+ 171. https://github.blog/
+ 172. https://github.com/about
+ 173. https://github.com/yeokm1/gentoo-on-486
+ 174. https://github.com/yeokm1/gentoo-on-486
+
+ Hidden links:
+ 176. https://github.com/
+ 177. https://github.com/yeokm1/gentoo-on-486
+ 178. https://github.com/yeokm1/gentoo-on-486
+ 179. https://github.com/yeokm1/gentoo-on-486
+ 180. https://github.com/yeokm1/gentoo-on-486
+ 181. https://github.com/yeokm1/gentoo-on-486#gentoo-on-486
+ 182. https://github.com/yeokm1/gentoo-on-486#the-hardware
+ 183. https://github.com/yeokm1/gentoo-on-486#deployment-machine--ibm-ps1-consultant-2133-19c-released-in-1993
+ 184. https://github.com/yeokm1/gentoo-on-486#compilation-machine-thinkpad-t430-released-in-2012
+ 185. https://github.com/yeokm1/gentoo-on-486#optional-machine-to-issue-ssh-commands-to-compilation-machine
+ 186. https://github.com/yeokm1/gentoo-on-486#instructions
+ 187. https://github.com/yeokm1/gentoo-on-486#1-preparing-the-install-mediadisks
+ 188. https://github.com/yeokm1/gentoo-on-486#2-networking-and-ssh
+ 189. https://github.com/yeokm1/gentoo-on-486#3-preparing-the-disks
+ 190. https://github.com/yeokm1/gentoo-on-486#4-installing-stage3
+ 191. https://github.com/yeokm1/gentoo-on-486#5-installing-base-system
+ 192. https://github.com/yeokm1/gentoo-on-486#read-the-news
+ 193. https://github.com/yeokm1/gentoo-on-486#set-system-profile
+ 194. https://github.com/yeokm1/gentoo-on-486#configure-timezone
+ 195. https://github.com/yeokm1/gentoo-on-486#configure-locale
+ 196. https://github.com/yeokm1/gentoo-on-486#6-configuring-the-kernel
+ 197. https://github.com/yeokm1/gentoo-on-486#find-out-system-specs
+ 198. https://github.com/yeokm1/gentoo-on-486#just-take-the-latest-stable-kernel
+ 199. https://github.com/yeokm1/gentoo-on-486#download-a-particular-kernel-version
+ 200. https://github.com/yeokm1/gentoo-on-486#kernel-options
+ 201. https://github.com/yeokm1/gentoo-on-486#64-bit-kernel
+ 202. https://github.com/yeokm1/gentoo-on-486#processor-type-and-features
+ 203. https://github.com/yeokm1/gentoo-on-486#bus-options
+ 204. https://github.com/yeokm1/gentoo-on-486#device-drivers
+ 205. https://github.com/yeokm1/gentoo-on-486#file-systems
+ 206. https://github.com/yeokm1/gentoo-on-486#backup-kernel-configuration
+ 207. https://github.com/yeokm1/gentoo-on-486#compiling-the-kernel
+ 208. https://github.com/yeokm1/gentoo-on-486#7-configuring-the-system
+ 209. https://github.com/yeokm1/gentoo-on-486#configuring-etcfstab
+ 210. https://github.com/yeokm1/gentoo-on-486#set-hostname
+ 211. https://github.com/yeokm1/gentoo-on-486#network-info
+ 212. https://github.com/yeokm1/gentoo-on-486#system-config
+ 213. https://github.com/yeokm1/gentoo-on-486#8-installing-tools
+ 214. https://github.com/yeokm1/gentoo-on-486#required-installs
+ 215. https://github.com/yeokm1/gentoo-on-486#correct-syslog-issues
+ 216. https://github.com/yeokm1/gentoo-on-486#optional-installs
+ 217. https://github.com/yeokm1/gentoo-on-486#9-configuring-the-bootloader
+ 218. https://github.com/yeokm1/gentoo-on-486#install-bootloader
+ 219. https://github.com/yeokm1/gentoo-on-486#configure-lilo
+ 220. https://github.com/yeokm1/gentoo-on-486#10-finalising-install
+ 221. https://github.com/yeokm1/gentoo-on-486#create-non-root-user
+ 222. https://github.com/yeokm1/gentoo-on-486#unmount-and-rebootpoweroff-system
+ 223. https://github.com/yeokm1/gentoo-on-486#11-boot-on-i486
+ 224. https://github.com/yeokm1/gentoo-on-486#change-preferred-python-version
+ 225. https://github.com/yeokm1/gentoo-on-486#update-time
+ 226. https://github.com/yeokm1/gentoo-on-486#sound-test
+ 227. https://github.com/yeokm1/gentoo-on-486#configure-web-server
+ 228. https://github.com/yeokm1/gentoo-on-486#bonus-step
+ 229. https://github.com/
diff --git a/floppy/doc/lwn.net_Articles_672587.txt b/floppy/doc/lwn.net_Articles_672587.txt
new file mode 100644
index 0000000..32a6a4e
--- /dev/null
+++ b/floppy/doc/lwn.net_Articles_672587.txt
@@ -0,0 +1,240 @@
+ #[1]LWN.net headlines [2]Comments posted to this article
+
+ [3]LWN.net Logo LWN
+ .net News from the source [4]LWN
+ * [5]Content
+ + [6]Weekly Edition
+ + [7]Archives
+ + [8]Search
+ + [9]Kernel
+ + [10]Security
+ + [11]Distributions
+ + [12]Events calendar
+ + [13]Unread comments
+ +
+ _________________________________________________________
+
+ + [14]LWN FAQ
+ + [15]Write for us
+
+ User: ________ Password: ________ Log in
+ | Subscribe
+ | Register
+ [16]Subscribe / [17]Log in / [18]New account
+
+[RFC] CONFIG_FORCE_MINIMALLY_SANE_CONFIG=y (was: Re: [RFC PATCH] x86/kconfig:
+Sanity-check config file during oldconfig)
+
+ [Posted January 20, 2016 by corbet]
+
+ From: Ingo Molnar <mingo-AT-kernel.org>
+ To: Borislav Petkov <bp-AT-suse.de>, Linus Torvalds
+ <torvalds-AT-linux-foundation.org>, Greg Kroah-Hartman
+ <gregkh-AT-linuxfoundation.org>, Andrew Morton
+ <akpm-AT-linux-foundation.org>
+ Subject: [RFC] CONFIG_FORCE_MINIMALLY_SANE_CONFIG=y (was: Re: [RFC
+ PATCH] x86/kconfig: Sanity-check config file during oldconfig)
+ Date: Tue, 19 Jan 2016 09:20:22 +0100
+ Message-ID: <20160119082022.GB18237@gmail.com>
+ Cc: Michal Marek <mmarek-AT-suse.cz>,
+ =?iso-8859-1?Q?M=E5ns_Rullg=E5rd?= <mans-AT-mansr.com>, Markus
+ Trippelsdorf <markus-AT-trippelsdorf.de>, Thomas Voegtle
+ <tv-AT-lio96.de>, linux-kernel-AT-vger.kernel.org, x86-ml
+ <x86-AT-kernel.org>, Peter Zijlstra <a.p.zijlstra-AT-chello.nl>, Thomas
+ Gleixner <tglx-AT-linutronix.de>, Andrew Morton
+ <akpm-AT-linux-foundation.org>, Linus Torvalds
+ <torvalds-AT-linux-foundation.org>, Jiri Olsa <jolsa-AT-redhat.com>,
+ Arnaldo Carvalho de Melo <acme-AT-infradead.org>,
+ =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker <fweisbec-AT-gmail.com>
+ Archive-link: [19]Article, [20]Thread
+
+
+( I've Cc:-ed Linus, Greg and Andrew, to see whether doing something like what I
+
+ suggest below in the x86 architecture would be acceptable. )
+
+* Borislav Petkov <bp@suse.de> wrote:
+
+> From: Borislav Petkov <bp@suse.de>
+>
+> Thomas Voegtle reported that doing oldconfig with a .config which has
+> CONFIG_MICROCODE enabled but BLK_DEV_INITRD disabled prevents the
+> microcode loading mechanism from being built.
+>
+> Add a short script which hooks into the "make oldconfig" handling and
+> sanity-checks the config file for that discrepancy. It issues a message
+> which should hopefully sensitize the user to that issue and point her
+> into the right direction.
+
+So it would be much better to just do such things automatically, and only allow
+'safe' combination of options - without the user having to do anything.
+
+The guiding principle is: kernel configuration is (still...) our worst barrier o
+f
+entry for new users/developers, and kernel configuration still sucks very much
+from a UI point of view.
+
+In fact our kernel configuration UI and workflow is still so bad that it's an
+effort to stay current even with a standalone and working .config, even for
+experienced kernel developers...
+
+Adding a (somewhat hacky) post processing script and forcing users to read
+something 99% of them does not have a clue about is a step in the wrong directio
+n,
+IMHO.
+
+So can we do something more intelligent instead, such as modifying the Kconfigs
+in
+a way that it's not possible to have CONFIG_MICROCODE enabled while BLK_DEV_INIT
+RD
+is disabled?
+
+I'd be fine with a 'select BLK_DEV_INITRD' for example. If people doing super
+specialized setups disagree because they really need that nonsensical combinatio
+n
+of config options, they can complain and provide a better solution.
+
+In fact on x86 I'd suggest we go farther than that and add a core set of selects
+
+that can be disabled only through a sufficiently scary "I really know I'm doing
+something utmost weird" (and default disabled) config option.
+
+From my own randconfig testing I can give a core list of must-have kernel option
+s,
+without which most distros (Fedora, RHEL, Ubuntu, SuSE) won't boot properly:
+
++config FORCE_MINIMALLY_SANE_CONFIG
++ bool
++ default y
++
++ # so that capset() works (sudo, etc.):
++ select SECURITY
++ select SECURITY_CAPABILITIES
++ select BINFMT_ELF
++
++ select SYSFS
++ select SYSFS_DEPRECATED
++ select PROC_FS
++ select FUTEX
++
++ # newer systemd silently relies on the presence of the epoll system call
+:
++ select EPOLL
++ select ANON_INODES
++
++ # newer systemd silently hangs durig early init without these:
++ select PROC_SYSCTL
++ select SYSCTL
++ select POSIX_MQUEUE
++ select POSIX_MQUEUE_SYSCTL
++
++ # systemd needs this syscall:
++ select FHANDLE
++
++ # systemd needs devtmpfs: "systemd[1]: Failed to mount devtmpfs at /dev:
+ No such device"
++ select DEVTMPFS
++
++ # systemd needs tmpfs: "systemd[1]: Failed to mount tmpfs at /sys/fs/cgr
+oup: No such file or
+directory"
++ select SHMEM
++ select TMPFS
++
++ # systemd needs timerfd syscalls: "[ 8.198625] systemd[1]: Failed to
+create timerfd: Function
+not implemented^"
++ select TIMERFD
++
++ # systemd needs signalfd support: "[ 45.536725] systemd[1]: Failed to
+allocate manager object:
+Function not implemented"
++ select SIGNALFD
++
++ # systemd hangs during bootup without cgroup support:
++ select CGROUPS
++
++ # systemd fails during bootup without this option, with a nonsensical me
+ssage: "[DEPEND]
+Dependency failed for File System Check on /dev/sda1."
++ select FILE_LOCKING
++
++ # systemd fails during bootup without this option:
++ select FSNOTIFY
++ select INOTIFY_USER
++
++ # won't boot otherwise:
++ select RD_GZIP
++ select BLK_DEV_INITRD
++
++ # old F6 userspace needs vsyscalls:
++ select X86_VSYSCALL_EMULATION if X86_64
++ select IA32_EMULATION if X86_64
+
+And yes, many of these options are members of the 'SystemD debuggability Hall Of
+
+Shame'... It cost me many, many days of painful config-bisection to figure the
+often obscure dependencies out, so we might as well upstream this information.
+
+Many braincells died to bring us this information!
+
+Note that some of these have sub-dependencies (and super-dependencies) so the li
+st
+isn't complete from a Kconfig language POV - but it lists most of the 'must have
+'
+leaf features and would form a good starting point.
+
+The idea is that if you have this option enabled, the rest of kernel config shou
+ld
+be 'fool proof' - or at least failures should be a lot more obvious (such as a
+missing hardware driver or a missing filesystem driver).
+
+I'd keep this option x86-only at least initially, because that's still the space
+
+where most of our newbie testers come from, and because I'd like to see how this
+
+evolves before trying to generalize it to 44 architectures...
+
+Also, I'd not try to be per distro, I'd use a single superset of such config
+options: from a usability POV it's _much_ better to have a few more options
+enabled in a .config of thousands of entries, than to accidentally have the one
+option not enabled that your user-space somehow critically depends on ...
+
+Thoughs?
+
+Thanks,
+
+ Ingo
+
+
+ __________________________________________
+
+ ([21]Log in to post comments)
+
+ Copyright © 2016, Eklektix, Inc.
+ Comments and public postings are copyrighted by their creators.
+ Linux is a registered trademark of Linus Torvalds
+
+References
+
+ 1. https://lwn.net/headlines/newrss
+ 2. https://lwn.net/headlines/672587/
+ 3. https://lwn.net/
+ 4. https://lwn.net/
+ 5. https://lwn.net/Articles/672587/#t
+ 6. https://lwn.net/current/
+ 7. https://lwn.net/Archives/
+ 8. https://lwn.net/Search/
+ 9. https://lwn.net/Kernel/
+ 10. https://lwn.net/Security/
+ 11. https://lwn.net/Distributions/
+ 12. https://lwn.net/Calendar/
+ 13. https://lwn.net/Comments/unread
+ 14. https://lwn.net/op/FAQ.lwn
+ 15. https://lwn.net/op/AuthorGuide.lwn
+ 16. https://lwn.net/subscribe/
+ 17. https://lwn.net/Login/
+ 18. https://lwn.net/Login/newaccount
+ 19. http://article.gmane.org/gmane.linux.kernel/2129528
+ 20. http://thread.gmane.org/gmane.linux.kernel/2129528
+ 21. https://lwn.net/Login/?target=/Articles/672587/
diff --git a/floppy/doc/people.freedesktop.org_~narmstrong_meson_drm_doc_admin-guide_initrd.txt b/floppy/doc/people.freedesktop.org_~narmstrong_meson_drm_doc_admin-guide_initrd.txt
new file mode 100644
index 0000000..0c2351e
--- /dev/null
+++ b/floppy/doc/people.freedesktop.org_~narmstrong_meson_drm_doc_admin-guide_initrd.txt
@@ -0,0 +1,453 @@
+ #[1]The Linux Kernel 4.11.0-rc4-00191-g7de6e5d documentation [2]The
+ Linux kernel user's and administrator's guide [3]Linux Serial Console
+ [4]Rules on how to access information in sysfs
+
+Navigation
+
+ * [5]index
+ * [6]next |
+ * [7]previous |
+ * [8]The Linux Kernel 4.11.0-rc4-00191-g7de6e5d documentation »
+ * [9]The Linux kernel user's and administrator's guide »
+
+Using the initial RAM disk (initrd)[10]¶
+
+ Written 1996,2000 by Werner Almesberger
+ <[11]werner.almesberger@epfl.ch> and Hans Lermen <[12]lermen@fgan.de>
+
+ initrd provides the capability to load a RAM disk by the boot loader.
+ This RAM disk can then be mounted as the root file system and programs
+ can be run from it. Afterwards, a new root file system can be mounted
+ from a different device. The previous root (from initrd) is then moved
+ to a directory and can be subsequently unmounted.
+
+ initrd is mainly designed to allow system startup to occur in two
+ phases, where the kernel comes up with a minimum set of compiled-in
+ drivers, and where additional modules are loaded from initrd.
+
+ This document gives a brief overview of the use of initrd. A more
+ detailed discussion of the boot process can be found in [13][1].
+
+Operation[14]¶
+
+ When using initrd, the system typically boots as follows:
+
+ 1. the boot loader loads the kernel and the initial RAM disk
+ 2. the kernel converts initrd into a "normal" RAM disk and frees the
+ memory used by initrd
+ 3. if the root device is not /dev/ram0, the old (deprecated)
+ change_root procedure is followed. see the "Obsolete root change
+ mechanism" section below.
+ 4. root device is mounted. if it is /dev/ram0, the initrd image is
+ then mounted as root
+ 5. /sbin/init is executed (this can be any valid executable, including
+ shell scripts; it is run with uid 0 and can do basically everything
+ init can do).
+ 6. init mounts the "real" root file system
+ 7. init places the root file system at the root directory using the
+ pivot_root system call
+ 8. init execs the /sbin/init on the new root filesystem, performing
+ the usual boot sequence
+ 9. the initrd file system is removed
+
+ Note that changing the root directory does not involve unmounting it.
+ It is therefore possible to leave processes running on initrd during
+ that procedure. Also note that file systems mounted under initrd
+ continue to be accessible.
+
+Boot command-line options[15]¶
+
+ initrd adds the following new options:
+initrd=<path> (e.g. LOADLIN)
+
+ Loads the specified file as the initial RAM disk. When using LILO, you
+ have to specify the RAM disk image file in /etc/lilo.conf, using the
+ INITRD configuration variable.
+
+noinitrd
+
+ initrd data is preserved but it is not converted to a RAM disk and
+ the "normal" root file system is mounted. initrd data can be read
+ from /dev/initrd. Note that the data in initrd can have any structure
+ in this case and doesn't necessarily have to be a file system image.
+ This option is used mainly for debugging.
+
+ Note: /dev/initrd is read-only and it can only be used once. As soon
+ as the last process has closed it, all data is freed and /dev/initrd
+ can't be opened anymore.
+
+root=/dev/ram0
+
+ initrd is mounted as root, and the normal boot procedure is followed,
+ with the RAM disk mounted as root.
+
+Compressed cpio images[16]¶
+
+ Recent kernels have support for populating a ramdisk from a compressed
+ cpio archive. On such systems, the creation of a ramdisk image doesn't
+ need to involve special block devices or loopbacks; you merely create a
+ directory on disk with the desired initrd content, cd to that
+ directory, and run (as an example):
+find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img
+
+ Examining the contents of an existing image file is just as simple:
+mkdir /tmp/imagefile
+cd /tmp/imagefile
+gzip -cd /boot/imagefile.img | cpio -imd --quiet
+
+Installation[17]¶
+
+ First, a directory for the initrd file system has to be created on the
+ "normal" root file system, e.g.:
+# mkdir /initrd
+
+ The name is not relevant. More details can be found on the
+ pivot_root(2) man page.
+
+ If the root file system is created during the boot procedure (i.e. if
+ you're building an install floppy), the root file system creation
+ procedure should create the /initrd directory.
+
+ If initrd will not be mounted in some cases, its content is still
+ accessible if the following device has been created:
+# mknod /dev/initrd b 1 250
+# chmod 400 /dev/initrd
+
+ Second, the kernel has to be compiled with RAM disk support and with
+ support for the initial RAM disk enabled. Also, at least all components
+ needed to execute programs from initrd (e.g. executable format and file
+ system) must be compiled into the kernel.
+
+ Third, you have to create the RAM disk image. This is done by creating
+ a file system on a block device, copying files to it as needed, and
+ then copying the content of the block device to the initrd file. With
+ recent kernels, at least three types of devices are suitable for that:
+
+ * a floppy disk (works everywhere but it's painfully slow)
+ * a RAM disk (fast, but allocates physical memory)
+ * a loopback device (the most elegant solution)
+
+ We'll describe the loopback device method:
+
+ 1. make sure loopback block devices are configured into the kernel
+ 2. create an empty file system of the appropriate size, e.g.:
+# dd if=/dev/zero of=initrd bs=300k count=1
+# mke2fs -F -m0 initrd
+
+ (if space is critical, you may want to use the Minix FS instead of
+ Ext2)
+ 3. mount the file system, e.g.:
+# mount -t ext2 -o loop initrd /mnt
+
+ 4. create the console device:
+# mkdir /mnt/dev
+# mknod /mnt/dev/console c 5 1
+
+ 5. copy all the files that are needed to properly use the initrd
+ environment. Don't forget the most important file, /sbin/init
+ Note
+ /sbin/init permissions must include "x" (execute).
+ 6. correct operation the initrd environment can frequently be tested
+ even without rebooting with the command:
+# chroot /mnt /sbin/init
+
+ This is of course limited to initrds that do not interfere with the
+ general system state (e.g. by reconfiguring network interfaces,
+ overwriting mounted devices, trying to start already running
+ demons, etc. Note however that it is usually possible to use
+ pivot_root in such a chroot'ed initrd environment.)
+ 7. unmount the file system:
+# umount /mnt
+
+ 8. the initrd is now in the file "initrd". Optionally, it can now be
+ compressed:
+# gzip -9 initrd
+
+ For experimenting with initrd, you may want to take a rescue floppy and
+ only add a symbolic link from /sbin/init to /bin/sh. Alternatively, you
+ can try the experimental newlib environment [18][2] to create a small
+ initrd.
+
+ Finally, you have to boot the kernel and load initrd. Almost all Linux
+ boot loaders support initrd. Since the boot process is still compatible
+ with an older mechanism, the following boot command line parameters
+ have to be given:
+root=/dev/ram0 rw
+
+ (rw is only necessary if writing to the initrd file system.)
+
+ With LOADLIN, you simply execute:
+LOADLIN <kernel> initrd=<disk_image>
+
+ e.g.:
+LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0 rw
+
+ With LILO, you add the option INITRD=<path> to either the global
+ section or to the section of the respective kernel in /etc/lilo.conf,
+ and pass the options using APPEND, e.g.:
+image = /bzImage
+ initrd = /boot/initrd.gz
+ append = "root=/dev/ram0 rw"
+
+ and run /sbin/lilo
+
+ For other boot loaders, please refer to the respective documentation.
+
+ Now you can boot and enjoy using initrd.
+
+Changing the root device[19]¶
+
+ When finished with its duties, init typically changes the root device
+ and proceeds with starting the Linux system on the "real" root device.
+
+ The procedure involves the following steps:
+
+ + mounting the new root file system
+ + turning it into the root file system
+ + removing all accesses to the old (initrd) root file system
+ + unmounting the initrd file system and de-allocating the RAM
+ disk
+
+ Mounting the new root file system is easy: it just needs to be mounted
+ on a directory under the current root. Example:
+# mkdir /new-root
+# mount -o ro /dev/hda1 /new-root
+
+ The root change is accomplished with the pivot_root system call, which
+ is also available via the pivot_root utility (see pivot_root(8) man
+ page; pivot_root is distributed with util-linux version 2.10h or higher
+ [20][3]). pivot_root moves the current root to a directory under the
+ new root, and puts the new root at its place. The directory for the old
+ root must exist before calling pivot_root. Example:
+# cd /new-root
+# mkdir initrd
+# pivot_root . initrd
+
+ Now, the init process may still access the old root via its executable,
+ shared libraries, standard input/output/error, and its current root
+ directory. All these references are dropped by the following command:
+# exec chroot . what-follows <dev/console >dev/console 2>&1
+
+ Where what-follows is a program under the new root, e.g. /sbin/init If
+ the new root file system will be used with udev and has no valid /dev
+ directory, udev must be initialized before invoking chroot in order to
+ provide /dev/console.
+
+ Note: implementation details of pivot_root may change with time. In
+ order to ensure compatibility, the following points should be observed:
+
+ * before calling pivot_root, the current directory of the invoking
+ process should point to the new root directory
+ * use . as the first argument, and the _relative_ path of the
+ directory for the old root as the second argument
+ * a chroot program must be available under the old and the new root
+ * chroot to the new root afterwards
+ * use relative paths for dev/console in the exec command
+
+ Now, the initrd can be unmounted and the memory allocated by the RAM
+ disk can be freed:
+# umount /initrd
+# blockdev --flushbufs /dev/ram0
+
+ It is also possible to use initrd with an NFS-mounted root, see the
+ pivot_root(8) man page for details.
+
+Usage scenarios[21]¶
+
+ The main motivation for implementing initrd was to allow for modular
+ kernel configuration at system installation. The procedure would work
+ as follows:
+
+ 1. system boots from floppy or other media with a minimal kernel (e.g.
+ support for RAM disks, initrd, a.out, and the Ext2 FS) and loads
+ initrd
+ 2. /sbin/init determines what is needed to (1) mount the "real" root
+ FS (i.e. device type, device drivers, file system) and (2) the
+ distribution media (e.g. CD-ROM, network, tape, ...). This can be
+ done by asking the user, by auto-probing, or by using a hybrid
+ approach.
+ 3. /sbin/init loads the necessary kernel modules
+ 4. /sbin/init creates and populates the root file system (this doesn't
+ have to be a very usable system yet)
+ 5. /sbin/init invokes pivot_root to change the root file system and
+ execs - via chroot - a program that continues the installation
+ 6. the boot loader is installed
+ 7. the boot loader is configured to load an initrd with the set of
+ modules that was used to bring up the system (e.g. /initrd can be
+ modified, then unmounted, and finally, the image is written from
+ /dev/ram0 or /dev/rd/0 to a file)
+ 8. now the system is bootable and additional installation tasks can be
+ performed
+
+ The key role of initrd here is to re-use the configuration data during
+ normal system operation without requiring the use of a bloated
+ "generic" kernel or re-compiling or re-linking the kernel.
+
+ A second scenario is for installations where Linux runs on systems with
+ different hardware configurations in a single administrative domain. In
+ such cases, it is desirable to generate only a small set of kernels
+ (ideally only one) and to keep the system-specific part of
+ configuration information as small as possible. In this case, a common
+ initrd could be generated with all the necessary modules. Then, only
+ /sbin/init or a file read by it would have to be different.
+
+ A third scenario is more convenient recovery disks, because information
+ like the location of the root FS partition doesn't have to be provided
+ at boot time, but the system loaded from initrd can invoke a
+ user-friendly dialog and it can also perform some sanity checks (or
+ even some form of auto-detection).
+
+ Last not least, CD-ROM distributors may use it for better installation
+ from CD, e.g. by using a boot floppy and bootstrapping a bigger RAM
+ disk via initrd from CD; or by booting via a loader like LOADLIN or
+ directly from the CD-ROM, and loading the RAM disk from CD without need
+ of floppies.
+
+Obsolete root change mechanism[22]¶
+
+ The following mechanism was used before the introduction of pivot_root.
+ Current kernels still support it, but you should _not_ rely on its
+ continued availability.
+
+ It works by mounting the "real" root device (i.e. the one set with rdev
+ in the kernel image or with root=... at the boot command line) as the
+ root file system when linuxrc exits. The initrd file system is then
+ unmounted, or, if it is still busy, moved to a directory /initrd, if
+ such a directory exists on the new root file system.
+
+ In order to use this mechanism, you do not have to specify the boot
+ command options root, init, or rw. (If specified, they will affect the
+ real root file system, not the initrd environment.)
+
+ If /proc is mounted, the "real" root device can be changed from within
+ linuxrc by writing the number of the new root FS device to the special
+ file /proc/sys/kernel/real-root-dev, e.g.:
+# echo 0x301 >/proc/sys/kernel/real-root-dev
+
+ Note that the mechanism is incompatible with NFS and similar file
+ systems.
+
+ This old, deprecated mechanism is commonly called change_root, while
+ the new, supported mechanism is called pivot_root.
+
+Mixed change_root and pivot_root mechanism[23]¶
+
+ In case you did not want to use root=/dev/ram0 to trigger the
+ pivot_root mechanism, you may create both /linuxrc and /sbin/init in
+ your initrd image.
+
+ /linuxrc would contain only the following:
+#! /bin/sh
+mount -n -t proc proc /proc
+echo 0x0100 >/proc/sys/kernel/real-root-dev
+umount -n /proc
+
+ Once linuxrc exited, the kernel would mount again your initrd as root,
+ this time executing /sbin/init. Again, it would be the duty of this
+ init to build the right environment (maybe using the root= device
+ passed on the cmdline) before the final execution of the real
+ /sbin/init.
+
+Resources[24]¶
+
+ [25][1] Almesberger, Werner; "Booting Linux: The History and the
+ Future" [26]http://www.almesberger.net/cv/papers/ols2k-9.ps.gz
+ [27][2] newlib package (experimental), with initrd example
+ [28]https://www.sourceware.org/newlib/
+ [29][3] util-linux: Miscellaneous utilities for Linux
+ [30]https://www.kernel.org/pub/linux/utils/util-linux/
+
+[31]Table Of Contents
+
+ * [32]Using the initial RAM disk (initrd)
+ + [33]Operation
+ + [34]Boot command-line options
+ + [35]Compressed cpio images
+ + [36]Installation
+ + [37]Changing the root device
+ + [38]Usage scenarios
+ + [39]Obsolete root change mechanism
+ + [40]Mixed change_root and pivot_root mechanism
+ + [41]Resources
+
+Previous topic
+
+ [42]Rules on how to access information in sysfs
+
+Next topic
+
+ [43]Linux Serial Console
+
+This Page
+
+ * [44]Show Source
+
+Quick search
+
+ ____________________ Go
+
+ Enter search terms or a module, class or function name.
+
+Navigation
+
+ * [45]index
+ * [46]next |
+ * [47]previous |
+ * [48]The Linux Kernel 4.11.0-rc4-00191-g7de6e5d documentation »
+ * [49]The Linux kernel user's and administrator's guide »
+
+ © Copyright The kernel development community. Created using [50]Sphinx
+ 1.2.2.
+
+References
+
+ 1. https://people.freedesktop.org/~narmstrong/meson_drm_doc/index.html
+ 2. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/index.html
+ 3. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/serial-console.html
+ 4. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/sysfs-rules.html
+ 5. https://people.freedesktop.org/~narmstrong/meson_drm_doc/genindex.html
+ 6. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/serial-console.html
+ 7. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/sysfs-rules.html
+ 8. https://people.freedesktop.org/~narmstrong/meson_drm_doc/index.html
+ 9. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/index.html
+ 10. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#using-the-initial-ram-disk-initrd
+ 11. mailto:werner.almesberger%40epfl.ch
+ 12. mailto:lermen%40fgan.de
+ 13. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#f1
+ 14. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#operation
+ 15. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#boot-command-line-options
+ 16. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#compressed-cpio-images
+ 17. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#installation
+ 18. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#f2
+ 19. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#changing-the-root-device
+ 20. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#f3
+ 21. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#usage-scenarios
+ 22. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#obsolete-root-change-mechanism
+ 23. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#mixed-change-root-and-pivot-root-mechanism
+ 24. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#resources
+ 25. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#id1
+ 26. http://www.almesberger.net/cv/papers/ols2k-9.ps.gz
+ 27. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#id2
+ 28. https://www.sourceware.org/newlib/
+ 29. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#id3
+ 30. https://www.kernel.org/pub/linux/utils/util-linux/
+ 31. https://people.freedesktop.org/~narmstrong/meson_drm_doc/index.html
+ 32. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html
+ 33. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#operation
+ 34. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#boot-command-line-options
+ 35. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#compressed-cpio-images
+ 36. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#installation
+ 37. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#changing-the-root-device
+ 38. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#usage-scenarios
+ 39. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#obsolete-root-change-mechanism
+ 40. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#mixed-change-root-and-pivot-root-mechanism
+ 41. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/initrd.html#resources
+ 42. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/sysfs-rules.html
+ 43. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/serial-console.html
+ 44. https://people.freedesktop.org/~narmstrong/meson_drm_doc/_sources/admin-guide/initrd.txt
+ 45. https://people.freedesktop.org/~narmstrong/meson_drm_doc/genindex.html
+ 46. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/serial-console.html
+ 47. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/sysfs-rules.html
+ 48. https://people.freedesktop.org/~narmstrong/meson_drm_doc/index.html
+ 49. https://people.freedesktop.org/~narmstrong/meson_drm_doc/admin-guide/index.html
+ 50. http://sphinx-doc.org/
diff --git a/floppy/doc/www.drdobbs.com_80386-protected-mode-initialization_184408010.txt b/floppy/doc/www.drdobbs.com_80386-protected-mode-initialization_184408010.txt
new file mode 100644
index 0000000..d0cf894
--- /dev/null
+++ b/floppy/doc/www.drdobbs.com_80386-protected-mode-initialization_184408010.txt
@@ -0,0 +1,916 @@
+ #[1]Dr. Dobb's All Articles [2]Dr. Dobb's All Articles
+
+ [tr?id=832000476880185&ev=PageView&noscript=1]
+
+ (BUTTON) Informa
+
+ Dr. Dobb's is part of the Informa Tech Division of Informa PLC
+ * [3]Informa PLC
+ * [4]About us
+ * [5]Investor relations
+ * [6]Talent
+
+ This site is operated by a business or businesses owned by Informa PLC
+ and all copyright resides with them. Informa PLC's registered office is
+ 5 Howick Place, London SW1P 1WG. Registered in England and Wales.
+ Number 8860726.
+
+ * [7]Subscribe
+ * [8]Newsletters
+ * [9]Digital Library
+ * [10]RSS
+
+ * ________________________________________
+ * Submit
+
+ Search: (*) Site ( ) Source Code
+
+ * [11]Home
+ * [12]Articles
+ * [13]News
+ * [14]Blogs
+ * [15]Source Code
+ * [16]Webinars & Events
+
+ * [17]Facebook
+ * [18]Twitter
+
+ Sections v
+ * [19]Home
+ * [20]Articles
+ * [21]News
+ * [22]Blogs
+ * [23]Source Code
+ * [24]Webinars & Events
+
+ * [25]Cloud
+ * [26]Mobile
+ * [27]Parallel
+ * [28].NET
+ * [29]JVM Languages
+ * [30]C/C++
+ * [31]Tools
+ * [32]Design
+ * [33]Testing
+ * [34]Web Dev
+ * [35]Jolt Awards
+
+ Channels v
+ * [36]Cloud
+ * [37]Mobile
+ * [38]Parallel
+ * [39].NET
+ * [40]JVM Languages
+ * [41]C/C++
+ * [42]Tools
+ * [43]Design
+ * [44]Testing
+ * [45]Web Dev
+ * [46]Jolt Awards
+
+ [47]RSS
+
+ [48]Tweet
+ [49][share_email_icon.gif] [50][share_print_icon.gif] [51]Permalink
+
+80386 Protected Mode Initialization
+
+ By Neal Margulis, October 01, 1988
+
+ In addition to discussing how to get from real- to protected-mode and
+ back, Neal shows how to define greater tan 64K segments, and provides
+ some general comments on the ins and outs of developing 32-bit
+ software.
+
+ Neal Margulis is an applications engineer for Intel Corp. and can be
+ reached at 2625 Walsh Ave., SC4-40, Santa Clara, CA 95051.
+ __________________________________________________________________
+
+ The 32-bit mode of the Intel 80386 and the 80386SX provides significant
+ architectural advantages over the 80286. ln addition, software that
+ takes advantage of these advanced features has significant performance
+ improvements. An application program running in the 80386's native
+ 32-bit mode typically executes from two to six times faster than the
+ equivalent application written for the 80286. Furthermore, programs
+ that manipulate large data structures are easier to write when you use
+ the 32-bit mode of the 80386. Among the features that the 80386
+ provides over the 80286 are support for large segment sizes, 32-bit
+ data operations, and paged memory management.
+
+ The program presented here shows how to initialize the 80386 into
+ protected mode, how to define segments greater than 64K in size, and
+ how to return to real mode. You can use this program as a template for
+ coding applications that use the 80386 features. Although the 80386SX
+ has a reduced physical addressing space of 16 Mbytes (the maximum
+ address space of AT architecture), its programming model is the same as
+ that of the 80386. Thus the template can be used with it as well.
+
+ This article explains how the code works and briefly describes how to
+ adapt the template to suit your individual needs. You may also find it
+ helpful to refer to one of many 80386 programming articles, such as
+ "Programming on the 80386" (DDJ, October 1986). Additional information
+ can be found in the Intel 80386 Programmers Reference Guide and the
+ 80386 Data Sheet, as well as the book Programming the 80386 by Crawford
+ and Gelsinger (Sybex Books).
+
+32-Bit Data Operations
+
+The ability to operate on 32 bits of data adds power to arithmetic and
+logical instructions. While the 80286 generates only 16-bit data, the 80386
+contains eight general-purpose 32-bit registers. Segments for 80386 protected
+mode are set to either use16 or use32, which indicates the default sizes for
+data and addressing. in real mode, the 80386 is limited to only use16
+segments. An override prefix must be designated in order to perform 32-bit
+operations within a protected mode use16 segment. This results in greater
+program length and a possible decrease in performance. The 80386 in protected
+mode allows for both use16 and use32 segments. No override prefixes are
+necessary for 32-bit data operations or 32-bit addressing in a use32 segment.
+In the program shown in [52]Listing One, page 84, CSEG and C3 are use16 code
+segments because they must be executable from real mode, and PMODE segment is
+a use32 code segment.
+
+Large Segments
+
+The 64K limit on the segment size of the 80286 and the real mode 80386 hinder
+the addressing of large data arrays and of long sequences of code. Reloading
+segments is time consuming, disrupts the task at hand, and causes an
+unnatural breakup of procedures and data. The 80386 protected mode allows for
+segments up to 4 gigabytes in size. The base, limit, and granularity fields
+of segment descriptors specify the segment size and location in memory. The
+base represents a linear address and the segment size is determined by the
+limit and the granularity (G) bit. When the G bit is a zero, the actual limit
+is the 20-bit limit field of the descriptor (Maximum size 2^20 = 1 Mbyte). If
+the G bit is a one, then the limit field page granularity is multiplied by
+4K. This gives a maximum limit of 4 gigabytes (2^20 * 2^12). The base's
+linear address is 32-bits long, thus allowing it to be specified anywhere
+within the 4-gigabyte address space.
+
+Segmentation is the basis for protection. Data and code segments can reside
+in separate, nonoverlapping areas of memory. In addition, privilege levels
+assigned to different segments provide a mechanism for limiting access to
+certain data or privileged instruction sequences (for both). The 80386
+provides four privilege levels. In the program presented in [53]Listing One,
+all segments are of the highest privilege level (0). You can change this by
+modifying the segment descriptors and the selectors.
+
+4-Gigabyte Addressing
+
+To use the increased segment sizes, the 80386 has expanded the instruction
+pointer to 32-bits and added new addressing modes. As a result, segment loads
+and stores within a procedure can be eliminated and the entire physical
+address space can be accessed as one segment. The template program sets up a
+data segment that starts at the base of video memory 0B8000H. The entire
+address space is accessible through a segment that begins at zero.
+
+The effective address of a memory operand can be obtained through an absolute
+address or through one of the register-base methods of the following form:
+
+[base register] + [(index register * scale) + displacement]
+
+The 80386 also has page translation by which linear addresses can be resolved
+to physical addresses. Page translation occurs when the PG bit in CR0 is set.
+Two levels of tables are used to address each page of memory. The
+higher-level table is the page directory, which addresses up to 1K
+second-level page tables. These second-level page tables address up to 1K
+pages, each being 4K.
+
+Because all pages are of equal size, page translation can reduce the memory
+fragmentation that occurs when using segmentation for on-demand memory
+allocation. The template program does not use paging, so all linear addresses
+are treated as the physical address.
+
+Setting Up the Descriptor Tables
+
+Before entering protected mode, you must set up descriptor tables and load
+the 80386 with pointers to these tables. While in real mode, the program in
+[54]Listing One sets up a global descriptor table (GDT) and does not require
+a local descriptor table.
+
+Starting at the memory location designated by the label GDT__table,
+successive 8-byte descriptor entries make up the GDT. MASM's STRUC feature
+makes coding of the entries much easier. Because DOS determines the memory
+location of the program at run time, the absolute addresses must also be
+calculated at run time.
+
+The template program determines the bases for each of the segments and the
+pointer to the descriptor table. This table pointer consists of a 32-bit
+linear address and a 16-bit limit.
+
+Such 48-bit (6-byte) objects are sometimes referred to as a PWORD or FWORD
+data type. Using a QWORD (8 bytes), as in this program, helps to maintain
+portability between assemblers.
+
+The Type field of the descriptor determines whether segments that use this
+descriptor contain code or data. Descriptors to specify gates, task state
+segments, and local descriptor tables are also available, but are not used in
+this example.
+
+Entering Protected Mode
+
+Having set up the descriptor table, it is simple to enter protected mode. The
+PE bit of Control Register Zero (CR0) is set to one, and then a jump is
+executed. The jump flushes the prefetch queue, which contains instructions
+that were decoded for execution in real mode. Either a near or a far jump
+will flush the prefetch queue. By using a far jump, the 80386 reloads the
+code segment register (CS) and the internal segment descriptor cache. The far
+jump instruction uses selector 08H, which is GDT entry 1. This is the PMODE
+segment entry. Execution in this segment allows native 32-bit operations.
+(Bits 15 through 3 of the selector determine the GDT table entry. Bit 2 is
+Table indicator, and bits 1 and 0 are the privilege level.)
+
+The Jump instructions are handcoded by using the define byte (DB) assembler
+directive. Opcode 0EAH specifies an intersegment jump, with the next two
+fields of the instruction being the offset and the segment selector operands.
+In this example, all of the offsets are zero because the jump targets are at
+the start of their respective segments. The offset size is either a 16-bit or
+32-bit field. This is determined by the code segment type size in which the
+jump instruction occurs. The segment selector field of the jump instruction
+determines which descriptor table entry is the target segment for the jump.
+
+Returning to Real Mode
+
+Returning to real mode on the 80286 requires that you reset the processor. On
+an PC AT, this means saving the required processor contents, placing a reset
+code in the CMOS RAM, storing a return address in memory, and using the
+keyboard controller to reset the processor. Although 386 based ATs support
+this reset scheme, a much simpler and far faster way to return the 386 to
+real mode is available. In the C3 segment of the example program, the 80386
+is returned to real mode by clearing the PE bit then executing a jump
+instruction to flush the instruction queue. To assure proper operation after
+returning to real mode, the segment registers must be loaded with real mode
+type selectors while still in protected mode. Entry 4 in the GDT represents
+what should be in the segment descriptor caches during real mode. They have a
+64K limit with the base at zero and the top 2 bytes set to zero.
+
+Other Considerations
+
+In the early days of PCs, some programs took advantage of addresses wrapping
+around to zero after the limit of the 8088 was exceeded. When the 80286-based
+AT was introduced, it was necessary to emulate this address wrapping. An
+enable gate was added to address line 20. To prevent unwanted wrapping, you
+must enable this gate. The code for doing this is located in the IBM
+Technical References for the AT and PS/2. The procedures are different
+because the AT uses the keyboard controller to enable the address line. The
+programming example indicates where to insert the procedures for enabling and
+disabling of the address line.
+
+[LISTING ONE]
+<a name="01ca_000c">
+_80386 PROTECTED MODE INITIALIZATION_
+by
+Neal Margulis
+
+comment #*****************************
+Program by Neal Margulis -- Use MASM 5.0
+#*************************************
+
+descriptor STRUC
+ limit_0_15 dw 0 ; lowest 16 bits of segment limit
+ base_0_15 dw 0 ; lowest 16 bits of base
+ base_16_23 db 0 ; base bits 16-23
+ access db 0 ; Present bit, priv. level, type
+ gran db 0 ; G bit, D/B bit , limit bits 16-19
+ base_24_31 db 0 ; base bits 24-31
+descriptor ENDS
+
+code_seg_access equ 09AH ; Present, DPL=0, non-conforming,read/exec
+data_seg_access equ 092H ; Present, DPL=0, Expand-Up,writeable
+
+; have screenbase equal B8000H for EGA or B0000H for monochrome
+screenbase EQU 0B8000H
+screenseg EQU 0B800H
+
+CSEG segment word use16 'code'
+assume cs:CSEG,ds:CSEG
+
+ mov ax,CSEG
+ mov ds, ax
+
+; Make entries in GDT for PMODE segment as code or data
+ mov ax, seg PMODE
+ and eax, 0FFFFh
+ shl eax, 4H
+ mov ebx, eax
+ shr eax, 16
+ mov gdt_PM_1.base_0_15, bx
+ mov gdt_PM_2.base_0_15, bx
+ mov gdt_PM_1.base_16_23,al
+ mov gdt_PM_2.base_16_23,al
+
+; Make entry in GDT for C3 segment as code
+ mov ax,seg C3
+ and eax, 0FFFFH
+ shl eax, 4H
+ mov ebx, eax
+ shr eax, 16
+ mov gdt_c3_5.base_0_15, bx
+ mov gdt_c3_5.base_16_23,al
+
+; Set up gdtr for lgdt instruction
+ mov ax, cs
+ and eax, 0FFFFH
+ shl eax, 4H
+ add eax, offset gdttbl
+ mov dword ptr gdtaddr+2,eax
+ lgdt gdtaddr ; set GDT address
+A20_ON:
+
+ cld ; Clear direction flag
+ cli ; Disable interrupts
+
+; Enter Protected Mode
+ mov eax,cr0
+ or eax,1
+ mov cr0,eax ; Enable protected mode
+
+ ;flush prefetch queue
+ DB 0EAH,0H,0H,08H,0H ; jmp to PMODE and execute
+
+gdtaddr label qword
+ dw 48
+ dd ?
+ dw 0
+
+; global descriptor table
+
+gdttbl label dword
+gdt_null descriptor <,,,,,> ; GDT entry 0 (null descriptor)
+gdt_PM_1 descriptor <0FFFFH,,,code_seg_access,0C0H,0> ; D bit
+ON
+gdt_PM_2 descriptor <0FFFFH,,,data_seg_access,08FH,> ;
+gdt_3 descriptor <0FFFFH,0,0,data_seg_access,08FH,0>
+gdt_rm_4 descriptor <0FFFFH,0,0,data_seg_access,08fH,0>
+gdt_c3_5 descriptor <0FFFFH,,,code_seg_access,080H,0> ; D bit
+OFF
+
+CSEG ends
+
+PMODE segment para public use32 'code'
+ assume cs:PMODE
+ mov ax, 18h ;selector 18H is 4 Gigabyte data
+segment with
+ ;
+base at 0
+ mov es, ax
+ mov fs, ax
+ mov ax, 10h ; Data segment with base at 'c2seg'
+ mov ds, ax
+ mov cx, 025h
+ mov edi,screenbase ; Addressing screen memory from
+protected mode
+display:mov byte ptr es:[edi],'P'
+ add edi,2
+ mov byte ptr es:[edi],'M'
+ add edi,2
+ mov byte ptr es:[edi],' '
+ add edi,2
+ loopne display
+
+ db 0eah, 0h, 0h, 0h, 0h,28h, 0h ; jmp to c3 and
+execute
+
+align 16
+
+ pdat db 0ach
+lastpm label dword
+PMODE ends
+
+c3 segment para public use16 'code'
+ assume cs:c3
+
+ mov ax, 20h ; Change segments back to have valid
+ mov es, ax ; real mode attributes.
+ mov ds, ax
+ mov fs, ax
+ mov eax,cr0
+ and eax, 07ffffffeh
+ mov cr0,eax ; enter real mode
+ jmp far ptr flushrl ; flush queue
+ flushrl:
+ mov ax, screenseg ; Address screen memory from real mode
+ mov ds, ax
+ sub edi, 0b8000h
+ mov si,di
+ mov byte ptr ds:[si],'C' ; Write to screen
+ add si,2
+ mov byte ptr ds:[si],'3'
+
+A20_off:
+
+ mov ah, 04ch ; DOS termination
+ mov al, 01h
+ int 21h
+c3 ends
+
+end
+
+
+
+
+
+
+
+
+
+ Related Reading
+
+ * [55]News
+ * [56]Commentary
+
+News
+
+ * [57]Tools To Build Payment-Enabled Mobile Apps
+ * [58]Parasoft DevTest Shifts To Continuous
+ * [59]A Datacenter Operating System For Data Developers
+ * [60]XMind 6 Public Beta Now Available[61]More News»
+
+Commentary
+
+ * [62]biicode 2.0 Is Buzzing
+ * [63]Things That Go Boom
+ * [64]Application Intelligence For Advanced Dummies
+ * [65]Devart dbForge Studio For MySQL With Phrase Completion[66]More
+ Commentary»
+
+ * [67]Slideshow
+ * [68]Video
+
+Slideshow
+
+ * [69]Jolt Awards: The Best Books
+ * [70]Developer Reading List
+ * [71]The Most Underused Compiler Switches in Visual C++
+ * [72]Jolt Awards: Coding Tools[73]More Slideshows»
+
+Video
+
+ * [74]Verizon App Challenge Winners
+ * [75]IBM Mobile Developer Challenge
+ * [76][email protected] Showcase
+ * [77]Connected Vehicles[78]More Videos»
+
+ * [79]Most Popular
+
+Most Popular
+
+ * [80]RESTful Web Services: A Tutorial
+ * [81]Lambda Expressions in Java 8
+ * [82]Developer Reading List: The Must-Have Books for JavaScript
+ * [83]An Algorithm for Compressing Space and Time[84]More Popular»
+ __________________________________________________________________
+
+ More Insights
+
+White Papers
+
+ * [85]Maximize the Human Potential of Your SOC
+ * [86]Real-time Endpoint Security with Automated Incident Response
+
+ [87]More >>
+
+Reports
+
+ * [88]Proven Success Factors for Endpoint Security
+ * [89]Intel 471 Breach Report
+
+ [90]More >>
+
+Webcasts
+
+ * [91]4 Tips for Enabling Collaboration Among Remote Designers
+ * [92]Why We're Still Stuck on Passwords
+
+ [93]More >>
+ __________________________________________________________________
+
+ INFO-LINK
+ *
+ *
+ *
+ *
+
+ [dobbs_disqus_logo.gif]
+
+Currently we allow the following HTML tags in comments:
+
+Single tags
+
+ These tags can be used alone and don't need an ending tag.
+
+ <br> Defines a single line break
+ <hr> Defines a horizontal line
+
+Matching tags
+
+ These require an ending tag - e.g. <i>italic text</i>
+
+ <a> Defines an anchor
+ <b> Defines bold text
+ <big> Defines big text
+ <blockquote> Defines a long quotation
+ <caption> Defines a table caption
+ <cite> Defines a citation
+ <code> Defines computer code text
+ <em> Defines emphasized text
+ <fieldset> Defines a border around elements in a form
+ <h1> This is heading 1
+ <h2> This is heading 2
+ <h3> This is heading 3
+ <h4> This is heading 4
+ <h5> This is heading 5
+ <h6> This is heading 6
+ <i> Defines italic text
+ <p> Defines a paragraph
+ <pre> Defines preformatted text
+ <q> Defines a short quotation
+ <samp> Defines sample computer code text
+ <small> Defines small text
+ <span> Defines a section in a document
+ <s> Defines strikethrough text
+ <strike> Defines strikethrough text
+ <strong> Defines strong text
+ <sub> Defines subscripted text
+ <sup> Defines superscripted text
+ <u> Defines underlined text
+
+ Dr. Dobb's encourages readers to engage in spirited, healthy debate,
+ including taking us to task. However, Dr. Dobb's moderates all comments
+ posted to our site, and reserves the right to modify or remove any
+ content that it determines to be derogatory, offensive, inflammatory,
+ vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr.
+ Dobb's further reserves the right to disable the profile of any
+ commenter participating in said activities.
+
+ Disqus Tips To upload an avatar photo, first [94]complete your Disqus
+ profile. | [95]View the list of supported HTML tags you can use to
+ style comments. | Please read our [96]commenting policy.
+
+Recent Articles
+
+ * [97]Dr. Dobb's Archive
+ * [98]Farewell, Dr. Dobb's
+ * [99]Jolt Awards 2015: Coding Tools
+ * [100]Thriving Among the APIs
+ * [101]The Long Death of Project Hosting Sites
+
+Most Popular
+
+ [102]Stories [103]Blogs
+ * [104]RESTful Web Services: A Tutorial
+ * [105]Lambda Expressions in Java 8
+ * [106]Developer Reading List: The Must-Have Books for JavaScript
+ * [107]An Algorithm for Compressing Space and Time
+ * [108]Why Build Your Java Projects with Gradle Rather than Ant or
+ Maven?
+ *
+ *
+
+ * [109]Read/Write Properties Files in Java
+ * [110]Coding the JavaFX TableView
+ * [111]Easy DOM Parsing in Java
+ * [112]C++11: unique_ptr
+ * [113]Making HTTP Requests From Java
+ *
+ *
+
+This month's Dr. Dobb's Journal
+
+ [114]Dr. Dobb's Digital Digest - October 2014
+
+ [115]This month, Dr. Dobb's Journal is devoted to mobile programming.
+ We introduce you to Apple's new Swift programming language, discuss the
+ perils of being the third-most-popular mobile platform, revisit SQLite
+ on Android , [116]and much more!
+ [117]Download the latest issue today. >>
+
+Upcoming Events
+
+ [118]Live Events [119]WebCasts
+ * [120][FREE Virtual Event] The Identity Crisis -
+
+ [121]4 Tips for Enabling Collaboration Among Remote Designers
+
+ [122]Tips for Keeping Your Enterprises' Password Stores Safe
+
+ [123]Why We're Still Stuck on Passwords
+
+ [124]Tools for Better Network Monitoring and Observability
+
+ [125]The ROI Story: Identifying & Justifying Disruptive Technology
+
+ [126]More Webcasts>>
+
+Featured Reports
+
+
+
+ [127]What's this?
+ * [128]AI-Driven Testing: Bridging the Software Automation Gap
+ * [129]2021 Digital Transformation Report
+ * [130]Increased Cooperation Between Access Brokers, Ransomware
+ Operators Reviewed
+ * [131]SANS 2021 Cloud Security Survey
+ * [132]The Infoblox Q1 2021 Cyberthreat Intelligence Report
+
+ [133]More >>
+ [smartbox.PNG]
+
+Featured Whitepapers
+
+
+
+ [134]What's this?
+ * [135]Maximize the Human Potential of Your SOC
+ * [136]Modernize your Security Operations with Human-Machine
+ Intelligence
+ * [137]AI in Cybersecurity: Using artificial intelligence to mitigate
+ emerging security risks
+ * [138]Avoid Unplanned Downtime From Ransomware
+ * [139]Real-time Endpoint Security with Automated Incident Response
+
+ [140]More >>
+ [smartbox.PNG]
+
+Most Recent Premium Content
+
+ [141]Digital Issues
+ 2014
+ Dr. Dobb's Journal
+ * [142]November - Mobile Development
+ * [143]August - Web Development
+ * [144]May - Testing
+ * [145]February - Languages
+ Dr. Dobb's Tech Digest
+ * [146]DevOps
+ * [147]Open Source
+ * [148]Windows and .NET programming
+ * [149]The Design of Messaging Middleware and 10 Tips from Tech
+ Writers
+ * [150]Parallel Array Operations in Java 8 and Android on x86: Java
+ Native Interface and the Android Native Development Kit
+ 2013
+ * [151]January - Mobile Development
+ * [152]February - Parallel Programming
+ * [153]March - Windows Programming
+ * [154]April - Programming Languages
+ * [155]May - Web Development
+ * [156]June - Database Development
+ * [157]July - Testing
+ * [158]August - Debugging and Defect Management
+ * [159]September - Version Control
+ * [160]October - DevOps
+ * [161]November- Really Big Data
+ * [162]December - Design
+ 2012
+ * [163]January - C & C++
+ * [164]February - Parallel Programming
+ * [165]March - Microsoft Technologies
+ * [166]April - Mobile Development
+ * [167]May - Database Programming
+ * [168]June - Web Development
+ * [169]July - Security
+ * [170]August - ALM & Development Tools
+ * [171]September - Cloud & Web Development
+ * [172]October - JVM Languages
+ * [173]November - Testing
+ * [174]December - DevOps
+
+ IFRAME: [175]https://www.googletagmanager.com/ns.html?id=GTM-MMJM4JC
+
+ Discover more from Informa Tech
+ * [176]InformationWeek
+ * [177]Interop
+ * [178]Dark Reading
+ * [179]Data Center Knowledge
+ * [180]Network Computing
+ * [181]IT Pro Today
+
+ Working With Us
+ * [182]Contact Us
+ * [183]About Us
+ * [184]Advertise
+ * [185]Reprints
+
+ Follow Dr. Dobb's on Social
+ *
+ *
+ *
+ *
+
+ alt text of the logo
+ * [186]Home
+ * [187]Cookie Policy
+ * [188]CCPA: Do not sell my personal info
+ * [189]Privacy
+ * [190]Terms
+
+ Copyright © 2022 Informa PLC. Informa PLC is registered in England and
+ Wales with company number 8860726 whose registered and head office is 5
+ Howick Place, London, SW1P 1WG.
+
+References
+
+ Visible links:
+ 1. https://www.drdobbs.com/rss/all
+ 2. https://www.drdobbs.com/rss/all
+ 3. https://informa.com/
+ 4. https://informa.com/About-Us/
+ 5. https://informa.com/Investors/
+ 6. https://informa.com/Talent/
+ 7. https://www.drdobbs.com/subscribe/
+ 8. https://www.informationweek.com/profile.asp?update_newsletter=t
+ 9. https://www.informationweek.com/whitepaper/topic/developer
+ 10. https://www.drdobbs.com/rss/
+ 11. https://www.drdobbs.com/
+ 12. https://www.drdobbs.com/articles
+ 13. https://www.drdobbs.com/news
+ 14. https://www.drdobbs.com/blogs
+ 15. https://www.drdobbs.com/sourcecode
+ 16. http://www.informationweek.com/events/d/d-id/898857
+ 17. https://www.facebook.com/pages/Dr-Dobbs/17631669579
+ 18. https://twitter.com/dr_dobbs
+ 19. https://www.drdobbs.com/
+ 20. https://www.drdobbs.com/articles
+ 21. https://www.drdobbs.com/news
+ 22. https://www.drdobbs.com/blogs
+ 23. https://www.drdobbs.com/sourcecode
+ 24. http://www.informationweek.com/events/d/d-id/898857
+ 25. https://www.drdobbs.com/cloud
+ 26. https://www.drdobbs.com/mobile
+ 27. https://www.drdobbs.com/parallel
+ 28. https://www.drdobbs.com/windows
+ 29. https://www.drdobbs.com/jvm
+ 30. https://www.drdobbs.com/cpp
+ 31. https://www.drdobbs.com/tools
+ 32. https://www.drdobbs.com/architecture-and-design
+ 33. https://www.drdobbs.com/testing
+ 34. https://www.drdobbs.com/web-development
+ 35. https://www.drdobbs.com/joltawards
+ 36. https://www.drdobbs.com/cloud
+ 37. https://www.drdobbs.com/mobile
+ 38. https://www.drdobbs.com/parallel
+ 39. https://www.drdobbs.com/windows
+ 40. https://www.drdobbs.com/jvm
+ 41. https://www.drdobbs.com/cpp
+ 42. https://www.drdobbs.com/tools
+ 43. https://www.drdobbs.com/architecture-and-design
+ 44. https://www.drdobbs.com/testing
+ 45. https://www.drdobbs.com/web-development
+ 46. https://www.drdobbs.com/joltawards
+ 47. https://www.drdobbs.com/rss
+ 48. https://twitter.com/share
+ 49. javascript:emailLauncher('/email?articleUrl=','/80386-protected-mode-initialization/184408010')
+ 50. https://www.drdobbs.com/article/print?articleId=184408010&siteSectionName=
+ 51. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 52. https://www.drdobbs.com/80386-protected-mode-initialization/8810c.htm#01ca_000b
+ 53. https://www.drdobbs.com/80386-protected-mode-initialization/8810c.htm#01ca_000b
+ 54. https://www.drdobbs.com/80386-protected-mode-initialization/8810c.htm#01ca_000b
+ 55. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#toc-news
+ 56. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#toc-commentary
+ 57. https://www.drdobbs.com/cloud/tools-to-build-payment-enabled-mobile-ap/240169446?cid=SBX_ddj_related_news_default_80386_protected_mode_initialization&itc=SBX_ddj_related_news_default_80386_protected_mode_initialization
+ 58. https://www.drdobbs.com/tools/parasoft-devtest-shifts-to-continuous/240169403?cid=SBX_ddj_related_news_default_80386_protected_mode_initialization&itc=SBX_ddj_related_news_default_80386_protected_mode_initialization
+ 59. https://www.drdobbs.com/database/a-datacenter-operating-system-for-data-d/240169391?cid=SBX_ddj_related_news_default_80386_protected_mode_initialization&itc=SBX_ddj_related_news_default_80386_protected_mode_initialization
+ 60. https://www.drdobbs.com/tools/xmind-6-public-beta-now-available/240169385?cid=SBX_ddj_related_news_default_80386_protected_mode_initialization&itc=SBX_ddj_related_news_default_80386_protected_mode_initialization
+ 61. https://www.drdobbs.com/news?cid=SBX_ddj_related_news_default_80386_protected_mode_initialization&itc=SBX_ddj_related_news_default_80386_protected_mode_initialization
+ 62. https://www.drdobbs.com/cpp/biicode-20-is-buzzing/240169447?cid=SBX_ddj_related_commentary_default_80386_protected_mode_initialization&itc=SBX_ddj_related_commentary_default_80386_protected_mode_initialization
+ 63. https://www.drdobbs.com/embedded-systems/things-that-go-boom/240169445?cid=SBX_ddj_related_commentary_default_80386_protected_mode_initialization&itc=SBX_ddj_related_commentary_default_80386_protected_mode_initialization
+ 64. https://www.drdobbs.com/tools/application-intelligence-for-advanced-du/240169443?cid=SBX_ddj_related_commentary_default_80386_protected_mode_initialization&itc=SBX_ddj_related_commentary_default_80386_protected_mode_initialization
+ 65. https://www.drdobbs.com/tools/devart-dbforge-studio-for-mysql-with-phr/240169414?cid=SBX_ddj_related_commentary_default_80386_protected_mode_initialization&itc=SBX_ddj_related_commentary_default_80386_protected_mode_initialization
+ 66. https://www.drdobbs.com/articles?cid=SBX_ddj_related_commentary_default_80386_protected_mode_initialization&itc=SBX_ddj_related_commentary_default_80386_protected_mode_initialization
+ 67. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#toc-slideshow
+ 68. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#toc-video
+ 69. https://www.drdobbs.com/joltawards/jolt-awards-the-best-books/240169070?cid=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization&itc=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization
+ 70. https://www.drdobbs.com/architecture-and-design/developer-reading-list/240168591?cid=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization&itc=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization
+ 71. https://www.drdobbs.com/cpp/the-most-underused-compiler-switches-in/240166599?cid=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization&itc=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization
+ 72. https://www.drdobbs.com/joltawards/jolt-awards-coding-tools/240165725?cid=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization&itc=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization
+ 73. https://www.drdobbs.com/slideshows?cid=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization&itc=SBX_ddj_related_slideshow_default_80386_protected_mode_initialization
+ 74. https://www.drdobbs.com/mobile/verizon-app-challenge-winners/240166966?cid=SBX_ddj_related_video_default_80386_protected_mode_initialization&itc=SBX_ddj_related_video_default_80386_protected_mode_initialization
+ 75. https://www.drdobbs.com/mobile/ibm-mobile-developer-challenge/240166310?cid=SBX_ddj_related_video_default_80386_protected_mode_initialization&itc=SBX_ddj_related_video_default_80386_protected_mode_initialization
+ 76. https://www.drdobbs.com/architecture-and-design/researchintel-showcase/240157932?cid=SBX_ddj_related_video_default_80386_protected_mode_initialization&itc=SBX_ddj_related_video_default_80386_protected_mode_initialization
+ 77. https://www.drdobbs.com/architecture-and-design/connected-vehicles/240148293?cid=SBX_ddj_related_video_default_80386_protected_mode_initialization&itc=SBX_ddj_related_video_default_80386_protected_mode_initialization
+ 78. https://www.drdobbs.com/video/archives?cid=SBX_ddj_related_video_default_80386_protected_mode_initialization&itc=SBX_ddj_related_video_default_80386_protected_mode_initialization
+ 79. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#toc-most-popular
+ 80. https://www.drdobbs.com/web-development/restful-web-services-a-tutorial/240169069?cid=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization&itc=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization
+ 81. https://www.drdobbs.com/jvm/lambda-expressions-in-java-8/240166764?cid=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization&itc=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization
+ 82. https://www.drdobbs.com/tools/developer-reading-list-the-must-have-boo/240148421?cid=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization&itc=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization
+ 83. https://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478?cid=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization&itc=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization
+ 84. https://www.drdobbs.com/?cid=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization&itc=SBX_ddj_related_mostpopular_default_80386_protected_mode_initialization
+ 85. https://www.informationweek.com/whitepaper/security-management-and-analytics/cybersecurity/maximize-the-human-potential-of-your-soc/439363?cid=SBX_ddj_well_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_well_wp_default_80386_protected_mode_initialization
+ 86. https://www.informationweek.com/whitepaper/cybersecurity/security/real-time-endpoint-security-with-automated-incident-response/435543?cid=SBX_ddj_well_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_well_wp_default_80386_protected_mode_initialization
+ 87. https://www.drdobbs.com/whitepaper/all/more.html?cid=SBX_ddj_well_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_well_wp_default_80386_protected_mode_initialization
+ 88. https://www.informationweek.com/whitepaper/cybersecurity/endpoint-security/proven-success-factors-for-endpoint-security/429043?cid=SBX_ddj_well_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_well_Analytics_default_80386_protected_mode_initialization
+ 89. https://www.informationweek.com/whitepaper/cybersecurity/risk-management-security/intel-471-breach-report/429143?cid=SBX_ddj_well_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_well_Analytics_default_80386_protected_mode_initialization
+ 90. https://www.drdobbs.com/analytics/all/more.html?cid=SBX_ddj_well_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_well_Analytics_default_80386_protected_mode_initialization
+ 91. https://informationweek.tradepub.com/c/pubRD.mpl?secure=1&sr=pp&_t=pp:&qf=w_defa2717&ch=sbx&cid=SBX_ddj_well_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_well_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_WL
+ 92. https://interop.com/july19-event?keycode=sbx&cid=SBX_ddj_well_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_well_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_WL
+ 93. https://www.drdobbs.com/webcast/all/more.html?cid=SBX_ddj_well_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_well_Webcast_default_80386_protected_mode_initialization
+ 94. https://disqus.com/dashboard/
+ 95. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 96. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 97. https://www.drdobbs.com/architecture-and-design/dr-dobbs-archive/240169474
+ 98. https://www.drdobbs.com/architecture-and-design/farewell-dr-dobbs/240169421
+ 99. https://www.drdobbs.com/joltawards/jolt-awards-2015-coding-tools/240169420
+ 100. https://www.drdobbs.com/architecture-and-design/thriving-among-the-apis/240169441
+ 101. https://www.drdobbs.com/web-development/the-long-death-of-project-hosting-sites/240169394
+ 102. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 103. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 104. https://www.drdobbs.com/web-development/restful-web-services-a-tutorial/240169069
+ 105. https://www.drdobbs.com/jvm/lambda-expressions-in-java-8/240166764
+ 106. https://www.drdobbs.com/tools/developer-reading-list-the-must-have-boo/240148421
+ 107. https://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478
+ 108. https://www.drdobbs.com/jvm/why-build-your-java-projects-with-gradle/240168608
+ 109. https://www.drdobbs.com/jvm/readwrite-properties-files-in-java/231000005
+ 110. https://www.drdobbs.com/jvm/coding-the-javafx-tableview/240001874
+ 111. https://www.drdobbs.com/jvm/easy-dom-parsing-in-java/231002580
+ 112. https://www.drdobbs.com/cpp/c11-uniqueptr/240002708
+ 113. https://www.drdobbs.com/jvm/making-http-requests-from-java/240160966
+ 114. https://www.drdobbs.com/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm
+ 115. https://www.drdobbs.com/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm
+ 116. https://www.drdobbs.com/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm
+ 117. https://www.drdobbs.com/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm
+ 118. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#tab_live-events
+ 119. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#tab_webcasts
+ 120. https://www.interop.com/july19-event?keycode=sbx&cid=SBX_ddj_fture_LiveEvent_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_LiveEvent_default_80386_protected_mode_initialization
+ 121. https://informationweek.tradepub.com/c/pubRD.mpl?secure=1&sr=pp&_t=pp:&qf=w_defa2717&ch=sbx&cid=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_FT
+ 122. https://interop.com/july19-event?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_FT
+ 123. https://interop.com/july19-event?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_FT
+ 124. https://networkcomputing.tradepub.com/c/pubRD.mpl?secure=1&sr=pp&_t=pp:&pc=w_defa2542&ch=sbx&cid=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_FT
+ 125. https://webinar.informationweek.com/5876?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization&K=SBX_DDJ_FT
+ 126. https://www.drdobbs.com/webcast/all/more.html?cid=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization?itc=SBX_ddj_fture_Webcast_default_80386_protected_mode_initialization
+ 127. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 128. https://www.informationweek.com/whitepaper/operating-systems/application-acceleration/ai-driven-testing-bridging-the-software-automation-gap/436523?keycode=sbx&cid=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization
+ 129. https://www.informationweek.com/whitepaper/executive-insights-and-innovation/it-strategy/2021-digital-transformation-report/428703?cid=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization
+ 130. https://www.informationweek.com/whitepaper/cybersecurity/risk-management-security/increased-cooperation-between-access-brokers,-ransomware-operators-reviewed/429153?cid=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization
+ 131. https://www.informationweek.com/whitepaper/cybersecurity/cloud-security/sans-2021-cloud-security-survey/429583?cid=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization
+ 132. https://www.informationweek.com/whitepaper/network-and-perimeter-security/cloud-infrastructure/the-infoblox-q1-2021-cyberthreat-intelligence-report/429503?cid=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization
+ 133. https://www.drdobbs.com/analytics/all/more.html?cid=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization?itc=SBX_ddj_fture_Analytics_default_80386_protected_mode_initialization
+ 134. https://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 135. https://www.informationweek.com/whitepaper/security-management-and-analytics/cybersecurity/maximize-the-human-potential-of-your-soc/439363?cid=SBX_ddj_fture_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_wp_default_80386_protected_mode_initialization
+ 136. https://www.informationweek.com/whitepaper/security-management-and-analytics/cybersecurity/modernize-your-security-operations-with-human-machine-intelligence/438993?cid=SBX_ddj_fture_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_wp_default_80386_protected_mode_initialization
+ 137. https://www.informationweek.com/whitepaper/security-management-and-analytics/cybersecurity/ai-in-cybersecurity-using-artificial-intelligence-to-mitigate-emerging-security-risks/438983?cid=SBX_ddj_fture_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_wp_default_80386_protected_mode_initialization
+ 138. https://www.informationweek.com/whitepaper/cybersecurity/security/avoid-unplanned-downtime-from-ransomware/435553?cid=SBX_ddj_fture_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_wp_default_80386_protected_mode_initialization
+ 139. https://www.informationweek.com/whitepaper/cybersecurity/security/real-time-endpoint-security-with-automated-incident-response/435543?cid=SBX_ddj_fture_wp_default_80386_protected_mode_initialization&itc=SBX_ddj_fture_wp_default_80386_protected_mode_initialization
+ 140. https://www.drdobbs.com/whitepaper/all/more.html?cid=SBX_ddj_fture_wp_default_80386_protected_mode_initialization?itc=SBX_ddj_fture_wp_default_80386_protected_mode_initialization
+ 141. https://www.drdobbs.com/digitaledition/
+ 142. https://www.drdobbs.com/digital/20141022
+ 143. https://dc.ubm-us.com/i/350594
+ 144. https://dc.ubm-us.com/i/300036/
+ 145. https://dc.ubm-us.com/i/245989
+ 146. https://www.drdobbs.com/digital/20140813
+ 147. https://www.drdobbs.com/digital/20140626
+ 148. https://www.drdobbs.com/digital/20140514/
+ 149. https://www.drdobbs.com/digital/012914/
+ 150. https://www.drdobbs.com/digital/022614
+ 151. https://www.drdobbs.com/digital/121712/?cid=ddj_premium_January2013
+ 152. https://www.drdobbs.com/digital/012213/?cid=ddj_premium_February2013
+ 153. https://www.drdobbs.com/digital/022513/?cid=ddj_premium_March2013
+ 154. https://www.drdobbs.com/digital/032513/?cid=ddj_premium_April2013
+ 155. https://www.drdobbs.com/digital/042213/?cid=ddj_premium_May2013
+ 156. https://www.drdobbs.com/digital/052013/?cid=ddj_premium_June2013
+ 157. https://www.drdobbs.com/digital/062413/?cid=ddj_premium_July2013
+ 158. https://www.drdobbs.com/digital/072213/?cid=ddj_premium_August2013
+ 159. https://www.drdobbs.com/digital/082613
+ 160. https://www.drdobbs.com/digital/092313/
+ 161. https://www.drdobbs.com/digital/102113
+ 162. https://www.drdobbs.com/digital/111113?k=ddjtm&cid=onedit_ds_ddjtm
+ 163. https://www.drdobbs.com/digital/121911/?cid=ddj_premium_January2012
+ 164. https://www.drdobbs.com/digital/011912/?cid=ddj_premium_February2012
+ 165. https://www.drdobbs.com/digital/021912/?cid=ddj_premium_March2012
+ 166. https://www.drdobbs.com/digital/031912/?cid=ddj_premium_April2012
+ 167. https://www.drdobbs.com/digital/042312/?cid=ddj_premium_May2012
+ 168. https://www.drdobbs.com/digital/052112/?cid=ddj_premium_June2012
+ 169. https://www.drdobbs.com/digital/061812/?cid=ddj_premium_July2012
+ 170. https://www.drdobbs.com/digital/072312/?cid=ddj_premium_August2012
+ 171. https://www.drdobbs.com/digital/082012/?cid=ddj_premium_September2012
+ 172. https://www.drdobbs.com/digital/092412/?cid=ddj_premium_October2012
+ 173. https://www.drdobbs.com/digital/102212/?cid=ddj_premium_November2012
+ 174. https://www.drdobbs.com/digital/111912/?cid=ddj_premium_December2012
+ 175. https://www.googletagmanager.com/ns.html?id=GTM-MMJM4JC
+ 176. https://www.informationweek.com/
+ 177. https://www.interop.com/
+ 178. https://www.darkreading.com/
+ 179. https://www.datacenterknowledge.com/
+ 180. https://www.networkcomputing.com/
+ 181. https://www.itprotoday.com/
+ 182. https://informationweek.com/about-us/d/d-id/705542
+ 183. https://informationweek.com/document.asp?doc_id=705542
+ 184. https://informationweek.com/document.asp?doc_id=1334603
+ 185. https://info.wrightsmedia.com/informa-licensing-reprints-request
+ 186. https://tech.informa.com/
+ 187. https://tech.informa.com/cookie-policy
+ 188. https://privacyportal-eu-cdn.onetrust.com/dsarwebform/c1f53e84-9f05-4169-a854-85052b63c50b/5f26b553-52cc-4973-a761-295d5634a6b6.html
+ 189. https://tech.informa.com/privacy-policy
+ 190. https://tech.informa.com/terms-and-conditions
+
+ Hidden links:
+ 192. https://www.addthis.com/bookmark.php?v=250&winname=addthis&pub=Dr.Dobbs&source=tbx-250&lng=en-US&s=stumbleupon&url=https://www.drdobbs.com/80386-protected-mode-initialization/184408010&title=80386%20Protected%20Mode%20Initialization&ate=AT-Dr.Dobbs/-/fs-0/4d4fc3809f4d8545/1&sms_ss=1&at_xt=1&CXNID=2000001.5215456080540439074NXC&pre=http%3A%2F%2Fwww.drdobbs.com%2F&tt=0
+ 193. https://www.drdobbs.com/80386-protected-mode-initialization/184408010#disqus_thread
+ 194. https://www.drdobbs.com/
+ 195. https://www.drdobbs.com/
+ 196. https://www.drdobbs.com/
+ 197. https://www.drdobbs.com/
+ 198. https://www.facebook.com/informationweek
+ 199. https://twitter.com/InformationWeek
+ 200. https://www.linkedin.com/company/3930/admin/
+ 201. https://www.drdobbs.com/rss/
+ 202. https://www.omniture.com/
diff --git a/floppy/doc/www.insentricity.com_a.cl_283.txt b/floppy/doc/www.insentricity.com_a.cl_283.txt
new file mode 100644
index 0000000..dd97bad
--- /dev/null
+++ b/floppy/doc/www.insentricity.com_a.cl_283.txt
@@ -0,0 +1,808 @@
+[1]Insentricity Logo
+
+ * [2]Coin-op
+ * [3]Computers
+ * [4]Electronics
+ * [5]Gaming
+ * [6]Misc
+ * [7]Woodworking
+
+ * [8]Computers ->
+ * [9]Retro ->
+
+ * Published on | Jul 06, 2020 | by FozzTexx
+
+ [14959.png]
+
+Booting a 486 From Floppy with the Most Up-to-Date Stable Linux Kernel
+
+ IFRAME: [10]https://www.youtube.com/embed/oBeE_z4HTwg
+
+ Back in August of 2019 I had a [11]Sing-Along Week contest on
+ RetroBattlestations with the challenge of playing a MIDI file
+ synchronized to a speech synthesizer singing the lyrics. In my stash of
+ cards I found an MQX-32M MIDI card (Roland MPU-401 clone) which I
+ wanted to use for converting MIDI signals to interface to an Apple II+
+ with an Echo II speech synthesizer, but ended up using a laptop with a
+ USB MIDI interface. The [12]Pizza Week contest made me more interested
+ in finding a 486 in a pizza box case and so my search began for a
+ suitable case.
+
+ Searching eBay wasn't easy because there's not really a good search
+ term that would find the kind of case I wanted. I didn't bother trying
+ to make a saved search since this project wasn't a high priority.
+ Instead every once in a while something would inspire to go hit eBay
+ and try some other search terms. A couple of weeks ago I spotted this
+ 486 and made a guess of the size based on the size of the 5.25" bay.
+ It's fairly slim, it has a riser card to turn the cards sideways and
+ the case is shorter than an ISA card, but I don't feel like it's slim
+ enough to call it a pizza box. It's close though!
+
+ The motherboard is a [13]TMC PAT48PG4 and it came with 32MB of RAM
+ (technically 36MB, it had four 30 pin SIMMs in it too) and 4 cards:
+ VGA, SoundBlaster, modem, and multi-function IO. The seller had tested
+ it and was sold as non-working, won't POST, although he said the cards
+ all worked. I mostly wanted it for the case so I wasn't concerned. Of
+ course when I got it I had to see if the motherboard was really dead.
+ It didn't work for me either but then I discovered if I hit the reset
+ button it would give me some error beeps. I tried another power supply
+ and it came up after hitting reset! It still doesn't cold boot when
+ powered on, not sure if there's a bad cap or if the very slight battery
+ damage (battery was removed before I got it) is preventing the reset
+ line from being pulled after power on. Nonetheless it was working
+ enough that I needed to explore its capabilities more.
+
+ My ultimate goal is to get a very recent Linux distro and Python 3
+ installed to a "large" hard drive, but being that this is a 486
+ installing a current Linux distro isn't trivial. The only Linux distros
+ that still support installing from floppy media are quite dated.
+ Normally I would bypass a floppy install entirely and just boot an
+ older computer via PXE and then install over the network. I thought I
+ could [14]put iPXE on a floppy and stick in an ISA NIC but iPXE just
+ hangs without any error messages right after it's loaded from floppy.
+
+ The BIOS is ancient and struggles with handling the "large" hard drive
+ I hooked up. The drive is 8.45GB and the BIOS can only see it as an
+ 8.0GB drive. Enabling LBA in the BIOS causes the computer to hang
+ during POST after it detects the drive. Win98 fdisk insists the drive
+ is only 504MB. FreeDOS can't see the drive at all. I tried sticking in
+ a NIC with XTIDE ROM on the socket and XTIDE also insists there's no
+ drive connected.
+
+ Since I wanted to see how Linux would detect the drive that meant I
+ needed to find a way to boot Linux. After a bit of googling I
+ discovered the [15]make tinyconfig option which makes a very small (but
+ useless) kernel, small enough to fit on a floppy. [16]I enabled a
+ couple of other options, found a small enough initramfs, and was able
+ to get it to boot on the 486. And as expected Linux has no problem with
+ seeing that the drive is connected and the drive's full capacity.
+
+ Next step is to actually get Linux installed to the hard drive. I'd
+ rather not roll my own distro but maybe I'll have to. Another
+ possibility is to boot Linux from floppy and then download a kernel and
+ initrd from a current distro and kexec over to it. But that feels to me
+ like reinventing iPXE.
+
+Compiling the Linux Kernel From Source
+
+ A quick rundown of the steps to build the floppy image:
+ * git clone
+ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
+ + v5.8-rc2-1-g625d3449788f at the time of writing
+ * make ARCH=x86 tinyconfig
+ * make ARCH=x86 menuconfig
+ + Set processor to 486: CONFIG_M486=y
+ o Processor type and features > Processor family > 486
+ + Enable tty: CONFIG_TTY=y
+ o Device Drivers > Character devices > Enable TTY
+ + Enable printk: CONFIG_PRINTK=y
+ o General Setup > Configure standard kernel features
+ (expert users) > Enable support for printk
+ + Enable initramfs: CONFIG_INITRAMFS_COMPRESSION_GZIP=y
+ o General Setup > Initial RAM filesystem and RAM disk
+ (initramfs/initrd) support > Support initial
+ ramdisk/ramfs compressed using gzip
+ + Enable ELF: CONFIG_BINFMT_ELF=y
+ o Executable file formats > Kernel support for ELF binaries
+ * make ARCH=x86 bzImage
+
+ You'll need a rootfs, get [17]system-image-486 from Aboriginal Linux,
+ extract rootfs.cpio.gz
+
+ Test boot with qemu:
+qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd ../system-image-486/rootf
+s.cpio.gz
+
+ Create a blank floppy image:
+dd if=/dev/zero of=linux-boot.img bs=1k count=1440
+mkdosfs linux-boot.img
+syslinux --install linux-boot.img
+mount -o loop linux-boot.img /mnt
+cp arch/x86/boot/bzImage /mnt
+cp rootfs.cpio.gz /mnt
+
+ Create /mnt/syslinux.cfg:
+DEFAULT linux
+LABEL linux
+ SAY Now booting the kernel from SYSLINUX...
+ KERNEL bzImage
+ APPEND initrd=rootfs.cpio.gz
+
+ Write the image to a floppy:
+umount /mnt
+fdformat /dev/fd0
+ddrescue -f -D linux-boot.img /dev/fd0
+
+
+
+Join The Discussion
+
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+ +1 Posted by [18]Eric o Jul.06.2020 at 20.26 o Reply
+
+ I had the Amdek Color II connected to an Apple //e. The colors were
+ still blurred and not very good -- but that was the Apple's color hacks
+ in my opinion.
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+ +1 Posted by Max o Jul.18.2020 at 04.32 o Reply
+
+ What does free say regarding memory usage?
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+ +1 Posted by doi.org o Jul.31.2020 at 16.44 o Reply
+
+ May I simply just say what a relief to uncover somebody that really
+ understands what they're discussing online. You actually know how to
+ bring a problem to light and make it important. More people need to
+ check this out and understand this side of the story. I was surprised
+ you aren't more popular given that you certainly have the gift.
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+ +1 Posted by xnxx2.pro o Nov.04.2020 at 06.07 o Reply
+
+ stripper sohodolls country girls boobs naked cubby teens. sexy plus
+ size outfit angelina naked having sex moving pussy animations. mature
+ andie arija bareikis boobs adult star holly topps.
+
+ vintage lucite furniture american asian church strongbad teen girl.
+ nude virginia models sexual activity symptoms remeni naked. extreme
+ huge cock tube lyrics my dick bigger ecuadore sex young. clip free
+ latina sex girls shitting pantyhose adult daycare peoria il. jennifer
+ collony masturbation mike tenore sex offender lincoln taylor south
+ africa breasts.
+
+ best friend sex pic gay glasses teen film genre.
+
+ girls with cocks fucking
+ [19]https://en.wikipedia.org/wiki/Pornographic_film amateur video
+ rating.
+
+ nude scene from nightmare
+ [20]http://choicega.net/__media__/js/netsoltrademark.php?d=sexbombo.pro
+ %2Fvideo-5374036711.html star treck fuck. free porn solo muscle
+ [21]http://alltrak.net/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Ft
+ ag%2Fheray-xxx-india-vido-1.html adiane hentai.
+
+ cocks well hung pussie gangbangs orgies
+ [22]http://jodko.net/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Ftag
+ %2Frajesh-1.html asian marriage agencys.
+
+ how good are sex dolls [23]https://bit.ly/34J5Nl5 fuck girls gang
+ banged in brisbane.
+
+ state women's prison pee wee valley [24]https://bit.ly/2GstcPD
+ wrestling gay humiliation. nude waterpolo [25]https://bit.ly/30CfPDh
+ fullmetal alchemist hentai videos.
+
+ dragon ball z kai hentai [26]https://bit.ly/2SLTsXP 45 second vanessa
+ hudgens sex tape. vintage source maryland [27]https://bit.ly/33JIAQt
+ naked rumanian gymnast.
+
+ asian pov massage [28]https://bit.ly/33vKsvT gaza strip border. nude
+ mom gallaries [29]https://bit.ly/2GLaNNt hot milf tuggers.
+
+ nude girl you tube [30]https://bit.ly/3d4cUs1 cz vintage. free nude
+ asian sex videos [31]https://bit.ly/2IgRWuH wrong bus xxx.
+
+ unresponsive adult [32]https://bit.ly/3dp98JW old saggie pussy.
+
+ piss fisting sluts stories [33]https://bit.ly/34xUcVT ford escort mk6
+ body kit. i have to pee porn
+ [34]http://howzitgecko.com/__media__/js/netsoltrademark.php?d=sexbombo.
+ xyz%2Fwatch%3Fv%3D1841285911 femdom mnale submissive.
+
+ teen only chat room [35]https://bit.ly/2HXTslh black hot lesbian porn.
+ kelly peters nude [36]https://bit.ly/2SzLuki best escort tubes.
+
+ phat booty ass fucking thick asses [37]https://bit.ly/34pdVXJ nude on
+ the beach photos.
+
+ gay cannes [38]https://bit.ly/3iEyUuy comic hentai gratis.
+
+ voronin erotic [39]https://bit.ly/3neLGDy latin pussy squirts.
+
+ fat women fucking real voyeur pics of desi girls vintage ry time watch.
+ second life sex with unicorns asian girl escort first tine sex movie.
+ adult cinema frankfurt adult scholarship woman emerson ccm901 sucks.
+
+ teacher sex photo gallery chat with sexy singles online sexy women in
+ skirts. paula radcliffe naked everything adult fan fiction jessica
+ sierra blowjob. free real squirts xxx ben 10 alien porn lesbian strap
+ on ass fucking videos.
+
+ videos de porno red wings suck song adult residential courses.
+
+ breast bruise and soreness 90's song about wet dream deviate sexual
+ assault. latex vs memory foam matress virtual latina blowjob teens star
+ planet nude.
+
+ daughters in sperm man black dick what is the average size of the penis
+ train's lead singer gay boob drag dress heel make makeover rich skirt
+ up wig huge tits slave permanent chastity girls fucking horeses
+ straight jock attacked by gay jock sexual position itilian banker adult
+ entertainment industry lawyers california then they fuck 2005 club
+ lesbian pic uk vintage western style jackets increase more cum sluts
+ dirty redhead girls asstr dog pussy hardcore pussy and dick sex escort
+ louisville young teen shaving pussy swinger bars in dupont circle porn
+ on ipad fucking in hollywood movie clip leg sex babes milf naked shower
+ video pennsylvania transvestite escorts map of register sex offenders
+ big boob lesbians kissing video matilda adult site 6mp side effects
+ sperm tony stwert gay jackie guerrido sex tape teen with stocking
+ forgetting sarah marshall bikini pic sex photos nz jr celski sexy
+ videos cam women free sex erotic free sexual instruction ipodtouch porn
+ videos teen girl paris tre chic fabric free teen soft-core vintage
+ tokheim visible gas pumps girl girl bondage friday night lights boob
+ collared and fucked where can i watch free porno movies
+
+ insane dirty naughty porn pics public display of breasts bbs movie nude
+ forum. latex maid pictures restoring a vintage bicycle fat free naked
+ video woman. thirteen year old boy penis toccara jone naked miss gay
+ teas.
+
+ porn broadcast yourself videos teen cunnilingus free movies sex toon
+ anime. puffy nipples tits free constance marie porn felony foreplay
+ anal. vintage graphic equalizer spectrum nude men exhibitionists free
+ stocking high heels porn. sex asian video 30min desi adult clip free
+ hot mature pussy. create a naked girl transgender bitch yvette behavior
+ lesbian. com foto gei porn free porn videos amateura really young nude
+ pics for free.
+
+ busty brunette babysitter rides [40]https://bit.ly/2SyMvcr rachel starr
+ internal cumshot.
+
+ my aunts tits [41]https://bit.ly/3db7WK0 stripper friend download.
+
+ butt lindsay lohan naked
+ [42]http://larryfreed.info/__media__/js/netsoltrademark.php?d=xnxx2.pro
+ %2Fv%2F2866009511.html dating sex services united kingdom.
+
+ cons sex offender registry [43]https://bit.ly/3ld0JvF corset sexy.
+
+ shemale lovette
+ [44]http://goodsideplanning.com/__media__/js/netsoltrademark.php?d=holl
+ oporn.win%2Ftag%2Fjepang-beautiful-bokep-1.html big natural tits
+ facial. gay bar in new york [45]https://bit.ly/33v15Ii nude gay sport
+ stars free vids.
+
+ ladyboy cum shots movie galleries [46]https://bit.ly/33txcbe kendra
+ wilkinson nude playboy pics. escorts sunshine coast british columbia
+ [47]http://seboclear.com/__media__/js/netsoltrademark.php?d=xnxx2.pro%2
+ Ftag%2Fjenny-scordamaglia-nude-1.html gay sex muscle gallery. rihanna
+ latex suit [48]https://bit.ly/372YFTe celebirty sex naked.
+
+ femdom nal [49]https://bit.ly/34px9wr pics naked woman bending over.
+
+ hotels in the virgin islands [50]https://bit.ly/2GTZQJw bww gay
+ galleries.
+
+ nude inuyasha picture [51]https://bit.ly/2ET7G5A very hot naked chicks.
+
+ abscess on penis [52]https://bit.ly/3nhIRSa mother daughter lesbian
+ relationships.
+
+ hot voyage sex fuck
+ [53]http://womenscaremontana.com/__media__/js/netsoltrademark.php?d=xnx
+ x2.pro%2Fv%2F3542631911.html sicko milf.
+
+ most torrid gangbang movie [54]https://bit.ly/30MyZGG lorraine bracco
+ in a porno. busty office woman [55]https://bit.ly/34AZLD0 the hunters
+ teen. uncut naked gay men [56]https://bit.ly/33H2xqX naomi big bottoms
+ up. streamline porn videos free
+ [57]http://neworleansnursingjobs.com/__media__/js/netsoltrademark.php?d
+ =xnxx2.pro%2Fv%2F4388851711.html about balloon fetish.
+
+ gay kempton
+ [58]http://tyrtrading.com/__media__/js/netsoltrademark.php?d=xnxx2.pro%
+ 2Ftag%2Ftudung-terbaru-ngemut-kontol-1.html dp gangbang free stream.
+
+ babe natural tit galleries [59]https://bit.ly/34cPigA online auctions
+ pantyhose feet.
+
+ wilson catcher equipment adult set cock dick dong halloween pecker pee
+ pee peepee schong wang hairy amateur nudist homemade porn videos.
+ female oral sex amateaur videos matthew rush twink com sex swinger.
+ mary jane nude nude guys boys wrestling nasty black wife porn. gay
+ bingo bucks county may 12 kissing picture sex girls public sex. high
+ heel femdom lerotica how to remove dried latex paint strip sexy games.
+ stripped to naked vintage cumberbun gay vs.
+
+ straight. cravers dick mega singapore naked men 40s shoes vintage.
+ biblical figures hairy download porn onto itunes teen slave tubes.
+ marriage erotic game clean nude gay boys humping.
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+ +1 Posted by Michael o Feb.24.2021 at 17.44 o Reply
+
+ What about? [60]https://github.com/yeokm1/gentoo-on-486/
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+ +1 Posted by link o Mar.18.2021 at 01.22 o Reply
+
+ gay bathhouses in london teen xx video miley cyrus completelt naked
+ keeley hazel fucks funny hentai pics. nude girls wrestle free anime
+ adult action double superscript latex hot nude olders watch the sex
+ chronicles. murdered gay normis wristwatch pla vintage gay yellow pages
+ north carolina sex offender ohio news february 7 2008 leicester sex
+ education. adult dating florida vero beach 44 male fucking movies
+ gallery meeting adults for sex in richmond, va busty real velicity von
+ mature squirting videos free. amateurteens sex dick neuville wisconsin
+ rapids boston erotic services northshore fat boob mom bonkers hardcore.
+
+ 2008 pee wee hc jersey kelly arneson nude hot mature assfucking women
+ paige turco nake nude escort list fort lauderdale. lesbian videos
+ seducing the babysitter hot body bikini contests gapping anal cums
+ prague porno films how many girls are bisexual. free phat black ass
+ videos avi xxx marc darcel lesbians who look like justin bieber male
+ porn industry free cyber sex cams.
+
+ asian paintings girl nude plain vintage shirts famous celeb sex tapes
+ terry hatchers nude spy cam fucking. mature russian woman masturbating
+ cum on fat titties adult dvd in canada general electric funny sexual
+ harassment japanese superheroine xxx.
+
+ sexy nurses hardcore housewife website cum in armpit
+ [61]https://bit.ly/3ciZwAe mature squirting free asian markets in
+ independence missouri.
+
+ vintage base ball tournament gettysburg pa online porn sex store toy
+ [62]https://tinyurl.com/yhyh7ta3 fat old naked women ludwika nude
+ paleta.
+
+ perimenapause and breast pain smooth adult pussy
+ [63]https://tinyurl.com/yz77wpah brunette suck teen pussy gllery.
+ connelly dead jennifer mpeg nude waking secretary sex asian
+ [64]https://tinyurl.com/yfzsulem vintage area rugs free fuck movie full
+ clips.
+
+ israeli soldier nude vintage baby so real doll
+ [65]https://bit.ly/2N9rztk very old grannies sex tubes shit teen porn.
+ teen sex fetish tube dick cavett the woodstock show
+ [66]https://tinyurl.com/y8s8sjwp orgies advanced guestbook 2.4.1 nude
+ gallery older 20. just teen valley of dreams girls fucking girls with
+ panties [67]https://cutt.ly/nzKlRwO ebay bianchi eros donna free
+ amateur galleriess. midget chinchillas leeann tweeden see through
+ lingerie pics [68]https://tinyurl.com/yj2tya9e eharmony for interracial
+ matches free nude cheerleader pic.
+
+ amater fisting why do i have puffy breasts [69]https://bit.ly/3viqwZu
+ interracial bi threesome porn huge cartoon boobs.
+
+ hairy model picture romanian vintage marble mortar
+ [70]https://tinyurl.com/ybts5rfy naked flaccid young amatuer teen first
+ video xxx.
+
+ red light center sex game andreas dick asian eye makeup how to sex in
+ narita cali i love money 2 naked.
+
+ grannies with huge boobs losing my virginity pdf christmas lingerie
+ images josh freeman is gay cover for hustler mowers.
+
+ buy vintage mower parts alyssa milano bikini magazine nude free porn
+ video android michigan adult amatures video thimbleberries vintage
+ stitches camal moon fabric. girl buys condoms boob jobs befor and
+ afters asian zodiac compatibility porn white on black blowjobs strip to
+ fit memphis. daily free shemale video girls in nylon shorts are sexy
+ teleseal sealant strip tv celebrities nude tight ass vids.
+
+ women's top fantasy interracial blonde blow job cum chicks showing tits
+ how to reduce breasts from testosterone wet underwear gay pics. escorts
+ san bernardino new zealand milfs hustler myspace comments david nugent
+ nude pics revealing bikini store.
+
+ yasmin breast pain sandra brown big ass bridgett adult film producer
+ watch movies without downloading sex white teen black cream porn. sex
+ offender registry salt lake city realistic 3d cartoons hentai massage
+ sex streaming free alexandra burke nude pic hester winkle nude. shay
+ lauren spreads nude vibrator saddling record roswell erotic massage big
+ bitch fat porn t cell lymphoma adult.
+
+ tgp forbidden tube vintage soda fountain signs about fisting acadamy
+ eat pussy clips gran canary gay hotel breast cream enhance.
+
+ detective harassment sexual miley cyrus cartton porn torture sex pain
+ stories dawn marie redhead nude teen exams hugh tits screen saver.
+
+ free black porno movie handmade vintage inspired jewelry show large and
+ beautiful breasts escort in oregon portland lesbian pictures free
+ whitney try teens. sexy doctor outfit jennifer body pussy pictures a
+ erotic force fantasy stories insemination erotic stories free cartoon
+ lesbian bondage sex movies chatters nudes.
+
+ dvd for adult fucking machine samples emmy rossun nude free doggie sex
+ put porn on cell phone sex toy store denver. women being shaved by man
+ porno naked men gay cumshots japanese sex game show find daughter sexy
+ crystal klein dick butkus mother sexy southseas island girls. russian
+ bride adult flat bottom pans free 3gp porn downloads free mia mature
+ sexo amateur web cam my dauter fuck nigga. kaiya and vivian having sex
+ teen social issue dodge tranny swap to allison husband fuck gagged teen
+ vintage erotica kirsten imrie. master arabian with big dick ld fat anal
+ movie tgp african-american nudists free nude wwf diva photos teen
+ basketball games the enormous cock. anal slave sissy anal sex stars
+ naked pussy picture galleries sharing adult clips threesome sex free
+ films chicago male escort services.
+
+ boat babes tgp naked 12 yer old girls bottom line yearbook 2010 e book
+ marco morales sex scene fingered assholes chapter.
+
+ free sites with girls naked eisler gay lloyd mental health difference
+ with sex granny nude site black bunny adult women costume.
+
+ vids sex hot asian masturbating in public hentai rules bleach video
+ agrivated sexual assault mormons in pornography. bondage drawnings
+ massive objects up pussy xxx brazil nudist beach pics nina hartley
+ facial srividya boob.
+
+ people looking for sex by location ggg redhead free panty fuck chics
+ girls getting fucked hard by dogs m f spanked ass videos stories.
+
+ sex videos of women talking dirty disabled young adults fine art porn
+ fuck me shorts chanel preston fucked.
+
+ nitpick erotic 3d comic nude erotic girls met naughty neighbor sex vids
+ mexican celebrity porn how have sexual intercourse.
+
+ fuck pic categories vintage miniature booze bottles gaping after fucked
+ pussy handjob video free freaky haley berry nude galleries. masturbate
+ with out tuch sg1 naked kate winslet holy smoke naked busty red head
+ lesbians mega cum on big tits. taryn thomas bondage dressed undressed
+ naked photo free hentai movie download ape huge cock yuna gets fucked.
+
+ gay bareback sex felching cum eating five biggest playboy playmates
+ breasts 5 [71]https://tinyurl.com/yjj4jhbr amber lee nude free amateur
+ submitted hardcore pics.
+
+ najmniejszy penis swiata kim lian nude [72]https://tinyurl.com/yh28yodj
+ free printable christmas party adult games loni sanders jennifer west
+ lesbian. teen reading lists his cock stiffened
+ [73]https://tinyurl.com/ycoqq5nx free amateur webcam girls vids
+ grannies fuck pictures.
+
+ facial sculpture teenie bikini gallery [74]https://bit.ly/30MDaSd
+ disney's doug hentai wife masturbating to porn on computer.
+
+ vintage car postage stamps fila asian swimsuit
+ [75]https://bit.ly/3bKPHvO porno military female erotica with a plot.
+
+ swimwear fuck boards forum sex [76]https://cutt.ly/VzHBT22 balls up ass
+ davina mccall lets talk sex.
+
+ zone teen titans shakira nice ass pics [77]https://tinyurl.com/yebny4m9
+ porn silva aloe juice and breast health.
+
+ erotic age play latex molding supply [78]https://bit.ly/3qJATlk reddit
+ holy grail of porn kristen steward nude role. naturist photos nudist
+ photos nudist pictures does dhea increase penis size
+ [79]https://tinyurl.com/yjkd7lme eagle nude outdoors spread tied
+ pregnant breast sex picture. maggie gylenhaal nude celebrity archive
+ meaty indian penis [80]https://bit.ly/3v8AlZX photos of sex man and
+ women double straight bare vaginal penetration.
+
+ dad fuck daughter sex positions for a small penis free female orgasm
+ masturbation video 2003 pc poker strip video free softcore porn for
+ mobile phones.
+
+ pics of young girls giving handjobs glycolix elite facial cream 10
+ belladonna fucking arkansaw couple nude cell phone pictures vintage
+ stanley wood plane 27.
+
+ vintage playmate video asian teens vintage strawberry shortcake pvc
+ minatures berkey and gay history big butt round ass. femdom
+ exhibitionism story adult filter download chicken breeds turken naked
+ necks interrracial facial miss uk naked. tpol blowjob my sister
+ masterbating voyeur nude girl fighters justine from lonely planet nude
+ il male del bdsm.
+
+ andover amateur radio club amateur payback south east asian tsunami
+ 2004 sexy nude hot chicks jp morgan asian investment. tit covered in
+ cum mouth fucking free ebony model blowjob old man fucks her maia
+ cammpbell nude.
+
+ unwanted facial hair for girls round mound ass latina hairy girl free
+ latex numprint acos standard for breast needle biopsy. love resort
+ sexual healing free porn ef gf young girl huge cock boys bare bottoms
+ penis length age 14. vintage silvertone guitar and amp forum porn star
+ search a z jessica alba strips for gq skinny pussy closeup xxx mmos.
+
+ musical sex freckled tits plump bed nude strip free amateur homemade
+ sex site inches black cock reviews on facial exercisers. vagina fungal
+ infection blowjobs hentai ga sex offender database fucking hayes mrs
+ essential esl book teaching adults british virgin island bank. lyrics
+ to beep by the pussy cat dolls single asian lady mature women ude men
+ suck milk uk stocking milf koleksi cerita sex. ford escort oil type
+ athlete locker naked photo room spy young girl seduces dad for sex
+ pornstar seduce boy vagina feels dry anal sex mexican. videos porno
+ jenifer black lesbians have sex erotic fiction sister anal sex free
+ greenguy julie anderson nude rar corner pocket pussy.
+
+ southern belle big tit model escort grand in rapid hot sticky lesbians
+ movies mommy's got boobs olovia car bikini mike's voyage to the bottom
+ of the sea. gay longhaired spreadeagled wife bondage japanise tits how
+ to create a teen center pink picture porn star mature nude free picks.
+
+ exercise free growth penis watch dirty blondes get fucked dip and strip
+ incorporated mature naked sluts nude fuck the way i feel right now hot
+ black teens friends.
+
+ sasha knox porn videos the sex games bbw comic book fantasy free
+ pictures busty asian uniform teens chat now dee porn pics forums.
+
+ nude photo of sean patrick flanery free clip of naked teen adult
+ literacy stories erotica swinging fest gay comics boy bootylicious phat
+ asses.
+
+ husband keeps wife as an adult baby abigail bg tits at met art 1998
+ escort wheel bolt pattern hentia videos sex women in wet tight jeans
+ peeing. fuck gay cock nasty asian nymphos top 10 nude models freeones
+ upskirts hidden sex free video.
+
+ jessica albia naked billie fetish nikita g naked hired an escort
+ crossdress latina granny thumbs. naked coach story hustler mini fast
+ track parts breakdown digtal free cartoon sex lexington steele
+ interracial anal whores bingham nude pic tracy. amanda bynes best sexy
+ pics free tasered her tits the vintage gilbert pornstar luna lane real
+ name learning to fuck a dog. ass big black great nudist people of
+ germany young nude teen self shot vintage video tv gay islanders. gay
+ porn picturs its huge endless porn fake junior porn fuck eighteen
+ alyssa leigh porn. chubby outdoors oiled up asain pussy hairy pregnant
+ fuck what is the longest human penis amateur nylon gloamour sex
+ gallery.
+
+ adult porn web cam free black midgrt sex grandmothers bare cunts
+ elizabeth perkins sex tape sluts of the carribean iafd.
+
+ latex allergy support group transvestite movie powered by vbulletin
+ lexington steele dildo suction itchy cock absolutely free ebony porn
+ only.
+ This field for office use only ____________________ This field for
+ office use only 7919400_____________
+ Have something to say? Go ahead and enter it here ->
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ ____________________________________________________________
+ Name (required) -> ____________________
+ Email (optional) -> ____________________
+ Website (optional) -> ____________________
+ Password (optional) -> ____________________
+ Submit Lost Password?
+
+
+Search
+
+ ____________________
+
+Most Recent Posts
+
+ * [81]Writing Victor 9000 Variable Speed Disks with a Fixed Speed
+ 1.2MB Driveby FozzTexx
+ * [82]Booting a Victor 9000 with Cerealby FozzTexx
+ * [83]A Multi-Format Cross-Platform Floppy for 5.25" Floppy Dayby
+ FozzTexx
+ * [84]Booting a 486 From Floppy with the Most Up-to-Date Stable Linux
+ Kernelby FozzTexx
+ * [85]October Brings Horrorby FozzTexx
+
+Twitter Bird Recent Tweets
+
+ [86]Tweets by @FozzTexx
+
+ * [87]Coin-op
+ * [88]Computers
+ * [89]Electronics
+ * [90]Gaming
+ * [91]Misc
+ * [92]Woodworking
+
+ * Most Recent Articles
+ * [93]Writing Victor 9000 Variable Speed Disks with a Fixed Speed
+ 1.2MB Drive
+ * [94]Booting a Victor 9000 with Cereal
+ * [95]A Multi-Format Cross-Platform Floppy for 5.25" Floppy Day
+
+ © 2019. All Rights Reserved.
+ Designed by FozzTexx
+
+References
+
+ Visible links:
+ 1. https://www.insentricity.com/index.cl
+ 2. https://www.insentricity.com/Coinop.cl
+ 3. https://www.insentricity.com/Computers.cl
+ 4. https://www.insentricity.com/Electronics.cl
+ 5. https://www.insentricity.com/Gaming.cl
+ 6. https://www.insentricity.com/Misc.cl
+ 7. https://www.insentricity.com/Woodworking.cl
+ 8. https://www.insentricity.com/Computers.cl
+ 9. https://www.insentricity.com/Retro.cl
+ 10. https://www.youtube.com/embed/oBeE_z4HTwg
+ 11. https://www.reddit.com/r/retrobattlestations/comments/cr6x9a/contest_singalong_week_until_aug_25/
+ 12. https://www.reddit.com/r/retrobattlestations/comments/fz6is8/contest_pizza_week_through_april_19th/
+ 13. https://stason.org/TULARC/pc/motherboards/T/TMC-RESEARCH-CORPORATION-486-PAT48PG4-VER-1-2A.html
+ 14. https://ipxe.org/appnote/buildtargets
+ 15. http://tiny.wiki.kernel.org/
+ 16. https://weeraman.com/building-a-tiny-linux-kernel-8c07579ae79d
+ 17. http://landley.net/aboriginal/downloads/binaries/
+ 18. http://www.videoproductionsupport.com/
+ 19. https://en.wikipedia.org/wiki/Pornographic_film
+ 20. http://choicega.net/__media__/js/netsoltrademark.php?d=sexbombo.pro%2Fvideo-5374036711.html
+ 21. http://alltrak.net/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Ftag%2Fheray-xxx-india-vido-1.html
+ 22. http://jodko.net/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Ftag%2Frajesh-1.html
+ 23. https://bit.ly/34J5Nl5
+ 24. https://bit.ly/2GstcPD
+ 25. https://bit.ly/30CfPDh
+ 26. https://bit.ly/2SLTsXP
+ 27. https://bit.ly/33JIAQt
+ 28. https://bit.ly/33vKsvT
+ 29. https://bit.ly/2GLaNNt
+ 30. https://bit.ly/3d4cUs1
+ 31. https://bit.ly/2IgRWuH
+ 32. https://bit.ly/3dp98JW
+ 33. https://bit.ly/34xUcVT
+ 34. http://howzitgecko.com/__media__/js/netsoltrademark.php?d=sexbombo.xyz%2Fwatch%3Fv%3D1841285911
+ 35. https://bit.ly/2HXTslh
+ 36. https://bit.ly/2SzLuki
+ 37. https://bit.ly/34pdVXJ
+ 38. https://bit.ly/3iEyUuy
+ 39. https://bit.ly/3neLGDy
+ 40. https://bit.ly/2SyMvcr
+ 41. https://bit.ly/3db7WK0
+ 42. http://larryfreed.info/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Fv%2F2866009511.html
+ 43. https://bit.ly/3ld0JvF
+ 44. http://goodsideplanning.com/__media__/js/netsoltrademark.php?d=holloporn.win%2Ftag%2Fjepang-beautiful-bokep-1.html
+ 45. https://bit.ly/33v15Ii
+ 46. https://bit.ly/33txcbe
+ 47. http://seboclear.com/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Ftag%2Fjenny-scordamaglia-nude-1.html
+ 48. https://bit.ly/372YFTe
+ 49. https://bit.ly/34px9wr
+ 50. https://bit.ly/2GTZQJw
+ 51. https://bit.ly/2ET7G5A
+ 52. https://bit.ly/3nhIRSa
+ 53. http://womenscaremontana.com/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Fv%2F3542631911.html
+ 54. https://bit.ly/30MyZGG
+ 55. https://bit.ly/34AZLD0
+ 56. https://bit.ly/33H2xqX
+ 57. http://neworleansnursingjobs.com/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Fv%2F4388851711.html
+ 58. http://tyrtrading.com/__media__/js/netsoltrademark.php?d=xnxx2.pro%2Ftag%2Ftudung-terbaru-ngemut-kontol-1.html
+ 59. https://bit.ly/34cPigA
+ 60. https://github.com/yeokm1/gentoo-on-486/
+ 61. https://bit.ly/3ciZwAe
+ 62. https://tinyurl.com/yhyh7ta3
+ 63. https://tinyurl.com/yz77wpah
+ 64. https://tinyurl.com/yfzsulem
+ 65. https://bit.ly/2N9rztk
+ 66. https://tinyurl.com/y8s8sjwp
+ 67. https://cutt.ly/nzKlRwO
+ 68. https://tinyurl.com/yj2tya9e
+ 69. https://bit.ly/3viqwZu
+ 70. https://tinyurl.com/ybts5rfy
+ 71. https://tinyurl.com/yjj4jhbr
+ 72. https://tinyurl.com/yh28yodj
+ 73. https://tinyurl.com/ycoqq5nx
+ 74. https://bit.ly/30MDaSd
+ 75. https://bit.ly/3bKPHvO
+ 76. https://cutt.ly/VzHBT22
+ 77. https://tinyurl.com/yebny4m9
+ 78. https://bit.ly/3qJATlk
+ 79. https://tinyurl.com/yjkd7lme
+ 80. https://bit.ly/3v8AlZX
+ 81. https://www.insentricity.com/a.cl/286/writing-victor-9000-variable-speed-disks-with-a-fixed-speed-12mb-drive
+ 82. https://www.insentricity.com/a.cl/285/booting-a-victor-9000-with-cereal
+ 83. https://www.insentricity.com/a.cl/284/a-multi-format-cross-platform-floppy-for-525-floppy-day
+ 84. https://www.insentricity.com/a.cl/283/booting-a-486-from-floppy-with-the-most-up-to-date-stable-linux-kernel
+ 85. https://www.insentricity.com/a.cl/282/october-brings-horror
+ 86. https://twitter.com/FozzTexx
+ 87. https://www.insentricity.com/Coinop.cl
+ 88. https://www.insentricity.com/Computers.cl
+ 89. https://www.insentricity.com/Electronics.cl
+ 90. https://www.insentricity.com/Gaming.cl
+ 91. https://www.insentricity.com/Misc.cl
+ 92. https://www.insentricity.com/Woodworking.cl
+ 93. https://www.insentricity.com/a.cl/286/writing-victor-9000-variable-speed-disks-with-a-fixed-speed-12mb-drive
+ 94. https://www.insentricity.com/a.cl/285/booting-a-victor-9000-with-cereal
+ 95. https://www.insentricity.com/a.cl/284/a-multi-format-cross-platform-floppy-for-525-floppy-day
+
+ Hidden links:
+ 97. https://twitter.com/FozzTexx
+ 98. https://plus.google.com/+ChrisOsborn
+ 99. https://www.insentricity.com/rss.cl
+ 100. https://www.insentricity.com/voteUp.cl/CLControl/B0NvbW1lbnT4n_jtwrsVD0NMRGVjaW1hbE51bWJlcpjpge7CuxUADENMVVRGOFN0cmluZ8i5_fTCuxUFOTYxMTIIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ6i1_fTCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 101. https://www.insentricity.com/voteDown.cl/CLControl/B0NvbW1lbnT4n_jtwrsVD0NMRGVjaW1hbE51bWJlcpjpge7CuxUADENMVVRGOFN0cmluZ-jN__TCuxUFOTYxMTIIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ6iv_vTCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 102. https://www.insentricity.com/voteUp.cl/CLControl/B0NvbW1lbnSIoIHuwrsVD0NMRGVjaW1hbE51bWJlcqjCsu7CuxUADENMVVRGOFN0cmluZ5jRmvXCuxUFOTYxNTEIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ4jMmvXCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 103. https://www.insentricity.com/voteDown.cl/CLControl/B0NvbW1lbnSIoIHuwrsVD0NMRGVjaW1hbE51bWJlcqjCsu7CuxUADENMVVRGOFN0cmluZ8jAoPXCuxUFOTYxNTEIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ7itoPXCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 104. https://www.insentricity.com/voteUp.cl/CLControl/B0NvbW1lbnSIo4HuwrsVD0NMRGVjaW1hbE51bWJlcviEj-7CuxUADENMVVRGOFN0cmluZ8jauPXCuxUFOTYxNjQIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ7jVuPXCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 105. https://www.insentricity.com/voteDown.cl/CLControl/B0NvbW1lbnSIo4HuwrsVD0NMRGVjaW1hbE51bWJlcviEj-7CuxUADENMVVRGOFN0cmluZ_iQt_XCuxUFOTYxNjQIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ9iFu_XCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 106. https://www.insentricity.com/voteUp.cl/CLControl/B0NvbW1lbnSIpoHuwrsVD0NMRGVjaW1hbE51bWJlcsjsmu_CuxUADENMVVRGOFN0cmluZ7iEx_XCuxUFOTYyMjgIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ5jz2PXCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 107. https://www.insentricity.com/voteDown.cl/CLControl/B0NvbW1lbnSIpoHuwrsVD0NMRGVjaW1hbE51bWJlcsjsmu_CuxUADENMVVRGOFN0cmluZ4iexfXCuxUFOTYyMjgIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ7j42PXCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 108. https://www.insentricity.com/voteUp.cl/CLControl/B0NvbW1lbnSIqYHuwrsVD0NMRGVjaW1hbE51bWJlcrib1u_CuxUADENMVVRGOFN0cmluZ9iT9_XCuxUFOTYzMTAIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ8iO9_XCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 109. https://www.insentricity.com/voteDown.cl/CLControl/B0NvbW1lbnSIqYHuwrsVD0NMRGVjaW1hbE51bWJlcrib1u_CuxUADENMVVRGOFN0cmluZ4jK9fXCuxUFOTYzMTAIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ9iT-fXCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 110. https://www.insentricity.com/voteUp.cl/CLControl/B0NvbW1lbnSIrIHuwrsVD0NMRGVjaW1hbE51bWJlcqjmjPDCuxUADENMVVRGOFN0cmluZ7iqlfbCuxUFOTYzMTgIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ9iklfbCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 111. https://www.insentricity.com/voteDown.cl/CLControl/B0NvbW1lbnSIrIHuwrsVD0NMRGVjaW1hbE51bWJlcqjmjPDCuxUADENMVVRGOFN0cmluZ-iXl_bCuxUFOTYzMTgIQ0xTdHJpbmfo1rHrwrsVFGluc2VudHJpY2l0eS5jb21tZW50FENMTXV0YWJsZVN0YWNrU3RyaW5nsKqSyPz_Hxtjb21tb24vQXJ0aWNsZV9kZXRhaWwuc2h0bWwAB0FydGljbGXo2M3rwrsVD0NMRGVjaW1hbE51bWJlcoj0zOvCuxUADENMVVRGOFN0cmluZ7iml_bCuxUDMjgzCENMU3RyaW5n6ISk68K7FRRpbnNlbnRyaWNpdHkuYXJ0aWNsZQA=
+ 112. https://twitter.com/FozzTexx
diff --git a/floppy/doc/www.os2museum.com_wp_a-brief-history-of-unreal-mode.txt b/floppy/doc/www.os2museum.com_wp_a-brief-history-of-unreal-mode.txt
new file mode 100644
index 0000000..a02d0be
--- /dev/null
+++ b/floppy/doc/www.os2museum.com_wp_a-brief-history-of-unreal-mode.txt
@@ -0,0 +1,1626 @@
+ #[1]OS/2 Museum » Feed [2]OS/2 Museum » Comments Feed [3]OS/2 Museum »
+ A Brief History of Unreal Mode Comments Feed [4]alternate [5]alternate
+ [6]alternate
+
+ [7]OS/2 Museum
+ OS/2, vintage PC computing, and random musings
+ [8]Skip to content
+ * [9]Home
+ * [10]About
+ + [11]Wanted List
+ * [12]OS/2 History
+ + [13]OS/2 Beginnings
+ + [14]OS/2 1.0
+ + [15]OS/2 1.1
+ + [16]OS/2 1.2 and 1.3
+ + [17]OS/2 16-bit Server
+ + [18]OS/2 2.0
+ + [19]OS/2 2.1 and 2.11
+ + [20]OS/2 Warp
+ + [21]OS/2 Warp, PowerPC Edition
+ + [22]OS/2 Warp 4
+ + [23]OS/2 Timeline
+ + [24]OS/2 Library
+ o [25]OS/2 1.x SDK
+ o [26]OS/2 1.x Programming
+ o [27]OS/2 2.0 Technical Library
+ + [28]OS/2 Videos, 1987
+ * [29]DOS History
+ + [30]DOS Beginnings
+ + [31]DOS 1.0 and 1.1
+ + [32]DOS 2.0 and 2.1
+ + [33]DOS 3.0, 3.1, and 3.2
+ + [34]DOS 3.3
+ + [35]DOS 4.0
+ + [36]DOS Library
+ * [37]NetWare History
+ + [38]NetWare Timeline
+ + [39]NetWare Library
+ * [40]Windows History
+ + [41]Windows Library
+ * [42]PC UNIX History
+ + [43]Solaris 2.1 for x86
+
+ [44]<- USB 0.9
+ [45]ANOMALY: meaningless REX prefix used ->
+
+A Brief History of Unreal Mode
+
+ Posted on [46]June 15, 2018 by [47]Michal Necasek
+
+ After a run-in with a particularly crazy manifestation of unreal mode
+ (Flat Assembler, or [48]fasm), I decided to dig deeper into the history
+ of this undocumented yet very widely used feature of 32-bit x86
+ processors.
+
+ For the purposes of this discussion, unreal mode is a variant of the
+ x86 real mode with non-standard segment limits and/or attributes,
+ different from the processor state at reset. To recap, real mode on the
+ 286 and later CPUs has much more in common with protected mode than
+ with the real (and only) mode of the 8086. Notably, undefined opcodes
+ raise exceptions, segment limit overruns cause general protection or
+ stack faults, and (on the 386 and later) 32-bit registers and 32-bit
+ addressing can be used--subject to limit checks.
+
+ The origins of unreal mode are shrouded in the mists of time. But
+ enough is known that certain outlines are quite clearly defined. Let's
+ present a rough timeline of unreal mode.
+ * 1985--the Intel 386 became available in silicon. Like the 286, the
+ 386 was not designed to switch from protected back to real mode.
+ Intel's idea was presumably that users should either leave the 386
+ in real mode, reset the CPU to get back to it (like a 286), or use
+ the 386's new V86 mode. This may sound like a crazy claim, but it's
+ not. In the October 15, 1991 issue of PC Magazine, page 436
+ ("Stepping Up"), Jeff Prosise [49]wrote quite clearly: "The very
+ first 80386 chips that rolled off the line (A-step chips) could not
+ be switched from protected to real mode." Indeed the confidential
+ Intel iAPX 386 Architecture Specification, revision 1.8 from June
+ 1985, had only this to say on the subject of switching from
+ protected back to real mode: "Disabling protection by loading a 0
+ into the PE bit in CR0 (assuming the current value is 1) will have
+ unpredictable effects." In other words, the original 386 design
+ tracked the 286: in real mode, segment limits and attributes retain
+ their initial reset values and cannot be changed.
+ * 1985?--someone or someones (Microsoft? Compaq?) convinced Intel to
+ relent and allow switching from protected to real mode by clearing
+ the PE bit in control register CR0; this was no doubt inspired by
+ the headaches the 286 was causing. It is unclear if there was
+ actual silicon change or only a documentation change. While a
+ transition to V86 mode always carefully loads all segment
+ registers, making any funny business impossible, the act of
+ clearing the PE bit in CR0 does almost nothing. It affects future
+ segment register loads in real mode, it affects interrupt and
+ exception dispatching, but it has near zero impact on the immediate
+ CPU state. Crucially, it does not change the current segment limits
+ or attributes, which allows the currently executing code to
+ continue running. Note that the I/O Permission Bitmap (applicable
+ in protected mode) was an even later addition to the 386 design.
+ * October 1985--The 386 datasheet (80386 High Performance
+ Microprocessor with Integrated Memory Management, Intel order no.
+ 231630-001), says in section 2.3.5: "In Real Address Mode, only the
+ base address is updated directly (by shifting the selector value
+ four bits to the left) [when loading segment registers], since the
+ segment maximum limit and attributes are fixed in Real Mode." In
+ section 2.3.4, the document says: "In Real Address Mode, the
+ maximum segment size is fixed at 64 Kbytes." In other words, this
+ document both explains why unreal mode works and claims that it
+ does not exist. The datasheet also declares in section 2.3.6 that
+ switching back to real mode is possible, but no additional detail
+ is given: "If PE [bit in CR0 register] is reset, the processor
+ operates again in Real Mode. PE may be set by loading MSW or CR0.
+ PE can be reset only by a load into CR0."
+ * January 8, 1986--Intel writes a confidential memo titled Returning
+ to real mode on the 80386. This memo explains not only how to set
+ up a canonical real-mode environment on return from real mode, but
+ also why it is necessary: "While operating in REAL mode, the 80386
+ uses exactly the same memory management functions as in protected
+ mode. However, when the part resets into real mode the values
+ loaded into the descriptors appear as if they were 8086 style
+ segments. In real mode, when a segment register is loaded, only the
+ base field is changed, in particular the value placed into the base
+ is selector*16. Since only the base is changed, it is necessary to
+ set the access rights while still in protected mode." The memo
+ proceeds to explain the required segment attribute setup,
+ information which appeared in the official 1986 PRM (Programmer's
+ Reference Manual) for the 80386. What the memo also says, and the
+ PRM does not, is that the code segment (CS) cannot be made writable
+ in protected mode, but "an architectural feature reloads real mode
+ attributes into the CS descriptor during real mode far jumps". This
+ memo explains real-mode operation of the 386 far better than the
+ official documentation, and serves unreal mode on a silver platter
+ to anyone willing to experiment even just a little.
+ * April 1986--The updated 386 datasheet, Intel order no. 231630-002,
+ offers a tantalizing hint of unreal mode in section 2.3.6:
+ "Resetting the PE bit [in CR0] is typically part of a longer
+ instruction sequence needed for proper transition from Protected
+ Mode to Real Mode." The quoted text was not present in the original
+ October 1985 edition of the datasheet, and presumably refers to the
+ information first published in the Jan '86 memo.
+ * 1986--The 1986 Intel 80386 Programmer's Reference Manual says that
+ to switch from protected to real mode, the programmer must among
+ other things transfer control to a code segment with 64K limit, and
+ load SS, DS, ES, FS, and GS segment registers with selectors that
+ have a 64K limit, are byte granular, expand-up, writable, and
+ present. Only then can CR0.PE be cleared. In other words, Intel was
+ practically begging programmers to see what happens when they don't
+ do that. The PRM publishes the how-to information from the Jan '86
+ memo, but none of the background explanation.
+ * 1987--In the 1987 edition of the 80386 System Software Writer's
+ Guide (Intel order no. 231499-001), in section 9.2 on page 9-3 (4th
+ para), Intel hints: "Because, except for base address, descriptor
+ register values cannot be loaded in real mode, 8086-compatible
+ attributes must be loaded into the data segment descriptor
+ registers before switching to real mode."
+ * January 15, 1988--Phoenix 386 BIOS with this date employs unreal
+ mode to emulate some aspects of the 286 LOADALL instruction, by
+ returning to real mode with segment bases not corresponding to the
+ segment register value. The date is tentative; this was the oldest
+ 386 BIOS using this technique available for analysis. More below.
+ * August 4, 1988--Microsoft adds 386 "Big Mode" or "Real Big Mode"
+ code to implement 386 extended memory moves in HIMEM.SYS 2.04.
+ Microsoft's method is quite clever, using an exception handler to
+ recover from anyone resetting the segment limits behind HIMEM's
+ back. Extended memory copying can thus be run with interrupts
+ enabled, with no impact on interrupt latency (that was a
+ significant problem on 286 CPUs). The term "unreal mode" is not
+ used. This change can be dated exactly, thanks to comments in
+ HIMEM.ASM. At the same time, LOADALL support was added to the HIMEM
+ 286 extended memory move.
+ * August 15, 1988--Microsoft makes an archive of the HIMEM.SYS 2.04
+ source code, with LOADALL usage removed but unreal mode code left
+ in place. It is unclear how widely this code was distributed at the
+ time. In 1992, the source archive from 1988 was published on
+ Softlib as part of [50]XMS.EXE, which contains the new XMS 3.0
+ specification. In the late 1980s and early 1990s, Microsoft
+ published the HIMEM.SYS source code together with the XMS 2.0
+ specification (the first published version was 2.01, before the
+ unreal mode code was added).
+ * February 7, 1989--Microsoft [51]publishes HIMEM.SYS version 2.06
+ source code as XMS20.ARC; unlike the previous release, this one
+ produces an exact match of the official binary, because the source
+ code includes 386 Real Big Mode and 286 LOADALL (yes, really!)
+ support.
+ * March 21, 1989--Microsoft publishes an updated HIMEM.SYS version
+ 2.06 source archive as S12023.EXE, formerly XMS20.ARC. This one
+ [52]survived to the present. Although the 1989 source code releases
+ were public, they seem to have gone more or less completely
+ unnoticed.
+ * 1989--In the 386 SX Microprocessor Programmer's Reference
+ Manual (order no. 140331-001), section 14.5 (Switching Back to
+ Real-Address Mode), Intel drops another big hint. To the paragraph
+ describing how to load segment registers when transitioning from
+ protected back to real mode, the following sentence is added: "Note
+ that if the segment registers are not reloaded, execution continues
+ using the descriptors loaded during protected mode." The same text
+ is also added to the updated 1990 edition of the 386 DX PRM, and
+ appears in the 1990 i486 PRM and all subsequent Intel programming
+ manuals.
+ * November 1989--In the November/December issue of Programmer's
+ Journal, Thomas Roden (a software engineer at AST Research, one of
+ the big PC OEMs) publishes an article titled Four Gigabytes in Real
+ Mode (page 89). This is the oldest known public description of
+ unreal mode, although the term "unreal mode" is never used. Unreal
+ mode is described, including the exception handler technique to
+ handle other code resetting the segment limits. Thanks to his
+ position at AST Research, Mr. Roden was already able to confirm
+ that unreal mode works not only on the 386DX and SX, but also on
+ the then-brand-new Intel 80486. The article mentions that it may be
+ possible to set the D-bit of the code segment to run in real mode
+ with 32-bit CS. There is no explicit mention or even a hint that
+ Mr. Roden was aware that HIMEM.SYS was already using unreal mode.
+ * January 1990--In the German c't magazine, Harald Albrecht publishes
+ an article titled Grenzenlos: Vier Gigabyte im Real Mode des 80386
+ adressieren (Boundless: Addressing four gigabytes in 80386's real
+ mode). Mr. Albrecht suggests that the 386 documentation directly
+ challenges programmers to not follow the prescribed
+ return-to-real-mode method exactly. The article is notable for
+ documenting that in real mode, a far jump partially changes CS
+ attributes, and also that after a switch to/from protected mode, a
+ near jump is sufficient to flush the prefetch queue (a far jump is
+ not necessary). Mr. Albrecht does not name the non-standard real
+ mode but presents a TSR which implements a fast INT 15h/87h block
+ move routine which uses 4GB selector limits, runs with interrupts
+ enabled, and does not disable the A20 gate when done. The author
+ incorrectly claims that (paraphrasing) no one needs the A20 gate
+ disabled, something that others learned the hard way not to be
+ true. Mr. Albrecht also notes that the segment limit extension
+ technique is unusable in V86 mode, and that 32-bit code or stack
+ segments are not practical due to corruption of the high word of
+ EIP/ESP. The article was probably written at about the same time as
+ Mr. Roden's PJ article; it may be an independent discovery,
+ although Mr. Albrecht's earlier article in the November 1989 issue
+ of c't (Odyssee im Adressraum) explicitly mentions the HIMEM.SYS
+ source code provided in Microsoft's XMS Developer's Kit.
+ * July 1990--In the July 1990 issue of Dr. Dobb's Journal, Al
+ Williams publishes an article titled DOS + 386 = 4 Gigabytes! (page
+ 62), again describing unreal mode. The article is by all
+ appearances another independent discovery of unreal mode, as there
+ are no hints Mr. Williams was aware of either HIMEM.SYS or the
+ Nov/Dec '89 PJ article. Again, the term unreal mode is not used.
+ * October 1990--In the October 1990 issue of DDJ (page 12), a reader
+ letter from Thomas Roden appears, pointing out minor problems with
+ the July '90 DDJ article about unreal mode. It is clear from the
+ letter that Mr. Roden had access to an ICE (In-Circuit Emulator),
+ which no doubt greatly eased unreal mode experimentation. An
+ editor's note identifies Mr. Roden as the author of the Nov/Dec '89
+ PJ article.
+ * January 1991--On page 176 of the 1/91 issue of German DOS
+ International magazine, an article titled Vier GByte im Real Mode
+ unter MS-DOS (Four Gigabytes in Real Mode under MS-DOS) by Martin
+ Althaus explains in detail how to change segment limits to enable
+ full 4GB addressing in real mode. The necessity of enabling the A20
+ gate is discussed, and complete example code is presented; the
+ article also notes that the technique does not work when EMM386 (or
+ V86 mode in general) is in use. The article does not explore what
+ might happen if segment attributes in real mode are changed in
+ other ways, beyond setting the G bit. The author does not claim to
+ have invented the unnamed technique, but also does not give any
+ references to earlier publications.
+ * March 1991--In Chapter 18 of Assembly Language Programming for the
+ Intel 80XXX Family, William B. Giles describes in detail (page 676
+ and following) how to program 386 real-mode selectors such that
+ they cover the entire 4GB address space. Example code is also
+ presented. The [53]code samples are dated September 4, 1990. The
+ '89 PJ article is referenced as the source of information on
+ expanding real-mode selector limits.
+ * March 1991--In Chapter 18 of DOS 5: A Developer's Guide, Al
+ Williams again describes unreal mode, with code examples. Note that
+ the exact publication date is unclear; March, August, September,
+ and October 1991 are given. A [54]1992 review of the book discusses
+ Chapter 18 in some detail, together with referencing the '90 DDJ
+ and '89 PJ articles.
+ * 1991--In 80×86 Architecture & Programming Volume II: Architecture
+ Reference (page 72), Rakesh K. Agarwal (a former member of the
+ 80386 design team) clearly explains what all the official Intel
+ documentation carefully doesn't: "When [switching from protected to
+ real mode] is done, the only action taken by the 80×86 is to clear
+ the PE flag. In particular, the current state of the descriptor
+ registers is left undisturbed." And further: "Such a pseudo REAL,
+ or UNREAL, execution mode can cause a REAL mode system to crash,
+ unless used very carefully" (capitalization in original). This may
+ be the first published use of the term "unreal mode".
+ * April 16, 1992--Origin releases [55]Ultima VII: The Black Gate, a
+ game using a custom DOS extender appropriately named "Voodoo".
+ Ultima VII is a proof that unreal mode is a terrible idea for DOS
+ applications; the game requires a significant amount of free
+ conventional memory, but is incompatible with 386-based DOS
+ extenders, as well as with any DOS-compatible advanced operating
+ systems.
+ * 1992--German DOS Extra Nr. 20 (supplement of the DOS International
+ magazine) publishes the HugeRealMode driver, enabling larger than
+ 64K code segments in unreal mode, with restrictions (more below).
+ * June 29, 1993--In his Tutor column starting on page 302, Jeff
+ Prosise [56]wrote a section on "accessing 4GB from real mode"
+ without using LOADALL. "Recently, another method of accessing 4GB
+ [...] was brought to my attention by a reader on PC MagNet." The
+ text gives a brief overview of unreal mode and refers to Chapter 18
+ of DOS 5: A Developer's Guide by Al Williams (also the author of
+ the 1990 DDJ article).
+ * January 1994--Chapter 8 (Extended Memory Access from Real Mode) of
+ Geoff Chappell's DOS Internals provides a very detailed description
+ of unreal mode and HIMEM's use of it. There is talk of "unreal"
+ segment properties (quotes in original, page 356), but the chapter
+ is about "real-mode Flat Memory Model", and "Big Real Mode" is also
+ gets a mention. The chapter also provides a detailed treatment of
+ 286 and 386 LOADALL. It is probably the best description of the
+ inner workings of HIMEM.SYS. Curiously, in Chapter 12 (page 443)
+ Mr. Chappell grumbles that only the outdated HIMEM.SYS 2.01 source
+ code is available on CompuServe (apparently uploaded by Steve
+ Gibson of InfoWorld). Clearly, Microsoft's 1989 and 1992 HIMEM.SYS
+ source code releases did a very good job of flying under the radar
+ when they escaped Mr. Chappell's laser-like attention.
+ * September 21, 1994--IBM files patent application 309,862 titled
+ Method for expanding addressable memory range in real-mode
+ processing to facilitate loading of large programs into high
+ memory. [57]U.S. patent 5,642,491 was granted on June 24, 1997. The
+ patent describes unreal mode, and mentions Chappell's DOS
+ Internals, pages 355-385. The patent makes strange references to a
+ "64-kbyte wrapping feature associated with true 8086 real mode";
+ that might refer to stack wrapping when PUSH and POP instruction
+ are used, but no such wrapping is used for data segments. The
+ patent suggests using unreal mode during operating system
+ initialization only, not at run-time.
+ * 1993-1995--Unreal mode becomes a thing and every up-and-coming
+ programmer writes a [58]utility or [59]library to use it. It is
+ popular among demo coders, who are dismayed when [60]EMM386 use is
+ mandated for Assembly '95, interfering with unreal mode.
+ * November 11, 1994--Italian programmer Daniele Paccaloni
+ [61]publishes UNREAL.EXE, a utility to enable unreal mode on a 386
+ or later CPU, and UNREAL.DOC, a document explaining how unreal mode
+ works. In a continuation of the recurring theme, Mr. Paccaloni
+ appears to have been completely unaware of the fact that unreal
+ mode had been in use for years, or the growing body of literature
+ about it. It appears that Mr. Paccaloni also independently
+ re-invented the term "unreal mode".
+ * September 1995--Robert R. Collins writes an article (NB: The exact
+ date is uncertain, Sep '95 is a guess based on source file
+ timestamps) titled [62]Descriptor Cache Register Anomalies; this is
+ probably the definitive description of unreal mode. Mr. Collins
+ thoroughly explored the CPU behavior using LOADALL for 386 CPUs,
+ and also using SMM together with an ICE on 486, Pentium, and
+ Pentium Pro CPUs. Mr. Collins showed that real mode is much closer
+ to protected mode than one would be led to believe, and most
+ protections are in fact in place. Mr. Collins also found that CS
+ register attributes are handled differently on different CPUs
+ generations. On older processors, far jumps change the CS
+ attributes as described in the Jan '86 memo, while newer CPUs
+ preserve the CS attributes but ignore them in real mode.
+ * February 1996--In the book Protected Mode Software
+ Architecture (chapter 5, page 61), Tom Shanley purportedly
+ describes "Big Real Mode", yet makes the ridiculous claim that
+ segment offsets are still restricted to 64K (while the segment base
+ can be set to any 32-bit address before returning to real mode).
+ Perhaps this is just shows that unreal mode is not well understood,
+ despite numerous authors' attempts to explain it.
+ * September 20, 1996--Phoenix and Intel publish the POST Memory
+ Manager Specification version 1.0 (PMM specification), which
+ mandates the use of "big real mode" (aka unreal mode). Big Real
+ Mode is not explained in detail, presumably because readers already
+ know how it works. The PMM specification is later adopted by the
+ PXE and PCI firmware 3.0 standards. Intel thus manages the
+ astonishing feat of specifying and mandating the use of unreal
+ mode, while simultaneously denying that it exists. Although the
+ original 1.0 PMM specification may be lost, the touched-up [63]PMM
+ 1.01 is available.
+ * August 1998--Dr. Dobb's Journal does not publish an article titled
+ [64]The Segment Descriptor Cache by Robert R. Collins. The article
+ says that "[u]nreal mode has been used commonly since it was
+ discovered on the 80386. Unreal mode is so commonly used, in fact,
+ that Intel has been forced to support this mode as part of legacy
+ 80×86 behavior, though it's never been documented."
+ * August 2004--(This entry is only included for completeness.) In The
+ Unabridged Pentium 4, Tom Shanley correctly describes unreal mode,
+ saying that it "is sometimes referred to as Big Real Mode, Flat
+ Real Mode, Real Big Mode and UnReal Mode" (italics in original).
+ Unfortunately the author makes new, although minor, incorrect
+ claims, namely that CS:IP and SS:SP are always used in real mode,
+ precluding larger than 64K code and stack segments. Larger than 64K
+ code and stack segments are indeed in practice unusable in unreal
+ mode, but for different reasons.
+
+But... Is Unreal Mode Any Good?
+
+ Yes and no. As a general-purpose programming technique it is unusable,
+ because it absolutely cannot function in V86 mode. Transitions to V86
+ mode always force real-mode compatible segment limits and attributes.
+ That means unreal mode cannot be used together with EMM386 or other DOS
+ memory managers utilizing V86 mode. Unreal mode also cannot be used in
+ the DOS boxes of 386 Enhanced Mode Windows 3.x, in the DOS boxes of
+ OS/2 2.x, Windows NT, or Windows 9x. That is an extremely serious
+ drawback.
+
+ The reason why the Voodoo memory manager in Origin's Ultima VII games
+ is unique is that no one else wanted to repeat the same mistake. The
+ Ultima VII: The Black Isle credits capture the situation rather well:
+ Ultima VII's Voodoo Memory Management System
+
+ On the other hand, when unreal mode can be used, it is very useful.
+ HIMEM.SYS uses unreal mode to speed up extended memory access, and
+ perhaps more importantly, preserve normal interrupt latency. Firmware
+ can and does use unreal mode for accessing memory beyond 1 MB during
+ initialization; it avoids switching between real and protected mode,
+ and in firmware there is no danger of segment limits being reset.
+
+ Basic unreal mode (data segments with up to 4G limits, as well as data
+ segments with non-standard base) has become a standard part of the x86
+ architecture.
+
+Unreal LOADALL
+
+ At least as far back as January 1988, Phoenix 386 BIOS combined two
+ undocumented favorites, using unreal mode to emulate the 286 LOADALL
+ instruction. When handling an invalid opcode fault, the BIOS checks
+ whether the faulting instruction is a 286 LOADALL (opcode 0Fh 05h); if
+ so, it examines the provided LOADALL state buffer at address 800h and
+ checks whether the segment bases for ES and/or DS are 1MB or higher. If
+ so, the BIOS builds descriptors with the appropriate bases, loads them
+ in protected mode, and returns to real mode with these "unreal" values
+ in the segment descriptor cache (segment base other than 16 times
+ segment value). The segment bases will get overwritten as soon as ES or
+ DS gets reloaded in real mode, but that is entirely consistent with
+ LOADALL behavior.
+
+ The LOADALL emulation is very limited, but it is sufficient to support
+ the [65]use of LOADALL in OS/2, and possibly others.
+
+ The detailed history of this method is unclear. What's known is that
+ the first 386 BIOS, shipped with the Compaq DeskPro 386 in 1986, did
+ not use unreal mode. Compaq was clearly on good terms with Intel and
+ got the secret memo describing the 386 LOADALL instruction. The Compaq
+ 386 BIOS emulated 286 LOADALL rather accurately using the 386 LOADALL
+ instruction, going at least as far back as September 1986 and
+ continuing to use the same method at least until 1989 (it would no
+ longer work on a 486 CPU).
+
+ IBM's PS/2 Model 80 BIOS did not emulate LOADALL at all, and is
+ therefore uninteresting.
+
+ There are also known to have been more or less no-name 386 systems sold
+ around 1987 which used effectively a 286 BIOS and had no provisions to
+ emulate LOADALL, nor did they use 386 instructions at all.
+
+ It is unknown when Phoenix first introduced unreal mode usage to
+ emulate LOADALL, or if other vendors did that before Phoenix. Clone 386
+ BIOS images from before 1988 are rather difficult to find.
+
+Unreal Mode Compatibility
+
+ Basic unreal mode with extended DS, ES, FS, and/or GS segment limits is
+ widely compatible across all 32-bit x86 CPU implementations. After all
+ that's what is mandated by PMM and by extension, PXE and PCI 3.0
+ Firmware specifications, all standards created with a significant
+ involvement of Intel.
+
+ Extending data segment limits in fact causes shockingly few problems,
+ as evidenced by the fact that HIMEM.SYS does just that. On an 8086,
+ referencing a word at offset 0FFFFh causes a wrap-around and the second
+ byte is fetched from offset zero. The 286 is already incompatible with
+ this behavior, causing a #GP fault. On a 386, any attempt to address
+ beyond 64K likewise causes #GP faults, which are typically fatal.
+ Therefore, functioning software does not do it and extending the
+ segment limit has no visible impact.
+
+ Anything else gets more complicated, and interrupts are the number one
+ enemy. For example, Intel CPUs typically support non-standard data
+ segment attributes; it's possible to make DS read-only, but that won't
+ be terribly useful when running real-mode software. It is likewise
+ possible to set the segment limit smaller than 64K, but that won't make
+ 16-bit software happy.
+
+ It is possible to extend the CS limit up to 4GB and use 32-bit EIP in
+ unreal mode. In practice that is not very usable because interrupts in
+ real mode only save 16-bit IP and restore it on return. The German DOS
+ Extra magazine presented a [66]hair-raising scheme to solve the
+ problem, using the CR3 register to store the high word of EIP so that
+ it could be restored on return from interrupts, but this requires
+ software to manually keep track of the high word. In practice, larger
+ than 64K code segments are unusable in unreal mode because the
+ complications very quickly outweigh any benefits unreal mode might
+ have.
+
+ It is also possible to set the D bit in CS, changing the default
+ operand size to 32-bit. This may reduce the size of unreal code if it
+ is largely 32-bit (by obviating the need for overrides). Unfortunately,
+ this again causes serious trouble with interrupts, because existing
+ 16-bit code cannot run correctly with the D bit set. It is possible to
+ switch to protected mode, clear the D bit, and execute the 16-bit
+ handler every time an interrupt occurs, and in fact it's [67]exactly
+ what fasm does (or at least did in some versions), but with so much
+ mode switching and complexity, the advantages of unreal mode are
+ rapidly lost.
+
+ Similar trouble strikes when attempting to use larger than 64K stack
+ segments. It is possible, but again destroys compatibility with
+ existing 16-bit real-mode code. The complications are such that one
+ might as well use a regular DOS extender and skip all the unreal mode
+ incompatibilities.
+
+ A larger problem is that the "advanced" aspects of unreal mode may not
+ be implemented identically across CPU generations and vendors,
+ precisely because they have never been documented. It is not specified
+ anywhere exactly which segment attributes are ignored and which are
+ honored in real mode. Protected mode, on the other hand, works
+ consistently.
+
+What Does It All Mean?
+
+ Unreal mode is almost certainly an accident of history, a side effect
+ of the fact that the initial 386 design had no architected way of
+ switching from protected mode back to real mode. Once the technique
+ started being used, instead of clearly documenting how it works, Intel
+ in its typical fashion documented only certain aspects of it, such that
+ only programmers who already know about unreal mode find traces of it
+ in the official documentation.
+
+ On the other hand, Intel did leave enough hints in the public
+ documentation that unreal mode appears to have been independently
+ discovered a number of times. What is fascinating is that Microsoft
+ apparently implemented unreal mode support in HIMEM.SYS and made its
+ source code available before any literature on unreal mode was
+ published. Starting in late 1989, articles describing unreal mode were
+ written without knowing of each other, and likely without knowing of
+ Microsoft's prior published work. Reinventing wheels may be satisfying,
+ but in the end it's just not very productive.
+
+ PS: Images of 386 clone BIOSes (other than Compaq and IBM) from 1987
+ and earlier would be worth checking for LOADALL emulation and possible
+ other unreal mode use.
+
+ Feb 2021 Update: The original 231630-001 datasheet has now been
+ recovered and this post updated accordingly.
+ This entry was posted in [68]386, [69]Corrections, [70]Microsoft,
+ [71]PC history, [72]Undocumented. Bookmark the [73]permalink.
+ [74]<- USB 0.9
+ [75]ANOMALY: meaningless REX prefix used ->
+
+43 Responses to A Brief History of Unreal Mode
+
+ 1. [76]Neozeed says:
+ [77]June 15, 2018 at 5:38 am
+ The PCem folks are doing a good job of getting numerous 286/386
+ BIOS running on their framework, they ought to have quite a number
+ of images.
+ 2. [78]Yuhong Bao says:
+ [79]June 15, 2018 at 6:35 am
+ The fun thing is that they never changed the LMSW instruction. I
+ wonder why/
+ 3. dosfan says:
+ [80]June 15, 2018 at 8:33 am
+ Good article but why were you using fasm ? What fasm is doing
+ (32-bit real mode and relocating the IVT via LIDT) is crazy as it's
+ too much effort for too little gain and too many compatibility
+ issues. I'm not sure which is crazier, that or attempting to use
+ real mode paging on the 386 (which isn't allowed on 486 or later
+ CPUs).
+ 4. God says:
+ [81]June 15, 2018 at 1:59 pm
+ Love these sorts of "software archaeology" articles Michal - always
+ informative (and a pleasure) to read. However, something of a typo
+ jumped out at me:
+ >August 1998--Dr. Dobb's Journal does NOT publish an article titled
+ The Segment Descriptor Cache
+ 5. Michal Necasek says:
+ [82]June 15, 2018 at 7:07 pm
+ Presumably because someone was calling it in protected mode with
+ the PM bit clear, and expected to stay in protected mode...
+ 6. Michal Necasek says:
+ [83]June 15, 2018 at 7:07 pm
+ Oh, there are zillions of BIOS images out there. But 386 BIOS
+ images from 1986-87? Nada...
+ 7. Michal Necasek says:
+ [84]June 15, 2018 at 7:09 pm
+ I wasn't, I think the author is certifiably insane But someone else
+ using it made me aware of certain curious behaviors.
+ 8. Michal Necasek says:
+ [85]June 15, 2018 at 7:09 pm
+ It's not a typo. I could find no evidence that the article was ever
+ published in DDJ.
+ 9. Richard Wells says:
+ [86]June 15, 2018 at 9:18 pm
+ Early 386 BIOSes: Don Maslin's collection of ROMs includes the AMI
+ BIOS copyright 1987. I don't believe anyone has collected the
+ Phoenix BIOS used in the 1986 ALR 386 system.
+ While an interesting collection of the history, I believe you
+ overlooked one minor article. The October 1988 issue of Doctor
+ Dobbs had an article entitled "80386 PROTECTED MODE INITIALIZATION"
+ by Neal Marguiles (Intel employee). That title is a misnomer. It
+ covers the allocation of a 4 GB address space followed by a return
+ to real mode plus some other interesting concepts.
+ [87]http://www.drdobbs.com/80386-protected-mode-initialization/1844
+ 08010
+ 10. Rugxulo says:
+ [88]June 16, 2018 at 1:37 am
+ Actually, latest stable FASM seems to be 1.73.04, which silently
+ omits the unreal hack, hence you basically have to always use the
+ DPMI fallback nowadays. Not exactly sure why, he didn't (AFAIR)
+ publicly mention dropping it or why, nor whether it will come back
+ (somewhat unlikely, but he was always proud of his hack). Maybe it
+ (again) conflicted with his (Linux) 64-bit hosted version hack
+ (fasm.x64). Dunno, it's very complicated!
+ 11. dosfan says:
+ [89]June 16, 2018 at 2:17 am
+ A gross hack like that belongs in a technology demo, not production
+ software.
+ I'm not sure why anyone would bother with fasm in the first place ?
+ If you're writing assembly language code for DOS or Windows then
+ there's no reason not to use MASM which was *the* industry standard
+ or the highly MASM-compatible JWasm (or whatever its successor is).
+ 12. [90]Yuhong Bao says:
+ [91]June 18, 2018 at 2:47 am
+ Thinking about it, I wonder if reloading the real mode CS
+ attributes was the main change that allowed switching back to real
+ mode. It is unfortunate that writable code segments did not make
+ even the 80386 BTW.
+ 13. techfury90 says:
+ [92]June 18, 2018 at 3:33 am
+ Unreal mode seems to have been known to PC-98 programmers to an
+ extent as well. Oldest reference I can find is from April 1995:
+ [93]http://www.tsg.ne.jp/buho/189/tsg189.html#8086
+ Author may have discovered it independently. There may be earlier
+ examples in books and/or magazines, but I have yet to uncover them.
+ Their description of their first cited source is slightly
+ ambiguous: it's possible that they learned about unreal mode from
+ them. The stumbling block is that I cannot seem to find their name
+ for unreal mode in general. I don't think they adopted the name we
+ assigned to it, if there is even a "well-known" name.
+ 14. dosfan says:
+ [94]June 18, 2018 at 5:11 am
+ Why is it referred to as "unreal mode" anyway ? That's a foolish
+ and terrible name. Considering that it is referred to as "big real
+ mode" in an Intel doc and it involves setting the big bit in the
+ segment descriptor that should be the official name (not that it
+ really matters today). Certainly "flat real mode" is reasonable
+ alternative since you have direct access to the entire flat 4GB
+ address space.
+ 15. Richard Wells says:
+ [95]June 18, 2018 at 8:53 am
+ "Big real mode" suggests that existing code works exactly the same
+ except that the segments can be larger. "Unreal mode" showcases the
+ differences.
+ Those interested in a more intentional version of a similar concept
+ of accessing 32-bit memory for >64K allocations from 16-bit code
+ could look at 1980 Data General MV 8000 documentation especially
+ the section "MV/8000 C/350 Program Combinations" and the following
+ section "Anomolies."(sic) Some of the issues DG discovered were
+ similar to ones that programmers using Intel chip noticed a decade
+ later.
+ 16. [96]Yuhong Bao says:
+ [97]June 18, 2018 at 11:38 am
+ In this case, the only difference is that the segment limit is
+ larger, and existing real mode code do work the same.
+ 17. Michal Necasek says:
+ [98]June 18, 2018 at 3:03 pm
+ Hmm, I don't see anything about unreal mode in that article. It
+ only says that "to assure proper operation after returning to real
+ mode, the segment registers must be loaded with real mode type
+ selectors while still in protected mode", which is the official
+ Intel party line. And the sample code does exactly that.
+ I think I looked at that AMI BIOS and it's much newer than 1987.
+ It's somewhat common that the copyright message is older than the
+ BIOS date. The opposite also happens. I'm sure there had to be
+ clone BIOSes in 1986-87 but so far I've been unable to locate any.
+ 18. Michal Necasek says:
+ [99]June 18, 2018 at 3:06 pm
+ I know why, It's actually automatic. The unreal mode stuff is only
+ used if the code segment is smaller than 64K. In the newer fasm
+ versions there's more code than that, so the unreal mode code path
+ doesn't get compiled in (or at least not used). For that reason
+ it's very unlikely to come back, because using > 64K unreal mode
+ code segments brings another, much nastier layer of complications.
+ 19. Michal Necasek says:
+ [100]June 18, 2018 at 4:12 pm
+ That sounds quite plausible. It would be a silicon change, but a
+ very localized one, and only visible from switching from protected
+ back to real mode.
+ 20. Michal Necasek says:
+ [101]June 18, 2018 at 4:18 pm
+ Unreal mode because it's real mode, but not conforming to Intel's
+ definition of real mode. "Big real mode" is descriptive but it's
+ unclear whether it covers 32-bit code segments, or code or stack
+ segments with > 64K limits. Same problem with "flat real mode". I
+ suppose you could call it "not-real" mode, or "non-protected mode",
+ but "unreal mode" is really better.
+ To be clear, at least in this article, I use the term "unreal mode"
+ to mean any non-canonical real mode usage. I don't think the terms
+ "big real mode" or "flat real mode" were used to mean anything
+ other than 4G data segment limits, but there's more to unreal mode
+ than that. For example, unreal mode would cover running with
+ segment limits smaller than 64K (just because it's useless doesn't
+ mean it can't be done).
+ 21. Michal Necasek says:
+ [102]June 18, 2018 at 4:20 pm
+ "Breaking the wall", I kind of like that.
+ 22. dosfan says:
+ [103]June 18, 2018 at 8:08 pm
+ Big real mode (4GB address space) is the only thing that was ever
+ useful. Changing the default bit of the code segment would break
+ everything. If anything should be called "unreal mode" it's that
+ since it's still real mode per-se (no protections) but no regular
+ 16-bit real mode program would run properly.
+ 23. Michal Necasek says:
+ [104]June 19, 2018 at 2:02 pm
+ The other thing that was clearly useful (as in widely utilized) was
+ 64K segments with bases at or beyond 1MB. The rest is more about
+ understanding how the damn architecture actually works than about
+ having practical value.
+ 24. dosfan says:
+ [105]June 19, 2018 at 8:22 pm
+ I thought that particular trick was only done via 286 LOADALL. It
+ is of limited use since interrupts have to be disabled because once
+ the segment register is reloaded the base is changed and access
+ beyond 1MB is lost. Big real mode makes that trick impractical.
+ 25. Michal Necasek says:
+ [106]June 19, 2018 at 10:34 pm
+ 286 LOADALL... and the emulation thereof on 386s. Just about every
+ BIOS in the late 1980s and in the 1990s does that. Disabling
+ interrupts for a short time is still much better than resetting the
+ CPU, which isn't fast. Big real mode is certainly much better, but
+ doesn't emulate 286 LOADALL.
+ 26. M says:
+ [107]June 20, 2018 at 12:16 pm
+ I am wondering if the 64K wrap-around alluded to in the IBM patents
+ could be a clumsy reference to A20-behavior?
+ 27. Michal Necasek says:
+ [108]June 20, 2018 at 3:33 pm
+ That would be really clumsy, but as an explanation it makes as much
+ sense as anything
+ 28. M says:
+ [109]June 20, 2018 at 10:34 pm
+ @Michal: Yes - and it is inconsistent with what they write about
+ being compatible with only pmode and real-mode apps not relying on
+ the wrap-around etc. and the A20 wrap-around indeed does exist (and
+ would not be possible to emulate w paging in unreal-mode, as is
+ done in V86). But yeah, definitely clumsy
+ 29. Richard Wells says:
+ [110]June 20, 2018 at 11:13 pm
+ All 16-bit segments wrap around unless concealed behind the complex
+ logic of a 16-bit huge library. Some programs depended on it;
+ sometimes, it just concealed a bug. IBM's note in the patent on
+ wrap around boils down to keeping the standard 16-bit behavior for
+ all programs except those that specifically expect the big segments
+ of unreal mode. Otherwise, a program may be caught accessing memory
+ it didn't plan to leading to interesting results.
+ [111]https://www.pcjs.org/pubs/pc/reference/microsoft/kb/Q58987/
+ shows that wrap around has nothing to do with A20.
+ 30. Michal Necasek says:
+ [112]June 21, 2018 at 12:00 am
+ No, 16-bit segments do not wrap on a 286 or later (except for a
+ special case with stack pushes and pops). If you try to address
+ past the end of a segment, you get a #GP fault. The KB article
+ talks about 16-bit pointers wrapping around, which is a different
+ issue, and more likely than not avoids addressing past the end of a
+ segment.
+ 31. Chris M. says:
+ [113]June 21, 2018 at 4:11 am
+ AMI used dates instead of version numbers for their HiFlex BIOS
+ cores, hence why you would see two dates on a POST screen. One was
+ the "core" date/revision, and one was the built date/revision that
+ the vendor created. I think this changed when the WinBIOS was
+ introduced, but so many vendors went running to Award after that
+ disaster that nobody really noticed when they released a new
+ revision!
+ That 1988 Phoenix core was around for a long time, that 486
+ EISA/VLB board has it despite being from 1993! (it also has the
+ stupid 16MB RAM limitation when ROM shadowing is enabled) I think
+ Dell might have used it for a long time on their custom
+ motherboards as well (later stuff was mostly Intel OEM).
+ 32. Richard Wells says:
+ [114]June 22, 2018 at 11:45 pm
+ 16-bit relative near jumps will be done modulo 64k. That happens
+ according to the documentation even with latest chips. There may be
+ an exception triggered but most real mode systems should wind up
+ ignoring the exception. Otherwise, code involving relative 16-bit
+ jumps would have failed since it required overflow/underflow
+ wrapping to get to the more distant parts of the segment.
+ Memory access is a bit different because Intel decided not to
+ follow the 8086 practice of turning any incorrectly aligned word
+ access into a pair of byte accesses which had a side effect of
+ handling a word that occupied both the first and last bytes of a
+ segment. Speed beat out correctly handling an edge case. Some
+ programs seemed to still work with the exception being ignored
+ because I remember 1990s reports of people finally noticing the
+ exception. (Seemed to work because who knows what was in the second
+ byte of that word.)
+ 33. Michal Necasek says:
+ [115]June 24, 2018 at 2:22 pm
+ Relative jumps are signed and sign-extended, so there's normally no
+ overflow and no truncation. #GP faults are fatal, in real mode they
+ lead to hangs (the BIOS does nothing special, the
+ interrupt/exception handler will likely return but it will just
+ re-trigger the exception immediately) or visible fatal errors
+ (EMM386, QEMM, NTVDM).
+ I don't know if with the split-word access speed beat out
+ compatibility or if Intel decided that it was a quirk not worth
+ preserving. At any rate it was a well documented difference between
+ the 8086 and later CPUs; how much software it affected in practice
+ I don't know.
+ 34. Pingback: [116]Michael Tsai - Blog - A Brief History of Unreal Mode
+ 35. [117]Yuhong Bao says:
+ [118]July 8, 2018 at 1:00 am
+ Thinking about it, I think virtual 8086 mode was designed before
+ they officially supported switching the 80386 to real mode, right?
+ 36. Michal Necasek says:
+ [119]July 8, 2018 at 11:31 am
+ Yes, definitely. And the transitions into and out of V86 mode are
+ clean, with no way to leave junk in segment registers. It's
+ apparent that Intel's idea was that with V86 mode, no one needed
+ real mode anymore. But in the absence of a V86 monitor built into
+ the BIOS(?), that wasn't so simple.
+ 37. Michal Necasek says:
+ [120]July 10, 2018 at 4:16 pm
+ Found this in a 1985 IEEE Micro paper by El-Ayat and Agarwal called
+ The Intel 80386-Architecture and Implementation: "Real mode is
+ useful for initialization and for configuration of the processor
+ data structures needed to run in native 80386 protected mode. The
+ recommended method for running 8086 code is called virtual 86
+ mode." Intel's idea clearly was that real mode was for bring-up
+ only and no one would want to switch in and out. If you wanted to
+ run 8086 code, you were supposed to do that in a V86 monitor. Yet
+ another plan that did not survive first contact with reality.
+ 38. Al Williams says:
+ [121]July 29, 2018 at 7:47 am
+ Nice walk down memory lane. The original DDJ article was written on
+ my Intel Inboard 386 plugged into an XT-style motherboard. This did
+ not switch A20 like a "real" PC/AT and so my original code actually
+ would only work on the Inboard but I didn't know that. Later
+ versions (like in the book) would correct that.
+ I was looking. I got an e-mail from an Italian researcher that had
+ used the technique in some scholarly paper and referenced my
+ article for some kind of SEM or spectroscopy, but I couldn't find
+ that and I don't remember the exact year.
+ In addition -- and again, I can't remember the year -- a guy at
+ Software Development cornered me to tell me how he had started a
+ company based on the mode. I think he was selling a library or
+ something. I don't think he had much success. That had to be right
+ after it published within a year or so. I think he advertised with
+ a small ad in a couple of DDJs.
+ As for Necasek's comment, my DOS Extender PROT did run all the real
+ mode code like BIOS/DOS calls in V86 mode. As far as I know, it may
+ have been the first to do that in a nontrivial way.
+ 39. Michal Necasek says:
+ [122]July 31, 2018 at 4:14 pm
+ I saw the updates to your article... as I like to say, the A20 gate
+ is the most expensive bit in history. It never occurred to me but
+ of course the Inboard had to have a different A20 gate control
+ mechanism.
+ Do you remember anything about the unreal mode origins? Was that
+ something you independently discovered, or was it something that
+ was already common knowledge in certain circles?
+ 40. [123]Myself says:
+ [124]August 30, 2018 at 12:09 am
+ Bummer, I only have the third edition of the i386 datasheet
+ (231630-003, Nov. 1986).
+ In page 2, there is the "update notice" which lists updated
+ paragraphs.
+ If you have the version -002, maybe there are hints about changes
+ in the paragraphs you are emphasizing.
+ 41. [125]Al Williams says:
+ [126]August 30, 2018 at 5:19 pm
+ No I had been tantalized by the discussions in the Intel doc
+ warning you to set up the segment registers before switching. Like
+ you mentioned, they all but told you how to do it and then stopped
+ short. It reminded me of the old story about during prohibition
+ where you could buy a "grape block" that had a warning label:
+ Warning: Do not place in 2 quarts of water in a cool dark place for
+ 3 weeks or an illegal alcoholic beverage will result."
+ I have been experimenting with protected mode programs and
+ naturally had to try it out. The lead times in the publishing
+ business at the time means I probably was writing that about the
+ time the PJ article hit the streets if not a little before.
+ Consider it took us 3 months to publish a letter to the editor! By
+ the time an article went through the snail mail, the contracts came
+ back, then the editing and typesetting with galleys in the mail. So
+ I don't remember an exact date, but I do remember being surprised
+ when the PJ article was called out. None of us had heard of it as
+ PJ was not a major competitor so we were not tracking them the way
+ we did some of the other magazines.
+ 42. Michal Necasek says:
+ [127]August 31, 2018 at 10:16 am
+ Indeed there is. The -002 edition is at
+ [128]http://www.bitsavers.org/components/intel/80386/231746-001_Int
+ roduction_to_the_80386_Apr86.pdf and page 63 in the PDF (page 2 of
+ the actual datasheet) lists the changes, though with no detail.
+ Some of the relevant sections were "revised", but that's all we
+ know until the -001 edition turns up.
+ 43. Michal Necasek says:
+ [129]August 31, 2018 at 12:17 pm
+ Thanks for remembering! And the grape block bit, I've not heard of
+ that. Yeah, the Intel docs were like that, daring developers to see
+ what happens if they don't follow the recipe exactly.
+ It's hard to imagine how long the publishing turnaround was was
+ back then, but that's how it was. Entirely possible that someone
+ wrote an article and someone else independently came up with the
+ same thing before it was published. It's quite likely that the
+ articles in foreign press were also independent discoveries; I dug
+ into the German archives a little but I doubt they were the only
+ ones.
+
+Leave a Reply
+
+ Your email address will not be published. Required fields are marked *
+
+ Comment *
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+
+ Name * ______________________________
+
+ Email * ______________________________
+
+ Website ______________________________
+
+ Post Comment
+
+ D
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+ _____________________________________________
+
+ This site uses Akismet to reduce spam. [130]Learn how your comment data
+ is processed.
+ * Archives
+ + [131]June 2022
+ + [132]May 2022
+ + [133]April 2022
+ + [134]March 2022
+ + [135]February 2022
+ + [136]January 2022
+ + [137]December 2021
+ + [138]November 2021
+ + [139]October 2021
+ + [140]September 2021
+ + [141]August 2021
+ + [142]July 2021
+ + [143]June 2021
+ + [144]May 2021
+ + [145]April 2021
+ + [146]March 2021
+ + [147]February 2021
+ + [148]January 2021
+ + [149]December 2020
+ + [150]November 2020
+ + [151]October 2020
+ + [152]September 2020
+ + [153]August 2020
+ + [154]July 2020
+ + [155]June 2020
+ + [156]May 2020
+ + [157]April 2020
+ + [158]March 2020
+ + [159]February 2020
+ + [160]January 2020
+ + [161]December 2019
+ + [162]November 2019
+ + [163]October 2019
+ + [164]September 2019
+ + [165]August 2019
+ + [166]July 2019
+ + [167]June 2019
+ + [168]May 2019
+ + [169]April 2019
+ + [170]March 2019
+ + [171]February 2019
+ + [172]January 2019
+ + [173]December 2018
+ + [174]November 2018
+ + [175]October 2018
+ + [176]August 2018
+ + [177]July 2018
+ + [178]June 2018
+ + [179]May 2018
+ + [180]April 2018
+ + [181]March 2018
+ + [182]February 2018
+ + [183]January 2018
+ + [184]December 2017
+ + [185]November 2017
+ + [186]October 2017
+ + [187]August 2017
+ + [188]July 2017
+ + [189]June 2017
+ + [190]May 2017
+ + [191]April 2017
+ + [192]March 2017
+ + [193]February 2017
+ + [194]January 2017
+ + [195]December 2016
+ + [196]November 2016
+ + [197]October 2016
+ + [198]September 2016
+ + [199]August 2016
+ + [200]July 2016
+ + [201]June 2016
+ + [202]May 2016
+ + [203]April 2016
+ + [204]March 2016
+ + [205]February 2016
+ + [206]January 2016
+ + [207]December 2015
+ + [208]November 2015
+ + [209]October 2015
+ + [210]September 2015
+ + [211]August 2015
+ + [212]July 2015
+ + [213]June 2015
+ + [214]May 2015
+ + [215]April 2015
+ + [216]March 2015
+ + [217]February 2015
+ + [218]January 2015
+ + [219]December 2014
+ + [220]November 2014
+ + [221]October 2014
+ + [222]September 2014
+ + [223]August 2014
+ + [224]July 2014
+ + [225]June 2014
+ + [226]May 2014
+ + [227]April 2014
+ + [228]March 2014
+ + [229]February 2014
+ + [230]January 2014
+ + [231]December 2013
+ + [232]November 2013
+ + [233]October 2013
+ + [234]September 2013
+ + [235]August 2013
+ + [236]July 2013
+ + [237]June 2013
+ + [238]May 2013
+ + [239]April 2013
+ + [240]March 2013
+ + [241]February 2013
+ + [242]January 2013
+ + [243]December 2012
+ + [244]November 2012
+ + [245]October 2012
+ + [246]September 2012
+ + [247]August 2012
+ + [248]July 2012
+ + [249]June 2012
+ + [250]May 2012
+ + [251]April 2012
+ + [252]March 2012
+ + [253]February 2012
+ + [254]January 2012
+ + [255]December 2011
+ + [256]November 2011
+ + [257]October 2011
+ + [258]September 2011
+ + [259]August 2011
+ + [260]July 2011
+ + [261]June 2011
+ + [262]May 2011
+ + [263]April 2011
+ + [264]March 2011
+ + [265]January 2011
+ + [266]November 2010
+ + [267]October 2010
+ + [268]August 2010
+ + [269]July 2010
+
+ * Categories
+ + [270]286
+ + [271]386
+ + [272]3Com
+ + [273]3Dfx
+ + [274]486
+ + [275]8086/8088
+ + [276]Adaptec
+ + [277]AGP
+ + [278]AMD
+ + [279]AMD64
+ + [280]Apple
+ + [281]Archiving
+ + [282]Assembler
+ + [283]ATi
+ + [284]BIOS
+ + [285]Books
+ + [286]Borland
+ + [287]BSD
+ + [288]Bugs
+ + [289]BusLogic
+ + [290]C
+ + [291]C&T
+ + [292]CD-ROM
+ + [293]Cirrus Logic
+ + [294]CompactFlash
+ + [295]Compaq
+ + [296]Compression
+ + [297]Conner
+ + [298]Corrections
+ + [299]CP/M
+ + [300]Creative Labs
+ + [301]Crystal Semi
+ + [302]Cyrix
+ + [303]DDR RAM
+ + [304]Debugging
+ + [305]DEC
+ + [306]Development
+ + [307]Digital Research
+ + [308]Documentation
+ + [309]DOS
+ + [310]DOS Extenders
+ + [311]Dream
+ + [312]E-mu
+ + [313]Editors
+ + [314]EISA
+ + [315]Ensoniq
+ + [316]ESDI
+ + [317]Ethernet
+ + [318]Fakes
+ + [319]Fixes
+ + [320]Floppies
+ + [321]Graphics
+ + [322]Hardware Hacks
+ + [323]I18N
+ + [324]IBM
+ + [325]IDE
+ + [326]Intel
+ + [327]Internet
+ + [328]Keyboard
+ + [329]Kryoflux
+ + [330]Kurzweil
+ + [331]LAN Manager
+ + [332]Legal
+ + [333]Linux
+ + [334]MCA
+ + [335]Microsoft
+ + [336]MIDI
+ + [337]NetWare
+ + [338]Networking
+ + [339]NeXTSTEP
+ + [340]NFS
+ + [341]Novell
+ + [342]NT
+ + [343]OS X
+ + [344]OS/2
+ + [345]PC architecture
+ + [346]PC hardware
+ + [347]PC history
+ + [348]PC press
+ + [349]PCI
+ + [350]PCMCIA
+ + [351]Pentium
+ + [352]Pentium 4
+ + [353]Pentium II
+ + [354]Pentium III
+ + [355]Pentium Pro
+ + [356]Plug and Play
+ + [357]PowerPC
+ + [358]Pre-release
+ + [359]PS/2
+ + [360]QNX
+ + [361]Quantum
+ + [362]Random Thoughts
+ + [363]RDRAM
+ + [364]Roland
+ + [365]Ryzen
+ + [366]S3
+ + [367]SCO
+ + [368]SCSI
+ + [369]Seagate
+ + [370]Security
+ + [371]Site Management
+ + [372]SMP
+ + [373]Software Hacks
+ + [374]Solaris
+ + [375]Sound
+ + [376]Sound Blaster
+ + [377]Source code
+ + [378]Standards
+ + [379]Storage
+ + [380]Supermicro
+ + [381]TCP/IP
+ + [382]ThinkPad
+ + [383]Trident
+ + [384]UltraSound
+ + [385]Uncategorized
+ + [386]Undocumented
+ + [387]UNIX
+ + [388]UnixWare
+ + [389]USB
+ + [390]VGA
+ + [391]VirtualBox
+ + [392]Virtualization
+ + [393]VLB
+ + [394]Watcom
+ + [395]Wave Blaster
+ + [396]Western Digital
+ + [397]Windows
+ + [398]Windows 95
+ + [399]Windows XP
+ + [400]Wireless
+ + [401]WordStar
+ + [402]x86
+ + [403]Xenix
+ + [404]Xeon
+ + [405]Yamaha
+
+ [406]OS/2 Museum
+ [407]Proudly powered by WordPress.
+
+References
+
+ Visible links:
+ 1. http://www.os2museum.com/wp/feed/
+ 2. http://www.os2museum.com/wp/comments/feed/
+ 3. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/feed/
+ 4. http://www.os2museum.com/wp/wp-json/wp/v2/posts/4169
+ 5. http://www.os2museum.com/wp/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.os2museum.com%2Fwp%2Fa-brief-history-of-unreal-mode%2F
+ 6. http://www.os2museum.com/wp/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.os2museum.com%2Fwp%2Fa-brief-history-of-unreal-mode%2F&format=xml
+ 7. http://www.os2museum.com/wp/
+ 8. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#content
+ 9. http://www.os2museum.com/wp/
+ 10. http://www.os2museum.com/wp/about/
+ 11. http://www.os2museum.com/wp/about/wanted-list/
+ 12. http://www.os2museum.com/wp/os2-history/
+ 13. http://www.os2museum.com/wp/os2-history/os2-beginnings/
+ 14. http://www.os2museum.com/wp/os2-history/os2-1-0/
+ 15. http://www.os2museum.com/wp/os2-history/os2-1-1/
+ 16. http://www.os2museum.com/wp/os2-history/os2-1-2-and-1-3/
+ 17. http://www.os2museum.com/wp/os2-history/os2-16-bit-server/
+ 18. http://www.os2museum.com/wp/os2-history/os2-2-0/
+ 19. http://www.os2museum.com/wp/os2-history/os2-2-1-and-2-11/
+ 20. http://www.os2museum.com/wp/os2-history/os2-warp/
+ 21. http://www.os2museum.com/wp/os2-history/os2-warp-powerpc-edition/
+ 22. http://www.os2museum.com/wp/os2-history/os2-warp-4/
+ 23. http://www.os2museum.com/wp/os2-history/os2-timeline/
+ 24. http://www.os2museum.com/wp/os2-history/os2-library/
+ 25. http://www.os2museum.com/wp/os2-history/os2-library/os2-1-x-sdk/
+ 26. http://www.os2museum.com/wp/os2-history/os2-library/os2-1-x-programming/
+ 27. http://www.os2museum.com/wp/os2-history/os2-library/os2-2-0-technical-library/
+ 28. http://www.os2museum.com/wp/os2-history/os2-videos-1987/
+ 29. http://www.os2museum.com/wp/dos/
+ 30. http://www.os2museum.com/wp/dos/dos-beginnings/
+ 31. http://www.os2museum.com/wp/dos/dos-1-0-and-1-1/
+ 32. http://www.os2museum.com/wp/dos/dos-2-0-and-2-1/
+ 33. http://www.os2museum.com/wp/dos/dos-3-0-3-2/
+ 34. http://www.os2museum.com/wp/dos/dos-3-3/
+ 35. http://www.os2museum.com/wp/dos/dos-4-0/
+ 36. http://www.os2museum.com/wp/dos/dos-library/
+ 37. http://www.os2museum.com/wp/netware-history/
+ 38. http://www.os2museum.com/wp/netware-history/netware-timeline/
+ 39. http://www.os2museum.com/wp/netware-history/netware-library/
+ 40. http://www.os2museum.com/wp/windows-history/
+ 41. http://www.os2museum.com/wp/windows-history/windows-library/
+ 42. http://www.os2museum.com/wp/pc-unix-history/
+ 43. http://www.os2museum.com/wp/pc-unix-history/solaris-2-1-for-x86/
+ 44. http://www.os2museum.com/wp/usb-0-9/
+ 45. http://www.os2museum.com/wp/anomaly-meaningless-rex-prefix-used/
+ 46. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/
+ 47. http://www.os2museum.com/wp/author/michaln/
+ 48. https://en.wikipedia.org/wiki/FASM
+ 49. https://books.google.de/books?id=tSLe3yMjc-AC&lpg=PP1&pg=PT437#v=onepage&q&f=false
+ 50. http://www.gaby.de/ftp/pub/win3x/archive/softlib/xms.exe
+ 51. http://www.megalextoria.com/usenet-archive/news095f1/b118/comp/binaries/ibm/pc/d/00002158.html
+ 52. https://archives.scovetta.com/pub/power_programming/MICROSFT/
+ 53. https://vetusware.com/download/Assembly%20Language%20Programming%20for%20the%20Intel%2080XXX%20Family%201/?id=15869
+ 54. https://link.springer.com/content/pdf/10.3758/BF03203592.pdf
+ 55. https://en.wikipedia.org/wiki/Ultima_VII:_The_Black_Gate
+ 56. https://books.google.com/books?id=gCfzPMoPJWgC&pg=PA304&lpg=PA304&source=bl&ots=rnelM7Nq98&sig=NwfNst9V6yPrUqTMu4oSayD2594&hl=en&sa=X&ved=0ahUKEwinjISbjKjbAhXQZ1AKHfF3D3UQ6AEIPDAC#v=onepage&f=false
+ 57. https://patents.google.com/patent/US5642491
+ 58. http://ftp.lanet.lv/ftp/mirror/x2ftp/msdos/programming/memory/
+ 59. http://ftp.lanet.lv/ftp/mirror/x2ftp/msdos/programming/libs/
+ 60. http://dgi_il.tripod.com/gemmis.txt
+ 61. https://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/simtelnet/msdos/asmutl/unreal10.zip
+ 62. http://www.rcollins.org/Productivity/DescriptorCache.html
+ 63. https://web.archive.org/web/20051111084304/http://www.phoenix.com/NR/rdonlyres/873A00CF-33AC-4775-B77E-08E7B9754993/0/specspmm101.pdf
+ 64. http://www.rcollins.org/ddj/Aug98/Aug98.html
+ 65. http://www.os2museum.com/wp/more-on-loadall-and-os2/
+ 66. http://www.delorie.com/djgpp/doc/rbinter/it/91/37.html
+ 67. https://board.flatassembler.net/topic.php?t=11940
+ 68. http://www.os2museum.com/wp/category/386/
+ 69. http://www.os2museum.com/wp/category/corrections/
+ 70. http://www.os2museum.com/wp/category/microsoft/
+ 71. http://www.os2museum.com/wp/category/pc-history/
+ 72. http://www.os2museum.com/wp/category/undocumented/
+ 73. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/
+ 74. http://www.os2museum.com/wp/usb-0-9/
+ 75. http://www.os2museum.com/wp/anomaly-meaningless-rex-prefix-used/
+ 76. http://virtuallyfun.com/
+ 77. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347786
+ 78. https://yuhongbao.blogspot.com/
+ 79. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347787
+ 80. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347790
+ 81. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347796
+ 82. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347801
+ 83. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347802
+ 84. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347803
+ 85. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347804
+ 86. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347808
+ 87. http://www.drdobbs.com/80386-protected-mode-initialization/184408010
+ 88. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347810
+ 89. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347812
+ 90. https://yuhongbao.blogspot.com/
+ 91. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347858
+ 92. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347860
+ 93. http://www.tsg.ne.jp/buho/189/tsg189.html#8086
+ 94. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347861
+ 95. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347862
+ 96. https://yuhongbao.blogspot.com/
+ 97. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347864
+ 98. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347865
+ 99. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347866
+ 100. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347867
+ 101. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347868
+ 102. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347869
+ 103. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347872
+ 104. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347964
+ 105. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347974
+ 106. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347978
+ 107. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-347996
+ 108. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348003
+ 109. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348035
+ 110. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348037
+ 111. https://www.pcjs.org/pubs/pc/reference/microsoft/kb/Q58987/
+ 112. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348040
+ 113. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348048
+ 114. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348117
+ 115. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348188
+ 116. https://mjtsai.com/blog/2018/07/03/a-brief-history-of-unreal-mode/
+ 117. https://yuhongbao.blogspot.com/
+ 118. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348565
+ 119. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348575
+ 120. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348630
+ 121. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-348979
+ 122. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-349002
+ 123. http://temlib.org/
+ 124. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-349848
+ 125. http://www.awce.com/
+ 126. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-349870
+ 127. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-349883
+ 128. http://www.bitsavers.org/components/intel/80386/231746-001_Introduction_to_the_80386_Apr86.pdf
+ 129. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/#comment-349890
+ 130. https://akismet.com/privacy/
+ 131. http://www.os2museum.com/wp/2022/06/
+ 132. http://www.os2museum.com/wp/2022/05/
+ 133. http://www.os2museum.com/wp/2022/04/
+ 134. http://www.os2museum.com/wp/2022/03/
+ 135. http://www.os2museum.com/wp/2022/02/
+ 136. http://www.os2museum.com/wp/2022/01/
+ 137. http://www.os2museum.com/wp/2021/12/
+ 138. http://www.os2museum.com/wp/2021/11/
+ 139. http://www.os2museum.com/wp/2021/10/
+ 140. http://www.os2museum.com/wp/2021/09/
+ 141. http://www.os2museum.com/wp/2021/08/
+ 142. http://www.os2museum.com/wp/2021/07/
+ 143. http://www.os2museum.com/wp/2021/06/
+ 144. http://www.os2museum.com/wp/2021/05/
+ 145. http://www.os2museum.com/wp/2021/04/
+ 146. http://www.os2museum.com/wp/2021/03/
+ 147. http://www.os2museum.com/wp/2021/02/
+ 148. http://www.os2museum.com/wp/2021/01/
+ 149. http://www.os2museum.com/wp/2020/12/
+ 150. http://www.os2museum.com/wp/2020/11/
+ 151. http://www.os2museum.com/wp/2020/10/
+ 152. http://www.os2museum.com/wp/2020/09/
+ 153. http://www.os2museum.com/wp/2020/08/
+ 154. http://www.os2museum.com/wp/2020/07/
+ 155. http://www.os2museum.com/wp/2020/06/
+ 156. http://www.os2museum.com/wp/2020/05/
+ 157. http://www.os2museum.com/wp/2020/04/
+ 158. http://www.os2museum.com/wp/2020/03/
+ 159. http://www.os2museum.com/wp/2020/02/
+ 160. http://www.os2museum.com/wp/2020/01/
+ 161. http://www.os2museum.com/wp/2019/12/
+ 162. http://www.os2museum.com/wp/2019/11/
+ 163. http://www.os2museum.com/wp/2019/10/
+ 164. http://www.os2museum.com/wp/2019/09/
+ 165. http://www.os2museum.com/wp/2019/08/
+ 166. http://www.os2museum.com/wp/2019/07/
+ 167. http://www.os2museum.com/wp/2019/06/
+ 168. http://www.os2museum.com/wp/2019/05/
+ 169. http://www.os2museum.com/wp/2019/04/
+ 170. http://www.os2museum.com/wp/2019/03/
+ 171. http://www.os2museum.com/wp/2019/02/
+ 172. http://www.os2museum.com/wp/2019/01/
+ 173. http://www.os2museum.com/wp/2018/12/
+ 174. http://www.os2museum.com/wp/2018/11/
+ 175. http://www.os2museum.com/wp/2018/10/
+ 176. http://www.os2museum.com/wp/2018/08/
+ 177. http://www.os2museum.com/wp/2018/07/
+ 178. http://www.os2museum.com/wp/2018/06/
+ 179. http://www.os2museum.com/wp/2018/05/
+ 180. http://www.os2museum.com/wp/2018/04/
+ 181. http://www.os2museum.com/wp/2018/03/
+ 182. http://www.os2museum.com/wp/2018/02/
+ 183. http://www.os2museum.com/wp/2018/01/
+ 184. http://www.os2museum.com/wp/2017/12/
+ 185. http://www.os2museum.com/wp/2017/11/
+ 186. http://www.os2museum.com/wp/2017/10/
+ 187. http://www.os2museum.com/wp/2017/08/
+ 188. http://www.os2museum.com/wp/2017/07/
+ 189. http://www.os2museum.com/wp/2017/06/
+ 190. http://www.os2museum.com/wp/2017/05/
+ 191. http://www.os2museum.com/wp/2017/04/
+ 192. http://www.os2museum.com/wp/2017/03/
+ 193. http://www.os2museum.com/wp/2017/02/
+ 194. http://www.os2museum.com/wp/2017/01/
+ 195. http://www.os2museum.com/wp/2016/12/
+ 196. http://www.os2museum.com/wp/2016/11/
+ 197. http://www.os2museum.com/wp/2016/10/
+ 198. http://www.os2museum.com/wp/2016/09/
+ 199. http://www.os2museum.com/wp/2016/08/
+ 200. http://www.os2museum.com/wp/2016/07/
+ 201. http://www.os2museum.com/wp/2016/06/
+ 202. http://www.os2museum.com/wp/2016/05/
+ 203. http://www.os2museum.com/wp/2016/04/
+ 204. http://www.os2museum.com/wp/2016/03/
+ 205. http://www.os2museum.com/wp/2016/02/
+ 206. http://www.os2museum.com/wp/2016/01/
+ 207. http://www.os2museum.com/wp/2015/12/
+ 208. http://www.os2museum.com/wp/2015/11/
+ 209. http://www.os2museum.com/wp/2015/10/
+ 210. http://www.os2museum.com/wp/2015/09/
+ 211. http://www.os2museum.com/wp/2015/08/
+ 212. http://www.os2museum.com/wp/2015/07/
+ 213. http://www.os2museum.com/wp/2015/06/
+ 214. http://www.os2museum.com/wp/2015/05/
+ 215. http://www.os2museum.com/wp/2015/04/
+ 216. http://www.os2museum.com/wp/2015/03/
+ 217. http://www.os2museum.com/wp/2015/02/
+ 218. http://www.os2museum.com/wp/2015/01/
+ 219. http://www.os2museum.com/wp/2014/12/
+ 220. http://www.os2museum.com/wp/2014/11/
+ 221. http://www.os2museum.com/wp/2014/10/
+ 222. http://www.os2museum.com/wp/2014/09/
+ 223. http://www.os2museum.com/wp/2014/08/
+ 224. http://www.os2museum.com/wp/2014/07/
+ 225. http://www.os2museum.com/wp/2014/06/
+ 226. http://www.os2museum.com/wp/2014/05/
+ 227. http://www.os2museum.com/wp/2014/04/
+ 228. http://www.os2museum.com/wp/2014/03/
+ 229. http://www.os2museum.com/wp/2014/02/
+ 230. http://www.os2museum.com/wp/2014/01/
+ 231. http://www.os2museum.com/wp/2013/12/
+ 232. http://www.os2museum.com/wp/2013/11/
+ 233. http://www.os2museum.com/wp/2013/10/
+ 234. http://www.os2museum.com/wp/2013/09/
+ 235. http://www.os2museum.com/wp/2013/08/
+ 236. http://www.os2museum.com/wp/2013/07/
+ 237. http://www.os2museum.com/wp/2013/06/
+ 238. http://www.os2museum.com/wp/2013/05/
+ 239. http://www.os2museum.com/wp/2013/04/
+ 240. http://www.os2museum.com/wp/2013/03/
+ 241. http://www.os2museum.com/wp/2013/02/
+ 242. http://www.os2museum.com/wp/2013/01/
+ 243. http://www.os2museum.com/wp/2012/12/
+ 244. http://www.os2museum.com/wp/2012/11/
+ 245. http://www.os2museum.com/wp/2012/10/
+ 246. http://www.os2museum.com/wp/2012/09/
+ 247. http://www.os2museum.com/wp/2012/08/
+ 248. http://www.os2museum.com/wp/2012/07/
+ 249. http://www.os2museum.com/wp/2012/06/
+ 250. http://www.os2museum.com/wp/2012/05/
+ 251. http://www.os2museum.com/wp/2012/04/
+ 252. http://www.os2museum.com/wp/2012/03/
+ 253. http://www.os2museum.com/wp/2012/02/
+ 254. http://www.os2museum.com/wp/2012/01/
+ 255. http://www.os2museum.com/wp/2011/12/
+ 256. http://www.os2museum.com/wp/2011/11/
+ 257. http://www.os2museum.com/wp/2011/10/
+ 258. http://www.os2museum.com/wp/2011/09/
+ 259. http://www.os2museum.com/wp/2011/08/
+ 260. http://www.os2museum.com/wp/2011/07/
+ 261. http://www.os2museum.com/wp/2011/06/
+ 262. http://www.os2museum.com/wp/2011/05/
+ 263. http://www.os2museum.com/wp/2011/04/
+ 264. http://www.os2museum.com/wp/2011/03/
+ 265. http://www.os2museum.com/wp/2011/01/
+ 266. http://www.os2museum.com/wp/2010/11/
+ 267. http://www.os2museum.com/wp/2010/10/
+ 268. http://www.os2museum.com/wp/2010/08/
+ 269. http://www.os2museum.com/wp/2010/07/
+ 270. http://www.os2museum.com/wp/category/286/
+ 271. http://www.os2museum.com/wp/category/386/
+ 272. http://www.os2museum.com/wp/category/3com/
+ 273. http://www.os2museum.com/wp/category/3dfx/
+ 274. http://www.os2museum.com/wp/category/486/
+ 275. http://www.os2museum.com/wp/category/8086-8088/
+ 276. http://www.os2museum.com/wp/category/adaptec/
+ 277. http://www.os2museum.com/wp/category/agp/
+ 278. http://www.os2museum.com/wp/category/amd/
+ 279. http://www.os2museum.com/wp/category/amd64/
+ 280. http://www.os2museum.com/wp/category/apple/
+ 281. http://www.os2museum.com/wp/category/archiving/
+ 282. http://www.os2museum.com/wp/category/assembler/
+ 283. http://www.os2museum.com/wp/category/ati/
+ 284. http://www.os2museum.com/wp/category/bios/
+ 285. http://www.os2museum.com/wp/category/books/
+ 286. http://www.os2museum.com/wp/category/borland/
+ 287. http://www.os2museum.com/wp/category/bsd/
+ 288. http://www.os2museum.com/wp/category/bugs/
+ 289. http://www.os2museum.com/wp/category/buslogic/
+ 290. http://www.os2museum.com/wp/category/c/
+ 291. http://www.os2museum.com/wp/category/ct/
+ 292. http://www.os2museum.com/wp/category/cd-rom/
+ 293. http://www.os2museum.com/wp/category/cirrus-logic/
+ 294. http://www.os2museum.com/wp/category/compactflash/
+ 295. http://www.os2museum.com/wp/category/compaq/
+ 296. http://www.os2museum.com/wp/category/compression/
+ 297. http://www.os2museum.com/wp/category/conner/
+ 298. http://www.os2museum.com/wp/category/corrections/
+ 299. http://www.os2museum.com/wp/category/cp-m/
+ 300. http://www.os2museum.com/wp/category/creative-labs/
+ 301. http://www.os2museum.com/wp/category/crystal-semi/
+ 302. http://www.os2museum.com/wp/category/cyrix/
+ 303. http://www.os2museum.com/wp/category/ddr-ram/
+ 304. http://www.os2museum.com/wp/category/debugging/
+ 305. http://www.os2museum.com/wp/category/dec/
+ 306. http://www.os2museum.com/wp/category/development/
+ 307. http://www.os2museum.com/wp/category/digital-research/
+ 308. http://www.os2museum.com/wp/category/documentation/
+ 309. http://www.os2museum.com/wp/category/dos/
+ 310. http://www.os2museum.com/wp/category/dos-extenders/
+ 311. http://www.os2museum.com/wp/category/dream/
+ 312. http://www.os2museum.com/wp/category/e-mu/
+ 313. http://www.os2museum.com/wp/category/editors/
+ 314. http://www.os2museum.com/wp/category/eisa/
+ 315. http://www.os2museum.com/wp/category/ensoniq/
+ 316. http://www.os2museum.com/wp/category/esdi/
+ 317. http://www.os2museum.com/wp/category/ethernet/
+ 318. http://www.os2museum.com/wp/category/fakes/
+ 319. http://www.os2museum.com/wp/category/fixes/
+ 320. http://www.os2museum.com/wp/category/floppies/
+ 321. http://www.os2museum.com/wp/category/graphics/
+ 322. http://www.os2museum.com/wp/category/hardware-hacks/
+ 323. http://www.os2museum.com/wp/category/i18n/
+ 324. http://www.os2museum.com/wp/category/ibm/
+ 325. http://www.os2museum.com/wp/category/ide/
+ 326. http://www.os2museum.com/wp/category/intel/
+ 327. http://www.os2museum.com/wp/category/internet/
+ 328. http://www.os2museum.com/wp/category/keyboard/
+ 329. http://www.os2museum.com/wp/category/kryoflux/
+ 330. http://www.os2museum.com/wp/category/kurzweil/
+ 331. http://www.os2museum.com/wp/category/lan-manager/
+ 332. http://www.os2museum.com/wp/category/legal/
+ 333. http://www.os2museum.com/wp/category/linux/
+ 334. http://www.os2museum.com/wp/category/mca/
+ 335. http://www.os2museum.com/wp/category/microsoft/
+ 336. http://www.os2museum.com/wp/category/midi/
+ 337. http://www.os2museum.com/wp/category/netware/
+ 338. http://www.os2museum.com/wp/category/networking/
+ 339. http://www.os2museum.com/wp/category/nextstep/
+ 340. http://www.os2museum.com/wp/category/nfs/
+ 341. http://www.os2museum.com/wp/category/novell/
+ 342. http://www.os2museum.com/wp/category/nt/
+ 343. http://www.os2museum.com/wp/category/os-x/
+ 344. http://www.os2museum.com/wp/category/os2/
+ 345. http://www.os2museum.com/wp/category/pc-architecture/
+ 346. http://www.os2museum.com/wp/category/pc-hardware/
+ 347. http://www.os2museum.com/wp/category/pc-history/
+ 348. http://www.os2museum.com/wp/category/pc-press/
+ 349. http://www.os2museum.com/wp/category/pci/
+ 350. http://www.os2museum.com/wp/category/pcmcia/
+ 351. http://www.os2museum.com/wp/category/pentium/
+ 352. http://www.os2museum.com/wp/category/pentium-4/
+ 353. http://www.os2museum.com/wp/category/pentium-ii/
+ 354. http://www.os2museum.com/wp/category/pentium-iii/
+ 355. http://www.os2museum.com/wp/category/pentium-pro/
+ 356. http://www.os2museum.com/wp/category/plug-and-play/
+ 357. http://www.os2museum.com/wp/category/powerpc/
+ 358. http://www.os2museum.com/wp/category/pre-release/
+ 359. http://www.os2museum.com/wp/category/ps2/
+ 360. http://www.os2museum.com/wp/category/qnx/
+ 361. http://www.os2museum.com/wp/category/quantum/
+ 362. http://www.os2museum.com/wp/category/random-thoughts/
+ 363. http://www.os2museum.com/wp/category/rdram/
+ 364. http://www.os2museum.com/wp/category/roland/
+ 365. http://www.os2museum.com/wp/category/ryzen/
+ 366. http://www.os2museum.com/wp/category/s3/
+ 367. http://www.os2museum.com/wp/category/sco/
+ 368. http://www.os2museum.com/wp/category/scsi/
+ 369. http://www.os2museum.com/wp/category/seagate/
+ 370. http://www.os2museum.com/wp/category/security/
+ 371. http://www.os2museum.com/wp/category/site-management/
+ 372. http://www.os2museum.com/wp/category/smp/
+ 373. http://www.os2museum.com/wp/category/software-hacks/
+ 374. http://www.os2museum.com/wp/category/solaris/
+ 375. http://www.os2museum.com/wp/category/sound/
+ 376. http://www.os2museum.com/wp/category/sound-blaster/
+ 377. http://www.os2museum.com/wp/category/source-code/
+ 378. http://www.os2museum.com/wp/category/standards/
+ 379. http://www.os2museum.com/wp/category/storage/
+ 380. http://www.os2museum.com/wp/category/supermicro/
+ 381. http://www.os2museum.com/wp/category/tcp-ip/
+ 382. http://www.os2museum.com/wp/category/thinkpad/
+ 383. http://www.os2museum.com/wp/category/trident/
+ 384. http://www.os2museum.com/wp/category/ultrasound/
+ 385. http://www.os2museum.com/wp/category/uncategorized/
+ 386. http://www.os2museum.com/wp/category/undocumented/
+ 387. http://www.os2museum.com/wp/category/unix/
+ 388. http://www.os2museum.com/wp/category/unixware/
+ 389. http://www.os2museum.com/wp/category/usb/
+ 390. http://www.os2museum.com/wp/category/vga/
+ 391. http://www.os2museum.com/wp/category/virtualbox/
+ 392. http://www.os2museum.com/wp/category/virtualization/
+ 393. http://www.os2museum.com/wp/category/vlb/
+ 394. http://www.os2museum.com/wp/category/watcom/
+ 395. http://www.os2museum.com/wp/category/wave-blaster/
+ 396. http://www.os2museum.com/wp/category/western-digital/
+ 397. http://www.os2museum.com/wp/category/windows/
+ 398. http://www.os2museum.com/wp/category/windows-95/
+ 399. http://www.os2museum.com/wp/category/windows-xp/
+ 400. http://www.os2museum.com/wp/category/wireless/
+ 401. http://www.os2museum.com/wp/category/wordstar/
+ 402. http://www.os2museum.com/wp/category/x86/
+ 403. http://www.os2museum.com/wp/category/xenix/
+ 404. http://www.os2museum.com/wp/category/xeon/
+ 405. http://www.os2museum.com/wp/category/yamaha/
+ 406. http://www.os2museum.com/wp/
+ 407. https://wordpress.org/
+
+ Hidden links:
+ 409. http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/ultima-vii-voodoo/
diff --git a/floppy/doc/www.spinics.net_lists_linux-integrity_msg14580.txt b/floppy/doc/www.spinics.net_lists_linux-integrity_msg14580.txt
new file mode 100644
index 0000000..3d25656
--- /dev/null
+++ b/floppy/doc/www.spinics.net_lists_linux-integrity_msg14580.txt
@@ -0,0 +1,188 @@
+ #[1]Linux Integrity
+
+ _________________________ Search
+
+ Re: Fwd: How to extract linux kernel version information from a kernel image?
+
+ [[2]Date Prev][[3]Date Next][[4]Thread Prev][[5]Thread Next][[6]Date
+ Index][[7]Thread Index]
+
+
+ [INS: :INS]
+ __________________________________________________________________
+
+ * Subject: Re: Fwd: How to extract linux kernel version information
+ from a kernel image?
+ * From: Raphael Gianotti <raphgi@xxxxxxxxxxxxxxxxxxx>
+ * Date: Mon, 28 Sep 2020 15:31:38 -0700
+ * In-reply-to: <[8]a1c877b3-9f99-04a6-2f21-495fc62d0591@unh.edu>
+ * User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0)
+ Gecko/20100101 Thunderbird/68.12.0
+ __________________________________________________________________
+
+On 9/25/2020 4:06 PM, Kayaalp, Mehmet wrote:
+
+On 9/24/20 4:05 PM, Raphael Gianotti wrote:
+
+Forwarding this here since the final intent here is an IMA related
+change to see if anyone has any suggestions.
+
+
+-------- Forwarded Message --------
+Subject: How to extract linux kernel version information from a
+kernel
+image?
+Date: Fri, 18 Sep 2020 12:47:13 -0700
+From: Raphael Gianotti <raphgi@xxxxxxxxxxxxxxxxxxx>
+To: linux-kernel@xxxxxxxxxxxxxxx
+
+
+
+Hi,
+
+I have been investigating a way to extract the version strong from a
+kernel image (e.g., vmlinux). The version string I've been looking at is
+essentially the linux_banner symbol.
+
+We'll use IMA to measure the version string on the kexec system call,
+providing a way for an attestation service, for instance, to attest to
+what version of the kernel is running on the client.
+
+I haven't found a way to extract the version from the image that isn't
+simply searching the whole image for it. I was hoping someone here may
+be able to point me to a better approach to retrieve the linux_banner
+symbol value from an image or any existing kernel code that does
+similar parsing.
+
+If that matters for any suggestions, my current focus is on ARM64 images
+(if the code ends up having to be arch specific).
+
+Thanks,
+
+-Raphael
+
+
+In Linux/x86 Boot Protocol [1], the kernel header contains a pointer to
+the kernel_version string at offset 020E (2-byte value):
+
+ # hexdump -s 0x020E -n 2 -e '/2 "%x"'
+/boot/vmlinuz-5.4.0-48-generic; echo
+ 3900
+
+Starting after the header (512 bytes), the string is 0x3900 bytes into
+the vmlinuz file:
+
+ # dd bs=1 skip=$((0x3900+512)) if=/boot/vmlinuz-5.4.0-48-generic
+|tr -s '\000' '\n'|head -n 1
+ 5.4.0-48-generic (buildd@lcy01-amd64-010) #52-Ubuntu SMP Thu Sep 10
+10:58:49 UTC 2020
+
+In ARM64, the vmlinux is stripped of symbols and compressed into the
+bzImage. To find the linux_banner, System.map file is needed:
+
+ # grep ' linux_banner$' /boot/System.map-5.4.0-48-generic
+ ffff800010df00d0 R linux_banner
+
+The offset into the file can be found by subtracting the load address:
+
+ # grep ' _head$' /boot/System.map-5.4.0-48-generic
+ ffff800010080000 t _head
+
+ # zcat /boot/vmlinuz-5.4.0-48-generic | dd bs=1
+skip=$((0xffff800010df00d0-0xffff800010080000)) | tr -s '\000' '\n' |
+head -n 1
+ Linux version 5.4.0-48-generic (buildd@bos02-arm64-053) (gcc
+version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #52-Ubuntu SMP Thu Sep 10
+11:01:50 UTC 2020 (Ubuntu 5.4.0-48.52-generic 5.4.60)
+
+[1]: [9]https://www.kernel.org/doc/html/latest/x86/boot.html
+
+Mehmet
+
+
+
+ Regarding the arm64 vmlinux files, I've noticed in some, if you run the
+ file command for them in the terminal, it does give a "not stripped"
+ string in its result. Also, for those files, objdump does print out
+ symbols, including linux_banner. I've found that out last Friday and I
+ am in the process of looking at what the code for objdump to see how it
+ finds the symbols there and see if I can get its value from the image.
+ I wonder if I am missing something and that reported linux_banner
+ symbol I get from objdump is not what I think it is, so do let me know
+ if I am just wasting my time in investigating that when it comes to
+ arm64.
+
+Thanks,
+
+Raphael
+
+
+
+ __________________________________________________________________
+
+ [[10]Date Prev][[11]Date Next][[12]Thread Prev][[13]Thread
+ Next][[14]Date Index][[15]Thread Index]
+ * References:
+ + [16]Fwd: How to extract linux kernel version information from
+ a kernel image?
+ o From: Raphael Gianotti
+ + [17]Re: Fwd: How to extract linux kernel version information
+ from a kernel image?
+ o From: Kayaalp, Mehmet
+
+ * Prev by Date: [18]Re: [PATCH] Fix Atmel TPM crash caused by too
+ frequent queries
+ * Next by Date: [19]More interrupt problems with TIS TPM
+ * Previous by thread: [20]Re: Fwd: How to extract linux kernel
+ version information from a kernel image?
+ * Next by thread: [21][PATCH 0/4] TPM 2.0 fixes in IMA tests
+ * Index(es):
+ + [22]Date
+ + [23]Thread
+
+ [24][Index of Archives] [25][Linux Kernel]
+ [26][Linux Kernel Hardening] [27][Linux NFS] [28][Linux NILFS]
+ [29][Linux USB Devel] [30][Video for Linux]
+ [31][Linux Audio Users] [32][Yosemite News] [33][Linux SCSI]
+ __________________________________________________________________
+
+ [INS: :INS]
+
+ [34]Powered by Linux
+
+References
+
+ 1. https://feeds.feedburner.com/LinuxIntegrity
+ 2. https://www.spinics.net/lists/linux-integrity/msg14579.html
+ 3. https://www.spinics.net/lists/linux-integrity/msg14581.html
+ 4. https://www.spinics.net/lists/linux-integrity/msg14511.html
+ 5. https://www.spinics.net/lists/linux-integrity/msg14496.html
+ 6. https://www.spinics.net/lists/linux-integrity/mail5.html#14580
+ 7. https://www.spinics.net/lists/linux-integrity/thrd5.html#14580
+ 8. https://www.spinics.net/lists/linux-integrity/msg14511.html
+ 9. https://www.kernel.org/doc/html/latest/x86/boot.html
+ 10. https://www.spinics.net/lists/linux-integrity/msg14579.html
+ 11. https://www.spinics.net/lists/linux-integrity/msg14581.html
+ 12. https://www.spinics.net/lists/linux-integrity/msg14511.html
+ 13. https://www.spinics.net/lists/linux-integrity/msg14496.html
+ 14. https://www.spinics.net/lists/linux-integrity/mail5.html#14580
+ 15. https://www.spinics.net/lists/linux-integrity/thrd5.html#14580
+ 16. https://www.spinics.net/lists/linux-integrity/msg14473.html
+ 17. https://www.spinics.net/lists/linux-integrity/msg14511.html
+ 18. https://www.spinics.net/lists/linux-integrity/msg14579.html
+ 19. https://www.spinics.net/lists/linux-integrity/msg14581.html
+ 20. https://www.spinics.net/lists/linux-integrity/msg14511.html
+ 21. https://www.spinics.net/lists/linux-integrity/msg14496.html
+ 22. https://www.spinics.net/lists/linux-integrity/mail5.html#14580
+ 23. https://www.spinics.net/lists/linux-integrity/thrd5.html#14580
+ 24. https://www.spinics.net/lists/
+ 25. https://www.spinics.net/lists/kernel/
+ 26. https://www.spinics.net/lists/kernel-hardening/
+ 27. https://www.spinics.net/lists/linux-nfs/
+ 28. https://www.spinics.net/lists/linux-nilfs/
+ 29. https://www.spinics.net/lists/linux-usb/
+ 30. https://www.spinics.net/lists/vfl/
+ 31. https://www.spinics.net/lists/linux-audio-users/
+ 32. https://yosemitenews.info/
+ 33. https://www.spinics.net/lists/linux-scsi/
+ 34. https://www.spinics.net/lists/
diff --git a/floppy/doc/yeokhengmeng.com_2018_01_make-the-486-great-again.txt b/floppy/doc/yeokhengmeng.com_2018_01_make-the-486-great-again.txt
new file mode 100644
index 0000000..bb36547
--- /dev/null
+++ b/floppy/doc/yeokhengmeng.com_2018_01_make-the-486-great-again.txt
@@ -0,0 +1,747 @@
+ [1]post
+
+ [2]Home [3]Aviation [4]Retrocomputing [5]Categories [6]Favourite Quotes
+ [7]About
+
+ [8]en
+ [9]English (en) [10]­ (zh)
+
+ [11]Kheng Meng profile pic
+
+Yeo Kheng Meng
+
+ Maker, Coder, Private Pilot, Retrocomputing Enthusiast
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+
+[12]A Science Project: "Make the 486 Great Again!" - Modern Linux in an
+ancient PC
+
+ January 6, 2018
+
+ 17 minutes read
+
+ What is the oldest x86 processor that is still supported by a modern
+ Linux kernel in present time?
+
+ I asked the above quiz question during the [13]Geekcamp tech conference
+ in Nov 2017 during [14]my emcee role. The theoretical answer as you can
+ glean from the title of this post is the [15]486 which was first
+ released in 1989. I determined that fact from this article where
+ [16]support for the 386 was dropped in Dec 2012.
+
+ To get you interested, here is the result of my effort.
+
+ The white smudge on the screen is not the camera's fault, there is
+ really a backlight problem with my old 19" monitor.
+
+ IFRAME: [17]https://www.youtube.com/embed/4qSziR6sD8Q
+
+ You can skip to 11:39 when the boot completes.
+
+ 00:00 to 00:46 - BIOS
+
+ 00:46 to 11:39 - Bootup. It takes almost 11mins to bootup!
+
+ 11:39 to 13:14 - System specs, IP info and ALSA mixer
+
+ 13:14 to 15:00 - Playing music via Sound Blaster 16
+
+ 15:00 to 17:25 - SSH while playing (stuttering) music in the
+ background. With AlsaMixer adjusting volume.
+
+ 17:25 to 17:48 - Opening a webpage hosted by nginx.
+
+ 18:10 to 20:13 - Git clone a repo.
+
+ 20:13 to 21:13 - Using Python 3.6.3
+
+ 21:13 to 21:43 - Cleanup and issue shutdown command
+
+ 21:43 to End - Shutdown. It takes 5.5 mins to shutdown!
+
+ Interested in how I got a modern Linux kernel 4.14.8 (released in
+ December 2017) to run on this ancient PC? Read on!
+
+Prior work and research
+
+ Last month, I took part in a [18]Super Silly Hackathon with my teammate
+ [19]Hui Jing where we installed Damn Small Linux (DSL) on that same 486
+ PC.
+
+ I bought this machine with the original intent to play old DOS games in
+ their original glory. Anyway, we managed to play music and even host a
+ webpage! See her fantastically detailed write-up [20]here.
+
+ The version 4.4.10 of DSL we used was released in Nov 2008. It used the
+ kernel version [21]2.4.31 that was released in June 2005 which is a
+ dinosaur by today's standards.
+
+ Throughout the entire time, the question of whether the theoretical
+ answer of 486 is actually true lingered in my head. I did some research
+ and found out [22]someone actually installed Gentoo Linux with a modern
+ kernel on a 486 PC. At least someone said it was possible although he
+ did not give any hard evidence :( He advised that one should use a
+ modern PC to do the source code compilation which I'll show later.
+
+What is Gentoo Linux and why?
+
+ Gentoo Linux is a Linux distribution built using the Portage package
+ management system. Unlike a binary software distribution, the source
+ code is compiled locally according to the user's preferences and is
+ often optimized for the specific type of computer.
+
+ From [23]Gentoo's Wikipedia page
+
+ The issue with modern Linux distributions like Debian/Ubuntu/Arch is
+ that they distribute compiled binary packages. Typically this is good
+ enough as compiling every single package you want from scratch is time
+ consuming and most people ain't got the time for that.
+
+ Although the 486 is theoretically supported by the modern Linux kernel,
+ this is not true on the distribution and package level. For example,
+ Debian has [24]dropped support for older 586 32-bit CPUs as of 2016.
+ Thus, the oldest supported x86 CPU by Debian is the 686. The
+ 6th-generation x86 started with the Pentium Pro released in 1995 or its
+ more commonly known variant Pentium 2 was released in 1997.
+
+ Therefore, it is no longer possible to directly use a typical modern
+ distribution on a 486 PC. But on an atypical distribution like Gentoo
+ which requires you to compile every package, this might still be
+ possible.
+
+The hardware
+
+The ancient 486 PC: [25]IBM PS/1 Consultant 2133 19C (released in 1993)
+
+ Marvel at the original specs of this machine. The CPU and RAM were
+ fully upgraded by the seller before I bought it.
+
+Specifications:
+
+ * [26]AMD 5X86 486-clone running at 133mhz
+ + Similar performance to Pentium 75Mhz
+ + The AMD 5X86 series were the fastest 486 clones ever made
+ * Cirrus Logic VLB CL-GD5424 Graphics 512KiB VRAM
+ * 64MB [27]SIMM-72 RAM
+ * 48x IDE CD ROM Drive
+ * [28]Gotek 1.44MB floppy emulator
+ * CompactFlash-IDE adapter + 32GB Sandisk Extreme CF card
+ * 10Mbps 3Com Etherlink III [29]3c509B (ISA)
+ * [30]Sound Blaster 16 CT2950 PnP (ISA)
+
+Front panel
+
+ The 48x PATA CD-ROM drive came with the PC. I replaced the original
+ 3.5" floppy drive with the [31]Gotek 1.44MB floppy emulator. This cool
+ device enables one to emulate up to 100 floppy disks based on images
+ stored in the connected USB Flash drive! I no longer need to write to
+ mechanically-failure-prone floppy disks whenever I want to transfer
+ data.
+
+Expansion slots
+
+ There are only 3 16-bit [32]ISA slots placed on the riser card in this
+ PC. It does not even have the newer but also legacy [33]PCI slots. This
+ PC is filled with 2x 32MB SIMM-72 RAM sticks. I have to admit 64MB RAM
+ is unheard of for a 486-era PC. Some people [34]online managed to go up
+ to 128MB RAM.
+
+Expansion cards
+
+ The 3 ISA slots are fully filled with the following
+
+ A [35]Sound Blaster 16 CT2950 PnP, 10Mbps 3Com Etherlink
+ III [36]3c509B,and a CompactFlash-IDE (CF-IDE) adapter. Technically the
+ CF-IDE adapter is not an ISA card. It is mounted in the expansion slot
+ to enable me to easily swap out the CF card without the hassle of
+ opening up the case. To the motherboard, the CF card is just like any
+ other hard disk.
+
+Expansion cards mounted in slots
+
+ Legacy ports galore! Note the power supply which only accepts ~115VAC.
+ I had to buy a transformer to step down the 230VAC mains in Singapore
+ to suit this PC. The CF card is conveniently replaceable at the back.
+
+Compilation machine: [37]Thinkpad T430 (released in 2012)
+
+ Compilation is a CPU-heavy process and the 486 will definitely take
+ ages to do so. To avoid this issue, we shall do the compilation on a
+ modern PC using a USB card reader then move the CF card over to the
+ ancient PC.
+
+ )
+
+Specifications:
+
+ * Intel Core i7-3520M (3.50 GHz, 4MB L3, 1333MHz FSB)
+ * Intel HD Graphics 4000
+ * 16GB DDR3 - 1600MHz
+ * Gigabit Ethernet
+ * Ultrabay DVD-RW
+ * 2x USB 3.0, 2x USB 2.0
+ * USB-CF adapter to compile on CF card
+ * SSD removed to avoid corrupting it by accident during install
+
+ This Thinkpad T430 is a 6-year-old model by today's standards but is
+ still fast enough to do the compilation of everything in a reasonable
+ amount of time (like a few hours).
+
+Linux Installation
+
+ I've documented a [38]detailed list of instructions here on what
+ commands to use to install Gentoo on this ancient PC. This post will
+ just focus on the key steps and issues I faced.
+
+Step 1: Getting the install media and initial attempt
+
+ The Gentoo x86 minimal installation CD can be [39]downloaded here still
+ supports the 486 architecture. Out of curiosity, I booted my ancient PC
+ with it to see if it is possible.
+
+ Turns out I'll get a kernel panic. It is very likely this LiveCD kernel
+ does not have the drivers needed to properly access the CD drive.
+ Anyway, I got the CD started with my modern T430.
+
+Step 2: Disk partitioning
+
+ These steps below are all done on the modern compilation PC except the
+ last step.
+
+Gentoo's proposed partitioning scheme
+
+ This is what Gentoo recommends. Since this is an ancient PC, it does
+ not use UEFI therefore there is no need for the bootloader partition.
+ Ancient PCs also have a BIOS 504MiB barrier which means they can only
+ access the first 504MiB in the disk. This can be seen in the BIOS setup
+ below:
+
+ Linux can recognise the full 32GB capacity of my CF card only after the
+ kernel and necessary drivers are loaded.
+
+Actual partitioning scheme
+
+ Modern Linux distributions don't always have a boot partition by
+ default as its contents are now placed in the root partition. Since we
+ have a 504MiB limit, we will need a small 128MB boot partition as the
+ first primary partition to store the Linux kernel and other boot files.
+
+Step 3: Install Gentoo Stage 3
+
+ Stage3 is a step unique only to the Gentoo distribution. Basically you
+ have to download a tarball containing a bare minimal binaries and
+ system directories.
+
+ You have to make sure to download the one that is named "i486". Then
+ uncompress it to form the base system.
+
+ For more information about the Gentoo Stages, you can take a look
+ [40]here.
+
+Step 4: Verify compilation parameters
+
+ Portage is the package manager used in Gentoo and we have to make sure
+ that its configuration will invoke the GCC compiler to emit packages
+ that are 486 compatible. Ensure /etc/portage/make.conf has the
+ following 486-specific options:
+CFLAGS="-O2 -march=i486 -pipe"
+CHOST="i486-pc-linux-gnu"
+MAKEOPTS="-j5" # A good choice is the number of CPU cores in the system plus 1
+USE="-kde -qt4 -qt5 ffmpeg mp3 alsa"
+
+ The USE flags are for any new packages not to include GUI support and
+ add sound support (for my demo).
+
+Step 5: Configure Linux kernel
+
+ This was a tough nut to crack and I needed countless tries to get it to
+ a workable state. To minimise kernel size, the default menu options
+ may not enable support for ancient hardware components. However,
+ support for them are still there.
+
+ The actual list of options I chose were very long so I'll only show the
+ key ones I selected.
+
+ Must disable 64-bit kernel for obvious reasons!
+
+ 486 is the oldest option in this list!
+
+ ISA support has to be enabled to use the expansion cards.
+
+ ISA Plug and Play is required for autodetecting my SB16 and 3Com NIC as
+ they are late generation ISA PnP cards.
+
+ Enable both Generic ATA support and Legacy ISA PATA support
+
+ My 3Com 3C509 NIC card is still supported!
+
+ Once done we just compile the Linux kernel!
+
+Step 6: Install Bootloader
+
+ The usual bootloader used by Linux today is [41]Grub2. I tried that but
+ it did a reboot loop whenever I tried to start the system. Online
+ research say I should use the older [42]LILO bootloader instead. LILO
+ is unsupported as of December 2015 but it is still able to load modern
+ Linux kernels.
+
+ This a snippet of the_ /etc/lilo.conf_ Lilo configuration file:
+image=/boot/vmlinuz-4.14.8-gentoo-r1
+ label=gentoo
+ read-only
+ root=/dev/sda3
+ vga=4 # This will set the VGA mode to 80x30
+
+image=/boot/vmlinuz-4.14.8-gentoo-r1
+ label=gentoo-ask-vga
+ read-only
+ root=/dev/sda3
+ vga=ask # Linux will ask you to pick the VGA mode on startup
+
+ I didn't install a GUI for obvious performance reasons so I have to
+ rely solely on text mode. I set the mode vga=4 to increase "text
+ resolution" to 80 columns x 30 rows of text. I also include a vga=ask
+ in case the first option fails.
+
+Step 7: Install additional software
+
+ Though not strictly necessary to do it right now, I felt it was better
+ to leverage on the performance of the compilation machine before moving
+ the CF card over.
+
+ If you have seen the video, I installed the latest versions (available
+ in the Portage repository) of Git, Python, nginx, ALSA and MOC (console
+ music player).
+
+Step 8: Initial bootup!
+
+ Now we power down the compilation PC and move the CF card to the
+ ancient PC for booting. Just pray and hope it works! :)
+
+Problems Faced
+
+ There were several expected and unexpected problems I faced that made
+ this project more time-consuming that it already was.
+
+Cannot boot from CD
+
+ Due to the age of the PC, the BIOS only supports booting from the
+ floppy drive or internal HDD. To boot from the CD, I used the [43]Plop
+ Boot Manager that booted off a floppy disk. This added extra
+ inconveniences when it came to using CD-ROM based utilities.
+
+ To prevent wear on the already ancient mechanical floppy drive, I used
+ the floppy disk emulator.
+
+Cannot use 80-pin PATA cable
+
+ This problem caused me a huge amount of unexpected pain!!!
+
+ Left: 80-conductor PATA cable, Right: 40-conductor PATA cable
+
+ The 80-pin cable on the left is a more modern PATA cable with extra
+ ground lines compared to the 40-pin ones. It supposedly allows the bus
+ to transmit at higher speed by eliminating crosstalk while remaining
+ backward compatible. Read [44]this for more info.
+
+ When I assembled the PC, I initially started with the 80-conductor
+ cable for the drives. I faced occasional intermittent problems. From
+ the BIOS not being able to detect the drive, to Linux halfway getting
+ disk access errors to outright disk corruption. It was hard to tell
+ then was it a software fault or hardware fault?
+
+ Here are the list of steps I did to troubleshoot:
+ 1. Disconnect CD-ROM drive as primary slave
+ 2. Replace the CF card as I thought it was faulty
+ 3. Trying different 80-pin conductor cables
+ 4. Recompiling the Linux kernel many times with different SATA/PATA
+ options in case I chose the incorrect one. This took hell a lot of
+ time.
+
+ Finally, I swapped back to the original 40-pin PATA cable that came
+ with the PC and the problems never came up. To double check my
+ assumption, I tried the other 40-pin PATA cables I have in my personal
+ stash and had no issue too.
+
+ Like WHAT THE HELL? I don't think it is a fault of the cables
+ themselves. I have dealt with many older PCs and none of them ever had
+ problems when I switched to 80-pin cables so I assumed it should not be
+ an issue at first. Probably the motherboard of this PC just does not
+ like the 80-pin cable.
+
+Tough Gentoo installation procedure
+
+ Installing Gentoo is tough and time-consuming under the best of times
+ even for modern PCs. Doing it for an ancient PC like this further adds
+ to the complexity.
+
+ To put things into perspective, this is how I would rate the relative
+ difficulty in installing the different Linux distributions
+
+ [45]Linux From Scratch > Gentoo > [46]Arch Linux > Fedora/Debian/Ubuntu
+ * Linux From Scratch: Compile every single thing from scratch. I have
+ not tried this before.
+ * Gentoo: Base system is ready. Just compile kernel, bootloader and
+ extra packages. Then configure everything manually.
+ * Arch Linux: Same as Gentoo just that everything already exists in
+ precompiled binaries.
+ * Fedora/Debian/Ubuntu: Distributions are based on point releases.
+ Configuration is largely taken care off, just configure personal
+ preferences.
+
+ This is compounded by the fact that this was the first time I installed
+ Gentoo Linux and was unfamiliar with the install steps.
+
+Long iteration cycle
+
+ Saying the ancient PC is slow is a huge understatement. It takes 11
+ minutes to boot up to the login prompt and 5.5 mins to shutdown. During
+ the lengthy startup especially, I had to dutifully observe the status
+ messages to ensure there are no issues.
+
+ If there were any issues, I have to move the CF card back to the
+ compilation PC to modify the installation or worse start the
+ installation from scratch. I did this countless times and spent many
+ hours.
+
+Faulty Power Supply Unit (PSU)
+
+ The PSU failed about 2 weeks after I wrote this post. Not unexpected
+ for an old piece of hardware. For a typical modern PC, we just get a
+ replacement! However, this PC uses the legacy [47]LPX form factor for
+ its PSU. Not only that, it does not use the modern ATX power connector.
+ It uses the [48]AT style P8/P9 connector.
+
+ LPX power supplies are not easily available this days and the ones that
+ are being sold are decades old as well.
+
+ picoPSU with ATX-AT Converter
+
+ I used 2 products to replace the LPX PSU
+ 1. [49]ATX-AT P8/P9 converter with -5V output I bought on Ebay
+ 2. [50]picoPSU-150-XT with 12V AC-DC power adapter
+
+ Everything is tied down to the case.
+
+ Small and neat and this power brick is 230V compatible too![/caption]
+
+ A cool LPX PSU replacement don't you think?
+
+Spectre and Meltdown
+
+ Given the age of the 486 (1989 technology), it does not support branch
+ prediction.
+
+ The 486 does not implement any form of branch prediction.
+
+ [51]Source 1: Pentium Pro and Pentium II System Architecture from
+ Google Books
+
+ When the 486 microprocessor makes a decision that results in a jump
+ to a different part of your program, there is often a delay as it
+ gathers the instructions from the new area of memory. Pentium seeks
+ to avoid this with a Branch Target Buffer (BTB). The BTB predicts
+ the results of the decision-making instructions... [52]Source 2:
+ Info World July 1993
+
+ Ironically this makes it safe from the [53]Meltdown and Spectre
+ attacks. If you want to be safe from those attacks, you can run your
+ modern software on the 486! Of course this is not looking at the big
+ picture, many other security features have been implemented on modern
+ processors since then.
+
+Concluding Remarks
+
+ Despite the many roadblocks I faced, I was impressed by the level of
+ support Linux has for ancient hardware like this. I'll not be surprised
+ if somewhere out there, there is a tester making sure that stuff still
+ works for old hardware.
+
+ Even though this involves ancient hardware, I have to admit I learned
+ quite a lot about the components used in Linux by virtue of setting up
+ Gentoo so I have some useful takeaways from this project.
+
+ You may wonder why did I title this post "A Science Project". This was
+ coined in a [54]blog post by a Microsoft software engineer Raymond Chen
+ to describe projects that fall into any of the following categories:
+ 1. A feature that is really cool and challenging from a technological
+ standpoint but is overkill for the user-scenario.
+ 2. Requires hardware few people have.
+ 3. Trying to solve a problem that nobody really considers to be a
+ problem. You're doing it just for the Gee Whiz factor.
+
+ I believe my projects has all of these qualities.
+ 1. I went through a difficult process to give an ancient PC modern
+ Linux and software features. It is overkill as no way one can do
+ any useful work on this slow PC. It is much more appropriate to
+ install a period-correct operating system like DOS and/or Win 3.x.
+ 2. How many people have a 486 PC today?
+ 3. Who has a problem of needing a modern OS on this ancient PC?
+
+ As mentioned earlier, if you want to replicate this project, you can
+ consult the [55]low-level detailed instructions I have documented on
+ Github.
+
+ I have related projects as well, [56]Windows 3.1 on a modern PC,
+ [57]Windows XP on a modern PC and the [58]using the Covox Speech Thing
+ with a modern pc. Everything so far involves getting old stuff to to
+ work on a modern PC, this is my first blog post that does the opposite.
+ Look out for more projects from me!
+
+Clarification:
+
+ In response to questions or comments made by readers, here are some
+ additional points I want to make
+ 1. I did not show it in the video but the 486 is not powerful enough
+ to play MP3 files in real time. It'll stutter like crazy hence I
+ stayed with WAV files.
+ 2. This machine has no slot for me to add any L2 cache memory. :(
+ 3. I have rebooted this machine several times before taking this
+ video. So the boot times have stabilised.
+ 4. I did try to boot the Tiny Core Linux CD but it never fully loaded
+ before rebooting.
+ 5. Given more time, I could have optimised the bootup time or
+ installed a GUI. However, the objective of this project is to
+ explore the possibility of modern Linux in a 486 PC. Those are nice
+ to have but given the time (many sleepless nights and weekends
+ worth) and effort I had already spent on this project, I felt it
+ was time to stop and document my work.
+ 6. 64MB RAM is not representative of 486-machines of that era. Sure I
+ agree, but this machine came with this much and I don't see any
+ benefit of reducing the RAM other than to make it "more
+ representative".
+ 7. I did not go with the systemd as Gentoo by default uses init. Since
+ this is the first time I'm actually installing Gentoo, I just went
+ with the default instructions.
+ 8. Ext4 is used as the main filesystem to see if it is usable on this
+ old system. I wanted as much modern features as I could. When I
+ installed Damn Small Linux during the hackathon, the installer
+ already warned us that the non-journaling Ext2 is more suitable for
+ older CPUs.
+ 9. Why Linux and not BSD-based OSes? The point was to test if Linux
+ and modern software still works on the 486 as claimed. Not really
+ to make a usable PC out of it for day-to-day work. Besides,
+ according to the [59]FreeBSD's website, the minimum requirement is
+ 96MB of RAM. So although FreeBSD may support 486 CPUs, I really
+ wonder what 486-era motherboard can take that amount of RAM?
+ 10. Why was PCI/USB/X option enabled in the kernel configuration (thus
+ slightly slowing down boot time) even though the ancient PC does
+ not have any PCI/USB/X? This was because I had a plan of making the
+ same disk bootable and usable on my modern T430 as well should I
+ need to compile and install additional packages. Disabling PCI
+ might cause problems on my modern PC. I might just need USB on my
+ compilation PC, who knows?
+
+Presentation
+
+ I gave a talk about my project at the [60]Hackware v3.8 meetup. Here is
+ the video and the slides.
+
+ IFRAME: [61]https://www.youtube.com/embed/1dgc1oq5br8
+
+ *
+ + [62]retrocomputing
+ + [63]hacks
+ *
+ + None
+
+ Please enable JavaScript to view the [64]comments powered by Disqus.
+ [65]comments powered by Disqus
+ My First Conference Emcee Experience
+ Why I use the IBM Model M keyboard that is older than me?
+
+Recent posts
+
+[66]How do I produce my flight videos?
+
+ November 6, 2021
+
+[67]Review, usage and repair of the Framework laptop
+
+ September 21, 2021
+
+[68]Birthday 2021: Year in Review and going forward
+
+ September 5, 2021
+
+[69]My Dos and Don'ts when trying to convince the unvaccinated
+
+ August 17, 2021
+
+[70]My First Helicopter Ride
+
+ July 21, 2021 [71]See more
+
+[72]Categories
+
+ * [73]singapore25
+ * [74]hacks19
+ * [75]personal18
+ * [76]aviation14
+ * [77]politics14
+ * [78]school9
+ * [79]book-reviews8
+ * [80]retrocomputing8
+ * [81]teardowns8
+ * [82]hackathon4
+ * [83]admin3
+ * [84]product-reviews3
+ * [85]repair-kopitiam3
+ * [86]keyboards2
+ * [87]quiz2
+ * [88]dvorak1
+ * [89]flight-sim1
+ * [90]vaccination1
+
+ © 2021 YKM's Corner on the Web .
+ Theme: [91]Hugo Future Imperfect Slim
+ A [92]HTML5 UP port | Powered by [93]Hugo
+ [94]free hit counter
+
+References
+
+ Visible links:
+ 1. https://yeokhengmeng.com/
+ 2. https://yeokhengmeng.com/
+ 3. https://yeokhengmeng.com/categories/aviation
+ 4. https://yeokhengmeng.com/categories/retrocomputing
+ 5. https://yeokhengmeng.com/categories/
+ 6. https://yeokhengmeng.com/favourite-quotes/
+ 7. https://yeokhengmeng.com/about-me/
+ 8. https://yeokhengmeng.com/2018/01/make-the-486-great-again/#lang-menu
+ 9. https://yeokhengmeng.com/2018/01/make-the-486-great-again/
+ 10. https://yeokhengmeng.com/zh
+ 11. https://yeokhengmeng.com/
+ 12. https://yeokhengmeng.com/2018/01/make-the-486-great-again/
+ 13. https://geekcamp.sg/
+ 14. https://yeokhengmeng.com/2017/11/my-first-conference-emcee-experience/
+ 15. https://en.wikipedia.org/wiki/Intel_80486
+ 16. https://www.pcworld.com/article/2020196/linux-3-8-will-drop-support-for-intel-386-chips.html
+ 17. https://www.youtube.com/embed/4qSziR6sD8Q
+ 18. https://supersillyhackathon.sg/
+ 19. https://www.chenhuijing.com/
+ 20. https://www.chenhuijing.com/blog/hardware-hacks-super-silly-hackathon/
+ 21. https://www.kernel.org/pub/linux/kernel/v2.4/
+ 22. https://retrocomputing.stackexchange.com/a/4364
+ 23. https://en.wikipedia.org/wiki/Gentoo_Linux
+ 24. https://distrowatch.com/dwres.php?resource=showheadline&story=406
+ 25. https://en.wikipedia.org/wiki/IBM_PS/1
+ 26. https://en.wikichip.org/wiki/amd/am5x86
+ 27. https://en.wikipedia.org/wiki/SIMM#72-pin_SIMMs
+ 28. https://www.philscomputerlab.com/gotek-floppy-emulator.html
+ 29. https://en.wikipedia.org/wiki/3Com_3c509
+ 30. https://en.wikipedia.org/wiki/Sound_Blaster_16
+ 31. https://www.philscomputerlab.com/gotek-floppy-emulator.html
+ 32. https://en.wikipedia.org/wiki/Industry_Standard_Architecture
+ 33. https://en.wikipedia.org/wiki/Conventional_PCI
+ 34. http://www.vogons.org/viewtopic.php?t=28748
+ 35. https://en.wikipedia.org/wiki/Sound_Blaster_16
+ 36. https://en.wikipedia.org/wiki/3Com_3c509
+ 37. http://www.thinkwiki.org/wiki/Category:T430
+ 38. https://github.com/yeokm1/gentoo-on-486
+ 39. https://www.gentoo.org/downloads/
+ 40. https://wiki.gentoo.org/wiki/Stage_tarball
+ 41. https://wiki.gentoo.org/wiki/GRUB2
+ 42. https://en.wikipedia.org/wiki/LILO_(boot_loader)
+ 43. https://www.plop.at/en/bootmanager/intro.html
+ 44. http://www.pcguide.com/ref/hdd/if/ide/confCable80-c.html
+ 45. http://www.linuxfromscratch.org/
+ 46. https://www.archlinux.org/
+ 47. http://www.pcguide.com/ref/power/sup/formLPX-c.html
+ 48. https://www.computerhope.com/jargon/p/p8.htm
+ 49. http://www.ebay.com.sg/itm/ATX-20-PIN-to-AT-P8-P9-CONVERTER-WITH-5V-ON-OFF-SWITCH-DUMMY-LOAD-USA-MADE/251025150787
+ 50. http://www.mini-box.com/picoPSU-150-XT
+ 51. https://books.google.com.sg/books?id=MLJClvCYh34C&pg=PA122&lpg=PA122&dq=486+branch+prediction&source=bl&ots=gcMvZFz2Pz&sig=FJ9fEmH426N7eoHxLupu5x2ZrdQ&hl=en&sa=X&ved=0ahUKEwi7k5aCucXYAhUHQY8KHcgACkUQ6AEILjAB#v=onepage&q=486%20branch%20prediction&f=false
+ 52. https://books.google.com.sg/books?id=QzsEAAAAMBAJ&pg=PA59&lpg=PA59&dq=486+branch+prediction&source=bl&ots=LCXnhUpS83&sig=g59BBBuiCx-qM6bOjRW5mkq1Nug&hl=en&sa=X&ved=0ahUKEwi7k5aCucXYAhUHQY8KHcgACkUQ6AEIPDAD#v=onepage&q=486%20branch%20prediction&f=false
+ 53. https://meltdownattack.com/
+ 54. https://blogs.msdn.microsoft.com/oldnewthing/20130319-00/?p=4913
+ 55. https://github.com/yeokm1/gentoo-on-486/
+ 56. https://yeokhengmeng.com/2016/09/windows-for-workgroups-3-11-on-vintage-and-modern-hardware-in-2016/
+ 57. https://yeokhengmeng.com/2016/04/installing-windows-xp-on-a-modern-unsupported-haswell-system-in-2016/
+ 58. https://yeokhengmeng.com/2017/01/a-science-project-bringing-the-covox-speech-thing-to-2017/
+ 59. https://www.freebsd.org/doc/handbook/bsdinstall-hardware.html
+ 60. https://www.facebook.com/events/200105140541056/
+ 61. https://www.youtube.com/embed/1dgc1oq5br8
+ 62. http://yeokhengmeng.com/categories/retrocomputing
+ 63. http://yeokhengmeng.com/categories/hacks
+ 64. https://disqus.com/?ref_noscript
+ 65. https://disqus.com/
+ 66. https://yeokhengmeng.com/2021/11/how-do-i-produce-my-flight-videos/
+ 67. https://yeokhengmeng.com/2021/09/review-usage-and-repair-of-the-framework-laptop/
+ 68. https://yeokhengmeng.com/2021/09/birthday-2021-year-in-review-and-going-forward/
+ 69. https://yeokhengmeng.com/2021/08/my-dos-and-donts-when-trying-to-convince-the-unvaccinated/
+ 70. https://yeokhengmeng.com/2021/07/my-first-helicopter-ride/
+ 71. https://yeokhengmeng.com/post/
+ 72. https://yeokhengmeng.com/categories
+ 73. https://yeokhengmeng.com/categories/singapore/
+ 74. https://yeokhengmeng.com/categories/hacks/
+ 75. https://yeokhengmeng.com/categories/personal/
+ 76. https://yeokhengmeng.com/categories/aviation/
+ 77. https://yeokhengmeng.com/categories/politics/
+ 78. https://yeokhengmeng.com/categories/school/
+ 79. https://yeokhengmeng.com/categories/book-reviews/
+ 80. https://yeokhengmeng.com/categories/retrocomputing/
+ 81. https://yeokhengmeng.com/categories/teardowns/
+ 82. https://yeokhengmeng.com/categories/hackathon/
+ 83. https://yeokhengmeng.com/categories/admin/
+ 84. https://yeokhengmeng.com/categories/product-reviews/
+ 85. https://yeokhengmeng.com/categories/repair-kopitiam/
+ 86. https://yeokhengmeng.com/categories/keyboards/
+ 87. https://yeokhengmeng.com/categories/quiz/
+ 88. https://yeokhengmeng.com/categories/dvorak/
+ 89. https://yeokhengmeng.com/categories/flight-sim/
+ 90. https://yeokhengmeng.com/categories/vaccination/
+ 91. https://github.com/pacollins/hugo-future-imperfect-slim
+ 92. https://html5up.net/future-imperfect
+ 93. https://gohugo.io/
+ 94. https://statcounter.com/
+
+ Hidden links:
+ 96. https://yeokhengmeng.com/2018/01/make-the-486-great-again/#site-nav
+ 97. https://github.com/yeokm1
+ 98. https://linkedin.com/in/yeokhengmeng
+ 99. https://facebook.com/yeokhengmeng
+ 100. https://youtube.com/yeokm1
+ 101. https://instagram.com/yeokm1
+ 102. https://twitter.com/yeokm1
+ 103. https://telegram.me/yeokm1
+ 104. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-capabilities.jpg
+ 105. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/super-silly-hackathon-team486.jpg
+ 106. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-logo.png
+ 107. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-original-spec.jpg
+ 108. https://yeokhengmeng.com/2018/01/make-the-486-great-again/gentoo-486-innards-front.jpg
+ 109. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-isa-slots.jpg
+ 110. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-isa-cards.jpg
+ 111. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-innards.jpg
+ 112. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-back.jpg
+ 113. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-t430.jpg
+ 114. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-livecd-boot.jpg
+ 115. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-gentoo-default-partitioning.png
+ 116. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-bios.jpg
+ 117. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-disk-layout.png
+ 118. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-stage3.png
+ 119. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-kernel-64bit.png
+ 120. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-kernel-486.png
+ 121. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-kernel-isa.png
+ 122. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-isa-pnp.png
+ 123. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-kernel-isa-ata.png
+ 124. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-kernel-3com-support.png
+ 125. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-kernel-sb16.png
+ 126. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-ide.jpg
+ 127. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-pico-psu-at-converter.jpg
+ 128. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-pico-psu-at-converter-assembled.jpg
+ 129. https://yeokhengmeng.com/2018/01/make-the-486-great-again/images/gentoo-486-pico-psu-brick.jpg
+ 130. https://yeokhengmeng.com/2017/11/my-first-conference-emcee-experience/
+ 131. https://yeokhengmeng.com/2018/07/why-i-use-the-ibm-model-m-keyboard-that-is-older-than-me/
+ 132. https://yeokhengmeng.com/2021/11/how-do-i-produce-my-flight-videos/
+ 133. https://yeokhengmeng.com/2021/09/review-usage-and-repair-of-the-framework-laptop/
+ 134. https://yeokhengmeng.com/2021/09/birthday-2021-year-in-review-and-going-forward/
+ 135. https://yeokhengmeng.com/2021/08/my-dos-and-donts-when-trying-to-convince-the-unvaccinated/
+ 136. https://yeokhengmeng.com/2021/07/my-first-helicopter-ride/
+ 137. https://yeokhengmeng.com/2018/01/make-the-486-great-again/