summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/interne.c18
-rw-r--r--lib/memoire.c11
-rw-r--r--lib/registre.c15
-rw-r--r--lib/simulator.c38
4 files changed, 31 insertions, 51 deletions
diff --git a/lib/interne.c b/lib/interne.c
index 05c4332..5a563fe 100644
--- a/lib/interne.c
+++ b/lib/interne.c
@@ -1,12 +1,12 @@
#include <stdio.h>
#include "interne.h"
#include "simulator.h"
-
-// mettre des exceptions dans les fcns ci dessous a la place de GestionErreurs
-
-void GestionErreurs(void)
-{
-}
+#include "exceptions.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else
+#define _(x) x
+#endif
void Reset(Uint32 * i)
{ /* met tous les bits d'un mot à zéro */
@@ -22,7 +22,7 @@ void Set(Uint32 * i)
void ResetBit(Uint32 * i, int position)
{
if (position < 0 || position > 31) {
- GestionErreurs();
+ exception(1,_("ResetBit: Incorrect Value"));
} else {
Uint32 aux = VAL_MAX - (1 << position);
@@ -34,7 +34,7 @@ void ResetBit(Uint32 * i, int position)
void SetBit(Uint32 * i, int position)
{
if (position < 0 || position > 31) {
- GestionErreurs();
+ exception(1,_("SetBit: Incorrect Value"));
} else {
Uint32 aux = 1 << position;
@@ -46,7 +46,7 @@ void SetBit(Uint32 * i, int position)
int ValeurBit(Uint32 nombre, int position)
{
if (position < 0 || position > 31) {
- GestionErreurs();
+ exception(1,_("ValeurBit: Incorrect Value"));
return (-1);
}
return ((nombre >> position) & 1);
diff --git a/lib/memoire.c b/lib/memoire.c
index 0bbd367..e191735 100644
--- a/lib/memoire.c
+++ b/lib/memoire.c
@@ -1,6 +1,13 @@
#include "memoire.h"
#include "interne.h"
#include "simulator.h"
+#include "exceptions.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else
+#define _(x) x
+#endif
+
/*****************************************/
/** **/
@@ -15,7 +22,7 @@ Uint32 LD(Uint32 offset)
Reset(&i);
if (offset < 0 || offset >= TAILLE_MEMOIRE) {
- Set(&Err_Mem);
+ exception(1,_("Invalid Memory Adress"));
return (i);
} else {
i = memoire_principale[offset];
@@ -27,7 +34,7 @@ Uint32 LD(Uint32 offset)
void ST(Uint32 offset, Uint32 valeur)
{
if (offset < 0 || offset >= TAILLE_MEMOIRE)
- Set(&Err_Mem);
+ exception(1,_("Invalid Memory Adress"));
else
memoire_principale[offset] = valeur;
}
diff --git a/lib/registre.c b/lib/registre.c
index ccd284c..e77e9c1 100644
--- a/lib/registre.c
+++ b/lib/registre.c
@@ -1,6 +1,13 @@
#include "registre.h"
#include "interne.h"
#include "simulator.h"
+#include "exceptions.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else
+#define _(x) x
+#endif
+
/*****************************************/
/** **/
@@ -66,7 +73,7 @@ Uint32 LireRegistre(Uint32 champ_registre)
if (ValeurBit(champ_registre, 5) == 0) { /* Test du bit S */
Reset(&i);
if (champ_registre < 0 || champ_registre >= NB_REGISTRES_UTILISABLES) { /* Si on voudrait diminuer le nombre de registres */
- Set(&Err_Reg); /* Il n'y a que 32 registres */
+ exception(1,_("Invalid Register Descriptor")); /* Il n'y a que 32 registres */
return (i);
}
i = registre[champ_registre]; /* Registre classique */
@@ -82,7 +89,7 @@ Uint32 LireRegistre(Uint32 champ_registre)
case 3:
return (LireRegistreFLAG());
default:{
- Set(&Err_Reg);
+ exception(1,_("Invalid Register Descriptor"));
return (0);
}
}
@@ -96,7 +103,7 @@ void EcrireRegistre(Uint32 champ_registre, Uint32 valeur)
if (ValeurBit(champ_registre, 5) == 0) { /* Test du bit S */
Reset(&i);
if (champ_registre < 0 || champ_registre >= NB_REGISTRES_UTILISABLES)
- Set(&Err_Reg); /* Il n'y a que 32 registres */
+ exception(1,_("Invalid Register Descriptor")); /* Il n'y a que 32 registres */
else
registre[champ_registre] = valeur; /* Registre classique */
} else /* Registre spécial */
@@ -110,7 +117,7 @@ void EcrireRegistre(Uint32 champ_registre, Uint32 valeur)
case 3:
EcrireRegistreFLAG(valeur);
default:
- Set(&Err_Reg);
+ exception(1,_("Invalid Register Descriptor"));
}
}
diff --git a/lib/simulator.c b/lib/simulator.c
index ac1dae4..211e9de 100644
--- a/lib/simulator.c
+++ b/lib/simulator.c
@@ -56,8 +56,6 @@ void Initialisation(void)
{
int i;
- Reset(&Err_Mem);
- Reset(&Err_Reg);
for (i = 0; i < TAILLE_MEMOIRE; i++)
Reset(&memoire_principale[i]);
EcrireRegistrePP(ADD_PP);
@@ -137,7 +135,7 @@ void Decode(Uint32 instruction)
EcrireRegistre(champ_registre_resultat, resultat); /* On écrit le résultat dans le registre de sortie */
break;
}
- case 8:{ /* MOV <=> il exige une loge en losange ou la sauje jonche les sieges */
+ case 8:{ /* MOV */
if (ValeurBit(Extension(instruction), 4) == 1) /* MOV conditionnel */
if (ValeurBit(Extension(instruction), 5) == 0) /* Test normal */
switch (champ(Extension(instruction) >> 2, 4)) { /* teste les bits 2 et 3 */
@@ -301,39 +299,7 @@ void Traitement(void)
void Debogueur(void) // transformer en affiche reg
{
int i,j;
-
-/* gotoxy(1, 1);
- printf("Etat des registres classiques Etat des registres");
- gotoxy(1, 2);
- printf(" speciaux ");
- gotoxy(1, 11);
- printf(" Instruction a decoder");
- gotoxy(1, 14);
- printf(" Prochaine instruction");
- for (i = 1; i <= 16; i++) {
- gotoxy(1, i + 2);
- printf("r%2d:%9d", i - 1, registre[i - 1]);
- }
- for (i = 17; i <= 32; i++) {
- gotoxy(17, i - 16 + 2);
- printf("r%2d:%9d", i - 1, registre[i - 1]);
- }
- gotoxy(40, 4);
- printf("Rg :%9d", LireRegistreRG());
- gotoxy(40, 5);
- printf("Rd :%9d", LireRegistreRD());
- gotoxy(40, 6);
- printf("PC :%9d", LireRegistrePC());
- gotoxy(40, 7);
- printf("Flag :%9d", LireRegistreFLAG());
- gotoxy(40, 12);
- printf(" %9d", LireInstruction());
- registre[REG_PC]++;
- gotoxy(40, 15);
- printf(" %9d", LireInstruction());
- registre[REG_PC]--;
- getc(stdin);
-*/
+
for (i=0; i<=3; i++) {
for (j=1; j<=8;j++) {
printf(" R%02d ", (i*8+j));