diff options
-rw-r--r-- | doc/registres.txt | 6 | ||||
-rw-r--r-- | include/simulator.h | 2 | ||||
-rw-r--r-- | lib/simulator.c | 27 |
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; } |