trunk/src/mess/machine/isa_gus.c
| r20792 | r20793 | |
| 257 | 257 | if(!(m_voice[x].voice_ctrl & 0x08)) |
| 258 | 258 | { |
| 259 | 259 | m_voice[x].voice_ctrl |= 0x01; |
| 260 | | // m_voice[x].current_addr = m_voice[x].end_addr; |
| 260 | // m_voice[x].current_addr = m_voice[x].end_addr; |
| 261 | 261 | } |
| 262 | } |
| 263 | // looping is not supposed to happen when rollover is active, but the Windows drivers have other ideas... |
| 264 | if(m_voice[x].voice_ctrl & 0x08) |
| 265 | { |
| 266 | if(m_voice[x].voice_ctrl & 0x10) |
| 267 | m_voice[x].voice_ctrl |= 0x40; // change direction |
| 262 | 268 | else |
| 263 | | { |
| 264 | | if(m_voice[x].voice_ctrl & 0x10) |
| 265 | | m_voice[x].voice_ctrl |= 0x40; // change direction |
| 266 | | else |
| 267 | | m_voice[x].current_addr = m_voice[x].start_addr; // start sample again |
| 268 | | } |
| 269 | m_voice[x].current_addr = m_voice[x].start_addr; // start sample again |
| 269 | 270 | } |
| 270 | 271 | } |
| 271 | 272 | if((m_voice[x].voice_ctrl & 0x40) && (m_voice[x].current_addr <= m_voice[x].start_addr) && !m_voice[x].rollover && !(m_voice[x].voice_ctrl & 0x01)) |
| r20792 | r20793 | |
| 287 | 288 | m_voice[x].voice_ctrl |= 0x01; |
| 288 | 289 | // m_voice[x].current_addr = m_voice[x].start_addr; |
| 289 | 290 | } |
| 291 | } |
| 292 | // looping is not supposed to happen when rollover is active, but the Windows drivers have other ideas... |
| 293 | if(m_voice[x].voice_ctrl & 0x08) |
| 294 | { |
| 295 | if(m_voice[x].voice_ctrl & 0x10) |
| 296 | m_voice[x].voice_ctrl &= ~0x40; // change direction |
| 290 | 297 | else |
| 291 | | { |
| 292 | | if(m_voice[x].voice_ctrl & 0x10) |
| 293 | | m_voice[x].voice_ctrl &= ~0x40; // change direction |
| 294 | | else |
| 295 | | m_voice[x].current_addr = m_voice[x].end_addr; // start sample again |
| 296 | | } |
| 298 | m_voice[x].current_addr = m_voice[x].end_addr; // start sample again |
| 297 | 299 | } |
| 298 | 300 | } |
| 299 | 301 | if(!(m_voice[x].voice_ctrl & 0x01)) |
| r20792 | r20793 | |
| 922 | 924 | m_gf1_irq = 15; |
| 923 | 925 | break; |
| 924 | 926 | default: |
| 927 | m_gf1_irq = 0; |
| 925 | 928 | logerror("GUS: Invalid GF1 IRQ set! [%02x]\n",data); |
| 926 | 929 | } |
| 927 | 930 | switch((data >> 3) & 0x07) |
| r20792 | r20793 | |
| 1697 | 1700 | UINT8 irq_type; |
| 1698 | 1701 | UINT8 st = m_midi->get_status(); |
| 1699 | 1702 | |
| 1700 | | logerror("GUS: MIDI IRQ: state: %i Status: %02x\n",state,st); |
| 1701 | | |
| 1702 | 1703 | if(state == ASSERT_LINE) |
| 1703 | 1704 | { |
| 1704 | 1705 | if(st & 0x01) // receive |
trunk/src/mess/machine/isa_gus.h
| r20792 | r20793 | |
| 105 | 105 | gf1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 106 | 106 | |
| 107 | 107 | // current IRQ/DMA channel getters |
| 108 | | UINT8 gf1_irq() { return m_gf1_irq; } |
| 108 | UINT8 gf1_irq() { if(m_gf1_irq != 0) return m_gf1_irq; else return m_midi_irq; } // workaround for win95 loading dumb values |
| 109 | 109 | UINT8 midi_irq() { if(m_irq_combine == 0) return m_midi_irq; else return m_gf1_irq; } |
| 110 | 110 | UINT8 dma_channel1() { return m_dma_channel1; } |
| 111 | 111 | UINT8 dma_channel2() { if(m_dma_combine == 0) return m_dma_channel2; else return m_dma_channel1; } |