summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/registres.txt6
-rw-r--r--include/simulator.h2
-rw-r--r--lib/simulator.c27
3 files changed, 20 insertions, 15 deletions
diff --git a/doc/registres.txt b/doc/registres.txt
index c044e7b..6bac958 100644
--- a/doc/registres.txt
+++ b/doc/registres.txt
@@ -9,8 +9,4 @@ R20->R27 Utilisés par l'appelant lors d'un appel de procédure pour sauvegarder d
R28 Pointe sur le bloc de données statique
R29 Pointeur de pile (le premier emplacement libre de la pile)
R30 Pointe sur le premier bloc de mémoire libre
-R31 @ de retour
-
-
-
- \ No newline at end of file
+R31 Libre
diff --git a/include/simulator.h b/include/simulator.h
index 8780350..fee37cc 100644
--- a/include/simulator.h
+++ b/include/simulator.h
@@ -9,7 +9,7 @@
#define REG_RD 33 /* Numero du registre Rd */
#define REG_PC 34 /* Numero du registre PC */
#define REG_FLAG 35 /* Numero du registre de flags */
-#define REG_STACKPTR 36 /* Numero du registre de Push-Pop */
+#define REG_STACKPTR 29
#define ADD_SP (TAILLE_MEMOIRE-1) /* Emplacement de la pile */
diff --git a/lib/simulator.c b/lib/simulator.c
index 86fe1b4..1495687 100644
--- a/lib/simulator.c
+++ b/lib/simulator.c
@@ -68,7 +68,9 @@ void Initialisation(void)
for (i = 0; i < TAILLE_MEMOIRE; i++)
Reset(&memoire_principale[i]);
- InitRegistres(); /* initialisation des registres */
+
+ EcrireRegistre(0, 0);
+
EcrireRegistreSP(ADD_SP); /* initialisation du stack pointer */
}
@@ -393,17 +395,18 @@ void ChargeBinaire(char *filename)
{
FILE *file;
char message[BUFSIZ];
- Uint32 entrypoint, nb, ns, nbss, nr;
- Uint32 *relocation_table;
+ Uint32 entrypoint, nb, ns, nbss, nr, *relocation_table, entrypoint;
int i;
file = openfilereading(filename);
if (readword(file) != 0x58454e4e) { /* verification de la signature */
exception(1, _("Signature invalid"));
}
-
- sprintf(message, _("Total Size Of The Binary File: %d"), readword(file));
+
+ sprintf(message, _("Loading file %s"), filename);
pushcontext(message);
+
+ entrypoint = readword(file); /* point d'entrée */
nb = readword(file); /* taille du segment text */
ns = readword(file); /* taille des donnes statiques */
nbss = readword(file); /* taille des donnees non init */
@@ -424,11 +427,17 @@ void ChargeBinaire(char *filename)
free(relocation_table);
- InitRegistres(); /* initialisation des registres */
- EcrireRegistreSP(ADD_SP); /* initialisation du stack pointer */
-
- EcrireRegistrePC(LireRegistrePC() + base_addr); /* maj de PC */
+ entrypoint += base_addr;
+
+ EcrireRegistre(28, base_addr + nb);
+ EcrireRegistre(30, base_addr + nb + ns + nbss);
base_addr += nb + ns + nbss;
fclose(file);
+ popcontext();
+ sprintf(message, _("Executing file %s"), filename);
+ pushcontext(message);
+ Traitement(entrypoint);
+ popcontext();
+ base_addr -= nb + ns + nbss;
}