home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / emulate / x_comp / mac8080 / macros80.asm next >
Assembly Source File  |  1991-11-24  |  7KB  |  367 lines

  1. ; MACROS80.INC
  2. %PUSHLCTL
  3. %NOLIST
  4. NOWARN RES
  5. ; 11-24-91
  6. ; Placed in the public domain by Clarence Wilkerson
  7. ; anyone can do anything they want with this, at their own risk
  8.  
  9. ; this is a collection of macros to assemble 8080 assembler code
  10. ; with the TASM Turbo Assembler on a PC.
  11. ; Most of it will probably work with MASM also.
  12. ; This is a quick hack. There is basically no error checking
  13. ; on register operands.
  14. ; Advantages: Fast assembly ( 25 seconds on 16mhz 386sx for a 70k bios source
  15. ;  file, cheap enough if you have TASM already
  16. ; Disadvantages: Not portable, error checking, listing is messy, style
  17. ;  of macro definitions eats up name space
  18. ; Question: On TASM is there a patch to kill internal tables for defining
  19. ;  opcodes, registers, etc?
  20. ;
  21. ;  Typical usage
  22. ;  USAGE:
  23. ;      tasm /mu /l file[.asm] <----- file.asm has include macros80.asm
  24. ;      tlink  file
  25. ;      exe2bin file.exe file.com
  26. ;  BUGS:  1) The file has an extra 0100H of nulls at beginning
  27. ;            if ORG 0100H is used. If it is not used
  28. ;            addresses don't come out right.
  29. ;         2) The conditional assembly instructions for TASM
  30. ;         don't seem to parse expressions the same way as MAC
  31. ;            so check these carefully if code length comes out wrong
  32. ;         3) Two things don't work as usual:
  33. ;            DS directive is replaced  by DSS  
  34. ;            END directive is replaced by ENDALL
  35. ;         4) I made no attempt to teach it the ! notation for continuation of
  36. ;             line
  37. ;         5) Doesn't always get all of an expression... stops at spaces
  38. ;
  39. ;  NOTE: I haven't tried this with the DR Z80.LIB z80 macros
  40. ;
  41. PURGE  SUB, CPO, MOV, CALL, JMP, EI, DI, RET
  42.  
  43.  a    equ 7
  44.  b     equ 0
  45.  c     equ 1
  46.  d     equ 2
  47.  e     equ 3
  48.  h     equ 4
  49.  l     equ 5
  50.  m     equ 6
  51.  sp     equ  6
  52.  psw     equ  6
  53. REGMASK    equ 07h   ; A,B,C,D,H,L,M
  54. REGPMASK   equ 06h   ; B, D, H, PSW, SP since names overlap, scale by *2
  55. REGPSHIFT  equ  3    ; and with 00000110B and then shl 3
  56. REGSHIFT   equ  3    ; only used for mov, mvi, inr, dcr
  57. RSTSHIFT   equ  3    ; screwy indexing for RST instruction
  58. RSTMASK    equ  3    ;
  59. ; make the code come out on one line for opcode, address pairs
  60. regaddr struc
  61.         RR  db ?
  62.         AA  dw ?
  63. ends
  64.  
  65. dss    macro  x
  66.        IFE   x
  67.        ; zero length fill
  68.        ELSE
  69.     db    (offset x)  dup(?)
  70.        ENDIF    
  71. endm
  72.  
  73. aci    macro  x8
  74.     db    0ceh,LOW x8
  75. endm
  76.  
  77. adi     macro  x8
  78.     db    0c6h,LOW x8
  79. endm
  80.  
  81. adc     macro  reg
  82.     db    088h OR (reg AND REGMASK)
  83. endm
  84.  
  85. add     macro  reg
  86.         db    080h or (reg and REGMASK)
  87. endm
  88.  
  89. ana     macro  reg
  90.     db    0a0h OR (reg AND REGMASK)
  91. endm
  92.  
  93. ani      macro x8
  94.     db     0e6h,LOW x8
  95. endm
  96.  
  97. call    macro   addr
  98.     regaddr < 0cdh, offset addr>
  99. endm
  100.  
  101. cc     macro  addr
  102.     regaddr  <0dch,offset addr>
  103. endm
  104. cm    macro  addr
  105.     regaddr   <0fch, offset addr>
  106. endm
  107. cma    macro
  108.     db    02fh
  109. endm
  110. cmc    macro
  111.     db    03fh
  112. endm
  113. cmp    macro    reg
  114.     db    0b8h OR (reg AND REGMASK)
  115. endm
  116. cnc    macro    addr
  117.     regaddr   <0d4h, offset addr>
  118. endm
  119. cnz    macro    addr
  120.     regaddr   <0c4h, offset addr>
  121. endm
  122. cp    macro    addr
  123.     regaddr   <0f4h, offset addr>
  124. endm
  125. cpe    macro    addr
  126.     regaddr   <0ech, offset addr>
  127. endm
  128. cpi    macro   x8
  129.     db    0feh,LOW x8
  130. endm
  131. cpo    macro    addr
  132.     regaddr   <0e4h, offset addr>
  133. endm
  134. cz    macro    addr
  135.     regaddr   <0cch, offset addr>
  136. endm
  137. daa    macro
  138.     db    027h
  139. endm
  140. dad    macro    regpr
  141.     IFDIF   <regpr>,<SP>
  142.     db    009h OR ((regpr and REGPMASK) SHL REGPSHIFT)
  143.     ELSE
  144.     db    009h OR (( 6 and REGPMASK) SHL REGPSHIFT)
  145.     ENDIF
  146. endm
  147. dcr    macro    reg
  148.     db    005h OR ((reg AND REGMASK) shl REGSHIFT)
  149. endm
  150. dcx     macro   regpr
  151.     IFDIF   <regpr>,<SP>
  152.     db    00bh OR ((regpr and REGPMASK) SHL REGPSHIFT)
  153.     ELSE
  154.     db    00bh OR (( 6 and REGPMASK) SHL REGPSHIFT)
  155.     ENDIF
  156. endm
  157. di    macro
  158.     db    0f3h
  159. endm
  160. ei    macro
  161.     db    0fbh
  162. endm
  163. hlt    macro
  164.     db    076h
  165. endm
  166. in    macro   x8
  167.     db    0dbh, LOW x8
  168. endm
  169. inr    macro    reg
  170.     db    004h OR ((reg AND REGMASK) SHL 3)
  171. endm
  172. inx    macro    regpr
  173.     IFDIF   <regpr>,<SP>
  174.     db    03h OR ((regpr and REGPMASK) SHL REGPSHIFT)
  175.     ELSE
  176.     db    03h OR (( 6 and REGPMASK) SHL REGPSHIFT)
  177.     ENDIF
  178. endm
  179. jc    macro    addr
  180.     regaddr   <0dah, offset addr>
  181. endm
  182. jm    macro    addr
  183.     regaddr   <0fah, offset addr>
  184. endm
  185. jmp    macro    addr
  186.     regaddr   <0c3h, offset addr>
  187. endm
  188. jnc    macro    addr
  189.     regaddr   <0d2h, offset addr>
  190. endm
  191. jnz    macro    addr
  192.     regaddr   <0c2h, offset addr>
  193. endm
  194. jp    macro    addr
  195.     regaddr   <0f2h, offset addr>
  196. endm
  197. jpe    macro    addr
  198.     regaddr   <0eah, offset addr>
  199. endm
  200. jpo    macro    addr
  201.     regaddr   <0e2h, offset addr>
  202. endm
  203. jz    macro    addr
  204.     regaddr   <0cah, offset addr>
  205. endm
  206. lda    macro   addr
  207.     regaddr   <03ah, offset addr>
  208. endm
  209. ldax    macro    regpr
  210.     db    00ah OR ((regpr and REGPMASK) SHL REGPSHIFT)
  211. endm
  212. lhld    macro    addr
  213.     regaddr   <02ah, offset addr>
  214.     endm
  215. lxi    macro    regpr,addr
  216.     IFDIF   <regpr>,<SP>
  217.     regaddr    <001h OR ((regpr and REGPMASK) SHL REGPSHIFT),offset addr>
  218.     ELSE
  219.     regaddr <001h OR (( 6 and REGPMASK) SHL REGPSHIFT),offset addr>
  220.     ENDIF
  221. endm
  222. mov    macro    regD,regS
  223.     db    (040h OR (regS and REGMASK)) OR ((regD and REGMASK) SHL REGSHIFT )
  224. endm
  225. mvi    macro   regD,x8
  226.     db    (006h) OR ((regD and REGMASK) SHL REGSHIFT) , LOW x8
  227. endm
  228. nop    macro
  229.     db    00h
  230. endm
  231. ora    macro    reg
  232.     db    0b0h OR ( reg and REGMASK)
  233. endm
  234. ori    macro    x8
  235.     db    0f6h, LOW x8
  236. endm
  237. out    macro    x8
  238.     db    0d3h, LOW x8
  239. endm
  240. pchl    macro
  241.     db    0e9h
  242.     endm
  243. pop    macro    regpr
  244.     db    0c1h OR ((regpr and REGPMASK) SHL REGPSHIFT)
  245. endm
  246.  
  247. push    macro    regpr
  248.     db    0c5h OR ((regpr and REGPMASK) SHL REGPSHIFT)
  249. endm
  250. ; below this point macros are filled in correctly
  251. ral    macro
  252.     db    017h
  253. endm
  254.  
  255. rar    macro
  256.     db    01fh
  257. endm
  258.  
  259. rc    macro
  260.     db    0d8h
  261. endm
  262.  
  263. ret    macro
  264.     db    0C9h
  265. endm
  266.  
  267. rlc    macro
  268.     db    07h
  269. endm
  270.  
  271. rm    macro
  272.     db    0f8h
  273. endm
  274.  
  275. rnc     macro
  276.     db    0d0h
  277. endm
  278. rnz     macro
  279.     db    0c0h
  280. endm
  281.  
  282. rp     macro
  283.     db    0f0h
  284. endm
  285.  
  286. rpe    macro
  287.     db    0e8h
  288. endm
  289.  
  290. rpo   macro
  291.     db    0e0h
  292. endm
  293.  
  294. rrc   macro
  295.     db    0fh
  296. endm
  297.  
  298. rst    macro    x8      ; range of 0 .. 7
  299.     db      0c7h OR ((x8 AND 7) SHL 3)
  300. endm
  301.  
  302. rz      macro
  303.     db 0c8h
  304. endm
  305.  
  306. sbb    macro    reg
  307.     db    098h  OR ( reg and REGMASK)
  308. endm
  309.  
  310. sbi    macro   x8
  311.     db    0deh, LOW x8
  312. endm
  313.  
  314. shld    macro   addr
  315.     regaddr   <022h, offset addr>
  316. endm
  317. sphl    macro
  318.     db    0f9h
  319. endm
  320.  
  321. sta    macro    addr
  322.     regaddr   <032h, offset addr>
  323. endm
  324.  
  325. stax    macro    regpr
  326.     db    02h OR ((regpr and REGPMASK) SHL REGPSHIFT)
  327. endm
  328.  
  329. stc     macro
  330.     db    037h
  331. endm
  332.  
  333.  
  334. sub     macro   reg
  335.     db    090h or (reg and REGMASK)
  336. endm
  337.  
  338. sui     macro   x8
  339.     db    0d6h,LOW x8
  340. endm
  341.  
  342. xchg    macro
  343.     db    0ebh
  344. endm
  345.  
  346. xra    macro    reg
  347.     db    0a8h  OR (reg and REGMASK)
  348. endm
  349.  
  350. xri    macro    x8
  351.     db    0eeh, LOW x8
  352. endm
  353.  
  354.  
  355. xthl    macro
  356.     db    0e3h
  357. endm
  358. endall macro
  359.   code8080  ends
  360.   end
  361. endm
  362. code8080  segment
  363. assume  cs:code8080, ds:code8080, ss:code8080
  364.  
  365. %POPLCTL
  366.  
  367.