MPF-1 (basé sur Z80-MBC2)

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

Avatar de l’utilisateur
ElekPat
Messages : 32
Inscription : 07 nov. 2022 11:33
Localisation : Dordogne

MPF-1 (basé sur Z80-MBC2)

Message par ElekPat »

Bonjour,

J'ai toujours voulu avoir un MicroProfessor MPF-1 mais jusqu'à ce jour, ce n'étais pas le cas.
J'ai récemment découvert ce forum (en faisant une recherche sur le MPF-1) via le sujet MPF-1 (Replica 2022).
J'ai tout d'abord cherché à obtenir un PCB, mais vu le minimum de commande de 5, je me suis réorienté vers une idée: pourquoi ne pas profiter de ma carte Z80-MBC2 pour la base de travail Z80 (avec le bonus additionnel qu'il ne sera pas nécessaire d'effacer/programmer une EPROM à chaque fois pendant le développement) et ajouter un clavier et un afficheur, les 2 éléments qui manquent afin de se rapprocher de la solution MPF-1 autonome (pas besoin d'un PC, bien que cela puisse faciliter les choses en faisant du cross-assembleur et du téléchargement/sauvegarde des programmes via la liaison série offerte par la carte Z80-MBC2)
J'ai donc étudié les schémas des cartes MPF-1 et Z80-MBC2 afin de voir ce qu'il était possible de faire, avec les contraintes suivantes:

- avoir une disposition clavier "identique" au MPF-1
- avoir un afficheur similaire au MPF-1 (4 digits LED pour les adresses et 2 digits LED pour les data)
- avoir la fonctionalité STEP (qui utilise de la logique supplémentaire sur la carte MPF-1)
- garder toutes les fonctionalités du moniteur du MPF-1 (même si cela veut dire pas mal de compréhension et ré-écriture du code)

La carte Z80-MBC2 ne met pas le bus Z80 à disposition de l'utilisateur (et c'est tant mieux car je ne me vois pas câbler le bus complet à la main avec des fils vers la carte d'extension), mais implémente des périph "virtuels" sur le bus Z80 via le ATmega (périphériques qui peuvent être SPI, comme la carte SD, ou I2C comme l'expanseur GPIO).

J'ai donc entrepris la construction d'une platine auxiliaire (sur plaque à trous/pastilles pour aller plus vite qu'un PCB) sur laquelle figure les 36 touches du clavier, un PIC16F1619 (d'autres peuvent convenir, c'est ce que j'avais sous la main) qui gèrera ce clavier (matrice 6x6 mais seules 32 touches sont gérées, comme sur le MPF-1 d'origine, les 4 autres touches, celles de la colonne de gauche, vont sur le Z80 directement ou à travers le ATmega), et le HP et communiquera via une liaison I2C avec le ATmega, 3 leds (les 2 leds d'origine du MPF-1 + 1 bleue pour le PIC16).
Pour l'écran, j'ai choisi un module standard LCD 2 lignes de 16 caractères (je n'avais pas de solution simple d'afficheur 7 segments LED en I2C sous la main) avec une petite carte I/O expander I2C (PCF8574) pour qu'il soit lui aussi vu comme un périphérique du Z80 à travers le bus I2C du ATmega.
L'avantage c'est que les caractères hexadécimaux sont bien lisibles (puisque j'utilise les "vrais" lettres A à F)... ainsi que les noms des registres...
MPF1_Keypad_PIC16.jpg
MPF1_Keypad_PIC16.jpg (567.45 Kio) Consulté 1731 fois
Je n'utilise (pour l'instant) que les 6 premiers charactères de chaque ligne pour coller au plus près de la configuration MPF-1 (la ligne du bas sert à afficher les "." qui manquent sur les digits.

J'ai écrit le projet C de gestion du clavier et du HP pour le PIC16 (20 broches/17 I/Os) avec MPLAB X et le compilateur XC8. Il n'y a pas une broche de libre, je ré-utilise même les pins ICSP pour la liaison I2C... on serait probablement plus à l'aise avec un 28 broches?
A l'aide d'un Pickit Serial (et son soft associé sur le PC), j'ai validé qu'un hôte I2C externe pouvait bien accéder aux registres de contrôle/lecture du clavier, au HP et à la LED.

Et j'ai procédé aux ajouts/modifications suivantes sur la carte Z80-MBC2:
- passage du ATmega32A au ATmega644A (pour avoir plus de mémoire programme afin de mettre le moniteur du MPF-1 et toutes les nouvelles routines pour gérer l'afficheur et le clavier externe, et aussi parce que c'est ce que j'avais de dispo (en enlevant le Forth et/ou le BASIC du Z80-MBC2, tout devrait rentrer sur un ATmega32A)
- modification du reset entre le ATmega et le Z80 pour que le bouton RS externe du MPF-1 agisse sur le reset du Z80 (et pas celui du ATmega)
- jumper SJ1 ponté pour avoir le signal M1 du Z80 sur l'ATmega (pour la fonctionalité STEP) => déclenchement INT0 de l'ATmega
- bouton MONI branché sur la pin MCU_RTS de l'ATmega (pin non utilisée dans le soft IOS_Lite d'origine)
- connexion du signal USER de l'ATmega sur la pin NMI du Z80 (pour fonctionalités STEP et MONI)
- connexion du bouton externe INT sur le Z80 (pas encore testé)
- modification du sketch IOS_Lite afin de gérer l'afficheur et le clavier

Après avoir validé que l'afficheur, le clavier et le HP sont controllables par le ATmega, je me suis occupé de rajouter les périphériques virtuels du Z80 (commandes IN et OUT interceptés par le ATmega) dans le code IOS_Lite afin que le Z80 ait lui aussi accès à l'afficheur, au clavier et au HP.
Une fois tout celà en place, j'ai écrit un petit programme assembleur Z80 afin de valider que tout fonctionnait correctement.

Il était maintenant temps de s'attaquer aux modifications du moniteur MPF-1: et là, il a fallu d'abord comprendre comment tout celà fonctionnait, en particulier le mécanisme de pas à pas (STEP)!
C'est ce qui m'a posé le plus de problèmes, en particulier car je ne suis pas un habitué du développement sur Atmel, et je n'ai pas réussi à optimiser la routine d'IT (nécessaire pour compter les cycles machines M1 du Z80), ce qui fait que pour l'instant celà ne fonctionne que pour une clock de 4 MHz sur le Z80 (la possibilité de 8 MHz de la Z80-MBC2 n'est donc pas compatible avec le mode MPF-1).
MPF1_Keypad_PC.jpg
MPF1_Keypad_PC.jpg (534.99 Kio) Consulté 1731 fois
Mais après quelques (trop?) péripéties, j'ai maintenant un code qui semble bien fonctionner et qui reproduit (sauf pour les fonctions TapeRD et TapeWR) le fonctionnement du MPF-1.
Z80-MBC2_and_MPF1_Keypad.jpg
Z80-MBC2_and_MPF1_Keypad.jpg (607.15 Kio) Consulté 1731 fois
J'ai remplaçé TapeWR et TapeRD par SAVE et LOAD (enfin c'est comme celà que je les appelle) :
- SAVE qui envoi le contenu d'un bloc mémoire au format Intel HEX sur la liaison série du ATmega (donc peut être enregistré sur le PC avec par exemple Teraterm en mode "Log"), pour cela j'ai écrit une routine assembleur Z80 dédiée mais qui reprend le système d'entrée des paramétres (adresse de début et adresse de fin du bloc mémoire) du moniteur MPF-1
- LOAD qui charge un fichier Intel HEX depuis la liaison série ATmega (donc envoyé par exemple par le PC avec Teraterm "Send File"), pour cela j'utilise directement la routine iLoad du IOS_Lite
- personnellement, même si j'aime la nostalgie des cassettes, je préfère une solution UART...

