( ASSEMBLER Z80 COMPLET
PAR DOMINIQUE CONTANT 2025 
INSPIRE DU 8080 PAR
JOHN CASSADY )

1 - Durant la compilation du screen les messages "EXISTE DEJA …" ne sont que des avertissements, et non des erreurs.

2 - Certains registres du Z80, 8 bits ou 16 bits, se présentent sous la forme de constantes; par exemple A B BC DE etc.. Afin d'éviter toute confusion, les valeurs numériques doivent être précédées d'un 0 :

DE  -> Registre DE
0DE -> Valeur hexadécimale DE

2a - Les définitions commencent par CODE suivit du nom (semblable à un : normal) et terminent par C; (semblable au ; normal)
3 - En cas de doutes, consulter le document Assembler.pdf  

4 - 
	Depuis le vocabulaire Assembler, revenir au vocabulaire Forth par :
FORTH
	Depuis le vocabulaire Forth, inclure le vocabulaire Assembler par :
ASSEMBLER HEX   <- HEX n'est pas obligatoire, mais fortement conseillé
    	Depuis le vocabulaire Forth, revenir dans le vocabulaire Assembler par :
ASSEMBLER DEFINITIONS HEX  <- HEX n'est pas obligatoire, mais fortement conseillé


5 - Pour supprimer le vocabulaire ASSEMBLER, procéder comme suit :
FORTH DEFINITIONS
FORGET ASSEMBLER

6 - LABEL permet de créer des sous routines comme dans l'exemple ci dessous

OBS : MULT effectue le multiplication de deux valeurs 16 bits 
donnant le produits sur 32 bits : DECIMAL 25 20 MULT D. -> 500

ASSEMBLER DEFINITIONS HEX

 LABEL MPYX
 0 HL LXI	( LD HL,0000 )
 08 C MVI	( LD C,08 )
 BEGIN
 HL DAD		( ADD HL,HL )
 RLA		( RLA )
 CS IF		( JP NC,THEN )
 DE DAD		( ADD HL,DE )
 0 ACI		( ADC A,00 )
 THEN 
 C DEC		( DEC C )
 0=		
 UNTIL		( JP NZ,BEGIN )
 RET		( RET )
 C;

CODE MULT
DE POP		( POP DE )
HL POP		( POP HL )
BC PUSH		( PUSH BC )
H B MOV		( LD B,H )
L A MOV		( LD A,L )
MPYX CALL	( CALL MPYX )
HL PUSH		( PUSH HL )
A H MOV		( LD H,A )
B A MOV		( LD A,B )
H B MOV		( LD B,H )
MPYX CALL	( CALL MPYX )
DE POP		( POP DE )
D C MOV		( LD C,D )
BC DAD		( ADD HL,BC )
0 ACI		( ADC A,00 )
L D MOV		( LD D,L )
H L MOV		( LD L,H )
A H MOV		( LD H,A)
BC POP		( POP BC )
DE PUSH		( PUSH DE )
HL PUSH		( PUSH HL )
NEXT		( JP IX )
C;
DECIMAL ( <- Optionnel )

(CODE MPYX)
LD HL,0
LD C,0
ADD HL,HL
RLA
JP NC,6B4A
ADD HL,DE
ADC A,0
DEC C
JP NZ, 6B42
RET







Je te remercie beaucoup pour ton aide et tes explications.

Je teste ça ce soir.

Regardant mieux l'exemple que j'ai donné de MULT, je me suis aperçu qu'on pouvait y inclure un IF et un THEN, même si ça rallonge un peu l'ASM du programme, en remplaçant le [i]JR NC Index[/i] par un [i]JP NC Adresse[/i]. 
D'ailleurs je ne vois pas trop comment remplacer le JP par un JR : Il faut tenir compte de la possibilité du saut relatif du JR d'être supérieur à 7Fh et le saut relatif arrière = ou > à 80h devient problématique.

ASSEMBLER DEFINITIONS HEX

 LABEL MPYX
 0 HL LXI	( LD HL,0000 )
 08 C MVI	( LD C,08 )
 BEGIN
 HL DAD		( ADD HL,HL )
 RLA		( RLA )
 CS IF		( JP NC,THEN )
 DE DAD		( ADD HL,DE )
 0 ACI		( ADC A,00 )
 THEN 
 C DEC		( DEC C )
 0=		
 UNTIL		( JP NZ,BEGIN )
 RET		( RET )
 C;

CODE MULT
DE POP		( POP DE )
HL POP		( POP HL )
BC PUSH		( PUSH BC )
H B MOV		( LD B,H )
L A MOV		( LD A,L )
MPYX CALL	( CALL MPYX )
HL PUSH		( PUSH HL )
A H MOV		( LD H,A )
B A MOV		( LD A,B )
H B MOV		( LD B,H )
MPYX CALL	( CALL MPYX )
DE POP		( POP DE )
D C MOV		( LD C,D )
BC DAD		( ADD HL,BC )
0 ACI		( ADC A,00 )
L D MOV		( LD D,L )
H L MOV		( LD L,H )
A H MOV		( LD H,A)
BC POP		( POP BC )
DE PUSH		( PUSH DE )
HL PUSH		( PUSH HL )
NEXT		( JP IX )
C;
DECIMAL ( <- Optionnel )




7 - Les structures telles que IF ELSE BEGIN etc...
bien que peu pratiques, fonctionnent de la façon suivante :

Nous créons ici le mot CMOVE2 qui est la répétition du mot
CMOVE du noyau :


HEX
CODE CMOVE2
C L MOV
B H MOV
BC POP
DE POP
XTHL
BEGIN
B A MOV
C OR
0= NOT
WHILE
M A MOV
HL INX
DE STAX
DE INX
BC DCX
REPEAT
BC POP
NEXT
C;

donnera :

LD L,C
LD H,B
POP BC
POP DE
EX (SP),HL
		**DEBUT**
LD A,B
OR C
JP Z **FIN**
LD A,(HL)
INC HL
LD (DE),A
INC DE
DEC BC
JP **DEBUT**
		**FIN**
POP BC
JP IX

Ou encore :
( Ne sert à rien, c'est juste pour obtenir un code)

CODE RIEN
DE DCX
0= IF
HL INX
ELSE
DE INX
THEN
NEXT
C;

donnera :

DEC DE
JP NZ **ELSE**
INC HL
JP **ENDIF**
		**ELSE**
INC DE
		**ENDIF**
JP IX

8 - Cet assembler, bien que complet, mérite encore d'être amélioré … A retravailler plus tard.
