[MPF-I] Tutos de prise en main

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

Zebulon
Messages : 2106
Inscription : 02 nov. 2020 14:03

[MPF-I] Tutos de prise en main

Message par Zebulon »

Ce fil est destiné à recevoir des recettes de cuisine sur la prise en main du MPF-I. Pour ne pas diluer son contenu nous allons pouvoir échanger autour de ces recettes et/ou signaler des ajouts ou corrections sur le fil des échanges libres.

Le cadre est posé, nous allons nous intéresser au MPF-I ou MPF-1 ou MPF-1B ou encore MicroProfessor. Pour suivre les aventures à venir et surtout pratiquer, il faut:
- soit s'être procuré une machine originale telle qu'elle est présentée ici.
- soit s'être fabriqué un clone de la machine tel qu'expliqué ici.
- soit télécharger un émulateur tel que celui-ci.
Dernière modification par Zebulon le 24 août 2022 13:27, modifié 1 fois.
Notator
Messages : 991
Inscription : 09 août 2015 20:13

Re: [MPF-I] Tutos de prise en main

Message par Notator »

Juste un détail, Micro Professor est le nom de la gamme MPF (MPF signifie 'Micro Professor').

Ensuite pour la prise en main, selon de quel MPF on dispose la programmation en est différente.

Pour le MPF-1, programmation en assembleur hexadécimal.

Pour le MPF-1B (B signifie Basic), programmation en assembleur hexadécimal ou en Basic.

Pour le MPF-1P (P signifie Plus), programmation en assembleur mnémoniques ou en Basic, ou encore en Forth (selon le contenu de l'Eprom secondaire).
Zebulon
Messages : 2106
Inscription : 02 nov. 2020 14:03

Re: [MPF-I] Tutos de prise en main

Message par Zebulon »

Merci Notator pour cette précision importante.

La carte que nous avons construit correspond à un MPF-1 ou 1B selon l'EPROM installée. Pour ma part et celle que j'ai envoyé à Fabien, c'est une EPROM de 4Ko contenant le moniteur et le tiny basic.

Mais nous allons commencer par la programmation en assembleur hexadécimal.

Alors voilà je propose de poser la carte à plat sur une table proche d'une prise et de la brancher au secteur, la led verte tone émet un flash, et le message "uPF--1" défile de la droite vers la gauche pour rester afficher et plus rien ne semble se passer.

Le Z80 exécute le "moniteur" qui se trouve aux adresses 0000h - 07FFh de l'EPROM la plus à gauche en U6 et attend simplement qu'on lui donne des ordres.

Pour commencer nous allons considérer les touches [0] à [F] à droite du clavier et qui permettent de saisir des chiffres hexadécimaux, ainsi qu'aux touches [ADDR], [DATA] qui permettent de basculer respectivement sur la saisie d'une adresse (4 chiffres hexa) et d'un octet en mémoire (2 chiffres hexa) et enfin les touches [+] et [-] qui permettent d'incrémenter ou décrémenter l'adresse actuelle sans devoir la ressaisir complètement.

Dans la configuration de base la RAM de 2 Ko est implantée en U8 aux adresses 1800h - 1FFFh.

Commençons donc par saisir [ADDR] puis [1] [8] [0] [0], les chiffres s'affichent sur les quatre afficheurs de gauche. A noter qu'à l'appui de [ADDR] les quatre points décimaux des quatre afficheurs de gauche s'illuminent pour indiquer que l'on va saisir une adresse. Au fur et à mesure de la saisie les deux chiffres de droite changent pour se figer sur une valeur aléatoire à cet instant qui est la valeur de l'octet contenu à l'adresse 1800h (la mémoire vive n'est pas uniformément remise à zéro au démarrage donc contient des valeurs arbitraires).

Pour bien comprendre ce qui se passe, l'afficheur va afficher les octets contenus dans la mémoire aux adresses 1h, 18h, 180h puis 1800h au fur et à mesure de la saisie.

