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
|