diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp
index 9005bc3da..81226b084 100644
--- a/Machines/Electron/Electron.cpp
+++ b/Machines/Electron/Electron.cpp
@@ -32,7 +32,7 @@ namespace {
static const unsigned int real_time_clock_interrupt_1 = 16704;
static const unsigned int real_time_clock_interrupt_2 = 56704;
- static const unsigned int clock_rate_audio_divider = 1;
+ static const unsigned int clock_rate_audio_divider = 8;
}
#define graphics_line(v) ((((v) >> 7) - first_graphics_line + field_divider_line) % field_divider_line)
diff --git a/OSBindings/Mac/Clock Signal/Base.lproj/ElectronDocument.xib b/OSBindings/Mac/Clock Signal/Base.lproj/ElectronDocument.xib
index 8dc82d624..36a52be09 100644
--- a/OSBindings/Mac/Clock Signal/Base.lproj/ElectronDocument.xib
+++ b/OSBindings/Mac/Clock Signal/Base.lproj/ElectronDocument.xib
@@ -4,8 +4,10 @@
-
+
+
+
@@ -28,8 +30,8 @@
-
-
+
+
@@ -45,19 +47,25 @@
+
+
+
-
+
-
+
+
+
+
diff --git a/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift b/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift
index 31ba148cb..02f9a37b6 100644
--- a/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift
+++ b/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift
@@ -27,6 +27,7 @@ class ElectronDocument: MachineDocument {
self.electron.setView(self.openGLView, aspectRatio: 11.0 / 10.0)
self.electron.audioQueue = self.audioQueue
})
+ establishStoredOptions()
}
override var windowNibName: String? {
@@ -41,7 +42,6 @@ class ElectronDocument: MachineDocument {
switch pathExtension.lowercaseString {
case "uef":
electron.openUEFAtURL(url)
- electron.useFastLoadingHack = true
return
default: break;
}
@@ -71,6 +71,40 @@ class ElectronDocument: MachineDocument {
super.close()
}
+ // MARK: IBActions
+ @IBOutlet var displayTypeButton: NSPopUpButton!
+ @IBAction func setDisplayType(sender: NSPopUpButton!) {
+ switch sender.indexOfSelectedItem {
+ case 1: electron.useTelevisionOutput = false
+ default: electron.useTelevisionOutput = true
+ }
+ NSUserDefaults.standardUserDefaults().setInteger(sender.indexOfSelectedItem, forKey: self.displayTypeUserDefaultsKey)
+ }
+
+ @IBOutlet var fastLoadingButton: NSButton!
+ @IBAction func setFastLoading(sender: NSButton!) {
+ electron.useFastLoadingHack = sender.state == NSOnState
+ NSUserDefaults.standardUserDefaults().setBool(electron.useFastLoadingHack, forKey: self.fastLoadingUserDefaultsKey)
+ }
+
+ private let displayTypeUserDefaultsKey = "electron.displayType"
+ private let fastLoadingUserDefaultsKey = "electron.fastLoading"
+ private func establishStoredOptions() {
+ let standardUserDefaults = NSUserDefaults.standardUserDefaults()
+ standardUserDefaults.registerDefaults([
+ displayTypeUserDefaultsKey: 0,
+ fastLoadingUserDefaultsKey: true
+ ])
+
+ let useFastLoadingHack = standardUserDefaults.boolForKey(self.fastLoadingUserDefaultsKey)
+ electron.useFastLoadingHack = useFastLoadingHack
+ self.fastLoadingButton.state = useFastLoadingHack ? NSOnState : NSOffState
+
+ let displayType = standardUserDefaults.integerForKey(self.displayTypeUserDefaultsKey)
+ electron.useTelevisionOutput = (displayType == 1)
+ self.displayTypeButton.selectItemAtIndex(displayType)
+ }
+
// MARK: CSOpenGLViewDelegate
override func runForNumberOfCycles(numberOfCycles: Int32) {
if actionLock.tryLock() {
diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift
index 1b55f1f26..f35970b48 100644
--- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift
+++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift
@@ -19,7 +19,7 @@ class MachineDocument: NSDocument, CSOpenGLViewDelegate, CSOpenGLViewResponderDe
}
@IBOutlet weak var optionsPanel: NSPanel!
- @IBAction func showOptions(sender: AnyObject?) {
+ @IBAction func showOptions(sender: AnyObject!) {
optionsPanel?.setIsVisible(true)
}
diff --git a/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.h b/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.h
index e3ab2f8c5..8e9f5530f 100644
--- a/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.h
+++ b/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.h
@@ -21,5 +21,6 @@
- (void)drawViewForPixelSize:(CGSize)pixelSize onlyIfDirty:(BOOL)onlyIfDirty;
@property (nonatomic, assign) BOOL useFastLoadingHack;
+@property (nonatomic, assign) BOOL useTelevisionOutput;
@end
diff --git a/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm b/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm
index f4a93d26d..b31d919d6 100644
--- a/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm
+++ b/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm
@@ -112,25 +112,25 @@
case VK_ANSI_Grave:
case VK_ANSI_Backslash:
_electron.set_key_state(Electron::Key::KeyCopy, isPressed); break;
- case VK_Return: _electron.set_key_state(Electron::Key::KeyReturn, isPressed); break;
- case VK_ANSI_Minus: _electron.set_key_state(Electron::Key::KeyMinus, isPressed); break;
+ case VK_Return: _electron.set_key_state(Electron::Key::KeyReturn, isPressed); break;
+ case VK_ANSI_Minus: _electron.set_key_state(Electron::Key::KeyMinus, isPressed); break;
- case VK_RightArrow: _electron.set_key_state(Electron::Key::KeyRight, isPressed); break;
+ case VK_RightArrow: _electron.set_key_state(Electron::Key::KeyRight, isPressed); break;
case VK_LeftArrow: _electron.set_key_state(Electron::Key::KeyLeft, isPressed); break;
case VK_DownArrow: _electron.set_key_state(Electron::Key::KeyDown, isPressed); break;
case VK_UpArrow: _electron.set_key_state(Electron::Key::KeyUp, isPressed); break;
- case VK_Delete: _electron.set_key_state(Electron::Key::KeyDelete, isPressed); break;
- case VK_Escape: _electron.set_key_state(Electron::Key::KeyEscape, isPressed); break;
+ case VK_Delete: _electron.set_key_state(Electron::Key::KeyDelete, isPressed); break;
+ case VK_Escape: _electron.set_key_state(Electron::Key::KeyEscape, isPressed); break;
- case VK_ANSI_Comma: _electron.set_key_state(Electron::Key::KeyComma, isPressed); break;
+ case VK_ANSI_Comma: _electron.set_key_state(Electron::Key::KeyComma, isPressed); break;
case VK_ANSI_Period: _electron.set_key_state(Electron::Key::KeyFullStop, isPressed); break;
case VK_ANSI_Semicolon:
_electron.set_key_state(Electron::Key::KeySemiColon, isPressed); break;
- case VK_ANSI_Quote: _electron.set_key_state(Electron::Key::KeyColon, isPressed); break;
+ case VK_ANSI_Quote: _electron.set_key_state(Electron::Key::KeyColon, isPressed); break;
- case VK_ANSI_Slash: _electron.set_key_state(Electron::Key::KeySlash, isPressed); break;
+ case VK_ANSI_Slash: _electron.set_key_state(Electron::Key::KeySlash, isPressed); break;
case VK_Shift: _electron.set_key_state(Electron::Key::KeyShift, isPressed); break;
case VK_Control: _electron.set_key_state(Electron::Key::KeyControl, isPressed); break;