Maintenant nous pouvons choisir de visualiser les octets contenus aux adresses suivantes en appuyant sur [+] plusieurs fois, ainsi l'adresse affiché à gauche va devenir successivement 1801h, 1802h, 1803h... et les octets affichés à droite s'actualiser.

Enfin revenons par exemple à 1800h en appuyant autant de fois sur [-].

Si nous voulons modifier ("poker") l'octet à cette adresse 1800h il faut maintenant appuyer sur [DATA]. Les points décimaux s'éteignent sur les quatre chiffres de gauche pour s'illuminer sur les deux chiffres de droite pour indiquer que l'on va saisir la valeur d'un octet en mémoire. On peut taper [F] [F] par exemple pour la valeur FFh (255d). L'octet est mis à jour instantanément sans besoin de confirmer.

En fait tout comme pour les adresses, la valeur de l'octet se met à jour au fur et à mesure de la saisie, d'abord 0Fh au premier F saisi, puis FFh au second. Si on appuyait sur [A] dans la foulée la valeur serait FAh.

Une règle pour la saisie des adresses (et des octets) est qu'il n'est pas utile de saisir les zéros non significatifs (à gauche du nombre donc) et que les quatre (deux) derniers chiffres saisis sont conservés.

Donc pour saisir ... il faut taper ...:
0000 -> [0]
0010 -> [1] [0]
0123 -> [1] [2] [3]
1234 -> [1] [2] [3] [4]
1200 -> [1] [2] [0] [0]

Si par erreur on a saisi 121 et qu'on réalise déjà son erreur sur le dernier exemple il suffit de continuer en retapant [1] [2] [0] [0] ce qui va afficher 1211, 2112, 1120 et enfin 1200.

Je propose de déjà pratiquer à la saisie et la lecture de ces adresses et ces octets car il faut s'habituer à la "typographie" imposée par les afficheurs à 7 segments.

EXERCICE (j'adore faire le prof) lister les premiers octets exécutés par le Z80 donc en ROM. :D
Avatar de l’utilisateur
fneck
Site Admin
Messages : 16353
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [MPF-I] Tutos de prise en main

Message par fneck »

Merci Zebulon, j'en sais déjà plus que je n'ai jamais pu imaginer sur cette machine 8)

Donc, si la ROM commence en 0000h, d'après la cartographie sur le site d'Emilio, les premiers octets sont:
0000h 06
0001h 00
0002h 10
0003h FE
0004h 3E
0005h 90
0006h D3
0007h 03
etc...
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Notator
Messages : 991
Inscription : 09 août 2015 20:13

Re: [MPF-I] Tutos de prise en main

Message par Notator »

J'ajoute que spontanément à la mise sous tension le Z80 démarre à l'adresse 0000h, c'est la raison pour laquelle on implante toujours la ROM à partir de 0000h.
Avatar de l’utilisateur
fneck
Site Admin
Messages : 16353
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [MPF-I] Tutos de prise en main

Message par fneck »

A mon tour 8)
Pour lancer le BASIC (sur version MPF-1B), se rendre à l'adresse 0800h et appuyer sur la touche GO (à gauche du "plus"):
[ADDR] [8] [0] [0]
[GO]

L'écran indique alors un magnifique "bASIC ."
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
jeffounet
Messages : 1086
Inscription : 25 janv. 2020 06:59
Localisation : Les Angles (30)

Re: [MPF-I] Tutos de prise en main

Message par jeffounet »

Bonjour à tous,

Un excellent site pour apprendre plein de chose sur le MPF-1:
https://www.sbprojects.net/projects/mpf1/begin.php

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
Zebulon
Messages : 2106
Inscription : 02 nov. 2020 14:03

Re: [MPF-I] Tutos de prise en main

Message par Zebulon »

Donc Fabien oui tu as bien lu les premiers octets de la ROM. :D

Pour avancer un peu je propose de rentrer un premier programme simple mais qui donne un retour visuel intéressant et qui permet si on le souhaite de s'initier à la gestion de l'affichage sur le MPF-1.

