MSX Village forum

La Place des Développeurs Assembleur Z80, C, ccz80... Que choisir pour développer pour MSX?

TheKitsuneWithATie Membre non connecté

Vagabond

Rang

Avatar

Inscrit le : 04/12/2016 à 15h56

Messages: 11

Le 06/12/2016 à 04h42
Bonjour tout le monde,

Il y a peu j'ai décidé d'essayer de me mettre à la programmation pour MSX, j'ai donc eu 3 options, le MSX-Basic (l'option la moins puissante), l'assembleur Z80 (je commence à peine) et le ccz80/ccz80++ (des clones du C et C++ visant la programmation pour Zilog 80) avec Tabmegx (un IDE pour ccz80/ccz80++ spécialisé MSX avec plusieurs outils pour les sprites et autres...).

Dans toutes ces options, j'ai commencé par l'assembleur, je commence à peine à apprendre avec le livre mis en ligne sur le site par granced (que je remercie grandement). Après plusieurs heures de lecture je n'en suis pas encore à comprendre le code assembleur mais j'avance (il faut de la patiente).

Mais je viens d'apprendre une autre possibilité qui semble aussi très puissante, programmer en C avec le compilateur SDCC, fait pour les processeurs 8 bits (don le Zilog 80). Mon problème? Installer les outils nécessaire et comprendre comment finir avec un ROM compatible MSX (avec les headers, le poids du ROM...). Je n'arrive aussi pas à trouver beaucoup de documentation sur comment programmer en C pour MSX.

Sinon il y a l'autre option du ccz80 et du ccz80++ qui à l'air vraiment sympa. Le ccz80 comporte pleins de librairies pour la MSX et à l'avantage de permettre facilement le portage vers les autres systèmes équipé du Zilog 80. De plus, la version ccz80++ offre de nouvelles librairies, et permet de faire de la programmation orienté objets, ce qui m’intéresse vraiment du fait que je connais bien ce type de programmation (je fais pas mal de PHP en orienté objets) et que cela permet d'avoir un code beaucoup plus lisible et accessible. Et en bonus, l'IDE Tabmegx offre des outils graphiques simples pour produire un programme efficacement (éditeur de sprites et bien plus). Le problème est encore un manque de documentation du langage ccz80 et de Tabmegx (il semble y avoir pas mal de documentation en espagnol et en japonais, mais je ne parle ni l'un, ni l'autre). Et je ne sais pas aussi si ce langage offre une exécution rapide une fois compilé.

En plus pour rajouter un couche à tous ça, le peu de documentation que je trouve est pour les outils sous Windows, alors que je travailler sous Linux Mint 17.3 :( (j'arrive à lancer les compilateur ccz80/ccz80++ et Tabmegx via Wine).

Entre l'assembleur, puissant mais peu abordable, le C don la seule compilation d'un ROM semble être un exploit et le ccz80 attirant mais peu documenté, je ne sais plus trop quoi choisir ni par ou commencer. :sick J'aimerais donc savoir si quelqu'un à des conseils ou de la documentation pour m'aider à commencer.

Merci beaucoup et bonne journée!

Edité par TheKitsuneWithATie Le 06/12/2016 à 04h53


~ Polarity inverter since 2016 ~
E-mail    
Mumbly Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 06/12/2016 à 08h50
Tres intéressant ce que tu indiques là, j'ai trouvé un tuto pour sdcc, des que je le retrouve, je te l'envois, moi j'ai abandonné le c suite au constat que le code genere etait lourd et prenait trop de cycles pour des developpements de jeu. Je code en asm sur pc, je teste sur open msx et de temps en temps sur un vrai msx pour verifier si tt est ok par rapport a l'emulation.
Pour generer une rom en asm, j'ai des examples que je peux partager, il faut globalement mettre un header et jouer avec les banks.
Si tu es intéressé par le v9990, je commence a etre un peu plus experimenté :)


Mumbly
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 06/12/2016 à 10h41
Certains jeux ont été développés en C++, mais, à ma connaissance, il est toujours nécessaire d'intégrer quelques modules directement en assembleur pour garantir un résultat satisfaisant en terme de vitesse d'exécution.

L'assembleur du Z80 n'est pas fondamentalement difficile à apprendre. Après tout, c'est un langage comme les autres, et il est relativement riche par rapport à certains autres processeurs de l'époque. La vraie difficulté, c'est de faire fonctionner le MSX à ce niveau de langage. De connaitre et d'utiliser les périphériques (clavier, joysticks, VDP, PSG, cartouches). C'est là que se situe le vrai défi de la programmation.


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

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 06/12/2016 à 12h50
Exact, Tout dépends du type de jeu en fait et des requirements en terme de gameplay, par exemple un des developpeur de xtazy a utilisé du c mais comme ils n'utilisent pas enormement de rasters pour des realiser des degrades comme sur amiga a l'ecran (par exemple) il peuvent avec une petite partie en c, efficacement developper de la logique ou autre. la proportion asm/c est 70-30, je dirais, La majeure partie du code reste, malgrés tout, en assembleur pour ce genre de jeu.
Pour un jeu d'aventure, la c'est l'inverse
Pour moi les deux sont complementaires pour autant que tu ne te trouve pas ds une position ou tu dois reecrire une partie du code c en asm a cause de probleme d'allocation de memoire ou de performance du code généré.
Si je peux aider dit le... mais l'asm reste indispensable pour moi


Mumbly
   
TheKitsuneWithATie Membre non connecté

Vagabond

Rang

Avatar

Inscrit le : 04/12/2016 à 15h56

Messages: 11

Le 06/12/2016 à 16h43
Merci pour vos réponses!

Mumbly, je veux bien savoir comment créer un ROM a partir d'un asm. Aussi, j'aimerais savoir comment il est possible de développer un jeu en C et en assembleur comme tu l'a indiqué dans ton second post, parce que je pense qu'il serais plus simple pour des système "complexes" in-game (comme pour un jeu d'aventure) d'écrire la logique en C.

Ensuite de ce que j'ai lus vis à vis du C++ et du MSX c'est que ça n'a jamais vraiment était supporté, donc il est nécessaire d'embarquer des modules, et je n'ai pas vraiment trouvé de documentation là dessus.

Et merci pour le livre GDX, je vais me lancer dans sa lecture dès que je le peu.

Et pour ce qui est des ROMs, j'aimerais savoir si il y a de la documentation (ou quelqu'un qui ai l'envie de m'expliquer) comment ça fonctionne précisément (les headers, la taille du ROM...).

Aussi, personne n'a de documentation sur ccz80, ccz80++ et Tabmegx s'il vous plaît? Edité par TheKitsuneWithATie Le 06/12/2016 à 16h43


~ Polarity inverter since 2016 ~
E-mail    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 553

Le 06/12/2016 à 17h38
Pour débuter sur msx, je te conseil le basic, ensuite l'assembleur. La plupart des jeux msx ont été écrit en asm, par des gens qui ne sont pas plus inteligents que toi, et ils n'ont pas mis des siècles-hommes à les concevoir.


Toute matrice carrée sur un corps K, dont le polynôme caractéristique est scindé, est semblable à une matrice de Jordan. Cette réduction est unique à l'ordre des blocs près. De plus, toute matrice carrée nilpotente sur un corps K est semblable à une matrice de Jordan dont chaque bloc est associé à la valeur 0. Évidement, cette réduction est encore unique à l'ordre des blocs près...
:)
   
Mumbly Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 06/12/2016 à 21h03
tu dois d'abord définir la taille des banks
-> defpage

ensuite pour chaque banks, définir le contenu de la page

le code est en général en page 0 (ici a partir de l'adresse 4000)

ensuite vient le header


Mumbly
   
Mumbly Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 06/12/2016 à 21h03
defpage 0,0x0000, 0x4000 ; page 0 contains main code + far call routines
;defpage 1,0x6000, 0x2000
defpage 2,0x8000, 0x8000
defpage 6,0x8000, 0x8000
defpage 10,0x8000, 0x8000
defpage 14,0x8000, 0x8000
defpage 18,0x8000, 0x8000
defpage 22,0x8000, 0x8000
defpage 26,0x4000, 0x4000
defpage 28,0x4000, 0x4000
defpage 30,0x8000, 0x8000
defpage 34,0x8000, 0x8000
defpage 38,0x8000, 0x8000
defpage 42,0x8000, 0x8000
defpage 46,0x2000, 0x2000
defpage 47,0x8000, 0x8000




page 0
code page 0

org $4000


DB "AB" ; expansion ROM header
DW start ; start of the init code, 0 if no initcode
DW 0 ; pointer to CALL statement handler, 0 if no such handler
DW 0 ; pointer to expansion device handler, 0 if no such handler
DW 0 ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
DS 6,0 ; room reserved for future extensions


Mumbly
   
Mumbly Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 06/12/2016 à 21h10
ici, il y a bcp de defpage car mon jeu fait plus de 300k :)


