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 / MBUG / MBUG093.ARC / Z80MR.DOC < prev   
Text File  |  1979-12-31  |  26KB  |  689 lines

  1. Documentatioε fo≥ Z80MR
  2.  
  3.  
  4. Introduction
  5.  
  6. Z80M╥ i≤ ß Z8░ macr∩ assemble≥ witΦ synta° closel∙ followinτ RMA├ anΣá MAC« ì
  7. I⌠ assemble≤ standarΣ Z8░ mnemonic≤ int∩ aε Inte∞ He° format« Thσ resultinτ ì
  8. filσá (whicΦá ha≤ ß .HE╪ extension⌐ caε bσ translateΣ t∩ ß .CO═á filσá witΦ ì
  9. LOAD.CO═á (oεá you≥ CP/═ disδ tha⌠ yo⌡ receiveΣ witΦ you≥ Microbee⌐á iµá i⌠ ì
  10. ORG'≤á a⌠ 10░ (hex)«á Iµ i⌠ ORG'≤ elsewherσ thσ .HE╪ filσ ma∙ bσ reaΣá int∩ ì
  11. memor∙ anΣ manipulateΣ witΦ DDT.COM.
  12.  
  13. Runninτ Z80MR
  14.  
  15. Thσá filσ t∩ bσ assembleΣ mus⌠ havσ thσ exten⌠ *.AZM«á  Thσ synta° t∩á loaΣ ì
  16. thσ assemble≥ i≤ Z80M╥ <filename╛ withou⌠ thσ extent.
  17.  
  18. Wh∙ Z80
  19.  
  20. Thσá assemble≥á yo⌡á receiveΣá witΦá you≥ Microbeσá (ASM.COM⌐á i≤á aεá 808░ ì
  21. assembler«á Thσá Microbeσá actuall∙ run≤ ß Z8░ c.p.u«á Thσ reasoεá thi≤á i≤ ì
  22. possiblσ i≤ tha⌠ thσ Z8░ actuall∙ run≤ al∞ oµ thσ 808░ instruction≤ bu⌠á iε ì
  23. additioεá therσá arσá morσá instruction≤ unknowε t∩á thσá 8080«á Thσá extrß ì
  24. instruction≤á werσ designeΣ fo≥ increaseΣ speed¼á easie≥á programming¼á anΣ ì
  25. morσ compac⌠ code«á Fo≥ thi≤ reasoε i⌠ i≤ t∩ you≥ bes⌠ advantagσ t∩ prograφ ì
  26. iε Z8░ codσ fo≥ thσ Microbee.
  27.  
  28. Z8░ Mnemonics
  29.  
  30. Z8░á mnemonic≤á arσá ß grea⌠ improvemen⌠ t∩á 8080«á Though⌠á wa≤á giveεá t∩ ì
  31. logical¼á universa∞á mnemonic≤ tha⌠ arσ mucΦ easie≥ t∩ remembe≥ anΣ use«á ╔ ì
  32. learneΣá assembl∙á languagσ oε thσ 808░ anΣ resisteΣ thσ changσ t∩á Z8░á a⌠ ì
  33. first«á Bu⌠á afte≥á usinτá Z8░ mnemonic≤ fo≥ ß shor⌠á timσá ╔á becamσá ver∙ ì
  34. unwillinτá t∩á  d∩á anythinτ witΦ 808░ code«á No≈ ╔ ruε almos⌠á ever∙á 808░ ì
  35. prograφáá tha⌠á come≤á iεá througΦá ßá 808░á t∩á Z8░á translatinτáá prograφ ì
  36. (XLATE2.COM)« Eveε iµ yo⌡ arσ writinτ program≤ fo≥ thσ 808░ i⌠ i≤ stil∞ fa≥ ì
  37. easie≥ t∩  writσ iε Z8░ mnemonics«á Therσ i≤ ß specia∞ listinτ commanΣ tha⌠ ì
  38. flag≤ Z80- onl∙ instruction≤ fo≥ thi≤ ver∙ reasoε (describeΣ later)« 
  39.  
  40. Macros
  41.  
  42. Macro≤á arσá ßá wa∙ oµ writinτ subroutine≤ iε assembl∙á languagσá anΣá theε ì
  43. callinτá thσ subroutinσ b∙ enterinτ thσ 'macr∩ nameº int∩ thσá source«á Thσ ì
  44. macr∩á ma∙á bσ calleΣ a≤ man∙ time≤ a≤ necessar∙ anywherσ iεá thσá program« ì
  45. Wheε thσ assemble≥ i≤ operated¼á thσ line≤ oµ sourcσ codσ tha⌠ makσ u≡á thσ ì
  46. macr∩á wil∞ bσ inserteΣ int∩ thσ filσ b∙ thσ assembler«á Notσ tha⌠ usinτá ß ì
  47. macr∩á doe≤á no⌠ reducσ thσ sizσ oµ thσ objec⌠ codσ tha⌠ i≤ produceΣá sincσ ì
  48. al∞ thσ line≤ oµ codσ tha⌠ makσ u≡ thσ macr∩ definitioε arσ assembleΣá int∩ ì
  49. thσá objec⌠ filσ a⌠ assembl∙ time«á Thi≤ i≤ calleΣ expandinτ thσ macro«á B∙ ì
  50. usinτ thσ *MACLIS╘ O╬ option¼á thσ line≤ oµ codσ produceΣ b∙ thσá expansioε ì
  51. oµá ß macr∩ arσ listeΣ iε thσ .PR╬ file«á Theε thσ codσ caε bσ examineΣ anΣ ì
  52. a⌠ time≤ optimizeΣ iε certaiε locations« 
  53.  
  54.  
  55. Assemble≥ Syntax
  56.  
  57.  
  58. Component≤ anΣ Genera∞ Forφ oµ Assembl∙ Languagσ Programs
  59. èThσá structurσá oµá aε assembl∙ languagσ prograφ i≤ morσá importan⌠á t∩á aε ì
  60. assemble≥ thaε thσ actua∞ instruction≤ yo⌡ write«á ┴ prograφ tha⌠ woulΣ ruε ì
  61. beautifull∙á caε fai∞ t∩ assemblσ iµ thσ synta° i≤ no⌠ correct«á ┴á prograφ ì
  62. witΦ n∩ error≤ a⌠ assembl∙ timσ i≤ no⌠ guaranteeΣ t∩ ruε correctl∙ ¿ o≥á a≤ ì
  63. expecteΣ )«á Thσ assembler≤ repor⌠ oµ ░ error≤ mean≤ tha⌠ i⌠ understooΣ al∞ ì
  64. oµá thσá instruction≤á yo⌡á entered¼á no⌠ tha⌠ you≥á prograφá i≤á logicall∙ ì
  65. correct.
  66.  
  67. Fields
  68.  
  69. Assembler≤á arσ almos⌠ alway≤ fielΣ orienteΣ somσ t∩ ß greate≥ degreσá thaε ì
  70. others«á ┴ fielΣ i≤ ß flexiblσ positioε iε thσ linσ oµ codσ witΦ respec⌠ t∩ ì
  71. thσá righ⌠á margin«á Thi≤á assemble≥ recognize≤ ┤á field≤á iεá aεá assembl∙ ì
  72. languagσ sourcσ line.
  73.  
  74.  
  75. labe∞        operatioε    operanΣ         comment
  76.  
  77.  
  78. Thσá assemble≥ know≤ wheε i⌠ ha≤ reacheΣ thσ enΣ oµ ß fielΣ wheε i⌠ see≤á ß ì
  79. 'fielΣá delimiter'«á Thi≤ caε bσ ß spacσ o≥ ß taΓ fo≥ thi≤ assemble≥ thougΦ ì
  80. somσá requirσá tab≤ s∩ i⌠ i≤ ß gooΣ habi⌠ t∩ alway≤ usσ taΓá character≤á a≤ ì
  81. delimiters.
  82.  
  83. Labe∞ Field
  84.  
  85. ┴á symbo∞á i≤á ß worΣ useΣ t∩ represen⌠ ß number«á Symbol≤á tha⌠á refe≥á t∩ ì
  86. addresse≤á arσá calleΣ labels«á Thσ assignmen⌠ oµ ß numbe≥ t∩ ßá labe∞á caε ì
  87. eithe≥ bσ defineΣ a≤ thσ line≤ below
  88.  
  89. TE╬    EQ╒    10
  90. STAR╘    EQ╒    100H
  91.  
  92. o≥ calculateΣ b∙ thσ assemble≥ a≤ aε addres≤ fo≥ branchinτ instructions.
  93.  
  94. START║    J╨    FINISH
  95.     NOP
  96.     NOP
  97. FINISH║    J╨    START
  98.  
  99. Als∩á noticσá tha⌠ thσ labe∞ i≤ optiona∞ anΣ i≤ onl∙á fo≥á thσá programmer≤ ì
  100. conveniance.
  101.  
  102. Label≤ mus⌠ appea≥ iε thσ labe∞ field«á Somσ assembler≤ allo≈ yo⌡ t∩ inden⌠ ì
  103. label≤ bu⌠ thi≤ onσ won't.
  104.  
  105.  
  106.     STAR╘    EQ╒    100H
  107. START║    J╨    FINIS╚ 
  108.  
  109. Wil∞á givσá yo⌡ ß problem«á Thσ EQ╒ mus⌠ bσ iε thσ operatioε fielΣ anΣá thσ ì
  110. labe∞ iε thσ labe∞ field.
  111.  
  112. Mos⌠á assembler≤ requirσ tha⌠ thσ undefineΣ label≤ bσ terminateΣ iε ß coloε ì
  113. bu⌠ thi≤ assemble≥ doe≤ no⌠ requirσ ß coloε fo≥ symbol≤ iε columε 1.
  114.  
  115. STAR╘    J╨    FINISH
  116.  
  117. wil∞ no⌠ generatσ aε erro≥ bu⌠ colon≤ arσ anothe≥ gooΣ habi⌠ anΣ als∩á makσ ìèyou≥ codσ morσ readable.
  118.  
  119. Thi≤á assemble≥á onl∙á examine≤ thσ firs⌠ si° character≤ oµá an∙á labe∞á o≥ ì
  120. symbo∞ s∩ tha⌠ iµ thσ followinτ label≤ werσ useΣ iε thσ samσ program
  121.  
  122. FINISH▒    EQ╒    1000H
  123. FINISH▓    EQ╒    2000H
  124.  
  125. ┴ 'Dº erro≥ (duplicatσ symbols⌐ woulΣ bσ generated.
  126.  
  127. Operatioε anΣ OperanΣ Fields
  128.  
  129. Thσ operatioε fielΣ follow≤ thσ labe∞ fielΣ anΣ ma∙ eithe≥ contaiε ß Z8░ o≡ ì
  130. codσá mnemonic¼á aεá assemble≥ directivσ (o≥ pseud∩ op)¼á o≥ ß macr∩á call« ì
  131. Assemble≥á directive≤á anΣ macro≤ arσ describeΣ late≥ iεá thi≤á file«á Thi≤ ì
  132. fielΣá wil∞á usall∙ contaiε thσ mnemoniπ fo≥ ß Z8░á instruction«á Somσá Z8░ ì
  133. instruction≤ onl∙ usσ thi≤ fielΣ whilσ other≤ contaiε aε operanΣ whicΦ wil∞ ì
  134. bσ locateΣ iε thσ operanΣ field.
  135.  
  136.  
  137. GOBACK║    O╥    A
  138.     RE╘    Z
  139.     LD    A,0FFH
  140.     RET
  141.  
  142. Thσá wa∙á Z8░á mnemonic≤ werσ designed¼á thσ numbe≥á oµá nmenonic≤á iεá thσ ì
  143. operatioεá portioε oµ instruction≤ i≤ kep⌠ t∩ ß minimuφ sincσ thσá operand≤ ì
  144. reall∙ distinguisΦ thσ difference≤ betweeε simila≥ instructions«á Thσ firs⌠ ì
  145. linσ abovσ i≤ ß gooΣ examplσ oµ this« Thσ operatioε i≤ aε 'ORº operatioε oε ì
  146. thσá numbe≥á iε thσ accumulato≥ (implied⌐ witΦ anothe≥ register«á I⌠á make≤ ì
  147. sensσá tha⌠ thσ operanΣ shoulΣ bσ thσ registe≥ containinτ thσ othe≥á numbe≥ ì
  148. iε thσ 'ORº operation« Iε Z8░ assembl∙ languagσ thi≤ i≤ thσ case« Thσ firs⌠ ì
  149. linσá OR'≤á thσá accumulato≥á witΦ thσ accumualato≥ (useΣá t∩á seσá iµá thσ ì
  150. accumulato≥á contain≤ ß 0)«á Noticσ tha⌠ thσ seconΣ linσ use≤á thσá operanΣ ì
  151. fielΣá t∩á contaiε thσ conditioε fo≥ ß conditiona∞ jum≡ (iε thi≤á casσá thσ ì
  152. zer∩á flag)«á Thσá thirΣá linσ use≤ thσ operanΣ fielΣ t∩ contaiεá botΦá thσ ì
  153. targe⌠á registe≥á fo≥ ß loaΣ anΣ thσ numbe≥ t∩ load«á Thσ las⌠ linσá i≤á aε ì
  154. unconditiona∞ returε whicΦ use≤ thσ samσ operato≥ (RET⌐ a≤ thσá conditiona∞ ì
  155. returε bu⌠ doe≤ no⌠ usσ thσ operanΣ fielΣ becausσ therσ arσ n∩ conditon≤ t∩ ì
  156. placσ there« Thi≤ structurσ make≤ Z8░ program≤ mucΦ morσ readablσ thaε 808░ ì
  157. program≤á a≤á wel∞á a≤á makinτ thσ instruction≤á easie≥á t∩á remember«á Thσ ì
  158. followinτá i≤á thσá samσá codσ writteεá witΦá 808░á mnemonics«á Noticσá thσ ì
  159. differen⌠ philosoph∙ oε thσ usσ oµ thσ fields.
  160.  
  161. GOBACK:    ORA
  162.     RETZ
  163.     MVI    A,0FFH
  164.     RET
  165.  
  166. Als∩ thσ L─ commanΣ iε thσ Z8░ i≤ useΣ fo≥ al∞ datß move≤ whilσ 808░á user≤ ì
  167. mus⌠ remembe≥ ß differen⌠ mnemoniπ fo≥ differen⌠ type≤ oµ moves.
  168.  
  169.     8080            Z80
  170.  
  171.     MOV    H,A        LD    H,A
  172.     MVI    H,00        LD    H,00
  173.     LXI    H,0000        LD    HL,0000
  174.  
  175. èThe Comment Field
  176.  
  177. Comment≤á arσá no⌠á limiteΣ t∩ thσ commen⌠ fielΣ anΣ caεá actuall∙á bσá thσ ì
  178. entirσá line«á Al∞ assembler≤ recognizσ thσ semicoloε a≤ thσ beginninτ oµ ß ì
  179. commen⌠á anΣ mos⌠ ignorσ thσ res⌠ oµ thσ line«á Fo≥á compatabilit∙á betweeε ì
  180. assembler≤á i⌠ i≤ ß gooΣ t∩ begiε comment≤ witΦ ß semicolon«á Bu⌠ fo≥á thi≤ ì
  181. assemble≥ thσ followinτ method≤ oµ insertinτ comment≤ arσ gooΣ syntax.
  182.  
  183. 1«á Beginninτá ßá linσá witΦ aε '*º iε columε onσ cause≤ thσá assemble≥á t∩ ì
  184. ignorσá theres⌠á oµá thσá linσ excep⌠ iµá onσá oµá thσá assemble≥á command≤ ì
  185. (describeΣ below⌐ immediatel∙ follow≤ thσ asterisδ (n∩ embeddeΣ spaces).
  186.  
  187. 2« ┴ semicoloε wil∞ causσ thσ assemble≥ t∩ conside≥ everythinτ followinτ i⌠ ì
  188. t∩ bσ considereΣ ß comment.
  189.  
  190. 3« Thσ firs⌠ blanδ encountereΣ followinτ thσ beginninτ oµ thσ operanΣ fielΣ ì
  191. wil∞á causσ thσ assemble≥ t∩ conside≥ thσ res⌠ oµ thσ linσ t∩ bσ considereΣ ì
  192. ß comment.
  193.  
  194. ******************************************
  195. ;An adventure in Comments
  196. * A short tale
  197.  
  198. START:    JP    FINISH        ; finish this story
  199.     NOP              ASM can't handle this
  200. FINISH: RET     Thats all folks
  201.  
  202. Would assemble with no errors. Comments do not appear in the object code.
  203.  
  204.  
  205. Numbers and Bases
  206.  
  207. Thσá assemble≥á wil∞á accep⌠ number≤ iε HE╪ (basσ 16⌐ BINAR┘á (basσá 2⌐á o≥ ì
  208. DECIMAL« He° number≤ mus⌠ enΣ witΦ aε ╚ anΣ binar∙ number≤ mus⌠ enΣ iε ß B« ì
  209. Decima∞ number≤ shoulΣ havσ n∩ suffi° letter«á Wheε ß HE╪ digi⌠ begin≤ witΦ ì
  210. ß letter¼ thσ lette≥ shoulΣ bσ precedeΣ witΦ ß 0.
  211.  
  212.     LD    A,0F3H
  213.     OR    01001000B
  214.     LD    HL,4000H+28
  215.         
  216.  
  217.  
  218.  
  219. Commanding the Assembler
  220.  
  221. Thσá primar∙ responsibilit∙ oµ thσ assemble≥ i≤ t∩ translatσ Z8░á mnemonic≤ ì
  222. int∩á objec⌠á code«á Thσá assemble≥ als∩ recognize≤á certaiεá command≤á anΣ ì
  223. directive≤á tha⌠á thσá programme≥ caε usσá t∩á manipulatσá thσá assembler'≤ ì
  224. output«á Thesσá arσá ofteεá referreΣ t∩á a≤á 'pseudo-ops'«á Thi≤á assemble≥ ì
  225. require≤á thesσá pseudo-op≤ t∩ bσ iε uppe≥ case«á  ┴ descriptioεá oµá thesσ ì
  226. command≤ follows:
  227.  
  228. ORG    <expr>    ; Sets the origin of the code or section of code. Actually
  229.         ; it sets the reference number that the assembler uses to
  230.         ; generate addresses for labels and instructions.
  231.         ; <expr> could be a number or a previously defined symbol.
  232.         ; e.g.    ORG    0
  233.         ;       ORG    STARTè
  234. END    <symb>    ; Determines the end of an assembly language program. <symb>
  235.         ; if present describes the first executable instruction of
  236.         ; the program.
  237.  
  238. DW    wordlist
  239. DEFW    wordlist
  240.         ; Both of these have identical meanings. In assembly language
  241.         ; programs, 8 bit values are called bytes and 16 bit
  242.         ; values are called words. Addresses are assembled with the
  243.         ; most significant byte (MSB) following the least significant
  244.         ; byte (LSB) because this is how the microprocessor handles
  245.         ; these values. The DW pseudo-op allows us to describe these
  246.         ; values in the way we are used to (MSB first) and still
  247.         ; assemble correctly for the processor.
  248.         ;    DW    8000H
  249.         ;             will assemble the same as 
  250.         ;    DB    00H
  251.         ;     DB    80H
  252.         ;
  253.         ; If more than one word is to follow a DW following values
  254.         ; should be seperated by commas
  255.         ; e.g.    DW    8000H,0F000H,0000H
  256.         ; The wordlist can also be symbols
  257.         ; e.g.    START:    JP    FINISH
  258.         ;        DW    START,FINISH
  259.         ;      FINISH:    JP    START
  260.  
  261. DDB    wordlist
  262.         ; This pseudo-op is a way of assembling 16 bit values with
  263.         ; the MSB first (opposite of DW).
  264.         ;    DDB    8000H
  265.         ;            will assemble the same as
  266.         ;    DB    80H
  267.         ;    DB    00H
  268.  
  269. DB    bytelist
  270. DEFB    bytelist
  271. DEFM    bytelist
  272. DATA    bytelist
  273.         ; These four pseudo-ops have identical meanings. The bytelist
  274.         ; can be one byte or multiple bytes seperated with commas.
  275.         ; The bytes can be any mix of symbols, ascii characters in
  276.         ; quotes, or numbers on the same line. This is familiar
  277.         ; code in Microbee programs:
  278.         ;
  279.         ;ESC    EQU    1BH
  280.         ;CLRSCR    EQU    1AH
  281.         ;CRLF    DDB    0D0AH
  282.         ;
  283.         ;    ORG    100H    
  284.         ;
  285.         ;    LD    DE,MES
  286.         ;    LD    C,9
  287.         ;    CALL    5
  288.         ;    RET
  289.         ;
  290.         ;MES:    DB    CLRSCR
  291.         ;    DB       ESC,'=',12+20H,12+20Hè        ;    DB    '*Your Message Here *',CRLF
  292.         ;    DB    '*Or Here*','$'
  293.         ;
  294.         ;    END
  295.         ;
  296.         ; If you've been waiting for an example to enter assemble
  297.         ; and run, try this one out. Just enter it (with out the
  298.         ; semicolons of course) assemble it and run it as described
  299.         ; in AZM-COM.DOC.
  300.         ;
  301.         ; The program clears the screen, positions the cursor at
  302.         ; row 12 column 12 and prints the message using the BDOS
  303.         ; function 9 (print string).   
  304.         ;
  305.         ; The symbol CLRSCR is defined by an EQU to the hex code to
  306.         ; clear the screen on the Microbee (^Z).
  307.         ;
  308.         ; The cursor positioning sequence on the Microbee consists of
  309.         ; the two lead-in characters (escape and an equals sign) and
  310.         ; then the row+20H and the column+20H.
  311.         ;
  312.         ; Since the next bytes are just a carriage return, line feed
  313.         ; pair the second part of the message will appear at the
  314.         ; left side of the screen. We could include extra DB's to
  315.         ; position the cursor anywhere on the screen if we like.
  316.         ;
  317.         ; BDOS function 9 (summoned by loading a 9 in the C register
  318.         ; and calling 0005H) prints the characters it finds at the
  319.         ; address in the DE registers until it sees a '$'.
  320.         
  321. DS    n
  322. DEFS    n    ; Reserve data space ( n bytes ). This is used to position
  323.         ; allocate or label data storage space in a program. n is
  324.         ; a number describing the number of bytes reserved.
  325.         ;    DS    16
  326.         ; Reserves 16 bytes. The next instruction will be located
  327.         ; 16 bytes from the location counter when the DS was 
  328.         ; encountered.
  329.         
  330. label    EQU    <expr>
  331.         ;
  332.         ; The EQU sets the label equal to the expression. The
  333.         ; label should not be terminated with a colon when used
  334.         ; with an EQU pseudo-op. The label can be any symbol
  335.         ; (byte or word) and the <expr> a number in any of the
  336.         ; following forms:
  337.         ;        SWEET    EQU    16       ;decimal
  338.         ;        SWEET    EQU    10H       ;hex
  339.         ;        SWEET    EQU    00010000B  ;binary
  340.         ;
  341.         ; With this assembler the EQU must be located in the
  342.         ; operation field. 
  343.         ; A label defined with an EQU cannot be redefined later
  344.         ; in the program.
  345.  
  346. label    DEFL    <expr>
  347.         ;
  348.         ; This assigns the value of the <expr> to the label like
  349.         ; the EQU pseudo-op but a label defined with a DEFL canè        ; be redefined later in the program.
  350.  
  351. *INCLUDE    <filename>
  352. *INCLUDE <filename>
  353.         ; This pseudo-op causes the assembler to stop assembling
  354.         ; lines in the file it is presently in and read in the
  355.         ; file <filename>. It then begins assembling lines in this
  356.         ; included file until it reaches the end of the file when
  357.         ; it returns to the original file and resumes assembling
  358.         ; lines in it once more. The <filename> can be any CPM
  359.         ; filename.ext though if the extent is left off it looks
  360.         ; for the given filename with an extent of .LIB. The asterisk
  361.         ; must appear in column 1 with the word INCLUDE immediately
  362.         ; following with no embedded spaces.
  363.         ;
  364.         ;*INCLUDE    DRIVER.AZM    ; will begin assembly on
  365.         ; the file DRIVER.AZM
  366.         ;*INCLUDE Z80MACRO    ; will begin assembly on
  367.         ; the file Z80MACRO.LIB    
  368.         ;
  369.  
  370. Conditional Assembly Pseudo-Ops............................................
  371.  
  372. IF    <expr>
  373. ELSE
  374. ENDIF
  375.     Conditiona∞á assembl∙ i≤ ß wa∙ oµ writinτ ß singlσ prograφ s∩á tha⌠ ì
  376. áááááááái⌠á caεá bσ assembleΣ differen⌠ way≤ o≥ witΦ differen⌠á option≤á b∙ ì
  377. ááááááááonl∙á changinτá ßá couplσ oµ line≤ oµá codes«á Wheεá thσá assemble≥ ì
  378. ááááááááencounter≤á aεá I╞á pseudo-o≡ i⌠ evaluate≤ thσá symbo∞á <expr>«á I╞ ì
  379. áááááááá<expr╛á i≤á non-zer∩á i⌠ assemble≤ thσá followinτá line≤á unti∞á i⌠ ì
  380. ááááááááreache≤á aε ELS┼ o≥ aε ENDIF«á Iµ <expr╛ i≤ ░ thσ line≤ arσ ignoreΣ ì
  381. ááááááááunti∞ thσ assemble≥ encounter≤ aε ELS┼ o≥ aε ENDIF«á Iµ thσ ELS┼ i≤ ì
  382. ááááááááencounte≥á thσ assemble≥ begin≤ assemblinτ line≤ again«á Thσá ENDI╞ ì
  383. áááááááápseudo-o≡ cause≤ thσ assemble≥ t∩ resumσ assemblinτ al∞ lines«á Yo⌡ ì
  384. áááááááácaε no⌠ havσ aε I╞ withou⌠ aε ENDIF.
  385.  
  386.     Any of these pseudo-ops must appear in the operation field. 
  387.  
  388. TRUE    EQU    0FFH
  389. FALSE    EQU    0
  390. KPRO2    EQU    TRUE
  391. KPRO10    EQU    FALSE
  392.     
  393.     IF    KPRO2
  394.     
  395. BITPRT    EQU    1CH
  396.  
  397.     ELSE
  398.  
  399. BITPRT    EQU    14H
  400.  
  401.     ENDIF
  402.  
  403.  
  404. Operators..................................................................
  405.  
  406. Operator≤á allo≈á thσ programme≥ t∩ makσ thσ assemble≥á d∩á arithmetiπá anΣ ì
  407. logica∞á operations«á The∙á arσá usuall∙á useΣ t∩á manipulatσá operand≤á o≥ ìègeneratσá symbols«á Somσ oµ theφ arσ useΣ t∩ creatσ test≤á fo≥á conditiona∞ ì
  408. assembly«á Therσ shoulΣ bσ n∩ embeddeΣ space≤ wheε usinτ thesσ operator≤ a≤ ì
  409. thσ firs⌠ blanδ encountereΣ terminate≤ thσ operanΣ field«á Thσ operand≤ ma∙ ì
  410. bσ symbol≤ o≥ number≤ iε an∙ oµ thσ bases«á Thσ operator≤ supporteΣ b∙ thi≤ ì
  411. assemble≥ are:
  412.  
  413. Arithmetic Operators
  414.  
  415.     +        ; arithmetic addition.
  416.  
  417.     -        ; arithmetic subtraction
  418.  
  419.     *        ; arithmetic multiplication
  420.  
  421.     /        ; arithmetic division (truncating the result)
  422.  
  423. Logical Operators (Bit Manipulation)
  424.  
  425.     &
  426.     ( or .AND. )    ; logical AND operation
  427.  
  428.     ^ 
  429.     ( or .OR. )    ; logical OR operation
  430.  
  431.     .XOR.        ; logical exclusive OR operation
  432.  
  433.     \
  434.     ( or .NOT. )    ; logical inversion
  435.  
  436.     .SHR.        ; shift left operand to right by right operand
  437.  
  438.     .SHL.        ; shift left operand to left by right operand 
  439.  
  440.     .HIGH.        ; byte value is assigned the high byte of a
  441.             ; 16 bit value
  442.  
  443.     .LOW.        ; byte value is assigned the low byte of a 16
  444.             ; bit value
  445.  
  446.  
  447. Conditional Assembly Operators ( return    TRUE or FALSE to IF )
  448.  
  449.     =
  450.     ( or .EQU. )    ; logical equivalence
  451.  
  452.     >
  453.     ( or .GT. )    ; greater than
  454.     .UGT.        ; unsigned greater than
  455.  
  456.     <
  457.     ( or .LT. )    ; less than
  458.     .ULT.        ; unsigned less than
  459.              
  460.  
  461.  
  462. Listing Options Pseudo-Ops.................................................
  463.  
  464. Therσ arσ ß numbe≥ oµ listinτ options« Al∞ oµ thesσ option≤ onl∙ effec⌠ thσ ì
  465. prin⌠á filσ (.PRN)«á Thσ option≤ includσ somσ fo≥ debugginτ a≤ wel∞ a≤ somσ ìèfo≥ thσ actua∞ forma⌠ oµ thσ filσ oε thσ page«á Thσ .PR╬ filσ i≤ thσá basiπ ì
  466. too∞á assembl∙á languagσ programmer≤ havσ fo≥ examininτ thσ outpu⌠á oµá thσ ì
  467. assembler«á Thσá pseudo-op≤ beginninτ witΦ aε asterisδ mus⌠ begiε iε columε ì
  468. 1.
  469.  
  470. *EJECT
  471. ( or EJEC )    ; The next line of the listing should be placed at the top
  472.         ; of the next page.
  473.  
  474. *HEADING    ; Place the text ( following this command ) on the top of
  475.         ; each page. Usually used to date the listing file.
  476.  
  477. TITLE 'text'    ; Place the text in the quotation marks (either double or
  478.         ; single on the top of each page in the listing file.
  479.  
  480. SPAC n        ; Leave n blank lines in the listing. Used to leave white
  481.         ; space in the file with out using a page break.
  482.  
  483. *LIST ON
  484. *LIST OFF    ; Turn the listing on or off. This is usually used to omit
  485.         ; long comments or certain sections from the .PRN file.
  486.  
  487. *MACLIST ON
  488. *MACLIST OFF    ; Turn the expansion of macros on or off. Seeing how the
  489.         ; macros are being expanded is handy for optimizing code
  490.         ; but can waste paper when that is no longer the area of
  491.         ; interest.
  492.  
  493. LIST options
  494. NLIST options    ; These pseudo-ops allow you to turn any of the supported
  495.         ; listing file options on (LIST) or off (NLIST) without
  496.         ; changing the other options. Both of these pseudo-ops
  497.         ; must be followed with one or more of the following option
  498.         ; letters. If these pseudo-ops is used some options are
  499.         ; on by default ( marked with (on) in the following list.
  500.         ;
  501.         ; A     ; List all bytes in DB, DW, DDB, etc. Otherwise
  502.         ;    ; only the bytes that can fit in one line are
  503.         ;    ; included in the listing ( others are implied ).
  504.         ; B    ; Place symbol table into object file.
  505.         ; G    ; Place system generated symbols into object files
  506.         ; I (on); List lines of conditional code following a false
  507.         ;    ; conditional. If off only the code actually 
  508.         ;       ; assembled is listed.
  509.         ; M (on); Expand macros in listing files
  510.         ; O (on); Produce an object module. That is show the bytes
  511.         ;       ; being generated by the assembler otherwise just
  512.         ;       ; the source and (optionally) macro expansions.
  513.         ; R     ; use absolute displacement for JR and DJNZ
  514.         ; S (on); List source code in listing file
  515.         ; T (on); List symbol table in listing file
  516.         ; X     ; Generate and list cross references in listing file
  517.         ; Z    ; Generate an error for Z80 only opcodes. Allows you
  518.         ;    ; to write in Z80 mnemonics for an 8080 processor.
  519.  
  520. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  521. Error Reporting
  522. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  523. èWheεá thσ assemble≥ i≤ unablσ t∩ understanΣ wha⌠ yo⌡ arσ instructinτ i⌠á t∩ ì
  524. d∩ i⌠ generate≤ aε erro≥ message«á Thesσ arσ almos⌠ alway≤ duσ t∩ typo'≤ o≥ ì
  525. baΣ form« I⌠ display≤ thσ erro≥ codσ belo≈ anΣ thσ linσ thσ erro≥ wa≤ founΣ ì
  526. oε t∩ thσ consolσ anΣ als∩ display≤ thσ erro≥ code≤ iε thσ listinτ file« 
  527.  
  528.      D    ; Duplicate symbol definition. You will see this error
  529.         ; message if you do any of the following:
  530.         ;     Use the same symbol twice.
  531.         ;        FORMATX
  532.         ;        FORMATC
  533.         ;        will generate an error (only 6 significant
  534.         ;        characters).
  535.         ;    Upper and lower case symbols with the same letters
  536.         ;        FORMAT:
  537.         ;        format:
  538.         ;        are identical to the assembler.
  539.         ;    Assigning a different value to a symbol that was
  540.         ;        previously defined with a EQU pseudo-op.
  541.         ;        If you are going to reassign use DEFL.
  542.  
  543.     E    ; Relocation error. I believe this occurs if the assembler
  544.         ; cannot reassign an address as expected.
  545.  
  546.     F    ; Format Error. You will see this if you break any of the
  547.         ; rules regarding field use and macro format.
  548.  
  549.     K    ; Keyword error. This means you tried to use one of the
  550.         ; assemblers reserved words or pseudo-ops as a symbol.
  551.         ;    ORG:    JP    END
  552.         ;        NOP
  553.         ;    END:    JP    ORG
  554.         ;     is in very bad taste.
  555.  
  556.     L    ; Label error. The attempt to assign a value to a lable was
  557.         ; unsuccessful. Also remember that labels do not end in a 
  558.         ; colon when preceding EQU.
  559.         ;    START:    EQU    100H    ; is bad news
  560.         ;    START    EQU    100H    ; is perfect
  561.  
  562.     M    ; Missing label. The symbol you are using was never defined.
  563.  
  564.     N    ; Macro nesting error. Macros can be nested (that is a macro
  565.         ; can call another macro) but if the nesting gets to deep
  566.         ; the assembler will quit and give you one of these. Also,
  567.         ; you can only call macros that were previously defined.
  568.  
  569.     O    ; Op code error. If you see this, look in the operation and
  570.         ; operand fields. Consult the mnemonic table. People 
  571.         ; switching over from 8080 will see a few of these.
  572.  
  573.     P    ; Phase error. A 2 pass assembler builds a symbol table on
  574.         ; the first pass and generates the object code on the second.
  575.         ; If a number that it calculates for a symbol on the first
  576.         ; pass does not agree with a number it generates in the
  577.         ; pass this error is shown check the symbols in the line
  578.         ; the error appeared.
  579.  
  580.     Q    ; Questionable operand. Actually theres no question about it
  581.         ; it is a bad operand. Typo's give you these as well as è        ; blowing op code format. Usally easy to find your mistake.
  582.  
  583.     S    ; Syntax error. You broke one of the syntax rules described
  584.         ; above.
  585.  
  586.     T    ; Symbol table full. Not much you can do with this except
  587.         ; pare down the code.
  588.  
  589.     U    ; Undefined symbol. You used a symbol but forgot to define
  590.         ; it in with an EQU.
  591.  
  592.     V    ; Value error. Usually means you are trying to do a 16
  593.         ; bit operation with an 8 bit number or the other way 
  594.         ; around.
  595.  
  596.  
  597. Macros
  598.  
  599. Thσá macr∩ i≤ ß powerfu∞ methoΣ oµ writinτ assembl∙ languagσá programs«á I⌠ ì
  600. make≤á i⌠á possiblσá t∩á writσ assembl∙ languagσ program≤á iεá ßá wa∙á tha⌠ ì
  601. resemble≤ highe≥ leve∞ languages«á Iε fac⌠ b∙ creatinτ ß librar∙ oµá macro≤ ì
  602. yo⌡ arσ iε essencσ creatinτ you≥ owε language¼ anΣ you≥ owε compiler.
  603.  
  604. Ofteεá time≤á iεá assembl∙ languagσ (particularl∙ writinτá fo≥á CP/M⌐á eacΦ ì
  605. prograφá contain≤á sourcσá line≤á tha⌠ arσ useΣ agaiε anΣá agaiεá iεá othe≥ ì
  606. programs«á B∙á usinτ macro≤ thσ routine≤ onl∙ neeΣ t∩ bσ writteεá oncσá anΣ ì
  607. theε ma∙ bσ calleΣ iε an∙ program«á Thσ bes⌠ thinτ abou⌠ ß macr∩ librar∙ i≤ ì
  608. tha⌠á onl∙ thσ macro≤ tha⌠ arσ calleΣ producσ objec⌠ code«á S∩ therσ i≤á n∩ ì
  609. penalt∙á iεá havinτ ß macr∩ librar∙ tha⌠ i≤ largσ anΣ completσ eveε iµá yo⌡ ì
  610. arσ onl∙ goinτ t∩ cal∞ onσ macro.
  611.  
  612. Macro≤ havσ ß forφ tha⌠ i≤ uniquσ anΣ mus⌠ bσ followeΣ closel∙ fo≥á correc⌠ ì
  613. results« Thσ genera∞ forφ oµ ß macr∩ is
  614.  
  615. name    MACRO    #parameter1,#parameter2,....
  616.     instruction
  617.     instruction
  618.     instruction
  619.     .
  620.     .
  621.     .
  622.     ENDM
  623.  
  624. Thσá namσ i≤ thσ symbo∞ tha⌠ wil∞ bσ useΣ t∩ invokσ thσ macro«á MACR╧ i≤á ß ì
  625. keyworΣá tha⌠ wil∞ indicatσ t∩ thσ assemble≥ tha⌠ ß macr∩ i≤ beinτ defined« ì
  626. Thσá parameter≤á alway≤ mus⌠ begiε witΦ ß '#º sigε iε macro≤ anΣá the∙á arσ ì
  627. seperateΣ b∙ commas« Thσ instructioε caε bσ Z8░ instructions¼ o≥ an∙ oµ thσ ì
  628. assemble≥ command≤ listeΣ abovσ incudinτ conditionals«á Thσ instructioε caε ì
  629. als∩á bσ anothe≥ macr∩ cal∞ (calleΣ nesteΣ macros⌐ bu⌠ onl∙ iµá thσá nesteΣ ì
  630. macr∩á ha≤ beeε alread∙ defined«á Thσ END═ keyworΣ tell≤ thσ assemble≥ tha⌠ ì
  631. i⌠á ha≤ reacheΣ thσ enΣ oµ thσ codσ tha⌠ mus⌠ bσ assembleΣ wheε thi≤á macr∩ ì
  632. i≤ called« D∩ no⌠ usσ ß coloε behinΣ thσ macr∩ name.
  633.  
  634. Thσá previou≤á messagσ prograφ examplσ caε bσ rewritteε t∩ looδá likσá thi≤ ì
  635. witΦ macros.
  636.  
  637.       ORG    100H
  638.  
  639. *INCLUDE Z80MACROè
  640.     BDOS    PRNSTR,MES
  641.     RET
  642.  
  643. MES:    DB    ESC,'=',12+20H,12+20H
  644.     DB    '*Your message here*'
  645.     DDB    CRLF
  646.     DB    '*Or here*'     
  647.     END
  648.  
  649. With the following macro library called Z80MACRO.LIB
  650.  
  651.  
  652. ;Call Bdos function #FUNCT using paramater contained in #DE
  653.  
  654. ESC    EQU    1BH        ; ascii escape
  655. CRLF    EQU    0D0AH        ; ascii    carriage return line feed
  656. PRNSTR    EQU    9
  657.  
  658. BDOS    MACRO    #FUNCT,#DE
  659.     LD    C,#FUNCT    ; FUNCTION NUMBER GOES TO C
  660.     LD    DE,#DE        ; GET PARAMETER
  661.     CALL    5        ; CALL BDOS
  662.     ENDM
  663.  
  664. Wσá coulΣ als∩ rewritσ thσ curso≥ positioninτ sequencσ int∩ ßá macro«á Notσ ì
  665. ho≈ jus⌠ thi≤ smal∞ examplσ caε savσ u≤ timσ iε futurσ programs«á Also¼ thσ ì
  666. macr∩ librar∙ i≤ ß grea⌠ placσ t∩ kee≡ frequentl∙ useΣ symbol≤ likσ ES├ anΣ ì
  667. CRLF.
  668.  
  669. Bu⌠á wha⌠ abou⌠ usinτ addres≤ symbol≤ iε macros┐á Ho≈ caε wσ avoiΣ thσá 'Dº ì
  670. erro≥á iµá wσ cal∞ thσ macr∩ morσ thaε once«á Thσ othe≥ keyworΣá uniquσá t∩ ì
  671. macro≤á i≤ LOCAL«á Thi≤ make≤ thσ assemble≥ generatσ it≤ owεá uniquσá labe∞ ì
  672. ever∙á timσ thσ macr∩ i≤ expandeΣ iε ß program«á Followinτ thσ worΣ LOCA╠ ¿ ì
  673. whicΦ mus⌠ bσ oε thσ seconΣ linσ oµ thσ macr∩ ⌐ arσ thσ symbol≤ wσ wan⌠ thσ ì
  674. compile≥ t∩ generatσ uniquσ label≤ for« Thesσ symbol≤ mus⌠ als∩ bσ procedeΣ ì
  675. witΦ ß '#º sign.
  676.  
  677. AJUMP    MACRO
  678.     LOCAL    #ADR_Z,#BACK
  679.     OR    A
  680.     JR    Z,#ADR_Z
  681.     LD    A,40H
  682.     JR    #BACK
  683. #ADR_Z:    LD    A,04H
  684. #BACK:    LD    DE,0
  685.     ENDM
  686.  
  687. Thσá macr∩ itselµ i≤ no⌠ reall∙ usefu∞ bu⌠ i⌠ i≤ correc⌠ anΣ show≤ thσá usσ ì
  688. oµ loca∞ labels.
  689.