- Input res for Game Mode is back to 480 Hz

- Better sound even at 2 and 4 MHz
This commit is contained in:
tudnai 2022-02-16 20:38:49 +01:00
parent a56c93234d
commit 61f080476c
4 changed files with 131 additions and 57 deletions

View File

@ -22,10 +22,13 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.extraBuf(_:):ViewController.swift">
contextName = "BRA:6502_instr_branch.h">
<PersistentStrings>
<PersistentString
value = "soundGapLabel">
value = "">
</PersistentString>
<PersistentString
value = "RAM[0x346f]">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -86,7 +89,7 @@
contextName = "closure #1 in ViewController.Update():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "txtArr">
value = "MEMcfg.is_80STORE">
</PersistentString>
<PersistentString
value = "self.shadowTxt">
@ -95,10 +98,10 @@
value = "txt">
</PersistentString>
<PersistentString
value = "MEMcfg.is_80STORE">
value = "MEMcfg.txt_page_2">
</PersistentString>
<PersistentString
value = "MEMcfg.txt_page_2">
value = "txtArr">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -165,6 +168,14 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.Render():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "fps / video_fps_divider / 2">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "addr_abs:mmio.h">
<PersistentStrings>
@ -311,31 +322,31 @@
contextName = "spkr_update:speaker.c">
<PersistentStrings>
<PersistentString
value = "clk_6502_per_frm_max">
value = "clkfrm">
</PersistentString>
<PersistentString
value = "spkr_samples[ spkr_sample_idx -1] ">
</PersistentString>
<PersistentString
value = "(uint8_t)spkr_samples[452]">
</PersistentString>
<PersistentString
value = "spkr_sample_idx">
value = "clk_6502_per_frm">
</PersistentString>
<PersistentString
value = "(uint8_t)spkr_samples[451]">
</PersistentString>
<PersistentString
value = "clk_6502_per_frm">
value = "clk_6502_per_frm_max">
</PersistentString>
<PersistentString
value = "spkr_sample_idx">
</PersistentString>
<PersistentString
value = "(uint8_t)spkr_samples[455]">
</PersistentString>
<PersistentString
value = "clkfrm">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "spkr_playUpd:speaker.c">
</ContextState>
<ContextState
contextName = "MonitorView.frameDidChange(notification:):MonitorView.swift">
<PersistentStrings>
@ -350,6 +361,9 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "spkr_playUpd:speaker.c">
</ContextState>
<ContextState
contextName = "mach_msg_trap:(null)">
<PersistentStrings>
@ -399,7 +413,7 @@
value = "pdl_value[pdl]">
</PersistentString>
<PersistentString
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
value = "normalized_time">
</PersistentString>
<PersistentString
value = "(3300 * 255/3300)">
@ -411,7 +425,7 @@
value = "1 * 512 * (1 - ( 3300 / 3300.0 ))">
</PersistentString>
<PersistentString
value = "normalized_time">
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -459,7 +473,7 @@
contextName = "LoRes.Update():LoRes.swift">
<PersistentStrings>
<PersistentString
value = "blockChanged[ screenIdx ]">
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
</PersistentString>
<PersistentString
value = "UInt8(block)">
@ -468,7 +482,7 @@
value = "UInt8(block &amp; 4)">
</PersistentString>
<PersistentString
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
value = "blockChanged[ screenIdx ]">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -503,10 +517,10 @@
contextName = "set_flags_NZC:common.h">
<PersistentStrings>
<PersistentString
value = "(unsigned)test ">
value = "(unsigned)0xFF">
</PersistentString>
<PersistentString
value = "(unsigned)0xFF">
value = "(unsigned)test ">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -597,6 +611,26 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "DisplayView.adjustTextDisplaySize():DisplayView.swift">
<PersistentStrings>
<PersistentString
value = "self.frame">
</PersistentString>
<PersistentString
value = "frame">
</PersistentString>
<PersistentString
value = "textDisplay_height_diff">
</PersistentString>
<PersistentString
value = "bounds">
</PersistentString>
<PersistentString
value = "textDisplay_width_diff">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ioRead:Apple2_mmio.h">
<PersistentStrings>
@ -636,7 +670,7 @@
contextName = "spkr_toggle:speaker.c">
<PersistentStrings>
<PersistentString
value = "(int)spkr_sample_idx_diff">
value = "spkr_samples[spkr_sample_last_idx]">
</PersistentString>
<PersistentString
value = "(int16_t)28000 + (int16_t)-32768">
@ -645,16 +679,16 @@
value = "default_MHz_6502 * 1000 * 1000 / spkr_sample_rate">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( 1024000 / spkr_sample_rate ) ) * 2">
value = "(int)spkr_sample_idx_diff">
</PersistentString>
<PersistentString
value = "(spkr_clk + m6502.clkfrm)">
value = "( (spkr_clk + m6502.clkfrm) / ( 1024000 / spkr_sample_rate ) ) * 2">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( default_MHz_6502 * 1000 * 1000 / spkr_sample_rate)) * 2">
</PersistentString>
<PersistentString
value = "spkr_samples[spkr_sample_last_idx]">
value = "(spkr_clk + m6502.clkfrm)">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -662,14 +696,17 @@
contextName = "HiRes.draw(_:):HiRes.swift">
<PersistentStrings>
<PersistentString
value = "linAddr">
value = "(blockH7 | ( block &amp; bitMask ))">
</PersistentString>
<PersistentString
value = "HiRes.blockCols">
value = "ctx?.data">
</PersistentString>
<PersistentString
value = "ctx?.width">
</PersistentString>
<PersistentString
value = "ctx?.bitmapInfo">
</PersistentString>
<PersistentString
value = "ctx?.bytesPerRow">
</PersistentString>
@ -680,22 +717,19 @@
value = "HiResLineAddrTbl">
</PersistentString>
<PersistentString
value = "ctx?.bitmapInfo">
value = "HiRes.blockCols">
</PersistentString>
<PersistentString
value = "shadowScreen">
</PersistentString>
<PersistentString
value = "(blockH7 | ( block &amp; bitMask ))">
</PersistentString>
<PersistentString
value = "ctx?.height">
</PersistentString>
<PersistentString
value = "ctx?.bitsPerComponent">
value = "linAddr">
</PersistentString>
<PersistentString
value = "ctx?.data">
value = "ctx?.bitsPerComponent">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -711,13 +745,13 @@
contextName = "HiRes.compute():HiRes.swift">
<PersistentStrings>
<PersistentString
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
value = "UnsafeRawBufferPointer(result)">
</PersistentString>
<PersistentString
value = "result[2]">
</PersistentString>
<PersistentString
value = "UnsafeRawBufferPointer(result)">
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -769,13 +803,13 @@
value = "Apple2_64K_RAM + 0x3600">
</PersistentString>
<PersistentString
value = "m6502.PC">
value = "Apple2_64K_AUX + 0x3600">
</PersistentString>
<PersistentString
value = "(void*)Apple2_64K_RAM">
</PersistentString>
<PersistentString
value = "Apple2_64K_AUX + 0x3600">
value = "m6502.PC">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -831,7 +865,7 @@
value = "new">
</PersistentString>
<PersistentString
value = "WOZwrite.shift16">
value = "WOZtmp.shift16">
</PersistentString>
<PersistentString
value = "WOZwrite.shift">
@ -843,7 +877,7 @@
value = "(1 &lt;&lt; i) - 1">
</PersistentString>
<PersistentString
value = "WOZtmp.shift16">
value = "WOZwrite.shift16">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -886,9 +920,24 @@
<ContextState
contextName = "MonitorView.adjustTextDisplaySize():MonitorView.swift">
<PersistentStrings>
<PersistentString
value = "textDisplay_height_diff">
</PersistentString>
<PersistentString
value = "textDisplay_width_diff">
</PersistentString>
<PersistentString
value = "MonitorView.textViewBounds">
</PersistentString>
<PersistentString
value = "frame.size">
</PersistentString>
<PersistentString
value = "textDisplay.bounds">
</PersistentString>
<PersistentString
value = "textDisplay.frame">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
@ -898,10 +947,10 @@
value = "Apple2_64K_AUX + 0xC600">
</PersistentString>
<PersistentString
value = "(void*)rom">
value = "Apple2_64K_RAM + 0xC600">
</PersistentString>
<PersistentString
value = "Apple2_64K_RAM + 0xC600">
value = "(void*)rom">
</PersistentString>
<PersistentString
value = "strlen(fullPath)">
@ -920,15 +969,18 @@
<ContextState
contextName = "spkr_toggle_edge:speaker.c">
<PersistentStrings>
<PersistentString
value = "abs(spkr_level - level_max)">
</PersistentString>
<PersistentString
value = "( 1023000 / (double)spkr_sample_rate)">
</PersistentString>
<PersistentString
value = "spkr_samples">
</PersistentString>
<PersistentString
value = "spkr_clk + m6502.clkfrm / (int)( 1023000 / (double)spkr_sample_rate) * 2">
</PersistentString>
<PersistentString
value = "( 1023000 / (double)spkr_sample_rate)">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
@ -951,13 +1003,10 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "BRA:6502_instr_branch.h">
contextName = "ViewController.extraBuf(_:):ViewController.swift">
<PersistentStrings>
<PersistentString
value = "">
</PersistentString>
<PersistentString
value = "RAM[0x346f]">
value = "soundGapLabel">
</PersistentString>
</PersistentStrings>
</ContextState>

View File

@ -1110,13 +1110,13 @@ class ViewController: NSViewController {
case 2.0:
// spkr_extra_buf = Int32( Double(spkr_extra_buf) * 2.961538461538462 ) // normally it should come up as 77, but this way it is calculated with FPS
// spkr_extra_buf = 20
spkr_extra_buf = 88
spkr_extra_buf = 0 // -25 // 88
break
case 4.0:
// spkr_extra_buf = Int32( Double(spkr_extra_buf) * 1.346153846153846 ) // normally it should come up as 35, but this way it is calculated with FPS
// spkr_extra_buf = 45
spkr_extra_buf = 20
spkr_extra_buf = 0 // 80 // 20
break
default:

View File

@ -198,7 +198,7 @@ extern double mhz;
#define DEF_VIDEO_DIV 1U
#define DEF_SPKR_DIV 1U
#define GAME_FPS 120U // 480U
#define GAME_FPS 480U // 480U
#define GAME_VIDEO_DIV (GAME_FPS / 60U)
extern unsigned int video_fps_divider;

View File

@ -425,7 +425,29 @@ void spkr_toggle_edge ( int level_max, const float initial_edge, const float fad
// float ema_len = 21;
int ema_len = 7; // 8;
int ema_len_smooth = 8;
unsigned threshold = SPKR_SAMPLE_PWM_THRESHOLD;
unsigned limiter = 150;
switch ((int)MHz_6502) {
case 2:
ema_len = 4;
ema_len_smooth = 5;
threshold = SPKR_SAMPLE_PWM_THRESHOLD / 2;
limiter = 512;
break;
case 4:
ema_len = 3;
ema_len_smooth = 5;
threshold = SPKR_SAMPLE_PWM_THRESHOLD / 4;
limiter = 1024;
break;
default:
break;
}
// save last index before we advance it...
spkr_sample_last_idx = spkr_sample_idx;
@ -435,8 +457,8 @@ void spkr_toggle_edge ( int level_max, const float initial_edge, const float fad
spkr_level_tema = spkr_level;
spkr_level_qema = spkr_level;
if ( idx_diff < SPKR_SAMPLE_PWM_THRESHOLD ) {
ema_len = 8;
if ( idx_diff < threshold ) {
ema_len = ema_len_smooth;
if ( --spkr_att < 0 ) {
level_max = SPKR_LEVEL_ZERO;
@ -447,7 +469,7 @@ void spkr_toggle_edge ( int level_max, const float initial_edge, const float fad
}
for ( int i = 0; (i < spkr_buf_size * 2) && (abs(spkr_level - level_max) > 100); i++ ) {
for ( int i = 0; (i < spkr_buf_size * 2) && (abs(spkr_level - level_max) > limiter); i++ ) {
spkr_level_ema = ema(level_max, spkr_level_ema, ema_len);
spkr_level_dema = ema(spkr_level_ema, spkr_level_dema, ema_len);
spkr_level_tema = ema(spkr_level_dema, spkr_level_tema, ema_len);
@ -505,7 +527,7 @@ void spkr_toggle() {
// push a click into the speaker buffer
// (we will play the entire buffer at the end of the frame)
spkr_sample_idx = ( (spkr_clk + m6502.clkfrm) / ( MHZ(default_MHz_6502) / spkr_sample_rate)) * SPKR_CHANNELS;
spkr_sample_idx = ( (spkr_clk + m6502.clkfrm) / ( MHZ(MHz_6502) / spkr_sample_rate)) * SPKR_CHANNELS;
spkr_sample_idx &= UINTMAX_MAX - 1;
unsigned spkr_sample_idx_diff = spkr_sample_idx - spkr_sample_last_idx;
// if ( (int)spkr_sample_idx_diff == 0 ) {
@ -627,10 +649,13 @@ void spkr_update() {
// fwrite(spkr_samples, sizeof(spkr_sample_t), (spkr_buf_size + spkr_extra_buf), af);
// fflush(af);
alBufferData(spkr_buffers[freeBuffers], AL_FORMAT_STEREO16, spkr_samples, (spkr_buf_size + spkr_extra_buf) * sizeof(spkr_sample_t), spkr_sample_rate);
alBufferData(spkr_buffers[freeBuffers], AL_FORMAT_STEREO16, spkr_samples, (spkr_buf_size + spkr_extra_buf) * sizeof(spkr_sample_t) / (MHz_6502 / default_MHz_6502), spkr_sample_rate / (MHz_6502 / default_MHz_6502));
// alBufferData(spkr_buffers[freeBuffers], AL_FORMAT_STEREO16, spkr_samples, (spkr_buf_size + spkr_extra_buf) * sizeof(spkr_sample_t), spkr_sample_rate);
// alBufferData(spkr_buffers[freeBuffers], AL_FORMAT_STEREO16, spkr_samples, (spkr_sample_idx + spkr_extra_buf) * sizeof(spkr_sample_t), spkr_sample_rate);
// ALint bufSize = spkr_sample_idx + 20 < spkr_buf_size ? spkr_sample_idx * sizeof(spkr_sample_t) + 20 : spkr_buf_alloc_size;
// alBufferData(spkr_buffers[freeBuffers], AL_FORMAT_STEREO16, spkr_samples, bufSize + spkr_extra_buf, spkr_sample_rate);
al_check_error();
alSourceQueueBuffers(spkr_src[SPKR_SRC_GAME_SFX], 1, &spkr_buffers[freeBuffers]);
al_check_error();