[MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

Répondre
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

[MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gotcha »

1. Introduction

"Hex 1BP" est un logiciel développé à la base par FLite et qui permet de charger un programme assemblé via l'entrée audio du MPF1 par une liaison série avec le PC. Il a été découvert et 'dumpé' par Jeffounet (https://forum.system-cfg.com/viewtopic. ... 94#p183094).

Ce programme supporte seulement une liaison RS232 et ne supporte pas tous les types de record du format Intel Hex.

J'ai retravaillé "Hex 1BP" et ajouté des améliorations:
  • Support des convertisseurs USB-Série modernes en niveau TTL tout en gardant la compatibilité RS232
  • Ignorer sans erreurs les trames Intel Hex non supportées
J'ai mis sur Github la version originale ainsi que la version améliorée (Evo): https://github.com/gotcha-z80/mpf1/tree ... derByAudio

Notes:
  • Avec un système tel que le MPF-1, vous devez comprendre ce que vous faites et tout ce que vous ferez avec l'aide de ce tutoriel est sous votre entière responsabilité.
  • Je n'ai pour l'instant testé qu'avec le MPF-1 / MPF-1B, pas avec le MPF-1P. Il faudra vérifier si c'est valide ou pas pour le MPF-1P
2. Connexion entre le MPF1 et le PC

2.1. Câble

La connexion avec le PC se fait par l'entrée audio du MPF-1 "EAR". C'est une prise audio mono de type jack 3.5mm.

Code : Tout sélectionner

MPF1 (récepteur)      Emetteur

EAR Tip    -----<   <-------- TX
    Ground -----<   <-------- Ground
Pour les PC modernes, il y a différent types de convertisseur USB-Serial
  • Convertisseur RS232 qui sort des tensions entre -V et V (V est typiquement 12v, mais des convertisseurs peuvent utiliser d'autres voltages comme 9v par exemple). Ces convertisseurs utilisent une prise DB9.
  • Convertisseur TTL qui ont généralement 4 câbles pour la sortie et qui délivrent des tensions entre 0 et 3.3v ou entre 0 et 5v.
Tous les convertisseurs marchent avec l’évolution de HEX 1BP car:
  • L'entrée audio du MPF-1 force le signal RS232 sur l'entré audio à être entre 0 et 5v grâce à 2 diodes (CR1 et CR2) et une résistance (R14).
    Attention, assurez vous bien que R14 est bien là car si elle est trop basse ou a été enlevé (pour augmenter les niveaux audio par exemple), ça peut générer un court circuit ou un courant trop important
  • Le MPF-1 utilise des portes de type 74LSxx , ce qui le rend compatible avec des niveaux hauts de 3.3v
Comme le MPF1 travaille en TTL et qu'on n'est pas sur des longueurs de fil importantes, il est plus naturel d'utiliser un convertisseur USB-Serial en TTL. Mais si vous avez déjà un PC qui sort du RS232 ou un convertisseur qui sort du RS232, cela marchera aussi et il y aura juste plus de courant à dissiper au niveau de l'entrée audio.

hex1B-cable-small.jpg
hex1B-cable-small.jpg (127.48 Kio) Consulté 3126 fois

2.2. Configuration du PC

Pour envoyer un fichier Intel Hex vers le MPF-1, il faut un logiciel d’émulation de terminal qui supporte le lien série.
Sous Windows, J'utilisais initialement TeraTerm, mais j'ai remarqué un bug car au bout d'un certain nombre de caractères envoyés, un caractère est envoyé en double ce qui bien sûr génère une erreur de checksum :roll: J'utilise maintenant RealTerm qui ne me pose pas de problème pour l'instant.

Le logiciel doit être utiliser le bon port COM (cela dépend de votre config) et les propriétés de transmission suivantes:

Code : Tout sélectionner

- 2400 bauds
- Data bits: 8
- Parity: None
- Stop bit: 1
2.3. Installation du loader sur le MPF1

Sur github, je propose des fichiers .Hex et .Bin pre-assemblés pour être placé à l'adresse 2000h, donc au début de U7:
https://github.com/gotcha-z80/mpf1/tree ... /Evolution

Il est tout à fait possible de le déplacer, par exemple en le mettant à la place du Basic à l'adresse 800h dans U6.
Dans ce cas, il faut juste changer l'adresse du code dans le fichier ASM (et éventuellement dans le fichier Makefile si vous l'utilisez) et réassembler le programme. La logique pour ce genre de loader est de résider dans une EPROM tout comme le moniteur et non en RAM, car il est nécessaire pour charger les autres programmes.

Il faut noter que le loader utilise une zone de RAM entre 1F6Fh et 1F76h inclus. Cela veut dire qu'a chaque fois que le loader est lancé,
il écrasera les valeurs dans cette zone.


3. Execution

Le chargement d'un fichier Intel Hex est fait en plusieurs étapes.
Ici, on suppose que le loader est à l'adresse 2000h.

hex1B-commands-small.jpg
hex1B-commands-small.jpg (152.54 Kio) Consulté 3126 fois
  • Lancement du programme
    • Taper sur le clavier: 'Addr' 2000 'Go'
  • Requête 'Offset':
    • Le MPF-1 affiche 'Offset'
      Selon comment vous avez crée le fichier Hex, il peut contenir ou non l'adresse mémoire cible où il doit être chargé.
      L'offset vous permet de modifier la la valeur d'adresse du fichier Hex en y ajoutant un offset.
    • Pas d'offset (valeur 0) : 'Go'
    • Offset: entrer la valeur en hexa puis 'Go'
  • Requête de Son
    • Le MPF-1 affiche 'Sound'.
      Quand il charge un fichier Hex, vous pouvez demander à entendre de son des data en chargement ou non.
    • Pas de son: 'Go'
    • Avec du son: n'importe quelle touche sauf 'Go'
  • Détermination du type de liaison série
    • Le MPF-1 affiche 'Plug'.
      Il vous demande de vous assurer que le câble est bien connecté à la l'entrée audio EAR
      Le loader va déterminer automatiquement si la liaison serie est RS232 ou TTL et pourra donc interpréter les data qu’il recevra correctement.
    • Presser 'go' quand le câble est connecté
    • Après avoir pressé la touche, le MPF-1 bippe et affiche pendant 1s quel type de lien série il a détecté: 'RS232' ou 'TTL'
  • Transmission
    • Ensuite, le MPF1 affiche 'Send', bippe et affiche "......" pour notifier qu'il attend les données
  • A ce moment, vous pouvez envoyer le fichier hex depuis le PC sur le port série bien configuré.
  • Quand le fichier est transféré et que tout est OK, le MPF-1 bippe et affiche 'Good' avant de revenir au moniteur
    • S'il y a un problème avec un type de record Intel Hex non supporté, il affichera 'Record' et se remettra en attente de transfert
    • S'il y a un problème avec le checksum d'un record, il affichera 'Checksu' et se remettra en attente de transfert
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Avatar de l’utilisateur
jeffounet
Messages : 1563
Inscription : 25 janv. 2020 06:59
Localisation : Les Angles (30)

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par jeffounet »

Bonjour,
Tu as effectué un superbe travail.
Merci pour ta contribution (ta dévotion si j'osai!).
Maintenant, comme on dit, YAPUKA!

Bonne journée

Jean-François
Il n'y a que 11 sortes de gens, ceux qui comprennent ceux qui ne comprennent pas et ceux qui me font répéter!
Jean-François
Avatar de l’utilisateur
meridian
Messages : 1226
Inscription : 01 sept. 2014 13:10
Localisation : Seine-Saint-Denis

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par meridian »

Merci, je vais tester tout ça :)
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gotcha »

Pour ceux qui veulent tester le loader, j'ai ajouté l'exemple 'help us' du manuel ici:
https://github.com/gotcha-z80/mpf1/tree ... les/Helpus

Le fichier Hex est compilé pour avoir l'adresse cible en mémoire directement. Du coup, pas besoin de spécifier d'offset avec Hex 1BP.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Avatar de l’utilisateur
gleike
Messages : 1341
Inscription : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gleike »

Existe-t-il un éditeur assembleur Z80 simple sous Windows générant directement un fichier Intel HEX compatible,
sans passer par des Make et des Makefile dont je ne sais même pas de quoi il s'agit :roll:
J'ai beau chercher, je trouve seulement des logiciels lourds et compliqués.
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gotcha »

Sous Windows, une bonne solution 'simple' me semble être TASM 3.2 (https://www.ticalc.org/archives/files/f ... 25051.html).
TASM marche avec les derniers Windows et génère du Intel Hex directement (option -g0).

Par contre, elle n'est pas intégrée avec un éditeur et ça marche en ligne de commande comme du temps de DOS.
  • On édite avec Notepad++ par exemple
  • On lance l'assembleur en ligne de commande (CMD)
Je crois que 6502man utilise cette méthode pour ses projets (TASM supporte pas mal de microprocesseurs).

Je viens de faire une petit essai sous Windows 11. Comme je veux lancer TASM depuis n'importe quel répertoire, il faut mettre le répertoire d'installation de TASM (dans mon cas D:\Devel\tasm32), dans la variable d’environnement TASMTABS.

En ligne de commande:

Code : Tout sélectionner

set TASMTABS=D:\Devel\tasm32
D:\devel\tasm32\TASM.EXE -80 -g0 mpf1-helpus.asm -o mpf1-helpus.hex
Les directives de TASM sont différentes de l'assembleur que j'utilise sous Linux et j'ai dû changer la syntaxe du fichier assembleur.
Exemple pour helpus:
mpf1-helpus-tasm.zip
Help-us pour TASM
(285 octets) Téléchargé 44 fois

EDIT (tasm sous Linux) :
Tasm a aussi existé sous Linux, mais l’exécutable que j'ai trouvé ne marche pas avec un Linux récent.
Le code source de tasm était vendu mais est malheureusement introuvable.

Du coup, sous Linux, le plus simple si on veut aussi utiliser tasm est d'utiliser la version Windows avec wine.
Par exemple, j'ai installé tasm dans ~/pub/tasm32-win

Code : Tout sélectionner

export TASMTABS=~/pub/tasm32-win
wine ~/pub/tasm32-win/TASM.EXE -80 -g0 mpf1-helpus.asm -o mpf1-helpus.hex
Note: sous Ubuntu, j'ai installé wine comme ceci:

Code : Tout sélectionner

sudo apt-get install wine32
Dernière modification par gotcha le 30 oct. 2022 18:17, modifié 5 fois.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Avatar de l’utilisateur
gleike
Messages : 1341
Inscription : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gleike »

Merci, je vais essayer ça.
Avatar de l’utilisateur
gleike
Messages : 1341
Inscription : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gleike »

Bonjour,
Dans le but de le déplacer en mémoire,
j'essaye de recompiler HEX-1BP-evo.asm avec Tasm32 en employant la commande avec les arguments donnés plus haut,
mais j'ai des erreurs à toutes les lignes, j'ai essayé avec ton fichier helpus.asm, ça fonctionne bien,
où se situe le problème ?
À mon avis, la syntaxe est trop différente n'est-ce pas ?

Je voulais qu'il commence à 2DE2H et se termine à 2FFFH pour le mettre au fond de ma mémoire NVsram.
Merci.

Voici le fichier LST généré :
HEXTEST.zip
(8.45 Kio) Téléchargé 37 fois
Avatar de l’utilisateur
meridian
Messages : 1226
Inscription : 01 sept. 2014 13:10
Localisation : Seine-Saint-Denis

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par meridian »

Tu as regardé si par exemple tu avais des caractères non affichables dans le fichier ? comme ce bon vieux CTRL M sur Unix.
Avatar de l’utilisateur
gleike
Messages : 1341
Inscription : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: [MPF1][Tuto] Chargement de programme par liaison série (Hex 1BP)

Message par gleike »

En lisant la DOC de Tasm32, j'ai l'impression qu'il n'aime pas les deux points après les Labels.

[Edit] Après de nombreuse recherche, j'ai trouvé ZASM, qui compile sans erreurs, reste à voir si le résultat fonctionne.
Répondre