home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpmhelp / zdasm.hlp < prev    next >
Text File  |  1994-07-27  |  15KB  |  269 lines

  1. Introduction
  2. Command Format
  3. Operation
  4. Parameter File Input
  5. COM File Input
  6. Source File Output
  7. Usage Notes
  8. :Introduction
  9. ZDASM  is  a  CP/M-based  Z80 disassembler which takes a  COM  file  and  an 
  10. optional parameter file as input and produces an assembler-compatible source 
  11. code  file  as  output.   The  parameter file is  read  by  ZDASM  prior  to 
  12. processing the COM file.  Its format is given in a help message typed to the 
  13. user  console by ZDASM.   The help message is accessed by running ZDASM with 
  14. no command line parameters.   The format of the command line parameters used 
  15. to cause ZDASM to disassemble a COM file is also given in the help  message.  
  16. The COM file may be up to 64K in size.
  17. :Command Format
  18. The command format is:
  19.  
  20.        ZDASM  fname1<.COM>  <fname2<.Z80>>
  21.  
  22. where  fname2  defaults  to  fname1 if not given (both may  be  prefixed  by 
  23. 'device:' if desired).
  24.  
  25. A  parameter file will be produced automatically by ZDASM on the same  drive 
  26. as  the COM file if one does not exist when ZDASM is invoked.   The  entries 
  27. are  message data entries produced by scanning the COM file for  strings  of 
  28. printable characters, CR, LF, TAB, NULL, and 0FFH.  If a string 8 characters 
  29. or longer is found, it is flagged as a message.  The parameter file produced 
  30. is  a printable ASCII file and may thus be scanned by the user and  modified 
  31. for further disassembly passes using a text editor.
  32. :Operation
  33. ZDASM  makes  two passes through the COM file:  the first to set  up  label, 
  34. subroutine, and usage tables, and the second to produce the source code.  In 
  35. addition,  it  scans the parameter file to set up default table values prior 
  36. to processing the COM file.   The COM file may be up to 64K in size and  any 
  37. location  may  be labeled and/or set to indicate one of four types of  code: 
  38. instructions,  message  data,  byte data,  and word data.   The  default  is 
  39. instructions.   Message  data  indicates  that  DEFB directives  are  to  be 
  40. produced with multiple bytes on one line (as many as will fit),  produced as 
  41. either  quoted strings if printable or hexadecimal constants if  not.   Byte 
  42. data produces DEFB directives with 1 byte per line.  Word data produces DEFW 
  43. directives  with 1 word per line.   Instructions produce ZILOG-mnemonic  Z80 
  44. source  code  statements.   Instructions  which are unique to  the  Z80  are 
  45. generated with a comment flag ('tabtab;Z80') following the source code.
  46.  
  47. When  processing  instructions  in  pass  1,   operands  are  examined   for 
  48. instruction  and data memory references.   For instruction references (calls 
  49. and  relative and absolute jumps) the label map is set  appropriately.
  50. ~
  51. For calls, the subroutine map is set to the destination address.  For  data èreferences,  the  label map is set and also the usage map is set  to  either 
  52. byte or word data, subject to the following rules:
  53.  
  54.  * Only  forward  references are  allowed  to flag locations as byte data or
  55.    word  data  in  pass 1 so that locations already processed  will  not  be 
  56.    changed.
  57.  
  58.  * Once a location is flagged as byte or word data by a memory reference, it
  59.    will not be changed by following code.
  60.  
  61.  * If a location is flagged as byte, word, or message data by the  parameter
  62.    file, it will not be changed by memory references.
  63.  
  64. For word constant register loads,  the label map is set.   The label may  be 
  65. erroneous,  but  ZDASM cannot tell whether constants are addresses or  data, 
  66. and  doing it this way allows the user to get a cross-referenced listing  of 
  67. the  source code produced and determine the difference manually.   For  byte 
  68. constant  register loads,  the constant is always treated as data;  the user 
  69. will  have to examine to determine whether the data is actually  an  address 
  70. LSB  or MSB.
  71.  
  72. The  contents of word data in the COM file is also used to create label  map 
  73. entries during pass 1.
  74.  
  75. If  the last byte of a message is printable but with its msb  set,  DEFM  is 
  76. produced instead of DEFB with the msb of the last character cleared.
  77. :Parameter File Input
  78. The PAR file must be on the same disk as the COM file;  this may be any disk 
  79. (specified via A:,  B:,  etc) or the default disk if no device is specified.  
  80. The Z80 file will be created on the same disk as the COM file (with the same 
  81. base  name  and a .Z80 extension) if no output specification is given or  on 
  82. any  disk if specified.   Extensions need not be specified on the  input  or 
  83. output filenames,  however,  they will be used if given.   The default input 
  84. file  extension  is COM and the default output file extension is  Z80.   The 
  85. extension used for the parameter file is always PAR (and the same base  name 
  86. as the input file).
  87.  
  88. Each  line of the parameter file contains a usage specification for a  range 
  89. of addresses.  Later lines override earlier lines.  This fact may be used to 
  90. decrease the number of lines in the parameter file in some cases (by setting 
  91. a  block to one type,  then overwriting specific entries within  that  range 
  92. with another type).
  93.  
  94. Leading  zeros are not required on hex addresses (trailing 'H' must  NOT  be 
  95. included) in the parameter file.   All PAR file input may be mixed upper and 
  96. lower case characters.   Many different characters may be used as delimiters 
  97. before the hex addresses (space,  comma,  colon,  dash,  and tab).   The 1st 
  98. character of each line must be a specification character, followed by either 
  99. one  or two hex addresses (all separated by at least one delimiter).
  100.  
  101. If a pair of addresses are required, the 2nd need not be given if it is  theèsame as the first (i.e., a 1-byte 'range' only requires one address).  Blank 
  102. lines are allowable in the parameter file;  they are ignored.   Comments may 
  103. be entered on any parameter file specification line following the  addresses 
  104. (separated by at least 1 delimiter).  For example:
  105.  
  106.        M: 123-126      4-letter message: DEFB 'ABCD'
  107.        B: 223-225      Three DEFB directives
  108.        W: 103-106      Two DEFW directives
  109.        L: 105          Label the 2nd DEFW
  110.  
  111. Word data specifications must indicate an even number of bytes.
  112.  
  113. All  addresses  in the parameter file are absolute memory  addresses  (i.e., 
  114. where the file executes not where it loads).
  115. :COM File Input
  116. The  COM file is assumed to contain Z80 code/data ORGed to 100H.   If it  is 
  117. desired  to  disassemble  code ORGed at some other  location  in  memory,  a 
  118. parameter  file  may be created with an 'offset' entry giving  the  starting 
  119. address.   If the program ends prior to the last location of the saved file, 
  120. the end address may be given in the parameter file with an 'end' entry.  For 
  121. example:
  122.  
  123.        O: 0            File is ORGed at absolute location 0
  124.        E: 7F           and ends at absolute location 7F
  125.  
  126. The  offset given is used as the address following the END directive at  the 
  127. end of the source code file output (this will be 100H if none given).
  128. :Source File Output
  129. Status information and file error conditions (r/w,  open,  close, and create 
  130. errors) are reported to the user console.  Parameter file input is echoed to 
  131. the console as processed.   Errors on parameter file input lines are printed 
  132. following the line containing the error (before the CR/LF).
  133.  
  134. Source file output may optionally be directed to the console (via 'CRT:'  or 
  135. 'CON:') or to the printer (via 'LST:' or 'LPT:').  (Note, however, that tabs 
  136. are not converted to spaces on output to non-file-structured devices).   All
  137. output  from ZDASM is done through BDOS (no direct BIOS I/O),  so  control-P
  138. (toggle  console output to printer),  control-S (start/stop console output), 
  139. and control-C (return to CPM) are hooked up.   The present version of  ZDASM 
  140. does not check for control-C directly, so to get control-C to work, you must 
  141. stop console output via control-S, wait for it to stop, then type control-C.  
  142. Note that control-C typed while stopped via control-S is handled directly by 
  143. CPM;  thus  any output file opened by ZDASM will not be closed prior to  the 
  144. return to the CPM prompt.
  145.  
  146. The user console need only handle CR,  LF, and upper/lower case (and tabs if 
  147. output is to the console as explained above).
  148.  
  149. Byte data constants are output as operands in hex and are shown in quotes in 
  150. the comments field if printable.
  151. èAll  Z80-only  instructions are flagged with 'Z80' in  the  comments  field.  
  152. There  are  always exactly 2 tabs prior to the ';' on any commented line  so 
  153. that  the  Z80-only  flags may all be eliminated with a  text  editor  after 
  154. disassembly:
  155.  
  156.        change "Z80 '"    to "'" in all
  157.    then change "^I^I;Z80" to ""  in all
  158.  
  159. Labels  are  produced of the form 'Lnnnn:' where nnnn is the address of  the 
  160. label.   Label  map entries are produced in pass 1 and deleted in pass 2  as
  161. each  label  is  generated.   Any left over label map entries  are  used  to 
  162. produce 'Lnnnn EQU 0nnnnH' directives prior to the END directive produced at 
  163. the  end  of the source output.   Each EQU directive is commented  with  the 
  164. usage type at the location pointed to (I=instructions,  B=byte data,  W=word 
  165. data,  and  M=message data).   These will generally be pointers to byte  and 
  166. word data areas outside the bounds of the COM file (if they are addresses).
  167.  
  168. Subroutines  (i.e.,  any  location  which  is  the  destination  of  a  CALL 
  169. instruction)  is flagged by a ';***' comment line prior to the start of  the 
  170. subroutine.
  171. :Usage Notes
  172.   -  Look in the Z80 output for labeled DEFB and DEFW directives followed by
  173.      unlabeled instructions to find missed messages and tables.
  174.  
  175.   -  Usσá 'Lº entrie≤ iε thσ paramete≥ filσ t∩ separatσ message≤ (es≡á DEFM⌐ ì
  176. áááááiµ thσ message≤ arσ no⌠ referenceΣ directl∙ b∙ thσ code«á  Label≤ forcσ ì
  177. áááááthσ star⌠ oµ ß ne≈ sourcσ outpu⌠ line.
  178.  
  179.   -  The Z80 file size is generally 6-8 times as large as the COM file
  180.  
  181.   -  If you don't wish ZDASM to create a parameter file (i.e., if you wish
  182.      to force the entire file to be interpreted as instructions), you can
  183.      'SAVE 0 fname.PAR' (prior to disassembly of fname.COM) which will take
  184.      up no disk space (1 directory entry).  This is an easier way to create
  185.      a null file than with a text editor.
  186.  
  187.   -  Thσá directivσá message≤ iε ZDAS═ ('DEFB'¼á 'DEFW'¼á etc⌐á arσá locateΣ ì
  188. ááááástartinτá a⌠ locatioε 103╚ oµ ZDASM.CO═ s∩ thσ use≥ ma∙ patcΦ t∩á matcΦ ì
  189. áááááhi≤á assemble≥á (D├á insteaΣá oµ DEF═ fo≥ M80⌐ o≥á hi≤á preferencσá (D┬ ì
  190. áááááinsteaΣ oµ DEFB)«á  Thesσ message≤ arσ al∞ ┤ character≤ ma°á terminateΣ ì
  191. áááááwitΦ ß blanδ iµ les≤ thaε ┤ characters.
  192. ~
  193.   -  Followinτá thσá directivσ message≤ arσ thσ defaul⌠ filσá extension≤á (│ ì
  194. áááááletter≤ pe≥ extension║á paramete≥ file¼á inpu⌠ file¼á theε outpu⌠ file⌐ ì
  195. áááááanΣá thσ non-file-structureΣ devicσ tablσ whicΦ ma∙ bσ patcheΣ pe≥ use≥ ì
  196. ááááápreference«á  Thσá devicσ tablσ consist≤ oµ ß serie≤ oµ entrie≤ oµá thσ ì
  197. áááááforφ º device:',devcode«  Devcodσ mus⌠ bσ onσ oµ thσ following:
  198.  
  199.         255 - Bit bucket
  200.         254 - Console
  201.         253 - Printerè        252 - Serial I/O (reader/punch)
  202.  
  203.      Thσá devicσ codσ terminate≤ eacΦ entr∙ (msΓ i≤ set)¼á ░ terminate≤á thσ ì
  204. ááááátable«á  Thesσá device≤ ma∙ currentl∙ onl∙ bσ useΣ fo≥á output«á  Zero≤ ì
  205. áááááfollowinτ thσ tablσ arσ provideΣ fo≥ tablσ expansion.
  206.  
  207.   -  Onσ difficult∙ iε workinτ witΦ disassembleΣ sourcσ file≤ i≤ tha⌠ iµ thσ ì
  208. áááááuse≥á make≤á late≥ sourcσ change≤ whicΦ adΣ o≥ deletσá byte≤á froφá thσ ì
  209. áááááresultinτ CO═ file¼ i⌠ mus⌠ stil∞ producσ ß workinτ program«  Thσ firs⌠ ì
  210. áááááthinτá t∩ d∩ abou⌠ thi≤ is¼á oµ course¼á t∩ separatσ al∞ datß location≤ ì
  211. áááááfroφ instructioε locations.
  212. ~
  213.      Once this is done however, one additional problem exists: word constant
  214.      register load instructions.  These constants may be data or  addresses.
  215.      ZDASM assumes they are addresses.  If they are  actually  data,  moving
  216.      the destination will change the value of the constant.   Therefore, the
  217.      user must examine all occurances of the following to  assure  that  the
  218.      label refers to the referenced address:
  219.  
  220.                        LD      BC,Lnnnn
  221.                        LD      DE,Lnnnn
  222.                        LD      HL,Lnnnn
  223.                        LD      SP,Lnnnn
  224.                        LD      IX,Lnnnn
  225.                        LD      IY,Lnnnn
  226.  
  227.      Thi≤ i≤ easie≥ thaε i⌠ sounds¼á sincσ iµ thσ labe∞ doe≤ no⌠ fal∞ withiε ì
  228. áááááthσá bound≤á oµ thσ program¼á doe≤ no⌠ fal∞ withiε ß datß areßá iεá thσ ì
  229. áááááprogram¼ o≥ fall≤ iε thσ middlσ oµ aε instruction¼ i⌠ wil∞ resul⌠ iε aε ì
  230. áááááEQ╒ statemen⌠ beinτ generateΣ a⌠ thσ enΣ oµ thσ source.
  231.  
  232.      Lo≈á valueΣá constant≤á arσá generall∙á no⌠á ßá problem¼á sincσá sourcσ ì
  233. ááááámodificatioε won'⌠ changσ thei≥ values«á  However¼á thesσ arσ generall∙ ì
  234. áááááeas∙á t∩ finΣ anΣ eliminatσ mos⌠ oµ thσ worΣ constan⌠á registe≥á loads«  ì
  235. áááááThσá use≥ ma∙ searcΦ fo≥ 'L00º t∩ finΣ them«á  Thesσ wil∞ man∙ time≤ bσ ì
  236. áááááloo≡ counts¼á size≤ oµ datß areas¼á etc.¼ s∩ arσ ver∙ instructivσ abou⌠ ì
  237. áááááprograφá operation«á  Thσá use≥á ma∙ searcΦ fo≥á LDI╥á instruction≤á iε ì
  238. áááááparticula≥á anΣ kno≈ tha⌠ thσ 'L─  BC,Lnnnnº prio≥ i≤ ß loaΣ oµ ßá datß ì
  239. ááááávalue«  Lo≈ valueΣ label≤ ma∙ als∩ refe≥ t∩ fixeΣ CP═ location≤ sucΦ a≤ ì
  240. ááááá'CAL╠á  L0005º fo≥ BDO╙ call≤ anΣ reference≤ t∩ thσ defaul⌠ FC┬ a⌠á 5C╚ ì
  241. áááááanΣ TBU╞ a⌠ 80H.
  242.  
  243.   -  ┴á mucΦ morσ thorn∙ probleφ exist≤ iε regarΣ t∩ bytσ datß constant≤á iµ ì
  244. áááááthσ CO═ filσ wa≤ produceΣ b∙ ß PL/═ compile≥ (anΣ probabl∙ othe≥á high-ì
  245. áááááleve∞á languagσ compiler≤ also)«á  Thi≤ i≤ tha⌠ iµ tw∩ memor∙ location≤ ì
  246. áááááarσá referenceΣ iε sequencσ whosσ addresse≤ havσ thσ samσá uppe≥á byte¼ ì
  247. áááááonl∙ thσ lowe≥ bytσ i≤ reloaded:
  248.  
  249.        0100  21 34 12          LD      HL,L1234
  250.        0103  7E                LD      A,(HL)
  251.        0104  2E 38             LD      L,LOW L1238è       0106  77                LD      (HL),A
  252.         ...                    ...
  253.        1234  00        L1234:  DEFB    0
  254.         ...                    ...
  255.        1238  00        L1238:  DEFB    0
  256.  
  257.      ZDASM assumes all byte values in instructions are data.  The user must
  258.      determine by examination of the code if this is actually the case.
  259.  
  260.   -  Iε modifyinτ thσ resultinτ sourcσ followinτ disassembly¼á thσ use≥ mus⌠ ì
  261. ááááágenerall∙á determinσá a≤á sooε a≤ possiblσ whicΦá addresse≤á referenceΣ ì
  262. áááááoutsidσá thσ bound≤ oµ thσ prograφ arσ datß area≤ useΣ b∙á thσá prograφ ì
  263. ááááá(i.e.¼á DEF╙ area≤ immediatel∙ followinτ thσ prograφ codσ whicΦ mus⌠ bσ ì
  264. ááááámoveΣá iµá thσ enΣ oµ thσ prograφ moves)«á  Thσ comment≤ placeΣ oεá thσ ì
  265. áááááEQU≤ a⌠ thσ enΣ oµ thσ sourcσ b∙ ZDAS═ (generall∙ ';I'¼á ';B'¼ o≥ ';W'⌐ ì
  266. áááááarσ ver∙ helpfu∞ iε thi≤ determination«  ';Mº i≤ generall∙ no⌠ founΣ oε ì
  267. áááááaε EQ╒ unles≤ thσ paramete≥ filσ i≤ incorrect.
  268.  
  269.