MSX Village forum

La Place des Développeurs Question sur Zone des Sprites

Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 12/01/2016 à 20h43

Reprise du message précédent

igal :
Ok ok...On peut donc pas indiquer une Valeur Négative qui aurait permis d'atteindre la "Page non Active" juste avec la valeur -1


Non, car les valeurs négatives ne sont qu'une illusion.

Ce ne sont pas des valeurs "en plus", c'est simplement une façon différente d'interpréter un même chiffre.



Un nombre sur 2 octets peut coder une valeur entre 0 et 65535. Mais si on considère que le dernier bit représente le signe, alors on peut dire aussi que ces 2 octets peuvent coder une valeur entre -32767 et +32768. Et c'est en fait strictement la même chose.


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)
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 13/01/2016 à 01h51
Je crois me souvenir qu'il n'est pas possible de déplacer les sprites sur l'autre page en Basic mais il y a longtemps de ça. Peut-être qu'a l'époque je n'avais pas tout saisi.
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 13/01/2016 à 09h57
Eric,

Voilà déjà la routine de déplacement de la zone et d'affectation de la nouvelle :

Code :
; Déplacement de la zone d'origine vers la nouvelle zone
; Table couleur sprites : de $0F800 vers $10000, longueur 512 octets
; equivalent COPY (0,248)-(255,249) TO (0,256)

        ld      hl,0
        ld      (SX),hl         ; SX = $F562
        ld      hl,248
        ld      (SY),hl         ; SY = $F564
        ld      hl,0
        ld      (DX),hl         ; DX = $F566
        ld      hl,256
        ld      (DY),hl         ; DY = $F568
        ld      hl,256
        ld      (NX),hl         ; NX = $F56A
        ld      hl,2
        ld      (NY),hl         ; NY = $F56C
        ld      hl,0
        ld      (ARG),hl        ; ARG = $F56F
        ld      a,3
        ld      (LOGOP),a       ; LOGOP = $F571
        ld      hl,SX
        ld      ix, BLTVV       ; BLTVV = $0191
        call    EXTROM          ; EXTROM = $0015

; Table attributs sprites : de $0FA00 vers $10200, longueur 128 octets
; equivalent COPY (0,250)-(127,250) TO (0,258)

        ld      hl,0
        ld      (SX),hl         ; SX = $F562
        ld      hl,250
        ld      (SY),hl         ; SY = $F564
        ld      hl,0
        ld      (DX),hl         ; DX = $F566
        ld      hl,258
        ld      (DY),hl         ; DY = $F568
        ld      hl,128
        ld      (NX),hl         ; NX = $F56A
        ld      hl,1
        ld      (NY),hl         ; NY = $F56C
        ld      hl,0
        ld      (ARG),hl        ; ARG = $F56F
        ld      a,3
        ld      (LOGOP),a       ; LOGOP = $F571
        ld      hl,SX
        ld      ix, BLTVV       ; BLTVV = $0191
        call    EXTROM          ; EXTROM = $0015

; Table génération sprites : de $0F000 vers $10800, longueur 2048 octets
; equivalent COPY (0,240)-(255,247) TO (0,264)

        ld      hl,0
        ld      (SX),hl         ; SX = $F562
        ld      hl,240
        ld      (SY),hl         ; SY = $F564
        ld      hl,0
        ld      (DX),hl         ; DX = $F566
        ld      hl,264
        ld      (DY),hl         ; DY = $F568
        ld      hl,256
        ld      (NX),hl         ; NX = $F56A
        ld      hl,8
        ld      (NY),hl         ; NY = $F56C
        ld      hl,0
        ld      (ARG),hl        ; ARG = $F56F
        ld      a,3
        ld      (LOGOP),a       ; LOGOP = $F571
        ld      hl,SX
        ld      ix, BLTVV       ; BLTVV = $0191
        call    EXTROM          ; EXTROM = $0015
        
; Adresse table attributs sprites = $10200 (66048)
; => registre 5 = 0
; => registre 11 = 2

        ld      c,5
        ld      b,0
        call    WRTVDP (0047h)
        ld      c,11
        ld      b,2
        call    WRTVDP (0047h)

; Adresse table génération sprites = $10800 (67584)
; => registre 6 = 33

        ld      c,6
        ld      b,33
        call    WRTVDP (0047h)


Et le code correspondant :

Code :
&h21,&h00,&h00,&h22,&h62,&hF5,&h21,&hF8,&h00,&h22,&h64,&hF5,&h21,&h00,&h00,&h22,&h66,&hF5,&h21,&h00,&h01,&h22,&h68,&hF5,&h21,&h00,&h01,&h22,&h6A,&hF5,&h21,&h02,&h00,&h22,&h6C,&hF5,&h21,&h00,&h00,&h22,&h6F,&hF5,&h3E,&h03,&h32,&h71,&hF5,&h21,&h62,&hF5,&hDD,&h21,&h91,&h01,&hCD,&h15,&h00

