diff --git a/Machines/Commodore/Vic-20/Vic20.cpp b/Machines/Commodore/Vic-20/Vic20.cpp index 6a44f64e0..78107cf60 100644 --- a/Machines/Commodore/Vic-20/Vic20.cpp +++ b/Machines/Commodore/Vic-20/Vic20.cpp @@ -212,6 +212,19 @@ void Machine::tape_did_change_input(Tape *tape) _keyboardVIA->set_control_line_input(KeyboardVIA::Port::A, KeyboardVIA::Line::One, tape->get_input()); } +#pragma mark - Disc + +void Machine::set_disk(std::shared_ptr disk) +{ + // construct the 1540 + _c1540.reset(new ::Commodore::C1540::Machine); + + // attach it to the serial bus + _c1540->set_serial_bus(_serialBus); + + // TODO: push the disk to the C1540 +} + #pragma mark - Typer int Machine::get_typer_delay() @@ -344,13 +357,3 @@ void Tape::process_input_pulse(Storage::Tape::Pulse pulse) } } -#pragma mark - Disc - -void Machine::set_disc() -{ - // construct the 1540 - _c1540.reset(new ::Commodore::C1540::Machine); - - // attach it to the serial bus - _c1540->set_serial_bus(_serialBus); -} diff --git a/Machines/Commodore/Vic-20/Vic20.hpp b/Machines/Commodore/Vic-20/Vic20.hpp index fcbac0fbf..279fa5249 100644 --- a/Machines/Commodore/Vic-20/Vic20.hpp +++ b/Machines/Commodore/Vic-20/Vic20.hpp @@ -9,16 +9,19 @@ #ifndef Vic20_hpp #define Vic20_hpp -#include "../../../Processors/6502/CPU6502.hpp" -#include "../../../Storage/Tape/Tape.hpp" -#include "../../../Components/6560/6560.hpp" -#include "../../../Components/6522/6522.hpp" -#include "../1540/C1540.hpp" -#include "../SerialBus.hpp" - #include "../../CRTMachine.hpp" #include "../../Typer.hpp" +#include "../../../Processors/6502/CPU6502.hpp" +#include "../../../Components/6560/6560.hpp" +#include "../../../Components/6522/6522.hpp" + +#include "../SerialBus.hpp" +#include "../1540/C1540.hpp" + +#include "../../../Storage/Tape/Tape.hpp" +#include "../../../Storage/Disk/Disk.hpp" + namespace Commodore { namespace Vic20 { @@ -237,7 +240,7 @@ class Machine: void set_rom(ROMSlot slot, size_t length, const uint8_t *data); void add_prg(size_t length, const uint8_t *data); void set_tape(std::shared_ptr tape); - void set_disc(); + void set_disk(std::shared_ptr disk); void set_key_state(Key key, bool isPressed) { _keyboardVIA->set_key_state(key, isPressed); } void clear_all_keys() { _keyboardVIA->clear_all_keys(); } diff --git a/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift b/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift index e74f67274..42e9b97ed 100644 --- a/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift +++ b/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift @@ -48,15 +48,13 @@ class Vic20Document: MachineDocument { override func readFromURL(url: NSURL, ofType typeName: String) throws { if let pathExtension = url.pathExtension { switch pathExtension.lowercaseString { - case "tap": - vic20.openTAPAtURL(url) - return - default: break; + case "tap": vic20.openTAPAtURL(url) + case "g64": vic20.openG64AtURL(url) + default: + let fileWrapper = try NSFileWrapper(URL: url, options: NSFileWrapperReadingOptions(rawValue: 0)) + try self.readFromFileWrapper(fileWrapper, ofType: typeName) } } - - let fileWrapper = try NSFileWrapper(URL: url, options: NSFileWrapperReadingOptions(rawValue: 0)) - try self.readFromFileWrapper(fileWrapper, ofType: typeName) } // MARK: machine setup diff --git a/OSBindings/Mac/Clock Signal/Info.plist b/OSBindings/Mac/Clock Signal/Info.plist index ade36e2d2..a8ce924f6 100644 --- a/OSBindings/Mac/Clock Signal/Info.plist +++ b/OSBindings/Mac/Clock Signal/Info.plist @@ -80,7 +80,7 @@ prg CFBundleTypeName - Vic-20 Cartridge + Commodore Program CFBundleTypeRole Viewer LSTypeIsPackage @@ -94,9 +94,25 @@ tap CFBundleTypeName - Vic-20 Tape Image + Commodore Tape Image CFBundleTypeRole Viewer + LSTypeIsPackage + 0 + NSDocumentClass + $(PRODUCT_MODULE_NAME).Vic20Document + + + CFBundleTypeExtensions + + g64 + + CFBundleTypeName + Commodore Disk + CFBundleTypeRole + Viewer + LSTypeIsPackage + 0 NSDocumentClass $(PRODUCT_MODULE_NAME).Vic20Document diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h index 83f3c7863..ae0dfc86c 100644 --- a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.h @@ -19,6 +19,7 @@ - (void)setPRG:(nonnull NSData *)prg; - (BOOL)openTAPAtURL:(nonnull NSURL *)URL; +- (BOOL)openG64AtURL:(nonnull NSURL *)URL; @property (nonatomic, assign) BOOL useFastLoadingHack; diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm index 7d7cffc8e..67ec6ace9 100644 --- a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm @@ -10,6 +10,7 @@ #include "Vic20.hpp" #include "CommodoreTAP.hpp" +#include "G64.hpp" using namespace Commodore::Vic20; @@ -56,6 +57,17 @@ using namespace Commodore::Vic20; } } +- (BOOL)openG64AtURL:(NSURL *)URL { + @synchronized(self) { + try { + std::shared_ptr disk(new Storage::G64([URL fileSystemRepresentation])); + _vic20.set_disk(disk); + return YES; + } catch(int exception) { + return NO; + } + } +} - (void)setPRG:(nonnull NSData *)prg { @synchronized(self) {