| Bienvenue
sur mon site et bonne navigation. |
| La programmation d'EPROM |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Notions élémentaires |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1) Le bit est l'unité élémentaire d'information (valeur BIN 0 ou 1). L'octet est constitué de 8 bits (valeurs BIN 00000000 à 11111111). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2) Le mot HP-41, au sens langage
machine du terme, fait 10 bits. Il se décompose en : 2 bits de poids fort (U2 pour Upper 2) et 8 bits de poids faible (L8 pour Lower 8). Les L8 sont les plus à droite et les U2 sont les plus à gauche. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Ainsi le mot HEX 3E0
(RTN), soit BIN 1111100000 sera découpé ainsi : |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Pour réaliser un octet
U2, il faut 4 x 2 bits U2 venant de 4 mots consécutifs de 10
bits. Prenons comme exemple les 16 premiers mots de la page 5 de FORTH41 (réalisée par Serge Vaudenay) :
Le rangement des codes L8 se fait de la gauche vers la droite.
L'agencement des codes U2 se fait de la droite vers la gauche, puis retour à la ligne après chaque octet constitué. La décomposition des 16 codes U2 nous a donné en premier lieu :
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Nous obtenons à présent,
code après code : |
soit les deux octets
suivants : |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| L'adresse HEX 000 de U2
correspond aux adresses HEX 000, HEX 001, HEX 002 et HEX 003 de L8. L'adresse HEX 001 de U2 correspond aux adresses HEX 004, HEX 005, HEX 006 et HEX 007 de L8. Etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 3) Une Eprom 2716 a une capacité de 2Ko (2048o), une 2732 quant à elle, de 4Ko (4096o). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 4) Une ROM de 4Ko
contient 4096 mots de 10 bits, soit (4096 x 8 ) / 8 = 4096 mots de 8 bits ou octets (L8) et (4096 x 2 ) / 8 = 1024 mots de 8 bits ou octets (U2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 5)
Pour faire un jeu d'Eproms équivalent à une ROM de 4Ko, nous aurons besoin
: - de la totalité d'une 2732 (4096o sur les 4098o) pour la partie L8, soit de HEX 000 à FFF - et de la moitié d'une 2716 (1024o sur les 2048o) pour la partie U2, soit de HEX 000 à 3FF. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| La création d'Eproms |
| Plusieurs méthodes sont disponibles et tributaires du temps libre disponible et des matériels
détenus. Je n'en ai expérimenté que quatre dont je vous livre les détails : |
| La première consiste à calculer chaque octet U2 et L8 puis à taper chaque code obtenu sur un programmateur d'Eprom. |
| J'ai
réalisé une seule paire d'Eproms 27(C)16 et 27(C)32. Le club PPC-Toulouse fournissait le listing désassemblé de ROMs. Mon choix s'est porté sur le module de service SM-1C. J'ai tapé tous les codes sur un Elan E2A. Cela m'a pris des semaines. J'ai finalement opté pour des solutions moins chronophages (cf. infra). |
|
| Elan E2A |
|
La seconde nécessite un PC avec
environnement DOS, un programme de type QBasic, un
listing désassemblé de Rom (*.LST) et GOINTEL.BAS © Michael Krabach. Le résultat obtenu consiste en deux fichiers hexadécimaux
type Intel (dont le suffixe sera arbitrairement *.IU2 et *.IL8). Un programmateur série, //, USB ou encore doté d'une carte d'interface fera la reste du moment qu'il est compatible avec ces fichiers. |
![]() |
| EPP-01AE |
| La troisième requiert une carte HP-IL/PC
HP82973A
ou celle fabriquée par Christoph Klug, une unité de stockage de masse HP82161A ou HP9114A et le logiciel Hewlett-Packard SDS-II (EPROM.EXE et HIGHLOW.EXE). Le pré-requis est une image de ROM au format Eramco Systems ou W&W (640 registres), pas celle de l'Hepax qui a la même taille. La sauvegarde sur le disque dur est un fichier type *.41R. Que ce soit sur une cassette HP82176 ou sur une disquette LIF. Vous générez deux types de fichiers, au choix : - binaire (*.41U et *.41L) - héxadécimal Motorola (appelons les *.MU2 et *.ML8). Le format *.ROM très courant de nos jours n'est ni plus, ni moins qu'un *.41R. Il suffit de renommer les fichiers par un RENAME *.ROM *.41R. |
| La quatrième et dernière méthode fait appel au
programmateur d'Eproms HP-IL MC000506A de
Mountain Computer. Grâce à la MC EPROM, il peut gérer les Eproms 2716, 2732, 2764 et 27128. La recopie se fait directement d'une page source (Rom ou Ram) vers le programmateur. Les sauvegardes sont compatibles Eramco Systems et W&W. Cette méthode ne permet pas de créer des jeux d'Eproms pour le Hand Held Products HHP-PE. |
![]() |
| Programmateur d'EPROM HP-IL MC00506A de Mountain Computer |
| Cas particulier des modules CMT-10-16K et ZEPROM | ||
| Le module Zeprom de Zengrange Ltd, comme le CMT-10-16K de Corvallis Micro Technology recèle une mini Eprom 27(C)256. A défaut d'être propriétaire d'un programmateur dédié, il est techniquement possible depuis un programmateur "standard" de lire le contenu et de programmer de 4k à 16k de ROM après une exposition aux rayons UV. Il suffit alors de relier chaque patte de l'Eprom à celle lui correspondant sur le socle d'insertion. |
||
![]() |
![]() |
![]() |
| Boîtier d'un module CMT-10-16K | Vue du dessus des composants |
Vue du dessous des composants |
![]() |
![]() |
|
| Boîtier d'un module ZEPROM |
Vue d'un ZEPROM (version enfichable dans le calculateur) |
|

