mirror of
https://github.com/trudnai/Steve2.git
synced 2024-05-31 15:41:35 +00:00
- Improved speaker on different CPU speeds
- CPU speed 0.25MHz, 0.5MHz, 1.5MHz and 2.8MHz added
This commit is contained in:
parent
61f080476c
commit
9e8313f13d
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user