Mercurial > repos > blastem
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 } |