/* ---------------------------------------- | Adresse | Registre | Modifié | ---------------------------------------- | | | | | | | | | | | | | i | 0x777756b8 | int | | size | 0x777756b8 | int | ---------------------------------------- */ #include "tables.h" #include #define NB_REG 16 #define MEM_SIZE 256 #define NB_INSTRUCTIONS 256 #define MEM_INST_SIZE 256 #define NB_BITS_INSTRUCTION 8 #define NB_BITS 8 int traduction_JMP[NB_INSTRUCTIONS]; struct str_instruction { enum instruction_t instruction; int param1; int param2; int param3; }; int last_instruction = 0; struct str_instruction buffer[3*NB_INSTRUCTIONS]; void add_instruction(enum instruction_t inst, int param1, int param2, int param3) { struct str_instruction my_instruction = {inst, param1, param2, param3}; buffer[last_instruction] = my_instruction; last_instruction++; } void write_asm(FILE * file) { int i = 0; while (i=0; i--) { buff[N-1-i] = tampon[i]; } buff[N] = '\0'; } void write_instruction_binary(FILE * file, struct str_instruction instr, int compact, int printSeparator) { char buff1[33]; char buff2[33]; char buff3[33]; char buff4[33]; convert_to_binary_on_N(instr.instruction, NB_BITS_INSTRUCTION, buff1); convert_to_binary_on_N(instr.param1, NB_BITS, buff2); convert_to_binary_on_N(instr.param2, NB_BITS, buff3); convert_to_binary_on_N(instr.param3, NB_BITS, buff4); if (compact) { fprintf(file, "%s%s%s%s", buff1, buff2, buff3, buff4); } else { fprintf(file, "\"%s%s%s%s\"", buff1, buff2, buff3, buff4); if (printSeparator) { fprintf(file, ", "); } } } void write_code_machine(FILE * file) { int i = MEM_INST_SIZE - 1; fprintf(file, "signal memory: MEMORY_TYPE := ("); while (i >= 0) { write_instruction_binary(file, buffer[i], 0, i != 0); i--; } fprintf(file, ");"); } void write_code_machine_compact(FILE * file) { fprintf(file, "\""); int i = MEM_INST_SIZE - 1; while (i >= 0) { write_instruction_binary(file, buffer[i], 1, 0); i--; } fprintf(file, "\"\n"); } struct case_adresse { int adresse; int registre; char modifie; }; struct case_adresse tableau[MEM_SIZE]; int registres[NB_REG]; void init (void) { int i; struct case_adresse case_courante = {0, -1, 0}; for (i=0; i