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.
0 1 2 3 4 5 6 7 8 9
U2 L8


Ainsi le mot HEX 3E0 (RTN), soit BIN 1111100000 sera découpé ainsi :
1 11 1 1 0 0 0 0 0
U2 L8


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) :


ADR.HEXBINU2L8
500100900000010010000001001
500104000010000000001000000
500200000000000000000000000
500308C00100011000010001100
500400000000000000000000000
500509300100100110010010011
500620910000010011000001001
500708F00100011110010001111
500800700000001110000000111
500903900001110010000111001
500A00000000000000000000000
500B 0AD00101011010010101101
500C00000000000000000000000
500D0B600101101100010110110
500E00700000001110000000111
500F 0DA00110110100011011010

Le rangement des codes L8 se fait de la gauche vers la droite.

BIN00001001 01000000 00000000 10001100 00000000 10010011 00001001 10001111
00000111 00111001 00000000 10101101 00000000 10110110 00000111 11011010
HEX09 40 00 8C 00 93 09 8F 0F 51 0E 42 08 09 00 BC

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 :


00 00 00 0000 00 10 0000 00 00 0000 00 00 00

Nous obtenons à présent, code après code :
soit les deux octets suivants :




00


00
00

00
00
00
00
00
00
00



00


00
00

10
00
00
00
10
00
00


BIN00000000 00100000
HEX 00 20


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 :
- soit en deux fichiers hexadécimaux type Intel (dont le suffixe sera arbitrairement *.IU2 et *.IL8),
- soit un seul fichier binaire à destination du CMT-10-16K (convenons de *.41C).
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 le clone fabriqué par Christoph Klug,
- une unité de stockage de masse (HP82161A ou HP9114A),
- et HP-41C Software Development System (SDS-II © Hewlett-Packard SDS-II) comprenant EPROM.EXE et HIGHLOW.EXE.
Le pré-requis est une image de ROM au format Eramco Systems, CMT ou W&W (640 registres) incompatible avec l'Hepax.
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 trois types de fichiers, au choix :
- binaire (*.41U et *.41L),
- héxadécimal Motorola (appelons les *.MU2 et *.ML8),
- binaire pour programmer un CMT-10-16K (*.41C)
Le format *.ROM très courant de nos jours n'est ni plus, ni moins qu'un *.41R. Il suffit de changer l'extension des fichiers*.ROM par *.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 permet de 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.














Emmanuel COMPES © 2011-2013