home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / source / asm80.seq < prev    next >
Encoding:
Text File  |  1990-05-15  |  4.8 KB  |  129 lines

  1. \\ ASM80.SEQ            An 8080 Assembler          05/08/90 TJZ
  2.  
  3. The 8080 Assembler is largely due to John Cassady, who recently
  4. published it in Forth Dimensions.  It implements the full 8080
  5. instruction set as well as structured conditionals.  To create
  6. an Assembler language definition, use the defining word CODE.
  7. It may, but does not have to be, terminated with C;.  How the
  8. assembler operates is a very interesting example of the power
  9. of CREATE DOES>  Basically, the instructions are categorized
  10. and a defining word is created for each category.  When the
  11. mnemonic for the instruction is interpreted, it compiles
  12. itself.
  13.  
  14. Modified for F-PC and TCOM by Tom Zimmer 05/08/90
  15.  
  16. {
  17.  
  18. WARNING OFF
  19.  
  20. ONLY FORTH ALSO DEFINITIONS VOCABULARY ASM80
  21. ' ASM80 ALIAS [ASM80] IMMEDIATE
  22. ONLY FORTH ALSO ASSEMBLER ALSO ASM80 DEFINITIONS ALSO
  23.  
  24. \ some alias headers so we dont have to redefine these words in
  25. \ the new target assembler.
  26.  
  27.         ' a;            alias a;
  28.         ' a;!           alias a;!
  29.         ' $             alias $
  30.         ' $:            alias $:
  31. \U $:F  ' $:F           alias $:F
  32.         ' L$            alias L$
  33.         ' L$:           alias L$:
  34.         ' ll-global?    alias ll-global?
  35.         ' ll-errs?      alias ll-errs?
  36.         ' end-code      alias end-code  immediate
  37.         ' end-code      alias c;        immediate
  38.         ' c,            alias c,
  39.         ' ,             alias ,
  40.         ' here          alias here
  41.         ' tc@           alias tc@
  42.         ' tc!           alias tc!
  43.         ' t!            alias t!
  44.  
  45. FORTH DEFINITIONS
  46.  
  47. : DOASSEM80     ( --- )
  48.                 @> RUN =: ARUNSAVE
  49.                   ['] RUN-A; IS RUN
  50.                 0 ['] DROP A;!
  51.                 APRIOR 4 + 2@ APRIOR 2!
  52.                 LIHERE =: LINESTRT
  53.                 ll-global? 0=
  54.                 if      llab-init               \ in case labels used
  55.                 then
  56.                 ALSO ASM80 ;
  57.  
  58. : SETASM80      ['] DOASSEM80 IS SETASSEM  ;
  59.  
  60. SETASM80
  61.  
  62. ONLY FORTH ALSO ASM80 DEFINITIONS ALSO
  63.  
  64. \ 8080 Assembler Defining Words & Registers           09MAR83HHL
  65.  
  66. 7 CONSTANT A
  67. 0 CONSTANT B   1 CONSTANT C      2 CONSTANT D   3 CONSTANT E
  68. 0 CONSTANT I   1 CONSTANT I'     2 CONSTANT W   3 CONSTANT W'
  69. 0 CONSTANT IP  1 CONSTANT IP'    4 CONSTANT H   5 CONSTANT L
  70. 6 CONSTANT M   6 CONSTANT PSW    6 CONSTANT SP  6 CONSTANT S
  71.  
  72. : 1MI CREATE C, DOES> C@ C, ;
  73. : 2MI CREATE C, DOES> C@ + C, ;
  74. : 3MI CREATE C, DOES> C@ SWAP 8* + C, ;
  75. : 4MI CREATE C, DOES> C@ C, C, ;
  76. : 5MI CREATE C, DOES> C@ C, , ;
  77.  
  78. \ 8080 Assembler mnemonics                            09MAR83HHL
  79.  
  80. $00 1MI NOP   $76 1MI HLT  $F3 1MI DI   $FB 1MI EI    $07 1MI RLC
  81. $0F 1MI RRC   $17 1MI RAL  $1F 1MI RAR  $E9 1MI PCHL  $EB 1MI XCHG
  82. $C9 1MI RET   $C0 1MI RNZ  $C8 1MI RZ   $D0 1MI RNC   $D8 1MI RC
  83. $2F 1MI CMA   $37 1MI STC  $3F 1MI CMC  $F9 1MI SPHL  $E3 1MI XTHL
  84. $E0 1MI RPO   $E8 1MI RPE  $F8 1MI RM   $27 1MI DAA
  85. $80 2MI ADD   $88 2MI ADC  $90 2MI SUB  $98 2MI SBB   $A0 2MI ANA
  86. $A8 2MI XRA   $B0 2MI ORA  $B8 2MI CMP  $02 3MI STAX  $04 3MI INR
  87. $03 3MI INX   $09 3MI DAD  $0B 3MI DCX  $C1 3MI POP   $C5 3MI PUSH
  88. $C7 3MI RST   $05 3MI DCR  $0A 3MI LDAX $D3 4MI OUT   $DB 4MI IN
  89. $C6 4MI ADI   $CE 4MI ACI  $D6 4MI SUI  $DE 4MI SBI   $E6 4MI ANI
  90. $EE 4MI XRI   $F6 4MI ORI  $FE 4MI CPI  $22 5MI SHLD $CD 5MI CALL
  91. $2A 5MI LHLD  $32 5MI STA  $3A 5MI LDA  $C3 5MI JMP
  92. $C2 5MI JNZ   $CA 5MI JZ   $D2 5MI JNC  $DA 5MI JC   $E2 5MI JPO
  93. $EA 5MI JPE   $F2 5MI JP   $FA 5MI JM
  94.  
  95. \ 8080 Assembler Branches                             29AUG84MJM
  96.  
  97. $DA CONSTANT C0=  $D2 CONSTANT C0<>  $D2 CONSTANT CS
  98. $C2 CONSTANT 0=   $CA CONSTANT 0<>   $E2 CONSTANT PE
  99. $F2 CONSTANT 0<   $FA CONSTANT 0>=
  100.  
  101. : NOT           8 [ FORTH ] XOR   ;
  102. : MOV           8* $40 + +  C, ;        \ source destination MOV
  103. : MVI           8*   6 + C, C, ;
  104. : LXI           8*   1+  C, , ;
  105.  
  106. : x?>MARK       ( -- f addr )           TRUE   HERE   0 ,   ;
  107. : x?>RESOLVE    ( f addr -- )           HERE SWAP T! ?CONDITION ;
  108. : x?<MARK       ( -- f addr )           TRUE   HERE   ;
  109. : x?<RESOLVE    ( f addr -- )           ,   ?CONDITION   ;
  110.  
  111. : BEGIN         ( - a f )               A; x?<MARK ;
  112. : UNTIL         ( a f n - )             >R A; R> C, x?<RESOLVE A; ;
  113. : AGAIN         ( a f - )               $0C3 UNTIL ;
  114. : IF            ( n - A f )             >R A; R> C, x?>MARK A; ;
  115. : FORWARD       ( - A f )               $0C3 IF ;
  116. : THEN          ( A f - )               A; x?>RESOLVE ;
  117. : AFT           ( a f - a f A f )       2DROP FORWARD BEGIN 2SWAP ;
  118. : ELSE          ( A f - A f )           FORWARD 2SWAP THEN ;
  119. : REPEAT        ( A f a f - )           A; AGAIN THEN ;
  120. : CONTINUE      (  a f A f - a f )      2OVER REPEAT ;
  121. : WHILE         ( a f - A f a f )       IF 2SWAP ;
  122.  
  123. CR .( 8080 Machine Dependent Code Loaded )
  124.  
  125. ONLY FORTH ALSO DEFINITIONS
  126.  
  127. WARNING ON
  128.  
  129.