MSX Village forum

La Place des Développeurs Assembleur MSX pour les noobs cours en ligne

MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 774

Le 21/12/2018 à 23h12

Reprise du message précédent

Salut à tous ce serait intéressant pour moi, mais il faut que je retrouve mes précédents posts :gne il faudrait les isoler ceux-là aussi ça me motiverai pour m'y remettre :siffle

:lol


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 22/12/2018 à 07h46
Salut les Gaillards !

J'ai tout juste quelques notions d'ASM... Et j'ai une question pour :

@Sylvain et @Metallion

Vous avez parlé plus haut du vblank. Pour le "Brick Breaker Santa Demo" j'e n'ai pas eu besoin d'utiliser de Vblank, mais j'ai quand même testé la technique.
J'ai intercalé un :
ei
halt

juste avant la procédure qui s'occupe de tout ce qui est graphique. Alors, ça fonctionne, mais ca ralenti considérablement le jeu, étant donné qu'on attend 1/60eme de seconde avant de faire quelque chose. C'est donc du temps perdu comme le dit Metallion.

Alors ma question est simple, quelle est la bonne technique ? Pouvez-vous me soumettre un exemple concret que je puisse comprendre ?




banniere-ericb59e
Site web    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 774

Le 22/12/2018 à 09h17
ericb59 :
Salut les Gaillards !

J'ai tout juste quelques notions d'ASM... Et j'ai une question pour :

@Sylvain et @Metallion

Vous avez parlé plus haut du vblank. Pour le "Brick Breaker Santa Demo" j'e n'ai pas eu besoin d'utiliser de Vblank, mais j'ai quand même testé la technique.
J'ai intercalé un :
ei
halt

juste avant la procédure qui s'occupe de tout ce qui est graphique. Alors, ça fonctionne, mais ca ralenti considérablement le jeu, étant donné qu'on attend 1/60eme de seconde avant de faire quelque chose. C'est donc du temps perdu comme le dit Metallion.

Alors ma question est simple, quelle est la bonne technique ? Pouvez-vous me soumettre un exemple concret que je puisse comprendre ?




Il y a des explication dans ce post je crois: (Metalion)

