📄 dosgus.h
字号:
/* MikMod sound library (c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*//*============================================================================== $Id: dosgus.h,v 1.1 2004/02/01 02:01:17 raph Exp $ libGUS-alike definitions for DOS==============================================================================*/#ifndef __DOSGUS_H__#define __DOSGUS_H__#include <pc.h>#include "dosdma.h"#include "dosirq.h"#include "libgus.h"/* Private header file for a libGUS-alike library for DOS */#define JOYSTICK_TIMER (gus.port+0x201) /* 201 */#define JOYSTICK_DATA (gus.port+0x201) /* 201 */#define GF1_MIDI_CTRL (gus.port+0x100) /* 3X0 */#define GF1_MIDI_DATA (gus.port+0x101) /* 3X1 */#define GF1_VOICESEL (gus.port+0x102) /* 3X2 */#define GF1_REGSEL (gus.port+0x103) /* 3X3 */#define GF1_DATA (gus.port+0x104) /* 3X4 */#define GF1_DATA_LOW (gus.port+0x104) /* 3X4 */#define GF1_DATA_HIGH (gus.port+0x105) /* 3X5 */#define GF1_IRQ_STATUS (gus.port+0x006) /* 2X6 */#define GF1_DRAM (gus.port+0x107) /* 3X7 */#define GF1_MIX_CTRL (gus.port+0x000) /* 2X0 */#define GF1_TIMER_CTRL (gus.port+0x008) /* 2X8 */#define GF1_TIMER_DATA (gus.port+0x009) /* 2X9 */#define GF1_IRQ_CTRL (gus.port+0x00B) /* 2XB */#define GF1_REG_CTRL (gus.port+0x00F) /* 2XF */#define GF1_REVISION (gus.port+0x506) /* 7X6 *//* The GF1 hardware clock rate */#define CLOCK_RATE 9878400L/* GF1 voice-independent registers */#define GF1R_DMA_CONTROL 0x41#define GF1R_DMA_ADDRESS 0x42#define GF1R_DRAM_LOW 0x43#define GF1R_DRAM_HIGH 0x44#define GF1R_TIMER_CONTROL 0x45#define GF1R_TIMER1 0x46#define GF1R_TIMER2 0x47#define GF1R_SAMPLE_RATE 0x48#define GF1R_SAMPLE_CONTROL 0x49#define GF1R_JOYSTICK 0x4B#define GF1R_RESET 0x4C/* GF1 voice-specific registers */#define GF1R_VOICE_CONTROL 0x00#define GF1R_FREQUENCY 0x01#define GF1R_START_HIGH 0x02#define GF1R_START_LOW 0x03#define GF1R_END_HIGH 0x04#define GF1R_END_LOW 0x05#define GF1R_VOLUME_RATE 0x06#define GF1R_VOLUME_START 0x07#define GF1R_VOLUME_END 0x08#define GF1R_VOLUME 0x09#define GF1R_ACC_HIGH 0x0a#define GF1R_ACC_LOW 0x0b#define GF1R_BALANCE 0x0c#define GF1R_VOLUME_CONTROL 0x0d#define GF1R_VOICES 0x0e#define GF1R_IRQ_SOURCE 0x0f/* Add this to above registers for reading */#define GF1R_READ_MASK 0x80/* MIDI */#define GF1M_MIDI_RESET 0x03#define GF1M_MIDI_ENABLE_XMIT 0x20#define GF1M_MIDI_ENABLE_RCV 0x80#define GF1M_MIDI_RCV_FULL 0x01#define GF1M_MIDI_XMIT_EMPTY 0x02#define GF1M_MIDI_FRAME_ERR 0x10#define GF1M_MIDI_OVERRUN 0x20#define GF1M_MIDI_IRQ_PEND 0x80/* Joystick */#define GF1M_JOY_POSITION 0x0f#define GF1M_JOY_BUTTONS 0xf0/* GF1_IRQ_STATUS (port 2X6) */#define GF1M_IRQ_MIDI_TX 0x01 /* pending MIDI xmit IRQ */#define GF1M_IRQ_MIDI_RX 0x02 /* pending MIDI recv IRQ */#define GF1M_IRQ_TIMER1 0x04 /* general purpose timer */#define GF1M_IRQ_TIMER2 0x08 /* general purpose timer */#define GF1M_IRQ_WAVETABLE 0x20 /* pending wavetable IRQ */#define GF1M_IRQ_ENVELOPE 0x40 /* pending volume envelope IRQ */#define GF1M_IRQ_DMA_COMPLETE 0x80 /* pending dma transfer complete IRQ *//* GF1_MIX_CTRL (port 2X0) */#define GF1M_MIXER_NO_LINE_IN 0x01 /* 0: enable */#define GF1M_MIXER_NO_OUTPUT 0x02 /* 0: enable */#define GF1M_MIXER_MIC_IN 0x04 /* 1: enable */#define GF1M_MIXER_GF1_IRQ 0x08 /* 1: enable */#define GF1M_GF1_COMBINED_IRQ 0x10 /* 1: IRQ1 == IRQ2 */#define GF1M_MIDI_LOOPBACK 0x20 /* 1: enable loop back */#define GF1M_CONTROL_SELECT 0x40 /* 0: DMA latches; 1: IRQ latches *//* Timer data register (2X9) */#define GF1M_START_TIMER1 0x01#define GF1M_START_TIMER2 0x02#define GF1M_MASK_TIMER1 0x20#define GF1M_MASK_TIMER2 0x40#define GF1M_TIMER_CLRIRQ 0x80/* IRQ/DMA control register (2XB) */#define GF1M_IRQ_EQUAL 0x40#define GF1M_DMA_EQUAL 0x40/* (0x41) DMA control register bits */#define GF1M_DMAR_ENABLE 0x01 /* 1: go */#define GF1M_DMAR_READ 0x02 /* 1: read (->RAM), 0: write (->DRAM) */#define GF1M_DMAR_CHAN16 0x04 /* 1: 16 bit, 0: 8 bit DMA channel */#define GF1M_DMAR_RATE 0x18 /* 00: fast, 11: slow */#define GF1M_DMAR_IRQ_ENABLE 0x20 /* 1: enable */#define GF1M_DMAR_IRQ_PENDING 0x40 /* R: DMA irq pending */#define GF1M_DMAR_DATA16 0x40 /* W: 0: 8 bits; 1: 16 bits per sample */#define GF1M_DMAR_TOGGLE_SIGN 0x80 /* W: 1: invert high bit *//* DMA transfer rate divisors */#define GF1M_DMAR_RATE0 0x00 /* Fastest DMA xfer (~650khz) */#define GF1M_DMAR_RATE1 0x08 /* fastest / 2 */#define GF1M_DMAR_RATE2 0x10 /* fastest / 4 */#define GF1M_DMAR_RATE3 0x18 /* Slowest DMA xfer (fastest / 8) *//* (0x45) Timer Control */#define GF1M_TIMER1 0x04 /* Enable timer 1 IRQ */#define GF1M_TIMER2 0x08 /* Enable timer 2 IRQ *//* (0x49) Sampling (ADC) control register */#define GF1M_DMAW_ENABLE 0x01 /* 1: Start sampling */#define GF1M_DMAW_MODE 0x02 /* 0: mono, 1: stereo */#define GF1M_DMAW_CHAN16 0x04 /* 0: 8 bit, 1: 16 bit */#define GF1M_DMAW_IRQ_ENABLE 0x20 /* 1: enable IRQ */#define GF1M_DMAW_IRQ_PENDING 0x40 /* 1: irq pending */#define GF1M_DMAW_TOGGLE_SIGN 0x80 /* 1: invert sign bit *//* (0x4C) GF1 reset register */#define GF1M_MASTER_RESET 0x01 /* 0: hold in reset */#define GF1M_OUTPUT_ENABLE 0x02 /* 1: enable output */#define GF1M_MASTER_IRQ 0x04 /* 1: master IRQ enable *//* (0x0,0x80) Voice control register - GF1R_VOICE_CONTROL */#define GF1VC_STOPPED 0x01 /* 1: voice has stopped */#define GF1VC_STOP 0x02 /* 1: stop voice */#define GF1VC_DATA16 0x04 /* 0: 8 bit, 1: 16 bit */#define GF1VC_LOOP_ENABLE 0x08 /* 1: enable */#define GF1VC_BI_LOOP 0x10 /* 1: bi directional looping */#define GF1VC_IRQ 0x20 /* 1: enable voice's wave irq */#define GF1VC_BACKWARD 0x40 /* 0: increasing, 1: decreasing */#define GF1VC_IRQ_PENDING 0x80 /* 1: wavetable irq pending *//* (0x01,0x81) Frequency control *//* Bit 0 - Unused *//* Bits 1-9 - Fractional portion *//* Bits 10-15 - Integer portion *//* (0x02,0x82) Accumulator start address - GF1R_START_HIGH *//* Bits 0-11 - HIGH 12 bits of address *//* Bits 12-15 - Unused *//* (0x03,0x83) Accumulator start address - GF1R_START_LOW *//* Bits 0-4 - Unused *//* Bits 5-8 - Fractional portion *//* Bits 9-15 - Low 7 bits of integer portion *//* (0x04,0x84) Accumulator end address - GF1R_END_HIGH *//* Bits 0-11 - HIGH 12 bits of address *//* Bits 12-15 - Unused *//* (0x05,0x85) Accumulator end address - GF1R_END_LOW *//* Bits 0-4 - Unused *//* Bits 5-8 - Fractional portion *//* Bits 9-15 - Low 7 bits of integer portion *//* (0x06,0x86) Volume Envelope control register - GF1R_VOLUME_RATE */#define GF1VL_RATE_MANTISSA 0x3f#define GF1VL_RATE_RANGE 0xC0/* (0x07,0x87) Volume envelope start - GF1R_VOLUME_START */#define GF1VL_START_MANT 0x0F#define GF1VL_START_EXP 0xF0/* (0x08,0x88) Volume envelope end - GF1R_VOLUME_END */#define GF1VL_END_MANT 0x0F#define GF1VL_END_EXP 0xF0/* (0x09,0x89) Current volume register - GF1R_VOLUME *//* Bits 0-3 - Unused *//* Bits 4-11 - Mantissa of current volume *//* Bits 10-15 - Exponent of current volume *//* (0x0A,0x8A) Accumulator value (high) *//* Bits 0-12 - HIGH 12 bits of current position (a19-a7) *//* (0x0B,0x8B) Accumulator value (low) *//* Bits 0-8 - Fractional portion *//* Bits 9-15 - Integer portion of low adress (a6-a0) *//* (0x0C,0x8C) Pan (balance) position *//* Bits 0-3 - Balance position 0=full left, 0x0f=full right *//* (0x0D,0x8D) Volume control register - GF1R_VOLUME_CONTROL */#define GF1VL_STOPPED 0x01 /* volume has stopped */#define GF1VL_STOP 0x02 /* stop volume */#define GF1VL_ROLLOVER 0x04 /* Roll PAST end & gen IRQ */#define GF1VL_LOOP_ENABLE 0x08 /* 1: enable */#define GF1VL_BI_LOOP 0x10 /* 1: bi directional looping */#define GF1VL_IRQ 0x20 /* 1: enable voice's volume irq */#define GF1VL_BACKWARD 0x40 /* 0: increasing, 1: decreasing */#define GF1VL_IRQ_PENDING 0x80 /* 1: wavetable irq pending *//* (0x0E,0x8E) Number of active voices *//* Bits 0-5 - Number of active voices - 1 *//* (0x0F,0x8F) Sources of IRQs *//* Bits 0-4 - interrupting voice number *//* Bit 5 - Always a 1 */#define GF1IRQ_VOLUME 0x40 /* individual voice irq bit */#define GF1IRQ_WAVE 0x80 /* individual waveform irq bit *//* Commands are pooled and executed ON TIMER (1st timer) interrupt. * Currently there is a limit on the number of commands that you can
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -