123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- /*
- Copyright (C) 1994-1995 Apogee Software, Ltd.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU 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 General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- /***************************************************************************
- * NAME: GF1.H
- ** COPYRIGHT:
- ** "Copyright (c) 1991,1992, by FORTE
- **
- ** "This software is furnished under a license and may be used,
- ** copied, or disclosed only in accordance with the terms of such
- ** license and with the inclusion of the above copyright notice.
- ** This software or any other copies thereof may not be provided or
- ** otherwise made available to any other person. No title to and
- ** ownership of the software is hereby transfered."
- ****************************************************************************
- * CREATION DATE: 07/01/92
- *--------------------------------------------------------------------------*
- * VERSION DATE NAME DESCRIPTION
- *> 1.0 07/01/92 Original
- ***************************************************************************/
- #ifndef _GF1_H /* allow header to be processed only once */
- #define _GF1_H
- /* error codes */
- #define OK 0
- #define NO_MORE_VOICES -1
- #define BASE_NOT_FOUND 1
- #define BAD_IRQ 2
- #define BAD_DMA 3
- #define OS_LOADED 4
- #define NOT_LOADED 5
- #define NO_MEMORY 6
- #define DMA_BUSY 7
- #define NO_MORE_HANDLERS 8
- #define DMA_HUNG 9
- #define CARD_NOT_FOUND 10
- #define CARD_BEING_USED 11
- #define NO_MORE_INTERRUPTS 12
- #define BAD_TIMER 13
- #define BAD_PATCH 14
- #define OLD_PATCH 15
- #define DOS_ERROR 16
- #define FILE_NOT_FOUND 17
- /* bits */
- #define BIT0 0x01
- #define BIT1 0x02
- #define BIT2 0x04
- #define BIT3 0x08
- #define BIT4 0x10
- #define BIT5 0x20
- #define BIT6 0x40
- #define BIT7 0x80
- /* bounds for volume enveloping functions */
- #define MIN_OFFSET 5U
- #define MAX_OFFSET 251U
- /* bounds for voice allocation */
- #define MIN_VOICES 14
- #define MAX_VOICES 32
- /* DMA control bits */
- #define DMA_ENABLE BIT0
- #define DMA_READ BIT1
- #define DMA_WIDTH_16 BIT2 /* width of DMA channel */
- #define DMA_RATE_DIV_1 BIT3
- #define DMA_RATE_DIV_2 BIT4
- #define DMA_IRQ_ENABLE BIT5
- #define DMA_IRQ_PRESENT BIT6
- #define DMA_DATA_16 BIT6 /* width of data */
- #define DMA_INVERT_MSB BIT7
- /* SAMPLE control bits */
- #define DMA_STEREO 2
- /* DMA flags */
- #define GF1_RECORD 0 /* use dma control or sample control */
- #define GF1_DMA 1
- /* MIDI control register */
- #define MIDI_RESET (BIT0|BIT1)
- #define MIDI_TD_INT BIT5
- #define MIDI_RD_INT BIT7
- /* MIDI_STATUS_REGISTER */
- #define MIDI_RD BIT0
- #define MIDI_TD BIT1
- #define MIDI_ERR_FRAMING BIT4
- #define MIDI_ERR_OVERRUN BIT5
- /* digital playback flags */
- #define TYPE_8BIT BIT0 /* 1 use 8 bit data */
- /* 0 use 16 bit data */
- #define TYPE_PRELOAD BIT1 /* preload data */
- #define TYPE_INVERT_MSB BIT2 /* invert most significant bit during dma */
- #define TYPE_STEREO BIT3 /* 1 for stereo data */
- /* sound effects and digital music types */
- #define SND_LOOP_MASK (BIT0|BIT1)
- #define SND_LOOP_NONE 0
- #define SND_LOOP 1
- #define SND_LOOP_BIDIR 2
- #define SND_8BIT (BIT2)
- #define SND_BACKWARD (BIT3)
- #define SOUND_PLAYING 2
- #define SOUND_ACTIVE 1
- /* patch macros */
- #define HEADER_SIZE 12
- #define ID_SIZE 10
- #define DESC_SIZE 60
- #define RESERVED_SIZE 40
- #define PATCH_HEADER_RESERVED_SIZE 36
- #define LAYER_RESERVED_SIZE 40
- #define PATCH_DATA_RESERVED_SIZE 36
- #define GF1_HEADER_TEXT "GF1PATCH110"
- #define INST_NAME_SIZE 16
- #define ENVELOPES 6
- #define MAX_LAYERS 4
- /* patch modes */
- #define PATCH_16 BIT0
- #define PATCH_UNSIGNED BIT1
- #define PATCH_LOOPEN BIT2
- #define PATCH_BIDIR BIT3
- #define PATCH_BACKWARD BIT4
- #define PATCH_SUSTAIN BIT5
- #define PATCH_NO_SRELEASE BIT6
- #define PATCH_FAST_REL BIT7
- /* flags for patch loading */
- #define PATCH_LOAD_8_BIT BIT0
- /* digital playback callback reasons & return values */
- #define DIG_DONE 0
- #define DIG_MORE_DATA 1
- #define DIG_BUFFER_DONE 2
- #define DIG_PAUSE 3
- /* log table used for vibrato and pitch bend. log table made public for
- ** developers use */
- #define LOG_TAB_SIZE 12
- extern long gf1_log_table[LOG_TAB_SIZE];
- #if defined(__BORLANDC__)
- #undef RFAR
- #define RFAR far
- #elif defined(_MSC_VER) && (_MSC_VER <= 600)
- #define RFAR far
- #elif defined(_MSC_VER) && (_MSC_VER > 600)
- #define RFAR __far
- #else
- #undef RFAR
- #define RFAR
- #endif
- /* structure definitions */
- struct load_os
- {
- unsigned short voices;
- unsigned short forced_base_port;
- unsigned char forced_gf1_irq;
- unsigned char forced_midi_irq;
- unsigned char forced_channel_in;
- unsigned char forced_channel_out;
- };
- struct patchheader
- {
- char header[ HEADER_SIZE ];
- char gravis_id[ ID_SIZE ]; /* Id = "ID#000002" */
- char description[ DESC_SIZE ];
- unsigned char instruments;
- char voices;
- char channels;
- unsigned short wave_forms;
- unsigned short master_volume;
- unsigned long data_size;
- char reserved[ PATCH_HEADER_RESERVED_SIZE ];
- };
- struct instrumentdata
- {
- unsigned short instrument;
- char instrument_name[ INST_NAME_SIZE ];
- long instrument_size;
- char layers;
- char reserved[ RESERVED_SIZE ];
- };
- struct layerdata
- {
- char layer_duplicate;
- char layer;
- long layer_size;
- char samples;
- char reserved[ LAYER_RESERVED_SIZE ];
- };
- struct patchdata
- {
- char wave_name[7];
- unsigned char fractions;
- long wave_size;
- long start_loop;
- long end_loop;
- unsigned short sample_rate;
- long low_frequency;
- long high_frequency;
- long root_frequency;
- short tune;
- unsigned char balance;
- unsigned char envelope_rate[ ENVELOPES ];
- unsigned char envelope_offset[ ENVELOPES ];
- unsigned char tremolo_sweep;
- unsigned char tremolo_rate;
- unsigned char tremolo_depth;
- unsigned char vibrato_sweep;
- unsigned char vibrato_rate;
- unsigned char vibrato_depth;
- char modes;
- short scale_frequency;
- unsigned short scale_factor; /* from 0 to 2048 or 0 to 2 */
- char reserved[ PATCH_DATA_RESERVED_SIZE ];
- };
- struct wave_struct
- {
- unsigned long start_loop;
- unsigned long end_loop;
- long low_frequency;
- long high_frequency;
- long root_frequency;
- unsigned long mem;
- unsigned short scale_frequency;
- unsigned short sample_rate;
- unsigned short scale_factor;
- unsigned short start_acc_low;
- unsigned short start_acc_high;
- unsigned short start_low;
- unsigned short start_high;
- unsigned short end_low;
- unsigned short end_high;
- unsigned short end_acc_low;
- unsigned short end_acc_high;
- unsigned short sample_ratio;
- unsigned long wave_size;
- unsigned char fractions;
- unsigned char balance;
- unsigned char envelope_rate[ ENVELOPES ];
- unsigned char envelope_offset[ ENVELOPES ];
- unsigned char tremolo_sweep;
- unsigned char tremolo_rate;
- unsigned char tremolo_depth;
- unsigned char vibrato_sweep;
- unsigned char vibrato_rate;
- unsigned char vibrato_depth;
- unsigned char modes;
- };
- struct patchinfo {
- struct patchheader header;
- struct instrumentdata idata;
- };
- struct patch {
- short nlayers;
- struct wave_struct RFAR *layer_waves[MAX_LAYERS];
- short layer_nwaves[MAX_LAYERS];
- unsigned short detune;
- };
- struct gf1_dma_buff {
- unsigned char RFAR *vptr;
- unsigned long paddr;
- };
- struct gf1_sound {
- unsigned long mem_pos;
- unsigned long start_loop;
- unsigned long end_loop;
- unsigned char type;
- };
- /* GLOBAL VARIABLES (flags) */
- extern char gf1_linear_volumes;
- extern char gf1_dig_use_extra_voice;
- /* FUNCTION PROTOTYPES */
- /* Initializeation routines */
- int gf1_init_ports(int);
- int gf1_load_os(struct load_os RFAR *os);
- int gf1_unload_os(void);
- void gf1_set_appname(char RFAR *);
- void reset_ultra(int);
- int gf1_asm_init(void);
- unsigned char gf1_peek(unsigned long address);
- void gf1_poke(unsigned long address, unsigned char data);
- void gf1_poke_block(unsigned char RFAR *data, unsigned long address, unsigned long len, unsigned char dma_control);
- char gf1_good_dram(unsigned long address);
- int GetUltraCfg(struct load_os RFAR *os);
- unsigned long gf1_malloc(unsigned long);
- void gf1_free(unsigned long);
- unsigned long gf1_mem_avail(void);
- unsigned long gf1_mem_largest_avail(void);
- void gf1_delay(void);
- int gf1_allocate_voice(int priority, void (RFAR *steal_notify)(int));
- void gf1_free_voice(unsigned int i);
- void gf1_adjust_priority(int voice, int priority);
- int gf1_dram_xfer(struct gf1_dma_buff RFAR *dptr, unsigned long size, unsigned long dram_address, unsigned char dma_control, unsigned short flags);
- void gf1_stop_dma(void);
- long convert_to_16bit(long address);
- int gf1_wait_dma(void);
- int gf1_dma_ready(void);
- unsigned long gf1_amount_xferred(void);
- int gf1_detect_card(unsigned short port);
- char *gf1_error_str(int);
- int gf1_play_digital(unsigned short priority, unsigned char RFAR *buffer,
- unsigned long size, unsigned long gf1_addr, unsigned short volume,
- unsigned short pan, unsigned short frequency, unsigned char type,
- struct gf1_dma_buff RFAR *dptr,
- int (RFAR *callback)(int, int, unsigned char RFAR * RFAR *, unsigned long RFAR *));
- void gf1_restart_digital(int voice);
- void gf1_start_digital(int voice);
- void gf1_pause_digital(int voice);
- void RFAR gf1_stop_digital(int voice);
- void gf1_dig_set_dma_rate(unsigned short rate);
- unsigned long gf1_digital_position(int voice);
- int gf1_myatoi(void);
- int gf1_update_waveform(struct wave_struct RFAR *wave_info);
- int gf1_get_patch_info(char RFAR *patch_file, struct patchinfo RFAR *patch);
- int gf1_load_patch(char RFAR *patch_file, struct patchinfo RFAR *patchinfo,
- struct patch RFAR *patch,
- struct gf1_dma_buff RFAR *dptr, unsigned short size,
- unsigned char RFAR *wavemem, int flags);
- void gf1_unload_patch(struct patch RFAR *patch);
- void gf1_detune_patch(struct patch RFAR *patch, unsigned short detune);
- unsigned short gf1_calc_fc(unsigned int sample_ratio,long root,long frequency);
- void gf1_midi_stop_voice(int voice);
- void gf1_midi_wait_voice(int voice);
- unsigned short gf1_midi_status_note(int voice);
- unsigned short gf1_midi_status_voice(int voice);
- void RFAR gf1_midi_stop_note(int note_voice);
- void gf1_midi_note_on(struct patch RFAR *patch, int priority, int note, int velocity, int channel);
- void gf1_midi_note_off(int note, int channel);
- void gf1_midi_silence_patch_notes(struct patch RFAR *patch);
- void gf1_midi_patch_removed(struct patch RFAR *patch);
- int gf1_enable_timer1(int (RFAR *callback)(void), int resolution);
- int gf1_enable_timer2(int (RFAR *callback)(void), int resolution);
- void gf1_disable_timer1(void);
- void gf1_disable_timer2(void);
- void gf1_channel_pitch_bend(int channel, unsigned int bend);
- void gf1_midi_synth_volume(unsigned short synth, int master_volume);
- void gf1_midi_change_program(struct patch RFAR *patch, int channel);
- void gf1_midi_set_vibrato(int channel, int value);
- void gf1_midi_change_volume(int channel, unsigned int volume);
- void gf1_midi_set_balance(int balance, int channel);
- void gf1_midi_channel_sustain(int channel, int sustain);
- void gf1_midi_all_notes_off(int channel);
- void gf1_midi_pitch_bend(int channel, int lsb, int msb);
- void gf1_midi_parameter(int channel, int control, int value);
- int gf1_midi_get_channel_notes(int channel, int notes[]);
- int gf1_midi_get_channel_volume(int channel);
- int gf1_midi_get_master_volume(void);
- int gf1_midi_get_volume(int voice);
- unsigned short gf1_read(int handle, void RFAR *io_buffer, unsigned short size);
- unsigned short gf1_close_file(int handle);
- unsigned int gf1_seek(int handle, unsigned long offset, int method);
- int gf1_open(char RFAR *name);
- #ifdef __FLAT__
- int gf1_atoi(char RFAR **str, int base);
- #else
- int gf1_atoi(void);
- #endif
- void gf1_leave(void);
- short gf1_enter(void);
- void gf1_enter1(void);
- int gf1_play_next_buffer(int voice, unsigned char RFAR *buff, unsigned long size);
- void gf1_dig_set_vol(unsigned short voice, unsigned short vol);
- void gf1_dig_set_pan(unsigned short voice, unsigned short pan);
- int gf1_set_external_semaphore(void RFAR *addr);
- int gf1_clear_external_semaphore(void RFAR *addr);
- void gf1_midi_reset(int c);
- int gf1_add_midi_recv_handler(int (RFAR *handler)());
- int gf1_add_dma_handler(int (*handler)());
- int gf1_add_voice_handler(int (*handler)(int));
- int gf1_add_volume_handler(int (*handler)(int));
- int gf1_add_timer_handler(int timer, int (RFAR *handler)(void));
- void gf1_set_record_rate(unsigned long rate);
- void gf1_create_patch(struct patch RFAR *patch);
- int gf1_add_layer(struct patch RFAR *patch, int layer, char RFAR *wavemem);
- void gf1_get_waveform_info(struct patch RFAR *patch, int layer, int waven,
- struct wave_struct RFAR *wave);
- void gf1_set_waveform_info(struct patch RFAR *patch, int layer, int waven,
- struct wave_struct RFAR *wave);
- void gf1_enable_line_in(void);
- void gf1_disable_line_in(void);
- void gf1_enable_mic_in(void);
- void gf1_disable_mic_in(void);
- void gf1_enable_output(void);
- void gf1_disable_output(void);
- void gf1_sound_volume(unsigned short voice, int volume,
- unsigned long period /* us*10 */);
- void gf1_sound_pan(unsigned short voice, unsigned short pan);
- void gf1_sound_frequency(unsigned short voice, unsigned long freq);
- void RFAR gf1_sound_stop(int voice);
- void gf1_sound_mode(int voice, struct gf1_sound RFAR *sound,
- unsigned char type);
- int gf1_sound_start(unsigned short priority, struct gf1_sound RFAR *sound,
- short volume, unsigned long period, short pan, unsigned long freq);
- int gf1_sound_playing(int voice);
- #endif
|