| Tableau récapitulatif selon le type d'Eprom utilisé | ||||
| EPROM |
CAPACITE |
ADRESSES (DEBUT/FIN) | ADRESSES (DEBUT/FIN) |
PARTIE
UTILE |
| 2716 |
2048o |
HEX
0000/07FF |
HEX
0000/03FF |
U2
1/2 |
| HEX
0400/07FF |
U2
2/2 | |||
| 2732 |
4096o |
HEX
0000/0FFF |
HEX
0000/03FF |
U2
1/4 |
| HEX
0400/07FF |
U2
2/4 | |||
| HEX
0800/0BFF |
U2
3/4 | |||
| HEX
0C00/0FFF |
U2
4/4 | |||
| HEX
0000/0FFF |
L8
1/1 | |||
| 2764 |
8192o |
HEX
0000/1FFF |
HEX 0000/03FF | U2 1/8 |
| HEX 0400/07FF | U2 2/8 | |||
| HEX
0800/0BFF |
U2 3/8 | |||
| HEX
0C00/0FFF |
U24/8 | |||
| HEX
1000/13FF |
U2 5/8 | |||
| HEX
1400/17FF |
U2 6/8 | |||
| HEX
1800/1BFF |
U2 7/8 | |||
| HEX
1C00/1FFF |
U2 8/8 | |||
| HEX
0000/0FFF |
L8 1/2 | |||
| HEX
1000/1FFF |
L8 2/2 | |||
| 27128 |
16384o |
HEX 0000/3FFF | HEX
0000/0FFF |
L8 1/4 |
| HEX
1000/1FFF |
L8 2/4 | |||
| HEX
2000/2FFF |
L8 3/4 | |||
| HEX
3000/3FFF |
L8 4/4 | |||
| 27256 |
32762o |
HEX
0000/7FFF |
HEX
0000/0FFF |
L8 1/8 |
| HEX
1000/1FFF |
L8 2/8 | |||
| HEX
2000/2FFF |
L8 3/8 | |||
| HEX
3000/3FFF |
L8 4/8 | |||
| HEX 4000/4FFF | L8 5/8 | |||
| HEX
5000/5FFF |
L8 6/8 | |||
| HEX
6000/6FFF |
L8 7/8 | |||
| HEX
7000/7FFF |
L8 8/8 | |||
| Au vu de ce tableau, pour
réaliser : - une Rom de 4k mots, il faut la moitié d'une 2716 et une 2732, - une Rom de 8k mots, une 2716 et une 2764, - une Rom de 16k mots, une 2732 et une 27128, - et une Rom de 32k mots, une 2764 et une 27256. | ||||
![]() |
![]() |
![]() |
|---|---|---|
|
||