|
|
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: struct pOS_Locale; ! 10: struct pOS_Library; ! 11: struct pOS_ExecBase; ! 12: struct pOS_DosBase; ! 13: struct pOS_Method; ! 14: struct pOS_Resource; ! 15: struct pOS_RawDoFmtData; ! 16: struct pOS_AsciiDoFmtData; ! 17: struct pOS_AsciiFmtData; ! 18: struct pOS_ClassGrp; ! 19: struct pOS_DosDevPathInfo; ! 20: struct pOS_ShellScript; ! 21: struct pOS_SegmentInfo; ! 22: struct IClass; ! 23: struct Isrvstr; ! 24: struct TagItem; ! 25: struct MemHeader; ! 26: struct SemaphoreMessage; ! 27: struct StackSwapStruct; ! 28: struct Interrupt; ! 29: struct StandardPacket; ! 30: struct InfoData; ! 31: struct WBStartup; ! 32: ! 33: #define _SIZE_T /* to avoid interference with <sys/types.h> */ ! 34: #include <pExec/Types.h> ! 35: #include <pDOS/ArgTags.h> ! 36: #include <pDOS/DosSig.h> ! 37: #include <pDOS/DosErrors.h> ! 38: #include <pAudio/Audio.h> ! 39: #include <pAudio/AudioTags.h> ! 40: #include <pAudio/InfoData.h> ! 41: #include <pAudio/StdAMap.h> ! 42: #include <pAudio/AudioLib.h> ! 43: ! 44: #include <pInline/pExec2.h> ! 45: ! 46: extern struct pOS_ExecBase *gb_ExecBase; ! 47: extern struct pOS_ExecLibFunction *gb_ExecLib; ! 48: extern struct pOS_DosBase *gb_DosBase; ! 49: ! 50: extern struct pOS_AudioIO *AudioIO; ! 51: extern struct pOS_Std8AudioMap AudioMap; ! 52: ! 53: extern unsigned char *buffers[2]; ! 54: extern uae_u16 *sndbuffer, *sndbufpt; ! 55: extern int bufidx, devopen; ! 56: extern int sndbufsize; ! 57: ! 58: extern int have_sound; ! 59: ! 60: extern FILE *AUDIO_FILE; ! 61: ! 62: static __inline__ void flush_sound_buffer(void) ! 63: { ! 64: if(AUDIO_FILE) { ! 65: fwrite(buffers[bufidx], sndbufsize, 1, AUDIO_FILE); ! 66: } else { ! 67: static char IOSent = 0; ! 68: ! 69: AudioMap.bam_Sample = (SBYTE *)buffers[bufidx]; ! 70: ! 71: AudioIO->aio_Command = CMD_WRITE; ! 72: AudioIO->aio_Flags = IOREQF_Quick; ! 73: AudioIO->aio_U.aio_Map.amio_Volume = 0xFFFF; ! 74: AudioIO->aio_U.aio_Map.amio_Cycles = 1; ! 75: AudioIO->aio_U.aio_Map.amio_Frequency = currprefs.sound_freq; ! 76: AudioIO->aio_U.aio_Map.amio_Length = sndbufsize; ! 77: ! 78: if(IOSent) pOS_WaitIO((void*)AudioIO); else IOSent=1; ! 79: pOS_BeginIO((void*)AudioIO); ! 80: ! 81: /* double buffering */ ! 82: bufidx = 1 - bufidx; ! 83: sndbuffer = sndbufpt = (uae_u16*)buffers[bufidx]; ! 84: } ! 85: } ! 86: ! 87: static __inline__ void check_sound_buffers (void) ! 88: { ! 89: if ((char *)sndbufpt - (char *)sndbuffer >= sndbufsize) { ! 90: flush_sound_buffer(); ! 91: } ! 92: } ! 93: ! 94: #define PUT_SOUND_BYTE(b) do { *(uae_u8 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 1); } while (0) ! 95: #define PUT_SOUND_WORD(b) do { *(uae_u16 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 2); } while (0) ! 96: #define SOUND16_BASE_VAL 0 ! 97: #define SOUND8_BASE_VAL 0 ! 98: ! 99: #define DEFAULT_SOUND_MAXB 8192 ! 100: #define DEFAULT_SOUND_MINB 8192 ! 101: #define DEFAULT_SOUND_BITS 8 ! 102: #define DEFAULT_SOUND_FREQ 11025 ! 103: ! 104: #define UNSUPPORTED_OPTION_b ! 105: ! 106: #undef DONT_WANT_SOUND
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.