NESEmulator/NES Emulator/cartridge.c

60 lines
1.5 KiB
C
Raw Normal View History

2021-10-20 20:39:29 +00:00
#include "cartridge.h"
#include <stdlib.h>
#include <stdio.h>
#include "bus.h"
2021-10-28 14:57:37 +00:00
#include "mapper.h"
2021-10-20 20:39:29 +00:00
struct Cartridge* createCartridge(struct Bus* parent, const char* filepath)
{
struct Cartridge* cartridge = (struct Cartridge*)malloc(sizeof(struct Cartridge));
if (cartridge == NULL)
{
fprintf(stderr, "Failed to create cartridge.\n");
exit(1);
}
2021-10-20 21:11:08 +00:00
FILE* fp = fopen(filepath, "rb");
2021-10-24 11:47:11 +00:00
fread(&cartridge->header, sizeof(cartridge->header), 1, fp);
2021-10-20 21:11:08 +00:00
2021-10-28 14:57:37 +00:00
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);
2021-10-20 21:23:16 +00:00
2021-10-20 20:39:29 +00:00
cartridge->bus = parent;
2021-10-28 14:57:37 +00:00
fclose(fp);
2021-10-20 20:39:29 +00:00
return cartridge;
}
void destroyCartridge(struct Cartridge* cartridge)
{
2021-10-28 14:57:37 +00:00
destroyMapper(cartridge->mapper);
2021-10-20 20:39:29 +00:00
free(cartridge);
}
2021-10-20 21:23:16 +00:00
2021-10-28 14:57:37 +00:00
Byte readCartridgeCPU(struct Cartridge* cartridge, Word addr)
2021-10-20 21:23:16 +00:00
{
2021-10-28 14:57:37 +00:00
return MapperReadCPU(cartridge->mapper, addr);
}
2021-10-20 21:23:16 +00:00
2021-10-28 14:57:37 +00:00
Byte readCartridgePPU(struct Cartridge* cartridge, Word addr)
{
return MapperReadPPU(cartridge->mapper, addr);
2021-10-20 21:23:16 +00:00
}
2021-10-28 14:57:37 +00:00
void writeCartridgeCPU(struct Cartridge* cartridge, Word addr, Byte val)
2021-10-20 21:23:16 +00:00
{
2021-10-28 14:57:37 +00:00
MapperWriteCPU(cartridge->mapper, addr, val);
}
2021-10-20 21:23:16 +00:00
2021-10-28 14:57:37 +00:00
void writeCartridgePPU(struct Cartridge* cartridge, Word addr, Byte val)
{
MapperWritePPU(cartridge->mapper, addr, val);
2021-10-28 14:57:37 +00:00
}
2021-10-20 21:23:16 +00:00
2021-10-28 14:57:37 +00:00
void getPatternTableTexture(struct Cartridge* cartridge, SDL_Texture* texture, int index)
{
GetPatternTableTexture(cartridge->mapper, texture, index);
2021-10-20 21:23:16 +00:00
}