ref: d44f55b337b4b6e6e00ef698f656e17655694d24
dir: /snes/apu.h/
#ifndef APU_H
#define APU_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
typedef struct Apu Apu;
#include "spc.h"
#include "dsp.h"
typedef struct Timer {
uint8_t cycles;
uint8_t divider;
uint8_t target;
uint8_t counter;
bool enabled;
} Timer;
struct Apu {
Spc* spc;
Dsp* dsp;
uint8_t ram[0x10000];
bool romReadable;
uint8_t dspAdr;
uint32_t cycles;
uint8_t inPorts[6]; // includes 2 bytes of ram
uint8_t outPorts[4];
Timer timer[3];
uint8_t cpuCyclesLeft;
union {
DspRegWriteHistory hist;
void *padpad;
};
};
typedef struct Apu2 {
// Snes* snes;
Spc* spc;
Dsp* dsp;
uint8_t ram[0x10000];
bool romReadable;
uint8_t dspAdr;
uint32_t cycles;
uint8_t inPorts[6]; // includes 2 bytes of ram
uint8_t outPorts[4];
Timer timer[3];
uint8_t cpuCyclesLeft;
} Apu2;
Apu* apu_init();
void apu_free(Apu* apu);
void apu_reset(Apu* apu);
void apu_cycle(Apu* apu);
uint8_t apu_cpuRead(Apu* apu, uint16_t adr);
void apu_cpuWrite(Apu* apu, uint16_t adr, uint8_t val);
void apu_saveload(Apu *apu, SaveLoadFunc *func, void *ctx);
#endif