added mappers (not working)
This commit is contained in:
parent
034645154d
commit
9039fa0ccf
14 changed files with 512 additions and 106 deletions
|
@ -3,6 +3,7 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#include "bus.h"
|
||||
#include "mapper.h"
|
||||
|
||||
struct Cartridge* createCartridge(struct Bus* parent, const char* filepath)
|
||||
{
|
||||
|
@ -17,63 +18,42 @@ struct Cartridge* createCartridge(struct Bus* parent, const char* filepath)
|
|||
|
||||
fread(&cartridge->header, sizeof(cartridge->header), 1, fp);
|
||||
|
||||
cartridge->prg_rom = (Byte*)malloc(0x4000 * (size_t)cartridge->header.prg_rom_size);
|
||||
if (cartridge->prg_rom == NULL)
|
||||
{
|
||||
fprintf(stderr, "Failed to allocate PRG memory for cartridge, aborting.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
cartridge->chr_rom = (Byte*)malloc(0x2000 * (size_t)cartridge->header.chr_rom_size);
|
||||
if (cartridge->chr_rom == NULL)
|
||||
{
|
||||
fprintf(stderr, "Failed to allocate CHR memory for cartridge, aborting.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fread(cartridge->prg_rom, 0x4000, cartridge->header.prg_rom_size, fp);
|
||||
fread(cartridge->chr_rom, 0x2000, cartridge->header.chr_rom_size, fp);
|
||||
Byte mapperID = (cartridge->header.Flags7.mapper_upper_nibble << 4) | cartridge->header.Flags6.mapper_lower_nibble;
|
||||
cartridge->mapper = createMapper(mapperID, cartridge->header.prg_rom_size, cartridge->header.chr_rom_size, fp);
|
||||
|
||||
cartridge->bus = parent;
|
||||
|
||||
fclose(fp);
|
||||
return cartridge;
|
||||
}
|
||||
|
||||
void destroyCartridge(struct Cartridge* cartridge)
|
||||
{
|
||||
free(cartridge->chr_rom);
|
||||
free(cartridge->prg_rom);
|
||||
|
||||
destroyMapper(cartridge->mapper);
|
||||
free(cartridge);
|
||||
}
|
||||
|
||||
Byte readCartridge(struct Cartridge* cartridge, Word addr)
|
||||
Byte readCartridgeCPU(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 % 0x4000];
|
||||
}
|
||||
|
||||
return val;
|
||||
return MapperReadCPU(cartridge->mapper, addr);
|
||||
}
|
||||
|
||||
void writeCartridge(struct Cartridge* cartridge, Word addr, Byte val)
|
||||
Byte readCartridgePPU(struct Cartridge* cartridge, Word addr)
|
||||
{
|
||||
// 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 % 0x4000] = val;
|
||||
}
|
||||
|
||||
return MapperReadPPU(cartridge->mapper, addr);
|
||||
}
|
||||
|
||||
void writeCartridgeCPU(struct Cartridge* cartridge, Word addr, Byte val)
|
||||
{
|
||||
MapperWriteCPU(cartridge->mapper, addr, val);
|
||||
}
|
||||
|
||||
void writeCartridgePPU(struct Cartridge* cartridge, Word addr, Byte val)
|
||||
{
|
||||
MapperReadPPU(cartridge->mapper, addr, val);
|
||||
}
|
||||
|
||||
void getPatternTableTexture(struct Cartridge* cartridge, SDL_Texture* texture, int index)
|
||||
{
|
||||
GetPatternTableTexture(cartridge->mapper, texture, index);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue