mirror of https://github.com/mgba-emu/mgba.git
Initial commit
This commit is contained in:
commit
009bef870c
|
@ -0,0 +1,2 @@
|
|||
/build
|
||||
*~
|
|
@ -0,0 +1,4 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project(GBAc)
|
||||
file(GLOB SOURCES *.c)
|
||||
add_executable(gbac ${SOURCES})
|
|
@ -0,0 +1,23 @@
|
|||
#include "arm.h"
|
||||
|
||||
void ARMInit(struct ARMCore* cpu) {
|
||||
int i;
|
||||
for (i = 0; i < 16; ++i) {
|
||||
cpu->gprs[i] = 0;
|
||||
}
|
||||
|
||||
cpu->cpsr.packed = 0;
|
||||
cpu->spsr.packed = 0;
|
||||
|
||||
cpu->cyclesToEvent = 0;
|
||||
|
||||
cpu->shifterOperand = 0;
|
||||
cpu->shifterCarryOut = 0;
|
||||
|
||||
cpu->memory = 0;
|
||||
cpu->board = 0;
|
||||
}
|
||||
|
||||
void ARMCycle(struct ARMCore* cpu) {
|
||||
// TODO
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
#ifndef ARM_H
|
||||
#define ARM_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
enum {
|
||||
ARM_SP = 13,
|
||||
ARM_LR = 14,
|
||||
ARM_PC = 15
|
||||
};
|
||||
|
||||
enum ExecutionMode {
|
||||
MODE_ARM = 0,
|
||||
MODE_THUMB = 1
|
||||
};
|
||||
|
||||
enum PrivilegeMode {
|
||||
MODE_USER = 0x10,
|
||||
MODE_FIQ = 0x11,
|
||||
MODE_IRQ = 0x12,
|
||||
MODE_SUPERVISOR = 0x13,
|
||||
MODE_ABORT = 0x17,
|
||||
MODE_UNDEFINED = 0x1B,
|
||||
MODE_SYSTEM = 0x1F
|
||||
};
|
||||
|
||||
enum ExecutionVector {
|
||||
BASE_RESET = 0x00000000,
|
||||
BASE_UNDEF = 0x00000004,
|
||||
BASE_SWI = 0x00000008,
|
||||
BASE_PABT = 0x0000000C,
|
||||
BASE_DABT = 0x00000010,
|
||||
BASE_IRQ = 0x00000018,
|
||||
BASE_FIQ = 0x0000001C
|
||||
};
|
||||
|
||||
union PSR {
|
||||
struct {
|
||||
int exec : 4;
|
||||
int t : 1;
|
||||
int f : 1;
|
||||
int i : 1;
|
||||
int a : 1;
|
||||
int : 20;
|
||||
int v : 1;
|
||||
int c : 1;
|
||||
int z : 1;
|
||||
int n : 1;
|
||||
};
|
||||
|
||||
int32_t packed;
|
||||
};
|
||||
|
||||
struct ARMMemory;
|
||||
struct ARMBoard;
|
||||
|
||||
struct ARMCore {
|
||||
int32_t gprs[16];
|
||||
union PSR cpsr;
|
||||
union PSR spsr;
|
||||
|
||||
int32_t cyclesToEvent;
|
||||
|
||||
int32_t shifterOperand;
|
||||
int32_t shifterCarryOut;
|
||||
|
||||
struct ARMMemory* memory;
|
||||
struct ARMBoard* board;
|
||||
};
|
||||
|
||||
void ARMInit(struct ARMCore* cpu);
|
||||
void ARMCycle(struct ARMCore* cpu);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,8 @@
|
|||
#include "arm.h"
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
struct ARMCore cpu;
|
||||
ARMInit(&cpu);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue