afficher des sprites en assembleur sur msx resolut

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

afficher des sprites en assembleur sur msx resolut

Message par rendomizer »

Dernière modification par rendomizer le 05 janv. 2020 10:16, modifié 9 fois.
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: utiliser le vdp du msx 1 en assembler résolut

Message par rendomizer »

voir suite
Dernière modification par rendomizer le 10 nov. 2018 13:35, modifié 1 fois.
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: utiliser le vdp du msx 1 en assembler résolut

Message par rendomizer »

voir la suite
Dernière modification par rendomizer le 10 nov. 2018 13:34, modifié 1 fois.
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: utiliser le vdp du msx 1 en assembleur résolut

Message par rendomizer »

resolut
Dernière modification par rendomizer le 10 nov. 2018 13:35, modifié 1 fois.
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: affichage de 3 sprites en assembleur resolut !!!!

Message par 6502man »

Je vois que tu utilises les appels à la ROM BIOS ;)
Tu sais que tu peux accéder aussi directement au VDP par les PORTS du Z80 IN(&xx) et OUT(&xx).

Sinon pour définir plusieurs sprites tu peux passer par une table et la lire dans une boucle ça allégera le code.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: affichage de 3 sprites en assembleur resolut !!!!

Message par rendomizer »

mais comment on fait ça ?
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: affichage de 3 sprites en assembleur resolut !!!!

Message par 6502man »

Pour la boucle tu utilises un pointeur sur la table avec un des registres 16 bits (DE,HL,IX,..) soit tu utilises OUTI avec les ports du VDP.

Code : Tout sélectionner

  LD HL,Table
  LD B,$03 * {nombre de donnèes par sprite}
Boucle
  LD A,(HL)
  INC HL
  OUT (VDP_data),A
  DJNZ Boucle
  
  Suite du programme ....

Table
  DB 01,02,03,04,...

Code : Tout sélectionner

  LD HL,table
  LD B,$03 * {nombre de donnèes par sprite}
  LD C,VDP_data
  OUTI
Code vite fait pour exemple ;)
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: affichage de 3 sprites en assembleur resolut !!!!

Message par rendomizer »

C'est du jedi pour moi phil !
Je ne suis qu'un utilisateur pas un pro
romu
Messages : 82
Inscription : 29 oct. 2018 19:13

Re: affichage de 3 sprites en assembleur resolut !!!!

Message par romu »

Bah dans ce cas tu as encore du boulot niveau "theorie" sinon cela va être compliqué ;)
Va te chercherde l'info sur google ya du blog ou autres bien foutu qui explique les trucs de base tout simples (yen a même un qui fait spectrum/cpc/msx en même temps mais cela doit exister en msx pur).

Parce que là le code de 6502_man n'était pas trop violent et commenté ;)

LD HL,Table => on assigne la table au registre HL
LD B,$03 * {nombre de données par sprite} => tu mets en place le compteur qui te servira à aller piocher l'élément de ta table que tu veux charger, si tu as 12 ou 24bytes qui definissent tes sprites alors tu remplace 03 par la valeur qui va bien. 3 sprites fois ta quantité de données (3×1 ou 3×4 ou 3×8 etc).

Boucle => plutot que de faire 3, 12 ou 24 fois la même manip tu fais une boucle (après selon les compilo pour optimiser il faut parfois deplier la boucle mais tu n'en es pas encore là)
LD A,(HL) => on charge le contenu de HL dans A (le 1er élément de la table passe dans A)
INC HL => on incremente HL (on déplace le pointeur dans la table et il pointera desormais le 2e élément)
OUT (VDP_data),A => on demande à ce que le contenu de A (donc si tu as suvi le 1er élément de la table) soit transféré vers le VDP
DJNZ Boucle => instruction sympa elle diminue B (passe donc de 3 à 2 si tu as gardé 3 en haut, 24 a 23 ou selon) puis condition si B=0 alors on continue le programme normalement avec "suite du programme", si B est différent de 0 alors on retourne en haut de boucle et on va donc a nouveau charger A avec désormais le 2e element pointé par HL puis on augmentera HL afin de preparer le pointage pour la boucle suivante puis on balance au VDP et on diminue B puis resteste etc jusqu'au moment ou B=0 on sort de la boucle toutes es données sprite sont balancées ya plus qu'a continuer avec ce que tu veux ensuite en faire.
(Pour les puristes saut relatif donc 128bytes pas plus)

Suite du programme .... => ce que tu fera de tes sprites et du programme etc.

Table
DB 01,02,03,04,... => ce qui defini tes sprites attention a l'ordre des bytes selon les machines (connais pas le msx). L'ideal etant d'avoir (cela doit exister vu la communauté msx du programme qui te decoupe ton sprite en tableau de données qui va bien), un peu comme pour les map etc.

Quand tu vas t'amuser à modifier tes sprites tu peux aussi passer par une variable pour definir le nombre de données de ton tableau (3, 12 ou 24 dans mon exemple) ainsi au lieu d'aller chercher a chaque fois ton code pour modifier ce que tu colles dans B tu fera a la place :
ld B,size_spr1 (par exemple hein) après avoir defini size_spr1 au debut de ton code dans ra liste de variables.
Ainsi si tu modifie la taille pour tes essais tu n'auea qu'a modifier la variable au debut de ton code qui correpondra à la longueur de ta table de données que tu modifieea en conséquence.
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: affichage de 3 sprites en assembleur resolut !!!!

Message par rendomizer »

merci beaucoup mon pote
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: afficher des sprites en assembleur sur msx en assembleur resolut

Message par rendomizer »

Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: afficher des sprites en assembleur sur msx en assembleur resolut

Message par 6502man »

Ca ne fonctionne pas sauf à modifier légèrement le Basic :roll:

Maintenant il te reste plus qu'a synchroniser l'affichage avec l'int du VDP seul moyen dispo sur MSX1 :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: afficher des sprites en assembleur sur msx en assembleur resolut

Message par rendomizer »

ça sert a quoi de synchroniser le int du vdp phil ???
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: afficher des sprites en assembleur sur msx en assembleur resolut

Message par hlide »

rendomizer a écrit : 12 févr. 2019 06:44 ça sert a quoi de synchroniser le int du vdp phil ???
Imagine que tu as en face de toi un gars qui débite à tout va ses phrases et qui ne prend pas en compte le fait que tu lui signifies s'il peut continuer ou temporiser pour que tu ais le temps de saisir la signification de ses phrases. En l’occurrence ici, le gars c'est ton code et l'interlocuteur le VDP qui peine à le suivre dans son excitation. :mrgreen:
Répondre