MSX Village forum

La Place des Développeurs question sur Nestor Basic

ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 19/07/2012 à 11h13
Quelqu'un ici a t'il déjà utilisé le Nestor Basic ?
http://www.konamiman.com/msx/msx-e.html#nestorbasic

Je ne parviens pas à comprendre la fonction 21

* Function 21: Data block transfer from VRAM to RAM

Input P(0) = Source VRAM block
P(1) = Source start address (VRAM)
P(2) = Destination segment
P(3) = Destination start address (RAM)
P(4) = Block length
P(5)<> 0 -> Autoincrement of P(1)
P(6)<> 0 -> Autoincrement of P(3)
Output: P(1) = P(1) + P(4) if P(5)<>0
P(2):P(3) = P(2):P(3) + P(4) if P(6)<>0


Elle est censé copier la VRAM en Ram.
les paramètres p(2), p(3), p(4) je sais ce qu'ils doivent être
par contre c'est quoi les paramètres p(0) et p(1) ? :heink Edité par ericb59 Le 19/07/2012 à 11h14


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 19/07/2012 à 13h39
Je précise tout de suite que je ne connais pas Nestor Basic.

Pour P(1), cela semble évident, c'est l'adresse de la source en VRAM.

Pour P(0), si je fais un parallèle avec les paramètres de la macro commande LMCM du VDP (qui semble en fait celle appelée par cette fonction 21 du Nestor Basic), c'est peut-être le paramètre qui spécifie sur quelle partie de VRAM on veut travailler.

Je m'explique : la presque totalité des MSX2 a 128Ko de VRAM, mais le standard prévoyait la possibilité d'aller au delà des 128Ko (jusqu'à 192Ko en fait). Ce paramètre précise donc dans quelle partie on veut travailler : il est à 0 si on utilise la VRAM de 0 à 128Ko, et il est à 1 si on utilise la VRAM étendue.

A essayer pour confirmer, donc.

EDIT : Non, ce n'est pas ça ...

J'ai ouvert le manuel de Nestor Basic et j'ai LU (du verbe LIRE comme par exemple dans l'expression : "LIRE LE MANUEL") les explications sur la gestion des segments mémoires (chapitre 3). Le Nestor Basic découpe la RAM et la VRAM en segments de 16Ko, et ils sont considérés commes contigus. Un MSX avec 128Ko de RAM et 128 Ko de VRAM aura donc 16 segments au total (les 8 premiers pour la RAM et les 8 suivants pour la VRAM). Sauf que l'ordre est inversé par rapport aux adresses de la VRAM. Dans l'exemple ici, le segment 9 désignera la partie $1C000 - $1FFFF de la VRAM, le segment 10 la partie $18000 - $1BFFF de la VRAM, etc ...

Ton paramètre P(0) est donc probablement le numéro de segment de la VRAM à partir duquel tu veux faire le transfert.

Edité par Metalion Le 19/07/2012 à 14h00


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 19/07/2012 à 14h01
je vais essayer ça Metalion. Peux tu me donner la plage d'adresse de la vram de l'écran actif en screen 8 pour que je teste...


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 19/07/2012 à 14h30
Cela dépend de l'adresse de ta source, de la page affichée, de la taille de la RAM et de la VRAM ...

Dans le cas 128Ko de RAM / 128Ko de VRAM / page affichée 0, les segments utilisés sont ceux de 12 à 15.

15 pour la partie (0,0)-(255,63)
14 pour la partie (0,64)-(255,127)
13 pour la partie (0,128)-(255,191)
12 pour la partie (0,192)-(255,255)


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 19/07/2012 à 14h40
Metalion , ce n'est pas la première fois que tu me tacle avec la lecture des manuels !
Evidemment que j'ai lu le manuel de nestor basic... enfin quoi . IL se peut que je comprenne mal ce que je lis, ca arrive, mais je l'ai lu ! ;)

Donc j'ai bien compris que la VRAM, et la RAM aussi est divisée en "segments" de 16 ko
Et dans toute la doc, lorsqu'il est question d'un segment dans un paramètre, il est bien mentionné le mot segment

Ici pour la fonction 21 : p(2) est le segment de ram de destination, p(3) est l'adresse &h0 du même segment
mais p(0) n'est pas un segment, sinon ce serait indiqué le mot segment et non pas block

a moins qu'un "segment de VRAM" soit nommé "Block"
mais ce n'est pas explicite dans la doc !! Edité par ericb59 Le 19/07/2012 à 14h40


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 19/07/2012 à 14h50
ericb59 :
Metalion , ce n'est pas la première fois que tu me tacle avec la lecture des manuels !

Evidemment que j'ai lu le manuel de nestor basic... enfin quoi . Il se peut que je comprenne mal ce que je lis, ca arrive, mais je l'ai lu ! ;)


