MSX Village forum

La Place des Développeurs » Recherche Personne s'y connaissant en C sur MSX

Conseiller Municipal

rank_5.png

Avatar

Groupe : compte ++

Inscrit le: 17/04/2012

Messages: 4224

Le 04/04/2018 à 20h12
Je veux porter un code C 'Moderne' vers MSX
Quelqu'un a t-il des connaissance en C sur MSX.

Sans utiliser le compilateur C d'ascii, j'ai pas envie de coder/éditer du code sur MSX ! :siffle

Merci à vous ...


Site web    

Touriste

rank_1.png

Avatar

Inscrit le: 10/09/2014

Messages: 124

Le 05/04/2018 à 08h53
Tu veux compiler le code sur MSX, pourquoi ne pas compiler sur PC avec un cross compiler ?

SDCC contient une version Z80 de la bibliothèque C standard, située dans (dossier SDCC) \ lib \ z80 \ z80.lib. Cette bibliothèque inclut les modules putchar, printf et sprintf. En ajoutant les noms de fichiers des fichiers de module appropriés (.rel) de MSXCHAR à la ligne de commande de compilation, le compilateur utilisera ces modules à la place des modules intégrés.

Le wiki ici

Une vidéo en espagnol pour créer une ROM avec SDCC

Il y a ce très bon MSX C Manual également.






Sylvain
MSX lover :)
   

Conseiller Municipal

rank_5.png

Avatar

Groupe : compte ++

Inscrit le: 17/04/2012

Messages: 4224

Le 05/04/2018 à 10h51
Oui je connais SDCC de nom, je ne l'ai jamais utilisé cependant.

En fait j'ai surtout besoin d'aide pour convertir un jeu en C (codé sur Mac avec SDL2 compilateur GCC) vers un C compatible MSX.
Le jeu en question à été programmé en tenant compte des limitation du MSX (bien que ça tourne sur MAC), écrans graphiques fixes, un seul sprite à l'écran, utilisation de copy (x,y)-(x2,y2) pour la composition des écrans.
J'ai donc besoin de librairies graphiques (Screen8) pour MSX (et quelques autres routines, notamment chargement de fichiers graphiques...)


Site web    

Touriste

rank_1.png

Avatar

Inscrit le: 10/09/2014

Messages: 124

Le 08/04/2018 à 19h03
Par le passé je ne suis pas allé plus loin que le test "Hello World" avec SDCC mais ta demande me donne l'occasion de me replonger dans la programmation C pour MSX ;) .
Il existe une multitude de compilateurs et des librairies MSX qui ne sont pas toutes compatibles. Après avoir fait un petit tour d'horizon de ce qui existe je te propose de voir ce que l'on peut faire avec SDCC et voici donc un petit tutoriel de ce que j'ai fait;

-Récupérer et installer SDCC
https://sourceforge.net/projects/sdcc/
Pour Windows, autoriser l'ajout de SDCC dans le PATH

Récupérer hex2bin
https://sourceforge.net/projects/hex2bin/files/latest/download
placer hex2bin dans le répertoire bin de SDCC par exemple pour pouvoir l'exécuter en ligne de commandes

Il peut être intéressant de s'entrainer à compiler Inertia : http://andrear.altervista.org/home/inertia.php

Sinon, partons de zéro ;

Créer un répertoire pour notre projet : par exemple prjmsx
Dans ce répertoire, créer les répertoires suivants :
- bin (contiendra le fichier à exécuter sur MSX)
- build (contiendra les fichiers intermédiaires de compilation)
- include (on placera les fichiers de définition des fonctions)
- libs (contiendra les librairies externes)
- src (contiendra les fichiers source)

En fonction du type de fichier que l'on veut produire il faut écrire un script permettant de réaliser l'entête :
- BIN ;exécutable à partir du BASIC MSX crt0msx_basic.s ou crt0msx_bin_diskfile.s
- DOS ;exécutable pour MSX-DOS crt0msx_msxdos.s ou crt0msx_msxdos_advanced.s
- ROM ;générer un fichier ROM crt0msx.16k.4000.s, crt0msx.16k.8000.s ou crt0msx.32k.4000.s

Récupérer ces fichiers CRT par exemple ici : https://github.com/nataliapc/MSX_devs/find/master

Partons sur un fichier ROM 16k. Placer le fichier crt0msx.16k.4000.s dans le répertoire "libs".

Copier les fichiers msxtypes.h msxvdp.h dans le répertoire "include".

Copier les fichiers msxvdp.s et untest.c dans le répertoire "src".

Le programme principal est dans "untest.c" :

- Début en SCREEN 0, on recherche le type de MSX (1 ou 2)
- On affiche le type de MSX
- On attend quelques secondes
- On passe en SCREEN 8
- On attend quelques secondes
- fin = reboot

Code C :
/*
 * 
 * test : type de MSX
 * 
 */
 
#include <msxtypes.h>
#include <stdio.h>
#include <msxvdp.h>
 
#define  HALT __asm halt __endasm   //attend la prochaine interruption
 
#define PAUSE_TIME 30
 
// definition des fonctions
void WAIT(byte cicles);
 
static byte msx_ver;
 
void main(void)
{
  screen(0);
  msx_ver = msxVersion();
  msx_ver += 49;
  printf("Type de MSX: ");
  putchar(msx_ver);
  printf("\n");
  WAIT(900);
  screen(8);
  WAIT(900);
  return;
}
 
// Genere une pause qui se base sur n interruptions
// PAL: 50 = 1 seconde  ;  NTSC: 60 = 1 seconde
void WAIT(byte cicles)
{
  byte i;
  for(i=0;i<cicles;i++) HALT;
  return;
}


Pour compiler le tout, exécuter le fichier MAKEFILE.BAT (Windows) ou makefile.sh (Linux)

Tous ces fichiers sont dans ce fichier zip.

^^


Sylvain
MSX lover :)
   

Villageois

rank_3.png

Avatar

Inscrit le: 24/08/2015

Messages: 294

Le 13/04/2018 à 10h50
je remplacerais:

HALT

par:

EI
HALT

c'est plus prudent
   

Conseiller Municipal

rank_5.png

Avatar

Groupe : compte ++

Inscrit le: 17/04/2012

Messages: 4224

Le 13/04/2018 à 11h04
Merci pour ce tuto sylvain.

Le truc sympa avec sdcc c’est qu’on peut développer sur Mac aussi, car les outils existent pour Linux/MacOS.

Cela dit je vais peut être utiliser Hi-Tech C
J’attends Quelques fichiers de Artrag...

Dans tout les cas je. Oui tiendrai au courant ici. Car le C est une bonne option pour développer de gros ou petit jeux sur Msx.
Il manque juste une bonne bibliothèque standardisée et le manuel qui va avec ...
(Hormis Msx c d’ascii, mais obligé de coder sur Msx avec un manuel en japonais !! Quel dommage!)



Edité par ericb59 Le 13/04/2018 à 11h07


Site web    

Touriste

rank_1.png

Avatar

Inscrit le: 10/09/2014

Messages: 124

Le 13/04/2018 à 14h15
OK pour ton choix, de mon côté je vais continuer avec SDCC en enrichissant les bibliothèques existantes que l'on peut trouver sur le net, mais je n'ai pas réussi à ressembler un pack couvrant le spectre MSX1 / MSX2. Si quelqu'un a de telles bibliothèques complètes pour SDCC je suis preneur. Il existe peut-être un portage depuis les bibliothèques ASCII, je crois que c'est le cas pour les bibliothèques Hi-Tech C.

Où trouve-t-on le compilateur Hi-Tech C qui fonctionne sur les plateformes Windows, Linux ou Mac ?

@Sector28 :
Merci pour le Enable Interrupt avant le Halt, je l'ajouterai à mon code.



Edité par sylvain Le 13/04/2018 à 14h16


Sylvain
MSX lover :)
   

Conseiller Municipal

rank_5.png

Avatar

Groupe : compte ++

Inscrit le: 17/04/2012

Messages: 4224

Le 13/04/2018 à 14h59
Voici ce que j'ai récupéré pour SDCC

Différentes librairies, Dont la Solid C qui contient des libs pour MSX2, mode graphiques jusqu'au screen5

J'ai pas encore eu l'occasion de faire le tri la dedans, si tu peux en tirer le meilleur ça serait cool !

SDCC_msx_libs1.zip

SDCC_MSX_Libs2.zip

msx-gfxlib-master.zip


Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté