|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * Support for Amiga audio.device sound ! 5: * ! 6: * Copyright 1996, 1997 Samuel Devulder ! 7: */ ! 8: ! 9: #include <proto/exec.h> ! 10: #include <proto/dos.h> ! 11: #ifndef __SASC ! 12: #include <proto/alib.h> ! 13: #endif ! 14: ! 15: #include <exec/memory.h> ! 16: #include <exec/devices.h> ! 17: #include <exec/io.h> ! 18: ! 19: #include <graphics/gfxbase.h> ! 20: #include <devices/timer.h> ! 21: #include <devices/audio.h> ! 22: ! 23: extern char whichchannel[]; ! 24: extern struct IOAudio *AudioIO; ! 25: extern struct MsgPort *AudioMP; ! 26: extern struct Message *AudioMSG; ! 27: ! 28: extern unsigned char *buffers[2]; ! 29: extern uae_u16 *sndbuffer, *sndbufpt; ! 30: extern int bufidx, devopen; ! 31: extern int sndbufsize; ! 32: ! 33: extern int have_sound, clockval, oldledstate, period; ! 34: ! 35: extern ULONG AUDIO_FILE; ! 36: ! 37: static __inline__ void flush_sound_buffer(void) ! 38: { ! 39: if(AUDIO_FILE) { ! 40: Write(AUDIO_FILE, buffers[bufidx], sndbufsize); ! 41: } else { ! 42: static char IOSent = 0; ! 43: ! 44: AudioIO->ioa_Request.io_Command = CMD_WRITE; ! 45: AudioIO->ioa_Request.io_Flags = ADIOF_PERVOL|IOF_QUICK; ! 46: AudioIO->ioa_Data = (uae_s8 *)buffers[bufidx]; ! 47: AudioIO->ioa_Length = sndbufsize; ! 48: AudioIO->ioa_Period = period; ! 49: AudioIO->ioa_Volume = 64; ! 50: AudioIO->ioa_Cycles = 1; ! 51: ! 52: if(IOSent) WaitIO((void*)AudioIO); else IOSent=1; ! 53: BeginIO((void*)AudioIO); ! 54: ! 55: /* double buffering */ ! 56: bufidx = 1 - bufidx; ! 57: sndbuffer = sndbufpt = (uae_u16*)buffers[bufidx]; ! 58: } ! 59: } ! 60: ! 61: static __inline__ void check_sound_buffers (void) ! 62: { ! 63: if ((char *)sndbufpt - (char *)sndbuffer >= sndbufsize) { ! 64: flush_sound_buffer(); ! 65: } ! 66: } ! 67: ! 68: #define PUT_SOUND_BYTE(b) do { *(uae_u8 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 1); } while (0) ! 69: #define PUT_SOUND_WORD(b) do { *(uae_u16 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 2); } while (0) ! 70: #define SOUND16_BASE_VAL 0 ! 71: #define SOUND8_BASE_VAL 0 ! 72: ! 73: #define DEFAULT_SOUND_MAXB 8192 ! 74: #define DEFAULT_SOUND_MINB 8192 ! 75: #define DEFAULT_SOUND_BITS 16 ! 76: #define DEFAULT_SOUND_FREQ 11025 ! 77: ! 78: #define UNSUPPORTED_OPTION_b ! 79: ! 80: #undef DONT_WANT_SOUND
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.