mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-08 03:54:27 +00:00
Merge pull request #52 from TomHarte/SingleDocument
Collapses Mac binding down to a single NSDocument
This commit is contained in:
commit
6ecd8aac61
@ -23,7 +23,6 @@
|
|||||||
4B2A53A21D117D36003C6002 /* CSElectron.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A539C1D117D36003C6002 /* CSElectron.mm */; };
|
4B2A53A21D117D36003C6002 /* CSElectron.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A539C1D117D36003C6002 /* CSElectron.mm */; };
|
||||||
4B2A53A31D117D36003C6002 /* CSVic20.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A539E1D117D36003C6002 /* CSVic20.mm */; };
|
4B2A53A31D117D36003C6002 /* CSVic20.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A539E1D117D36003C6002 /* CSVic20.mm */; };
|
||||||
4B2BFC5F1D613E0200BA3AA9 /* TapePRG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2BFC5D1D613E0200BA3AA9 /* TapePRG.cpp */; };
|
4B2BFC5F1D613E0200BA3AA9 /* TapePRG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2BFC5D1D613E0200BA3AA9 /* TapePRG.cpp */; };
|
||||||
4B2E2D951C399D1200138695 /* ElectronDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B2E2D931C399D1200138695 /* ElectronDocument.xib */; };
|
|
||||||
4B2E2D9A1C3A06EC00138695 /* Atari2600.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E2D971C3A06EC00138695 /* Atari2600.cpp */; };
|
4B2E2D9A1C3A06EC00138695 /* Atari2600.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E2D971C3A06EC00138695 /* Atari2600.cpp */; };
|
||||||
4B2E2D9D1C3A070400138695 /* Electron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E2D9B1C3A070400138695 /* Electron.cpp */; };
|
4B2E2D9D1C3A070400138695 /* Electron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E2D9B1C3A070400138695 /* Electron.cpp */; };
|
||||||
4B30512D1D989E2200B4FED8 /* Drive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B30512B1D989E2200B4FED8 /* Drive.cpp */; };
|
4B30512D1D989E2200B4FED8 /* Drive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B30512B1D989E2200B4FED8 /* Drive.cpp */; };
|
||||||
@ -38,8 +37,6 @@
|
|||||||
4B4DC8211D2C2425003C5BF8 /* Vic20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC81F1D2C2425003C5BF8 /* Vic20.cpp */; };
|
4B4DC8211D2C2425003C5BF8 /* Vic20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC81F1D2C2425003C5BF8 /* Vic20.cpp */; };
|
||||||
4B4DC8281D2C2470003C5BF8 /* C1540.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC8261D2C2470003C5BF8 /* C1540.cpp */; };
|
4B4DC8281D2C2470003C5BF8 /* C1540.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC8261D2C2470003C5BF8 /* C1540.cpp */; };
|
||||||
4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC8291D2C27A4003C5BF8 /* SerialBus.cpp */; };
|
4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC8291D2C27A4003C5BF8 /* SerialBus.cpp */; };
|
||||||
4B55CE581C3B7D360093A61B /* Atari2600Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B55CE561C3B7D360093A61B /* Atari2600Document.swift */; };
|
|
||||||
4B55CE591C3B7D360093A61B /* ElectronDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B55CE571C3B7D360093A61B /* ElectronDocument.swift */; };
|
|
||||||
4B55CE5D1C3B7D6F0093A61B /* CSOpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B55CE5C1C3B7D6F0093A61B /* CSOpenGLView.m */; };
|
4B55CE5D1C3B7D6F0093A61B /* CSOpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B55CE5C1C3B7D6F0093A61B /* CSOpenGLView.m */; };
|
||||||
4B55CE5F1C3B7D960093A61B /* MachineDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B55CE5E1C3B7D960093A61B /* MachineDocument.swift */; };
|
4B55CE5F1C3B7D960093A61B /* MachineDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B55CE5E1C3B7D960093A61B /* MachineDocument.swift */; };
|
||||||
4B643F3A1D77AD1900D431D6 /* CSStaticAnalyser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B643F391D77AD1900D431D6 /* CSStaticAnalyser.mm */; };
|
4B643F3A1D77AD1900D431D6 /* CSStaticAnalyser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B643F391D77AD1900D431D6 /* CSStaticAnalyser.mm */; };
|
||||||
@ -48,10 +45,17 @@
|
|||||||
4B69FB441C4D941400B5F0AA /* TapeUEF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B69FB421C4D941400B5F0AA /* TapeUEF.cpp */; };
|
4B69FB441C4D941400B5F0AA /* TapeUEF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B69FB421C4D941400B5F0AA /* TapeUEF.cpp */; };
|
||||||
4B69FB461C4D950F00B5F0AA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B69FB451C4D950F00B5F0AA /* libz.tbd */; };
|
4B69FB461C4D950F00B5F0AA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B69FB451C4D950F00B5F0AA /* libz.tbd */; };
|
||||||
4B6C73BD1D387AE500AFCFCA /* DiskController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */; };
|
4B6C73BD1D387AE500AFCFCA /* DiskController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */; };
|
||||||
4B73C71A1D036BD90074D992 /* Vic20Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B73C7191D036BD90074D992 /* Vic20Document.swift */; };
|
4B8FE21B1DA19D5F0090D3CE /* Atari2600Options.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B8FE2131DA19D5F0090D3CE /* Atari2600Options.xib */; };
|
||||||
4B73C71D1D036C030074D992 /* Vic20Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B73C71B1D036C030074D992 /* Vic20Document.xib */; };
|
4B8FE21C1DA19D5F0090D3CE /* MachineDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B8FE2151DA19D5F0090D3CE /* MachineDocument.xib */; };
|
||||||
|
4B8FE21D1DA19D5F0090D3CE /* ElectronOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B8FE2171DA19D5F0090D3CE /* ElectronOptions.xib */; };
|
||||||
|
4B8FE21E1DA19D5F0090D3CE /* Vic20Options.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B8FE2191DA19D5F0090D3CE /* Vic20Options.xib */; };
|
||||||
|
4B8FE2201DA19D7C0090D3CE /* Atari2600OptionsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FE21F1DA19D7C0090D3CE /* Atari2600OptionsPanel.swift */; };
|
||||||
|
4B8FE2221DA19FB20090D3CE /* MachinePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FE2211DA19FB20090D3CE /* MachinePanel.swift */; };
|
||||||
|
4B8FE2271DA1DE2D0090D3CE /* NSBundle+DataResource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FE2261DA1DE2D0090D3CE /* NSBundle+DataResource.m */; };
|
||||||
|
4B8FE2291DA1EDDF0090D3CE /* ElectronOptionsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FE2281DA1EDDF0090D3CE /* ElectronOptionsPanel.swift */; };
|
||||||
4B92EACA1B7C112B00246143 /* 6502TimingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */; };
|
4B92EACA1B7C112B00246143 /* 6502TimingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */; };
|
||||||
4B96F7221D75119A0058BB2D /* Tape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B96F7201D75119A0058BB2D /* Tape.cpp */; };
|
4B96F7221D75119A0058BB2D /* Tape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B96F7201D75119A0058BB2D /* Tape.cpp */; };
|
||||||
|
4B9CCDA11DA279CA0098B625 /* Vic20OptionsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9CCDA01DA279CA0098B625 /* Vic20OptionsPanel.swift */; };
|
||||||
4BA22B071D8817CE0008C640 /* Disk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA22B051D8817CE0008C640 /* Disk.cpp */; };
|
4BA22B071D8817CE0008C640 /* Disk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA22B051D8817CE0008C640 /* Disk.cpp */; };
|
||||||
4BA61EB01D91515900B3C876 /* NSData+StdVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BA61EAF1D91515900B3C876 /* NSData+StdVector.mm */; };
|
4BA61EB01D91515900B3C876 /* NSData+StdVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BA61EAF1D91515900B3C876 /* NSData+StdVector.mm */; };
|
||||||
4BA799951D8B656E0045123D /* StaticAnalyser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA799931D8B656E0045123D /* StaticAnalyser.cpp */; };
|
4BA799951D8B656E0045123D /* StaticAnalyser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA799931D8B656E0045123D /* StaticAnalyser.cpp */; };
|
||||||
@ -328,7 +332,6 @@
|
|||||||
4BB697CB1D4B6D3E00248BDF /* TimedEventLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB697C91D4B6D3E00248BDF /* TimedEventLoop.cpp */; };
|
4BB697CB1D4B6D3E00248BDF /* TimedEventLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB697C91D4B6D3E00248BDF /* TimedEventLoop.cpp */; };
|
||||||
4BB697CE1D4BA44400248BDF /* CommodoreGCR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB697CC1D4BA44400248BDF /* CommodoreGCR.cpp */; };
|
4BB697CE1D4BA44400248BDF /* CommodoreGCR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB697CC1D4BA44400248BDF /* CommodoreGCR.cpp */; };
|
||||||
4BB73EA21B587A5100552FC2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB73EA11B587A5100552FC2 /* AppDelegate.swift */; };
|
4BB73EA21B587A5100552FC2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB73EA11B587A5100552FC2 /* AppDelegate.swift */; };
|
||||||
4BB73EA71B587A5100552FC2 /* Atari2600Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BB73EA51B587A5100552FC2 /* Atari2600Document.xib */; };
|
|
||||||
4BB73EA91B587A5100552FC2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4BB73EA81B587A5100552FC2 /* Assets.xcassets */; };
|
4BB73EA91B587A5100552FC2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4BB73EA81B587A5100552FC2 /* Assets.xcassets */; };
|
||||||
4BB73EAC1B587A5100552FC2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BB73EAA1B587A5100552FC2 /* MainMenu.xib */; };
|
4BB73EAC1B587A5100552FC2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BB73EAA1B587A5100552FC2 /* MainMenu.xib */; };
|
||||||
4BB73EB71B587A5100552FC2 /* AllSuiteATests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB73EB61B587A5100552FC2 /* AllSuiteATests.swift */; };
|
4BB73EB71B587A5100552FC2 /* AllSuiteATests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB73EB61B587A5100552FC2 /* AllSuiteATests.swift */; };
|
||||||
@ -420,7 +423,6 @@
|
|||||||
4B2A539E1D117D36003C6002 /* CSVic20.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CSVic20.mm; sourceTree = "<group>"; };
|
4B2A539E1D117D36003C6002 /* CSVic20.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CSVic20.mm; sourceTree = "<group>"; };
|
||||||
4B2BFC5D1D613E0200BA3AA9 /* TapePRG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TapePRG.cpp; sourceTree = "<group>"; };
|
4B2BFC5D1D613E0200BA3AA9 /* TapePRG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TapePRG.cpp; sourceTree = "<group>"; };
|
||||||
4B2BFC5E1D613E0200BA3AA9 /* TapePRG.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TapePRG.hpp; sourceTree = "<group>"; };
|
4B2BFC5E1D613E0200BA3AA9 /* TapePRG.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TapePRG.hpp; sourceTree = "<group>"; };
|
||||||
4B2E2D941C399D1200138695 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ElectronDocument.xib; sourceTree = "<group>"; };
|
|
||||||
4B2E2D971C3A06EC00138695 /* Atari2600.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Atari2600.cpp; sourceTree = "<group>"; };
|
4B2E2D971C3A06EC00138695 /* Atari2600.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Atari2600.cpp; sourceTree = "<group>"; };
|
||||||
4B2E2D981C3A06EC00138695 /* Atari2600.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Atari2600.hpp; sourceTree = "<group>"; };
|
4B2E2D981C3A06EC00138695 /* Atari2600.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Atari2600.hpp; sourceTree = "<group>"; };
|
||||||
4B2E2D991C3A06EC00138695 /* Atari2600Inputs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Atari2600Inputs.h; sourceTree = "<group>"; };
|
4B2E2D991C3A06EC00138695 /* Atari2600Inputs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Atari2600Inputs.h; sourceTree = "<group>"; };
|
||||||
@ -450,8 +452,6 @@
|
|||||||
4B4DC8271D2C2470003C5BF8 /* C1540.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = C1540.hpp; sourceTree = "<group>"; };
|
4B4DC8271D2C2470003C5BF8 /* C1540.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = C1540.hpp; sourceTree = "<group>"; };
|
||||||
4B4DC8291D2C27A4003C5BF8 /* SerialBus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerialBus.cpp; sourceTree = "<group>"; };
|
4B4DC8291D2C27A4003C5BF8 /* SerialBus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerialBus.cpp; sourceTree = "<group>"; };
|
||||||
4B4DC82A1D2C27A4003C5BF8 /* SerialBus.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SerialBus.hpp; sourceTree = "<group>"; };
|
4B4DC82A1D2C27A4003C5BF8 /* SerialBus.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SerialBus.hpp; sourceTree = "<group>"; };
|
||||||
4B55CE561C3B7D360093A61B /* Atari2600Document.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atari2600Document.swift; sourceTree = "<group>"; };
|
|
||||||
4B55CE571C3B7D360093A61B /* ElectronDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ElectronDocument.swift; sourceTree = "<group>"; };
|
|
||||||
4B55CE5B1C3B7D6F0093A61B /* CSOpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSOpenGLView.h; sourceTree = "<group>"; };
|
4B55CE5B1C3B7D6F0093A61B /* CSOpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSOpenGLView.h; sourceTree = "<group>"; };
|
||||||
4B55CE5C1C3B7D6F0093A61B /* CSOpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSOpenGLView.m; sourceTree = "<group>"; };
|
4B55CE5C1C3B7D6F0093A61B /* CSOpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSOpenGLView.m; sourceTree = "<group>"; };
|
||||||
4B55CE5E1C3B7D960093A61B /* MachineDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MachineDocument.swift; sourceTree = "<group>"; };
|
4B55CE5E1C3B7D960093A61B /* MachineDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MachineDocument.swift; sourceTree = "<group>"; };
|
||||||
@ -466,11 +466,20 @@
|
|||||||
4B69FB451C4D950F00B5F0AA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
4B69FB451C4D950F00B5F0AA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||||
4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DiskController.cpp; sourceTree = "<group>"; };
|
4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DiskController.cpp; sourceTree = "<group>"; };
|
||||||
4B6C73BC1D387AE500AFCFCA /* DiskController.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DiskController.hpp; sourceTree = "<group>"; };
|
4B6C73BC1D387AE500AFCFCA /* DiskController.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DiskController.hpp; sourceTree = "<group>"; };
|
||||||
4B73C7191D036BD90074D992 /* Vic20Document.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Vic20Document.swift; sourceTree = "<group>"; };
|
4B8FE2141DA19D5F0090D3CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/Atari2600Options.xib"; sourceTree = SOURCE_ROOT; };
|
||||||
4B73C71C1D036C030074D992 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/Vic20Document.xib"; sourceTree = SOURCE_ROOT; };
|
4B8FE2161DA19D5F0090D3CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/MachineDocument.xib"; sourceTree = SOURCE_ROOT; };
|
||||||
|
4B8FE2181DA19D5F0090D3CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/ElectronOptions.xib"; sourceTree = SOURCE_ROOT; };
|
||||||
|
4B8FE21A1DA19D5F0090D3CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/Vic20Options.xib"; sourceTree = SOURCE_ROOT; };
|
||||||
|
4B8FE21F1DA19D7C0090D3CE /* Atari2600OptionsPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atari2600OptionsPanel.swift; sourceTree = "<group>"; };
|
||||||
|
4B8FE2211DA19FB20090D3CE /* MachinePanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MachinePanel.swift; sourceTree = "<group>"; };
|
||||||
|
4B8FE2251DA1DE2D0090D3CE /* NSBundle+DataResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+DataResource.h"; sourceTree = "<group>"; };
|
||||||
|
4B8FE2261DA1DE2D0090D3CE /* NSBundle+DataResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+DataResource.m"; sourceTree = "<group>"; };
|
||||||
|
4B8FE2281DA1EDDF0090D3CE /* ElectronOptionsPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ElectronOptionsPanel.swift; sourceTree = "<group>"; };
|
||||||
4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 6502TimingTests.swift; sourceTree = "<group>"; };
|
4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 6502TimingTests.swift; sourceTree = "<group>"; };
|
||||||
4B96F7201D75119A0058BB2D /* Tape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tape.cpp; path = ../../StaticAnalyser/Acorn/Tape.cpp; sourceTree = "<group>"; };
|
4B96F7201D75119A0058BB2D /* Tape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tape.cpp; path = ../../StaticAnalyser/Acorn/Tape.cpp; sourceTree = "<group>"; };
|
||||||
4B96F7211D75119A0058BB2D /* Tape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Tape.hpp; path = ../../StaticAnalyser/Acorn/Tape.hpp; sourceTree = "<group>"; };
|
4B96F7211D75119A0058BB2D /* Tape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Tape.hpp; path = ../../StaticAnalyser/Acorn/Tape.hpp; sourceTree = "<group>"; };
|
||||||
|
4B9CCDA01DA279CA0098B625 /* Vic20OptionsPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Vic20OptionsPanel.swift; sourceTree = "<group>"; };
|
||||||
|
4B9CCDA21DA27C3F0098B625 /* CSJoystickMachine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSJoystickMachine.h; sourceTree = "<group>"; };
|
||||||
4BA22B051D8817CE0008C640 /* Disk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Disk.cpp; path = ../../StaticAnalyser/Commodore/Disk.cpp; sourceTree = "<group>"; };
|
4BA22B051D8817CE0008C640 /* Disk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Disk.cpp; path = ../../StaticAnalyser/Commodore/Disk.cpp; sourceTree = "<group>"; };
|
||||||
4BA22B061D8817CE0008C640 /* Disk.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Disk.hpp; path = ../../StaticAnalyser/Commodore/Disk.hpp; sourceTree = "<group>"; };
|
4BA22B061D8817CE0008C640 /* Disk.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Disk.hpp; path = ../../StaticAnalyser/Commodore/Disk.hpp; sourceTree = "<group>"; };
|
||||||
4BA61EAE1D91515900B3C876 /* NSData+StdVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+StdVector.h"; sourceTree = "<group>"; };
|
4BA61EAE1D91515900B3C876 /* NSData+StdVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+StdVector.h"; sourceTree = "<group>"; };
|
||||||
@ -759,7 +768,6 @@
|
|||||||
4BB697CD1D4BA44400248BDF /* CommodoreGCR.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CommodoreGCR.hpp; path = Encodings/CommodoreGCR.hpp; sourceTree = "<group>"; };
|
4BB697CD1D4BA44400248BDF /* CommodoreGCR.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CommodoreGCR.hpp; path = Encodings/CommodoreGCR.hpp; sourceTree = "<group>"; };
|
||||||
4BB73E9E1B587A5100552FC2 /* Clock Signal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Clock Signal.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
4BB73E9E1B587A5100552FC2 /* Clock Signal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Clock Signal.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
4BB73EA11B587A5100552FC2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
4BB73EA11B587A5100552FC2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
4BB73EA61B587A5100552FC2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Atari2600Document.xib; sourceTree = "<group>"; };
|
|
||||||
4BB73EA81B587A5100552FC2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
4BB73EA81B587A5100552FC2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
4BB73EAB1B587A5100552FC2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
4BB73EAB1B587A5100552FC2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
4BB73EAD1B587A5100552FC2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
4BB73EAD1B587A5100552FC2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
@ -929,16 +937,19 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
4BBC34241D2208B100FFC9DF /* CSFastLoading.h */,
|
4BBC34241D2208B100FFC9DF /* CSFastLoading.h */,
|
||||||
|
4B9CCDA21DA27C3F0098B625 /* CSJoystickMachine.h */,
|
||||||
4B2A53931D117D36003C6002 /* CSKeyboardMachine.h */,
|
4B2A53931D117D36003C6002 /* CSKeyboardMachine.h */,
|
||||||
4B2A53951D117D36003C6002 /* CSMachine.h */,
|
4B2A53951D117D36003C6002 /* CSMachine.h */,
|
||||||
4B2A53941D117D36003C6002 /* CSMachine+Subclassing.h */,
|
4B2A53941D117D36003C6002 /* CSMachine+Subclassing.h */,
|
||||||
4B643F3C1D77AE5C00D431D6 /* CSMachine+Target.h */,
|
4B643F3C1D77AE5C00D431D6 /* CSMachine+Target.h */,
|
||||||
4B2A53971D117D36003C6002 /* KeyCodes.h */,
|
4B2A53971D117D36003C6002 /* KeyCodes.h */,
|
||||||
|
4B8FE2251DA1DE2D0090D3CE /* NSBundle+DataResource.h */,
|
||||||
|
4BA61EAE1D91515900B3C876 /* NSData+StdVector.h */,
|
||||||
|
4B8FE2261DA1DE2D0090D3CE /* NSBundle+DataResource.m */,
|
||||||
4B2A53961D117D36003C6002 /* CSMachine.mm */,
|
4B2A53961D117D36003C6002 /* CSMachine.mm */,
|
||||||
|
4BA61EAF1D91515900B3C876 /* NSData+StdVector.mm */,
|
||||||
4B643F3B1D77AD6D00D431D6 /* StaticAnalyser */,
|
4B643F3B1D77AD6D00D431D6 /* StaticAnalyser */,
|
||||||
4B2A53981D117D36003C6002 /* Wrappers */,
|
4B2A53981D117D36003C6002 /* Wrappers */,
|
||||||
4BA61EAE1D91515900B3C876 /* NSData+StdVector.h */,
|
|
||||||
4BA61EAF1D91515900B3C876 /* NSData+StdVector.mm */,
|
|
||||||
);
|
);
|
||||||
path = Machine;
|
path = Machine;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1037,13 +1048,15 @@
|
|||||||
4B55CE551C3B7D360093A61B /* Documents */ = {
|
4B55CE551C3B7D360093A61B /* Documents */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
4B55CE561C3B7D360093A61B /* Atari2600Document.swift */,
|
4B8FE21F1DA19D7C0090D3CE /* Atari2600OptionsPanel.swift */,
|
||||||
4BB73EA51B587A5100552FC2 /* Atari2600Document.xib */,
|
4B8FE2281DA1EDDF0090D3CE /* ElectronOptionsPanel.swift */,
|
||||||
4B55CE571C3B7D360093A61B /* ElectronDocument.swift */,
|
|
||||||
4B2E2D931C399D1200138695 /* ElectronDocument.xib */,
|
|
||||||
4B55CE5E1C3B7D960093A61B /* MachineDocument.swift */,
|
4B55CE5E1C3B7D960093A61B /* MachineDocument.swift */,
|
||||||
4B73C7191D036BD90074D992 /* Vic20Document.swift */,
|
4B8FE2211DA19FB20090D3CE /* MachinePanel.swift */,
|
||||||
4B73C71B1D036C030074D992 /* Vic20Document.xib */,
|
4B9CCDA01DA279CA0098B625 /* Vic20OptionsPanel.swift */,
|
||||||
|
4B8FE2131DA19D5F0090D3CE /* Atari2600Options.xib */,
|
||||||
|
4B8FE2171DA19D5F0090D3CE /* ElectronOptions.xib */,
|
||||||
|
4B8FE2151DA19D5F0090D3CE /* MachineDocument.xib */,
|
||||||
|
4B8FE2191DA19D5F0090D3CE /* Vic20Options.xib */,
|
||||||
);
|
);
|
||||||
path = Documents;
|
path = Documents;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1825,11 +1838,12 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
4B2E2D951C399D1200138695 /* ElectronDocument.xib in Resources */,
|
|
||||||
4BB73EA91B587A5100552FC2 /* Assets.xcassets in Resources */,
|
4BB73EA91B587A5100552FC2 /* Assets.xcassets in Resources */,
|
||||||
4BB73EA71B587A5100552FC2 /* Atari2600Document.xib in Resources */,
|
4B8FE21B1DA19D5F0090D3CE /* Atari2600Options.xib in Resources */,
|
||||||
4B73C71D1D036C030074D992 /* Vic20Document.xib in Resources */,
|
4B8FE21C1DA19D5F0090D3CE /* MachineDocument.xib in Resources */,
|
||||||
|
4B8FE21E1DA19D5F0090D3CE /* Vic20Options.xib in Resources */,
|
||||||
4BB73EAC1B587A5100552FC2 /* MainMenu.xib in Resources */,
|
4BB73EAC1B587A5100552FC2 /* MainMenu.xib in Resources */,
|
||||||
|
4B8FE21D1DA19D5F0090D3CE /* ElectronOptions.xib in Resources */,
|
||||||
4BC9DF451D044FCA00F44158 /* ROMImages in Resources */,
|
4BC9DF451D044FCA00F44158 /* ROMImages in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -2133,16 +2147,14 @@
|
|||||||
4B643F3F1D77B88000D431D6 /* DocumentController.swift in Sources */,
|
4B643F3F1D77B88000D431D6 /* DocumentController.swift in Sources */,
|
||||||
4BA799951D8B656E0045123D /* StaticAnalyser.cpp in Sources */,
|
4BA799951D8B656E0045123D /* StaticAnalyser.cpp in Sources */,
|
||||||
4BF829601D8F3C87001BAE39 /* CRC.cpp in Sources */,
|
4BF829601D8F3C87001BAE39 /* CRC.cpp in Sources */,
|
||||||
4B55CE591C3B7D360093A61B /* ElectronDocument.swift in Sources */,
|
|
||||||
4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */,
|
4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */,
|
||||||
4BC3B74F1CD194CC00F86E85 /* Shader.cpp in Sources */,
|
4BC3B74F1CD194CC00F86E85 /* Shader.cpp in Sources */,
|
||||||
4B55CE581C3B7D360093A61B /* Atari2600Document.swift in Sources */,
|
4B8FE2221DA19FB20090D3CE /* MachinePanel.swift in Sources */,
|
||||||
4BBB14311CD2CECE00BDB55C /* IntermediateShader.cpp in Sources */,
|
4BBB14311CD2CECE00BDB55C /* IntermediateShader.cpp in Sources */,
|
||||||
4BD5F1951D13528900631CD1 /* CSBestEffortUpdater.m in Sources */,
|
4BD5F1951D13528900631CD1 /* CSBestEffortUpdater.m in Sources */,
|
||||||
4B96F7221D75119A0058BB2D /* Tape.cpp in Sources */,
|
4B96F7221D75119A0058BB2D /* Tape.cpp in Sources */,
|
||||||
4B0BE4281D3481E700D5256B /* DigitalPhaseLockedLoop.cpp in Sources */,
|
4B0BE4281D3481E700D5256B /* DigitalPhaseLockedLoop.cpp in Sources */,
|
||||||
4BD69F941D98760000243FE1 /* AcornADF.cpp in Sources */,
|
4BD69F941D98760000243FE1 /* AcornADF.cpp in Sources */,
|
||||||
4B73C71A1D036BD90074D992 /* Vic20Document.swift in Sources */,
|
|
||||||
4BBF99181C8FBA6F0075DAFB /* TextureTarget.cpp in Sources */,
|
4BBF99181C8FBA6F0075DAFB /* TextureTarget.cpp in Sources */,
|
||||||
4BC76E691C98E31700E6EF73 /* FIRFilter.cpp in Sources */,
|
4BC76E691C98E31700E6EF73 /* FIRFilter.cpp in Sources */,
|
||||||
4B55CE5F1C3B7D960093A61B /* MachineDocument.swift in Sources */,
|
4B55CE5F1C3B7D960093A61B /* MachineDocument.swift in Sources */,
|
||||||
@ -2168,12 +2180,15 @@
|
|||||||
4B2E2D9D1C3A070400138695 /* Electron.cpp in Sources */,
|
4B2E2D9D1C3A070400138695 /* Electron.cpp in Sources */,
|
||||||
4BAB62B81D3302CA00DF5BA0 /* PCMTrack.cpp in Sources */,
|
4BAB62B81D3302CA00DF5BA0 /* PCMTrack.cpp in Sources */,
|
||||||
4B69FB3D1C4D908A00B5F0AA /* Tape.cpp in Sources */,
|
4B69FB3D1C4D908A00B5F0AA /* Tape.cpp in Sources */,
|
||||||
|
4B8FE2291DA1EDDF0090D3CE /* ElectronOptionsPanel.swift in Sources */,
|
||||||
4B55CE5D1C3B7D6F0093A61B /* CSOpenGLView.m in Sources */,
|
4B55CE5D1C3B7D6F0093A61B /* CSOpenGLView.m in Sources */,
|
||||||
4BB697CB1D4B6D3E00248BDF /* TimedEventLoop.cpp in Sources */,
|
4BB697CB1D4B6D3E00248BDF /* TimedEventLoop.cpp in Sources */,
|
||||||
4BF1354C1D6D2C300054B2EA /* StaticAnalyser.cpp in Sources */,
|
4BF1354C1D6D2C300054B2EA /* StaticAnalyser.cpp in Sources */,
|
||||||
4B2A53A31D117D36003C6002 /* CSVic20.mm in Sources */,
|
4B2A53A31D117D36003C6002 /* CSVic20.mm in Sources */,
|
||||||
4B2A53A21D117D36003C6002 /* CSElectron.mm in Sources */,
|
4B2A53A21D117D36003C6002 /* CSElectron.mm in Sources */,
|
||||||
|
4B8FE2201DA19D7C0090D3CE /* Atari2600OptionsPanel.swift in Sources */,
|
||||||
4B2E2D9A1C3A06EC00138695 /* Atari2600.cpp in Sources */,
|
4B2E2D9A1C3A06EC00138695 /* Atari2600.cpp in Sources */,
|
||||||
|
4B9CCDA11DA279CA0098B625 /* Vic20OptionsPanel.swift in Sources */,
|
||||||
4B3051301D98ACC600B4FED8 /* Plus3.cpp in Sources */,
|
4B3051301D98ACC600B4FED8 /* Plus3.cpp in Sources */,
|
||||||
4B30512D1D989E2200B4FED8 /* Drive.cpp in Sources */,
|
4B30512D1D989E2200B4FED8 /* Drive.cpp in Sources */,
|
||||||
4BCA6CC81D9DD9F000C2D7B2 /* CommodoreROM.cpp in Sources */,
|
4BCA6CC81D9DD9F000C2D7B2 /* CommodoreROM.cpp in Sources */,
|
||||||
@ -2183,6 +2198,7 @@
|
|||||||
4B14145B1B58879D00E04248 /* CPU6502.cpp in Sources */,
|
4B14145B1B58879D00E04248 /* CPU6502.cpp in Sources */,
|
||||||
4BEE0A6F1D72496600532C7B /* Cartridge.cpp in Sources */,
|
4BEE0A6F1D72496600532C7B /* Cartridge.cpp in Sources */,
|
||||||
4BEE0A701D72496600532C7B /* PRG.cpp in Sources */,
|
4BEE0A701D72496600532C7B /* PRG.cpp in Sources */,
|
||||||
|
4B8FE2271DA1DE2D0090D3CE /* NSBundle+DataResource.m in Sources */,
|
||||||
4B2A53A01D117D36003C6002 /* CSMachine.mm in Sources */,
|
4B2A53A01D117D36003C6002 /* CSMachine.mm in Sources */,
|
||||||
4BC91B831D1F160E00884B76 /* CommodoreTAP.cpp in Sources */,
|
4BC91B831D1F160E00884B76 /* CommodoreTAP.cpp in Sources */,
|
||||||
4B2A539F1D117D36003C6002 /* CSAudioQueue.m in Sources */,
|
4B2A539F1D117D36003C6002 /* CSAudioQueue.m in Sources */,
|
||||||
@ -2238,30 +2254,36 @@
|
|||||||
/* End PBXTargetDependency section */
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
/* Begin PBXVariantGroup section */
|
||||||
4B2E2D931C399D1200138695 /* ElectronDocument.xib */ = {
|
4B8FE2131DA19D5F0090D3CE /* Atari2600Options.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
4B2E2D941C399D1200138695 /* Base */,
|
4B8FE2141DA19D5F0090D3CE /* Base */,
|
||||||
);
|
);
|
||||||
name = ElectronDocument.xib;
|
name = Atari2600Options.xib;
|
||||||
path = ..;
|
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
4B73C71B1D036C030074D992 /* Vic20Document.xib */ = {
|
4B8FE2151DA19D5F0090D3CE /* MachineDocument.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
4B73C71C1D036C030074D992 /* Base */,
|
4B8FE2161DA19D5F0090D3CE /* Base */,
|
||||||
);
|
);
|
||||||
name = Vic20Document.xib;
|
name = MachineDocument.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
4BB73EA51B587A5100552FC2 /* Atari2600Document.xib */ = {
|
4B8FE2171DA19D5F0090D3CE /* ElectronOptions.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
4BB73EA61B587A5100552FC2 /* Base */,
|
4B8FE2181DA19D5F0090D3CE /* Base */,
|
||||||
);
|
);
|
||||||
name = Atari2600Document.xib;
|
name = ElectronOptions.xib;
|
||||||
path = ..;
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
4B8FE2191DA19D5F0090D3CE /* Vic20Options.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
4B8FE21A1DA19D5F0090D3CE /* Base */,
|
||||||
|
);
|
||||||
|
name = Vic20Options.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
4BB73EAA1B587A5100552FC2 /* MainMenu.xib */ = {
|
4BB73EAA1B587A5100552FC2 /* MainMenu.xib */ = {
|
||||||
|
@ -1,51 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="Atari2600Document" customModule="Clock_Signal" customModuleProvider="target">
|
<customObject id="-2" userLabel="File's Owner" customClass="MachineDocument" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="colourButton" destination="3qw-C1-NYW" id="WAL-Is-Ux6"/>
|
|
||||||
<outlet property="leftPlayerDifficultyButton" destination="Xbc-cw-Sc2" id="1vg-wY-j1w"/>
|
|
||||||
<outlet property="openGLView" destination="DEG-fq-cjd" id="Gxs-2u-n7B"/>
|
|
||||||
<outlet property="optionsPanel" destination="gsl-7V-TTU" id="BEE-05-h0B"/>
|
<outlet property="optionsPanel" destination="gsl-7V-TTU" id="BEE-05-h0B"/>
|
||||||
<outlet property="resetButton" destination="rQO-uD-fwn" id="DHc-IK-zBm"/>
|
|
||||||
<outlet property="rightPlayerDifficultyButton" destination="kPV-Tm-TTc" id="N2H-KG-R8Z"/>
|
|
||||||
<outlet property="selectButton" destination="nt7-8K-xY9" id="bu6-U1-AZb"/>
|
|
||||||
<outlet property="window" destination="xOd-HO-29H" id="JIz-fz-R2o"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="xOd-HO-29H" userLabel="Window">
|
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="gsl-7V-TTU" customClass="Atari2600OptionsPanel" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
|
||||||
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
|
||||||
<rect key="contentRect" x="133" y="235" width="400" height="300"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1366" height="768"/>
|
|
||||||
<value key="minSize" type="size" width="228" height="171"/>
|
|
||||||
<view key="contentView" id="gIp-Ho-8D9">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<openGLView useAuxiliaryDepthBufferStencil="NO" allowOffline="YES" wantsBestResolutionOpenGLSurface="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSOpenGLView">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
|
|
||||||
</openGLView>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="centerX" secondItem="gIp-Ho-8D9" secondAttribute="centerX" id="ES5-nL-N3h"/>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="height" secondItem="gIp-Ho-8D9" secondAttribute="height" id="YoB-qI-LFX"/>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="centerY" secondItem="gIp-Ho-8D9" secondAttribute="centerY" id="d5Y-3a-CEI"/>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="width" secondItem="gIp-Ho-8D9" secondAttribute="width" id="mYS-bH-DST"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-x8E"/>
|
|
||||||
</connections>
|
|
||||||
<point key="canvasLocation" x="272" y="446"/>
|
|
||||||
</window>
|
|
||||||
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="gsl-7V-TTU" customClass="NSPanel">
|
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" HUD="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" HUD="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="83" y="102" width="200" height="121"/>
|
<rect key="contentRect" x="83" y="102" width="200" height="121"/>
|
||||||
@ -63,7 +29,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="optionWasPressed:" target="-2" id="XCT-S9-qhg"/>
|
<action selector="optionWasPressed:" target="gsl-7V-TTU" id="wbx-SP-OZc"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="3qw-C1-NYW">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="3qw-C1-NYW">
|
||||||
@ -73,7 +39,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="optionDidChange:" target="-2" id="jXW-nl-ePC"/>
|
<action selector="optionDidChange:" target="gsl-7V-TTU" id="s5e-66-aY1"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="Xbc-cw-Sc2">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="Xbc-cw-Sc2">
|
||||||
@ -83,7 +49,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="optionDidChange:" target="-2" id="Cwv-nj-FY1"/>
|
<action selector="optionDidChange:" target="gsl-7V-TTU" id="PbG-zF-y0W"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="kPV-Tm-TTc">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="kPV-Tm-TTc">
|
||||||
@ -93,7 +59,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="optionDidChange:" target="-2" id="L4v-Zp-Ndu"/>
|
<action selector="optionDidChange:" target="gsl-7V-TTU" id="XMR-tK-HN5"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nt7-8K-xY9">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nt7-8K-xY9">
|
||||||
@ -103,7 +69,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="optionWasPressed:" target="-2" id="pKQ-6M-BB4"/>
|
<action selector="optionWasPressed:" target="gsl-7V-TTU" id="db2-Bu-6h9"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@ -125,6 +91,13 @@
|
|||||||
<constraint firstAttribute="trailing" secondItem="3qw-C1-NYW" secondAttribute="trailing" constant="20" id="yff-e9-OBY"/>
|
<constraint firstAttribute="trailing" secondItem="3qw-C1-NYW" secondAttribute="trailing" constant="20" id="yff-e9-OBY"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="colourButton" destination="3qw-C1-NYW" id="5HZ-fq-XtP"/>
|
||||||
|
<outlet property="leftPlayerDifficultyButton" destination="Xbc-cw-Sc2" id="OfB-Hr-fDC"/>
|
||||||
|
<outlet property="resetButton" destination="rQO-uD-fwn" id="XsE-tH-9oS"/>
|
||||||
|
<outlet property="rightPlayerDifficultyButton" destination="kPV-Tm-TTc" id="BGU-Hi-AZl"/>
|
||||||
|
<outlet property="selectButton" destination="nt7-8K-xY9" id="AF6-Qk-HZN"/>
|
||||||
|
</connections>
|
||||||
<point key="canvasLocation" x="157" y="12.5"/>
|
<point key="canvasLocation" x="157" y="12.5"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
@ -1,36 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="ElectronDocument" customModule="Clock_Signal" customModuleProvider="target">
|
<customObject id="-2" userLabel="File's Owner" customClass="MachineDocument" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="displayTypeButton" destination="rh8-km-57n" id="4Np-OD-NLO"/>
|
|
||||||
<outlet property="fastLoadingButton" destination="e1J-pw-zGw" id="yck-sy-WRa"/>
|
|
||||||
<outlet property="openGLView" destination="gIp-Ho-8D9" id="GVg-Gs-Zn9"/>
|
|
||||||
<outlet property="optionsPanel" destination="ZW7-Bw-4RP" id="JpE-wG-zRR"/>
|
<outlet property="optionsPanel" destination="ZW7-Bw-4RP" id="JpE-wG-zRR"/>
|
||||||
<outlet property="window" destination="xOd-HO-29H" id="JIz-fz-R2o"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="xOd-HO-29H" userLabel="Window">
|
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="ZW7-Bw-4RP" customClass="ElectronOptionsPanel" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
|
||||||
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
|
||||||
<rect key="contentRect" x="133" y="235" width="440" height="400"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1366" height="768"/>
|
|
||||||
<value key="minSize" type="size" width="228" height="171"/>
|
|
||||||
<view key="contentView" canDrawConcurrently="YES" id="gIp-Ho-8D9" customClass="CSOpenGLView">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="440" height="400"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</view>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-x8E"/>
|
|
||||||
</connections>
|
|
||||||
</window>
|
|
||||||
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="ZW7-Bw-4RP" customClass="NSPanel">
|
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" HUD="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" HUD="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="83" y="102" width="200" height="83"/>
|
<rect key="contentRect" x="83" y="102" width="200" height="83"/>
|
||||||
@ -48,7 +29,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="setFastLoading:" target="-2" id="CTb-Dn-QiP"/>
|
<action selector="setFastLoading:" target="ZW7-Bw-4RP" id="JmG-Ks-jSh"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rh8-km-57n">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rh8-km-57n">
|
||||||
@ -64,7 +45,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="setDisplayType:" target="-2" id="kgH-SR-fI3"/>
|
<action selector="setDisplayType:" target="ZW7-Bw-4RP" id="PAH-CZ-zlk"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
</subviews>
|
</subviews>
|
||||||
@ -77,6 +58,10 @@
|
|||||||
<constraint firstAttribute="trailing" secondItem="rh8-km-57n" secondAttribute="trailing" constant="20" id="urO-Ac-aqK"/>
|
<constraint firstAttribute="trailing" secondItem="rh8-km-57n" secondAttribute="trailing" constant="20" id="urO-Ac-aqK"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="displayTypeButton" destination="rh8-km-57n" id="FB2-Zg-VKq"/>
|
||||||
|
<outlet property="fastLoadingButton" destination="e1J-pw-zGw" id="jj7-OZ-mOH"/>
|
||||||
|
</connections>
|
||||||
<point key="canvasLocation" x="129" y="46.5"/>
|
<point key="canvasLocation" x="129" y="46.5"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
42
OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib
Normal file
42
OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="Vic20Document" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
|
<connections>
|
||||||
|
<outlet property="openGLView" destination="DEG-fq-cjd" id="Gxs-2u-n7B"/>
|
||||||
|
<outlet property="window" destination="xOd-HO-29H" id="JIz-fz-R2o"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="xOd-HO-29H" userLabel="Window">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
|
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="133" y="235" width="400" height="300"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="1366" height="768"/>
|
||||||
|
<value key="minSize" type="size" width="228" height="171"/>
|
||||||
|
<view key="contentView" id="gIp-Ho-8D9">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<openGLView useAuxiliaryDepthBufferStencil="NO" allowOffline="YES" wantsBestResolutionOpenGLSurface="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSOpenGLView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
|
||||||
|
</openGLView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="DEG-fq-cjd" firstAttribute="centerX" secondItem="gIp-Ho-8D9" secondAttribute="centerX" id="ES5-nL-N3h"/>
|
||||||
|
<constraint firstItem="DEG-fq-cjd" firstAttribute="height" secondItem="gIp-Ho-8D9" secondAttribute="height" id="YoB-qI-LFX"/>
|
||||||
|
<constraint firstItem="DEG-fq-cjd" firstAttribute="centerY" secondItem="gIp-Ho-8D9" secondAttribute="centerY" id="d5Y-3a-CEI"/>
|
||||||
|
<constraint firstItem="DEG-fq-cjd" firstAttribute="width" secondItem="gIp-Ho-8D9" secondAttribute="width" id="mYS-bH-DST"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="-2" id="0bl-1N-x8E"/>
|
||||||
|
</connections>
|
||||||
|
</window>
|
||||||
|
</objects>
|
||||||
|
</document>
|
@ -1,49 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="Vic20Document" customModule="Clock_Signal" customModuleProvider="target">
|
<customObject id="-2" userLabel="File's Owner" customClass="MachineDocument" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="countryButton" destination="MlB-rE-TXV" id="BCU-M7-TC5"/>
|
|
||||||
<outlet property="fastLoadingButton" destination="sBT-cU-h7s" id="gWf-9E-D7l"/>
|
|
||||||
<outlet property="loadAutomaticallyButton" destination="lbt-Wo-6fc" id="Xsc-dz-1a6"/>
|
|
||||||
<outlet property="memorySizeButton" destination="0NP-x1-qH2" id="Zxg-RB-IUl"/>
|
|
||||||
<outlet property="openGLView" destination="DEG-fq-cjd" id="Gxs-2u-n7B"/>
|
|
||||||
<outlet property="optionsPanel" destination="ota-g7-hOL" id="zeO-di-9i3"/>
|
<outlet property="optionsPanel" destination="ota-g7-hOL" id="zeO-di-9i3"/>
|
||||||
<outlet property="window" destination="xOd-HO-29H" id="JIz-fz-R2o"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="xOd-HO-29H" userLabel="Window">
|
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="ota-g7-hOL" customClass="Vic20OptionsPanel" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
|
||||||
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
|
||||||
<rect key="contentRect" x="133" y="235" width="400" height="300"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1366" height="768"/>
|
|
||||||
<value key="minSize" type="size" width="228" height="171"/>
|
|
||||||
<view key="contentView" id="gIp-Ho-8D9">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<openGLView useAuxiliaryDepthBufferStencil="NO" allowOffline="YES" wantsBestResolutionOpenGLSurface="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSOpenGLView">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
|
|
||||||
</openGLView>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="centerX" secondItem="gIp-Ho-8D9" secondAttribute="centerX" id="ES5-nL-N3h"/>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="height" secondItem="gIp-Ho-8D9" secondAttribute="height" id="YoB-qI-LFX"/>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="centerY" secondItem="gIp-Ho-8D9" secondAttribute="centerY" id="d5Y-3a-CEI"/>
|
|
||||||
<constraint firstItem="DEG-fq-cjd" firstAttribute="width" secondItem="gIp-Ho-8D9" secondAttribute="width" id="mYS-bH-DST"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-x8E"/>
|
|
||||||
</connections>
|
|
||||||
</window>
|
|
||||||
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="ota-g7-hOL" customClass="NSPanel">
|
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" HUD="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" HUD="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="83" y="102" width="200" height="134"/>
|
<rect key="contentRect" x="83" y="102" width="200" height="134"/>
|
||||||
@ -59,7 +27,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="setFastLoading:" target="-2" id="ctR-h1-CYI"/>
|
<action selector="setFastLoading:" target="ota-g7-hOL" id="me0-h2-Ga5"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="lbt-Wo-6fc">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="lbt-Wo-6fc">
|
||||||
@ -69,7 +37,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="setShouldLoadAutomatically:" target="-2" id="Ixe-HN-4XK"/>
|
<action selector="setShouldLoadAutomatically:" target="ota-g7-hOL" id="T3i-gO-T1C"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0NP-x1-qH2">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0NP-x1-qH2">
|
||||||
@ -86,7 +54,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="setMemorySize:" target="-2" id="LSs-M5-2YZ"/>
|
<action selector="setMemorySize:" target="ota-g7-hOL" id="lep-Qi-00V"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MlB-rE-TXV" userLabel="Country Selector">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MlB-rE-TXV" userLabel="Country Selector">
|
||||||
@ -105,7 +73,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="setCountry:" target="-2" id="hi5-76-cdO"/>
|
<action selector="setCountry:" target="ota-g7-hOL" id="YIc-QB-R1S"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
</subviews>
|
</subviews>
|
||||||
@ -125,6 +93,12 @@
|
|||||||
<constraint firstAttribute="trailing" secondItem="MlB-rE-TXV" secondAttribute="trailing" constant="20" id="v18-62-uee"/>
|
<constraint firstAttribute="trailing" secondItem="MlB-rE-TXV" secondAttribute="trailing" constant="20" id="v18-62-uee"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="countryButton" destination="MlB-rE-TXV" id="Duc-AC-ZRO"/>
|
||||||
|
<outlet property="fastLoadingButton" destination="sBT-cU-h7s" id="uWa-EB-mbd"/>
|
||||||
|
<outlet property="loadAutomaticallyButton" destination="lbt-Wo-6fc" id="dv0-u8-BTc"/>
|
||||||
|
<outlet property="memorySizeButton" destination="0NP-x1-qH2" id="qYy-3f-o94"/>
|
||||||
|
</connections>
|
||||||
<point key="canvasLocation" x="-2" y="32"/>
|
<point key="canvasLocation" x="-2" y="32"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
@ -9,18 +9,4 @@
|
|||||||
import Cocoa
|
import Cocoa
|
||||||
|
|
||||||
class DocumentController: NSDocumentController {
|
class DocumentController: NSDocumentController {
|
||||||
override func makeDocument(withContentsOf url: URL, ofType typeName: String) throws -> NSDocument {
|
|
||||||
if let analyser = CSStaticAnalyser(fileAt: url) {
|
|
||||||
if let documentClass = analyser.documentClass as? NSDocument.Type {
|
|
||||||
let document = documentClass.init()
|
|
||||||
if let machineDocument = document as? MachineDocument {
|
|
||||||
machineDocument.displayName = analyser.displayName
|
|
||||||
machineDocument.configureAs(analyser)
|
|
||||||
return machineDocument
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return try super.makeDocument(withContentsOf: url, ofType: typeName)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
//
|
|
||||||
// Atari2600Document.swift
|
|
||||||
// Clock Signal
|
|
||||||
//
|
|
||||||
// Created by Thomas Harte on 16/07/2015.
|
|
||||||
// Copyright © 2015 Thomas Harte. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Cocoa
|
|
||||||
|
|
||||||
class Atari2600Document: MachineDocument {
|
|
||||||
|
|
||||||
fileprivate var atari2600 = CSAtari2600()
|
|
||||||
override var machine: CSMachine! {
|
|
||||||
get {
|
|
||||||
return atari2600
|
|
||||||
}
|
|
||||||
}
|
|
||||||
override var name: String! {
|
|
||||||
get {
|
|
||||||
return "atari2600"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: NSDocument overrides
|
|
||||||
override class func autosavesInPlace() -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
override var windowNibName: String? {
|
|
||||||
return "Atari2600Document"
|
|
||||||
}
|
|
||||||
|
|
||||||
override func windowControllerDidLoadNib(_ aController: NSWindowController) {
|
|
||||||
super.windowControllerDidLoadNib(aController)
|
|
||||||
|
|
||||||
// push whatever settings the switches have in the NIB into the emulation
|
|
||||||
pushSwitchValues()
|
|
||||||
|
|
||||||
// show the options window but ensure the OpenGL view is key
|
|
||||||
showOptions(self)
|
|
||||||
self.openGLView.window?.makeKey()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: CSOpenGLViewResponderDelegate
|
|
||||||
fileprivate func inputForKey(_ event: NSEvent) -> Atari2600DigitalInput? {
|
|
||||||
switch event.keyCode {
|
|
||||||
case 123: return Atari2600DigitalInputJoy1Left
|
|
||||||
case 126: return Atari2600DigitalInputJoy1Up
|
|
||||||
case 124: return Atari2600DigitalInputJoy1Right
|
|
||||||
case 125: return Atari2600DigitalInputJoy1Down
|
|
||||||
case 0: return Atari2600DigitalInputJoy1Fire
|
|
||||||
default:
|
|
||||||
Swift.print("\(event.keyCode)")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func keyDown(_ event: NSEvent) {
|
|
||||||
super.keyDown(event)
|
|
||||||
|
|
||||||
if let input = inputForKey(event) {
|
|
||||||
atari2600.setState(true, for: input)
|
|
||||||
}
|
|
||||||
|
|
||||||
if event.keyCode == 36 {
|
|
||||||
atari2600.setResetLineEnabled(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func keyUp(_ event: NSEvent) {
|
|
||||||
super.keyUp(event)
|
|
||||||
|
|
||||||
if let input = inputForKey(event) {
|
|
||||||
atari2600.setState(false, for: input)
|
|
||||||
}
|
|
||||||
|
|
||||||
if event.keyCode == 36 {
|
|
||||||
atari2600.setResetLineEnabled(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: Options
|
|
||||||
@IBOutlet var resetButton: NSButton!
|
|
||||||
@IBOutlet var selectButton: NSButton!
|
|
||||||
@IBOutlet var colourButton: NSButton!
|
|
||||||
@IBOutlet var leftPlayerDifficultyButton: NSButton!
|
|
||||||
@IBOutlet var rightPlayerDifficultyButton: NSButton!
|
|
||||||
|
|
||||||
@IBAction func optionDidChange(_ sender: AnyObject!) {
|
|
||||||
pushSwitchValues()
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func pushSwitchValues() {
|
|
||||||
atari2600.colourButton = colourButton.state == NSOnState
|
|
||||||
atari2600.leftPlayerDifficultyButton = leftPlayerDifficultyButton.state == NSOnState
|
|
||||||
atari2600.rightPlayerDifficultyButton = rightPlayerDifficultyButton.state == NSOnState
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction func optionWasPressed(_ sender: NSButton!) {
|
|
||||||
if sender == resetButton {
|
|
||||||
atari2600.pressResetButton()
|
|
||||||
} else {
|
|
||||||
atari2600.pressSelectButton()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,39 @@
|
|||||||
|
//
|
||||||
|
// Atari2600Options.swift
|
||||||
|
// Clock Signal
|
||||||
|
//
|
||||||
|
// Created by Thomas Harte on 02/10/2016.
|
||||||
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
class Atari2600OptionsPanel: MachinePanel {
|
||||||
|
var atari2600: CSAtari2600! {
|
||||||
|
get {
|
||||||
|
return self.machine as! CSAtari2600
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBOutlet var resetButton: NSButton!
|
||||||
|
@IBOutlet var selectButton: NSButton!
|
||||||
|
@IBOutlet var colourButton: NSButton!
|
||||||
|
@IBOutlet var leftPlayerDifficultyButton: NSButton!
|
||||||
|
@IBOutlet var rightPlayerDifficultyButton: NSButton!
|
||||||
|
|
||||||
|
@IBAction func optionDidChange(_ sender: AnyObject!) {
|
||||||
|
pushSwitchValues()
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func pushSwitchValues() {
|
||||||
|
atari2600.colourButton = colourButton.state == NSOnState
|
||||||
|
atari2600.leftPlayerDifficultyButton = leftPlayerDifficultyButton.state == NSOnState
|
||||||
|
atari2600.rightPlayerDifficultyButton = rightPlayerDifficultyButton.state == NSOnState
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func optionWasPressed(_ sender: NSButton!) {
|
||||||
|
if sender == resetButton {
|
||||||
|
atari2600.pressResetButton()
|
||||||
|
} else {
|
||||||
|
atari2600.pressSelectButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,99 +0,0 @@
|
|||||||
//
|
|
||||||
// ElectronDocument.swift
|
|
||||||
// Clock Signal
|
|
||||||
//
|
|
||||||
// Created by Thomas Harte on 03/01/2016.
|
|
||||||
// Copyright © 2016 Thomas Harte. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
import AudioToolbox
|
|
||||||
|
|
||||||
class ElectronDocument: MachineDocument {
|
|
||||||
|
|
||||||
fileprivate lazy var electron = CSElectron()
|
|
||||||
override var machine: CSMachine! {
|
|
||||||
get {
|
|
||||||
return electron
|
|
||||||
}
|
|
||||||
}
|
|
||||||
override var name: String! {
|
|
||||||
get {
|
|
||||||
return "electron"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func aspectRatio() -> NSSize {
|
|
||||||
return NSSize(width: 11.0, height: 10.0)
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func rom(_ name: String) -> Data? {
|
|
||||||
return dataForResource(name, ofType: "rom", inDirectory: "ROMImages/Electron")
|
|
||||||
}
|
|
||||||
|
|
||||||
override init() {
|
|
||||||
super.init();
|
|
||||||
|
|
||||||
if let os = rom("os"), let basic = rom("basic") {
|
|
||||||
self.electron.setOSROM(os)
|
|
||||||
self.electron.setBASICROM(basic)
|
|
||||||
}
|
|
||||||
if let dfs = rom("DFS-1770-2.20") {
|
|
||||||
self.electron.setDFSROM(dfs)
|
|
||||||
}
|
|
||||||
if let adfs1 = rom("ADFS-E00_1"), let adfs2 = rom("ADFS-E00_2") {
|
|
||||||
var fullADFS = adfs1
|
|
||||||
fullADFS.append(adfs2)
|
|
||||||
self.electron.setADFSROM(fullADFS as Data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// override func windowControllerDidLoadNib(_ aController: NSWindowController) {
|
|
||||||
// super.windowControllerDidLoadNib(aController)
|
|
||||||
// }
|
|
||||||
|
|
||||||
override var windowNibName: String? {
|
|
||||||
return "ElectronDocument"
|
|
||||||
}
|
|
||||||
|
|
||||||
/* override func readFromURL(url: NSURL, ofType typeName: String) throws {
|
|
||||||
if let pathExtension = url.pathExtension {
|
|
||||||
switch pathExtension.lowercaseString {
|
|
||||||
case "uef":
|
|
||||||
electron.openUEFAtURL(url)
|
|
||||||
return
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let fileWrapper = try NSFileWrapper(URL: url, options: NSFileWrapperReadingOptions(rawValue: 0))
|
|
||||||
try self.readFromFileWrapper(fileWrapper, ofType: typeName)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func readFromData(data: NSData, ofType typeName: String) throws {
|
|
||||||
if let plus1ROM = rom("plus1") {
|
|
||||||
electron.setROM(plus1ROM, slot: 12)
|
|
||||||
}
|
|
||||||
electron.setROM(data, slot: 15)
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// MARK: IBActions
|
|
||||||
@IBOutlet var displayTypeButton: NSPopUpButton?
|
|
||||||
@IBAction func setDisplayType(_ sender: NSPopUpButton!) {
|
|
||||||
electron.useTelevisionOutput = (sender.indexOfSelectedItem == 1)
|
|
||||||
UserDefaults.standard.set(sender.indexOfSelectedItem, forKey: self.displayTypeUserDefaultsKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate let displayTypeUserDefaultsKey = "electron.displayType"
|
|
||||||
override func establishStoredOptions() {
|
|
||||||
super.establishStoredOptions()
|
|
||||||
let standardUserDefaults = UserDefaults.standard
|
|
||||||
standardUserDefaults.register(defaults: [
|
|
||||||
displayTypeUserDefaultsKey: 0,
|
|
||||||
])
|
|
||||||
|
|
||||||
let displayType = standardUserDefaults.integer(forKey: self.displayTypeUserDefaultsKey)
|
|
||||||
electron.useTelevisionOutput = (displayType == 1)
|
|
||||||
self.displayTypeButton?.selectItem(at: displayType)
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,35 @@
|
|||||||
|
//
|
||||||
|
// ElectronOptionsPanel.swift
|
||||||
|
// Clock Signal
|
||||||
|
//
|
||||||
|
// Created by Thomas Harte on 02/10/2016.
|
||||||
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
class ElectronOptionsPanel: MachinePanel {
|
||||||
|
var electron: CSElectron! {
|
||||||
|
get {
|
||||||
|
return self.machine as! CSElectron
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate let displayTypeUserDefaultsKey = "electron.displayType"
|
||||||
|
|
||||||
|
@IBOutlet var displayTypeButton: NSPopUpButton?
|
||||||
|
@IBAction func setDisplayType(_ sender: NSPopUpButton!) {
|
||||||
|
electron.useTelevisionOutput = (sender.indexOfSelectedItem == 1)
|
||||||
|
UserDefaults.standard.set(sender.indexOfSelectedItem, forKey: self.displayTypeUserDefaultsKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func establishStoredOptions() {
|
||||||
|
super.establishStoredOptions()
|
||||||
|
let standardUserDefaults = UserDefaults.standard
|
||||||
|
standardUserDefaults.register(defaults: [
|
||||||
|
displayTypeUserDefaultsKey: 0,
|
||||||
|
])
|
||||||
|
|
||||||
|
let displayType = standardUserDefaults.integer(forKey: self.displayTypeUserDefaultsKey)
|
||||||
|
electron.useTelevisionOutput = (displayType == 1)
|
||||||
|
self.displayTypeButton?.selectItem(at: displayType)
|
||||||
|
}
|
||||||
|
}
|
@ -20,11 +20,7 @@ class MachineDocument:
|
|||||||
{
|
{
|
||||||
lazy var actionLock = NSLock()
|
lazy var actionLock = NSLock()
|
||||||
lazy var drawLock = NSLock()
|
lazy var drawLock = NSLock()
|
||||||
var machine: CSMachine! {
|
var machine: CSMachine!
|
||||||
get {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var name: String! {
|
var name: String! {
|
||||||
get {
|
get {
|
||||||
return nil
|
return nil
|
||||||
@ -42,7 +38,7 @@ class MachineDocument:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBOutlet weak var optionsPanel: NSPanel!
|
@IBOutlet var optionsPanel: MachinePanel!
|
||||||
@IBAction func showOptions(_ sender: AnyObject!) {
|
@IBAction func showOptions(_ sender: AnyObject!) {
|
||||||
optionsPanel?.setIsVisible(true)
|
optionsPanel?.setIsVisible(true)
|
||||||
}
|
}
|
||||||
@ -54,6 +50,10 @@ class MachineDocument:
|
|||||||
return updater
|
return updater
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
override var windowNibName: String? {
|
||||||
|
return "MachineDocument"
|
||||||
|
}
|
||||||
|
|
||||||
override func windowControllerDidLoadNib(_ aController: NSWindowController) {
|
override func windowControllerDidLoadNib(_ aController: NSWindowController) {
|
||||||
super.windowControllerDidLoadNib(aController)
|
super.windowControllerDidLoadNib(aController)
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ class MachineDocument:
|
|||||||
|
|
||||||
setupClockRate()
|
setupClockRate()
|
||||||
self.machine.delegate = self
|
self.machine.delegate = self
|
||||||
establishStoredOptions()
|
self.optionsPanel?.establishStoredOptions()
|
||||||
}
|
}
|
||||||
|
|
||||||
func machineDidChangeClockRate(_ machine: CSMachine!) {
|
func machineDidChangeClockRate(_ machine: CSMachine!) {
|
||||||
@ -104,7 +104,23 @@ class MachineDocument:
|
|||||||
|
|
||||||
// MARK: configuring
|
// MARK: configuring
|
||||||
func configureAs(_ analysis: CSStaticAnalyser) {
|
func configureAs(_ analysis: CSStaticAnalyser) {
|
||||||
|
if let machine = analysis.newMachine() {
|
||||||
|
self.machine = machine
|
||||||
|
}
|
||||||
analysis.apply(to: self.machine)
|
analysis.apply(to: self.machine)
|
||||||
|
|
||||||
|
if let optionsPanelNibName = analysis.optionsPanelNibName {
|
||||||
|
Bundle.main.loadNibNamed(optionsPanelNibName, owner: self, topLevelObjects: nil)
|
||||||
|
self.optionsPanel.machine = self.machine
|
||||||
|
showOptions(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func read(from url: URL, ofType typeName: String) throws {
|
||||||
|
if let analyser = CSStaticAnalyser(fileAt: url) {
|
||||||
|
self.displayName = analyser.displayName
|
||||||
|
self.configureAs(analyser)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: the pasteboard
|
// MARK: the pasteboard
|
||||||
@ -128,15 +144,6 @@ class MachineDocument:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Utilities for children
|
|
||||||
func dataForResource(_ name : String, ofType type: String, inDirectory directory: String) -> Data? {
|
|
||||||
if let path = Bundle.main.path(forResource: name, ofType: type, inDirectory: directory) {
|
|
||||||
return (try? Data(contentsOf: URL(fileURLWithPath: path)))
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: CSAudioQueueDelegate
|
// MARK: CSAudioQueueDelegate
|
||||||
final func audioQueueDidCompleteBuffer(_ audioQueue: CSAudioQueue) {
|
final func audioQueueDidCompleteBuffer(_ audioQueue: CSAudioQueue) {
|
||||||
bestEffortUpdater.update()
|
bestEffortUpdater.update()
|
||||||
@ -156,23 +163,41 @@ class MachineDocument:
|
|||||||
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
|
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Key forwarding
|
// MARK: Input management
|
||||||
fileprivate func withKeyboardMachine(_ action: (CSKeyboardMachine) -> ()) {
|
fileprivate func withKeyboardMachine(_ action: (CSKeyboardMachine) -> ()) {
|
||||||
if let keyboardMachine = self.machine as? CSKeyboardMachine {
|
if let keyboardMachine = self.machine as? CSKeyboardMachine {
|
||||||
action(keyboardMachine)
|
action(keyboardMachine)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileprivate func withJoystickMachine(_ action: (CSJoystickMachine) -> ()) {
|
||||||
|
if let joystickMachine = self.machine as? CSJoystickMachine {
|
||||||
|
action(joystickMachine)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func sendJoystickEvent(_ machine: CSJoystickMachine, keyCode: UInt16, isPressed: Bool) {
|
||||||
|
switch keyCode {
|
||||||
|
case 123: machine.setDirection(.left, onPad: 0, isPressed: isPressed)
|
||||||
|
case 126: machine.setDirection(.up, onPad: 0, isPressed: isPressed)
|
||||||
|
case 124: machine.setDirection(.right, onPad: 0, isPressed: isPressed)
|
||||||
|
case 125: machine.setDirection(.down, onPad: 0, isPressed: isPressed)
|
||||||
|
default: machine.setButtonAt(0, onPad: 0, isPressed: isPressed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func windowDidResignKey(_ notification: Notification) {
|
func windowDidResignKey(_ notification: Notification) {
|
||||||
self.withKeyboardMachine { $0.clearAllKeys() }
|
self.withKeyboardMachine { $0.clearAllKeys() }
|
||||||
}
|
}
|
||||||
|
|
||||||
func keyDown(_ event: NSEvent) {
|
func keyDown(_ event: NSEvent) {
|
||||||
self.withKeyboardMachine { $0.setKey(event.keyCode, isPressed: true) }
|
self.withKeyboardMachine { $0.setKey(event.keyCode, isPressed: true) }
|
||||||
|
self.withJoystickMachine { sendJoystickEvent($0, keyCode: event.keyCode, isPressed: false) }
|
||||||
}
|
}
|
||||||
|
|
||||||
func keyUp(_ event: NSEvent) {
|
func keyUp(_ event: NSEvent) {
|
||||||
self.withKeyboardMachine { $0.setKey(event.keyCode, isPressed: false) }
|
self.withKeyboardMachine { $0.setKey(event.keyCode, isPressed: false) }
|
||||||
|
self.withJoystickMachine { sendJoystickEvent($0, keyCode: event.keyCode, isPressed: true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
func flagsChanged(_ newModifiers: NSEvent) {
|
func flagsChanged(_ newModifiers: NSEvent) {
|
||||||
@ -183,36 +208,4 @@ class MachineDocument:
|
|||||||
$0.setKey(VK_Option, isPressed: newModifiers.modifierFlags.contains(.option))
|
$0.setKey(VK_Option, isPressed: newModifiers.modifierFlags.contains(.option))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: IBActions
|
|
||||||
final func prefixedUserDefaultsKey(_ key: String) -> String {
|
|
||||||
return "\(self.name).\(key)"
|
|
||||||
}
|
|
||||||
var fastLoadingUserDefaultsKey: String {
|
|
||||||
get {
|
|
||||||
return prefixedUserDefaultsKey("fastLoading")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBOutlet var fastLoadingButton: NSButton?
|
|
||||||
@IBAction func setFastLoading(_ sender: NSButton!) {
|
|
||||||
if let fastLoadingMachine = machine as? CSFastLoading {
|
|
||||||
let useFastLoadingHack = sender.state == NSOnState
|
|
||||||
fastLoadingMachine.useFastLoadingHack = useFastLoadingHack
|
|
||||||
UserDefaults.standard.set(useFastLoadingHack, forKey: fastLoadingUserDefaultsKey)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func establishStoredOptions() {
|
|
||||||
let standardUserDefaults = UserDefaults.standard
|
|
||||||
standardUserDefaults.register(defaults: [
|
|
||||||
fastLoadingUserDefaultsKey: true
|
|
||||||
])
|
|
||||||
|
|
||||||
if let fastLoadingMachine = machine as? CSFastLoading {
|
|
||||||
let useFastLoadingHack = standardUserDefaults.bool(forKey: self.fastLoadingUserDefaultsKey)
|
|
||||||
fastLoadingMachine.useFastLoadingHack = useFastLoadingHack
|
|
||||||
self.fastLoadingButton?.state = useFastLoadingHack ? NSOnState : NSOffState
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
45
OSBindings/Mac/Clock Signal/Documents/MachinePanel.swift
Normal file
45
OSBindings/Mac/Clock Signal/Documents/MachinePanel.swift
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// MachinePanel.swift
|
||||||
|
// Clock Signal
|
||||||
|
//
|
||||||
|
// Created by Thomas Harte on 02/10/2016.
|
||||||
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Cocoa
|
||||||
|
|
||||||
|
class MachinePanel: NSPanel {
|
||||||
|
var machine: CSMachine!
|
||||||
|
|
||||||
|
// MARK: IBActions
|
||||||
|
final func prefixedUserDefaultsKey(_ key: String) -> String {
|
||||||
|
return "\(self.machine.userDefaultsPrefix).\(key)"
|
||||||
|
}
|
||||||
|
var fastLoadingUserDefaultsKey: String {
|
||||||
|
get {
|
||||||
|
return prefixedUserDefaultsKey("fastLoading")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBOutlet var fastLoadingButton: NSButton?
|
||||||
|
@IBAction func setFastLoading(_ sender: NSButton!) {
|
||||||
|
if let fastLoadingMachine = machine as? CSFastLoading {
|
||||||
|
let useFastLoadingHack = sender.state == NSOnState
|
||||||
|
fastLoadingMachine.useFastLoadingHack = useFastLoadingHack
|
||||||
|
UserDefaults.standard.set(useFastLoadingHack, forKey: fastLoadingUserDefaultsKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func establishStoredOptions() {
|
||||||
|
let standardUserDefaults = UserDefaults.standard
|
||||||
|
standardUserDefaults.register(defaults: [
|
||||||
|
fastLoadingUserDefaultsKey: true
|
||||||
|
])
|
||||||
|
|
||||||
|
if let fastLoadingMachine = machine as? CSFastLoading {
|
||||||
|
let useFastLoadingHack = standardUserDefaults.bool(forKey: self.fastLoadingUserDefaultsKey)
|
||||||
|
fastLoadingMachine.useFastLoadingHack = useFastLoadingHack
|
||||||
|
self.fastLoadingButton?.state = useFastLoadingHack ? NSOnState : NSOffState
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,50 +1,17 @@
|
|||||||
//
|
//
|
||||||
// Vic20Document.swift
|
// Vic20OptionsPanel.swift
|
||||||
// Clock Signal
|
// Clock Signal
|
||||||
//
|
//
|
||||||
// Created by Thomas Harte on 04/06/2016.
|
// Created by Thomas Harte on 03/10/2016.
|
||||||
// Copyright © 2016 Thomas Harte. All rights reserved.
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
class Vic20OptionsPanel: MachinePanel {
|
||||||
|
var vic20: CSVic20! {
|
||||||
class Vic20Document: MachineDocument {
|
|
||||||
|
|
||||||
fileprivate lazy var vic20 = CSVic20()
|
|
||||||
override var machine: CSMachine! {
|
|
||||||
get {
|
get {
|
||||||
return vic20
|
return self.machine as! CSVic20
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
override var name: String! {
|
|
||||||
get {
|
|
||||||
return "vic20"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: NSDocument overrides
|
|
||||||
override init() {
|
|
||||||
super.init()
|
|
||||||
|
|
||||||
if let drive = dataForResource("1540", ofType: "bin", inDirectory: "ROMImages/Commodore1540") {
|
|
||||||
vic20.setDriveROM(drive)
|
|
||||||
}
|
|
||||||
|
|
||||||
establishStoredOptions()
|
|
||||||
}
|
|
||||||
|
|
||||||
override class func autosavesInPlace() -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
override var windowNibName: String? {
|
|
||||||
return "Vic20Document"
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: machine setup
|
|
||||||
fileprivate func rom(_ name: String) -> Data? {
|
|
||||||
return dataForResource(name, ofType: "bin", inDirectory: "ROMImages/Vic20")
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: automatic loading tick box
|
// MARK: automatic loading tick box
|
||||||
@IBOutlet var loadAutomaticallyButton: NSButton?
|
@IBOutlet var loadAutomaticallyButton: NSButton?
|
||||||
@ -70,39 +37,19 @@ class Vic20Document: MachineDocument {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func setCountry(_ countryID: Int) {
|
fileprivate func setCountry(_ countryID: Int) {
|
||||||
var charactersROM: String?
|
|
||||||
var kernelROM: String?
|
|
||||||
switch countryID {
|
switch countryID {
|
||||||
case 0: // Danish
|
case 0: // Danish
|
||||||
charactersROM = "characters-danish"
|
vic20.country = .danish
|
||||||
kernelROM = "kernel-danish"
|
|
||||||
vic20.region = .PAL
|
|
||||||
case 1: // European
|
case 1: // European
|
||||||
charactersROM = "characters-english"
|
vic20.country = .european
|
||||||
kernelROM = "kernel-pal"
|
|
||||||
vic20.region = .PAL
|
|
||||||
case 2: // Japanese
|
case 2: // Japanese
|
||||||
charactersROM = "characters-japanese"
|
vic20.country = .japanese
|
||||||
kernelROM = "kernel-japanese"
|
|
||||||
vic20.region = .NTSC
|
|
||||||
case 3: // Swedish
|
case 3: // Swedish
|
||||||
charactersROM = "characters-swedish"
|
vic20.country = .swedish
|
||||||
kernelROM = "kernel-swedish"
|
|
||||||
vic20.region = .PAL
|
|
||||||
case 4: // US
|
case 4: // US
|
||||||
charactersROM = "characters-english"
|
vic20.country = .american
|
||||||
kernelROM = "kernel-ntsc"
|
|
||||||
vic20.region = .NTSC
|
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
|
|
||||||
if let charactersROM = charactersROM, let kernelROM = kernelROM {
|
|
||||||
if let kernel = rom(kernelROM), let basic = rom("basic"), let characters = rom(charactersROM) {
|
|
||||||
vic20.setKernelROM(kernel)
|
|
||||||
vic20.setBASICROM(basic)
|
|
||||||
vic20.setCharactersROM(characters)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: memory model selector
|
// MARK: memory model selector
|
@ -25,7 +25,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).Atari2600Document</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).ElectronDocument</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -57,7 +57,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).ElectronDocument</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).ElectronDocument</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -86,7 +86,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).Vic20Document</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -100,7 +100,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).Vic20Document</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -114,7 +114,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).Vic20Document</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -128,7 +128,7 @@
|
|||||||
<key>LSTypeIsPackage</key>
|
<key>LSTypeIsPackage</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).Vic20Document</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleTypeExtensions</key>
|
<key>CFBundleTypeExtensions</key>
|
||||||
@ -144,7 +144,7 @@
|
|||||||
<key>CFBundleTypeRole</key>
|
<key>CFBundleTypeRole</key>
|
||||||
<string>Viewer</string>
|
<string>Viewer</string>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>$(PRODUCT_MODULE_NAME).ElectronDocument</string>
|
<string>$(PRODUCT_MODULE_NAME).MachineDocument</string>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
|
22
OSBindings/Mac/Clock Signal/Machine/CSJoystickMachine.h
Normal file
22
OSBindings/Mac/Clock Signal/Machine/CSJoystickMachine.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// CSJoystickMachine.h
|
||||||
|
// Clock Signal
|
||||||
|
//
|
||||||
|
// Created by Thomas Harte on 03/10/2016.
|
||||||
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSInteger, CSJoystickDirection)
|
||||||
|
{
|
||||||
|
CSJoystickDirectionUp,
|
||||||
|
CSJoystickDirectionDown,
|
||||||
|
CSJoystickDirectionLeft,
|
||||||
|
CSJoystickDirectionRight
|
||||||
|
};
|
||||||
|
|
||||||
|
@protocol CSJoystickMachine <NSObject>
|
||||||
|
|
||||||
|
- (void)setButtonAtIndex:(NSUInteger)button onPad:(NSUInteger)pad isPressed:(BOOL)isPressed;
|
||||||
|
- (void)setDirection:(CSJoystickDirection)direction onPad:(NSUInteger)pad isPressed:(BOOL)isPressed;
|
||||||
|
|
||||||
|
@end
|
@ -33,6 +33,8 @@
|
|||||||
@property (nonatomic, readonly) double clockRate;
|
@property (nonatomic, readonly) double clockRate;
|
||||||
@property (nonatomic, readonly) BOOL clockIsUnlimited;
|
@property (nonatomic, readonly) BOOL clockIsUnlimited;
|
||||||
|
|
||||||
|
@property (nonatomic, readonly) NSString *userDefaultsPrefix;
|
||||||
|
|
||||||
- (void)paste:(NSString *)string;
|
- (void)paste:(NSString *)string;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
15
OSBindings/Mac/Clock Signal/Machine/NSBundle+DataResource.h
Normal file
15
OSBindings/Mac/Clock Signal/Machine/NSBundle+DataResource.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// NSBundle+DataResource.h
|
||||||
|
// Clock Signal
|
||||||
|
//
|
||||||
|
// Created by Thomas Harte on 02/10/2016.
|
||||||
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@interface NSBundle (DataResource)
|
||||||
|
|
||||||
|
- (nullable NSData *)dataForResource:(nullable NSString *)resource withExtension:(nullable NSString *)extension subdirectory:(nullable NSString *)subdirectory;
|
||||||
|
|
||||||
|
@end
|
20
OSBindings/Mac/Clock Signal/Machine/NSBundle+DataResource.m
Normal file
20
OSBindings/Mac/Clock Signal/Machine/NSBundle+DataResource.m
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
// NSBundle+DataResource.m
|
||||||
|
// Clock Signal
|
||||||
|
//
|
||||||
|
// Created by Thomas Harte on 02/10/2016.
|
||||||
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NSBundle+DataResource.h"
|
||||||
|
|
||||||
|
@implementation NSBundle (DataResource)
|
||||||
|
|
||||||
|
- (NSData *)dataForResource:(NSString *)resource withExtension:(NSString *)extension subdirectory:(NSString *)subdirectory
|
||||||
|
{
|
||||||
|
NSURL *url = [self URLForResource:resource withExtension:extension subdirectory:subdirectory];
|
||||||
|
if(!url) return nil;
|
||||||
|
return [NSData dataWithContentsOfURL:url];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -14,8 +14,11 @@
|
|||||||
|
|
||||||
- (instancetype)initWithFileAtURL:(NSURL *)url;
|
- (instancetype)initWithFileAtURL:(NSURL *)url;
|
||||||
|
|
||||||
@property(nonatomic, readonly) Class documentClass;
|
@property(nonatomic, readonly) NSString *optionsPanelNibName;
|
||||||
|
- (CSMachine *)newMachine;
|
||||||
|
|
||||||
@property(nonatomic, readonly) NSString *displayName;
|
@property(nonatomic, readonly) NSString *displayName;
|
||||||
|
|
||||||
- (void)applyToMachine:(CSMachine *)machine;
|
- (void)applyToMachine:(CSMachine *)machine;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -34,18 +34,28 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (Class)documentClass
|
- (NSString *)optionsPanelNibName
|
||||||
{
|
{
|
||||||
switch(_target.machine)
|
switch(_target.machine)
|
||||||
{
|
{
|
||||||
case StaticAnalyser::Target::Electron: return [ElectronDocument class];
|
case StaticAnalyser::Target::Electron: return @"ElectronOptions";
|
||||||
case StaticAnalyser::Target::Vic20: return [Vic20Document class];
|
case StaticAnalyser::Target::Vic20: return @"Vic20Options";
|
||||||
case StaticAnalyser::Target::Atari2600: return [Atari2600Document class];
|
case StaticAnalyser::Target::Atari2600: return @"Atari2600Options";
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (CSMachine *)newMachine
|
||||||
|
{
|
||||||
|
switch(_target.machine)
|
||||||
|
{
|
||||||
|
case StaticAnalyser::Target::Electron: return [[CSElectron alloc] init];
|
||||||
|
case StaticAnalyser::Target::Vic20: return [[CSVic20 alloc] init];
|
||||||
|
case StaticAnalyser::Target::Atari2600: return [[CSAtari2600 alloc] init];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)applyToMachine:(CSMachine *)machine
|
- (void)applyToMachine:(CSMachine *)machine
|
||||||
{
|
{
|
||||||
[machine applyTarget:_target];
|
[machine applyTarget:_target];
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#include "CSMachine.h"
|
#include "CSMachine.h"
|
||||||
#include "Atari2600Inputs.h"
|
#include "Atari2600Inputs.h"
|
||||||
|
#import "CSJoystickMachine.h"
|
||||||
|
|
||||||
@interface CSAtari2600 : CSMachine
|
@interface CSAtari2600 : CSMachine <CSJoystickMachine>
|
||||||
|
|
||||||
- (void)setState:(BOOL)state forDigitalInput:(Atari2600DigitalInput)digitalInput;
|
|
||||||
- (void)setResetLineEnabled:(BOOL)enabled;
|
- (void)setResetLineEnabled:(BOOL)enabled;
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL colourButton;
|
@property (nonatomic, assign) BOOL colourButton;
|
||||||
|
@ -49,9 +49,23 @@ struct CRTDelegate: public Outputs::CRT::Delegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setState:(BOOL)state forDigitalInput:(Atari2600DigitalInput)digitalInput {
|
- (void)setDirection:(CSJoystickDirection)direction onPad:(NSUInteger)pad isPressed:(BOOL)isPressed {
|
||||||
|
Atari2600DigitalInput input;
|
||||||
|
switch(direction)
|
||||||
|
{
|
||||||
|
case CSJoystickDirectionUp: input = pad ? Atari2600DigitalInputJoy2Up : Atari2600DigitalInputJoy1Up; break;
|
||||||
|
case CSJoystickDirectionDown: input = pad ? Atari2600DigitalInputJoy2Down : Atari2600DigitalInputJoy1Down; break;
|
||||||
|
case CSJoystickDirectionLeft: input = pad ? Atari2600DigitalInputJoy2Left : Atari2600DigitalInputJoy1Left; break;
|
||||||
|
case CSJoystickDirectionRight: input = pad ? Atari2600DigitalInputJoy2Right : Atari2600DigitalInputJoy1Right; break;
|
||||||
|
}
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
_atari2600.set_digital_input(digitalInput, state ? true : false);
|
_atari2600.set_digital_input(input, isPressed ? true : false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setButtonAtIndex:(NSUInteger)button onPad:(NSUInteger)pad isPressed:(BOOL)isPressed {
|
||||||
|
@synchronized(self) {
|
||||||
|
_atari2600.set_digital_input(pad ? Atari2600DigitalInputJoy2Fire : Atari2600DigitalInputJoy1Fire, isPressed ? true : false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,4 +129,6 @@ struct CRTDelegate: public Outputs::CRT::Delegate {
|
|||||||
[self toggleSwitch:Atari2600SwitchSelect];
|
[self toggleSwitch:Atari2600SwitchSelect];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)userDefaultsPrefix { return @"atari2600"; }
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -10,15 +10,8 @@
|
|||||||
#import "CSKeyboardMachine.h"
|
#import "CSKeyboardMachine.h"
|
||||||
#import "CSFastLoading.h"
|
#import "CSFastLoading.h"
|
||||||
|
|
||||||
@class CSStaticAnalyser;
|
|
||||||
|
|
||||||
@interface CSElectron : CSMachine <CSKeyboardMachine, CSFastLoading>
|
@interface CSElectron : CSMachine <CSKeyboardMachine, CSFastLoading>
|
||||||
|
|
||||||
- (void)setOSROM:(nonnull NSData *)rom;
|
|
||||||
- (void)setBASICROM:(nonnull NSData *)rom;
|
|
||||||
- (void)setDFSROM:(nonnull NSData *)rom;
|
|
||||||
- (void)setADFSROM:(nonnull NSData *)rom;
|
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL useFastLoadingHack;
|
@property (nonatomic, assign) BOOL useFastLoadingHack;
|
||||||
@property (nonatomic, assign) BOOL useTelevisionOutput;
|
@property (nonatomic, assign) BOOL useTelevisionOutput;
|
||||||
|
|
||||||
|
@ -9,11 +9,13 @@
|
|||||||
#import "CSElectron.h"
|
#import "CSElectron.h"
|
||||||
|
|
||||||
#include "Electron.hpp"
|
#include "Electron.hpp"
|
||||||
#import "CSMachine+Subclassing.h"
|
|
||||||
#import "NSData+StdVector.h"
|
|
||||||
#include "StaticAnalyser.hpp"
|
#include "StaticAnalyser.hpp"
|
||||||
#include "TapeUEF.hpp"
|
#include "TapeUEF.hpp"
|
||||||
|
|
||||||
|
#import "CSMachine+Subclassing.h"
|
||||||
|
#import "NSData+StdVector.h"
|
||||||
|
#import "NSBundle+DataResource.h"
|
||||||
|
|
||||||
@implementation CSElectron {
|
@implementation CSElectron {
|
||||||
Electron::Machine _electron;
|
Electron::Machine _electron;
|
||||||
}
|
}
|
||||||
@ -22,9 +24,27 @@
|
|||||||
return &_electron;
|
return &_electron;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)analyse:(NSURL *)url {
|
- (instancetype)init {
|
||||||
StaticAnalyser::GetTargets([url fileSystemRepresentation]);
|
self = [super init];
|
||||||
|
if(self)
|
||||||
|
{
|
||||||
|
[self setOSROM:[self rom:@"os"]];
|
||||||
|
[self setBASICROM:[self rom:@"basic"]];
|
||||||
|
[self setDFSROM:[self rom:@"DFS-1770-2.20"]];
|
||||||
|
|
||||||
|
NSMutableData *adfs = [[self rom:@"ADFS-E00_1"] mutableCopy];
|
||||||
|
[adfs appendData:[self rom:@"ADFS-E00_2"]];
|
||||||
|
[self setADFSROM:adfs];
|
||||||
}
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSData *)rom:(NSString *)name
|
||||||
|
{
|
||||||
|
return [[NSBundle mainBundle] dataForResource:name withExtension:@"rom" subdirectory:@"ROMImages/Electron"];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - ROM setting
|
||||||
|
|
||||||
- (void)setOSROM:(nonnull NSData *)rom { [self setROM:rom slot:Electron::ROMSlotOS]; }
|
- (void)setOSROM:(nonnull NSData *)rom { [self setROM:rom slot:Electron::ROMSlotOS]; }
|
||||||
- (void)setBASICROM:(nonnull NSData *)rom { [self setROM:rom slot:Electron::ROMSlotBASIC]; }
|
- (void)setBASICROM:(nonnull NSData *)rom { [self setROM:rom slot:Electron::ROMSlotBASIC]; }
|
||||||
@ -32,22 +52,15 @@
|
|||||||
- (void)setDFSROM:(nonnull NSData *)rom { [self setROM:rom slot:Electron::ROMSlotDFS]; }
|
- (void)setDFSROM:(nonnull NSData *)rom { [self setROM:rom slot:Electron::ROMSlotDFS]; }
|
||||||
|
|
||||||
- (void)setROM:(nonnull NSData *)rom slot:(int)slot {
|
- (void)setROM:(nonnull NSData *)rom slot:(int)slot {
|
||||||
|
if(rom)
|
||||||
|
{
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
_electron.set_rom((Electron::ROMSlot)slot, rom.stdVector8, false);
|
_electron.set_rom((Electron::ROMSlot)slot, rom.stdVector8, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*- (BOOL)openUEFAtURL:(NSURL *)URL {
|
#pragma mark - Keyboard Mapping
|
||||||
@synchronized(self) {
|
|
||||||
try {
|
|
||||||
std::shared_ptr<Storage::Tape::UEF> tape(new Storage::Tape::UEF([URL fileSystemRepresentation]));
|
|
||||||
_electron.set_tape(tape);
|
|
||||||
return YES;
|
|
||||||
} catch(...) {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
- (void)clearAllKeys {
|
- (void)clearAllKeys {
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
@ -135,6 +148,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)userDefaultsPrefix { return @"electron"; }
|
||||||
|
|
||||||
|
#pragma mark - Options
|
||||||
|
|
||||||
- (void)setUseFastLoadingHack:(BOOL)useFastLoadingHack {
|
- (void)setUseFastLoadingHack:(BOOL)useFastLoadingHack {
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
_useFastLoadingHack = useFastLoadingHack;
|
_useFastLoadingHack = useFastLoadingHack;
|
||||||
@ -149,4 +166,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//override func aspectRatio() -> NSSize {
|
||||||
|
// return NSSize(width: 11.0, height: 10.0)
|
||||||
|
// }
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -10,10 +10,13 @@
|
|||||||
#import "CSKeyboardMachine.h"
|
#import "CSKeyboardMachine.h"
|
||||||
#import "CSFastLoading.h"
|
#import "CSFastLoading.h"
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, CSVic20Region)
|
typedef NS_ENUM(NSInteger, CSVic20Country)
|
||||||
{
|
{
|
||||||
CSVic20RegionPAL,
|
CSVic20CountryDanish,
|
||||||
CSVic20RegionNTSC
|
CSVic20CountryEuropean,
|
||||||
|
CSVic20CountryJapanese,
|
||||||
|
CSVic20CountrySwedish,
|
||||||
|
CSVic20CountryAmerican
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, CSVic20MemorySize)
|
typedef NS_ENUM(NSInteger, CSVic20MemorySize)
|
||||||
@ -25,14 +28,9 @@ typedef NS_ENUM(NSInteger, CSVic20MemorySize)
|
|||||||
|
|
||||||
@interface CSVic20 : CSMachine <CSKeyboardMachine, CSFastLoading>
|
@interface CSVic20 : CSMachine <CSKeyboardMachine, CSFastLoading>
|
||||||
|
|
||||||
- (void)setKernelROM:(nonnull NSData *)rom;
|
|
||||||
- (void)setBASICROM:(nonnull NSData *)rom;
|
|
||||||
- (void)setCharactersROM:(nonnull NSData *)rom;
|
|
||||||
- (void)setDriveROM:(nonnull NSData *)rom;
|
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL useFastLoadingHack;
|
@property (nonatomic, assign) BOOL useFastLoadingHack;
|
||||||
@property (nonatomic, assign) BOOL shouldLoadAutomatically;
|
@property (nonatomic, assign) BOOL shouldLoadAutomatically;
|
||||||
@property (nonatomic, assign) CSVic20Region region;
|
@property (nonatomic, assign) CSVic20Country country;
|
||||||
@property (nonatomic, assign) CSVic20MemorySize memorySize;
|
@property (nonatomic, assign) CSVic20MemorySize memorySize;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
#include "G64.hpp"
|
#include "G64.hpp"
|
||||||
#include "D64.hpp"
|
#include "D64.hpp"
|
||||||
|
|
||||||
|
#import "NSBundle+DataResource.h"
|
||||||
|
|
||||||
using namespace Commodore::Vic20;
|
using namespace Commodore::Vic20;
|
||||||
|
|
||||||
@implementation CSVic20 {
|
@implementation CSVic20 {
|
||||||
@ -20,9 +22,26 @@ using namespace Commodore::Vic20;
|
|||||||
BOOL _joystickMode;
|
BOOL _joystickMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (CRTMachine::Machine * const)machine {
|
- (CRTMachine::Machine * const)machine { return &_vic20; }
|
||||||
return &_vic20;
|
- (NSString *)userDefaultsPrefix { return @"vic20"; }
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [super init];
|
||||||
|
if(self)
|
||||||
|
{
|
||||||
|
[self setDriveROM:[[NSBundle mainBundle] dataForResource:@"1540" withExtension:@"bin" subdirectory:@"ROMImages/Commodore1540"]];
|
||||||
|
[self setBASICROM:[self rom:@"basic"]];
|
||||||
|
[self setCountry:CSVic20CountryEuropean];
|
||||||
}
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSData *)rom:(NSString *)name
|
||||||
|
{
|
||||||
|
return [[NSBundle mainBundle] dataForResource:name withExtension:@"bin" subdirectory:@"ROMImages/Vic20"];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - ROM setting
|
||||||
|
|
||||||
- (void)setROM:(nonnull NSData *)rom slot:(ROMSlot)slot {
|
- (void)setROM:(nonnull NSData *)rom slot:(ROMSlot)slot {
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
@ -46,6 +65,8 @@ using namespace Commodore::Vic20;
|
|||||||
[self setROM:rom slot:Drive];
|
[self setROM:rom slot:Drive];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Keyboard map
|
||||||
|
|
||||||
- (void)setKey:(uint16_t)key isPressed:(BOOL)isPressed {
|
- (void)setKey:(uint16_t)key isPressed:(BOOL)isPressed {
|
||||||
static NSDictionary<NSNumber *, NSNumber *> *vicKeysByKeys = @{
|
static NSDictionary<NSNumber *, NSNumber *> *vicKeysByKeys = @{
|
||||||
@(VK_ANSI_1): @(Key::Key1), @(VK_ANSI_2): @(Key::Key2),
|
@(VK_ANSI_1): @(Key::Key1), @(VK_ANSI_2): @(Key::Key2),
|
||||||
@ -164,10 +185,43 @@ using namespace Commodore::Vic20;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setRegion:(CSVic20Region)region {
|
- (void)setCountry:(CSVic20Country)country {
|
||||||
_region = region;
|
_country = country;
|
||||||
|
NSString *charactersROM, *kernelROM;
|
||||||
|
Commodore::Vic20::Region region;
|
||||||
|
switch(country)
|
||||||
|
{
|
||||||
|
case CSVic20CountryDanish:
|
||||||
|
region = Commodore::Vic20::Region::PAL;
|
||||||
|
charactersROM = @"characters-danish";
|
||||||
|
kernelROM = @"kernel-danish";
|
||||||
|
break;
|
||||||
|
case CSVic20CountryEuropean:
|
||||||
|
region = Commodore::Vic20::Region::PAL;
|
||||||
|
charactersROM = @"characters-english";
|
||||||
|
kernelROM = @"kernel-pal";
|
||||||
|
break;
|
||||||
|
case CSVic20CountryJapanese:
|
||||||
|
region = Commodore::Vic20::Region::NTSC;
|
||||||
|
charactersROM = @"characters-japanese";
|
||||||
|
kernelROM = @"kernel-japanese";
|
||||||
|
break;
|
||||||
|
case CSVic20CountrySwedish:
|
||||||
|
region = Commodore::Vic20::Region::PAL;
|
||||||
|
charactersROM = @"characters-swedish";
|
||||||
|
kernelROM = @"kernel-swedish";
|
||||||
|
break;
|
||||||
|
case CSVic20CountryAmerican:
|
||||||
|
region = Commodore::Vic20::Region::NTSC;
|
||||||
|
charactersROM = @"characters-english";
|
||||||
|
kernelROM = @"kernel-ntsc";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
_vic20.set_region( (region == CSVic20RegionPAL) ? Commodore::Vic20::Region::PAL : Commodore::Vic20::Region::NTSC);
|
_vic20.set_region(region);
|
||||||
|
[self setCharactersROM:[self rom:charactersROM]];
|
||||||
|
[self setKernelROM:[self rom:kernelROM]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user