LMMS
Loading...
Searching...
No Matches
Sap_Apu.h
Go to the documentation of this file.
1// Atari POKEY sound chip emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef SAP_APU_H
5#define SAP_APU_H
6
7#include "blargg_common.h"
8#include "Blip_Buffer.h"
9
10class Sap_Apu_Impl;
11
12class Sap_Apu {
13public:
14 enum { osc_count = 4 };
15 void osc_output( int index, Blip_Buffer* );
16
17 void reset( Sap_Apu_Impl* );
18
19 enum { start_addr = 0xD200 };
20 enum { end_addr = 0xD209 };
21 void write_data( blip_time_t, unsigned addr, int data );
22
23 void end_frame( blip_time_t );
24
25public:
26 Sap_Apu();
27private:
28 struct osc_t
29 {
30 unsigned char regs [2];
31 unsigned char phase;
32 unsigned char invert;
35 blip_time_t period; // always recalculated before use; here for convenience
37 };
45
46 void calc_periods();
47 void run_until( blip_time_t );
48
49 enum { poly4_len = (1L << 4) - 1 };
50 enum { poly9_len = (1L << 9) - 1 };
51 enum { poly17_len = (1L << 17) - 1 };
52 friend class Sap_Apu_Impl;
53};
54
55// Common tables and Blip_Synth that can be shared among multiple Sap_Apu objects
57public:
59
61 void volume( double d ) { synth.volume( 1.0 / Sap_Apu::osc_count / 30 * d ); }
62
63private:
64 typedef unsigned char byte;
65 byte poly4 [Sap_Apu::poly4_len / 8 + 1];
66 byte poly9 [Sap_Apu::poly9_len / 8 + 1];
68 friend class Sap_Apu;
69};
70
71inline void Sap_Apu::osc_output( int i, Blip_Buffer* b )
72{
73 assert( (unsigned) i < osc_count );
74 oscs [i].output = b;
75}
76
77#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
assert(0)
Definition Blip_Buffer.h:23
Definition Blip_Buffer.h:191
Definition Sap_Apu.h:56
Sap_Apu_Impl()
Definition Sap_Apu.cpp:54
byte poly4[Sap_Apu::poly4_len/8+1]
Definition Sap_Apu.h:65
unsigned char byte
Definition Sap_Apu.h:64
byte poly17[Sap_Apu::poly17_len/8+1]
Definition Sap_Apu.h:67
void volume(double d)
Definition Sap_Apu.h:61
byte poly9[Sap_Apu::poly9_len/8+1]
Definition Sap_Apu.h:66
friend class Sap_Apu
Definition Sap_Apu.h:68
Blip_Synth< blip_good_quality, 1 > synth
Definition Sap_Apu.h:58
void calc_periods()
Definition Sap_Apu.cpp:93
void reset(Sap_Apu_Impl *)
Definition Sap_Apu.cpp:80
@ poly4_len
Definition Sap_Apu.h:49
int control
Definition Sap_Apu.h:44
void run_until(blip_time_t)
Definition Sap_Apu.cpp:124
@ osc_count
Definition Sap_Apu.h:14
@ poly9_len
Definition Sap_Apu.h:50
Sap_Apu_Impl * impl
Definition Sap_Apu.h:39
osc_t oscs[osc_count]
Definition Sap_Apu.h:38
@ poly17_len
Definition Sap_Apu.h:51
@ end_addr
Definition Sap_Apu.h:20
blip_time_t last_time
Definition Sap_Apu.h:40
Sap_Apu()
Definition Sap_Apu.cpp:73
void end_frame(blip_time_t)
Definition Sap_Apu.cpp:328
@ start_addr
Definition Sap_Apu.h:19
void write_data(blip_time_t, unsigned addr, int data)
Definition Sap_Apu.cpp:299
friend class Sap_Apu_Impl
Definition Sap_Apu.h:52
int poly5_pos
Definition Sap_Apu.h:41
void osc_output(int index, Blip_Buffer *)
Definition Sap_Apu.h:71
int polym_pos
Definition Sap_Apu.h:43
int poly4_pos
Definition Sap_Apu.h:42
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
JSAMPIMAGE data
Definition jpeglib.h:945
Definition Sap_Apu.h:29
unsigned char regs[2]
Definition Sap_Apu.h:30
blip_time_t period
Definition Sap_Apu.h:35
unsigned char invert
Definition Sap_Apu.h:32
int last_amp
Definition Sap_Apu.h:33
Blip_Buffer * output
Definition Sap_Apu.h:36
unsigned char phase
Definition Sap_Apu.h:31
blip_time_t delay
Definition Sap_Apu.h:34
b
Definition crypt.c:628