note on and note off into bitfield
This commit is contained in:
parent
31c8b46cf4
commit
8ac07f03ae
@ -18,8 +18,8 @@
|
|||||||
|
|
||||||
#include "chassis.hpp"
|
#include "chassis.hpp"
|
||||||
|
|
||||||
#include "patches.hpp"
|
|
||||||
#include "cpuboard.hpp"
|
#include "cpuboard.hpp"
|
||||||
|
#include "patches.hpp"
|
||||||
|
|
||||||
Assigner ic1;
|
Assigner ic1;
|
||||||
|
|
||||||
@ -67,16 +67,13 @@ void Chassis::noteOn(uint8_t note) {
|
|||||||
|
|
||||||
ic1.ram[0x4e] = 0x90;
|
ic1.ram[0x4e] = 0x90;
|
||||||
ic1.ram[0x3e] = note;
|
ic1.ram[0x3e] = note;
|
||||||
|
|
||||||
|
|
||||||
ic1.noteOn();
|
ic1.noteOn();
|
||||||
|
|
||||||
for (uint8_t i=0x40; i<0x4f; i++) {
|
for (uint8_t i = 0x40; i < 0x4f; i++) {
|
||||||
printf("%02x ", ic1.ram[i]);
|
printf("%02x ", ic1.ram[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
s.keyon = true;
|
s.keyon = true;
|
||||||
for (i = 0; i < NUM_VOICES; i++) {
|
for (i = 0; i < NUM_VOICES; i++) {
|
||||||
vPtr++;
|
vPtr++;
|
||||||
@ -96,6 +93,15 @@ void Chassis::noteOn(uint8_t note) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Chassis::noteOff(uint8_t note) {
|
void Chassis::noteOff(uint8_t note) {
|
||||||
|
ic1.ram[0x4e] = 0x80;
|
||||||
|
ic1.ram[0x3e] = note;
|
||||||
|
ic1.noteOn();
|
||||||
|
|
||||||
|
for (uint8_t i = 0x40; i < 0x4f; i++) {
|
||||||
|
printf("%02x ", ic1.ram[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
s.keyon = false;
|
s.keyon = false;
|
||||||
for (uint32_t i = 0; i < NUM_VOICES; i++) {
|
for (uint32_t i = 0; i < NUM_VOICES; i++) {
|
||||||
if (s.voice[i].note == note && !s.voice[i].isFree()) {
|
if (s.voice[i].note == note && !s.voice[i].isFree()) {
|
||||||
@ -178,24 +184,23 @@ void Chassis::run(const float **, float **outputs, uint32_t frames, const MidiEv
|
|||||||
// highpass filter
|
// highpass filter
|
||||||
|
|
||||||
float tmp = s.hptmp;
|
float tmp = s.hptmp;
|
||||||
float smp, flt=0;
|
float smp, flt = 0;
|
||||||
float cut_tbl[4] = {0.91245, 0.97097, 1, 0.99088};
|
float cut_tbl[4] = {0.91245, 0.97097, 1, 0.99088};
|
||||||
float cut = cut_tbl[(s.patchRam.switch2 & 0x18) >> 3];
|
float cut = cut_tbl[(s.patchRam.switch2 & 0x18) >> 3];
|
||||||
float gain_tbl[4] = {-1, -1, 0, 4};
|
float gain_tbl[4] = {-1, -1, 0, 4};
|
||||||
float gain = gain_tbl[(s.patchRam.switch2 & 0x18) >> 3];
|
float gain = gain_tbl[(s.patchRam.switch2 & 0x18) >> 3];
|
||||||
|
|
||||||
// printf("hp= %02x\n", (s.patchRam.switch2 & 0x18)>>3);
|
// printf("hp= %02x\n", (s.patchRam.switch2 & 0x18)>>3);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < frames; i++) {
|
for (uint32_t i = 0; i < frames; i++) {
|
||||||
smp = outputs[0][i];
|
smp = outputs[0][i];
|
||||||
|
|
||||||
flt = ((tmp - smp) * cut) + smp;
|
flt = ((tmp - smp) * cut) + smp;
|
||||||
tmp = flt;
|
tmp = flt;
|
||||||
outputs[0][i] = ((flt * gain) + smp);
|
outputs[0][i] = ((flt * gain) + smp);
|
||||||
}
|
}
|
||||||
s.hptmp = flt;
|
s.hptmp = flt;
|
||||||
|
|
||||||
|
|
||||||
// copy left to right
|
// copy left to right
|
||||||
memmove(outputs[1], outputs[0], sizeof(float) * frames);
|
memmove(outputs[1], outputs[0], sizeof(float) * frames);
|
||||||
// outputs[1][1]=1;
|
// outputs[1][1]=1;
|
||||||
|
@ -9,8 +9,6 @@ void Assigner::noteOn() {
|
|||||||
|
|
||||||
// note that RAM addresses normally set to 0xff40 are reduced to 0x0040
|
// note that RAM addresses normally set to 0xff40 are reduced to 0x0040
|
||||||
|
|
||||||
printf("starting noteon %02x %02x\n", ram[0x4e], ram[0x3e]);
|
|
||||||
|
|
||||||
// 06ca
|
// 06ca
|
||||||
a = ram[0x3e]; // first byte is note value
|
a = ram[0x3e]; // first byte is note value
|
||||||
c = 0x40; // fake velocity
|
c = 0x40; // fake velocity
|
||||||
@ -35,7 +33,6 @@ void Assigner::noteOn() {
|
|||||||
// otherwise handle note on
|
// otherwise handle note on
|
||||||
// 06e8 lxi hl,$0008; ldax (a+hl) for table of bits
|
// 06e8 lxi hl,$0008; ldax (a+hl) for table of bits
|
||||||
a = 1 << a;
|
a = 1 << a;
|
||||||
printf("A=%02x\n", a);
|
|
||||||
c = a;
|
c = a;
|
||||||
hl = 0x0040; // note bit flags
|
hl = 0x0040; // note bit flags
|
||||||
a = ram[hl + b]; // byte pointed to by upper part
|
a = ram[hl + b]; // byte pointed to by upper part
|
||||||
@ -46,7 +43,6 @@ void Assigner::noteOn() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
h06f9: // note off
|
h06f9: // note off
|
||||||
printf("went to note off\n");
|
|
||||||
|
|
||||||
a = 0xff ^ (1 << a);
|
a = 0xff ^ (1 << a);
|
||||||
c = a;
|
c = a;
|
||||||
|
Loading…
Reference in New Issue
Block a user