TAVERNIER 6809

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

Avatar du membre
Franckb78
Messages : 29
Enregistré le : 12 janv. 2020 20:55
Contact :

Re: TAVERNIER 6809

Message par Franckb78 » 15 janv. 2020 10:06

Bonjour,

Je peux dessiner le pcb (kicad) si j'ai le schéma électronique.

Le dernier fabricant de pcb que j'ai utilisé est PCBWay. Pas la peine de soumettre une commande autrement que par le système automatisé....

Avec implantation de composant cms c'est cool. Mais ici ca serait plutôt du traversant 100%

Exemple:
hybrid-054986A_5.jpg
hybrid-054986A_5.jpg (673.59 Kio) Vu 539 fois
new-hybrid-054986A.jpg
new-hybrid-054986A.jpg (927.41 Kio) Vu 539 fois

Avatar du membre
michel guyot
Messages : 193
Enregistré le : 20 mars 2016 16:01
Localisation : Pyrénées orientales

Re: TAVERNIER 6809

Message par michel guyot » 18 janv. 2020 23:42

Bonjour 6502man

Quelques nouvelles sur mon projet de carte couleur…
J'ai terminé de cabler ma carte d'essais et démarré les premiers essais.
Pour l'instant j'essais d'exploiter la sortie Vidéo composite avec un poste télé équipé d'une prise péritel

J'ai examiné à l'oscilloscope les principaux signaux qui arrivent aux VM9938

Le décodage d'adresse semble fonctionner correctement, la carte est positionnée aux adresses E100 à E103

La fréquence d'horloge semble correcte, les signaux d'interface avec les VRAM semblent présents

Coté vidéo seul le signal CSYNC est présent (période 64 µs, impulsions de 4 µs)

Il faut maintenant que je vérifie si j'arrive à écrire et relire les registres

La difficulté qui va ensuite se présenter à moi est la suivante : définir l'initialisation minimale pour que le VM9938 génère quelque chose.
Je ne connais pas encore bien le produit, tu peux peut-être éclairer ma lanterne sur le mode le plus simple à mettre en oeuvre et les registres qui doivent impérativement être initialisés.

Cordialement
Michel Guyot

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

Re: TAVERNIER 6809

Message par 6502man » 19 janv. 2020 10:25

Ca avance bien ton projet :)

Pour l'initialisation des registres au départ il faut au minimum définir les 13 premiers registres ensuite écrire en VRAM.

Aujourd'hui je ne pense pas pouvoir regarder ca, mais demain je devrais avoir un peu de temps et je te prépare un petit prog de test.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
michel guyot
Messages : 193
Enregistré le : 20 mars 2016 16:01
Localisation : Pyrénées orientales

Re: TAVERNIER 6809

Message par michel guyot » 19 janv. 2020 16:48

Bonjour 6502man

C'est sympa de vouloir m'aider sur ce sujet…
Pour faciliter l'échange je te transmets ci-dessous une routine sensée initialiser les 13 premiers registres du VDP
Je me suis inspiré du code Z80 que tu m'avais transmis et de mes lecture de la documentation….
Traduit en code 6809 cela donne ceci
Dis moi si je me trompe quelque part ou s'il manque quelque chose
Merci de ton aide
Michel
Fichiers joints
2020-01-19 - INIT VDP.jpg
2020-01-19 - INIT VDP.jpg (488.67 Kio) Vu 428 fois

Avatar du membre
Franckb78
Messages : 29
Enregistré le : 12 janv. 2020 20:55
Contact :

Re: TAVERNIER 6809

Message par Franckb78 » 19 janv. 2020 19:44

ldb #$1A

soustraction entre deux adresses pour obtenir la taille du tableau ;)

genre
ldb #DATA_end - #DATA

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

Re: TAVERNIER 6809

Message par 6502man » 20 janv. 2020 22:29

@Michel: Je n'ai pas eu le temps aujourd'hui à cause d'un imprévu :roll:
Demain matin je m'en occupe .

Sinon dans ton code ça parait correct tu as choisi le mode screen 8 comme l'exemple que je t'ai donné, je te ferai un exemple en mode 2 ;)

Par contre en mode Screen 8 il faut impérativement définir la palette de 256 couleurs.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
michel guyot
Messages : 193
Enregistré le : 20 mars 2016 16:01
Localisation : Pyrénées orientales

Re: TAVERNIER 6809

Message par michel guyot » 20 janv. 2020 23:27

Bonjour 6502man
Oui ce que je vise est plutôt le mode graphique GRAPHIC 7 (Screen8)… mais je n'en suis pas là !

La partie décodage d'adresse décode bien les 4 adresses E100 à E103

Il est impératif que je vérifie si les timing au niveau de l'interface sont corrects

Pour cela, je cherche un moyen simple de vérifier si la lecture ou l'écriture d'un registre s'effectue correctement

Les registres ne fonctionnent soit en écriture, soit en lecture ce qui ne facilite guère la tache


une question : que faut-il pour que les sortie vidéo (composite ou RGB) soit activent ? Est-il impératif d'avoir quelque chose en VRAM ?
Le mode 2 est peut-être plus simple…

Cordialement
Michel

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

Re: TAVERNIER 6809

Message par 6502man » 20 janv. 2020 23:44

A mon avis les sorties vidéos sont actives dès que les registres sont écrit surtout le R1 qui possède un bit pour activer l'affichage ou le désactiver,
Et ensuite si ta mémoire est rempli de données imprévisible tu devrais avoir au moins quelque chose afficher, si la mémoire est rempli de zéro
tu n'auras qu'un écran noir !!

Les registres sont en écritures sauf ceux de status qui eux sont en lectures :lol:

Demain matin je regarde pour te faire un code pour le screen 2 ça te permettra de commencer .

Pour les timings tu as les chronogrammes dans les dernières pages du datasheet, après si tu décodes les port du V9938 en prenant en compte les signaux E et Q du 6809 pour être sur que le bus est des données valides ça ne devrait pas poser de problèmes ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
michel guyot
Messages : 193
Enregistré le : 20 mars 2016 16:01
Localisation : Pyrénées orientales

Re: TAVERNIER 6809

Message par michel guyot » 21 janv. 2020 07:59

Bonjour 6502man
Ce matin la neige a fait apparition mais elle ne va pas tenir longtemps…!

Le décodage d'adresses est élaboré avec les signaux E et Q comme je l'avais fait avec une carte co-processeur et qui fonctionnait.
La dataSheet du VM9938 indique des chronogrammes très similaires.

Oui les registres de status sont accessibles en lecture, mais que doit-on y trouver, je n'ai pas de référence.
Je vais essayer des tests de lecture répétés pour voir si les codes lus sont aléatoires ou non...

Coté video seule la sortie CSYNC génère des impulsions de synchro qui me semblent corrects

Je suis d'accord, même si la mémoire est remplie aléatoirement, je devrais bien avoir une sorte d'image sauf si le système d'affichage a besoin de connaître des adresses écrite en RAM pour pouvoir faire un display de l'écran.


A plus
Michel

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

Re: TAVERNIER 6809

Message par 6502man » 21 janv. 2020 15:39

Pas de neige ici, il fait trop doux pour ca :wink:

J'ai fait un petit programme pour tester le mode graphic 2, (j'ai enlevé les datas pour ne pas surcharger le post) :

J'ai essayé de commenter au maximum le code pour que cela soit le plus compréhensible possible, après on peut faire mieux mais
le principal c'est que ca soit fonctionnel, j'ai vérifié le code en émulation ca devrait fonctionner correctement, mais il peut y avoir
un bug qui soit passé à travers (erreur adresse vdp, index de boucle,...) !!!

Code : Tout sélectionner

;--------------
;(c) 2020
; by 65602man
;
; test VDP9938
; sur Tavernier
; pour michel G.



; VDP I/O Ports 
;---------------
VDPCTRL		.EQU	$E101		;	PORT #1
VDPDATA		.EQU	$E100		;	PORT #0
VDPPALETTE	.EQU	$E102		;	PORT #2
VDPRegInd	.EQU	$E103		;	PORT #3		;	registres indirectes


	ORG $D000
	
Main:

    JSR InitVDP


; remmpli la VRAM
    LDD #$0000
    LDX #$0000
    JSR SetVDPAddress       ; $0.0000
        LDX #ScreenA
        LDY #$1800
        JSR FillVram


    LDD #$0000
    LDX #$0060
    JSR SetVDPAddress       ; $0.1800
    LDU #VDPDATA	        ; adresse ecriture P1  VDP
    LDX #$0003      ; 3 blocs de 256 octets
    CLRA
BigloopFilnamVram:
    LDB #$FF
FillNamVram:
	STA,U
	INCA
	DECB
	BNE FillNamVram
	TFR X,D
    SUBD #$01
    TFR D,X
	BNE BigloopFilnamVram


    LDD #$0000
    LDX #$0080
    JSR SetVDPAddress       ; $0.2000
        LDX #ScreenB
        LDY #$1800
        JSR FillVram

End:
	BRA End	; 


FillVram:
    LDU #VDPDATA	        ; adresse ecriture P1  VDP
LoopWriteVram:
	LDA ,X+
    STA ,U                  ; Write data sur P1
    TFR Y,D
    SUBD #$01
    TFR D,Y
	BNE LoopWriteVram
    RTS
	
	
InitVDP:
    LDB #24             ; 12 registres à ecrires
    LDX #VdpRegdatas     ; adresse des données
    LDU #VDPCTRL         ; adresse ecriture registre VDP
LoopInitVdp:
    LDA ,X+
    STA ,U  ; WRITE data
    DECB
    BNE LoopInitVdp
    RTS


;-------------------------------------------
;	Fixe l'adresse d'ecriture du VDP 
;			VRAM  00000h-1FFFFh
;	{ Reg #45	=	0 MSX MXD MXS DIY DIX EQ MAJ }  not necessary
;	Reg #14 = 0 0 0 0 0 A16 A15 A14
;	PORT #1 = A7 A6 A5 A4 A3 A2 A1 A0
;	PORT #1 = 0 R/W A13 A12 A11 A10 A9 A8
;	after  read or write by PORT #0
;-------------------------------------------
; IN:
;	A = A16:4  A15:2  A14:1      (R14)
;	B = A7 A6 A5 A4 A3 A2 A1 A0  (P1)
;   X =  0 0 0 0 0 0 0 0 A13:32 A12:16 A11:8 ...  (P1)
;-------------------------------------------
SetVDPAddress:
	LDU #VDPCTRL        ; adresse ecriture registre VDP
	STA ,U              ; WRITE data            ; A==>R14
	LDA #14+$80
	STA ,U              ; WRITE n° registre	    ; R14
    STB ,U              ; Write data
	TFR X,D
	ADDB #$40           ; mode ecriture
    STB ,U              ; Write data
	RTS	


VdpRegdatas:    
		;	 R0	      R1	   R2 =$1800   R3=$2000   R4=$0000   R5       R6       R7     
    	FCB $02,$80, $60,$81, $06,$82,    $ff,$83,   $03,$84,   $36,$85, $07,$86, $01,$87
        ;    R8       R9       R10     R11
        FCB $08,$88, $02,$89, $00,$8a ,$00,$8b
        
;   ----   GRAPHIC MODE 2 ----        
;  R0 = 0   DG  IE2 IE1 0   0   1   0
;  R1 = 0   BL  IE0 0   0   0   SI  MAG
;  R2 = 0   A16 A15 A14 A13 A12 A11 A10      ;pattern name table adresse
;  R3 = A13 1   1   1   1   1   1   1        ; color table adresse
;  R10= 0   0   0   0   0   A16 A15 A14      ;   "     "      "
;  R4 = 0   0   A16 A15 A14 A13 1   1        ;Pattern generator adresse
;  R5 = A14 A13 A12 A11 A10 A9  A8  A7       ;Sprites attributes adresse 
;  R11= 0   0   0   0   0   0   A16 A15      ;   "         "       "
;  R6 = 0   0   A16 A15 A14 A13 A12 A11      ;Sprites pattern adresse 
;  R7 = 0   0   0   0   BD3 BD2 BD1 BD0      ; Color back/borderground
;  R8 = MS  LP TP   CB  VR  0   SPD BW
;  R9 = LN  0  S0   S1  IL  E0  NT  DC



;       ---    DATAS  SCREEN  ---

ScreenA:
	FCB 0,0,0,....................  les datas sont dans le fichier joint ;)

ScreenB:
	FCB 0,0,0,.................... les datas sont dans le fichier joint ;)
Le binaire et le source :
Tav_VDP9938.zip
(21.53 Kio) Téléchargé 8 fois
La seule partie qui nécessiterais plus d'explications est celle la :
Un affichage d'une page en SCREEN GRAPHIC 2 est organisé selon les valeurs des registres (voir la partie du code concerné) définissant l'adresses
des différentes parties constituant une page écran ( couleurs, formes, sprites) .
Donc ont commence par remplir la zone du générateur de patterns (c'est à dires la forme des dessins constituant un bloc de 8x8 = 8 lignes par bloc) :

Code : Tout sélectionner

; rempli la VRAM
    LDD #$0000
    LDX #$0000
    JSR SetVDPAddress       ; $0.0000
        LDX #ScreenA
        LDY #$1800
        JSR FillVram

Ensuite on rempli la zone des noms de patterns (c'est à dires la carte des patterns (pour un bloc de 8x8)) :

Code : Tout sélectionner

    LDD #$0000
    LDX #$0060
    JSR SetVDPAddress       ; $0.1800
    LDU #VDPDATA	        ; adresse ecriture P1  VDP
    LDX #$0003      ; 3 blocs de 256 octets
    CLRA
BigloopFilnamVram:
    LDB #$FF
FillNamVram:
	STA,U
	INCA
	DECB
	BNE FillNamVram
	TFR X,D
    SUBD #$01
    TFR D,X
	BNE BigloopFilnamVram
Et pour finir on rempli la zone des couleurs de patterns (c'est à dires la couleur (2 par bloc de 8 pixels de large) pour chaque ligne de patterns) :

Code : Tout sélectionner

    LDD #$0000
    LDX #$0080
    JSR SetVDPAddress       ; $0.2000
        LDX #ScreenB
        LDY #$1800
        JSR FillVram
Et pour finir le mode Graphic 2 divise la zone écran en 3 bloc de 256 patterns soit 768 patterns de 8 lignes, mais attention un pattern ne peut être utilisé que dans son bloc de définition :lol:
Oui j'ai perdu un peu de monde en route, et toi au fond qui est entrain de ronfler :wink:

Voila si ca peux te permettre d'avancer sur ton projet.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

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

Re: TAVERNIER 6809

Message par __sam__ » 21 janv. 2020 16:12

Arg.. le coder 6809 que je suis rouspète quand il voit ca:

Code : Tout sélectionner

TFR X,D
SUBD #$01
TFR D,X
BNE ...
Ce code méconnais le fait que LEAX -1,X, comme LEAY contrairement à LEAU ou LEAS met à jour le bit Z. Il n'est donc pas nécessaire de passer par SUBD/TFR pour faire la même chose. Résultat on fait en plus de 20 cycles ce qui peut se faire en 5 ou moins. Grrrr :twisted:

sam (ronchon)
Samuel.
A500 Vampire V2+ ^8^, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

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

Re: TAVERNIER 6809

Message par 6502man » 21 janv. 2020 16:17

Ah et bien voila c'est ce que je cherchais, je voulais faire une soustraction sur X ou Y mais impossible de me rappeler et pas trouver dans les mnemo 6809 de SUBX ou équivalent donc tu coup j'ai fait comme ca :roll:
Merci Sam pour ta proposition d'optimisation :D
et désolé pour le code 6809 un peu simpliste :?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
michel guyot
Messages : 193
Enregistré le : 20 mars 2016 16:01
Localisation : Pyrénées orientales

Re: TAVERNIER 6809

Message par michel guyot » 21 janv. 2020 16:45

Bonjour 6502man

Merci pour ces infos, je vais lire tout cela et l'exploiter au mieux..
Concernant le source et le binaire, peux-tu me dire quel assembleur tu utilises..

A plus

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

Re: TAVERNIER 6809

Message par 6502man » 21 janv. 2020 17:03

Pour l'assembleur j'utilise soit A09 soit Tasm (mais limité pas tous les Mnémo sont utilisable) ou soit l'excellent assembleur online www.asm80.com qui permet d'assembler pour 6502,6800,6809,65c816,8080,.... et en plus il à un émulateur online très pratique pour tester les routines :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
michel guyot
Messages : 193
Enregistré le : 20 mars 2016 16:01
Localisation : Pyrénées orientales

Re: TAVERNIER 6809

Message par michel guyot » 21 janv. 2020 19:22

Bonjour 6502man

J'ai un problème pour retrouver l'assembleur …
Le plus simple pour moi est de ré-éditer le source avec l'assembleur du TAVERNIER..
Peux-tu me transmettre les data ScreenA et ScreenB format texte ou pdf

mon email est michel.guyot8@orange.fr

Cordialement
Michel

Répondre