Exemple de SAVE du block mémoire (RAM) de 1000H à 1100H sur la console Teraterm
SAVE_0x1000_0x1100.jpg
SAVE_0x1000_0x1100.jpg (65.82 Kio) Consulté 1731 fois
Il reste pas mal de "nettoyage" à faire dans le(s) code(s), par exemple les routines du moniteur normalement accessibles à l'utilisateur et documentées dans le manuel ne sont plus forcément à la même adresse (j'ai du enlever/ajouter des instructions, donc le mapping a un peu changé)... mais cela fonctionne...
TI99/4A + SIMCAD + 8052 AH-BASIC + Z80-MBC2 + PIC lover
Avatar de l’utilisateur
jeffounet
Messages : 1563
Inscription : 25 janv. 2020 06:59
Localisation : Les Angles (30)

Re: MPF-1 (basé sur Z80-MBC2)

Message par jeffounet »

Bonjour,

Superbe travail, un émulateur matériel!!! :roll: :roll: :roll:

Encore bravo tu vas faire couler de l'encre parmi les possesseurs/utilisateurs de MPF-I.

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
Leraptor06
Messages : 672
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: MPF-1 (basé sur Z80-MBC2)

Message par Leraptor06 »

Bonjour,
Je suis admiratif il semble que la difficulté ne te fasse pas peur. Voilà un projet qui demande des compétences diverses et beaucoup de volonté.
Bravo a toi.
Jp
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: MPF-1 (basé sur Z80-MBC2)

Message par gotcha »

J'avais loupé de post :oops:
Ce développement est sympa.

La carte Z80-MBC2, avec un Z80 et un ATmega, c'est un peu la synthèse du hobbyiste électronique des années 80 et des années 2000 :-)

Tu as utilisé quoi pour faire le clavier ? De micro-switch ? Personnellement, la chose qui me gêne le plus dans la Replica est le clavier avec des petites micro-switch. A choisir, j'airais préféré des switch plus grosses. Le vrai MPF-1 offre un confort bien meilleur pour le clavier.
C'est un peu pour ça que je vois plus la Replica comme une carte à accrocher à un PC.

Il y a une Z80-MBC3 maintenant, connais tu les différences avec la Z80-MBC2 ?
Dernière modification par gotcha le 26 janv. 2023 15:30, modifié 1 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)
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: MPF-1 (basé sur Z80-MBC2)

Message par Notator »

Un peu étrange comme système (je parle du MBC2), avec un ATmega32/Arduino en esclave du Z80, pour lui fournir de la mémoire et des interfaces...
Ça me rappelle le projet de la revue 'Hackable' :

https://forum.system-cfg.com/viewtopic. ... le#p133336

Je me souviens que le projet avait été abandonné avant terme, parce que l'Arduino peinait à suivre les besoins du Z80...
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Avatar de l’utilisateur
ElekPat
Messages : 32
Inscription : 07 nov. 2022 11:33
Localisation : Dordogne

Re: MPF-1 (basé sur Z80-MBC2)

Message par ElekPat »

Bonjour,

le clavier est fait de micro-switch "classiques" 6x6 mm, recouverts avec une feuille de papier plastifiée à chaud. C'est très utilisable je trouve, mais c'est vrai que cela pourrait être mieux...

J'ai maintenant une version avec des afficheurs à LED comme sur l'original... géré par un HT16K33 sur I2C (qui fait à la fois les LEDs et le clavier en matrice) voir ci-joint (sans l'overlay du clavier pour l'instant ce qui permet de voir les micro-switch).
Clavier_LED_I2C.jpg
Clavier_LED_I2C.jpg (442.71 Kio) Consulté 887 fois
Non je ne connais pas la MBC3...
TI99/4A + SIMCAD + 8052 AH-BASIC + Z80-MBC2 + PIC lover
Répondre