La Place des Développeurs Mes 1ers pas sur MSX ...
Reprise du message précédent
No problemo Aoineko, je te tiens au jus
Salut les potos,
Y-a-t-il un moyen visuel pour voir le temps machine que prend routine ? (sur amiga, on mettait un trait au copper d'une couleur avant la routine et après celle-ci, on remettait la couleur de fond. On avait donc une barre de couleur plus ou moins épaisse qui symbolisait le temps machine que prenait cette routine). Tout ça pour vous demander si
ld hl,vram+coordX+coordY*32
ld a,code du tile à afficher
call WRTVRM
est moins rapide que
ld hl,vram+coordX+coordY*32
ld a,code du tile à afficher
PUSH AF
DI
LD A,L
OUT (#0x99),A
LD A,H
AND #0x3F
OR #0x40
OUT (#0x99),A
EI
POP AF
OUT (#0x98),A
en relisant, je pense meme faire ça
ld hl,vram+coordX+coordY*32
DI
LD A,L
OUT (#0x99),A
LD A,H
AND #0x3F
OR #0x40
OUT (#0x99),A
EI
ld a,code du tile à afficher
OUT (#0x98),A
je sais que je gagne quelques octets en saut et retour mais c'est négligeable ou c mieux ?
Merci

ps : pour info, depuis hier, j'ai ajouté la gestion des couleurs du cadre en fonction du niveau de difficulté et, en mode story après l'affichage caractère / caractère, j'efface ligne / ligne comme sur coleco

Edité par Ricco59 Le 27/02/2021 à 21h26

Ricco59 :
Y-a-t-il un moyen visuel pour voir le temps machine que prend routine ? (sur amiga, on mettait un trait au copper d'une couleur avant la routine et après celle-ci, on remettait la couleur de fond. On avait donc une barre de couleur plus ou moins épaisse qui symbolisait le temps machine que prenait cette routine).
On fait pareil sur MSX en changeant la couleur de fond/bordure (valeur du registre #7 du VDP).
Ricco59 :
Tout ça pour vous demander si [...] est moins rapide que [...]
J'utilise pas du tout les commandes du Bios donc je saurais pas te dire à quel point elles sont lentes (j'ai tendance à tout refaire moi-même pour être sur que c'est optimal par rapport à mes besoins).
Tu es en Screen mode 2, c'est ça ?
Si c'est bien le cas, il faut faire attention à ce qu'il y ait bien au moins 29 cycles CPU entre 2 écritures vers le VDP.
Ce qui est bien le cas actuellement entre tes 2 out

Par contre, tes DI/EI sont pas bien placé :
Code ASM :
LD HL,vram+coordX+coordY*32 LD A,L DI ; Mettre le DI juste avant le premier OUT à protéger OUT (#0x99),A LD A,H AND #0x3F OR #0x40 OUT (#0x99),A LD A,code_du_tile_à_afficher EI ; Mettre le EI juste avant le dernier OUT à protéger OUT (#0x98),A
Ricco59 :
je sais que je gagne quelques octets en saut et retour mais c'est négligeable ou c mieux ?
Tu gagnes qq octets... et aussi 23 cycles CPU. C'est rarement négligeable sur un Z80.

On est toujours ignorant avant de savoir.
Bondiou, j'ai encore bcp à apprendre
par contre j'ai cru lire que les outi sont à proscrire pour une meilleure compatibilité ? legende urbaine ou non ?
Tchao amigo
par contre j'ai cru lire que les outi sont à proscrire pour une meilleure compatibilité ? legende urbaine ou non ?
Tchao amigo


Ricco59 :
par contre j'ai cru lire que les outi sont à proscrire pour une meilleure compatibilité ? legende urbaine ou non ?
L'instruction OUTI prends 18 cycles pour le CPU.
Donc si tu enchaines des OUTI, le VDP va recevoir des données tous les 18 cycles (CPU) alors que dans certains modes, le VDP est incapable de traiter les données aussi vite.
En Screen mode 2 et 3, il ne faut pas envoyer de donnée avec moins de 29 cycles d'intervalle sur MSX1.
Donc oui, dans ce cas, le OUTI est trop rapide.
Par contre, pour les Screen mode 0 ou 3, la limite est de 12 et 13 cycles respectivement donc aucun soucis à utiliser les OUTI.
A noter que pendant le V-Blank, il n'y a plus de limite d'accès au VDP (le VDP va beaucoup plus vite que le CPU).
Donc si tu es sûr à 100% qu'un code s'exécute pendant le V-Blank, tu peux y utiliser les OUTI sans soucis, même avec les Screen mode 2 et 3.
On est toujours ignorant avant de savoir.
Donc si tu es sûr à 100% qu'un code s'exécute pendant le V-Blank, tu peux y utiliser les OUTI sans soucis, même avec les Screen mode 2 et 3
Je ne suis sûr de rien, je débute

Merci

Ricco59 :
Je ne suis sûr de rien, je débute
Donc si tu es sûr à 100% qu'un code s'exécute pendant le V-Blank, tu peux y utiliser les OUTI sans soucis, même avec les Screen mode 2 et 3
Je ne suis sûr de rien, je débute

Si tu as un code de synchronisation avec le V-Blank (genre une fonction WaitVBlank() qui attend l'interruption du VPD) tu peux normalement être sûr que le code qui suit se déroule pendant le V-Blank.
Pour vérifier tu peux utiliser l'astuce du changement de couleur de bordure.
Mais bon, si tu as pas besoin de 100% de la puissance du VDP, le plus simple est de s'aligner sur le pire cas (worst-case) et donc ne jamais envoyer de donnée au VDP avec un intervalle inférieur à 29 cycles.
C'est ce que je fais dans la version MSX1 de ma lib.
En tout cas, bravo pour tout ce que tu as accompli jusqu'ici.

On est toujours ignorant avant de savoir.
Code ASM :
LD HL,vram+coordX+coordY*32 LD A,L DI OUT (#0x99),A LD A,H AND #0x3F OR #0x40 OUT (#0x99),A LD A,code_du_tile_à_afficher EI OUT (#0x98),A
Petite optimisation : si on est sûr de son calcul d'adresse VRAM, le 'AND #0x3F' n'est pas vraiment nécessaire, puisque par construction, l'adresse sera toujours inférieure à 16384.
Autre chose : le placement de 'EI' avant la dernière instruction à protéger est une optimisation, pas une obligation. Théoriquement, on devrait bien la placer après la dernière instruction à protéger, mais il se fait que le Z80 a un délai d'une instruction dans son exécution. Edité par Metalion Le 28/02/2021 à 10h34
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)
@ Goonies > pour moi aussi les out et in sont de l'hebreu 
@ Metallion, Aoineko > Merci pour vos conseils qui restent encore trop pointus pour ma pomme
J'etudierai plus en détail un peu plus tard, qd j'aurais plus de bouteille héhéhé
@ Gfx > Merci
J'ai corrigé pas mal de choses hier.
Une fois terminé, je m'attaque au portage de DoTheSame que j'ai fait sur Colecovision. Celui-ci est presque terminé. La video > DoTheSame
Bon dimanche les zamis
Eric Edité par Ricco59 Le 28/02/2021 à 18h05

@ Metallion, Aoineko > Merci pour vos conseils qui restent encore trop pointus pour ma pomme

@ Gfx > Merci
J'ai corrigé pas mal de choses hier.
Une fois terminé, je m'attaque au portage de DoTheSame que j'ai fait sur Colecovision. Celui-ci est presque terminé. La video > DoTheSame
Bon dimanche les zamis
Eric Edité par Ricco59 Le 28/02/2021 à 18h05
Salut les zamis
J'ai enfin réussi à intégrer le mode Story (une boucle for~next qui marchait sur coleco et qui faisait planter le bouzin sur msx)
Encore kek petits reglages et ça devrait être tout bon pour un test sur mon 8245 avec la belle carte de Fabf, mon hb501f est out snifff (pour le moment)
tchao Edité par Ricco59 Le 01/03/2021 à 23h47
J'ai enfin réussi à intégrer le mode Story (une boucle for~next qui marchait sur coleco et qui faisait planter le bouzin sur msx)
Encore kek petits reglages et ça devrait être tout bon pour un test sur mon 8245 avec la belle carte de Fabf, mon hb501f est out snifff (pour le moment)
tchao Edité par Ricco59 Le 01/03/2021 à 23h47
oui, mais je pense qu'on est tous comme ça : "ca ne sera jamais fini" 
J'attaque ensuite le port de DoTheSame
Bonne journée à tous

J'attaque ensuite le port de DoTheSame

Bonne journée à tous

Salut les zamis,
j'en ai fini avec le mode story
me reste encore des choses à faire et des bugs à supprimer
je fais une chtite video bientôt
Tchao les potos
j'en ai fini avec le mode story
me reste encore des choses à faire et des bugs à supprimer

je fais une chtite video bientôt
Tchao les potos
C'est good, la WIP04 - Entering STORY MODE est en ligne, et c'est ici > Ze Video
Guillaume, je t'ai MP
A+
Guillaume, je t'ai MP
A+

Salut les zamis,
J'ai une question :
est-il possible d'utiliser à la fois le stick et le clavier ?
Je m'explique : pour wii? je souhaite jouer
- avec 1 stick 2 boutons (fire1 = action, fire2 = pause..... ca, ca marche, c'est implémenté)
- avec 1 stick 1 bouton (Fire1 = action, ESC = pause...... aïe, j'y reviens plus bas)
- avec le clavier (directions + ESPACE= action et ESC = pause, pareil...)
pour la pause, je fais la chose suivante :
if ((get_trigger(3)==255) || (READKEY()==0x1b))
alors, get_trigger(3) lis l'état du FIRE2
et
READKEY utilise CHGET (0x009f) dans cette routine
unsigned char READKEY(void)
{
__asm
call KILBUF
call CHGET
ld L,A
__endasm;
}
eh bien qd je rajoute (READKEY()==0x1b) -0x1b étant le code retourné pour la touche ESC- le deplacement au stick ne fonctionne plus et le deplacement au clavier est ....très perturbé (saccade)
d'où ma question, peut-on facilement combiner stick+n'importe quelle touche du clavier
Merci et à bientôt
J'ai une question :
est-il possible d'utiliser à la fois le stick et le clavier ?
Je m'explique : pour wii? je souhaite jouer
- avec 1 stick 2 boutons (fire1 = action, fire2 = pause..... ca, ca marche, c'est implémenté)
- avec 1 stick 1 bouton (Fire1 = action, ESC = pause...... aïe, j'y reviens plus bas)
- avec le clavier (directions + ESPACE= action et ESC = pause, pareil...)
pour la pause, je fais la chose suivante :
if ((get_trigger(3)==255) || (READKEY()==0x1b))
alors, get_trigger(3) lis l'état du FIRE2
et
READKEY utilise CHGET (0x009f) dans cette routine
unsigned char READKEY(void)
{
__asm
call KILBUF
call CHGET
ld L,A
__endasm;
}
eh bien qd je rajoute (READKEY()==0x1b) -0x1b étant le code retourné pour la touche ESC- le deplacement au stick ne fonctionne plus et le deplacement au clavier est ....très perturbé (saccade)
d'où ma question, peut-on facilement combiner stick+n'importe quelle touche du clavier
Merci et à bientôt

Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie