CROSS CHASE compilé avec CMOC pour les Thomsons?

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Linzino
Messages : 69
Inscription : 26 août 2017 02:40

CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino »

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
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par __sam__ »

Linzino a écrit : 27 janv. 2018 18:00 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.
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.
Sans titre.png
Sans titre.png (37.35 Kio) Consulté 5549 fois
2. Comment implementer input (lire l'état du clavier) et output (affichage caractères en mode texte)?
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.)
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
Linzino
Messages : 69
Inscription : 26 août 2017 02:40

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino »

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
Linzino
Messages : 69
Inscription : 26 août 2017 02:40

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino »

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?
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Fool-DupleX »

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 :

Code : Tout sélectionner

putc  ldb   #'A     ; charger le registre B avec le caractère à afficher, ici "A"
      swi 
      fcb   $02
Sur TO :

Code : Tout sélectionner

putc  ldb   #'A     ; charger le registre B avec le caractère à afficher, ici "A"
      jsr   $E803 
Pour un "Hello world!", ça devrait suffire :wink:
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Fool-DupleX »

Tentative de code pour ton putchar (putchar_a.asm) :

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
Secoué sur un coin de table, à tester.
Linzino
Messages : 69
Inscription : 26 août 2017 02:40

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino »

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.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Fool-DupleX »

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).
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par __sam__ »

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).
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.)

[EDIT] je me réponds à moi-même. CMOC est >><<, 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
Linzino
Messages : 69
Inscription : 26 août 2017 02:40

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino »

@ 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.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par __sam__ »

Linzino a écrit : 31 janv. 2018 00:40 Il faudrait implémenter au moins kbhit AVEC cgetc ou getk.
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
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Fool-DupleX »

Les deux, comme dans le code source que j'ai posté plus haut.
Linzino
Messages : 69
Inscription : 26 août 2017 02:40

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino »

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
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par jasz »

Le fcb. sert à donner une indication sur la sous-routine moniteur à exécuter. Ici, SWI 02 correspond à putc$()
Répondre