Double buffering sur MO6
Modérateurs : Papy.G, fneck, Carl
Re: Double buffering sur MO6
Merci pour le liens vers A09 !
Je viens de tester et je le trouve vraiment plus pratique que c6809 au niveau de la syntaxe !
Je viens de tester et je le trouve vraiment plus pratique que c6809 au niveau de la syntaxe !
Programmation rétro ! Orion_'s website
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
Sisi, je pense que ca marche pareil. Normalement dans les adresses on est toujours supposé dire le mode d'adressage à utiliser >LBL ou <LBL. Si on ne dit rien (LBL seul), alors le compilo choisi le mode qui lui semble le mieux, typiquement le mode direct-page si le setdp courant (implicite à 0) correspond à la partie haute de LBL: on gagne à la fois 1 cycle et un octet. C'est magnifique ce mode direct-page.Daniel a écrit :Je ne connais pas c6809, donc je ne suis pas sûr que la méthode s'applique aussi.
Concernant A09, produit-il des binaires compatibles thomson ?
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: Double buffering sur MO6
A09 est le seul macro-assembleur 6809 utilisé pour tous mes développements Thomson, en particulier le contrôleur CS91-280 et les démonstrations sur carte SD. Jusqu'à maintenant je n'ai pas remarqué d'incompatibilité. J'insère directement le binaire en mémoire avec la fonction de l'émulateur dcmoto.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
Ah ok, il produit donc un binaire brut sans le header thomson.
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: Double buffering sur MO6
Salut
J'ai récemment travaillé avec FoolDuplex au démarrage de OS9 sur MO6. Et maintenant c'est une chose réglé et qui marche bien. On serait donc susceptible d'avoir OS9 sur MO5/MO5NR/MO6/TO8/TO9 vu que le MO6 utilise le même GateArray que le MO5NR, T08, et T09.
Je bosse actuellement sur un projet (qui n'avance pas très vite) qui me tiens a coeur depuis très longtemps: Faire une tête de réseau NanoReseau sur MO5 et sous OS9. Je me heurte à des problèmes de temps réel, mais je ne désespère pas d'y arriver. Surtout que sur MO6, ce qui est intéressant c'est qu'il y a en standard plus de mémoire, donc plus de possibilité de gérer des postes.
Il me restera donc, comme tu le dis, à gérer par exemple la carte SDMOTO de Daniel pour avoir accès à un disque OS9, mais la aussi, je risque d'avoir un autre soucis temps réel car le module est lent. Mais ça c'est une autre histoire, et un autre problème sur lequel je me pencherai plus tard.
Jacques
Il est vrai que la page officielle d'OS9 sur Thomson n'a pas évoluée, mais OS9 est toujours d'actualité pour nos Thomson (même si on (avec FoolDuplex) fait pas trop de pub). Je suis de très près ce qui a été fait sur CoCo III, et j'ai ainsi mis à jour le noyau et les driver principaux.Orion_ a écrit :et d'ailleurs c'est toujours d'actualité OS/9 ? car la page officielle semble en pause depuis bien longtemps
je pense qu'avec le nouveau module SD y'aurait de quoi faire (pour éviter le ROM disk par exemple)
J'ai récemment travaillé avec FoolDuplex au démarrage de OS9 sur MO6. Et maintenant c'est une chose réglé et qui marche bien. On serait donc susceptible d'avoir OS9 sur MO5/MO5NR/MO6/TO8/TO9 vu que le MO6 utilise le même GateArray que le MO5NR, T08, et T09.
Je bosse actuellement sur un projet (qui n'avance pas très vite) qui me tiens a coeur depuis très longtemps: Faire une tête de réseau NanoReseau sur MO5 et sous OS9. Je me heurte à des problèmes de temps réel, mais je ne désespère pas d'y arriver. Surtout que sur MO6, ce qui est intéressant c'est qu'il y a en standard plus de mémoire, donc plus de possibilité de gérer des postes.
Il me restera donc, comme tu le dis, à gérer par exemple la carte SDMOTO de Daniel pour avoir accès à un disque OS9, mais la aussi, je risque d'avoir un autre soucis temps réel car le module est lent. Mais ça c'est une autre histoire, et un autre problème sur lequel je me pencherai plus tard.
Jacques
Re: Double buffering sur MO6
Je reviens sur la discussion à propos de l'extension mémoire sur MO6.
J'ai testé le programme suivant sur DCmoto avec l'extension mémoire activé, ça fonctionne (en mode MO5 et MO6)
j'ai bien le petit damier qui s'afficher en haut de l'écran:
Par contre, sur un Vrai MO6 avec une vraie extension mémoire, ça me fait un écran gris, et l'affichage doublé/décalé.
Je cherche à faire un petit programme me permettant de tester la ram complete de mes 6 extensions mémoire acheté sur ebay, mais comme je n'ai qu'un MO6, ça à l'air un peu plus complexe (vu que l'extension est censé être incompatible MO6)
Si déja, ce petit programme ne marche pas, je sais pas bien si c'est parceque j'ai fait une erreur ou si parceque mes extensions ne fonctionne pas
Remarque: j'ai un écran gris entier, donc, le code n'arriverais même pas à la ligne ou c'est censer changer le bord en noir (sta $A7DD)
J'ai testé le programme suivant sur DCmoto avec l'extension mémoire activé, ça fonctionne (en mode MO5 et MO6)
j'ai bien le petit damier qui s'afficher en haut de l'écran:
Par contre, sur un Vrai MO6 avec une vraie extension mémoire, ça me fait un écran gris, et l'affichage doublé/décalé.
Je cherche à faire un petit programme me permettant de tester la ram complete de mes 6 extensions mémoire acheté sur ebay, mais comme je n'ai qu'un MO6, ça à l'air un peu plus complexe (vu que l'extension est censé être incompatible MO6)
Si déja, ce petit programme ne marche pas, je sais pas bien si c'est parceque j'ai fait une erreur ou si parceque mes extensions ne fonctionne pas
Remarque: j'ai un écran gris entier, donc, le code n'arriverais même pas à la ligne ou c'est censer changer le bord en noir (sta $A7DD)
Code : Tout sélectionner
lda $81 ; Valeur du BIOS pour $A7E7
ora #$50 ; Bit 6, Desactivation de l'émulation cartouche (non documenté), et bit 4 pour écriture $A7E5
sta $A7E7
clra
sta $A7E4 ; Permet la lecture des valeurs systeme en $A7E4
lda $A7E4
anda #%11011111 ; Cartouche Visible
sta $A7DD ; Attention: trash la couleur du bord (4 bit LSB)
lda #$0C ; Selectionne la Bank 0 de l'extension mémoire 64k ($C -> $F pour les 4 banks)
sta $A7CB ; 16k disponible à partir de $B000
lda #$55 ; Test d'écriture dans l'extension mémoire
ldb #$AA
ldx #$B000
rea std ,x++
cmpx #$B008
bne rea
lda $A7C0 ; Select VRAM Page 0
ora #1
sta $A7C0
ldx #$B000 ; Affiche le resultat dans le premier char de l'écran
ldy #0
reb lda ,x+
sta ,y
leay 40,y
cmpx #$B008
bne reb
LOOP JMP LOOP
Programmation rétro ! Orion_'s website
-
- Messages : 2365
- Inscription : 06 avr. 2009 12:07
Re: Double buffering sur MO6
Attention : les bits 0-3 sur A7E4 sont phi, pas necessairement 0. je ferais un anda #%11010000 pour être sur du resultat sur le bord.
et puis il y a un gros bug au debut, tu charges la valeur qui se trouve en $0081, pas en $2081 ... donc ta config video est fausse.
et puis il y a un gros bug au debut, tu charges la valeur qui se trouve en $0081, pas en $2081 ... donc ta config video est fausse.
Re: Double buffering sur MO6
Bonjour,
Je deterre ce topic car j'ai pb pour utiliser le mode page en 160x200x16c.
J'essaye de faire une version MO6 de NyanCat TO8, mais l'affichage est décalé : on dirait que l'écran commence en $C000, avec $B000 à partir du milieu de l'écran
J'ai trouvé un moyen de contourner le pb, mais c'est vraiment un hack grossier et j'espère que je me suis trompé quelque part dans l'initialisation des registres, mais où ?
Je poste un bout de code qui affiche à la manière TO8 sur une page, et de manière a peu près correcte sur MO6 (avec gros hack) sur l'autre page.
Avez-vous une idée ou une piste ?
Je deterre ce topic car j'ai pb pour utiliser le mode page en 160x200x16c.
J'essaye de faire une version MO6 de NyanCat TO8, mais l'affichage est décalé : on dirait que l'écran commence en $C000, avec $B000 à partir du milieu de l'écran
J'ai trouvé un moyen de contourner le pb, mais c'est vraiment un hack grossier et j'espère que je me suis trompé quelque part dans l'initialisation des registres, mais où ?
Je poste un bout de code qui affiche à la manière TO8 sur une page, et de manière a peu près correcte sur MO6 (avec gros hack) sur l'autre page.
Avez-vous une idée ou une piste ?
Re: Double buffering sur MO6
Par manque de temps je n'ai pas encore regardé, mais comme il y a de subtiles différences entre le TO8 et le MO6 (et pas que les adresses), c'est probablement par là qu'il faut chercher. Si le problème n'est pas résolu avant la fin de la semaine j'essaierai de trouver une réponse plus précise.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
Ca doit être pareil que sur TO (page droite de http://dcmoto.free.fr/documentation/man ... ts&page=60). Quand on prends la page 2 ou la page 3 en video, la RAMA se trouve au dessus de la RAMB:
Donc la ram video débute dans la 2ème moité des 16ko
Code : Tout sélectionner
|$0000
| ::
|[RAMB] <-- colonnes impaires (1, 3, 5...) du mode 160x200
|[RAMA] <-- colonnes paires (0, 2, 4...)
| ::
|$FFFF
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: Double buffering sur MO6
c'est ce que je pensais aussi, la routine fonctionne bien sur TO8 (voir source sur http://forum.system-cfg.com/viewtopic.php?f=25&t=3469) mais pas tel quel sur MO6
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
En fait, ce que la doc dit sur TO c'est que le sens RAMB avant RAMA ne se produit que lorsqu'on map l'espace "données" ($A000-$DFFF) à l'écran 2 ou 3. La logique du décodage d'addresse est indiqué en bas de la page de gauche de: http://dcmoto.free.fr/documentation/man ... ts&page=61
Donc si on map l'écran 2 ou 3 ailleurs (dans l'espace ROM $0000-$3FFF typiquement) que dans l'espace "données" il n'y a pas cette inversion car le décodage est direct. C'est logique en fait s'il y avait inversion de la parti basse et haute de la RAM émulant la ROM, elle serait inexploitable.
Le tableau en bas de la page de droite de la page indiquée ci-dessus résume bien la situation sur TO
Donc si on map l'écran 2 ou 3 ailleurs (dans l'espace ROM $0000-$3FFF typiquement) que dans l'espace "données" il n'y a pas cette inversion car le décodage est direct. C'est logique en fait s'il y avait inversion de la parti basse et haute de la RAM émulant la ROM, elle serait inexploitable.
Le tableau en bas de la page de droite de la page indiquée ci-dessus résume bien la situation sur TO
Code : Tout sélectionner
Espace "données" Espace Ecran
$A000-$BFFF RAMB
$C000-$DFFF RAMA
Espace "cartouche" Espace Ecran
$0000-$1FFF RAMA
$2000-$3FFF RAMB
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: Double buffering sur MO6
on a donc la disposition suivante sur MO6 :
RAMA $C000-$CFFF (haut de l'écran) puis $D000-$DFFF (bas de l'écran)
RAMB $E000-$EFFF (haut de l'écran) puis $B000-$BFFF (bas de l'écran)
ce qui impose de complexifier l'algorithme de dessin pour gérer le saut de page en RAMB, qui est au milieu d'une ligne
comment accéder aux RAMA et B de manière linéaire ?
est-ce dû à la gestion particulière de la plage $B000-$BFFF avec la ROM BASIC 1 ?
RAMA $C000-$CFFF (haut de l'écran) puis $D000-$DFFF (bas de l'écran)
RAMB $E000-$EFFF (haut de l'écran) puis $B000-$BFFF (bas de l'écran)
ce qui impose de complexifier l'algorithme de dessin pour gérer le saut de page en RAMB, qui est au milieu d'une ligne
comment accéder aux RAMA et B de manière linéaire ?
est-ce dû à la gestion particulière de la plage $B000-$BFFF avec la ROM BASIC 1 ?
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
J'avoue que la config RAMB découpée en deux est déroutante. On aurait donc par tranche de 4ko sur MO6:
C'est vraiment pas linéaire en effet ce truc. C'est très ... inexploitable Dommage qu'il n'y ait pas de manuel technique du MO6 pour comprendre pourquoi c'est fichu comme ca.[RAMB: 4ko]
[RAMA: 4ko]
[RAMA: 4ko]
[RAMB: 4ko]
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: Double buffering sur MO6
Dans les sources de MESS (thomson.cpp) il y a une gestion particulière de l'espace cartouche pour le MO6 ($B000-$BFFF distinct de $C000-$EFFF), que l'on ne retrouve pas pour le TO8 (16Ko en une seule plage). Est-ce spécifique au code de MESS ou est-ce ainsi dans les autres émulateurs ?