La Place des Développeurs asmsx par un noob#2: Bouger un sprite... et ajout d'une boucle de tempo maison...
Épisode précédent
Vivant! Il est vivant! ...Ou presque!
pour ça j'ai ajouté des variables:1 pour la tempo et 4 par sprite nécessaire (2 pour l'instant)
les valeurs initiales des sprites ntégrées et mise en place d'un crochet vers le programme de tempo pour les interruptions:
Le petit programme d'interruption
intégration des sous-programmes dans la boucle principale:
le sous-programme de gestion du stick:
Intégration des données déplacement suivant position du stick! Facile à modifier pour intégrer les mouvements en diagonale!
Le sous programme de transmission des variables vers attributs des sprites en VRAM
Enfin le sous programme de tempo qui "attend":
voilà, je pense ne pas avoir oublier grand chose... Je vous laisse faire les essais sans la tempo et intégrer le mouvements en diagonale!
Le fichier: tuto_2.zip
Vivant! Il est vivant! ...Ou presque!
Etape1: initialisation
pour ça j'ai ajouté des variables:1 pour la tempo et 4 par sprite nécessaire (2 pour l'instant)
Code ASM :
;---------------------------------------------------------- ; VARIABLES ;---------------------------------------------------------- .page 3 ; ; variables sprites VAR_SPRITES: ds 2*4 ; variable pour la tempo VAR_TEMPO: ds1
les valeurs initiales des sprites ntégrées et mise en place d'un crochet vers le programme de tempo pour les interruptions:
Code ASM :
; initialisation des attributs sprites ld hl,ATT_SPRITES; on prend les paramètres initiaux ld de,SPRATR; à envoyer vers la table des attributs des sprites en VRAM ld bc,2*4; nombre de sprites * nb d'attributs (ça va évoluer) call LDIRVM; la routine de copie en VRAM ld hl,SPRATR; on prend les paramètres de la VRAM ld de,VAR_SPRITES; à envoyer vers les variables des sprites ld bc,2*4; nombre de sprites * nb d'attributs (ça va évoluer) call LDIRMV; la routine de copie de VRAM en RAM ; Installation de la routine d'interruption ld hl,$fd9f; on met le crochet "d'interruption"(H.TIMI) dans hl ld bc,INTERRUPTION; On met l'adresse de notreinterruption dans bc ld [hl],$c3; on remplace la première instruction par jump inc hl;puis ensuite ld [hl],c;l'adresse inc hl;de notre ld [hl],b ;interruption. xora;mise à 0 ld[VAR_TEMPO],a; de la variable de la tempo
Le petit programme d'interruption
Code ASM :
;---------------------------------------------------------- INTERRUPTION:;- on incrémente automatiquement et régulièrement ;---------------------------------------------------------- ; push af;on push bc;sauve push de;tout push hl;! ldhl,VAR_TEMPO; la variable de tempo inc[hl]; est incrémentée pop hl;on pop de;récupère pop bc;tout pop af;! ret
Etape2: les sous-programmes de la boucle principale
intégration des sous-programmes dans la boucle principale:
Code ASM :
;-----------------------------------------------! ;! ;! ;! ; BOUCLE PRINCIPALE! ;! ;! ;! LOOP: call GST_DEP_Heros call GST_SPRITES callGST_TEMPO; Gestion timing jpLOOP ;-----------------------------------------------!
le sous-programme de gestion du stick:
Code ASM :
;---------------------------------------------------------- GST_DEP_Heros:;---- Gestion mouvement ----- ;---------------------------------------------------------- ; xor a; A=0 (test clavier) call GTSTCK; A= direction flèches clavier cp 0; Si A=0 jr nz,@@GST_MOVE; si non (a<>0) saut à la boucle inc a; si oui A=A+1 (A=1) call GTSTCK; A= direction manette 1 ; ;Gestion mouvement @@GST_MOVE: push af; sauve A (valeur joystick) ; Déplacement horizontaux ldhl,VAL_DEP_X; HL = adr. déplacement X ldb,0; mise dans BC de A ldc,a; " addhl,bc; HL = On met HL à l'adresse correspondant à adresse de déplacement en X + position manette. lda,[hl]; a = val. déplacement X ldb,a; B = val. déplacement X lda,[VAR_SPRITES+1] ; a=X avant déplacement addb; a=a+val. déplacement X cp 6; si X=X mini -2 (< à X mini) jr nz,@@X_MAX; si non saut à X_MAX lda,8; si oui X=X mini jp@@X_MAJ; et saut à MAJ de X @@X_MAX: cp 234; si X=X maxi +2 (> à X maxi) jr nz,@@X_MAJ; si non saut à MAJ de X lda,232; si oui X=X maxi @@X_MAJ: ld [VAR_SPRITES+(0*4)+1],a; X 1er sprite heros (plan0) ld [VAR_SPRITES+(1*4)+1],a ; X 2nd sprite heros(plan1) ; Déplacement verticaux pop af; recup de A (valeur joystick) ldhl,VAL_DEP_Y; HL = adr. déplacement Y ldb,0; mise dans BC de A ldc,a; " addhl,bc; HL = On met HL à l'adresse correspondant à adresse de déplacement en Y + position manette. lda,[hl]; A = val. déplacement Y ldb,a; B = val. déplacement Y ld a,[VAR_SPRITES]; A=Y avant déplacement addb; A=a+val. déplacement Y cp 6; si Y=Y mini -2 (< à Y mini) jr nz,@@Y_MAX; si non saut à Y_MAX lda,8; si oui Y=Y mini jp@@Y_MAJ; et saut à MAJ de Y @@Y_MAX: cp 172; si Y=Y maxi +2 (> à Y maxi) jr nz,@@Y_MAJ; si non saut à MAJ de Y lda,170; si oui Y=Y maxi @@Y_MAJ: ld [VAR_SPRITES+(0*4)],a; Y 1er sprite heros (plan0) ld [VAR_SPRITES+(1*4)],a ; Y 2nd sprite heros(plan1) ret; Retour à la boucle principale
Intégration des données déplacement suivant position du stick! Facile à modifier pour intégrer les mouvements en diagonale!
Code ASM :
; Test déplacement VAL_DEP_X: ;------ 0,1,2,3,4,5,6, 7,8 db 0,0,0,2,0,0,0,-2,0 VAL_DEP_Y: ;------ 0, 1,2,3,4,5,6,7,8 db 0,-2,0,0,0,2,0,0,0
Le sous programme de transmission des variables vers attributs des sprites en VRAM
Code ASM :
;------------------------------------------------------ GST_SPRITES:;- envoi variables vers sprites ;------------------------------------------------------ ; ld hl,VAR_SPRITES; on prend les variables des sprites ld de,SPRATR; à envoyer vers les attributs de sprites en VRAM ld bc,2*4; nombre de sprites * nb d'attributs (ça va évoluer) call LDIRVM; c'est parti! ret
Enfin le sous programme de tempo qui "attend":
Code ASM :
;---------------------------------------------------------- GST_TEMPO: ;---------------------------------------------------------- ; lda,[VAR_TEMPO];on récupère ce qui reste dans tempo ldb,a; lda,50; subb;on lui soustrait 50 ldb,a; xora; ld[VAR_TEMPO],a;remise à zéro de la variable @@time:; pushbc; ldb,30;on @@time2:;marque nop;une djnz@@time2;pause popbc;jusqu'à djnz@@time;0 ret;
voilà, je pense ne pas avoir oublier grand chose... Je vous laisse faire les essais sans la tempo et intégrer le mouvements en diagonale!
Le fichier: tuto_2.zip
Le MSXien le plus à l'ouest ... ou presque
Bravo pour tous les commentaires dans ton code
Une première remarque : la série de push/pop dans ta routine de gestion de l'interruption est inutile, car le BIOS le fait déjà avant d'appeler le hook. Tu peux donc gagner du temps en les supprimant.
Une première remarque : la série de push/pop dans ta routine de gestion de l'interruption est inutile, car le BIOS le fait déjà avant d'appeler le hook. Tu peux donc gagner du temps en les supprimant.
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)
OK, donc ça devient:
Je n'ai pas vérifié si on était sous les 5 octets!
Code ASM :
;---------------------------------------------------------- INTERRUPTION:;- on incrémente automatiquement et régulièrement ;---------------------------------------------------------- ldhl,VAR_TEMPO; la variable de tempo inc[hl]; est incrémentée ret
Je n'ai pas vérifié si on était sous les 5 octets!
Le MSXien le plus à l'ouest ... ou presque
J'en déduit de ta remarque que tu mets la routine de gestion de l'interruption VBLANK directement dans l'espace réservé du hook.
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs.
Ce qu'il est conseillé de faire, c'est de :
1. copier les 5 octets du hook à un endroit de la RAM, identifiés par une étiquette (par exemple 'OLD_HOOK').
2. mettre dans le hook un simple 'JP' vers ta propre routine de gestion
3. terminer ta propre routine de gestion par un 'JP OLD_HOOK'
De cette manière, tu gères ton interruption, et puis tu laisses la main à une éventuelle routine déjà implantée.
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs.
Ce qu'il est conseillé de faire, c'est de :
1. copier les 5 octets du hook à un endroit de la RAM, identifiés par une étiquette (par exemple 'OLD_HOOK').
2. mettre dans le hook un simple 'JP' vers ta propre routine de gestion
3. terminer ta propre routine de gestion par un 'JP OLD_HOOK'
De cette manière, tu gères ton interruption, et puis tu laisses la main à une éventuelle routine déjà implantée.
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)
SveN
Membre non connecté
Villageois
Merci à vous ! J'adore ce type de topic !
En essayant d'appliquer ce "tuto", je suis tombé sur ce post : http://karoshi.auic.es/index.php/topic,1858.0.html
C'est certes en espagnol mais on y apprend, screenshots à l'appui, comment configurer (sous windows) certains outils utiles au développement avec asMSX.
J'en profite pour saluer le travail de Granced au sujet de la traduction française de la documentation d'asMSX ( http://www.msxvillage.fr/download/download.php?id=4 ).
(NB : je me demande par ailleurs quels étaient les outils employés par les développeurs à l'aube du MSX1/2 ?)
En essayant d'appliquer ce "tuto", je suis tombé sur ce post : http://karoshi.auic.es/index.php/topic,1858.0.html
C'est certes en espagnol mais on y apprend, screenshots à l'appui, comment configurer (sous windows) certains outils utiles au développement avec asMSX.
J'en profite pour saluer le travail de Granced au sujet de la traduction française de la documentation d'asMSX ( http://www.msxvillage.fr/download/download.php?id=4 ).
(NB : je me demande par ailleurs quels étaient les outils employés par les développeurs à l'aube du MSX1/2 ?)
MSXosaure :
J'imagine que ça avoir rapport avec la taille des hooks, mais n'ai pas compris.OK, donc ça devient:
Je n'ai pas vérifié si on était sous les 5 octets!
Code ASM :
;---------------------------------------------------------- INTERRUPTION: ;- on incrémente automatiquement et régulièrement ;---------------------------------------------------------- ld hl,VAR_TEMPO ; la variable de tempo inc [hl] ; est incrémentée ret
Je n'ai pas vérifié si on était sous les 5 octets!
Metalion @ MSXosaure :
Un exemple ?... J'en déduit de ta remarque que tu mets la routine de gestion de l'interruption VBLANK directement dans l'espace réservé du hook.
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs...
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs...
Philips.NMS.8245/50/80, Sony.F1XV/HBF-700D, Pana.FSA1FX/A1WX(x2)/A1GT, OCM, GR8BIT.... et ...
Metalion :
J'en déduit de ta remarque que tu mets la routine de gestion de l'interruption VBLANK directement dans l'espace réservé du hook.
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs.
Ce qu'il est conseillé de faire, c'est de :
1. copier les 5 octets du hook à un endroit de la RAM, identifiés par une étiquette (par exemple 'OLD_HOOK').
2. mettre dans le hook un simple 'JP' vers ta propre routine de gestion
3. terminer ta propre routine de gestion par un 'JP OLD_HOOK'
De cette manière, tu gères ton interruption, et puis tu laisses la main à une éventuelle routine déjà implantée.
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs.
Ce qu'il est conseillé de faire, c'est de :
1. copier les 5 octets du hook à un endroit de la RAM, identifiés par une étiquette (par exemple 'OLD_HOOK').
2. mettre dans le hook un simple 'JP' vers ta propre routine de gestion
3. terminer ta propre routine de gestion par un 'JP OLD_HOOK'
De cette manière, tu gères ton interruption, et puis tu laisses la main à une éventuelle routine déjà implantée.
Pour le 1 OK j'ai compris. cékoi la routine pour copier un bloc de ROM en RAM
Pour le 2 j'ai bon (on saute vers "INTERRUPTION")
Pour le 3... Bah tant que j'ai pas fait le 1
SveN :
J'imagine que ça avoir rapport avec la taille des hooks, mais n'ai pas compris.
Oui c'est 5 RET dans le Hook par défaut... Mais faut y mettre juste le jump qu'il a dit Metalion
Le MSXien le plus à l'ouest ... ou presque
SveN :
NB : je me demande par ailleurs quels étaient les outils employés par les développeurs à l'aube du MSX1/2 ?
Oui, je me pose cette question aussi. En fait je me pose surtout la question de leur méthode de travail. Car avec un cross assembler et un émulateur (qui n'existaient pas à l'époque) c'est très facile de faire des modifications et de les vérifier en quelques secondes. Mais à l'époque c'était très différent ...
Tout ce qu'on sait (grâce à l'interview d'un développeur), c'est que KONAMI utilisait des HP 64000 pour l'émulation hardware du Z80. C'était des grosses machines qui émulaient des processeurs en fonction des cartes électroniques qu'on leur branchait. Mais il restait tout le reste : développement graphiques et sonore ... Bref, qu'ils réussissaient à développer un jeu en une dizaine de mois semble maintenant un véritable exploit.
SveN :
J'imagine que ça avoir rapport avec la taille des hooks, mais n'ai pas compris.
Oui, les hooks font 5 octets.
Ici, MSXosaure veut implanter sa routine dans l'espace de ces 5 octets (d'où sa question).
SveN :
Metalion @ MSXosaure :
Un exemple ?... J'en déduit de ta remarque que tu mets la routine de gestion de l'interruption VBLANK directement dans l'espace réservé du hook.
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs...
Ce n'est pas une bonne pratique, car il existe d'autres cas de déroutage de ce hook, mis en place par le BIOS ou les SUBROMs...
Démarre BlueMSX avec un MSX2 'full options'.
Ouvre la fenêtre du débogueur et place toi sur le hook en FD9Fh.Le code qui s'y trouve est :
Code :
rst 0030h
87h
00h
79h
ret
c'est un appel inter-slot à l'adresse 0079h (probablement dans la Disk ROM).
MSXosaure :
Pour le 1 OK j'ai compris. cékoi la routine pour copier un bloc de ROM en RAM
Moi je fais comme ça (VBLANK étant le nom de ma routine de gestion d'interruption, et VBLANK_OLD un espace libre de 5 octets en RAM) :
Code :
Edité par
Metalion
Le 16/10/2014 à 16h51
; Sauvegarde du hook original H.TIMI
ld hl,HTIMI
ld de,VBLANK_OLD
ld bc,5
ldir
; Mise en place de la dérivation de l'interruption VBLANK
di
ld hl,VBLANK
ld [HTIMI+1],hl
ld a,0C3h ; opcode "JP"
ld [HTIMI],a
ei
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 :
Tout ce qu'on sait (grâce à l'interview d'un développeur), c'est que KONAMI utilisait des HP 64000 pour l'émulation hardware du Z80. C'était des grosses machines qui émulaient des processeurs en fonction des cartes électroniques qu'on leur branchait. Mais il restait tout le reste : développement graphiques et sonore ... Bref, qu'ils réussissaient à développer un jeu en une dizaine de mois semble maintenant un véritable exploit.
Tout ce qu'on sait (grâce à l'interview d'un développeur), c'est que KONAMI utilisait des HP 64000 pour l'émulation hardware du Z80. C'était des grosses machines qui émulaient des processeurs en fonction des cartes électroniques qu'on leur branchait. Mais il restait tout le reste : développement graphiques et sonore ... Bref, qu'ils réussissaient à développer un jeu en une dizaine de mois semble maintenant un véritable exploit.
Pour Titeuf sur Gameboy color, on l'a fait en 3 mois et 15 jours entre l'ecriture du game design et l'aproval de Nintendo.
Edité par z80 Le 16/10/2014 à 20h50
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Metalion :
[
Moi je fais comme ça (VBLANK étant le nom de ma routine de gestion d'interruption, et VBLANK_OLD un espace libre de 5 octets en RAM) :
Moi je fais comme ça (VBLANK étant le nom de ma routine de gestion d'interruption, et VBLANK_OLD un espace libre de 5 octets en RAM) :
Code :
; Sauvegarde du hook original H.TIMI
ld hl,HTIMI
ld de,VBLANK_OLD
ld bc,5
ldir
; Mise en place de la dérivation de l'interruption VBLANK
di
ld hl,VBLANK
ld [HTIMI+1],hl
ld a,0C3h ; opcode "JP"
ld [HTIMI],a
ei
Ok ldir, il aurait vraiment fallu que je relise mes classique sur l'asm MSX avant d'attaquer ces posts
J'ai la dernière version de ASMSX mais elle ne reconnait "HTIMI"
Le MSXien le plus à l'ouest ... ou presque
Alors pour finir sur la tempo qui aurait mérité un post à part . Je vais aussi un peu mieux structuré mes posts pour que ce soit un peu plus clair.
Sur la base de ce qu'a conseillé Metalion
Il y a juste à réserver un emplacement d'un octet pour la variable de tempo(VAR_TEMPO) et un de 5 octet pour y insérer la gestion d'interrution originale (INTERUP_OLD).
On commence par sauvegader le hook original dans l'endroit qu'on lui a prévu(INTERUP_OLD).
On le remplace par un saut vers celui de la tempo qu'on va créé (INTERUP).
INTERUP: qui est appelé automatiquement et qui se contente d'incrémenter le compteur tempo à intervale régulier avant de repasser par la gestion d'interrution originale.
GST_TEMPO: appelé dans la boucle, on retient ce qu'il reste au compteur et on patiente le temps nécessaire pour avoir une vitesse plus ou moins régulière.
Mise en place d'une tempo
Sur la base de ce qu'a conseillé Metalion
données et variables à mettre en place
Il y a juste à réserver un emplacement d'un octet pour la variable de tempo(VAR_TEMPO) et un de 5 octet pour y insérer la gestion d'interrution originale (INTERUP_OLD).
Code ASM :
; ;---------------------------------------------------------- ; VARIABLES ;---------------------------------------------------------- .page 3 ; (...) ; variable pour la tempo VAR_TEMPO: ds1 ;hook original H.TIMI INTERUP_OLD: ds5
initialisation
On commence par sauvegader le hook original dans l'endroit qu'on lui a prévu(INTERUP_OLD).
On le remplace par un saut vers celui de la tempo qu'on va créé (INTERUP).
Code ASP :
; Sauvegarde du hook original H.TIMI ld hl,$fd9f; ou HTIMI pour les intimes ld de,INTERUP_OLD ld bc,5 ldir ; Mise en place de la dérivation de l'interruption INTERUP di ld hl,INTERUP ld [$fd9f+1],hl; ou HTIMI+1 pour les intimes on y dépose l'adresse du saut ld a,0C3h ; opcode "JP" ld [$fd9f],a; ou HTIMI pour les intimes on y dépose le "jump" ei
Les sous programme
INTERUP: qui est appelé automatiquement et qui se contente d'incrémenter le compteur tempo à intervale régulier avant de repasser par la gestion d'interrution originale.
Code ASM :
;---------------------------------------------------------- INTERUP:;- on incrémente automatiquement et régulièrement ;---------------------------------------------------------- ; ldhl,VAR_TEMPO; la variable de tempo inc[hl]; est incrémentée jpINTERUP_OLD
GST_TEMPO: appelé dans la boucle, on retient ce qu'il reste au compteur et on patiente le temps nécessaire pour avoir une vitesse plus ou moins régulière.
Code ASM :
;---------------------------------------------------------- GST_TEMPO: ;---------------------------------------------------------- ; lda,[VAR_TEMPO];on récupère ce qui reste dans tempo ldb,a; lda,50; subb;on lui soustrait 50 ldb,a; xora; ld[VAR_TEMPO],a;remise à zéro de la variable @@time:; pushbc; ldb,50;on @@time2:;marque nop;une djnz@@time2;pause popbc;jusqu'à djnz@@time;0 ret
Le MSXien le plus à l'ouest ... ou presque
Est-ce qu'un ou plusieurs nop ne seraient pas plus faciles pour régler la temporisation ?
Je crois me souvenir que c'est ce que j'avais fait dans mon propre programme de déplacement de sprite : http://www.msxvillage.fr/forum/topic.php?id=184#m2505
Je crois me souvenir que c'est ce que j'avais fait dans mon propre programme de déplacement de sprite : http://www.msxvillage.fr/forum/topic.php?id=184#m2505
MSX un jour, MSX toujours !
granced :
Est-ce qu'un ou plusieurs nop ne seraient pas plus faciles pour régler la temporisation ?
Je crois me souvenir que c'est ce que j'avais fait dans mon propre programme de déplacement de sprite : http://www.msxvillage.fr/forum/topic.php?id=184#m2505
Je crois me souvenir que c'est ce que j'avais fait dans mon propre programme de déplacement de sprite : http://www.msxvillage.fr/forum/topic.php?id=184#m2505
Merci de me rappeler ce post, il pourra me servir à l'occasion . En fait ce que je tente de faire avec ce hook, c'est régler le nombre de nop suivant la "vitesse" de la boucle.
Le MSXien le plus à l'ouest ... ou presque
J'avoue ne pas bien comprendre ce que tu fais dans la routine GST_TEMPO, MSXosaure
L'incrémentation d'un compteur à chaque interruption est un bonne solution (et à vrai dire elle existe déjà dans le BIOS, voir la variable 'JIFFY'), mais moi je l'utilise comme un métronome. Je crée une routine qui attend que le compteur change de valeur pour rendre la main, et j'appelle cette routine dans le programme principal pour attendre le 'coup' de métronome. Cela permet de rhytmer les animations à coup de 50e de seconde (ou frames) et d'être sur d'avoir un mouvement régulier. Je vous posterai la structure demain matin.
PS : pour le HTIMI je pense que c'est normal. De mémoire, asMSX reconnait automatiquement les noms des routines BIOS, mais pas les noms des variables ou des hooks.
L'incrémentation d'un compteur à chaque interruption est un bonne solution (et à vrai dire elle existe déjà dans le BIOS, voir la variable 'JIFFY'), mais moi je l'utilise comme un métronome. Je crée une routine qui attend que le compteur change de valeur pour rendre la main, et j'appelle cette routine dans le programme principal pour attendre le 'coup' de métronome. Cela permet de rhytmer les animations à coup de 50e de seconde (ou frames) et d'être sur d'avoir un mouvement régulier. Je vous posterai la structure demain matin.
PS : pour le HTIMI je pense que c'est normal. De mémoire, asMSX reconnait automatiquement les noms des routines BIOS, mais pas les noms des variables ou des hooks.
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)
granced :
Est-ce qu'un ou plusieurs nop ne seraient pas plus faciles pour régler la temporisation ?
Je crois me souvenir que c'est ce que j'avais fait dans mon propre programme de déplacement de sprite : http://www.msxvillage.fr/forum/topic.php?id=184#m2505
Je crois me souvenir que c'est ce que j'avais fait dans mon propre programme de déplacement de sprite : http://www.msxvillage.fr/forum/topic.php?id=184#m2505
Mauvaise idée, trop dépendant de la vitesse du CPU.
Il y a des moyens plus fin pour gérer la vitesse de déplacement. Utilisez les nombres à virgules fixe.
Je suis sur mon téléphone, mais à l'occasion je peux poster une explication quand je serais devant mon PC.
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie