home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / ssd27 / ssd.doc < prev    next >
Text File  |  1994-11-20  |  122KB  |  2,752 lines

  1.  
  2.                            
  3.                            SERVILE SOFTWARE DECODER
  4.  
  5.  
  6.  
  7.  
  8.  
  9.                                   Version 2.7
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                          Shareware Version Disk Manual
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. 2
  24.                                   DISCLAIMER
  25.  
  26.  
  27.  
  28. The Servile Software Decoder is supplied as a tool to assist in the reverse-
  29. engineering of IBM PC software, with special attention to computer viruses. 
  30. Because of the nature of the subject, no guarrantees can be made that a 
  31. program analysed with SSD will behave in the same manner when executed outside 
  32. of the SSD environment. 
  33.  
  34. Months of development and rigourous testing have gone into SSD, including 
  35. testing it on hundreds of Shareware, freeware and commercial programs, 
  36. including computer viruses. Some programs, by their nature, exhibit pecuiliar 
  37. behaviour when analysed with SSD which they do not exhibit otherwise.
  38.  
  39. Use of SSD is at your own risk. The author accepts no liability in any form 
  40. and makes no guarrantees as to the suitability of this product for any purpose 
  41. what so ever. 
  42.  
  43.  
  44. 3
  45.                                  INTRODUCTION
  46.  
  47.  
  48.  
  49.  
  50.  
  51. The Servile Software Decoder (SSD) is a powerful code and program analyser for 
  52. the IBM PC. SSD is neither a disassembler nor a debugger, although it shares 
  53. some similarities with both. Unlike a disassembler, SSD activately analyses 
  54. the code of a program, this allows SSD to analyse encrypted programs, unlike a 
  55. disassemler. Unlike a debugger, SSD interprets the program under analysis. 
  56. This has the advantage that SSD is safe to use with computer viruses as 
  57. dangerous commands are inhibited. It also implies that SSD is not prone to 
  58. anti-debugger instructions which are often contained in computer viruses. 
  59.  
  60. Because SSD interprets programs, rather than passing them straight to DOS for 
  61. execution, some programs may exhibit slightly different behaviour when 
  62. analysed than when executed. This is unfortunately unavoidable.
  63.  
  64. When SSD starts execution, or loads a new file, the PC interrupt vector table 
  65. is copied into memory. All subsequent reads and writes to the first 1024 bytes 
  66. of RAM (vector table) are then redirected to the SSD copy of the interrupt 
  67. vector table. This allows programs to think they have changed an interrupt  
  68. vector, but at the same time retains security by not changing the real vector.
  69.  
  70.  
  71. Animate            Record             Utility               File            Exit
  72.                                                                                 
  73. ╔═══════════Trace════════════╦════════════════════Analysis═════════════════════╗
  74. ║                            ║                                                 ║
  75. ║                            ║                                                 ║
  76. ║                            ║                                                 ║
  77. ║                            ║                                                 ║
  78. ║                       ╔════════════About═════════════╗                       ║
  79. ║                       ║   Servile Software Decoder   ║                       ║
  80. ║                       ║                              ║                       ║
  81. ║                       ║         Version 2.7          ║                       ║
  82. ║                       ║     (Shareware Version)      ║                       ║
  83. ║                       ║                              ║                       ║
  84. ║                       ║     Copyright (c)1994 by     ║                       ║
  85. ║                       ║                              ║                       ║
  86. ║                       ║       Servile Software       ║                       ║
  87. ║                       ╚══════════════════════════════╝                       ║
  88. ║                            ║                                                 ║
  89. ║                            ║                                                 ║
  90. ║                            ║                                                 ║
  91. ╠════════════════════════════╩═════════════════════════════════════════════════╣
  92. ║  AX  0000   BX  0000   CX  0000   DX  0000   SI  0000   DI  0000   BP  0000  ║
  93. ║  CS  53C8   DS  53B8   ES  53B8   SS  552C   SP  0080   IP  0000    0000000  ║
  94. ║                                                                     ZCSOAPD  ║
  95. ╚═════════Registers════════════════════════════════════════════════════════════╝
  96.  
  97. 4
  98.                                     DISPLAY
  99.  
  100.  
  101.  
  102. SSD uses two display pages. Page 0, the normal default DOS display page is 
  103. used for output from the program being analysed. Page 1 is used for the SSD 
  104. main display which is divided into the following component parts: Menu bar, 
  105. containing drop-down menus of facilities. Code window, which displays the 
  106. dissasembly of each instruction as it occurs. Analysis window, which displays 
  107. analysis information about the running program and also data dumps when 
  108. requested. And the registers window which displays the current contents of the 
  109. CPU registers as they appear to the program being analysed. 
  110.  
  111.  
  112.  
  113. Animate            Record             Utility               File            Exit
  114.                                                                                 
  115. ╔═══════════Trace════════════╦════════════════════Analysis═════════════════════╗
  116. ║                            ║                                                 ║
  117. ║                            ║                                                 ║
  118. ║                            ║                                                 ║
  119. ║                            ║                                                 ║
  120. ║                            ║                                                 ║
  121. ║                            ║                                                 ║
  122. ║                            ║                                                 ║
  123. ║                            ║                                                 ║
  124. ║                            ║                                                 ║
  125. ║                            ║                                                 ║
  126. ║                            ║                                                 ║
  127. ║                            ║                                                 ║
  128. ║                            ║                                                 ║
  129. ║                            ║                                                 ║
  130. ║                            ║                                                 ║
  131. ║                            ║                                                 ║
  132. ║                            ║                                                 ║
  133. ╠════════════════════════════╩═════════════════════════════════════════════════╣
  134. ║  AX  0000   BX  0000   CX  0000   DX  0000   SI  0000   DI  0000   BP  0000  ║
  135. ║  CS  53C8   DS  53B8   ES  53B8   SS  552C   SP  0080   IP  0000    0000000  ║
  136. ║                                                                     ZCSOAPD  ║
  137. ╚═════════Registers════════════════════════════════════════════════════════════╝
  138. 5
  139.                                   FACILITIES
  140.  
  141.  
  142. This section describes the various facilities available from the drop-down 
  143. menus. Each menu is tackled in turn, with the menu name shown in CAPITALS, 
  144. followed by the facilities available from that menu.
  145.  
  146.  
  147.  
  148. ANIMATE:
  149.  
  150. The "ANIMATE" menu provides access to the various facilities for running the 
  151. loaded program. In brief, the loaded program may be single stepped, run at 
  152. maximum speed or traced at three different speeds. A program which is being 
  153. traced or run may be stopped by pressing the Esc key. When single stepping a 
  154. program only the next instruction is fetched and interpreted.
  155.  
  156.  
  157. Animate            Record             Utility               File            Exit
  158. ╔════════╗                                                                      
  159. ║ Step   ║══Trace════════════╦════════════════════Analysis═════════════════════╗
  160. ║ Run    ║                   ║                                                 ║
  161. ║ Slow   ║                   ║                                                 ║
  162. ║ Medium ║                   ║                                                 ║
  163. ║ Fast   ║                   ║                                                 ║
  164. ╚════════╝                   ║                                                 ║
  165. ║                            ║                                                 ║
  166. ║                            ║                                                 ║
  167. ║                            ║                                                 ║
  168. ║                            ║                                                 ║
  169. ║                            ║                                                 ║
  170. ║                            ║                                                 ║
  171. ║                            ║                                                 ║
  172. ║                            ║                                                 ║
  173. ║                            ║                                                 ║
  174. ║                            ║                                                 ║
  175. ║                            ║                                                 ║
  176. ║                            ║                                                 ║
  177. ╠════════════════════════════╩═════════════════════════════════════════════════╣
  178. ║  AX  0000   BX  0000   CX  0000   DX  0000   SI  0000   DI  0000   BP  0000  ║
  179. ║  CS  53C8   DS  53B8   ES  53B8   SS  552C   SP  0080   IP  0000    0000000  ║
  180. ║                                                                     ZCSOAPD  ║
  181. ╚═════════Registers════════════════════════════════════════════════════════════╝
  182.  
  183.  
  184. 6
  185. Step:
  186.  
  187. Single step the loaded program. Only the next instruction is interpreted, and 
  188. then SSD returns to the ANIMATE menu.
  189.  
  190. Run:
  191.  
  192. Run the program at maximum speed. Only the analysis details are displayed.
  193.  
  194. Slow:
  195.  
  196. Trace the program slowly. As each instruction is fetched and interpreted, its 
  197. dissamembly and analysis are displayed togther with the new contents of all 
  198. the registers. However, should the program be in a loop command, only the 
  199. effect upon the registers is displayed untill the loop finishes.
  200.  
  201. Medium:
  202.  
  203. Trace the program fairly slowly. As each instruction is fetched and 
  204. interpreted, its dissamembly and analysis are displayed togther with the new 
  205. contents of all the registers. However, should the program be in a loop 
  206. command, only the effect upon the registers is displayed untill the loop 
  207. finishes. 
  208.  
  209. Fast:
  210.  
  211. Trace the program quickly. As each instruction is fetched and interpreted, its 
  212. dissamembly and analysis are displayed togther with the new contents of all 
  213. the registers. However, should the program be in a loop command, only the 
  214. effect upon the registers is displayed untill the loop finishes. 
  215.  
  216.  
  217. 7
  218. RECORD:
  219.  
  220. Toggle which details will be echoed to an output file. The details are 
  221. cumulative. Selecting an option low in the list will result in details higher 
  222. in the list also being recorded. Selecting "Code & Regs" results in all 
  223. details being recorded.
  224.  
  225. A tick (√) appears next to the currently selected level of recording.
  226.  
  227. SSD requires you to enter a name of a file to which the details will be 
  228. echoed. If you want the details echoed to the printer enter the file name PRN. 
  229. This can be useful for tracing code which destroys the display, such as 
  230. tracing interrupt 10 for example. Notice that if the printer is switched off, 
  231. off-line or out-of-paper SSD will continue regardless, but nothing will be 
  232. echoed to the printer until the problem is resolved.
  233.  
  234.  
  235. Animate            Record             Utility               File            Exit
  236.                    ╔══════════════╗                                             
  237. ╔═══════════Trace══║ √None        ║═══════════════Analysis═════════════════════╗
  238. ║                  ║  Analysis    ║                                            ║
  239. ║                  ║  Code        ║                                            ║
  240. ║                  ║  Code & Regs ║                                            ║
  241. ║                  ╚══════════════╝                                            ║
  242. ║                            ║                                                 ║
  243. ║                            ║                                                 ║
  244. ║                            ║                                                 ║
  245. ║                            ║                                                 ║
  246. ║                            ║                                                 ║
  247. ║                            ║                                                 ║
  248. ║                            ║                                                 ║
  249. ║                            ║                                                 ║
  250. ║                            ║                                                 ║
  251. ║                            ║                                                 ║
  252. ║                            ║                                                 ║
  253. ║                            ║                                                 ║
  254. ║                            ║                                                 ║
  255. ╠════════════════════════════╩═════════════════════════════════════════════════╣
  256. ║  AX  0000   BX  0000   CX  0000   DX  0000   SI  0000   DI  0000   BP  0000  ║
  257. ║  CS  53C8   DS  53B8   ES  53B8   SS  552C   SP  0080   IP  0000    0000000  ║
  258. ║                                                                     ZCSOAPD  ║
  259. ╚═════════Registers════════════════════════════════════════════════════════════╝
  260.                                                                                 
  261.                                                                                 
  262. 8
  263. UTILITY:
  264.  
  265. Miscellaneous utility facilities.
  266.  
  267. About....: 
  268.  
  269. Displays information about SSD. After reading the information displayed, press 
  270. any key to remove the "about" window from the display. 
  271.  
  272. Change Regs:
  273.  
  274. Allows any register value to be changed. Highlight the required register, and 
  275. press return to enter a new value.
  276.  
  277. Trace Int:
  278.  
  279. Allows an interrupt to be specified instead of a program. To trace the 
  280. interrupt use the ANIMATE facilities as for a program. (CS and IP are set to 
  281. the values stored in the appropriate interrupt vector).
  282.  
  283. Dump:
  284.  
  285. Display the values in RAM at a specified segment:offset address. Registers may 
  286. be specified for the address, eg: es:di is a valid address.
  287.  
  288. Output:
  289.  
  290. Display the program's output screen. Press a key to return to the analysis 
  291. screen.
  292.  
  293. Interrupts:
  294.  
  295. Displays the values recorded in the interrupt vector table (SSD copy). To 
  296. continue the listing press any key, pressing Esc will terminate the listing.
  297.  
  298. 9
  299. Animate            Record             Utility               File            Exit
  300.                                       ╔═════════════╗                           
  301. ╔═══════════Trace════════════╦════════║ About....   ║lysis═════════════════════╗
  302. ║                            ║        ║ Change Regs ║                          ║
  303. ║                            ║        ║ Trace Int   ║                          ║
  304. ║                            ║        ║ Dump        ║                          ║
  305. ║                            ║        ║ Output      ║                          ║
  306. ║                            ║        ║ Interrupts  ║                          ║
  307. ║                            ║        ╚═════════════╝                          ║
  308. ║                            ║                                                 ║
  309. ║                            ║                                                 ║
  310. ║                            ║                                                 ║
  311. ║                            ║                                                 ║
  312. ║                            ║                                                 ║
  313. ║                            ║                                                 ║
  314. ║                            ║                                                 ║
  315. ║                            ║                                                 ║
  316. ║                            ║                                                 ║
  317. ║                            ║                                                 ║
  318. ║                            ║                                                 ║
  319. ╠════════════════════════════╩═════════════════════════════════════════════════╣
  320. ║  AX  0000   BX  0000   CX  0000   DX  0000   SI  0000   DI  0000   BP  0000  ║
  321. ║  CS  53C8   DS  53B8   ES  53B8   SS  552C   SP  0080   IP  0000    0000000  ║
  322. ║                                                                     ZCSOAPD  ║
  323. ╚═════════Registers════════════════════════════════════════════════════════════╝
  324.  
  325. 10
  326. FILE:
  327.  
  328. Facilities for opening and writing program files and also for specifying 
  329. command line arguments.
  330.  
  331. Open:
  332.  
  333. Allows you to specify a program to load.
  334.  
  335. Write:
  336.  
  337. Writes a memory image of the current .COM program to disk. Reports an error if 
  338. the loaded program is a .EXE program.
  339.  
  340.  
  341. Arguments:
  342.  
  343. Allows command line arguments to be specified. These are then passed to the 
  344. program being analysed.
  345.  
  346.                                                                                 
  347. Animate            Record             Utility               File            Exit
  348.                                                             ╔═══════════╗       
  349. ╔═══════════Trace════════════╦════════════════════Analysis══║ Open      ║══════╗
  350. ║                            ║                              ║ Write     ║      ║
  351. ║                            ║                              ║ Arguments ║      ║
  352. ║                            ║                              ╚═══════════╝      ║
  353. ║                            ║                                                 ║
  354. ║                            ║                                                 ║
  355. ║                            ║                                                 ║
  356. ║                            ║                                                 ║
  357. ║                            ║                                                 ║
  358. ║                            ║                                                 ║
  359. ║                            ║                                                 ║
  360. ║                            ║                                                 ║
  361. ║                            ║                                                 ║
  362. ║                            ║                                                 ║
  363. ║                            ║                                                 ║
  364. ║                            ║                                                 ║
  365. ║                            ║                                                 ║
  366. ║                            ║                                                 ║
  367. ╠════════════════════════════╩═════════════════════════════════════════════════╣
  368. ║  AX  0000   BX  0000   CX  0000   DX  0000   SI  0000   DI  0000   BP  0000  ║
  369. ║  CS  53C8   DS  53B8   ES  53B8   SS  552C   SP  0080   IP  0000    0000000  ║
  370. ║                                                                     ZCSOAPD  ║
  371. ╚═════════Registers════════════════════════════════════════════════════════════╝
  372.  
  373.  
  374. EXIT:
  375.  
  376. Returns to DOS
  377. 11
  378.                               INHIBITED COMMANDS
  379.  
  380.  
  381.  
  382. SSD inhibits all attempts to disable hardware by writing to I/O ports, 
  383. generation of audible tones, attempts to create new files, closing of the 
  384. standard files; stdin, stdout, stderr, stdaux and stdprn, write to disk and 
  385. disk formatting instructions. Instructions which attempt to write to memory 
  386. occupied by SSD are also rejected. 
  387.  
  388. Inhibiting operations allows a greater degree of safety when analysing 
  389. computer viruses, but has the disadvantage that subsequent program behaviour 
  390. may be altered in some circumstances.
  391.  
  392. SSD inhibits attempts to change the following interrupt vectors:
  393.  
  394. 08, 0A, 0B, 0C, 0D, 0E, 0F, 1C, 21, 24, 70
  395.  
  396. However, subsequent reads of these vectors will return a value as though the 
  397. change had occured.
  398. 12
  399.                                 DOS ERROR CODES
  400.  
  401.  
  402. DOS error codes are usually returned in the AX register following an abortive 
  403. DOS interrupt call, usually indicated by a set carry flag.
  404.  
  405.  
  406. Code    Meaning
  407.  
  408.  01     Invalid function
  409.  02     File not found
  410.  03     Path not found
  411.  04     No handles available
  412.  05     Access denied
  413.  06     Invalid handle
  414.  07     Memory control blocks destroyed
  415.  08     Insufficient memory
  416.  09     Invalid memory block address
  417.  0A     Invalid environment
  418.  0B     Invalid format
  419.  0C     Invalid access code
  420.  0D     Invalid data
  421.  0F     Invalid drive
  422.  10     Attempt to remove current directory
  423.  11     Not the same device
  424.  12     No more files
  425.  13     Disk write-protected
  426.  14     Unknown unit
  427.  15     Drive not ready
  428.  16     Unknown command
  429.  17     CRC error
  430.  18     Bad request structure length
  431.  19     Seek error
  432.  1A     Unknown media type
  433.  1B     Sector not found
  434.  1C     Out of paper
  435.  1D     Write fault
  436.  1E     Read fault
  437.  1F     General failure
  438.  20     Sharing violation
  439.  21     Lock violation
  440.  22     Invalid disk change
  441.  23     FCB unavailable
  442.  24     Sharing buffer overflow
  443.  
  444.  
  445.  
  446. 13
  447.                                   MEMORY MAP
  448.  
  449.  
  450. The following table describes the layout of conventional RAM within the IBNM 
  451. PC and compatibles. Each address is shown in the format segment:offset as is 
  452. conventional with Intel's approach to memory addressing with the 8080 family 
  453. of CPUs.
  454.  
  455.  
  456.  
  457. 0000:0000               RAM
  458.                         Vector Table
  459.                         256 entries stored as segment word
  460.                                                offset word
  461.  
  462. 0040:0000               BIOS data area
  463.     :0000               Base I/O address of 1st serial I/O port, zero if none
  464.     :0002               Base I/O address of 2nd serial I/O port, zero if none
  465.     :0004               Base I/O address of 3rd serial I/O port, zero if none
  466.     :0006               Base I/O address of 4th serial I/O port, zero if none
  467.     :0008               Base I/O address of 1st parallel I/O port, zero if none
  468.     :000A               Base I/O address of 2nd parallel I/O port, zero if none
  469.     :000C               Base I/O address of 3rd parallel I/O port, zero if none
  470.     :000E               Base I/O address of 4th parallel port, zero if none
  471.                         Segment of Extended BIOS Data Segment (PS/2)
  472.     :0010               Installed hardware
  473.     :0012               POST status
  474.     :0013               Base memory size in kbytes (0-640)
  475.     :0015               Manufacturing test scratch pad
  476.     :0016               Manufacturing test scratch pad
  477.                         BIOS control flags (PS/2 mod 30)
  478.                         Keyclick loudness 00h-7Fh (Compaq Deskpro 386K)
  479.     :0017               Keyboard status flags 1
  480.     :0018               Keyboard status flags 2
  481.     :0019               Keyboard: Alt-nnn keypad workspace
  482.     :001A               Keyboard: ptr to next character in keyboard buffer
  483.     :001C               Keyboard: ptr to first free slot in keyboard buffer
  484.     :001E               Keyboard circular buffer 
  485.     :003E               Diskette recalibrate status
  486.     :003F               Diskette motor status
  487.     :0040               Diskette motor turn-off time-out count
  488.     :0041               Diskette last operation status
  489.     :0042               XT: command byte to hard disk controller
  490.                         AT: write precompensation cylinder number / 4
  491.     :0043               XT: bit 5 = drive number, bits 3-0=head number
  492.                         AT: sector count
  493.     :0044               XT: bits 6,7 = high bits of track, bits 5-0 = start 
  494.                             sector-1 
  495.                         AT: starting sector
  496.     :0045               low byte of track number
  497.     :0046               XT: sector count
  498.                         AT: high bits of track number
  499.     :0047               XT: control byte from HD parameters (step rate,...)
  500.                         AT: 101DHHHH, D=drive number, HHHH=head number
  501. 14
  502.     :0048               XT: INT 13 subfunction number
  503.                         AT: comand byte to hard disk controller
  504.     :0049               Current video mode
  505.     :004A               Video columns on screen
  506.     :004C               Video page (regen buffer) size in bytes
  507.     :004E               Video current page start address in regen buffer
  508.     :0050               Video cursor position (col, row) for eight pages
  509.     :0060               Video cursor type, hi=startline, lo=endline
  510.     :0062               Video current page number
  511.     :0063               Video CRT controller base address
  512.     :0065               Video current setting of mode select register 
  513.     :0066               Video current setting of CGA palette register 03D9h
  514.     :0067               POST real mode re-entry point after certain resets
  515.                         pointer to reset code upon system reset (PS/2 except 
  516.                         mod 25,30) with memory preserved 
  517.     :006B               POST last unexpected interrupt
  518.     :006C               Timer ticks since midnight
  519.     :0070               Timer overflow
  520.     :0071               Ctrl-Break flag
  521.     :0072               POST reset flag
  522.     :0074               Fixed disk last operation status, except ESDI drives
  523.     :0075               Number of fixed disk drives
  524.     :0076               Fixed disk control byte   
  525.     :0077               Fixed disk I/O port offset 
  526.     :0078               Parallel devices 1-3 time-out counters
  527.     :007B               parallel device 4 time-out counter (non-PS/2 and PS/2 
  528.                         Mod 25,30)
  529.     :007C               Serial devices 1-4 time-out counters
  530.     :0080               Keyboard buffer start as offset from segment 40h 
  531.     :0082               Keyboard buffer end+1 as offset from segment 40h 
  532.     :0084               Video EGA/MCGA/VGA rows on screen minus one
  533.     :0085               Video EGA/MCGA/VGA character height in scan-lines
  534.     :0087               Video EGA/VGA control
  535.     :0088               Video EGA/VGA switches
  536.     :0089               Video MCGA/VGA mode-set option control
  537.     :008A               Video MCGA/VGA index into Display Combination Code 
  538.                         table
  539.     :008B               Diskette media control (not XT)
  540.     :008C               Fixed disk controller status (not XT)
  541.     :008D               Fixed disk controller Error Status (not XT)
  542.     :008E               Fixed disk Interrupt Control (not XT)
  543.     :008F               Diskette controller information (not XT)
  544.     :0090               Diskette drive 0 media state
  545.     :0091               Diskette drive 1 media state
  546.     :0092               Diskette drive 0 media state at start of operation
  547.     :0093               Diskette drive 1 media state at start of operation
  548.     :0094               Diskette drive 0 current track number
  549.     :0095               Diskette drive 1 current track number
  550.     :0096               Keyboard status byte 1
  551.     :0097               Keyboard status byte 2
  552.     :0098               Timer2
  553.     :009C               Timer2
  554.     :00A0               Timer2
  555.     :00A1               LAN Support Program Interrupt Arbitrator present
  556. 15
  557.     :00A2               Reserved for network adapters
  558.     :00A4               Saved Fixed Disk Interrupt Vector (PS/2 Mod 30)
  559.     :00A8               Video: EGA/MCGA/VGA ptr to Video Save Pointer Table 
  560.     :00AC               Reserved
  561.     :00B0               Vendor specific
  562.     :00CE               Count of days since last boot
  563.     :00D0               Reserved
  564.     :00F0               Reserved for user
  565.     :0100               Print Screen Status byte
  566.     :010E               State of BREAK at start of BASICA.COM execution
  567.     :010F               BASICA v2.10 running flag
  568.     :0116               INT 1B at start of BASICA.COM execution
  569.     :011A               INT 24 at start of BASICA.COM execution
  570. 0040:011E               DOS kernel
  571. ????:????               Device drivers
  572. ????:????               Resident part of COMMAND.COM
  573. ????:????               FREE SPACE
  574. A000:0000               EGA/VGA Video RAM
  575. B000:0000               Video RAM
  576. C000:0000               EGA/VGA BIOS ROM extension
  577. C000:8000               Hard drive ROM extension
  578. E000:0000               Other BIOS ROM extensions
  579. F000:0000               BIOS ROM
  580.     :EFC7               Floppy disk parameters
  581.     :F0A4               Video hardware table
  582.     :FEF3               Initial interrupt vector table values
  583.     :FFF5               BIOS version date code
  584.     :FFFE               Model type 
  585.     :FFFF               Model sub type 
  586. 16
  587.                       XT, AT and PS/2  I/O port addresses
  588.  
  589.  
  590. This data is provided for the purpose of providing an understanding into the 
  591. nature of a program being analysed which accesses hardware ports. It is not 
  592. intended to describe how to program the IBM PC hardware ports since this can 
  593. lead to damage of the hardware. 
  594.  
  595.  
  596. "r" indicates port may be read. "w" indicates port may be written. "r/w" 
  597. indicates port may be both read and written.
  598.  
  599. 0000-001F ----  DMA 1   (first Direct Memory Access controller 8237)
  600.  
  601. 0000    r/w     DMA channel 0 address    byte 0, then byte 1.
  602. 0001    r/w     DMA channel 0 word count byte 0, then byte 1.
  603. 0002    r/w     DMA channel 1 address    byte 0, then byte 1.
  604. 0003    r/w     DMA channel 1 word count byte 0, then byte 1.
  605. 0004    r/w     DMA channel 2 address    byte 0, then byte 1.
  606. 0005    r/w     DMA channel 2 word count byte 0, then byte 1.
  607. 0006    r/w     DMA channel 3 address    byte 0, then byte 1.
  608. 0007    r/w     DMA channel 3 word count byte 0, then byte 1.
  609.  
  610. 0008    r       DMA channel 0-3 status register
  611.                  bit 7 = 1  channel 3 request
  612.                  bit 6 = 1  channel 2 request
  613.                  bit 5 = 1  channel 1 request
  614.                  bit 4 = 1  channel 0 request
  615.                  bit 3 = 1  channel terminal count on channel 3
  616.                  bit 2 = 1  channel terminal count on channel 2
  617.                  bit 1 = 1  channel terminal count on channel 1
  618.                  bit 0 = 1  channel terminal count on channel 0
  619.  
  620. 0008    w       DMA channel 0-3 command register
  621.                  bit 7 = 1  DACK sense active high
  622.                        = 0  DACK sense active low
  623.                  bit 6 = 1  DREQ sense active high
  624.                        = 0  DREQ sense active low
  625.                  bit 5 = 1  extended write selection
  626.                        = 0  late write selection
  627.                  bit 4 = 1  rotating priority
  628.                        = 0  fixed priority
  629.                  bit 3 = 1  compressed timing
  630.                        = 0  normal timing
  631.                  bit 2 = 1  enable controller
  632.                        = 0  enable memory-to-memory
  633.  
  634. 0009    w       DMA write request register
  635.  
  636. 17
  637. 000A    r/w     DMA channel 0-3 mask register
  638.                  bit 7-3 = 0   reserved
  639.                  bit 2   = 0   clear mask bit
  640.                          = 1   set mask bit
  641.                  bit 1-0 = 00  channel 0 select
  642.                          = 01  channel 1 select
  643.                          = 10  channel 2 select
  644.                          = 11  channel 3 select
  645.  
  646. 000B    w       DMA channel 0-3 mode register
  647.                  bit 7-6 = 00  demand mode
  648.                          = 01  single mode
  649.                          = 10  block mode
  650.                          = 11  cascade mode
  651.                  bit 5   = 0   address increment select
  652.                          = 1   address decrement select
  653.                  bit 3-2 = 00  verify operation
  654.                          = 01  write to memory
  655.                          = 10  read from memory
  656.                          = 11  reserved
  657.                  bit 1-0 = 00  channel 0 select
  658.                          = 01  channel 1 select
  659.                          = 10  channel 2 select
  660.                          = 11  channel 3 select
  661.  
  662. 000C    w       DMA clear byte pointer flip-flop
  663. 000D    r       DMA read temporary register
  664. 000D    w       DMA master clear
  665. 000E    w       DMA clear mask register
  666. 000F    w       DMA write mask register
  667.  
  668.  
  669. 0010-001F ----  DMA controller (8237) on PS/2 model 60 & 80
  670.  
  671.  
  672. 0018    w       PS/2 extended function register
  673.  
  674. 001A            PS/2 extended function execute
  675.  
  676.  
  677. 0020-003F ----  PIC 1   (Programmable Interrupt Controller 8259)
  678.  
  679. 0020    w       PIC initialization command word ICW1
  680.                  bit 7-5 = 0  only used in 80/85 mode
  681.                  bit 4   = 1  ICW1 is being issued
  682.                  bit 3   = 0  edge triggered mode
  683.                          = 1  level triggered mode
  684.                  bit 2   = 0  successive interrupt vectors use 8 bytes
  685.                          = 1  successive interrupt vectors use 4 bytes
  686.                  bit 1   = 0  cascade mode
  687.                          = 1  single mode, no ICW3 needed
  688.                  bit 0   = 0  no ICW4 needed
  689.                          = 1  ICW4 needed
  690.  
  691. 18
  692. 0021    w       PIC  ICW2,ICW3,ICW4 after ICW1 to 0020
  693.                 ICW2:
  694.                  bit 7-3 = address lines A0-A3 of base vector address for PIC
  695.                  bit 2-0 = reserved
  696.                 ICW3:
  697.                  bit 7-0 = 0  slave controller not attached to corresponding
  698.                               interrupt pin
  699.                          = 1  slave controller attached to corresponding
  700.                               interrupt pin
  701.                 ICW4:
  702.                  bit 7-5 = 0  reserved
  703.                  bit 4   = 0  no special fully-nested mode
  704.                          = 1  special fully-nested mode
  705.                  bit 3-2 = 0x nonbuffered mode
  706.                          = 10 buffered mode/slave
  707.                          = 11 buffered mode/master
  708.                  bit 1   = 0  normal EOI
  709.                          = 1  Auto EOI
  710.                  bit 0   = 0  8085 mode
  711.                          = 1  8086/8088 mode
  712.  
  713. 0021    r/w     PIC master interrupt mask register
  714.                 OCW1:
  715.                  bit 7 = 0  enable parallel printer interrupt
  716.                  bit 6 = 0  enable diskette interrupt
  717.                  bit 5 = 0  enable fixed disk interrupt
  718.                  bit 4 = 0  enable serial port 1 interrupt
  719.                  bit 3 = 0  enable serial port 2 interrupt
  720.                  bit 2 = 0  enable video interrupt
  721.                  bit 1 = 0  enable keyboard, mouse, RTC interrupt
  722.                  bit 0 = 0  enable timer interrupt
  723.                 OCW2:
  724.                  bit 7-5 = 000  rotate in auto EOI mode (clear)
  725.                          = 001  nonspecific EOI
  726.                          = 010  no operation
  727.                          = 011  specific EOI
  728.                          = 100  rotate in auto EOI mode (set)
  729.                          = 101  rotate on nonspecific EOI command
  730.                          = 110  set priority command
  731.                          = 111  rotate on specific EOI command
  732.                  bit 4   = 0    reserved
  733.                  bit 3   = 0    reserved
  734.                  bit 2-0        interrupt request to which the command applies
  735.  
  736. 0020    r       PIC  interrupt request/in-service registers by OCW3
  737.                 request register:
  738.                  bit 7-0 = 0  no active request for the corresponding int. line
  739.                          = 1  active request for corresponding interrupt line
  740.                 in-service register:
  741.                  bit 7-0 = 0  corresponding line not currently being serviced
  742.                          = 1  corresponding int. line currently being serviced
  743.  
  744. 19
  745. 0020    w       PIC OCW3
  746.                  bit 7   = 0   reserved
  747.                  bit 6-5 = 0x  no operation
  748.                          = 10  reset special mask
  749.                          = 11  set special mask
  750.                  bit 4   = 0   reserved
  751.                  bit 3   = 1   reserved
  752.                  bit 2   = 0   no poll command
  753.                          = 1   poll command
  754.                  bit 1-0 = 0x  no operation
  755.                          = 10  read int.request register on next read at 0020
  756.                          = 11  read int.in-service register on next read 0020
  757.  
  758.  
  759. 0022-002B ----  Intel 82355, part of chipset for 386sx
  760.                  initialisation in POST will disable these addresses,
  761.                  only a hard reset will enable them again.
  762.  
  763. 0022    r/w     82335 MCR memory configuration register
  764. 0024            82335 RC1 roll compare register
  765. 0026            82335 RC2 roll compare register
  766. 0028            82335 CC0 compare register
  767. 002A            82335 CC1 compare register
  768.  
  769.                   values for CC0 and CC1:
  770.                   00F9,0000  enable range compare CC0 0-512K  CC1 disable
  771.                   00F1,0000  enable range compare CC0 0-1024K CC1 disable
  772.                   00F1,10F9  enable range compare CC0 0-1M    CC1 1M-1M5
  773.                   00E1,0000  enable range compare CC0 0-2M    CC1 disable
  774.                   00E1,0000  enable range compare CC0 0-2M    CC1 disable
  775.                   00C1,0000  enable range compare CC0 0-4M    CC1 disable
  776.                   00C1,40E1  enable range compare CC0 0-4M    CC1 4M-6M
  777.                   0081,0000  enable range compare CC0 0-8M    CC1 disable
  778.  
  779.  
  780. 0040-005F ----  PIT  (Programmable Interrupt Timer  8253, 8254)
  781.                  XT & AT uses 40-43    PS/2 uses 40, 42,43,44, 47
  782.  
  783. 0040    r/w     PIT  counter 0, counter divisor       (XT, AT, PS/2)
  784. 0041    r/w     PIT  counter 1, RAM refresh counter   (XT, AT)
  785. 0042    r/w     PIT  counter 2, cassette & speaker    (XT, AT, PS/2)
  786.  
  787. 20
  788. 0043    r/w     PIT  mode port, control word register for counters 0-2
  789.                  bit 7-6 = 00  counter 0 select
  790.                          = 01  counter 1 select   (not PS/2)
  791.                          = 10  counter 2 select
  792.                  bit 5-4 = 00  counter latch command
  793.                          = 01  read/write counter bits 0-7 only
  794.                          = 10  read/write counter bits 8-15 only
  795.                          = 11  read/write counter bits 0-7 first, then 8-15
  796.                  bit 3-1 = 000 mode 0 select
  797.                          = 001 mode 1 select - programmable one shot
  798.                          = x10 mode 2 select - rate generator
  799.                          = x11 mode 3 select - square wave generator
  800.                          = 100 mode 4 select - software triggered strobe
  801.                          = 101 mode 5 select - hardware triggered strobe
  802.                  bit 0   = 0   binary counter 16 bits
  803.                          = 1   BCD counter
  804.  
  805. 0044    r/w     PIT  counter 3 (PS/2, EISA)
  806.                 used as fail-safe timer. generates an NMI on time out.
  807.                 for user generated NMI see at 0462.
  808.  
  809. 0047    w       PIT  control word register counter 3 (PS/2, EISA)
  810.                  bit 7-6 = 00  counter 3 select
  811.                          = 01  reserved
  812.                          = 10  reserved
  813.                          = 11  reserved
  814.                  bit 5-4 = 00  counter latch command counter 3
  815.                          = 01  read/write counter bits 0-7 only
  816.                          = 1x  reserved
  817.                  bit 3-0 = 00
  818.  
  819. 0048            EISA
  820. 004A            EISA
  821. 004B            EISA
  822.  
  823.  
  824. 21
  825. 0060-006F ----  Keyboard controller (8041, 8042)  (or PPI (8255) on XT)
  826.                  XT uses 60-63,  AT uses 60-64
  827.  
  828.                  AT keyboard controller input port bit definitions
  829.                   bit 7   = 0  keyboard inhibited
  830.                   bit 6   = 0  CGA, else MDA
  831.                   bit 5   = 0  manufacturing jumper installed
  832.                   bit 4   = 0  system RAM 512K, else 640K
  833.                   bit 3-0      reserved
  834.  
  835.                  AT keyboard controller input port bit definitions by Compaq
  836.                   bit 7   = 0  security lock is locked
  837.                   bit 6   = 0  Compaq dual-scan display
  838.                           = 1  non-Compaq display
  839.                   bit 5   = 0  system board dip switch 5 is ON
  840.                   bit 4   = 0  auto speed selected 
  841.                           = 1  high speed selected
  842.                   bit 3   = 0  slow (4MHz) 
  843.                           = 1  fast (8MHz)
  844.                   bit 2   = 0  80287 installed 
  845.                           = 1  no NDP installed
  846.                   bit 1-0      reserved
  847.  
  848.                  AT keyboard controller output port bit definitions
  849.                   bit 7 =    keyboard data output
  850.                   bit 6 =    keyboard clock output
  851.                   bit 5 = 0  input buffer full
  852.                   bit 4 = 0  output buffer empty
  853.                   bit 3 =    reserved (see note)
  854.                   bit 2 =    reserved (see note)
  855.                   bit 1 =    gate A20
  856.                   bit 0 =    system reset
  857.                 Note:   bits 2 and 3 are the turbo speed switch or password
  858.                           lock on Award/AMI/Phoenix BIOSes.  These bits make
  859.                           use of nonstandard keyboard controller BIOS
  860.                           functionality to manipulate
  861.                             pin 23 (8041 port 22) as turbo switch for AWARD
  862.                             pin 35 (8041 port 15) as turbo switch/pw lock for
  863.                                 Phoenix
  864.  
  865. 0060    r/w     KB controller data port or keyboard input buffer (ISA, EISA)
  866.                 should only be read from after status port bit0 = 1
  867.                 should only be written to if status port bit1 = 0
  868.                 keyboard commands (data goes also to port 0060):
  869.                  ED     dbl   set/reset mode indicators Caps Num Scrl
  870.                  EE     sngl  diagnostic echo. returns EE.
  871.                  EF-F2  sngl  NOP (No OPeration). reserved for future use
  872.                  F3     dbl   set typematic rate/delay
  873.                  F4     sngl  enable keyboard
  874.                  F5     sngl  disable keyboard. set default parameters
  875.                  F6     sngl  set default parameters
  876.                  F7-FD  sngl  NOP
  877.                  FE     sngl  resend last scancode
  878.                  FF     sngl  perform internal power-on reset function
  879.  
  880.  
  881. 22
  882. 0060    r       KeyBoard or KB controller data output buffer (via PPI on XT)
  883.  
  884. 0061    w       KB controller port B (ISA, EISA)   (PS/2 port A is at 0092)
  885.                 system control port for compatibility with 8255
  886.                  bit 7  (1= IRQ 0 reset )
  887.                  bit 6-4    reserved
  888.                  bit 3 = 1  channel check enable
  889.                  bit 2 = 1  parity check enable
  890.                  bit 1 = 1  speaker data enable
  891.                  bit 0 = 1  timer 2 gate to speaker enable
  892.  
  893. 0061    r       KB controller port B control register (ISA, EISA)
  894.                 system control port for compatibility with 8255
  895.                  bit 7   parity check occurred
  896.                  bit 6   channel check occurred
  897.                  bit 5   mirrors timer 2 output condition
  898.                  bit 4   toggles with each refresh request
  899.                  bit 3   channel check status
  900.                  bit 2   parity check status
  901.                  bit 1   speaker data status
  902.                  bit 0   timer 2 gate to speaker status
  903.  
  904. 0061    w       PPI  Programmable Peripheral Interface 8255 (XT only)
  905.                 system control port
  906.                  bit 7 = 1  clear keyboard
  907.                  bit 6 = 0  hold keyboard clock low
  908.                  bit 5 = 0  I/O check enable
  909.                  bit 4 = 0  RAM parity check enable
  910.                  bit 3 = 0  read low switches
  911.                  bit 2      reserved, often used as turbo switch
  912.                  bit 1 = 1  speaker data enable
  913.                  bit 0 = 1  timer 2 gate to speaker enable
  914.  
  915. 0062    r/w     PPI (XT only)
  916.                  bit 7 = 1  RAM parity check
  917.                  bit 6 = 1  I/O channel check
  918.                  bit 5 = 1  timer 2 channel out
  919.                  bit 4      reserved 
  920.                  bit 3 = 1  system board RAM size type 1
  921.                  bit 2 = 1  system board RAM size type 2
  922.                  bit 1 = 1  coprocessor installed
  923.                  bit 0 = 1  loop in POST
  924.  
  925. 23
  926. 0063    r/w     PPI (XT only) command mode register  (read dipswitches)
  927.                  bit 7-6 = 00  1 diskette drive
  928.                          = 01  2 diskette drives
  929.                          = 10  3 diskette drives
  930.                          = 11  4 diskette drives
  931.                  bit 5-4 = 00  reserved
  932.                          = 01  40*25 color (mono mode)
  933.                          = 10  80*25 color (mono mode)
  934.                          = 11  MDA 80*25
  935.                  bit 3-2 = 00  256K (using 256K chips)
  936.                          = 01  512K (using 256K chips)
  937.                          = 10  576K (using 256K chips)
  938.                          = 11  640K (using 256K chips)
  939.                  bit 3-2 = 00  64K  (using 64K chips)
  940.                          = 01  128K (using 64K chips)
  941.                          = 10  192K (using 64K chips)
  942.                          = 11  256K (using 64K chips)
  943.                  bit 1-0       reserved
  944.  
  945. 0064    r       KB controller read status (ISA, EISA)
  946.                  bit 7 = 1 parity error on transmission from keyboard
  947.                  bit 6 = 1 receive timeout
  948.                  bit 5 = 1 transmit timeout
  949.                  bit 4 = 0 keyboard inhibit
  950.                  bit 3 = 1 data in input register is command
  951.                          0 data in input register is data
  952.                  bit 2 = 0 system flag status 
  953.                        = 0 power up or reset 
  954.                        = 1 selftest OK
  955.                  bit 1 = 1 input buffer full (input 60/64 has data for 8042)
  956.                  bit 0 = 1 output buffer full (output 60 has data for system)
  957.  
  958. 0064    r        KB controller read status by Compaq
  959.                  bit 7 = 1 parity error detected (11-bit format only). If an
  960.                            error is detected, a Resend command is sent to the
  961.                            keyboard once only, as an attempt to recover.
  962.                  bit 6 = 1 receive timeout. transmission didn't finish in 2mS.
  963.                  bit 5 = 1 transmission timeout error
  964.                             bit 5,6,7  cause
  965.                                 1 0 0  No clock
  966.                                 1 1 0  Clock OK, no response
  967.                                 1 0 1  Clock OK, parity error
  968.                  bit 4 = 0 security lock engaged
  969.                  bit 3 = 1 data in OUTPUT register is command
  970.                          0 data in OUTPUT register is data
  971.                  bit 2 = 0 system flag status 
  972.                        = 0 power up or reset 
  973.                        = 1 soft reset
  974.                  bit 1 = 1 input buffer full (output 60/64 has data)
  975.                  bit 0 = 0 no new data in buffer (input 60 has data)
  976.  
  977. 24
  978. 0064    w       KB controller input buffer (ISA, EISA)
  979.                 KB controller commands (data goes to port 0060):
  980.                  20     read  read byte zero of internal RAM, this is the
  981.                               last KB command send to 8041
  982.                       Compaq  Put current command byte on port 0060
  983.                                 command structure:
  984.                                 bit 7   reserved
  985.                                 bit 6 = 1 convert KB codes to 8086 scan codes
  986.                                 bit 5 = 0 use 11-bit codes 
  987.                                       = 1 use 8086 codes
  988.                                 bit 4 = 0 enable keyboard 
  989.                                       = 1 disable keyboard
  990.                                 bit 3 = 1 ignore security lock state
  991.                                 bit 2     this bit goes into bit2 status reg.
  992.                                 bit 1 = 0 reserved
  993.                                 bit 0 = 1 generate int. when output buffer full
  994.                  21-3F  read  reads the byte specified in the lower 5 bits of
  995.                               the command in the 8041's internal RAM
  996.                  60-7F  dbl   writes the data byte to the address specified in
  997.                               the 5 lower bits of the command.
  998.  
  999.                               Alternate description KB IO command 60 summary:
  1000.                                bit7 = 0 reserved
  1001.                                bit6 =   IBM PC compatibility mode
  1002.                                bit5 =   IBM PC mode
  1003.                                bit4 =   disable kb
  1004.                                bit3 =   inhibit override
  1005.                                bit2 =   system flag
  1006.                                bit1 = 0 reserved
  1007.                                bit0 =   enableoutput buffer full interrupt
  1008.  
  1009.                  60   Compaq  Load new command (60 to [64], command to [60])
  1010.                  A1   Compaq  unknown speedfunction 
  1011.                  A2   Compaq  unknown speedfunction 
  1012.                  A3   Compaq  Enable system speed control
  1013.                  A4   Compaq  Toggle speed
  1014.                  A5   Compaq  Special reed. the 8042 places the real values
  1015.                               of port 2 except for bits 4 and 5 wich are given
  1016.                               a new definition in the output buffer. No output
  1017.                               buffer full is generated.
  1018.                                 if bit 5 = 0, a 9-bit keyboard is in use
  1019.                                 if bit 5 = 1, an 11-bit keyboard is in use
  1020.                                 if bit 4 = 0, outp-buff-full interrupt disabled
  1021.                                 if bit 4 = 1, output-buffer-full int. enabled
  1022.                  A6   Compaq  unknown speedfunction 
  1023.                  AA     sngl  initiate self-test. will return 55 to data port
  1024.                       Compaq  Initializes ports 1 and 2, disables the keyboard
  1025.                               and clears the buffer pointers. It then places
  1026.                               55 in the output buffer.
  1027.                  AB     sngl  initiate interface test. result values:
  1028.                                0 = no error
  1029.                                1 = keyboard clock line stuck low
  1030.                                2 = keyboard clock line stuck high
  1031.                                3 = keyboard data line is stuck low
  1032. 25
  1033.                                4 = keyboard data line stuck high
  1034.                       Compaq   5 = Compaq diagnostic feature
  1035.                  AC     read  diagnostic dump. the contents of the 8041 RAM,
  1036.                               output port, input port, status word are send.
  1037.                  AD     sngl  disable keyboard (sets bit 4 of commmand byte)
  1038.                  AE     sngl  enable keyboard  (resets bit 4 of commmand byte)
  1039.                  AF     AWARD Enhanced Command: read keyboard version
  1040.                  C0     read  read input port
  1041.                       Compaq  Places status of input port in output buffer. use
  1042.                               this command only when the output buffer is empty
  1043.                  C1     AWARD Enhanced Command: poll input port Low nibble
  1044.                  C2     AWARD Enhanced Command: poll input port High nibble
  1045.                  D0     read  read output port
  1046.                       Compaq  Places byte in output port in output buffer. use
  1047.                               this command only when the output buffer is empty
  1048.                  D1     dbl   write output port. next byte written  to 0060
  1049.                               will be written to the 8041 output port
  1050.                       Compaq  The system speed bits are not set by this command
  1051.                               use commands A1-A6 (!) for speed functions.
  1052.                  D2     AWARD Enhanced Command: write keyboard output buffer
  1053.                  D3     AWARD Enhanced Command: write pointing device out.buf.
  1054.                  D4     AWARD Enhanced Command: write to auxiliary device
  1055.                  DD     sngl  disable address line A20. default in Real Mode
  1056.                  DF     sngl  enable address line A20
  1057.                  E0     read  read test inputs. bit0 = T0 and bit1 = T1
  1058.                  Exx    AWARD Enhanced Command: active output port
  1059.                  ED   Compaq  This is a two part command to control the state
  1060.                               of the NumLock CpasLock and ScrollLock LEDs
  1061.                               The second byte contains the state to set LEDs.
  1062.                                 bit 7-3    reserved. should be set to 0.
  1063.                                 bit 2 = 0  Caps Lock LED off
  1064.                                 bit 1 = 0  Num Lock LED off
  1065.                                 bit 0 = 0  Scroll Lock LED off
  1066.                  F0-FF  sngl  pulse output port low for 6 microseconds.
  1067.                               bits 0-3 contain the mask for the bits to be
  1068.                               pulsed. a bit is pulsed if its mask bit is zero.
  1069.                               bit0=system reset. Don't set to zero. Pulse only!
  1070.  
  1071. 0065    r       communications port (Olivetti M24)
  1072.  
  1073. 0068    w       HP-Vectra  control buffer (HP commands)
  1074. 0069    r       HP-Vectra  SVC (keyboard request SerViCe port)
  1075. 006A    w       HP-Vectra  clear processing, done
  1076.  
  1077. 006C-006F       HP-HIL  (Human Interface Link = async. serial inputs 0-7)
  1078.  
  1079.  
  1080. 0070-007F ----  CMOS RAM/RTC (Real Time Clock  MC146818)
  1081.  
  1082. 26
  1083. 0070    w       CMOS RAM index register port (ISA, EISA)
  1084.                  bit 7   = 1  NMI disabled
  1085.                          = 0  NMI enabled
  1086.                  bit 6-0      CMOS RAM index (64 bytes, sometimes 128 bytes)
  1087.  
  1088.                 any write to 0070 should be followed by an action to 0071
  1089.                 or the RTC wil be left in an unknown state.
  1090.  
  1091. 0071    r/w     CMOS RAM data port (ISA, EISA)
  1092.                 RTC registers:
  1093.                 00    current second in BCD
  1094.                 01    alarm second   in BCD
  1095.                 02    current minute in BCD
  1096.                 03    alarm minute   in BCD
  1097.                 04    current hour in BCD
  1098.                 05    alarm hour   in BCD
  1099.                 06    day of week  in BCD
  1100.                 07    day of month in BCD
  1101.                 08    month in BCD
  1102.                 09    year  in BCD (00-99)
  1103.                 0A    status register A
  1104.                        bit 7 = 1  update in progress
  1105.                        bit 6-4 divider that identifies the time-based
  1106.                                 frequency
  1107.                        bit 3-0 rate selection output  frequency and int. rate
  1108.                 0B    status register B
  1109.                        bit 7 = 0  run
  1110.                              = 1  halt
  1111.                        bit 6 = 1  enable periodic interrupt
  1112.                        bit 5 = 1  enable alarm interrupt
  1113.                        bit 4 = 1  enable update-ended interrupt
  1114.                        bit 3 = 1  enable square wave interrupt
  1115.                        bit 2 = 1  calendar is in binary format
  1116.                              = 0  calendar is in BCD format
  1117.                        bit 1 = 1  24-hour mode
  1118.                              = 0  12-hour mode
  1119.                        bit 0 = 1  enable daylight savings time. only in USA.
  1120.                                   useless in Europe. Some DOS versions clear
  1121.                                   this bit when you use the DAT/TIME command.
  1122.                 0C    status register C
  1123.                        bit 7 =    interrupt request flag
  1124.                        bit 6 =    peridoc interrupt flag
  1125.                        bit 5 =    alarm interrupt flag
  1126.                        bit 4 =    update interrupt flag
  1127.                        bit 3-0    reserved
  1128.                 0D    status register D
  1129.                        bit 7 = 1  Real-Time Clock has power
  1130.                        bit 6-0    reserved
  1131.                 0E    diagnostics status byte
  1132.                        bit 7 = 0  RTC lost power
  1133.                        bit 6 = 1  CMOS RAM checksum bad
  1134.                        bit 5 = 1  invalid configuration information at POST
  1135.                        bit 4 = 1  memory size error at POST
  1136.                        bit 3 = 1  fixed disk/adapter failed initialization
  1137. 27
  1138.                        bit 2 = 1  CMOS RAM time found invalid
  1139.                        bit 1 = 1  adapters do not match configuration (EISA)
  1140.                        bit 0 = 1  time out reading an adapter ID (EISA)
  1141.                 0F    shutdown status byte
  1142.                        00 = normal execution of POST
  1143.                        01 = chip set initialization for real mode reentry
  1144.                        04 = jump to bootstrap code
  1145.                        05 = issue an EOI an JMP to Dword ptr at 40:67
  1146.                        06 = JMP to Dword ptrv at 40:67 without EOI
  1147.                        07 = return to INT15/87 (block move)
  1148.                        08 = return to POST memory test
  1149.                        09 = return to INT15/87 (block move)
  1150.                        0A = JMP to Dword ptr at 40:67 without EOI
  1151.                        0B = return IRETS through 40:67
  1152.                 10    diskette drive type for A: and B:
  1153.                        bit 7-4  drive type of drive 0
  1154.                        bit 3-0  drive type of drive 1
  1155.                                = 0000      no drive
  1156.                                = 0001      360K
  1157.                                = 0010      1M2
  1158.                                = 0011      720K
  1159.                                = 0100      1M44
  1160.                                = 0101-1111 reserved
  1161.                 11    reserved / AMI Extended CMOS setup (AMI Hi-Flex BIOS)
  1162.                        bit 7   = 1     Typematic Rate Programming
  1163.                        bit 6-5 = 00    Typematic Rate Delay 250 mSec
  1164.                        bit 4-0 = 00011 Typematic Rate 21.8 Chars/Sec
  1165.                 12    fixed disk drive type for drive 0 and drive 1
  1166.                        bit 7-4  drive type of drive 0
  1167.                        bit 3-0  drive type of drive 1
  1168.                                 if either of the nibbles equals 0F, then bytes
  1169.                                 19 an 1A are valid
  1170.                 13    reserved / AMI Extended CMOS setup (AMI Hi-Flex BIOS)
  1171.                        bit 7 = 1  Mouse Support Option
  1172.                        bit 6 = 1  Above 1 MB Memory Test disable
  1173.                        bit 5 = 1  Memory Test Tick Sound disable
  1174.                        bit 4 = 1  Memory Parity Error Check enable
  1175.                        bit 3 = 1  Hit <ESC> Message Display disabled
  1176.                        bit 2 = 1  Hard Disk Type 47 Data Area at address 0:300
  1177.                        bit 1 = 1  Wait For <F1> If Any Error enabled
  1178.                        bit 0 = 1  System Boot Up Num Lock is On
  1179.                 14    equipment byte
  1180.                        bit 7-6   diskette drives installed
  1181.                                = 00  1 drive installed
  1182.                                = 01  2 drives installed
  1183.                                = 10  reserved
  1184.                                = 11  reserved
  1185.                        bit 5-4   primary display
  1186.                                = 00  adapter card with option ROM 
  1187.                                = 01  40*25 color
  1188.                                = 10  80*25 color
  1189.                                = 11  monochrome
  1190.                        bit 3-2   reserved
  1191.                        bit 1   = 1  coprocessor installed (non-Weitek)
  1192. 28
  1193.                        bit 0        diskette drive avaliable for boot
  1194.                 15    LSB of systemn base memory in Kb
  1195.                 16    MSB of systemn base memory in Kb
  1196.                 17    LSB of total extended memory in Kb
  1197.                 18    MSB of total extended memory in Kb
  1198.                 19    drive C extension byte
  1199.                 1A    drive D extension byte
  1200.                 1B-27 reserved
  1201.                 1B/1C word to 82335 RC1 roll compare register at [24]
  1202.                       (Phoenix)
  1203.                 1D/1E word to 82335 RC2 roll compare register at [26]
  1204.                       (Phoenix)
  1205.                 28    HP-Vectra checksum over 29-2D
  1206.                 29-2D reserved
  1207.                 29/2A word to Intel 82335 CC0 compare register at [28]
  1208.                       (Phoenix)
  1209.                 2B/2C word send to 82335 CC1 compare register at [2A]
  1210.                       (Phoenix)
  1211.                 2D    AMI Extended CMOS setup (AMI Hi-Flex BIOS)
  1212.                       (Phoenix BIOS checks for the values AA or CC)
  1213.                        bit 7 = 1  Weitek Processor Absent
  1214.                        bit 6 = 1  Floppy Drive Seek At Boot disabled
  1215.                        bit 5 = 1  System Boot Up Sequence  C:, A:
  1216.                        bit 4 = 1  System Boot Up Speed is high
  1217.                        bit 3 = 1  Cache Memory enabled
  1218.                        bit 2 = 1  Internal Cache Memory  <1>
  1219.                        bit 1-0    reserved
  1220.                 2E    CMOS MSB checksum over 10-2D
  1221.                 2F    CMOS LSB checksum over 10-2D
  1222.                 30    LSB of extended memory found above 1Mb at POST
  1223.                 31    MSB of extended memory found above 1Mb at POST
  1224.                 32    date century in BCD
  1225.                 33    information flags
  1226.                        bit4 = bit4 from CPU register CR0   (Phoenix)
  1227.                               this bit is only known as INTEL RESERVED
  1228.                 34-3F reserved  
  1229.                 34     bit4 bit5 (Phoenix BIOS)
  1230.                 3D/3E word to 82335 MCR memory config register at [22]
  1231.                       (Phoenix)
  1232.                 3D     bit3      base memsize 512/640  (Phoenix)
  1233.                 3E     bit7 = 1  relocate enable       (Phoenix)
  1234.                        bit1 = 1  shadow video enable   (Phoenix)
  1235.                        bit0 = 1  shadow BIOS enable    (Phoenix)
  1236.  
  1237.  
  1238.                 User Definable Drive Parameters are also stored in CMOS RAM:
  1239.  
  1240.                 AMI (386sx BIOS 1989) first user definable drive (type 47)
  1241.                  1B  L cylinders
  1242.                  1C  H cylinders
  1243.                  1D  heads
  1244.                  1E  L Write Precompensation Cylinder
  1245.                  1F  H Write Precompensation Cylinder
  1246.                  20  ??
  1247. 29
  1248.                  21  L cylinders parking zone
  1249.                  22  H cylinders parking zone
  1250.                  23  sectors
  1251.  
  1252.                 AMI (386sx BIOS 1989) second user definable drive (type 48)
  1253.                  24  L cylinders
  1254.                  25  H cylinders
  1255.                  26  heads
  1256.                  27  L Write Precompensation Cylinder
  1257.                  28  H Write Precompensation Cylinder
  1258.                  29  ??
  1259.                  2A  L cylinders parking zone
  1260.                  2B  H cylinders parking zone
  1261.                  2C  sectors
  1262.  
  1263.                 Phoenix (386BIOS v1.10.03 1988) 1st user definable drv (type48)
  1264.                  20  L cylinders
  1265.                  21  H cylinders
  1266.                  22  heads
  1267.                  23  L Write Precompensation Cylinder
  1268.                  24  H Write Precompensation Cylinder
  1269.                  25  L cylinders parking zone
  1270.                  26  H cylinders parking zone
  1271.                  27  sectors
  1272.  
  1273.                 Phoenix (386BIOS v1.10.03 1988) 2nd user definable drv (type49)
  1274.                 (when PS/2-style password option is not used)
  1275.                  35  L cylinders
  1276.                  36  H cylinders
  1277.                  37  heads
  1278.                  38  L Write Precompensation Cylinder
  1279.                  39  H Write Precompensation Cylinder
  1280.                  3A  L cylinders parking zone
  1281.                  3B  H cylinders parking zone
  1282.                  3C  sectors
  1283.  
  1284. 0078            HP-Vectra  Hard Reset: NMI enable/disable
  1285.                  bit 7 = 0  disable & clear hard reset from HP-HIL controller
  1286.                        = 1  enable hard reset from HP-HIL controller chip
  1287.                  bit 6-0    reserved
  1288.  
  1289.  
  1290. 007C-007D ----  HP-Vectra  PIC 3   (Programmable Interrupt Controller 8259)
  1291.                 cascaded to first controller.
  1292.                 used for keyboard and input device interface.
  1293. 007C    r/w     HP-Vectra  PIC 3  see at 0020  PIC 1
  1294. 007D    r/w     HP-Vectra  PIC 3  see at 0021  PIC 1
  1295.  
  1296.  
  1297. 0080    w       Manufacturing Diagnostics port
  1298.  
  1299.  
  1300. 30
  1301. 0080-008F ----  DMA page registers   (74612)
  1302.  
  1303. 0080    r/w     extra page register (temporary storage)
  1304. 0081    r/w     DMA channel 2 address byte 2
  1305. 0082    r/w     DMA channel 3 address byte 2
  1306. 0083    r/w     DMA channel 1 address byte 2
  1307. 0084    r/w     extra page register
  1308. 0085    r/w     extra page register
  1309. 0086    r/w     extra page register
  1310. 0087    r/w     DMA channel 0 address byte 2
  1311. 0088    r/w     extra page register
  1312. 0089    r/w     DMA channel 6 address byte 2
  1313. 0089    r/w     DMA channel 7 address byte 2
  1314. 0089    r/w     DMA channel 5 address byte 2
  1315. 008C    r/w     extra page register
  1316. 008D    r/w     extra page register
  1317. 008E    r/w     extra page register
  1318. 008F    r/w     DMA refresh page register
  1319.  
  1320.  
  1321. 0090-009F ----  PS/2 POS (Programmable Option Select)
  1322.  
  1323. 0090            Central arbitration control port
  1324. 0091            Card selection feedback
  1325.  
  1326. 0092    r/w     PS/2 system control port A  (port B is at 0061)
  1327.                  bit 7-6   any bit set to 1 turns activity light on
  1328.                  bit 5     reserved
  1329.                  bit 4 = 1 watchdog timout occurred 
  1330.                  bit 3 = 0 RTC/CMOS security lock (on password area) unlocked
  1331.                        = 1 CMOS locked (done by POST)
  1332.                  bit 2     reserved
  1333.                  bit 1 = 1 indicates A20 active
  1334.                  bit 0 = 0 system reset or write
  1335.                          1 pulse alternate reset pin (alternate CPU reset)
  1336.  
  1337. 0094    w       system board enable/setup register
  1338.                  bit 7 = 1  enable functions
  1339.                        = 0  setup functions
  1340.                  bit 5 = 1  enables VGA
  1341.                        = 0  setup VGA
  1342.  
  1343. 0095            reserved
  1344.  
  1345. 0096    w       adapter enable /setup register
  1346.                  bit 3 = 1  setup adapters
  1347.                        = 0  enable registers
  1348.  
  1349. 0097            reserved
  1350.  
  1351.  
  1352. 31
  1353. 00A0-00AF ----  PIC 2   (Programmable Interrupt Controller 8259)
  1354.  
  1355. 00A0    r/w     NMI mask register (XT)
  1356.  
  1357. 00A0    r/w     PIC 2  same as 0020 for PIC 1
  1358. 00A1    r/w     PIC 2  same as 0021 for PIC 1 except for OCW1:
  1359.                  bit 7 = 0  reserved
  1360.                  bit 6 = 0  enable fixed disk interrupt
  1361.                  bit 5 = 0  enable coprocessor exception interrupt
  1362.                  bit 4 = 0  enable mouse interrupt
  1363.                  bit 3 = 0  reserved
  1364.                  bit 2 = 0  reserved
  1365.                  bit 1 = 0  enable redirect cascade
  1366.                  bit 0 = 0  enable real-time clock interrupt
  1367.  
  1368.  
  1369. 00C0      ----  TI  SN746496 programmable tone/noise generator  PCjr
  1370.  
  1371.  
  1372. 00C0-00DF ----  DMA 2   (second Direct Memory Access controller 8237)
  1373.  
  1374. 00C0    r/w     DMA channel 4 memory address bytes 1 and 0 (low) (ISA, EISA)
  1375. 00C2    r/w     DMA channel 4 transfer count bytes 1 and 0 (low) (ISA, EISA)
  1376. 00C4    r/w     DMA channel 5 memory address bytes 1 and 0 (low) (ISA, EISA)
  1377. 00C6    r/w     DMA channel 5 transfer count bytes 1 and 0 (low) (ISA, EISA)
  1378. 00C8    r/w     DMA channel 6 memory address bytes 1 and 0 (low) (ISA, EISA)
  1379. 00CA    r/w     DMA channel 6 transfer count bytes 1 and 0 (low) (ISA, EISA)
  1380. 00CC    r/w     DMA channel 7 memory address byte 0 (low), then 1 (ISA, EISA)
  1381. 00CE    r/w     DMA channel 7 transfer count byte 0 (low), then 1 (ISA, EISA)
  1382.  
  1383. 00D0    r       DMA channel 4-7 status register (ISA, EISA)
  1384.                  bit 7 = 1  channel 7 request
  1385.                  bit 6 = 1  channel 6 request
  1386.                  bit 5 = 1  channel 5 request
  1387.                  bit 4 = 1  channel 4 request
  1388.                  bit 3 = 1  terminal count on channel 7
  1389.                  bit 2 = 1  terminal count on channel 6
  1390.                  bit 1 = 1  terminal count on channel 5
  1391.                  bit 0 = 1  terminal count on channel 4
  1392.  
  1393. 00D0    w       DMA channel 4-7 command register (ISA, EISA)
  1394.                  bit 7 = 1  DACK sense active high
  1395.                        = 0  DACK sense active low
  1396.                  bit 6 = 1  DREQ sense active high
  1397.                        = 0  DREQ sense active low
  1398.                  bit 5 = 1  extended write selection
  1399.                        = 0  late write selection
  1400.                  bit 4 = 1  rotating priority
  1401.                        = 0  fixed priority
  1402.                  bit 3 = 1  compressed timing
  1403.                        = 0  normal timing
  1404.                  bit 2 = 0  enable controller
  1405.                  bit 1 = 1  enable memory-to-memory transfer
  1406.                  bit 0      .....
  1407.  
  1408. 32
  1409. 00D2    w       DMA channel 4-7 write request register (ISA, EISA)
  1410.  
  1411. 00D4    w       DMA channel 4-7 write single mask register (ISA, EISA)
  1412.                  bit 7-3      reserved
  1413.                  bit 2   = 0  clear mask bit
  1414.                          = 1  set mask bit
  1415.                  bit 1-0 = 00 channel 4 select
  1416.                          = 01 channel 5 select
  1417.                          = 10 channel 6 select
  1418.                          = 11 channel 7 select
  1419.  
  1420. 00D6    w       DMA channel 4-7 mode register (ISA, EISA)
  1421.                  bit 7-6 = 00  demand mode
  1422.                          = 01  single mode
  1423.                          = 10  block mode
  1424.                          = 11  cascade mode
  1425.                  bit 5   = 0   address increment select
  1426.                          = 1   address decrement select
  1427.                  bit 4   = 0   autoinitialisation disable
  1428.                          = 1   autoinitialisation enable
  1429.                  bit 3-2 = 00  verify operation
  1430.                          = 01  write to memory
  1431.                          = 10  read from memory
  1432.                          = 11  reserved
  1433.                  bit 1-0 = 00  channel 4 select
  1434.                          = 01  channel 5 select
  1435.                          = 10  channel 6 select
  1436.                          = 11  channel 7 select
  1437.  
  1438. 00D8    w       DMA channel 4-7 clear byte pointer flip-flop (ISA, EISA)
  1439. 00DA    r       DMA channel 4-7 read temporary register (ISA, EISA)
  1440. 00DA    w       DMA channel 4-7 master clear (ISA, EISA)
  1441. 00DC    w       DMA channel 4-7 clear mask register (ISA, EISA)
  1442. 00DE    w       DMA channel 4-7 write mask register (ISA, EISA)
  1443.  
  1444. 00E0            split address register, memory encoding registers PS/2m80 only
  1445.  
  1446.  
  1447. 00F0-00F5 ----  PCjr Disk Controller
  1448.  
  1449. 00F0            disk controller
  1450. 00F2            disk controller control port
  1451. 00F4            disk controller status register
  1452. 00F5            disk controller data port
  1453.  
  1454.  
  1455. 00F0-00FF ----  coprocessor (8087..80387)
  1456.  
  1457. 00F0            math coprocessor clear busy latch
  1458. 00F1            math coprocessor reset
  1459. 00F8-00FF       math coprocessor
  1460.  
  1461.  
  1462. 0100-010F ----  CompaQ Tape drive adapter. alternate address at 0300
  1463.  
  1464.  
  1465. 33
  1466. 0100-0107 ----  PS/2 POS (Programmable Option Select)
  1467.  
  1468. 0100    r       POS register 0  Low adapter ID byte
  1469. 0101    r       POS register 1  High adapter ID byte
  1470.  
  1471. 0102    r/w     POS register 2  option select data byte 1
  1472.                  bit 0 is card enable (CDEN)
  1473.  
  1474. 0103    r/w     POS register 3  option select data byte 2
  1475. 0104    r/w     POS register 4  option select data byte 3
  1476. 0105    r/w     POS register 5  option select data byte 4
  1477.                  bit 7  channel active (-CHCK)
  1478.                  bit 6  channel status
  1479.  
  1480. 0106    r/w     POS register 6  Low subaddress extension
  1481. 0107    r/w     POS register 7  High subaddress extension
  1482.  
  1483.  
  1484. 0108-010F ----  8 digit LED info panel on IBM PS/2
  1485.  
  1486. 010F    w       leftmost character on display
  1487. 010E    w       second character
  1488. ....    w
  1489. 0108    w       eighth character
  1490.  
  1491.  
  1492. 0130-013F ----  CompaQ SCSI adapter. alternate address at 0330
  1493.  
  1494.  
  1495. 0130-0133 ----  Adaptec 154xB/154xC SCSI adapter.
  1496.                 alternate address at 0134, 0230, 0234 ,0330 and 0334
  1497.  
  1498.  
  1499. 0134-0137 ----  Adaptec 154xB/154xC SCSI adapter.
  1500.                 alternate address at 0130, 0230, 0234 ,0330 and 0334
  1501.  
  1502.  
  1503. 0140-014F ----  SCSI (alternate Small Computer System Interface) adapter
  1504.                 (1st at 0340-034F)
  1505.  
  1506.  
  1507. 0140-0157 ----  RTC (alternate Real Time Clock for XT)   (1st at 0340-0357)
  1508.  
  1509.  
  1510. 0170-0177 ----  HDC 2   (2nd Fixed Disk Controller)   same as 01Fx (ISA, EISA)
  1511.  
  1512.  
  1513. 01E8-01EF ----  System Control. Laptop chipset: Headland HL21 & Acer M5105
  1514.  
  1515. 01ED    r/w     select internal register. Data to/from 01EF
  1516. 01EE    r
  1517. 01EF    r/w     reg.
  1518.                 5  = 1000xxxx  for low CPU clock speed (4MHz on Morse/Mitac)
  1519.                    = 0xxxxxxx  for high CPU clock speed (16MHz on Morse/Mitac)
  1520.  
  1521.  
  1522. 34
  1523. 01F0-01F7 ----  HDC 1   (1st Fixed Disk Controller)   same as 017x (ISA, EISA)
  1524.  
  1525. 01F0    r/w     data register
  1526.  
  1527. 01F1    r       error register
  1528.                 diagnostic mode errors:
  1529.                  bit 7-3        reserved
  1530.                  bit 2-1 = 001  no error detected
  1531.                          = 010  formatter device error
  1532.                          = 011  sector buffer error
  1533.                          = 100  ECC circuitry error
  1534.                          = 101  controlling microprocessor error
  1535.                  operation mode:
  1536.                   bit 7  = 1  bad block detected
  1537.                          = 0  block OK
  1538.                   bit 6  = 1  uncorrectable ECC error
  1539.                          = 0  no error
  1540.                   bit 5       reserved
  1541.                   bit 4  = 1  ID found
  1542.                          = 0  ID not found
  1543.                   bit 3       reserved
  1544.                   bit 2  = 1  command completed
  1545.                          = 0  command aborted
  1546.                   bit 1  = 1  track 000 not found
  1547.                          = 0  track 000 found
  1548.                   bit 0  = 1  DAM not found
  1549.                          = 0  DAM found (CP-3022 always 0)
  1550.  
  1551. 01F1    w       WPC/4  (Write Precompensation Cylinder divided by 4)
  1552.  
  1553. 01F2    r/w     sector count
  1554. 01F3    r/w     sector number
  1555. 01F4    r/w     cylinder low
  1556. 01F5    r/w     cylinder high
  1557.  
  1558. 01F6    r/w     drive/head
  1559.                  bit 7   = 1
  1560.                  bit 6   = 0
  1561.                  bit 5   = 1
  1562.                  bit 4   = 0  drive 0 select
  1563.                          = 1  drive 1 select
  1564.                  bit 3-0      head select bits
  1565.  
  1566. 01F7    r       status register
  1567.                  bit 7 = 1  controller is executing a command
  1568.                  bit 6 = 1  drive is ready
  1569.                  bit 5 = 1  write fault
  1570.                  bit 4 = 1  seek complete
  1571.                  bit 3 = 1  sector buffer requires servicing
  1572.                  bit 2 = 1  disk data read successfully corrected
  1573.                  bit 1 = 1  index - set to 1 each disk revolution
  1574.                  bit 0 = 1  previous command ended in an error
  1575.  
  1576. 35
  1577. 01F7    w       command register
  1578.                 commands:
  1579.                  98 E5   check power mode       (IDE)
  1580.                  90      execute drive diagnostics
  1581.                  50      format track
  1582.                  EC      identify drive         (IDE)
  1583.                  97 E3   idle                   (IDE)
  1584.                  95 E1   idle immediatete       (IDE)
  1585.                  91      initialize drive parameters
  1586.                  1x      recalibrate
  1587.                  E4      read buffer            (IDE)
  1588.                  C8      read DMA with retry    (IDE)
  1589.                  C9      read DMA without retry (IDE)
  1590.                  C4      read multiplec         (IDE)
  1591.                  20      read sectors with retry
  1592.                  21      read sectors without retry
  1593.                  22      read long with retry
  1594.                  23      read long without retry
  1595.                  40      read verify sectors with retry
  1596.                  41      read verify sectors without retry
  1597.                  7x      seek
  1598.                  EF      set features           (IDE)
  1599.                  C6      set multiple mode      (IDE)
  1600.                  99 E6   set sleep mode         (IDE)
  1601.                  96 E2   standby                (IDE)
  1602.                  94 E0   standby immediate      (IDE)
  1603.                  E8      write buffer           (IDE)
  1604.                  CA      write DMA with retry   (IDE)
  1605.                  CB      write DMA with retry   (IDE)
  1606.                  C5      write multiple         (IDE)
  1607.                  E9      write same             (IDE)
  1608.                  30      write sectors with retry
  1609.                  31      write sectors without retry
  1610.                  32      write long with retry
  1611.                  33      write long without retry
  1612.                  3C      write verify           (IDE)
  1613.                  9A      vendor unique          (IDE)
  1614.                  C0-C3   vendor unique          (IDE)
  1615.                  8x      vendor unique          (IDE)
  1616.                  F0-F4   EATA standard          (IDE)
  1617.                  F5-FF   vendor unique          (IDE)
  1618.  
  1619.  
  1620. 36
  1621. 0200-020F ----  Game port reserved I/O address space  
  1622. 0200-0207 ----  Game port, eight identical addresses on some boards
  1623.  
  1624. 0201    r       read joystick position and status
  1625.                  bit 7  status B joystick button 2 / D paddle button
  1626.                  bit 6  status B joystick button 1 / C paddle button
  1627.                  bit 5  status A joystick button 2 / B paddle button
  1628.                  bit 4  status A joystick button 1 / A paddle button
  1629.                  bit 3  B joystick Y coordinate    / D paddle coordinate
  1630.                  bit 2  B joystick X coordinate    / C paddle coordinate
  1631.                  bit 1  A joystick Y coordinate    / B paddle coordinate
  1632.                  bit 0  A joystick X coordinate    / A paddle coordinate
  1633.  
  1634.         w       fire joysticks four one-shots
  1635.  
  1636.  
  1637. 0210-0217 ----  Expansion unit (XT)
  1638.  
  1639. 0210    w       latch expansion bus data
  1640.         r       verify expansion bus data
  1641. 0211    w       clear wait, test latch
  1642.         r       High byte data address
  1643. 0212    r       Low byte data address
  1644. 0213    w       0=enable,  1=disable expansion unit
  1645. 0214    w       latch data  (receiver card port)
  1646.         r       read data   (receiver card port)
  1647. 0215    r       High byte of address, then Low byte   (receiver card port)
  1648.  
  1649.  
  1650. 0220-0227 ----  Soundblaster PRO and SSB 16 ASP
  1651.  
  1652.  
  1653. 0220-022F ----  Soundblaster PRO 2.0
  1654.  
  1655.  
  1656. 0220-022F ----  Soundblaster PRO 4.0
  1657. 0220    r       left FM status port
  1658. 0220    w       left FM music register address port (index)
  1659. 0221    r/w     left FM music data port
  1660. 0222    r       right FM status port
  1661. 0222    w       right FM music register address port (index)
  1662. 0223    r/w     right FM music data port
  1663. 0224    w       mixer register address port (index)
  1664. 0225    r/w     mixer data port
  1665. 0226    w       DSP reset
  1666. 0228    r       FM music status port
  1667. 0228    w       FM music register address port (index)
  1668. 0229    w       FM music data port
  1669. 022A    r       DSP read data (voice I/O and Midi)
  1670. 022C    w       DSP write data / write command
  1671. 022C    r       DSP write buffer status (bit 7)
  1672. 022E    r       DSP data available status (bit 7)
  1673.  
  1674.                 The FM music is accessible on 0388/0389 for compatibility.
  1675.  
  1676.  
  1677. 37
  1678. 0230-0233 ----  Adaptec 154xB/154xC SCSI adapter.
  1679.                 alternate address at 0130, 0134, 0230, 0330 and 0334
  1680.  
  1681.  
  1682. 0234-0237 ----  Adaptec 154xB/154xC SCSI adapter.
  1683.                 alternate address at 0130, 0134, 0230 ,0330 and 0334
  1684.  
  1685.  
  1686. 0240-0257 ----  RTC (alternate Real Time Clock for XT)   (1st at 0340-0357)
  1687.                 (used by TIMER.COM v1.2 which is the 'standard' timer program)
  1688.  
  1689.  
  1690. 0258-025F ----  Intel Above Board
  1691.  
  1692.  
  1693. 0278-027E ----  parallel printer port, same as 0378 and 03BC
  1694.  
  1695. 0278    w       data port
  1696. 0279    r/w     status port
  1697. 027A    r/w     control port
  1698.  
  1699.  
  1700. 02A2-02A3 ----  MSM58321RS clock
  1701.  
  1702.  
  1703. 02B0-02BF ----  Trantor SCSI adapter
  1704.  
  1705.  
  1706. 02B0-02DF ----  alternate EGA,  primary EGA at 03C0
  1707.  
  1708.  
  1709. 02C0-02Cx ----  AST-clock
  1710.  
  1711.  
  1712. 02E0-02EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  1713.                 (GAB 0 on XT)
  1714. 02E1            GPIB (adapter 0)
  1715. 02E2
  1716. 02E3
  1717.  
  1718.  
  1719. 02E0-02EF ----  data aquisition  (AT)
  1720.  
  1721. 02E2            data aquisition (adapter 0)
  1722. 02E3            data aquisition (adapter 0)
  1723.  
  1724.  
  1725. 02E8-02EF ----  serial port, same as 02F8, 03E8, and 03F8
  1726.  
  1727.  
  1728. 38
  1729. 02F8-02FF ----  serial port, same as 02E8, 02F8, and 03F8
  1730.  
  1731. 02F8    w       transmitter holding register
  1732. 02F8    r       receiver buffer register
  1733.         r/w     divisor latch, low byte   when DLAB=1
  1734. 02F9    r/w     divisor latch, high byte  when DLAB=1
  1735.         r/w     interrupt enable register when DLAB=0
  1736. 02FA    r       interrupt identification register
  1737. 02FB    r/w     line control register
  1738. 02FC    r/w     modem control register
  1739. 02FD    r       line status register
  1740. 02FF    r/w     scratch register
  1741.  
  1742.  
  1743. 0300-0301 ---- Soundblaster 16 ASP MPU-Midi
  1744.  
  1745.  
  1746. 0300-031F ----  prototype cards
  1747.                 Periscope hardware debugger
  1748.  
  1749.  
  1750. 0300-030F ----  Philips CD-ROM player CM50
  1751. 0310-031F ----  Philips CD-ROM player CM50
  1752.  
  1753.  
  1754. 0320-0323 ----  XT HDC 1   (Hard Disk Controller)
  1755.  
  1756. 0320    r/w     data register
  1757.  
  1758. 0321    w       reset controller
  1759.         r       read controller hardware status
  1760.                  bit 7-6 = 0
  1761.                  bit 5        logical unit number
  1762.                  bit 4-2 = 0
  1763.                  bit 1   = 0  no error
  1764.                  bit 0   = 0 
  1765.  
  1766. 0322    r       read DIPswitch setting on XT controller card
  1767.         w       generate controller-select pulse
  1768. 0323    w       write pattern to DMA and INT mask register
  1769.  
  1770. 0324-0327 ----  XT HDC 2   (Hard Disk Controller)
  1771. 0328-032B ----  XT HDC 3   (Hard Disk Controller)
  1772. 032C-032F ----  XT HDC 4   (Hard Disk Controller)
  1773.  
  1774.  
  1775. 0330-0331 ----  MIDI interface
  1776.  
  1777.  
  1778. 0330-0333 ----  Adaptec 154xB/154xC SCSI adapter. default address.
  1779.                 alternate address at 0130, 0134, 0230, 0234 and 0334
  1780.  
  1781.  
  1782. 0330-033F ----  CompaQ SCSI adapter. alternate address at 0130
  1783.  
  1784.  
  1785. 39
  1786. 0330-033F ----  Philips CD-ROM player CM50
  1787.  
  1788.  
  1789. 0334-0337 ----  Adaptec 154xB/154xC SCSI adapter.
  1790.                 alternate address at 0130, 0134, 0230 ,0234 and 0330
  1791.  
  1792.  
  1793. 0338      ----  AdLib soundblaster card
  1794.  
  1795.  
  1796. 0340-034F ----  Philips CD-ROM player CM50
  1797.  
  1798.  
  1799. 0340-034F ----  SCSI (1st Small Computer System Interface) adapter
  1800.                 (alternate at 0140-014F)
  1801.  
  1802.  
  1803. 0340-0357 ----  RTC (1st Real Time Clock for XT), (alternate at 0240-0257)
  1804.                 (used by TIMER.COM v1.2 which is the 'standard' timer program)
  1805.  
  1806. 0340    r/w     0.01 seconds  0-99
  1807. 0341    r/w     0.1 seconds   0-99
  1808. 0342    r/w     seconds       0-59
  1809. 0343    r/w     minutes       0-59
  1810. 0343    r/w     hours         0-23
  1811. 0345    r/w     day of week   1-7
  1812. 0346    r/w     day of month  1-31
  1813. 0347    r/w     month         1-12
  1814. 0348
  1815. 0349    r/w     year          0-99
  1816. 034A
  1817. 034B
  1818. 034C
  1819. 034D
  1820. 034E
  1821. 034F
  1822. 0350    r       status?
  1823. 0351    
  1824. 0352
  1825. 0353
  1826. 0354    r       status?
  1827. 0355
  1828. 0356
  1829. 0357
  1830.  
  1831.  
  1832. 0348-0357 ----  DCA 3278
  1833.  
  1834.  
  1835. 0360-036F ----  PC network (AT)
  1836. 0360-0367 ----  PC network (XT only)
  1837.  
  1838.  
  1839. 40
  1840. 0370-0377 ----  FDC 2  (2nd Floppy Disk Controller 8272)  same as 03F0
  1841.  
  1842. 0372    w       diskette controller DOR (Digital Output Register)
  1843. 0374    r       diskette controller status register
  1844. 0375    r/w     diskette controller data register
  1845. 0376    r/w     FIXED disk controller data register
  1846. 0377    r       diskette controller DIR (Digital Input Register)
  1847. 0377    w       select register for diskette data transfer rate
  1848.  
  1849.  
  1850. 0378-037A ----  parallel printer port, same as 0278 and 03BC
  1851.  
  1852. 0378    w       data port
  1853. 0379    r/w     status port
  1854. 037A    r/w     control port
  1855.  
  1856.  
  1857. 0380-038F ----  2nd Binary Synchronous Data Link Control adapter (see 03A0)
  1858.  
  1859. 0380    r/w      on board 8255 port A, internal/external sense
  1860. 0381    r/w      on board 8255 port B, external modem interface
  1861. 0382    r/w      on board 8255 port C, internal control and gating
  1862. 0383    r/w      on board 8255 mode register
  1863. 0384    r/w      on board 8253 channel square wave generator
  1864. 0385    r/w      on board 8253 channel 1 inactivity time-out
  1865. 0386    r/w      on board 8253 channel 2 inactivity time-out
  1866. 0387    r/w      on board 8253 mode register
  1867. 0388    r/w      on board 8273 read: status  write: command
  1868. 0389    r/w      on board 8273 read: response  write: parameter
  1869. 038A    r/w      on board 8273 transmit interrupt status
  1870. 038B    r/w      on board 8273 receiver interrupt status
  1871. 038C    r/w      on board 8273 data
  1872.  
  1873.  
  1874. 0388-0389 ---- Soundblaster PRO FM-Chip
  1875. 0388-038B ---- Soundblaster 16 ASP FM-Chip
  1876.  
  1877.  
  1878. 0390-039F ----  Cluster adapter (AT)
  1879.  
  1880. 0390-0393       (adapter 0)     (XT)
  1881.  
  1882.  
  1883. 41
  1884. 03A0-03AF ----  1st SDLC (Binary Synchronous Data Link Control adapter)
  1885.  
  1886. 0380    r/w      on board 8255 port A, internal/external sense
  1887. 0381    r/w      on board 8255 port B, external modem interface
  1888. 0382    r/w      on board 8255 port C, internal control and gating
  1889. 0383    r/w      on board 8255 mode register
  1890. 0384    r/w      on board 8253 counter 0 unused
  1891. 0385    r/w      on board 8253 channel 1 inactivity time-out
  1892. 0386    r/w      on board 8253 channel 2 inactivity time-out
  1893. 0387    r/w      on board 8253 mode register
  1894. 0388    r/w      on board 8251 data
  1895. 0389    r/w      on board 8251 command/mode/status register
  1896.  
  1897.  
  1898. 03B0-03BF ----  MDA  (Monochrome Display Adapter based on 6845)
  1899.  
  1900. 03B0            same as 03B4
  1901. 03B1            same as 03B5
  1902. 03B2            same as 03B4
  1903. 03B3            same as 03B5
  1904. 03B4    w       MDA CRT index register   (EGA/VGA)
  1905.                 selects which register (0-11h) is to be accessed through 3B5
  1906. 03B5    r/w     MDA CRT data register    (EGA/VGA)
  1907.                 selected by port 3B4. registers C-F may be read
  1908.                  00  horizontal total
  1909.                  01  horizontal displayed
  1910.                  02  horizontal sync position
  1911.                  03  horizontal sync pulse width
  1912.                  04  vertical total
  1913.                  05  vertical displayed
  1914.                  06  vertical sync position
  1915.                  07  vertical sunc pulse width
  1916.                  08  interlace mode
  1917.                  09  maximum scan lines
  1918.                  0A  cursor start
  1919.                  0B  cursor end
  1920.                  0C  start address high
  1921.                  0D  start address low
  1922.                  0E  cursor location high
  1923.                  0F  cursor location low
  1924.                  10  light pen high
  1925.                  11  light pen low
  1926. 03B6            same as 03B4
  1927. 03B7            same as 03B5
  1928. 03B8    r/w     MDA mode control register
  1929.                  bit 7 not used
  1930.                  bit 6 not used
  1931.                  bit 5 enable blink
  1932.                  bit 4 not used
  1933.                  bit 3 video enable
  1934.                  bit 2 not used
  1935.                  bit 1 not used
  1936.                  bit 0 high resolution mode
  1937.  
  1938. 42
  1939. 03B9            reserved for color select register on color adapter
  1940.  
  1941. 03BA    r       CRT status register      EGA/VGA: input status 1 register
  1942.                  bit 7-4 reserved
  1943.                  bit 3   black/white video
  1944.                  bit 2-1 reserved
  1945.                  bit 0   horizontal drive
  1946.  
  1947.                  bit 7   (MSD says) if this bit changes within 8000h reads then
  1948.                  bit 6-4 = 000 adapter is Hercules or compatible
  1949.                          = 001 adapter is Hercules+
  1950.                          = 101 adapter is Hercules InColor
  1951.                          else  adapter is unknown
  1952.  
  1953. 03BA    w       EGA/VGA feature control register
  1954.  
  1955. 03BB            reserved for light pen strobe reset
  1956.  
  1957.  
  1958. 03BC-03BF ----  parallel printer port, same as 0278 and 0378
  1959.  
  1960. 03BC    w       data port
  1961. 03BD    r/w     status port
  1962.                  bit 7 = 0  busy
  1963.                  bit 6 = 0  acknowledge
  1964.                  bit 5 = 1  out of paper
  1965.                  bit 4 = 1  printer is selected
  1966.                  bit 3 = 0  error
  1967.                  bit 2 = 0  IRQ has occurred
  1968.                  bit 1-0    reserved
  1969.  
  1970. 03BE    r/w     control port
  1971.                  bit 7-5    reserved
  1972.                  bit 4 = 1  enable IRQ
  1973.                  bit 3 = 1  select printer
  1974.                  bit 2 = 0  initialize printer
  1975.                  bit 1 = 1  automatic line feed
  1976.                  bit 0 = 1  strobe
  1977.  
  1978.  
  1979. 03BF    r/w     Hercules configuration switch register
  1980.                  bit 7-2
  1981.                  bit 1 = 0  disables upper 32K of graphics mode buffer
  1982.                          1  enables upper 32K of graphics mode buffer
  1983.                  bit 0 = 0  prevents graphics mode
  1984.                          1  allows graphics mode
  1985.  
  1986.  
  1987. 43
  1988. 03C0-03CF ----  EGA  (1st Enhanced Graphics Adapter)    alternate at 02C0
  1989.  
  1990. 03C0    (r)/w   EGA VGA ATC index/data register
  1991. 03C1    r       VGA     other attribute register
  1992. 03C2    r       EGA VGA input status 0 register
  1993.         w       VGA     miscellaneous output register
  1994. 03C3    r/w     VGA     video subsystem enable
  1995. 03C4    w       EGA     TS index register
  1996.         r/w     VGA     sequencer index register
  1997. 03C5    w       EGA     TS data register
  1998.         r/w     VGA     other sequencer register
  1999. 03C6    r/w     VGA     PEL mask register
  2000. 03C7    r/w     VGA     PEL address read mode
  2001.         r       VGA     DAC state register
  2002. 03C8    r/w     VGA     PEL address write mode
  2003. 03C9    r/w     VGA     PEL data register
  2004. 03CA    w       EGA     graphics 2 position register
  2005.         r       VGA     feature control register
  2006. 03CC    w       EGA     graphics 1 position register
  2007.         r       VGA     miscellaneous output register
  2008. 03CE    w       EGA     GDC index register
  2009.         r/w     VGA     graphics address register
  2010. 03CF    w       EGA     GDC data register
  2011.         r/w     VGA     other graphics register
  2012.  
  2013.  
  2014. 03D0-03DF ----  CGA   (Color Graphics Adapter)
  2015.  
  2016. 03D0            same as 03D4
  2017. 03D1            same as 03D5
  2018. 03D2            same as 03D4
  2019. 03D3            same as 03D5
  2020. 03D4    w       CRT (6845) index register   (EGA/VGA)
  2021.                 selects which register (0-11h) is to be accessed through 3B5
  2022. 03D5    w       CRT (6845) data register    (EGA/VGA)
  2023.                 selected by port 3B4. registers C-F may be read
  2024.                  (for registers see at 3B5)
  2025. 03D6            same as 03D4
  2026. 03D7            same as 03D5
  2027. 03D8    r/w     CGA mode control register  (except PCjr)
  2028.                  bit 7-6      not used
  2029.                  bit 5   = 1  blink enabled
  2030.                  bit 4   = 1  640*200 graphics mode
  2031.                  bit 3   = 1  video enabled
  2032.                  bit 2   = 1  monochrome signal
  2033.                  bit 1   = 0  text mode
  2034.                          = 1  320*200 graphics mode
  2035.                  bit 0   = 0  40*25 text mode
  2036.                          = 1  80*25 text mode
  2037.  
  2038. 44
  2039. 03D9    r/w     CGA palette register
  2040.                  bit 7-6      not used
  2041.                  bit 5   = 0 active color set: red, green brown
  2042.                          = 1 active color set: cyan, magenta, white
  2043.                  bit 4       intense colors in graphics, background colors text
  2044.                  bit 3       intense border in 40*25, intense background in
  2045.                              320*200, intense foreground in 640*200
  2046.                  bit 2       red border in 40*25, red background in 320*200,
  2047.                              red foreground in 640*200
  2048.                  bit 1       green border in 40*25, green background in
  2049.                              320*200, green foreground in 640*200
  2050.                  bit 0       blue border in 40*25, blue background in 320*200,
  2051.                              blue foreground in 640*200
  2052.  
  2053. 03DA    r       CGA status register     EGA/VGA: input status 1 register
  2054.                  bit 7-4     not used
  2055.                  bit 3 = 1   in vertical retrace
  2056.                  bit 2 = 1   light pen switch is off
  2057.                  bit 1 = 1   positive edge from light pen has set trigger
  2058.                  bit 0 = 0   do not use memory
  2059.                        = 1   memory access without interfering with display
  2060.  
  2061. 03DA    w       EGA/VGA feature control register
  2062.  
  2063. 03DB    w       clear light pen latch
  2064. 03DC    r/w     preset licht pen latch
  2065.  
  2066. 03DF            CRT/CPU page register  PCjr only
  2067.  
  2068.  
  2069. 03E8-03EF ----  serial port, same as 02E8, 02F8, and 03F8
  2070.  
  2071.  
  2072. 03F0-03F7 ----  FDC 1  (1st Floppy Disk Controller 8272)  same as 0370
  2073.  
  2074. 03F0            diskette controller status A (PS/2)
  2075.                  bit 7   interrupt pending
  2076.                  bit 6   second drive installed
  2077.                  bit 5   step
  2078.                  bit 4   track 0
  2079.                  bit 3   head 1 select
  2080.                  bit 2   index
  2081.                  bit 1   write protect
  2082.                  bit 0   direction
  2083.  
  2084. 03F1    r       diskette controller status B (PS/2)
  2085.                  bit 7-6  reserved
  2086.                  bit 5    drive select (0=A:, 1=B:)
  2087.                  bit 4    write data
  2088.                  bit 3    read data
  2089.                  bit 2    write enable
  2090.                  bit 1    motor enable 1
  2091.                  bit 0    motor enable 0
  2092.  
  2093. 45
  2094. 03F2    w       diskette controller DOR (Digital Output Register)
  2095.                  bit 7-6    reserved PS/2
  2096.                  bit 7 = 1  drive 3 motor enable
  2097.                  bit 6 = 1  drive 2 motor enable
  2098.                  bit 5 = 1  drive 1 motor enable
  2099.                  bit 4 = 1  drive 0 motor enable
  2100.                  bit 3 = 1  diskette DMA enable (reserved PS/2)
  2101.                  bit 2 = 1  FDC enable  (controller reset)
  2102.                        = 0  hold FDC at reset
  2103.                  bit 1-0    drive select (0=A 1=B ..)
  2104.  
  2105. 03F4    r       diskette controller status register
  2106.                  bit 7 = 1  data register is ready
  2107.                  bit 6 = 1  transfer is from controller to system
  2108.                          0  transfer is from system to controller
  2109.                  bit 5 = 1  non-DMA mode
  2110.                  bit 4 = 1  diskette controller busy
  2111.                  bit 3 = 1  drive 3 busy (reserved on PS/2)
  2112.                  bit 2 = 1  drive 2 busy (reserved on PS/2)
  2113.                  bit 1 = 1  drive 1 busy
  2114.                  bit 0 = 1  drive 0 busy
  2115.  
  2116. 03F5    r       diskette command status register 0
  2117.                  bit 7-6      last command status
  2118.                          = 00 command terminated successfully
  2119.                          = 01 command terminated abnormally
  2120.                          = 10 invalid command
  2121.                          = 11 terminated abnormally by change in ready signal
  2122.                  bit 5   = 1  seek completed
  2123.                  bit 4   = 1  equipment check occurred after error
  2124.                  bit 3   = 1  not ready
  2125.                  bit 2   = 1  head number at interrupt
  2126.                  bit 1-0 = 1  unit select (0=A 1=B .. )
  2127.                               (on PS/2  01=A  10=B)
  2128.  
  2129.                 status register 1
  2130.                  bit 7      end of cylinder; sector# greater then sectors/track
  2131.                  bit 6 = 0
  2132.                  bit 5 = 1  CRC error in ID or data field
  2133.                  bit 4 = 1  overrun
  2134.                  bit 3 = 0
  2135.                  bit 2 = 1  sector ID not found
  2136.                  bit 1 = 1  write protect detected during write
  2137.                  bit 0 = 1  ID address mark not found
  2138.  
  2139.                 status register 2
  2140.                  bit 7 = 0
  2141.                  bit 6 = 1  deleted Data Eddress Mark detected
  2142.                  bit 5 = 1  CRC error in data
  2143.                  bit 4 = 1  wrong cylinder detected
  2144.                  bit 3 = 1  scan command equal condition satisfied
  2145.                  bit 2 = 1  scan command failed, sector not found
  2146.                  bit 1 = 1  bad cylinder, ID not found
  2147.                  bit 0 = 1  missing Data Address Mark 
  2148.  
  2149. 46
  2150.                 status register 3
  2151.                  bit 7      fault status signal
  2152.                  bit 6      write protect status
  2153.                  bit 5      ready status
  2154.                  bit 4      track zero status
  2155.                  bit 3      two sided status signal
  2156.                  bit 2      side select (head select)
  2157.                  bit 1-0    unit select (0=A 1=B .. )
  2158.  
  2159. 03F6    r/w     FIXED disk controller data register
  2160.                  bit 7-4    reserved
  2161.                  bit 3 = 0  reduce write current
  2162.                          1  head select 3 enable
  2163.                  bit 2 = 1  disk reset enable
  2164.                          0  disk reset disable
  2165.                  bit 1 = 0  disk initialization enable
  2166.                          1  disk initialization disable
  2167.                  bit 0      reserved
  2168.  
  2169. 03F7    r       diskette controller DIR (Digital Input Register)
  2170.                  bit 7 = 1 diskette change
  2171.  
  2172.                  bit 6     FIXED DISK write gate
  2173.                  bit 5     FIXED DISK head select 3 / reduced write current
  2174.                  bit 4     FIXED DISK head select 2
  2175.                  bit 3     FIXED DISK head select 1
  2176.                  bit 2     FIXED DISK head select 0
  2177.                  bit 1     FIXED DISK drive 1 select
  2178.                  bit 0     FIXED DISK drive 0 select   conflicts with:
  2179.  
  2180.                  bit 0     diskette high density select
  2181.  
  2182. 03F7    w       select register for diskette data transfer rate
  2183.                  bit 7-2       reserved
  2184.                  bit 1-0 = 00  500 Kb/S mode
  2185.                          = 01  300 Kb/S mode
  2186.                          = 10  250 Kb/S mode
  2187.                          = 11  reserved
  2188.  
  2189.  
  2190. 03F8-03FF ----  serial port (8250,8251,16450,16550), same as 02E8,02F8,and 03F8
  2191.  
  2192. 03F8    w       serial port, transmitter holding register, which contains the
  2193.                 character to be sent. Bit 0 is sent first.
  2194.                  bit 7-0   data bits when DLAB=0 (Divisor Latch Access Bit)
  2195.         r       receiver buffer register, which contains the received character
  2196.                 Bit 0 is received first
  2197.                  bit 7-0   data bits when DLAB=0 (Divisor Latch Access Bit)
  2198.         r/w     divisor latch low byte when DLAB=1
  2199.  
  2200. 47
  2201. 03F9    r/w     divisor latch high byte when DLAB=1
  2202.         r/w     interrupt enable register when DLAB=0
  2203.                  bits 7-4   reserved
  2204.                  bit 3 = 1  modem-status interrupt enable
  2205.                  bit 2 = 1  receiver-line-status interrupt enable
  2206.                  bit 1 = 1  transmitter-holding-register empty interrupt enable
  2207.                  bit 0 = 1  received-data-avail.int. enable (and 16550 timeout)
  2208.  
  2209.               - 16550 will interrupt if data exists in the FIFO and isn't read
  2210.                 within the time it takes to receive four bytes or if no data is
  2211.                 received within the time it takes to receive four bytes
  2212.  
  2213. 03FA    r       interrupt identification register. Information about a pending
  2214.                 interrupt is stored here. When the ID register is addressed,
  2215.                 the highest priority interrupt is held, and no other interrupts
  2216.                 are acknowledged until the CPU services that interrupt.
  2217.                  bit 7-6 = 00  reserved on 8250, 8251, 16450
  2218.                          = 11  if FIFO queues are enabled (16550 only)
  2219.                  bit 5-4 = 0 reserved
  2220.                  bit 3   = 0 reserved  8250, 16450
  2221.                          = 1 16550  timeout int. pending
  2222.                  bit 2-1 identify pending interrupt with the highest priority
  2223.                          = 11  receiver line status interrupt. 
  2224.                                priority = highest
  2225.                          = 10  received data available register interrupt. 
  2226.                                priority = second 
  2227.                          = 01  transmitter holding register empty interrupt. 
  2228.                                priority = third 
  2229.                          = 00  modem status interrupt. 
  2230.                                priority = fourth
  2231.                  bit 0   = 0   interrupt pending. Contents of register can be 
  2232.                                used as a pointer to the appropriate 
  2233.                                interrupt service routine 
  2234.                          = 1   no interrupt pending
  2235.  
  2236.              - interrupt pending flag uses reverse logic, 0 = pending, 1 = none
  2237.              - interrupt will occur if any of the line status bits are set
  2238.              - THRE bit is set when THRE register is emptied into the TSR
  2239.  
  2240.  
  2241. 48
  2242. 03FA    w       16650 FCR  (FIFO Control Register)
  2243.                  bit 7-6 = 00  1 byte
  2244.                          = 01  4 bytes
  2245.                          = 10  8 bytes
  2246.                          = 11 14 bytes
  2247.                  bit 5-4 = 00 reserved
  2248.                  bit 3   = 1  change RXRDY  TXRDY pins from mode 0 to mode 1
  2249.                  bit 2   = 1  clear XMIT FIFO
  2250.                  bit 1   = 1  clear RCVR FIFO
  2251.                  bit 0   = 1  enable clear XMIT and RCVR FIFO queues
  2252.  
  2253.               - bit 0 must be set in order to write to other FCR bits
  2254.               - bit 1 when set  the RCVR FIFO is cleared and this bit is reset
  2255.                 the receiver shift register is not cleared
  2256.               - bit 2 when set  the XMIT FIFO is cleared and this bit is reset
  2257.                 the transmit shift register is not cleared
  2258.  
  2259. 03FB    r/w     line control register
  2260.                  bit 7 = 1  divisor latch access bit (DLAB)
  2261.                          0  receiver buffer, transmitter holding, or interrupt
  2262.                             enable register access
  2263.                  bit 6 = 1  set break enable. serial ouput is forced to spacing
  2264.                             state and remains there.
  2265.                  bit 5 =    stick parity
  2266.                  bit 4 = 1  even parity select
  2267.                  bit 3 =    parity enable
  2268.                          1  even number of ones are sent and checked in the 
  2269.                             data word bits and parity bit
  2270.                          0  odd number of ones are sent and checked
  2271.                  bit 2 = 0  one stop bit
  2272.                          1  zero stop bit
  2273.                  bit 1-0 00 word length is 5 bits
  2274.                          01 word length is 6 bits
  2275.                          10 word length is 7 bits
  2276.                          11 word length is 8 bits
  2277.  
  2278. 03FC    r/w     modem control register
  2279.                  bit 7-5 = 0  reserved
  2280.                  bit 4 = 1  loopback mode for diagnostic testing of serial port
  2281.                             output of transmitter shift register is looped back
  2282.                             to receiver shift register input. In this mode
  2283.                             transmitted data is received immediately so that
  2284.                             the CPU can verify the transmit data/receive data
  2285.                             serial port paths.
  2286.                  bit 3 = 1  auxiliary user-designated output 2
  2287.                  bit 2 = 1  auxiliary user-designated output 1
  2288.                  bit 1 = 1  force request-to-send active
  2289.                  bit 0 = 1  force data-terminal-ready active
  2290.  
  2291. 49
  2292. 03FD    r       line status register
  2293.                  bit 7 = 0  reserved
  2294.                  bit 6 = 1  transmitter shift and holding registers empty
  2295.                  bit 5 = 1  transmitter holding register empty. Controller is
  2296.                             ready toaccept a new character to send.
  2297.                  bit 4 = 1  break interrupt. the received data input is held in
  2298.                             in the zero bit state longer than the time of start
  2299.                             bit + data bits + parity bit + stop bits.
  2300.                  bit 3 = 1  framing error. the stop bit that follows the last
  2301.                             parity or data bit is a zero bit.
  2302.                  bit 2 = 1  parity error. Character has wrong parity
  2303.                  bit 1 = 1  overrun error. a character was sent to the receiver
  2304.                             buffer before the previous character in the buffer
  2305.                             could be read. This destroys the previous
  2306.                             character.
  2307.                  bit 0 = 1  data ready. a complete incoming character has been
  2308.                             received and sent to the receiver buffer register.
  2309.  
  2310. 03FE    r       modem status register
  2311.                  bit 7 = 1  data carrier detect
  2312.                  bit 6 = 1  ring indicator
  2313.                  bit 5 = 1  data set ready
  2314.                  bit 4 = 1  clear to send
  2315.                  bit 3 = 1  delta data carrier detect
  2316.                  bit 2 = 1  trailing edge ring indicator
  2317.                  bit 1 = 1  delta data set ready
  2318.                  bit 0 = 1  delta clear to send
  2319.  
  2320.               - bits 0-3 are reset when the CPU reads the MSR
  2321.               - bit 4 is the Modem Control Register RTS during loopback test
  2322.               - bit 5 is the Modem Control Register DTR during loopback test
  2323.               - bit 6 is the Modem Control Register OUT1 during loopback test
  2324.               - bit 7 is the Modem Control Register OUT2 during loopback test
  2325.  
  2326. 03FF    r/w     scratch register
  2327.  
  2328. Adresses above 03FF apply to EISA machines only
  2329.  
  2330.                          1000-1FFF      slot 1 EISA
  2331.                          2000-2FFF      slot 2 EISA
  2332.                          3000-3FFF      slot 3 EISA
  2333.                          4000-4FFF      slot 4 EISA
  2334.                          5000-5FFF      slot 5 EISA
  2335.                          6000-6FFF      slot 6 EISA
  2336.                          7000-7FFF      slot 7 EISA
  2337.  
  2338.  
  2339. 0401-04D6 ----  used by EISA systems only
  2340.  
  2341. 0401    r/w     DMA channel 0 word count byte 2 (high)
  2342. 0403    r/w     DMA channel 1 word count byte 2 (high)
  2343. 0405    r/w     DMA channel 2 word count byte 2 (high)
  2344. 0407    r/w     DMA channel 3 word count byte 2 (high)
  2345.  
  2346. 50
  2347. 040A    w       extended DMA chaining mode register, channels 0-3
  2348.                  bit 7-5      reserved
  2349.                  bit 4   = 0  generates IRQ13
  2350.                          = 1  generates terminal count
  2351.                  bit 3   = 0  do not start chaining
  2352.                          = 1  programming complete
  2353.                  bit 2   = 0  disable buffer chaining mode (default)
  2354.                          = 1  enable buffer chaining mode
  2355.                  bit 1-0      DMA channel select
  2356.  
  2357. 040A    r       channel interrupt (IRQ13) status register
  2358.                  bit 7-5  interrupt on channels 7-5
  2359.                  bit 4    reserved
  2360.                  bit 3-0  interrupt on channels 3-0
  2361.  
  2362. 040B    w       DMA extended mode register for channels 3-0.
  2363.                 bit settings same as 04D6
  2364.                  bit 7   = 0  enable stop register
  2365.                  bit 6   = 0  terminal count is an output for this channel
  2366. (default)
  2367.                  bit 5-4      DMA cycle timing
  2368.                          = 00 ISA-compatible (default)
  2369.                          = 01 type A timing mode
  2370.                          = 10 type B timing mode
  2371.                          = 11 burst DMA mode
  2372.                  bit 3-2      Address mode
  2373.                          = 00 8-bit I/O, count by bytes (default)
  2374.                          = 01 16-bit I/O, count by words, address shifted
  2375.                          = 10 32-bit I/O, count by bytes
  2376.                          = 11 16-bit I/O, count by bytes
  2377.                  bit 1-0      DMA channel select
  2378.  
  2379.  
  2380. 0461    r/w     Extended NMI status/control register
  2381.                  bit 7 = 1  NMI pending from fail-safe timer (read only)
  2382.                  bit 6 = 1  NMI pending from bus timeout NMI status (read
  2383. only)
  2384.                  bit 5 = 1  NMI pending (read only)
  2385.                  bit 4      reserved
  2386.                  bit 3 = 1  bus timeout NMI enable (read/write)
  2387.                  bit 2 = 1  fail-safe NMI enable (read/write)
  2388.                  bit 1 = 1  NMI I/O port enable (read/write)
  2389.                  bit 0      RSTDRV. bus reset (read/write)
  2390.                        = 0  normal bus reset operation
  2391.                        = 1  reset bus asserted
  2392.  
  2393. 0462    w       Software NMI register. writing to this register causes an NMI
  2394.                 if NMI's are enabled
  2395.                  bit 7 = 1  generates an NMI
  2396.  
  2397. 51
  2398. 0464    r       bus master status latch register (slots 1-8). identifies the
  2399.                 last bus master that had control of the bus
  2400.                  bit 7 = 0  slot 8 had control last
  2401.                  bit 6 = 0  slot 7 had control last
  2402.                  bit 5 = 0  slot 6 had control last
  2403.                  bit 4 = 0  slot 5 had control last
  2404.                  bit 3 = 0  slot 4 had control last
  2405.                  bit 2 = 0  slot 3 had control last
  2406.                  bit 1 = 0  slot 2 had control last
  2407.                  bit 0 = 0  slot 1 had control last
  2408.  
  2409. 0465    r       bus master status latch register (slots 9-16)
  2410.                  bit 7 = 0  slot 16 had control last
  2411.                  bit 6 = 0  slot 15 had control last
  2412.                  bit 5 = 0  slot 14 had control last
  2413.                  bit 4 = 0  slot 13 had control last
  2414.                  bit 3 = 0  slot 12 had control last
  2415.                  bit 2 = 0  slot 11 had control last
  2416.                  bit 1 = 0  slot 10 had control last
  2417.                  bit 0 = 0  slot 9  had control last
  2418.  
  2419.  
  2420. 0481    r/w     DMA channel 2 address byte 3 (high)
  2421. 0482    r/w     DMA channel 3 address byte 3 (high)
  2422. 0483    r/w     DMA channel 1 address byte 3 (high)
  2423. 0487    r/w     DMA channel 0 address byte 3 (high)
  2424. 0489    r/w     DMA channel 6 address byte 3 (high)
  2425. 048A    r/w     DMA channel 7 address byte 3 (high)
  2426. 048B    r/w     DMA channel 5 address byte 3 (high)
  2427.  
  2428. 04C6    r/w     DMA channel 5 word count byte 2 (high)
  2429. 04CA    r/w     DMA channel 6 word count byte 2 (high)
  2430. 04CE    r/w     DMA channel 7 word count byte 2 (high)
  2431.  
  2432.  
  2433. 04D0    w       IRQ 0-7 interrupt edge/level registers
  2434.                  bit 7 = 1  IRQ 7 is level sensitive
  2435.                  bit 6 = 1  IRQ 6 is level sensitive
  2436.                  bit 5 = 1  IRQ 5 is level sensitive
  2437.                  bit 4 = 1  IRQ 4 is level sensitive
  2438.                  bit 3 = 1  IRQ 3 is level sensitive
  2439.                  bit 2-0    reserved
  2440.  
  2441. 04D1    w       IRQ 8-15 interrupt edge/level registers
  2442.                  bit 7 = 1  IRQ 15 is level sensitive
  2443.                  bit 6 = 1  IRQ 14 is level sensitive
  2444.                  bit 5 = 1  reserved
  2445.                  bit 4 = 1  IRQ 12 is level sensitive
  2446.                  bit 3 = 1  IRQ 11 is level sensitive
  2447.                  bit 2 = 1  IRQ 10 is level sensitive
  2448.                  bit 1 = 1  IRQ 9  is level sensitive
  2449.                  bit 0      reserved
  2450.  
  2451. 52
  2452. 04D4    w       extended DMA chaining mode register, channels 4-7
  2453.                  bit 7-5 = 0  reserved
  2454.                  bit 4   = 0  generates IRQ 13
  2455.                          = 1  generates terminal count
  2456.                  bit 3   = 0  do not start chaining
  2457.                          = 1  programming complete
  2458.                  bit 2   = 0  disable buffer chaining mode (default)
  2459.                          = 1  enable buffer chaining mode
  2460.                  bit 1-0      DMA channel select
  2461.  
  2462. 04D6    w       DMA extended mode register for channels 4-7
  2463.                 bit settings same as 04B
  2464.                  bit 7   = 0  enable stop register
  2465.                  bit 6   = 0  terminal count is an output for this channel
  2466. (default)
  2467.                  bit 5-4      DMA cycle timing
  2468.                          = 00 ISA-compatible (default)
  2469.                          = 01 type A timing mode
  2470.                          = 10 type B timing mode
  2471.                          = 11 burst DMA mode
  2472.                  bit 3-2      Address mode
  2473.                          = 00 8-bit I/O, count by bytes (default)
  2474.                          = 01 16-bit I/O, count by words, address shifted
  2475.                          = 10 32-bit I/O, count by bytes
  2476.                          = 11 16-bit I/O, count by bytes
  2477.                  bit 1-0      DMA channel select
  2478.  
  2479.  
  2480. 0601    w       System control. Laptop chipset: Headland HL21 & Acer M5105
  2481.                  bit 7 = 1  power led on
  2482.                  bit 6 = 1  LCD backlight off
  2483.                  bit 5
  2484.                  bit 4
  2485.                  bit 3
  2486.                  bit 2 = 1  video chips disabled, screen blanked.
  2487.                  bit 1
  2488.                  bit 0 = 1  will lock up your machine!
  2489.  
  2490.         r        =04        (always reads back this value)
  2491.  
  2492.  
  2493. 0620-0627 ----  PC network (adapter 1)
  2494. 0628-062F ----  PC network (adapter 2)
  2495.  
  2496.  
  2497. 06E2-06E3 ----  data aquisition (adapter 1)
  2498.  
  2499.  
  2500. 0790-0793 ----  cluster (adapter 1)
  2501.  
  2502.  
  2503. 0800-08FF ----  I/O port access registers for extended CMOS RAM or SRAM
  2504.                 (256 bytes at a time)
  2505.                 Sometimes plain text can be seen here.
  2506.  
  2507.  
  2508. 53
  2509. 0A20-0A23 ----  Token Ring (adapter 1)
  2510. 0A24-0A27 ----  Token Ring (adapter 2)
  2511.  
  2512.  
  2513. 0AE2-0AE3 ----  cluster (adapter 2)
  2514. 0B90-0B93 ----  cluster (adapter 2)
  2515.  
  2516.  
  2517. 0C00    r/w     page register to write to SRAM or I/O
  2518.  
  2519.  
  2520. 0C80-0C83 ----  system board ID registers
  2521.  
  2522.  
  2523. 1390-1393 ----  cluster (adapter 3)
  2524.  
  2525.  
  2526. 2100-210F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2527. 2110-211F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2528. 2120-212F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2529. 2130-213F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2530. 2140-214F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2531. 2150-215F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2532. 2160-216F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2533. 2170-217F ----  IBM XGA (eXtended Graphics Adapter  8514/A)
  2534.  
  2535.  
  2536. 2390-2393 ----  cluster (adapter 4)
  2537.  
  2538.  
  2539. 3220-3227 ----  serial port 3, description same as 03F8
  2540. 3228-322F ----  serial port 4, description same as 03F8
  2541.  
  2542.  
  2543. 3540-354F ----  IBM SCSI (Small Computer System Interface) adapter
  2544. 3550-355F ----  IBM SCSI (Small Computer System Interface) adapter
  2545. 3560-356F ----  IBM SCSI (Small Computer System Interface) adapter
  2546. 3570-357F ----  IBM SCSI (Small Computer System Interface) adapter
  2547.  
  2548.  
  2549. 4220-4227 ----  serial port, description same as 03F8
  2550. 4228-422F ----  serial port, description same as 03F8
  2551.  
  2552.  
  2553. 42E0-42EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  2554.  
  2555. 42E1    r/w     GPIB (adapter 2)
  2556.  
  2557.  
  2558. 5220-5227 ----  serial port, description same as 03F8
  2559. 5228-522F ----  serial port, description same as 03F8
  2560.  
  2561.  
  2562. 62E0-62EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  2563.  
  2564. 54
  2565. 62E1    r/w     GPIB (adapter 3)
  2566.  
  2567.  
  2568. 82E0-82EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  2569.  
  2570. 82E1    r/w     GPIB (adapter 4)
  2571.  
  2572.  
  2573. 82F8-82FF ----  serial port, description same as 03F8
  2574. 83F8-83FF ----  serial port, description same as 03F8
  2575.  
  2576.  
  2577. A220      ????  soundblaster support in AMI Hi-Flex BIOS  ????
  2578.  
  2579.  
  2580. A2E0-A2EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  2581.  
  2582. A2E1    r/w     GPIB (adapter 5)
  2583.  
  2584.  
  2585. AFFF    r/w     plane 0-3 system latch (video register)
  2586.  
  2587.  
  2588. B220-B227 ----  serial port, description same as 03F8
  2589. B228-B22F ----  serial port, description same as 03F8
  2590.  
  2591.  
  2592. C220-C227 ----  serial port, description same as 03F8
  2593. C228-C22F ----  serial port, description same as 03F8
  2594.  
  2595.  
  2596. D220-D227 ----  serial port, description same as 03F8
  2597. D228-D22F ----  serial port, description same as 03F8
  2598.  
  2599.  
  2600. C2E0-C2EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  2601.  
  2602. C2E1    r/w     GPIB (adapter 6)
  2603.  
  2604.  
  2605. E2E0-E2EF ----  GPIB (General Purpose Interface Bus, IEEE 488 interface)
  2606.  
  2607. E2E1    r/w     GPIB (adapter 7)
  2608.  
  2609.  
  2610.  
  2611.  
  2612.                             MEMORY-MAPPED ADDRESSES
  2613.  
  2614.  
  2615. 80C00000  Compaq Deskpro 386 system memory board register
  2616.  
  2617. 55
  2618. 80C00000 w      RAM relocation register
  2619.                 bit 7-2    Reserved, always write 1's.
  2620.                 bit 1 = 0  Write-protect 128-Kbyte RAM at FE0000.
  2621.                       = 1  Do not write-protect RAM at FE0000.
  2622.                 bit 0 = 0  Relocate 128-Kbyte block at FE0000 to address 0E0000
  2623.                       = 1  128-Kbyte RAM is addressed only at FE0000.
  2624.  
  2625. 80C00000 r      Diagnostics register
  2626.                 bit 7   = 0  memory expansion board is installed
  2627.                 bit 6   = 0  second 1 MB of system memory board is installed
  2628.                 bit 5-4 = 00 base memory set to 640 KB
  2629.                         = 01 invalid
  2630.                         = 10 base memory set to 512 KB
  2631.                         = 11 base memory set to 256 KB
  2632.                 bit 3   = 0  parity error in byte 3
  2633.                 bit 2   = 0  parity error in byte 2
  2634.                 bit 1   = 0  parity error in byte 1
  2635.                 bit 0   = 0  parity error in byte 0 (in 32-bit double word)
  2636. 56
  2637.                      Program Segment Prefix Data Structure
  2638.  
  2639.  
  2640. When DOS loads a program for execution it creates a data structure in memory 
  2641. called the "Program Segment Prefix", or PSP for short. This structure occupies 
  2642. the 256 bytes of memory immediately preceeding the memory occupied y the 
  2643. loaded program. The PSP contains useful information which is often accessed by 
  2644. the running program. The following table describes the structure of the PSP.
  2645.  
  2646.  
  2647.  
  2648. Offset   Description
  2649.  
  2650.  00      INT 20 instruction for CP/M CALL 0 program termination
  2651.  02      segment of first byte beyond memory allocated to program
  2652.  04      unused filler
  2653.  05      CP/M CALL 5 service request (FAR JMP to 000C0h)
  2654.          BUG: (DOS 2+) PSPs created by INT 21/AH=4B point at 000BE
  2655.  06      CP/M compatibility - size of first segment for .COM files
  2656.  08      remainder of FAR JMP at 05
  2657.  0A      stored INT 22 termination address
  2658.  0E      stored INT 23 control-Break handler address
  2659.  12      DOS 1.1+ stored INT 24 critical error handler address
  2660.  16      segment of parent PSP
  2661.  18      DOS 2+ Job File Table, one byte per file handle, FFh = closed
  2662.  2C      DOS 2+ segment of environment for process
  2663.  2E      DOS 2+ process's SS:SP on entry to last INT 21 call
  2664.  32      DOS 3+ number of entries in JFT (default 20)
  2665.  34      DOS 3+ pointer to JFT (default PSP:0018)
  2666.  38      DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  2667.          used by SHARE in DOS 3.3
  2668.  3C      apparently unused by DOS versions <= 6.00
  2669.  3D      (APPEND) TrueName flag 
  2670.  3E      (Novell NetWare) flag: next byte initialized if CEh
  2671.  3F      (Novell NetWare) Novell task number if previous byte is CEh
  2672.  40      DOS 5+ version to return on INT 21/AH=30
  2673.  42      (MSWindows3) selector of next PSP (PDB) in linked list
  2674.          Windows keeps a linked list of Windows programs only
  2675.  44      unused by DOS versions <= 6.00
  2676.  48      (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  2677.  49      unused by DOS versions <= 6.00
  2678.  50      DOS 2+ service request (INT 21/RETF instructions)
  2679.  53      unused in DOS versions <= 6.00
  2680.  55      unused in DOS versions <= 6.00; can be used to make first FCB
  2681.          into an extended FCB
  2682.  5C      first default FCB, filled in from first command tail argument
  2683.          overwrites second FCB if opened
  2684.  6C      second default FCB, filled in from second command tail argument
  2685.          overwrites beginning of command tail if opened
  2686.  7C      unused
  2687.  80      Length of command tail
  2688.  81      Command tail terminated by 0D
  2689.  
  2690. 57
  2691.                                     CREDITS
  2692.  
  2693.  
  2694.  
  2695. The following publications have proved useful in the production of SSD:
  2696.  
  2697.  
  2698. 8086/8088 User's Manual, Intel 1989
  2699.  
  2700. PC Intern, Michael Tischer, Abacus 1992
  2701.  
  2702. DOS Programmer's Reference, Terry R Dettmann, Que 1988
  2703.  
  2704. Interrupt List edited by Ralf Brown. Including details of the multiplex 
  2705. interrupt, described by Robin Walker.
  2706.  
  2707.  
  2708. The author is grateful to the cooperation of the virus writer "Black Baron" 
  2709. in supplying copies of his polymorphic computer viruses and supplying 
  2710. information about the SMEG engine. As well as testing early versions of SSD 
  2711. against his own polymorphic viruses. Thanks Chris!
  2712.  
  2713.  
  2714. Program Design & Coding: Matthew Probert
  2715.  
  2716. Version 2.7 published by Servile Software, November 1994. All rights reserved.
  2717. 58
  2718. With effect from version 2.4, SSD became SHAREWARE and you are required to 
  2719. register your copy or stop using it.
  2720.  
  2721. Registration costs 29.95 pounds sterling (UK pounds).
  2722.  
  2723. Please make cheques payable to "M. Probert" ONLY, and send with the enclosed 
  2724. order form (order.doc) to:
  2725.  
  2726. Matthew Probert
  2727. 5 Longcroft Close
  2728. Basinsgtoke
  2729. Hampshire
  2730. RG21 1XG
  2731.  
  2732. Telephone 0256 478576
  2733.  
  2734.  
  2735.  
  2736.         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2737.         ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▌████             ┌────────────────────────────┐
  2738.         ██ C>_               ▌█▀██             │ COGNITIVE DEVELOPMENT BBS  │
  2739.         ██                   ▌████             │                            │
  2740.         ██                   ▌████             │ Providing a forum for A.I. │
  2741.         ██                   ▌█o██             │ researchers and developers │
  2742.         ██                   ▌█o██             ├────────────────────────────┤
  2743.         ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▌█ ██             │ Basingstoke, Hampshire, UK │
  2744.         ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀             │                            │
  2745.   ████████████████████████▀▀▀▀▀▀▀▀▀▀▀▀▀▀█      │ 0256 50086 24 hours a day  │
  2746.   ████████████████████████ ═══/═[──]═══ █      │                            │
  2747.   ████████████████████████──────────────█      │   300 baud to 14,400 baud  │
  2748.   █▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌████ ═══/═[──]═══ █      └────────────────────────────┘
  2749.   ████████████████████████▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  2750.    ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2751.  
  2752.