&h21,&h00,&h00,&h22,&h62,&hF5,&h21,&hFA,&h00,&h22,&h64,&hF5,&h21,&h00,&h00,&h22,&h66,&hF5,&h21,&h02,&h01,&h22,&h68,&hF5,&h21,&h80,&h00,&h22,&h6A,&hF5,&h21,&h01,&h00,&h22,&h6C,&hF5,&h21,&h00,&h00,&h22,&h6F,&hF5,&h3E,&h03,&h32,&h71,&hF5,&h21,&h62,&hF5,&hDD,&h21,&h91,&h01,&hCD,&h15,&h00

&h21,&h00,&h00,&h22,&h62,&hF5,&h21,&hF0,&h00,&h22,&h64,&hF5,&h21,&h00,&h00,&h22,&h66,&hF5,&h21,&h08,&h01,&h22,&h68,&hF5,&h21,&h00,&h01,&h22,&h6A,&hF5,&h21,&h08,&h00,&h22,&h6C,&hF5,&h21,&h00,&h00,&h22,&h6F,&hF5,&h3E,&h03,&h32,&h71,&hF5,&h21,&h62,&hF5,&hDD,&h21,&h91,&h01,&hCD,&h15,&h00

&h0E,&h05,&h06,&h00,&hCD,&h47,&h00,&h0E,&h0B,&h06,&h02,&hCD,&h47,&h00,&h0E,&h06,&h06,&h21,&hCD,&h47,&h00


Je précise que je n'ai pas vérifié son exécution et que j'ai généré le code à la main ...
Il se peut donc qu'il y ait des erreurs.

EDIT : je ne sais pas comment Nestor gère les zones de langage machine. Il se peut qu'il faille ajouter un "RET" (&hC9) à la fin du code, si la routine est appelée par un "CALL". Edité par Metalion Le 13/01/2016 à 10h37


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)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 13/01/2016 à 16h31
Pour la routine PUTSPRITE, il faudrait que j'en sache plus sur le fonctionnement du Nestor Basic. Car je ne sais pas où il implante les routines assembleurs intégrées, ni quelles sont les zones réservées en RAM. Je me renseigne.


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: 5491

Le 13/01/2016 à 17h19
ok... Merci ! :)


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5491

Le 18/01/2016 à 17h53
@ Metalion
as tu pu voir pour faire la routine pour nestor basic ?


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 19/01/2016 à 08h35
ericb59 :
@ Metalion

as tu pu voir pour faire la routine pour nestor basic ?


Non, pas encore, Eric.

J'ai été un peu optimiste sur le temps que j'avais pour faire ça :oups



Je regarde ça d'ici à la fin de cette semaine.


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: 5491

Le 19/01/2016 à 08h55
ok :)


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 19/01/2016 à 16h19
Bon ben j'ai pas dit mon dernier mot.....lol

Le mode entrelacé:

Est il possible le que ce mode ne permette qu'une seule zone réservée.
Est il possible que cette unique zone soit celle située sur la "seconde" page?

Si c'est le cas, alors on doit pouvoir écrire et lire cette zone "lointaine" en asculant en mode entrelacé un peu comme l'a fait Gdx avec la méthode "un chargement et deux destinations".

Non? Lol


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 19/01/2016 à 16h49
igal :
Bon ben j'ai pas dit mon dernier mot.....lol



Le mode entrelacé:



Est il possible le que ce mode ne permette qu'une seule zone réservée.

Est il possible que cette unique zone soit celle située sur la "seconde" page?


Le mode entrelacé ne fait qu'utiliser 2 pages qui sont 2 pages d'affichage tout ce qu'il y a de plus normal (par exemple la page 0 et la page 1). Mais il ne les utilise que les lignes 0 à 211. Les lignes 212 à 255 ne sont pas affichées, et et à ma connaissance, doivent très certainement contenir les zones de sprites, comme pour un affichage normal. Donc cela ne change rien.



Igal, si tu veux faire du scrolling multi-direction ET déplacer la zone de sprite, le tout en BASIC, il suffirait que tu abandonnes le SCREEN8 pour passer au SCREEN5. Là, tu pourras tout faire, et en BASIC !


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)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 20/01/2016 à 17h02
Ok pour le screen 5.

Vais faire un scroll horizontal multi directionnel auquel devra succéder un scroll vertical multi directionnel :)

Laissons le scroll diagonal pour le moment.


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 22/01/2016 à 13h32
Voilà.

Ca m'a permis de découvrir NestorBasic, que je ne connaissais que vaguement, et franchement, je trouve que c'est un outil extraordinaire pour celui qui ne veut pas se lancer dans l'assembleur mais qui est gèné aux entournures par les limitations du BASIC. Il donne la souplesse et la vitesse de l'assembleur avec peu de difficultés.

