
Scr#1
\ Z80 ASSEMBLER DEEL 1
CR
.( Designed by Coos Haak Utrecht
) HEX
VOCABULARY ASSEMBLER IMMEDIATE

VARIABLE XY

: CODE CREATE -3 ALLOT
  !CSP [COMPILE] ASSEMBLER
  HEX DD XY ! SMUDGE ;

: ;CODE COMPILE (;CODE) ?CSP
  !CSP [COMPILE] ASSEMBLER
  HEX DD XY ! [COMPILE] [ ;
  IMMEDIATE
: ;C DECIMAL CURRENT @
  CONTEXT ! ?CSP SMUDGE ;


: END-CODE ;C ;

: MACRO [COMPILE] ASSEMBLER
  [COMPILE] : HEX DD XY ! ;

ASSEMBLER DEFINITIONS

: ENDM [COMPILE] ; ; IMMEDIATE

\ SELECTEER IX OF IY ALS INDEX
: %X DD XY ! ; : %Y FD XY ! ;
-->

Scr#2
\ Z80 ASSEMBLER DEEL 2
: CON CONSTANT ;
: 8* 2* 2* 2* ;
\ DEFINITIE VAN REGISTERS
0 CON B 1 CON C
2 CON D 3 CON E
4 CON H 5 CON L
6 CON M 7 CON A
6 CON SP 6 CON AF

\ GEBRUIK INDEX REGISTER
: X XY @ C, ;
: XL X L ; : XH X H ;

\ CONTROLEER ADRES VAN JR ETC.
: ?PAGE  DUP 80 + 00FF SWAP
  U< ABORT" BRANCH TOO LONG" ;


\ INSTRUCTIE BOUWENDE WOORDEN
\ 1 BYTE OPCODE ZONDER PARAMS
: M1 CREATE C, DOES> C@ C, ;
\ 1 BYTE OPCODE MET REGISTER
: M2 CREATE C, DOES> C@ + C, ;
\ 1 BYTE OPCODE MET REG.PAAR
: M3 CREATE C, DOES> C@ SWAP
  8* + C, ;
\ 1 BYTE OPC EN 1 BYTE IMMEDIATE
: M4 CREATE C, DOES> C@ C, C, ;
\ 1 BYTE OPC EN 2 BYTE IMMEDIATE
: M5 CREATE C, DOES> C@ C, , ;
-->

Scr#3
\ Z80 ASSEMBLER DEEL 3
\ ROTATIES EN VERSCHUIVINGEN
: M6 CREATE C, DOES> 00CB C,
  C@ + C, ;
\ BIT,RES EN SET
: M7 CREATE C, DOES> 00CB C,
  C@ + SWAP 8* + C, ;
\ 2 BYTE OPCODE
: M8 CREATE , DOES> @ , ;
\ RELATIEVE SPRONGEN
: M9 CREATE C, DOES> C@ C, HERE
  1+ - ?PAGE C, ;
\ INDEXREGISTER EN REGISTER
: MA CREATE C, DOES> X C@ C, C,
;
\ ROTATIES MET INDEXREGISTER
: MB CREATE C, DOES> X 00CB C,
  C@ SWAP C, C, ;
\ BIT,RES EN SET MET INDEX
: MC CREATE C, DOES> X 00CB C,
  C@ ROT ROT C, 8* + C, ;

\ BIJZONDERE INSTRUCTIES
: LDP# 8* 1+ C,  , ;
: LD# 8* 06 + C, C, ;
: LD 8* 40 + + C, ;
: SBCP 00ED C, 8* 42 + C, ;
: ADCP 00ED C, 8* 4A + C, ;
: STP 00ED C, 8* 43 + C, , ;
: LDP 00ED C, 8* 4B + C, , ;
-->


Scr#4
\ Z80 ASSEMBLER DEEL 4
\ INSTRUCTIESET DEEL 1
00 M1 NOP  02 M3 STAP
03 M3 INC  04 M3 INR
05 M3 DER  07 M1 RLCA
08 M1 EXAF 09 M3 ADDP
0A M3 LDAP 0B M3 DEC
0F M1 RRCA 10 M9 DJNZ
17 M1 RLA  18 M9 JR
1F M1 RRA  20 M9 JRNZ
22 M5 STHL 27 M1 DAA
28 M9 JRZ  2A M5 LDHL
2F M1 CPL  30 M9 JRNC
32 M5 STA  37 M1 SCF
38 M9 JRC  3A M5 LDA
3F M1 CCF  76 M1 HALT
80 M2 ADD  88 M2 ADC
90 M2 SUB  98 M2 SBC
B8 M2 CP   C1 M3 POP
C2 M5 JPNZ C3 M5 JP
C5 M3 PUSH C6 M4 ADD#
C7 M2 RST  C9 M1 RET
CA M5 JPZ  CD M5 CALL
CE M4 ADC# D2 M5 JPNC
D3 M4 OUT  D6 M4 SUB#
D9 M1 EXX  DA M5 JPC
DB M4 IN   DE M4 SBC#
E2 M5 JPPO E3 M1 EXSP
E6 M4 AND# E9 M1 JPHL
EA M5 JPPE EB M1 EXDE
EE M4 XOR# F2 M5 JPP
-->

Scr#5
\ Z80 ASSEMBLER DEEL 5
\ INSTRUCTIESET DEEL 2
F3 M1 DI   F6 M4 OR#
F9 M1 LDSP FA M5 JPM
FB M1 EI   FE M4 CP#
00 M6 RLC  08 M6 RRC
10 M6 RL   18 M6 RR
20 M6 SLA  28 M6 SRA
38 M6 SRL  40 M7 BIT
80 M7 RES  C0 M7 SET
B0ED M8 LDIR B8ED M8 LDDR
44ED M8 NEG  57ED M8 LDAI
47ED M8 LDIA 56ED M8 IM1
5EED M8 IM2  B1ED M8 CPIR
86 MA )ADD 8E MA )ADC
96 MA )SUB 9E MA )SBC
A6 MA )AND AE MA )XOR
B6 MA )OR  BE MA )CP
34 MA )INR 35 MA )DER
06 MB )RLC 0E MB )RRC
16 MB )RL  1E MB )RR
26 MB )SLA 2E MB )SRA
3E MB )SRL 46 MC )BIT
86 MC )RES C6 MC )SET
-->








