CROSS CHASE compilé avec CMOC pour les Thomsons?
Modérateurs : Papy.G, fneck, Carl
CROSS CHASE compilé avec CMOC pour les Thomsons?
Salut tout le monde!
Depuis 8 mois je travaille sur un projet titanique: écrire un jeu pour TOUS les ordis et consoles 8-bit des années 70 et 80:
https://github.com/Fabrizio-Caruso/CROSS-CHASE
Mon jeu est écrit en C et je le compile avec plusieurs cross-compilateurs (CC65, zsdcc, sccz80, cmoc, wincmoc, etc.) pour pouvoir couvrir tous les systèmes.
Pour les systèmes basés sur la 6809 j'utilise CMOC et WinCMOC qui marchent très bien pour les Dragons et CoCos.
Pour les Thomsons je ne trouve pas un compilateur spécifique (GCC6809 n'est plus développé ) mais on pourrait essayer avec CMOC qui devrait produire
un binaire compatible (si je re-implemente tout ce qu'il faut pour l'input et l'output).
Donc j'ai deux problèmes:
1. Comment injecter un binaire dans la mémoire vive? Il suffirait un émulateur qui me permet de faire cela mais je ne trouve pas cette simple option.
2. Comment implementer input (lire l'état du clavier) et output (affichage caractères en mode texte)?
Fabrizio Caruso
Depuis 8 mois je travaille sur un projet titanique: écrire un jeu pour TOUS les ordis et consoles 8-bit des années 70 et 80:
https://github.com/Fabrizio-Caruso/CROSS-CHASE
Mon jeu est écrit en C et je le compile avec plusieurs cross-compilateurs (CC65, zsdcc, sccz80, cmoc, wincmoc, etc.) pour pouvoir couvrir tous les systèmes.
Pour les systèmes basés sur la 6809 j'utilise CMOC et WinCMOC qui marchent très bien pour les Dragons et CoCos.
Pour les Thomsons je ne trouve pas un compilateur spécifique (GCC6809 n'est plus développé ) mais on pourrait essayer avec CMOC qui devrait produire
un binaire compatible (si je re-implemente tout ce qu'il faut pour l'input et l'output).
Donc j'ai deux problèmes:
1. Comment injecter un binaire dans la mémoire vive? Il suffirait un émulateur qui me permet de faire cela mais je ne trouve pas cette simple option.
2. Comment implementer input (lire l'état du clavier) et output (affichage caractères en mode texte)?
Fabrizio Caruso
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Il faut ouvrir le débuggeur (F9) et utiliser le bouton et les champs en rouge dans la photo pour choisir le fichier binaire (brut!) et son adresse d'implantation.
Si le compilateur permet de définir ses propres routines en assembleur, il est facile de faire une émulation de getc() et putc() (ainsi que des variantes) vers les routines de lecture de d'affichage de caractères du moniteur en ROM. Avec cela, tu pourra faire ce que tu désires, et même plus car les thomson supportent une sous-partie des commandes ANSI permettant via l'affichage de caractères de déplacer le curseur à l'écran, changer la couleur du texte ou du tour de l'écran, etc. Les détails sont indiqués dans la doc technique du TO8/TO9/TO9+ (et du TO7 aussi je crois.)2. Comment implementer input (lire l'état du clavier) et output (affichage caractères en mode texte)?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Merci! J'ai reussi à compiler du C pour le Mo5!!
CMOC permet de mettre de l'Assembly inline.
Je ne connais pas l'Assembly et je demenderais de l'aide pour implementer getc() et putc() avec des appels aux routines rom.
Fabrizio
CMOC permet de mettre de l'Assembly inline.
Je ne connais pas l'Assembly et je demenderais de l'aide pour implementer getc() et putc() avec des appels aux routines rom.
Fabrizio
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Pour simplicité et pour pouvoir loader le code dans les vrais ordis, il faudrait convertir le binaire dans un format plus potable comme k7 ou wav.
Je ne sais pas comment le faire...
Est-ce qu'il y a des outils pour ça?
Je ne sais pas comment le faire...
Est-ce qu'il y a des outils pour ça?
-
- Messages : 2341
- Inscription : 06 avr. 2009 12:07
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Ton adaptation de CMOC m'intéresse beaucoup, d'autant que CMOC correspond a un projet que j'envisageais de faire il y a 6 ou 7 ans en arrière. Je peux filer un coup de main pour adapter. En attendant, je te recommande la lecture de ce livre, qui explique chaque routine du moniteur en détails, chapitre 4 et suivants : Passez facilement du BASIC au langage machine
Voici par exemple sur MO, l'équivalent de putc :
Sur TO :
Pour un "Hello world!", ça devrait suffire
Voici par exemple sur MO, l'équivalent de putc :
Code : Tout sélectionner
putc ldb #'A ; charger le registre B avec le caractère à afficher, ici "A"
swi
fcb $02
Code : Tout sélectionner
putc ldb #'A ; charger le registre B avec le caractère à afficher, ici "A"
jsr $E803
-
- Messages : 2341
- Inscription : 06 avr. 2009 12:07
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Tentative de code pour ton putchar (putchar_a.asm) :
Secoué sur un coin de table, à tester.
Code : Tout sélectionner
SECTION code
_putchar EXPORT
putchar_a EXPORT
* void putchar(byte c)
*
_putchar
ldb 3,s
* putchar_a should be called by the other routines (printf, etc.)
* whenever the character to be printed might be a newline.
*
putchar_a
IFDEF _TO
jmp $e803
ENDC
IFDEF _MO
swi
fcb $82
ENDC
ENDSECTION
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Merci! Je ferai des tests avec l'Assembly inline de CMOC.
Le but c'est d'avoir l'equivalent des fonctions conio.h cgetc (pour lire l'état actuel du clavier) et gotoxy et cputc pour afficher un caractère sur l'écran.
Le but c'est d'avoir l'equivalent des fonctions conio.h cgetc (pour lire l'état actuel du clavier) et gotoxy et cputc pour afficher un caractère sur l'écran.
-
- Messages : 2341
- Inscription : 06 avr. 2009 12:07
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Il y a deux routines moniteur différentes pour afficher un caractère. La raison est la rapidité. La deuxième routine est capable d'interpréter un sous-ensemble du code ANSI, elle est donc plus lente. Par contre la première routine, rapide, a le gotoxy intégré. Pour cgetc, les routines disponibles (deux) n'attendent pas la pression d'une touche, il faudra sans doute adapter légèrement.
J'ai vu qu'il y a toute une stdlib dans cmoc qu'il faudrait adapter aux Thomson. Le résultat pourrait être vraiment sympa, car on a là un vrai compilateur C quasi-complet et très léger, contrairement à d'autres (incomplet pour Small-C, trop lourd et mal optimisé pour gcc6809).
J'ai vu qu'il y a toute une stdlib dans cmoc qu'il faudrait adapter aux Thomson. Le résultat pourrait être vraiment sympa, car on a là un vrai compilateur C quasi-complet et très léger, contrairement à d'autres (incomplet pour Small-C, trop lourd et mal optimisé pour gcc6809).
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Je plussoie! Où est-ce qu'on trouve ce cmoc ? Je me ferais un plaisir de regarder le portage de la stdlib (car si en plus ce compilo C est capable de gérer la mémoire paginée de façon transparente ce sera tout bénéf.)Fool-DupleX a écrit : ↑29 janv. 2018 11:43 J'ai vu qu'il y a toute une stdlib dans cmoc qu'il faudrait adapter aux Thomson. Le résultat pourrait être vraiment sympa, car on a là un vrai compilateur C quasi-complet et très léger, contrairement à d'autres (incomplet pour Small-C, trop lourd et mal optimisé pour gcc6809).
[EDIT] je me réponds à moi-même. CMOC est >>là <<, et concernant la mémoire paginée, c'est niet, aucun support.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
@ Fool-DupleX, @all
cgetc attend la pression MAIS il est utilisé avec kbhit() qui est TRUE si une touche a été pressé.
Donc cgetc() a du sense AVEC kbhit()
getk par contre n'attends aucune pression.
Il faudrait implémenter au moins kbhit AVEC cgetc ou getk.
cgetc attend la pression MAIS il est utilisé avec kbhit() qui est TRUE si une touche a été pressé.
Donc cgetc() a du sense AVEC kbhit()
getk par contre n'attends aucune pression.
Il faudrait implémenter au moins kbhit AVEC cgetc ou getk.
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Pour TO ou MO ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
-
- Messages : 2341
- Inscription : 06 avr. 2009 12:07
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Les deux, comme dans le code source que j'ai posté plus haut.
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Salut Full-Duplex
J'ai du mal à comprendre le code de la routine pour MO.
Je n'ai pas bcp de competences en Assembleur.
Pourquoi fcb? J'aurais attendu un jsr.
Comment je peux implementer un gotoxy(x,y) pour deplacer le curseur?
Fabrizio
J'ai du mal à comprendre le code de la routine pour MO.
Je n'ai pas bcp de competences en Assembleur.
Pourquoi fcb? J'aurais attendu un jsr.
Comment je peux implementer un gotoxy(x,y) pour deplacer le curseur?
Fabrizio
Re: CROSS CHASE compilé avec CMOC pour les Thomsons?
Le fcb. sert à donner une indication sur la sous-routine moniteur à exécuter. Ici, SWI 02 correspond à putc$()