2 Nintendo Family BASIC Emulator 'eFamilyBASIC'
5 Author : Takeda.Toshiya
15 #include "../../emu.h"
16 #include "../device.h"
19 namespace FAMILYBASIC {
21 #define APUQUEUE_SIZE 4096
22 #define APUQUEUE_MASK (APUQUEUE_SIZE - 1)
41 bool sweep_complement;
68 bool counter_started_cur;
103 uint32_t cached_addr;
105 int cached_dmalength;
111 int32_t phaseacc_cur;
113 int cached_dmalength_cur;
117 bool irq_occurred_cur;
122 uint32_t timestamp, addr;
126 class APU : public DEVICE
129 DEVICE *d_cpu, *d_mem;
131 rectangle_t rectangle[2];
137 int32_t decay_lut[16];
139 int trilength_lut[128];
142 uint32_t enable_reg_cur;
145 queue_t queue[APUQUEUE_SIZE];
147 uint32_t elapsed_cycles;
148 double ave, max, min;
150 int32_t __FASTCALL create_rectangle(rectangle_t *chan);
151 int32_t __FASTCALL create_triangle(triangle_t *chan);
152 int32_t __FASTCALL create_noise(noise_t *chan);
153 inline void __FASTCALL dmc_reload(dmc_t *chan);
154 int32_t __FASTCALL create_dmc(dmc_t *chan);
155 void __FASTCALL enqueue(queue_t *d);
156 queue_t* __FASTCALL dequeue();
157 void __FASTCALL write_data_sync(uint32_t addr, uint32_t data);
158 void __FASTCALL write_data_cur(uint32_t addr, uint32_t data);
160 int volume_l, volume_r;
163 APU(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
165 volume_l = volume_r = 1024;
166 set_device_name(_T("APU"));
173 void __FASTCALL write_data8(uint32_t addr, uint32_t data);
174 uint32_t __FASTCALL read_data8(uint32_t addr);
176 void event_vline(int v, int clock);
177 void mix(int32_t* buffer, int cnt);
178 void set_volume(int ch, int decibel_l, int decibel_r);
179 bool process_state(FILEIO* state_fio, bool loading);
182 void set_context_cpu(DEVICE* device)
186 void set_context_memory(DEVICE* device)
190 void initialize_sound(int rate, int samples);