home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPMHELP / Z80MR.HZP / Z80MR.HLP
Text File  |  2000-06-30  |  25KB  |  615 lines

  1. Introduction
  2. Editing MAC Source Files
  3. Phased Code - General
  4. Phased Code - Label+OFFSET Method
  5. Invoking the Assembler
  6. Assembler Syntax - Fields
  7. Label Field
  8. Operation and Operand Fields
  9. Comment Field
  10. Numbers and Bases
  11. Operators - Arithmatic, Logical & Conditional
  12. Macros
  13. Pseudo-Ops
  14. Pseudo-Ops - Conditional Assembly
  15. Listing Options Pseudo-Ops (.PRN)
  16. Error Reporting
  17. :Introduction
  18. Z80M╥á i≤ ß Z8░ macr∩ assemble≥ witΦ synta° closel∙ followinτ RMA├ anΣá MAC«  ì
  19. I⌠ assemble≤ standarΣ Z8░ mnemonic≤ int∩ aε Inte∞ He° format«á Thσ resultinτ ì
  20. filσá (whicΦá ha≤á ß .HE╪ extension⌐ caε bσ translateΣ t∩ ß .CO═á filσá witΦ ì
  21. LOAD.COM.
  22. :Editing MAC Source Files
  23. Fo≥á thσ mos⌠ par⌠ .MA├ file≤ caε easil∙ bσ translateΣ t∩ .AZ═ witΦ ver∙ fe≈ ì
  24. changes«á Unfortunatel∙á M8░ i≤ a≤ extremel∙ versatilσ assemble≥ whicΦá wheε ì
  25. useΣá t∩á it≤ ful∞ advantagσ contain≤ somσ pseudo-op≤á anΣá directive≤á tha⌠ ì
  26. Z80M╥á doe≤á no⌠á understand«á ╔ wil∞ revea∞ thσ mos⌠ commoεá oµá thesσá anΣ ì
  27. providσ somσ hel≡ oε gettinτ arounΣ theφ iε thi≤ file.
  28.  
  29. Renamσ thσ filσ t∩ havσ ß .AZ═ extension«á Edi⌠ thσ file« Nea≥ thσ beginninτ ì
  30. oµá thσá filσ yo⌡ wil∞ seσ thσ pseud∩ o≡ tha⌠ tell≤ M8░ wha⌠á mnemonic≤á yo⌡ ì
  31. wil∞á bσá using«á M8░ caε handlσ botΦ Z8░ anΣ 808░ mnemonics«á Yo⌡ caεá eveε ì
  32. switcΦ iε thσ middlσ oµ thσ program«á Tw∩ pseudo-op≤ .Z8░ anΣ .808░ tel∞ thσ ì
  33. assemble≥ whicΦ mnemonic≤ t∩ recognize«á Iµ therσ i≤ ß .Z8░ therσ deletσ it« ì
  34. Iµá therσ i≤ ß .808░ therσ yo⌡ wil∞ neeΣ t∩ ruε thσ prograφ througΦ aεá 808░ ì
  35. t∩ Z8░ translato≥ (likσ XLATE2.CO═ oε disδ K17)« 
  36. ~
  37. XLATE▓ i≤ ß grea⌠ translato≥ oε 808░ onl∙ files« I⌠ als∩ wil∞ onl∙ translatσ ì
  38. thσ 808░ mnemonic≤ iε ß filσ tha⌠ ha≤ both« Unfortunatel∙ therσ arσ ß couplσ ì
  39. oµá Z8░ mnemonic≤ tha⌠ arσ thσ samσ a≤ 808░ mnemonic≤ anΣ wil∞ bσá dutifull∙ ì
  40. translateΣ b∙ XLATE2« Thσ probleφ i≤ tha⌠ thσ mnemonic≤ arσ thσ samσ bu⌠ thσ ì
  41. instruction≤ the∙ represen⌠ arσ not«á S∩ thσ filσ wil∞ assemblσ O╦ bu⌠á wil∞ ì
  42. ruε witΦ unpredictablσ results« Aε example.
  43.  
  44.     JP    is a valid Z80 mnemonic. It is also widely used since
  45.         it is an unconditional jump (JMP in 8080)
  46.  
  47.     JP     is also a valid 8080 mnemonic. It is the jump on parity
  48.         instruction.
  49.  
  50. S∩á ß Z8░ J╨ i≤ translateΣ a≤ iµ i⌠ wa≤ thσ 808░ J╨ whicΦ wil∞ makσ i⌠ J╨á ╨ ì
  51. iεá thσá outpu⌠á file«á BaΣ news«á Thi≤ iε itselµ i≤ enougΦ t∩ makσá i⌠á to∩ ì
  52. undependablσá t∩ usσ oε dua∞ mnemoniπ files«á T∩ avoiΣ thσ grieµ yo⌡ caεá d∩ ì
  53. onσ oµ tw∩ things:
  54.  
  55.     Translate the 8080 sections by hand if they are small enough.
  56. ~
  57.     Split the file into smaller files where the mnemonics change.
  58.     Run the 8080 sections through the translator. You can let the
  59.     assembler rejoin the files using the *INCLUDE statement or
  60.     use pip or your editor to rejoin and assemble the whole mess.
  61.  
  62. Macro≤ g∩ througΦ Z80M╥ prett∙ wel∞ fo≥ thσ mos⌠ par⌠ but¼á yo⌡ wil∞ neeΣ t∩ ì
  63. precede the parameters with # signs (including locals).
  64.  
  65. Als∩ therσ arσ somσ macr∩ pseudo-op≤ tha⌠ arσ no⌠ supporteΣ (als∩ no⌠ widel∙ ì
  66. used)«á Iµá somσ onσ write≤ Z80M╥ macro≤ t∩ substitutσ fo≥ thesσ (anΣ ßá MO─ ì
  67. operator⌐á pleasσ senΣ i⌠ iε anΣ we'l∞ includσ i⌠ iε thσ macr∩ librar∙á tha⌠ ì
  68. wσ arσ developinτ fo≥ thi≤ assembler.
  69.  
  70. .phasσ anΣ .dephasσ arσ useΣ t∩ makσ thσ assemble≥ generatσ labe∞á addresse≤ ì
  71. fo≥á somσá othe≥á par⌠ oµ memor∙ thaε wherσ thσ filσ wil∞á bσá loaded«á  Seσ ì
  72. PhaseΣ Codσ fo≥ details.
  73. :Phased Code - General
  74. Onσá oµ thσ limitation≤ oµ thi≤ assemble≥ i≤ thσ lacδ oµ ß .PHAS┼ directive«  ì
  75. Thi≤á directivσ cause≤ thσ assemble≥ t∩ generatσ addresse≤ fo≥á ßá differen⌠ ì
  76. sectioε oµ memor∙ fo≥ label≤ thaε thσ actua∞ placσ thσ codσ i≤ t∩ bσ loaded«  ì
  77. ORGinτá a⌠ highe≥ locatioε late≥ iε thσ prograφ anΣ jumpinτ therσ wil∞ causσ ì
  78. thσá entirσ areß oµ memor∙ betweeε 100╚ anΣ thσ enΣ poin⌠ oµ thσ prograφá t∩ ì
  79. bσ saveΣ resultinτ iε ß hugσ .CO═ filσ wheε loadeΣ witΦ LOAD.COM« 
  80.  
  81. Therσá arσ man∙ way≤ t∩ phasσ codσ anΣ stil∞ enΣ u≡ witΦ ß reasonablσá sizeΣ ì
  82. CO═ file« Herσ ╔ wil∞ presen⌠ tw∩ oµ thσ mos⌠ commoε methods.
  83. :Phased Code- Label+OFFSET Method
  84. Iεá orde≥ fo≥ codσ t∩ bσ assembleΣ iε onσ areß t∩ ruε iε another¼á ou≥á onl∙ ì
  85. concerε i≤ ho≈ thσ addresse≤ arσ calculateΣ b∙ thσ assembler«á Normally¼á aε ì
  86. assemble≥á set≤á ß locatioε counte≥ wheε i⌠ see≤ aεá OR╟á pseudo-op«á A≤á i⌠ ì
  87. produce≤á eacΦá bytσ oµ thσ i⌠ increment≤ thσ locatioε counte≥ t∩á calculatσ ì
  88. thσ nex⌠ address« Iµ i⌠ find≤ ß label¼ i⌠ set≤ thσ label'≤ addres≤ accordinτ ì
  89. t∩ thi≤ locatioε counter«á Thσ programme≥ ha≤ anothe≥ methoΣ oµ settinτá thσ ì
  90. addres≤ oµ labels¼ witΦ EQU« Iµ ever∙ labe∞ iε thσ prograφ take≤ thσ forφ oµ ì
  91. Label+OFFSE╘ wherσ thσ offse⌠ i≤ ß constant¼ theε thσ assemble≥ wil∞ producσ ì
  92. thσá codσ t∩ ruε iε higΦ memor∙ whilσ creatinτ ß filσ tha⌠ wil∞ loaΣ iεá lo≈ ì
  93. memory.
  94. ~
  95. WitΦá thi≤á methoΣá yo⌡ woulΣ spli⌠ thσ abovσ prograφ int∩á tw∩á parts¼á thσ ì
  96. loade≥ anΣ thσ codσ tha⌠ i≤ t∩ bσ relocated« Yo⌡ caε assemblσ thσ loade≥ anΣ ì
  97. picδá aε arbitrar∙ sourcσ addres≤ fo≥ thσ codσ t∩ bσ relocateΣá (sa∙á 200h)«  ì
  98. Theε yo⌡ caε assemblσ thσ relocatablσ portioε witΦ aε higΦ ORG« (8000╚ say)«  ì
  99. No≈ yo⌡ caε joiε thσ tw∩ HE╪ file≤ togethe≥ witΦ DDT.CO═ readinτ iε thσ higΦ ì
  100. portioεá witΦ aε OFFSET«á T∩ ge⌠ thσ offse⌠ usσ DDT'≤ He° suφ anΣ differencσ ì
  101. commanΣ iε thσ forφ of:
  102.  
  103.                    H<desired load address>,<ORG address>
  104.  
  105. Thσá seconΣ numbe≥ wil∞ bσ thσ OFFSET«á  No≈ wσ caε usσ DD╘ t∩ joiε thσá tw∩ ì
  106. files.
  107.  
  108. DDT LOADER.HEX
  109. H200,8000
  110. 8200 8200        ; in this case both numbers are the same (we want
  111.             ; second
  112. IPHASE2.HEX        ; prepare to load file
  113. R8200            ; read in with offset
  114. ^C            ; exit to CPM
  115. SAVE 1 PHASE3.COM    ; and the com file is created
  116. :Invoking the Assembler
  117.  
  118.     Z80MR TEST <carriage return>
  119.  
  120. Thσá assemble≥á wil∞á reaΣ iε thσ filσ TEST.AZ═ froφ thσ curren⌠á drivσá anΣ ì
  121. creatσ aε objec⌠ filσ TEST.HE╪ anΣ ß listinτ filσ TEST.PRN.
  122.  
  123. Eithe≥ oµ thσ outpu⌠ file≤ (o≥ both⌐ ma∙ bσ omitted«á Iε addition¼ thσ file≤ ì
  124. ma∙ bσ locateΣ oε differen⌠ drives« Sincσ thσ sourcσ filσ mus⌠ alway≤ havσ ß ì
  125. .AZ═ extentioε wσ ma∙ usσ thσ extentioε t∩ contro∞ thσ output.
  126.  
  127.     Z80MR TEST.sol
  128.  
  129. Thσ lette≥ iε thσ 'sº positioε tell≤ thσ assemble≥ wherσ t∩ finΣ thσá sourcσ ì
  130. filσá anΣ ma∙ bσ an∙ disδ drivσ lette≥ froφ ┴ t∩ D«á Thσ  lette≥ iε thσá 'oº ì
  131. positioεá tell≤ thσ assemble≥ wherσ t∩ locatσ thσ objec⌠ filσ anΣ ma∙ bσ A-─ ì
  132. a≤á abovσ o≥ ┌ iµ thσ filσ i≤ no⌠ desired«á Thσ lette≥ iε thσá 'lºá positioε ì
  133. tell≤á thσ assemble≥ wha⌠ t∩ d∩ witΦ thσ listinτ file«á I⌠ caε bσ an∙á drivσ ì
  134. lette≥á froφá A-─ o≥ ┌ iµ thσ filσ i≤ no⌠ desired«á Iε additioε thσá listinτ ì
  135. filσ ma∙ bσ sen⌠ t∩ thσ consolσ iµ aε ╪ i≤ iε tha⌠ position.
  136. :Assembler Syntax - Fields
  137. Assembler≤á arσ almos⌠ alway≤ fielΣ orienteΣ somσ t∩ ß greate≥á degreσá thaε ì
  138. others«á ┴á fielΣ i≤ ß flexiblσ positioε iε thσ linσ oµ codσ witΦ respec⌠ t∩ ì
  139. thσ righ⌠ margin« Thi≤ assemble≥ recognize≤ ┤ field≤ iε aε assembl∙ languagσ ì
  140. sourcσ line:  Label, Operation, Operand and Comment
  141.  
  142. Thσá assemble≥ know≤ wheε i⌠ ha≤ reacheΣ thσ enΣ oµ ß fielΣ wheε i⌠á see≤á ß ì
  143. 'fielΣá delimiter'«á Thi≤ caε bσ ß spacσ o≥ ß taΓ fo≥ thi≤ assemble≥á thougΦ ì
  144. somσá requirσá tab≤á s∩ i⌠ i≤ ß gooΣ habi⌠ t∩ alway≤ usσ taΓá character≤á a≤ ì
  145. delimiters.
  146. :Label Field
  147. ┴á symbo∞á i≤á ß worΣ useΣ t∩ represen⌠ ßá number«á Symbol≤á tha⌠á refe≥á t∩ ì
  148. addresse≤á arσá calleΣá labels«á Thσ assignmen⌠ oµ ß numbe≥ t∩ ßá labe∞á caε ì
  149. eithe≥ bσ defineΣ a≤ thσ line≤ below
  150.  
  151. TEN    EQU    10
  152. START    EQU    100H
  153.  
  154. or calculated by the assembler as an address for branching instructions:
  155.  
  156. START:    JP    FINISH
  157.     NOP
  158.     NOP
  159. FINISH:    JP    START
  160.  
  161. Also notice that the label is optional and is only for the programmers
  162. conveniance.
  163. ~
  164. Label≤ mus⌠ appea≥ iε thσ labe∞ field«á Somσ assembler≤ allo≈ yo⌡ t∩á inden⌠ ì
  165. label≤ bu⌠ thi≤ onσ won't.
  166.  
  167.     START    EQU    100H
  168. START:    JP    FINISH 
  169. èWil∞á givσá yo⌡ ß problem«á Thσ EQ╒ mus⌠ bσ iε thσ operatioε fielΣá anΣá thσ ì
  170. labe∞ iε thσ labe∞ field.
  171.  
  172. Mos⌠á assembler≤ requirσ tha⌠ thσ undefineΣ label≤ bσ terminateΣ iε ßá coloε ì
  173. bu⌠ thi≤ assemble≥ doe≤ no⌠ requirσ ß coloε fo≥ symbol≤ iε columε 1.
  174.  
  175. START    JP    FINISH
  176.  
  177. wil∞á no⌠ generatσ aε erro≥ bu⌠ colon≤ arσ anothe≥ gooΣ habi⌠ anΣ als∩á makσ ì
  178. you≥ codσ morσ readable.
  179. ~
  180. Thi≤ assemble≥ onl∙ examine≤ thσ firs⌠ si° character≤ oµ an∙ labe∞ o≥ symbo∞ ì
  181. s∩ tha⌠ iµ thσ followinτ label≤ werσ useΣ iε thσ samσ program
  182.  
  183. FINISH1    EQU    1000H
  184. FINISH2    EQU    2000H
  185.  
  186. A 'D' error (duplicate symbols) would be generated.
  187. :Operation and Operand Fields
  188. Thσá operatioε fielΣ follow≤ thσ labe∞ fielΣ anΣ ma∙ eithe≥ contaiε ß Z8░ o≡ ì
  189. codσá mnemonic¼á aεá assemble≥ directivσ (o≥ pseud∩ op)¼á o≥ ßá macr∩á call«  ì
  190. Assemble≥ directive≤ anΣ macro≤ arσ describeΣ late≥ iε thi≤ file« Thi≤ fielΣ ì
  191. wil∞á usall∙á contaiεá thσá mnemoniπá fo≥á ßá Z8░á instruction«áá Somσáá Z8░ ì
  192. instruction≤á onl∙ usσ thi≤ fielΣ whilσ other≤ contaiε aε operanΣ whicΦ wil∞ ì
  193. bσ locateΣ iε thσ operanΣ field.
  194.  
  195. GOBACK:    OR    A
  196.     RET    Z
  197.     LD    A,0FFH
  198.     RET
  199.  
  200. Thσá wa∙á Z8░á mnemonic≤á werσ designed¼á thσ numbe≥á oµá nmenonic≤á iεá thσ ì
  201. operatioεá portioε oµ instruction≤ i≤ kep⌠ t∩ ß minimuφ sincσá thσá operand≤ ì
  202. reall∙á distinguisΦ thσ difference≤ betweeε simila≥ instructions«á Thσ firs⌠ ì
  203. linσ abovσ i≤ ß gooΣ examplσ oµ this«á Thσ operatioε i≤ aε 'ORº operatioε oε ì
  204. thσá numbe≥á iε thσ accumulato≥ (implied⌐ witΦ anothe≥á register«á I⌠á make≤ ì
  205. sensσ tha⌠ thσ operanΣ shoulΣ bσ thσ registe≥ containinτ thσ othe≥ numbe≥ iε ì
  206. thσá 'ORº operation«á Iε Z8░ assembl∙ languagσ thi≤ i≤ thσ case«á Thσá firs⌠ ì
  207. linσá OR'≤á thσá accumulato≥á witΦ thσ accumualato≥á (useΣá t∩á seσá iµá thσ ì
  208. accumulato≥á contain≤á ß 0)«á Noticσ tha⌠ thσ seconΣ linσ use≤á thσá operanΣ ì
  209. fielΣ t∩ contaiε thσ conditioε fo≥ ß conditiona∞ jum≡ (iε thi≤ casσ thσ zer∩ ì
  210. flag)«á Thσá thirΣá linσ use≤ thσ operanΣ fielΣ t∩ contaiε botΦá thσá targe⌠ ì
  211. registe≥á fo≥á ßá loaΣá anΣá thσá numbe≥á t∩á load«á Thσá las⌠á linσá i≤á aε ì
  212. unconditiona∞á returε whicΦ use≤ thσ samσ operato≥ (RET⌐ a≤ thσá conditiona∞ ì
  213. returεá bu⌠ doe≤ no⌠ usσ thσ operanΣ fielΣ becausσ therσ arσ n∩ conditon≤ t∩ ì
  214. placσ there«á Thi≤ structurσ make≤ Z8░ program≤ mucΦ morσ readablσ thaε 808░ ì
  215. program≤á a≤á wel∞á a≤ makinτ thσá instruction≤á easie≥á t∩á remember«á  Thσ ì
  216. followinτ i≤ thσ samσ codσ writteε witΦ 808░ mnemonics« Noticσ thσ differen⌠ ì
  217. philosoph∙ oε thσ usσ oµ thσ fields.
  218.  
  219. GOBACK:    ORAè    RETZ
  220.     MVI    A,0FFH
  221.     RET
  222.  
  223. Als∩á thσ L─ commanΣ iε thσ Z8░ i≤ useΣ fo≥ al∞ datß move≤ whilσ 808░á user≤ ì
  224. mus⌠ remembe≥ ß differen⌠ mnemoniπ fo≥ differen⌠ type≤ oµ moves.
  225.  
  226.     8080            Z80
  227.     MOV    H,A        LD    H,A
  228.     MVI    H,00        LD    H,00
  229.     LXI    H,0000        LD    HL,0000
  230. :Comment Field
  231. Comment≤ arσ no⌠ limiteΣ t∩ thσ commen⌠ fielΣ anΣ caε actuall∙ bσ thσ entirσ ì
  232. line«á Al∞á assembler≤ recognizσ thσ semicoloε a≤ thσ beginninτ oµ ß commen⌠ ì
  233. anΣ mos⌠ ignorσ thσ res⌠ oµ thσ line«á Fo≥ compatabilit∙ betweeεá assembler≤ ì
  234. i⌠ i≤ ß gooΣ t∩ begiε comment≤ witΦ ß semicolon«á Bu⌠ fo≥ thi≤ assemble≥ thσ ì
  235. followinτ method≤ oµ insertinτ comment≤ arσ gooΣ syntax.
  236.  
  237. 1. Beginning a line with an '*' in column one causes the assembler to ignore
  238. therest of the line except if one of the assembler commands (described below)
  239. immediately follows the asterisk (no embedded spaces).
  240.  
  241. 2. A semicolon will cause the assembler to consider everything following it
  242. to be considered a comment.
  243.  
  244. 3. The first blank encountered following the beginning of the operand field
  245. wil∞ causσ thσ assemble≥ t∩ conside≥ thσ res⌠ oµ thσ linσ t∩ bσ considereΣ ß ì
  246. comment.
  247. :Numbers and Bases
  248. Thσá assemble≥á wil∞á accep⌠á number≤ iε HE╪ (basσ 16⌐ BINAR┘á (basσá 2⌐á o≥ ì
  249. DECIMAL«á He° number≤ mus⌠ enΣ witΦ aε ╚ anΣ binar∙ number≤ mus⌠ enΣ iε ß B« ì
  250. Decima∞ number≤ shoulΣ havσ n∩ suffi° letter« Wheε ß HE╪ digi⌠ begin≤ witΦ ß ì
  251. letter¼ thσ lette≥ shoulΣ bσ precedeΣ witΦ ß 0.
  252.  
  253.     LD    A,0F3H
  254.     OR    01001000B
  255.     LD    HL,4000H+28
  256. :Operators
  257. Arithmetic Operators
  258.  
  259.     +        arithmetic addition.
  260.     -        arithmetic subtraction
  261.     *        arithmetic multiplication
  262.     /        arithmetic division (truncating the result)
  263.  
  264. Logical Operators (Bit Manipulation)
  265.  
  266.     & (or .AND.)    logical AND operation
  267.     ^ (or .OR.)    logical OR operation
  268.     .XOR.        logical exclusive OR operation
  269.     \ (or .NOT.)    logical inversion
  270.     .SHR.        shift left operand to right by right operand
  271.     .SHL.        shift left operand to left by right operand 
  272.     .HIGH.        byte value is assigned the high byte of a 16 bit value
  273.     .LOW.        byte value is assigned the low byte of a 16 bit value
  274. ~
  275. Conditional Assembly Operators ( return    TRUE or FALSE to IF )
  276.  
  277.     = (or .EQU.)    logical equivalence
  278.     > (or .GT.)    greater than
  279.     .UGT.        unsigned greater than
  280.     < (or .LT.)    less than
  281.     .ULT.        unsigned less than
  282. :Macros
  283. Macro≤á havσ ß forφ tha⌠ i≤ uniquσ anΣ mus⌠ bσ followeΣ closel∙ fo≥á correc⌠ ì
  284. results« Thσ genera∞ forφ oµ ß macr∩ is:
  285.  
  286. name    MACRO    #parameter1,#parameter2,....
  287.     instruction
  288.     instruction
  289.     instruction
  290.     .
  291.     .
  292.     .
  293.     ENDM
  294.  
  295. Thσá namσ i≤ thσ symbo∞ tha⌠ wil∞ bσ useΣ t∩ invokσ thσ macro«á MACR╧á i≤á ß ì
  296. keyworΣá tha⌠ wil∞ indicatσ t∩ thσ assemble≥ tha⌠ ß macr∩ i≤ beinτá defined«  ì
  297. Thσá parameter≤á alway≤á mus⌠ begiε witΦ ß '#º sigε iε macro≤ anΣá the∙á arσ ì
  298. seperateΣ b∙ commas«á Thσ instructioε caε bσ Z8░ instructions¼ o≥ an∙ oµ thσ ì
  299. assemble≥ command≤ listeΣ abovσ incudinτ conditionals«á Thσ instructioεá caε ì
  300. als∩á bσá anothe≥ macr∩ cal∞ (calleΣ nesteΣ macros⌐ bu⌠ onl∙ iµá thσá nesteΣ ìèmacr∩ ha≤ beeε alread∙ defined« Thσ END═ keyworΣ tell≤ thσ assemble≥ tha⌠ i⌠ ì
  301. ha≤á reacheΣá thσ enΣ oµ thσ codσ tha⌠ mus⌠ bσ assembleΣ wheε thi≤ macr∩á i≤ ì
  302. called« D∩ no⌠ usσ ß coloε behinΣ thσ macr∩ name.
  303.  
  304. Bu⌠á wha⌠ abou⌠ usinτ addres≤ symbol≤ iε macros┐á Ho≈ caε wσ avoiΣá thσá 'Dº ì
  305. erro≥á iµá wσá cal∞ thσ macr∩ morσ thaε once«á Thσ othe≥ keyworΣá uniquσá t∩ ì
  306. macro≤á i≤á LOCAL«á Thi≤ make≤ thσ assemble≥ generatσ it≤ owεá uniquσá labe∞ ì
  307. ever∙á timσá thσ macr∩ i≤ expandeΣ iε ß program«á Followinτ thσá worΣá LOCA╠ ì
  308. (whicΦ mus⌠ bσ oε thσ seconΣ linσ oµ thσ macro⌐ arσ thσ symbol≤ wσ wan⌠á thσ ì
  309. compile≥ t∩ generatσ uniquσ label≤ for«á Thesσ symbol≤ mus⌠ als∩ bσ procedeΣ ì
  310. witΦ ß '#º sign.
  311.  
  312. AJUMP    MACRO
  313.     LOCAL    #ADR_Z,#BACK
  314.     OR    A
  315.     JR    Z,#ADR_Z
  316.     LD    A,40H
  317.     JR    #BACK
  318. #ADR_Z:    LD    A,04H
  319. #BACK:    LD    DE,0
  320.     ENDM
  321.  
  322. The macro itself is not really useful but it is correct and shows the use
  323. of local labels.
  324. :Pseudo-Ops
  325. ORG    <expr>    ; Sets the origin of the code or section of code. Actually
  326.         ╗ái⌠ set≤ thσ referencσ numbe≥ tha⌠ thσ assemble≥ use≤ t∩
  327. áááááááááááááááá: generatσ addresse≤ fo≥ label≤ anΣ instructions.
  328.         ; <expr> could be a number or a previously defined symbol.
  329.         ; e.g.    ORG    0
  330.         ;       ORG    START
  331.  
  332. END    <symb>    ; Determines the end of an assembly language program. <symb>
  333.         ; if present describes the first executable instruction of
  334.         ; the program.
  335. ~
  336. DW    wordlist
  337. DEFW    wordlist
  338.         ; Both of these have identical meanings. In assembly language
  339.         ; programs, 8 bit values are called bytes and 16 bit
  340.         ; values are called words. Addresses are assembled with the
  341.         ; most significant byte (MSB) following the least significant
  342.         ; byte (LSB) because this is how the microprocessor handles
  343.         ; these values. The DW pseudo-op allows us to describe these
  344.         ; values in the way we are used to (MSB first) and still
  345.         ; assemble correctly for the processor.
  346.         ;    DW    8000H
  347.         ;             will assemble the same as 
  348.         ;    DB    00H
  349.         ;     DB    80H
  350.         ;è        ; If more than one word is to follow a DW following values
  351.         ; should be seperated by commas
  352.         ; e.g.    DW    8000H,0F000H,0000H
  353.         ; The wordlist can also be symbols
  354.         ; e.g.    START:    JP    FINISH
  355.         ;        DW    START,FINISH
  356.         ;      FINISH:    JP    START
  357. DDB    wordlist
  358.         ; This pseudo-op is a way of assembling 16 bit values with
  359.         ; the MSB first (opposite of DW).
  360.         ;    DDB    8000H
  361.         ;            will assemble the same as
  362.         ;    DB    80H
  363.         ;    DB    00H
  364.  
  365. DB    bytelist
  366. DEFB    bytelist
  367. DEFM    bytelist
  368. DATA    bytelist
  369.         ; These four pseudo-ops have identical meanings. The bytelist
  370.         ; can be one byte or multiple bytes seperated with commas.
  371.         ; The bytes can be any mix of symbols, ascii characters in
  372.         ; quotes, or numbers on the same line. This is familiar
  373.         ; code in Kaypro programs:
  374.         ;
  375.         ;ESC    EQU    1BH
  376.         ;CLRSCR    EQU    1AH
  377.         ;CRLF    DDB    0D0AH
  378.         ;
  379.         ;    ORG    100H    
  380.         ;
  381.         ;    LD    DE,MES
  382.         ;    LD    C,9
  383.         ;    CALL    5
  384.         ;    RET
  385.         ;
  386.         ;MES:    DB    CLRSCR
  387.         ;    DB       ESC,'=',12+20H,12+20H
  388.         ;    DB    '*Your Message Here *',CRLF
  389.         ;    DB    '*Or Here*','$'
  390.         ;
  391.         ;    END
  392.         ;
  393.         ; If you've been waiting for an example to enter assemble
  394.         ; and run, try this one out. Just enter it (with out the
  395.         ; semicolons of course) assemble it and run it as described
  396.         ; in AZM-COM.DOC.
  397.         ;
  398.         ; The program clears the screen, positions the cursor at
  399.         ; row 12 column 12 and prints the message using the BDOSè        ; function 9 (print string).   
  400.         ;
  401.         ; The symbol CLRSCR is defined by an EQU to the hex code to
  402.         ; clear the screen on the Kaypro (^Z).
  403.         ;
  404.         ; The cursor positioning sequence on the Kaypro consists of
  405.         ; the two lead-in characters (escape and an equals sign) and
  406.         ; then the row+20H and the column+20H.
  407.         ;
  408.         ; Since the next bytes are just a carriage return, line feed
  409.         ; pair the second part of the message will appear at the
  410.         ; left side of the screen. We could include extra DB's to
  411.         ; position the cursor anywhere on the screen if we like.
  412.         ;
  413.         ; BDOS function 9 (summoned by loading a 9 in the C register
  414.         ; and calling 0005H) prints the characters it finds at the
  415.         ; address in the DE registers until it sees a '$'.
  416. ~    
  417. DS    n
  418. DEFS    n    ; Reserve data space ( n bytes ). This is used to position
  419.         ; allocate or label data storage space in a program. n is
  420.         ; a number describing the number of bytes reserved.
  421.         ;    DS    16
  422.         ; Reserves 16 bytes. The next instruction will be located
  423.         ; 16 bytes from the location counter when the DS was 
  424.         ; encountered.
  425. ~    
  426. label    EQU    <expr>
  427.         ;
  428.         ; The EQU sets the label equal to the expression. The
  429.         ; label should not be terminated with a colon when used
  430.         ; with an EQU pseudo-op. The label can be any symbol
  431.         ; (byte or word) and the <expr> a number in any of the
  432.         ; following forms:
  433.         ;        SWEET    EQU    16       ;decimal
  434.         ;        SWEET    EQU    10H       ;hex
  435.         ;        SWEET    EQU    00010000B  ;binary
  436.         ;
  437.         ; With this assembler the EQU must be located in the
  438.         ; operation field. 
  439.         ; A label defined with an EQU cannot be redefined later
  440.         ; in the program.
  441. ~
  442. label    DEFL    <expr>
  443.         ;
  444.         ; This assigns the value of the <expr> to the label like
  445.         ; the EQU pseudo-op but a label defined with a DEFL can
  446.         ; be redefined later in the program.
  447.  
  448. *INCLUDE    <filename>
  449.         ; This pseudo-op causes the assembler to stop assemblingè        ; lines in the file it is presently in and read in the
  450.         ; file <filename>. It then begins assembling lines in this
  451.         ; included file until it reaches the end of the file when
  452.         ; it returns to the original file and resumes assembling
  453.         ; lines in it once more. The <filename> can be any CPM
  454.         ; filename.ext though if the extent is left off it looks
  455.         ; for the given filename with an extent of .LIB. The asterisk
  456.         ; must appear in column 1 with the word INCLUDE immediately
  457.         ; following with no embedded spaces.
  458.         ;
  459.         ;*INCLUDE     Z80MACRO    ; will begin assembly on
  460.         ; the file Z80MACRO.LIB    
  461. :Pseudo-Ops - Conditional Assembly
  462. IF    <expr>
  463. ELSE
  464. ENDIF
  465.     Conditional assembly is a way of writing a single program so that
  466.     it can be assembled different ways or with different options by
  467.     only changing a couple of lines of codes. When the assembler
  468.     encounters an IF pseudo-op it evaluates the symbol <expr>. IF
  469.     <expr> is non-zero it assembles the following lines until it reaches
  470.     an ELSE or an ENDIF. If <expr> is 0 the lines are ignored until
  471.     the assembler encounters an ELSE or an ENDIF. If the ELSE is
  472.     encounter the assembler begins assembling lines again. The ENDIF
  473.     pseudo-op causes the assembler to resume assembling all lines.
  474.     You can not have an IF without an ENDIF.
  475. ~
  476.     Any of these pseudo-ops must appear in the operation field. 
  477.  
  478. TRUE    EQU    0FFH
  479. FALSE    EQU    0
  480. KPRO2    EQU    TRUE
  481. KPRO10    EQU    FALSE
  482.     
  483.     IF    KPRO2
  484.     
  485. BITPRT    EQU    1CH
  486.  
  487.     ELSE
  488.  
  489. BITPRT    EQU    14H
  490.  
  491.     ENDIF
  492. :Listing Options Pseudo-Ops (.PRN)
  493. There are a number of listing options. All of these options only effect
  494. the print file (.PRN). The options include some for debugging as well as
  495. some for the actual format of the file on the page. The .PRN file is the
  496. basic tool assembly language programmers have for examining the output ofèthe assembler. The pseudo-ops beginning with an asterisk must begin in
  497. column 1.
  498.  
  499. *EJECT
  500. ( or EJEC )    ; The next line of the listing should be placed at the top
  501.         ; of the next page.
  502.  
  503. *HEADING    ; Place the text ( following this command ) on the top of
  504.         ; each page. Usually used to date the listing file.
  505.  
  506. TITLE 'text'    ; Place the text in the quotation marks (either double or
  507.         ; single on the top of each page in the listing file.
  508.  
  509. SPAC n        ; Leave n blank lines in the listing. Used to leave white
  510.         ; space in the file with out using a page break.
  511. ~
  512. *LIST ON
  513. *LIST OFF    ; Turn the listing on or off. This is usually used to omit
  514.         ; long comments or certain sections from the .PRN file.
  515.  
  516. *MACLIST ON
  517. *MACLIST OFF    ; Turn the expansion of macros on or off. Seeing how the
  518.         ; macros are being expanded is handy for optimizing code
  519.         ; but can waste paper when that is no longer the area of
  520.         ; interest.
  521. ~
  522. LIST options
  523. NLIST options    ; These pseudo-ops allow you to turn any of the supported
  524.         ; listing file options on (LIST) or off (NLIST) without
  525.         ; changing the other options. Both of these pseudo-ops
  526.         ; must be followed with one or more of the following option
  527.         ; letters. If these pseudo-ops is used some options are
  528.         ; on by default ( marked with (on) in the following list.
  529.         ;
  530.         ; A     ; List all bytes in DB, DW, DDB, etc. Otherwise
  531.         ;    ; only the bytes that can fit in one line are
  532.         ;    ; included in the listing ( others are implied ).
  533.         ; B    ; Place symbol table into object file.
  534.         ; G    ; Place system generated symbols into object files
  535.         ; I (on); List lines of conditional code following a false
  536.         ;    ; conditional. If off only the code actually 
  537.         ;       ; assembled is listed.
  538.         ; M (on); Expand macros in listing files
  539.         ; O (on); Produce an object module. That is show the bytes
  540.         ;       ; being generated by the assembler otherwise just
  541.         ;       ; the source and (optionally) macro expansions.
  542.         ; R     ; use absolute displacement for JR and DJNZ
  543.         ; S (on); List source code in listing file
  544.         ; T (on); List symbol table in listing file
  545.         ; X     ; Generate and list cross references in listing file
  546.         ; Z    ; Generate an error for Z80 only opcodes. Allows youè        ;    ; to write in Z80 mnemonics for an 8080 processor.
  547. :Error Reporting
  548.      D    ; Duplicate symbol definition. You will see this error
  549.         ; message if you do any of the following:
  550.         ;     Use the same symbol twice.
  551.         ;        FORMATX
  552.         ;        FORMATC
  553.         ;        will generate an error (only 6 significant
  554.         ;        characters).
  555.         ;    Upper and lower case symbols with the same letters
  556.         ;        FORMAT:
  557.         ;        format:
  558.         ;        are identical to the assembler.
  559.         ;    Assigning a different value to a symbol that was
  560.         ;        previously defined with a EQU pseudo-op.
  561.         ;        If you are going to reassign use DEFL.
  562.  
  563.     E    ; Relocation error. I believe this occurs if the assembler
  564.         ; cannot reassign an address as expected.
  565.  
  566.     F    ; Format Error. You will see this if you break any of the
  567.         ; rules regarding field use and macro format.
  568. ~
  569.     K    ; Keyword error. This means you tried to use one of the
  570.         ; assemblers reserved words or pseudo-ops as a symbol.
  571.         ;    ORG:    JP    END
  572.         ;        NOP
  573.         ;    END:    JP    ORG
  574.         ;     is in very bad taste.
  575.  
  576.     L    ; Label error. The attempt to assign a value to a lable was
  577.         ; unsuccessful. Also remember that labels do not end in a 
  578.         ; colon when preceding EQU.
  579.         ;    START:    EQU    100H    ; is bad news
  580.         ;    START    EQU    100H    ; is perfect
  581.  
  582.     M    ; Missing label. The symbol you are using was never defined.
  583.  
  584.     N    ; Macro nesting error. Macros can be nested (that is a macro
  585.         ; can call another macro) but if the nesting gets to deep
  586.         ; the assembler will quit and give you one of these. Also,
  587.         ; you can only call macros that were previously defined.
  588. ~
  589.     O    ; Op code error. If you see this, look in the operation and
  590.         ; operand fields. Consult the mnemonic table. People 
  591.         ; switching over from 8080 will see a few of these.
  592.  
  593.     P    ; Phase error. A 2 pass assembler builds a symbol table on
  594.         ; the first pass and generates the object code on the second.
  595.         ; If a number that it calculates for a symbol on the first
  596.         ; pass does not agree with a number it generates in theè        ; pass this error is shown check the symbols in the line
  597.         ; the error appeared.
  598.  
  599.     Q    ; Questionable operand. Actually theres no question about it
  600.         ; it is a bad operand. Typo's give you these as well as 
  601.         ; blowing op code format. Usally easy to find your mistake.
  602.  
  603.     S    ; Syntax error. You broke one of the syntax rules described
  604.         ; above.
  605.  
  606.     T    ; Symbol table full. Not much you can do with this except
  607.         ; pare down the code.
  608. ~
  609.     U    ; Undefined symbol. You used a symbol but forgot to define
  610.         ; it in with an EQU.
  611.  
  612.     V    ; Value error. Usually means you are trying to do a 16
  613.         ; bit operation with an 8 bit number or the other way 
  614.         ; around.
  615.