MSX Village forum

La Place des Développeurs Dev emulateur Minitel

ludojoey Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 01/01/2025 à 13h43
Hello et très bonne année à tous!

Alors, j'ai avancé sur mon dev et j'ai une version qui se limite actuellement à l'affiche d'une oage videotex.
Pour l'instant, affiche a 90% correctement le videotex.
Pour ceux qui connaissent, certains points ne sont pas supportés pour le moment (séquences CSI, propagation du sous-lignage, DRCS,...).
Et quelques soucis d'affichage sur les caractères graphiques.

Bref, pour diverses raisons, je décide d'utiliser, pour voir, Fusion-C 1.2 avec SDCC 3.6, ayant un comportement étrange notamment sur la lecture des fichiers avec mon dev.

Donc à partir de là, c'est pas ciair (et je crois avoir lu la doc correctement, mais peut-être ai-je louper quelque chose).
Pour un test, je veux saisir un nom de fichier, le lire et le fermer. Basique.

Sachant que je veux mon dev pour MSX1 sous MSX-DOS1, faut-il utiliser Fcb_open, Fcb_read et Fcb_close ou Open, Read et Close ?
Il semble , d'après la doc, que Open,Read et Close soit possible , vu ce texte :
Citation :

Mandatory when reading or writing files with MSX DOS 1. (Or MSX DOS 2
In compatibility mode)

FCBLIST will give a file handler.
Example of use :
char sbuf[10] ; // Set a 10 bytes buffer
FCBlist *FCB = FCBs() ; // FCB initialization
int fH ; // Set a file handler variable
fH = open( « TEST0001.SC8 », O_RDWR ) ; // open file for read
read(fH, sbuf, 10) ; // Read 10 bytes to 74
close(fH) ; // Close file


Je ne comprends pas l'utilité de FCBs() ? FCB n'est ensuite pas utilisé (je passe sur les noms de fonctions erronés (minuscules/majuscules)...

De toutes façons , cela ne fonctionne pas.

J'ai ensuite tenté avec les fonctions fcb_xxx...

Idem.

Voici mon code pour tester (un peu pourri mais je trifouilles pour tester):

Code :

void FT_SetName( FCB *p_fcb, const char *p_name )
{
  char i, j;
  memset( p_fcb, 0, sizeof(FCB) );
  for( i = 0; i < 8; i++ ) {
    p_fcb->name[i] = ' ';
  }
  for( i = 0; i < 3; i++ ) {
    p_fcb->ext[i] = ' ';
  }
 
  for( i = 0; (i < 8) && (p_name[i] != 0) && (p_name[i] != '.'); i++ ) {
    p_fcb->name[i] =  p_name[i];
  }
  if( p_name[i] == '.' ) {
    i++;
    for( j = 0; (j < 3) && (p_name[i + j] != 0) && (p_name[i + j] != '.'); j++ ) {
      p_fcb->ext[j] =  p_name[i + j] ;
    }
  }
}


void main(void) {
    FCB sFcb ;
    char texte[100],i,j;
   
    Screen(1);
    for(i=0;i<10;i++) {
        PrintNumber(i);
        Print("\n");
    }
    Print("Fichier : ");
   
    i=InputString(texte,15);
    PrintNumber(i);
    Print("\nTape : ");
    Print(texte);
   
    FT_SetName( &sFcb, texte );
    i = fcb_open(&sFcb);
   
    Print("\n");
    Print("i=");
    PrintNumber(i);
    Print("\n_io_errno=");
    PrintNumber(_io_errno);
    Print("\nPress any key...\n");

    WaitKey();

    if (_io_errno == 0){
       
        i = fcb_read(&sFcb,texte,2);
        Print("i(read?)=");
        PrintNumber(i);
        Print("\n");
        texte[2]=0;
        Print(texte);
        Print("\n");
       
        fcb_close(&sFcb);
    }
    Print("\nFIN\n\n");
    Exit(0);
}


Ca devrait :
Afficher les nombre de 1 a 10 (OK)
Saisie d'une nom de fichier OK
Affichage de ce nom (KO)
Afficher les deux premiers caractères lus depuis le fichier (KO)


Voici le résultat :

Video


Alors, quelqu'un pourrait il m'orienter pour tout simplement lire un fichier ? Edité par ludojoey Le 01/01/2025 à 19h05
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2947

Le 01/01/2025 à 13h55
Je ne peux pas t'aider sur Fusion-C, mais pour répondre à la question sur le FCB : Il s'agit d'une zone mémoire nécessaire pour la communication entre le programme et le gestionnaire de fichier.
La structure est décrite ici : https://www.msx.org/wiki/FCB

Normalement, tu passes cette zone mémoire en paramètre de la fonction d'ouverture de fichier, puis à toutes les fonctions qui le manipule.


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

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 01/01/2025 à 14h12
aoineko :
Je ne peux pas t'aider sur Fusion-C, mais pour répondre à la question sur le FCB : Il s'agit d'une zone mémoire nécessaire pour la communication entre le programme et le gestionnaire de fichier.
La structure est décrite ici : https://www.msx.org/wiki/FCB

Normalement, tu passes cette zone mémoire en paramètre de la fonction d'ouverture de fichier, puis à toutes les fonctions qui le manipule.


Merci pour ta réponse et les infos sur le FCB.
Oui je me doute bien que cela se passe comme cela, mais concrètement là ca ne marche pas...
Faut-il initiliser autre chose dans la structure ?
Et pourquoi le nom de fichier tapé ne s'affiche pas...?

A noter :
1/si je vire les fonctions fcb_xxx, l'affichage du nom de fichier fonctionne...
2/ Le fait que l'affichage du nom tapé affiche 2 carrés (et seulement 2) semble lié à la ligne "texte[2]=0;", pourtant placé bien après...


   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2947

Le 01/01/2025 à 17h27
Normalement, le contenu de la structure FCB est utilisée directement par les fonctions bas niveau du MSX-DOS (BDOS).
Je ne connais pas le détail de l'implémentation des fonctionnalités du MSX-DOS dans Fusion-C, mais normalement, la partie en C ne devrait être qu'un "wrapper" des fonctions BDOS (c'est à dire des fonctions qui ne font qu'appeler les routines assembleurs du BDOS avec les bons paramètres).

A mon avis, le plus simple pour toi serait de partir d'un exemple fonctionnel que tu peux ensuite modifier petit à petit.
Voit avec EricB ou les autres utilisateurs de Fusion-C s'ils n'auraient pas ce code d'exemple.


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

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 01/01/2025 à 19h03
aoineko :
Normalement, le contenu de la structure FCB est utilisée directement par les fonctions bas niveau du MSX-DOS (BDOS).
Je ne connais pas le détail de l'implémentation des fonctionnalités du MSX-DOS dans Fusion-C, mais normalement, la partie en C ne devrait être qu'un "wrapper" des fonctions BDOS (c'est à dire des fonctions qui ne font qu'appeler les routines assembleurs du BDOS avec les bons paramètres).

A mon avis, le plus simple pour toi serait de partir d'un exemple fonctionnel que tu peux ensuite modifier petit à petit.
Voit avec EricB ou les autres utilisateurs de Fusion-C s'ils n'auraient pas ce code d'exemple.


Merci pour ton aide!

Bon, je crois que j'ai trouvé.
En tout cas, ça résout le soucis :

En faisant des tests, j'ai constaté que le simple fait de tester la variable globale "_io_errno" engendrait ce bug.

Code :
if (_io_errno == 0){ ...


Enlever ce simple "if", et hop plus de soucis.
J'ai re-regardé la doc, et, en lisant entre les lignes, j'ai interprété que cette variable n'est utilisée que sous MSX-DOS 2

J'ai donc viré mon include de "io.h" et le test de cette variable (qui du coup ne passait pas à la compilation de toutes façons).

Code :

#include <stdlib.h>
#include <string.h>
#include "../fusion-c/header/msx_fusion.h"
void FT_SetName( FCB *p_fcb, const char *p_name ) 
{
  char i, j;
  memset( p_fcb, 0, sizeof(FCB) );
  for( i = 0; i < 8; i++ ) {
    p_fcb->name[i] = ' ';
  }
  for( i = 0; i < 3; i++ ) {
    p_fcb->ext[i] = ' ';
  }
  
  for( i = 0; (i < 8) && (p_name[i] != 0) && (p_name[i] != '.'); i++ ) {
    p_fcb->name[i] =  p_name[i];
  }
  if( p_name[i] == '.' ) {
    i++;
    for( j = 0; (j < 3) && (p_name[i + j] != 0) && (p_name[i + j] != '.'); j++ ) {
      p_fcb->ext[j] =  p_name[i + j] ;
    }
  }
}
void main(void) {
    
    FCB sFcb ;
    char texte[100],i;    
    
    Screen(1);
    for(i=0;i<10;i++) {
        PrintNumber(i);
        Print("\n");
    }
    Print("Fichier : ");
    
    i=InputString(texte,15);
    PrintNumber(i);
    Print("\nTape : ");
    Print(texte);
    
    FT_SetName( &sFcb, texte );
    
    i = fcb_open(&sFcb);
    
    Print("\n");
    Print("i=");
    PrintNumber(i);
    
    
    Print("\nPress any key...\n");
    WaitKey();
    if (i == 0 ){
        
        i = fcb_read(&sFcb,texte,100);
        Print("i(read?)=");
        PrintNumber(i);
        texte[i]=0;
        Print("\n");
        Print(texte);
        Print("\n");
        fcb_close(&sFcb);    
    }
    
    Print("\nFIN\n\n");
    Exit(0);
}


Et plus de soucis !

Enfin presque :

Si on tente d'ouvrir un fichier inexistant, le programme s'arrête normalement.
Cependant, si ensuite, on ouvre un fichier existant, puis qu'on re-tente d'ouvrir un fichier inexistant, le système plante avec une jolie mosaïque de caractères colorés !...
(Tout cela en relançant à chaque fois le programme de test, donc pas lors d'une seule et même exécution)

Je vais tenter de contacter EricB , mais j'ai pas envie de la déranger...!


Edité par ludojoey Le 01/01/2025 à 19h03
   
ludojoey Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 02/01/2025 à 15h43
Hello!

Bon, aujourd'hui je tente de porter mon début de petit projet sur MSXgl, qui est une bien belle réalisation @aoineko !
Un grand bravo, je suis bluffé !

Alors oui, je ne développe pas un jeu, mais j'ai parcouru un peu la doc, et je pense que je pourrais l'utiliser.
Qui peut le plus pleut le moins...

Je fais donc quelques tests...

Question bête : y a t-il un moyen (simple) d'attendre une saisie de chaîne au clavier ?
Dans les jeux ca peut servir (saisie de son nom par exemple..).

Je n'ai rien trouvé, ou alors je suis passé vraiment à côté (fort possible !).

Edité par ludojoey Le 02/01/2025 à 15h44
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2947

Le 02/01/2025 à 16h10
Déjà, tu souhaites faire une application MSX-DOS 1 ou MSX-DOS 2 ?
Le 2e à plus de fonctionnalités mais nécessite 128 Ko de mémoire et une ROM particulière (qu'on trouve dans certains MSX ou en cartouche).

Pour répondre à ta question, il y la fonction DOS_CharInput() qui fait ce que tu souhaites.
Voir la doc : https://aoineko.org/msxgl-doc/#File:dos.h:DOS_CharInput

Tu as un programme d'exemple MSX-DOS 1 (projects/samples/s_dos) qui utilise cette fonction.


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

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 02/01/2025 à 17h02
aoineko :
Déjà, tu souhaites faire une application MSX-DOS 1 ou MSX-DOS 2 ?
Le 2e à plus de fonctionnalités mais nécessite 128 Ko de mémoire et une ROM particulière (qu'on trouve dans certains MSX ou en cartouche).

Pour répondre à ta question, il y la fonction DOS_CharInput() qui fait ce que tu souhaites.
Voir la doc : https://aoineko.org/msxgl-doc/#File:dos.h:DOS_CharInput

Tu as un programme d'exemple MSX-DOS 1 (projects/samples/s_dos) qui utilise cette fonction.


Merci pour ta réponse.

Le but est de faire un dev qui puisse fonctionner sur un MSX1, et de plus, pas forcément sous MSX-DOS (1), c'est à dire qui pourrait également être chargé via l'interface K7 !
J'ai regardé pour DOS_CharInput, et, si celle-ci pourrait le faire, d'après ce que je comprends elle ne sera donc dispo qui s'il y a utilisation de MSX-DOS.

Alors, il y'a bien les fonctions Keyboard_xxx, mais à première vue cela me parait bien "compliqué" pour faire une simple saisie texte au clavier...

Merci de ton support!



   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2947

Le 02/01/2025 à 17h37
Si tu veux faire un programme qui fonctionne sur tous les supports, tu peux soit :
- utiliser les fonctions du BIOS (qui sont un chouilla plus compliqué à accéder depuis le DOS),
- utiliser les accès direct au hardware (qui fonctionne de la même façon quelque soit le média et le système, mais tu perds la gestion de la langue du clavier vu que c'est le BIOS qui fait la transcription).

Par contre, je n'ai jamais utilisé les fonctions du BDOS depuis l'environnement BASIC (nécessaire pour les programmes en cassette).
Ça doit être possible, mais à ma connaissance il n'y pas de commande BIOS pour ça.

Tu peux décrire un peu plus précisément tes besoins ?


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

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 02/01/2025 à 23h30
aoineko :
Si tu veux faire un programme qui fonctionne sur tous les supports, tu peux soit :
- utiliser les fonctions du BIOS (qui sont un chouilla plus compliqué à accéder depuis le DOS),
- utiliser les accès direct au hardware (qui fonctionne de la même façon quelque soit le média et le système, mais tu perds la gestion de la langue du clavier vu que c'est le BIOS qui fait la transcription).

Par contre, je n'ai jamais utilisé les fonctions du BDOS depuis l'environnement BASIC (nécessaire pour les programmes en cassette).
Ça doit être possible, mais à ma connaissance il n'y pas de commande BIOS pour ça.

Tu peux décrire un peu plus précisément tes besoins ?


Merci pour tes orientations.

Concernant la saisie texte, ce que je souhaite faire c'est, uniquement dans le cas ou on utilise MSX-DOS, demander à l'utilisateur de saisir le nom d'un fichier videotex à afficher (qui sera bien sur sur le disque) afin de pouvoir l'afficher.
Bref, une saisie tout ce qu'il y a de plus classique en réalité.
Cette saisie peut se réaliser dans n'importe quel mode d'affichage, peu importe.

En tout cas, je suis pour le moment impressionné par le travail que tu as réalisé, notamment la qualité de la documentation (et je sais, par expérience, que ce n'est pas la partie la plus amusante, mais indispensable selon moi) ainsi que les différents scripts fournis.
Tout cela est très propre.



   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2947

Le 03/01/2025 à 01h14
Pour la version MSX-DOS, tu peux utiliser la ligne de commande pour passer un nom de fichier en paramètre, ou bien lire le répertoire pour trouver tous les fichiers avec une extension donnée par ex., puis laisser l'utilisateur choisir parmi une liste.

Après, si tu préfères que l'utilisateur entre un nom de fichier à la main, tu peux créer une fonction qui lit les touches appuyées et les ajoutes dans une chaine de caractère jusqu'à ce que l'utilisateur appuis sur une touche donnée ("Entrée" par ex.). Si ce n'est que pour la version MSX-DOS, tu peux utiliser la fonction DOS_CharInput(). Edité par aoineko Le 03/01/2025 à 01h15


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: 5574

Le 03/01/2025 à 10h48
Salut,

On a pas forcément besoin d'utiliser le FCB. Ca dépend des usages et moyens.
Il y a deux méthodes pour traiter les fichiers avec Fusion-C


Voici un exemple de code pour ouvrir et lire un fichier texte qui utilise IO.H (sans FCB) :

Code C :
 
/* Text file reader for MSX using Fusion-C */
#define __SDK_BINTYPE__ DOS
#define __SDK_MSXDOS__ 1
#define __SDK_MSXVERSION__ 2
#define __SDK_SCC__ 0
#include "msx_fusion.h"
#include "io.h" 
#define BUFFER_SIZE 80   // Taille du buffer pour lire chaque ligne
int main(void) {
    // Variables pour la gestion du fichier
    char buffer[BUFFER_SIZE];  // Buffer pour stocker les lignes lues
    int fh;             // File handle
    int bytes_read;     // Nombre d'octets lus
    // Ouvre le fichier en mode lecture seule
    fh = Open("TEXTE.TXT", O_RDONLY);
    if (fh == -1) {
        Print("Erreur: impossible d'ouvrir le fichier \r\n");
        return 1;
    }
    // Lit et affiche le fichier ligne par ligne
    while((bytes_read = Read(fh, buffer, BUFFER_SIZE-1)) > 0) {
        buffer[bytes_read] = 0;  // Ajoute le caractère nul à la fin
        Print(buffer);
 
        // Si la ligne ne se termine pas par un retour chariot, en ajoute un
        if(buffer[bytes_read-1] != 'n') {
            Print("\r\n");
        }
    }
    // Ferme le fichier
    Close(fh);
    Print("\r\nAppuyez sur une touche pour quitter.");
    WaitKey();
 
    Exit(0);
}
 


Voici une méthode qui n'utilise pas IO.H, elle utilise les commandes de fichiers "basiques" intégrées directement dans msx-fusion.h, et donc FCB

Code C :
 
/* Text file reader for MSX using Fusion-C sans IO.H */
#define __SDK_BINTYPE__ DOS
#define __SDK_MSXDOS__ 1
#define __SDK_MSXVERSION__ 2
#define __SDK_SCC__ 0
#include "msx_fusion.h"
#include <string.h>
#define BUFFER_SIZE 80   // Taille du buffer pour lire chaque ligne
static FCB file; 
void FT_SetName( FCB *p_fcb, const char *p_name )  
{
  char i, j;
  memset( p_fcb, 0, sizeof(FCB) );
  for( i = 0; i < 11; i++ ) {
    p_fcb->name[i] = ' ';
  }
  for( i = 0; (i < 8) && (p_name[i] != 0) && (p_name[i] != '.'); i++ ) {
    p_fcb->name[i] =  p_name[i];
  }
  if( p_name[i] == '.' ) {
    i++;
    for( j = 0; (j < 3) && (p_name[i + j] != 0) && (p_name[i + j] != '.'); j++ ) {
      p_fcb->ext[j] =  p_name[i + j] ;
    }
  }
}
int main(void) {
    // Variables pour la gestion du fichier
    char buffer[BUFFER_SIZE];  // Buffer pour stocker les lignes lues
    int fh;             // File handle
    int bytes_read;     // Nombre d'octets lus
    // Ouvre le fichier en mode lecture seule
    FT_SetName( &file, "TEXTE.TXT" );
     if(FcbOpen( &file ) != FCB_SUCCESS) 
        {
               Print("Erreur: impossible d'ouvrir le fichier\r\n");
                return 1;
        }     
    // Lit et affiche le fichier ligne par ligne
    while((bytes_read = FcbRead(&file, buffer, BUFFER_SIZE-1)) > 0) {
        buffer[bytes_read] = 0;  // Ajoute le caractère nul à la fin
        Print(buffer);
 
        // Si la ligne ne se termine pas par un retour chariot, en ajoute un
        if(buffer[bytes_read-1] != '\n') {
            Print("\r\n");
        }
    }
    // Ferme le fichier
    FcbClose(&file);
    Print("\r\nAppuyez sur une touche pour quitter.");
    WaitKey();
 
    Exit(0);
}
 


La différence entre les 2 méthodes : un programme de 2000 octets dans le premier cas, 800 octets dans le second cas.
Si on veut juste ouvrir et fermer des fichiers, on utilisera pas IO.H qui est plus destiné à usage "pro", et surtout à un usage destiné à utiliser les fonctionnalités de MSX-DOS2


voici fichier texte:
texte.txt


voici un autre exemple de code pour lire et liste le répertorie d'un disque :


Code C :
 
#define __SDK_BINTYPE__ DOS
#define __SDK_MSXDOS__ 1
#define __SDK_MSXVERSION__ 2
#define __SDK_SCC__ 0
#include "msx_fusion.h"
#include "io.h"
#include <stdio.h>
char buffer[0xff];
char *result[30];
char n;
void main(void)
{
    // Print full directory
    FCBlist *FCB = FCBs();
    n=FindFirst("*.*",buffer,0);
    Cls();
    for(;!n;)
    {
      printf("%s nr",buffer);
      n=FindNext(buffer);
    }
}
 
Edité par ericb59 Le 03/01/2025 à 15h31


banniere-ericb59e
Site web    
ludojoey Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 03/01/2025 à 20h48
@aoineko et @ericb59 : merci pour votre aide.
Je vais tenter d'avancer avec tout cela et je n'hésiterai pas si j'ai encore des interrogations de newbie !
Edité par ludojoey Le 03/01/2025 à 22h29
   
ludojoey Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 21/12/2024 à 14h04

Messages: 33

Le 04/01/2025 à 12h38
Bon, le répits n'aura pas été long !

Je reviens avec une question sûrement idiote à propos du debuggage avec openMSX et MSXgl :

J'ai copié le script debugger_pvm.tcl dans le dossier share/scripts de openMSX.
J'ai inclus le module "debug" a la config de mon projet.
J'ai inclus debug.h
J'ai activé l'extension "debugdevice" de openMSX

Au départ, je fait un DEBUG_INIT()
puis, pour tester, DEBUG_LOG("Start debug");

Ca compile sans soucis.
Je lance mon truc avec openMSX via Catapult. ok.

Mais ou est-ce que je vois mon message de log ?
J'ai tenté la commande "set debugoutput stdout" (et autres noms) dans la console...mais rien..
J'ai beau chercher, je ne trouve rien..
J'ai l'impression que debugger_pvm.tcl ne se charge pas...
Mais dans ce cas, comment le charger via catapult ?

J'ai tenté de lancer openMsx directement (sans catapult), comme ceci :

Code :

.\openmsx.exe -script share\scripts\debugger_pvm.tcl -machine Canon_V-20_FR -ext Mitsubishi_ML-30DC_ML-30FD -ext debugdevice -diska C:\Users\ludoj\Documents\travailPerso2\MSX\MSXgl\projects\eminex\emul\dos1


Il semble que debugger_pvm.tcl se charge (si je met un nom de fichier inexistant, openmsx ne se lance pas).
Mais je ne suis pas plus avancé!

Quelque chose m'échappe totalement (encore, désolé !)





Edité par ludojoey Le 04/01/2025 à 19h20
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2947

Le 04/01/2025 à 19h37
Je pars du principe que tu as suivi le tuto pour la création d'un projet sur MSXgl. :)

Dans MSXgl, tu dois configurer la libraire pour l'émulateur que tu souhaites utiliser pour communiquer (malheureusement, ils n'utilisent pas tous le même système).
Tu dois éditer ton fichier de configuration de la librairie (msxgl_config.h) :

Code C :
 
//-----------------------------------------------------------------------------
// DEBUG
//-----------------------------------------------------------------------------
 
// Debugger options
// - DEBUG_DISABLE ................ No debug tool
// - DEBUG_EMULICIOUS ............. Debug features for Emulicious
// - DEBUG_OPENMSX ................ Debug features for openMSX using 'debugdevice' extension
// - DEBUG_OPENMSX_P .............. Debug features for openMSX using PVM script (tools/script/openMSX/debugger_pvm.tcl)
#define DEBUG_TOOL                    DEBUG_OPENMSX_P // <---- Change ici !
 
// Profiler options
// - PROFILE_DISABLE .............. No profile tool
// - PROFILE_OPENMSX_G ............ Profiler features for openMSX using Grauw script (tools/script/openMSX/profiler_grauw.tcl)
// - PROFILE_OPENMSX_S ............ Profiler features for openMSX using Salutte script (tools/script/openMSX/profiler_salutte.tcl)
#define PROFILE_TOOL                PROFILE_DISABLE
#define PROFILE_LEVEL                10
 


Ensuite, tu dois ajouter le module de Debug dans la liste des modules de ton projet.
Pour ça édite la configuration de ton projet (project_config.js) et ajoute "debug" dans la liste LibModules.

Par ex. :
Code JAVASCRIPT :
//-- List of library modules to build (array)
LibModules = [ "debug", "system", "bios", "vdp", "print", "input", "memory" ];


Maintenant tu peux utiliser toutes les fonctions qui commence par DEBUG dans https://aoineko.org/msxgl-doc/#File:debug.h

Pour tester dans openMSX, le plus simple c'est de configurer MSXgl pour qu'il démarre automatiquement l'émulateur à la fin du build.
Dans ce cas, openMSX sera ouvert avec toutes les options qui vont bien (et notamment le script TLC sera automatiquement chargé).

Pour ça, il faut changer quelques options dans la configuration de ton projet (project_config.js) :
Code JAVASCRIPT :
 
// Pour forcer l'au-démarrage de l'émulateur:
DoRun     = true;    //-- Start the program automatically at the end of the build (boolean)
 
// Pour indiquer l'emplacement de l'émulateur (c'est le nom du fichier à exécuter mais tu peux omettre le .EXE):
Emulator  = `c:/ton_chemin/openMSX/openmsx`; //-- Path to the emulator to launch the project (string)
 


Enfin, pour la question de savoir où c'est affiché dans openMSX... et bien j'en ai aucune idée depuis qu'ils ont changé leur interface. ^^
Je vais regarder... Edité par aoineko Le 04/01/2025 à 21h54


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