added rom/bus interaction

This commit is contained in:
Lauchmelder 2021-10-20 23:23:16 +02:00
parent abb9b2e54a
commit 4b22287ad0
4 changed files with 48 additions and 7 deletions

View file

@ -43,7 +43,7 @@ struct Cartridge* createCartridge(struct Bus* parent, const char* filepath)
// Open ROM
FILE* fp = fopen(filepath, "rb");
// Read header
// readCartridge header
struct INES_Header header;
fread(&header, sizeof(header), 1, fp);
@ -55,12 +55,15 @@ struct Cartridge* createCartridge(struct Bus* parent, const char* filepath)
}
cartridge->chr_rom = (Byte*)malloc(0x2000 * (size_t)header.chr_rom_size);
if (cartridge->prg_rom == NULL)
if (cartridge->chr_rom == NULL)
{
fprintf(stderr, "Failed to allocate CHR memory for cartridge, aborting.\n");
exit(1);
}
fread(cartridge->prg_rom, 0x4000, header.prg_rom_size, fp);
fread(cartridge->chr_rom, 0x2000, header.chr_rom_size, fp);
cartridge->bus = parent;
return cartridge;
}
@ -72,3 +75,35 @@ void destroyCartridge(struct Cartridge* cartridge)
free(cartridge);
}
Byte readCartridge(struct Cartridge* cartridge, Word addr)
{
// TODO: Force M000 mapper for now
Byte val = 0;
if (0x6000 <= addr && addr <= 0x7FFF) // PRG RAM
{
// do nothing for now
}
else if (0x8000 <= addr && addr <= 0xFFFF) // PRG ROM
{
val = cartridge->prg_rom[addr & 0x1FFF];
}
return val;
}
void writeCartridge(struct Cartridge* cartridge, Word addr, Byte val)
{
// TODO: Force M000 mapper for now
if (0x6000 <= addr && addr <= 0x7FFF) // PRG RAM
{
// do nothing for now
}
else if (0x8000 <= addr && addr <= 0xFFFF) // PRG ROM
{
cartridge->prg_rom[addr & 0x1FFF] = val;
}
}