J'ai copié la page 53 du manuel qui présente l'exemple 1 des petits programmes proposés pour s'initier et qui détaille la façon des les afficheurs sont pilotés.

Une fois le MPF-1 branché, il faut se positionner à l'adresse 1800h [ADDR] [1] [8] [0] [0] puis taper sur [DATA] pour basculer en saisie des octets en mémoire. On saisi le premier octet [D] [D] puis on appuie sur [+], le second [2] [1] puis [+], etc. Il y a un vide entre 180Bh et la zone contenant les caractères à afficher en 1820h, soit on appuie de manière bestiale sur [+] pour faire défiler soit on fait [ADDR] [1] [8] [2] [0] puis [DATA] pour continuer. :P

Vous comprenez qu'on ne s'intéresse ici et pour le moment qu'aux deux premières colonnes du listing, la première donne les adresses et la seconde les opcodes ou les données au format hexadécimal.

Une fois la saisie terminée, il est temps de lancer le programme en se positionnant de nouveau en 1800h et en appuyant sur [GO]. Il y a un petit raccourci valable après la mise sous tension ou le reset de la machine c'est la touche [PC] (program counter) qui est prépositionné à 1800h lors de l'initialisation.

Je vous laisse tester et modifier les datas à loisir pour afficher d'autres "symboles" (7-segments art :D ) à partir des explications données en dessous du code sur la façon dont l'encodage des segments est effectué.
Pièces jointes
exemple_1_page_53.png
exemple_1_page_53.png (72.1 Kio) Consulté 2782 fois
Zebulon
Messages : 2106
Inscription : 02 nov. 2020 14:03

Re: [MPF-I] Tutos de prise en main

Message par Zebulon »

Parce que l'utilisation du MPF-1 est lié à l'apprentissage des notions de langage machine et d'assemblage (ici autour du Z80), je vous propose sur cet exemple simple de comprendre comment on peut à la main procéder à l'assemblage et obtenir le "code machine" à saisir.

La méthode que je présente est celle que j'utilisais il y a un peu plus de 30 ans avec un papier et un crayon pour coder du langage machine sur mon CPC 464 vu que je ne disposais que d'un livre mais aucun logiciel.

On commence par écrire son code, ses datas, en définissant les adresses d'implantation et en utilisant des labels:
listing_1.png
listing_1.png (26.73 Kio) Consulté 2774 fois

Ensuite en traduit les mnémoniques (instructions langage machine) et les datas en code hexadécimal, en laissant les emplacements pour le codage des adresses, ce qui permet d'avoir la liste des adresses absolues à gauche:
listing_2.png
listing_2.png (36.02 Kio) Consulté 2774 fois

Ensuite on encode les adresses absolues dans les instructions en n'oubliant pas d'inverser les octets de poids fort et faible:
listing_3.png
listing_3.png (37.74 Kio) Consulté 2774 fois

Ensuite on s'attaque au calcul des sauts relatifs (là il faudra détailler pour les novices):
listing_4.png
listing_4.png (41.57 Kio) Consulté 2774 fois

Et on les ajoute au code pour finir le listing "bon à taper":
listing_5.png
listing_5.png (38.64 Kio) Consulté 2774 fois

Comme ça c'est tout simple mais que se passe-t-il quand il faut corriger ou faire évoluer le programme ? On gomme, on surcharge, on recopie de zéro... le bon vieux temps. :D
Notator
Messages : 991
Inscription : 09 août 2015 20:13

Re: [MPF-I] Tutos de prise en main

Message par Notator »

Si on veut pouvoir être compris de novices en Assembleur, il y a des notions préalables qu'il ne faut pas zapper ; je vais les évoquer (il n'y a aucune critique de ce qui est écrit précédemment, nous sommes dans un esprit collaboratif).

Avant toute chose, il y a un livre qui est très bien, et qui est centré sur le MPF-1 ou MPF-1B, c'est celui-ci :

Initiation aux µP Duquesne.png
Initiation aux µP Duquesne.png (198.05 Kio) Consulté 2743 fois

