MSX Village forum

La Place des Développeurs Cross developpement : Tests rapides + debug

majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 15/10/2015 à 19h01
Salut,

Je commence mon apprentissage du MSX pour coder quelques joyeusetés,

j'aimerais savoir quel est le moyen le plus rapide pour tester son code sous émulateur après avoir généré le binaire ? (charger un snapshot, un DSK...etc.)

J'aimerais mettre en place toute une toolchain invoquée par un seul appui de touche depuis mon editeur de texte favori comme je le fais pour les autres plateformes rétro.

J'aimerais aussi, si possible, avoir la possibilité d'importer automatiquement des breakpoints dans l'émulateur à partir par exemple de labels spécifiques dans mon source (ex: brk_monlabel: ...).

J'ai crée tous les outils qui me permettent déjà de faire ça avec les émulateurs C64,Spectrum,Amstrad.

J'aimerais juste savoir quel serait le format de fichier le plus adapté à mes besoins à charger dans l'émulateur ?

Et question subsidiaire : OpenMSX ou BlueMSX ? :p

Merci


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10358

Le 15/10/2015 à 19h31
BlueMSX est plus rapide a prendre en main coté MSX mais le coté debug reste flou pour moi malgré la doc
http://www.msxblue.com/manual/debugger_c.htm

OpenMSX fonctionne surtout avec des commandes spécifiques et j'ai pas accroché son loader

quel assembleur va tu utiliser ? sur PC ou sur MSX ?

diskmanager permet de créer des disquettes rapidement a partir des fichiers sur PC

pour le format de fichier tu as le choix .COM executable sous dos .BIN fichier binaire .GRP fichier écran


:noel
Site web    
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 15/10/2015 à 19h37
Salut Jipé,

J'utilise SJASM+ sur PC,

Pour lancer un fichier .BIN, je crois avoir vu qu'il faut une entête à ajouter au fichier non ? (style: adresse de chargement, adresse d'exécution) ?


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10358

Le 15/10/2015 à 19h42
en effet voici le modéle d'un certain slayerman qui se reconnaitra

defb #FE
defw Start
defw End
defw Start

org #C800

Start:


End:


:noel
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 16/10/2015 à 01h25
OpenMSX et BlueMSX on chacun ses avantages et ses inconvénients mais le debugger de BlueMSX est plus simple à utiliser. OpenMSX émule mieux le hardware.



majikeyric :


j'aimerais savoir quel est le moyen le plus rapide pour tester son code sous émulateur après avoir généré le binaire ? (charger un snapshot, un DSK...etc.)


