/** EMULib Emulation Library *********************************/ /** **/ /** SN76489.c **/ /** **/ /** This file contains emulation for the SN76489 sound chip **/ /** produced by Intel. **/ /** **/ /** Copyright (C) Marat Fayzullin 1996-1998 **/ /** You are not allowed to distribute this software **/ /** commercially. Please, notify me, if you make any **/ /** changes to this file. **/ /*************************************************************/ #ifndef SN76489_H #define SN76489_H #define PSG_BASE 131072 /* Base frequency for SN76489 */ #define PSG_ASYNC 0 /* Asynchronous emulation */ #define PSG_SYNC 1 /* Synchronous emulation mode */ #define PSG_FLUSH 2 /* Flush buffers only */ typedef struct { int Channel,Freq[4],Volume[4],Sync; unsigned char NoiseMode,Buf,Changed; void (*Sound)(int,int,int); } SN76489; /** Reset76489() *********************************************/ /** Reset the sound chip. The user has to provide a pointer **/ /** to a function Sound(Channel,Freq,Volume) used to make **/ /** actual sound. **/ /*************************************************************/ void Reset76489(register SN76489 *D,void (*Sound)(int,int,int)); /** Sync76489() **********************************************/ /** Flush all accumulated changes by issuing Sound() calls, **/ /** and set the synchronization on/off. The second argument **/ /** should be PSG_SYNC, PSG_ASYNC to set/reset sync, or **/ /** PSG_FLUSH to leave sync mode as it is. **/ /*************************************************************/ void Sync76489(register SN76489 *D,register unsigned char Sync); /** Write76489() *********************************************/ /** Call this function to output a value V into the sound **/ /** chip. **/ /*************************************************************/ void Write76489(register SN76489 *D,register unsigned char V); #endif /* SN76489_H */