home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-12-31 | 78.3 KB | 1,952 lines |
-
-
- *** MASTER*KEY - Version 2.2 ***
-
-
- COPYRIGHT, 1985, 1986, 1987 - LARRY G. GRIMES
-
- ALL RIGHTS RESERVED.
-
-
- NO PART OF THIS MANUAL OR SOFTWARE
- MAY BE REPRODUCED OR TRANSMITTED
- IN ANY FORM OR BY ANY MEANS
- WITHOUT WRITTEN PERMISSION OF THE AUTHOR.
-
-
- PUBLISHED BY:
-
- SHARPE SYSTEMS CORPORATION
- 2320 "E" Street
- La Verne, CA 91750
- (714) 596-0070
-
-
- * * * * * * * * * * * * CAUTION ! * * * * * * * * * * * * *
- * *
- * REVIEW YOUR SOFTWARE LICENSE AGREEMENTS BEFORE USING *
- * THESE PROGRAMS - Some product manufacturers specific- *
- * ally forbid the alteration, disassembly, reverse- *
- * assembly, or unassembly of their software. This *
- * product was not intended to violate anyone's rights *
- * or to assist anyone to infringe on the rights of *
- * another to receive compensation for the effort, money, *
- * and time consumed in the development and production *
- * of software. *
- * *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-
-
-
-
- * * * * * * * * * * * * WARNING ! * * * * * * * * * * * * *
- * *
- * THIS MANUAL AND SOFTWARE ARE PROTECTED BY UNITED *
- * STATES COPYRIGHT LAW (Title 17 U.S. Code). THE UN- *
- * AUTHORIZED REPRODUCTION AND/OR SALE OF THIS PRODUCT *
- * MAY RESULT IN YOUR IMPRISONMENT OF UP TO ONE YEAR IN *
- * A FEDERAL PENITENTIARY AND A FINE TO $10,000 *
- * (17 USC 506). COPYRIGHT INFRINGERS AND VIOLATORS ARE *
- * ALSO SUBJECT TO CIVIL LIABILITY AND PUNITIVE DAMAGES. *
- * BE AWARE OF THE CONSEQUENCES OF YOUR ACTIONS. *
- * *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- .PA
- SOFTWARE LICENSE AGREEMENT:
- ---------------------------
-
- You are not given possession of this software. You only have a
- license for the non-exclusive use of the programs for as long as the
- copyright is in effect and valid. You are to treat this software as
- you would a book or any other copyrighted material. It is not possible
- for more than one person to read a book at the same time, likewise,
- this copy of software may not be used by more than one person on one
- computer at a time. You are not to give copies of the documentation or
- programs to anyone for any reason. This software is not to be used in
- a computer network, bulletin board, or any other form of general
- access.
-
- The purchase and use of this software package is evidence of the
- agreement to abide by the provisions of this agreement. It is against
- the law and in violation of United States Copyright to make copies of
- this documentation or copies of this software for other than backup
- purposes.
-
- This software is provided "AS IS" and includes NO WARRANTY,
- express or implied. The complete risk of its use rests with the person
- using it. The manufacturer, dealer, or representative is is in no way
- liable for any damages resulting from the use of this software, both
- direct and indirect. There is NO GUARANTEE of its accuracy,
- correctness, currentness, or reliability.
-
- This agreement and license is governed by the laws of the United
- States of America and the state of California.
-
-
- ACKNOWLEDGMENTS:
- ----------------
-
- MASTER*KEY is a trademark of Larry G. Grimes. IBM and PC-DOS are
- trademarks of the International Business Machines Corporation. MASM,
- Microsoft, Microsoft Basic, MS, and MS-DOS are trademarks of the
- Microsoft Corporation. Norton Utilities is a trademark of Peter
- Norton. UNIX is a trademark of Bell Laboratories.
- .PA
- INTRODUCTION:
- -------------
-
- MASTER*KEY is tool or a utility to enhance other tools and
- reference materials in understanding and programming your personal
- computer in assembly or machine language. It is not an editor or
- assembler. You must use other software tools for these functions.
-
- MASTER*KEY is an intelligent MS-DOS disassembler or reverse-
- assembler. It produces easily-readable self-documented assembly
- language source code files from machine language or object code that
- may be edited with any ASCII file text editor or word processor, then
- re-assembled using a debugger, assembler, or macro assembler and
- linked with other object modules if desired. It handles object code
- from the 8088, 8086, 8087, 80186, 80286, and 80287 processors. It
- decodes into MS-DOS 2.0, 2.1, 3.0, 3.1, and 3.2.
-
- MASTER*KEY includes an 8086 assembly language source code
- formatter & cross-reference generator. The formatter produces an easy-
- reading documented source listing identifying all ROM BIOS and DOS
- functions & interrupts. It serves as an object code optimizer by
- helping to identify stack areas, temporary storage, ASCII strings, and
- unnecessary code. The cross-reference identifies the number and
- location of all labels, symbols, functions, and interrupts. 8087,
- 80287, 80186, 80286 specific code is flagged, but not fully expanded
- and formatted. The source code produced can be immediately assembled
- with Microsoft's MASM 4.0 or less. The code is highly compatible with
- other assemblers using Intel's instructions.
-
-
- MINIMUM SYSTEM REQUIREMENTS:
- ----------------------------
-
- 1. An 8088/8086/80186/80286-Based Personal Computer
- (close to IBM-compatibility)
- 2. At least 256K RAM
- 3. DOS 2.0, 2.1, 3.0, 3.1, OR 3.2
- 4. At least one 360K DSDD Floppy Drive (IBM PC Format)
- (a fixed or RAM disk is highly recommended)
- .PA
- WHAT YOU SHOULD KNOW BEFORE USING MASTER*KEY:
- ---------------------------------------------
-
- 1. To examine programs for compatibility or suitability.
-
- a. Operation and use of an IBM PC or compatible computer and DOS.
- b. A basic understanding of the 8086 family object and source code.
- c. Familiarity with DOS & ROM BIOS functions & interrupts.
-
- 2. To make minor alterations.
-
- d. The use of a debugger and executable program modifier such
- as Microsoft's DEBUG, SYMDEB, Peter Norton's Utilities, etc.
-
- 3. To completely re-assemble new programs.
-
- e. An extensive knowledge of all the above.
- f. 8086 assembly language programming, preferably with Microsoft's
- MASM to 4.0.
- .PA
- GETTING STARTED:
- ----------------
-
- Copy the files from the original disk to a backup disk and a
- working floppy or hard disk and store the original for safekeeping.
- Always keep backups of everything. Refer to your DOS manual for
- procedures if necessary.
-
- Files included on the disk:
-
- 1. MK.EXE MASTER*KEY Program.
-
- The major disassembling program to allow you to
- view, print, or create a file of documented
- source code from machine language in different
- formats. To run, type in and press return:
-
- MK filename.ext
- Example: MK MK.EXE will disassemble itself.
-
- "filename" is any file, it would usually be an
- executable program with an extension of .COM or
- .EXE. The file may also be a device driver,
- overlay, or code fragment with no extension,
- .SYS, .BIN, .OVL, .OVR, .HEX, etc. Pressing the
- SPACE BAR will stop & restart the scrolling
- display. Pressing ANY OTHER key on a motionless
- display will invoke the Lotus-style command
- menus. Pressing the right & left cursor keys,
- space bar, home & end keys will browse through
- the choices. Pressing 'C' will continue the
- scrolling display. Pressing the selection number
- or RETURN after moving to a desired option will
- select the option.
-
- 2. MKX.EXE MASTER*KEY Cross-Reference Program.
-
- The program to print a cross-reference or produce
- a file with an extension of .XRF by hexadecimal
- location of a file with an extension of .DIS
- created ONLY by MK.EXE. To run, type in and press
- return:
-
- MKX filename (don't include extension)
-
- Example: MKX MK will create MK.XRF if
- MK.DIS is valid.
-
- 3. MKDATA.EXE MASTER*KEY Data-Reference Program.
-
- The program to quickly create data statements
- in MASTER*KEY disassembled format. Locates
- most, but not always all ASCII data in
- ANY file. To run, type in and press return:
-
- MKDATA filename.ext
- Example: MKDATA MK.EXE will display on screen.
- MKDATA MK.EXE >MK.DAT will be
- redirected to the file MK.DAT.
-
- NOTE: MKDATA will accept command line arguments
- -B, -H, and -T the same as MK.EXE.
-
-
- 4. README Additional information included if necessary.
-
- 5. MK.TXT MASTER*KEY Manual-on-the-disk.
-
- NOTE: To DISPLAY the README, MK.TXT or any other of the
- ASCII files (DIS, XRF, DAT) type in and press
- return:
-
- TYPE filename.ext
-
- To PRINT the the ASCII files type in and press
- return:
-
- TYPE filename.ext >PRN
-
- ( >PRN redirects the output from the screen to
- printer).
-
-
- USING MASTER*KEY:
- -----------------
-
- To run MASTER*KEY, the program must be in the current directory
- or in a directory specified with the latest PATH command:
-
- EXAMPLE: PATH=A:\DOS;B:\MK
-
- With this path command, if MASTER*KEY is not in the current
- directory, it will run from any DOS prompt if it is in A:\DOS or
- B:\MK. Refer to your DOS manual if you have any trouble understanding
- the environment path or the use of directories and subdirectories.
-
- Speed is increased dramatically if files are read from a RAM disk.
-
-
- MASTER*KEY'S INTERACTIVE MODE:
-
- MASTER*KEY offers a number of interactive commands. Commands are
- the instructions you give MASTER*KEY to perform a variety of different
- tasks, such as scrolling the documented source code of any executable
- program, finding all the terminating interrupts in a program to see
- why it seems to be quitting prematurely, or finding the references to
- a particular piece of data.
-
-
- COMMAND MENUS:
-
- Command menus are the method used by MASTER*KEY to present
- selection alternatives to the user. The command menus are very similar
- to those used by Lotus Corporation's 1-2-3 or Symphony.
-
- In interactive operation, to display the command menus, press the
- space bar to suspend the scrolling of the screen, then any other key
- (pressing the space bar again will continue scrolling). The currently
- available command choice is highlighted with a large cursor. Pressing
- the right & left cursor keys, space bar, home & end keys will browse
- through the choices. Pressing 'C' will continue the scrolling display.
- Pressing the selection number or RETURN after moving to a desired
- command will select the option.
-
-
- MASTER*KEY'S AUTOMATIC MODE & COMMAND LINE FLAGS:
-
- mk [infile] [-flags...]
-
- Command line flags allow automatic operation or setup from the
- DOS prompt or a DOS batch file. Such operation is only needed by the
- most experienced of programmers with massive fixed disk capacity,
- since a very large file can be created in such a short time. And such
- a file is relatively useless unless you're going to reassemble the
- entire file which will take a lot of work from the best of assembly
- language programmers. MASTER*KEY can do such work, but its strength
- is in its inter-active nature and the ability to abstract a small
- amount of important information from a potentially impossible-to-
- understand mass of source code.
-
- Anything in square brackets is optional, infile is not required,
- but if omitted MASTER*KEY will display an outline of command line
- options. If the program is continued, the infile will have to be
- entered from the main menu. This file is read from disk by
- sector as necessary. The file is not resident in RAM because of the
- memory requirements just to run MASTER*KEY. If you have 640K of RAM,
- or extended memory in your system, it's highly recommended you use a
- RAM disk (one in expanded memory is great!).
-
- If an output file name is specified on the command line, MASTER*
- KEY will work only in batch mode. If not, MASTER*KEY work only in the
- inter-active mode. In other words, to run MASTER*KEY automatically,
- you must use an output file name.
-
- If any of the file names or flags is incorrect, MASTER*KEY will
- terminate with an error message.
-
- EXAMPLE: MK MK.EXE -B0A000 -E0B000 -L -OMK
-
- In the example, MASTER*KEY will automatically find branch
- addresses and disassemble itself into the disk file MK.DIS from
- program file offsets 0A000h to 0B000h and exit.
-
-
- COMMAND LINE FLAGS:
-
- -B<hex#> Beginning Offset. Sets the offset to start disas-
- sembling, rather than the default 100h for .COM
- and the instruction pointer .EXE files. Can be
- up to 5 hexadecimal digits.
-
- -CC Output ALL Code (similar to MS-DOS debug).
-
- -CD Output ALL Data.
-
- -CI Output Exceptions Only (funcs, int's, sgmt chgs).
-
- -CB Output Branch Ref's Only.
-
- -CR Output Data Ref's Only.
-
- -CO Output Data Only.
-
- -E<hex#> Ending Offset. Sets the offset to stop disas-
- sembling, rather than the default end of file.
- Can be up to 5 hexadecimal digits.
-
- -H<hex#> Code origin or PSP Header Size. Changes the default
- PSP size of 100h for non-EXE files such as device
- drivers, code fragments, and programs loaded at
- static locations. You may use DEBUG to break a
- large file into several smaller files and use the
- code origin of each file to maintain correct
- addressing.
-
- -L Load Branch Address Array. It is a good idea to use
- this flag if you need to reference all of the branch
- locations, since it takes some time to accomplish.
-
- -O<string> Output File Name, to be use by the MASTER*KEY cross-
- reference, it must have the extension: .DIS.
-
- -Q<0-2> Video BIOS selection (for Non-IBM Compatibles).
- 0 = Write Screen Display directly to Video memory.
- Default & fastest. If your computer is not
- completely IBM video-graphics BIOS compatible,
- you may need to use Q1 or Q2.
- 1 = Do not use Video BIOS (extremely slow).
- Screen output is totally software simulated.
- 2 = Use Video BIOS, but remove snow (somewhat slower).
- The screen refresh is slowed down.
-
- -T<0-9> Change Tab Spacing on output to file or printer.
- The default value is 8. Tab Characters are used to
- fill large blank areas on the listings and keep
- file sizes to a minimum. If your printer does not
- recognize tabs, the output will not be aligned
- properly. Also, your editor may have different
- spacing for tabs (C programmers tend to use 3 or
- 5). The default value is 8. An entry of -T or -T0
- will disable tab characters completely. You MUST
- disable tabs with some non-IBM compatible printers.
-
- -V If your computer doesn't seem to be Video Display
- compatible with MASTER*KEY, -V with no arguments
- will attempt to interpret the given display colors
- and attributes. If the result isn't satisfactory,
- use VA or VC. These arguments are for true IBM-
- compatibility (you may need to experiment with
- different combinations to achieve the desired
- display colors and attributes, also refer to your
- technical reference manual):
-
- MASTER*KEY IBM-PC Video Display Colors:
-
- Color Hex Value
-
- Black 0h
- Blue 1h
- Green 2h
- Cyan 3h
- Red 4h
- Magenta 5h
- Yellow 6h
- White 7h
-
-
- MASTER*KEY IBM-PC Video Display Attributes
-
- Color Display:
-
- Attribute Hex Value Binary Mask
-
- Normal 0h 0000b
- Reverse 1h 0001b
- Bright 2h 0010b
- Reverse Bright 3h 0011b
- Blink 4h 0100b
- Reverse Blink 5h 0101b
- Bright Blink 6h 0110b
- Reverse Bright Blink 7h 0111b
-
- Monochrome Display:
-
- Attribute Hex Value Binary Mask
-
- Normal 0h 0000b
- Reverse 1h 0001b
- Bright 2h 0010b
- Blink 4h 0100b
- Reverse Blink 5h 0101b
- Bright Blink 6h 0110b
- Reverse Bright Blink 7h 0111b
- Underline 8h 1000b
- Underline Bright Ah 1010b
- Underline Blink Ch 1100b
- Underline Bright Blink Eh 1110b
-
- -VA<2hex#'s> Two hex digits for Display Attributes: 1-normal
- and 2-alternate (default: high-intensity).
-
- -VC<4#'s> Four hex digits for Display & Border colors:
- 1-foreground (text), 2-background, 3-alternate
- foreground (enhanced), and 4-border.
-
-
- MASTER*KEY RUN-TIME ERROR MESSAGES:
- -----------------------------------
-
- 1. Can't open input file.
-
- The input file was:
- a. Not on command line, ex: C:>MK INFILE.
- b. Not on drive, current directory, or path specified.
- (full pathnames may be used to a total of 50 chars).
-
- 2. Can't open output file.
-
- a. Not enough directory or disk space.
- b. Diskette write-protected.
- c. Existing file attribute may be "read-only".
-
- 3. Input file too large or Not enough memory.
-
- a. Separate the file into several small logical source code
- modules to assemble into object code modules to be linked
- into the final program. This is the way the program was
- written in the first place.
- b. Remove any memory-resident programs taking up needed RAM.
-
- 4. Invalid input file at line: XX.
-
- Cross-reference only. The file was not created by MASTER*KEY
- or has been altered without MASTER*KEY.
-
- 8. Invalid word: XX at line#: YY.
-
- Cross-reference only. The file was not created by MASTER*KEY
- or has been clobbered.
-
- 9. Command Line argument invalid: XX
-
- Correct & retype command line or batch file.
-
- 10. Untrapped error : SyLongJmp (-XXX)
-
- General fatal error message. Usually caused at start for
- lack of available memory for dynamic memory requirements.
-
-
- MASTER*KEY MENU MESSAGES:
- -------------------------
-
- Main Menu:
-
- CONT, 1-OFFSET, 2-OUTPUT, 3-EXIT, 4-FILE INFO, 5-MISC, 6-INPUT,
- 7-HELP
-
- C - Continue current display
-
- This selections returns to scrolling display or file output.
-
- 1 - Change offset from beginning of file
-
- Allows entering or editing previously entered beginning and
- ending offsets from beginning (code area for .EXE files) of
- object file. The PSP header size is automatically added for
- non-.EXE files if offset is less than header.
-
- -B and -E argument options on the command line.
-
- 2 - Mixed, All Code, All Data, File, Printer, Partial, Window
-
- Output Menu Selections.
-
- 3 - Return to DOS
-
- Leave MASTER*KEY permanently and return to the operating
- system. When an output file is specified on the command line,
- MASTER*KEY will automatically return to DOS when completed
- (if not interrupted).
-
- 4 - Display File Header Information
-
- Show file name, size, header size, segment info, etc.
-
- 5 - Load Branch Addresses, Change Program Header Size,
- Run External Program
-
- Miscellaneous Menu (operations not performed regularly)
-
- 6 - Change input file.
-
- Allows disassembling a new file with all new default parameters.
-
- 7 - Help.
-
- Displays a menu map with list of current parameter settings.
-
- Output Menu:
-
- CONT, 1-MIXED, 2-ALL CODE, 3-ALL DATA, 4-FILE, 5-PTR,
- 6-PARTIAL, 7-WINDOW
-
- C - Return to Main Menu
-
- 1 - Change output to MASTER*KEY original mixed dissassembled
- format
-
- Default MASTER*KEY output of combined code and data. A data
- format, 'DB', is displayed if 8 consecutive printable
- characters are found, or if a character is duplicated more
- than 4 times, 'DUP(X)'. When displayed, this may not be data,
- but coincidental code. You will often see 'phantom data'
- hidden in your code. You can remove these references using
- ALL CODE output.
-
- 2 - Change output to all code (no data) format
-
- No DB's (except for indefinite opcodes, and syntax errors)
- are displayed. This output will generally correspond with
- output from MS-DOS Debug.
-
- -CC argument option on the command line.
-
- 3 - Change output to all data (no code) format
-
- ALL object code is displayed in data format, DB. This is
- useful for removing 'phantom code' from data areas, or
- creating in-line assembly code for a program from an ASCII
- file.
-
- -CD argument option on the command line.
-
- 4 - Turn output in current format to disk file ON/OFF
-
- If not already writing to a disk file, MASTER*KEY will allow
- entering or editing of a previously entered file name,
- beginning and ending offsets. If already writing to a disk
- file, selecting this menu option will close the current file
- and return to the video display. Any valid file name can be
- used for output, the MASTER*KEY cross-reference program must
- have a file name with an extension of .DIS. If no extension
- is indicated, this is automatically appended to the file
- name. All output will be appended to this file until closed.
-
- NOTE: MASTER*KEY will APPEND the current output to an existing
- file with no indication, so be careful with name selections.
- After a file has been closed DO NOT use the same file name
- unless you desire to APPEND the existing data to the file.
- Use MISC MENU #3 option to execute DOS commands to copy,
- delete, or rename your disassembled source files.
-
- 5 - Turn output in current format to printer ON/OFF
-
- Toggles output to current printing device (PRN:). If your
- printer is not IBM-compatible, does not recognize tab
- characters, or the tab length is not 8, you will have to
- change the tab setting from the command line when starting
- MASTER*KEY. A -T will disable tabs completely and usually
- solves formatting or alignment problems. Printed output is
- not available from the command line.
-
- 6 - Normal, Int's, Branch Ref's, Data Ref's, Data Only
-
- Partial Output Menu. MASTER*KEY's strongest points, the
- ability to abstract specific documented information from a
- mass of confusing object code. This is where you begin to
- find your needle in the haystack.
-
- 7 - Turn split screen ON/OFF
-
- Toggles the WINDOW function. The video display screen is
- divided horizontally, providing two windows to view different
- locations or formats of the same location. The top window is
- static and cannot scroll.
-
- Looking at the same location in ALL CODE and ALL DATA at the
- same time will help you separate real code from real data.
- Looking at the actual data and references to it at the
- same time can be extremely helpful. The same is true for
- observing branch addresses.
-
-
- Partial Output Menu:
-
- CONT, 1-NORMAL, 2-INT'S, 3-BRANCH REF'S, 4-DATA REF'S, 5-DATA ONLY
-
- C - Return to Main Menu
-
- 1 - Change output to MASTER*KEY original mixed disassembled
- format
-
- 2 - Change partial output to exceptions only (funcs, int's, sgmt
- chgs)
-
- MASTER*KEY's strength, allows weeding out keypoints.
-
- -CI argument option on the command line.
-
- 3 - Change partial output to branch references only
-
- Quickly find locations that call or branch to subroutines
- and other important code areas.
-
- -CB argument option on the command line.
-
- 4 - Change partial output to data references only
-
- Quickly find all references to a specific data item or items.
-
- -CR argument option on the command line.
-
- 5 - Change partial output to data only (DB's - no code)
-
- Displays only data from MASTER*KEY's mixed format. It is
- usually much quicker to disassemble large data areas
- with MKDATA.EXE; use the option for patch areas only.
-
- -CO argument option on the command line.
-
-
- Miscellaneous Menu:
-
- CONT, 1-BRANCH ADDRS, 2-CHG HDR, 3-EXEC PGM, 4-CHG TABS
-
- C - Return to Main Menu
-
- 1 - Search file for most branch addresses (may take some time)
-
- MASTER*KEY cannot label a branch-to location until it is
- encountered. Some code deep into the program may branch
- backwards toward the beginning. This option allows you to
- automatically find most of the branch points quickly.
- MASTER*KEY will remember these points as they are encountered
- and it may take a very long time for a large program. This
- function is not always needed.
-
- -L argument option on the command line.
-
- 2 - Change Code Origin or PSP Header Size
- (ex: 100h for .COM, 0h for .SYS)
-
- Allows changing the ORIGIN offset for output. The PSP
- (Program Segment Prefix) is 256 bytes (100h), and is at the
- beginning of every regularly executable program in memory.
- The origin begins at 0h for .EXE programs since their code
- segment begins at the end of the PSP. The data segment
- usually begins at the beginning of the PSP, making a 100h
- difference in references and actual locations of data items.
- The origin can be any hexadecimal number from 0h to FFFFEh.
- You may use different code origins for segmenting large files
- into several source code modules to be assembled separately
- and linked together later.
-
- Since .COM programs only have one segment, their origin is
- 100h, the end of the PSP. All segment references in these
- programs are to the beginning of the PSP.
-
- Device drivers are executable programs but must have an
- origin of 0h since they don't use a PSP. You can change the
- origin for code fragments if you are splitting a program into
- several different files. This is an excellent idea since a
- source file can get very large, very quickly.
-
- -H argument option on the command line.
-
- 3 - Execute DOS Command or other Program from MASTER*KEY
-
- Allows leaving MASTER*KEY resident and temporarily executing
- a DOS command to change directories, a path, copy, delete, or
- rename a file. You may also execute a completely different
- program without having to restart MASTER*KEY, such as your
- text editor or Debug, if you have enough memory, you can
- even run another copy of MASTER*KEY in another portion of
- RAM with another file without losing your current parameters.
-
- 4 - Remove Tab Characters from Output or Change Tab Length.
-
- -T argument option on the command line.
-
-
- DETERMINING OFFSETS & BRANCH LABELS:
- ------------------------------------
-
- The offsets used by MASTER*KEY are 5-byte REAL ADDRESSES created
- by adding the 4-digit, 2-byte code segment multiplied by 16 to the
- 4-digit, 2-byte offset:
-
- CODE SEGMENT: 1000h * 16(10h) = 10000h
- OFFSET: 1000h + 1000h
- ---------
- REAL ADDRESS: = 11000h
- BRANCH LABEL: = H11000
-
- EXAMPLE: H00100: JMP H00105
- NOP
- NOP
- H00105: RET
-
-
- INDEFINITE FUNCTIONS:
-
- If a function or interrupt is unclear to MASTER*KEY, it is
- indicated with:
-
- ;INDEF_FUNC
-
- This is caused by a non-DOS interrupt, or the contents of
- the AH register may be unclear or variable. You will have to
- determine on your own the purpose of these interrupts.
-
- Subroutine calls are indicated with:
-
- ; . . . . . . . . .
-
- This allows you to locate them easily and fill in the function
- for you own documentation if desired.
-
- Unconditional branches are indicated with:
-
- ;--------------------------------------
-
- This allows for easy reading of the formatted source file output,
- and possible data and non-branched code areas are indicated if there
- is no branch address label following the unconditional branch. Be careful,
- there may be a hidden reference or the branch may be word-aligned:
-
- JMP H01200
- ;--------------------------------------
- NOP
- H01100: MOV AX,BX
-
- *** CAUTION ***
-
- A branch label may exist here, but may be a FAR label from
- another object module. If this is the case, there may be up to 15
- bytes of garbage after the previous unconditional branch may exist
- before the branch address that may or may not be recognized by
- MASTER*KEY. When disassembling always anticipate the unexpected,
- and don't make dangerous assumptions.
-
- Areas of repetitive bytes are indicated in groups of 256 or
- less with:
-
- DB 256 DUP(XXh)
- DB 22 DUP(XXh)
-
- MASTER*KEY does not directly interpret 8087, 80186, 80286,
- and 80287 instructions. Most are indicated in the source listing,
- and must be manually edited if necessary.
-
-
- HOW TO USE MASTER*KEY:
- ---------------------
-
- MASTER*KEY works somewhat similar to the MS-DOS DEBUG program's
- unassemble function. MASTER*KEY goes much further than to just be a
- disassembler. With selective partial output you can easily understand
- how an executable object code file or program actually operates.
-
-
- The last thing you should do is create a complete source file right
- away. An object code program can easily become more than 20 times its
- original size when it is turned into source code. This complete source
- listing or file is almost as unmanageable as the program in the first
- place.
-
- Only an experienced assembly language programmer should even
- attempt to totally disassemble and reassemble a complete program. Very
- few programs, if any of any value, can easily be disassembled and
- reassembled without a great amount of re-editing. MASTER*KEY can
- create a source file, but much work will be required to get it running
- again. It is best to use Debug or some other utility to change the
- object code directly as long as you don't change the size of the
- program in any way. Changing the code size may destroy branch points
- and data locations. The major purpose of MASTER*KEY is to help you
- accomplish this purpose.
-
- The easiest way to convert discrepancies so a file will
- reassemble is to convert the necessary object code verbatim using
- DB's. Sometimes an area of code is actually data too difficult to
- discern. It may be a table or a collection of control codes. Changing
- the values may be disastrous.
-
- To disassemble ROM, or any area in memory, use DEBUG to
- create a file. MASTER*KEY will only work with disk files.
-
-
- HOW TO DISASSEMBLE A PROGRAM:
- -----------------------------
-
- Start with data. Run MKDATA.EXE to find the data areas and
- locations. To find a program feature, it doesn't make much sense
- to disassemble the data areas.
-
- Create a file of functions and interrupts only. This will lead you
- to key areas by just using the cross-reference of this file. Since the
- cross-reference is by location, you really don't need a long listing
- of source code. Just use the cross-reference as a map to scroll through
- the file using MASTER*KEY in its interactive mode. Using the windows,
- mixed-mode, and partial output is much more effective and motivating
- than trying to decipher a source code listing on a stack of paper over
- an inch thick.
-
- MASTER*KEY's interrupt messages to pay careful attention to are:
-
- 1-Create_Pgm_Sgmnt BAT-Chg_Disk_Status
- 1-DTA_Address BAT-Dev_Event_Wait
- 1-FAT_Any_Drive BAT-Dev_Prgm_Term
- 1-FAT_Current_Drive BAT-Ini_HD_Prm_Tbls
- 1-Set_DTA BAT-Recalibrate_Dr
- 1-Set_Intrpt_Vector BAT-Seek_to_Cyl
- 1-TERM_normally BAT-Set_Disk_Type
- 2-Allocate_Memory BAT-Set_Flg_Cmp_Int
- 2-Control_Break BAT-Switch_to_V_Mem
- 2-IO_Device_Control BAT-System_Request
- 2-Interrupt_Vector Crit_Error_Address
- 2-Load_Execute_Prgm Ctrl-Break_Address
- 2-Remove_Directory DIRECT_INPUT
- 2-Rename_File DIRECT_OUTPUT
- 2-Subpgrm_Rtn_Code Divide_by_Zero
- 2-TERM_Resident INDEF_FUNC
- 2-TERM_w_RtnCde INDEF_FUNC
- 3-Create_Temp_File INDEF_INSTR
- 3-Lock_Unlock_File INT_on_Overflow
- 3-PSP_Address Non-Maskable_INT
- AbsoluteDisk_Write One_Byte_Interrupt
- Absolute_Disk_Read RETURN_CODE
- B-Clock_Count STACK_PTR_CHG
- B-Control_to_BASIC SYNTAX_ERROR
- B-Format_FD_Track Single_Step
- B-Read_FD_Sectors TERMINATE_Resident
- B-Set_Clock_Count TERM_normally
- B-TERMINATE_REBOOT Terminate_Address
- B-Write_FD_Sectors XS_SGMT_CHG
- BAT-Alt_Disk_Reset XS_SGMT_OVRD
-
- The most important instructions to watch for are port operations,
- IN and OUT. When a program is using these, it is programming or
- interfacing directly with the hardware and bypassing the more
- compatible BIOS and DOS functions.
-
- There are three ways software uses hardware: directly, with BIOS,
- or with DOS functions. The tradeoff is speed vs. compatibility. The
- more DOS is used, the more compatible it is with various computers.
- But it is also slower, since the functions are more generic and have
- to handle a wider variety of input. Use of BIOS is faster, but much
- more hardware specific. Programming and going directly to the hardware
- is extremely fast, but completely hardware specific.
-
- The use of input and output ports is the most difficult to
- disassemble and understand. Start with the hardware the port is
- assigned to and go from there.
-
-
- The Difference Between MASTER*KEY Output and Microsoft's MASM 4.0:
- ------------------------------------------------------------------
-
- TRANSLATING DISASSEMBLED FILES:
- -------------------------------
-
- Microsoft's MASM 4.0 has strong type checking and is somewhat
- unforgiving to older source code programs. Some assembly language
- programs found in magazines and journals will just not assemble
- without a great deal of modification. Every effort has been made to
- have MASTER*KEY code as compatible as possible, but there are always
- exceptions. It is a good rule of thumb to avoid future trouble by
- making your source program assemble exactly like the original object
- code program before doing any major modification (when completely
- reassembling the file).
-
- *** CAUTION ***
-
- Although some object code is valid, and will execute flawlessly
- with the Intel architecture, when disassembled and reassembled, its
- not the same. And unfortunately, this is very common. MASTER*KEY will
- label potential problems:
-
- ADD AL,[BX+SI+00h] ;ASM_Syntax_Error ;00550 024000
-
- is assembled and disassembled as (with a change and loss of code):
-
- ADD AL,[BX+SI] ;00550 0200
-
- Several opcodes have synonyms and usually should be translated
- verbatim (take a hard look at the code, its probably data):
-
- ADD AL,AL ;00354 00C0
- ;MASM Translation: 02C0
- DB 02h,0C0h
- ADD Byte Ptr [BX+SI],01h ;004A7 820001
- ;MASM Translation: 800001
- DB 82h,00h,01h
- INC AX ;00AAD FFC0
- ;MASM Translation: 40
- DB 0FFh,0C0h
-
-
- The only way MASM can differentiate between NEAR and FAR
- returns is by including PROC FAR psuedo-ops in the source code. This
- will not work if NEAR and FAR returns are combined in the same object
- module. A lot of older programs have this problem. In DOS 1, a program
- could terminate with a FAR return to 0, with all other returns
- obviously being NEAR, since COM programs normally have only one segment.
-
- ; RET 0201h ;RET_Far:0201h ;00536 CA0102
- ;MASM error 10: Syntax error
- DB 0CAh,01h,02h
-
- ; RET ;RET_Far ;00539 CB
- ;MASM error 10: Syntax error
- DB 0CBh
-
- H00536 PROC FAR
- ...
- RET 0201h ;RETURN_CODE ;00536 CA0102
- RET ;00539 CB
- ...
- H00536 END PROC
-
-
- If 0Ah follows the Ascii-Adjust opcodes, just remove the
- operand. Anything other than 0Ah is a syntax error.
-
- ; AAM 0Ah ;00547 D40A
- ;MASM error 1: Extra characters on line
- AAM ;00547 D40A
-
- ; AAD 0Ah ;00549 D50A
- ;MASM error 1: Extra characters on line
- AAD ;00549 D50A
-
- ; AAM 00h ;00547 D400
- ;MASM error 1: Extra characters on line
- DB 0D4h,00h
-
- ; AAD 00h ;00549 D500
- ;MASM error 1: Extra characters on line
- DB 0D5h,00h
-
- Doubleword Jmps and Calls to a location outside of the current
- object module require an EXTRN pseudo-op before the ASSUME CS to define
- the external label. The label is prefixed with the code segment (CS:).
-
- When assembled, the LINK program will resolve the addresses if
- you have defined them in another source code module. For temporary
- fixes, the DB's are the best. If the label is not resolved before
- linking, the 9Ah CALL will be altered to 0CCh INT 3. Also the
- contents of the segment:offset bytes will be all zeros.
-
-
- ; CALL 00403h:00201h ; . . . . . . . . . ;004CF 9A01020304
- ;MASM error 38: Left operand must have segment
- DB 9Ah,01h,02h,03h,04h
- ; JMP 00403h:00201h ;00574 EA01020304
- ;MASM error 38: Left operand must have segment
- DB 0EAh,01h,02h,03h,04h
-
-
- EXTRN UNIQUE_LABEL:FAR
-
- ASSUME CS:CODE
-
- ; CALL 00403h:00201h ; . . . . . . . . . ;004CF 9A01020304
- ; JMP 00403h:00201h ;00574 EA01020304
- CALL CS:UNIQUE_LABEL ; . . . . . . . . . ;004CF 9A01020304
- JMP CS:UNIQUE_LABEL ; . . . . . . . . . ;00574 EA01020304
-
-
- The LOCK opcode is very seldom used (only for multiprocessing),
- and must be disassembled by hand if valid.
-
- ; LOCK ;0057E F0
- ;MASM error 66: Must have opcode after prefix
- DB 0F0h
- .PA
- ASSEMBLY LANGUAGE REFERENCE:
- ----------------------------
-
- SEGMENT REGISTERS:
-
- CS Code Segment
- DS Data Segment
- SS Stack Segment
- ES Extra Segment
-
-
- GENERAL REGISTERS:
-
- AX Accumulator AH - AL (High & Low Bytes
- BX Base BH - BL of Word Registers)
- CX Counter CH - CL
- DX Data DH - DL
-
- SP Stack Pointer (Stack Address)
- BP Base Pointer (Alternate Stack Address
- or Interior Stack Marker)
- SI Source Index (Implicit Address for String Ops)
- DI Destination Index (Implicit Address for String Ops)
- IP Instruction Pointer (Code Address)
-
-
- FLAGS - Status and Control Flags Register
-
- FLAGS: AF Auxiliary Carry (for BCD Arithmetic)
- CF Carry Flag
- DF Direction Flag (Strings)
- IF Interrupt Enable Flag
- OF Overflow Flag (CF and SF)
- PF Parity Flag
- SF Sign Flag
- TF Trap Flag (Single Step)
- ZF Zero Flag
-
- FLAGS REGISTER BIT PATTERN (XX = NOT USED):
-
- 15 8 0
- XX XX XX XX OF DF IF TF SF ZF XX AF XX PF XX CF
-
-
- OPERAND SUMMARY:
- ----------------
-
- MULTI-BYTE INSTRUCTIONS:
-
- Second Byte Bit Pattern: mod XXX r/m
-
- mod Displacement (immediate value alter index)
-
- 00 No DISP (except if mod = 00 and r/m = 110 then
- EA = Disp High:Disp Low)
- 01 DISP = Disp Low Sign-extended to 16 bits, No Disp High
- 10 DISP = Disp High:Disp Low
- 11 r/m is treated as a "reg" field
-
- r/m Operand Address
-
- 000 [BX + SI + DISP] ([expression] indicates the
- 001 [BX + DI + DISP] contents of the memory location
- 010 [BP + SI + DISP] pointed to by the expression
- 011 [BP + DI + DISP] rather than the location itself.
- 100 [SI + DISP]
- 101 [DI + DISP]
- 110 [BP + DISP]
- 111 [BX + DISP]
-
- DISP follows 2nd byte of instruction (before data if required).
-
- mod = 11, r/m "reg" field bit assignments:
-
- Word Operand Byte Operand
-
- 000 AX 000 AL
- 001 CX 001 CL
- 010 DX 010 DL
- 011 BX 011 BL
- 100 SP 100 AH
- 101 BP 101 CH
- 110 SI 110 DH
- 111 DI 111 BH
-
-
- SEGMENT OVERRIDE:
-
- Segment Override Prefix Bit Settings: 001 reg 110
-
- Segment Override "reg" field bit assignments:
-
- 00 ES
- 01 CS
- 10 SS
- 11 DS
-
- Register Default with Segment Override Prefix
-
- IP CS:IP No Segment Override
- SP SS:SP No Segment Override
- BP SS:BP (BP + DS), ES, or CS
- SI or DI DS:XI ES, SS, or CS (No String Ops)
- SI DS:SI ES, SS, or CS
- DI ES:DI No Segment Override
-
-
- OPCODES IN ALPHABETICAL ORDER:
-
- Opcode Description
- -----------------------------------------
- AAA Adjust Result of ASCII Addition
- AAD Adjust AX Register for Division
- AAM Adjust Result of BCD Multiplication
- AAS Adjust Result of ASCII Subtraction
- ADC Integer Add with Carry
- ADD Integer Add
- AND Logical And
- CALL Call a Subroutine
- CBW Convert Byte to Word
- CLC Clear Carry Flag Status
- CLD Clear Direction Flag
- CLI Clear Interrupt Enable Flag
- CMC Complement Carry Flag Status
- CMP Compare Two Operands
- CMPS Compare Memory with Memory (String)
- CWD Convert Word to Double Word
- DAA Adjust AL after BCD Addition
- DAS Adjust AL after BCD Subtraction
- DEC Decrement Register or Memory by One
- DIV Unsiged Division
- HLT Halt the Processor
- IDIV Signed Division
- IMUL Signed Multiplication
- IN Input Byte or Word from Port into AX
- INC Increment Register or Memory by One
- INT Software Interrupt
- INTO Interrupt on Overflow
- IRET Return from Interrupt Routine
- JA Jump if Above
- JB Jump if Below
- JBE Jump if Below or Equal
- JCXC Jump if CX = Zero
- JG Jump if Greater
- JGE Jump if Greater or Equal
- JL Jump if Less Than
- JLE Jump if Less Than or Equal
- JMP Jump Unconditionally
- JNB Jump if Not Below
- JNO Jump if Not Overflow
- JNS Jump if Not Sign
- JNZ Jump if Not Zero
- JO Jump if Overflow
- JPE Jump if Parity Even
- JPO Jump if Parity Odd
- JS Jump if Sign
- JZ Jump if Zero
- LAHF Load AH from Low-order Byte of Flags Register
- LDS Load Register and DS from Memory
- LEA Load Effective Address
- LES Load Register and ES from Memory
- LOCK Assert Bus Lock Signal
- LODS Load from Memory into Register (String)
- LOOP Loop (Decrement CX and Jump on Condition)
- LOOPNZ Loop while Not Zero
- LOOPZ Loop while Zero
- MOV Move
- MOVS Move Memory to Memory (String)
- MOVSW Move Word (String)
- MUL Unsigned Multiplication
- NEG Negate an Integer
- NOP No Operation (NULL Byte)
- NOT One's Complement of Register or Memory
- OR Logical Inclusive Or
- OUT Output Byte or Word to Port
- POP Read a Word from Top of Stack
- POPF Read Flags Register from Top of Stack
- PUSH Write a Word to Top of Stack
- PUSHF Copy Flags Register to Top of Stack
- RCL Rotate Left Through Carry
- RCR Rotate Right Through Carry
- REP Repeat Next String Instruction
- RET Return from Subroutine
- ROL Rotate Left
- ROR Rotate Right
- SAHF Store AH into Flags Register
- SAR Shift Arithmetic Right
- SBB Subtract with Borrow (Using Two's Complement)
- SCASB Scan Byte (String)
- SCASW Scan Word (String)
- SHL Logical Shift Left
- SHR Logical Shift Right
- STC Set Carry Flag
- STD Set Direction Flag
- STI Set Interrupt Enable Flag (Enable Interrupts)
- STOSB Store Byte (String)
- STOSW Store Word (String)
- SUB Subtraction (Using Two's Complement)
- TEST Logical Compare
- WAIT Wait While TEST Pin Not Asserted
- XCHG Swap Memory or Register with Register
- XLAT Table Lookup Translation
- XOR Logical Exclusive OR
-
-
- OPCODES IN HEX ORDER (variable opcodes have two bytes):
-
- 00 ADD 01 ADD 02 ADD 03 ADD
- 04 ADD 05 ADD 06 PUSH 07 POP
- 08 OR 09 OR 0A OR 0B OR
- 0C OR 0D OR 0E PUSH 0F CTS
- 10 ADC 11 ADC 12 ADC 13 ADC
- 14 ADC 15 ADC 16 PUSH 17 POP
- 18 SBB 19 SBB 1A SBB 1B SBB
- 1C SBB 1D SBB 1E PUSH 1F POP
- 20 AND 21 AND 22 AND 23 AND
- 24 AND 25 AND 26 ADD 27 DAA
- 28 SUB 29 SUB 2A SUB 2B SUB
- 2C SUB 2D ??? 2E ADD 2F DAS
- 30 XOR 31 XOR 32 XOR 33 XOR
- 34 XOR 35 XOR 36 ADD 37 AAA
- 38 CMP 39 CMP 3A CMP 3B CMP
- 3C CMP 3D CMP 3E ADD 3F AAS
- 40 INC 41 INC 42 INC 43 INC
- 44 INC 45 INC 46 INC 47 INC
- 48 DEC 49 DEC 4A DEC 4B DEC
- 4C DEC 4D DEC 4E DEC 4F DEC
- 50 PUSH 51 PUSH 52 PUSH 53 PUSH
- 54 PUSH 55 PUSH 56 PUSH 57 PUSH
- 58 POP 59 POP 5A POP 5B POP
- 5C POP 5D POP 5E POP 5F POP
- 60 ??? 61 ??? 62 ??? 63 ???
- 64 ??? 65 ??? 66 ??? 67 ???
- 68 ??? 69 ??? 6A ??? 6B ???
- 6C ??? 6D ??? 6E ??? 6F ???
- 70 JO 71 JNO 72 JB 73 JNB
- 74 JZ 75 JNZ 76 JBE 77 JA
- 78 JPO 79 JNS 7A JPE 7B JPO
- 7C JL 7D JGE 7E JLE 7F JG
-
- 8000 - 8007 ADD 8008 - 800F OR
- 8010 - 8017 ADC 8018 - 801F SBB
- 8020 - 8027 AND 8028 - 802F SUB
- 8030 - 8037 XOR 8038 - 803F CMP
- 8040 - 8047 ADD 8048 - 804F OR
- 8050 - 8057 ADC 8058 - 805F SBB
- 8060 - 8067 AND 8068 - 806F SUB
- 8070 - 8077 XOR 8078 - 807F CMP
- 8080 - 8087 ADD 8088 - 808F OR
- 8090 - 8097 ADC 8098 - 809F SBB
- 80A0 - 80A7 AND 80A8 - 80AF SUB
- 80B0 - 80B7 XOR 80B8 - 80BF CMP
- 80C0 - 80C7 ADD 80C8 - 80CF OR
- 80D0 - 80D7 ADC 80D8 - 80DF SBB
- 80E0 - 80E7 AND 80E8 - 80EF SUB
- 80F0 - 80F7 XOR 80F8 - 80FF CMP
-
- 8100 - 8107 ADD 8108 - 810F OR
- 8110 - 8117 ADC 8118 - 811F SBB
- 8120 - 8127 AND 8128 - 812F SUB
- 8130 - 8137 XOR 8138 - 813F CMP
- 8140 - 8147 ADD 8148 - 814F OR
- 8150 - 8157 ADC 8158 - 815F SBB
- 8160 - 8167 AND 8168 - 816F SUB
- 8170 - 8177 XOR 8178 - 817F CMP
- 8180 - 8187 ADD 8188 - 818F OR
- 8190 - 8197 ADC 8198 - 819F SBB
- 81A0 - 81A7 AND 81A8 - 81AF SUB
- 81B0 - 81B7 XOR 81B8 - 81BF CMP
- 81C0 - 81C7 ADD 81C8 - 81CF OR
- 81D0 - 81D7 ADC 81D8 - 81DF SBB
- 81E0 - 81E7 AND 81E8 - 81EF SUB
- 81F0 - 81F7 XOR 81F8 - 81FF CMP
-
- 8200 - 8207 ADD 8208 - 820F ???
- 8210 - 8217 ADC 8218 - 821F SBB
- 8220 - 8227 ??? 8228 - 822F SUB
- 8230 - 8237 ??? 8238 - 823F CMP
- 8240 - 8247 ADD 8248 - 824F ???
- 8250 - 8257 ADC 8258 - 825F SBB
- 8260 - 8267 ??? 8268 - 826F SUB
- 8270 - 8277 ??? 8278 - 827F CMP
- 8280 - 8287 ADD 8288 - 828F ???
- 8290 - 8297 ADC 8298 - 829F SBB
- 82A0 - 82A7 ??? 82A8 - 82AF SUB
- 82B0 - 82B7 ??? 82B8 - 82BF CMP
- 82C0 - 82C7 ADD 82C8 - 82CF ???
- 82D0 - 82D7 ADC 82D8 - 82DF SBB
- 82E0 - 82E7 ??? 82E8 - 82EF SUB
- 82F0 - 82F7 ??? 82F8 - 82FF CMP
-
- 8300 - 8307 ADD 8308 - 830F ???
- 8310 - 8317 ADC 8318 - 831F SBB
- 8320 - 8327 ??? 8328 - 832F SUB
- 8330 - 8337 ??? 8338 - 833F CMP
- 8340 - 8347 ADD 8348 - 834F ???
- 8350 - 8357 ADC 8358 - 835F SBB
- 8360 - 8367 ??? 8368 - 836F SUB
- 8370 - 8377 ??? 8378 - 837F CMP
- 8380 - 8387 ADD 8388 - 838F ???
- 8390 - 8397 ADC 8398 - 839F SBB
- 83A0 - 83A7 ??? 83A8 - 83AF SUB
- 83B0 - 83B7 ??? 83B8 - 83BF CMP
- 83C0 - 83C7 ADD 83C8 - 83CF ???
- 83D0 - 83D7 ADC 83D8 - 83DF SBB
- 83E0 - 83E7 ??? 83E8 - 83EF SUB
- 83F0 - 83F7 ??? 83F8 - 83FF CMP
-
- 84 TEST 85 TEST 86 XCHG 87 XCHG
- 88 MOV 89 MOV 8A MOV 8B MOV
- 8C MOV 8D LEA 8E MOV 8F POP
- 90 NOP 91 XCHG 92 XCHG 93 XCHG
- 94 XCHG 95 XCHG 96 XCHG 97 XCHG
- 98 CBW 99 CWD 9A CALL 9B WAIT
- 9C PUSHF 9D POPF 9E SAHF 9F LAHF
- A0 MOV A1 MOV A2 MOV A3 MOV
- A4 MOVSB A5 MOVSW A6 CMPSB A7 CMPSW
- A8 TEST A9 TEST AA STOSB AB STOSW
- AC LODSB AD LODSW AE SCASB AF SCASW
- B0 MOV B1 MOV B2 MOV B3 MOV
- B4 MOV B5 MOV B6 MOV B7 MOV
- B8 MOV B9 MOV BA MOV BB MOV
- BC MOV BD MOV BE MOV BF MOV
- C0 ??? C1 ??? C2 RET C3 RET
- C4 LES C5 LDS C6 MOV C7 MOV
- C8 ENTER C9 LEAVE CA RETF CB RETF
- CC INT CD INT CE INTO CF IRET
-
- D000 - D007 ROL D008 - D00F ROR
- D010 - D017 RCL D018 - D01F RCR
- D020 - D027 SHL D028 - D02F SHR
- D030 - D037 ??? D038 - D03F SAR
- D040 - D047 ROL D048 - D04F ROR
- D050 - D057 RCL D058 - D05F RCR
- D060 - D067 SHL D068 - D06F SHR
- D070 - D077 ??? D078 - D07F SAR
- D080 - D087 ROL D088 - D08F ROR
- D090 - D097 RCL D098 - D09F RCR
- D0A0 - D0A7 SHL D0A8 - D0AF SHR
- D0B0 - D0B7 ??? D0B8 - D0BF SAR
- D0C0 - D0C7 ROL D0C8 - D0CF ROR
- D0D0 - D0D7 RCL D0D8 - D0DF RCR
- D0E0 - D0E7 SHL D0E8 - D0EF SHR
- D0F0 - D0F7 ??? D0F8 - D0FF SAR
-
- D100 - D107 ROL D108 - D10F ROR
- D110 - D117 RCL D118 - D11F RCR
- D120 - D127 SHL D128 - D12F SHR
- D130 - D137 ??? D138 - D13F SAR
- D140 - D147 ROL D148 - D14F ROR
- D150 - D157 RCL D158 - D15F RCR
- D160 - D167 SHL D168 - D16F SHR
- D170 - D177 ??? D178 - D17F SAR
- D180 - D187 ROL D188 - D18F ROR
- D190 - D197 RCL D198 - D19F RCR
- D1A0 - D1A7 SHL D1A8 - D1AF SHR
- D1B0 - D1B7 ??? D1B8 - D1BF SAR
- D1C0 - D1C7 ROL D1C8 - D1CF ROR
- D1D1 - D1D7 RCL D1D8 - D1DF RCR
- D1E0 - D1E7 SHL D1E8 - D1EF SHR
- D1F0 - D1F7 ??? D1F8 - D1FF SAR
-
- D200 - D207 ROL D208 - D20F ROR
- D210 - D217 RCL D218 - D21F RCR
- D220 - D227 SHL D228 - D22F SHR
- D230 - D237 ??? D238 - D23F SAR
- D240 - D247 ROL D248 - D24F ROR
- D250 - D257 RCL D258 - D25F RCR
- D260 - D267 SHL D268 - D26F SHR
- D270 - D277 ??? D278 - D27F SAR
- D280 - D287 ROL D288 - D28F ROR
- D290 - D297 RCL D298 - D29F RCR
- D2A0 - D2A7 SHL D2A8 - D2AF SHR
- D2B0 - D2B7 ??? D2B8 - D2BF SAR
- D2C0 - D2C7 ROL D2C8 - D2CF ROR
- D2D2 - D2D7 RCL D2D8 - D2DF RCR
- D2E0 - D2E7 SHL D2E8 - D2EF SHR
- D2F0 - D2F7 ??? D2F8 - D2FF SAR
-
- D300 - D307 ROL D308 - D30F ROR
- D310 - D317 RCL D318 - D31F RCR
- D320 - D327 SHL D328 - D32F SHR
- D330 - D337 ??? D338 - D33F SAR
- D340 - D347 ROL D348 - D34F ROR
- D350 - D357 RCL D358 - D35F RCR
- D360 - D367 SHL D368 - D36F SHR
- D370 - D377 ??? D378 - D37F SAR
- D380 - D387 ROL D388 - D38F ROR
- D390 - D397 RCL D398 - D39F RCR
- D3A0 - D3A7 SHL D3A8 - D3AF SHR
- D3B0 - D3B7 ??? D3B8 - D3BF SAR
- D3C0 - D3C7 ROL D3C8 - D3CF ROR
- D3D3 - D3D7 RCL D3D8 - D3DF RCR
- D3E0 - D3E7 SHL D3E8 - D3EF SHR
- D3F0 - D3F7 ??? D3F8 - D0FF SAR
-
- D4 AAM D5 AAD D6 ??? D7 XLAT
- D8 ??? D9 ??? DA ??? DB ???
- DC ??? DD ??? DE ??? DF ???
- E0 LOOPNZ E1 LOOPZ E2 LOOP E3 JCXZ
- E4 IN E5 IN E6 OUT E7 OUT
- E8 CALL E9 JMP EA JMP EB JMP
- EC IN ED IN EE OUT EF OUT
- F0 LOCK F1 ??? F2 REPNZ F3 REPZ
- F4 HLT F5 CMC F6 TEST F7 TEST
- F8 CLC F9 STC FA CLI FB STI
- FC CLD FD STD
-
- FE00 - FE07 INC FE08 - FE0F DEC
- FE10 - FE17 ??? FE18 - FE1F ???
- FE20 - FE27 ??? FE28 - FE2F ???
- FE30 - FE37 ??? FE38 - FE3F ???
- FE40 - FE47 INC FE48 - FE4F DEC
- FE50 - FE57 ??? FE58 - FE5F ???
- FE60 - FE67 ??? FE68 - FE6F ???
- FE70 - FE77 ??? FE78 - FE7F ???
- FE80 - FE87 INC FE88 - FE8F DEC
- FE90 - FE97 ??? FE98 - FE9F ???
- FEA0 - FEA7 ??? FEA8 - FEAF ???
- FEB0 - FEB7 ??? FEB8 - FEBF ???
- FEC0 - FEC7 INC FEC8 - FECF DEC
- FED0 - FED7 ??? FED8 - FEDF ???
- FEE0 - FEE7 ??? FEE8 - FEEF ???
- FEF0 - FEF7 ??? FEF8 - FEFF ???
-
- FF00 - FF07 INC FF08 - FF0F DEC
- FF10 - FF17 CALL FF18 - FF1F ???
- FF20 - FF27 JMP FF28 - FF2F ???
- FF30 - FF37 PUSH FF38 - FF3F ???
- FF40 - FF47 INC FF48 - FF4F DEC
- FF50 - FF57 CALL FF58 - FF5F ???
- FF60 - FF67 JMP FF68 - FF6F ???
- FF70 - FF77 PUSH FF78 - FF7F ???
- FF80 - FF87 INC FF88 - FF8F DEC
- FF90 - FF97 CALL FF98 - FF9F ???
- FFA0 - FFA7 JMP FFB0 - FFBF PUSH
- FFB8 - FFB7 ??? FFC0 - FFCF INC
- FFC8 - FFC7 DEC FFC8 - FFCF ???
- FFD0 - FFD7 CALL FFD8 - FFDF ???
- FFE0 - FFE7 JMP FFE8 - FFEF ???
- FFF0 - FFF7 PUSH FFF8 - FFFF ???
- .PA
- INPUT AND OUTPUT PORTS:
- -----------------------
-
- Description PC/XT AT PCjr
-
- DMA Controller 1 000h-00Fh 000h-01Fh ...
- Interrupt Controller 1 020h-021h 020h-03Fh 020h-027h
- Timer 040h-043h 040h-05Fh 040h-047h
- PPI (Keyboard) 060h-063h ... 060h-067h
- AT Keyboard ... 060h-06Fh ...
- DMA Page Register 080h-083h 080h-09Fh ...
- NMI Mask Register 0Ah 070h-07Fh 0A0h-0A7h
- AT Interrupt Controller 2 ... 0A0h-0BFh ...
- PCjr Sound Generator ... ... 0C0h-0C7h
- AT DMA Controller 2 ... 0C0h-0DFh ...
- AT Clear/Reset 80287 ... 0F0h-0F1h ...
- AT 80287 Math Coprocessor ... 0F8h-0FFh ...
- Joystick 200h-20Fh 200h-207h 200h-207h
- PC/XT Expansion Unit 210h-217h ... ...
- AT Secondary Parallel Printer ... 278h-27Fh ...
- Primary Serial Port 3F8h-3FFh 3F8h-3FFh 2F8h-2FFh
- Secondary Serial Port 2F8h-2FFh 3F8h-3FFh ...
- Prototype Card 300h-31Fh 300h-31Fh ...
- Fixed Disk 320h-32Fh 1F0h-1F8h ...
- Primary Parallel Printer 378h-37Fh 378h-37Fh ...
- PC/XT SDLC (Mainframe Comm) 380h-38Fh ... ...
- AT Secondary Bisynch Comm ... 380h-38Fh ...
- AT Primary Bisynch Comm ... 3A0h-3AFh ...
- Monochrome Adapter/Printer 3B0h-3BFh 3B0h-3BFh ...
- Color Graphics Adapter 3D0h-3DFh 3D0h-3DFh ...
- Diskette Controller 3F0h-3F7h 3F0h-3F7h 0F0h-0FFh
- .PA
- INTERRUPT REFERENCE:
- --------------------
-
- BIOS SERVICES & FUNCTION INTERRUPTS:
-
- INT 05h - BIOS Print Screen
-
- Send Screen Image to Printer
-
- INT 10h - BIOS Video Control
-
- AH = 00h Set Video Mode
- AH = 01h Set Cursor Size
- AH = 02h Set Cursor Position
- AH = 03h Read Cursor Position
- AH = 04h Read Light Pen Position
- AH = 05h Set Active Display Page
- AH = 05h AL = 80h Get Display Page Register
- AH = 05h AL = 81h Set CPU Display Page Register
- AH = 05h AL = 82h Set CRT Display Page Register
- AH = 05h AL = 83H Set CPU & CRT Display Page Register
- AH = 06h Scroll Window Up
- AH = 07h Scroll Window Down
- AH = 08h Read Character and Attribute
- AH = 09h Write Character and Attribute
- AH = 0Ah Write Character
- AH = 0Bh Set Color Palette
- AH = 0Ch Write Pixel Dot
- AH = 0Dh Read Pixel Dot
- AH = 0Eh Write Character as TTY
- AH = 0Fh Get Current Video Mode
- AH = 10h AL = 00h JR - Set One Palette Register
- AH = 10h AL = 01h JR - Set Border Register
- AH = 10h AL = 02h JR - Set All Palette Registers
- AH = 13h AT - Write Character String
-
- INT 11h - BIOS Equipment List
-
- Get List of Assigned Equipment
-
- INT 12h - BIOS Memory Available
-
- Get Available Memory Size in K-Bytes
-
- INT 13h - BIOS Disk Services
-
- AH = 00h Reset Disk System
- AH = 01h Get Disk Status
- AH = 02h Read Disk Sectors
- AH = 03h Write Disk Sectors
- AH = 04h Verify Disk Sectors
- AH = 05h Format Disk Track
- AH = 08h AT - Get Current Drive Parameters
- AH = 09h AT - Initialize Fixed-Disk Parameter Tables
- AH = 0Ah AT - Read Long
- AH = 0Bh AT - Write Long
- AH = 0Ch AT - Seek to Cylinder
- AH = 0Dh AT - Alternate Disk Reset
- AH = 10h AT - Test for Drive Ready
- AH = 11h AT - Recalibrate Drive
- AH = 14h AT - Controller Diagnostics
- AH = 15h AT - Get Disk Type
- AH = 16h AT - Change of Disk Status
- AH = 17h AT - Set Disk Type
-
- INT 14h - BIOS Serial Port Control
-
- AH = 00h Initialize Serial Port Parameters
- AH = 01h Send One Character
- AH = 02h Receive One Character
- AH = 03h Get Serial Port Status
-
- INT 15h - BIOS Cassette Control
-
- AH = 00h Turn Cassette Motor ON
- AH = 01h Turn Cassette Motor OFF
- AH = 02h Read Data Blocks
- AH = 03h Write Data Blocks
-
- INT 15h - BIOS Device Control
-
- AH = 80h AT - Device Open
- AH = 81h AT - Device Close
- AH = 82h AT - Device Program Termination
- AH = 83h AT - Event Wait
-
- INT 15h - BIOS Joystick Services
-
- AH = 84h AT - Joystick Support
-
- INT 15h - BIOS System Request
-
- AH = 85h AT - System Request Key Pressed
-
- INT 15h - BIOS Device Services
-
- AH = 86h AT - Wait
- AH = 87h AT - Move Memory Block
-
- INT 15h - BIOS Memory Management
-
- AH = 88h AT - Get Extended Memory Size
- AH = 89h AT - Switch to Virtual Memory
-
- INT 15h - BIOS Device Services
-
- AH = 90h AT - Device Busy Loop
- AH = 91h AT - Set Flag and Complex Interrupt
-
- INT 16h - BIOS Keyboard Control
-
- AH = 00h Read Next Keyboard Character
- AH = 01h Report whether Character Ready
- AH = 02h Get Shift Status
- AH = 03h AL = 00h JR - Reset Typematic
- AH = 03h AL = 01h JR - Increase Initial Delay
- AH = 03h AL = 02h JR - Increase Continuing Delays
- AH = 03h AL = 03h JR - Increase Both Delays
- AH = 03h AL = 04h JR - Turn Typematic OFF
- AH = 04h AL = 00h JR - Turn Click OFF
- AH = 04h AL = 01h JR - Turn Click ON
-
- INT 17h - BIOS Printer Control
-
- AH = 00h Send One Byte to Printer
- AH = 01h Initialize Printer
- AH = 02h Get Printer Status
-
- INT 18h - BIOS BASIC
-
- Switch Control to ROM BASIC
-
- INT 19h - BIOS Bootstrap
-
- Reset Computer
-
- INT 1Ah - BIOS Time Services
-
- AH = 00h Read Current Clock Count
- AH = 01h Set Current Clock Count
- AH = 02h AT - Read Real Time Clock
- AH = 03h AT - Set Real Time Clock
- AH = 04h AT - Read Date from Real Time Clock
- AH = 05h AT - Set Date in Real Time Clock
- AH = 06h AT - Set Alarm
- AH = 07h AT - Reset Alarm
-
-
- DOS INTERRUPT FUNCTIONS:
-
- 20h Program Terminate, Come to Normal Ending
- 21h Major DOS Function Call
- 22h Terminate Address
- 23h Break Address
- 24h Critical Error Handler Address
- 25h Absolute Disk Read
- 26h Absolute Disk Write
- 27h Terminate Program, but Stay Resident
- 2Fh Print Spool Control (DOS 3.0+ Versions Only)
-
-
- INT 21h - DOS FUNCTIONS
-
- AH = 00h Program Normal Terminate
- AH = 01h Keyboard Input with Echo
- AH = 02h Display Output
- AH = 03h Serial Port Input
- AH = 04h Serial Port Output
- AH = 05h Printer Output
- AH = 06h Direct Keyboard or Display I/O
- AH = 07h Direct Keyboard Input without Echo
- AH = 08h Keyboard Input without Echo
- AH = 09h Display String
- AH = 0Ah Buffered Keyboard Input
- AH = 0Bh Check Keyboard Input Status
- AH = 0Ch Clear Keyboard and Do Function
- AH = 0Dh Reset Disk
- AH = 0Eh Select Current Drive
- AH = 0Fh Open File
- AH = 10h Close File
- AH = 11h Search for First Matching Filename
- AH = 12h Search for Next Matching Filename
- AH = 13h Delete File
- AH = 14h Read Sequential File Record
- AH = 15h Write Sequential File Record
- AH = 16h Create File
- AH = 17h Rename File
- AH = 19h Report Current Drive
- AH = 20h Set Disk Transfer Area
- AH = 1Bh Get FAT Information, Current Drive
- AH = 1Ch Get FAT Information, Any Drive
- AH = 21h Read Random File Record
- AH = 22h Write Random File Record
- AH = 23h Get File Size
- AH = 24h Set Random Record Field
- AH = 25h Set Interrupt Vector
- AH = 26h Create Program Segment
- AH = 27h Read Random File Records
- AH = 28h Write Random File Records
- AH = 29h Parse Filename
- AH = 2Ah Get Date
- AH = 2Bh Set Date
- AH = 2Ch Get Time
- AH = 2Dh Set Time
- AH = 2Eh Set Disk Write Verification
- AH = 2Fh Get DTA Address
- AH = 30h Get DOS Version Number
- AH = 31h KEEP: Advanced Terminate but Stay Resident
- AH = 33h Get/Set Control Break
- AH = 35h Get Interrupt Vector
- AH = 36h Get Disk Free Space
- AH = 38h Get Country-Dependent Information
- AH = 39h MKDIR: Make Directory
- AH = 3Ah RMDIR: Remove Directory
- AH = 3Bh CHDIR: Change Current Directory
- AH = 3Ch CREAT: Create File
- AH = 3Dh Open File
- AH = 3Eh Close File Handle
- AH = 3Fh Read from File or Device
- AH = 40h Write to File or Device
- AH = 41h Delete File
- AH = 42h Move File Pointer
- AH = 43h CHMOD: Get/Set File Attributes
- AH = 44h IOCTL: I/O Control for Device Drivers
- AH = 45h DUP: Duplicate File Handle
- AH = 46h CDUP: Force Handle Duplication
- AH = 47h Get Current Directory
- AH = 48h Allocate Memory
- AH = 49h Free Allocated Memory Block
- AH = 4Ah SETBLOCK: Modify Allocated Memory Block
- AH = 4Bh EXEC: Load and Execute Subprogram
- AH = 4Ch Terminate Process
- AH = 4Dh Get Return Code of Subprogram
- AH = 4Eh FIND FIRST: Start Filename Search
- AH = 4Fh Continue Filename Search
- AH = 54h Get Verify State
- AH = 56h Rename File
- AH = 57h Get/Set File Date and Time
- AH = 58h Get/Set Memory Allocation Strategy
-
-
- DOS 3.0 SPECIFIC FUNCTIONS FOR INTERRUPT 21h
-
- AH = 59h Get Extended Error Code
- AH = 5Ah Create Temporary File
- AH = 5Bh Create New File
- AH = 5Ch Lock/Unlock File Access
- AH = 62h Get PSP Address
- .PA
- BIOS-DOS PARAMETERS AND MEMORY LOCATIONS:
- -----------------------------------------
-
- BIOS Disk Status Code Byte Returned in AL:
-
- 01h = Bad Command
- 02h = Address Mark Not Found
- 03h = Write Attempted on Write-Protected Disk
- 04h = Sector Not Found
- 06h = Disk Removed
- 08h = DMA Overrun
- 09h = DMA Across 64K Boundary
- 0Ah Motor Startup Time
- 10h = Bad CRC
- 20h = Disk Controller Failed
- 40h = Seek Failed
- 80h = Disk Timed Out
-
-
- BIOS Serial Port Success/Failure Code Bit Settings Returned in AH:
-
- 0 = Data Ready
- 1 = Overrun Error
- 2 = Parity Error
- 3 = Framing Error
- 4 = Break Detected
- 5 = Transmission Buffer Register Empty
- 6 = Transmission Shift Register Empty
- 7 = Port Timed-Out
-
-
- BIOS Serial Port Modem Status Code Bit Settings Returned in AL:
-
- 0 = Delta Clear to Send
- 1 = Delta Set Ready
- 2 = Trailing Edge Ring Detected
- 3 = Change,receive Line Signal Detected
- 4 = Clear to Send
- 5 = Data Set Ready
- 6 = Ring Detected
- 7 = Receive Line Signal Detected
-
-
- BIOS Printer Success/Failure Status Code Bit Settings Returned in AH:
-
- 0 = Printer Timed Out
- 1 = Unused
- 2 = Unused
- 3 = I/O Error
- 4 = Selected
- 5 = Out of Paper
- 6 = Acknowledge
- 7 = Not Busy
-
-
- DOS DISK STATUS BYTE CODE BITS:
-
- 0 = Invalid Disk Command
- 1 = Disk Address Mark Not Found
- 2 = Disk Sector Not Found: Damaged or Not Formatted
- 3 = DMA Disk Error
- 4 = CRC (Cyclical Redundancy Check) Failed
- 5 = Disk Controller Chip Failed
- 6 = Seek to Track Failed
- 7 = Disk Timed-Out, Failed to Respond in Allotted Time
-
-
- DISK BASE TABLE (10 bytes):
-
- 00h Specify Byte 1: Step Rate Time, Head Unload Time
- 01h Specify Byte 2: Head Load Time, DMA Mode
- 02h Wait Time Until Diskette Drive Motor Turned OFF
- 03h Bytes per Sector:
- 0 = 128
- 2 = 512
- 3 = 1,024
- 04h Last Sector Number
- 05h Gap Length between Sectors for Read/Write
- 06h Data Length when Sector Length Not Specified
- 07h Gap Length between Sectors for Formatting
- 08h Data Value Stored in Formatted Sectors
- 09h Head Settle Time
-
-
- ALLOCATED MEMORY BLOCKS:
-
- F0000h Permanent ROM Area: ROM-BIOS, ROM BASIC, Boot Diagnostics
- E0000h Cartridge ROM Area (PC JR)
- D0000h Cartridge ROM Area (PC JR)
- C0000h BIOS Extensions (XT Disk)
- B0000h Conventional Display Memory (PC, XT, and AT)
- A0000h Display Memory Expansion
- 90000h User RAM, to 640K
- 80000h User RAM, to 576K
- 70000h User RAM, to 512K
- 60000h User RAM, to 448K
- 50000h User RAM, to 384K
- 40000h User RAM, to 320K
- 30000h User RAM, to 256K
- 20000h User RAM, to 192K
- 10000h User RAM, to 128K: Maximum Normally Allowed for PC JR
- 00000h User RAM, to 64K: Used by Operating System Software
-
-
- MAIN DOS INTERRUPT MEMORY LOCATIONS:
-
- 00h - 00000h Division by Zero
- 01h - 00004h Trace or Single-Step through Program (for Debugging)
- 02h - 00008h Non-Maskable Interrupt (Used by Hardware Debuggers)
- 03h - 0000Ch Set Break Points in Program (for Debugging)
- 04h - 00010h Arithmetic Overflow
- 05h - 00014h BIOS Print Screen Function Routine
- 08h - 00020h Hardware Clock Tick, for Real Time Interrupts
- 09h - 00024h Keyboard Input
- 0Dh - 00034h CRT Vertical Retrace, for Video Control
- 0Eh - 00038h Disk Attention Request
- 0Fh - 0113Ch Printer Control
- 10h - 00040h BIOS Video Display Functions
- 11h - 00044h BIOS Equipment List
- 12h - 00048h BIOS Memory Size
- 13h - 0004Ch BIOS Disk Functions
- 14h - 00050h BIOS Communications Functions
- 15h - 00054h BIOS Cassette Tape Functions
- 16h - 00058h BIOS Keyboard Functions
- 17h - 0005Ch BIOS Printer Functions
- 18h - 00060h ROM BASIC Language
- 19h - 00064h BIOS Computer Bootstrap (Reset) Routine
- 1Ah - 00068h BIOS Time and Date Functions
- 1Bh - 0006Ch BIOS Keyboard Control-Break
- 1Ch - 00070h Clock Tick
- 1Dh - 00074h Points to Table of Video Control Parameters
- 1Eh - 00078h Points to Disk Base Table
- 1Fh - 0007Ch Points to High Video Graphics Characters
- 20h - 00080h BIOS Program Terminate
- 21h - 00084h DOS Functions
- 22h - 00088h DOS Program-Terminate Custom Programmed Routine
- 23h - 0008Ch DOS Control-Break Custom Programmed Routine
- 24h - 00090h DOS Critical Error Custom Programmed Routine
- 25h - 00094h DOS Absolute Disk Read
- 26h - 00098h DOS Absolute Disk Write
- 27h - 0009Ch DOS Program Terminate, but Stay Resident
- 44h - 00110h Points to PC JR Low Video Graphics Characters
- 48h - 00120h PC JR Keyboard Translation
- 49h - 00124h Points to Translation Table for Keyboard Devices
-
-
- MEMORY LOCATIONS OF BIOS & DOS PARAMETERS:
-
- 00410h (2-Byte Word) Assigned Equipment List
- 00413h (2-Byte Word) Usable Memory Size in K,
- (BIOS Interrupt 12h Returns this Word)
- 0041Ah (2-Byte Word) Beginning of BIOS Keyboard Buffer
- 0041Ch (2-Byte Word) End of BIOS Keyboard Buffer
- 00441h (One Byte) Disk Status Code
- 00449h (One Byte) Current Video Mode
-
- 0044Ah (One 2-Byte Word) Screen Width in Text Columns
- 0044Eh (One 2-Byte Word) Screen Location Offset
- 00450h (Eight 2-Byte Words) Cursor Locations for the 8
- Separate Video Pages.
- 00462h (One Byte) Current Display Page Number
- 00504h (One Byte) Mimic A Two-Disk System
- (for Systems with only One Disk Drive)
- 00510h (One 2-Byte Word) Default DS (Data Segment) Value
- .PA
- BIBLIOGRAPHY:
- -------------
-
- (This is a suggested reference list and is by no means
- meant to be comprehensive. There are many more books available
- that are just as valuable).
-
-
- Crayne, Charles A. and Girard, Dian, THE SERIOUS ASSEMBLER. NY:
- Simon and Schuster Trade Publishing Group, 1985. A nice in-
- expensive reference.
-
- Dorner, Joe, ASSEMBLY LANGUAGE ROUTINES FOR THE IBM PC. NY:
- Brady Communications Company, Inc. (Simon & Schuster), 1985.
- A reference for writing assembly language subroutines for
- Basic programming.
-
- Duncan, Ray, ADVANCED MS DOS. Redmond, WA: Microsoft Press, 1986.
- A thorough DOS reference.
-
- IBM, DISK OPERATING SYSTEM (DOS 3.1) & MANUAL. Boca Raton, FL:
- International Business Machines Corporation, 1985.
-
- IBM, DISK OPERATING SYSTEM TECHNICAL REFERENCE MANUAL (DOS 3.1).
- Boca Raton, FL: International Business Machines
- Corporation, 1985.
-
- INTEL, 8086/8088/8087/80186/80188 PROGRAMMER'S POCKET REFERENCE
- GUIDE. Santa Clara, CA: Intel Corporation, 1982.
-
- Kamin, Jonathan, MS DOS POWER USER'S GUIDE. Berkeley, CA: Sybex
- Inc., 1986. A good batch file programming reference.
-
- Lafore, Robert, ASSEMBLY LANGUAGE PRIMER FOR THE IBM PC & XT.
- NY: The Waite Group (New American Library), 1984. An excellent
- tutorial on 8086 assembly language programming.
-
- Microsoft, MICROSOFT MACRO ASSEMBLER & MANUAL. Bellevue, WA:
- Microsoft Corporation, 1984.
-
- Morgan, Christopher L., BLUEBOOK OF ASSEMBLY ROUTINES FOR THE IBM
- PC & XT. NY: The Waite Group (New American Library), 1984. A
- reference of example routines in 8086 assembly language.
-
- Norton, Peter, THE PETER NORTON PROGRAMMER'S GUIDE TO THE IBM PC.
- Bellevue, WA: Microsoft Press, 1985. An excellent reference to
- DOS and ROM BIOS functions and interrupts.
-
- Norton, Peter, INSIDE THE IBM PC. NY: Brady Communications Company,
- Inc. (Simon & Schuster), 1985. Systems hardware/software
- reference.