FR 2646255 A1 19901026 FR 9004943 A 19900418 La présente invention se rapporte à un agencement permettant de réduire l'encombrement en mémoire, utile dans un émetteur de télécommande programmable pour un produit électronique du commerce comme un enregistreur à cassette vidéo, un convertisseur à cable, un tournevidéodisque, un récepteur de télévision ou analogue. Pour les circuits électroniques du commerce, la tendance dans les télécommandes à infrarouges est l'unité manuelle de télécommande universelle multi-marques, qui commande tous les produits électroniques du commerce fabriqués par différents fabricants, et utilisant des formats respectifs différents de code de signaux de télécommande. Les unités manuelles universelles de télécommande offrent à l'utilisateur la facilité de n'employer qu'une seule unité manuelle de télécommande, tout en étant capables de commander la plupart, sinon toutes les fonctions des produits électroniques du commerce. A un degré important, le nombre de fonctions différentes et de différents formats de signaux d'ordres de télécommande pouvant 8tre traités par une télécommande universelle dépend de la quantité de mémoire disponible pour le stockage du code de télécommande. Il y a deux tentatives de base aux unités manuelles universelles de télécommande. Un système à base d'une mémoire à accès aléatoire est souvent décrit comme une unité manuelle de télécommande "qui apprend". Ce type d'unité manuelle de télécommande nécessite que l'utilisateur "enseigne" à l'unité manuelle de télécommande des fonctions souhaitées de son unité manuelle d'origine. Cela est usuellement fait par commutation de l'unité manuelle de télécommande "qui apprend" à un mode d'apprentissage et en orientant physiquement les deux unités manuelles de manière que l'unité manuelle de télécommande "qui apprend" puisse recevoir les émissions infrarouges de l'unité manuelle à émuler. Ce processus -2- d'apprentissage commence comme un processus de stockage d'informations, o une émission infrarouge est enregistrée telle qu'elle est reçue par la télécommande qui apprend. Après ce stockage initial de la donnée "brute", la donnée brute est analysée et comprimée puis la version finale comprimée de la donnée est stockée dans la mémoire à accès aléatoire. Quand l'unité manuelle de télécommande universelle est utilisée dans le mode de télécommande pour transmettre un ordre, les codes stockés et comprimés sont rappelés de la mémoire, décomprimés et le signal résultant est transmis. Un système basé sur une mémoire morte est restreint à un groupe fixe de dispositifs, usuellement des récepteurs de télévision, des enregistreurs à cassettes vidéo et des convertisseurs à câble. Dans une telle unité manuelle, tous les différents formats de code pour toutes les fonctions pour chaque type de dispositif à commander doivent être programmés au préalable. Dans ce cas également, les codes de télécommande sont usuellement comprimés d'une certaine manière pour occuper aussi peu d'espace que possible dans la mémoire. Avec chaque technique, comme l'espace est limité dans la mémoire, plus la technique de compression est efficace, plus on peut stocker de fonctions. Une autre façon de préserver l'espace de la mémoire consiste à réduire le nombre d'instructions de programme nécessaires pour adresser la mémoire en prévoyant une routine plus efficace pour adresser la mémoire. La présente invention est dirigée vers cela et concerne particulièrement la conservation de l'espace de la mémoire lorsque l'on utilise ce que l'on appelle "l'adressage indexé" ou variable. L'utilisation de "matrices" (c'est-à-dire des groupes d'emplacements de mémoire) en logiciel de microprocesseur est assez courante, usuellement pour des tables à consulter et/ou des tables de données. Elles sont en réalité si courantes que la plupart des microprocesseurs - 3- contiennent un "registre d'index" que l'on peut utiliser pour un accès indirect à la donnée. Par exemple, si X=8 et que POINTEUR est le point de départ (dans la mémoire) d'une table de données, LDA POINTEUR, X recherche le huitième octet après POINTEUR dans la mémoire et le stocke dans l'accumulateur. En effet, LDA POINTEUR, X est une instruction qui force le microordinateur à lire la donnée d'un emplacement de mémoire adressé par la combinaison de la valeur du POINTEUR (une adresse de seize bits) plus la valeur stockée dans le registre de X. C'est une technique très puissante mais qui nécessite une portion importante de la mémoire pour adresser certaines matrices. Il faut reconnaître ici qu'une seule sous-routine peut être utilisée pour recherchertoutes les données stockées dans l'une d'un certain nombre de matrices. Afin d'adresser une matrice particulière, la seule sous-routine est modifiée par addition de l'emplacement de départ de la matrice souhaitée. Les données se rapportant aux emplacements de départ sont stockées dans une table. L'invention sera mieux comprise et d'autres buts, caractéristiques, détails et avantages de celle-ci apparaîtront plus clairement au cours de la description explicative qui va suivre faite en référence aux dessins schématiques annexés donnés uniquement à titre d'exemple illustrant plusieurs modes de réalisation de l'invention et dans lesquels: - la figure 1 montre, sous forme de schéma bloc, une unité manuelle de télécommande du type télécommande qui apprend o peut être mise en oeuvre la présente invention; - la figure 2 montre, sous forme de schéma bloc, un agencement connu d'emplacements de mémoire dans une mémoire morte; - la figure 3 montre, sous forme de schéma bloc, un autre agencement de la mémoire morte de la figure 2; - la figure 3a montre, sous forme de schéma bloc, - 4- un exemple d'une matrice irrégulière d'emplacements de mémoire; - la figure 4 montre, sous forme de schéma bloc, un mode de réalisation de l'invention; - la figure 5 montre un agencement connu de "pages" de la mémoire; et - la figure 6 montre, sous forme de schéma bloc, un mode de réalisation de la présente invention. Un dispositif approprié pour une utilisation comme unité manuelle de télécommande du type qui apprend, du type ci-dessus décrit, est montré à la figure 1. Un contrôleur peut être un microprocesseur (les termes microprocesseur et microordinateur, tels qu'utilisés ici, ont la même signification). Le contrôleur 100 reçoit, d'un oscillateur d'horloge , des signaux d'horloge qui établissent la temporisation des fonctions du contrôleur 100. Le contrôleur 100, selon ces instructions programmées, adresse une mémoire 120 qui peut être ou ne pas être interne au contrôleur 100. La mémoire 120 comporte une zone de travail ou polyvalente 122 et une zone de données 124. Le contrôleur 100 reçoit également la donnée introduite par un utilisateur via un clavier 130 comprenant un groupe de touches 132 comportant des touches de chiffres 0-9, une touche canal vers le haut, une touche canal vers le bas, est une touche d'alimentation en courant. Le clavier 130 peut également comporter un commutateur 134 pour activer un "mode d'apprentissage" (expliqué ci-dessous). Ce commutateur est montré sur le clavier 130 par la touche 134 mais, cependant, cela peut être un interrupteur séparé à bascule placé ailleurs sur l'unité manuelle de télécommande. Dans le mode de réalisation illustré à la figure 1, la touche 134 est supposée présenter une caractéristique de "bascule". En effet, une pression de la touche 134 force le mode d'apprentissage à être actif et une seconde pression de la touche 134 met l'unité manuelle de télécommande à son mode normal de télécommande o les ordres de l'utilisateur peuvent être envoyés aux dispositifs qu'il commande. En mode d'apprentissage, le récepteur infrarouge reçoit des signaux infrarouges qui sont transmis par les unités manuelles de télécommande à émuler, et applique des données numériques représentatives de ces signaux infrarouges au contrôleur 100. Le contrôleur 100 stocke la donnée "brute" (c'est-à-dire non comprimée) dans la mémoire polyvalente 122. Ensuite, la donnée brute est comprimée et stockée pour une récupération ultérieure. Un exemple d'un système de télécommande qui comprime les codes pour le stockage peut être dans le brevet US N 4 623 887 (Welles, II). En mode normal de télécommande, lorsque l'on souhaite l'émission d'un signal de télécommande pour un ordre, le contrôleur 100 décomprime le code stocké et fait passer le code décomprimé résultant vers une unité de sortie 160 qui assemble la séquence appropriée des salves et des espaces pour l'émission. L'oscillateur d'horloge 110 applique un signal d'horloge à un diviseur de fréquence 150 qui applique un signal à une fréquence plus basse à l'unité de sortie 160. Ce signal à plus basse fréquence forme la composante de salve du courant de données qui est appliqué à la diode infrarouge 170 pour son émission. Dans l'alternative, le diviseur de fréquence 150 peut être éliminé, les impulsions de salve étant produites par le contrôleur "en basculant" rapidement sa sortie. Dans les systèmes basés sur une mémoire morte, la compression n'est pas accomplie par l'unité manuelle de télécommande mais est accomplie en un temps antérieur, en usine, afin de produire des codes comprimés de commande qui sont stockés dans une mémoire morte. Dans ce cas, le récepteur infrarouge 140 et la touche 134 "mode apprentissage" ne seront pas présents dans l'unité manuelle de télécommande. Les ordres individuels pour chaque dispositif à -6- contr8ler sont stockés dans la mémoire en des emplacements respectifs. La figure 2 montre un certain nombre de ces emplacements qui sont groupés en une table (telle qu'une matrice à une dimension). Tandis que chacun des groupes 215, 225 et 235 de la figure 2 est illustré comme ayant 256 emplacements de mémoire, on comprendra que chaque groupe peut avoir tout nombre d'emplacements de mémoire jusqu'à un maximum de 256 emplacements (la limite de 256 emplacements sera expliquée ci-dessous). Il est souvent pratique qu'un programmeur agence des groupes d'emplacements de mémoire contenant les données en rapport en une matrice multi-dimensionnelle. La figure 3 illustre une matrice bi-dimensionnelle o les emplacements de mémoire sont agencés en colonnes et rangés (c'est-à-dire une matrice bidimensionnelle). La figure 5 illustre une matrice tri-dimensionnelle comprenant des "pages" de mémoire (ainsi appelée parce qu'en regardant de cette manière, l'agencement de mémoire ressemble aux pages d'un livre). Des chiffres similaires de référence sur les figures 2 et 3 identifient des éléments ayant des fonctions similaires. Par conséquent, seule la figure 3 sera décrite en détail. Comme le montre la figure 3, les colonnes individuelles de la matrice (315, 325, 335) sont adressées par des sous-routines individuelles respectives (310, 320, 330), comme cela est montré par des lignes en pointillé entre les sous-routines et les colonnes respectives. Ces sous-routines utilisent un système à pointeur indexé pour adresser des rangées individuelles dans une colonne. Le pointeur indique l'adresse de départ de la colonne souhaitée (A0, BO ou CO, respectivement). Une valeur d'index est contenue dans un registre qui existe à l'intérieur du microordinateur. Ce registre est connu comme le registre de X. La valeur contenue dans le registre de X est ajoutée à la valeur contenue dans le registre du pointeur, pour arriver à une adresse finale de l'emplacement souhaité de la mémoire. Comme le registre de X a 8 bits de 264625-5 -7- long, il peut contenir des valeurs jusqu'à et comprenant 255. Ainsi, la valeur du registre du pointeur peut être décalée au maximum de 255 emplacements additionnels de mémoire. Les petites matrices ne posent aucun problème pour un simple registre d'index à 8 bits, même ayant plusieurs dimensions. Pour une matrice à plusieurs dimensions M (i, j, k,. ) o..DTD: i ( 2** ni, j et ni + nj + nk +... n. bits + n. bits + nk bits +... i A titre d'exemple, dans l'équation donnée ci-dessus, "i"l' pourrait représenter le numéro d'une colonne particulière d'une matrice, "j" pourrait représenter le numéro d'une rangée particulière d'une matrice et "k" pourrait représenter une page particulière de colonnes et rangées (comme le montre la figure 5). Ainsi, toute matrice à plusieurs dimensions dans laquelle i x j x k x... 8, il faut trouver une autre méthode d'adressage. Certaines matrices, appelées matrices irrégulières, n'utilisent que certaines étendues d'éléments -- 8-- (comme les éléments j-4 dans io, les éléments j0-i dans il, les éléments jO-j7 dans i2, etc...). Un exemple d'une telle matrice irrégulière est montré à la figure 3a. Le fait d'allouer une mémoire pour tous les octets non utilisés dans une telle matrice signifie qu'une grande partie de l'espace de la mémoire est perdu. Une tentative typique à l'adressage des matrices irrégulières consiste à faire passer l'index de rangée à une sous-routine indexée en colonne qui recherche la donnée. Cela sera mieux montré par un exemple. Par exemple, pour rechercher l'octet de données stocké dans l'emplacement de mémoire I2 DATA 5 de la figure 3a (élément de mémoire i=2, j=5, o M(i (inscrite dans le langage d'assemblage pour le micro- processeur MOTOROLA 6805). Ceux qui sont compétents en la matière reconnaîtront que IO DATA est un pointeur à seize bits vers le départ de la table de données. Alternativement, on peut considérer que IO DATA est un label représentant l'adresse de seize bits de IO DATA O, le premier emplacement de la matrice des emplacements de mémoire. GET VALUE (VALEURLECTURE);on suppose A = IINDEX, X = JINDEX STX JINDEX STOCKER J INDEX TEMPORAIREMENT STA IINDEX STOCKER IINDEX TEMPORAIREMENT LSLA;ACC = IINDEX * 2 LSLA;ACC = IINDEX * 4 ADD IINDEX;ACC = IINDEX * 5 TAX;CHARGER REGISTRE INDEX LDA JINDEX;RECUPERER JINDEX JMP IO GET,X;RETOUR A DEMANDEUR, AVEC DONNEE IO GET: TAX;CET ORDRE PREND 1 OCTET LDA IODATA,X;CET ORDRE PREND 3 OCTET RTS;CET ORDRE PREND 1 OCTET -9- I1 GET: TAX; 5 OCTETS/COLONNE LDA IlDATA,X RTS I2 GET: TAX LDA I2_DATA,X RTX IO DATA:DB 00; SEULEMENT CINQ RANGEES DANS COLONNE O DB 01 DB 02 DB 03 DB 04 I1 DATA: DB 10; SEULEMENT DEUX RANGEES DANS COLONNE 1 DB 11 I2 DATA: DB 20; HUIT RANGEES DANS COLONNE 2 DB 21 DB 22 DB 23 DB 24 DB 25; LA DONNEE SOUHAITEE EST ICI DB 26 DB 27 13 DATA: DB 30 DB 31 Dans l'exemple ci-dessus, des sous-routines séparées, IOGET, IlGET, et I2_GET sont utilisées pour un accès aux données de chaque matrice respective. Pour la simplicité, la liste d'une quatrième sous-routine similaire I3_GET n'est pas donnée. Ces sous-routines séparées sont identifiées sur la figure 3a par les chiffres de référence 310a, 320a, 330a et 340a, respectivement. Chacune de ces sous-routines séparées est stockée dans la mémoire morte et a 5 octets de long. Il faut noter que chaque sous-routine est stockée dans la mémoire morte, que chacune ne peut être modifiée et qu'elle doit par conséquent comprendre - 10 - l'adresse de seize bits de la colonne particulière à adresser (comme ADRESSE HAUTE DE IO DATA 0, ADRESSE BASSE DE IO DATA 0). La routine dont la liste est donnée ci-dessus est introduite par une valeur de lecture (GET_VALUE), qui est une section du programme qui évalue l'index I (c'est-à-dire le pointeur vers la colonne souhaitée) et calcule une adresse à laquelle le microordinateur sautera afin de chercher la donnée souhaitée. La sous-routine 10 GET commence à l'emplacement de mémoire IO GET+0, la sous-routine Il GET commence à IO GET+5. De même, la sous-routine I2 GET commence à I0 GET+10. Ainsi, afin de bien faire le saut vers la sous-routine correcte pour rechercher la donnée souhaitée, l'index doit être multiplié par 5, comme cela est montré dans la routine de GET VALUE dont la liste est donnée ci-dessus. Il faut noter que parmi les 5 octets de chacune des sous-routines I0 GET, I1 GET, I2 GET etc.., 3 des octets (TAX, LDA, et RTS) sont identiques et sont répétés dans chaque sous-routine. Pour une si petite matrice, cette méthode est tout à fait inefficace. Cependant, pour de grandes tables, cette tentative a été utilisée afin de ne pas perdre de grandes quantités de la mémoire. Il faut noter que cette méthode est restreinte à I INDEX peut être fait correctement. Bien que cette technique se réfère à des matrices ayant des indices un peu plus grands, le code requis pour la réaliser peut être rapidement étendu pour des rangées multiples. Comme on l'a noté ci-dessus, cette technique s'applique uniquement à des matrices ayant moins de 51 colonnes et 256 rangées. Le procédé et le dispositif décrits ici surmontent ces limites. Au lieu d'utiliser des sous-routines indexées par colonne pour rechercher la donnée de rangée souhaitée, - il - un dispositif selon la présente invention n'utilise qu'une sous-routine générale pour rechercher la donnée de toutes les colonnes. La présente invention sera maintenant décrite en se référant à la figure 4. Comme on l'a noté ci-dessus, toutes les sous-routines indexées par colonne partagent la même taille et la même forme. TAX CHERCHER INDEX RANGEE LDA COLONNE, X CHERCHER DONNEE RT RETOUR A DEMANDEUR AVEC DONNEE Selon la présente invention, à l'initialisation, cette sous-routine générale (CHERCHER) 450 est récupérée de la mémoire morte 400 et est stockée, code d'opération par code d'opération ou opcode par opcode, en tant qu'une seule sous-routine 420 dans une mémoire à accès aléatoire 410, et on y accède à la façon suivante: CHERCHER LDA COLONNE, X CHERCHER DONNEE RTS RETOUR A DEMANDEUR AVEC DONNEE Dans l'espace de la mémoire à accès aléatoire, cela est défini comme suit: CHERCHER: LDA OPCODE DB 1; CODE OPERATION LDA PLACE ICI HIGH INDX DB 1; OCTET HAUT D'ADRESSE COLONNE LOW INDX DB i; OCTET BAS D'ADRESSE COLONNE RTS OPCODE DB 1; CODE OPERATION RTS PLACE ICI Les octets de la RAM, LDA OPCODE et RTS OPCODE sont initialisés au code opération correct pour ce micro- processeur particulier avant d'appeler la routine et ensuite, leur valeur ne change plus. En effet, l'emplacement de mémoire LDAOPCODE est chargé de l'octet - 12 - de code qui, lorsqu'il est exécuté, force le contrôleur à lire un octet de donnée stockée dans l'emplacement de la mémoire dont l'adresse est stockée immédiatement après cette instruction, décalée de la valeur stockée dans le registre de X. Quand la routine CHERCHER est d'abord lue de la mémoire morte et est stockée dans la mémoire à accès aléatoire, les emplacements de mémoire HIGH INDX et LOW INDX peuvent contenir une donnée sans signification. La donnée dans les emplacements de mémoire HIGH_INDX et LOW_INDX indique le début de la matrice respective (c'est-à-dire le groupe d'emplacements de mémoire) o est stockée la donnée souhaitée. La donnée correcte est inscrite dans ces emplacements comme suit. La sous-routine CHERCHER est appelée par la routine suivante, qui accède à une table 440 (COLONNE PTR) d'adresses stockées de manière contigUe appelées pointeurs de colonne, et stocke les pointeurs de colonne dans les emplacements de mémoire HIGH INDX et LOW INDX. GET VALUE:;ON SUPPOSE A = I INDEX, = JINDEX; STX ROWINDEX;INDEX RANGEE STOCKE LSLA;ACC = COLONNE * 2 TAX;PLACER COLONNE *2 DANS INDEX LDA COLONNE PTR,X;CHERCHER OCTER HAUT DE COLONNE INDEX STA HI INDX;RANGER INCX;INDIQUER OCTET BAS LDA COLONNE PTR,X;CHERCHER OCTET BAS D'INDEX STA LOW INDX;RANGER LDX ROWINDEX;PREPARER POUR INDEX RANGEE JMP FETCH;AJOUTER CHERCHER DONNEE COLUMN PTR: DB HAUT IO _DATA;COLONNE O ADRESSE (OCTET HAUT) DB BAS IO DATA;COLONNE O ADRESSE (OCTET BAS) DB HAUT Il_DATA;COLONNE 1 ADRESSE (OCTET HAUT) - 13 - DB BAS I1 DATA;COLONNE 1 ADRESSE (OCTET BAS) DB HAUT I2 DATA;COLONNE 2 ADRESSE (OCTET HAUT) DB BAS I2 DATA;COLONNE 2 ADRESSE (OCTET BAS) DB HAUT I3 DATA;COLONNE 3 ADRESSE (OCTET HAUT) DB BAS I3 DATA;COLONNE 3 ADRESSE (OCTET BAS) IO DATA, I1 DATA etc..., sont des adresses de 16 bits, stockées sous la forme de deux octets de huit bits, les huits bits hauts de l'adresse se trouvant en premier. Comme chacune des adresses a deux octets de long, l'adresse de IO_DATA débute à l'emplacement de mémoire COLONNEPTR+O, l'adresse de Il DATA débute à COLONNE PTR+2 et l'adresse de I2 DATA débute à COLONNE PTR+2 et l'adresse de I2 DATA débute à COLONNE PTR+4. Ainsi, afin de bien accéder à l'adresse correcte pour rechercher la donnée souhaitée, l'index doit être multiplié par 2 comme cela est montré dans la routine GET VALUE dont la liste est donnée ci-dessus. Cette technique peut désigner des matrices ayant jusqu'à 128 colonnes (0-127) et 256 rangées (0-255) et nécessite bien moins de mémoire pour le faire. La limite de 128 colonnes vient de 0127 colonnes par 2 octets chacune, dont le dernier compte est égal à 255, la plus haute valeur qui peut être stockée dans le registre de X à huit bits. Cette capacité étendue d'accès à la donnée vient aux dépends de l'addition d'un code à base d'une mémoire morte qui initialise la mémoire à accès aléatoire du "programme" par les codes appropriés. Il faut noter qu'un octet additionnel dans la routine GET VALUE peut 8tre préservé en abandonnant l'instruction INCX et en changeant l'instruction précédant immédiatement STA LOW INDX pour LDA COLONNE PTR+1,X. Si nécessaire, des matrices atteignant 256 colonnes sur 256 rangées peuvent être adressées en modifiant les programmes dont la liste est donnée ci-dessus comme cela est montré ci-dessous: - 14 - GETVALUE:;ON SUPPOSE A = I_INDEX, = J_INDEX; STX ROWINDEX;INDEX RANGEE STOCKE TAX;METTRE COLONNE DANS INDEX LDA HI COLPTR,X;CHERCHER OCTET HAUT DE COLONNE INDEX STA HIINDX;RANGER LDA LOCOLPTR,X;CHERCHER OCTET BAS D'INDEX STA LOWINDX;RANGER LDX ROWINDEX;PREPARER POUR INDEX RANGEE JMP FETCH;AJOUTER CHERCHER DONNEE HICOLPTR: DB HAUT IO _DATA;COLONNE O ADRESSE (OCTET HAUT) DB HAUT I1_DATA;COLONNE 1 ADRESSE (OCTET HAUT) DB HAUT I2-DATA;COLONNE 2 ADRESSE (OCTET HAUT) DB HAUT I3 DATA;COLONNE 3 ADRESSE (OCTET HAUT) LOCOL PTR: DB BAS IODATA;COLONNE O ADRESSE (OCTET BAS) DB BAS I1_DATA;COLONNE 1 ADRESSE (OCTET BAS) DB BAS I2_DATA;COLONNE 2 ADRESSE (OCTET BAS) DB BAS I3_DATA;COLONNE 3 ADRESSE (OCTET BAS) Dans le présent exemple, les octets hauts et bas du pointeur de colonne sont stockés dans des tables séparées (HI_COLPTR et LOCOLPTR) comme le montre la figure 6. Les deux tables sont indexées par la même valeur stockée dans le registre de X. Ainsi, il n'est pas nécessaire de multiplier la valeur d'index par 2 pour "sauter" les octets bas comme dans l'exemple qui précède. Comme aucune multiplication par 2 n'est requise, les 256 emplacements adressables peuvent être utilisés pour stocker les emplacements de départ des matrices. La présente invention a été décrite en se référant à une unité manuelle de télécommande mais elle peut s'appliquer à d'autres cas. - 15 - R E V E N D I C A T I 0 NS 1. Dispositif à utiliser dans une unité de télécommande pour adresser une mémoire, du type comprenant: un moyen formant mémoire comportant une zone de mémoire morte contenant des instructions de programme stockées sous la forme de données, un certain nombre d'emplacements de mémoire dudit moyen formant mémoire, lesdits emplacements de mémoire étant agencés en un certain nombre de groupes et les données comprenant des adresses des emplacements respectifs de départ desdits groupes; une zone de mémoire à accès aléatoire; et un moyen de commande couplé auxdites zones de mémoire morte et de mémoire à accès aléatoire, caractérisé en ce que ledit moyen de commande lit lesdites instructions de programme stockées sous la forme de données de ladite zone de mémoire morte (450), stocke lesdites instructions de programme dans ladite zone de mémoire à accès aléatoire (420), lit lesdites adresses de ladite zone de mémoire morte (440), modifie ladite donnée stockée dans ladite zone de mémoire à accès aléatoire (420) en stockant lesdites adresses respectives de départ desdits groupes pour former des instructions exécutables et exécute lesdites instructions dans ladite zone de mémoire à accès aléatoire (420) pour un accès auxdits emplacements de mémoire desdits groupes (415, 425, 435). 2. Dispositif selon la revendication 1, - caractérisé en ce que chaque groupe (415, 425, 435) des divers groupes comporte des nombres respectifs différents d'emplacements de mémoire. 3. Dispositif selon la revendication 1, caractérisé en ce que la limite du nombre des groupes est de 128. 4. Dispositif selon la revendication i, caractérisé en ce que la limite du nombre des groupes est de 256. - 16 - 5. Procédé pour adresser une mémoire, caractérisé par les étapes de: lire des instructions de programme qui sont stockés sous la forme de données dans une première zone de mémoire (450); stocker lesdites instructions de programme dans une seconde zone de mémoire (420); lire des adresses des colonnes d'une matrice des emplacements de mémoire (415, 425, 435) d'une troisième zone de mémoire (440), ladite matrice étant agencée en colonnes et rangées; modifier lesdites données stockées dans ladite seconde zone de mémoire (420) en stockant lesdites adresses desdites colonnes pour former des instructions exécutables; et exécuter lesdites instructions dans ladite seconde zone de mémoire (420) pour un accès auxdits emplacements de mémoire de ladite matrice.