ref: ece639e2f9dfb52f9f63423f7ce6dc224c176dbc
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