Previous 199869 Revisions Next

r22561 Friday 26th April, 2013 at 17:51:04 UTC by Carl
(mess) psxcd: try something a bit different (nw)
[src/mess/machine]psxcd.c psxcd.h

trunk/src/mess/machine/psxcd.c
r22560r22561
148148   m_regs.sr = 0x18;
149149   m_regs.ir = 0;
150150   m_regs.imr = 0x1f;
151   sechead = 0;
152151   sectail = 0;
152   m_cursec = 0;
153153   m_mute = false;
154154   m_dmaload = false;
155   m_int1 = NULL;
155156   curpos.w = 0;
156157}
157158
r22560r22561
281282      case 0x03:
282283         if((data & 0x80) && !m_dmaload)
283284         {
284            if(sechead == sectail)
285               break;
286
287285            m_dmaload = true;
288            memcpy(m_transbuf, secbuf[sechead], raw_sector_size);
286            memcpy(m_transbuf, secbuf[m_cursec], raw_sector_size);
289287            m_regs.sr |= 0x40;
290            sechead++;
291            sechead %= sector_buffer_size;
292288
289            m_cursec++;
290            m_cursec %= sector_buffer_size;
291
293292            switch(mode & mode_size_mask)
294293            {
295294               case 0x00:
r22560r22561
325324            if(res_queue && !m_regs.ir)
326325            {
327326               command_result *res = res_queue;
327               if(res == m_int1)
328                  m_int1 = NULL;
329
328330               res_queue = res->next;
329331               global_free(res);
330332               m_regs.sr &= ~0x20;
r22560r22561
935937         }
936938         else
937939         {
938            cmd_complete(prepare_result(intr_dataready));
940            if(!m_int1)
941               m_cursec = sectail;
942
943            m_int1 = prepare_result(intr_dataready);
944            cmd_complete(m_int1);
939945            sectail++;
940946            sectail %= sector_buffer_size;
941
942            if(sectail == sechead)
943               verboselog(machine(), 0, "psxcd: sector buffer overrun\n");
944947         }
945948
946949         curpos.b[F]++;
r22560r22561
10831086   send_result(intr_complete);
10841087   status |= status_reading;   
10851088
1086   sechead=sectail=0;
1089   m_cursec=sectail=0;
10871090
10881091   unsigned int cyc=read_sector_cycles;
10891092   if (mode&mode_double_speed) cyc>>=1;
r22560r22561
11051108
11061109   status|=status_playing;
11071110
1108   sechead=sectail=0;
1111   m_cursec=sectail=0;
11091112
11101113   if (mode&mode_autopause)
11111114   {
trunk/src/mess/machine/psxcd.h
r22560r22561
108108   UINT8 cmdbuf[64], mode, secbuf[sector_buffer_size][raw_sector_size];
109109   UINT8 filter_file, filter_channel, lastsechdr[8], status;
110110   int rdp;
111   UINT8 sechead, sectail;
111   UINT8 m_cursec, sectail;
112112   UINT16 m_transcurr;
113113   UINT8 m_transbuf[raw_sector_size];
114   command_result *res_queue;
114   command_result *res_queue, *m_int1;
115115
116116   struct {
117117      UINT8 sr, ir, imr;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team