j'utilise sjasm comme compilateur z80 sur pc, ainsi que Context comme editeur, avec un script qui des que j'appuie sur F9, ouvre openMSX et execute le code (.rom)
c'est tres rapide par rapport a une compilation sur un MSX.
je t'expliquerai comment swapper de banks apres
pour l'installation des softs, je peux t'envoyer les urls et softs en attach par mail



Mumbly
   
Mumbly Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 06/12/2016 à 21h15
le mieux est que je t'envoie un hello world, ce sera plus parlant :)


Mumbly
   
TheKitsuneWithATie Membre non connecté

Vagabond

Rang

Avatar

Inscrit le : 04/12/2016 à 15h56

Messages: 11

Le 06/12/2016 à 23h05
Oui ça m’intéresse! :) Je veux bien que tu m’envoie tout ça si tu le veux bien s'il te plait, ça pourrais m'aider.

Après je ne comprend pas encore le fonctionnement et l'utilisation des banks et pages, je devrais mieux comprendre après avoir lus le livre de GDX et celui sur l'assembleur mis en ligne par granced. Edité par TheKitsuneWithATie Le 07/12/2016 à 02h06


~ Polarity inverter since 2016 ~
E-mail    
granced Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 09/10/2009 à 09h18

Messages: 1501

Le 07/12/2016 à 08h55
Perso, j'utilise asmsx, qui libère des contraintes de headers (pour les slots je suis moins sûr, comme je ne maîtrise pas la bête à 100%).

Tu peux compiler immédiatement en ROM par exemple, avec une directive en début de programme.

Sinon, je ne peux que plussoyer les autres villageois, l'assembleur se comprend plutôt bien si on se donne la peine de le bosser (et encore plus si tu es familier du C et des pointeurs), c'est plus son application aux MSX qui reste à maîtriser, il y a pas mal de subtilités qui ont déjà été citées : région de communication, hooks, VDP, PSG, PPI, RAM, VRAM, BIOS, slots et j'en passe ^^


MSX un jour, MSX toujours ! :D
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 07/12/2016 à 11h20
Mumbly:
ainsi que Context comme editeur, avec un script qui des que j'appuie sur F9, ouvre openMSX et execute le code

Ca, ça m'interesse car j'utilise aussi Context comme éditeur.
Tu peux m'envoyer le script ?

granced:
Perso, j'utilise asmsx, qui libère des contraintes de headers (pour les slots je suis moins sûr, comme je ne maîtrise pas la bête à 100%).

Je conseille aussi AsMSX, car il intègre pas mal de directives qui sont directement prévues pour le MSX.
Les sélections de pages sont aussi facilitées pour les mappers.

Il a malgré tout 2 défauts :
- un bug qui n'a toujours pas été résolu et qui oblige parfois à ajouter un ou deux "nop" ici et là pour que ça passe à la compilation
- l'absence de macros utilisateur


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

Touriste

Rang

Avatar

Inscrit le : 05/12/2016 à 15h44

Messages: 32

Le 09/12/2016 à 14h39
ok je vais envoyer cela du week-end à vous deux (hello world ROM et le script pour Sjasm/Context/openMSX), chez Abyss c'est que l'on utilise, cela compile la ROM en appuyant sur F9 (y a un petit truc a configurer dans Context), lance openmsx avec la rom compilée et si tu appuie sur F12, swap sur le V9990 comme on développe un truc sur celui-ci pour le moment.


Mumbly
   
TheKitsuneWithATie Membre non connecté

Vagabond

Rang

Avatar

Inscrit le : 04/12/2016 à 15h56

Messages: 11

Le 09/12/2016 à 22h17
Merci beaucoup Mumbly! :)


~ Polarity inverter since 2016 ~
E-mail    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie