TAVERNIER 6809
Modérateurs : Papy.G, fneck, Carl
Re: TAVERNIER 6809
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:
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:
- michel guyot
- Messages : 616
- Inscription : 20 mars 2016 16:01
- Localisation : Pyrénées orientales
Re: TAVERNIER 6809
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
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
Re: TAVERNIER 6809
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.
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.
- michel guyot
- Messages : 616
- Inscription : 20 mars 2016 16:01
- Localisation : Pyrénées orientales
Re: TAVERNIER 6809
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
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
- Pièces jointes
-
- 2020-01-19 - INIT VDP.jpg (488.67 Kio) Consulté 2959 fois
Re: TAVERNIER 6809
ldb #$1A
soustraction entre deux adresses pour obtenir la taille du tableau
genre
ldb #DATA_end - #DATA
soustraction entre deux adresses pour obtenir la taille du tableau
genre
ldb #DATA_end - #DATA
Re: TAVERNIER 6809
@Michel: Je n'ai pas eu le temps aujourd'hui à cause d'un imprévu
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.
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.
- michel guyot
- Messages : 616
- Inscription : 20 mars 2016 16:01
- Localisation : Pyrénées orientales
Re: TAVERNIER 6809
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
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
Re: TAVERNIER 6809
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
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 ?
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
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 ?
- michel guyot
- Messages : 616
- Inscription : 20 mars 2016 16:01
- Localisation : Pyrénées orientales
Re: TAVERNIER 6809
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
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
Re: TAVERNIER 6809
Pas de neige ici, il fait trop doux pour ca
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,...) !!!
Le binaire et le source :
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) :
Ensuite on rempli la zone des noms de patterns (c'est à dires la carte des patterns (pour un bloc de 8x8)) :
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) :
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
Oui j'ai perdu un peu de monde en route, et toi au fond qui est entrain de ronfler
Voila si ca peux te permettre d'avancer sur ton projet.
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 ;)
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
Code : Tout sélectionner
LDD #$0000
LDX #$0080
JSR SetVDPAddress ; $0.2000
LDX #ScreenB
LDY #$1800
JSR FillVram
Oui j'ai perdu un peu de monde en route, et toi au fond qui est entrain de ronfler
Voila si ca peux te permettre d'avancer sur ton projet.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: TAVERNIER 6809
Arg.. le coder 6809 que je suis rouspète quand il voit ca: 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
sam (ronchon)
Code : Tout sélectionner
TFR X,D
SUBD #$01
TFR D,X
BNE ...
sam (ronchon)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: TAVERNIER 6809
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
Merci Sam pour ta proposition d'optimisation
et désolé pour le code 6809 un peu simpliste
Merci Sam pour ta proposition d'optimisation
et désolé pour le code 6809 un peu simpliste
- michel guyot
- Messages : 616
- Inscription : 20 mars 2016 16:01
- Localisation : Pyrénées orientales
Re: TAVERNIER 6809
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
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
Re: TAVERNIER 6809
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
- michel guyot
- Messages : 616
- Inscription : 20 mars 2016 16:01
- Localisation : Pyrénées orientales
Re: TAVERNIER 6809
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
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