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 : Carl, Papy.G, fneck

Répondre
Linzino
Messages : 22
Enregistré le : 26 août 2017 02:40

CROSS CHASE compilé avec CMOC pour les Thomsons?

Message par Linzino » 27 janv. 2018 18:00

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 : 4081
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ » 27 janv. 2018 21:48

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) Vu 707 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+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Linzino
Messages : 22
Enregistré le : 26 août 2017 02:40

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

Message par Linzino » 28 janv. 2018 16:54

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 : 22
Enregistré le : 26 août 2017 02:40

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

Message par Linzino » 28 janv. 2018 16:57

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?

Avatar du membre
OlivierP
Messages : 644
Enregistré le : 21 sept. 2009 15:50
Localisation : IDF

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

Message par OlivierP » 28 janv. 2018 17:10

Envoyé de mon pécé

Fool-DupleX
Messages : 993
Enregistré le : 06 avr. 2009 12:07

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

Message par Fool-DupleX » 28 janv. 2018 18:42

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 : 993
Enregistré le : 06 avr. 2009 12:07

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

Message par Fool-DupleX » 28 janv. 2018 21:32

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 : 22
Enregistré le : 26 août 2017 02:40

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

Message par Linzino » 29 janv. 2018 08:41

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 : 993
Enregistré le : 06 avr. 2009 12:07

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

Message par Fool-DupleX » 29 janv. 2018 11:43

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 : 4081
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ » 29 janv. 2018 22:43

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+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Linzino
Messages : 22
Enregistré le : 26 août 2017 02:40

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

Message par Linzino » 31 janv. 2018 00:40

@ 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 : 4081
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ » 31 janv. 2018 11:56

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+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Fool-DupleX
Messages : 993
Enregistré le : 06 avr. 2009 12:07

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

Message par Fool-DupleX » 31 janv. 2018 14:36

Les deux, comme dans le code source que j'ai posté plus haut.

Répondre