Previous 199869 Revisions Next

r26454 Saturday 30th November, 2013 at 18:39:03 UTC by hap
fix cur_reg being overwritten
[src/emu/sound]ymz770.c ymz770.h

trunk/src/emu/sound/ymz770.c
r26453r26454
4141      channels[i].decoder = new mpeg_audio(rom_base, mpeg_audio::AMM, false, 0);
4242   }
4343
44
45   save_item(NAME(cur_reg));
44   // register for save states
45   save_item(NAME(m_cur_reg));
4646   for (int i = 0; i < 8; i++)
4747   {
4848      save_item(NAME(channels[i].phrase), i);
r26453r26454
132132                     channels[ch].seqdelay = 32 - 1;
133133                     break;
134134                  default:
135                     cur_reg = reg;
136                     internal_reg_write(1, data);
135                     internal_reg_write(reg, data);
137136                     break;
138137               }
139138            }
r26453r26454
147146            }
148147            else
149148            {
150            retry:
149retry:
151150               if (channels[ch].last_block)
152151               {
153152                  if (channels[ch].control & 1)
154153                  {
155                        UINT8 phrase = channels[ch].phrase;
156                        channels[ch].pptr = 8*(rom_base[(4*phrase)+1]<<16 | rom_base[(4*phrase)+2]<<8 | rom_base[(4*phrase)+3]);
154                     UINT8 phrase = channels[ch].phrase;
155                     channels[ch].pptr = 8*(rom_base[(4*phrase)+1]<<16 | rom_base[(4*phrase)+2]<<8 | rom_base[(4*phrase)+3]);
157156                  }
158157                  else
159158                  {
160                        channels[ch].is_playing = false;
159                     channels[ch].is_playing = false;
161160                  }
162161               }
163162
r26453r26454
190189}
191190
192191//-------------------------------------------------
193//  read - read from the chip's registers and internal RAM
192//  read - read from the chip's registers
194193//-------------------------------------------------
195194
196195READ8_MEMBER( ymz770_device::read )
r26453r26454
198197   return 0;
199198}
200199
201void ymz770_device::internal_reg_write(int offset, UINT8 data)
200void ymz770_device::internal_reg_write(UINT8 reg, UINT8 data)
202201{
203   if (!offset)
202   if (reg >= 0x40 && reg <= 0x5f)
204203   {
205      cur_reg = data;
206      return;
207   }
204      int voice = reg >> 2 & 0x07;
208205
209   if (cur_reg >= 0x40 && cur_reg <= 0x5f)
210   {
211      cur_reg -= 0x40;
212
213      int voice = cur_reg / 4;
214      int reg = cur_reg % 4;
215
216      switch (reg)
206      switch (reg & 0x03)
217207      {
218208         case 0:
219209            channels[voice].phrase = data;
r26453r26454
247237            break;
248238      }
249239   }
250   else if (cur_reg >= 0x80)
240   else if (reg >= 0x80)
251241   {
252      int voice = (cur_reg & 0x70)>>4;
253      int reg = cur_reg & 0x0f;
254      switch (reg)
242      int voice = reg >> 4 & 0x07;
243
244      switch (reg & 0x0f)
255245      {
256246         case 0:
257247            channels[voice].sequence = data;
r26453r26454
267257            }
268258            else
269259            {
270                  channels[voice].is_seq_playing = false;
260               channels[voice].is_seq_playing = false;
271261            }
262
272263            channels[voice].seqcontrol = data;
273264            break;
265
266         default:
267            break;
274268      }
275269   }
276270}
277271
278272//-------------------------------------------------
279//  write - write to the chip's registers and internal RAM
273//  write - write to the chip's registers
280274//-------------------------------------------------
281275
282276WRITE8_MEMBER( ymz770_device::write )
283277{
284   m_stream->update();
285   internal_reg_write(offset, data);
278   if (offset & 1)
279   {
280      m_stream->update();
281      internal_reg_write(m_cur_reg, data);
282   }
283   else
284   {
285      m_cur_reg = data;
286   }
286287}
trunk/src/emu/sound/ymz770.h
r26453r26454
5555      UINT8 seqdelay;
5656      UINT8 *seqdata;
5757      bool is_seq_playing;
58
5958   };
6059
6160
r26453r26454
7675
7776   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
7877
79   void internal_reg_write(int offset, UINT8 data);
78   void internal_reg_write(UINT8 reg, UINT8 data);
8079
8180   // data
82   UINT8 cur_reg;
81   UINT8 m_cur_reg;
8382   UINT8 *rom_base;
8483   int rom_size;
8584

Previous 199869 Revisions Next


© 1997-2024 The MAME Team