You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1057 lines
30 KiB

Z80DIS22.DOC____________________________________________01_May_87
Table of Contents of the full Z80DIS manual..
---------------------------------------------
Table of Contents - - - Page
SECTION 1: Introduction: Remarks, Copyright, License ..... 3
2: Features of Z80DIS ............................ 7
3: How to use the program: Execution dialog ..... 11
3.1 Basic parameter definition ................ 11
3.2 Definition of the Break Table ............. 16
3.3 Execution pass one ........................ 23
3.4 Execution pass two ........................ 24
4: Tips, tricks, problems, and limitations ...... 25
5: Your first disassembly, a walk-through ....... 35
APPENDIX A: Installation of Z80DIS for your computer ..... 43
B: Error messages produced by Z80DIS ............ 49
C: Anomaly messages from Auto Assignment ........ 55
D: PRN output file format with sample ........... 61
E: MAC output file format with sample ........... 79
F: Break file format with sample ................ 83
G: Revision history of Z80DIS ................... 85
How to get the Z80DIS manual
----------------------------
Copies of the Z80DIS USER MANUAL are available by mail. I am
asking a nominal charge of $ 20.00 which includes the manual,
postage, handling, and an update notification service. The
program itself is not available by mail as I do not have
extensive, multi-format disk copy capability. The notification
service will consist of a letter to you anytime a new version is
released so that you may be on the lookout for it.
To order copies of the Z80DIS USER MANUAL by mail, send a request
with your name, address, and a check for $ 20.00 to --
Kenneth Gielow
79 Tulip Lane
Palo Alto, CA 94303
1
Z80DIS22.DOC____________________________________________01_May_87
This walk through the use of Z80DIS is taken from chapter 5
(page 35) of the larger Z80DIS manual.
- O -
Your first disassembly, a walk-through
--------------------------------------
The purpose of this section is to walk you through a disassembly
using what I would consider the "best" first guess values for all
interactive program inputs. I suggest using the widely available
public domain program D.COM for your first disassembly so that
you may follow along with the example.
Z80DIS is a batch program with user interactive set-up of the
control parameters. Disk scratch files are used during the
disassembly. I suggest the following file disposition for a two
disk drive system: (If you are not using D.COM then substitute
your file name as required.)
On drive A - Z80DIS.COM, Z80DIS.000, Z80DIS.001, Z80DIS.002
On drive B - D.COM
During the Z80DIS set up phase direct files as follows -
PRN to your list device (LST:) or to drive B
Scratch file Z80DIS.$$$ to drive A.
Initially suppress the MAC file by directing to NONE:
If you have a third disk drive, direct the scratch file to that
drive.
This optimizes data flow by minimizing disk head action.
The following assumes that you start with the A drive as your
selected default drive. Your CP/M input prompt should read:
A>
You start Z80DIS by typing "Z80DIS" with no parameters. The
program will prompt you for inputs. In most cases, default
entries are shown in reduced intensity already occupying the data
field. If you type only the RETURN key, the default will be used.
--
2
Z80DIS22.DOC____________________________________________01_May_87
INITIAL PARAMETER SETTING
After a brief sign-on message, you will be asked to supply the
following information.
|================================================================
| Please enter INPUT file name: ______________
| OUTPUT file name: ______________
| LISTING file name: ______________
| Descriptive TITLE: __________________________________________
|
| file LOAD address: ____ HEX
| disassembly START address: ____ HEX
| disassembly STOP address: ____ HEX
|
| Do you wish to run a FULL output (as opposed to XREF only)?
| On which disk do you wish the scratch file to reside? (A-G)
|
| Do You wish to process all Z80 codes (as opposed 8080 subset)?
|
| Are all inputs OK so far?
|================================================================
Each question is presented one-at-a-time from the top. Only a
single suggested answer will be given for each. You actually have
lots of choices possible. For details of the purpose, defaults,
editing capability and error checking for each answer please
refer to the larger manual.
The following comments apply to all user inputs to Z80DIS:
File Names - The program wants a CP/M style file name in the
standard form D:FILENAME.EXT. Each file name, but the very
first, has default values selected to simplify your job.
Letter Case - Upper and lower case letters are equivalent and
will echo as upper case.
Editing Your Input - All inputs, except single character Y or N
answers, must be terminated by a carriage return (shown as
<CR>). Until the <CR> terminator is typed, you may correct
the entry as required by backspacing.
Terminating Z80DIS - You may terminate Z80DIS by the usual
control-C (shown as ^C) at any time. At later stages of
execution, only the then current phase will be aborted to
provide a graceful recovery of the processing done to that
point.
Notation - In the examples to follow, carriage return is
sometimes indicated by the notation <cr>.
3
Z80DIS22.DOC____________________________________________01_May_87
-----------------------------------------------------------------
INPUT file name: ______________
Type the name of your binary file to be disassembled. As I
have suggested placing this file on the B drive, you will need a
B: drive prefix. The program will default the file extension to
b:d<cr>
The program will echo:
B:D.COM
-----------------------------------------------------------------
OUTPUT file name: ______________
Z80DIS will show the default in reduced intensity as
NONE:.MAC. Simply type carriage return (<cr>). The program will
echo:
NONE:
This will suppress generation of the D.MAC assembly code file.
-----------------------------------------------------------------
LISTING file name: ______________
Z80DIS will show the default in reduced intensity as
B:D.PRN. I suggest that you change this to direct printer output
by typing:
lst:<cr>
The program will echo:
LST:
-----------------------------------------------------------------
Descriptive TITLE: __________________________________________
Type the date and time of your disassembly followed by a
carriage return. The program will not interpret your input. For
the example, I typed:
Demonstration<cr>
-----------------------------------------------------------------
file LOAD address: ____ HEX
Accept the default value ( 0100 hex) by typing a carriage
return.
-----------------------------------------------------------------
4
Z80DIS22.DOC____________________________________________01_May_87
disassembly START address: ____ HEX
Accept the default value ( 0100 hex) by carriage return.
-----------------------------------------------------------------
disassembly STOP address: ____ HEX
Accept the default value by carriage return.
-----------------------------------------------------------------
Do you wish to run a FULL output
(as opposed to XREF only) ? (Y/N) _
Type Y to select the full output. No carriage return is
needed. Only four characters are accepted for input: y Y n N. All
others are ignored and the program will beep your terminal "bell"
to indicate bad input.
-----------------------------------------------------------------
On which disk do you wish the scratch file to reside? (A-G) _
Type <cr> to accept the default (A:) drive.
-----------------------------------------------------------------
Do you wish to process all Z80 codes
(as opposed 8080 subset only) ? (Y/N) _
As D.COM is an older 8080 CP/M program you should type N. If
your program is known to contain Z80 instructions, type Y.
-----------------------------------------------------------------
Are all inputs OK so far? (Y/N) _
If all looks OK, type Y. A no (N) response will return you
to the first question again.
-----------------------------------------------------------------
__
5
Z80DIS22.DOC____________________________________________01_May_87
BREAK TABLE BUILDING
After you have answered Y (yes) to the "Inputs OK?" question,
the screen will clear and your terminal will now display the
following:
|================================================================
| >>> Z80DIS version 2.2
| You may now enter CONTROL BREAK addresses to define the type
| of disassembly for each section of the code; each control
| break defines the first address of a section which ends at the
| beginning of the next section-1 byte.
|
| NOTE: You may select AUTOMATIC CONTROL BREAK assignment by the
| artificial intelligence expertise of Z80DIS by typing *
|
| TO SEE DETAILS OF YOUR COMMAND CHOICES, type H
|
| ?: _
|================================================================
A break table tells a disassembler how to interpret the binary
bytes that it is examining. A disassembler must know whether the
bytes are instructions or data in order to proceed.
First type the letter H just to see your choices. Then type the
character * to select automatic break table operation. Z80DIS
will ask for confirmation: Type Y to confirm.
The * command will generate the break table for you. After
automatic assignment returns, you will be shown the break table.
You may list the table to your printer if you wish by typing P.
If Z80DIS had trouble reaching a decision about some of the code,
anomaly reports will be displayed and you will be given an
opportunity to print these reports. I got one message with the
version of D.COM that I was running. Note that D.COM replaces
itself nearly every time you run it, and your copy will contain
different file names in the directory part.
Just for now, print any anomalies if you wish then proceed to
exit the break defining process.
To exit the break table building process enter the Q command
(Quit). As you have not saved a copy of the changed break table
to a file, Z80DIS will ask you to either save the file or type
the quit command again. Type Q a second time to start
disassembly.
__
6
Z80DIS22.DOC____________________________________________01_May_87
DISASSEMBLY PASS ONE
As the disassembly begins the code is cracked according to the
break table, the cross reference list structure is linked into
the PASCAL heap space in upper memory, the cracked code is copied
with context information onto a scratch file called Z80DIS.$$$.
During pass one, your console screen will display the following:
|================================================================
| Beginning disassembly...
| THIS IS Pass 1
| working at 05F0 Asc
|================================================================
The "working at" line is animated and will show the current
address and disassembly mode. In the illustrated case the program
has just finished processing the file D.COM and the last break
type was ascii.
--
DISASSEMBLY PASS TWO
During the second pass all user output files and listings are
produced and the scratch file is erased. During pass two, your
console screen will display the following:
|================================================================
| THIS IS Pass 2
| scratch file contains 396 records of 30 bytes each
| Free memory space remaining after XREF table storage
| assignments is 29144 bytes out of the original 31300
| bytes (or 6.9 percent used.)
|
| LISTING cross references
|
| LISTING Subroutines
|
| PRODUCING disassembled output files
| Processing external label equates
| Working at 05F0 Asc
|================================================================
The informative messages about file and memory space will let you
see just how close to capacity the program is running.
During this pass your printer will start to print the output.
The "working at" line is animated and will show the current
address and disassembly mode. In the illustrated case the program
has just finished pass two processing of the file D.COM.
When the program is complete, Z80DIS will ring your terminal
"bell" twice and display the following sign-off message:
7
Z80DIS22.DOC____________________________________________01_May_87
|================================================================
| END of Pass 2
|================================================================
8
Z80DIS22.DOC____________________________________________01_May_87
This section is taken from Appendix A of the Z80DIS user manual
(page 43).
- O -
Installation of Z80DIS for your computer
----------------------------------------
CP/M is a generic operating system, but most of the terminals
used with CP/M have features not anticipated by CP/M. These
features include CURSOR ADDRESSing and BRIGHT/DIM display of
characters. This program utilizes such features, when available,
to improve the operator interaction. As the program itself is
written in TURBO PASCAL, the TURBO installation support feature
has been used to make this adaptation easy.
Therefore, before you use this program, it must be installed to
your particular terminal, by providing it with information
regarding control characters required for certain functions. This
installation is easily performed using the program ZDINSTAL which
is described in this section.
The following files are part of this program installation package
and must be present during terminal installation (the three
ZDINSTAL.* files may then be deleted after installation if no
other terminals are to be supported)..
Z80DIS.COM - Z80DIS main program file
Z80DIS.000 - overlay file
Z80DIS.001 - overlay file
Z80DIS.002 - overlay file
ZDINSTAL.COM - the installation program
ZDINSTAL.MSG - text of ZDINSTAL messages
ZDINSTAL.DTA - terminal characteristics data
- THE INSTALLATION PROCEDURE -
Start the installation of Z80DIS by typing "ZDINSTAL" at your
terminal. Select Screen installation from the main menu.
A numbered menu listing a collection of popular terminals will
appear, inviting you to choose one by entering its number.
If your terminal is mentioned, just enter the corresponding num-
ber, and the installation is complete. Before installation is
actually performed, you are asked the question..
Do you want to modify the definition before installation? _
9
Z80DIS22.DOC____________________________________________01_May_87
This allows you to modify one or more of the values being instal-
led as described in the following. If you do not want to modify
the terminal definition, just type N, and the installation will
complete by asking you the operating frequency of your CPU to
establish parameters for timing loops.
If your terminal is not on the menu, however, you must define the
required values yourself. The values can most probably be found
in the manual supplied with your terminal.
Enter the number corresponding to None of the above and answer
the questions one by one as they appear on the screen.
In the following, each command you may install is described in
detail. Your terminal may not support all the commands that can
be installed. If so, just bypass the command not needed by typing
<CR> in response to the prompt. If Delete line, Insert line, or
Erase to end of line is not installed, the function will be
emulated in software, slowing screen performance somewhat.
Commands may be entered either simply by pressing the appropriate
keys or by entering the decimal or hexadecimal ASCII value of the
command. If a command requires the two characters <ESC> (escape)
and = (equal), you may
either
Press first the Esc key, then the =. The entry will be
echoed with appropriate labels, i.e. <ESC> =.
or
Enter the decimal or hexadecimal values separated by spaces.
Hexadecimal values must be preceded by a dollar-sign. Enter e.g.
27 61 or $1B 61 or $1B $3D which are all equivalent.
The two methods cannot be mixed in the same definition, i.e. once
you have entered a non-numeric character, the rest of that
command must be defined in that mode, and vise versa.
A - (hyphen) entered as the very first character is used to
delete a command, and the text Nothing to be echoed.
-----------------------------------------------------------------
Terminal type: _
Enter the name of the terminal you are about to install.
When you complete ZDINSTAL, the values will be stored, and the
terminal name will appear on the initial list of terminals. If
you later need to re-install Z80DIS to this terminal, you can do
that by choosing it from the list.
-----------------------------------------------------------------
10
Z80DIS22.DOC____________________________________________01_May_87
Send an initialization string to the terminal? _
If you want to initialize your terminal when Z80DIS starts
(e.g. to download commands to programmable function keys), you
answer Y for yes to this question. If not, just hit <CR>.
If you answer Y, you may choose between entering the command
directly or defining a file name containing the command string.
The latter is a good idea if the initialization string is long,
as a string to program a number of function keys would be.
-----------------------------------------------------------------
Send a reset string to the terminal? _
Here, you may define a string to be sent to the terminal
when Z80DIS terminates. The above description of the initializa-
tion command applies here.
-----------------------------------------------------------------
CURSOR LEAD-IN command: _
Cursor Lead-in is a special sequence of characters which
tells your terminal that the following characters are an address
on the screen on which the cursor should be placed.
When you define this command, you are asked the following
supplementary questions:
CURSOR POSITIONING command to send between line and column: _
Some terminals need a command between the two numbers defi-
ning the row and column cursor address.
CURSOR POSITIONING command to send after line and column: _
Some terminals need a command after the two numbers defining
the row and column cursor address.
-----------------------------------------------------------------
Column first? _
Most terminals require the address in the format: first ROW,
then COLUMN. If this is the case on your terminal, answer N. If
your terminal wants COLUMN first, then ROW, then answer Y.
-----------------------------------------------------------------
OFFSET to add to LINE _
Enter the number to add to the LINE (ROW) address.
-----------------------------------------------------------------
11
Z80DIS22.DOC____________________________________________01_May_87
OFFSET to add to COLUMN _
Enter the number to add to the COLUMN address.
-----------------------------------------------------------------
Binary address? _
Most terminals need the cursor address sent in binary form.
If that is true for your terminal, enter Y. If your terminal
expects the cursor address as ASCII digits, enter N. If so, you
are asked the supplementary question..
2 or 3 ASCII digits? _
Enter the number of digits in the cursor address for your
terminal.
-----------------------------------------------------------------
CLEAR SCREEN command: _
Enter the command that will clear the entire contents of
your screen, both foreground and background, if applicable. If
you have no command to clear the screen, enter - (hyphen).
-----------------------------------------------------------------
Does CLEAR SCREEN also HOME cursor? _
This is normally the case; if it is not so on your terminal,
enter N, and define the cursor HOME command.
-----------------------------------------------------------------
DELETE LINE command: _
Enter the command that deletes the entire line at the cursor
position.
-----------------------------------------------------------------
INSERT LINE command: _
Enter the command that inserts a line at the cursor posi-
tion.
-----------------------------------------------------------------
ERASE TO END OF LINE command: _
Enter the command that erases the line at the cursor posi-
tion from the cursor position through the right end of the line.
-----------------------------------------------------------------
START OF 'LOW VIDEO' command: _
If your terminal supports different video intensities, then
define the command that initiates the DIM video here. If this
command is defined, the following question is asked:
12
Z80DIS22.DOC____________________________________________01_May_87
START OF 'NORMAL VIDEO' command: _
Define the command that sets the screen to show characters
in 'normal' video.
-----------------------------------------------------------------
Number of rows (lines) on your screen: _
Enter the number of horizontal lines on your screen.
-----------------------------------------------------------------
Number of columns on your screen: _
Enter the number of column positions on your screen.
-----------------------------------------------------------------
Delay after CURSOR ADDRESS (0-255 ms): _
Delay after CLEAR, DELETE, and INSERT (0-255 ms): _
Delay after ERASE TO END OF LINE and HIGHLIGHT On/Off (0-255 ms):
Enter the delay in milliseconds required after the functions
specified. <CR> means 0 (no delay).
-----------------------------------------------------------------
Is this definition correct? _
If you have made any errors in the definitions, enter N. You
will then return to the terminal selection menu. The installation
data you have just entered will be included in the installation
data file and appear on the terminal selection menu, but instal-
lation will not be performed.
When you enter Y in response to this question, you are
asked..
-----------------------------------------------------------------
Operating frequency of your microprocessor in MHz (for delays): _
As the delays specified earlier are depending on the
operating frequency of your CPU, you must define this value. If
your processor operates at a fractional speed (i.e. 2.5 Mhz),
enter the next larger integer value (3 Mhz for this example.)
-----------------------------------------------------------------
The installation is finished, installation data is written to
Z80DIS, and you return to the outer menu. New installation data
is also saved in the installation data file, and the new terminal
will appear on the terminal selection list when you run ZDINSTAL
in the future.
13
Z80DIS22.DOC____________________________________________01_May_87
Significant Changes in Version 2.2 Released 05/01/87
----------------------------------
A. Format Improvements
1) Output format changes for M80 compatibility:
Singular references now flagged with $ not #
Inferred references flagged with ?
No : (colon) on labels on EQU statements
No address on END card
Shortened some comments to fit on M80 list page
Output M80 pseudo-op '.Z80' just before 'ORG' line
2) Comments showing Reference-type on EQU external lines are
now preceded by a semi-colon (;).
3) Lower-case 'end' operation changed to upper-case 'END'.
4) Z80DIS now remembers the numeric value on any immediate
load of the C register:
LD C,nn
When 'nn' is in the range 0..40 hex, the value is translated
and shown on the following BDOS call as a CP/M function.
CALL BDOS ; fcnNN= XXXXXXXXXXXXXXX
5) DEFS pseudo op now modified to specify filling value
found in the region. i.e.
DEFS 1234H,00H
When automatic assignment has set the break table, this is
the right thing to do because the space area is known to be
filled with only a single value throughout. That is not true
for a user supplied SPC break but the DEFS is still output
as if it was true.
6) Changed format of DEFB print out to try to eliminate the
alternation of long and short lines. Also changed automatic
break table handling of ASCII data to better resynchronize
text lines with the labeled bytes. These are esthetic
improvements.
B. Bug Fixes
1) Fixed bug causing occasional truncation of default file
name generated for break table save or load.
2) Changed two remaining cases of incorrect address compares
to use the correct 16-bit unsigned compare function.
3) Fixed bug when size of SPC blocks get larger than biggest
positive integer.
4) Fixed bug causing early termination under certain obscure
circumstances involving interactions with zero filled SPC
regions.
14
Z80DIS22.DOC____________________________________________01_May_87
5) Address table conversion (break type ADT) was modified to
change format of output from
DEFW (xxxx) to
DEFW xxxx
C. Algorithm & Heuristic Improvements
1) Added new controls on recognition of ASCII text. Now
check further into string composition for number of common
punctuation characters and for number of rare punctuation
characters in the string. If excessive, then not ASCII.
2) Improved distinction between strong and weak address
references to converge the automatic break assignment with
fewer passes over the code.
D. Speed-ups and memory savings
1) Cross Reference Information moved out of real memory to
virtual memory on a disk file.
2) Label table records reduced in size by eliminating XREF
linkage pointers.
Significant Changes in Version 2.1 Released 01/12/86
----------------------------------
1) BUG CORRECTION: During automatic break table creation in
version 2.0, the codes DD34, DD35, DD36, FD34, FD35, FD36 were
not correctly recognized. This resulted in false assumptions
about the legality of some Z80 code regions which were then
thought to be data regions rather than instruction regions. This
has been corrected in version 2.1.
2) IMPROVEMENT IN HANDLING JR REFERENCES: In disassembling
8080 coding, instruction jumps and calls use 3-byte addressing;
that is unambiguous and not easily misinterpreted. With Z80 code,
ASCII text blocks contain codes that are easily mistaken for Z80
relative jumps; that creates apparent jump references to code
within 128 bytes before or after the misinterpreted byte. The
ASCII blank (20 hex) is especially bad as it looks exactly like a
"JR NZ,xxxx" code. Version 2.1 has been much improved to distrust
relative jump references as a basis for declaring a region to be
instructions. Version 2.1 examines corroborative evidence to
distinguish ASCII data from instruction codes.
3) OTHER IMPROVEMENTS: The entire Expert system comprising
the Automatic Break Determination feature was enhanced to yield a
more complete analysis of the code structure.
15
Z80DIS22.DOC____________________________________________01_May_87
Highlights of Changes in Version 2.0 Released 12/01/85
------------------------------------
1) AUTOMATIC BREAK TABLE CREATION: When the program asks for
break table inputs, you may now enter '*' which will trigger a
detailed analysis of the structure and relationships of the input
code.
2) The COM file and overlay files for Z80DIS no longer need
to be on your default disk drive.
3) The cross-reference listing now shows the break table
region of residency for each label.
4) Overflow of memory or disk space during pass 1 will not
abort execution.
5) You may now disassemble direct to your printer by
specifying LST: as the list file name.
6) You may now suppress creation of either .PRN or .MAC
output files.
7) The default name for the break table save file is now the
same name as that of your input file.
_________________________________________________________________
CP/M is a registered trademark of Digital Research Inc., TURBO
PASCAL is a trademark of Borland International, Z-80 is a
trademark of Zilog Corp.
16