diff options
author | Andree Buschmann <AndreeBuschmann@t-online.de> | 2011-08-31 19:19:49 +0000 |
---|---|---|
committer | Andree Buschmann <AndreeBuschmann@t-online.de> | 2011-08-31 19:19:49 +0000 |
commit | 13cbade08a07296d92e7a7d3e20475de0032cba1 (patch) | |
tree | 731a1a4a99d86632a719ae49e3b3d2a12e764a3a /apps/codecs/libgme/kss_emu.h | |
parent | d089e104034fdf5562bea125d2cacf4ee486782a (diff) | |
download | rockbox-13cbade08a07296d92e7a7d3e20475de0032cba1.tar.gz rockbox-13cbade08a07296d92e7a7d3e20475de0032cba1.zip |
Update libgme to Blargg's Game_Music_Emu 0.6-pre.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30397 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libgme/kss_emu.h')
-rw-r--r-- | apps/codecs/libgme/kss_emu.h | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/apps/codecs/libgme/kss_emu.h b/apps/codecs/libgme/kss_emu.h index 43df964fcc..382e4b807b 100644 --- a/apps/codecs/libgme/kss_emu.h +++ b/apps/codecs/libgme/kss_emu.h | |||
@@ -16,8 +16,8 @@ | |||
16 | #include "ay_apu.h" | 16 | #include "ay_apu.h" |
17 | #include "opl_apu.h" | 17 | #include "opl_apu.h" |
18 | #include "m3u_playlist.h" | 18 | #include "m3u_playlist.h" |
19 | #include "track_filter.h" | ||
19 | 20 | ||
20 | typedef short sample_t; | ||
21 | typedef int kss_time_t; | 21 | typedef int kss_time_t; |
22 | typedef int kss_addr_t; | 22 | typedef int kss_addr_t; |
23 | typedef struct Z80_Cpu Kss_Cpu; | 23 | typedef struct Z80_Cpu Kss_Cpu; |
@@ -35,7 +35,6 @@ enum { | |||
35 | enum { idle_addr = 0xFFFF }; | 35 | enum { idle_addr = 0xFFFF }; |
36 | enum { scc_enabled_true = 0xC000 }; | 36 | enum { scc_enabled_true = 0xC000 }; |
37 | enum { mem_size = 0x10000 }; | 37 | enum { mem_size = 0x10000 }; |
38 | enum { buf_size = 2048 }; | ||
39 | 38 | ||
40 | // KSS file header | 39 | // KSS file header |
41 | enum { header_size = 0x20 }; | 40 | enum { header_size = 0x20 }; |
@@ -53,7 +52,7 @@ struct header_t | |||
53 | byte bank_mode; | 52 | byte bank_mode; |
54 | byte extra_header; | 53 | byte extra_header; |
55 | byte device_flags; | 54 | byte device_flags; |
56 | 55 | ||
57 | // KSSX extended data, if extra_header==0x10 | 56 | // KSSX extended data, if extra_header==0x10 |
58 | byte data_size [4]; | 57 | byte data_size [4]; |
59 | byte unused [4]; | 58 | byte unused [4]; |
@@ -69,7 +68,7 @@ struct sms_t { | |||
69 | struct Sms_Apu psg; | 68 | struct Sms_Apu psg; |
70 | struct Opl_Apu fm; | 69 | struct Opl_Apu fm; |
71 | }; | 70 | }; |
72 | 71 | ||
73 | struct msx_t { | 72 | struct msx_t { |
74 | struct Ay_Apu psg; | 73 | struct Ay_Apu psg; |
75 | struct Scc_Apu scc; | 74 | struct Scc_Apu scc; |
@@ -84,8 +83,6 @@ struct Kss_Emu { | |||
84 | bool scc_accessed; | 83 | bool scc_accessed; |
85 | bool gain_updated; | 84 | bool gain_updated; |
86 | 85 | ||
87 | int track_count; | ||
88 | |||
89 | unsigned scc_enabled; // 0 or 0xC000 | 86 | unsigned scc_enabled; // 0 or 0xC000 |
90 | int bank_count; | 87 | int bank_count; |
91 | 88 | ||
@@ -94,48 +91,34 @@ struct Kss_Emu { | |||
94 | int ay_latch; | 91 | int ay_latch; |
95 | 92 | ||
96 | // general | 93 | // general |
97 | int max_initial_silence; | ||
98 | int voice_count; | 94 | int voice_count; |
95 | int const* voice_types; | ||
99 | int mute_mask_; | 96 | int mute_mask_; |
100 | int tempo; | 97 | int tempo; |
101 | int gain; | 98 | int gain; |
102 | 99 | ||
103 | long sample_rate; | 100 | int sample_rate; |
104 | 101 | ||
105 | // track-specific | 102 | // track-specific |
103 | int track_count; | ||
106 | int current_track; | 104 | int current_track; |
107 | blargg_long out_time; // number of samples played since start of track | ||
108 | blargg_long emu_time; // number of samples emulator has generated since start of track | ||
109 | bool emu_track_ended_; // emulator has reached end of track | ||
110 | volatile bool track_ended; | ||
111 | |||
112 | // fading | ||
113 | blargg_long fade_start; | ||
114 | int fade_step; | ||
115 | |||
116 | // silence detection | ||
117 | int silence_lookahead; // speed to run emulator when looking ahead for silence | ||
118 | bool ignore_silence; | ||
119 | long silence_time; // number of samples where most recent silence began | ||
120 | long silence_count; // number of samples of silence to play before using buf | ||
121 | long buf_remain; // number of samples left in silence buffer | ||
122 | 105 | ||
123 | struct Stereo_Buffer stereo_buffer; // NULL if using custom buffer | 106 | int clock_rate_; |
124 | long clock_rate_; | ||
125 | unsigned buf_changed_count; | 107 | unsigned buf_changed_count; |
126 | 108 | ||
127 | // M3u Playlist | 109 | // M3u Playlist |
128 | struct M3u_Playlist m3u; | 110 | struct M3u_Playlist m3u; |
129 | 111 | ||
130 | // large items | 112 | struct setup_t tfilter; |
131 | sample_t buf [buf_size]; | 113 | struct Track_Filter track_filter; |
132 | 114 | ||
133 | struct sms_t sms; | 115 | struct sms_t sms; |
134 | struct msx_t msx; | 116 | struct msx_t msx; |
135 | 117 | ||
136 | Kss_Cpu cpu; | 118 | Kss_Cpu cpu; |
119 | struct Multi_Buffer stereo_buf; // NULL if using custom buffer | ||
137 | struct Rom_Data rom; | 120 | struct Rom_Data rom; |
138 | 121 | ||
139 | byte unmapped_read [0x100]; | 122 | byte unmapped_read [0x100]; |
140 | byte unmapped_write [page_size]; | 123 | byte unmapped_write [page_size]; |
141 | byte ram [mem_size + cpu_padding]; | 124 | byte ram [mem_size + cpu_padding]; |
@@ -148,34 +131,46 @@ blargg_err_t Kss_load_mem( struct Kss_Emu* this, const void* data, long size ); | |||
148 | blargg_err_t end_frame( struct Kss_Emu* this, kss_time_t ); | 131 | blargg_err_t end_frame( struct Kss_Emu* this, kss_time_t ); |
149 | 132 | ||
150 | // Set output sample rate. Must be called only once before loading file. | 133 | // Set output sample rate. Must be called only once before loading file. |
151 | blargg_err_t Kss_set_sample_rate( struct Kss_Emu* this, long sample_rate ); | 134 | blargg_err_t Kss_set_sample_rate( struct Kss_Emu* this, int sample_rate ); |
152 | 135 | ||
153 | // Start a track, where 0 is the first track. Also clears warning string. | 136 | // Start a track, where 0 is the first track. Also clears warning string. |
154 | blargg_err_t Kss_start_track( struct Kss_Emu* this, int track ); | 137 | blargg_err_t Kss_start_track( struct Kss_Emu* this, int track ); |
155 | 138 | ||
156 | // Generate 'count' samples info 'buf'. Output is in stereo. Any emulation | 139 | // Generate 'count' samples info 'buf'. Output is in stereo. Any emulation |
157 | // errors set warning string, and major errors also end track. | 140 | // errors set warning string, and major errors also end track. |
158 | blargg_err_t Kss_play( struct Kss_Emu* this, long count, sample_t* buf ); | 141 | blargg_err_t Kss_play( struct Kss_Emu* this, int count, sample_t* buf ); |
159 | 142 | ||
160 | // Track status/control | 143 | // Track status/control |
161 | 144 | ||
162 | // Number of milliseconds (1000 msec = 1 second) played since beginning of track | 145 | // Number of milliseconds (1000 msec = 1 second) played since beginning of track |
163 | long Track_tell( struct Kss_Emu* this ); | 146 | int Track_tell( struct Kss_Emu* this ); |
164 | 147 | ||
165 | // Seek to new time in track. Seeking backwards or far forward can take a while. | 148 | // Seek to new time in track. Seeking backwards or far forward can take a while. |
166 | blargg_err_t Track_seek( struct Kss_Emu* this, long msec ); | 149 | blargg_err_t Track_seek( struct Kss_Emu* this, int msec ); |
167 | 150 | ||
168 | // Skip n samples | 151 | // Skip n samples |
169 | blargg_err_t Track_skip( struct Kss_Emu* this, long n ); | 152 | blargg_err_t Track_skip( struct Kss_Emu* this, int n ); |
170 | 153 | ||
171 | // Set start time and length of track fade out. Once fade ends track_ended() returns | 154 | // Set start time and length of track fade out. Once fade ends track_ended() returns |
172 | // true. Fade time can be changed while track is playing. | 155 | // true. Fade time can be changed while track is playing. |
173 | void Track_set_fade( struct Kss_Emu* this, long start_msec, long length_msec ); | 156 | void Track_set_fade( struct Kss_Emu* this, int start_msec, int length_msec ); |
157 | |||
158 | // True if a track has reached its end | ||
159 | static inline bool Track_ended( struct Kss_Emu* this ) | ||
160 | { | ||
161 | return track_ended( &this->track_filter ); | ||
162 | } | ||
163 | |||
164 | // Disables automatic end-of-track detection and skipping of silence at beginning | ||
165 | static inline void Track_ignore_silence( struct Kss_Emu* this, bool disable ) | ||
166 | { | ||
167 | this->track_filter.silence_ignored_ = disable; | ||
168 | } | ||
174 | 169 | ||
175 | // Get track length in milliseconds | 170 | // Get track length in milliseconds |
176 | static inline long Track_get_length( struct Kss_Emu* this, int n ) | 171 | static inline int Track_get_length( struct Kss_Emu* this, int n ) |
177 | { | 172 | { |
178 | long length = 0; | 173 | int length = 0; |
179 | 174 | ||
180 | if ( (this->m3u.size > 0) && (n < this->m3u.size) ) { | 175 | if ( (this->m3u.size > 0) && (n < this->m3u.size) ) { |
181 | struct entry_t* entry = &this->m3u.entries [n]; | 176 | struct entry_t* entry = &this->m3u.entries [n]; |