Files
MyLittleCPU/src/main.c

58 lines
1.6 KiB
C

#include <stdio.h>
#include "emu.h"
#include "util.h"
int main(int argc, char** argv) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <ROM to emulate>\n", argv[0]);
return 1;
}
Emulator* emu = initEmulator(0x00010FFF);
if (!emu) {
fprintf(stderr, "emu: error: failed to allocate memory for emulator\n");
return 1;
}
/*
Instruction program[] = {
{INST_MVI, {REG_A}, 0, true},
{INST_MVI, {REG_B}, 123, true},
{INST_PORT, {REG_A, REG_B, 0}, 0, false},
{INST_PORT, {REG_A, REG_B, 1}, 0, false},
{INST_HLT, {}, 0, false}
};
RomFile* f = readProgramFromFile("../add.o");
memcpy(emu->mem + MEM_PROGRAM_START, f->instructions, sizeof(SerializedInst) * f->header.numInstructions);
memoryLoadProgram(emu->mem, program, sizeof(program)/sizeof(program[0]));
*/
RomFile* rom = readProgramFromFile(argv[1]);
if (rom == NULL) {
fprintf(stderr, "Failed to read rom from %s\n", argv[1]);
return 1;
}
memcpy(emu->mem->data + MEM_PROGRAM_START, rom->instructions, sizeof(SerializedInst) * rom->header.numInstructions);
emu->pc = MEM_PROGRAM_START;
startEmulator(emu);
printf("Emulation completed!\n");
printf("Registers:\n");
printf(" A: %d\n", emu->regs[REG_A]);
printf(" B: %d\n", emu->regs[REG_B]);
printf(" C: %d\n", emu->regs[REG_C]);
printf(" X: %d\n", emu->regs[REG_X]);
printf(" Y: %d\n", emu->regs[REG_Y]);
printf(" Z: %d\n", emu->regs[REG_Z]);
printf(" R: %d\n", emu->regs[REG_R]);
printf(" F: %d\n", emu->regs[REG_F]);
freeEmulator(emu);
return 0;
}