Il a été écrit par Philippe Duquesne, le patron de ZMC, la société qui importait la gamme Multitech, et créa même des cartes d'extension spécifiques pour les MPF. Hélas, il est devenu difficile à trouver, et les quelques exemplaires en vente sont vendus à un prix élevé.

Par chance, le contenu a été édité en plusieurs chapitres dans la revue Led Micro que l'on peut télécharger librement ici :
https://www.abandonware-magazines.org/a ... php?mag=61

Bon, maintenant les notions préalables dont je parlais plus haut :

Je suppose comme acquise la correspondance binaire/décimal/hexadécimal ; si ce n'est pas le cas, me le faire savoir, je reviendrai dessus.

Le Z80 est un microprocesseur de la famille des 8 bits, car il dispose de 8 lignes de données, ce qui lui permet d'échanger des données d'une valeur comprise entre 00 et FF en codage hexadécimal (pour la suite, je dirai à la place 'hexa').

Il dispose par ailleurs de 16 lignes d'adresses, ce qui permet d'adresser un champ mémoire de 64 kilo-octets (Ko). Un Ko vaut 1024 octets, et un octet vaut 8 bits (un bit est une valeur binaire qui vaut 1 ou 0).
Un octet peut prendre une valeur allant de 00 à FF.

Les 64 Ko de notre champ adresse couvrent 65536 (64 x 1024) octets, soit 65536 emplacements mémoire (un emplacement mémoire a une taille d'un octet).
Les 16 lignes d'adresses forment une matrice de 65536 emplacements, dont l'adresse (le numéro de l'emplacement mémoire concerné) s'échelonne de 0 à 65536 ; en hexa cela fait de 0000 à FFFF.

Les instructions du Z80 sont exprimées généralement sous forme d'une valeur d'un octet (des instructions complexes peuvent avoir plusieurs octets), soit théoriquement de 00 à FF.
Comme manipuler des noms en hexa est fastidieux, un autre moyen est d'utiliser des mnémoniques, qui sont des abréviations du nom en anglais des instructions.
Mais le MPF-1 et le MPF-1B ne comprennent que l'hexa, alors il faut faire avec. :wink:

Donc une instruction s'indique le plus souvent sous forme d'un octet en hexa.
Une instruction peut se suffire toute seule à elle-même, mais elle peut avoir besoin d'un opérande codé sur un ou deux octets, selon le besoin.
Si l'opérande a un format de deux octets, par exemple d'une valeur de ABCD (hexa), AB est l'octet de poids fort, et CD est l'octet de poids faible, et il important de se souvenir que pour le Z80 le poids faible doit toujours précéder le poids fort ; ainsi la valeur ABCD se tapera dans le programme : CDAB.

Je me permet de reprendre l'exemple fait par Zebulon, pour préciser des choses qui ne sont certainement pas claires pour des novices en Assembleur :
1801'
Asm exemple.png
Asm exemple.png (41.82 Kio) Consulté 2743 fois
Dans le champ adresses, on peut voir 1800, et dessous 1804. '1800' est l'adresse d'un emplacement mémoire d'une taille d'un octet (comme tous les autres emplacements mémoire), comme déjà dit plus haut. Il est logiquement suivi par '1801', '1802', '1803', '1804', ...etc.

Quand on lit : 1800, et sur la même ligne dans le champ opcodes : DD, 21, nn, nn, on a en réalité :

1800 DD
1801 21
1802 nn
1803 nn

Chaque octet du programme vient remplir un emplacement mémoire consécutif, mais par souci de concision et ne pas remplir de trop interminables pages, on compacte la notation.

Un petit exemple détaillé avec une instruction simple :

1850 3A 00 1A LD A, (1A00) ; chargement de la valeur 1A00 dans le registre A
1853 00 NOP ; NOP est une instruction qui ne fait rien

Désolé pour la présentation (ce n'est pas ce que j'ai tapé), l'éditeur de message compacte les espaces consécutifs.
Voici la même chose avec la bonne présentation :
Exemple.png
Exemple.png (15.24 Kio) Consulté 2727 fois

Qui, on l'a vu, peut se décomposer en ceci :

1850 3A
1851 00
1852 1A
1853 00

Avant d'aller plus loin, il faudrait expliquer à présent les registres du Z80 et les modes d'adressage.

En attendant, c'est bien expliqué dans ce livre :

https://datassette.nyc3.cdn.digitalocea ... du_z80.pdf

Un autre conseil de lecture : Programmation du Z80,
de Rodnay Zaks, édition Sybex.
Dernière modification par Notator le 28 août 2022 18:35, modifié 1 fois.
Avatar de l’utilisateur
fneck
Site Admin
Messages : 16353
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [MPF-I] Tutos de prise en main

Message par fneck »

Image

J'ai commencé la lecture attentive de la documentation. Au début c'est assez simple mais arrivé aux différents registres, et leur rôle, ça se complique. J'ai très vite compris qu'on était en direct avec le Z80.

Sinon dans l'exercice HELPUS, si la saisie est facile, il faut maintenant que je comprenne pourquoi les codes tapés à une adresse précise s'affichent sur les digits. Du coup j'ai aussi utilisé la commande de sauvegarde et de relecture avec un vieux magnétocassette, quel retour en arrière, mais sa fonctionne 8)
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
fneck
Site Admin
Messages : 16353
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [MPF-I] Tutos de prise en main

Message par fneck »

Notator a écrit : 28 août 2022 18:01 Par chance, le contenu a été édité en plusieurs chapitres dans la revue Led Micro que l'on peut télécharger librement ici :
https://www.abandonware-magazines.org/a ... php?mag=61
En mode ado un peu paresseux... tu n'aurais pas par hasard les fichiers déjà téléchargés (non mais sinon c'est pas grave) :D

Celui-ci "Programmation du Z80" je l'ai en vrai version papier!
Notator a écrit : 28 août 2022 18:01 Désolé pour la présentation (ce n'est pas ce que j'ai tapé), l'éditeur de message compacte les espaces consécutifs.
Tu peux utiliser la balise "code" pour cela.

:arrow: [edit 30/08/2022] J'ai refait un PDF à partir des fichiers d'Abandonware magazine, voici "Initiation au Microprocesseurs" de Led Micro (1984):
https://download.system-cfg.com/f.php?h=2ksTfsCb&d=1
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Notator
Messages : 991
Inscription : 09 août 2015 20:13

Re: [MPF-I] Tutos de prise en main

Message par Notator »

fneck a écrit : 28 août 2022 19:15
Notator a écrit : 28 août 2022 18:01 Par chance, le contenu a été édité en plusieurs chapitres dans la revue Led Micro que l'on peut télécharger librement ici :
https://www.abandonware-magazines.org/a ... php?mag=61
En mode ado un peu paresseux... tu n'aurais pas par hasard les fichiers déjà téléchargés (non mais sinon c'est pas grave) :D
Ben non, j'ai le livre, donc pas eu besoin. :wink:
fneck a écrit : 28 août 2022 19:15
Notator a écrit : 28 août 2022 18:01 Désolé pour la présentation (ce n'est pas ce que j'ai tapé), l'éditeur de message compacte les espaces consécutifs.
Tu peux utiliser la balise "code" pour cela.
Ah ? OK, merci. J'essaierai la prochaine fois que j'en aurai le besoin. :)
Zebulon
Messages : 2106
Inscription : 02 nov. 2020 14:03

Re: [MPF-I] Tutos de prise en main

Message par Zebulon »

Merci beaucoup Notator pour tes contributions depuis le début de ce fil. Je ne tiendrai pas la distance à moi tout seul. :D
Notator
Messages : 991
Inscription : 09 août 2015 20:13

Re: [MPF-I] Tutos de prise en main

Message par Notator »

Il n'y a pas de souci, tu traites ce que tu souhaites, et je complèterai, si besoin, dans la mesure de mes moyens.
Répondre