summaryrefslogtreecommitdiff
path: root/src/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem.c')
-rw-r--r--src/mem.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/mem.c b/src/mem.c
new file mode 100644
index 0000000..c537120
--- /dev/null
+++ b/src/mem.c
@@ -0,0 +1,57 @@
+#include "mem.h"
+#include <stdio.h>
+
+unsigned char memory[4096];
+
+extern unsigned char DEFAULT_FONT[];
+
+void MemInit(){
+ MemSet(0,0,4096);
+ MemCopy(DEFAULT_FONT,16*5,ADDR_FONT);
+}
+
+void MemSet(int addr, unsigned char value, int size){
+ for(int i=0;i<size;i++)
+ memory[addr+i]=value;
+}
+
+void MemCopy(unsigned char *data, int size, int addr){
+ for(int i=0;i<size;i++)
+ memory[addr+i]=data[i];
+}
+
+void MemRead(unsigned char *data, int size, int addr){
+ int location=addr;
+ for(int i=0;i<size;i++)
+ data[i]=memory[addr+i];
+}
+
+void MemLoadROM(char *path){
+ char byte;
+ FILE *ptr;
+ ptr=fopen(path,"rb");
+ int location=ADDR_ROM;
+ while(fread(&byte,1,1,ptr)==1){
+ MemSet(location,byte,1);
+ location++;
+ }
+ fclose(ptr);
+}
+
+unsigned char DEFAULT_FONT[]={
+0xF0, 0x90, 0x90, 0x90, 0xF0, // 0
+0x20, 0x60, 0x20, 0x20, 0x70, // 1
+0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2
+0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3
+0x90, 0x90, 0xF0, 0x10, 0x10, // 4
+0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5
+0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6
+0xF0, 0x10, 0x20, 0x40, 0x40, // 7
+0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8
+0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9
+0xF0, 0x90, 0xF0, 0x90, 0x90, // A
+0xE0, 0x90, 0xE0, 0x90, 0xE0, // B
+0xF0, 0x80, 0x80, 0x80, 0xF0, // C
+0xE0, 0x90, 0x90, 0x90, 0xE0, // D
+0xF0, 0x80, 0xF0, 0x80, 0xF0, // E
+0xF0, 0x80, 0xF0, 0x80, 0x80}; // F