@@ -150,8 +150,8 @@ namespace {
150
150
class meadows_state : public driver_device
151
151
{
152
152
public:
153
- meadows_state (const machine_config &mconfig, device_type type, const char *tag)
154
- : driver_device(mconfig, type, tag),
153
+ meadows_state (const machine_config &mconfig, device_type type, const char *tag) :
154
+ driver_device (mconfig, type, tag),
155
155
m_maincpu (*this , " maincpu" ),
156
156
m_audiocpu (*this , " audiocpu" ),
157
157
m_dac (*this , " dac" ),
@@ -175,6 +175,7 @@ class meadows_state : public driver_device
175
175
176
176
protected:
177
177
virtual void machine_start () override ATTR_COLD;
178
+ virtual void machine_reset () override ATTR_COLD { sh_init (); }
178
179
virtual void video_start () override ATTR_COLD;
179
180
180
181
private:
@@ -189,9 +190,7 @@ class meadows_state : public driver_device
189
190
optional_shared_ptr<uint8_t > m_spriteram;
190
191
required_shared_ptr<uint8_t > m_videoram;
191
192
192
- uint8_t m_channel = 0 ; // TODO: always 0?
193
- uint32_t m_freq1 = 0 ;
194
- uint32_t m_freq2 = 0 ;
193
+ uint32_t m_freq[2 ] = { };
195
194
uint8_t m_latched_0c01 = 0 ;
196
195
uint8_t m_latched_0c02 = 0 ;
197
196
uint8_t m_latched_0c03 = 0 ;
@@ -203,6 +202,10 @@ class meadows_state : public driver_device
203
202
uint8_t m_0c03 = 0 ;
204
203
205
204
tilemap_t *m_bg_tilemap = nullptr ;
205
+
206
+ void sh_init ();
207
+ void sh_update ();
208
+
206
209
uint8_t hsync_chain_r ();
207
210
uint8_t vsync_chain_hi_r ();
208
211
uint8_t vsync_chain_lo_r ();
@@ -217,8 +220,7 @@ class meadows_state : public driver_device
217
220
void minferno_vblank_irq (int state);
218
221
INTERRUPT_GEN_MEMBER (audio_interrupt);
219
222
void draw_sprites (bitmap_ind16 &bitmap, const rectangle &clip);
220
- void sh_update ();
221
- SAMPLES_START_CB_MEMBER (sh_start);
223
+
222
224
void audio_map (address_map &map) ATTR_COLD;
223
225
void bowl3d_main_map (address_map &map) ATTR_COLD;
224
226
void meadows_main_map (address_map &map) ATTR_COLD;
@@ -227,6 +229,12 @@ class meadows_state : public driver_device
227
229
};
228
230
229
231
232
+ /* ************************************
233
+ *
234
+ * Sound handler
235
+ *
236
+ *************************************/
237
+
230
238
static constexpr uint32_t BASE_CTR1 = (5'000'000 / 256 );
231
239
static constexpr uint32_t BASE_CTR2 = (5'000'000 / 32 );
232
240
@@ -237,25 +245,19 @@ static constexpr uint8_t ENABLE_CTR1 = 0x08;
237
245
238
246
static const int16_t waveform[2 ] = { -120 *256 , 120 *256 };
239
247
240
- /* ***********************************/
241
- /* Sound handler start */
242
- /* ***********************************/
243
- SAMPLES_START_CB_MEMBER (meadows_state::sh_start)
248
+ void meadows_state::sh_init ()
244
249
{
245
- m_0c00 = m_0c01 = m_0c02 = m_0c03 = 0 ;
246
- m_channel = 0 ;
247
- m_freq1 = m_freq2 = 1000 ;
248
- m_latched_0c01 = m_latched_0c02 = m_latched_0c03 = 0 ;
249
-
250
- m_samples-> set_volume ( 0 , 0 );
251
- m_samples->start_raw ( 0 , waveform, std::size (waveform), m_freq1, true );
252
- m_samples->set_volume ( 1 , 0 );
253
- m_samples-> start_raw ( 1 , waveform, std::size (waveform), m_freq2, true );
250
+ // initialized after samples_device::device_reset
251
+ for ( int i = 0 ; i < 2 ; i++)
252
+ if (!m_samples-> playing (i))
253
+ {
254
+ m_freq[i] = machine (). sample_rate ();
255
+
256
+ m_samples->set_volume (i, 0 );
257
+ m_samples->start_raw (i, waveform, std::size (waveform), m_freq[i], true );
258
+ }
254
259
}
255
260
256
- /* ***********************************/
257
- /* Sound handler update */
258
- /* ***********************************/
259
261
void meadows_state::sh_update ()
260
262
{
261
263
if (m_latched_0c01 != m_0c01 || m_latched_0c03 != m_0c03)
@@ -269,10 +271,10 @@ void meadows_state::sh_update()
269
271
bit 0..3 of 0c01 are ctr preset */
270
272
int const preset = (m_0c01 & 15 ) ^ 15 ;
271
273
if (preset)
272
- m_freq1 = BASE_CTR1 / (preset + 1 );
274
+ m_freq[ 0 ] = BASE_CTR1 / (preset + 1 );
273
275
else amp = 0 ;
274
- LOGAUDIO (" meadows ctr1 channel #%d preset:%3d freq:%5d amp:%d\n " , m_channel, preset, m_freq1 , amp);
275
- m_samples->set_frequency (0 , m_freq1 * sizeof (waveform) / 2 );
276
+ LOGAUDIO (" meadows ctr1 channel #0 preset:%3d freq:%5d amp:%d\n " , preset, m_freq[ 0 ] , amp);
277
+ m_samples->set_frequency (0 , m_freq[ 0 ] * sizeof (waveform) / 2 );
276
278
m_samples->set_volume (0 , amp / 255.0 );
277
279
}
278
280
@@ -284,13 +286,13 @@ void meadows_state::sh_update()
284
286
int const preset = m_0c02 ^ 0xff ;
285
287
if (preset)
286
288
{
287
- m_freq2 = BASE_CTR2 / (preset + 1 ) / 2 ;
289
+ m_freq[ 1 ] = BASE_CTR2 / (preset + 1 ) / 2 ;
288
290
if ((m_0c03 & DIV2OR4_CTR2) == 0 )
289
- m_freq2 >>= 1 ;
291
+ m_freq[ 1 ] >>= 1 ;
290
292
}
291
293
else amp = 0 ;
292
- LOGAUDIO (" meadows ctr2 channel #%d preset:%3d freq:%5d amp:%d\n " , m_channel + 1 , preset, m_freq2 , amp);
293
- m_samples->set_frequency (1 , m_freq2 * sizeof (waveform));
294
+ LOGAUDIO (" meadows ctr2 channel #1 preset:%3d freq:%5d amp:%d\n " , preset, m_freq[ 1 ] , amp);
295
+ m_samples->set_frequency (1 , m_freq[ 1 ] * sizeof (waveform));
294
296
m_samples->set_volume (1 , amp / 255.0 );
295
297
}
296
298
@@ -305,10 +307,6 @@ void meadows_state::sh_update()
305
307
}
306
308
307
309
308
- // some constants to make life easier
309
- static constexpr int8_t SPR_ADJUST_X = -18 ;
310
- static constexpr int8_t SPR_ADJUST_Y = -14 ;
311
-
312
310
313
311
/* ************************************
314
312
*
@@ -375,8 +373,8 @@ void meadows_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &clip)
375
373
{
376
374
for (int i = 0 ; i < 4 ; i++)
377
375
{
378
- int const x = m_spriteram[i + 0 ] + SPR_ADJUST_X ;
379
- int const y = m_spriteram[i + 4 ] + SPR_ADJUST_Y ;
376
+ int const x = m_spriteram[i + 0 ] - 18 ;
377
+ int const y = m_spriteram[i + 4 ] - 14 ;
380
378
int const code = m_spriteram[i + 8 ] & 0x0f ; // bit #0 .. #3 select sprite
381
379
// int const bank = (m_spriteram[i + 8] >> 4) & 1; bit #4 selects PROM ???
382
380
int const bank = i; // that fixes it for now :-/
@@ -409,9 +407,7 @@ void meadows_state::machine_start()
409
407
{
410
408
m_main_sense_state = 0 ;
411
409
412
- // save_item(NAME(m_channel)); // commented out as it's always 0 right now
413
- save_item (NAME (m_freq1));
414
- save_item (NAME (m_freq2));
410
+ save_item (NAME (m_freq));
415
411
save_item (NAME (m_latched_0c01));
416
412
save_item (NAME (m_latched_0c02));
417
413
save_item (NAME (m_latched_0c03));
@@ -421,7 +417,6 @@ void meadows_state::machine_start()
421
417
save_item (NAME (m_0c01));
422
418
save_item (NAME (m_0c02));
423
419
save_item (NAME (m_0c03));
424
-
425
420
}
426
421
427
422
@@ -939,11 +934,10 @@ void meadows_state::meadows(machine_config &config)
939
934
940
935
// audio hardware
941
936
SPEAKER (config, " speaker" ).front_center ();
942
- DAC_8BIT_R2R (config, m_dac, 0 ).add_route (ALL_OUTPUTS, " speaker" , 0.5 ); // unknown DAC
937
+ DAC_8BIT_R2R (config, m_dac).add_route (ALL_OUTPUTS, " speaker" , 0.5 ); // unknown DAC
943
938
944
939
SAMPLES (config, m_samples);
945
940
m_samples->set_channels (2 );
946
- m_samples->set_samples_start_callback (FUNC (meadows_state::sh_start));
947
941
m_samples->add_route (ALL_OUTPUTS, " speaker" , 1.0 );
948
942
}
949
943
0 commit comments