Mercurial > repos > blastem
diff rf5c164.c @ 2243:0d1d5dccdd28
Initial implementation of oscilloscope debug view
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 22 Nov 2022 17:57:02 -0800 |
parents | 4fbe1e7c4a73 |
children | 709036ee222a |
line wrap: on
line diff
--- a/rf5c164.c Wed Sep 21 23:16:39 2022 -0700 +++ b/rf5c164.c Tue Nov 22 17:57:02 2022 -0800 @@ -92,10 +92,15 @@ pcm->channels[pcm->cur_channel].cur_ptr = pcm->channels[pcm->cur_channel].regs[ST] << 19; //printf("chan %d START %X (%X raw)\n", pcm->cur_channel, pcm->channels[pcm->cur_channel].cur_ptr >> 11, pcm->channels[pcm->cur_channel].cur_ptr); pcm->channels[pcm->cur_channel].state = NORMAL; + pcm->channels[pcm->cur_channel].trigger = 1; } else if (pcm->channels[pcm->cur_channel].state == LOOP) { + uint32_t old_ptr = pcm->channels[pcm->cur_channel].cur_ptr; pcm->channels[pcm->cur_channel].cur_ptr = (pcm->channels[pcm->cur_channel].regs[LSH] << 19) | (pcm->channels[pcm->cur_channel].regs[LSL] << 11); //printf("chan %d LOOP %X (%X raw)\n", pcm->cur_channel, pcm->channels[pcm->cur_channel].cur_ptr >> 11, pcm->channels[pcm->cur_channel].cur_ptr); pcm->channels[pcm->cur_channel].state = NORMAL; + pcm->channels[pcm->cur_channel].trigger = old_ptr != pcm->channels[pcm->cur_channel].cur_ptr; + } else { + pcm->channels[pcm->cur_channel].trigger = 0; } } write_if_not_sounding(pcm); @@ -144,8 +149,13 @@ int16_t left = (sample * (pcm->channels[pcm->cur_channel].regs[PAN] >> 4)) >> 5; int16_t right = (sample * (pcm->channels[pcm->cur_channel].regs[PAN] & 0xF)) >> 5; //printf("chan %d, raw %X, sample %d, left %d, right %d, ptr %X (raw %X)\n", pcm->cur_channel, pcm->channels[pcm->cur_channel].sample, sample, left, right, pcm->channels[pcm->cur_channel].cur_ptr >> 11, pcm->channels[pcm->cur_channel].cur_ptr); + if (pcm->scope) { + scope_add_sample(pcm->scope, pcm->channels[pcm->cur_channel].scope_channel, sample, pcm->channels[pcm->cur_channel].trigger); + } pcm->left += left; pcm->right += right; + } else if (pcm->scope) { + scope_add_sample(pcm->scope, pcm->channels[pcm->cur_channel].scope_channel, 0, 0); } write_if_not_sounding(pcm); CHECK; @@ -228,3 +238,22 @@ return 0xFF; } } + +void rf5c164_enable_scope(rf5c164* pcm, oscilloscope *scope) +{ + static const char *names[] = { + "Richo #1", + "Richo #2", + "Richo #3", + "Richo #4", + "Richo #5", + "Richo #6", + "Richo #7", + "Richo #8", + }; + pcm->scope = scope; + for (int i = 0; i < 8; i ++) + { + pcm->channels[i].scope_channel = scope_add_channel(scope, names[i], 50000000 / (pcm->clock_step * 96)); + } +}