Add the overall emulation pipeline, w/ T

This commit is contained in:
sBubshait 2024-06-02 21:46:34 +01:00
parent 78d1f5588f
commit 46c1b42c53
6 changed files with 46 additions and 10 deletions

View File

@ -1,3 +1,5 @@
#ifndef __A64INSTRUCTION__
#define __A64INSTRUCTION__
#include "a64instruction_DPImmediate.h" #include "a64instruction_DPImmediate.h"
#include "a64instruction_Branch.h" #include "a64instruction_Branch.h"
#include "a64instruction_SingleTransfer.h" #include "a64instruction_SingleTransfer.h"
@ -22,3 +24,5 @@ typedef struct {
a64inst_SingleTransferData SingleTransferData; a64inst_SingleTransferData SingleTransferData;
} data; } data;
} a64inst_instruction; } a64inst_instruction;
#endif

View File

@ -69,5 +69,3 @@
#define BRANCH_CONDITIONAL_COND_MSB 4 #define BRANCH_CONDITIONAL_COND_MSB 4
#define BRANCH_CONDITIONAL_OFFSET_LSB 5 #define BRANCH_CONDITIONAL_OFFSET_LSB 5
#define BRANCH_CONDITIONAL_OFFSET_MSB 24 #define BRANCH_CONDITIONAL_OFFSET_MSB 24
a64inst_instruction *decode(word w);

View File

@ -1,5 +1,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include "emulator.h"
#include "fileio.h"
#include "print.h"
#include "decode.h"
#include "execute.h"
extern a64inst_instruction *decode(word w);
int main(int argc, char **argv) { int main(int argc, char **argv) {
@ -18,6 +25,28 @@ int main(int argc, char **argv) {
} }
} }
// Initialising the machine state
Machine *state = {0};
state->memory = fileio_loadBin(argv[1], MEMORY_SIZE);
state->conditionCodes = (PState){0, 1, 0, 0};
state->pc = 0x0;
// get
a64inst_instruction *inst;
do {
word instruction = readWord(state, state->pc);
inst = decode(instruction);
execute(state, inst);
state->pc += 1;
} while (inst->type != a64inst_HALT);
printState(state, out);
free(state->memory);
return EXIT_SUCCESS;
} }

View File

@ -1,6 +1,7 @@
#ifndef __EMULATOR__ #ifndef __EMULATOR__
#define __EMULATOR__ #define __EMULATOR__
#include "global.h" #include "global.h"
#include <stdbool.h>
/************************************ /************************************
* DEFINITIONS * DEFINITIONS
@ -23,7 +24,7 @@ typedef struct {
typedef struct { typedef struct {
word registers[REGISTER_COUNT]; word registers[REGISTER_COUNT];
word pc; word pc;
byte memory[MEMORY_SIZE]; byte *memory;
PState conditionCodes; PState conditionCodes;
} Machine; } Machine;

View File

@ -1,18 +1,18 @@
#include "execute.h" #include "execute.h"
void execute(a64inst_instruction inst) { void execute(Machine *state, a64inst_instruction *inst) {
switch (inst.type) { switch (inst->type) {
case a64inst_Halt: case a64inst_HALT:
// Halt the program // Halt the program
break; break;
case a64inst_DPImmediate: case a64inst_DPIMMEDIATE:
// Execute a data processing immediate instruction // Execute a data processing immediate instruction
break; break;
case a64inst_Branch: case a64inst_BRANCH:
// Execute a branch instruction // Execute a branch instruction
break; break;
case a64inst_DPRegister: case a64inst_DPREGISTER:
// Execute a data processing register instruction // Execute a data processing register instruction
break; break;
default: default:

View File

@ -1,3 +1,7 @@
#ifndef __EXECUTE__
#define __EXECUTE__
#include "a64instruction.h" #include "a64instruction.h"
#include "emulator.h"
void execute(a64inst_instruction inst); void execute(Machine *state, a64inst_instruction *inst);
#endif