Mettre son fichier dans un DSK pour le tester peut devenir gonglant à la longue. A part ça, peu importe le format. Si c'est un fichier COM, on met un breackpoint à 0100h, si c'est binaire, on met un breackpoint à Start (voir l'entête donnée par Jipé au dessus), Si c'est un ROM, l'adresse de lancement est indiquée dans l'entête derrière le 41 42.



majikeyric :
J'aimerais aussi, si possible, avoir la possibilité d'importer automatiquement des breakpoints dans l'émulateur à partir par exemple de labels spécifiques dans mon source (ex: brk_monlabel: ...).


Non, le debugger de blueMSX est assez rudimentaire (mais c'est celui que j'utilise tout de même). Edité par GDX Le 16/10/2015 à 08h56
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 16/10/2015 à 08h32
majikeyric :
J'aimerais aussi, si possible, avoir la possibilité d'importer automatiquement des breakpoints dans l'émulateur à partir par exemple de labels spécifiques dans mon source (ex: brk_monlabel: ...)


Avec BlueMSX, pas dans les labels, mais par contre, il suffit d'insérer une séquence de 2 instructions (je ne sais plus la première, mais la 2e c'est "ld b,b") pour générer un breakpoint. Donc tu peux aussi créer une macro dans ton assembleur qui va générer un breakpoint.


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

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 16/10/2015 à 09h32
Il existe un debuggeur "externe" à OpenMSX (http://openmsx.sourceforge.net/temp/openmsx-debugger-win32-bin-snapshot.zip) qui est plutôt bien.

Il suffit de lancer OpenMSX puis de faire "connect" dans le debuggeur et les 2 applis communiquent entre elles comme si le debuggeur était intégré à l'émulateur.

Je suis en train d'essayer de mettre en place la solution suivante pour mes tests:
-modifier un savestate OpenMSX (d'un MSX1 au prompt BASIC) pour y injecter en RAM mon code à tester et modifier le PC pour sauter à l'adresse d'exécution.
-balayer le fichier des symbols ASM à la recherche de labels : brk_.... et génération d'un fichier TCL avec les commandes 'set breakpoint...."

Et donc normalement une fois tout ça fait, il suffira d'appeler l'émulateur avec en paramètre les fichiers savestate et TCL pour tester de suite.


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 16/10/2015 à 10h38
Pas mal comme méthode, c'est original.
Si cela fonctionne comme tu le veux, partage ta méthode, ce sera intéressant pour tout le monde.

Moi ce que je fait, c'est que je génère systématiquement une ROM (un format cartouche, donc). Il suffit alors de monter l'image de la cartouche dans BlueMSX (c'est 2 clics de souris ...) pour tester le programme.


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

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 16/10/2015 à 19h15
Je n'arrive pas à faire ce que je veux avec les savestates..grrr...

Quel est le format de ta ROM ?
elle ne peut faire que 16k ? et commencer en $8000 ?

Par contre je peux te faire éviter tes 2 clics de souris ;-) Edité par majikeyric Le 16/10/2015 à 19h16


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10358

Le 16/10/2015 à 20h26
les roms peuvent avoir 32k et s'installent entre 4000H et BFFFH
ensuite il y a des megaroms qui ont des pages mappées dans la même zone par bank 8k ou 16k

moi je n'arrive pas a me balader dans les slots du MSX avec BlueMSX donc je préfére utiliser un vrai

il existe des roms 8K 16K 32K 64K
et des megaroms 64K 128k 256k 512k 1024k 2048k


:noel
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 17/10/2015 à 00h55
majikeyric :
Quel est le format de ta ROM ?


Une ROM fait minimum 16Ko (la taille d'une plage mémoire d'un Slot). Il existe des ROM plus petite mais ces ROM se refleteront dans leur plage mémoire. Par exemple, une ROM de 8Ko aura son double pour faire 16Ko. (Les reflets sont causés par le hardware. Les programmeurs n'ont pas à s'en préoccuper.)



Les ROM en cartouche ont une entête de 16 octets dont le format est :



"41h, 42h, ADRS1, ADRS2, ADRS3, ADRS4, 0000h, 0000h, 0000h". Les 6 derniers octets sont en fait des octets réservés inutilisés. Les adresses inutilisés doivent être mises à 0000h.



Au démarrage, le MSX cherche les deux premiers octets 41h et 42h dans chacune des plages mémoire (0000h, 4000h, 8000h et C000h) de chaque Slot. Et lance, la routine de la ROM à l'adresse indiquée dans entête lorsqu'il en trouve une.

ADRS4 est une adresse indiquant le début d'un programme Basic en ROM. Pour commencer utilise seulement ADRS1. ADRS2, ADRS3 et ADRS4 sont pour les utilisateurs avancés.



Voici deux exemple de code :



Code pour créer une ROM de 16Ko (.ROM) :

Code ASM :
    db    041h,042h    
    dw    prgStart
    dw    0,0,0,0,0,0
 
    org    04000h
 
prgStart:
 
; Insère ton programme ici.
 
prgEnd:
    ds    08000h-prgEnd




Code pour créer une ROM de 32Ko (.ROM) :

Code ASM :
    db    041h,042h    
    dw    prgStart-020h
    dw    0,0,0,0,0,0
 
    org    04000h
 
;-- Routine de sélection de la ROM sur la plage mémoire de 8000h à BFFFh
    db    0CDh,038h,001h,00Fh,00Fh,0E6h,003h,04Fh
    db    006h,000h,021h,0C1h,0FCh,009h,07Eh,0E6h
    db    080h,0B1h,04Fh,023h,023h,023h,023h,07Eh
    db    0E6h,00Ch,0B1h,026h,080h,0CDh,024h,000h
;--
prgStart:
 
; Insère ton programme ici.
 
prgEnd:
    ds    0C000h-prgEnd
Edité par GDX Le 17/10/2015 à 01h33
   
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 17/10/2015 à 09h20
Salut majikeyric,

Tes travaux sont très intéressants, je pense qu'un fois la technique au point il faudrait constituer un kit de développement regroupant les outils et les informations pour démarrer un atelier rapidement sur tout ordi PC.

Comme tu as du le voir, certains d'entre-nous sur le forum cherchent à réaliser des jeux que l'on pourra ensuite placer sur cartouche.

Est-ce que tu utilises un outil de gestion de configuration pour conserver les différentes versions de programme ? Un outil de gestion de conf permet également de travailler en équipe.

Juste en passant, Blue MSX permet, dans son debugger, de charger un fichier de symboles (.SYM) généré par l'assembleur (AsMSX par exemple).
   
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 17/10/2015 à 10h12
Merci pour vos infos sur le format des ROMs,
GDX tu devrais le rajouter à ton excellent document, cela en ferait encore plus le doc ultime de DEV MSX ;)

@Sylvain: non je n'utilise pas de gestionnaire de conf, Github ne permet pas de faire cela ?

Je suis en train de finaliser mon environnement de dev msx qui permettra en appuyant sur UNE seule de touche dans mon editeur de texte favori :

d'assembler
ouvrir BlueMSX
charger la ROM généreé
charger un fichier de symbols
et charger les points d'arrêts

Quand ça sera au point, je partagerai tout ça.


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 17/10/2015 à 10h44
majikeyric :
Merci pour vos infos sur le format des ROMs...



Quand ça sera au point, je partagerai tout ça.




Le partage fait survivre le standard :)


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 553

Le 17/10/2015 à 11h17
@GDX

les "org"s sont mal placé!

Code pour créer une ROM de 16Ko (.ROM) :
Code ASM :
org04000h
 
db041h,042h
dwprgStart
dw0,0,0,0,0,0
 
prgStart:
 
; Insère ton programme ici.
 
prgEnd:
ds08000h-prgEnd


Code pour créer une ROM de 32Ko (.ROM) :
Code ASM :
org04000h
 
db041h,042h
dwprgStart-020h
dw0,0,0,0,0,0
 
 
;-- Routine de sélection de la ROM sur la plage mémoire de 8000h à BFFFh
db0CDh,038h,001h,00Fh,00Fh,0E6h,003h,04Fh
db006h,000h,021h,0C1h,0FCh,009h,07Eh,0E6h
db080h,0B1h,04Fh,023h,023h,023h,023h,07Eh
db0E6h,00Ch,0B1h,026h,080h,0CDh,024h,000h
;--
prgStart:
 
; Insère ton programme ici.
 
prgEnd:
ds0C000h-prgEnd


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...
:)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie