- Improved speaker on different CPU speeds

- CPU speed 0.25MHz, 0.5MHz, 1.5MHz and 2.8MHz added
This commit is contained in:
tudnai 2022-02-16 23:55:45 +01:00
parent 61f080476c
commit 9e8313f13d
4 changed files with 95 additions and 33 deletions

View File

@ -1472,9 +1472,9 @@
<size key="minSize" width="100" height="26"/>
<size key="maxSize" width="120" height="26"/>
<slider key="view" verticalHuggingPriority="750" id="NiF-yM-eE0">
<rect key="frame" x="0.0" y="14" width="116" height="26"/>
<rect key="frame" x="0.0" y="14" width="120" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" alignment="left" minValue="1" maxValue="6" doubleValue="1" tickMarkPosition="above" numberOfTickMarks="6" allowsTickMarkValuesOnly="YES" sliderType="linear" id="9W8-sY-vjz">
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" alignment="left" minValue="1" maxValue="10" doubleValue="3" tickMarkPosition="above" numberOfTickMarks="10" allowsTickMarkValuesOnly="YES" sliderType="linear" id="9W8-sY-vjz">
<connections>
<action selector="SpeedSelected:" target="B8D-0N-5wS" id="hjq-Fu-6I7"/>
</connections>
@ -1929,10 +1929,10 @@
</customSpacing>
</stackView>
<stackView focusRingType="none" distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lVP-FP-u6x" userLabel="CPU Speed Selection">
<rect key="frame" x="8" y="8" width="104" height="57"/>
<rect key="frame" x="8" y="8" width="104" height="104"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kym-qZ-Ch2">
<rect key="frame" x="-2" y="41" width="56" height="18"/>
<rect key="frame" x="-2" y="88" width="56" height="18"/>
<buttonCell key="cell" type="check" title="Trace" bezelStyle="regularSquare" imagePosition="left" inset="2" id="cIl-CI-TG2">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -1942,10 +1942,10 @@
</connections>
</button>
<box focusRingType="none" verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="wih-Y6-2Bz">
<rect key="frame" x="0.0" y="32" width="88" height="5"/>
<rect key="frame" x="0.0" y="79" width="88" height="5"/>
</box>
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0rh-UD-CfH">
<rect key="frame" x="-2" y="41" width="47" height="16"/>
<rect key="frame" x="-2" y="88" width="47" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" refusesFirstResponder="YES" focusRingType="none" alignment="right" title="ILE: 0.1" id="Eaz-eQ-aTu">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -1953,14 +1953,14 @@
</textFieldCell>
</textField>
<slider hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8yq-X9-qQ4">
<rect key="frame" x="-2" y="40" width="92" height="19"/>
<rect key="frame" x="-2" y="87" width="92" height="19"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" focusRingType="none" alignment="left" maxValue="1" doubleValue="0.10000000000000001" tickMarkPosition="above" sliderType="linear" id="tS0-Xw-KET"/>
<connections>
<action selector="leadingInitEdgeSelected:" target="XfG-lQ-9wD" id="FXh-mX-eVX"/>
</connections>
</slider>
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mWJ-H9-Alk">
<rect key="frame" x="-2" y="41" width="44" height="16"/>
<rect key="frame" x="-2" y="88" width="44" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" refusesFirstResponder="YES" focusRingType="none" alignment="right" title="LE: 0.1" id="aIi-wV-21w">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -1968,14 +1968,14 @@
</textFieldCell>
</textField>
<slider hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Fux-hn-RBw">
<rect key="frame" x="-2" y="40" width="92" height="19"/>
<rect key="frame" x="-2" y="87" width="92" height="19"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" focusRingType="none" alignment="left" maxValue="0.99990000000000001" doubleValue="0.10000000000000001" tickMarkPosition="above" sliderType="linear" id="xze-V2-nR4"/>
<connections>
<action selector="leadingEdgeSelected:" target="XfG-lQ-9wD" id="7pV-OO-nhj"/>
</connections>
</slider>
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Xfd-PR-Oev">
<rect key="frame" x="-2" y="41" width="48" height="16"/>
<rect key="frame" x="-2" y="88" width="48" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" refusesFirstResponder="YES" focusRingType="none" alignment="right" title="ITE: 0.1" id="e8G-NN-xe8">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -1983,14 +1983,14 @@
</textFieldCell>
</textField>
<slider hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P91-Ah-VX6">
<rect key="frame" x="-2" y="40" width="92" height="19"/>
<rect key="frame" x="-2" y="87" width="92" height="19"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" focusRingType="none" alignment="left" maxValue="1" doubleValue="0.10000000000000001" tickMarkPosition="above" sliderType="linear" id="50T-K4-rsM"/>
<connections>
<action selector="trailingInitEdgeSelected:" target="XfG-lQ-9wD" id="zXK-9D-9zH"/>
</connections>
</slider>
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WLe-No-XdS">
<rect key="frame" x="-2" y="41" width="45" height="16"/>
<rect key="frame" x="-2" y="88" width="45" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" refusesFirstResponder="YES" focusRingType="none" alignment="right" title="TE: 0.1" id="uUU-7X-My0">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -1998,23 +1998,23 @@
</textFieldCell>
</textField>
<slider hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Sn1-VZ-VjW">
<rect key="frame" x="-2" y="40" width="92" height="19"/>
<rect key="frame" x="-2" y="87" width="92" height="19"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" focusRingType="none" alignment="left" maxValue="0.99990000000000001" doubleValue="0.10000000000000001" tickMarkPosition="above" sliderType="linear" id="6HL-sM-Ulk"/>
<connections>
<action selector="trailingEdgeSelected:" target="XfG-lQ-9wD" id="UQ6-Lt-f9t"/>
</connections>
</slider>
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FFM-zm-Wjx">
<rect key="frame" x="-2" y="41" width="13" height="16"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FFM-zm-Wjx">
<rect key="frame" x="-2" y="57" width="13" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" refusesFirstResponder="YES" focusRingType="none" alignment="right" title="0" id="yIR-MN-Hdl">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<slider hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="64O-qO-cQV">
<rect key="frame" x="-2" y="40" width="92" height="19"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" focusRingType="none" alignment="left" minValue="-64" maxValue="64" tickMarkPosition="above" sliderType="linear" id="hxk-WO-tJf"/>
<slider focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="64O-qO-cQV">
<rect key="frame" x="-2" y="32" width="92" height="19"/>
<sliderCell key="cell" continuous="YES" refusesFirstResponder="YES" state="on" focusRingType="none" alignment="left" minValue="-256" maxValue="256" tickMarkPosition="above" sliderType="linear" id="hxk-WO-tJf"/>
<connections>
<action selector="extraBuf:" target="XfG-lQ-9wD" id="gEu-yg-udY"/>
</connections>

View File

@ -162,23 +162,39 @@ class ToolBarController: NSWindowController, NSWindowDelegate {
@IBAction func SpeedSelected(_ slider: NSSliderCell) {
switch slider.intValue {
case 1:
ViewController.current?.setCPUClockSpeed(freq: 0.25)
SpeedSelector.label = "0.25 MHz"
case 2:
ViewController.current?.setCPUClockSpeed(freq: 0.5)
SpeedSelector.label = "0.5 MHz"
case 4:
ViewController.current?.setCPUClockSpeed(freq: 1.5)
SpeedSelector.label = "1.5 MHz"
case 5:
ViewController.current?.setCPUClockSpeed(freq: 2)
SpeedSelector.label = "2 MHz"
case 3:
case 6:
ViewController.current?.setCPUClockSpeed(freq: 2.8)
SpeedSelector.label = "2.8 MHz"
case 7:
ViewController.current?.setCPUClockSpeed(freq: 4)
SpeedSelector.label = "4 MHz"
case 4:
case 8:
ViewController.current?.setCPUClockSpeed(freq: 10)
SpeedSelector.label = "10 MHz"
case 5:
case 9:
ViewController.current?.setCPUClockSpeed(freq: 100)
SpeedSelector.label = "100 MHz"
case 6:
case 10:
ViewController.current?.setCPUClockSpeed(freq: 2000)
SpeedSelector.label = "MAX Speed"

View File

@ -1097,6 +1097,8 @@ class ViewController: NSViewController {
func setCPUClockSpeed( freq : Double ) {
spkr_stopAll();
MHz_6502 = freq
clk_6502_per_frm = UInt64( MHz_6502 * M / Double(fps) )
clk_6502_per_frm_set = clk_6502_per_frm
@ -1107,16 +1109,24 @@ class ViewController: NSViewController {
spkr_extra_buf = 0 // 26
switch freq {
case 1.5:
spkr_extra_buf = 256
break
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 = 0 // -25 // 88
spkr_extra_buf = -25 // 88
break
case 2.8:
spkr_extra_buf = 185
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 = 0 // 80 // 20
spkr_extra_buf = 90 // 80 // 20
break
default:

View File

@ -429,15 +429,31 @@ void spkr_toggle_edge ( int level_max, const float initial_edge, const float fad
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;
switch ((int)(MHz_6502 * 10)) {
case 02:
case 05:
ema_len = 8;
ema_len_smooth = 8;
threshold = SPKR_SAMPLE_PWM_THRESHOLD * 2;
limiter = 10;
break;
case 4:
case 15:
ema_len = 5;
ema_len_smooth = 7;
threshold = SPKR_SAMPLE_PWM_THRESHOLD / 1.5;
limiter = 128;
break;
case 20:
case 28:
ema_len = 4;
ema_len_smooth = 6;
threshold = SPKR_SAMPLE_PWM_THRESHOLD / 2;
limiter = 128;
break;
case 40:
ema_len = 3;
ema_len_smooth = 5;
threshold = SPKR_SAMPLE_PWM_THRESHOLD / 4;
@ -527,8 +543,14 @@ 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(MHz_6502) / spkr_sample_rate)) * SPKR_CHANNELS;
double indexer = (double)spkr_sample_rate / MHZ(MHz_6502);
if ( MHz_6502 < default_MHz_6502 ) {
indexer = (double)spkr_sample_rate / MHZ(default_MHz_6502);
}
spkr_sample_idx = round( (double)(spkr_clk + m6502.clkfrm) * indexer ) * 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 ) {
// // printf("m:%u\n", spkr_sample_idx_diff);
@ -648,8 +670,22 @@ void spkr_update() {
// // DEBUG ONLY!!!
// fwrite(spkr_samples, sizeof(spkr_sample_t), (spkr_buf_size + spkr_extra_buf), af);
// fflush(af);
// if (MHz_6502 < default_MHz_6502) {
// size_t size = (spkr_buf_size + spkr_extra_buf) * sizeof(spkr_sample_t);
// memcpy(spkr_samples + size, spkr_samples, size);
// }
// if (MHz_6502 < default_MHz_6502 / 2) {
// size_t size = (spkr_buf_size + spkr_extra_buf) * sizeof(spkr_sample_t) * 2;
// memcpy(spkr_samples + size, spkr_samples, size);
// }
double multiplier = default_MHz_6502 / MHz_6502;
if (MHz_6502 < default_MHz_6502 ) {
multiplier = 1;
}
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) * multiplier, spkr_sample_rate * multiplier);
// 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);