half way through audio test 2
This commit is contained in:
parent
91b7d704cd
commit
cf742dba11
@ -15,6 +15,10 @@ typedef struct {
|
|||||||
bool ch4_left;
|
bool ch4_left;
|
||||||
bool ch4_right;
|
bool ch4_right;
|
||||||
|
|
||||||
|
bool ch1_dac;
|
||||||
|
bool ch2_dac;
|
||||||
|
bool ch4_dac;
|
||||||
|
|
||||||
u8 volume_left;
|
u8 volume_left;
|
||||||
u8 volume_right;
|
u8 volume_right;
|
||||||
bool vin_left;
|
bool vin_left;
|
||||||
|
41
lib/audio.c
41
lib/audio.c
@ -281,7 +281,6 @@ void audio_tick(){
|
|||||||
if(ctx.sq1_len >= 64) {
|
if(ctx.sq1_len >= 64) {
|
||||||
ctx.sq1_enable = false;
|
ctx.sq1_enable = false;
|
||||||
}
|
}
|
||||||
printf("Len: %02X\n", ctx.sq1_len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ctx.sq2_len_enable) {
|
if(ctx.sq2_len_enable) {
|
||||||
@ -370,9 +369,12 @@ void audio_tick(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void enable_square1() {
|
void enable_square1() {
|
||||||
|
if(!ctx.ch1_dac){
|
||||||
|
return;
|
||||||
|
}
|
||||||
ctx.sq1_enable = true;
|
ctx.sq1_enable = true;
|
||||||
if(ctx.sq1_len >= 64) {
|
if(ctx.sq1_len >= 64) {
|
||||||
ctx.sq1_len = ctx.sq1_initial_len;
|
ctx.sq1_len = 0;
|
||||||
}
|
}
|
||||||
ctx.sq1_volume = ctx.sq1_initial_volume;
|
ctx.sq1_volume = ctx.sq1_initial_volume;
|
||||||
ctx.sq1_env_timer = 0;
|
ctx.sq1_env_timer = 0;
|
||||||
@ -387,9 +389,12 @@ void enable_square1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void enable_square2() {
|
void enable_square2() {
|
||||||
|
if(!ctx.ch2_dac){
|
||||||
|
return;
|
||||||
|
}
|
||||||
ctx.sq2_enable = true;
|
ctx.sq2_enable = true;
|
||||||
if(ctx.sq2_len >= 64) {
|
if(ctx.sq2_len >= 64) {
|
||||||
ctx.sq2_len = ctx.sq2_initial_len;
|
ctx.sq2_len = 0;
|
||||||
}
|
}
|
||||||
ctx.sq2_volume = ctx.sq2_initial_volume;
|
ctx.sq2_volume = ctx.sq2_initial_volume;
|
||||||
ctx.sq2_env_timer = 0;
|
ctx.sq2_env_timer = 0;
|
||||||
@ -400,9 +405,12 @@ void enable_square2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void enable_wave() {
|
void enable_wave() {
|
||||||
|
if(!ctx.ch3_dac){
|
||||||
|
return;
|
||||||
|
}
|
||||||
ctx.ch3_enable = true;
|
ctx.ch3_enable = true;
|
||||||
if(ctx.ch3_len >= 256) {
|
if(ctx.ch3_len >= 256) {
|
||||||
ctx.ch3_len = ctx.ch3_initial_len;
|
ctx.ch3_len = 0;
|
||||||
}
|
}
|
||||||
ctx.ch3_sample = 0;
|
ctx.ch3_sample = 0;
|
||||||
ctx.ch3_volume = ctx.ch3_initial_volume;
|
ctx.ch3_volume = ctx.ch3_initial_volume;
|
||||||
@ -410,9 +418,12 @@ void enable_wave() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void enable_noise() {
|
void enable_noise() {
|
||||||
|
if(!ctx.ch4_dac){
|
||||||
|
return;
|
||||||
|
}
|
||||||
ctx.ch4_enable = true;
|
ctx.ch4_enable = true;
|
||||||
if(ctx.ch4_len >= 64) {
|
if(ctx.ch4_len >= 64) {
|
||||||
ctx.ch4_len = ctx.ch4_initial_len;
|
ctx.ch4_len = 0;
|
||||||
}
|
}
|
||||||
ctx.ch4_env_timer = 0;
|
ctx.ch4_env_timer = 0;
|
||||||
ctx.ch4_env_direction = ctx.ch4_env_direction_buffer;
|
ctx.ch4_env_direction = ctx.ch4_env_direction_buffer;
|
||||||
@ -539,6 +550,9 @@ u8 audio_read(u16 address) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void reset_buffers(){
|
void reset_buffers(){
|
||||||
|
ctx.ch1_dac = 0;
|
||||||
|
ctx.ch2_dac = 0;
|
||||||
|
ctx.ch3_dac = 0;
|
||||||
ctx.ch1_left = 0;
|
ctx.ch1_left = 0;
|
||||||
ctx.ch1_right = 0;
|
ctx.ch1_right = 0;
|
||||||
ctx.ch2_left = 0;
|
ctx.ch2_left = 0;
|
||||||
@ -668,6 +682,12 @@ void audio_write(u16 address, u8 value){
|
|||||||
ctx.sq1_initial_volume = (value >> 4) & 0x0F;
|
ctx.sq1_initial_volume = (value >> 4) & 0x0F;
|
||||||
ctx.sq1_env_direction_buffer = (value & 0x8) == 0x8;
|
ctx.sq1_env_direction_buffer = (value & 0x8) == 0x8;
|
||||||
ctx.sq1_env_pace_buffer = value & 0b111;
|
ctx.sq1_env_pace_buffer = value & 0b111;
|
||||||
|
if(ctx.sq1_env_direction_buffer == 0 && ctx.sq1_initial_volume == 0) {
|
||||||
|
ctx.sq1_enable = false;
|
||||||
|
ctx.ch1_dac = false;
|
||||||
|
} else {
|
||||||
|
ctx.ch1_dac = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(address == 0xFF13) {
|
if(address == 0xFF13) {
|
||||||
ctx.sq1_period_reset = (ctx.sq1_period_reset & 0xF00) | value;
|
ctx.sq1_period_reset = (ctx.sq1_period_reset & 0xF00) | value;
|
||||||
@ -690,8 +710,11 @@ void audio_write(u16 address, u8 value){
|
|||||||
ctx.sq2_initial_volume = (value >> 4) & 0x0F;
|
ctx.sq2_initial_volume = (value >> 4) & 0x0F;
|
||||||
ctx.sq2_env_direction_buffer = (value & 0x8) == 0x8;
|
ctx.sq2_env_direction_buffer = (value & 0x8) == 0x8;
|
||||||
ctx.sq2_env_pace_buffer = value & 0b111;
|
ctx.sq2_env_pace_buffer = value & 0b111;
|
||||||
if(ctx.sq2_env_direction == 0 && ctx.sq2_initial_volume == 0) {
|
if(ctx.sq2_env_direction_buffer == 0 && ctx.sq2_initial_volume == 0) {
|
||||||
ctx.sq2_enable = false;
|
ctx.sq2_enable = false;
|
||||||
|
ctx.ch2_dac = false;
|
||||||
|
} else {
|
||||||
|
ctx.ch2_dac = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(address == 0xFF18) {
|
if(address == 0xFF18) {
|
||||||
@ -744,6 +767,12 @@ void audio_write(u16 address, u8 value){
|
|||||||
ctx.ch4_initial_volume = (value >> 4) & 0x0F;
|
ctx.ch4_initial_volume = (value >> 4) & 0x0F;
|
||||||
ctx.ch4_env_direction_buffer = (value & 0x8) == 0x8;
|
ctx.ch4_env_direction_buffer = (value & 0x8) == 0x8;
|
||||||
ctx.ch4_env_pace_buffer = value & 0b111;
|
ctx.ch4_env_pace_buffer = value & 0b111;
|
||||||
|
if(ctx.ch4_env_direction_buffer == 0 && ctx.ch4_initial_volume == 0) {
|
||||||
|
ctx.ch4_enable = false;
|
||||||
|
ctx.ch4_dac = false;
|
||||||
|
} else {
|
||||||
|
ctx.ch4_dac = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(address == 0xFF22) {
|
if(address == 0xFF22) {
|
||||||
|
Loading…
Reference in New Issue
Block a user