LMMS
Loading...
Searching...
No Matches
Nes_Namco_Apu.h
Go to the documentation of this file.
1// Namco 106 sound chip emulator
2
3// Nes_Snd_Emu 0.1.8
4#ifndef NES_NAMCO_APU_H
5#define NES_NAMCO_APU_H
6
7#include "blargg_common.h"
8#include "Blip_Buffer.h"
9
10struct namco_state_t;
11
13public:
14 // See Nes_Apu.h for reference.
15 void volume( double );
16 void treble_eq( const blip_eq_t& );
17 void output( Blip_Buffer* );
18 enum { osc_count = 8 };
19 void osc_output( int index, Blip_Buffer* );
20 void reset();
21 void end_frame( blip_time_t );
22
23 // Read/write data register is at 0x4800
24 enum { data_reg_addr = 0x4800 };
25 void write_data( blip_time_t, int );
26 int read_data();
27
28 // Write-only address register is at 0xF800
29 enum { addr_reg_addr = 0xF800 };
30 void write_addr( int );
31
32 // to do: implement save/restore
33 void save_state( namco_state_t* out ) const;
34 void load_state( namco_state_t const& );
35
36public:
38 BLARGG_DISABLE_NOTHROW
39private:
40 // noncopyable
43
44 struct Namco_Osc {
45 blargg_long delay;
47 short last_amp;
48 short wave_pos;
49 };
50
52
55
56 enum { reg_count = 0x80 };
59
60 uint8_t& access();
61 void run_until( blip_time_t );
62};
63/*
64struct namco_state_t
65{
66 uint8_t regs [0x80];
67 uint8_t addr;
68 uint8_t unused;
69 uint8_t positions [8];
70 uint32_t delays [8];
71};
72*/
73
75{
76 int addr = addr_reg & 0x7F;
77 if ( addr_reg & 0x80 )
78 addr_reg = (addr + 1) | 0x80;
79 return reg [addr];
80}
81
82inline void Nes_Namco_Apu::volume( double v ) { synth.volume( 0.10 / osc_count * v ); }
83
84inline void Nes_Namco_Apu::treble_eq( const blip_eq_t& eq ) { synth.treble_eq( eq ); }
85
86inline void Nes_Namco_Apu::write_addr( int v ) { addr_reg = v; }
87
88inline int Nes_Namco_Apu::read_data() { return access(); }
89
90inline void Nes_Namco_Apu::osc_output( int i, Blip_Buffer* buf )
91{
92 assert( (unsigned) i < osc_count );
93 oscs [i].output = buf;
94}
95
97{
98 run_until( time );
99 access() = data;
100}
101
102#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
assert(0)
Definition Blip_Buffer.h:23
Definition Blip_Buffer.h:191
void reset()
Definition Nes_Namco_Apu.cpp:25
@ data_reg_addr
Definition Nes_Namco_Apu.h:24
@ addr_reg_addr
Definition Nes_Namco_Apu.h:29
void end_frame(blip_time_t)
Definition Nes_Namco_Apu.cpp:67
void output(Blip_Buffer *)
Definition Nes_Namco_Apu.cpp:43
Namco_Osc oscs[osc_count]
Definition Nes_Namco_Apu.h:51
void write_addr(int)
Definition Nes_Namco_Apu.h:86
void osc_output(int index, Blip_Buffer *)
Definition Nes_Namco_Apu.h:90
void save_state(namco_state_t *out) const
Nes_Namco_Apu(const Nes_Namco_Apu &)
blip_time_t last_time
Definition Nes_Namco_Apu.h:53
uint8_t & access()
Definition Nes_Namco_Apu.h:74
Nes_Namco_Apu & operator=(const Nes_Namco_Apu &)
void run_until(blip_time_t)
Definition Nes_Namco_Apu.cpp:76
int addr_reg
Definition Nes_Namco_Apu.h:54
void volume(double)
Definition Nes_Namco_Apu.h:82
void treble_eq(const blip_eq_t &)
Definition Nes_Namco_Apu.h:84
@ reg_count
Definition Nes_Namco_Apu.h:56
Nes_Namco_Apu()
Definition Nes_Namco_Apu.cpp:18
int read_data()
Definition Nes_Namco_Apu.h:88
uint8_t reg[reg_count]
Definition Nes_Namco_Apu.h:57
void write_data(blip_time_t, int)
Definition Nes_Namco_Apu.h:96
void load_state(namco_state_t const &)
@ osc_count
Definition Nes_Namco_Apu.h:18
Blip_Synth< blip_good_quality, 15 > synth
Definition Nes_Namco_Apu.h:58
Definition Blip_Buffer.h:239
unsigned v[N_MAX]
Definition inflate.c:1584
register unsigned i
Definition inflate.c:1575
JSAMPIMAGE data
Definition jpeglib.h:945
float out
Definition lilv_test.c:1461
unsigned char uint8_t
Definition mid.cpp:98
Definition Nes_Namco_Apu.h:44
Blip_Buffer * output
Definition Nes_Namco_Apu.h:46
short wave_pos
Definition Nes_Namco_Apu.h:48
short last_amp
Definition Nes_Namco_Apu.h:47
blargg_long delay
Definition Nes_Namco_Apu.h:45
Definition tap_eq.c:71