2 Nintendo Family BASIC Emulator 'eFamilyBASIC'
5 Author : Takeda.Toshiya
15 #include "../../emu.h"
16 #include "../device.h"
18 #define APUQUEUE_SIZE 4096
19 #define APUQUEUE_MASK (APUQUEUE_SIZE - 1)
21 class APU : public DEVICE
24 DEVICE *d_cpu, *d_mem;
43 bool sweep_complement;
70 bool counter_started_cur;
105 uint32_t cached_addr;
107 int cached_dmalength;
113 int32_t phaseacc_cur;
115 int cached_dmalength_cur;
119 bool irq_occurred_cur;
124 uint32_t timestamp, addr;
128 rectangle_t rectangle[2];
134 int32_t decay_lut[16];
136 int trilength_lut[128];
139 uint32_t enable_reg_cur;
142 queue_t queue[APUQUEUE_SIZE];
144 uint32_t elapsed_cycles;
145 double ave, max, min;
147 int32_t create_rectangle(rectangle_t *chan);
148 int32_t create_triangle(triangle_t *chan);
149 int32_t create_noise(noise_t *chan);
150 inline void dmc_reload(dmc_t *chan);
151 int32_t create_dmc(dmc_t *chan);
152 void enqueue(queue_t *d);
154 void write_data_sync(uint32_t addr, uint32_t data);
155 void write_data_cur(uint32_t addr, uint32_t data);
157 int volume_l, volume_r;
159 void decl_state_rectangle(int num);
160 void decl_state_triangle();
161 void decl_state_noise();
162 void decl_state_dmc();
163 void decl_state_queue(int num);
166 APU(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
168 volume_l = volume_r = 1024;
169 set_device_name(_T("APU"));
176 void write_data8(uint32_t addr, uint32_t data);
177 uint32_t read_data8(uint32_t addr);
179 void event_vline(int v, int clock);
180 void mix(int32_t* buffer, int cnt);
181 void set_volume(int ch, int decibel_l, int decibel_r);
183 void save_state(FILEIO* state_fio);
184 bool load_state(FILEIO* state_fio);
187 void set_context_cpu(DEVICE* device)
191 void set_context_memory(DEVICE* device)
195 void initialize_sound(int rate, int samples);