La Place des Développeurs question sur Nestor Basic
ericb59
Membre non connecté
Conseiller Municipal
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) ? Edité par ericb59 Le 19/07/2012 à 11h14
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) ? Edité par ericb59 Le 19/07/2012 à 11h14
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
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)
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)
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
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
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
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 !
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 ...
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 !!
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
Code TEXT :
Edité par
ericb59
Le 19/07/2012 à 15h49
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
J'ai trouvé ... Dans le manuel
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.
C'est normal puisque tu changes l'adresse de la source en VRAM.
J'ai pas bien compris ta demande
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
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
Et quelles sont les adresses de la page 0
J'ai pas bien compris ta demande
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)
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie