147b43a1fSPaolo Bonzini /* 247b43a1fSPaolo Bonzini * GUSEMU32 - persistent GUS register state 347b43a1fSPaolo Bonzini * 447b43a1fSPaolo Bonzini * Copyright (C) 2000-2007 Tibor "TS" Schütz 547b43a1fSPaolo Bonzini * 647b43a1fSPaolo Bonzini * Permission is hereby granted, free of charge, to any person obtaining a copy 747b43a1fSPaolo Bonzini * of this software and associated documentation files (the "Software"), to deal 847b43a1fSPaolo Bonzini * in the Software without restriction, including without limitation the rights 947b43a1fSPaolo Bonzini * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1047b43a1fSPaolo Bonzini * copies of the Software, and to permit persons to whom the Software is 1147b43a1fSPaolo Bonzini * furnished to do so, subject to the following conditions: 1247b43a1fSPaolo Bonzini * 1347b43a1fSPaolo Bonzini * The above copyright notice and this permission notice shall be included in 1447b43a1fSPaolo Bonzini * all copies or substantial portions of the Software. 1547b43a1fSPaolo Bonzini * 1647b43a1fSPaolo Bonzini * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1747b43a1fSPaolo Bonzini * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1847b43a1fSPaolo Bonzini * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1947b43a1fSPaolo Bonzini * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2047b43a1fSPaolo Bonzini * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 2147b43a1fSPaolo Bonzini * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 2247b43a1fSPaolo Bonzini * THE SOFTWARE. 2347b43a1fSPaolo Bonzini */ 2447b43a1fSPaolo Bonzini 2547b43a1fSPaolo Bonzini #ifndef GUSTATE_H 2647b43a1fSPaolo Bonzini #define GUSTATE_H 2747b43a1fSPaolo Bonzini 2847b43a1fSPaolo Bonzini /*state block offset*/ 2947b43a1fSPaolo Bonzini #define gusdata (0) 3047b43a1fSPaolo Bonzini 3147b43a1fSPaolo Bonzini /* data stored using this structure is in host byte order! */ 3247b43a1fSPaolo Bonzini 3347b43a1fSPaolo Bonzini /*access type*/ 3447b43a1fSPaolo Bonzini #define PortRead (0) 3547b43a1fSPaolo Bonzini #define PortWrite (1) 3647b43a1fSPaolo Bonzini 3747b43a1fSPaolo Bonzini #define Port8Bitacc (0) 3847b43a1fSPaolo Bonzini #define Port16Bitacc (1) 3947b43a1fSPaolo Bonzini 4047b43a1fSPaolo Bonzini /*voice register offsets (in bytes)*/ 4147b43a1fSPaolo Bonzini #define VSRegs (0) 4247b43a1fSPaolo Bonzini #define VSRControl (0) 4347b43a1fSPaolo Bonzini #define VSRegsEnd (VSRControl+VSRegs + 32*(16*2)) 4447b43a1fSPaolo Bonzini #define VSRFreq (2) 4547b43a1fSPaolo Bonzini #define VSRLoopStartHi (4) 4647b43a1fSPaolo Bonzini #define VSRLoopStartLo (6) 4747b43a1fSPaolo Bonzini #define VSRLoopEndHi (8) 4847b43a1fSPaolo Bonzini #define VSRLoopEndLo (10) 4947b43a1fSPaolo Bonzini #define VSRVolRampRate (12) 5047b43a1fSPaolo Bonzini #define VSRVolRampStartVol (14) 5147b43a1fSPaolo Bonzini #define VSRVolRampEndVol (16) 5247b43a1fSPaolo Bonzini #define VSRCurrVol (18) 5347b43a1fSPaolo Bonzini #define VSRCurrPosHi (20) 5447b43a1fSPaolo Bonzini #define VSRCurrPosLo (22) 5547b43a1fSPaolo Bonzini #define VSRPanning (24) 5647b43a1fSPaolo Bonzini #define VSRVolRampControl (26) 5747b43a1fSPaolo Bonzini 5847b43a1fSPaolo Bonzini /*voice register offsets (in words)*/ 5947b43a1fSPaolo Bonzini #define wVSRegs (0) 6047b43a1fSPaolo Bonzini #define wVSRControl (0) 6147b43a1fSPaolo Bonzini #define wVSRegsEnd (wVSRControl+wVSRegs + 32*(16)) 6247b43a1fSPaolo Bonzini #define wVSRFreq (1) 6347b43a1fSPaolo Bonzini #define wVSRLoopStartHi (2) 6447b43a1fSPaolo Bonzini #define wVSRLoopStartLo (3) 6547b43a1fSPaolo Bonzini #define wVSRLoopEndHi (4) 6647b43a1fSPaolo Bonzini #define wVSRLoopEndLo (5) 6747b43a1fSPaolo Bonzini #define wVSRVolRampRate (6) 6847b43a1fSPaolo Bonzini #define wVSRVolRampStartVol (7) 6947b43a1fSPaolo Bonzini #define wVSRVolRampEndVol (8) 7047b43a1fSPaolo Bonzini #define wVSRCurrVol (9) 7147b43a1fSPaolo Bonzini #define wVSRCurrPosHi (10) 7247b43a1fSPaolo Bonzini #define wVSRCurrPosLo (11) 7347b43a1fSPaolo Bonzini #define wVSRPanning (12) 7447b43a1fSPaolo Bonzini #define wVSRVolRampControl (13) 7547b43a1fSPaolo Bonzini 7647b43a1fSPaolo Bonzini /*GUS register state block: 32 voices, padding filled with remaining registers*/ 7747b43a1fSPaolo Bonzini #define DataRegLoByte3x4 (VSRVolRampControl+2) 7847b43a1fSPaolo Bonzini #define DataRegWord3x4 (DataRegLoByte3x4) 7947b43a1fSPaolo Bonzini #define DataRegHiByte3x5 (VSRVolRampControl+2 +1) 8047b43a1fSPaolo Bonzini #define DMA_2xB (VSRVolRampControl+2+2) 8147b43a1fSPaolo Bonzini #define IRQ_2xB (VSRVolRampControl+2+3) 8247b43a1fSPaolo Bonzini 8347b43a1fSPaolo Bonzini #define RegCtrl_2xF (VSRVolRampControl+2+(16*2)) 8447b43a1fSPaolo Bonzini #define Jumper_2xB (VSRVolRampControl+2+(16*2)+1) 8547b43a1fSPaolo Bonzini #define GUS42DMAStart (VSRVolRampControl+2+(16*2)+2) 8647b43a1fSPaolo Bonzini 8747b43a1fSPaolo Bonzini #define GUS43DRAMIOlo (VSRVolRampControl+2+(16*2)*2) 8847b43a1fSPaolo Bonzini #define GUSDRAMPOS24bit (GUS43DRAMIOlo) 8947b43a1fSPaolo Bonzini #define GUS44DRAMIOhi (VSRVolRampControl+2+(16*2)*2+2) 9047b43a1fSPaolo Bonzini 9147b43a1fSPaolo Bonzini #define voicewavetableirq (VSRVolRampControl+2+(16*2)*3) /* voice IRQ pseudoqueue: 1 bit per voice */ 9247b43a1fSPaolo Bonzini 9347b43a1fSPaolo Bonzini #define voicevolrampirq (VSRVolRampControl+2+(16*2)*4) /* voice IRQ pseudoqueue: 1 bit per voice */ 9447b43a1fSPaolo Bonzini 9547b43a1fSPaolo Bonzini #define startvoices (VSRVolRampControl+2+(16*2)*5) /* statistics / optimizations */ 9647b43a1fSPaolo Bonzini 9747b43a1fSPaolo Bonzini #define IRQStatReg2x6 (VSRVolRampControl+2+(16*2)*6) 9847b43a1fSPaolo Bonzini #define TimerStatus2x8 (VSRVolRampControl+2+(16*2)*6+1) 9947b43a1fSPaolo Bonzini #define TimerDataReg2x9 (VSRVolRampControl+2+(16*2)*6+2) 10047b43a1fSPaolo Bonzini #define MixerCtrlReg2x0 (VSRVolRampControl+2+(16*2)*6+3) 10147b43a1fSPaolo Bonzini 10247b43a1fSPaolo Bonzini #define VoiceSelReg3x2 (VSRVolRampControl+2+(16*2)*7) 10347b43a1fSPaolo Bonzini #define FunkSelReg3x3 (VSRVolRampControl+2+(16*2)*7+1) 10447b43a1fSPaolo Bonzini #define AdLibStatus2x8 (VSRVolRampControl+2+(16*2)*7+2) 10547b43a1fSPaolo Bonzini #define StatRead_2xF (VSRVolRampControl+2+(16*2)*7+3) 10647b43a1fSPaolo Bonzini 10747b43a1fSPaolo Bonzini #define GUS48SampSpeed (VSRVolRampControl+2+(16*2)*8) 10847b43a1fSPaolo Bonzini #define GUS41DMACtrl (VSRVolRampControl+2+(16*2)*8+1) 10947b43a1fSPaolo Bonzini #define GUS45TimerCtrl (VSRVolRampControl+2+(16*2)*8+2) 11047b43a1fSPaolo Bonzini #define GUS46Counter1 (VSRVolRampControl+2+(16*2)*8+3) 11147b43a1fSPaolo Bonzini 11247b43a1fSPaolo Bonzini #define GUS47Counter2 (VSRVolRampControl+2+(16*2)*9) 11347b43a1fSPaolo Bonzini #define GUS49SampCtrl (VSRVolRampControl+2+(16*2)*9+1) 11447b43a1fSPaolo Bonzini #define GUS4cReset (VSRVolRampControl+2+(16*2)*9+2) 11547b43a1fSPaolo Bonzini #define NumVoices (VSRVolRampControl+2+(16*2)*9+3) 11647b43a1fSPaolo Bonzini 11747b43a1fSPaolo Bonzini #define TimerIRQs (VSRVolRampControl+2+(16*2)*10) /* delayed IRQ, statistics */ 11847b43a1fSPaolo Bonzini #define BusyTimerIRQs (VSRVolRampControl+2+(16*2)*10+2) /* delayed IRQ, statistics */ 11947b43a1fSPaolo Bonzini 12047b43a1fSPaolo Bonzini #define AdLibCommand2xA (VSRVolRampControl+2+(16*2)*11) 12147b43a1fSPaolo Bonzini #define AdLibData2x9 (VSRVolRampControl+2+(16*2)*11+1) 12247b43a1fSPaolo Bonzini #define SB2xCd (VSRVolRampControl+2+(16*2)*11+2) 12347b43a1fSPaolo Bonzini #define SB2xE (VSRVolRampControl+2+(16*2)*11+3) 12447b43a1fSPaolo Bonzini 12547b43a1fSPaolo Bonzini #define SynVoiceIRQ8f (VSRVolRampControl+2+(16*2)*12) 12647b43a1fSPaolo Bonzini #define GUS50DMAHigh (VSRVolRampControl+2+(16*2)*12+1) 12747b43a1fSPaolo Bonzini 12847b43a1fSPaolo Bonzini #define portaccesses (VSRegsEnd) /* statistics / suspend mode */ 12947b43a1fSPaolo Bonzini 13047b43a1fSPaolo Bonzini #define gusdataend (VSRegsEnd+4) 13147b43a1fSPaolo Bonzini 132*175de524SMarkus Armbruster #endif /* GUSTATE_H */ 133