annotate Plugins/Input/console/Nes_Oscs.h @ 352:f13ab2d8e9cf trunk

[svn] various fixes :(
author nenolod
date Mon, 26 Dec 2005 14:12:35 -0800
parents 252843aac42f
children 7c5e886205ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Private oscillators used by Nes_Apu
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 // Nes_Snd_Emu 0.1.6. Copyright (C) 2003-2005 Shay Green. GNU LGPL license.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #ifndef NES_OSCS_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define NES_OSCS_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 #include "Blip_Buffer.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 class Nes_Apu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 struct Nes_Osc
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 unsigned char regs [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 bool reg_written [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 Blip_Buffer* output;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 int length_counter;// length counter (0 if unused by oscillator)
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 int delay; // delay until next (potential) transition
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 int last_amp; // last amplitude oscillator was outputting
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 void clock_length( int halt_mask );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 int period() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 return (regs [3] & 7) * 0x100 + (regs [2] & 0xff);
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 void reset() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 delay = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 last_amp = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 int update_amp( int amp ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 int delta = amp - last_amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 last_amp = amp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 return delta;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 struct Nes_Envelope : Nes_Osc
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 int envelope;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 int env_delay;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 void clock_envelope();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 int volume() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44 void reset() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 envelope = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 env_delay = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 Nes_Osc::reset();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 // Nes_Square
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 struct Nes_Square : Nes_Envelope
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 enum { negate_flag = 0x08 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 enum { shift_mask = 0x07 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 enum { phase_range = 8 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 int phase;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 int sweep_delay;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 typedef Blip_Synth<blip_good_quality,15> Synth;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 const Synth* synth; // shared between squares
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 void clock_sweep( int adjust );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 void run( nes_time_t, nes_time_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 void reset() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 sweep_delay = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 Nes_Envelope::reset();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 // Nes_Triangle
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72 struct Nes_Triangle : Nes_Osc
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 enum { phase_range = 16 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75 int phase;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 int linear_counter;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77 Blip_Synth<blip_good_quality,15> synth;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79 void run( nes_time_t, nes_time_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 void clock_linear_counter();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81 void reset() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82 linear_counter = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83 phase = phase_range;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84 Nes_Osc::reset();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
88 // Nes_Noise
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
89 struct Nes_Noise : Nes_Envelope
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91 int noise;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
92 Blip_Synth<blip_med_quality,15> synth;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
93
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
94 void run( nes_time_t, nes_time_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95 void reset() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
96 noise = 1 << 14;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
97 Nes_Envelope::reset();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
98 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
99 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
100
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
101 // Nes_Dmc
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
102 struct Nes_Dmc : Nes_Osc
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
103 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
104 int address; // address of next byte to read
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
105 int period;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
106 //int length_counter; // bytes remaining to play (already defined in Nes_Osc)
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
107 int buf;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
108 int bits_remain;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
109 int bits;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
110 bool buf_empty;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
111 bool silence;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
112
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
113 enum { loop_flag = 0x40 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
114
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
115 int dac;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
116
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
117 nes_time_t next_irq;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
118 bool irq_enabled;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
119 bool irq_flag;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
120 bool pal_mode;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
121 bool nonlinear;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
122
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
123 int (*rom_reader)( void*, nes_addr_t ); // needs to be initialized to rom read function
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
124 void* rom_reader_data;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
125
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
126 Nes_Apu* apu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
127
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
128 Blip_Synth<blip_med_quality,127> synth;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
129
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
130 void start();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
131 void write_register( int, int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
132 void run( nes_time_t, nes_time_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
133 void recalc_irq();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
134 void fill_buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
135 void reload_sample();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
136 void reset();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
137 int count_reads( nes_time_t, nes_time_t* ) const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
138 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
139
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
140 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
141