Double buffering sur MO6
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
Daniel pourrait répondre car seuls DCMoto et MESS font l'émulation MO6.
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
La documentation technique Cofadel du MO5NR donne beaucoup d'informations sur le MO6, si on fait abstraction du contrôleur nanoréseau. Il y a en particulier un paragraphe sur la transformation des adresses.
Cet extrait du code de dcmoto peut aussi donner quelques éclaircissements (surtout les commentaires) :
Autre extrait, avec ce commentaire :
Les adresses $B000-$BFFF, $C000-$DFFF et $E000-$EFFF sont traitées différemment.
Cet extrait du code de dcmoto peut aussi donner quelques éclaircissements (surtout les commentaires) :
Code : Tout sélectionner
// Selection de banques memoire ///////////////////////////////////////////////
void MO6rombank(int c)
{
//si le bit 0x20 de a7e6 est positionne a 1, l'espace ROM est recouvert
//par la banque RAM definie par les 3 bits de poids faible de a7e6
//subtilite : les adresses sont decalées de +0x1000 pour 0xb000 (en 0x1000),
//0xc000 (en 0x2000), 0xd000 (en 0x3000), et de -0x3000 pour 0xe000 (en 0x1000).
//sinon la banque ROM est definie par a7dd et a7c0 (c)
//7 est le numero de banque de rom fictive recouverte par la ram
nrombank = (c & 0x20) >> 5;
if((port[0x1d] & 0x10) == 0) nrombank += 2;
}
Quand j'évoquais les subtiles différences avec le TO8, je pensais surtout à ce genre de pièges ://dans la rom basic 128, la plage $b000-$bfff est apres la plage $c000-$efff
Les adresses $B000-$BFFF, $C000-$DFFF et $E000-$EFFF sont traitées différemment.
Code : Tout sélectionner
// Lecture memoire MO6 ///////////////////////////////////////////////////////
int MgetMO6(int a)
{
int r;
//extern int lightpen, lbutton;
a &= 0xffff;
if(a == breakpoint) breakflag = 1;
switch(a >> 12)
{
case 0x0: case 0x1: r = videobank[nvideobank][a]; break;
case 0x2: case 0x3: case 0x4: case 0x5: r = userram[a]; break;
case 0x6: case 0x7: case 0x8: case 0x9: r = rambank[nrambank][a]; break;
case 0xa: if(a < 0xa7c0) {r = ctrlbank[nctrlbank][a & 0x7ff]; break;}
if(a < 0xa900) r = MO6readport(a); else r = 0; break;
case 0xb:
if(port[0x26] & 0x20) {r = rombank[7][a + 0x1000]; break;} //rom recouverte par ram
if((port[0x1d] & 0x30) == 0x20) {r = 0; break;} //cartouche masquee Basic 1
//dans la rom basic 128, la plage $b000-$bfff est apres la plage $c000-$efff
if(port[0x1d] & 0x20) {r = rombank[nrombank][a + 0x4000]; break;} //cartouche masquee Basic 128
if((cartype == 3) && ((port[0x0b] & 4) == 0)) {r = 0; break;} //extension memoire inactive
if((a & 0xfffc) == 0xbffc) Switchcartridgebank(a); //commutation cartouche
r = carbank[ncarbank][a]; //cartouche memo5 ou extension memoire
break;
case 0xc: case 0xd:
if(port[0x26] & 0x20) {r = rombank[7][a + 0x1000]; break;} //rom recouverte par ram
if(port[0x1d] & 0x20) {r = rombank[nrombank][a]; break;} //cartouche masquee Basic 128
if((cartype == 3) && ((port[0x0b] & 4) == 0)) {r = 0; break;} //extension memoire inactive
r = carbank[ncarbank][a]; //cartouche memo5 ou extension memoire
break;
case 0xe:
if(port[0x26] & 0x20) {r = rombank[7][a - 0x3000]; break;} //rom recouverte par ram
if(port[0x1d] & 0x20) {r = rombank[nrombank][a]; break;} //cartouche masquee Basic 128
if((cartype == 3) && ((port[0x0b] & 4) == 0)) {r = 0; break;} //extension memoire inactive
r = carbank[ncarbank][a]; //cartouche memo5 ou extension memoire
break;
default: r = systbank[nsystbank][a]; break;
}
return r & 0xff;
}
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Double buffering sur MO6
merci pour ces infos/confirmations, ce comportement est-il modifiable ?
Re: Double buffering sur MO6
C'est très difficile. Il faudrait au minimum reprogrammer les deux Basic et le moniteur système, changer le gate array et la ROM. Et la plupart des logiciels existants ne fonctionneraient plus.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Double buffering sur MO6
Je comprends mieux le manque d’intérêt pour cette machine.
C'est un peu une erreur de conception, non ?
C'est un peu une erreur de conception, non ?
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
Oui où une contrainte technique liée au décodage d'adresse. La logique du TO avec l'inversion RAMA/RAMB suivant que c'est mappé en $0000 ou en $A000 n'est pas non très logique.OlivierP a écrit :C'est un peu une erreur de conception, non ?
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
La raison essentielle doit être la recherche de compatibilité avec les applications MO5 existantes (MEMO5, cassettes, disquettes).
On ne peut pas blâmer Thomson sans analyser plus précisément les raisons de leur choix. Il est évident qu'on peut le contester aujourd'hui, mais de toutes façons on ne peut pas refaire l'histoire.
On ne peut pas blâmer Thomson sans analyser plus précisément les raisons de leur choix. Il est évident qu'on peut le contester aujourd'hui, mais de toutes façons on ne peut pas refaire l'histoire.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Double buffering sur MO6
J'ai trouvé un moyen de faire NyanCat sur MO6.
- ça fonctionne bien sur dcmoto
- ça fonctionne bien sur machine réelle mais avec quelques pixels parasites
- je n'arrive pas a trouver une version de MESS qui fonctionne correctement : la dernière version 0.173 fait toujours Device I/O error et la version 0.112 (dernière version testée d'après https://www-apr.lip6.fr/~mine/mess/index.html.fr) ne semble pas émuler correctement le MO6 dans le mode utilisé
Que faire sachant que je souhaite rendre public une seule version ? (si possible sans bug)
EDIT : je met un lien temporaire sur http://dl.free.fr/gEzPHulJF
EDIT2 : lien temporaire remplacé par https://github.com/OlivierP-To8/NyanCat ... aster/dist
- ça fonctionne bien sur dcmoto
- ça fonctionne bien sur machine réelle mais avec quelques pixels parasites
- je n'arrive pas a trouver une version de MESS qui fonctionne correctement : la dernière version 0.173 fait toujours Device I/O error et la version 0.112 (dernière version testée d'après https://www-apr.lip6.fr/~mine/mess/index.html.fr) ne semble pas émuler correctement le MO6 dans le mode utilisé
Que faire sachant que je souhaite rendre public une seule version ? (si possible sans bug)
EDIT : je met un lien temporaire sur http://dl.free.fr/gEzPHulJF
EDIT2 : lien temporaire remplacé par https://github.com/OlivierP-To8/NyanCat ... aster/dist
Dernière modification par OlivierP le 10 mai 2016 17:49, modifié 2 fois.
Re: Double buffering sur MO6
Les pixels parasites sur le vrai MO6 peuvent peut-être être supprimés en synchronisant l'affichage avec la VBL ?
La réponse à ta question est très claire pour moi : La seule contrainte pour un développeur est de faire fonctionner le programme correctement sur la vraie machine. Si les émulateurs ne reproduisent pas bien son comportement ce n'est pas le problème du développeur, mais celui des auteurs d'émulateurs. Il faut leur signaler, et ne pas chercher à masquer les anomalies.
Concernant l'émulation Thomson dans MESS, je crois qu'il y a peu d'utilisateurs, justement à cause des difficultés rencontrées pour faire fonctionner l'application. C'est dommage que MESS ne soit pas développé avec plus de rigueur, car les modules Thomson, en particulier, sont remarquables. Mais les modifications anarchiques à chaque nouvelle version risquent un jour de faire écrouler le bel édifice.
La réponse à ta question est très claire pour moi : La seule contrainte pour un développeur est de faire fonctionner le programme correctement sur la vraie machine. Si les émulateurs ne reproduisent pas bien son comportement ce n'est pas le problème du développeur, mais celui des auteurs d'émulateurs. Il faut leur signaler, et ne pas chercher à masquer les anomalies.
Concernant l'émulation Thomson dans MESS, je crois qu'il y a peu d'utilisateurs, justement à cause des difficultés rencontrées pour faire fonctionner l'application. C'est dommage que MESS ne soit pas développé avec plus de rigueur, car les modules Thomson, en particulier, sont remarquables. Mais les modifications anarchiques à chaque nouvelle version risquent un jour de faire écrouler le bel édifice.
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
En même temps c'est cohérent avec le nom de l'appli pour les anglophones. Qui aurait l'idée farfelue d'appeler son émulateur "désordre" ou "b*rdel" ?Daniel a écrit :C'est dommage que MESS ne soit pas développé avec plus de rigueur (...)
Cela dit, comme l’émulateur connait les DSK (image disk), le choix de "b*rdel" pourrait avoir une certaine cohérence aussi (penser à l'ex homme-politique )
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
Je ne peux pas synchroniser l'affichage sans détériorer la sortie du sample
J'ai mis les sources et les binaires sur github : https://github.com/OlivierP-To8/NyanCat
J'ai mis les sources et les binaires sur github : https://github.com/OlivierP-To8/NyanCat
-
- Messages : 25
- Inscription : 19 juin 2017 19:00
Re: Double buffering sur MO6
Sorry for necro posting guys.
When i execute this code to switch on bitmap16 mode:
ORG &32000
LDA #$7B
STA $A7DC
I get this:
Red+yellow point on center are drawn by me so thats fine.
(I'm using PC128 emulation rather than MO6).
Also, this is a code for TO8:
Now on MOs E7C3 is actually A7C0, if i do LDA #31 STA $1000 i can see my points. But can't find a way to switch on RAMB, #$FE seems not correct on MO. Of course my purpose is to write points 3 and 4 right after 1 and 2 on $1000.
Merci les héros!
When i execute this code to switch on bitmap16 mode:
ORG &32000
LDA #$7B
STA $A7DC
I get this:
Red+yellow point on center are drawn by me so thats fine.
(I'm using PC128 emulation rather than MO6).
Also, this is a code for TO8:
Code : Tout sélectionner
LDA $E7C3
ANDA #$FE .Passage en RAMB
STA $E7C3
Merci les héros!
-
- Messages : 2365
- Inscription : 06 avr. 2009 12:07
Re: Double buffering sur MO6
Which means you are probably already in RAMB. Try:
Code : Tout sélectionner
LDA $A7C0
ORA #$01 .Passage en RAM forme
STA $A7C0
-
- Messages : 25
- Inscription : 19 juin 2017 19:00
Re: Double buffering sur MO6
Yes, so it is ANDA #$FE and ORA #$01, thanksFool-DupleX a écrit :Which means you are probably already in RAMB. Try:
Code : Tout sélectionner
LDA $A7C0 ORA #$01 .Passage en RAM forme STA $A7C0
Any idea about the glitched screen?
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Double buffering sur MO6
You mean the vertical stripes that appear after poking $A7cd hence switching to 160x200? they are normal since in 320x200 the invisible cyan foreground color in color-ram suddenly are interpreted. as chunk bits and become visible as stripes on every ram-b column in 160x200.
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