Skip to content

Commit 009bef8

Browse files
committed
Initial commit
0 parents  commit 009bef8

File tree

5 files changed

+111
-0
lines changed

5 files changed

+111
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/build
2+
*~

src/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
cmake_minimum_required(VERSION 2.6)
2+
project(GBAc)
3+
file(GLOB SOURCES *.c)
4+
add_executable(gbac ${SOURCES})

src/arm.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "arm.h"
2+
3+
void ARMInit(struct ARMCore* cpu) {
4+
int i;
5+
for (i = 0; i < 16; ++i) {
6+
cpu->gprs[i] = 0;
7+
}
8+
9+
cpu->cpsr.packed = 0;
10+
cpu->spsr.packed = 0;
11+
12+
cpu->cyclesToEvent = 0;
13+
14+
cpu->shifterOperand = 0;
15+
cpu->shifterCarryOut = 0;
16+
17+
cpu->memory = 0;
18+
cpu->board = 0;
19+
}
20+
21+
void ARMCycle(struct ARMCore* cpu) {
22+
// TODO
23+
}

src/arm.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#ifndef ARM_H
2+
#define ARM_H
3+
4+
#include <stdint.h>
5+
6+
enum {
7+
ARM_SP = 13,
8+
ARM_LR = 14,
9+
ARM_PC = 15
10+
};
11+
12+
enum ExecutionMode {
13+
MODE_ARM = 0,
14+
MODE_THUMB = 1
15+
};
16+
17+
enum PrivilegeMode {
18+
MODE_USER = 0x10,
19+
MODE_FIQ = 0x11,
20+
MODE_IRQ = 0x12,
21+
MODE_SUPERVISOR = 0x13,
22+
MODE_ABORT = 0x17,
23+
MODE_UNDEFINED = 0x1B,
24+
MODE_SYSTEM = 0x1F
25+
};
26+
27+
enum ExecutionVector {
28+
BASE_RESET = 0x00000000,
29+
BASE_UNDEF = 0x00000004,
30+
BASE_SWI = 0x00000008,
31+
BASE_PABT = 0x0000000C,
32+
BASE_DABT = 0x00000010,
33+
BASE_IRQ = 0x00000018,
34+
BASE_FIQ = 0x0000001C
35+
};
36+
37+
union PSR {
38+
struct {
39+
int exec : 4;
40+
int t : 1;
41+
int f : 1;
42+
int i : 1;
43+
int a : 1;
44+
int : 20;
45+
int v : 1;
46+
int c : 1;
47+
int z : 1;
48+
int n : 1;
49+
};
50+
51+
int32_t packed;
52+
};
53+
54+
struct ARMMemory;
55+
struct ARMBoard;
56+
57+
struct ARMCore {
58+
int32_t gprs[16];
59+
union PSR cpsr;
60+
union PSR spsr;
61+
62+
int32_t cyclesToEvent;
63+
64+
int32_t shifterOperand;
65+
int32_t shifterCarryOut;
66+
67+
struct ARMMemory* memory;
68+
struct ARMBoard* board;
69+
};
70+
71+
void ARMInit(struct ARMCore* cpu);
72+
void ARMCycle(struct ARMCore* cpu);
73+
74+
#endif

src/main.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include "arm.h"
2+
3+
int main(int argc, char** argv) {
4+
struct ARMCore cpu;
5+
ARMInit(&cpu);
6+
7+
return 0;
8+
}

0 commit comments

Comments
 (0)