Mercurial > repos > blastem
comparison psg.c @ 2081:cfd53c94fffb
Initial stab at RF5C164 emulation
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 03 Feb 2022 23:15:42 -0800 |
parents | c3c62dbf1ceb |
children | 2648081f3100 |
comparison
equal
deleted
inserted
replaced
2080:bafb757e1cd2 | 2081:cfd53c94fffb |
---|---|
11 #include <stdio.h> | 11 #include <stdio.h> |
12 #include <math.h> | 12 #include <math.h> |
13 void psg_init(psg_context * context, uint32_t master_clock, uint32_t clock_div) | 13 void psg_init(psg_context * context, uint32_t master_clock, uint32_t clock_div) |
14 { | 14 { |
15 memset(context, 0, sizeof(*context)); | 15 memset(context, 0, sizeof(*context)); |
16 context->audio = render_audio_source(master_clock, clock_div, 1); | 16 context->audio = render_audio_source("PSG", master_clock, clock_div, 1); |
17 context->clock_inc = clock_div; | 17 context->clock_inc = clock_div; |
18 for (int i = 0; i < 4; i++) { | 18 for (int i = 0; i < 4; i++) { |
19 context->volume[i] = 0xF; | 19 context->volume[i] = 0xF; |
20 } | 20 } |
21 } | 21 } |
109 } | 109 } |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 int16_t accum = 0; | 113 int16_t accum = 0; |
114 | 114 |
115 for (int i = 0; i < 3; i++) { | 115 for (int i = 0; i < 3; i++) { |
116 if (context->output_state[i]) { | 116 if (context->output_state[i]) { |
117 accum += volume_table[context->volume[i]]; | 117 accum += volume_table[context->volume[i]]; |
118 } | 118 } |
119 } | 119 } |
120 if (context->noise_out) { | 120 if (context->noise_out) { |
121 accum += volume_table[context->volume[3]]; | 121 accum += volume_table[context->volume[3]]; |
122 } | 122 } |
123 | 123 |
124 render_put_mono_sample(context->audio, accum); | 124 render_put_mono_sample(context->audio, accum); |
125 | 125 |
126 context->cycles += context->clock_inc; | 126 context->cycles += context->clock_inc; |
127 } | 127 } |
128 } | 128 } |