Igal, toi qui cherche constamment à faire des choses que le BASIC ne peut pas faire, tu devrais te lancer dans le NestorBasic. Je te le conseille vivement.

J'ai fait deux programmes. Le premier déplace les 3 zones constituantes des sprites (il remplace mon précédent listing en assembleur pur - car c'est carrément plus simple avec le NestorBasic) et le deuxième joue le rôle d'un PUT SPRITE, avec les nouveaux paramètres.

Deux remarques importantes : les programmes n'ont pas été testés complètement, donc il y aura peut-être des problèmes. Et ensuite, j'ai travaillé avec un MSX2 virtuel (sur BlueMSX) pour lequel le premier segment de mémoire (dans le sens donné par le NestorBasic) est le numéro 32 (c'est la variable S que l'on voit au début des programmes). Logiquement, ce numéro de segment peut être donné par la routine numéro 1 du NestorBasic, mais je n'ai pas obtenu de résultats stables, parfois j'obtenai n'importe quoi comme réponse par le retour de la variable P(0). C'est pourquoi j'ai mis 32 en fixe, mais il faut adapter au MSX qui fait tourner le programme.

Déplacement des zones constituantes des sprites
Code :
10 S=32
20 '
30 'Transfert de la table de couleur des sprites
40 'de $0F800 vers $10000, longueur 512 octets
50 '
60 P(0)=S+6
70 P(1)=&HF800-&H4000
80 P(2)=S+3
90 P(3)=0
100 P(4)=512
110 J=USR(23)
120 '
130 'Transfert de la table des attributs des sprites
140 'de $0FA00 vers $10200, longueur 128 octets
150 '
160 P(0)=S+6
170 P(1)=&HFA00-&H4000
180 P(2)=S+3
190 P(3)=&H200
200 P(4)=128
210 J=USR(23)
220 '
230 'Transfert de la table de génération des sprites
240 'de $0F000 vers $10800, longueur 2048 octets
250 '
260 P(0)=S+6
270 P(1)=&HF000-&H4000
280 P(2)=S+3
290 P(3)=&H800
300 P(4)=2048
310 J=USR(23)
320 '
330 'Adresse table attributs sprites = $10200 (66048)
340 '=> registre 5 = 0
350 '=> registre 11 = 2
360 '
362 P(0)=0
364 P(1)=&h47
366 P(3)=5
368 J=USR(58)
370 P(0)=0
380 P(1)=&H47
390 P(3)=2*256+11
400 J=USR(58)
410 '
420 'Adresse table génération sprites = $10800 (67584)
430 '=> registre 6 = 33
440 '
450 P(0)=0
460 P(1)=&H47
470 P(3)=33*256+6
480 J=USR(58)


Equivalent de PUT SPRITE
Code :
10 '
20 ' PUT SPRITE P,(X,Y),C,SP
30 '
40 S=32
50 P(0)=S+3
60 P(1)=&H200+P*4
70 P(2)=Y
80 J=USR(18)
90 P(2)=X
100 J=USR(18)
110 P(2)=SP
120 J=USR(18)
130 P(2)=C
140 J=USR(18)
Edité par Metalion Le 22/01/2016 à 14h48


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: 5491

Le 22/01/2016 à 13h49
Mazette je suis scotché par la petitesse de la routine Put Sprite...
Comme quoi quand on connais bien la bécane on peut faire des truc de ouf !

Je vais essayer ça ce week-end...

Merci Metalion :) :top


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 22/01/2016 à 14h13
Ce n'est qu'une routine qui écrit 4 octets en VRAM, ce n'est pas très compliqué ...

Une précision : le S=32 est valable pour un MSX2 avec 512Kb de RAM (32 x 16 = 512). Il faut donc changer la variable S en fonction de la RAM totale disponible. Le plus simple serait que NestorBasic donne lui même cette valeur : il suffit logiquement de faire J=USR(1):PRINT P(0) mais les résultats sont ... variables.


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)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 22/01/2016 à 14h31
Je viens de vérifier le premier listing, il manque les lignes suivantes :

Code :
362 P(0)=0
364 P(1)=&h47
366 P(3)=5
368 J=USR(58)


:oups

EDIT : c'est corrigé Edité par Metalion Le 22/01/2016 à 14h49


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: 5491

Le 22/01/2016 à 18h19
Metalion :
Ce n'est qu'une routine qui écrit 4 octets en VRAM, ce n'est pas très compliqué ...





Oui bien sur... Mais disons que : parce-que tu programmes en ASM, tu as un autre point de vue sur les choses... Pour toi un sprite c'est 4 octets en VRAM. Pour moi c'est PUT SPRITE, je ne cherche pas à savoir ce qu'il y a derrière... Edité par ericb59 Le 22/01/2016 à 18h20


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