comparison 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
comparison
equal deleted inserted replaced
2240:8e8db9141209 2243:0d1d5dccdd28
90 if ((pcm->flags & FLAG_SOUNDING) && !(pcm->channel_enable & (1 << pcm->cur_channel))) { 90 if ((pcm->flags & FLAG_SOUNDING) && !(pcm->channel_enable & (1 << pcm->cur_channel))) {
91 if (pcm->channels[pcm->cur_channel].state == START) { 91 if (pcm->channels[pcm->cur_channel].state == START) {
92 pcm->channels[pcm->cur_channel].cur_ptr = pcm->channels[pcm->cur_channel].regs[ST] << 19; 92 pcm->channels[pcm->cur_channel].cur_ptr = pcm->channels[pcm->cur_channel].regs[ST] << 19;
93 //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); 93 //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);
94 pcm->channels[pcm->cur_channel].state = NORMAL; 94 pcm->channels[pcm->cur_channel].state = NORMAL;
95 pcm->channels[pcm->cur_channel].trigger = 1;
95 } else if (pcm->channels[pcm->cur_channel].state == LOOP) { 96 } else if (pcm->channels[pcm->cur_channel].state == LOOP) {
97 uint32_t old_ptr = pcm->channels[pcm->cur_channel].cur_ptr;
96 pcm->channels[pcm->cur_channel].cur_ptr = (pcm->channels[pcm->cur_channel].regs[LSH] << 19) | (pcm->channels[pcm->cur_channel].regs[LSL] << 11); 98 pcm->channels[pcm->cur_channel].cur_ptr = (pcm->channels[pcm->cur_channel].regs[LSH] << 19) | (pcm->channels[pcm->cur_channel].regs[LSL] << 11);
97 //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); 99 //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);
98 pcm->channels[pcm->cur_channel].state = NORMAL; 100 pcm->channels[pcm->cur_channel].state = NORMAL;
101 pcm->channels[pcm->cur_channel].trigger = old_ptr != pcm->channels[pcm->cur_channel].cur_ptr;
102 } else {
103 pcm->channels[pcm->cur_channel].trigger = 0;
99 } 104 }
100 } 105 }
101 write_if_not_sounding(pcm); 106 write_if_not_sounding(pcm);
102 CHECK; 107 CHECK;
103 case 2: { 108 case 2: {
142 } 147 }
143 sample *= pcm->channels[pcm->cur_channel].regs[ENV]; 148 sample *= pcm->channels[pcm->cur_channel].regs[ENV];
144 int16_t left = (sample * (pcm->channels[pcm->cur_channel].regs[PAN] >> 4)) >> 5; 149 int16_t left = (sample * (pcm->channels[pcm->cur_channel].regs[PAN] >> 4)) >> 5;
145 int16_t right = (sample * (pcm->channels[pcm->cur_channel].regs[PAN] & 0xF)) >> 5; 150 int16_t right = (sample * (pcm->channels[pcm->cur_channel].regs[PAN] & 0xF)) >> 5;
146 //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); 151 //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);
152 if (pcm->scope) {
153 scope_add_sample(pcm->scope, pcm->channels[pcm->cur_channel].scope_channel, sample, pcm->channels[pcm->cur_channel].trigger);
154 }
147 pcm->left += left; 155 pcm->left += left;
148 pcm->right += right; 156 pcm->right += right;
157 } else if (pcm->scope) {
158 scope_add_sample(pcm->scope, pcm->channels[pcm->cur_channel].scope_channel, 0, 0);
149 } 159 }
150 write_if_not_sounding(pcm); 160 write_if_not_sounding(pcm);
151 CHECK; 161 CHECK;
152 case 10: 162 case 10:
153 //refresh? 163 //refresh?
226 return pcm->ram[pcm->ram_bank | (address & 0xFFF)]; 236 return pcm->ram[pcm->ram_bank | (address & 0xFFF)];
227 } else { 237 } else {
228 return 0xFF; 238 return 0xFF;
229 } 239 }
230 } 240 }
241
242 void rf5c164_enable_scope(rf5c164* pcm, oscilloscope *scope)
243 {
244 static const char *names[] = {
245 "Richo #1",
246 "Richo #2",
247 "Richo #3",
248 "Richo #4",
249 "Richo #5",
250 "Richo #6",
251 "Richo #7",
252 "Richo #8",
253 };
254 pcm->scope = scope;
255 for (int i = 0; i < 8; i ++)
256 {
257 pcm->channels[i].scope_channel = scope_add_channel(scope, names[i], 50000000 / (pcm->clock_step * 96));
258 }
259 }