[Thomson to7-70] Début de la programmation en assembleur

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
wietze
Messages : 14
Inscription : 18 juil. 2021 10:56

[Thomson to7-70] Début de la programmation en assembleur

Message par wietze »

Salut les gars,

Je vous prie de m'excuser par avance, car ma langue maternelle n'est pas le français, et j'interagis avec ce forum principalement en utilisant un traducteur. C'est d'ailleurs l'une des raisons de ce post, car j'ai du mal à trouver les bonnes informations en ce moment !

J'ai récemment obtenu un thomson to7-70, et je veux vraiment essayer de coder pour lui. J'ai une certaine expérience du codage assembleur avec les cpus 68000 et 8080, et j'espère ajouter le 6809 sur Thomson à cette expérience !

Mon objectif initial est d'assembler quelques sources d'exemple, et d'être en mesure de confirmer leur fonctionnement, afin que je puisse vérifier ma chaîne d'outils (actuellement en utilisant l'assembleur c6809). Pour ce faire, je cherche un fichier d'exemple prêt à assembler que je pourrais ensuite essayer de charger dans l'émulateur DCMOTO sous to7-70.

Mes tentatives jusqu'à présent pour charger un fichier assemblé ;
- en utilisant Load binary file... dans DCMOTO
- en utilisant DCFDUtil pour créer un disque et y placer le fichier binaire, puis en utilisant MLOAD "FILE.BIN",,R ou MLOAD "FILE.BIN",8000 suivi de exec &8000 ont échoué.

Quelqu'un aurait-il l'amabilité de me donner un coup de main ici afin que je puisse avoir une base sur laquelle je peux vérifier l'ensemble des étapes pour aller du fichier d'assemblage à son exécution sur l'émulateur (pour ensuite passer de l'émulateur au matériel plus tard ;).

Cordialement,
Wietze

