Do some work on the CPU, assembler still needs update
This commit is contained in:
62
cpu/memory.c
Normal file
62
cpu/memory.c
Normal file
@@ -0,0 +1,62 @@
|
||||
//
|
||||
// Created by bruno on 2.2.2025.
|
||||
//
|
||||
|
||||
#include "memory.h"
|
||||
|
||||
uint8_t write_mem(CPU *cpu, uint32_t addr, uint8_t value) {
|
||||
if (addr >= MEM_SIZE) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch (addr) {
|
||||
|
||||
default:
|
||||
cpu->memory[addr] = value;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t read_mem(CPU *cpu, uint32_t addr) {
|
||||
if (addr >= MEM_SIZE) {
|
||||
return 0;
|
||||
}
|
||||
switch (addr) {
|
||||
|
||||
default:
|
||||
return cpu->memory[addr];
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t read_mem16(CPU *cpu, uint32_t addr) {
|
||||
return read_mem(cpu, addr) | (read_mem(cpu, addr + 1) << 8);
|
||||
}
|
||||
|
||||
uint32_t read_mem32(CPU *cpu, uint32_t addr) {
|
||||
return read_mem16(cpu, addr) | (read_mem16(cpu, addr + 2) << 16);
|
||||
}
|
||||
|
||||
uint8_t write_mem16(CPU *cpu, uint32_t addr, uint16_t value) {
|
||||
uint8_t status = write_mem(cpu, addr, value & 0xFF);
|
||||
if (status) {
|
||||
return status;
|
||||
}
|
||||
status = write_mem(cpu, addr + 1, (value >> 8) & 0xFF);
|
||||
if (status) {
|
||||
return status;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t write_mem32(CPU *cpu, uint32_t addr, uint32_t value) {
|
||||
uint8_t status = write_mem16(cpu, addr, value & 0xFFFF);
|
||||
if (status) {
|
||||
return status;
|
||||
}
|
||||
status = write_mem16(cpu, addr + 2, (value >> 16) & 0xFFFF);
|
||||
if (status) {
|
||||
return status;
|
||||
}
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user