Un kit autour du EF6809P

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

Répondre
siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 14 avr. 2015 22:19

J'ai oublié de parler d'une imprimante que j'ai confectionné de quelques pièces récupérées d'une imprimante réformée et qui sera la base de la conception d'une imprimante 3D ou d'une perceuse ou fraiseuse automatique.

Je posterai aussi queqlques vidéos...

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 18 avr. 2015 16:18

Bonjour,

Voici le code de la première version de mon moniteur, que j'ai assemblé à partir des routines que j'avais créé et essayé une par une:

Code : Tout sélectionner

;************************************************************************************
;Global Equates
;************************************************************************************
S_RXD	EQU	$FC60
S_TXD	EQU	$FC20
GWAIT	EQU	$F800	;Routine temporisation
DIS_MEM	EQU	$F406

RAM	EQU	$0000
EEPROM	EQU	$8000
EPROM	EQU	$F000

ACIA	EQU	$1000
PIA	EQU	$1400
;____________________________________________________________________________________


;************************************************************************************
;Variables and constants
;************************************************************************************
;Variables
TEMPCHAR	EQU	$01A0
TEMP2CHR	EQU	$01A1
TEMPADDR	EQU	$01A3
TEMPHEX1	EQU	$01A5
TEMPHEX2	EQU	$01A6
TEMPHEX3	EQU	$01A7
TEMPHEX4	EQU	$01A8
PRMPTCHR	EQU	$01A9
SAVSSTCK	EQU	$01AA
SAVUSTCK	EQU	$01AC
SAVXINDX	EQU	$01AE
;buffer
BUFFERST	EQU	$01B0

SPACECHR	EQU	$20

	ORG	$0200
;____________________________________________________________________________________
	
	
;************************************************************************************
;Initialisation variables et ACIA
;************************************************************************************
MONSILIC	PSHS	A	;sauvegarder regsitre utilisé A
	
	LDA	#$3E	;code hexadécimal du caractère ">"
	STA	PRMPTCHR	;initialiser varaiable dédiée par caractère Prompt ">"
	
	BSR	INITACIA	;initialisation ACIA
	
	LBSR	INPTCMND

	PULS	A	;sauvegarder regsitre utilisé A
	
DOLLARSG	FCC	"$", $00	;chaine code signe Dollar avec zéro terminal
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________


;************************************************************************************
;Command Table
;************************************************************************************
CMNDTBSZ	EQU	$0F

CMNDTABL	FCC	"B"
	FDB	LOADPROG 

	FCC	"E"
	FDB	EXECPROG

	FCC	"S"
	FDB	$0200	;#SNGLSTEP

	FCC	"P"
	FDB	$0200	;#BREAKPNT

	FCC	"V"
	FDB	VIEWMEMR

	FCC	"M"
	FDB	MDFYMEMR

	FCC	"C"
	FDB	COPYMEMR
	
	FCB	$00	;fin table

;************************************************************************************
;Routine INITACIA Initialize ACIA for communication via serial port
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: Aucune
;************************************************************************************
INITACIA	PSHS	A	;sauvegarder regsitre utilisé A
	
	LDA	#$03	;master reset
	STA	$1000	;envoi au Controle Register  
	LDA	#$55	;code binaire de configuration: 01010101
	STA	$1000	;envoi au Controle Register
	
	PULS	A	;restaurer registre utilisé A
         
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine WAIT10MS Wait 10 milliseconds
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: Aucune
;************************************************************************************
WAIT10MS	PSHS	X	;sauvegarder registre utilisé
	
	LDX	#$0000	;initialisation compteur
LOOP	LEAX	1,x	;incrémentation compteur
	CMPX	#$02C8	;comparer compteur au nombre correspondant à 10ms
	BNE	LOOP	;si pas encore atteint reboucler
	
	PULS	X	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________


;************************************************************************************
;Routine INPTCHAR Input Character
;Entrée: Aucune
;Sorties: TEMPCHAR=Code Ascii du Caractère saisi
;Routines appelée: INITACIA, S_RXD
;************************************************************************************
INPTCHAR	PSHS	A	;sauvegarder registre utilisé

	JSR	S_RXD	;lecture caractère
	STA	TEMPCHAR	;le mettre dans varaible dédiée
	
	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine INPTHEX1 Input HEXADECIMAL CHARACTER
;Entrée: Aucune
;Sorties: TEMPHEX1=Code Hexadécimal du Caractère saisi
;Routines appelée: INITACIA, S_RXD, OUTSTRNG
;************************************************************************************
INPTHEX1	PSHS	A	;sauvegarder les registres utilisés

TST10	JSR	S_RXD	;lecture Caractère
	JSR	S_TXD	;affichage caractère reçu
	;BSR	INPTCHAR
	;LBSR	OUT1CHAR
	
	CMPA	#$30	;comparer caractère saisi avec "0"
	BLO	AFERMES1	;si inférieur à "O" aller traiter l'erreur
	
TSTHEX19	CMPA	#$39	;sinon comparer avec "9"
	BGT	TSTHEX1A
	
	BRA	ISHEXA1	
	
TSTHEX1A	CMPA	#$41	;"A"
	BLO	AFERMES1
	
TSTHEX1F	CMPA	#$46	;"F"
	BGT	AFERMES1
	
ISHEXA1	STA	TEMPHEX1

	PULS	A
	
	RTS
	
ERRMES1	FCC	"Pas hexadecimal!", $00	;message d'erreur à afficher
AFERMES1	LDX	#ERRMES1
	LBSR	OUTSTRNG
	
	PULS	A	;restaurer les registres utilisés
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine INPTHEX2 Input HEXADECIMAL CHARACTER
;Entrée: Aucune
;Sorties: TEMPHEX2=Code Hexadécimal du Caractère saisi
;Routines appelée: INITACIA, S_RXD, OUTSTRNG
;************************************************************************************
INPTHEX2	PSHS	A	;sauvegarder les registres utilisés

TSTHEX20	JSR	S_RXD	;lecture Caractère
	JSR	S_TXD	;affichage caractère reçu
	
	CMPA	#$30	;comparer caractère saisi avec "0"
	BLO	AFERMES2	;si inférieur à "O" aller traiter l'erreur
	
TSTHEX29	CMPA	#$39	;sinon comparer avec "9"
	BGT	TSTHEX2A
	
	BRA	ISHEXA2	
	
TSTHEX2A	CMPA	#$41	;"A"
	BLO	AFERMES2
	
TSTHEX2F	CMPA	#$46	;"F"
	BGT	AFERMES2
	
ISHEXA2	STA	TEMPHEX2

	PULS	A
	
	RTS
	
ERRMES2	FCC	"Pas hexadecimal!", $00	;message d'erreur à afficher
AFERMES2	LDX	#ERRMES2
	LBSR	OUTSTRNG
	
	PULS	A	;restaurer les registres utilisés

	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________

	
;************************************************************************************
;Routine INPTHEX3 Input HEXADECIMAL CHARACTER
;Entrée: Aucune
;Sorties: TEMPHEX3=Code Hexadécimal du Caractère saisi
;Routines appelée: INITACIA, S_RXD, OUTSTRNG
;************************************************************************************
INPTHEX3	PSHS	A	;sauvegarder les registres utilisés

TSTHEX30	JSR	S_RXD	;lecture Caractère
	JSR	S_TXD	;affichage caractère reçu
	
	CMPA	#$30	;comparer caractère saisi avec "0"
	BLO	AFERMES3	;si inférieur à "O" aller traiter l'erreur
	
TSTHEX39	CMPA	#$39	;sinon comparer avec "9"
	BGT	TSTHEX3A
	
	BRA	ISHEXA3	
	
TSTHEX3A	CMPA	#$41	;"A"
	BLO	AFERMES3
	
TSTHEX3F	CMPA	#$46	;"F"
	BGT	AFERMES3
	
ISHEXA3	STA	TEMPHEX3

	PULS	A
	
	RTS
	
ERRMES3	FCC	"Pas hexadecimal!", $00	;message d'erreur à afficher
AFERMES3	LDX	#ERRMES3
	LBSR	OUTSTRNG
	
	PULS	A	;restaurer les registres utilisés

	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine INPTHEX4 Input HEXADECIMAL CHARACTER
;Entrée: Aucune
;Sorties: TEMPHEX4=Code Hexadécimal du Caractère saisi
;Routines appelée: INITACIA, S_RXD, OUTSTRNG
;************************************************************************************
INPTHEX4	PSHS	A	;sauvegarder les registres utilisés

TSTHEX40	JSR	S_RXD	;lecture Caractère
	JSR	S_TXD	;affichage caractère reçu
	
	CMPA	#$30	;comparer caractère saisi avec "0"
	BLO	AFERMES4	;si < "O" aller traiter l'erreur
	
TSTHEX49	CMPA	#$39	;sinon comparer avec "9"
	BGT	TSTHEX4A	;si > "9" donc pas Hexa, aller tester si < "A"
	
	BRA	ISHEXA4	;sinon (<= "9") c'est un caractère Hexadécimal	
	
TSTHEX4A	CMPA	#$41	;comparer caractère avec "A"
	BLO	AFERMES4	;si < "A" (et déjà > "9") donc pas Hexa, traiter erreur
	
TSTHEX4F	CMPA	#$46	;sinon (>= "A") le comparer avec "F"
	BGT	AFERMES4	;si > "F" donc pas Hexa, aller traiter erruer
	
ISHEXA4	STA	TEMPHEX4	;sinon (<= "F") donc Hexa, le mettre dans variable dédiée
	
	PULS	A	;restaurer les registres utilisés
	
	RTS		;revenir au programme appelant
	
ERRMES4	FCC	"Pas hexadecimal!", $00	;message d'erreur à afficher
AFERMES4	LDX	#ERRMES4	;mettre adresse message d'erreur dans X	
	LBSR	OUTSTRNG	;pour l'afficher sur teminal série
	
	PULS	A	;restaurer les registres utilisés	

	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine OUT1CHAR Out Character
;Entrée: A=TEMPCHAR=Code Ascii du Caractère à afficher
;Sorties: Aucune
;Routines appelée: INITACIA, S_TXD
;************************************************************************************
OUT1CHAR	PSHS	A	;sauvegarder registre utilisé
	
	LDA	TEMPCHAR
	JSR	S_TXD
	
	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________


;************************************************************************************	
;Routine OUT2CHAR Out Character
;Entrée: TEMP2CHR=Code Ascii du Caractère à afficher
;Sorties: Aucune
;Routines appelée: INITACIA, S_TXD
;************************************************************************************
OUT2CHAR	PSHS	A	;sauvegarder registre utilisé

	LDA	TEMP2CHR
	JSR	S_TXD
	
	LBSR	WAIT10MS

	LDA	TEMP2CHR+1
	JSR	S_TXD
	
	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************	
;Routine OUTHEXAW Out Hexadecimal number in 2 characters
;Entrée: TEMPCHAR=Code Ascii du Caractère à afficher en hexadécimal
;Sorties: TEMP2CHR=Nibble supérieur, TEMP2CHR+1=Nibble inférieur
;Routines appelée: Aucune
;************************************************************************************
OUTHEXAW	PSHS	A,B

	LDA	TEMPCHAR
	TFR	A,B
	ANDA	#$0F
	ORA	#$30
	ASRB
	ASRB
	ASRB
	ASRB
	ANDB	#$0F
	ORB	#$30
	CMPB	#$39
	BGT	CORRIGEB

AFFICHEB	PSHS	A
	LDA	#$01
	JSR	GWAIT
	PULS	A
	
	STB	TEMP2CHR
	
	BRA	TRAITEA

CORRIGEB	ADDB	#$07
	BRA	AFFICHEB

TRAITEA	CMPA	#$39
	BGT	CORRIGEA
AFFICHEA	PSHS	A
	LDA	#$01
	JSR	GWAIT
	PULS	A
	
	STA	TEMP2CHR+1
	
	LBSR	OUT2CHAR
	
	PULS	A,B
	RTS

CORRIGEA	ADDA	#$07
	BRA	AFFICHEA
;____________________________________________________________________________________
	
	
;************************************************************************************	
;Routine OUTHEXAD Out Hexadecimal number in 4 characters
;Entrée: TEMP2CHR=Code Ascii du 1er Caractère à afficher en hexadéc.
;        TEMP2CHR+1=Code Ascii du 2eme Caractère à afficher en hexa
;Sorties: TEMPHEX1=Nibble inférieur du 1ere nombre hexadécimal
;	TEMPHEX2=Nibble supérieur du 1ere nombre hexadécimal
;	TEMPHEX3=Nibble inférieur du 2eme nombre hexadécimal
;	TEMPHEX4=Nibble supérieur du 2eme nombre hexadécimal
;Routines appelée: Aucune
;************************************************************************************
OUTHEXAD	PSHS	A,B

	LDA	TEMP2CHR
	TFR	A,B
	ANDA	#$0F
	ORA	#$30
	ASRB
	ASRB
	ASRB
	ASRB
	ANDB	#$0F
	ORB	#$30
	CMPB	#$39
	BGT	CORRIGEB1

AFFICHEB1	PSHS	A
	LDA	#$01
	JSR	GWAIT
	PULS	A
	
	;STB	TEMPHEX1
	
	STB	TEMPCHAR
	LBSR	OUT1CHAR	;affichage 2eme nibble du 1er caractère hexa
	
	BRA	TRAITEA1

CORRIGEB1	ADDB	#$07
	BRA	AFFICHEB1

TRAITEA1	CMPA	#$39
	BGT	CORRIGEA1
AFFICHEA1	PSHS	A
	LDA	#$01
	JSR	GWAIT
	PULS	A
	
	;STA	TEMPHEX2
	
	STA	TEMPCHAR
	LBSR	OUT1CHAR	;affichage 2eme nibble du 1er caractère hexa
	
	BRA	DEUXNBRE

CORRIGEA1	ADDA	#$07
	BRA	AFFICHEA1
	
;deuxième nombre hexadécimal	
DEUXNBRE	LDA	TEMP2CHR+1
	TFR	A,B
	ANDA	#$0F
	ORA	#$30
	ASRB
	ASRB
	ASRB
	ASRB
	ANDB	#$0F
	ORB	#$30
	CMPB	#$39
	BGT	CORRIGEB2

AFFICHEB2	PSHS	A
	LDA	#$01
	JSR	GWAIT
	PULS	A
	
	;STB	TEMPHEX3
	
	STB	TEMPCHAR
	LBSR	OUT1CHAR	;affichage premier nibble du 2eme caractère hexa
	
	BRA	TRAITEA2

CORRIGEB2	ADDB	#$07
	BRA	AFFICHEB2

TRAITEA2	CMPA	#$39
	BGT	CORRIGEA2
AFFICHEA2	PSHS	A
	LDA	#$01
	JSR	GWAIT
	PULS	A
	
	;STA	TEMPHEX4
	
	STA	TEMPCHAR
	LBSR	OUT1CHAR	;affichage 2eme nibble du 2eme caractère hexa
	
	PULS	A,B
	RTS

CORRIGEA2	ADDA	#$07
	BRA	AFFICHEA2
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine OUTPRMPT Out Character
;Entrée: Aucune
;Sorties: TEMPCHAR=">" 
;Routines appelée: OUT1CHAR
;************************************************************************************
OUTPRMPT	PSHS	A	;sauvegarder registre utilisé
	
	LDA	PRMPTCHR
	STA	TEMPCHAR
	LBSR	OUT1CHAR

	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine OUTSTRNG: Out String to serial port
;Entrée: X=Chaine de caractèrer à afficher, terminée par "0"
;Sorties: Aucune
;Routines appelée: INITACIA, S_TXD, DIS_MEM, WAIT10MS
;*******************************************************************
OUTSTRNG	PSHS	A	;sauvegarder registre utilisé
	
	LDA	,X	;Charger A avec premier charactère de la chaine
	
OUTSTRN1	JSR	S_TXD	;le transférer au terminal série
	
	LBSR	WAIT10MS	; attendre 10ms
	
	LEAX	1,X	;incrémenter index chaine caractères
	
	LDA	,X	;charger A avec caractère suivant	
	CMPA	#$00	;le comparer avec "0" terminal (caractère de fin de la chaine)	
	BNE	OUTSTRN1	;si fin chaine non encore atteinte, continuer en transférant au terminal
	
	PULS	A	;si fin de chaine restaurer registre A
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine OUTSPACE Out Space Character
;Entrée: Aucune
;Sorties: TEMPCHAR=" " 
;Routines appelée: OUTCHAR
;************************************************************************************
OUTSPACE	PSHS	A	;sauvegarder registre utilisé

	LDA	#SPACECHR
	STA	TEMPCHAR
	LBSR	OUT1CHAR
	
	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine VIEWMEMR: Affiche une zone mémoire début pointée par X et fin pointée par Y
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: GWAIT, DIS_MEM
;************************************************************************************
STRTADDR	FCC	"Entrez Adresse Debut: ", $00
ENDADDR	FCC	"Entrez Adresse Fin: ", $00
SIGNEHEX	FCC	"$", $00

VIEWMEMR	PSHS	A,X
	
	LDX	#STRTADDR
	BSR	OUTSTRNG
	
	LDX	#SIGNEHEX
	BSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	LBSR	BULDADDR
	
	LDX	TEMPADDR
	PSHS	X
	
	LBSR	OUTCRLF
	
	LDX	#ENDADDR
	BSR	OUTSTRNG
	
	LDX	#SIGNEHEX
	BSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	LBSR	BULDADDR
	
	LBSR	OUTCRLF
	
	PULS	X
	
	CMPX	TEMPADDR	;comparer adresse début avec adresse fin 
	BLE	VIEWMEM1	;si inférieure aller à VIEMEM1
	
	STX	TEMPADDR	;sinon (début > fin) mettre adresse début dans adresse fin
	
VIEWMEM1	STX	TEMP2CHR	;mettre adresse début dans variable
	
	;LDX	#SIGNEHEX
	;lBSR	OUTSTRNG
	
	LBSR	OUTHEXAD	;afficher adresse en Hexadécimal
	LBSR	OUTSPACE
	
	LDA	,X+
	STA	TEMPCHAR
	
	;LDX	#SIGNEHEX
	;lBSR	OUTSTRNG
	
	LBSR	OUTHEXAW	;afficher donnée en Hexadécimal
	
	LBSR	OUTCRLF
	
	CMPX	TEMPADDR
	BLS	VIEWMEM1
	
	PULS	A,X
	
	RTS
;____________________________________________________________________________________


;************************************************************************************
;Routine MDFYMEMR: Modifie une case mémoire en saisissant son nouveau contenu
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: GWAIT, DIS_MEM
;************************************************************************************
STRTADDM	FCC	"Entrez Adresse Debut: ", $00
ENDADDRM	FCC	"Entrez Adresse Fin: ", $00

MDFYMEMR	PSHS	A,X
	
	LDX	#STRTADDM
	LBSR	OUTSTRNG
	
	LDX	#SIGNEHEX
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	LBSR	BULDADDR
	
	LDX	TEMPADDR
	PSHS	X
	
	LBSR	OUTCRLF
	
	LDX	#ENDADDRM
	LBSR	OUTSTRNG
	
	LDX	#SIGNEHEX
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	LBSR	BULDADDR
	
	LBSR	OUTCRLF
	
	PULS	X
	
	CMPX	TEMPADDR	;comparer adresse début avec adresse fin 
	BLE	MDFYMEM1	;si inférieure aller à VIEMEM1
	
	STX	TEMPADDR	;sinon (début > fin) mettre adresse début dans adresse fin
	
MDFYMEM1	STX	TEMP2CHR	;mettre adresse début dans variable
	
	;LDX	#SIGNEHEX
	;lBSR	OUTSTRNG
	
	LBSR	OUTHEXAD	;afficher adresse en Hexadécimal
	LBSR	OUTSPACE
	
	LBSR	INPTHEX1	;entrer 1er caractère Hexa de la donnée
	LBSR	INPTHEX2	;entrer 2eme caractère Hexa de la donnée
	
	LBSR	BULDDATA	;construire la donnée à partir des caractères hexa entrés
	
	LDA	TEMPCHAR	;sauvegarder donnée construire dans variable dédiée
	
	LBSR	OUTCRLF
	
	STA	,X+	;la transférer dans l'adresse désignée
	
	CMPX	TEMPADDR
	BLS	MDFYMEM1
	
	PULS	A,X
	
	RTS	
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine COPYMEMR: Copie une zone mémoire X de A groupes de B octets dans une autre zone Y
;Entrée: A=Nombre de groupes, B=Nombre d'octets par groupe, X=Adresse source, Y=Adresse cible
;Sorties: Aucune
;Routines appelée: GWAIT, DIS_MEM
;************************************************************************************
SRCEADDR	FCC	"Entrez Adresse Source: ", $00
TRGTADDR	FCC	"Entrez Adresse Cible: ", $00
NBRBYTES	FCC	"Entrez nombre octets / groupe: ", $00
NBREGRPS	FCC	"Entrez nombre Groupes octets: ", $00 

COPYMEMR	NOP
;demande adresse source
	LDX	#SRCEADDR
	LBSR	OUTSTRNG
	
	LDX	#DOLLARSG
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	LBSR	BULDADDR
	
	LDX	TEMPADDR
	
	PSHS	X	;sauvegarder X (adresse source)
	
	BSR	OUTCRLF

;demande adresse cible	
	LDX	#TRGTADDR
	LBSR	OUTSTRNG
	
	LDX	#DOLLARSG
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	LBSR	BULDADDR
	
	LDY	TEMPADDR
	
	BSR	OUTCRLF	;retour à la ligne suivante
		
;demande nombre d'octets par groupes
	LDX	#NBRBYTES	;message entrée donnée
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LDX	#DOLLARSG
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1	;entrer 1er caractère Hexa de la donnée
	LBSR	INPTHEX2	;entrer 2eme caractère Hexa de la donnée
	
	LBSR	BULDDATA	;construire la donnée à partir des caractères hexa entrés
	
	LDB	TEMPCHAR	;sauvegarder donnée construire dans variable dédiée
	
	LBSR	OUTCRLF	;retour à la ligne suivante
	
;demande nombre groupes d'octets
	LDX	#NBREGRPS	;message entrée donnée
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LDX	#DOLLARSG
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1	;entrer 1er caractère Hexa de la donnée
	LBSR	INPTHEX2	;entrer 2eme caractère Hexa de la donnée
	
	LBSR	BULDDATA	;construire la donnée à partir des caractères hexa entrés
	
	LDA	TEMPCHAR	;sauvegarder donnée construire dans variable dédiée
	
	PULS	X	;restaurer X (adresse source) pour début de copie
	
	LBSR	OUTCRLF	;retour à la ligne suivante
	
;copie des données	
DLOOPEX	PSHS	B	;Sauve B (Compteur d'octets)
	
	PSHS	A	;Sauve A (Compteur de groupes)
	
DLOOPIN	LDA	,X	;Charge donnée de mémoire source dans A		
	STA	,Y	;Mémorise donnée lue en mémoire cible
	LEAX	1,X	;Incrémente X (compteur adresse source)
	LEAY	1,Y	;incrémente Y (compteur adresse cible)
	DECB		;Décremente B (compteur octets de 64)
FLOOPIN	BNE	DLOOPIN	;Si <> 0, Réentrer en boucle de 64 octets
	
	LDA	#$08	;8ms
	JSR	GWAIT	;Temporisation	

	JSR	DIS_MEM	;Saut vers routine DIS_MEM (Affiche adresse et donnée envoyée)
	
	PULS	A	;Restaure A (Compteur de groupes)
	
	DECA		;Décremente A (Compteur d'octets)
	
	PULS	B	;Restaure B pour le remettre au nombre d'octets initial
	
FLOOPEX	BNE	DLOOPEX	;Si <> 0, Réentrer en boucle de 32 groupes

	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine OUTCRLF: Out Chariot Return & Line Feed
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: INITACIA, S_TXD
;************************************************************************************
OUTCRLF	PSHS	A	;sauvegarder registre utilisé

	LDA	#$0D
	JSR	S_TXD
	
	LBSR	WAIT10MS

	LDA	#$0A
	JSR	S_TXD
	
	PULS	A	;restaurer registre utilisé

	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine INPTCMND Input Command
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: INPTCHAR, OUT1CHAR, EXECCMND
;************************************************************************************
INPTCMND	PSHS	A,X	;sauvegarder les registres utilisés

	;LDX	#PRMPTCHR	;charger caractère ">" (Prompt dans X
	;LBSR	OUTSTRNG	;et l'afficher comme Prompt pour l'attente de commande
	
	LBSR	OUTPRMPT	;afficher Prompt pour l'attente de commande
	
	LDX	#BUFFERST	;index X pointe sur zone mémoire BUFFERST
	
INPTCMD1	JSR	S_RXD	;lecture Caractère
	JSR	S_TXD	;ecriture caractère reçu
	
	;LBSR	INPTCHAR
	;LBSR	OUT1CHAR
	;LDA	TEMPCHAR
	
	CMPA	#$0D	;caractère reçu = "Chariot Return"?
	BEQ	INPTCMD2	;si oui aller à INPTCMND2: saisir et tester caractère suivant
	
	STA	,X+	;sinon (caractère normal) le charger dans BUFFERST
	
	BRA	INPTCMD1	;aller lire caractère suivant
	
INPTCMD2	STA	TEMPCHAR	;sauvegarder premier caractère (CR) pour utilisation ultérieure
	
	JSR	S_RXD	;lecture Caractère
	JSR	S_TXD	;ecriture caractère reçu
	STA	TEMP2CHR	;sauvegarder premier caractère (CR) pour utilisation ultérieure
	
	;LBSR	INPTCHAR
	;LBSR	OUT1CHAR
	;LDA	TEMPCHAR
	
	CMPA	#$0A	;caractère reçu = "Line Feed"?
	BEQ	INPTCMD3	;si oui aller à INPTCMND3: charger caractère $00 dans BUFFERST
	
	LDA	TEMPCHAR	;sinon (caractère normal), charger caractère "CR"  
	STA	,X+	;dans BUFFERST puisque caractère suivant est <> de "LF"	
	
	LDA	TEMP2CHR	;charger caractère (normal) suivant le caractère "CR"
	STA	,X+	;dans BUFFERST puisque caractère suivant "CR" est <> de "LF"
	
	BRA	INPTCMD1	;aller lire caractère suivant
	
INPTCMD3	LDA	#$00	;charger caractère $00 (caractère 0 terminal)
	STA	,X	;dans BUFFERST
	
	BSR	EXECCMND	;executer commande saisie
	
	BSR	OUTCRLF	;retourner à la ligne suivante et
	
	PULS	A,X	;restaurer les registres utilisés
	
	BRA	INPTCMND
	
	RTS		;Fin de sous routine et retour au programme appelant
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine EXECCMND Execute command
;Entrée: BUFFERST=Commande reçue par RS232
;Sorties: 
;Routines appelée: OUTSTRNG
;************************************************************************************
ERCMDMES	FCC	"Commande non trouvee!", $00	;si fin de table commandes atteint
CMDAEXEC	FCC	"Commande a executer: ", $00

EXECCMND	PSHS	A,B,X	;sauvegarder les registres utilisés

	LDX	#CMNDTABL	;charger X avec première entrée de la table commandes
	
CMPENTRY	LDA	,X	;A<-entrée de table commandes

	CMPA	BUFFERST	;comparer commande saisie avec entrée de table commandes
	BEQ	EXECUTCMD	;si égale l'exécuter	
	
	LEAX	3,X	;sinon passer à l'entrée suivante de la table commandes
	
	LDB	#CMNDTBSZ	;offset adressage indéxé
	
	CMPX	B,X	;test fin de table commandes atteint
	BNE	CMPENTRY	;si non fin de table, aller comparer commande saisie avec entrée suivante
	
	LDX	#ERCMDMES
	LBSR	OUTSTRNG	;afficher message d'erreur "Commande non trouvée!"
	
	BRA	EXECCMND
	
	PULS	A,B,X	;restaurer les registres utilisés

	RTS		;Fin de sous routine et retour au programme moniteur

EXECUTCMD	LBSR	OUTCRLF
		
	LDX	1,X	;charger X avec adresse contenue dans X+1
	
	JSR	0,X	;sauter à sous routine dont l'adresse est contenue dans X
	
	PULS	A,B,X	;restaurer les registres utilisés

	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________


;************************************************************************************
;Routine BULDADDR Build Address
;Entrée: TEMPHEX1, TEMPHEX2, TEMPHEX3, TEMPHEX4 = 4 Hexa characters
;Sorties: TEMPADDR, TEMPADDR+1 = Address
;Routines appelée: Aucune
;************************************************************************************
BULDADDR	PSHS	A	;sauvegarder registre utilisé
;first hexa
	LDA	TEMPHEX1
	CMPA	#$41
	BLO	NUMERIC1
	
ALPHANM1	SUBA	#$37
	BRA	BULDHEX1
	
NUMERIC1	SUBA	#$30

BULDHEX1	ASLA
	ASLA
	ASLA
	ASLA
	
	STA	TEMPADDR
	
;second hexa	
	LDA	TEMPHEX2
	CMPA	#$41
	BLO	NUMERIC2
	
ALPHANM2	SUBA	#$37
	BRA	BULDHEX2
	
NUMERIC2	SUBA	#$30

BULDHEX2	ORA	TEMPADDR
	STA	TEMPADDR

;third hexa
	LDA	TEMPHEX3
	CMPA	#$41
	BLO	NUMERIC3
	
ALPHANM3	SUBA	#$37
	BRA	BULDHEX3
	
NUMERIC3	SUBA	#$30

BULDHEX3	ASLA
	ASLA
	ASLA
	ASLA
	
	STA	TEMPADDR+1

;fourth hexa
	LDA	TEMPHEX4
	CMPA	#$41
	BLO	NUMERIC4
	
ALPHANM4	SUBA	#$37
	BRA	BULDHEX4
	
NUMERIC4	SUBA	#$30

BULDHEX4	ORA	TEMPADDR+1
	STA	TEMPADDR+1
	
	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine BULDDATA Build Data
;Entrée: TEMPHEX1, TEMPHEX2 = 2 Hexa characters
;Sorties: TEMPCHAR = Data
;Routines appelée: Aucune
;************************************************************************************
BULDDATA	PSHS	A	;sauvegarder registre utilisé
;first hexa
	LDA	TEMPHEX1
	CMPA	#$41
	BLO	NUMERIC5
	
ALPHANM5	SUBA	#$37
	BRA	BULDHEX5
	
NUMERIC5	SUBA	#$30

BULDHEX5	ASLA
	ASLA
	ASLA
	ASLA
	
	STA	TEMPCHAR

;second hexa	
	LDA	TEMPHEX2
	CMPA	#$41
	BLO	NUMERIC6
	
ALPHANM6	SUBA	#$37
	BRA	BULDHEX6
	
NUMERIC6	SUBA	#$30

BULDHEX6	ORA	TEMPCHAR
	STA	TEMPCHAR
	
	PULS	A	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________

	
;************************************************************************************
;Routine LOADPROG: Load program into given adress (and execute it)
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: OUTSTRNG, INPTHEX1, INPTHEX2, INPTHEX3, INPTHEX4
;		BULDADDR, BULDDATA, EXECPROG
;************************************************************************************
MESSAGE1	FCC	"Entrez adresse debut: ", $00
MESSAGE2	FCC	"Entrez adresse fin: ", $00
MESSAGE3	FCC	"Entrez donnee: ", $00

LOADPROG	PSHS	A,B,X	;sauvegarder les registres utilisés

	LDX	#MESSAGE1	;message entrée adresse début
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LBSR	INPTHEX1	;entrer 1er caractère Hexa de l'adresse
	LBSR	INPTHEX2	;entrer 2eme caractère Hexa de l'adresse
	LBSR	INPTHEX3	;entrer 3eme caractère Hexa de l'adresse
	LBSR	INPTHEX4	;entrer 4eme caractère Hexa de l'adresse
	
	LBSR	BULDADDR	;construire l'adresse à partir des caractères hexa entrés
	
	LDX	TEMPADDR	;sauvegarder adresse construire dans variable dédiée
	STX	SAVXINDX	;sauvegarder X (adresse début) dans variable dédiée
	
	;LBSR	OUTCRLF	;retour à la ligne suivante
	
	;LDX	#MESSAGE2	;message entrée adresse fin
	;LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	;LBSR	OUTCRLF	;retour à la ligne suivante
	
	;LBSR	INPTHEX1	;entrer 1er caractère Hexa de l'adresse
	;LBSR	INPTHEX2	;entrer 2eme caractère Hexa de l'adresse
	;LBSR	INPTHEX3	;entrer 3eme caractère Hexa de l'adresse
	;LBSR	INPTHEX4	;entrer 4eme caractère Hexa de l'adresse
	
	;LBSR	BULDADDR	;construire l'adresse à partir des caractères hexa entrés
	
	LBSR	OUTCRLF	;retour à la ligne suivante
		
	LDX	#MESSAGE3	;message entrée donnée
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LDX	SAVXINDX	;restaurer X (adresse début) depuis variable dédiée
	
	LDB	#$00
	
INPUTHEX	LBSR	OUTCRLF	

	STX	TEMP2CHR
	LBSR	OUTHEXAD
	LBSR	OUTSPACE

	LBSR	INPTHEX1	;entrer 1er caractère Hexa de la donnée
	LBSR	INPTHEX2	;entrer 2eme caractère Hexa de la donnée
	
	LBSR	BULDDATA	;construire la donnée à partir des caractères hexa entrés
	
	LDA	TEMPCHAR	;sauvegarder donnée construire dans variable dédiée
		
	STA	,X+	;la transférer dans l'adresse désignée
	
	CMPA	#$0D	;compare with CR
	BNE	TESTLF	;si non égal
	
	LDB	#$01
	
	BRA	INPUTHEX	;aller saisir une autre donnée
	
TESTLF	CMPA	#$0A	;compare with LF
	BEQ	TSTCARRY
	
	LDB	#$00
	
	BRA	INPUTHEX
	
TSTCARRY	CMPB	#$01
	BEQ	EXECUTPRG
	
	BRA	INPUTHEX
	
EXECUTPRG	;LDX	SAVXINDX

	;PSHS	X
	
	;PULS	PC
	
	PULS	A,B,X	;restaurer les registres utilisés
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________


;************************************************************************************
;Routine EXECPROG Execute program in specified adress
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée: OUTSTRNG, INPTHEXA, BULDADDR
;************************************************************************************
ADDRMESS	FCC	"Entrez adresse Programme: ", $00

EXECPROG	PSHS	X	;sauvegarder registre utilisé
	
	LDX	#ADDRMESS
	LBSR	OUTSTRNG
	
	LBSR	INPTHEX1
	LBSR	INPTHEX2
	LBSR	INPTHEX3
	LBSR	INPTHEX4
	
	LBSR	BULDADDR
	
	LDX	TEMPADDR
	
	LBSR	OUTCRLF
	
	JSR	,X
	
	PULS	X	;restaurer registre utilisé
	
	RTS		;Fin de sous routine et retour au programme moniteur
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine CNVHXBCD Convert Hexadecimal number to BCD number
;Entrée: A=Nombre en hexadécimal à convertir
;Sorties: TEMPCHAR=Unités, TEMP2CHR=Dizaines, TEMP2CHR+1=Centaines
;Routines appelée: Aucune
;************************************************************************************
CNVHXBCD	PSHS	B
	
	LDB	#$00
	STB	TEMPCHAR
	STB	TEMP2CHR
	STB	TEMP2CHR+1
	
CENTAINE	CMPA	#$64
	BLO	DIZAINES
	
	SUBA	#$64
	INC	TEMPCHAR
	
	BRA	CENTAINE
	
DIZAINES	CMPA	#$0A
	BLO	UNITES
	
	SUBA	#$0A
	INC	TEMP2CHR
	BRA	DIZAINES
	
UNITES	STA	TEMP2CHR+1

	PULS	B
	
	RTS
;____________________________________________________________________________________
	
	
;************************************************************************************
;Routine READADC, Read Analog to Digital converter
;Entrée: Aucune
;Sorties: Aucune
;Routines appelée:
;************************************************************************************
U_FIRQ	EQU	$00F4
D_AD0	EQU	$1C00
D_AD1	EQU	$1C01	
D_AD2	EQU	$1C02	
	
T2	EQU	$00E0
DIS_BYT	EQU	$F3E3
DIS_BAC	EQU	$F36F
G_WAIT	EQU	$F800

MESSADC0	FCC	"Entree Analogique Luminosite: ", $00
MESSADC1	FCC	"Entree Analogique Temperature: ", $00
MESSADC2	FCC	"Entree Analogique Tension: ", $00

MESSDEGC	FCC	" Degr. C  ", $00
MESSKLUX	FCC	" Kilo Lux  ", $00
MESSVOLT	FCC	" Deci Volt  ", $00

READADC	PSHS	A,X

LOOPCONV	;lecture entrée 0 du multiplexeur vers convertisseur A/D
	STA	D_AD0	;début conversion
		
	LDX	#MESSADC0	;message entrée adresse début
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LDA	#30
	JSR	G_WAIT
	
	LDA	D_AD0	;lit état provenant du convertisseur
	
	LBSR	CNVHXBCD
	
	LDA	TEMPCHAR
	ADDA	#$30
	STA	TEMPCHAR
	
	LBSR	OUT1CHAR
	
	LDA	TEMP2CHR
	ADDA	#$30
	STA	TEMP2CHR
	
	LDA	TEMP2CHR+1
	ADDA	#$30
	STA	TEMP2CHR+1
	
	LBSR	OUT2CHAR
	
	LDX	#MESSKLUX	;message Klux
	LBSR	OUTSTRNG	;afficher message KLux
	
	LBSR	OUTSPACE
	LBSR	OUTSPACE
	LBSR	OUTSPACE
	
;lecture entrée 1 du multiplexeur vers convertisseur A/D
	STA	D_AD1	;début conversion
		
	LDX	#MESSADC1	;message entrée adresse début
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LDA	#30
	JSR	G_WAIT
	
	LDA	D_AD1	;lit état provenant du convertisseur
	
	SUBA	#$AF
	
	LBSR	CNVHXBCD
	
	LDA	TEMPCHAR
	ADDA	#$30
	STA	TEMPCHAR
	
	LBSR	OUT1CHAR
	
	LDA	TEMP2CHR
	ADDA	#$30
	STA	TEMP2CHR
	
	LDA	TEMP2CHR+1
	ADDA	#$30
	STA	TEMP2CHR+1
	
	LBSR	OUT2CHAR
	
	LDX	#MESSDEGC	;message °C
	LBSR	OUTSTRNG	;afficher message °C
	
	LBSR	OUTSPACE
	LBSR	OUTSPACE
	LBSR	OUTSPACE
	
;lecture entrée 2 du multiplexeur vers convertisseur A/D
	STA	D_AD2	;début conversion
		
	LDX	#MESSADC2	;message entrée adresse début
	LBSR	OUTSTRNG	;afficher message d'entrée d'adresse
	
	LDA	#30
	JSR	G_WAIT
	
	LDA	D_AD2	;lit état provenant du convertisseur
	
	LBSR	CNVHXBCD
	
	LDA	TEMPCHAR
	ADDA	#$30
	STA	TEMPCHAR
	
	LBSR	OUT1CHAR
	
	LDA	TEMP2CHR
	ADDA	#$30
	STA	TEMP2CHR
	
	LDA	TEMP2CHR+1
	ADDA	#$30
	STA	TEMP2CHR+1
	
	LBSR	OUT2CHAR
	
	LDX	#MESSVOLT	;message Volt
	LBSR	OUTSTRNG	;afficher message Volt
	
	LBSR	OUTSPACE
	LBSR	OUTSPACE
	LBSR	OUTSPACE
		
	JMP	LOOPCONV
	
	PULS	A,X
	
	RTS

	
;autre version de READADC	
	LDY	#U_FIRQ	;programme gestionnaire FIRQ
	LDA	#$7E	;instruction "saute, JMP"
	STA	0,Y
	LDX	#AD_IN	;adresse routine interruption
	STX	1,Y
	
	ANDCC	#%10111111	;actionne FIRQ	

	STA	D_AD2	;envoie début conversion au convertisseur A/D
	
AD_CONV	NOP
	JMP	AD_CONV
	
AD_IN	LDX	#T2	;X indique cellule donnée
	LDA	0,X	;lit ancienne donnée
	JSR	DIS_BYT
	LDB	#1
	JSR	DIS_BAC
	LDA	D_AD0	;lit état provenant du convertisseur
	LDX	#T2	;X indique cellule donnée
	STA	0,X	;mémorise donnée	
	LDA	#1
	JSR	G_WAIT
	STA	D_AD0	;nouveau début conversion
	
	RTI
	
;M_DATA	DB	00	;zone de sauvegarde des données
;____________________________________________________________________________________
Le moniteur n'est pas très élégant en terme de lisibilité et d'optimisation mais son grand avantage c'est qu'il est fonctionnel à 100% et ne contient pas d'erreurs si on lui donne ce qu'il attends comme entrées.

Ce moniteur contient aussi une application de lecture et affichage en logs de quelques capteur analogique.

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 19 avr. 2015 15:38

Vidéo de démonstration des routines du nouveau moniteur du kit:

https://www.youtube.com/watch?v=wUDwl6ZRYkA

Avatar du membre
6502man
Messages : 8512
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Un kit autour du EF6809P

Message par 6502man » 20 avr. 2015 16:39

Superbe réalisation :D

Félicitations :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 24 avr. 2015 15:07

Je suis entrain de concevoir un mini assembleur.

L'idée de départ est simple: Peupler des tables contenant les instructions, les codes correspondants à ses instructions pour chaque mode d'adressage puis à chaque apparition d'une instruction avec ses paramètres, déterminer le mode d'adressage puis trouver la correspondance de l'instruction dans la table des codes correspondant à l'adressage voulu en utilisant les index. Les Post-bytes seront aussi ajouté selon le mode d'adressage indexé utilisé.

Les tables seront déposée en RAM de façon séquentielle en faisant attention à réserver des cases pour les codes des modes d'adressage non disponibles pour certaines instructions. Elle seront comme suit:

-Table des instructions normales plus les instructions de Saut inconditionnel JMP et JSR
-Table des Codes adressage Immédiat correspondants
-Table des Codes adressage Direct correspondants
-Table des Codes adressage Indexé correspondants
-Table des Codes adressage Étendu correspondants
-Table des Codes adressage Inhérent correspondants

-Table des Instructions de Branchement Inconditionnel et Branchement Inconditionnel Longs
-Table des Codes des Branchement Inconditionnel et Branchement Inconditionnel Long correspondants

-Table des Instructions Branchement Conditionnel
-Table des Codes Branchement Conditionnel correspondants

Les tables des Instructions et Codes de Branchement Conditionnel Long n'existerons pas (pour minimiser l'espace RAM occupé). Le traitement sera fait par une analyse syntaxique qui donnera l'instruction du Branchement Conditionnel correspondant, ce qui permettra de trouver le code du Branchement Conditionnels correspondant auquel on va ajouter "$10" au début.

-Table des paramètres des modes d'adressage Indexé
-Table des Codes des modes d'adressage Indexé correspondants

Il y aura aussi une tables pour les instructions (exceptionnels) à plus d'un octet comme CMPD, CMPS, CMPU, CMPY, LDS, LDY et LBRN qui permettra de les identifier afin de leur ajouter au début l'octet "$10" ou "$11" selon le cas.

En premier lieu, pour faire simple, le seul format des chiffres traité sera l'Hexadécimal.

Qu'en pensez-vous, ma méthode est bonne ou je fais fausse route quelque part?

Daniel
Messages : 9759
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Un kit autour du EF6809P

Message par Daniel » 24 avr. 2015 17:31

Créer un assembleur est un excellent exercice, très enrichissant car il nécessite une connaissance parfaite de toutes les instructions. En partant de rien c'est long. Au cours du développement on découvre toujours des méthodes meilleures que celles envisagées au départ, et les perfectionnements sont toujours possibles. En définitive c'est un jeu passionnant et inépuisable.

Pour trouver des idées, il est peut-être utile de regarder comment font les "professionnels" (mais ce n'est pas une obligation). Ci-dessous le lien vers l'assembleur 6809 écrit par Microsoft pour les ordinateurs Thomson :

http://dcmoto.free.fr/programmes/assemb ... index.html
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 3815
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Un kit autour du EF6809P

Message par __sam__ » 24 avr. 2015 19:32

Attention l'assembleur thomson fait 16ko, c'est peut être un peu trop gros pour le kit en question. On y trouve une gestion de fichier, un éditeur, un débuggeur pas à pas. C'est très riche. Je crois que siliconal veut juste se faire un micro assembleur résident qui tient à coté du moniteur. Je ne sais pas trop combien d'octets représente la partie assembleur pur, mais je serais surpris si ca faisait moins de 2ko.

Perso plus que de l 'assembleur, et suite aux sujets de Dominique sur le Forth, je me dit qu'un moniteur Forth serait en soi un sujet très intéressant sur le 6809. Après tout le jupiter ace, a une rom Forth. A noter: une fois le noyau Forth en place, il existe du code Forth qui défini les mnemoniques permettant de faire de l'assembleur 6809 nativement. Cette approche est éloigné de la problématique de siliconal, mais tout autant fascinante! http://www.bradrodriguez.com/papers/6809asm.txt, source: http://www.bradrodriguez.com/papers/6809asmlisting.txt
Samuel.
Amiga 500+GVP530(MMU/FPU) (hs), A1200(030@50mhz/fpu/64mb/cf 8go), R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 24 avr. 2015 22:52

Dans les messages de Daniel et Sam, il y a beaucoup de choses et de techniques (Assembleur pour Thomson, Forth) qui sont toutes nouvelles pour moi.

Je dois prendre un peu de temps pour les étudier et évaluer leur intérêt pour mon projet et comparer leurs approches à la mienne et voir comment en tirer profit.

Pour l'espace RAM, c'est sûr que je doit l'augmenter dans le prochain kit car rien que pour les tables j'aurai besoin de presque 2 Ko, les 2 Ko restant contiendront le moniteur et l'assembleur (en version minimale) en attendant plus de RAM.

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 27 mai 2015 12:49

Bonjour,

Comme prévu, j'ai commencé à développer mon propre assembleur par l'assembleur pur sans utiliser aucune bibliothèque externe.

Je suis parvenu à assembler les instructions de la première table comme suit:

-Table des instructions normales plus les instructions de Saut inconditionnel JMP et JSR
-Table des Codes adressage Immédiat correspondants
-Table des Codes adressage Direct correspondants
-Table des Codes adressage Indexé correspondants
-Table des Codes adressage Étendu correspondants
-Table des Codes adressage Inhérent correspondants

J'ai encore quelques bugs que je suis entrain de corriger grâce au mode BreakPoint qui j'ai pu executer grace à l'installation du PTM offer par Marc (que je remercie encore et encore pour son grand soutien). Mais j'ai pu extraire les codes de chaque instruction de cette table (sans ajouter les paramètres ni les Byte codes additionnels pour le moment.

A titre indicatif, voici le listing des routines de l'assembleur + la table citée en haut.

Les routines de l'assembleur sont basiques et n'ont subi aucune optimisation pour le moment (pour permettre un déboggage facile):

Code : Tout sélectionner

;************************************************************************************   
                      ;routines et programmes du nouveau assembleur ASSMSILIC et ses routines complémentaires        
                      ;************************************************************************************
                      
                      ;************************************************************************************
                      ;Routine ASSEMBLE, Simple inline assembler for SILICONAL Kit
                      ;Entrée: Aucune
                      ;Sorties: Aucune
                      ;Routines appelée:
                      ;************************************************************************************
0987  496E737472756374696F6E206120617373656D626C65723A2000 INSAEXEC        FCC     "Instruction a assembler: ", $00
09A1  3412            ASSEMBLE        PSHS    A,X     ;sauvegarder les registres utilisés
                      
09A3  8E0987                  LDX     #INSAEXEC       ;si fin de table atteinte, préparer message d'erreur
09A6  17FA25                  LBSR    OUTSTRNG        ;afficher message d'erreur "Instruction non trouvée!"
09A9  17FA10                  LBSR    OUTCRLF
                      
09AC  8E01B0                  LDX     #BUFFERST       ;index X pointe sur zone mémoire BUFFERST
                              
09AF  BD027B          ASSEMBLE1       JSR     RECVACIA        ;lecture Caractère
09B2  BD0262                  JSR     SENDACIA        ;ecriture caractère reçu
                              
09B5  810D                    CMPA    #$0D    ;caractère reçu = "Chariot Return"?
09B7  2704                    BEQ     ASSEMBLE2       ;si oui aller à INPTCMND2: saisir et tester caractère suivant
                              
09B9  A780                    STA     ,X+     ;sinon (caractère normal) le charger dans BUFFERST
                              
09BB  20F2                    BRA     ASSEMBLE1       ;aller lire caractère suivant
                              
09BD  B701A0          ASSEMBLE2       STA     TEMPCHAR        ;sauvegarder premier caractère (CR) pour utilisation ultérieure
                              
09C0  BD027B                  JSR     RECVACIA        ;lecture Caractère
09C3  BD0262                  JSR     SENDACIA        ;ecriture caractère reçu
09C6  B701A1                  STA     TEMP2CHR        ;sauvegarder premier caractère (CR) pour utilisation ultérieure
                              
09C9  810A                    CMPA    #$0A    ;caractère reçu = "Line Feed"?
09CB  270C                    BEQ     ASSEMBLE3       ;si oui aller à INPTCMND3: charger caractère $00 dans BUFFERST
                              
09CD  B601A0                  LDA     TEMPCHAR        ;sinon (caractère normal), charger caractère "CR"  
09D0  A780                    STA     ,X+     ;dans BUFFERST puisque caractère suivant est <> de "LF"        
                              
09D2  B601A1                  LDA     TEMP2CHR        ;charger caractère (normal) suivant le caractère "CR"
09D5  A780                    STA     ,X+     ;dans BUFFERST puisque caractère suivant "CR" est <> de "LF"
                              
09D7  20D6                    BRA     ASSEMBLE1       ;aller lire caractère suivant
                              
09D9  8600            ASSEMBLE3       LDA     #$00    ;charger caractère $00 (caractère 0 terminal)
09DB  A784                    STA     ,X      ;dans BUFFERST
                              
09DD  8D38                    BSR     CONVISNT        ;convertir instruction saisie
                              
09DF  17F9DA                  LBSR    OUTCRLF ;retourner à la ligne suivante et
                              
09E2  3512                    PULS    A,X     ;restaurer les registres utilisés
                              
09E4  39                      RTS             ;Fin de sous routine et retour au programme appelant
                              
                      ;************************************************************************************
                      ;Routine CONVISNT Convert instruction to op. code
                      ;Entrée: BUFFERST=Commande reçue par RS232
                      ;Sorties: 
                      ;Routines appelée: OUTSTRNG
                      ;************************************************************************************
09E5  496E737472756374696F6E206E6F6E2074726F757665652100 ERINSMES        FCC     "Instruction non trouvee!", $00 ;si fin de table commandes atteint
09FE  4D6F646520616472657373616765206E6F6E20646973702E00 ERRMDADD        FCC     "Mode adressage non disp.", $00 ;si mode adressage non disp.
                      
0A17  3436            CONVISNT        PSHS    A,B,X,Y ;sauvegarder les registres utilisés
                      
0A19  8E0B67                  LDX     #INSTTABL       ;charger X avec première entrée de la table instructions
                              
0A1C  108E0FF0                LDY     #$0FF0  ;index table op. codes
                              
0A20  A680            COMPINST        LDA     ,X+     ;A<-entrée de table instructions puis incrémenter index
                              
0A22  B101B0                  CMPA    BUFFERST        ;comparer première lettre instr. saisie avec entrée de table instr.
0A25  2711                    BEQ     COMP2NDL        ;si égale, aller comparer seconde lettre       
                      
0A27  8100                    CMPA    #$00    ;si non égal, test fin de table instructions
0A29  2609                    BNE     CTRLBYT1        ;pas encore atteinte
                              
0A2B  8E09E5                  LDX     #ERINSMES       ;si fin de table atteinte, préparer message d'erreur
0A2E  17F99D                  LBSR    OUTSTRNG        ;afficher message d'erreur "Instruction non trouvée!"
                              
0A31  160130                  LBRA    RSTREXIT        ;aller restaurer registres et sortir
                      
0A34  3003            CTRLBYT1        LEAX    3,X     ;incrémenter index pour atteindre octet de contrôle modes adressage
0A36  2044                    BRA     NXTENTRY
                              
0A38  A680            COMP2NDL        LDA     ,X+     ;A<-entrée de table instructions puis incrémenter index
0A3A  B101B1                  CMPA    BUFFERST+1;comparer 2 eme lettre instr. avec entrée de table instr.
0A3D  2711                    BEQ     COMP3RDL        ;si égale, aller comparer 3eme lettre  
                      
0A3F  8100                    CMPA    #$00    ;si non égal, test fin de table instructions
0A41  2609                    BNE     CTRLBYT2        ;pas encore atteinte
                              
0A43  8E09E5                  LDX     #ERINSMES       ;si fin de table atteinte, préparer message d'erreur
0A46  17F985                  LBSR    OUTSTRNG        ;afficher message d'erreur "Instruction non trouvée!"
                              
0A49  160118                  LBRA    RSTREXIT        ;aller restaurer registres et sortir
                              
0A4C  3002            CTRLBYT2        LEAX    2,X     ;incrémenter index pour atteindre octet de contrôle modes adressage
0A4E  202C                    BRA     NXTENTRY
                              
0A50  A680            COMP3RDL        LDA     ,X+     ;A<-entrée de table instructions puis incrémenter index
0A52  B101B2                  CMPA    BUFFERST+2;comparer 3 eme lettre instr. avec entrée de table instr.
0A55  2711                    BEQ     COMP4THL
                              
0A57  8100                    CMPA    #$00    ;si non égal, test fin de table instructions
0A59  2609                    BNE     CTRLBYT3        ;pas encore atteinte
                              
0A5B  8E09E5                  LDX     #ERINSMES       ;si fin de table atteinte, préparer message d'erreur
0A5E  17F96D                  LBSR    OUTSTRNG        ;afficher message d'erreur "Instruction non trouvée!"
                              
0A61  160100                  LBRA    RSTREXIT        ;aller restaurer registres et sortir
                              
0A64  3001            CTRLBYT3        LEAX    1,X     ;incrémenter index pour atteindre octet de contrôle modes adressage
0A66  2014                    BRA     NXTENTRY
                      
0A68  A680            COMP4THL        LDA     ,X+     ;A<-entrée de table instructions puis incrémenter index
0A6A  B101B3                  CMPA    BUFFERST+3;comparer 4 eme lettre instr. avec entrée de table instr.
0A6D  272B                    BEQ     EXECCONV
                              
0A6F  8100                    CMPA    #$00    ;si non égal, test fin de table instructions
0A71  2609                    BNE     NXTENTRY        ;pas encore atteinte
                              
0A73  8E09E5                  LDX     #ERINSMES       ;si fin de table atteinte, préparer message d'erreur
0A76  17F955                  LBSR    OUTSTRNG        ;afficher message d'erreur "Instruction non trouvée!"
                              
0A79  1600E8                  LBRA    RSTREXIT        ;aller restaurer registres et sortir
                              
                      ;calcul adresse nouvelle entrée instruction dans table instructions
0A7C  5F              NXTENTRY        CLRB            ;mise à 0 du compteur de modes d'adressage disponibles
                              
0A7D  A680                    LDA     ,X+
0A7F  48                      ASLA            ;isolation indicateur mode adressage Immédiat
0A80  2401                    BCC     ADDRMOD1        ;si indicateur mode adressage Immédiat non actif       
0A82  5C                      INCB            ;incrémenter compteur modes d'adressage        
                      
0A83  48              ADDRMOD1        ASLA            ;isolation indicateur mode adressage Direct
0A84  2401                    BCC     ADDRMOD2        ;si indicateur mode adressage Direct non actif          
0A86  5C                      INCB            ;incrémenter compteur modes d'adressage
                      
0A87  48              ADDRMOD2        ASLA            ;isolation indicateur mode adressage Indéxé   
0A88  2401                    BCC     ADDRMOD3        ;si indicateur mode adressage Indéxé non actif                
0A8A  5C                      INCB            ;incrémenter compteur modes d'adressage        
                      
0A8B  48              ADDRMOD3        ASLA            ;isolation indicateur mode adressage Etendu     
0A8C  2401                    BCC     ADDNXTIN        ;si indicateur mode adressage Etendu non actif          
0A8E  5C                      INCB            ;incrémenter compteur modes d'adressage
                              
0A8F  C100            ADDNXTIN        CMPB    #$00    ;test nombre modes d'adressage
0A91  2602                    BNE     MOVNXTIN        ;si <> 0, donc continuer
0A93  C601                    LDB     #$01    ;si aucun mode d'adressage, donc mode Inhérent seul
                      
0A95  3085            MOVNXTIN        LEAX    B,X     ;X <- adresse prochaine entrée dans la table instructions
                              
0A97  16FF86                  LBRA    COMPINST        ;aller comparer l'instruction saisie avec cette entrée
                      
                              
0A9A  B601B5          EXECCONV        LDA     BUFFERST+5
                      
0A9D  5F                      CLRB            ;mise à 0 d'un compteur de modes d'adressage indisponibles
                              
                              ;LDA    ,X
                              ;ASLA           ;isolation indicateur mode adressage Immédiat
                              ;BCS    INCRMNTB        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
                              
                              ;ASLA           ;isolation indicateur mode adressage Direct
                              ;BCS    INCRMNTB        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
                              
                              ;ASLA           ;isolation indicateur mode adressage Indéxé
                              ;BCS    INCRMNTB        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
                              
                              ;ASLA           ;isolation indicateur mode adressage Etendu, et incrémentation X
                              ;BCS    INCRMNTB        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
                              
                      ;INCRMNTB       INCB            ;incrémenter compteur de modes adressage indisponibles
                      
0A9E  8123                    CMPA    #'#     ;test caractère suivant l'espace si c'est "#"
0AA0  2710                    BEQ     IMMEDIAT        ;donc mode adressage Immédiat
                              
0AA2  8124                    CMPA    #'$     ;sinon le comparer avec "$"
0AA4  2723                    BEQ     TSTDRECT        ;si égal donc aller tester si Direct ou Etendu
                              
0AA6  812C                    CMPA    #',     ;si <> "$" comparer avec ","
0AA8  2745                    BEQ     INDEXNUL        ;si égal donc mode adressage Indéxé déplacement nul
                              
0AAA  8100                    CMPA    #$00    ;test caractère suivant l'espace si c'est $00
0AAC  10270091                LBEQ    INHERENT        ;donc mode adressage Inhérent
                              
0AB0  2058                    BRA     INDXOFFS        
                      
0AB2                  IMMEDIAT        ;vérification si ce mode est disponible pour cette instruction
0AB2  A680                    LDA     ,X+
0AB4  48                      ASLA            ;isolation indicateur mode adressage Immédiat, et incrémentation X
0AB5  102400A5                LBCC    ERRMODIM        ;si indicateur mode adressage Immédiat non actif       
                              
0AB9  A684                    LDA     ,X      ;si oui, copier le code dans zone mémoire Op Code              
0ABB  A7A0                    STA     ,Y+     ;indéxée par Y et incrémenter Y
                              
0ABD  B701A0                  STA     TEMPCHAR        
0AC0  17F99C                  LBSR    OUTHEXAW        ;afficher code opération assemblé
0AC3  17F8F6                  LBSR    OUTCRLF ;et retourner à la ligne
                              
0AC6  16009B                  LBRA    RSTREXIT        ;aller vers restauration registres et exit
                              
                              
0AC9  B601B8          TSTDRECT        LDA     BUFFERST+8
0ACC  8100                    CMPA    #$00
0ACE  10260053                LBNE    EXTENDED
                      
                              
0AD2                  DIRECT  ;vérification si ce mode est disponible pour cette instruction
0AD2  A680                    LDA     ,X+     ;incrémentation pour tomber sur l'op. code Direct
0AD4  48                      ASLA            ;isolation indicateur mode adressage Immédiat
0AD5  48                      ASLA            ;isolation indicateur mode adressage Direct, et incrémentation X
0AD6  10240084                LBCC    ERRMODIM        ;si indicateur mode adressage Immédiat non actif       
                              
0ADA  3001                    LEAX    1,X     ;incrémentation pour tomber sur l'op. code Direct
0ADC  50                      NEGB            ;B <- (-B) (complémenter B)
0ADD  3085                    LEAX    B,X     ;pour le diminuer de X
                              
0ADF  A684                    LDA     ,X      ;si oui, copier le code dans zone mémoire Op Code              
0AE1  A7A0                    STA     ,Y+     ;indéxée par Y et incrémenter Y
                              
0AE3  B701A0                  STA     TEMPCHAR        
0AE6  17F976                  LBSR    OUTHEXAW        ;afficher code opération assemblé
0AE9  17F8D0                  LBSR    OUTCRLF ;et retourner à la ligne
                              
0AEC  160075                  LBRA    RSTREXIT        ;aller vers restauration registres et exit
                              
                              
0AEF                  INDEXNUL        ;vérification si ce mode est disponible pour cette instruction
0AEF  A680                    LDA     ,X+     
0AF1  48                      ASLA            ;isolation indicateur mode adressage Immédiat
0AF2  48                      ASLA            ;isolation indicateur mode adressage Direct
0AF3  48                      ASLA            ;isolation indicateur mode adressage Indéxé, et incrémentation X
0AF4  2468                    BCC     ERRMODIM        ;si indicateur mode adressage Immédiat non actif       
                              
0AF6  3002                    LEAX    2,X     ;2 incrémentations de X pour tomber sur l'op.code Indéxé
0AF8  50                      NEGB            ;B <- (-B) (complémenter B, compteur modes adressage indisponibles)
0AF9  3085                    LEAX    B,X     ;pour le diminuer de X
                              
0AFB  A684                    LDA     ,X      ;si oui, copier le code dans zone mémoire Op Code              
0AFD  A7A0                    STA     ,Y+     ;indéxée par Y et incrémenter Y
                              
0AFF  B701A0                  STA     TEMPCHAR        
0B02  17F95A                  LBSR    OUTHEXAW        ;afficher code opération assemblé
0B05  17F8B4                  LBSR    OUTCRLF ;et retourner à la ligne
                              
0B08  205A                    BRA     RSTREXIT        ;aller vers restauration registres et exit
                      
                              
0B0A                  INDXOFFS        ;vérification si ce mode est disponible pour cette instruction
0B0A  A680                    LDA     ,X+     
0B0C  48                      ASLA            ;isolation indicateur mode adressage Immédiat
0B0D  48                      ASLA            ;isolation indicateur mode adressage Direct
0B0E  48                      ASLA            ;isolation indicateur mode adressage Indéxé, et incrémentation X
0B0F  244D                    BCC     ERRMODIM        ;si indicateur mode adressage Immédiat non actif       
                              
0B11  3002                    LEAX    2,X     ;2 incrémentations de X pour tomber sur l'op.code Indéxé
0B13  50                      NEGB            ;B <- (-B) (complémenter B, compteur modes adressage indisponibles)
0B14  3085                    LEAX    B,X     ;pour le diminuer de X
                              
0B16  A684                    LDA     ,X      ;si oui, copier le code dans zone mémoire Op Code              
0B18  A7A0                    STA     ,Y+     ;indéxée par Y et incrémenter Y
                              
0B1A  B701A0                  STA     TEMPCHAR        
0B1D  17F93F                  LBSR    OUTHEXAW        ;afficher code opération assemblé
0B20  17F899                  LBSR    OUTCRLF ;et retourner à la ligne
                              
0B23  203F                    BRA     RSTREXIT        ;aller vers restauration registres et exit
                      
                              
0B25                  EXTENDED        ;vérification si ce mode est disponible pour cette instruction
0B25  A680                    LDA     ,X+
0B27  48                      ASLA            ;isolation indicateur mode adressage Immédiat
0B28  48                      ASLA            ;isolation indicateur mode adressage Direct
0B29  48                      ASLA            ;isolation indicateur mode adressage Indéxé
0B2A  48                      ASLA            ;isolation indicateur mode adressage Etendu, et incrémentation X
0B2B  2431                    BCC     ERRMODIM        ;si indicateur mode adressage Immédiat non actif       
                              
0B2D  3003                    LEAX    3,X     ;puis 2 autres incrémentation de X pour tomber sur l'op.code Etendu
0B2F  50                      NEGB            ;B <- (-B) (complémenter B, compteur modes adressage indisponibles)
0B30  3085                    LEAX    B,X     ;pour le diminuer de X
                              
0B32  A684                    LDA     ,X      ;si oui, copier le code dans zone mémoire Op Code              
0B34  A7A0                    STA     ,Y+     ;indéxée par Y et incrémenter Y
                              
0B36  B701A0                  STA     TEMPCHAR        
0B39  17F923                  LBSR    OUTHEXAW        ;afficher code opération assemblé
0B3C  17F87D                  LBSR    OUTCRLF ;et retourner à la ligne
                              
0B3F  2023                    BRA     RSTREXIT        ;aller vers restauration registres et exit
                      
                              
0B41                  INHERENT        ;vérification si ce mode est disponible pour cette instruction
0B41  A680                    LDA     ,X+
0B43  48                      ASLA            ;isolation indicateur mode adressage Immédiat
0B44  2518                    BCS     ERRMODIM        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
0B46  48                      ASLA            ;isolation indicateur mode adressage Direct
0B47  2515                    BCS     ERRMODIM        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
0B49  48                      ASLA            ;isolation indicateur mode adressage Indéxé
0B4A  2512                    BCS     ERRMODIM        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
0B4C  48                      ASLA            ;isolation indicateur mode adressage Etendu, et incrémentation X
0B4D  250F                    BCS     ERRMODIM        ;si indicateur mode adressage Immédiat actif, Erreur mode indisp.      
                              
0B4F  A684                    LDA     ,X      ;si oui, copier le code dans zone mémoire Op Code              
0B51  A7A0                    STA     ,Y+     ;indéxée par Y et incrémenter Y
                              
0B53  B701A0                  STA     TEMPCHAR        
0B56  17F906                  LBSR    OUTHEXAW        ;afficher code opération assemblé
0B59  17F860                  LBSR    OUTCRLF ;et retourner à la ligne
                              
0B5C  2006                    BRA     RSTREXIT        ;aller vers restauration registres et exit
                              
0B5E  8E09FE          ERRMODIM        LDX     #ERRMDADD       ;sinon afficher message "Mode adressage non dispo."
0B61  17F86A                  LBSR    OUTSTRNG        ;afficher message d'erreur "Mode adressage non dispo."
                              
0B64  3536            RSTREXIT        PULS    A,B,X,Y ;restaurer les registres utilisés
                      
0B66  39                      RTS             ;Fin de sous routine et retour au programme moniteur
                      ;____________________________________________________________________________________
                      
                      
                      ;début exemple codage conversion instruction
                              ;FCC    "STA "  ;instruction
                              ;FCC    %01110100       ;pattern adressage disp. nibble MSB: 1->disp. 0->indisp.
                                              ;bits: 7->Immediat, 6->Direct, 5->Indéxé, 4->Etendu
                                              ;mode Inhérent disponible si aucun autre mode n'est disp.
                                              ;nibble LSB: 3 bits MSB->nombre d'octets code operation
                                              ;dans cet exemple: modes d'adressage disponibles:
                                              ;Direct, Indéxé et Etendu. nombre d'octets Direct: 2
                                              
                              ;FCC    %10011000       ;ce bit est supplémentaire et ajouté en cas de besoin:
                                              ;si le nombre de modes d'adressage disponibles est > 1:
                                              ;bit 0 octet précédent + bits 7 et 6->nombre octets code
                                              ;operation adressage 1, bits 5 à 0-> par paquet de 3 bits
                                              ;->nombre octets code opération par même ordre que celui
                                              ;des bits de pattern des modes d'adressage
                                              ;dans cet exemple nombre d'octets Indéxé: 2, nombre d'octets
                                              ;Etendu: 3, les bits restant n'ont aucune signification
                                              ;puisqu'il n'y a que 3 modes d'adressage pour cette "STA"
                                              
                              ;FCC    $97     ;code operation par même ordre que celui des bits de
                              ;FCC    $A7     ;dans cet exemple: code opération mode Direct -> $97, code
                              ;FCC    $B7     ;pattern des modes d'adressage Immediat, Direct, Indéxé,
                                              ;Etendu puis Inhérent
                                              ;mode Indéxé -> $A7, code mode Etendu -> $B7
                      ;fin exemple codage conversion instruction
                      
0B67  41425820        INSTTABL        FCC     "ABX "  
0B6B  02                      FCC     %00000010                               
0B6C  3A                      FCC     $3A              
                      
0B6D  41444341                FCC     "ADCA"
0B71  F4                      FCC     %11110100
                              ;FCC    %10010011
0B72  89                      FCC     $89
0B73  99                      FCC     $99
0B74  A9                      FCC     $A9
0B75  B9                      FCC     $B9
                              
0B76  41444342                FCC     "ADCB"
0B7A  F4                      FCC     %11110100
                              ;FCC    %10010011
0B7B  C9                      FCC     $C9
0B7C  D9                      FCC     $D9
0B7D  E9                      FCC     $E9
0B7E  F9                      FCC     $F9
                              
0B7F  41444441                FCC     "ADDA"
0B83  F4                      FCC     %11110100
                              ;FCC    %10010011
0B84  8B                      FCC     $8B
0B85  9B                      FCC     $9B
0B86  AB                      FCC     $AB
0B87  BB                      FCC     $BB
                              
0B88  41444442                FCC     "ADDB"
0B8C  F4                      FCC     %11110100
                              ;FCC    %10010011
0B8D  CB                      FCC     $CB
0B8E  DB                      FCC     $DB
0B8F  EB                      FCC     $EB
0B90  FB                      FCC     $FB
                              
0B91  41444444                FCC     "ADDD"
0B95  F6                      FCC     %11110110
                              ;FCC    %10010011
0B96  C3                      FCC     $C3
0B97  D3                      FCC     $D3
0B98  E3                      FCC     $E3
0B99  F3                      FCC     $F3
                              
0B9A  414E4441                FCC     "ANDA"
0B9E  F4                      FCC     %11110100
                              ;FCC    %10010011
0B9F  84                      FCC     $84
0BA0  94                      FCC     $94
0BA1  A4                      FCC     $A4
0BA2  B4                      FCC     $B4
                              
0BA3  414E4442                FCC     "ANDB"
0BA7  F4                      FCC     %11110100
                              ;FCC    %10010011
0BA8  C4                      FCC     $C4
0BA9  D4                      FCC     $D4
0BAA  E4                      FCC     $E4
0BAB  F4                      FCC     $F4
                              
0BAC  414E4443                FCC     "ANDC"
0BB0  84                      FCC     %10000100
0BB1  1C                      FCC     $1C
                              
0BB2  41534C41                FCC     "ASLA"
0BB6  02                      FCC     %00000010
0BB7  48                      FCC     $48
                              
0BB8  41534C42                FCC     "ASLB"
0BBC  02                      FCC     %00000010
0BBD  58                      FCC     $58
                              
0BBE  41534C20                FCC     "ASL "
0BC2  74                      FCC     %01110100
                              ;FCC    %10011000
0BC3  08                      FCC     $08
0BC4  68                      FCC     $68
0BC5  78                      FCC     $78
                              
0BC6  41535241                FCC     "ASRA"
0BCA  02                      FCC     %00000010
0BCB  47                      FCC     $47
                              
0BCC  41535242                FCC     "ASRB"
0BD0  02                      FCC     %00000010
0BD1  57                      FCC     $57
                              
0BD2  41535220                FCC     "ASR "
0BD6  74                      FCC     %01110100
                              ;FCC    %10011000
0BD7  07                      FCC     $07
0BD8  67                      FCC     $67
0BD9  77                      FCC     $77
                              
0BDA  42495441                FCC     "BITA"
0BDE  F4                      FCC     %11110100
                              ;FCC    %10010011
0BDF  85                      FCC     $85
0BE0  95                      FCC     $95
0BE1  A5                      FCC     $A5
0BE2  B5                      FCC     $B5
                              
0BE3  42495442                FCC     "BITB"
0BE7  F4                      FCC     %11110100
                              ;FCC    %10010011
0BE8  C5                      FCC     $C5
0BE9  D5                      FCC     $D5
0BEA  E5                      FCC     $E5
0BEB  F5                      FCC     $F5
                              
0BEC  434C5241                FCC     "CLRA"
0BF0  02                      FCC     %00000010                               
0BF1  4F                      FCC     $4F
                              
0BF2  434C5242                FCC     "CLRB"
0BF6  02                      FCC     %00000010                               
0BF7  5F                      FCC     $5F
                              
0BF8  434C5220                FCC     "CLR "
0BFC  74                      FCC     %01110100
                              ;FCC    %10011000
0BFD  0F                      FCC     $0F
0BFE  6F                      FCC     $6F
0BFF  7F                      FCC     $7F
                              
0C00  434D5041                FCC     "CMPA"
0C04  F4                      FCC     %11110100
                              ;FCC    %10010011
0C05  81                      FCC     $81
0C06  91                      FCC     $91
0C07  A1                      FCC     $A1
0C08  B1                      FCC     $B1
                              
0C09  434D5042                FCC     "CMPB"
0C0D  F4                      FCC     %11110100
                              ;FCC    %10010011
0C0E  C1                      FCC     $C1
0C0F  D1                      FCC     $D1
0C10  E1                      FCC     $E1
0C11  F1                      FCC     $F1
                              
0C12  434D5044                FCC     "CMPD"
0C16  F8                      FCC     %11111000
                              ;FCC    %11011100
0C17  83                      FCC     $1083
0C18  93                      FCC     $1093
0C19  A3                      FCC     $10A3
0C1A  B3                      FCC     $10B3
                              
0C1B  434D5053                FCC     "CMPS"
0C1F  F8                      FCC     %11111000
                              ;FCC    %11011100
0C20  8C                      FCC     $118C
0C21  9C                      FCC     $119C
0C22  AC                      FCC     $11AC
0C23  BC                      FCC     $11BC
                              
0C24  434D5055                FCC     "CMPU"
0C28  F8                      FCC     %11111000
                              ;FCC    %11011100
0C29  83                      FCC     $1183
0C2A  93                      FCC     $1193
0C2B  A3                      FCC     $11A3
0C2C  B3                      FCC     $11B3
                              
0C2D  434D5058                FCC     "CMPX"
0C31  F6                      FCC     %11110110
                              ;FCC    %10010011
0C32  8C                      FCC     $8C
0C33  9C                      FCC     $9C
0C34  AC                      FCC     $AC
0C35  BC                      FCC     $BC
                              
0C36  434D5059                FCC     "CMPY"
0C3A  F8                      FCC     %11111000
                              ;FCC    %11011100
0C3B  8C                      FCC     $108C
0C3C  9C                      FCC     $109C
0C3D  AC                      FCC     $10AC
0C3E  BC                      FCC     $10BC
                              
0C3F  434F4D41                FCC     "COMA"
0C43  02                      FCC     %00000010                               
0C44  43                      FCC     $43
                              
0C45  434F4D42                FCC     "COMB"
0C49  02                      FCC     %00000010                               
0C4A  53                      FCC     $53
                              
0C4B  434F4D20                FCC     "COM "
0C4F  74                      FCC     %01110100
                              ;FCC    %10011000
0C50  03                      FCC     $03
0C51  63                      FCC     $63
0C52  73                      FCC     $73
                              
0C53  43574149                FCC     "CWAI"
0C57  84                      FCC     %10000100                               
0C58  3C                      FCC     $3C
                              
0C59  44414120                FCC     "DAA "
0C5D  02                      FCC     %00000010                               
0C5E  19                      FCC     $19
                              
0C5F  44454341                FCC     "DECA"
0C63  02                      FCC     %00000010                               
0C64  4A                      FCC     $4A
                              
0C65  44454342                FCC     "DECB"
0C69  02                      FCC     %00000010                               
0C6A  5A                      FCC     $5A
                              
0C6B  44454320                FCC     "DEC "
0C6F  74                      FCC     %01110100
                              ;FCC    %10011000
0C70  0A                      FCC     $0A
0C71  6A                      FCC     $6A
0C72  7A                      FCC     $7A
                              
0C73  454F5241                FCC     "EORA"
0C77  F4                      FCC     %11110100
                              ;FCC    %10010011
0C78  88                      FCC     $88
0C79  98                      FCC     $98
0C7A  A8                      FCC     $A8
0C7B  B8                      FCC     $B8
                              
0C7C  454F5242                FCC     "EORB"
0C80  F4                      FCC     %11110100
                              ;FCC    %10010011
0C81  C1                      FCC     $C1
0C82  D1                      FCC     $D1
0C83  E1                      FCC     $E1
0C84  F1                      FCC     $F1
                              
0C85  45584720                FCC     "EXG "
0C89  84                      FCC     %10000100
0C8A  1E                      FCC     $1E
                      
0C8B  494E4341                FCC     "INCA"
0C8F  02                      FCC     %00000010                               
0C90  4C                      FCC     $4C
                              
0C91  494E4342                FCC     "INCB"
0C95  02                      FCC     %00000010                               
0C96  5C                      FCC     $5C
                              
0C97  494E4320                FCC     "INC "
0C9B  74                      FCC     %01110100
                              ;FCC    %10011000
0C9C  0C                      FCC     $0C
0C9D  6C                      FCC     $6C
0C9E  7C                      FCC     $7C
                              
0C9F  4A4D5020                FCC     "JMP "
0CA3  74                      FCC     %01110100
                              ;FCC    %10011000
0CA4  0E                      FCC     $0E
0CA5  6E                      FCC     $6E
0CA6  7E                      FCC     $7E
                              
0CA7  4A535220                FCC     "JSR "
0CAB  74                      FCC     %01110100
                              ;FCC    %10011000
0CAC  9D                      FCC     $9D
0CAD  AD                      FCC     $AD
0CAE  BD                      FCC     $BD
                              
0CAF  4C444120                FCC     "LDA "
0CB3  F4                      FCC     %11110100
                              ;FCC    %10010011
0CB4  86                      FCC     $86
0CB5  96                      FCC     $96
0CB6  A6                      FCC     $A6
0CB7  B6                      FCC     $B6
                              
0CB8  4C444220                FCC     "LDB "
0CBC  F4                      FCC     %11110100
                              ;FCC    %10010011
0CBD  C6                      FCC     $C6
0CBE  D6                      FCC     $D6
0CBF  E6                      FCC     $E6
0CC0  F6                      FCC     $F6
                              
0CC1  4C444420                FCC     "LDD "
0CC5  F6                      FCC     %11110110
                              ;FCC    %10010011
0CC6  CC                      FCC     $CC
0CC7  DC                      FCC     $DC
0CC8  EC                      FCC     $EC
0CC9  FC                      FCC     $FC
                              
0CCA  4C445320                FCC     "LDS "
0CCE  F8                      FCC     %11111000
                              ;FCC    %11011100
0CCF  CE                      FCC     $10CE
0CD0  DE                      FCC     $10DE
0CD1  EE                      FCC     $10EE
0CD2  FE                      FCC     $10FE
                              
0CD3  4C445520                FCC     "LDU "
0CD7  F6                      FCC     %11110110
                              ;FCC    %10010011
0CD8  CE                      FCC     $CE
0CD9  DE                      FCC     $DE
0CDA  EE                      FCC     $EE
0CDB  FE                      FCC     $FE
                              
0CDC  4C445820                FCC     "LDX "
0CE0  F6                      FCC     %11110110
                              ;FCC    %10010011
0CE1  8E                      FCC     $8E
0CE2  9E                      FCC     $9E
0CE3  AE                      FCC     $AE
0CE4  BE                      FCC     $BE
                              
0CE5  4C445920                FCC     "LDY "
0CE9  F8                      FCC     %11111000
                              ;FCC    %11011100
0CEA  8E                      FCC     $108E
0CEB  9E                      FCC     $109E
0CEC  AE                      FCC     $10AE
0CED  BE                      FCC     $10BE
                              
0CEE  4C454153                FCC     "LEAS"
0CF2  24                      FCC     %00100100
0CF3  32                      FCC     $32
                              
0CF4  4C454155                FCC     "LEAU"
0CF8  24                      FCC     %00100100
0CF9  33                      FCC     $33
                              
0CFA  4C454158                FCC     "LEAX"
0CFE  24                      FCC     %00100100
0CFF  30                      FCC     $30
                              
0D00  4C454159                FCC     "LEAY"
0D04  24                      FCC     %00100100
0D05  31                      FCC     $31
                              
0D06  4C534C41                FCC     "LSLA"
0D0A  02                      FCC     %00000010                               
0D0B  48                      FCC     $48
                              
0D0C  4C534C42                FCC     "LSLB"
0D10  02                      FCC     %00000010                               
0D11  58                      FCC     $58
                              
0D12  4C534C20                FCC     "LSL "
0D16  74                      FCC     %01110100
                              ;FCC    %10011000
0D17  08                      FCC     $08
0D18  68                      FCC     $68
0D19  78                      FCC     $78
                              
0D1A  4C535241                FCC     "LSRA"
0D1E  02                      FCC     %00000010                               
0D1F  44                      FCC     $44
                              
0D20  4C535242                FCC     "LSRB"
0D24  02                      FCC     %00000010                               
0D25  54                      FCC     $54
                              
0D26  4C535220                FCC     "LSR "
0D2A  74                      FCC     %01110100
                              ;FCC    %10011000
0D2B  04                      FCC     $04
0D2C  64                      FCC     $64
0D2D  74                      FCC     $74
                              
0D2E  4D554C20                FCC     "MUL "
0D32  02                      FCC     %00000010                               
0D33  3D                      FCC     $3D
                              
0D34  4E454741                FCC     "NEGA"
0D38  02                      FCC     %00000010                               
0D39  40                      FCC     $40
                              
0D3A  4E454742                FCC     "NEGB"
0D3E  02                      FCC     %00000010                               
0D3F  50                      FCC     $50
                              
0D40  4E454720                FCC     "NEG "
0D44  74                      FCC     %01110100
                              ;FCC    %10011000
0D45  00                      FCC     $00
0D46  60                      FCC     $60
0D47  70                      FCC     $70
                              
0D48  4E4F5020                FCC     "NOP "
0D4C  02                      FCC     %00000010                               
0D4D  12                      FCC     $12
                              
0D4E  4F524120                FCC     "ORA "
0D52  F4                      FCC     %11110100
                              ;FCC    %10010011
0D53  8A                      FCC     $8A
0D54  9A                      FCC     $9A
0D55  AA                      FCC     $AA
0D56  BA                      FCC     $BA
                              
0D57  4F524220                FCC     "ORB "
0D5B  F4                      FCC     %11110100
                              ;FCC    %10010011
0D5C  CA                      FCC     $CA
0D5D  DA                      FCC     $DA
0D5E  EA                      FCC     $EA
0D5F  FA                      FCC     $FA
                              
0D60  4F524343                FCC     "ORCC"
0D64  84                      FCC     %10000100
0D65  1A                      FCC     $1A
                              
0D66  50534853                FCC     "PSHS"
0D6A  84                      FCC     %10000100
0D6B  34                      FCC     $34
                              
0D6C  50534855                FCC     "PSHU"
0D70  84                      FCC     %10000100
0D71  36                      FCC     $36
                              
0D72  50554C53                FCC     "PULS"
0D76  84                      FCC     %10000100
0D77  35                      FCC     $35
                              
0D78  50554C55                FCC     "PULU"
0D7C  84                      FCC     %10000100
0D7D  37                      FCC     $37
                              
0D7E  524F4C41                FCC     "ROLA"
0D82  02                      FCC     %00000010                               
0D83  49                      FCC     $49
                              
0D84  524F4C42                FCC     "ROLB"
0D88  02                      FCC     %00000010                               
0D89  59                      FCC     $59
                              
0D8A  524F4C20                FCC     "ROL "
0D8E  74                      FCC     %01110100
                              ;FCC    %10011000
0D8F  09                      FCC     $09
0D90  69                      FCC     $69
0D91  79                      FCC     $79
                              
0D92  524F5241                FCC     "RORA"
0D96  02                      FCC     %00000010                               
0D97  46                      FCC     $46
                              
0D98  524F5242                FCC     "RORB"
0D9C  02                      FCC     %00000010                               
0D9D  56                      FCC     $56
                              
0D9E  524F5220                FCC     "ROR "
0DA2  74                      FCC     %01110100
                              ;FCC    %10011000
0DA3  06                      FCC     $06
0DA4  66                      FCC     $66
0DA5  76                      FCC     $76
                              
0DA6  52544920                FCC     "RTI "
0DAA  02                      FCC     %00000010                               
0DAB  3B                      FCC     $3B
                              
0DAC  52545320                FCC     "RTS "
0DB0  02                      FCC     %00000010                               
0DB1  39                      FCC     $39
                              
0DB2  53424341                FCC     "SBCA"
0DB6  F4                      FCC     %11110100
                              ;FCC    %10010011
0DB7  82                      FCC     $82
0DB8  92                      FCC     $92
0DB9  A2                      FCC     $A2
0DBA  B2                      FCC     $B2
                              
0DBB  53424342                FCC     "SBCB"
0DBF  F4                      FCC     %11110100
                              ;FCC    %10010011
0DC0  C2                      FCC     $C2
0DC1  B2                      FCC     $B2
0DC2  E2                      FCC     $E2
0DC3  F2                      FCC     $F2
                              
0DC4  53455820                FCC     "SEX "
0DC8  02                      FCC     %00000010                               
0DC9  1D                      FCC     $1D
                              
0DCA  53544120                FCC     "STA "
0DCE  74                      FCC     %01110100
                              ;FCC    %10011000
0DCF  97                      FCC     $97
0DD0  A7                      FCC     $A7
0DD1  B7                      FCC     $B7
                              
0DD2  53544220                FCC     "STB "
0DD6  74                      FCC     %01110100
                              ;FCC    %10011000
0DD7  D7                      FCC     $D7
0DD8  E7                      FCC     $E7
0DD9  F7                      FCC     $F7
                              
0DDA  53544420                FCC     "STD "
0DDE  74                      FCC     %01110100
                              ;FCC    %10011000
0DDF  DD                      FCC     $DD
0DE0  ED                      FCC     $ED
0DE1  FD                      FCC     $FD
                              
0DE2  53545320                FCC     "STS "
0DE6  76                      FCC     %01110110
                              ;FCC    %11100000
0DE7  DF                      FCC     $10DF
0DE8  EF                      FCC     $10EF
0DE9  FF                      FCC     $10FF
                              
0DEA  53545520                FCC     "STU "
0DEE  74                      FCC     %01110100
                              ;FCC    %10011000
0DEF  DF                      FCC     $DF
0DF0  EF                      FCC     $EF
0DF1  FF                      FCC     $FF
                              
0DF2  53545820                FCC     "STX "
0DF6  74                      FCC     %01110100
                              ;FCC    %10011000
0DF7  9F                      FCC     $9F
0DF8  AF                      FCC     $AF
0DF9  BF                      FCC     $BF
                              
0DFA  53545920                FCC     "STY "
0DFE  76                      FCC     %01110110
                              ;FCC    %11100000
0DFF  9F                      FCC     $109F
0E00  AF                      FCC     $10AF
0E01  BF                      FCC     $10BF
                              
0E02  53554241                FCC     "SUBA"
0E06  F4                      FCC     %11110100
                              ;FCC    %10010011
0E07  80                      FCC     $80
0E08  90                      FCC     $90
0E09  A0                      FCC     $A0
0E0A  B0                      FCC     $B0
                              
0E0B  53554242                FCC     "SUBB"
0E0F  F4                      FCC     %11110100
                              ;FCC    %10010011
0E10  C0                      FCC     $C0
0E11  D0                      FCC     $D0
0E12  E0                      FCC     $E0
0E13  F0                      FCC     $F0
                              
0E14  53554244                FCC     "SUBD"
0E18  F6                      FCC     %11110110
                              ;FCC    %10010011
0E19  83                      FCC     $83
0E1A  93                      FCC     $93
0E1B  A3                      FCC     $A3
0E1C  B3                      FCC     $B3
                              
0E1D  53574920                FCC     "SWI "
0E21  02                      FCC     %00000010
0E22  3F                      FCC     $3F
                              
0E23  53574932                FCC     "SWI2"
0E27  02                      FCC     %00000010
0E28  3F                      FCC     $103F
                              
0E29  53574933                FCC     "SWI3"
0E2D  04                      FCC     %00000100                               
0E2E  3F                      FCC     $113F
                              
0E2F  53594E43                FCC     "SYNC"
0E33  02                      FCC     %00000010                               
0E34  13                      FCC     $13
                              
0E35  54465220                FCC     "TFR "
0E39  84                      FCC     %10000100
0E3A  1F                      FCC     $1F
                              
0E3B  54535441                FCC     "TSTA"
0E3F  02                      FCC     %00000010                               
0E40  4D                      FCC     $4D
                              
0E41  54535442                FCC     "TSTB"
0E45  02                      FCC     %00000010                               
0E46  5D                      FCC     $5D
                              
0E47  54535420                FCC     "TST "
0E4B  74                      FCC     %01110100
                              ;FCC    %10011000
0E4C  0D                      FCC     $0D
0E4D  6D                      FCC     $6D
0E4E  7D                      FCC     $7D
                              
0E4F  00                      FCB     $00     ;fin table INSTTABL
N.B.: Les routines appelées par ces routines et qui ne figurent pas sur ce listing sont dans le listing du moniteur posté auparavant.

Je posterai les vidéo des premiers test très prochainnement.

Avatar du membre
6502man
Messages : 8512
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Un kit autour du EF6809P

Message par 6502man » 27 mai 2015 20:17

Ouah superbe :)

C'est d'un très haut niveau, félicitations :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 28 mai 2015 19:17

Daniel a écrit :(...)
Pour trouver des idées, il est peut-être utile de regarder comment font les "professionnels" (mais ce n'est pas une obligation). Ci-dessous le lien vers l'assembleur 6809 écrit par Microsoft pour les ordinateurs Thomson :

http://dcmoto.free.fr/programmes/assemb ... index.html
Je ne suis pas parvenu à lire la doc. du site et j'ai pas pu trouver des lecteurs des fichiers DjVu.

Donc s'il y a un autre moyen de les lire, merci de me le montrer.

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 28 mai 2015 19:20

__sam__ a écrit :(...)
Perso plus que de l 'assembleur, et suite aux sujets de Dominique sur le Forth, je me dit qu'un moniteur Forth serait en soi un sujet très intéressant sur le 6809. Après tout le jupiter ace, a une rom Forth. A noter: une fois le noyau Forth en place, il existe du code Forth qui défini les mnemoniques permettant de faire de l'assembleur 6809 nativement. Cette approche est éloigné de la problématique de siliconal, mais tout autant fascinante! http://www.bradrodriguez.com/papers/6809asm.txt, source: http://www.bradrodriguez.com/papers/6809asmlisting.txt
J'ai un peu lu la doc. et il me parait que le Forth est pour l'assembleur Motorola ce qu'est l'assembleur Linux pour l'assembleur Intel.

C'est trop d'informations à acquérir pour quelque chose qui est très différente des syntaxes standard, donc pour le moment, pour mon projet, il vaut mieux éviter.

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 28 mai 2015 19:22

6502man a écrit :C'est d'un très haut niveau, félicitations :D
Merci, Ce n'est que le début d'une grande aventure avec cette bête entérée prématurément qu'est le 6809.

__sam__
Messages : 3815
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Un kit autour du EF6809P

Message par __sam__ » 28 mai 2015 19:30

siliconal a écrit :J'ai un peu lu la doc. et il me parait que le Forth est pour l'assembleur Motorola ce qu'est l'assembleur Linux pour l'assembleur Intel.
En fait pas trop. L'assembleur défini par ce forth est de syntaxe motorola, mais avec les arguments inversés "comme en forth". :D
C'est trop d'informations à acquérir pour quelque chose qui est très différente des syntaxes standard, donc pour le moment, pour mon projet, il vaut mieux éviter.
Oui, je n'indiquais ce lien que pour mémoire. Ce n'est pas un must-have, loin de là. Déjà à l'époque l'assembleur 6809 en forth c'était je pense plus pour de l'esbroufe que vraiment un truc utilisé.
Samuel.
Amiga 500+GVP530(MMU/FPU) (hs), A1200(030@50mhz/fpu/64mb/cf 8go), R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

siliconal
Messages : 88
Enregistré le : 24 oct. 2014 20:59

Re: Un kit autour du EF6809P

Message par siliconal » 04 juin 2015 15:19

Bonjour,

Voici la vidéo des premiers tests de mon assembleur:

http://www.siliconcept.ma/6809/assmsilic.avi


Le décodage des instructions TFR et EXG n'est pas encore complété, mais toutes les instructions ont pu être assemblé convenablement dans tous les modes d'adressage + adressage indéxé déplacement nul.

Les autres modes d'adressage indéxés ainsi que les instructions TFR et EXG et les sauts seront les prochaines étapes de mon assembleur.

Répondre