[url=http://msxvillage.fr/forum/topic.php?id=2534&pt=2][/url]

il suffit de chercher… dans les posts de 2014 :lol


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 22/12/2018 à 10h34
@sylvai. Oui tout à fait. J'ai voulu mettre de la musique PT3 pendant le jeu. Il faut un HALT pour que le player PT3 puisse jouer la musique.
Ca fonctionne très bien, sauf que le jeu en est ralenti du fait du HALT.

Sinon, je comprend bien le principe du VBLANK, pas de soucis, et il y a dans la librairie tous les éléments pour le faire.
IsVsync() et même IsHsync(). Edité par ericb59 Le 22/12/2018 à 10h47


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 22/12/2018 à 12h34
Sur le topic que MSXosaure à indiqué, j'ai mis une version C de la routine de GDX, (avec exemple).

La routine incrémente 3 compteurs différents (pour l'exemple) avec des intervalles différents, le tout est synchronisé par un Vsync/Vblank.

Ce que je voulais dire, c'est que le programme est donc synchronisé sur 1/50 ème de seconde.
Mais, si on enlève la synchronisation Vblank, le programme tourne beaucoup plus vite...

Si je reprends mon exemple de Brick Breaker, si je synchronise l'animation avec le même principe, sur 1/50 ou 1/60ème (en fonction du VDP),
l'animation de la balle est beaucoup plus lente.
Et donc, je ne comprend pas bien comment faire un jeu avec une animation rapide, si on synchronise de cette façon...
Alors si vous pouviez m'expliquer ... Je serai ravi de comprendre ... :-) Edité par ericb59 Le 22/12/2018 à 12h36


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2680

Le 15/12/2020 à 18h56
J'ai une question sur l'assembleur (ou plutôt le linker) ; j'imagine que c'est le bon endroit.
De ce que je comprends, la directive .area permet de créer des zones pour le code et les data assembleur qui seront triés et regroupés ensemble pour déterminer les adresses finales et créer le fichier binaire.
Pour le regroupement, c'est simple, tout code/data déclaré après une .area y sera affecté.
Par contre, pour l'ordre, c'est moins clair.
Intuitivement, je pensais que l'ordre de déclaration des .area déterminait leur ordre.
Ca semble plus ou moins le cas, mais ce que je ne comprends pas c'est que dans les fichiers assembleurs que j'ai regardé (générés par SDCC ou autre), on peut retrouver plusieurs fois la même .area dans un même fichier. :heink
Quelle est la règle d'ordonnancement dans ce cas ?


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 15/12/2020 à 20h01
Je pense que c'est plutôt un commentaire à mettre du coté SDCC non ?
J'ai créé ce Topic : http://msxvillage.fr/forum/topic.php?id=3797#m84949

As tu un exemple ?
Je n'ai pas vu plusieurs .area identiques dans mes fichiers .asm

Quel est ton problème au juste ? Edité par ericb59 Le 15/12/2020 à 20h02


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2680

Le 15/12/2020 à 20h22
ericb59 :
Je pense que c'est plutôt un commentaire à mettre du coté SDCC non ?
J'ai créé ce Topic : http://msxvillage.fr/forum/topic.php?id=3797#m84949


La directive "area" qui gère les sections de programme semble commune aux différents assembleurs (si ce n'est dans le nom, tout du moins dans l'usage).

ericb59 :
As tu un exemple ?
Je n'ai pas vu plusieurs .area identiques dans mes fichiers .asm


Par ex., dans le crt0.s de base de SDCC (https://sourceforge.net/p/sdcc/code/HEAD/tree/trunk/sdcc/device/lib/z80/crt0.s) tu as deux fois les .area _CODE, _GSINIT et _GSFINAL. Tu as la même chose dans le crt0_msxdos_advanced de Konamiman que tu utilises dans Fusion-C.

Ma déduction est que la première déclaration détermine l'ordre, mais j'aimerai bien en être sûr.

ericb59 :
Quel est ton problème au juste ?


Aucun problème, j'aime juste comprendre ce que je fais. :)
Dans le future, je prévois d'ajouter un générateur de crt0 à ma lib pour éviter d'avoir à pré-générer toutes les combinaisons (pour les ROMS 8, 16, 32 et 48K qui peuvent commencer à plusieurs slots, ça fait beaucoup trop de combinaisons inutiles).


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 15/12/2020 à 20h38
Oui tout à fait, la première liste donne l'ordre des segments pour le linker.

Un générateur de crt0 ?
En fait il n'y a pas tant que ca de possibilités de crt0 . (?)
De plus il faut ajouter du code spécifique à ton crt0, dans le cas d'une rom 32K il faut chercher et aligner le seconde bank de 16K,
dans le cas de la ROM 48K, il faut ajouter les routines de Switch de bank 0 avec le Bios et c...


Edité par ericb59 Le 15/12/2020 à 20h43


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2680

Le 15/12/2020 à 21h39
Oui, je sais. J'ai les crt0 fonctionnels pour les ROM 16, 32 et 48K.
Il y a 8 possibilités de positionnement pour une ROM 8K, 4 pour les 16K, 3 pour les 32K, 2 pour les 48K et 1 pour les 64K.
Ca fait déjà beaucoup.
En plus, je compte ajouter un code optionnel de remplacement du Bios par mon propre code (ça doublerait le nombre de crt0).
Du coup, l'idée c'est de pouvoir choisir les options dans le processus de Build et de générer automatiquement le crt0 qui va bien (en combinant des "morceaux" de ctr0).


On est toujours ignorant avant de savoir.
Github    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 774

Le 16/12/2020 à 21h30
On réveille les morts ici


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2680

Le 16/12/2020 à 22h01
MSX never dies :tchin


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2680

Le 21/12/2020 à 12h06
A priori, si on est en mode d'interruption IM1 (mode standard sur les MSX à priori), le registre I est inutilisé, non ?
Pourtant, je ne me rappel pas avoir vu d'exemples de programme assembleur l'utilisant.
Y a une bonne raison de ne pas utiliser ce registre en plus dans nos programmes ?

EDIT : Ah, c'est p'être sa lenteur d'accès qui fait qu'il n'est pas/peu utilisé. L'accès r/w coute 9-CC au lieu de 4-CC pour les registres généraux. Après, si l'adresse n'est pas chargé dans HL, ça reste quand même plus rapide qu'un accès direct à la RAM (13-CC). :moue


On est toujours ignorant avant de savoir.
Github    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5776

Le 21/12/2020 à 15h52
Donc si je comprends bien, vous êtes des Noobs :tea Enfin c'est ce qui est inscrit sur le post hein :D:oups:lol
Nan c'est parseque je savais pas ce que c'était a la base, mais comme vous parlez pas comme nous avec vos blagues d'informaticiens, c'est pas si évident que ça à suivre :tea



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 21/12/2020 à 16h23
@TurboSeb
Moi non plus je ne comprend pas tout ce que dit aoineko :lol
Mais ça à l'air trop vachement cool. Je veux être comme lui quand j'serai grand :p Edité par ericb59 Le 21/12/2020 à 19h23


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2680

Le 21/12/2020 à 17h23
C'est vrai qu'on est plus totalement noob... on a p'être atteint le grade de mi-noobs :D


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie