diff --git a/Machines/Commodore/Vic-20/Vic20.cpp b/Machines/Commodore/Vic-20/Vic20.cpp index e397735e3..dc05075cb 100644 --- a/Machines/Commodore/Vic-20/Vic20.cpp +++ b/Machines/Commodore/Vic-20/Vic20.cpp @@ -187,7 +187,7 @@ void Machine::add_prg(size_t length, const uint8_t *data) { _rom_address = (uint16_t)(data[0] | (data[1] << 8)); _rom_length = (uint16_t)(length - 2); - if(_rom_address >= 0x1000 && _rom_address+_rom_length < 0x2000) + if(_rom_address >= 0x1000 && _rom_address+_rom_length < 0x2000 && _should_automatically_load_media) { set_typer_for_string("RUN\n"); } @@ -203,7 +203,7 @@ void Machine::add_prg(size_t length, const uint8_t *data) void Machine::set_tape(std::shared_ptr tape) { _tape.set_tape(tape); - set_typer_for_string("LOAD\nRUN\n"); + if(_should_automatically_load_media) set_typer_for_string("LOAD\nRUN\n"); } void Machine::tape_did_change_input(Tape *tape) @@ -227,7 +227,7 @@ void Machine::set_disk(std::shared_ptr disk) // install the ROM if it was previously set install_disk_rom(); - set_typer_for_string("LOAD\"*\",8,1\nRUN\n"); + if(_should_automatically_load_media) set_typer_for_string("LOAD\"*\",8,1\nRUN\n"); } void Machine::install_disk_rom() diff --git a/Machines/Commodore/Vic-20/Vic20.hpp b/Machines/Commodore/Vic-20/Vic20.hpp index f8fec0674..bb7bea522 100644 --- a/Machines/Commodore/Vic-20/Vic20.hpp +++ b/Machines/Commodore/Vic-20/Vic20.hpp @@ -251,6 +251,7 @@ class Machine: } inline void set_use_fast_tape_hack(bool activate) { _use_fast_tape_hack = activate; } + inline void set_should_automatically_load_media(bool activate) { _should_automatically_load_media = activate; } // to satisfy CPU6502::Processor unsigned int perform_bus_operation(CPU6502::BusOperation operation, uint16_t address, uint8_t *value); @@ -304,7 +305,7 @@ class Machine: // Tape Tape _tape; - bool _use_fast_tape_hack; + bool _use_fast_tape_hack, _should_automatically_load_media; // Disk std::shared_ptr<::Commodore::C1540::Machine> _c1540; diff --git a/OSBindings/Mac/Clock Signal/Base.lproj/Vic20Document.xib b/OSBindings/Mac/Clock Signal/Base.lproj/Vic20Document.xib index 570460d9d..9cd3153db 100644 --- a/OSBindings/Mac/Clock Signal/Base.lproj/Vic20Document.xib +++ b/OSBindings/Mac/Clock Signal/Base.lproj/Vic20Document.xib @@ -1,5 +1,5 @@ - + @@ -7,6 +7,7 @@ + @@ -43,17 +44,17 @@ - + - + + @@ -72,7 +83,7 @@ - + @@ -80,14 +91,17 @@ + - + + + - + diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 82c9f2499..3c9d8b6cd 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -176,9 +176,12 @@ class MachineDocument: } // MARK: IBActions + final func prefixedUserDefaultsKey(key: String) -> String { + return "\(self.name).\(key)" + } var fastLoadingUserDefaultsKey: String { get { - return "\(self.name).fastLoading" + return prefixedUserDefaultsKey("fastLoading") } } diff --git a/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift b/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift index 3afb2fd20..71f00230d 100644 --- a/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift +++ b/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift @@ -66,4 +66,26 @@ class Vic20Document: MachineDocument { override func readFromData(data: NSData, ofType typeName: String) throws { vic20.setPRG(data) } + + @IBOutlet var loadAutomaticallyButton: NSButton! + var autoloadingUserDefaultsKey: String { + get { return prefixedUserDefaultsKey("autoload") } + } + @IBAction func setShouldLoadAutomatically(sender: NSButton!) { + let loadAutomatically = sender.state == NSOnState + vic20.shouldLoadAutomatically = loadAutomatically + self.loadAutomaticallyButton.state = loadAutomatically ? NSOnState : NSOffState + } + override func establishStoredOptions() { + super.establishStoredOptions() + + let standardUserDefaults = NSUserDefaults.standardUserDefaults() + standardUserDefaults.registerDefaults([ + autoloadingUserDefaultsKey: true + ]) + + let loadAutomatically = standardUserDefaults.boolForKey(self.autoloadingUserDefaultsKey) + vic20.shouldLoadAutomatically = loadAutomatically + self.loadAutomaticallyButton.state = loadAutomatically ? NSOnState : NSOffState + } } diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h index 90bd349ec..daaee4c06 100644 --- a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h @@ -23,5 +23,6 @@ - (BOOL)openD64AtURL:(nonnull NSURL *)URL; @property (nonatomic, assign) BOOL useFastLoadingHack; +@property (nonatomic, assign) BOOL shouldLoadAutomatically; @end diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm index f05fa6494..1ad7165f9 100644 --- a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm @@ -197,4 +197,11 @@ using namespace Commodore::Vic20; } } +- (void)setShouldLoadAutomatically:(BOOL)shouldLoadAutomatically { + @synchronized(self) { + _shouldLoadAutomatically = shouldLoadAutomatically; + _vic20.set_should_automatically_load_media(shouldLoadAutomatically ? true : false); + } +} + @end