dead code dropped
This commit is contained in:
parent
36d3b2f735
commit
b49665512f
@ -13,7 +13,7 @@ CFLAGS+= -g3 -ggdb -gdwarf-2
|
|||||||
|
|
||||||
LDFLAGS=-mmcu=$(MCU) -L $(TOOLCHAIN_PREFIX)/include
|
LDFLAGS=-mmcu=$(MCU) -L $(TOOLCHAIN_PREFIX)/include
|
||||||
|
|
||||||
$(ARTIFACT).elf: main.o scheduler.o spi.o spi_init.o sequencer.o melody_tetris.o melody_tusch1.o ay_3_8913.o mute.o
|
$(ARTIFACT).elf: main.o scheduler.o spi.o spi_init.o sequencer.o melody_tetris.o melody_tusch1.o psg.o mute.o
|
||||||
$(CC) -o $@ $(LDFLAGS) $^
|
$(CC) -o $@ $(LDFLAGS) $^
|
||||||
$(OBJDUMP) -D $(ARTIFACT).elf > $(ARTIFACT).txt
|
$(OBJDUMP) -D $(ARTIFACT).elf > $(ARTIFACT).txt
|
||||||
|
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
void muteInit() {
|
void muteInit() {
|
||||||
// BIT6: MuteCtrl
|
// BIT6: MuteCtrl
|
||||||
P1DIR |= BIT6;
|
P1DIR |= BIT6;
|
||||||
P1OUT &= ~BIT6;
|
|
||||||
|
// initially, mute
|
||||||
|
P1OUT |= BIT6;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mute() {
|
void mute() {
|
||||||
|
@ -1,171 +0,0 @@
|
|||||||
#include <msp430g2553.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "psg.h"
|
|
||||||
#include "scheduler.h"
|
|
||||||
|
|
||||||
|
|
||||||
// generated using utils/calc-76489an.py
|
|
||||||
const uint16_t frequencyCodes[8][12] = {
|
|
||||||
{ 3420, 3229, 3047, 2876, 2715, 2562, 2419, 2283, 2155, 2034, 1920, 1812 },
|
|
||||||
{ 1710, 1614, 1524, 1438, 1357, 1281, 1209, 1141, 1077, 1017, 960, 906 },
|
|
||||||
{ 855, 807, 762, 719, 679, 641, 605, 571, 539, 508, 480, 453 },
|
|
||||||
{ 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226 },
|
|
||||||
{ 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113 },
|
|
||||||
{ 107, 101, 95, 90, 85, 80, 76, 71, 67, 64, 60, 57 },
|
|
||||||
{ 53, 50, 48, 45, 42, 40, 38, 36, 34, 32, 30, 28 },
|
|
||||||
{ 27, 25, 24, 22, 21, 20, 19, 18, 17, 16, 15, 14 }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#define ADDR_DATA_REG P2OUT
|
|
||||||
#define BUS_CTRL_REG P1OUT
|
|
||||||
#define BUS_CTRL_IN_REG P1IN
|
|
||||||
#define _CS0 BIT0
|
|
||||||
#define _CS1 BIT1
|
|
||||||
#define _WE BIT2
|
|
||||||
#define READY BIT3
|
|
||||||
|
|
||||||
#define CHANNEL_A_PERIOD_ADDR 0
|
|
||||||
#define CHANNEL_A_ATTEN_ADDR 1
|
|
||||||
#define CHANNEL_B_PERIOD_ADDR 2
|
|
||||||
#define CHANNEL_B_ATTEN_ADDR 3
|
|
||||||
#define CHANNEL_C_PERIOD_ADDR 4
|
|
||||||
#define CHANNEL_C_ATTEN_ADDR 5
|
|
||||||
|
|
||||||
#define IGNORE_OCTET 0xff
|
|
||||||
|
|
||||||
uint8_t psgAmplitudeShadowValue[3];
|
|
||||||
|
|
||||||
static void delay() {
|
|
||||||
asm volatile (
|
|
||||||
"push r12\n"
|
|
||||||
"mov.w #5, r12\n"
|
|
||||||
"loop:\n"
|
|
||||||
"dec.w r12\n"
|
|
||||||
"jnz loop\n"
|
|
||||||
"pop r12\n"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static void WRITE_CYCLE(uint8_t chipNo) {
|
|
||||||
if (chipNo == 0) {
|
|
||||||
BUS_CTRL_REG &= ~_CS0;
|
|
||||||
} else {
|
|
||||||
BUS_CTRL_REG &= ~_CS1;
|
|
||||||
}
|
|
||||||
|
|
||||||
BUS_CTRL_REG &= ~_WE;
|
|
||||||
|
|
||||||
delay();
|
|
||||||
|
|
||||||
while ((BUS_CTRL_IN_REG & READY) == 0);
|
|
||||||
|
|
||||||
BUS_CTRL_REG |= _WE;
|
|
||||||
|
|
||||||
if (chipNo == 0) {
|
|
||||||
BUS_CTRL_REG |= _CS0;
|
|
||||||
} else {
|
|
||||||
BUS_CTRL_REG |= _CS1;
|
|
||||||
}
|
|
||||||
|
|
||||||
delay();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void psgWrite(uint8_t chipNo, uint8_t value) {
|
|
||||||
ADDR_DATA_REG = value;
|
|
||||||
WRITE_CYCLE(chipNo);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void psgWriteFrequency(uint8_t channel, uint16_t frequencyCode) {
|
|
||||||
uint8_t chipNo = channel / 3;
|
|
||||||
uint8_t regAddr = (channel % 3) * 2;
|
|
||||||
|
|
||||||
// bit order in frequncyCode and order in octet on data bus are reversed
|
|
||||||
// see datacheat cp. 1 and cp. 6
|
|
||||||
uint8_t firstOctet = 0x01;
|
|
||||||
firstOctet |= ((regAddr & 0x04) > 1);
|
|
||||||
firstOctet |= ((regAddr & 0x02) < 1);
|
|
||||||
firstOctet |= ((regAddr & 0x01) < 3);
|
|
||||||
uint8_t lowerPart = frequencyCode & 0x0f;
|
|
||||||
firstOctet |= ((lowerPart & 0x08) << 1);
|
|
||||||
firstOctet |= ((lowerPart & 0x04) << 3);
|
|
||||||
firstOctet |= ((lowerPart & 0x02) << 5);
|
|
||||||
firstOctet |= ((lowerPart & 0x01) << 7);
|
|
||||||
|
|
||||||
uint8_t secondOctet = 0;
|
|
||||||
uint8_t upperPart = (frequencyCode & 0x03f0) >> 4;
|
|
||||||
secondOctet |= ((upperPart & 0x20) >> 3);
|
|
||||||
secondOctet |= ((upperPart & 0x10) >> 1);
|
|
||||||
secondOctet |= ((upperPart & 0x08) << 1);
|
|
||||||
secondOctet |= ((upperPart & 0x04) << 3);
|
|
||||||
secondOctet |= ((upperPart & 0x02) << 5);
|
|
||||||
secondOctet |= ((upperPart & 0x01) << 7);
|
|
||||||
|
|
||||||
ADDR_DATA_REG = firstOctet;
|
|
||||||
WRITE_CYCLE(chipNo);
|
|
||||||
|
|
||||||
ADDR_DATA_REG = secondOctet;
|
|
||||||
WRITE_CYCLE(chipNo);
|
|
||||||
}
|
|
||||||
|
|
||||||
void psgAmplitude(uint8_t channel, uint8_t volume) {
|
|
||||||
psgAmplitudeShadowValue[channel] = volume;
|
|
||||||
uint8_t chipNo = channel / 3;
|
|
||||||
uint8_t regAddr = ((channel % 3) * 2) + 1;
|
|
||||||
|
|
||||||
uint8_t attenuation = 15 - volume;
|
|
||||||
|
|
||||||
uint8_t firstOctet = 0x01;
|
|
||||||
firstOctet |= ((regAddr & 0x04) >> 1);
|
|
||||||
firstOctet |= ((regAddr & 0x02) << 1);
|
|
||||||
firstOctet |= ((regAddr & 0x01) << 3);
|
|
||||||
firstOctet |= ((attenuation & 0x01) << 7);
|
|
||||||
firstOctet |= ((attenuation & 0x02) << 5);
|
|
||||||
firstOctet |= ((attenuation & 0x04) << 3);
|
|
||||||
firstOctet |= ((attenuation & 0x08) << 1);
|
|
||||||
|
|
||||||
ADDR_DATA_REG = firstOctet;
|
|
||||||
WRITE_CYCLE(chipNo);
|
|
||||||
}
|
|
||||||
|
|
||||||
void psgPlayTone(uint8_t channel, uint8_t volume, t_octave octave, t_note note) {
|
|
||||||
if (note == e_Pause) {
|
|
||||||
psgAmplitude(channel, 0);
|
|
||||||
} else {
|
|
||||||
// if (psgAmplitudeShadowValue[channel] == 0) {
|
|
||||||
psgAmplitude(channel, volume);
|
|
||||||
// }
|
|
||||||
psgWriteFrequency(channel, frequencyCodes[octave][note]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void psgInit() {
|
|
||||||
// address/data bus
|
|
||||||
P2DIR = 0xff;
|
|
||||||
P2SEL = 0;
|
|
||||||
P2SEL2 = 0;
|
|
||||||
|
|
||||||
// bus control lines
|
|
||||||
// output:
|
|
||||||
// BIT0: /CS chip 0
|
|
||||||
// BIT1: /CS chip 1
|
|
||||||
// BIT2: /WE
|
|
||||||
// input:
|
|
||||||
// BIT3: READY
|
|
||||||
P1DIR |= BIT0 | BIT1 | BIT2;
|
|
||||||
P1DIR &= ~BIT3;
|
|
||||||
// immediately disable all outputs, all are active low
|
|
||||||
P1OUT |= BIT0 | BIT1 | BIT2;
|
|
||||||
|
|
||||||
// shutdown all channels including noise
|
|
||||||
psgWrite(0, 0b11111001);
|
|
||||||
psgWrite(0, 0b11111101);
|
|
||||||
psgWrite(0, 0b11111011);
|
|
||||||
psgWrite(0, 0b11111111);
|
|
||||||
|
|
||||||
// psgPlayTone(0, 5, e_O_3, e_A);
|
|
||||||
psgAmplitude(0, 3);
|
|
||||||
}
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user