LMMS
Loading...
Searching...
No Matches
Gb_Oscs.h
Go to the documentation of this file.
1// Private oscillators used by Gb_Apu
2
3// Gb_Snd_Emu 0.1.5
4#ifndef GB_OSCS_H
5#define GB_OSCS_H
6
7#include "blargg_common.h"
8#include "Blip_Buffer.h"
9
10struct Gb_Osc
11{
12 enum { trigger = 0x80 };
13 enum { len_enabled_mask = 0x40 };
14
15 Blip_Buffer* outputs [4]; // NULL, right, left, center
18 uint8_t* regs; // osc's 5 registers
19
20 int delay;
22 int volume;
23 int length;
25
26 void reset();
27 void clock_length();
28 int frequency() const { return (regs [4] & 7) * 0x100 + regs [3]; }
29};
30
31struct Gb_Env : Gb_Osc
32{
34
35 void reset();
36 void clock_envelope();
37 bool write_register( int, int );
38};
39
41{
42 enum { period_mask = 0x70 };
43 enum { shift_mask = 0x07 };
44
46 Synth const* synth;
49 int phase;
50
51 void reset();
52 void clock_sweep();
53 void run( blip_time_t, blip_time_t, int playing );
54};
55
57{
59 Synth const* synth;
60 unsigned bits;
61
62 void run( blip_time_t, blip_time_t, int playing );
63};
64
66{
68 Synth const* synth;
70 enum { wave_size = 32 };
72
73 void write_register( int, int );
74 void run( blip_time_t, blip_time_t, int playing );
75};
76
77inline void Gb_Env::reset()
78{
79 env_delay = 0;
81}
82
83#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
Definition Blip_Buffer.h:23
Definition Blip_Buffer.h:191
unsigned char uint8_t
Definition mid.cpp:98
Definition Gb_Oscs.h:32
void clock_envelope()
Definition Gb_Oscs.cpp:39
void reset()
Definition Gb_Oscs.h:77
bool write_register(int, int)
Definition Gb_Oscs.cpp:50
int env_delay
Definition Gb_Oscs.h:33
Definition Gb_Oscs.h:57
Synth const * synth
Definition Gb_Oscs.h:59
unsigned bits
Definition Gb_Oscs.h:60
Blip_Synth< blip_med_quality, 1 > Synth
Definition Gb_Oscs.h:58
void run(blip_time_t, blip_time_t, int playing)
Definition Gb_Oscs.cpp:171
Definition Gb_Oscs.h:11
int length
Definition Gb_Oscs.h:23
int last_amp
Definition Gb_Oscs.h:21
void reset()
Definition Gb_Oscs.cpp:22
Blip_Buffer * output
Definition Gb_Oscs.h:16
@ len_enabled_mask
Definition Gb_Oscs.h:13
int enabled
Definition Gb_Oscs.h:24
int output_select
Definition Gb_Oscs.h:17
uint8_t * regs
Definition Gb_Oscs.h:18
void clock_length()
Definition Gb_Oscs.cpp:31
Blip_Buffer * outputs[4]
Definition Gb_Oscs.h:15
int delay
Definition Gb_Oscs.h:20
int frequency() const
Definition Gb_Oscs.h:28
int volume
Definition Gb_Oscs.h:22
@ trigger
Definition Gb_Oscs.h:12
Definition Gb_Oscs.h:41
int sweep_delay
Definition Gb_Oscs.h:47
Synth const * synth
Definition Gb_Oscs.h:46
void clock_sweep()
Definition Gb_Oscs.cpp:87
@ period_mask
Definition Gb_Oscs.h:42
int sweep_freq
Definition Gb_Oscs.h:48
void run(blip_time_t, blip_time_t, int playing)
Definition Gb_Oscs.cpp:113
void reset()
Definition Gb_Oscs.cpp:79
@ shift_mask
Definition Gb_Oscs.h:43
Blip_Synth< blip_good_quality, 1 > Synth
Definition Gb_Oscs.h:45
int phase
Definition Gb_Oscs.h:49
Definition Gb_Oscs.h:66
int wave_pos
Definition Gb_Oscs.h:69
uint8_t wave[wave_size]
Definition Gb_Oscs.h:71
Blip_Synth< blip_med_quality, 1 > Synth
Definition Gb_Oscs.h:67
Synth const * synth
Definition Gb_Oscs.h:68
void write_register(int, int)
Definition Gb_Oscs.cpp:227
@ wave_size
Definition Gb_Oscs.h:70
void run(blip_time_t, blip_time_t, int playing)
Definition Gb_Oscs.cpp:255