commit all changes in progress

This commit is contained in:
Kelvin Sherlock 2020-08-19 20:26:44 -04:00
parent 8886e7b2c7
commit 75b3dd3749
40 changed files with 38761 additions and 25 deletions

View File

@ -7,7 +7,13 @@
objects = {
/* Begin PBXBuildFile section */
B60A6E0C24ECE23F004B7EEF /* apple2gs.plist in Resources */ = {isa = PBXBuildFile; fileRef = B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */; };
B64E15A624E9B34700E8AD3D /* Models.plist in Resources */ = {isa = PBXBuildFile; fileRef = B64E15A424E9B34700E8AD3D /* Models.plist */; };
B64E15A924EA1D5300E8AD3D /* ROMBrowserDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* ROMBrowserDelegate.m */; };
B64E15AC24EA1FD400E8AD3D /* SlotBrowserDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15AB24EA1FD400E8AD3D /* SlotBrowserDelegate.m */; };
B64E15B524EA383F00E8AD3D /* apple2gs in Resources */ = {isa = PBXBuildFile; fileRef = B64E15B424EA383F00E8AD3D /* apple2gs */; };
B64E15B824EC912200E8AD3D /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B64E15B624EC912200E8AD3D /* SlotView.xib */; };
B65593B124ECB61800722E0C /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B65593B024ECB61800722E0C /* SlotViewController.m */; };
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258124E99BEB005FB8FF /* Assets.xcassets */; };
B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258324E99BEB005FB8FF /* MainMenu.xib */; };
@ -15,7 +21,16 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2gs.plist; sourceTree = "<group>"; };
B64E15A524E9B34700E8AD3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Models.plist; sourceTree = "<group>"; };
B64E15A724EA1D5300E8AD3D /* ROMBrowserDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ROMBrowserDelegate.h; sourceTree = "<group>"; };
B64E15A824EA1D5300E8AD3D /* ROMBrowserDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ROMBrowserDelegate.m; sourceTree = "<group>"; };
B64E15AA24EA1FD400E8AD3D /* SlotBrowserDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlotBrowserDelegate.h; sourceTree = "<group>"; };
B64E15AB24EA1FD400E8AD3D /* SlotBrowserDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlotBrowserDelegate.m; sourceTree = "<group>"; };
B64E15B424EA383F00E8AD3D /* apple2gs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = apple2gs; sourceTree = "<group>"; };
B64E15B724EC912200E8AD3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MA2ME/Base.lproj/SlotView.xib; sourceTree = "<group>"; };
B65593AF24ECB61800722E0C /* SlotViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlotViewController.h; sourceTree = "<group>"; };
B65593B024ECB61800722E0C /* SlotViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlotViewController.m; sourceTree = "<group>"; };
B6BA257B24E99BE9005FB8FF /* MA2ME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MA2ME.app; sourceTree = BUILT_PRODUCTS_DIR; };
B6BA257E24E99BE9005FB8FF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
B6BA257F24E99BE9005FB8FF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@ -37,9 +52,21 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
B64E15AF24EA365E00E8AD3D /* Resources */ = {
isa = PBXGroup;
children = (
B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */,
B64E15B424EA383F00E8AD3D /* apple2gs */,
B64E15A424E9B34700E8AD3D /* Models.plist */,
);
path = Resources;
sourceTree = "<group>";
};
B6BA257224E99BE9005FB8FF = {
isa = PBXGroup;
children = (
B65593AF24ECB61800722E0C /* SlotViewController.h */,
B65593B024ECB61800722E0C /* SlotViewController.m */,
B6BA257D24E99BE9005FB8FF /* MA2ME */,
B6BA257C24E99BE9005FB8FF /* Products */,
);
@ -58,12 +85,17 @@
children = (
B6BA257E24E99BE9005FB8FF /* AppDelegate.h */,
B6BA257F24E99BE9005FB8FF /* AppDelegate.m */,
B64E15A424E9B34700E8AD3D /* Models.plist */,
B6BA258124E99BEB005FB8FF /* Assets.xcassets */,
B6BA258324E99BEB005FB8FF /* MainMenu.xib */,
B64E15A724EA1D5300E8AD3D /* ROMBrowserDelegate.h */,
B64E15A824EA1D5300E8AD3D /* ROMBrowserDelegate.m */,
B64E15AA24EA1FD400E8AD3D /* SlotBrowserDelegate.h */,
B64E15AB24EA1FD400E8AD3D /* SlotBrowserDelegate.m */,
B64E15AF24EA365E00E8AD3D /* Resources */,
B6BA258624E99BEB005FB8FF /* Info.plist */,
B6BA258724E99BEB005FB8FF /* main.m */,
B6BA258924E99BEB005FB8FF /* MA2ME.entitlements */,
B6BA258324E99BEB005FB8FF /* MainMenu.xib */,
B64E15B624EC912200E8AD3D /* SlotView.xib */,
);
path = MA2ME;
sourceTree = "<group>";
@ -127,6 +159,9 @@
files = (
B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */,
B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */,
B64E15B824EC912200E8AD3D /* SlotView.xib in Resources */,
B64E15B524EA383F00E8AD3D /* apple2gs in Resources */,
B60A6E0C24ECE23F004B7EEF /* apple2gs.plist in Resources */,
B64E15A624E9B34700E8AD3D /* Models.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -139,7 +174,10 @@
buildActionMask = 2147483647;
files = (
B6BA258824E99BEB005FB8FF /* main.m in Sources */,
B64E15AC24EA1FD400E8AD3D /* SlotBrowserDelegate.m in Sources */,
B64E15A924EA1D5300E8AD3D /* ROMBrowserDelegate.m in Sources */,
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */,
B65593B124ECB61800722E0C /* SlotViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -154,6 +192,14 @@
name = Models.plist;
sourceTree = "<group>";
};
B64E15B624EC912200E8AD3D /* SlotView.xib */ = {
isa = PBXVariantGroup;
children = (
B64E15B724EC912200E8AD3D /* Base */,
);
name = SlotView.xib;
sourceTree = "<group>";
};
B6BA258324E99BEB005FB8FF /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (

View File

@ -7,13 +7,19 @@
//
#import "AppDelegate.h"
#import "SlotBrowserDelegate.h"
#import "SlotViewController.h"
@interface AppDelegate ()
@property (weak) IBOutlet NSWindow *window;
@property (strong) IBOutlet SlotBrowserDelegate *slotDelegate;
@property (strong) IBOutlet SlotViewController *slotController;
@property (weak) IBOutlet NSView *modelView;
@property (weak) IBOutlet NSView *slotView;
/* kvo */
@property NSString *commandLine;
@ -42,24 +48,40 @@ static NSString *kMyContext = @"kMyContext";
NSView *view = [_window contentView];
NSRect frame = [view frame];
frame.origin.y += frame.size.height - 200;
frame.size.height = 200;
NSBrowser *browser = [[NSBrowser alloc] initWithFrame: frame];
NSRect frame;
NSBrowser *browser = nil;
frame = [_modelView frame];
browser = [[NSBrowser alloc] initWithFrame: frame];
[browser setMaxVisibleColumns: 2];
[browser setTakesTitleFromPreviousColumn: YES];
[browser setTitled: NO];
[browser setAllowsEmptySelection: NO];
[browser setDelegate: self];
[browser setAction: @selector(modelClick:)];
[view addSubview: browser];
[browser setTitled: YES]; // NSBrowser title bug.
#if 0
frame = [_slotView frame];
browser = [[NSBrowser alloc] initWithFrame: frame];
[browser setMaxVisibleColumns: 2];
[browser setTakesTitleFromPreviousColumn: YES];
[browser setTitled: NO];
[browser setDelegate: _slotDelegate];
//[browser setAction: @selector(modelClick:)];
[view addSubview: browser];
[browser setTitled: YES]; // NSBrowser title bug.
[_slotDelegate setBrowser: browser];
#endif
[_slotView addSubview: [_slotController view]];
[self addObserver: self forKeyPath: @"mameROM" options:0 context: (__bridge void * _Nullable)(kMyContext)];
[self addObserver: self forKeyPath: @"mameWindow" options:0 context: (__bridge void * _Nullable)(kMyContext)];
[self addObserver: self forKeyPath: @"mameSquarePixels" options:0 context: (__bridge void * _Nullable)(kMyContext)];
@ -106,6 +128,7 @@ static NSString *kMyContext = @"kMyContext";
// -nounevenstretch -video soft
if (_mameWindow && _mameSquarePixels) {
[argv addObject: @"-nomax"];
if ([_mameROM hasPrefix: @"apple2gs"]) {
[argv addObject: @"-resolution"];
[argv addObject: @"704x462"];
@ -128,8 +151,12 @@ static NSString *kMyContext = @"kMyContext";
-(IBAction)modelClick:(id)sender {
NSDictionary *item = [self itemForBrowser: sender];
[self setMameROM: [item objectForKey: @"Mame"]];
NSString *model = [item objectForKey: @"Mame"];
[self setMameROM: model];
// [self buildCommandLine];
[_slotDelegate setModel: model];
}
#pragma mark NSBrowser
@ -184,9 +211,14 @@ static NSString *kMyContext = @"kMyContext";
return column == 0 ? @"Model" : @"Submodel";
}
#if 0
- (id)browser:(NSBrowser *)browser child:(NSInteger)index ofItem:(id)item {
return nil;
}
-(id)rootItemForBrowser:(NSBrowser *)browser {
return _browserItems;
}
#endif
- (NSInteger)browser:(NSBrowser *)sender numberOfRowsInColumn:(NSInteger)column {
@ -195,4 +227,5 @@ static NSString *kMyContext = @"kMyContext";
}
@end

View File

@ -15,6 +15,10 @@
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
<connections>
<outlet property="modelView" destination="jf6-4d-ms1" id="HUy-kg-cCk"/>
<outlet property="slotController" destination="CYF-Xd-EdF" id="14d-v7-98c"/>
<outlet property="slotDelegate" destination="xmI-g8-lsK" id="hrE-aS-P30"/>
<outlet property="slotView" destination="cFJ-CO-Dzm" id="u9o-0O-D5i"/>
<outlet property="window" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
</connections>
</customObject>
@ -684,18 +688,18 @@
<window title="MA2ME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="335" y="390" width="718" height="547"/>
<rect key="contentRect" x="335" y="390" width="718" height="947"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="EiT-Mj-1SZ">
<rect key="frame" x="0.0" y="0.0" width="718" height="547"/>
<rect key="frame" x="0.0" y="0.0" width="718" height="947"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jf6-4d-ms1">
<rect key="frame" x="0.0" y="347" width="718" height="200"/>
<rect key="frame" x="0.0" y="747" width="718" height="200"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
</customView>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ymx-Ml-AsE">
<rect key="frame" x="18" y="323" width="71" height="18"/>
<rect key="frame" x="18" y="102" width="71" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Window" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="McP-bf-5Zu">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -706,7 +710,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bkv-BK-7TC">
<rect key="frame" x="18" y="303" width="62" height="18"/>
<rect key="frame" x="18" y="82" width="62" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Debug" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="WPk-zw-UFD">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -718,7 +722,7 @@
</button>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g2S-iX-zTe">
<rect key="frame" x="0.0" y="0.0" width="718" height="52"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" selectable="YES" allowsUndo="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="vbg-gA-6dg">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -730,14 +734,14 @@
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ug9-kz-ZSS">
<rect key="frame" x="621" y="53" width="85" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<buttonCell key="cell" type="push" title="Launch" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="evD-kp-H2u">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QSr-Gw-xV3">
<rect key="frame" x="18" y="283" width="91" height="18"/>
<rect key="frame" x="18" y="62" width="91" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="No Throttle" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Kgs-UM-HeU">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -748,7 +752,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PUB-So-kAo">
<rect key="frame" x="131" y="323" width="104" height="18"/>
<rect key="frame" x="131" y="102" width="104" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="Square Pixels" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Bj2-i5-4h1">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -758,9 +762,22 @@
<binding destination="Voe-Tx-rLC" name="value" keyPath="self.mameSquarePixels" id="rNk-1d-QZl"/>
</connections>
</button>
<pathControl verticalHuggingPriority="750" fixedFrame="YES" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4bN-As-LRL">
<rect key="frame" x="398" y="96" width="204" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<pathCell key="cell" selectable="YES" editable="YES" alignment="left" placeholderString="Floppy 1" pathStyle="popUp" id="3aA-ge-m45">
<font key="font" metaFont="system"/>
</pathCell>
</pathControl>
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cFJ-CO-Dzm">
<rect key="frame" x="20" y="169" width="306" height="570"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</customView>
</subviews>
</view>
<point key="canvasLocation" x="754" y="211.5"/>
<point key="canvasLocation" x="769" y="196.5"/>
</window>
<customObject id="xmI-g8-lsK" customClass="SlotBrowserDelegate"/>
<viewController title="Slot View" nibName="SlotView" id="CYF-Xd-EdF" customClass="SlotViewController"/>
</objects>
</document>

View File

@ -0,0 +1,524 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="SlotViewController">
<connections>
<outlet property="aux_menu" destination="3kq-qn-7YR" id="wic-Ry-yAf"/>
<outlet property="exp_menu" destination="San-wP-1ez" id="X7u-dM-xrI"/>
<outlet property="game_menu" destination="K8G-bZ-6mZ" id="IeQ-ZT-5F6"/>
<outlet property="modem_menu" destination="KHf-kC-BpZ" id="Qab-mA-anC"/>
<outlet property="printer_menu" destination="sTp-en-8Wd" id="zeu-LF-6mV"/>
<outlet property="ram_array" destination="RPu-My-wum" id="nZz-MO-ovx"/>
<outlet property="ram_menu" destination="Yks-M5-vi0" id="h5y-Un-jYJ"/>
<outlet property="rs232_menu" destination="6ln-U2-0Pi" id="7CT-OE-idV"/>
<outlet property="sl0_menu" destination="Jw1-t7-YyU" id="BB5-6y-zyf"/>
<outlet property="sl1_menu" destination="bta-RS-JT4" id="cpI-db-kzX"/>
<outlet property="sl2_menu" destination="cDU-b1-x5a" id="WtL-Fo-Q1B"/>
<outlet property="sl3_menu" destination="aSh-cs-0Nn" id="24o-66-LjH"/>
<outlet property="sl4_menu" destination="kU5-cR-hPZ" id="STc-6r-nxH"/>
<outlet property="sl5_menu" destination="8z4-8f-kLU" id="cLl-Ee-LUD"/>
<outlet property="sl6_menu" destination="GLb-F4-PWe" id="ubk-pt-e1Q"/>
<outlet property="sl7_menu" destination="IV2-3M-qfw" id="s5k-4G-w4r"/>
<outlet property="sl8_menu" destination="gOI-9u-PBt" id="02F-U5-Ipi"/>
<outlet property="view" destination="OM3-7F-wiN" id="yre-ts-aHj"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<gridView autoresizesSubviews="NO" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="OM3-7F-wiN">
<rect key="frame" x="0.0" y="0.0" width="306" height="570"/>
<rows>
<gridRow yPlacement="center" height="30" id="tHD-ui-hIL"/>
<gridRow yPlacement="center" height="30" id="Ccd-U2-Gx5">
<connections>
<binding destination="-2" name="hidden" keyPath="machine.sl0" id="YsR-kI-yrh">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string>
</dictionary>
</binding>
</connections>
</gridRow>
<gridRow yPlacement="center" height="30" id="JGU-aq-3uw"/>
<gridRow yPlacement="center" height="30" id="gVW-Ya-phU">
<connections>
<binding destination="-2" name="hidden" keyPath="machine.sl2" id="AgS-hm-ePr">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string>
</dictionary>
</binding>
</connections>
</gridRow>
<gridRow yPlacement="center" height="30" id="3fP-qp-zmi"/>
<gridRow yPlacement="center" height="30" id="86u-5p-UT6"/>
<gridRow yPlacement="center" height="30" id="Wdg-xb-xQx"/>
<gridRow yPlacement="center" height="30" id="ein-Fe-vBw"/>
<gridRow yPlacement="center" height="30" id="qjB-2w-AWE"/>
<gridRow yPlacement="center" height="30" id="n86-b0-b40"/>
<gridRow yPlacement="center" height="30" id="EEX-dh-jwn">
<connections>
<binding destination="-2" name="hidden" keyPath="machine.exp" id="EOZ-lS-QHF">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string>
</dictionary>
</binding>
</connections>
</gridRow>
<gridRow yPlacement="center" height="30" id="OaZ-ZQ-gKK">
<connections>
<binding destination="-2" name="hidden" keyPath="machine.aux" id="OlF-v7-JZx">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string>
</dictionary>
</binding>
</connections>
</gridRow>
<gridRow yPlacement="center" height="30" id="wQi-Oz-7Ye"/>
<gridRow yPlacement="center" height="30" id="gr2-eY-995"/>
<gridRow yPlacement="center" height="30" id="1xN-lm-s4l"/>
<gridRow yPlacement="center" height="30" id="M2s-qn-SIT"/>
</rows>
<columns>
<gridColumn xPlacement="fill" width="100" id="zpB-Rf-dWg"/>
<gridColumn xPlacement="fill" width="200" id="6Vn-yh-FoQ"/>
</columns>
<gridCells>
<gridCell row="tHD-ui-hIL" column="zpB-Rf-dWg" id="deJ-sv-Hb7">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nHa-QG-HjJ">
<rect key="frame" x="-2" y="547" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="RAM" id="CvY-8m-Ni9">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="tHD-ui-hIL" column="6Vn-yh-FoQ" id="dak-Ha-01u">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Yks-M5-vi0">
<rect key="frame" x="104" y="542" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="92u-m2-3yN" id="XFo-KF-ueS">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="k8O-sG-Qld">
<items>
<menuItem title="Item 1" state="on" id="92u-m2-3yN"/>
<menuItem title="Item 2" id="dPG-tR-M4A"/>
<menuItem title="Item 3" id="q2n-oZ-46s"/>
</items>
</menu>
<connections>
<action selector="ram_menu_action:" target="-2" id="j5h-42-bcI"/>
</connections>
</popUpButtonCell>
<connections>
<binding destination="-2" name="content" keyPath="machine.RAM" id="1PS-Q2-Ky4"/>
</connections>
</popUpButton>
</gridCell>
<gridCell row="Ccd-U2-Gx5" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="QI6-Cz-URX">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v8c-Rp-Mnt">
<rect key="frame" x="-2" y="511" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 0" id="EF7-NX-RMW">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="Ccd-U2-Gx5" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="0KQ-Qt-8KP">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jw1-t7-YyU">
<rect key="frame" x="104" y="506" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="8Iv-mH-mEI" id="47g-IO-4Xt">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="nrR-Tr-UaW">
<items>
<menuItem title="Item 1" state="on" id="8Iv-mH-mEI"/>
<menuItem title="Item 2" id="Prr-6W-NWp"/>
<menuItem title="Item 3" id="xz3-bi-5IM"/>
</items>
</menu>
</popUpButtonCell>
<connections>
<binding destination="-2" name="content" keyPath="machine.sl0" id="2aW-3q-Mvt"/>
</connections>
</popUpButton>
</gridCell>
<gridCell row="JGU-aq-3uw" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="Y1R-Ob-g2b">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0gP-wH-DVr">
<rect key="frame" x="-2" y="475" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 1" id="bfg-tf-E34">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="JGU-aq-3uw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="v8q-Rj-E4q">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bta-RS-JT4">
<rect key="frame" x="104" y="470" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="dXO-at-nGw" id="kNn-6b-ysf">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="4ah-BI-RD5">
<items>
<menuItem title="Item 1" state="on" id="dXO-at-nGw"/>
<menuItem title="Item 2" id="UZY-8b-qmE"/>
<menuItem title="Item 3" id="zxA-OM-BIY"/>
</items>
</menu>
</popUpButtonCell>
<connections>
<binding destination="-2" name="content" keyPath="machine.sl1" id="wQI-oy-SYz"/>
</connections>
</popUpButton>
</gridCell>
<gridCell row="gVW-Ya-phU" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="tpv-Yc-qii">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EHZ-ol-QVz">
<rect key="frame" x="-2" y="439" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 2" id="FlL-pN-rn7">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="gVW-Ya-phU" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="OzN-rM-Pgi">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cDU-b1-x5a">
<rect key="frame" x="104" y="434" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="vCY-qF-aB3" id="jvL-SH-nvG">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="Hp6-Gt-pVV">
<items>
<menuItem title="Item 1" state="on" id="vCY-qF-aB3"/>
<menuItem title="Item 2" id="pbR-nc-itb"/>
<menuItem title="Item 3" id="L8Z-vH-OCa"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="3fP-qp-zmi" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="LbW-TT-AQ7">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zGs-8d-L0S">
<rect key="frame" x="-2" y="403" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 3" id="KZK-h8-8cw">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="3fP-qp-zmi" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="h8H-TB-p2z">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aSh-cs-0Nn">
<rect key="frame" x="104" y="398" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="2yS-4z-8OR" id="HaE-TD-5Wx">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="zka-z5-hPa">
<items>
<menuItem title="Item 1" state="on" id="2yS-4z-8OR"/>
<menuItem title="Item 2" id="q4H-Fz-zVr"/>
<menuItem title="Item 3" id="HtQ-6y-S25"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="86u-5p-UT6" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="hJR-nJ-yYi">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zsX-jd-6ba">
<rect key="frame" x="-2" y="367" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 4" id="WXv-RF-e7f">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="86u-5p-UT6" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="dHu-cL-FyO">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kU5-cR-hPZ">
<rect key="frame" x="104" y="362" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="NaS-CV-XQm" id="rOP-eY-UKe">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="Iwv-z3-oJb">
<items>
<menuItem title="Item 1" state="on" id="NaS-CV-XQm"/>
<menuItem title="Item 2" id="ovb-SG-Eg4"/>
<menuItem title="Item 3" id="GVh-L4-3Cp"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="Wdg-xb-xQx" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="dsM-t5-8ng">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ANg-c1-hGf">
<rect key="frame" x="-2" y="331" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 5" id="EhN-EV-65V">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="Wdg-xb-xQx" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="ffm-pA-jjo">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8z4-8f-kLU">
<rect key="frame" x="104" y="326" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="gH7-4J-xsg" id="cmc-Gf-Slp">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="Cma-00-qCY">
<items>
<menuItem title="Item 1" state="on" id="gH7-4J-xsg"/>
<menuItem title="Item 2" id="meM-WH-GgP"/>
<menuItem title="Item 3" id="ILg-Ld-9Ri"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="ein-Fe-vBw" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="PSw-Jx-eS2">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Cr1-RK-Z7V">
<rect key="frame" x="-2" y="295" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 6" id="uzy-th-5Yc">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="ein-Fe-vBw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="FsV-vO-KAs">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GLb-F4-PWe">
<rect key="frame" x="104" y="290" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="VaX-M9-Op0" id="CjU-rC-HUT">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="3xq-Hn-icN">
<items>
<menuItem title="Item 1" state="on" id="VaX-M9-Op0"/>
<menuItem title="Item 2" id="Fhy-5D-e6z"/>
<menuItem title="Item 3" id="9jw-LA-666"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="qjB-2w-AWE" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="1WE-Mm-0O3">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3Ia-XB-C6D">
<rect key="frame" x="-2" y="259" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 7" id="32J-6e-nRV">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="qjB-2w-AWE" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Yvr-uR-Hr5">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IV2-3M-qfw">
<rect key="frame" x="104" y="254" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="8nb-Bq-4R4" id="nKb-Ar-bCb">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="R2a-Mg-LsY">
<items>
<menuItem title="Item 1" state="on" id="8nb-Bq-4R4"/>
<menuItem title="Item 2" id="rFT-bC-KE9"/>
<menuItem title="Item 3" id="4jB-gp-lYT"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="n86-b0-b40" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="BVb-xz-z6n">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Mv0-Yd-EQg">
<rect key="frame" x="-2" y="223" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 8" id="dCR-2L-b9S">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="n86-b0-b40" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="HTD-dN-P6S">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gOI-9u-PBt">
<rect key="frame" x="104" y="218" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="sDW-p4-zeV" id="CiO-8J-xSZ">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="WDv-1D-6zB">
<items>
<menuItem title="Item 1" state="on" id="sDW-p4-zeV"/>
<menuItem title="Item 2" id="cam-cj-JZX"/>
<menuItem title="Item 3" id="ERp-dw-eVV"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="EEX-dh-jwn" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="iRl-IX-FSD">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Avf-lX-f2Q">
<rect key="frame" x="-2" y="187" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Expansion" id="PEU-OV-910">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="EEX-dh-jwn" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Ehv-aA-Llc">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="San-wP-1ez">
<rect key="frame" x="104" y="182" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="jtv-Qx-oVD" id="42u-b4-3kx">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="1hM-MS-UEz">
<items>
<menuItem title="Item 1" state="on" id="jtv-Qx-oVD"/>
<menuItem title="Item 2" id="UeB-A1-nyv"/>
<menuItem title="Item 3" id="GyZ-dv-MS4"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="OaZ-ZQ-gKK" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="wRB-Wh-7kG">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EMz-7i-H38">
<rect key="frame" x="-2" y="151" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Auxiliary" id="SoV-Qy-h2g">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="OaZ-ZQ-gKK" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="bx6-Rc-x2V">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3kq-qn-7YR">
<rect key="frame" x="104" y="146" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="vWX-Cb-ldP" id="NqP-Uq-Knv">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="7Ef-KS-ulj">
<items>
<menuItem title="Item 1" state="on" id="vWX-Cb-ldP"/>
<menuItem title="Item 2" id="Yg1-xZ-vXq"/>
<menuItem title="Item 3" id="BwC-w9-hBy"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="wQi-Oz-7Ye" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="KoQ-xV-fQu">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAG-sJ-u2B">
<rect key="frame" x="-2" y="115" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="RS 232" id="iG2-rY-VDv">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="wQi-Oz-7Ye" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="zWk-jd-i0V">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6ln-U2-0Pi">
<rect key="frame" x="104" y="110" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="uu3-rr-iD8" id="daT-eX-4Vu">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="fMw-mh-Qfi">
<items>
<menuItem title="Item 1" state="on" id="uu3-rr-iD8"/>
<menuItem title="Item 2" id="f1r-MS-itp"/>
<menuItem title="Item 3" id="WhP-Di-CHP"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="gr2-eY-995" column="zpB-Rf-dWg" id="xIE-bJ-mzr">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Svb-pu-WPf">
<rect key="frame" x="-2" y="79" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Game I/O" id="2Gc-mV-zCZ">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="gr2-eY-995" column="6Vn-yh-FoQ" id="nhy-Gp-GLL">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="K8G-bZ-6mZ">
<rect key="frame" x="104" y="74" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="GOm-Tf-6qc" id="Mig-Nu-gZB">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="faU-zS-LgN">
<items>
<menuItem title="Item 1" state="on" id="GOm-Tf-6qc"/>
<menuItem title="Item 2" id="XgG-U0-2G7"/>
<menuItem title="Item 3" id="4Ea-aE-sB1"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="1xN-lm-s4l" column="zpB-Rf-dWg" id="vPV-KN-NNp">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="31K-iE-RCe">
<rect key="frame" x="-2" y="43" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Printer" id="QZI-H7-i8m">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="1xN-lm-s4l" column="6Vn-yh-FoQ" id="KRc-Z8-drK">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sTp-en-8Wd">
<rect key="frame" x="104" y="38" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="TU9-ed-ofw" id="1OL-aw-xNL">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="MSP-Iu-ix3">
<items>
<menuItem title="Item 1" state="on" id="TU9-ed-ofw"/>
<menuItem title="Item 2" id="7wI-Tn-rE0"/>
<menuItem title="Item 3" id="bQc-pc-ccM"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
<gridCell row="M2s-qn-SIT" column="zpB-Rf-dWg" id="8R2-aA-mLq">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MH0-Nk-5Py">
<rect key="frame" x="-2" y="7" width="104" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Modem" id="HQq-VN-Ju9">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="M2s-qn-SIT" column="6Vn-yh-FoQ" id="idI-pW-e7v">
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KHf-kC-BpZ">
<rect key="frame" x="104" y="2" width="205" height="25"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="CxO-3g-va1" id="jDr-6p-C7y">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="lxi-Z0-ya6">
<items>
<menuItem title="Item 1" state="on" id="CxO-3g-va1"/>
<menuItem title="Item 2" id="OpR-vy-iL5"/>
<menuItem title="Item 3" id="xvH-9B-ge5"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
</gridCell>
</gridCells>
<point key="canvasLocation" x="268" y="71"/>
</gridView>
<arrayController id="RPu-My-wum" userLabel="RAM Array Controller"/>
<customObject id="aRt-yJ-VXG" customClass="NSArray"/>
</objects>
</document>

View File

@ -0,0 +1,20 @@
//
// ROMBrowserDelegate.h
// MA2ME
//
// Created by Kelvin Sherlock on 8/16/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface ROMBrowserDelegate : NSObject <NSBrowserDelegate>
@property NSString *model;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,98 @@
//
// ROMBrowserDelegate.m
// MA2ME
//
// Created by Kelvin Sherlock on 8/16/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import "ROMBrowserDelegate.h"
@interface ROMBrowserDelegate()
@property NSArray *data;
@end
@implementation ROMBrowserDelegate
-(void)awakeFromNib {
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource: @"Models" ofType: @"plist"];
_data = [NSArray arrayWithContentsOfFile: path];
}
-(IBAction)click:(id)sender {
NSDictionary *item = [self itemForBrowser: sender];
[self setModel: [item objectForKey: @"Mame"]];
}
#pragma mark NSBrowser
-(NSDictionary *)itemForBrowser: (NSBrowser *)browser {
NSIndexPath *path = [browser selectionIndexPath];
NSArray *data = _data;
NSDictionary *item = nil;
NSUInteger l = [path length];
for (NSUInteger i = 0; i < l; ++i) {
NSUInteger ix = [path indexAtPosition: i];
if (ix > [data count]) return nil;
item = [data objectAtIndex: ix];
data = [item objectForKey: @"Children"];
}
return item;
}
-(NSArray *)itemsForBrowser: (NSBrowser *)browser column: (NSInteger) column {
NSArray *data = _data;
for (unsigned i = 0; i < column; ++i) {
NSInteger ix = [browser selectedRowInColumn: i];
if (ix < 0) return 0;
NSDictionary *item = [data objectAtIndex: ix];
data = [item objectForKey: @"Children"];
if (!data) return 0;
}
return data;
}
- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(NSInteger)row column:(NSInteger)column {
NSArray *data = [self itemsForBrowser: sender column: column];
if (!data || row >= [data count]) return;
NSDictionary *item = [data objectAtIndex: row];
NSBrowserCell *bc = (NSBrowserCell *)cell;
[bc setStringValue: [item objectForKey: @"Name"]];
[bc setLeaf: ![item objectForKey: @"Children"]];
}
- (NSString *)browser:(NSBrowser *)sender titleOfColumn:(NSInteger)column {
return column == 0 ? @"Model" : @"";
}
#if 0
- (id)browser:(NSBrowser *)browser child:(NSInteger)index ofItem:(id)item {
return nil;
}
#endif
- (NSInteger)browser:(NSBrowser *)sender numberOfRowsInColumn:(NSInteger)column {
NSArray *data = [self itemsForBrowser: sender column: column];
return [data count];
}
@end

View File

@ -134,6 +134,12 @@
<string>apple3</string>
</dict>
<dict>
<key>Name</key>
<string>Laser //c</string>
<key>Mame</key>
<string>laser2c</string>
</dict>
<dict>
<key>Name</key>
<string>Laser 128</string>
@ -151,16 +157,21 @@
<key>Name</key>
<string>Laser 128 EX</string>
<key>Mame</key>
<string>laser128ex</string>
<string>las128ex</string>
</dict>
<dict>
<key>Name</key>
<string>Laser 128 EX2</string>
<key>Mame</key>
<string>laser128e2</string>
<string>las128e2</string>
</dict>
</array>
</dict>
<dict>
<key>Name</key>
<string>Franklin Ace 100</string>
<key>Mame</key>
<string>ace100</string>
</dict>
</array>
</plist>

2193
MA2ME/Resources/ace100.plist Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>apple1</string>
<key>description</key>
<string>Apple I</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>4096</integer>
<key>description</key>
<string>4K</string>
</dict>
<dict>
<key>value</key>
<integer>8192</integer>
<key>description</key>
<string>8K</string>
</dict>
<dict>
<key>value</key>
<integer>12288</integer>
<key>description</key>
<string>12K</string>
</dict>
<dict>
<key>value</key>
<integer>16384</integer>
<key>description</key>
<string>16K</string>
</dict>
<dict>
<key>value</key>
<integer>20480</integer>
<key>description</key>
<string>20K</string>
</dict>
<dict>
<key>value</key>
<integer>24576</integer>
<key>description</key>
<string>24K</string>
</dict>
<dict>
<key>value</key>
<integer>28672</integer>
<key>description</key>
<string>28K</string>
</dict>
<dict>
<key>value</key>
<integer>32768</integer>
<key>description</key>
<string>32K</string>
</dict>
<dict>
<key>value</key>
<integer>36864</integer>
<key>description</key>
<string>36K</string>
</dict>
<dict>
<key>value</key>
<integer>40960</integer>
<key>description</key>
<string>40K</string>
</dict>
<dict>
<key>value</key>
<integer>45056</integer>
<key>description</key>
<string>44K</string>
</dict>
<dict>
<key>value</key>
<integer>49152</integer>
<key>description</key>
<string>48K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>exp</key>
<array>
<dict>
<key>value</key>
<string>cffa</string>
<key>description</key>
<string>CFFA Compact Flash for Apple I</string>
</dict>
<dict>
<key>value</key>
<string>cassette</string>
<key>description</key>
<string>Apple I cassette board</string>
</dict>
</array>
</dict>
</plist>

2193
MA2ME/Resources/apple2.plist Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>apple2c</string>
<key>description</key>
<string>Apple //c</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>131072</integer>
<key>description</key>
<string>128K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>gameio</key>
<array>
<dict>
<key>value</key>
<string>compeyes</string>
<key>description</key>
<string>Digital Vision ComputerEyes</string>
</dict>
<dict>
<key>value</key>
<string>paddles</string>
<key>description</key>
<string>Apple II paddles</string>
</dict>
<dict>
<key>value</key>
<string>joy</string>
<key>description</key>
<string>Apple II analog joysticks</string>
</dict>
</array>
<key>printer</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
<key>modem</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>apple2cp</string>
<key>description</key>
<string>Apple //c Plus</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>131072</integer>
<key>description</key>
<string>128K</string>
</dict>
<dict>
<key>value</key>
<integer>393216</integer>
<key>description</key>
<string>384K</string>
</dict>
<dict>
<key>value</key>
<integer>655360</integer>
<key>description</key>
<string>640K</string>
</dict>
<dict>
<key>value</key>
<integer>917504</integer>
<key>description</key>
<string>896K</string>
</dict>
<dict>
<key>value</key>
<integer>1179648</integer>
<key>description</key>
<string>1152K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>gameio</key>
<array>
<dict>
<key>value</key>
<string>compeyes</string>
<key>description</key>
<string>Digital Vision ComputerEyes</string>
</dict>
<dict>
<key>value</key>
<string>paddles</string>
<key>description</key>
<string>Apple II paddles</string>
</dict>
<dict>
<key>value</key>
<string>joy</string>
<key>description</key>
<string>Apple II analog joysticks</string>
</dict>
</array>
<key>printer</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
<key>modem</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>Name</key>
<string>RS232 Loopback</string>
<key>Mame</key>
<string>dec_loopback</string>
</dict>
<dict>
<key>Name</key>
<string>IE15 Terminal</string>
<key>Mame</key>
<string>ie15</string>
</dict>
<dict>
<key>Name</key>
<string>Serial Keyboard</string>
<key>Mame</key>
<string>keyboard</string>
</dict>
</array>
</plist>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>apple3</string>
<key>description</key>
<string>Apple ///</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>131072</integer>
<key>description</key>
<string>128K</string>
</dict>
<dict>
<key>value</key>
<integer>524288</integer>
<key>description</key>
<string>512K</string>
</dict>
<dict>
<key>value</key>
<integer>262144</integer>
<key>description</key>
<string>256K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>sl1</key>
<array>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
</array>
<key>sl2</key>
<array>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
</array>
<key>sl3</key>
<array>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
</array>
<key>sl4</key>
<array>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
</array>
<key>rs232</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>las128e2</string>
<key>description</key>
<string>Laser 128ex2 (version 6.1)</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>131072</integer>
<key>description</key>
<string>128K</string>
</dict>
<dict>
<key>value</key>
<integer>393216</integer>
<key>description</key>
<string>384K</string>
</dict>
<dict>
<key>value</key>
<integer>655360</integer>
<key>description</key>
<string>640K</string>
</dict>
<dict>
<key>value</key>
<integer>917504</integer>
<key>description</key>
<string>896K</string>
</dict>
<dict>
<key>value</key>
<integer>1179648</integer>
<key>description</key>
<string>1152K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>gameio</key>
<array>
<dict>
<key>value</key>
<string>compeyes</string>
<key>description</key>
<string>Digital Vision ComputerEyes</string>
</dict>
<dict>
<key>value</key>
<string>paddles</string>
<key>description</key>
<string>Apple II paddles</string>
</dict>
<dict>
<key>value</key>
<string>joy</string>
<key>description</key>
<string>Apple II analog joysticks</string>
</dict>
</array>
<key>printer</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
<key>modem</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,837 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>las128ex</string>
<key>description</key>
<string>Laser 128ex (version 4.5)</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>131072</integer>
<key>description</key>
<string>128K</string>
</dict>
<dict>
<key>value</key>
<integer>393216</integer>
<key>description</key>
<string>384K</string>
</dict>
<dict>
<key>value</key>
<integer>655360</integer>
<key>description</key>
<string>640K</string>
</dict>
<dict>
<key>value</key>
<integer>917504</integer>
<key>description</key>
<string>896K</string>
</dict>
<dict>
<key>value</key>
<integer>1179648</integer>
<key>description</key>
<string>1152K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>sl5</key>
<array>
<dict>
<key>value</key>
<string>byte8251</string>
<key>description</key>
<string>BYTE Serial Interface (8251 based)</string>
</dict>
<dict>
<key>value</key>
<string>applesurance</string>
<key>description</key>
<string>Applesurance Diagnostic Controller</string>
</dict>
<dict>
<key>value</key>
<string>ceyes2</string>
<key>description</key>
<string>Digital Vision ComputerEyes/2</string>
</dict>
<dict>
<key>value</key>
<string>ssprite</string>
<key>description</key>
<string>Synetix SuperSprite</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9958</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9958)</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9938</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9938)</string>
</dict>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>dx1</string>
<key>description</key>
<string>Decillonix DX-1</string>
</dict>
<dict>
<key>value</key>
<string>swyft</string>
<key>description</key>
<string>IAI SwyftCard</string>
</dict>
<dict>
<key>value</key>
<string>mcms1</string>
<key>description</key>
<string>Mountain Computer Music System (card 1)</string>
</dict>
<dict>
<key>value</key>
<string>scsi</string>
<key>description</key>
<string>Apple II SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>corvus</string>
<key>description</key>
<string>Corvus Flat Cable interface</string>
</dict>
<dict>
<key>value</key>
<string>aevm80</string>
<key>description</key>
<string>Applied Engineering Viewmaster 80</string>
</dict>
<dict>
<key>value</key>
<string>hsscsi</string>
<key>description</key>
<string>Apple II High-Speed SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi</string>
<key>description</key>
<string>E-Z Color Graphics Interface</string>
</dict>
<dict>
<key>value</key>
<string>ultratermenh</string>
<key>description</key>
<string>Videx UltraTerm (enhanced //e)</string>
</dict>
<dict>
<key>value</key>
<string>echoiiplus</string>
<key>description</key>
<string>Street Electronics Echo Plus</string>
</dict>
<dict>
<key>value</key>
<string>diskiiiwm</string>
<key>description</key>
<string>Apple Disk II IWM controller</string>
</dict>
<dict>
<key>value</key>
<string>parallel</string>
<key>description</key>
<string>Apple Parallel Interface Card</string>
</dict>
<dict>
<key>value</key>
<string>zipdrive</string>
<key>description</key>
<string>Zip Technologies ZipDrive</string>
</dict>
<dict>
<key>value</key>
<string>themill</string>
<key>description</key>
<string>Stellation Two The Mill</string>
</dict>
<dict>
<key>value</key>
<string>4play</string>
<key>description</key>
<string>4play Joystick Card (rev. B)</string>
</dict>
<dict>
<key>value</key>
<string>vulcan</string>
<key>description</key>
<string>Applied Engineering Vulcan IDE controller (//e version)</string>
</dict>
<dict>
<key>value</key>
<string>cffa202</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>arcbd</string>
<key>description</key>
<string>Third Millenium Engineering Arcade Board</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>vtc1</string>
<key>description</key>
<string>unknown Videoterm clone</string>
</dict>
<dict>
<key>value</key>
<string>ap16</string>
<key>description</key>
<string>IBS AP-16 80 column card</string>
</dict>
<dict>
<key>value</key>
<string>echoii</string>
<key>description</key>
<string>Street Electronics Echo II</string>
</dict>
<dict>
<key>value</key>
<string>videoterm</string>
<key>description</key>
<string>Videx Videoterm 80 Column Display</string>
</dict>
<dict>
<key>value</key>
<string>softcard</string>
<key>description</key>
<string>Microsoft SoftCard</string>
</dict>
<dict>
<key>value</key>
<string>twarp</string>
<key>description</key>
<string>Applied Engineering TransWarp</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>memexp</string>
<key>description</key>
<string>Apple II Memory Expansion Card</string>
</dict>
<dict>
<key>value</key>
<string>aesms</string>
<key>description</key>
<string>Applied Engineering Super Music Synthesizer</string>
</dict>
<dict>
<key>value</key>
<string>ramfactor</string>
<key>description</key>
<string>Applied Engineering RamFactor</string>
</dict>
<dict>
<key>value</key>
<string>alfam2</string>
<key>description</key>
<string>ALF MC1 / Apple Music II</string>
</dict>
<dict>
<key>value</key>
<string>ssc</string>
<key>description</key>
<string>Apple Super Serial Card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing13</string>
<key>description</key>
<string>Apple Disk II NG controller (13-sector)</string>
</dict>
<dict>
<key>value</key>
<string>mockingboard</string>
<key>description</key>
<string>Sweet Micro Systems Mockingboard</string>
</dict>
<dict>
<key>value</key>
<string>ultraterm</string>
<key>description</key>
<string>Videx UltraTerm (original)</string>
</dict>
<dict>
<key>value</key>
<string>diskii</string>
<key>description</key>
<string>Apple Disk II controller</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (65C02 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>ssbapple</string>
<key>description</key>
<string>Multitech Industrial SSB Apple speech card</string>
</dict>
<dict>
<key>value</key>
<string>sam</string>
<key>description</key>
<string>Don't Ask Software S.A.M.</string>
</dict>
<dict>
<key>value</key>
<string>phasor</string>
<key>description</key>
<string>Applied Engineering Phasor</string>
</dict>
<dict>
<key>value</key>
<string>midi</string>
<key>description</key>
<string>6850 MIDI card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing</string>
<key>description</key>
<string>Apple Disk II NG controller (16-sector)</string>
</dict>
<dict>
<key>value</key>
<string>ap16alt</string>
<key>description</key>
<string>IBS AP-16 80 column card (alt. version)</string>
</dict>
<dict>
<key>value</key>
<string>pcxport</string>
<key>description</key>
<string>Applied Engineering PC Transporter</string>
</dict>
<dict>
<key>value</key>
<string>tm2ho</string>
<key>description</key>
<string>Applied Engineering TimeMaster H.O.</string>
</dict>
<dict>
<key>value</key>
<string>mcms2</string>
<key>description</key>
<string>Mountain Computer Music System (card 2)</string>
</dict>
</array>
<key>sl7</key>
<array>
<dict>
<key>value</key>
<string>byte8251</string>
<key>description</key>
<string>BYTE Serial Interface (8251 based)</string>
</dict>
<dict>
<key>value</key>
<string>applesurance</string>
<key>description</key>
<string>Applesurance Diagnostic Controller</string>
</dict>
<dict>
<key>value</key>
<string>ceyes2</string>
<key>description</key>
<string>Digital Vision ComputerEyes/2</string>
</dict>
<dict>
<key>value</key>
<string>ssprite</string>
<key>description</key>
<string>Synetix SuperSprite</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9958</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9958)</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9938</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9938)</string>
</dict>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>dx1</string>
<key>description</key>
<string>Decillonix DX-1</string>
</dict>
<dict>
<key>value</key>
<string>swyft</string>
<key>description</key>
<string>IAI SwyftCard</string>
</dict>
<dict>
<key>value</key>
<string>mcms1</string>
<key>description</key>
<string>Mountain Computer Music System (card 1)</string>
</dict>
<dict>
<key>value</key>
<string>scsi</string>
<key>description</key>
<string>Apple II SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>corvus</string>
<key>description</key>
<string>Corvus Flat Cable interface</string>
</dict>
<dict>
<key>value</key>
<string>aevm80</string>
<key>description</key>
<string>Applied Engineering Viewmaster 80</string>
</dict>
<dict>
<key>value</key>
<string>hsscsi</string>
<key>description</key>
<string>Apple II High-Speed SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi</string>
<key>description</key>
<string>E-Z Color Graphics Interface</string>
</dict>
<dict>
<key>value</key>
<string>ultratermenh</string>
<key>description</key>
<string>Videx UltraTerm (enhanced //e)</string>
</dict>
<dict>
<key>value</key>
<string>echoiiplus</string>
<key>description</key>
<string>Street Electronics Echo Plus</string>
</dict>
<dict>
<key>value</key>
<string>diskiiiwm</string>
<key>description</key>
<string>Apple Disk II IWM controller</string>
</dict>
<dict>
<key>value</key>
<string>parallel</string>
<key>description</key>
<string>Apple Parallel Interface Card</string>
</dict>
<dict>
<key>value</key>
<string>zipdrive</string>
<key>description</key>
<string>Zip Technologies ZipDrive</string>
</dict>
<dict>
<key>value</key>
<string>themill</string>
<key>description</key>
<string>Stellation Two The Mill</string>
</dict>
<dict>
<key>value</key>
<string>4play</string>
<key>description</key>
<string>4play Joystick Card (rev. B)</string>
</dict>
<dict>
<key>value</key>
<string>vulcan</string>
<key>description</key>
<string>Applied Engineering Vulcan IDE controller (//e version)</string>
</dict>
<dict>
<key>value</key>
<string>cffa202</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>arcbd</string>
<key>description</key>
<string>Third Millenium Engineering Arcade Board</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>vtc1</string>
<key>description</key>
<string>unknown Videoterm clone</string>
</dict>
<dict>
<key>value</key>
<string>ap16</string>
<key>description</key>
<string>IBS AP-16 80 column card</string>
</dict>
<dict>
<key>value</key>
<string>echoii</string>
<key>description</key>
<string>Street Electronics Echo II</string>
</dict>
<dict>
<key>value</key>
<string>videoterm</string>
<key>description</key>
<string>Videx Videoterm 80 Column Display</string>
</dict>
<dict>
<key>value</key>
<string>softcard</string>
<key>description</key>
<string>Microsoft SoftCard</string>
</dict>
<dict>
<key>value</key>
<string>twarp</string>
<key>description</key>
<string>Applied Engineering TransWarp</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>memexp</string>
<key>description</key>
<string>Apple II Memory Expansion Card</string>
</dict>
<dict>
<key>value</key>
<string>aesms</string>
<key>description</key>
<string>Applied Engineering Super Music Synthesizer</string>
</dict>
<dict>
<key>value</key>
<string>ramfactor</string>
<key>description</key>
<string>Applied Engineering RamFactor</string>
</dict>
<dict>
<key>value</key>
<string>alfam2</string>
<key>description</key>
<string>ALF MC1 / Apple Music II</string>
</dict>
<dict>
<key>value</key>
<string>ssc</string>
<key>description</key>
<string>Apple Super Serial Card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing13</string>
<key>description</key>
<string>Apple Disk II NG controller (13-sector)</string>
</dict>
<dict>
<key>value</key>
<string>mockingboard</string>
<key>description</key>
<string>Sweet Micro Systems Mockingboard</string>
</dict>
<dict>
<key>value</key>
<string>ultraterm</string>
<key>description</key>
<string>Videx UltraTerm (original)</string>
</dict>
<dict>
<key>value</key>
<string>diskii</string>
<key>description</key>
<string>Apple Disk II controller</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (65C02 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>ssbapple</string>
<key>description</key>
<string>Multitech Industrial SSB Apple speech card</string>
</dict>
<dict>
<key>value</key>
<string>sam</string>
<key>description</key>
<string>Don't Ask Software S.A.M.</string>
</dict>
<dict>
<key>value</key>
<string>phasor</string>
<key>description</key>
<string>Applied Engineering Phasor</string>
</dict>
<dict>
<key>value</key>
<string>midi</string>
<key>description</key>
<string>6850 MIDI card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing</string>
<key>description</key>
<string>Apple Disk II NG controller (16-sector)</string>
</dict>
<dict>
<key>value</key>
<string>ap16alt</string>
<key>description</key>
<string>IBS AP-16 80 column card (alt. version)</string>
</dict>
<dict>
<key>value</key>
<string>pcxport</string>
<key>description</key>
<string>Applied Engineering PC Transporter</string>
</dict>
<dict>
<key>value</key>
<string>tm2ho</string>
<key>description</key>
<string>Applied Engineering TimeMaster H.O.</string>
</dict>
<dict>
<key>value</key>
<string>mcms2</string>
<key>description</key>
<string>Mountain Computer Music System (card 2)</string>
</dict>
</array>
<key>gameio</key>
<array>
<dict>
<key>value</key>
<string>compeyes</string>
<key>description</key>
<string>Digital Vision ComputerEyes</string>
</dict>
<dict>
<key>value</key>
<string>paddles</string>
<key>description</key>
<string>Apple II paddles</string>
</dict>
<dict>
<key>value</key>
<string>joy</string>
<key>description</key>
<string>Apple II analog joysticks</string>
</dict>
</array>
<key>printer</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
<key>modem</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,837 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>value</key>
<string>laser128</string>
<key>description</key>
<string>Laser 128 (version 4.2)</string>
<key>RAM</key>
<array>
<dict>
<key>value</key>
<integer>131072</integer>
<key>description</key>
<string>128K</string>
</dict>
<dict>
<key>value</key>
<integer>393216</integer>
<key>description</key>
<string>384K</string>
</dict>
<dict>
<key>value</key>
<integer>655360</integer>
<key>description</key>
<string>640K</string>
</dict>
<dict>
<key>value</key>
<integer>917504</integer>
<key>description</key>
<string>896K</string>
</dict>
<dict>
<key>value</key>
<integer>1179648</integer>
<key>description</key>
<string>1152K</string>
</dict>
</array>
<key>Resolution</key>
<array>
<integer>560</integer>
<integer>384</integer>
</array>
<key>sl5</key>
<array>
<dict>
<key>value</key>
<string>byte8251</string>
<key>description</key>
<string>BYTE Serial Interface (8251 based)</string>
</dict>
<dict>
<key>value</key>
<string>applesurance</string>
<key>description</key>
<string>Applesurance Diagnostic Controller</string>
</dict>
<dict>
<key>value</key>
<string>ceyes2</string>
<key>description</key>
<string>Digital Vision ComputerEyes/2</string>
</dict>
<dict>
<key>value</key>
<string>ssprite</string>
<key>description</key>
<string>Synetix SuperSprite</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9958</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9958)</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9938</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9938)</string>
</dict>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>dx1</string>
<key>description</key>
<string>Decillonix DX-1</string>
</dict>
<dict>
<key>value</key>
<string>swyft</string>
<key>description</key>
<string>IAI SwyftCard</string>
</dict>
<dict>
<key>value</key>
<string>mcms1</string>
<key>description</key>
<string>Mountain Computer Music System (card 1)</string>
</dict>
<dict>
<key>value</key>
<string>scsi</string>
<key>description</key>
<string>Apple II SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>corvus</string>
<key>description</key>
<string>Corvus Flat Cable interface</string>
</dict>
<dict>
<key>value</key>
<string>aevm80</string>
<key>description</key>
<string>Applied Engineering Viewmaster 80</string>
</dict>
<dict>
<key>value</key>
<string>hsscsi</string>
<key>description</key>
<string>Apple II High-Speed SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi</string>
<key>description</key>
<string>E-Z Color Graphics Interface</string>
</dict>
<dict>
<key>value</key>
<string>ultratermenh</string>
<key>description</key>
<string>Videx UltraTerm (enhanced //e)</string>
</dict>
<dict>
<key>value</key>
<string>echoiiplus</string>
<key>description</key>
<string>Street Electronics Echo Plus</string>
</dict>
<dict>
<key>value</key>
<string>diskiiiwm</string>
<key>description</key>
<string>Apple Disk II IWM controller</string>
</dict>
<dict>
<key>value</key>
<string>parallel</string>
<key>description</key>
<string>Apple Parallel Interface Card</string>
</dict>
<dict>
<key>value</key>
<string>zipdrive</string>
<key>description</key>
<string>Zip Technologies ZipDrive</string>
</dict>
<dict>
<key>value</key>
<string>themill</string>
<key>description</key>
<string>Stellation Two The Mill</string>
</dict>
<dict>
<key>value</key>
<string>4play</string>
<key>description</key>
<string>4play Joystick Card (rev. B)</string>
</dict>
<dict>
<key>value</key>
<string>vulcan</string>
<key>description</key>
<string>Applied Engineering Vulcan IDE controller (//e version)</string>
</dict>
<dict>
<key>value</key>
<string>cffa202</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>arcbd</string>
<key>description</key>
<string>Third Millenium Engineering Arcade Board</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>vtc1</string>
<key>description</key>
<string>unknown Videoterm clone</string>
</dict>
<dict>
<key>value</key>
<string>ap16</string>
<key>description</key>
<string>IBS AP-16 80 column card</string>
</dict>
<dict>
<key>value</key>
<string>echoii</string>
<key>description</key>
<string>Street Electronics Echo II</string>
</dict>
<dict>
<key>value</key>
<string>videoterm</string>
<key>description</key>
<string>Videx Videoterm 80 Column Display</string>
</dict>
<dict>
<key>value</key>
<string>softcard</string>
<key>description</key>
<string>Microsoft SoftCard</string>
</dict>
<dict>
<key>value</key>
<string>twarp</string>
<key>description</key>
<string>Applied Engineering TransWarp</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>memexp</string>
<key>description</key>
<string>Apple II Memory Expansion Card</string>
</dict>
<dict>
<key>value</key>
<string>aesms</string>
<key>description</key>
<string>Applied Engineering Super Music Synthesizer</string>
</dict>
<dict>
<key>value</key>
<string>ramfactor</string>
<key>description</key>
<string>Applied Engineering RamFactor</string>
</dict>
<dict>
<key>value</key>
<string>alfam2</string>
<key>description</key>
<string>ALF MC1 / Apple Music II</string>
</dict>
<dict>
<key>value</key>
<string>ssc</string>
<key>description</key>
<string>Apple Super Serial Card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing13</string>
<key>description</key>
<string>Apple Disk II NG controller (13-sector)</string>
</dict>
<dict>
<key>value</key>
<string>mockingboard</string>
<key>description</key>
<string>Sweet Micro Systems Mockingboard</string>
</dict>
<dict>
<key>value</key>
<string>ultraterm</string>
<key>description</key>
<string>Videx UltraTerm (original)</string>
</dict>
<dict>
<key>value</key>
<string>diskii</string>
<key>description</key>
<string>Apple Disk II controller</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (65C02 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>ssbapple</string>
<key>description</key>
<string>Multitech Industrial SSB Apple speech card</string>
</dict>
<dict>
<key>value</key>
<string>sam</string>
<key>description</key>
<string>Don't Ask Software S.A.M.</string>
</dict>
<dict>
<key>value</key>
<string>phasor</string>
<key>description</key>
<string>Applied Engineering Phasor</string>
</dict>
<dict>
<key>value</key>
<string>midi</string>
<key>description</key>
<string>6850 MIDI card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing</string>
<key>description</key>
<string>Apple Disk II NG controller (16-sector)</string>
</dict>
<dict>
<key>value</key>
<string>ap16alt</string>
<key>description</key>
<string>IBS AP-16 80 column card (alt. version)</string>
</dict>
<dict>
<key>value</key>
<string>pcxport</string>
<key>description</key>
<string>Applied Engineering PC Transporter</string>
</dict>
<dict>
<key>value</key>
<string>tm2ho</string>
<key>description</key>
<string>Applied Engineering TimeMaster H.O.</string>
</dict>
<dict>
<key>value</key>
<string>mcms2</string>
<key>description</key>
<string>Mountain Computer Music System (card 2)</string>
</dict>
</array>
<key>sl7</key>
<array>
<dict>
<key>value</key>
<string>byte8251</string>
<key>description</key>
<string>BYTE Serial Interface (8251 based)</string>
</dict>
<dict>
<key>value</key>
<string>applesurance</string>
<key>description</key>
<string>Applesurance Diagnostic Controller</string>
</dict>
<dict>
<key>value</key>
<string>ceyes2</string>
<key>description</key>
<string>Digital Vision ComputerEyes/2</string>
</dict>
<dict>
<key>value</key>
<string>ssprite</string>
<key>description</key>
<string>Synetix SuperSprite</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9958</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9958)</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi9938</string>
<key>description</key>
<string>E-Z Color Graphics Interface (TMS9938)</string>
</dict>
<dict>
<key>value</key>
<string>mouse</string>
<key>description</key>
<string>Apple II Mouse Card</string>
</dict>
<dict>
<key>value</key>
<string>dx1</string>
<key>description</key>
<string>Decillonix DX-1</string>
</dict>
<dict>
<key>value</key>
<string>swyft</string>
<key>description</key>
<string>IAI SwyftCard</string>
</dict>
<dict>
<key>value</key>
<string>mcms1</string>
<key>description</key>
<string>Mountain Computer Music System (card 1)</string>
</dict>
<dict>
<key>value</key>
<string>scsi</string>
<key>description</key>
<string>Apple II SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>applicard</string>
<key>description</key>
<string>PCPI Applicard</string>
</dict>
<dict>
<key>value</key>
<string>corvus</string>
<key>description</key>
<string>Corvus Flat Cable interface</string>
</dict>
<dict>
<key>value</key>
<string>aevm80</string>
<key>description</key>
<string>Applied Engineering Viewmaster 80</string>
</dict>
<dict>
<key>value</key>
<string>hsscsi</string>
<key>description</key>
<string>Apple II High-Speed SCSI Card</string>
</dict>
<dict>
<key>value</key>
<string>ezcgi</string>
<key>description</key>
<string>E-Z Color Graphics Interface</string>
</dict>
<dict>
<key>value</key>
<string>ultratermenh</string>
<key>description</key>
<string>Videx UltraTerm (enhanced //e)</string>
</dict>
<dict>
<key>value</key>
<string>echoiiplus</string>
<key>description</key>
<string>Street Electronics Echo Plus</string>
</dict>
<dict>
<key>value</key>
<string>diskiiiwm</string>
<key>description</key>
<string>Apple Disk II IWM controller</string>
</dict>
<dict>
<key>value</key>
<string>parallel</string>
<key>description</key>
<string>Apple Parallel Interface Card</string>
</dict>
<dict>
<key>value</key>
<string>zipdrive</string>
<key>description</key>
<string>Zip Technologies ZipDrive</string>
</dict>
<dict>
<key>value</key>
<string>themill</string>
<key>description</key>
<string>Stellation Two The Mill</string>
</dict>
<dict>
<key>value</key>
<string>4play</string>
<key>description</key>
<string>4play Joystick Card (rev. B)</string>
</dict>
<dict>
<key>value</key>
<string>vulcan</string>
<key>description</key>
<string>Applied Engineering Vulcan IDE controller (//e version)</string>
</dict>
<dict>
<key>value</key>
<string>cffa202</string>
<key>description</key>
<string>CFFA2000 Compact Flash (6502 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>arcbd</string>
<key>description</key>
<string>Third Millenium Engineering Arcade Board</string>
</dict>
<dict>
<key>value</key>
<string>focusdrive</string>
<key>description</key>
<string>Parsons Engineering Focus Drive</string>
</dict>
<dict>
<key>value</key>
<string>vtc1</string>
<key>description</key>
<string>unknown Videoterm clone</string>
</dict>
<dict>
<key>value</key>
<string>ap16</string>
<key>description</key>
<string>IBS AP-16 80 column card</string>
</dict>
<dict>
<key>value</key>
<string>echoii</string>
<key>description</key>
<string>Street Electronics Echo II</string>
</dict>
<dict>
<key>value</key>
<string>videoterm</string>
<key>description</key>
<string>Videx Videoterm 80 Column Display</string>
</dict>
<dict>
<key>value</key>
<string>softcard</string>
<key>description</key>
<string>Microsoft SoftCard</string>
</dict>
<dict>
<key>value</key>
<string>twarp</string>
<key>description</key>
<string>Applied Engineering TransWarp</string>
</dict>
<dict>
<key>value</key>
<string>thclock</string>
<key>description</key>
<string>ThunderWare ThunderClock Plus</string>
</dict>
<dict>
<key>value</key>
<string>memexp</string>
<key>description</key>
<string>Apple II Memory Expansion Card</string>
</dict>
<dict>
<key>value</key>
<string>aesms</string>
<key>description</key>
<string>Applied Engineering Super Music Synthesizer</string>
</dict>
<dict>
<key>value</key>
<string>ramfactor</string>
<key>description</key>
<string>Applied Engineering RamFactor</string>
</dict>
<dict>
<key>value</key>
<string>alfam2</string>
<key>description</key>
<string>ALF MC1 / Apple Music II</string>
</dict>
<dict>
<key>value</key>
<string>ssc</string>
<key>description</key>
<string>Apple Super Serial Card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing13</string>
<key>description</key>
<string>Apple Disk II NG controller (13-sector)</string>
</dict>
<dict>
<key>value</key>
<string>mockingboard</string>
<key>description</key>
<string>Sweet Micro Systems Mockingboard</string>
</dict>
<dict>
<key>value</key>
<string>ultraterm</string>
<key>description</key>
<string>Videx UltraTerm (original)</string>
</dict>
<dict>
<key>value</key>
<string>diskii</string>
<key>description</key>
<string>Apple Disk II controller</string>
</dict>
<dict>
<key>value</key>
<string>cffa2</string>
<key>description</key>
<string>CFFA2000 Compact Flash (65C02 firmware, www.dreher.net)</string>
</dict>
<dict>
<key>value</key>
<string>ssbapple</string>
<key>description</key>
<string>Multitech Industrial SSB Apple speech card</string>
</dict>
<dict>
<key>value</key>
<string>sam</string>
<key>description</key>
<string>Don't Ask Software S.A.M.</string>
</dict>
<dict>
<key>value</key>
<string>phasor</string>
<key>description</key>
<string>Applied Engineering Phasor</string>
</dict>
<dict>
<key>value</key>
<string>midi</string>
<key>description</key>
<string>6850 MIDI card</string>
</dict>
<dict>
<key>value</key>
<string>diskiing</string>
<key>description</key>
<string>Apple Disk II NG controller (16-sector)</string>
</dict>
<dict>
<key>value</key>
<string>ap16alt</string>
<key>description</key>
<string>IBS AP-16 80 column card (alt. version)</string>
</dict>
<dict>
<key>value</key>
<string>pcxport</string>
<key>description</key>
<string>Applied Engineering PC Transporter</string>
</dict>
<dict>
<key>value</key>
<string>tm2ho</string>
<key>description</key>
<string>Applied Engineering TimeMaster H.O.</string>
</dict>
<dict>
<key>value</key>
<string>mcms2</string>
<key>description</key>
<string>Mountain Computer Music System (card 2)</string>
</dict>
</array>
<key>gameio</key>
<array>
<dict>
<key>value</key>
<string>compeyes</string>
<key>description</key>
<string>Digital Vision ComputerEyes</string>
</dict>
<dict>
<key>value</key>
<string>paddles</string>
<key>description</key>
<string>Apple II paddles</string>
</dict>
<dict>
<key>value</key>
<string>joy</string>
<key>description</key>
<string>Apple II analog joysticks</string>
</dict>
</array>
<key>printer</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
<key>modem</key>
<array>
<dict>
<key>value</key>
<string>ie15</string>
<key>description</key>
<string>IE15 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>terminal</string>
<key>description</key>
<string>Serial Terminal</string>
</dict>
<dict>
<key>value</key>
<string>pty</string>
<key>description</key>
<string>Pseudo terminal</string>
</dict>
<dict>
<key>value</key>
<string>dec_loopback</string>
<key>description</key>
<string>RS232 Loopback (DEC 12-15336-00)</string>
</dict>
<dict>
<key>value</key>
<string>null_modem</string>
<key>description</key>
<string>RS232 Null Modem</string>
</dict>
<dict>
<key>value</key>
<string>loopback</string>
<key>description</key>
<string>RS232 Loopback</string>
</dict>
<dict>
<key>value</key>
<string>swtpc8212</string>
<key>description</key>
<string>SWTPC8212 Terminal</string>
</dict>
<dict>
<key>value</key>
<string>sunkbd</string>
<key>description</key>
<string>Sun Keyboard Adaptor</string>
</dict>
<dict>
<key>value</key>
<string>printer</string>
<key>description</key>
<string>Serial Printer</string>
</dict>
<dict>
<key>value</key>
<string>keyboard</string>
<key>description</key>
<string>Serial Keyboard</string>
</dict>
</array>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,39 @@
//
// SlotBrowserDelegate.h
// MA2ME
//
// Created by Kelvin Sherlock on 8/16/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface SlotBrowserDelegate : NSObject <NSBrowserDelegate>
@property (nonatomic) NSString *model;
@property (weak) NSBrowser *browser;
@property NSString *slot0;
@property NSString *slot1;
@property NSString *slot2;
@property NSString *slot3;
@property NSString *slot4;
@property NSString *slot5;
@property NSString *slot6;
@property NSString *slot7;
@property NSString *slot8;
@property NSString *exp;
@property NSString *aux;
@property NSString *gameio;
@property NSString *printer;
@property NSString *modem;
@property NSString *rs232;
@end
NS_ASSUME_NONNULL_END

160
MA2ME/SlotBrowserDelegate.m Normal file
View File

@ -0,0 +1,160 @@
//
// SlotBrowserDelegate.m
// MA2ME
//
// Created by Kelvin Sherlock on 8/16/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import "SlotBrowserDelegate.h"
@interface SlotBrowserDelegate () {
NSString *_model;
NSMutableArray *_data;
}
@end
@implementation SlotBrowserDelegate
-(void)awakeFromNib {
_data = [NSMutableArray new];
}
@synthesize model = _model;
static NSString *Mame[] = {
@"-sl0", @"-sl1", @"-sl2", @"-sl3",
@"-sl4", @"-sl5", @"-sl6", @"-sl7",
@"-sl8", @"-exp", @"-aux",
@"-gameio", @"-printer", @"-modem", @"-rs232"
};
static NSString *Keys[] = {
@"slot0", @"slot1", @"slot2", @"slot3",
@"slot4", @"slot5", @"slot6", @"slot7",
@"slot8", @"exp", @"aux",
@"gameio", @"printer", @"modem", @"rs232"
};
static NSString *Names[] = {
@"Slot 0", @"Slot 1", @"Slot 2", @"Slot 3",
@"Slot 4", @"Slot 5", @"Slot 6", @"Slot 7",
@"Slot 8", @"Expansion", @"Auxiliary",
@"Game I/O", @"Printer", @"Modem", @"RS232"
};
-(void)setModel:(NSString *)model {
if (_model == model) return;
if ([_model isEqualToString: model]) return;
_model = model;
[_data removeAllObjects];
if (!model) return;
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *none = @{ @"Name": @"None", @"Mame": @"" };
for (unsigned i = 0; i < sizeof(Keys)/sizeof(Keys[0]); ++i) {
NSString *key = Keys[i];
NSString *path = [bundle pathForResource: key ofType: @"plist" inDirectory: model];
if (!path) {
[self setValue: nil forKey: key];
continue;
}
NSMutableArray *data = [NSMutableArray arrayWithContentsOfFile: path];
if (![data count]) {
[self setValue: nil forKey: key];
continue;
}
[data insertObject: none atIndex: 0];
NSString *value = [self valueForKey: key];
if (value) {
BOOL found = NO;
for (NSDictionary *item in data) {
if ([value isEqualToString: [item objectForKey: @"Mame"]]) {
found = YES;
break;
}
}
if (!found) [self setValue: nil forKey: key];
}
NSDictionary *item = @{
@"Children": data,
@"Name": Names[i],
@"Mame": key
};
[_data addObject: item];
}
// needs to call [NSBrowser reloadColumn0];
[_browser loadColumnZero];
}
#if 0
-(id)rootItemForBrowser:(NSBrowser *)browser {
return _data;
}
- (BOOL)browser:(NSBrowser *)browser isLeafItem:(id)item {
if (!item) return YES;
if (item == _data) return NO;
return ![(NSDictionary *)item objectForKey: @"Children"];
}
- (id)browser:(NSBrowser *)browser child:(NSInteger)index ofItem:(id)item {
if (!item) return nil;
if (item == _data) return [item objectAtIndex: index];
NSArray *data = [item objectForKey: @"Children"];
return [data objectAtIndex: index];
}
-(id)browser:(NSBrowser *)browser objectValueForItem:(id)item {
if (item == _data) return @"Root";
return [item objectForKey: @"Name"];
}
- (NSInteger)browser:(NSBrowser *)browser numberOfChildrenOfItem:(id)item {
NSArray *data = item == _data ? item : [item objectForKey: @"Children"];
return [data count];
}
#endif
-(void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(NSInteger)row column:(NSInteger)column {
[(NSBrowserCell *)cell set];
[(NSBrowserCell *)cell setLeaf: YES];
[(NSBrowserCell *)cell setStringValue: @"Hello"];
}
-(NSArray *)args {
NSMutableArray *array = [NSMutableArray new];
for (unsigned i = 0; i < sizeof(Keys)/sizeof(Keys[0]); ++i) {
NSString *key = Keys[i];
NSString *value = [self valueForKey: key];
if (!value || ![value length]) continue;
[array addObject: Mame[i]];
[array addObject: value];
}
return array;
}
@end

21
MA2ME/machines.py Normal file
View File

@ -0,0 +1,21 @@
MACHINES = (
"apple1",
"apple2", "apple2p", "apple2jp",
"apple3",
"apple2e", "apple2ees", "apple2euk", "apple2ep",
"apple2ee", "apple2eeuk", "apple2eefr",
"apple2gs", "apple2gsr0", "apple2gsr1",
"apple2c", "apple2cp",
"laser128", "laser2c", "las128ex", "las128e2",
"ace100"
)
SLOTS = (
"sl0", "sl1", "sl2", "sl3",
"sl4", "sl5", "sl6", "sl7",
"exp", "aux",
"rs232",
"gameio",
"printer",
"modem"
)

38
MA2ME/mkdevices.py Normal file
View File

@ -0,0 +1,38 @@
import subprocess
from plist import to_plist
import xml.etree.ElementTree as ET
from machines import MACHINES
devices = {}
for m in MACHINES:
st = subprocess.run(["mame", m, "-listxml"], capture_output=True)
if st.returncode != 0:
print("mame error: {}".format(m))
exit(1)
xml = st.stdout
root = ET.fromstring(xml)
nodes = root.findall("machine[@isdevice='yes']")
for d in nodes:
name = d.get("name") # devname
desc = d.find("description").text
tmp = {
"Name": name,
"Description": desc
}
devices[name] = tmp
with open("Resources/devices.plist", "w") as f:
f.write(to_plist(devices))

72
MA2ME/mkmachines.py Normal file
View File

@ -0,0 +1,72 @@
import subprocess
from plist import to_plist
import xml.etree.ElementTree as ET
from machines import MACHINES, SLOTS
devices = {}
for m in MACHINES:
print(m)
st = subprocess.run(["mame", m, "-listxml"], capture_output=True)
if st.returncode != 0:
print("mame error: {}".format(m))
exit(1)
d = { }
xml = st.stdout
root = ET.fromstring(xml)
path = 'machine[@name="{}"]'.format(m)
machine = root.find(path)
d["value"] = m
d["description"] = machine.find("description").text
d["RAM"] = [
{
"value": int(x.text),
"description": x.get("name")
}
for x in machine.findall('ramoption')
]
node = machine.find('display[@tag="screen"]')
d["Resolution"] = [int(node.get("width")), int(node.get("height")) * 2]
mm = {}
for x in root.findall("machine[@isdevice='yes']"):
name = x.get("name")
mm[name] = x.find("description").text
# print(mm)
# ss = {}
for s in SLOTS:
path = 'slot[@name="{}"]/slotoption'.format(s)
nodes = machine.findall(path)
if not nodes: continue
tmp = []
for x in nodes:
name = x.get("name")
devname = x.get("devname")
desc = mm[devname]
tmp.append({ "value": name, "description": desc })
d[s] = tmp
# d[s] = [(x.get("name"), x.get("devname")) for x in nodes]
# d["Slots"] = ss
path = "Resources/{}.plist".format(m)
with open(path, "w") as f:
f.write(to_plist(d))

126
MA2ME/plist.py Normal file
View File

@ -0,0 +1,126 @@
__all__ = ['to_plist']
from xml.sax.saxutils import escape
from base64 import b64encode
from datetime import date, datetime, timezone
_header = (
'<?xml version="1.0" encoding="UTF-8"?>\n'
'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n'
'<plist version="1.0">\n'
)
_trailer = '</plist>\n'
INDENT = " "
def _bad(x, indent=0):
raise ValueError("plist: bad type: {} ({})".format(type(x), x))
def _encode_array(x, akku, indent=""):
indent2 = indent + INDENT
akku.append(indent + "<array>\n")
for v in x:
_encoder.get(type(v), _bad)(v, akku, indent2)
akku.append(indent + "</array>\n")
def _encode_dict(x, akku, indent=""):
indent2 = indent + INDENT
akku.append(indent + "<dict>\n")
for k,v in x.items():
# key must be string?
if type(k) != str:
raise ValueError("plist: dictionary key must be string: {}: {}".format(type(k), k))
akku.append("{}<key>{}</key>\n".format(indent2, escape(k)))
_encoder.get(type(v), _bad)(v, akku, indent2)
akku.append(indent + "</dict>\n")
def _encode_bool(x, akku, indent=""):
if x: akku.append(indent + "<true/>\n")
else: akku.append(indent + "<false/>\n")
def _encode_integer(x, akku, indent=""):
akku.append("{}<integer>{}</integer>\n".format(indent, x))
def _encode_real(x, akku, indent=""):
akku.append("{}<real>{}</real>\n".format(indent, x))
def _encode_string(x, akku, indent=""):
akku.append("{}<string>{}</string>\n".format(indent, escape(x)))
# data is YYYY-MM-DD T HH:MM:SS Z
def _encode_date(x, akku, indent=""):
s = x.strftime('%Y-%m-%d')
akku.append("{}<date>{}</date>\n".format(indent, s))
def _encode_datetime(x, akku, indent=""):
# if not x.tzinfo
# raise ValueError("plist: datetime must have tzinfo: {}".format(x))
# if x.tzinfo.utcoffset(x) == None:
# raise ValueError("plist: datetime must have utc offset: {}".format(x))
utc = x.astimezone(timezone.utc)
s = utc.strftime('%Y-%m-%dT%H:%M:%SZ')
akku.append("{}<date>{}</date>\n".format(indent, s))
def _encode_data(x, akku, indent=""):
# data is base64 encoded
CHUNKSIZE = 32
if len(x) < CHUNKSIZE:
akku.append("{}<data>{}</data>\n".format(indent, b64encode(x).encode('ascii')))
return
indent2 = indent + INDENT
akku.append(indent + "<data>\n")
for i in range(0, len(x), CHUNKSIZE):
akku.append(
"{}{}\n".format(
indent2,
b64encode(x[i:i+CHUNKSIZE]).encode('ascii')
)
)
akku.append(indent + "</data>\n")
# data, data not yet supported.
_encoder = {
str: _encode_string,
float: _encode_real,
int: _encode_integer,
bool: _encode_bool,
tuple: _encode_array,
list: _encode_array,
dict: _encode_dict,
bytes: _encode_data,
bytearray: _encode_data,
date: _encode_date,
datetime: _encode_datetime,
}
def to_plist(x):
akku = []
akku.append(_header)
_encoder.get(type(x), _bad)(x, akku, INDENT)
akku.append(_trailer)
return ''.join(akku)

31
MA2ME/slots.py Normal file
View File

@ -0,0 +1,31 @@
import subprocess
# from xml.dom.minidom import parseString
import xml.etree.ElementTree as ET
st = subprocess.run(["mame", "apple1", "-listxml"], capture_output=True)
if st.returncode != 0: exit(1)
xml = st.stdout
# print(xml)
dom = ET.fromstring(xml)
machine = dom.find('machine[@name="apple1"]')
ramoptions = [int(x.text) for x in machine.findall('ramoption')]
# display
display = []
x = machine.find('display[@tag="screen"]')
print(x)
if x != None:
display = [int(x.get("width")), int(x.get("height")) * 2]
print(display)
print(ramoptions)

41
SlotViewController.h Normal file
View File

@ -0,0 +1,41 @@
//
// SlotViewController.h
// MA2ME
//
// Created by Kelvin Sherlock on 8/18/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface SlotViewController : NSViewController
@property (nonatomic) NSString *model;
//@property (nonatomic) NSDictionary *machine;
@property unsigned memory;
@property NSString *sl0;
@property NSString *sl1;
@property NSString *sl2;
@property NSString *sl3;
@property NSString *sl4;
@property NSString *sl5;
@property NSString *sl6;
@property NSString *sl7;
@property NSString *rs232;
@property NSString *aux;
@property NSString *exp;
@property NSString *gameio;
@property NSString *printer;
@property NSString *modem;
//-(void)setMachine: (NSDictionary *)machine;
@end
NS_ASSUME_NONNULL_END

129
SlotViewController.m Normal file
View File

@ -0,0 +1,129 @@
//
// SlotViewController.m
// MA2ME
//
// Created by Kelvin Sherlock on 8/18/2020.
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
//
#import "SlotViewController.h"
@interface SlotViewController () {
//NSDictionary *_machine;
}
@property (weak) IBOutlet NSPopUpButton *ram_menu;
@property (weak) IBOutlet NSPopUpButton *sl0_menu;
@property (weak) IBOutlet NSPopUpButton *sl1_menu;
@property (weak) IBOutlet NSPopUpButton *sl2_menu;
@property (weak) IBOutlet NSPopUpButton *sl3_menu;
@property (weak) IBOutlet NSPopUpButton *sl4_menu;
@property (weak) IBOutlet NSPopUpButton *sl5_menu;
@property (weak) IBOutlet NSPopUpButton *sl6_menu;
@property (weak) IBOutlet NSPopUpButton *sl7_menu;
@property (weak) IBOutlet NSPopUpButton *sl8_menu;
@property (weak) IBOutlet NSPopUpButton *exp_menu;
@property (weak) IBOutlet NSPopUpButton *aux_menu;
@property (weak) IBOutlet NSPopUpButton *rs232_menu;
@property (weak) IBOutlet NSPopUpButton *game_menu;
@property (weak) IBOutlet NSPopUpButton *printer_menu;
@property (weak) IBOutlet NSPopUpButton *modem_menu;
@property (strong) IBOutlet NSArrayController *ram_array;
@property NSArray *ram_menu_values;
@property NSDictionary *machine;
@end
@implementation SlotViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do view setup here.
[self setRam_menu_values: @[]];
NSBundle *bundle = [NSBundle mainBundle];
NSURL *url= [bundle URLForResource: @"apple2gs" withExtension: @"plist"];
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
[self setMachine: d];
//[self update_ram_menu];
}
-(void)reset {
}
- (IBAction)ram_menu_action:(id)sender {
NSLog(@"%@", sender);
}
static NSMenuItem *MemoryMenuItem(unsigned size) {
NSMenuItem *m;
NSString *s;
if (size >= 1024 * 1024)
s = [NSString stringWithFormat: @"%fM", (double)size / (1024 * 1024)];
else
s = [NSString stringWithFormat: @"%uK", size / 1024];
m = [[NSMenuItem alloc] initWithTitle: s action: nil keyEquivalent: @""];
[m setTag: size];
return m;
}
-(void)update_ram_menu {
#if 0
NSMenu *menu = [_ram_menu menu];
[menu removeAllItems];
[menu addItem: MemoryMenuItem(4096)];
[menu addItem: MemoryMenuItem(1310720)];
[menu addItem: MemoryMenuItem(5242880)];
[_ram_array setContent: @[
@{ @"description" : @"4K" },
@{ @"description" : @"8K" },
@{ @"description" : @"16K" }
]
];
#endif
[self setRam_menu_values: [_machine objectForKey: @"RAM"]];
//[_ram_array setContent: [_machine objectForKey: @"RAM"]];
}
-(void)setModel:(NSString *)model {
if (model == _model) return;
if ([model isEqualToString: _model]) return;
_model = model;
_machine = nil;
NSGridView *view = (NSGridView *)[self view];
if (!_model) {
[view setHidden: YES];
[self setMemory: 0];
return;
}
/* load ... */
/* ram menu */
[_ram_menu removeAllItems];
[self update_ram_menu];
}
@end