P.s. J'ai essayé de trouver des introductions et des tutoriels pour cela, mais j'ai du mal à chercher en français :(
Asic512
Messages : 90
Inscription : 30 juin 2019 21:13

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Asic512 »

Pour charger un fichier binaire il faut utiliser loadm (et non mload).

Pour des exemples et la question de l'adresse de l’exécution, on peut consulter la discussion récente :
http://www.logicielsmoto.com/phpBB/view ... ?f=3&t=649
Asic512
Fool-DupleX
Messages : 1405
Inscription : 06 avr. 2009 12:07

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Fool-DupleX »

Bienvenue dans le monde du 6809 sur Thomson. Il y a un tuto ici qui concerne le MO5, mais dans les grandes lignes c'est la même chose : https://www.fxjavadevblog.fr/6809-thoms ... bly-linux/

Le fichier .BIN a un format (un peu comme le PE ou le ELF, mais très rudimentaire par comparaison) et donc le charger directement en mémoire avec l'émulateur ne fonctionnera pas. Il faut passer par l'instruction LOADM en BASIC.

Le paramètre ,,R ne fonctionne que si le fichier .BIN contient le point d'entrée et ce n'est pas toujours le cas. Il vaut souvent mieux faire un EXEC &hadresse_hexa, si on connait le point d'entrée, après le LOADM.

Le helloworld présenté dans le tuto est pour MO5. Voici une version pour TO7-70 vite grattée sur un coin de table :

Code : Tout sélectionner

PUTCH   EQU $E803

        ORG $D000

DEBUT
        LDX #MESSAGE
AFFICHE		
        LDB ,X+
        BEQ FIN
        JSR PUTCH 
        BRA AFFICHE

FIN
        RTS

MESSAGE
    FCS "HELLO LES THOMSONISTES !",0
    END
Pour le charger depuis une disquette .fd, en BASIC :

Code : Tout sélectionner

CLEAR,&HCFFF
LOADM"HELLO.BIN"
EXEC&HD000
L'instruction CLEAR empêche le BASIC d'utiliser la mémoire après $CFFF pour lui-même, i.e. ça réserve la RAM entre $D000 et $EFFF pour ton propre code.
Dernière modification par Fool-DupleX le 21 juil. 2021 10:19, modifié 6 fois.
Daniel
Messages : 14159
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Daniel »

Bonjour Wietze,
Le traducteur est excellent, on pourrait croire que le texte a été écrit par un français.

Je laisse les autres programmeurs proposer un exemple, mais avant il faut connaître une petite subtilité :
Le fichier binaire généré par l'assembleur peut être "brut", ou comporter une en-tête au format Thomson (5 octets) et une fin de fichier (5 octets).

Si le fichier est brut, on peut l'importer dans l'émulateur dcmoto avec la fonction "Charger un fichier binaire" de l'outil de mise au point (debugger). Il faut préciser l'adresse de chargement. L'adresse de fin peut être mise à $FFFF. Après chargement, on peut exécuter le programme avec la fonction EXEC &Hxxxx (xxxx est l'adresse d'exécution).

Si le fichier comporte une en-tête et une fin de fichier au format Thomson, on peut utiliser dcfdutil pour importer le fichier dans une disquette au format .fd. Il faut mettre le fichier seul dans un répertoire, et utiliser la fonction "importer" de dcfdutil. Il faut ensuite charger la disquette dans dcmoto et utiliser la commande LOADM"nom-de-fichier",,R pour charger le programme et l'exécuter. Si l'adresse d'exécution est contenue dans le segment "fin de fichier" il n'est pas nécessaire de la préciser.

Autre point à signaler :

- La cartouche BASIC 1.0 ne contient pas le DOS. Pour pouvoir accéder aux fichiers d'une disquette, il faut d'abord charger le DOS en utilisant une disquette DOS. Cette disquette est bootable, le chargement du DOS est automatique dès qu'on lance le BASIC. Il est conseillé d'enregistrer les programmes dans une disquette DOS, pour que le DOS soit toujours chargé au démarrage du BASIC.

- La cartouche BASIC 128 contient le DOS en ROM. Il n'est donc pas nécessaire d'utiliser une disquette DOS, il est toujours disponible.
Daniel
L'obstacle augmente mon ardeur.
wietze
Messages : 14
Inscription : 18 juil. 2021 10:56

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par wietze »

Merci les gars ! Il semble que j'ai manqué un appel de retour à BASIC dans mon code original. J'ai obtenu une sortie sur l'écran maintenant, qui confirme l'assemblage et le chargement des fichiers correctement. Et je vois maintenant que le tutoriel lié est exactement le chemin que j'ai suivi aussi, cool !

Je regarderai la documentation plus en détail dans la journée ! Je pense que j'ai surtout besoin de comprendre comment on accède à l'écran et comment la mise en page graphique est faite.

Une question pour mon flux de travail, je cherche des programmes portables en ligne de commande pour générer des images de disque à partir de fichiers .BIN (ou alternativement générer des fichiers .SAP à partir de fichiers .BIN).
J'utilise OSX, et je ne suis pas en mesure de compiler saptools-2.0 en raison de la dépendance à l'égard des en-têtes de disquettes linux que OSX n'a pas ; connaissez-vous des alternatives ?

Merci pour l'aide apportée jusqu'à présent !
Fool-DupleX
Messages : 1405
Inscription : 06 avr. 2009 12:07

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Fool-DupleX »

Tu devrais, si tu as le courage, lire ce livre : http://dcmoto.free.fr/documentation/pas ... index.html

C'est une vraie référence, facile d'accès, avec une montée progressive de la difficulté.

Pour la mise en page graphique : deux pages de 8 Ko (8000 octets pour être précis) superposées à l'adresse $0000. Une page contient la forme monochrome, une page contient la couleur. 1 bit = 1 pixel pour la forme. 4 bits pour la couleur (16 couleurs fixes) de fond ou de forme.

Tu peux essayer POKE adresse, valeur ou adresse = $0000-$1F3F et valeur = 0..255 en BASIC pour observer l'effet à l'écran.

Pour passer de la page forme à la page couleur, il faut commuter. Le plus simple est d'utiliser l'appel système ad hoc. Regarde les pages 33-45 du livre ci-dessus.

Il m'arrive d'utiliser sapfs à l'occasion sous Windows, je l'ai compilé et je n'ai pas le souvenir d'une dépendance à Linux ?
wietze
Messages : 14
Inscription : 18 juil. 2021 10:56

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par wietze »

Salut les gars,

merci pour les conseils et les indications. J'ai téléchargé le document et je le parcours lentement. J'ai également reçu de l'aide de p0ke et j'utilise son script pour générer des images de disquettes à partir des binaires que je crée.

J'ai une question concernant les images de disquettes. J'ai cru comprendre que l'on pouvait ajouter un `AUTOEXEC.BAT' ou autre. Quelqu'un pourrait-il m'indiquer comment faire pour qu'une disquette démarre automatiquement le programme binaire ? J'aimerais faire en sorte que mon processus de construction produise une disquette prête à démarrer.

J'ai regardé certains fichiers de versions de démonstration (comme Thom-cat), mais il semble que le fichier AUTO soit une combinaison de texte et de binaire, et je n'ai pas encore trouvé comment faire un tel fichier.

Salutations,
Wietze
Daniel
Messages : 14159
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Daniel »

Il y a deux façons simples de démarrer automatiquement un programme binaire sur disquette :

1) AJOUTER A LA DISQUETTE UN PROGRAMME BASIC DONT LE NOM EST "AUTO.BAT"
Exemple :

Code : Tout sélectionner

10 CLEAR,&Hxxxx
20 LOADM"filename",,R  
2) RENDRE LA DISQUETTE "BOOTABLE"
Le secteur 1 de la piste 0 doit contenir un programme assembleur qui charge le programme binaire et lance l'exécution. Les 128 premiers octets du secteurs doivent être codés spécialement, avec une checksum dans l'octet 127.

Dans les deux cas, on peut créer le fichier .fd avec un programme externe, par exemple en utilisant la fonction "importer" de dcfdutil, ou utiliser l'émulateur dcmoto.
Avec dcmoto les programmes BASIC peuvent être entrés en mémoire avec la fonction "Simuler le clavier" et sauvés par SAVE"filename".
Les programmes binaires peuvent être entrés en mémoire avec la fonction "Charger un fichier binaire" de l'outil de mise au point et sauvés par SAVEM"filename",a1,a2,a3
Daniel
L'obstacle augmente mon ardeur.
Fool-DupleX
Messages : 1405
Inscription : 06 avr. 2009 12:07

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Fool-DupleX »

A noter qu'avec le BASIC 1.0, avoir un programme BASIC nommé AUTO.BAT ne suffit pas, il faut (bien évidemment, j'ai envie de dire), que la disquette contiennent le DOS BASIC. Avec BASIC 128, le fichier AUTO.BAT suffit.

Et pire que cela, sans cartouche proposant la possibilité de booter, impossible de booter sur disquette, ce que j'ai toujours trouvé un peu dommage. Mais il n'y avait plus de place dans la ROM pour ça, je suppose.
wietze
Messages : 14
Inscription : 18 juil. 2021 10:56

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par wietze »

Salut les gars,

J'ai un peu touché les eaux avec la programmation du Thomson, et j'ai obtenu un code initial ! C'est une petite machine amusante, mais il semble que je vais devoir faire beaucoup d'attention pour la faire fonctionner rapidement :)

Pour cela, je cherche à chronométrer l'exécution de mon code, et je me demandais si le Thomson a une interruption programmable (de sorte qu'il peut par exemple exécuter un compteur, ou dans le futur, appeler le pilote de musique à un rythme régulier).

Jusqu'à présent, j'ai trouvé un vecteur d'interruption à $e7c6-$e7c7, mais cela ne fonctionne pas aussi simplement que de mettre l'adresse de mon propre vecteur là. Je serais très heureux si l'un d'entre vous pouvait élaborer sur ce sujet ou m'indiquer des ressources !

En plus de cela, j'ai cherché des packers ; jusqu'à présent j'ai trouvé exopacker (depacker par Puls, sympa :)). Connaissez-vous d'autres emballeurs ?

Merci encore !
Wietze
__sam__
Messages : 6212
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par __sam__ »

$E7C6/$E7C7 c'est le compteur du timer. La gestion d'une interruption timer est décrite dans "'le manuel technique des TO9/TO8/TO9+" pages 225-226
image_2021-07-29_192013.png
image_2021-07-29_192013.png (136.61 Kio) Consulté 526 fois
image_2021-07-29_192036.png
image_2021-07-29_192036.png (86.46 Kio) Consulté 526 fois
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
wietze
Messages : 14
Inscription : 18 juil. 2021 10:56

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par wietze »

Salut les gars,

un collègue français m'a indiqué ce fil de discussion : https://forum.system-cfg.com/viewtopic. ... c87#p67759

Merci pour la réponse et votre exemple de code ___sat___ !

Je vous remercie,
WIetze
wietze
Messages : 14
Inscription : 18 juil. 2021 10:56

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par wietze »

Salut les gars,

Je voulais valider la chose suivante ; est-ce que le refreshrate (vblank) du to7-70 est de 50 hz ? Et si la machine est cadencée à 1mhz, cela signifie-t-il qu'elle a 20000 cycles par image ? Avez-vous des cycles précis par vblank pour moi ?

Cordialement,
Wietze !
__sam__
Messages : 6212
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par __sam__ »

Oui 20ms environ. La valeur exacte est donnée dans le manuel technique des TO8/TO9/TO9+ (p49): en SECAM tu as 312 lignes de 64µs, soit 19 968 cycles pour afficher une image.
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
Avatar de l’utilisateur
Kristof
Messages : 112
Inscription : 08 mars 2021 10:44
Localisation : Narbonne (11)
Contact :

Re: [Thomson to7-70] Début de la programmation en assembleur

Message par Kristof »

Super pour les infos, merci, j'en profite également.
J'aimerai faire un petit jeu un jour sur thomson.
Répondre