|
|
1.1.1.2 ! root 1: /* 1.1 root 2: * UAE - The Un*x Amiga Emulator 1.1.1.2 ! root 3: * 1.1 root 4: * Support for Amiga audio.device sound 1.1.1.2 ! root 5: * 1.1 root 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 { 1.1.1.2 ! root 67: static char IOSent = 0; 1.1 root 68: 69: AudioMap.bam_Sample = (SBYTE *)buffers[bufidx]; 70: 71: AudioIO->aio_Command = CMD_WRITE; 72: AudioIO->aio_Flags = IOREQF_Quick; 1.1.1.2 ! root 73: AudioIO->aio_U.aio_Map.amio_Volume = 0xFFFF; 1.1 root 74: AudioIO->aio_U.aio_Map.amio_Cycles = 1; 1.1.1.2 ! root 75: AudioIO->aio_U.aio_Map.amio_Frequency = currprefs.sound_freq; 1.1 root 76: AudioIO->aio_U.aio_Map.amio_Length = sndbufsize; 77: 1.1.1.2 ! root 78: if(IOSent) pOS_WaitIO((void*)AudioIO); else IOSent=1; 1.1 root 79: pOS_BeginIO((void*)AudioIO); 80: 1.1.1.2 ! root 81: /* double buffering */ ! 82: bufidx = 1 - bufidx; ! 83: sndbuffer = sndbufpt = (uae_u16*)buffers[bufidx]; 1.1 root 84: } 85: } 86: 87: static __inline__ void check_sound_buffers (void) 88: { 89: if ((char *)sndbufpt - (char *)sndbuffer >= sndbufsize) { 1.1.1.2 ! root 90: flush_sound_buffer(); 1.1 root 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.