chip-8/src/mem.c

65 lines
1.4 KiB
C
Raw Normal View History

2023-12-25 07:24:17 +01:00
#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;
2023-12-25 09:11:45 +01:00
for(int i=0;i<size;i++){
2023-12-25 07:24:17 +01:00
data[i]=memory[addr+i];
2023-12-25 09:11:45 +01:00
}
2023-12-25 07:24:17 +01:00
}
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);
}
2023-12-25 09:11:45 +01:00
void MemDump(){
for(int addr=0;addr<4096;addr+=2){
printf("0x%03x: %02x %02x\n",addr,memory[addr], memory[addr+1]);
}
}
2023-12-25 07:24:17 +01:00
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