Scr#6
\ Z80 ASSEMBLER DEEL 6
\ BIJZONDERE INDEX INSTRUCTIES
: )LD X SWAP 8* 46 + C, C, ;
: )ST X SWAP 70 + C, C, ;
: )LD# X 36 C, C, C, ;
\ MACRO'S
: )LDP OVER 1+ OVER )LD 1+ )LD ;

: )STP OVER 1+ OVER )ST 1+ )ST ;

: CLR 0 SWAP LDP# ;
: MOV 2DUP LD 1+ SWAP 1+ SWAP LD
 ;

\ CONDITIE CODES
: NOT 08 + ;
20 CON Z  28 CON NZ
30 CON CS 38 CON NC
C2 CON z  D2 CON cs
E2 CON pe E2 CON v
F2 CON m

\ CONDITIONELE RETURN
: RETC 8 XOR 2- C, ;
\ CONDITIONELE CALL
: CALLC 8 XOR 2+ C, , ;
 -->






Scr#7
\ Z80 ASSEMBLER DEEL 7
\ IF EN BEGIN CONSTRUCTIES

: THEN 000A ?PAIRS HERE 1- OVER
 - ?PAGE SWAP C! ;
: IF , HERE 1- 000A ;
: ELSE 000A ?PAIRS 0018 IF ROT
  SWAP THEN 000A ;
: UNTIL , 000B ?PAIRS 1- HERE 1-
  SWAP OVER - ?PAGE SWAP C! ;
: BEGIN HERE 000B ;
: AGAIN 0018 UNTIL ;
\ LUS MET DJNZ INSTRUCTIE
: DSZ 0010 UNTIL ;
: REPEAT 2SWAP AGAIN 2- THEN ;
: WHILE IF 2+ ;
: then 08 ?PAIRS HERE SWAP ! ;
: if C, HERE 0 , 0008 ;
: else 08 ?PAIRS C3 if ROT
  SWAP then 08 ;
: begin HERE 09 ;
: until C, 09 ?PAIRS , ;
: while if 2+ ;
: again C3 until ;
: repeat 2SWAP again 2- then
;
-->






Scr#8
\ Z80 ASSEMBLER DEEL 8

A0 M2 AND B0 M2 OR
A8 M2 XOR
: SUBP A AND SBCP ;
: TST DUP A LD 1+ OR ;
: JPIX %X X JPHL ;
CF M4 HOOK
D7 M1 PRT
DECIMAL
27028 CON UPTR
27039 8 + CON RPTR
27099 CON NEXT

FORTH DEFINITIONS HEX

\ LABELS VOOR SUBROUTINES OF
\ ADRESSEN BUITEN DE CODEDEF.
: LABEL
 [COMPILE] ASSEMBLER
 CREATE           SMUDGE
 !CSP HEX DD XY ! ;
DECIMAL

EXIT








