108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
#ifndef C64_SID_H
 | 
						|
#define C64_SID_H
 | 
						|
 | 
						|
#include "types.h"
 | 
						|
 | 
						|
#define SID_ATK_2		0x00
 | 
						|
#define SID_ATK_8		0x10
 | 
						|
#define SID_ATK_16		0x20
 | 
						|
#define SID_ATK_24		0x30
 | 
						|
#define SID_ATK_38		0x40
 | 
						|
#define SID_ATK_56		0x50
 | 
						|
#define SID_ATK_68		0x60
 | 
						|
#define SID_ATK_80		0x70
 | 
						|
#define SID_ATK_100		0x80
 | 
						|
#define SID_ATK_250		0x90
 | 
						|
#define SID_ATK_500		0xa0
 | 
						|
#define SID_ATK_800		0xb0
 | 
						|
#define SID_ATK_1000	0xc0
 | 
						|
#define SID_ATK_3000	0xd0
 | 
						|
#define SID_ATK_5000	0xe0
 | 
						|
#define SID_ATK_8000	0xf0
 | 
						|
 | 
						|
#define SID_DKY_6		0x00
 | 
						|
#define SID_DKY_24		0x01
 | 
						|
#define SID_DKY_48		0x02
 | 
						|
#define SID_DKY_72		0x03
 | 
						|
#define SID_DKY_114		0x04
 | 
						|
#define SID_DKY_168		0x05
 | 
						|
#define SID_DKY_204		0x06
 | 
						|
#define SID_DKY_240		0x07
 | 
						|
#define SID_DKY_300		0x08
 | 
						|
#define SID_DKY_750		0x09
 | 
						|
#define SID_DKY_1500	0x0a
 | 
						|
#define SID_DKY_2400	0x0b
 | 
						|
#define SID_DKY_3000	0x0c
 | 
						|
#define SID_DKY_9000	0x0d
 | 
						|
#define SID_DKY_15000	0x0e
 | 
						|
#define SID_DKY_24000	0x0f
 | 
						|
 | 
						|
#define SID_CTRL_GATE	0x01
 | 
						|
#define SID_CTRL_SYNC	0x02
 | 
						|
#define SID_CTRL_RING	0x04
 | 
						|
#define SID_CTRL_TEST	0x08
 | 
						|
#define SID_CTRL_TRI	0x10
 | 
						|
#define SID_CTRL_SAW	0x20
 | 
						|
#define SID_CTRL_RECT	0x40
 | 
						|
#define SID_CTRL_NOISE	0x80
 | 
						|
 | 
						|
#define SID_FILTER_1	0x01
 | 
						|
#define SID_FILTER_2	0x02
 | 
						|
#define SID_FILTER_3	0x04
 | 
						|
#define SID_FILTER_X	0x08
 | 
						|
 | 
						|
#define SID_FMODE_LP	0x10
 | 
						|
#define SID_FMODE_BP	0x20
 | 
						|
#define SID_FMODE_HP	0x40
 | 
						|
#define SID_FMODE_3_OFF	0x80
 | 
						|
 | 
						|
#define SID_CLOCK_PAL		985248
 | 
						|
#define SID_CLOCK_NTSC		1022727
 | 
						|
 | 
						|
#define SID_CLKSCALE_PAL		1115974UL
 | 
						|
#define SID_CLKSCALE_NTSC		1075078UL
 | 
						|
 | 
						|
#define SID_FREQ_PAL(f)		((unsigned)(((unsigned long)(f) * SID_CLKSCALE_PAL) >> 16))
 | 
						|
#define SID_FREQ_NTSC(f)	((unsigned)(((unsigned long)(f) * SID_CLKSCALE_NTSC) >> 16))
 | 
						|
 | 
						|
struct SID
 | 
						|
{
 | 
						|
	struct Voice
 | 
						|
	{
 | 
						|
		volatile unsigned	freq;
 | 
						|
		volatile unsigned	pwm;
 | 
						|
		volatile byte		ctrl;
 | 
						|
		volatile byte		attdec;
 | 
						|
		volatile byte		susrel;
 | 
						|
	}	voices[3];
 | 
						|
 | 
						|
	volatile unsigned	ffreq;
 | 
						|
	volatile byte		resfilt;
 | 
						|
	volatile byte		fmodevol;
 | 
						|
 | 
						|
	volatile byte		potx;
 | 
						|
	volatile byte		poty;
 | 
						|
	volatile byte		random;
 | 
						|
	volatile byte		env3;
 | 
						|
};
 | 
						|
 | 
						|
#define NOTE_C(o)		(16744U >> (10 - (o)))
 | 
						|
#define NOTE_CS(o)		(17740U >> (10 - (o)))
 | 
						|
#define NOTE_D(o)		(18794U >> (10 - (o)))
 | 
						|
#define NOTE_DS(o)		(19912U >> (10 - (o)))
 | 
						|
#define NOTE_E(o)		(21096U >> (10 - (o)))
 | 
						|
#define NOTE_F(o)		(22351U >> (10 - (o)))
 | 
						|
#define NOTE_FS(o)		(23680U >> (10 - (o)))
 | 
						|
#define NOTE_G(o)		(25087U >> (10 - (o)))
 | 
						|
#define NOTE_GS(o)		(26580U >> (10 - (o)))
 | 
						|
#define NOTE_A(o)		(28160U >> (10 - (o)))
 | 
						|
#define NOTE_AS(o)		(29834U >> (10 - (o)))
 | 
						|
#define NOTE_B(o)		(31068U >> (10 - (o)))
 | 
						|
 | 
						|
// reference to the SID chip
 | 
						|
#define sid	(*((struct SID *)0xd400))
 | 
						|
 | 
						|
#pragma compile("sid.c")
 | 
						|
 | 
						|
#endif
 |