From 7d63a50f3e9594c64743d12f9263d4e365a646cd Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 21 Mar 2023 20:05:10 -0400 Subject: [PATCH] Add MSX 2 to macOS UI. --- .../Machine/StaticAnalyser/CSStaticAnalyser.h | 7 ++- .../StaticAnalyser/CSStaticAnalyser.mm | 6 ++- .../Base.lproj/MachinePicker.xib | 49 ++++++++++++++----- .../MachinePicker/MachinePicker.swift | 22 ++++++--- 4 files changed, 64 insertions(+), 20 deletions(-) diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h index 4f96141f6..ddc82dd54 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h @@ -112,6 +112,11 @@ typedef NS_ENUM(NSInteger, CSMachineVic20Region) { CSMachineVic20RegionJapanese, }; +typedef NS_ENUM(NSInteger, CSMachineMSXModel) { + CSMachineMSXModelMSX1, + CSMachineMSXModelMSX2, +}; + typedef NS_ENUM(NSInteger, CSMachineMSXRegion) { CSMachineMSXRegionAmerican, CSMachineMSXRegionEuropean, @@ -132,7 +137,7 @@ typedef int Kilobytes; - (instancetype)initWithElectronDFS:(BOOL)dfs adfs:(BOOL)adfs ap6:(BOOL)ap6 sidewaysRAM:(BOOL)sidewaysRAM; - (instancetype)initWithEnterpriseModel:(CSMachineEnterpriseModel)model speed:(CSMachineEnterpriseSpeed)speed exosVersion:(CSMachineEnterpriseEXOS)exosVersion basicVersion:(CSMachineEnterpriseBASIC)basicVersion dos:(CSMachineEnterpriseDOS)dos; - (instancetype)initWithMacintoshModel:(CSMachineMacintoshModel)model; -- (instancetype)initWithMSXRegion:(CSMachineMSXRegion)region hasDiskDrive:(BOOL)hasDiskDrive; +- (instancetype)initWithMSXModel:(CSMachineMSXModel)model region:(CSMachineMSXRegion)region hasDiskDrive:(BOOL)hasDiskDrive; - (instancetype)initWithOricModel:(CSMachineOricModel)model diskInterface:(CSMachineOricDiskInterface)diskInterface; - (instancetype)initWithSpectrumModel:(CSMachineSpectrumModel)model; - (instancetype)initWithVic20Region:(CSMachineVic20Region)region memorySize:(Kilobytes)memorySize hasC1540:(BOOL)hasC1540; diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm index 964dd8612..2ef4dc36c 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm @@ -229,7 +229,7 @@ return self; } -- (instancetype)initWithMSXRegion:(CSMachineMSXRegion)region hasDiskDrive:(BOOL)hasDiskDrive { +- (instancetype)initWithMSXModel:(CSMachineMSXModel)model region:(CSMachineMSXRegion)region hasDiskDrive:(BOOL)hasDiskDrive { self = [super init]; if(self) { using Target = Analyser::Static::MSX::Target; @@ -240,6 +240,10 @@ case CSMachineMSXRegionEuropean: target->region = Target::Region::Europe; break; case CSMachineMSXRegionJapanese: target->region = Target::Region::Japan; break; } + switch(model) { + case CSMachineMSXModelMSX1: target->model = Target::Model::MSX1; break; + case CSMachineMSXModelMSX2: target->model = Target::Model::MSX2; break; + } _targets.push_back(std::move(target)); } return self; diff --git a/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib b/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib index a1a5ebc4e..d0557d959 100644 --- a/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib +++ b/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib @@ -1,8 +1,8 @@ - + - + @@ -313,13 +313,13 @@ Gw - + - - + + @@ -575,18 +575,18 @@ Gw - + - + @@ -600,22 +600,48 @@ Gw - + + + + + + + + + + + + + + + + + + + + + + + + + - + + + @@ -966,7 +992,7 @@ Gw - + @@ -991,6 +1017,7 @@ Gw + diff --git a/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift b/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift index b70d4c3df..2d37addc2 100644 --- a/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift +++ b/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift @@ -54,6 +54,7 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate { @IBOutlet var macintoshModelTypeButton: NSPopUpButton! // MARK: - MSX properties + @IBOutlet var msxModelButton: NSPopUpButton! @IBOutlet var msxRegionButton: NSPopUpButton! @IBOutlet var msxHasDiskDriveButton: NSButton! @@ -134,6 +135,7 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate { macintoshModelTypeButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.macintoshModel")) // MSX settings + msxModelButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.msxModel")) msxRegionButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.msxRegion")) msxHasDiskDriveButton.state = standardUserDefaults.bool(forKey: "new.msxDiskDrive") ? .on : .off @@ -198,6 +200,7 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate { standardUserDefaults.set(macintoshModelTypeButton.selectedTag(), forKey: "new.macintoshModel") // MSX settings + standardUserDefaults.set(msxModelButton.selectedTag(), forKey: "new.msxModel") standardUserDefaults.set(msxRegionButton.selectedTag(), forKey: "new.msxRegion") standardUserDefaults.set(msxHasDiskDriveButton.state == .on, forKey: "new.msxDiskDrive") @@ -355,15 +358,20 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate { case "msx": let hasDiskDrive = msxHasDiskDriveButton.state == .on + var region: CSMachineMSXRegion switch msxRegionButton.selectedTag() { - case 2: - return CSStaticAnalyser(msxRegion: .japanese, hasDiskDrive: hasDiskDrive) - case 1: - return CSStaticAnalyser(msxRegion: .american, hasDiskDrive: hasDiskDrive) - case 0: fallthrough - default: - return CSStaticAnalyser(msxRegion: .european, hasDiskDrive: hasDiskDrive) + case 2: region = .japanese + case 1: region = .american + case 0: fallthrough + default: region = .european } + var model: CSMachineMSXModel + switch msxModelButton.selectedTag() { + case 2: model = .MSX2 + case 1: fallthrough + default: model = .MSX1 + } + return CSStaticAnalyser(msxModel: model, region: region, hasDiskDrive: hasDiskDrive) case "oric": var diskInterface: CSMachineOricDiskInterface = .none