2021-12-16 16:24:48 +01:00
|
|
|
#include<stdio.h>
|
|
|
|
#include<stdlib.h>
|
2021-12-17 10:36:49 +01:00
|
|
|
#include<string.h>
|
2021-12-16 16:24:48 +01:00
|
|
|
#include<time.h> /* Utilisé pour obtenir une adresse de démarrage aléatoire */
|
|
|
|
#include"mars_types.h" /* importe les types utilisés dans le programme */
|
2021-12-17 10:36:49 +01:00
|
|
|
#include"options.h" /* Inclus les options du programme */
|
|
|
|
|
2021-12-17 12:11:49 +01:00
|
|
|
void initialiser_memoire(){
|
|
|
|
/* Boucle qui vient placer le programme dans la mémoire */
|
|
|
|
} /* Va initialiser la mémoire en plaçant les deux programmes dans des adresses aléatoires */
|
2021-12-17 10:36:49 +01:00
|
|
|
|
|
|
|
int calculer_position(); /* Va permettre de calculer la position à laquelle le programme doit effectuer une action*/
|
|
|
|
|
2021-12-17 13:29:04 +01:00
|
|
|
void execute_instruction(union mars_instruction instruction, int player, struct adresse memoire[TAILLE_MEM], int position[2]){
|
2021-12-17 12:11:49 +01:00
|
|
|
short int operation = instruction.instruct.codeOp; /* Pour rendre le code un peu plus lisible */
|
|
|
|
|
|
|
|
switch (operation){
|
|
|
|
case MOV:
|
|
|
|
printf("on a demandé un mov noice\n");
|
|
|
|
case ADD:
|
|
|
|
|
|
|
|
case SUB:
|
|
|
|
|
|
|
|
case JMP:
|
2021-12-17 13:29:04 +01:00
|
|
|
short int modeadresse = instruction.instruct.modeAddrA;
|
|
|
|
|
|
|
|
if (modeadresse == IMMEDIAT){
|
|
|
|
position[player] = (instruction.instruct.ArgA + TAILLE_MEM) % TAILLE_MEM;
|
|
|
|
} else if (modeadresse == DIRECT) {
|
|
|
|
position[player] += (instruction.instruct.ArgA + TAILLE_MEM) % TAILLE_MEM;
|
|
|
|
} else if (modeadresse == INDIRECT){
|
|
|
|
/* Lire contenu mémoire à l'adresse demandée (DAT) puis aller à position actuelle + num contenu dans l'adresse relative */
|
|
|
|
}
|
2021-12-17 12:11:49 +01:00
|
|
|
|
|
|
|
case DJZ:
|
|
|
|
|
|
|
|
case CMP:
|
|
|
|
|
|
|
|
case DAT:
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
2021-12-17 10:36:49 +01:00
|
|
|
}
|
|
|
|
}
|
2021-12-16 16:24:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
int main(int argc, char* argv[]){
|
2021-12-17 10:36:49 +01:00
|
|
|
srand(time(NULL)); /* Initialise le pseudo aléatoire pour tout le programme */
|
|
|
|
|
|
|
|
struct adresse memoire[TAILLE_MEM]; // Initialisation de la mémoire 0->7999
|
|
|
|
int position[2] = {0,0}; /* Position des joueurs */
|
2021-12-16 16:24:48 +01:00
|
|
|
|
|
|
|
if (argc < 3){
|
|
|
|
printf("Vous n'avez pas rentrez assez d'arguments \n");
|
2021-12-16 22:42:33 +01:00
|
|
|
printf("Exemple d'utilisation: %s fichier1.cass fichier2.cass\n", argv[0]);
|
2021-12-16 16:24:48 +01:00
|
|
|
return EXIT_FAILURE;
|
|
|
|
} else if (argc > 3){
|
|
|
|
printf("Vous avez utilisé trop d'arguments \n");
|
2021-12-16 22:42:33 +01:00
|
|
|
printf("Exemple d'utilisation: %s fichier1.cass fichier2.cass\n", argv[0]);
|
2021-12-16 16:24:48 +01:00
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
FILE* fichier1;
|
|
|
|
FILE* fichier2;
|
|
|
|
|
|
|
|
fichier1 = fopen(argv[1], "r");
|
|
|
|
fichier2 = fopen(argv[2], "r");
|
|
|
|
|
|
|
|
if(fichier1 == NULL || fichier2 == NULL){
|
|
|
|
printf("Erreur d'ouverture du fichier !\n");
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("Fichier 1: %s\n", argv[1]);
|
|
|
|
printf("Fichier 2: %s\n", argv[2]);
|
|
|
|
|
2021-12-16 22:42:33 +01:00
|
|
|
/* To do: faire le programme qui lit le fichier compilé */
|
|
|
|
|
2021-12-16 16:24:48 +01:00
|
|
|
fclose(fichier1);
|
|
|
|
fclose(fichier2);
|
2021-12-17 10:36:49 +01:00
|
|
|
|
|
|
|
union mars_instruction to_do;
|
|
|
|
to_do.instruct.codeOp = 1;
|
|
|
|
to_do.instruct.ArgA = 7909;
|
|
|
|
to_do.instruct.ArgB = 100;
|
|
|
|
to_do.instruct.modeAddrA = 1;
|
|
|
|
to_do.instruct.modeAddrB = 2;
|
|
|
|
printf("Valeur instruction: %lld\n", to_do.instructLL);
|
|
|
|
execute_instruction(to_do, 1, memoire, position);
|
|
|
|
|
2021-12-16 16:24:48 +01:00
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|