From bc91b6a7254b3920a6f1b83274be899d150ad538 Mon Sep 17 00:00:00 2001 From: Yvan Date: Fri, 17 Dec 2021 17:14:04 +0100 Subject: [PATCH] =?UTF-8?q?ptit=20commit=20apr=C3=A8s=20les=20mov?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mars_main.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/mars_main.c b/mars_main.c index 38bcadf..fdcafd1 100644 --- a/mars_main.c +++ b/mars_main.c @@ -17,6 +17,11 @@ int calculer_position(int posActuelle, short int modeAddr, short int valeur, str return (posActuelle + (TAILLE_MEM + valeur)) % TAILLE_MEM; } else if (modeAddr == INDIRECT){ /* Va voir à la position + valeur, */ + int posToCheck = (posActuelle + (TAILLE_MEM + valeur)) % TAILLE_MEM; + union mars_instruction val; + val.instructLL = memoire[posToCheck].instruction; + printf("Valeur stockée dans la ram: %d", val.instruct.ArgB); + } else if(modeAddr == IMMEDIAT) { /* Retourne l'arguement de la position */ return valeur; @@ -41,9 +46,19 @@ void execute_instruction(union mars_instruction instruction, int player, struct int position = calculer_position(position, instruction.instruct.modeAddrB, instruction.instruct.ArgB, memoire); memoire[position].instruction = to_write.instructLL; memoire[position].player = player; + /* Ecrit un DAT avec la valeur demandée par le VIRUS */ } else { + /* Gérer les autres opérations de mov ici */ + int position_1 = calculer_position(position, instruction.instruct.modeAddrA, instruction.instruct.ArgA, memoire); + int position_2 = calculer_position(position, instruction.instruct.modeAddrB, instruction.instruct.ArgB, memoire); + + memoire[position_2].instruction = memoire[position_1].instruction; + memoire[position_2].player = player; + memoire[position_1].instruction = 0; + /* @APPEL GRAPHIQUE */ } + } case ADD: { @@ -56,14 +71,7 @@ void execute_instruction(union mars_instruction instruction, int player, struct short int modeadresse = instruction.instruct.modeAddrA; int position_calc = calculer_position(position, modeadresse, instruction.instruct.ArgA, memoire); printf("Positon calculée: %d\n", position_calc); - positions[player] = position; - // if (modeadresse == IMMEDIAT){ - // positions[player] = (instruction.instruct.ArgA + TAILLE_MEM) % TAILLE_MEM; - // } else if (modeadresse == DIRECT) { - // positions[player] += (instruction.instruct.ArgA + TAILLE_MEM) % TAILLE_MEM; - // } else if (modeadresse == INDIRECT){ - // /* TODO: Lire contenu mémoire à l'adresse demandée (DAT) puis aller à position actuelle + num contenu dans l'adresse relative */ - // } + positions[player] = position; /* On change la position du joueur */ } case DJZ: /* */ @@ -116,7 +124,7 @@ int main(int argc, char* argv[]){ union mars_instruction to_do; to_do.instruct.codeOp = JMP; to_do.instruct.ArgA = 753; - to_do.instruct.ArgB = 100; + to_do.instruct.ArgB = 0; to_do.instruct.modeAddrA = DIRECT; to_do.instruct.modeAddrB = DIRECT; printf("Valeur instruction: %lld\n", to_do.instructLL);