Oui, oh, je te taquine un peu, allez ... :D :p



ericb59 :
Donc j'ai bien compris que la VRAM, et la RAM aussi est divisée en "segments" de 16 ko

Et dans toute la doc, lorsqu'il est question d'un segment dans un paramètre, il est bien mentionné le mot segment



Ici pour la fonction 21 : p(2) est le segment de ram de destination, p(3) est l'adresse &h0 du même segment

mais p(0) n'est pas un segment, sinon ce serait indiqué le mot segment et non pas block



a moins qu'un "segment de VRAM" soit nommé "Block"

mais ce n'est pas explicite dans la doc !!


J'ai dis que c'était probablement ça ... Je n'en suis pas sur à 100%.

Mais vu le contexte et l'explication sur les segments, cela me semble correspondre.



A toi d'essayer pour confirmer ...


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 19/07/2012 à 15h47
Code TEXT :
bon j'ai essayé, mais ca n'est vraiment pas clait (en tout cas pour moi)
quand je change le paramètre p(0) ca ne modifie rien à ce que je copie; par contre quand je modifie les qdresse Vram p(1) ca change ce que je suis en train de copier...
 
p(0)=40:p(1)&h000:p(2)=10:p(3)=&h0:p(4)=&h4000:e=usr(21)
 
ca me copie le haut de la page 1 dans le segment 10 de la ram
 
p(0)=40:p(1)&h4000:p(2)=10:p(3)=&h0:p(4)=&h4000:e=usr(21)
ca me copie le milieu de la page 1  dans le segment 10 de la ram
 
p(0)=40:p(1)&h8000:p(2)=10:p(3)=&h0:p(4)=&h4000:e=usr(21)
ca me copie le bas de la page 1  dans le segment 10 de la ram
 
il reste des adresses à copier, les dernière lignes de la page 2... Je ne parviens pas à déterminer la fin  des adresses...
Et quelles sont les adresses de la page 0
Edité par ericb59 Le 19/07/2012 à 15h49


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 19/07/2012 à 16h01
J'ai trouvé ... Dans le manuel :p ^^



NestorBasic :
"VRAM block" refers to 64K lower VRAM (block 0) or to 64K upper VRAM (block 1). VRAM addresses have the range &H0000-&HFFFF. If any VRAM address surpass &HFFFF after an autoincrement, the new address will be &H0000 and the VRAM block will be reversed (from 0 to 1, or from 1 to 0).


C'est simplement la partie inférieure ou supérieure de la VRAM.

VRAM block = 0 : adresses de $0 à $FFFF

VRAM block = 1 : adresses de $10000 à $1FFFF



Donc, dans ton cas, lorsque la page 0 est affichée, P(0)=0.



ericb59 :
par contre quand je modifie les adresses Vram p(1) ca change ce que je suis en train de copier...


C'est normal puisque tu changes l'adresse de la source en VRAM.



ericb59 :
il reste des adresses à copier, les dernière lignes de la page 2... Je ne parviens pas à déterminer la fin des adresses...

Et quelles sont les adresses de la page 0


J'ai pas bien compris ta demande :s



Mais en tout cas, une page en SCREEN8 prend la moitié de la VRAM, soit 64Ko.

Pour la page 0, les adresses sont donc $0 à $FFFF pour la page complète et $0 à $D3FF pour la partie visible (256x212). Edité par Metalion Le 19/07/2012 à 16h12


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 19/07/2012 à 16h14
ok ! T'es trop fort !
j'avais pas LU du verbe lire ce paragraphe ! :oups
Je suis passé à coté ! quelle linote je suis !

Merci Metalion ! :top :top


banniere-ericb59e
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie