Compare commits
173 Commits
Author | SHA1 | Date | |
---|---|---|---|
5f3c346562 | |||
d992b6960d | |||
bc9e156af0 | |||
9be960bb8e | |||
f3680e0309 | |||
2465b38916 | |||
cafecda333 | |||
2e6edaba1b | |||
94dfbc6e3e | |||
821a84923f | |||
311a3461f6 | |||
88c12a4832 | |||
6ca897739a | |||
2a0462cc41 | |||
fe0d690f87 | |||
ffb76a31f9 | |||
123a51d52f | |||
f89c932b77 | |||
0d13fa7167 | |||
e1eecac557 | |||
f8b3a1d882 | |||
9e5b8d45ca | |||
e975980a3a | |||
6177001a4c | |||
b2907eda08 | |||
48cdd702be | |||
2f514a1db3 | |||
d37fb49781 | |||
34970cb476 | |||
9626a6588f | |||
dc7adde938 | |||
328ab815fb | |||
d433920740 | |||
5d5c477bee | |||
4676c7c1ba | |||
760f9e6693 | |||
5f8b00f021 | |||
750df30533 | |||
9a7b5e6af0 | |||
521d33ba55 | |||
4c1541a7da | |||
29cfb6c2a0 | |||
f74f5aaf11 | |||
e3edc368fe | |||
9323151102 | |||
6acbadb195 | |||
3a03b2180a | |||
52d140d07d | |||
0c7c9e9d1b | |||
dc5ab08d4b | |||
c51ae648d9 | |||
74c67be366 | |||
bfa371ec0c | |||
2046eed6f4 | |||
28b1074da2 | |||
40336585b3 | |||
07d0e78d04 | |||
c88fe397f7 | |||
e86b5c3236 | |||
6f8e2d806b | |||
7286ae4f5a | |||
7587f8c5ef | |||
93b9995260 | |||
dd1263a31c | |||
ed88a87b69 | |||
6e4a516610 | |||
6ca8ae2dc9 | |||
c40f1e621d | |||
b089220d81 | |||
c92ab50079 | |||
a3f96076f5 | |||
d06bf9b1d6 | |||
f9d4489e48 | |||
cabffd23ea | |||
170a3864fe | |||
3c81d4d2ce | |||
1022ebcbba | |||
32d6cdf004 | |||
f72bed14a5 | |||
57a7e24d21 | |||
f3137585c1 | |||
6e7acb88e2 | |||
5840c4ae0c | |||
0c8587beb5 | |||
9f6870585f | |||
4425fe33f8 | |||
68136487ff | |||
5745a99ea2 | |||
484dd39b67 | |||
ad12d40052 | |||
e1a3d39021 | |||
0befba12a5 | |||
13d78a94ed | |||
4bfc4c027f | |||
f90f5a6bf3 | |||
ecfd5fb7a8 | |||
7a085301cf | |||
bf619da42d | |||
d5d869a407 | |||
59ce93bbc0 | |||
0d88e3e93a | |||
4ca9d2caaf | |||
531c3096e9 | |||
376f808d29 | |||
97c27328d0 | |||
0dfd7c0605 | |||
afa29a9e91 | |||
65a1a9e6c6 | |||
7ef1edfe81 | |||
2ab55c0454 | |||
8362692523 | |||
416310fe69 | |||
9d8f645c69 | |||
9946d341a7 | |||
b2bfb6ea11 | |||
c6bd70f9ef | |||
d8f0794679 | |||
09b9830840 | |||
6452cf5e0a | |||
d7ffdd841a | |||
9905ddf96e | |||
95c7a77982 | |||
8b901fc415 | |||
2ba85fc3f8 | |||
49e2462b28 | |||
a829b4feea | |||
0a78177485 | |||
5d54bbd636 | |||
531cee122b | |||
e9fff9aa08 | |||
ee02dee982 | |||
9a64879336 | |||
f45db5383d | |||
4b34ff977d | |||
2fa6a90374 | |||
7b41e5bf46 | |||
f2b08c45a3 | |||
498fd337eb | |||
3cdae0e386 | |||
9eb3727e1e | |||
af3ad78b94 | |||
8906d7825f | |||
be04b5a00b | |||
8e7e6fa396 | |||
ad33f06f98 | |||
3c77f0a309 | |||
69023c4af3 | |||
c1d9a03175 | |||
8b2f4c762b | |||
ebdf8b9395 | |||
26dbdae365 | |||
fef59d29cf | |||
152197cae7 | |||
e73ff01c00 | |||
b262c8bf2f | |||
fe7c71e7c7 | |||
8264aa1515 | |||
cfe0e950c4 | |||
e512fb982a | |||
90be56f96d | |||
076af87f91 | |||
13529d130c | |||
b0ff495fd3 | |||
8c282596d6 | |||
fde5b664b4 | |||
a653ca575b | |||
48513422f5 | |||
598e95a6ca | |||
348353199f | |||
1f47c7be88 | |||
931488ac4c | |||
337b3eb1f2 | |||
3cbc69bf38 |
15
.github/workflows/xcodebuild.yml
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
name: xcodebuild
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: build
|
||||
run: xcodebuild -project "Ample.xcodeproj" -target "Ample Lite" | xcpretty
|
||||
|
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
dist
|
||||
embedded/mame64
|
||||
embedded/SDL2.framework
|
||||
build
|
||||
embedded/mame-data.tgz
|
||||
__pycache__
|
12
.travis.yml
Normal file
@ -0,0 +1,12 @@
|
||||
language: objective-c
|
||||
|
||||
osx_image:
|
||||
- xcode12
|
||||
- xcode11.3
|
||||
- xcode10.1
|
||||
xcode_project: Ample.xcodeproj
|
||||
xcode_scheme: Ample Lite
|
||||
|
||||
script:
|
||||
- set -o pipefail
|
||||
- xcodebuild -project "${TRAVIS_XCODE_PROJECT}" -target "Ample Lite" | xcpretty
|
@ -4,6 +4,18 @@
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>Ample Lite.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<true/>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>Ample copy.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>Ample.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
@ -14,6 +26,36 @@
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>pty_shell.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>vmnet_helper.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<true/>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>B6841BCF251EC913006A5C39</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B6BA257A24E99BE9005FB8FF</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B6E4B5AE24FDE2670094A35C</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
43
Ample/Ample.h
Normal file
@ -0,0 +1,43 @@
|
||||
//
|
||||
// Ample.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/1/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef Ample_h
|
||||
#define Ample_h
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
/* ~/Library/ApplicationSupport/Ample/ */
|
||||
NSURL *SupportDirectory(void);
|
||||
NSString *SupportDirectoryPath(void);
|
||||
|
||||
/* mame executable URL */
|
||||
NSURL *MameURL(void);
|
||||
NSString *MamePath(void);
|
||||
|
||||
/* mame working directory */
|
||||
NSURL *MameWorkingDirectory(void);
|
||||
NSString *MameWorkingDirectoryPath(void);
|
||||
|
||||
NSString *InternString(NSString *key);
|
||||
|
||||
NSDictionary *MameMachine(NSString *machine);
|
||||
|
||||
/* NSUserDefaults keys */
|
||||
extern NSString *kUseCustomMame;
|
||||
extern NSString *kMamePath;
|
||||
extern NSString *kMameWorkingDirectory;
|
||||
extern NSString *kAutoCloseLogWindow;
|
||||
extern NSString *kMameComponentsDate;
|
||||
|
||||
extern NSString *kDownloadURL;
|
||||
extern NSString *kDownloadExtension;
|
||||
|
||||
extern NSString *kDefaultDownloadURL;
|
||||
extern NSString *kDefaultDownloadExtension;
|
||||
|
||||
#endif /* Ample_h */
|
137
Ample/Ample.m
Normal file
@ -0,0 +1,137 @@
|
||||
//
|
||||
// Ample.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/1/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#include "Ample.h"
|
||||
|
||||
NSURL *SupportDirectory(void) {
|
||||
static NSURL *cached = nil;
|
||||
|
||||
if (!cached) {
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
|
||||
NSURL *url = [fm URLForDirectory: NSApplicationSupportDirectory inDomain: NSUserDomainMask appropriateForURL: nil create: YES error: &error];
|
||||
cached = [url URLByAppendingPathComponent: @"Ample"];
|
||||
|
||||
[fm createDirectoryAtURL: cached withIntermediateDirectories: YES attributes: nil error: &error];
|
||||
}
|
||||
return cached;
|
||||
|
||||
}
|
||||
|
||||
NSString *SupportDirectoryPath(void) {
|
||||
static NSString *cached = nil;
|
||||
|
||||
if (!cached) {
|
||||
NSURL *url = SupportDirectory();
|
||||
cached = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
}
|
||||
return cached;
|
||||
}
|
||||
|
||||
|
||||
NSURL *MameURL(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMamePath];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
||||
}
|
||||
|
||||
NSString *MamePath(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
NSString *path;
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
path = [defaults stringForKey: kMamePath];
|
||||
if ([path length]) return path;
|
||||
}
|
||||
path = [bundle pathForAuxiliaryExecutable: @"mame64"];
|
||||
if ([path length]) return path;
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSURL *MameWorkingDirectory(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMameWorkingDirectory];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return SupportDirectory();
|
||||
}
|
||||
|
||||
NSString *MameWorkingDirectoryPath(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMameWorkingDirectory];
|
||||
if (![path length]) return path;
|
||||
}
|
||||
|
||||
return SupportDirectoryPath();
|
||||
}
|
||||
|
||||
|
||||
NSDictionary *MameMachine(NSString *machine) {
|
||||
static NSMutableDictionary *cache;
|
||||
|
||||
if (!cache) cache = [NSMutableDictionary new];
|
||||
NSDictionary *d;
|
||||
|
||||
if (!machine) return nil;
|
||||
d = [cache objectForKey: machine];
|
||||
if (d) return d;
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *url= [bundle URLForResource: machine withExtension: @"plist"];
|
||||
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (d) [cache setObject: d forKey: machine];
|
||||
return d;
|
||||
}
|
||||
|
||||
/* NSCache doesn't retain it's key. This essentially interns it. */
|
||||
/* could just abuse NSSelectorFromString() */
|
||||
NSString *InternString(NSString *key) {
|
||||
static NSMutableSet *storage = nil;
|
||||
|
||||
if (!storage) {
|
||||
storage = [NSMutableSet new];
|
||||
}
|
||||
NSString *copy = [storage member: key];
|
||||
if (!copy) {
|
||||
copy = [key copy];
|
||||
[storage addObject: copy];
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
||||
NSString *kUseCustomMame = @"UseCustomMame";
|
||||
NSString *kMamePath = @"MamePath";
|
||||
NSString *kMameWorkingDirectory = @"MameWorkingDirectory";
|
||||
NSString *kAutoCloseLogWindow = @"AutoCloseLogWindow";
|
||||
NSString *kMameComponentsDate = @"MameComponentsDate";
|
||||
NSString *kDefaultDownloadURL = @"DefaultDownloadURL";
|
||||
NSString *kDefaultDownloadExtension = @"DefaultDownloadExtension";
|
||||
|
||||
NSString *kDownloadURL = @"DownloadURL";
|
||||
NSString *kDownloadExtension = @"DownloadExtension";
|
@ -5,19 +5,28 @@
|
||||
// Created by Kelvin Sherlock on 8/16/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "AppDelegate.h"
|
||||
#import "SlotViewController.h"
|
||||
#import "MediaViewController.h"
|
||||
#import "LaunchWindowController.h"
|
||||
#import "PreferencesWindowController.h"
|
||||
#import "DownloadWindowController.h"
|
||||
#import "DiskImagesWindowController.h"
|
||||
#import "CheatSheetWindowController.h"
|
||||
#import "Transformers.h"
|
||||
|
||||
#import "LogWindowController.h"
|
||||
|
||||
@interface AppDelegate ()
|
||||
@property (weak) IBOutlet NSWindow *installWindow;
|
||||
|
||||
@end
|
||||
|
||||
@implementation AppDelegate {
|
||||
NSWindowController *_prefs;
|
||||
NSWindowController *_launcher;
|
||||
NSWindowController *_downloader;
|
||||
NSWindowController *_diskImages;
|
||||
NSWindowController *_cheatSheet;
|
||||
}
|
||||
|
||||
|
||||
@ -29,6 +38,8 @@
|
||||
NSDictionary *dict;
|
||||
|
||||
|
||||
RegisterTransformers();
|
||||
|
||||
path = [bundle pathForResource: @"Defaults" ofType: @"plist"];
|
||||
dict = [NSDictionary dictionaryWithContentsOfFile: path];
|
||||
|
||||
@ -37,10 +48,91 @@
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults: dict];
|
||||
}
|
||||
|
||||
_launcher = [LaunchWindowController new];
|
||||
|
||||
|
||||
_diskImages = [DiskImagesWindowController sharedInstance]; //[DiskImagesWindowController new];
|
||||
|
||||
if ([self installMameComponents]) {
|
||||
|
||||
[self displayLaunchWindow];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-(void)displayLaunchWindow {
|
||||
|
||||
if (!_launcher) {
|
||||
_launcher = [LaunchWindowController new];
|
||||
}
|
||||
[_launcher showWindow: nil];
|
||||
}
|
||||
|
||||
-(BOOL)installMameComponents {
|
||||
|
||||
/* install the mame data components. */
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *sd = SupportDirectory();
|
||||
|
||||
NSURL *ample_url = [sd URLByAppendingPathComponent: @"Ample.plist"];
|
||||
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithContentsOfURL: ample_url];
|
||||
|
||||
NSDate *oldDate = [d objectForKey: kMameComponentsDate];
|
||||
NSDate *newDate = [defaults objectForKey: kMameComponentsDate];
|
||||
if (![newDate isKindOfClass: [NSDate class]])
|
||||
newDate = nil;
|
||||
|
||||
if (!newDate) return YES; //????
|
||||
if (oldDate && [oldDate compare: newDate] >= 0) return YES;
|
||||
|
||||
NSString *path = [bundle pathForResource: @"mame-data" ofType: @"tgz"];
|
||||
if (!path) return YES; // Ample Lite?
|
||||
|
||||
|
||||
NSWindow *win = _installWindow;
|
||||
[win makeKeyAndOrderFront: nil];
|
||||
NSTask *task = [NSTask new];
|
||||
NSArray *argv = @[
|
||||
@"xfz",
|
||||
path
|
||||
];
|
||||
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
||||
[task setArguments: argv];
|
||||
[task setCurrentDirectoryURL: sd];
|
||||
|
||||
|
||||
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||
[task setTerminationHandler: ^(NSTask *task){
|
||||
|
||||
dispatch_after(when, dispatch_get_main_queue(), ^{
|
||||
|
||||
int st = [task terminationStatus];
|
||||
|
||||
if (st) {
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert setMessageText: @"An error occurred extracting MAME components"];
|
||||
[alert runModal];
|
||||
[win close];
|
||||
return;
|
||||
}
|
||||
|
||||
if (d) {
|
||||
[d setObject: newDate forKey: kMameComponentsDate];
|
||||
[d writeToURL: ample_url atomically: YES];
|
||||
} else {
|
||||
[@{ kMameComponentsDate: newDate } writeToURL: ample_url atomically: YES];
|
||||
}
|
||||
[win close];
|
||||
[self displayLaunchWindow];
|
||||
[self displayROMS: nil];
|
||||
});
|
||||
|
||||
}];
|
||||
[task launch];
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
||||
// Insert code here to tear down your application
|
||||
@ -51,6 +143,18 @@
|
||||
}
|
||||
|
||||
|
||||
-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
|
||||
|
||||
NSString *ext = [[filename pathExtension] lowercaseString];
|
||||
|
||||
if ([ext isEqualToString: @"vgm"] || [ext isEqualToString: @"vgz"]) {
|
||||
// run mame...
|
||||
NSArray *args = @[ @"vgmplay", @"-window", @"-nomax", @"-skip_gameinfo", @"-quik", filename ];
|
||||
|
||||
[LogWindowController controllerForArgs: args];
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - IBActions
|
||||
@ -58,10 +162,51 @@
|
||||
|
||||
- (IBAction)displayPreferences:(id)sender {
|
||||
if (!_prefs) {
|
||||
_prefs = [[NSWindowController alloc] initWithWindowNibName: @"Preferences"];
|
||||
_prefs = [PreferencesWindowController new];
|
||||
}
|
||||
[_prefs showWindow: sender];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)displayROMS:(id)sender {
|
||||
if (!_downloader) {
|
||||
_downloader = [DownloadWindowController sharedInstance];
|
||||
}
|
||||
[_downloader showWindow: sender];
|
||||
}
|
||||
|
||||
- (IBAction)displayRecentDiskImages:(id)sender {
|
||||
if (!_diskImages) {
|
||||
_diskImages = [DiskImagesWindowController sharedInstance];
|
||||
}
|
||||
[_diskImages showWindow: sender];
|
||||
}
|
||||
|
||||
- (IBAction)displayCheatSheet:(id)sender {
|
||||
if (!_cheatSheet) {
|
||||
_cheatSheet = [CheatSheetWindowController new];
|
||||
}
|
||||
[_cheatSheet showWindow: sender];
|
||||
}
|
||||
|
||||
- (IBAction)displaySupportDirectory:(id)sender {
|
||||
NSURL *url = SupportDirectory();
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
[ws openURL: url];
|
||||
}
|
||||
- (IBAction)mameDocumentation:(id)sender {
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
|
||||
NSURL *url = [NSURL URLWithString: @"https://docs.mamedev.org"];
|
||||
[ws openURL: url];
|
||||
}
|
||||
|
||||
- (IBAction)mameAppleWiki:(id)sender {
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
|
||||
NSURL *url = [NSURL URLWithString: @"https://wiki.mamedev.org/index.php/Driver:Apple_II"];
|
||||
[ws openURL: url];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
@ -1,53 +1,63 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "16x16",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-16.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "16x16",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-32.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "32x32",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-32.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "32x32",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-64.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "128x128",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-128.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "128x128",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-256.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "256x256",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-256.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "256x256",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-512.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "512x512",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-512.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "512x512",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon-1024.png",
|
||||
"scale" : "2x"
|
||||
}
|
||||
],
|
||||
|
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-1024.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-128.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-16.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-256.png
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-32.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-512.png
Normal file
After Width: | Height: | Size: 447 KiB |
BIN
Ample/Assets.xcassets/AppIcon.appiconset/icon-64.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
46
Ample/Base.lproj/CheatSheet.xib
Normal file
@ -0,0 +1,46 @@
|
||||
<?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"/>
|
||||
<plugIn identifier="com.apple.WebKit2IBPlugin" version="15705"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="CheatSheetWindowController">
|
||||
<connections>
|
||||
<outlet property="_webView" destination="Yc9-xA-jWX" id="rsd-1e-HPk"/>
|
||||
<outlet property="webView" destination="Yc9-xA-jWX" id="EE3-gk-f71"/>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="U2v-sN-OzH"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Keyboard Cheat Sheet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="640" height="640"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<wkWebView hidden="YES" wantsLayer="YES" fixedFrame="YES" allowsLinkPreview="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yc9-xA-jWX">
|
||||
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<wkWebViewConfiguration key="configuration">
|
||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
||||
<wkPreferences key="preferences" javaScriptCanOpenWindowsAutomatically="NO"/>
|
||||
</wkWebViewConfiguration>
|
||||
<connections>
|
||||
<outlet property="navigationDelegate" destination="-2" id="1WW-1B-FdZ"/>
|
||||
</connections>
|
||||
</wkWebView>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="u4H-aq-RE2"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="42" y="198"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
47
Ample/Base.lproj/Credits.rtf
Normal file
@ -0,0 +1,47 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf600
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red38\green38\blue38;
|
||||
}
|
||||
{\*\expandedcolortbl;;\cssrgb\c0\c0\c0;\cssrgb\c100000\c100000\c100000;\cssrgb\c20000\c20000\c20000;
|
||||
}
|
||||
\margl1440\margr1440\vieww9000\viewh8400\viewkind0
|
||||
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\b\fs36 \cf2 Ample\cf0
|
||||
\f1\b0\fs28 would like to thank\'85\
|
||||
\
|
||||
\pard\pardeftab720\qc\partightenfactor0
|
||||
{\field{\*\fldinst{HYPERLINK "https://www.mamedev.org"}}{\fldrslt
|
||||
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
||||
MAME}}\cb3 \expnd0\expndtw0\kerning0
|
||||
\
|
||||
\pard\pardeftab720\partightenfactor0
|
||||
\cf0 \
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qj\partightenfactor0
|
||||
\cf0 \cb1 \kerning1\expnd0\expndtw0 The MAME project as a whole is distributed under the terms of the {\field{\*\fldinst{HYPERLINK "https://opensource.org/licenses/GPL-2.0"}}{\fldrslt GNU General Public License, 2}} (GPL-2.0), since it contains code made available under multiple GPL-compatible licenses. A great majority of files (over 90% including core files) are under the {\field{\*\fldinst{HYPERLINK "https://opensource.org/licenses/BSD-3-Clause"}}{\fldrslt BSD-3-Clause License}} and we would encourage new contributors to distribute files under this license.\
|
||||
\
|
||||
Please note that MAME is a registered trademark of Gregory Ember, and permission is required to use the "MAME" name, logo or wordmark.\cb3 \expnd0\expndtw0\kerning0
|
||||
\
|
||||
\pard\pardeftab720\partightenfactor0
|
||||
\cf0 \
|
||||
\pard\pardeftab720\qc\partightenfactor0
|
||||
{\field{\*\fldinst{HYPERLINK "https://libsdl.org"}}{\fldrslt
|
||||
\f0\b\fs36 \cf0 SDL}}\
|
||||
\pard\pardeftab720\partightenfactor0
|
||||
\cf0 \
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qj\partightenfactor0
|
||||
\cf0 \cb1 \kerning1\expnd0\expndtw0 SDL 2.0 is distributed under the {\field{\*\fldinst{HYPERLINK "https://libsdl.org/license.php"}}{\fldrslt zlib license}}. This license allows you to use SDL freely in any software.\
|
||||
\
|
||||
\pard\pardeftab720\qc\partightenfactor0
|
||||
{\field{\*\fldinst{HYPERLINK "https://usdawatercolors.nal.usda.gov/pom/catalog.xhtml?id=POM00001916"}}{\fldrslt
|
||||
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
||||
Icon}}
|
||||
\f0\b\fs36 \cb3 \expnd0\expndtw0\kerning0
|
||||
\
|
||||
\pard\pardeftab720\qj\partightenfactor0
|
||||
|
||||
\f1\b0\fs28 \cf0 \
|
||||
\pard\pardeftab720\qj\partightenfactor0
|
||||
\cf4 \cb3 R.C. Steadman, 6-1-\'9221.\
|
||||
\
|
||||
U.S. Department of Agriculture Pomological Watercolor Collection. Rare and Special Collections, National Agricultural Library, Beltsville, MD 20705}
|
159
Ample/Base.lproj/DiskImages.xib
Normal file
@ -0,0 +1,159 @@
|
||||
<?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="DiskImagesWindowController">
|
||||
<connections>
|
||||
<outlet property="arrayController" destination="vmp-9h-Z5R" id="WYF-Xq-BnN"/>
|
||||
<outlet property="tableView" destination="J5l-1d-030" id="3hU-ho-1ag"/>
|
||||
<outlet property="window" destination="R7r-B9-Bw0" id="hDE-Qa-m4g"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Recent Disk Images" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="RecentDiskImagesWindow" animationBehavior="default" titlebarAppearsTransparent="YES" id="R7r-B9-Bw0" customClass="NSPanel">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" rightStrut="YES"/>
|
||||
<rect key="contentRect" x="200" y="172" width="300" height="400"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" focusRingType="none" id="Kkg-Tp-4m1">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<scrollView focusRingType="none" fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" findBarPosition="belowContent" translatesAutoresizingMaskIntoConstraints="NO" id="ivr-XT-BPS">
|
||||
<rect key="frame" x="-1" y="-1" width="302" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" ambiguous="YES" copiesOnScroll="NO" id="1jn-uc-06s">
|
||||
<rect key="frame" x="0.0" y="0.0" width="302" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView focusRingType="none" verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" id="J5l-1d-030">
|
||||
<rect key="frame" x="0.0" y="0.0" width="302" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="282" minWidth="40" maxWidth="1000" id="1rF-M3-pYV">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="erY-fh-OHK">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="AJH-gH-E8G">
|
||||
<rect key="frame" x="1" y="1" width="282" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="esO-OR-AcY">
|
||||
<rect key="frame" x="6" y="5" width="196" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="Image Name.2mg" id="xgc-u7-sFX">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="AJH-gH-E8G" name="value" keyPath="objectValue.path" id="S0h-hl-OPM">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">FilePathTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="AJH-gH-E8G" name="toolTip" keyPath="objectValue.path" id="gXq-2p-MpM"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wzl-mV-Pmp">
|
||||
<rect key="frame" x="206" y="3" width="75" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" alignment="right" title="32MB" id="QYB-us-igD">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="AJH-gH-E8G" name="value" keyPath="objectValue.size" id="omG-8X-flx">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">FileSizeTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="esO-OR-AcY" id="9mX-Yt-vpg"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
<connections>
|
||||
<binding destination="vmp-9h-Z5R" name="value" keyPath="arrangedObjects.selection" id="32X-Ez-K7S"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<binding destination="vmp-9h-Z5R" name="content" keyPath="arrangedObjects" id="GHn-tz-ash"/>
|
||||
<outlet property="dataSource" destination="-2" id="PRV-Rt-UuC"/>
|
||||
<outlet property="delegate" destination="-2" id="WuV-c9-o5I"/>
|
||||
<outlet property="menu" destination="bCS-1z-UOZ" id="UCb-2v-WrM"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ynD-Kb-eb3">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Dbq-yF-MKx" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="1Hn-2t-Vzj"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-188" y="143"/>
|
||||
</window>
|
||||
<arrayController id="vmp-9h-Z5R">
|
||||
<connections>
|
||||
<binding destination="-2" name="contentArray" keyPath="self.content" id="UTv-za-ry7"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<menu id="bCS-1z-UOZ">
|
||||
<items>
|
||||
<menuItem title="Show in Finder" tag="1" id="roc-SG-geJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="showInFinder:" target="-2" id="ViY-7R-MNV"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Eject" tag="2" id="eJ1-Kd-hnR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="eject:" target="-2" id="c6U-xB-EnM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="22a-3e-eaK"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-667" y="170"/>
|
||||
</menu>
|
||||
</objects>
|
||||
</document>
|
278
Ample/Base.lproj/DownloadWindow.xib
Normal file
@ -0,0 +1,278 @@
|
||||
<?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="DownloadWindowController">
|
||||
<connections>
|
||||
<outlet property="downloadField" destination="sJz-So-jbA" id="WjK-48-FcE"/>
|
||||
<outlet property="formatButton" destination="2Rg-eX-DUq" id="oYo-MG-Sc6"/>
|
||||
<outlet property="tableView" destination="FLX-Wt-y53" id="a4O-pk-EAt"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="ROMs" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="DownloadManagerWindow" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="400" height="575"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<value key="minSize" type="size" width="300" height="300"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="575"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rg5-Qf-4Mw">
|
||||
<rect key="frame" x="324" y="19" width="56" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="i6Z-OM-lqE">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent">.</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.active" id="mBP-8S-yGB"/>
|
||||
</connections>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="cancelAll:" target="-2" id="ycl-eJ-ByB"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="51" horizontalPageScroll="10" verticalLineScroll="51" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CMD-nT-mEa">
|
||||
<rect key="frame" x="0.0" y="130" width="402" height="446"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" ambiguous="YES" drawsBackground="NO" id="Igp-aH-flp">
|
||||
<rect key="frame" x="1" y="1" width="400" height="444"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="49" rowSizeStyle="automatic" viewBased="YES" id="FLX-Wt-y53">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="444"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableViewGridLines key="gridStyleMask" dashed="YES"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="397" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="VZP-ti-Ti8">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="Cell" focusRingType="none" id="aBv-F5-XWo">
|
||||
<rect key="frame" x="1" y="1" width="397" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pWm-hb-BXB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="397" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="p71-gJ-vFV">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="pWm-hb-BXB" id="NNG-rj-AAQ"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="DownloadCell" focusRingType="none" id="onK-6l-2iV" customClass="DownloadTableCellView">
|
||||
<rect key="frame" x="1" y="20" width="397" height="49"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="A44-us-TEl">
|
||||
<rect key="frame" x="25" y="28" width="371" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="NSU-6I-nsG">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="jBN-UJ-tWi">
|
||||
<rect key="frame" x="3" y="29" width="16" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</progressIndicator>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hfu-hP-QAH">
|
||||
<rect key="frame" x="25" y="3" width="371" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="1cQ-Zh-q0o">
|
||||
<font key="font" metaFont="system" size="10"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="activity" destination="jBN-UJ-tWi" id="ZwD-yU-Vne"/>
|
||||
<outlet property="statusTextField" destination="hfu-hP-QAH" id="8Hv-BB-kYA"/>
|
||||
<outlet property="textField" destination="A44-us-TEl" id="Ta5-nd-ed1"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="Ghf-k9-bRK"/>
|
||||
<outlet property="delegate" destination="-2" id="rpR-0W-4Nu"/>
|
||||
<outlet property="menu" destination="RJM-21-hjO" id="xpL-0n-1jm"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<nil key="backgroundColor"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="pcd-MD-gho">
|
||||
<rect key="frame" x="1" y="314" width="480" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="jGc-PE-vaF">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sJz-So-jbA">
|
||||
<rect key="frame" x="51" y="101" width="329" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="HKe-di-YSs">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="downloadURLChanged:" target="-2" id="ah1-QS-G27"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fhd-vr-Q2G">
|
||||
<rect key="frame" x="192" y="18" width="124" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Download Missing" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AKx-eg-iLS">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="downloadMissing:" target="-2" id="azE-F0-5wx"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.active" id="NOL-Db-hgp">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d2z-4T-Wh1">
|
||||
<rect key="frame" x="10" y="104" width="30" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="URL" id="lcZ-R4-WsS">
|
||||
<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>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZXO-bJ-btp">
|
||||
<rect key="frame" x="10" y="66" width="34" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Type" id="KGI-t9-OMF">
|
||||
<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>
|
||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="AuM-pD-Gul">
|
||||
<rect key="frame" x="12" y="52" width="368" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dpY-qZ-2Nk">
|
||||
<rect key="frame" x="90" y="13" width="100" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="ROMs" bezelStyle="rounded" image="NSFolder" imagePosition="leading" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="E0t-sX-rgE">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="showRomFolder:" target="-2" id="bys-Vs-b4m"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lnv-mh-zAr">
|
||||
<rect key="frame" x="6" y="13" width="87" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Refresh" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="mYS-h7-GUa">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent">r</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="refreshROMs:" target="-2" id="E7j-Fa-IN1"/>
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2Rg-eX-DUq">
|
||||
<rect key="frame" x="49" y="60" width="98" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="zip" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="1" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="7Cq-Lh-dgg" id="uum-dC-XD0">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" autoenablesItems="NO" id="kcg-aZ-mD9">
|
||||
<items>
|
||||
<menuItem title="zip" state="on" tag="1" id="7Cq-Lh-dgg"/>
|
||||
<menuItem title="7z" tag="2" id="s5r-gg-Ma9"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="downloadExtensionChanged:" target="-2" id="tp2-tg-bms"/>
|
||||
<binding destination="-2" name="selectedTag" keyPath="self.downloadExtension" id="uck-nA-UPg">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">DownloadExtensionTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="32" y="119.5"/>
|
||||
</window>
|
||||
<menu id="RJM-21-hjO">
|
||||
<items>
|
||||
<menuItem title="Show in Finder" tag="1" id="hDp-fh-9nU">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="showInFinder:" target="-2" id="ltL-yL-7EP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Download" tag="2" id="ree-Zg-jYB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="download:" target="-2" id="2ua-nq-Zy1"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Cancel" tag="3" id="7fY-83-Ads">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="cancel:" target="-2" id="cHE-Wq-jwc"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="fC3-h6-xe2"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-348" y="164"/>
|
||||
</menu>
|
||||
<userDefaultsController representsSharedInstance="YES" id="721-9N-Bma"/>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSFolder" width="32" height="32"/>
|
||||
</resources>
|
||||
</document>
|
@ -19,55 +19,20 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Ample" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="Vze-YF-m6e">
|
||||
<window title="Ample" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="LaunchWindow" animationBehavior="default" id="Vze-YF-m6e">
|
||||
<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="763"/>
|
||||
<rect key="contentRect" x="335" y="390" width="718" height="795"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="Ssv-Jw-EE0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="763"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="795"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oVt-eD-aaj">
|
||||
<rect key="frame" x="0.0" y="563" width="718" height="200"/>
|
||||
<rect key="frame" x="0.0" y="615" width="718" height="180"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zVI-uU-muo">
|
||||
<rect key="frame" x="18" y="102" width="71" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Window" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="vx1-I7-8kN">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameWindow" id="uS7-cg-wqb"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZUp-ni-Rr6">
|
||||
<rect key="frame" x="18" y="82" width="62" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Debug" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="6is-QN-JEc">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameDebug" id="vkc-sR-KnB"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pKK-yY-vnY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="52"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<textFieldCell key="cell" selectable="YES" allowsUndo="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="bk2-0p-jUj">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.commandLine" id="9gW-Y2-kvp"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nKp-px-nHg">
|
||||
<rect key="frame" x="587" y="58" width="111" height="23"/>
|
||||
<rect key="frame" x="588.5" y="58" width="111" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Launch" bezelStyle="texturedRounded" image="NSAppleMenuImage" imagePosition="left" alignment="center" borderStyle="border" inset="2" id="Ct1-Rb-7uI">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
@ -81,41 +46,8 @@ DQ
|
||||
<action selector="launchAction:" target="-2" id="a4d-zv-1CU"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rLP-n2-0eY">
|
||||
<rect key="frame" x="18" y="62" width="91" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="No Throttle" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="NyE-jT-WqC">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameNoThrottle" id="tUN-EX-7PF"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="D5h-dm-fuZ">
|
||||
<rect key="frame" x="131" y="102" width="104" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Square Pixels" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="yWK-BP-7Z9">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameSquarePixels" id="BiP-wC-Hpn"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zoQ-mU-ARl">
|
||||
<rect key="frame" x="261" y="102" width="67" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="No Blur" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="r3s-5h-Xv5">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameNoBlur" id="Pvn-zw-OsQ"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nNO-3T-OAy">
|
||||
<rect key="frame" x="470" y="58" width="109" height="23"/>
|
||||
<rect key="frame" x="470.5" y="58" width="109" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Reset Slots" bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Uii-5h-2R2">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
@ -128,22 +60,364 @@ DQ
|
||||
</connections>
|
||||
</button>
|
||||
<customView id="P9d-sS-qEb" customClass="FlippedView">
|
||||
<rect key="frame" x="20" y="155" width="306" height="400"/>
|
||||
<rect key="frame" x="20" y="92" width="316" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<tabView initialItem="zUN-Qs-haG" id="l8R-bg-6Zm">
|
||||
<rect key="frame" x="13" y="453" width="692" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="Video" identifier="" id="zUN-Qs-haG">
|
||||
<view key="view" id="QQT-HS-xjI">
|
||||
<rect key="frame" x="10" y="33" width="672" height="114"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pD8-dV-ijg">
|
||||
<rect key="frame" x="143" y="87" width="172" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Default" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="g0W-Ka-7bb" id="ceP-aK-me8">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="ajo-1k-sbD">
|
||||
<items>
|
||||
<menuItem title="Default" state="on" id="g0W-Ka-7bb"/>
|
||||
<menuItem title="Metal" tag="1" id="93g-cb-opl"/>
|
||||
<menuItem title="OpenGL" tag="2" id="B1R-9E-dMw"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameBGFX" id="ZuQ-OY-TrP"/>
|
||||
<binding destination="-2" name="selectedIndex" keyPath="self.mameBackend" id="oE1-Ho-H22"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qGO-Pm-SD1">
|
||||
<rect key="frame" x="79" y="92" width="60" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Backend:" id="WDr-Pl-lV1">
|
||||
<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>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ctE-fX-twN">
|
||||
<rect key="frame" x="318" y="92" width="51" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Effects:" id="Sqk-7k-PxQ">
|
||||
<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>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="826-p8-in8">
|
||||
<rect key="frame" x="15" y="91" width="57" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="BGFX" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Ubs-KZ-mpu">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameBGFX" id="9Ua-MZ-qbe"/>
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hM8-FM-Agh">
|
||||
<rect key="frame" x="382" y="87" width="172" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Default" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="Dsm-bi-Txy" id="mBS-h4-BWC">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="WdF-Hw-YI9">
|
||||
<items>
|
||||
<menuItem title="Default" state="on" id="Dsm-bi-Txy">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Unfiltered" tag="1" id="xgz-We-TFg">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="HLSL" tag="2" id="1UE-ea-V9a">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="CRT Geometry" tag="3" id="Dsx-wI-m3r">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="CRT Geometry Deluxe" tag="4" id="Ylw-Of-TM5">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="LCD Grid" tag="5" id="A6k-ku-z2M">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameBGFX" id="DVB-Ex-VYF"/>
|
||||
<binding destination="-2" name="selectedIndex" keyPath="self.mameEffects" id="rCg-d6-OR6"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="D5h-dm-fuZ">
|
||||
<rect key="frame" x="318" y="60" 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="yWK-BP-7Z9">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameSquarePixels" id="BiP-wC-Hpn"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameWindowMode" id="X80-2K-kTO"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6gd-45-eLr">
|
||||
<rect key="frame" x="15" y="60" width="94" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Window Mode:" id="l8n-CI-o4t">
|
||||
<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>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sei-LG-VM6">
|
||||
<rect key="frame" x="143" y="55" width="172" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Full Screen" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="0zZ-Ib-Fne" id="lsw-Vk-WcZ">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="m4N-Qw-mem">
|
||||
<items>
|
||||
<menuItem title="Full Screen" state="on" id="0zZ-Ib-Fne"/>
|
||||
<menuItem title="Window 1x" id="3bZ-rq-fCt"/>
|
||||
<menuItem title="Window 2x" id="KA4-Rs-yyK"/>
|
||||
<menuItem title="Window 3x" id="Dbh-Js-pMx" userLabel="Window 3x"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="selectedIndex" keyPath="self.mameWindowMode" id="B9e-SK-3RY"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button verticalHuggingPriority="750" id="9Db-wA-FP9">
|
||||
<rect key="frame" x="15" y="29" width="115" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Capture Mouse" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="3xh-Q7-WFl">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameMouse" id="vWu-od-2d6"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XNa-8k-X89">
|
||||
<rect key="frame" x="143" y="29" width="137" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Disk Sound Effects" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="MBT-Uv-Lev">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameSamples" id="77G-8C-HgT"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="CPU" identifier="" id="nr5-4o-DyG">
|
||||
<view key="view" id="ElY-YI-LLI">
|
||||
<rect key="frame" x="10" y="33" width="672" height="114"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZUp-ni-Rr6">
|
||||
<rect key="frame" x="15" y="60" 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="6is-QN-JEc">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameDebug" id="vkc-sR-KnB"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PGK-yK-2ZK">
|
||||
<rect key="frame" x="15" y="91" width="43" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Speed" id="D9w-Mz-PXs">
|
||||
<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>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FE4-gG-fPb">
|
||||
<rect key="frame" x="62" y="86" width="107" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="100%" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="1" imageScaling="proportionallyDown" inset="2" selectedItem="yoI-Ra-evu" id="M40-f0-awc">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="8Tv-0j-JhQ">
|
||||
<items>
|
||||
<menuItem title="100%" state="on" tag="1" id="yoI-Ra-evu"/>
|
||||
<menuItem title="200%" tag="2" id="UqT-yd-8o3"/>
|
||||
<menuItem title="300%" tag="3" id="awG-S1-uM4"/>
|
||||
<menuItem title="400%" tag="4" id="qJ5-Ed-W5U"/>
|
||||
<menuItem title="500%" tag="5" id="Phc-uW-Qog"/>
|
||||
<menuItem title="No Throttle" tag="-1" id="gAc-ME-eim"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="selectedTag" keyPath="self.mameSpeed" id="nFG-yA-KC1"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="A/V" identifier="" id="0T5-BN-lxE">
|
||||
<view key="view" id="knw-WE-UU3">
|
||||
<rect key="frame" x="10" y="33" width="672" height="114"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vWt-Dx-OGG">
|
||||
<rect key="frame" x="15" y="91" width="102" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Generate AVI" bezelStyle="regularSquare" imagePosition="left" inset="2" id="hRp-Lh-Ebr">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameAVI" id="G1O-YP-DXa"/>
|
||||
</connections>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ejn-wC-UXH">
|
||||
<rect key="frame" x="15" y="60" width="110" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Generate WAV" bezelStyle="regularSquare" imagePosition="left" inset="2" id="7Aa-N2-MHn">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameWAV" id="4r0-ZQ-nNC"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Yf-ZJ-8kx">
|
||||
<rect key="frame" x="132" y="59" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.wav" drawsBackground="YES" id="Xqc-zw-28b">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameWAV" id="lZM-6n-jAS"/>
|
||||
<binding destination="-2" name="value" keyPath="self.mameWAVPath" id="475-s3-0e4">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">/path/to/file.wav</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ne8-5I-D1H">
|
||||
<rect key="frame" x="132" y="28" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.vgm" drawsBackground="YES" id="xGs-Mi-wzj">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameVGM" id="TJV-4j-uVi"/>
|
||||
<binding destination="-2" name="value" keyPath="self.mameVGMPath" id="aK1-2A-QWB">
|
||||
<dictionary key="options">
|
||||
<string key="NSNoSelectionPlaceholder">/path/to/file.vgm</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameVGM" id="JZX-dA-3Bn"/>
|
||||
<binding destination="-2" name="value" keyPath="self.mameVGMPath" id="m7G-a0-QDZ">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">/path/to/file.vgm</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xht-PS-Hw8">
|
||||
<rect key="frame" x="132" y="90" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.avi" drawsBackground="YES" id="iY4-FF-x2e">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameAVI" id="o4R-KR-zVV"/>
|
||||
<binding destination="-2" name="value" keyPath="self.mameAVIPath" id="dSK-1u-lh6">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">/path/to/file.avi</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YVz-a3-9Pj">
|
||||
<rect key="frame" x="15" y="29" width="111" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Generate VGM" bezelStyle="regularSquare" imagePosition="left" inset="2" id="F9b-kg-ZMV">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameVGM" id="Oyp-Pc-Uad"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
</tabView>
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="J9O-xI-P5J" customClass="FlippedView">
|
||||
<rect key="frame" x="392" y="155" width="306" height="400"/>
|
||||
<rect key="frame" x="382" y="92" width="316" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" horizontalScrollElasticity="none" id="2ue-XT-byh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="eSY-AU-tvi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView focusRingType="none" editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsCharacterPickerTouchBarItem="NO" textCompletion="NO" id="c0R-8x-RL2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="minSize" width="718" height="51"/>
|
||||
<size key="maxSize" width="718" height="10000000"/>
|
||||
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.commandLine" id="deQ-gK-fgu">
|
||||
<dictionary key="options">
|
||||
<bool key="NSConditionallySetsEditable" value="NO"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textView>
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="qto-12-JOq">
|
||||
<rect key="frame" x="-100" y="-100" width="225" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="FPs-uz-0v2">
|
||||
<rect key="frame" x="703" y="0.0" width="15" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="769" y="104.5"/>
|
||||
<point key="canvasLocation" x="769" y="120.5"/>
|
||||
</window>
|
||||
<viewController title="Media View" nibName="MediaView" id="t7c-zy-czN" customClass="MediaViewController"/>
|
||||
<viewController title="Slot View" nibName="SlotView" id="lyS-mc-3Tf" customClass="SlotViewController"/>
|
||||
<viewController title="Slot View" nibName="NewSlotView" id="lyS-mc-3Tf" customClass="NewSlotViewController"/>
|
||||
<customObject id="RgH-d9-xl8" customClass="MachineViewController"/>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSAppleMenuImage" width="128" height="128"/>
|
||||
<image name="NSAppleMenuImage" width="11" height="14"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
@ -14,7 +14,7 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<window title="Ample Log" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="800" height="270"/>
|
||||
@ -36,7 +36,7 @@
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="minSize" width="785" height="270"/>
|
||||
<size key="maxSize" width="788" height="10000000"/>
|
||||
<size key="maxSize" width="800" height="10000000"/>
|
||||
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
</textView>
|
||||
</subviews>
|
@ -3,6 +3,7 @@
|
||||
<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="NSApplication">
|
||||
@ -12,7 +13,11 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
|
||||
<connections>
|
||||
<outlet property="installWindow" destination="jWX-pY-Zpb" id="xAj-Vj-Vxn"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
@ -112,6 +117,12 @@
|
||||
<action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Export Shell Script…" id="LmB-h2-UBZ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="exportShellScript:" target="-1" id="9eU-do-ffz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
|
||||
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
|
||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
|
||||
@ -346,268 +357,6 @@
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Format" id="jxT-CU-nIS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
|
||||
<items>
|
||||
<menuItem title="Font" id="Gi5-1S-RQB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
|
||||
<items>
|
||||
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
|
||||
<connections>
|
||||
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
|
||||
<connections>
|
||||
<action selector="underline:" target="-1" id="FYS-2b-JAY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
|
||||
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
|
||||
<menuItem title="Kern" id="jBQ-r6-VK2">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="GUa-eO-cwY">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardKerning:" target="-1" id="6dk-9l-Ckg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="cDB-IK-hbR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffKerning:" target="-1" id="U8a-gz-Maa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Tighten" id="46P-cB-AYj">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="tightenKerning:" target="-1" id="hr7-Nz-8ro"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Loosen" id="ogc-rX-tC1">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="loosenKerning:" target="-1" id="8i4-f9-FKE"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Ligatures" id="o6e-r0-MWq">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="agt-UL-0e3">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardLigatures:" target="-1" id="7uR-wd-Dx6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="J7y-lM-qPV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffLigatures:" target="-1" id="iX2-gA-Ilz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use All" id="xQD-1f-W4t">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useAllLigatures:" target="-1" id="KcB-kA-TuK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Baseline" id="OaQ-X3-Vso">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="3Om-Ey-2VK">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unscript:" target="-1" id="0vZ-95-Ywn"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Superscript" id="Rqc-34-cIF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="superscript:" target="-1" id="3qV-fo-wpU"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Subscript" id="I0S-gh-46l">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="subscript:" target="-1" id="Q6W-4W-IGz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Raise" id="2h7-ER-AoG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="raiseBaseline:" target="-1" id="4sk-31-7Q9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Lower" id="1tx-W0-xDw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowerBaseline:" target="-1" id="OF1-bc-KW4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
|
||||
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
|
||||
<connections>
|
||||
<action selector="orderFrontColorPanel:" target="-1" id="mSX-Xz-DV3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
|
||||
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyFont:" target="-1" id="GJO-xA-L4q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteFont:" target="-1" id="JfD-CL-leO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Text" id="Fal-I4-PZk">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Text" id="d9c-me-L2H">
|
||||
<items>
|
||||
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
|
||||
<connections>
|
||||
<action selector="alignLeft:" target="-1" id="zUv-R1-uAa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
|
||||
<connections>
|
||||
<action selector="alignCenter:" target="-1" id="spX-mk-kcS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Justify" id="J5U-5w-g23">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="alignJustified:" target="-1" id="ljL-7U-jND"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
|
||||
<connections>
|
||||
<action selector="alignRight:" target="-1" id="r48-bG-YeY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
|
||||
<menuItem title="Writing Direction" id="H1b-Si-o9J">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
|
||||
<items>
|
||||
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="YGs-j5-SAR">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionNatural:" target="-1" id="qtV-5e-UBP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="Lbh-J2-qVU">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionLeftToRight:" target="-1" id="S0X-9S-QSf"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="jFq-tB-4Kx">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionRightToLeft:" target="-1" id="5fk-qB-AqJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
|
||||
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="Nop-cj-93Q">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionNatural:" target="-1" id="lPI-Se-ZHp"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="BgM-ve-c93">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionLeftToRight:" target="-1" id="caW-Bv-w94"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="RB4-Sm-HuC">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionRightToLeft:" target="-1" id="EXD-6r-ZUu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
|
||||
<menuItem title="Show Ruler" id="vLm-3I-IUL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleRuler:" target="-1" id="FOx-HJ-KwY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyRuler:" target="-1" id="71i-fW-3W2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteRuler:" target="-1" id="cSh-wd-qM2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="View" id="H8h-7b-M4v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||
@ -655,6 +404,25 @@
|
||||
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kE9-em-OHN"/>
|
||||
<menuItem title="Ample Support Directory…" id="egj-hU-EtE">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="displaySupportDirectory:" target="Voe-Tx-rLC" id="XDA-Bv-9BJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Manage ROMs…" id="St3-qR-2Y8">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="displayROMS:" target="Voe-Tx-rLC" id="jFm-nv-kRC"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Recent Disk Images…" id="QY9-lF-kDy">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="displayRecentDiskImages:" target="Voe-Tx-rLC" id="9W1-nJ-8eJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
@ -674,11 +442,49 @@
|
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Keyboard Cheat Sheet" id="vcW-Dz-2Nx">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="displayCheatSheet:" target="Voe-Tx-rLC" id="HvD-mQ-4pe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Apple II Wiki" id="GLh-Cc-5uU">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="mameAppleWiki:" target="Voe-Tx-rLC" id="KEg-0U-KdU"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Documentation" id="1IW-V0-UWA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="mameDocumentation:" target="Voe-Tx-rLC" id="K8T-nZ-c5J"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
<point key="canvasLocation" x="132" y="154"/>
|
||||
</menu>
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="jWX-pY-Zpb">
|
||||
<rect key="contentRect" x="283" y="305" width="226" height="56"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="L7W-DF-UXe">
|
||||
<rect key="frame" x="0.0" y="0.0" width="226" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="iC1-A6-a6T">
|
||||
<rect key="frame" x="18" y="20" width="190" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Installing MAME components…" id="ura-rh-zmZ">
|
||||
<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>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="13" y="-182"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
|
@ -14,21 +14,20 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="20" horizontalPageScroll="10" verticalLineScroll="20" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="nVT-kT-bWl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="IBD-wb-pch">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="400"/>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="25" horizontalPageScroll="10" verticalLineScroll="25" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="nVT-kT-bWl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="363"/>
|
||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" ambiguous="YES" copiesOnScroll="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IBD-wb-pch">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="none" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" outlineTableColumn="pBj-py-R6a" id="sIz-DD-PZQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="400"/>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" outlineTableColumn="pBj-py-R6a" id="sIz-DD-PZQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="2" height="3"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn editable="NO" width="304" minWidth="40" maxWidth="1000" id="pBj-py-R6a">
|
||||
<tableColumn editable="NO" width="296" minWidth="40" maxWidth="1000" id="pBj-py-R6a">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@ -39,35 +38,17 @@
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="e4I-r0-vWM">
|
||||
<rect key="frame" x="1" y="1" width="304" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Mig-Wj-m5e">
|
||||
<rect key="frame" x="0.0" y="0.0" width="304" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="ZcN-bl-2D8">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="Mig-Wj-m5e" id="FYh-hX-PTU"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="CategoryView" focusRingType="none" id="33q-UT-ur5">
|
||||
<rect key="frame" x="1" y="21" width="304" height="17"/>
|
||||
<rect key="frame" x="1" y="1" width="296" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Pep-mX-LHY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="304" height="17"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="296" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="Rrg-wr-8eL">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="systemBold"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -77,13 +58,13 @@
|
||||
<outlet property="textField" destination="Pep-mX-LHY" id="hUe-cf-6vq"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="ItemView" id="yGq-lc-RCM" customClass="TablePathView">
|
||||
<rect key="frame" x="1" y="41" width="304" height="27"/>
|
||||
<tableCellView identifier="ItemView" translatesAutoresizingMaskIntoConstraints="NO" id="yGq-lc-RCM" customClass="TablePathView">
|
||||
<rect key="frame" x="1" y="21" width="296" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<pathControl focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="f7R-TO-fmF">
|
||||
<rect key="frame" x="0.0" y="1" width="251" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="20" y="0.0" width="244" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<pathCell key="cell" controlSize="small" selectable="YES" editable="YES" focusRingType="none" alignment="left" pathStyle="popUp" id="dcz-8y-tKb">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</pathCell>
|
||||
@ -91,20 +72,26 @@
|
||||
<action selector="pathAction:" target="-2" id="4oX-bW-ANp"/>
|
||||
</connections>
|
||||
</pathControl>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zNo-ij-mUl">
|
||||
<rect key="frame" x="256" y="5" width="23" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="rounded" image="NSNavEjectButton.normalSelected" imagePosition="overlaps" alignment="center" controlSize="small" imageScaling="proportionallyDown" inset="2" id="IZA-Tu-olu">
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="6g1-NT-J1w">
|
||||
<rect key="frame" x="0.0" y="1" width="20" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" image="drag-handle-4x10" id="x7F-qD-5y9"/>
|
||||
</imageView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zNo-ij-mUl" customClass="EjectButton">
|
||||
<rect key="frame" x="277" y="3" width="16" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="eject-16x16" imagePosition="only" alignment="center" alternateImage="eject-hover-16x16" imageScaling="proportionallyDown" inset="2" id="IZA-Tu-olu">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="deleteAction:" target="-2" id="XAl-eQ-nUj"/>
|
||||
<action selector="ejectAction:" target="-2" id="XAl-eQ-nUj"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="deleteButton" destination="zNo-ij-mUl" id="9br-3c-ddI"/>
|
||||
<outlet property="dragHandle" destination="6g1-NT-J1w" id="odc-Sw-3WS"/>
|
||||
<outlet property="ejectButton" destination="zNo-ij-mUl" id="uzY-tA-5Wf"/>
|
||||
<outlet property="pathControl" destination="f7R-TO-fmF" id="oH7-N3-JC7"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
@ -117,20 +104,27 @@
|
||||
</connections>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<nil key="backgroundColor"/>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="9Vz-lW-4GG">
|
||||
<rect key="frame" x="-100" y="-100" width="306" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="f8l-nC-KhG">
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="f8l-nC-KhG" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</scroller>
|
||||
<point key="canvasLocation" x="-161" y="55"/>
|
||||
<point key="canvasLocation" x="-161" y="54.5"/>
|
||||
</scrollView>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSNavEjectButton.normalSelected" width="16" height="16"/>
|
||||
<image name="drag-handle-4x10" width="4" height="10"/>
|
||||
<image name="eject-16x16" width="8" height="9"/>
|
||||
<image name="eject-hover-16x16" width="16" height="16"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
236
Ample/Base.lproj/NewSlotView.xib
Normal file
@ -0,0 +1,236 @@
|
||||
<?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="NewSlotViewController">
|
||||
<connections>
|
||||
<outlet property="_popover" destination="QIT-2T-wdy" id="WUB-OS-kem"/>
|
||||
<outlet property="childOutlineView" destination="uM0-Gk-crn" id="aL5-uC-O28"/>
|
||||
<outlet property="outlineView" destination="Xj3-Qf-yek" id="AWE-Rg-XUM"/>
|
||||
<outlet property="view" destination="D45-lv-6Fv" id="av3-OE-ph2"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="D45-lv-6Fv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" copiesOnScroll="NO" id="8x1-xN-a7c">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="2" autoresizesOutlineColumn="YES" outlineTableColumn="u7T-p8-F2Z" id="Xj3-Qf-yek">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn editable="NO" width="296" minWidth="40" maxWidth="1000" id="u7T-p8-F2Z">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FM7-eO-FE4">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="MenuCell" id="1RI-9K-5qj" customClass="SlotTableCellView">
|
||||
<rect key="frame" x="1" y="1" width="296" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qIF-d4-kOf">
|
||||
<rect key="frame" x="0.0" y="5" width="90" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="RAM:" id="tIz-xZ-ZJH">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zQ8-o3-yBB">
|
||||
<rect key="frame" x="82" y="0.0" width="199" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="tGi-yg-GFr" id="gt4-HK-pd1">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" autoenablesItems="NO" id="KWV-nn-eiB">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="tGi-yg-GFr"/>
|
||||
<menuItem title="Item 2" id="XJr-Gb-4D4"/>
|
||||
<menuItem title="Item 3" id="JeB-Fb-DeQ"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="9MH-mu-u5V"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xCe-sY-sGe">
|
||||
<rect key="frame" x="282" y="8" width="14" height="10"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSListViewTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="0qU-ID-kJ8">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="hamburger:" target="-2" id="5Xa-j7-Aod"/>
|
||||
<binding destination="1RI-9K-5qj" name="hidden" keyPath="objectValue.selectedItem.children" id="rY2-0l-0N8">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="hamburgerButton" destination="xCe-sY-sGe" id="5Da-If-Bt4"/>
|
||||
<outlet property="menuButton" destination="zQ8-o3-yBB" id="zZf-nm-tCI"/>
|
||||
<outlet property="textField" destination="qIF-d4-kOf" id="zIF-4n-v1e"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="OV9-yE-OFp"/>
|
||||
<outlet property="delegate" destination="-2" id="kXs-TN-3VL"/>
|
||||
</connections>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="rYF-ld-adB">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="4pL-Dn-e75" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</scroller>
|
||||
<point key="canvasLocation" x="-100" y="154"/>
|
||||
</scrollView>
|
||||
<viewController id="ziL-Zf-s1k" userLabel="Popover View Controller">
|
||||
<connections>
|
||||
<outlet property="view" destination="uew-UQ-Q25" id="qjB-ya-gFf"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<popover behavior="t" id="QIT-2T-wdy">
|
||||
<connections>
|
||||
<outlet property="contentViewController" destination="ziL-Zf-s1k" id="rj8-2U-9t0"/>
|
||||
</connections>
|
||||
</popover>
|
||||
<customView id="uew-UQ-Q25">
|
||||
<rect key="frame" x="0.0" y="0.0" width="250" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<button id="2jh-iq-DV6">
|
||||
<rect key="frame" x="232" y="382" width="14" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSStopProgressFreestandingTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="Wp7-Km-kYI">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="performClose:" target="QIT-2T-wdy" id="Q04-24-ZOK"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="5gB-oE-Gza">
|
||||
<rect key="frame" x="0.0" y="20" width="250" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="X5e-Ka-JLr">
|
||||
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" autoresizesOutlineColumn="YES" outlineTableColumn="o1K-z1-KVi" id="uM0-Gk-crn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="230" minWidth="40" maxWidth="1000" id="o1K-z1-KVi">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="A12-NQ-gW3">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="MenuCell" id="Mgb-8H-DmI" customClass="SlotTableCellView">
|
||||
<rect key="frame" x="1" y="1" width="230" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ThL-Yz-7Kd">
|
||||
<rect key="frame" x="1" y="0.0" width="229" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="djR-rV-wzX" id="SkW-fW-gwL">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" autoenablesItems="NO" id="7Ib-TL-f6U">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="djR-rV-wzX"/>
|
||||
<menuItem title="Item 2" id="qbC-4D-6t6"/>
|
||||
<menuItem title="Item 3" id="qPv-x5-zpj"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="ytA-nD-fIS"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="menuButton" destination="ThL-Yz-7Kd" id="3Oc-hx-qKl"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="HXP-pH-3Lc"/>
|
||||
<outlet property="delegate" destination="-2" id="nwb-IL-MsP"/>
|
||||
</connections>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Keh-oo-CPO">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="wtc-gL-alh" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<point key="canvasLocation" x="-451" y="61"/>
|
||||
</customView>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSListViewTemplate" width="14" height="10"/>
|
||||
<image name="NSStopProgressFreestandingTemplate" width="14" height="14"/>
|
||||
</resources>
|
||||
</document>
|
@ -6,9 +6,12 @@
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSWindowController">
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="PreferencesWindowController">
|
||||
<connections>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="SHw-b5-d6g"/>
|
||||
<outlet property="fixButton" destination="kt8-xs-My0" id="GeF-Kj-q2l"/>
|
||||
<outlet property="pathField" destination="Oz5-Xb-btk" id="EnV-kr-0XI"/>
|
||||
<outlet property="wdField" destination="l8V-pC-gml" id="exX-bU-pbh"/>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="xJa-tx-X62"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
@ -23,7 +26,7 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Oz5-Xb-btk">
|
||||
<rect key="frame" x="98" y="229" width="362" height="21"/>
|
||||
<rect key="frame" x="138" y="181" width="322" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="vDR-2V-qxd">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
@ -31,20 +34,36 @@
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="pathChanged:" target="-2" id="RRj-dC-q2y"/>
|
||||
<binding destination="yvB-HG-64y" name="value" keyPath="values.MamePath" id="H3O-1l-peo"/>
|
||||
<binding destination="yvB-HG-64y" name="enabled" keyPath="values.UseCustomMame" id="iex-A9-Db6"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Qmb-Ag-Xyr">
|
||||
<rect key="frame" x="18" y="232" width="74" height="16"/>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="l8V-pC-gml">
|
||||
<rect key="frame" x="138" y="150" width="322" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="wfj-GY-Qu2">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="wdChanged:" target="-2" id="g1P-8l-ZXi"/>
|
||||
<binding destination="yvB-HG-64y" name="enabled" keyPath="values.UseCustomMame" id="DeG-OW-Gd2"/>
|
||||
<binding destination="yvB-HG-64y" name="value" keyPath="values.MameWorkingDirectory" id="Kc9-Pc-XGU"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vTJ-Ez-c1R">
|
||||
<rect key="frame" x="18" y="153" width="114" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="MAME Path" id="Xcq-4g-Wlw">
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Working Directory" id="UHt-0s-zxA">
|
||||
<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>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="KAN-P2-ydI">
|
||||
<rect key="frame" x="96" y="205" width="217" height="18"/>
|
||||
<rect key="frame" x="136" y="234" width="217" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Close log window on normal exit" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="QMz-O0-06U">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
@ -54,6 +73,37 @@
|
||||
<binding destination="yvB-HG-64y" name="value" keyPath="values.AutoCloseLogWindow" id="q0L-GA-wM2"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="j7D-jC-17Q">
|
||||
<rect key="frame" x="136" y="208" width="139" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Use Custom MAME" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="V61-mz-QFo">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="yvB-HG-64y" name="value" keyPath="values.UseCustomMame" id="lH4-dm-kQC"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="kt8-xs-My0">
|
||||
<rect key="frame" x="287" y="13" width="179" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Fix VMNet Permissions" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ifc-ID-wbu">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="fixPerms:" target="-2" id="0e2-yf-UgY"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Qmb-Ag-Xyr">
|
||||
<rect key="frame" x="58" y="184" width="74" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="MAME Path" id="Xcq-4g-Wlw">
|
||||
<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>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="140" y="147"/>
|
||||
|
@ -28,10 +28,10 @@
|
||||
</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="534"/>
|
||||
<gridView autoresizesSubviews="NO" misplaced="YES" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="OM3-7F-wiN">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="459"/>
|
||||
<rows>
|
||||
<gridRow yPlacement="center" height="30" id="tHD-ui-hIL">
|
||||
<gridRow yPlacement="center" height="25" id="tHD-ui-hIL">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.ram" id="ze9-jx-lv0">
|
||||
<dictionary key="options">
|
||||
@ -40,7 +40,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="Ccd-U2-Gx5">
|
||||
<gridRow yPlacement="center" height="25" id="Ccd-U2-Gx5">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl0" id="YsR-kI-yrh">
|
||||
<dictionary key="options">
|
||||
@ -49,7 +49,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="JGU-aq-3uw">
|
||||
<gridRow yPlacement="center" height="25" id="JGU-aq-3uw">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl1" id="1io-aZ-v2G">
|
||||
<dictionary key="options">
|
||||
@ -58,7 +58,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="gVW-Ya-phU">
|
||||
<gridRow yPlacement="center" height="25" id="gVW-Ya-phU">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl2" id="AgS-hm-ePr">
|
||||
<dictionary key="options">
|
||||
@ -67,7 +67,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="3fP-qp-zmi">
|
||||
<gridRow yPlacement="center" height="25" id="3fP-qp-zmi">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl3" id="98U-4P-iRh">
|
||||
<dictionary key="options">
|
||||
@ -76,7 +76,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="86u-5p-UT6">
|
||||
<gridRow yPlacement="center" height="25" id="86u-5p-UT6">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl4" id="hsy-pm-Qjk">
|
||||
<dictionary key="options">
|
||||
@ -85,7 +85,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="Wdg-xb-xQx">
|
||||
<gridRow yPlacement="center" height="25" id="Wdg-xb-xQx">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl5" id="0QC-RB-278">
|
||||
<dictionary key="options">
|
||||
@ -94,7 +94,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="ein-Fe-vBw">
|
||||
<gridRow yPlacement="center" height="25" id="ein-Fe-vBw">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl6" id="731-3P-DUy">
|
||||
<dictionary key="options">
|
||||
@ -103,7 +103,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="qjB-2w-AWE">
|
||||
<gridRow yPlacement="center" height="25" id="qjB-2w-AWE">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl7" id="sew-Ds-4I9">
|
||||
<dictionary key="options">
|
||||
@ -112,7 +112,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="EEX-dh-jwn">
|
||||
<gridRow yPlacement="center" height="25" id="EEX-dh-jwn">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.exp" id="EOZ-lS-QHF">
|
||||
<dictionary key="options">
|
||||
@ -121,7 +121,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="OaZ-ZQ-gKK">
|
||||
<gridRow yPlacement="center" height="25" id="OaZ-ZQ-gKK">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.aux" id="OlF-v7-JZx">
|
||||
<dictionary key="options">
|
||||
@ -130,7 +130,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="wQi-Oz-7Ye">
|
||||
<gridRow yPlacement="center" height="25" id="wQi-Oz-7Ye">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.rs232" id="AeP-bn-blv">
|
||||
<dictionary key="options">
|
||||
@ -139,7 +139,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="gr2-eY-995">
|
||||
<gridRow yPlacement="center" height="25" id="gr2-eY-995">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.gameio" id="x3I-Bd-9di">
|
||||
<dictionary key="options">
|
||||
@ -148,7 +148,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="1xN-lm-s4l">
|
||||
<gridRow yPlacement="center" height="25" id="1xN-lm-s4l">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.printer" id="T9a-lH-z5K">
|
||||
<dictionary key="options">
|
||||
@ -157,7 +157,7 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="30" id="M2s-qn-SIT">
|
||||
<gridRow yPlacement="center" height="25" id="M2s-qn-SIT">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.modem" id="PSe-R3-S3e">
|
||||
<dictionary key="options">
|
||||
@ -174,7 +174,7 @@
|
||||
<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="511" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="439" 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"/>
|
||||
@ -184,7 +184,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="tHD-ui-hIL" column="6Vn-yh-FoQ" id="dak-Ha-01u">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="16" translatesAutoresizingMaskIntoConstraints="NO" id="Yks-M5-vi0">
|
||||
<rect key="frame" x="104" y="506" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="433" 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"/>
|
||||
@ -206,7 +206,7 @@
|
||||
</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="475" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="408" 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"/>
|
||||
@ -216,7 +216,7 @@
|
||||
</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="470" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="402" 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"/>
|
||||
@ -236,7 +236,7 @@
|
||||
</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="439" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="377" 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"/>
|
||||
@ -246,7 +246,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="JGU-aq-3uw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="v8q-Rj-E4q">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="bta-RS-JT4">
|
||||
<rect key="frame" x="104" y="434" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="371" 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"/>
|
||||
@ -266,7 +266,7 @@
|
||||
</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="403" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="346" 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"/>
|
||||
@ -276,7 +276,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="gVW-Ya-phU" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="OzN-rM-Pgi">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="cDU-b1-x5a">
|
||||
<rect key="frame" x="104" y="398" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="340" 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"/>
|
||||
@ -296,7 +296,7 @@
|
||||
</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="367" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="315" 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"/>
|
||||
@ -306,7 +306,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="3fP-qp-zmi" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="h8H-TB-p2z">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="3" translatesAutoresizingMaskIntoConstraints="NO" id="aSh-cs-0Nn">
|
||||
<rect key="frame" x="104" y="362" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="309" 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"/>
|
||||
@ -326,7 +326,7 @@
|
||||
</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="331" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="284" 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"/>
|
||||
@ -336,7 +336,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="86u-5p-UT6" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="dHu-cL-FyO">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="4" translatesAutoresizingMaskIntoConstraints="NO" id="kU5-cR-hPZ">
|
||||
<rect key="frame" x="104" y="326" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="278" 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"/>
|
||||
@ -356,7 +356,7 @@
|
||||
</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="295" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="253" 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"/>
|
||||
@ -366,7 +366,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="Wdg-xb-xQx" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="ffm-pA-jjo">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="5" translatesAutoresizingMaskIntoConstraints="NO" id="8z4-8f-kLU">
|
||||
<rect key="frame" x="104" y="290" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="247" 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"/>
|
||||
@ -386,7 +386,7 @@
|
||||
</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="259" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="222" 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"/>
|
||||
@ -396,7 +396,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="ein-Fe-vBw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="FsV-vO-KAs">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="6" translatesAutoresizingMaskIntoConstraints="NO" id="GLb-F4-PWe">
|
||||
<rect key="frame" x="104" y="254" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="216" 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"/>
|
||||
@ -416,7 +416,7 @@
|
||||
</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="223" width="104" height="16"/>
|
||||
<rect key="frame" x="-2" y="191" 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"/>
|
||||
@ -426,7 +426,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="qjB-2w-AWE" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Yvr-uR-Hr5">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="7" translatesAutoresizingMaskIntoConstraints="NO" id="IV2-3M-qfw">
|
||||
<rect key="frame" x="104" y="218" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="185" 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"/>
|
||||
@ -446,7 +446,7 @@
|
||||
</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"/>
|
||||
<rect key="frame" x="-2" y="160" 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"/>
|
||||
@ -456,7 +456,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="EEX-dh-jwn" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Ehv-aA-Llc">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="8" translatesAutoresizingMaskIntoConstraints="NO" id="San-wP-1ez">
|
||||
<rect key="frame" x="104" y="182" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="154" 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"/>
|
||||
@ -476,7 +476,7 @@
|
||||
</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"/>
|
||||
<rect key="frame" x="-2" y="129" 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"/>
|
||||
@ -486,7 +486,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="OaZ-ZQ-gKK" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="bx6-Rc-x2V">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="9" translatesAutoresizingMaskIntoConstraints="NO" id="3kq-qn-7YR">
|
||||
<rect key="frame" x="104" y="146" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="123" 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"/>
|
||||
@ -506,7 +506,7 @@
|
||||
</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"/>
|
||||
<rect key="frame" x="-2" y="98" 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"/>
|
||||
@ -516,7 +516,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="wQi-Oz-7Ye" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="zWk-jd-i0V">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="10" translatesAutoresizingMaskIntoConstraints="NO" id="6ln-U2-0Pi">
|
||||
<rect key="frame" x="104" y="110" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="92" 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"/>
|
||||
@ -536,7 +536,7 @@
|
||||
</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"/>
|
||||
<rect key="frame" x="-2" y="67" 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"/>
|
||||
@ -546,7 +546,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="gr2-eY-995" column="6Vn-yh-FoQ" id="nhy-Gp-GLL">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="11" translatesAutoresizingMaskIntoConstraints="NO" id="K8G-bZ-6mZ">
|
||||
<rect key="frame" x="104" y="74" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="61" 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"/>
|
||||
@ -566,7 +566,7 @@
|
||||
</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"/>
|
||||
<rect key="frame" x="-2" y="36" 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"/>
|
||||
@ -576,7 +576,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="1xN-lm-s4l" column="6Vn-yh-FoQ" id="KRc-Z8-drK">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="12" translatesAutoresizingMaskIntoConstraints="NO" id="sTp-en-8Wd">
|
||||
<rect key="frame" x="104" y="38" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="30" 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"/>
|
||||
@ -596,7 +596,7 @@
|
||||
</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"/>
|
||||
<rect key="frame" x="-2" y="5" 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"/>
|
||||
@ -606,7 +606,7 @@
|
||||
</gridCell>
|
||||
<gridCell row="M2s-qn-SIT" column="6Vn-yh-FoQ" id="idI-pW-e7v">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="13" translatesAutoresizingMaskIntoConstraints="NO" id="KHf-kC-BpZ">
|
||||
<rect key="frame" x="104" y="2" width="205" height="25"/>
|
||||
<rect key="frame" x="104" y="-1" 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"/>
|
||||
|
17
Ample/CheatSheetWindowController.h
Normal file
@ -0,0 +1,17 @@
|
||||
//
|
||||
// CheatSheetWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 1/14/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface CheatSheetWindowController : NSWindowController
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
47
Ample/CheatSheetWindowController.m
Normal file
@ -0,0 +1,47 @@
|
||||
//
|
||||
// CheatSheetWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 1/14/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CheatSheetWindowController.h"
|
||||
|
||||
#import <WebKit/WebKit.h>
|
||||
|
||||
@interface CheatSheetWindowController ()
|
||||
@property (weak) IBOutlet WKWebView *webView;
|
||||
|
||||
@end
|
||||
|
||||
@interface CheatSheetWindowController (NavigationDelegate) <WKNavigationDelegate>
|
||||
@end
|
||||
|
||||
@implementation CheatSheetWindowController
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"CheatSheet";
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
[_webView setHidden: YES];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *url = [bundle URLForResource: @"CheatSheet" withExtension: @"html"];
|
||||
//[[[_webView configuration] preferences] setValue: @YES forKey: @"developerExtrasEnabled"];
|
||||
[_webView loadFileURL: url allowingReadAccessToURL: url];
|
||||
|
||||
}
|
||||
|
||||
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
|
||||
// delay to prevent flash in dark mode.
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0/8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[webView setHidden: NO];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
@end
|
@ -2,9 +2,21 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>MameComponentsDate</key>
|
||||
<date>2021-04-28T16:00:00Z</date>
|
||||
<key>UseCustomMame</key>
|
||||
<false/>
|
||||
<key>AutoCloseLogWindow</key>
|
||||
<true/>
|
||||
<key>MamePath</key>
|
||||
<string>/usr/local/bin/mame</string>
|
||||
<key>MameWorkingDirectory</key>
|
||||
<string>/usr/local/share/mame/</string>
|
||||
<key>NSQuitAlwaysKeepsWindows</key>
|
||||
<true/>
|
||||
<key>DefaultDownloadURL</key>
|
||||
<string>https://archive.org/download/mame.0229</string>
|
||||
<key>DefaultDownloadExtension</key>
|
||||
<string>zip</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
28
Ample/DiskImagesWindowController.h
Normal file
@ -0,0 +1,28 @@
|
||||
//
|
||||
// DiskImagesWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/13/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DiskImagesWindowController : NSWindowController <NSWindowRestoration>
|
||||
|
||||
+(instancetype)sharedInstance;
|
||||
|
||||
@end
|
||||
|
||||
@interface DiskImagesWindowController (TableView) <NSTableViewDelegate, NSTableViewDataSource>
|
||||
|
||||
@end
|
||||
|
||||
@interface DiskImagesWindowController (Menu) <NSMenuDelegate>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
319
Ample/DiskImagesWindowController.m
Normal file
@ -0,0 +1,319 @@
|
||||
//
|
||||
// DiskImagesWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/13/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "DiskImagesWindowController.h"
|
||||
#import "TableCellView.h"
|
||||
#import "Ample.h"
|
||||
|
||||
@interface DiskImagesWindowController ()
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||
@property (strong) NSMutableArray *content;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DiskImagesWindowController {
|
||||
BOOL _dirty;
|
||||
NSSet *_extensions;
|
||||
NSTimer *_timer;
|
||||
|
||||
}
|
||||
|
||||
+(instancetype)sharedInstance {
|
||||
static DiskImagesWindowController *me;
|
||||
if (!me) {
|
||||
me = [self new];
|
||||
}
|
||||
return me;
|
||||
}
|
||||
|
||||
+ (void)restoreWindowWithIdentifier:(NSUserInterfaceItemIdentifier)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler {
|
||||
NSLog(@"restore disk images window");
|
||||
NSWindowController *controller = [self sharedInstance];
|
||||
NSWindow *w = [controller window];
|
||||
[w restoreStateWithCoder: state];
|
||||
completionHandler(w, nil);
|
||||
}
|
||||
|
||||
-(instancetype)init {
|
||||
|
||||
if ((self = [super init])) {
|
||||
|
||||
[self loadRecentDiskImages];
|
||||
|
||||
_extensions = [NSSet setWithObjects:
|
||||
@"2img", @"2mg", @"chd", @"dc", @"do", @"dsk", @"hd", @"hdv", @"image", @"nib", @"po", @"wav", @"woz", @"iso", @"raw", nil
|
||||
];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"DiskImages";
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
|
||||
if (!_content)
|
||||
[self setContent: [NSMutableArray new]];
|
||||
|
||||
[super windowDidLoad];
|
||||
NSWindow *window = [self window];
|
||||
[window setRestorable: YES];
|
||||
[window setRestorationClass: [self class]];
|
||||
|
||||
|
||||
[_tableView registerForDraggedTypes: @[NSPasteboardTypeFileURL]];
|
||||
[_tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal: NO]; // enable drag/drop to othr apps.
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
}
|
||||
|
||||
-(void)loadRecentDiskImages {
|
||||
// NSError *error;
|
||||
|
||||
NSURL *sd = SupportDirectory();
|
||||
NSURL *url = [sd URLByAppendingPathComponent: @"RecentDiskImages.plist"];
|
||||
|
||||
NSData *data = [NSData dataWithContentsOfURL: url];
|
||||
if (data) {
|
||||
_content = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListMutableContainers format:nil error: nil];
|
||||
|
||||
}
|
||||
if (!_content)
|
||||
_content = [NSMutableArray new];
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
[nc addObserver: self selector: @selector(diskImageAdded:) name: @"DiskImageAdded" object: nil];
|
||||
|
||||
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
||||
}
|
||||
|
||||
-(void)diskImageAdded: (NSNotification *)notification {
|
||||
|
||||
NSURL *url = [notification object];
|
||||
if (!url) return;
|
||||
|
||||
[self addFile: url];
|
||||
}
|
||||
-(void)markDirty {
|
||||
_dirty = YES;
|
||||
if (_timer) [_timer invalidate];
|
||||
_timer = [NSTimer scheduledTimerWithTimeInterval: 5 * 60 repeats: NO block: ^(NSTimer *t) {
|
||||
|
||||
self->_timer = nil;
|
||||
[self saveFile];
|
||||
}];
|
||||
}
|
||||
|
||||
-(void)saveFile {
|
||||
|
||||
[_timer invalidate];
|
||||
_timer = nil;
|
||||
|
||||
NSURL *sd = SupportDirectory();
|
||||
NSURL *url = [sd URLByAppendingPathComponent: @"RecentDiskImages.plist"];
|
||||
|
||||
if (_content && url) {
|
||||
[_content writeToURL: url atomically: YES];
|
||||
}
|
||||
_dirty = NO;
|
||||
|
||||
}
|
||||
|
||||
-(void)willTerminate: (NSNotification *)notification {
|
||||
// if dirty, write data....
|
||||
|
||||
if (!_dirty) return;
|
||||
|
||||
[self saveFile];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
-(BOOL)addFile: (NSObject *)pathOrURL {
|
||||
|
||||
NSString *path = nil;
|
||||
NSURL *url = nil;
|
||||
if ([pathOrURL isKindOfClass: [NSString class]]) {
|
||||
path = (NSString *)pathOrURL;
|
||||
} else if ([pathOrURL isKindOfClass: [NSURL class]]){
|
||||
url = (NSURL *)pathOrURL;
|
||||
|
||||
path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
}
|
||||
if (!path) return NO;
|
||||
|
||||
// todo -- check if file is in the list already...
|
||||
|
||||
BOOL found = NO;
|
||||
// should really compare the volume id / ino I suppose.
|
||||
for (NSMutableDictionary *d in _content) {
|
||||
NSString *s = [d objectForKey: @"path"];
|
||||
if ([path compare: s] == NSOrderedSame) {
|
||||
found = YES;
|
||||
[d setObject: [NSDate new] forKey: @"date"];
|
||||
[self markDirty];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) return NO;
|
||||
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error;
|
||||
|
||||
NSDictionary *attr = [fm attributesOfItemAtPath: path error: &error];
|
||||
if (error) {
|
||||
NSLog(@"%@ : %@", path, error);
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
NSNumber *size = [attr objectForKey: NSFileSize];
|
||||
|
||||
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys:
|
||||
path, @"path",
|
||||
size, @"size",
|
||||
[NSDate new], @"date",
|
||||
nil];
|
||||
|
||||
@synchronized (self) {
|
||||
if (_arrayController)
|
||||
[_arrayController addObject: d];
|
||||
else
|
||||
[_content addObject: d];
|
||||
}
|
||||
[self markDirty];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
-(NSMutableDictionary *)clickedItem {
|
||||
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0) return nil;
|
||||
|
||||
NSTableCellView *v = [_tableView viewAtColumn: 0 row: row makeIfNecessary: NO];
|
||||
return [v objectValue];
|
||||
}
|
||||
#pragma mark - IBActions
|
||||
|
||||
- (IBAction)showInFinder:(id)sender {
|
||||
|
||||
NSMutableDictionary *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
NSString *path = [item objectForKey: @"path"];
|
||||
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
if (!url) return;
|
||||
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
[ws activateFileViewerSelectingURLs: @[url]];
|
||||
}
|
||||
|
||||
- (IBAction)eject:(id)sender {
|
||||
|
||||
NSMutableDictionary *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
@synchronized (self) {
|
||||
|
||||
if (_arrayController) {
|
||||
[_arrayController removeObject: item];
|
||||
} else {
|
||||
[_content removeObject: item];
|
||||
}
|
||||
[self markDirty];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation DiskImagesWindowController (TableView)
|
||||
|
||||
#if 0
|
||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
||||
return 5; //[_data count];
|
||||
}
|
||||
|
||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
|
||||
NSTableCellView *v = [tableView makeViewWithIdentifier: @"PathCell" owner: self];
|
||||
|
||||
return v;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
-(id<NSPasteboardWriting>)tableView:(NSTableView *)tableView pasteboardWriterForRow:(NSInteger)row {
|
||||
|
||||
id objects = [_arrayController arrangedObjects];
|
||||
|
||||
NSDictionary *d = [objects objectAtIndex: row];
|
||||
|
||||
NSString *path = [d objectForKey: @"path"];
|
||||
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
return url;
|
||||
|
||||
#if 0
|
||||
NSPasteboardItem *item = [NSPasteboardItem new];
|
||||
[item setString: [url absoluteString] forType: NSPasteboardTypeFileURL]; // FileURL
|
||||
[item setString: path forType: NSPasteboardTypeString]; // for Terminal.app
|
||||
|
||||
return item;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation {
|
||||
|
||||
if ([info draggingSource] == _tableView) return NSDragOperationNone;
|
||||
|
||||
// option key will ignore all filetype restrictions.
|
||||
if ([NSEvent modifierFlags] & NSEventModifierFlagOption) return NSDragOperationCopy;
|
||||
|
||||
// this only checks the first dragged item...
|
||||
NSPasteboard * pb = [info draggingPasteboard];
|
||||
NSURL *url = [NSURL URLFromPasteboard: pb];
|
||||
|
||||
NSString *ext = [url pathExtension];
|
||||
ext = [ext lowercaseString];
|
||||
if ([_extensions containsObject: ext])
|
||||
return NSDragOperationCopy;
|
||||
|
||||
return NSDragOperationNone;
|
||||
}
|
||||
|
||||
-(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
|
||||
|
||||
if ([info draggingSource] == _tableView) return NO;
|
||||
|
||||
NSPasteboard * pb = [info draggingPasteboard];
|
||||
|
||||
BOOL ok = NO;
|
||||
for (NSPasteboardItem *item in [pb pasteboardItems]) {
|
||||
|
||||
// need to convert from a string to a url back to a file in case it's a file id url?
|
||||
NSString *s = [item stringForType: NSPasteboardTypeFileURL];
|
||||
if (!s) continue;
|
||||
NSURL *url = [NSURL URLWithString: s];
|
||||
if (!url) continue;
|
||||
|
||||
ok |= [self addFile: url];
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
@end
|
42
Ample/DownloadWindowController.h
Normal file
@ -0,0 +1,42 @@
|
||||
//
|
||||
// DownloadWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/2/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DownloadWindowController : NSWindowController <NSWindowRestoration>
|
||||
|
||||
@property NSString *currentROM;
|
||||
@property NSInteger currentCount;
|
||||
@property NSInteger totalCount;
|
||||
@property NSInteger errorCount;
|
||||
@property BOOL active;
|
||||
|
||||
+(instancetype)sharedInstance;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@interface DownloadWindowController (URL) <NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate>
|
||||
@end
|
||||
|
||||
@interface DownloadWindowController (Table) <NSTableViewDelegate, NSTableViewDataSource>
|
||||
@end
|
||||
|
||||
@interface DownloadWindowController (Menu) <NSMenuDelegate, NSMenuItemValidation>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface DownloadTableCellView : NSTableCellView
|
||||
@property (weak) IBOutlet NSTextField *statusTextField;
|
||||
@property (weak) IBOutlet NSProgressIndicator *activity;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
677
Ample/DownloadWindowController.m
Normal file
@ -0,0 +1,677 @@
|
||||
//
|
||||
// DownloadWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/2/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "DownloadWindowController.h"
|
||||
#import "Menu.h"
|
||||
|
||||
|
||||
enum {
|
||||
kTagZip = 1,
|
||||
kTag7z = 2,
|
||||
};
|
||||
|
||||
@interface DownloadExtensionTransformer: NSValueTransformer
|
||||
@end
|
||||
|
||||
@implementation DownloadExtensionTransformer
|
||||
|
||||
+(void)load {
|
||||
[NSValueTransformer setValueTransformer: [DownloadExtensionTransformer new] forName: @"FormatTransformer"];
|
||||
|
||||
}
|
||||
|
||||
+ (Class)transformedValueClass {
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL)allowsReverseTransformation {
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(id)transformedValue:(id)value {
|
||||
// string to number.
|
||||
if ([@"zip" isEqualToString: value])
|
||||
return @(kTagZip);
|
||||
if ([@"7z" isEqualToString: value])
|
||||
return @(kTag7z);
|
||||
return @0;
|
||||
}
|
||||
|
||||
-(id)reverseTransformedValue:(id)value {
|
||||
// number back to string.
|
||||
switch ([value intValue]) {
|
||||
case kTagZip: return @"zip";
|
||||
case kTag7z: return @"7z";
|
||||
default: return @"";
|
||||
}
|
||||
}
|
||||
|
||||
+(unsigned)stringToNumber: (NSString *)string {
|
||||
if ([@"zip" isEqualToString: string])
|
||||
return kTagZip;
|
||||
if ([@"7z" isEqualToString: string])
|
||||
return kTag7z;
|
||||
return 0;
|
||||
}
|
||||
|
||||
+(NSString *)numberToString: (unsigned)number {
|
||||
switch (number) {
|
||||
case kTagZip: return @"zip";
|
||||
case kTag7z: return @"7z";
|
||||
default: return @"";
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
enum {
|
||||
ItemMissing = 0,
|
||||
ItemFound,
|
||||
ItemDownloading,
|
||||
ItemDownloaded,
|
||||
ItemCanceled,
|
||||
ItemError
|
||||
};
|
||||
|
||||
@interface DownloadItem : NSObject
|
||||
|
||||
@property NSString *name;
|
||||
@property NSError *error;
|
||||
@property NSString *pathName;
|
||||
@property NSURLSessionDownloadTask *task;
|
||||
@property NSURL *localURL;
|
||||
|
||||
@property NSUInteger status;
|
||||
@property NSUInteger index;
|
||||
|
||||
|
||||
-(void)cancelDownload;
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task;
|
||||
-(void)completeWithError: (NSError *)error;
|
||||
-(NSString *)statusDescription;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@interface DownloadWindowController ()
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
@property (weak) IBOutlet NSPopUpButton *formatButton;
|
||||
@property (weak) IBOutlet NSTextField *downloadField;
|
||||
@property NSString *downloadExtension;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadWindowController {
|
||||
|
||||
NSArray *_items;
|
||||
NSURL *_romFolder;
|
||||
NSURL *_defaultDownloadURL;
|
||||
NSURL *_downloadURL;
|
||||
|
||||
NSURLSession *_session;
|
||||
NSMutableDictionary *_taskIndex;
|
||||
NSUserDefaults *_defaults;
|
||||
}
|
||||
|
||||
+(instancetype)sharedInstance {
|
||||
static DownloadWindowController *me = nil;
|
||||
if (!me) {
|
||||
me = [self new];
|
||||
}
|
||||
return me;
|
||||
}
|
||||
|
||||
+ (void)restoreWindowWithIdentifier:(nonnull NSUserInterfaceItemIdentifier)identifier state:(nonnull NSCoder *)state completionHandler:(nonnull void (^)(NSWindow * _Nullable, NSError * _Nullable))completionHandler {
|
||||
NSLog(@"restore rom manager window");
|
||||
|
||||
NSWindowController *controller = [DownloadWindowController sharedInstance];
|
||||
NSWindow *w = [controller window];
|
||||
[w restoreStateWithCoder: state];
|
||||
completionHandler(w, nil);
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
- (void)encodeWithCoder:(nonnull NSCoder *)coder {
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"DownloadWindow";
|
||||
}
|
||||
|
||||
-(void)windowWillLoad {
|
||||
_defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
// set here so binding works.
|
||||
NSString *s = [_defaults stringForKey: kDownloadExtension];
|
||||
if (![s length]) s = [_defaults stringForKey: kDefaultDownloadExtension];
|
||||
|
||||
_downloadExtension = s;
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
#if 0
|
||||
NSWindow *window = [self window];
|
||||
// disabled for now ... restoration happens before defaults are loaded.
|
||||
[window setRestorable: YES];
|
||||
[window setRestorationClass: [self class]];
|
||||
#endif
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
|
||||
NSError *error = nil;
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
NSURL *url = [bundle URLForResource: @"roms" withExtension: @"plist"];
|
||||
|
||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
|
||||
NSURL *sd = SupportDirectory();
|
||||
|
||||
_romFolder = [sd URLByAppendingPathComponent: @"roms"];
|
||||
|
||||
[fm createDirectoryAtURL: _romFolder withIntermediateDirectories: YES attributes: nil error: &error];
|
||||
|
||||
// so blank URL isn't overwritten.
|
||||
NSString *s = [_defaults stringForKey: kDefaultDownloadURL];
|
||||
_defaultDownloadURL = [NSURL URLWithString: s];
|
||||
[_downloadField setPlaceholderString: s];
|
||||
|
||||
s = [_defaults stringForKey: kDownloadURL];
|
||||
if ([s length]) {
|
||||
[_downloadField setStringValue: s];
|
||||
_downloadURL = [NSURL URLWithString: s];
|
||||
} else {
|
||||
_downloadURL = _defaultDownloadURL;
|
||||
}
|
||||
|
||||
[self initializeExtensionMenu];
|
||||
|
||||
|
||||
NSArray *roms = [d objectForKey: @"roms"];
|
||||
[self setCurrentROM: @""];
|
||||
[self setCurrentCount: 0];
|
||||
[self setTotalCount: [roms count]];
|
||||
[self setErrorCount: 0];
|
||||
|
||||
|
||||
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity: [roms count]];
|
||||
unsigned ix = 0;
|
||||
for (NSString *name in roms) {
|
||||
|
||||
DownloadItem *item = [DownloadItem new];
|
||||
[item setName: name];
|
||||
[item setIndex: ix++];
|
||||
|
||||
[tmp addObject: item];
|
||||
}
|
||||
_items = tmp;
|
||||
[self refreshROMs: nil];
|
||||
|
||||
//[_tableView reloadData];
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
_session = [NSURLSession sessionWithConfiguration: config delegate: self delegateQueue: nil];
|
||||
_taskIndex = [NSMutableDictionary dictionaryWithCapacity: [_items count]];
|
||||
|
||||
//[self download];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
-(void)validateURL: (NSString *)url {
|
||||
NSURL *v;
|
||||
|
||||
if (![url length]) {
|
||||
_effectiveURL = [NSURL URLWithString: _downloadURL];
|
||||
[_downloadField setTextColor: nil];
|
||||
return;
|
||||
}
|
||||
|
||||
v = [NSURL URLWithString: url];
|
||||
if (v) {
|
||||
_effectiveURL = v;
|
||||
[_downloadField setTextColor: nil];
|
||||
} else {
|
||||
_effectiveURL = [NSURL URLWithString: _downloadURL];
|
||||
[_downloadField setTextColor: [NSColor systemRedColor]];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
-(void)downloadItem: (DownloadItem *)item {
|
||||
|
||||
if (!_session) {
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
_session = [NSURLSession sessionWithConfiguration: config delegate: self delegateQueue: nil];
|
||||
}
|
||||
|
||||
NSURLSessionDownloadTask *task;
|
||||
NSString *s = [item name];
|
||||
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
||||
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
||||
|
||||
task = [_session downloadTaskWithURL: url];
|
||||
|
||||
[item beginDownloadWithTask: task];
|
||||
[_taskIndex setObject: item forKey: task];
|
||||
|
||||
[task resume];
|
||||
|
||||
}
|
||||
|
||||
-(void)download {
|
||||
|
||||
// run in thread?
|
||||
//unsigned count = 0;
|
||||
|
||||
for (DownloadItem *item in _items) {
|
||||
|
||||
NSURLSessionDownloadTask *task;
|
||||
NSString *s = [item name];
|
||||
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
||||
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
||||
|
||||
task = [_session downloadTaskWithURL: url];
|
||||
[_taskIndex setObject: item forKey: task];
|
||||
|
||||
[item setTask: task];
|
||||
|
||||
[task resume];
|
||||
|
||||
//++count;
|
||||
//if (count >= 2) break;
|
||||
}
|
||||
[self setActive: YES];
|
||||
|
||||
}
|
||||
|
||||
-(DownloadItem *)clickedItem {
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0 || row >= [_items count]) return nil;
|
||||
return [_items objectAtIndex: row];
|
||||
}
|
||||
-(void)redrawRow: (NSUInteger)row {
|
||||
|
||||
//NSRect r = [_tableView rectOfRow: row];
|
||||
//[_tableView setNeedsDisplayInRect: r];
|
||||
|
||||
NSIndexSet *rIx = [NSIndexSet indexSetWithIndex: row];
|
||||
NSIndexSet *cIx = [NSIndexSet indexSetWithIndex: 0];
|
||||
|
||||
[_tableView reloadDataForRowIndexes: rIx columnIndexes: cIx];
|
||||
}
|
||||
|
||||
|
||||
-(void)initializeExtensionMenu {
|
||||
|
||||
unsigned tag;
|
||||
// mark default download extension.
|
||||
NSString *defaultExt = [_defaults stringForKey: kDefaultDownloadExtension];
|
||||
tag = [DownloadExtensionTransformer stringToNumber: defaultExt];
|
||||
|
||||
NSMenuItem *item = [[_formatButton menu] itemWithTag: tag];
|
||||
if (item) {
|
||||
[item setAttributedTitle: ItalicMenuString([item title])];
|
||||
}
|
||||
|
||||
#if 0
|
||||
// handled via binding.
|
||||
NSString *ext = [_defaults stringForKey: kDownloadExtension];
|
||||
if ([ext length]) {
|
||||
ix = [DownloadExtensionTransformer stringToNumber: ext];
|
||||
}
|
||||
|
||||
[_formatButton selectItemWithTag: tag];
|
||||
#endif
|
||||
}
|
||||
|
||||
#pragma mark - IBActions
|
||||
|
||||
-(IBAction)cancelAll:(id)sender {
|
||||
|
||||
for (DownloadItem *item in _items) {
|
||||
[item cancelDownload];
|
||||
}
|
||||
|
||||
[_session invalidateAndCancel];
|
||||
_session = nil;
|
||||
[_taskIndex removeAllObjects];
|
||||
[self setCurrentCount: 0];
|
||||
[self setActive: NO];
|
||||
|
||||
[_tableView reloadData];
|
||||
//[_tableView setNeedsDisplay: YES]; // doesn't work...
|
||||
}
|
||||
|
||||
- (IBAction)downloadMissing:(id)sender {
|
||||
|
||||
BOOL delta = NO;
|
||||
for (DownloadItem *item in _items) {
|
||||
NSURL *url = [item localURL];
|
||||
id task = [item task];
|
||||
if (!url && !task) {
|
||||
[self downloadItem: item];
|
||||
delta = YES;
|
||||
}
|
||||
}
|
||||
|
||||
if (delta) {
|
||||
[self setActive: YES];
|
||||
[_tableView reloadData];
|
||||
}
|
||||
}
|
||||
- (IBAction)showRomFolder:(id)sender {
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
|
||||
[ws openURL: _romFolder];
|
||||
}
|
||||
|
||||
-(IBAction)refreshROMs: (id)sender {
|
||||
|
||||
NSString *romdir = [SupportDirectoryPath() stringByAppendingPathComponent: @"roms"];
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
for (DownloadItem *item in _items) {
|
||||
NSString *name = [item name];
|
||||
NSString *s = [romdir stringByAppendingPathComponent: name];
|
||||
NSString *path;
|
||||
path = [s stringByAppendingPathExtension: @"zip"];
|
||||
if ([fm fileExistsAtPath: path]) {
|
||||
[item setStatus: ItemFound];
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
continue;
|
||||
}
|
||||
|
||||
path = [s stringByAppendingPathExtension: @"7z"];
|
||||
if ([fm fileExistsAtPath: path]) {
|
||||
[item setStatus: ItemFound];
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// only needed if items aren't bound.
|
||||
[_tableView reloadData];
|
||||
}
|
||||
|
||||
- (IBAction)showInFinder:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
NSURL *url = [item localURL];
|
||||
if (!url) return;
|
||||
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
[ws activateFileViewerSelectingURLs: @[url]];
|
||||
}
|
||||
|
||||
- (IBAction)download:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[self downloadItem: item];
|
||||
[self setActive: YES];
|
||||
[self redrawRow: [item index]];
|
||||
}
|
||||
- (IBAction)cancel:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[item cancelDownload];
|
||||
[self redrawRow: [item index]];
|
||||
}
|
||||
|
||||
// binding screws up with placeholder.
|
||||
-(IBAction)downloadURLChanged: (NSTextField *)sender {
|
||||
NSString *value;
|
||||
value = [sender stringValue];
|
||||
if (![value length]) {
|
||||
[_defaults removeObjectForKey: kDownloadURL];
|
||||
_downloadURL = _defaultDownloadURL;
|
||||
return;
|
||||
}
|
||||
// [self validateURL: value];
|
||||
[_defaults setValue: value forKey: kDownloadURL];
|
||||
_downloadURL = [NSURL URLWithString: value];
|
||||
}
|
||||
- (IBAction)downloadExtensionChanged:(id)sender {
|
||||
[_defaults setValue: _downloadExtension forKey: kDownloadExtension];
|
||||
}
|
||||
|
||||
#pragma mark - NSURLSessionDelegate
|
||||
|
||||
static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
NSURLResponse *response = [task response];
|
||||
if ([response isKindOfClass: [NSHTTPURLResponse class]]) {
|
||||
return [(NSHTTPURLResponse *)response statusCode];
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
|
||||
|
||||
|
||||
if (error) NSLog(@"Download error: %@", error);
|
||||
|
||||
NSInteger statusCode = TaskStatusCode(task);
|
||||
if (!error && statusCode != 200) {
|
||||
// treat as an error.
|
||||
NSDictionary *info = @{
|
||||
NSURLErrorKey: [[task originalRequest] URL],
|
||||
NSLocalizedDescriptionKey: [NSHTTPURLResponse localizedStringForStatusCode: statusCode],
|
||||
};
|
||||
error = [NSError errorWithDomain: NSURLErrorDomain code: NSURLErrorFileDoesNotExist userInfo: info];
|
||||
}
|
||||
|
||||
|
||||
// not sure if strictly necessary but this happens in a background thread
|
||||
// and these are used in KVO binding. Also, main thread only
|
||||
// means no race conditions.
|
||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||
if (error) {
|
||||
[self setErrorCount: self->_errorCount + 1];
|
||||
} else {
|
||||
[self setCurrentCount: self->_currentCount + 1];
|
||||
}
|
||||
NSMutableDictionary *taskIndex = self->_taskIndex;
|
||||
DownloadItem *item = [taskIndex objectForKey: task];
|
||||
[taskIndex removeObjectForKey: task];
|
||||
|
||||
if ([taskIndex count] == 0) {
|
||||
[self setActive: NO];
|
||||
}
|
||||
|
||||
if (item) {
|
||||
[item completeWithError: error];
|
||||
NSUInteger row = [item index];
|
||||
|
||||
[self redrawRow: row];
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
- (void)URLSession:(NSURLSession *)session downloadTask:(nonnull NSURLSessionDownloadTask *)task didFinishDownloadingToURL:(nonnull NSURL *)location {
|
||||
|
||||
|
||||
// NSLog(@"%@", task);
|
||||
// NSLog(@"%@", [task response]);
|
||||
|
||||
if (TaskStatusCode(task) != 200) return;
|
||||
|
||||
|
||||
// need to move to the destination directory...
|
||||
// file deleted after this function returns, so can't move asynchronously.
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSURL *src = [[task originalRequest] URL];
|
||||
NSURL *dest = [_romFolder URLByAppendingPathComponent: [src lastPathComponent]];
|
||||
NSError *error = nil;
|
||||
|
||||
[fm moveItemAtURL: location toURL: dest error: &error];
|
||||
|
||||
DownloadItem *item = [_taskIndex objectForKey: task];
|
||||
[item setLocalURL: dest];
|
||||
|
||||
/*
|
||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||
|
||||
|
||||
[item setLocalURL: dest];
|
||||
}
|
||||
*/
|
||||
NSLog(@"%@", src);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadWindowController (Table)
|
||||
|
||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
||||
return [_items count];
|
||||
}
|
||||
|
||||
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
|
||||
return [_items objectAtIndex: row];
|
||||
}
|
||||
|
||||
|
||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
|
||||
DownloadItem *item = [_items objectAtIndex: row];
|
||||
DownloadTableCellView *v = [tableView makeViewWithIdentifier: @"DownloadCell" owner: self];
|
||||
|
||||
NSTextField *tf;
|
||||
NSColor *redColor = [NSColor systemRedColor];
|
||||
|
||||
tf = [v textField];
|
||||
[[v textField] setObjectValue: [item name]];
|
||||
|
||||
if ([item localURL]) {
|
||||
[tf setTextColor: nil];
|
||||
} else {
|
||||
[tf setTextColor: redColor];
|
||||
}
|
||||
|
||||
tf = [v statusTextField];
|
||||
[tf setObjectValue: [item statusDescription]];
|
||||
if ([item error]) {
|
||||
[tf setTextColor: redColor];
|
||||
} else {
|
||||
[tf setTextColor: nil];
|
||||
//if ([tableView isRowSelected: row]){
|
||||
//[tf setTextColor: [NSColor whiteColor]];
|
||||
//}
|
||||
}
|
||||
|
||||
if ([item task]) {
|
||||
[[v activity] startAnimation: nil];
|
||||
} else {
|
||||
[[v activity] stopAnimation: nil];
|
||||
}
|
||||
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation DownloadTableCellView
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadItem
|
||||
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task {
|
||||
_task = task;
|
||||
_error = nil;
|
||||
if (task) _status = ItemDownloading;
|
||||
}
|
||||
|
||||
-(void)cancelDownload {
|
||||
if (!_task) return;
|
||||
[_task cancel];
|
||||
_task = nil;
|
||||
_status = ItemCanceled;
|
||||
}
|
||||
|
||||
-(void)completeWithError: (NSError *)error {
|
||||
_task = nil;
|
||||
if (error) {
|
||||
_error = error;
|
||||
_status = ItemError;
|
||||
} else {
|
||||
// what if there was an error moving it?
|
||||
_error = nil;
|
||||
_status = ItemDownloaded;
|
||||
}
|
||||
}
|
||||
|
||||
-(NSString *)statusDescription {
|
||||
|
||||
static NSString *Names[] = {
|
||||
@"ROM missing",
|
||||
@"ROM found",
|
||||
@"Downloading…",
|
||||
@"Downloaded",
|
||||
@"Canceled",
|
||||
@"Error"
|
||||
};
|
||||
if (_error) return [_error localizedDescription];
|
||||
|
||||
if (_status > sizeof(Names)/sizeof(Names[0])) return @"Unknown";
|
||||
return Names[_status];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@implementation DownloadWindowController (Menu)
|
||||
|
||||
enum {
|
||||
kOpenInFinder = 1,
|
||||
kDownload,
|
||||
kCancel,
|
||||
};
|
||||
|
||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
|
||||
if ([menuItem action] == @selector(downloadExtensionChanged:)) return YES;
|
||||
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0) return NO;
|
||||
DownloadItem *item = [_items objectAtIndex: row];
|
||||
|
||||
NSUInteger status = [item status];
|
||||
switch([menuItem tag]) {
|
||||
case kOpenInFinder:
|
||||
return status == ItemFound || status == ItemDownloaded;
|
||||
break;
|
||||
case kDownload:
|
||||
return YES;
|
||||
//return status == ItemMissing || status == ItemError || status == ItemCanceled;
|
||||
break;
|
||||
case kCancel:
|
||||
return status == ItemDownloading;
|
||||
break;
|
||||
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
17
Ample/EjectButton.h
Normal file
@ -0,0 +1,17 @@
|
||||
//
|
||||
// EjectButton.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/7/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EjectButton : NSButton
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
60
Ample/EjectButton.m
Normal file
@ -0,0 +1,60 @@
|
||||
//
|
||||
// EjectButton.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/7/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EjectButton.h"
|
||||
|
||||
static NSImage *ejectImage = nil;
|
||||
static NSImage *ejectHoverImage = nil;
|
||||
|
||||
@implementation EjectButton {
|
||||
NSTrackingRectTag _tracking;
|
||||
BOOL _mouse;
|
||||
}
|
||||
|
||||
+(void)initialize {
|
||||
// content tint only works with template images.
|
||||
ejectImage = [NSImage imageNamed: @"eject-16x16"];
|
||||
ejectHoverImage = [NSImage imageNamed: @"eject-hover-16x16"];
|
||||
[ejectImage setTemplate: YES];
|
||||
[ejectHoverImage setTemplate: YES];
|
||||
}
|
||||
|
||||
-(void)awakeFromNib {
|
||||
[super awakeFromNib];
|
||||
[self setButtonType: NSButtonTypeMomentaryPushIn];
|
||||
[self setImage: ejectImage];
|
||||
[self setAlternateImage: ejectHoverImage];
|
||||
// _tracking = [self addTrackingRect: [self bounds] owner: self userData: nil assumeInside: NO];
|
||||
}
|
||||
|
||||
-(void)viewDidMoveToWindow {
|
||||
if (!_tracking)
|
||||
_tracking = [self addTrackingRect: [self bounds] owner: self userData: nil assumeInside: NO];
|
||||
|
||||
}
|
||||
|
||||
-(void)mouseEntered:(NSEvent *)event {
|
||||
_mouse = YES;
|
||||
if ([self isEnabled])
|
||||
[self setImage: ejectHoverImage];
|
||||
}
|
||||
-(void)mouseExited:(NSEvent *)event {
|
||||
_mouse = NO;
|
||||
if ([self isEnabled])
|
||||
[self setImage: ejectImage];
|
||||
}
|
||||
|
||||
-(void)setEnabled:(BOOL)enabled {
|
||||
[super setEnabled: enabled];
|
||||
if (_mouse) {
|
||||
[self setImage: enabled ? ejectHoverImage : ejectImage];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@end
|
@ -4,6 +4,33 @@
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>vgm</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Video Game Music</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSTypeIsPackage</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>vgz</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Video Game Music</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSTypeIsPackage</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
@ -17,9 +44,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>release 2</string>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2</string>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
|
@ -6,19 +6,23 @@
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "LaunchWindowController.h"
|
||||
#import "MediaViewController.h"
|
||||
#import "SlotViewController.h"
|
||||
#import "NewSlotViewController.h"
|
||||
#import "MachineViewController.h"
|
||||
#import "LogWindowController.h"
|
||||
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
static NSString *kMyContext = @"kMyContext";
|
||||
static NSString *kContextMachine = @"kContextMachine";
|
||||
|
||||
|
||||
@interface LaunchWindowController ()
|
||||
@property (strong) IBOutlet MediaViewController *mediaController;
|
||||
@property (strong) IBOutlet SlotViewController *slotController;
|
||||
@property (strong) IBOutlet NewSlotViewController *slotController;
|
||||
@property (strong) IBOutlet MachineViewController *machineViewController;
|
||||
|
||||
@property (weak) IBOutlet NSView *machineView;
|
||||
@ -30,13 +34,27 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
@property NSArray *args;
|
||||
|
||||
@property NSString *mameMachine;
|
||||
@property BOOL mameWindow;
|
||||
@property BOOL mameNoThrottle;
|
||||
@property BOOL mameDebug;
|
||||
@property BOOL mameSquarePixels;
|
||||
@property BOOL mameNoBlur;
|
||||
@property BOOL mameMouse;
|
||||
@property BOOL mameSamples;
|
||||
|
||||
@property BOOL mameAVI;
|
||||
@property BOOL mameWAV;
|
||||
@property BOOL mameVGM;
|
||||
|
||||
@property NSString *mameAVIPath;
|
||||
@property NSString *mameWAVPath;
|
||||
@property NSString *mameVGMPath;
|
||||
|
||||
@property NSInteger mameSpeed;
|
||||
|
||||
@property BOOL mameBGFX;
|
||||
@property NSInteger mameBackend;
|
||||
@property NSInteger mameEffects;
|
||||
|
||||
|
||||
@property NSInteger mameWindowMode;
|
||||
|
||||
@end
|
||||
|
||||
@ -47,6 +65,13 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
return @"LaunchWindow";
|
||||
}
|
||||
|
||||
-(void)windowWillLoad {
|
||||
[self setMameSpeed: 1];
|
||||
[self setMameBGFX: YES];
|
||||
[self setMameMouse: NO];
|
||||
[self setMameSamples: YES];
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
@ -57,23 +82,31 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
[_mediaView addSubview: [_mediaController view]];
|
||||
[_machineView addSubview: [_machineViewController view]];
|
||||
|
||||
|
||||
[self addObserver: self forKeyPath: @"mameMachine" 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)];
|
||||
[self addObserver: self forKeyPath: @"mameDebug" options:0 context: (__bridge void * _Nullable)(kMyContext)];
|
||||
[self addObserver: self forKeyPath: @"mameNoThrottle" options:0 context: (__bridge void * _Nullable)(kMyContext)];
|
||||
|
||||
[self addObserver: self forKeyPath: @"mameNoBlur" options:0 context: (__bridge void * _Nullable)(kMyContext)];
|
||||
NSArray *keys = @[
|
||||
@"mameMachine", @"mameSquarePixels", @"mameWindowMode",
|
||||
@"mameMouse", @"mameSamples",
|
||||
@"mameDebug",
|
||||
@"mameSpeed",
|
||||
@"mameAVI", @"mameAVIPath",
|
||||
@"mameWAV", @"mameWAVPath",
|
||||
@"mameVGM", @"mameVGMPath",
|
||||
@"mameBGFX", @"mameBackend", @"mameEffects",
|
||||
];
|
||||
|
||||
for (NSString *key in keys) {
|
||||
[self addObserver: self forKeyPath: key options:0 context: (__bridge void * _Nullable)(kMyContext)];
|
||||
}
|
||||
|
||||
|
||||
[_slotController addObserver: self forKeyPath: @"args" options: 0 context: (__bridge void * _Nullable)(kMyContext)];
|
||||
[_mediaController addObserver: self forKeyPath: @"args" options: 0 context: (__bridge void * _Nullable)(kMyContext)];
|
||||
|
||||
[_mediaController bind: @"media" toObject: _slotController withKeyPath: @"media" options: 0];
|
||||
|
||||
[self buildCommandLine];
|
||||
|
||||
[_machineViewController addObserver: self forKeyPath: @"machine" options: 0 context: (__bridge void * _Nullable)kContextMachine];
|
||||
|
||||
[self buildCommandLine];
|
||||
}
|
||||
|
||||
|
||||
@ -84,14 +117,17 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
} else if (context == (__bridge void *)kContextMachine) {
|
||||
NSString *machine = [_machineViewController machine];
|
||||
[self setMameMachine: machine];
|
||||
[_slotController setModel: machine];
|
||||
[_slotController setMachine: machine];
|
||||
[self buildCommandLine];
|
||||
} else {
|
||||
[super observeValueForKeyPath: keyPath ofObject: object change: change context: context];
|
||||
}
|
||||
}
|
||||
|
||||
static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
|
||||
|
||||
static NSString * JoinArguments(NSArray *argv, NSString *argv0) {
|
||||
|
||||
static NSCharacterSet *safe = nil;
|
||||
static NSCharacterSet *unsafe = nil;
|
||||
@ -110,7 +146,14 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
|
||||
//unsigned ix = 0;
|
||||
[rv appendString: @"mame"];
|
||||
//[rv appendString: @"mame"];
|
||||
if (argv0) {
|
||||
[rv appendString: argv0];
|
||||
} else {
|
||||
NSString *path = MamePath();
|
||||
path = path ? [path lastPathComponent] : @"mame";
|
||||
[rv appendString: path];
|
||||
}
|
||||
for (NSString *s in argv) {
|
||||
[rv appendString: @" "];
|
||||
NSUInteger l = [s length];
|
||||
@ -159,8 +202,70 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
static NSString *ShellQuote(NSString *s) {
|
||||
|
||||
static NSCharacterSet *safe = nil;
|
||||
static NSCharacterSet *unsafe = nil;
|
||||
|
||||
if (!safe) {
|
||||
NSString *str =
|
||||
@"%+-./:=_"
|
||||
@"0123456789"
|
||||
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
;
|
||||
safe = [NSCharacterSet characterSetWithCharactersInString: str];
|
||||
unsafe = [safe invertedSet];
|
||||
}
|
||||
|
||||
NSUInteger l = [s length];
|
||||
|
||||
if (!l) {
|
||||
return @"''";
|
||||
}
|
||||
|
||||
if (!CFStringFindCharacterFromSet((CFStringRef)s, (CFCharacterSetRef)unsafe, CFRangeMake(0, l), 0, NULL)) {
|
||||
return s;
|
||||
}
|
||||
|
||||
NSMutableString *rv = [NSMutableString new];
|
||||
|
||||
unichar *buffer = malloc(sizeof(unichar) * l);
|
||||
[s getCharacters: buffer range: NSMakeRange(0, l)];
|
||||
|
||||
[rv appendString: @"'"];
|
||||
for (NSUInteger i = 0; i < l; ++i) {
|
||||
unichar c = buffer[i];
|
||||
switch (c) {
|
||||
case '\'':
|
||||
[rv appendString: @"\\'"];
|
||||
break;
|
||||
case '\\':
|
||||
[rv appendString: @"\\\\"];
|
||||
break;
|
||||
case 0x7f:
|
||||
[rv appendString: @"\\177"];
|
||||
break;
|
||||
default: {
|
||||
NSString *cc;
|
||||
if (c < 0x20) {
|
||||
cc = [NSString stringWithFormat: @"\\%o", c];
|
||||
} else {
|
||||
cc = [NSString stringWithCharacters: &c length: 1];
|
||||
}
|
||||
[rv appendString: cc];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
[rv appendString: @"'"];
|
||||
free(buffer);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
-(void)buildCommandLine {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if (!_mameMachine) {
|
||||
[self setCommandLine: @""];
|
||||
@ -171,34 +276,94 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
//[argv addObject: @"mame"];
|
||||
[argv addObject: _mameMachine];
|
||||
|
||||
if (_mameDebug) [argv addObject: @"-debug"];
|
||||
if (_mameWindow) {
|
||||
[argv addObject: @"-window"];
|
||||
[argv addObject: @"-nomax"];
|
||||
}
|
||||
|
||||
// -confirm_quit?
|
||||
[argv addObject: @"-skip_gameinfo"];
|
||||
|
||||
if (_mameWindow && _mameSquarePixels) {
|
||||
NSSize screen = [_slotController resolution];
|
||||
|
||||
NSString *res = [NSString stringWithFormat: @"%ux%u", (unsigned)screen.width, (unsigned)screen.height];
|
||||
NSString *aspect = [NSString stringWithFormat: @"%u:%u", (unsigned)screen.width, (unsigned)screen.height];
|
||||
|
||||
[argv addObject: @"-nounevenstretch"];
|
||||
|
||||
if (_mameMouse)
|
||||
[argv addObject: @"-mouse"]; // capture the mouse cursor when over the window.
|
||||
|
||||
[argv addObject: @"-resolution"];
|
||||
[argv addObject: res];
|
||||
if (!_mameSamples)
|
||||
[argv addObject: @"-nosamples"];
|
||||
|
||||
if (_mameDebug) [argv addObject: @"-debug"];
|
||||
|
||||
[argv addObject: @"-aspect"];
|
||||
[argv addObject: aspect];
|
||||
|
||||
if (_mameNoBlur) {
|
||||
[argv addObject: @"-video"];
|
||||
[argv addObject: @"soft"];
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* -window -nomax uses a 4:3 aspect ratio - ie, height = width * 3 / 4 (since height is always the limiting factor)
|
||||
* for square pixels, should pass the true size and true aspect ratio.
|
||||
*/
|
||||
|
||||
NSSize screen = [_slotController resolution];
|
||||
switch(_mameWindowMode) {
|
||||
case 0: // full screen;
|
||||
// no uneven stretch doesn't do anything in full-screen mode.
|
||||
break;
|
||||
case 1: // 1x
|
||||
// make the command-line a bit shorter and more pleasant.
|
||||
if (!_mameSquarePixels) {
|
||||
[argv addObject: @"-window"];
|
||||
[argv addObject: @"-nomax"];
|
||||
break;
|
||||
}
|
||||
|
||||
// drop through.
|
||||
case 2: // 2x
|
||||
case 3: // 3x
|
||||
|
||||
if (_mameSquarePixels) {
|
||||
// NSString *aspect = [NSString stringWithFormat: @"%u:%u", (unsigned)screen.width, (unsigned)screen.height];
|
||||
// [argv addObject: @"-aspect"];
|
||||
// [argv addObject: aspect];
|
||||
[argv addObject: @"-nounevenstretch"];
|
||||
} else {
|
||||
screen.height = round(screen.width * 3 / 4);
|
||||
}
|
||||
|
||||
[argv addObject: @"-window"];
|
||||
NSString *res = [NSString stringWithFormat: @"%ux%u",
|
||||
(unsigned)(_mameWindowMode * screen.width),
|
||||
(unsigned)(_mameWindowMode * screen.height)
|
||||
];
|
||||
|
||||
[argv addObject: @"-resolution"];
|
||||
[argv addObject: res];
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (_mameBGFX) {
|
||||
if (_mameBackend) {
|
||||
static NSString *Names[] = {
|
||||
@"-",
|
||||
@"metal",
|
||||
@"opengl",
|
||||
};
|
||||
[argv addObject: @"-bgfx_backend"];
|
||||
[argv addObject: Names[_mameBackend]];
|
||||
}
|
||||
if (_mameEffects) {
|
||||
static NSString *Names[] = {
|
||||
@"-",
|
||||
@"unfiltered",
|
||||
@"hlsl",
|
||||
@"crt-geom",
|
||||
@"crt-geom-deluxe",
|
||||
@"lcd-grid",
|
||||
};
|
||||
[argv addObject: @"-bgfx_screen_chains"];
|
||||
[argv addObject: Names[_mameEffects]];
|
||||
}
|
||||
|
||||
} else {
|
||||
[argv addObject: @"-video"];
|
||||
[argv addObject: @"soft"];
|
||||
}
|
||||
|
||||
|
||||
// -speed n
|
||||
// -scale n
|
||||
|
||||
@ -213,40 +378,100 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
[argv addObjectsFromArray: tmp];
|
||||
}
|
||||
|
||||
if (_mameNoThrottle) [argv addObject: @"-nothrottle"];
|
||||
if (_mameSpeed < 0) {
|
||||
[argv addObject: @"-nothrottle"];
|
||||
} else if (_mameSpeed > 1) {
|
||||
[argv addObject: @"-speed"];
|
||||
[argv addObject: [NSString stringWithFormat: @"%d", (int)_mameSpeed]];
|
||||
}
|
||||
|
||||
// audio video.
|
||||
|
||||
if (_mameAVI && [_mameAVIPath length]) {
|
||||
[argv addObject: @"-aviwrite"];
|
||||
[argv addObject: _mameAVIPath];
|
||||
}
|
||||
|
||||
if (_mameWAV && [_mameWAVPath length]) {
|
||||
[argv addObject: @"-wavwrite"];
|
||||
[argv addObject: _mameWAVPath];
|
||||
}
|
||||
|
||||
// vgm only valid for custom mame.
|
||||
if (![defaults boolForKey: kUseCustomMame]) {
|
||||
if (_mameVGM && [_mameVGMPath length]) {
|
||||
[argv addObject: @"-vgmwrite"];
|
||||
[argv addObject: _mameVGMPath];
|
||||
}
|
||||
}
|
||||
|
||||
[self setCommandLine: JoinArguments(argv)]; //[argv componentsJoinedByString:@" "]];
|
||||
[self setCommandLine: JoinArguments(argv, nil)];
|
||||
[self setArgs: argv];
|
||||
}
|
||||
|
||||
|
||||
-(BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
SEL cmd = [menuItem action];
|
||||
if (cmd == @selector(exportShellScript:)) {
|
||||
return [_args count] ? YES : NO;
|
||||
}
|
||||
return [super validateMenuItem: menuItem];
|
||||
}
|
||||
|
||||
# pragma mark - IBActions
|
||||
|
||||
|
||||
|
||||
- (IBAction)launchAction:(id)sender {
|
||||
|
||||
if (![_args count]) return;
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
|
||||
NSString *path = [defaults stringForKey: @"MamePath"];
|
||||
if (![path length]) path = @"/usr/local/bin/mame";
|
||||
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
|
||||
NSTask *task = [NSTask new];
|
||||
[task setExecutableURL: url];
|
||||
[task setArguments: _args];
|
||||
#if 0
|
||||
// interferes w/ termination notification.
|
||||
[task setTerminationHandler: ^(NSTask *t){
|
||||
|
||||
}];
|
||||
#endif
|
||||
[LogWindowController controllerForTask: task];
|
||||
|
||||
[LogWindowController controllerForArgs: _args];
|
||||
|
||||
}
|
||||
|
||||
-(IBAction)exportShellScript: (id)sender {
|
||||
|
||||
NSSavePanel *p = [NSSavePanel savePanel];
|
||||
|
||||
NSString *defaultName = [_mameMachine stringByAppendingString: @".sh"];
|
||||
|
||||
[p setTitle: @"Export Shell Script"];
|
||||
[p setExtensionHidden: NO];
|
||||
[p setNameFieldStringValue: defaultName];
|
||||
|
||||
//[p setDelegate: self];
|
||||
|
||||
NSWindow *w = [self window];
|
||||
|
||||
NSMutableString *data = [NSMutableString new];
|
||||
|
||||
[data appendString: @"#!/bin/sh\n\n"];
|
||||
[data appendFormat: @"MAME=%@\n", ShellQuote(MamePath())];
|
||||
[data appendFormat: @"cd %@\n", ShellQuote(MameWorkingDirectoryPath())];
|
||||
[data appendString: JoinArguments(_args, @"$MAME")];
|
||||
[data appendString: @"\n\n"];
|
||||
|
||||
[p beginSheetModalForWindow: w completionHandler: ^(NSModalResponse r) {
|
||||
|
||||
if (r != NSModalResponseOK) return;
|
||||
|
||||
NSURL *url = [p URL];
|
||||
NSError *error = nil;
|
||||
[data writeToURL: url atomically: YES encoding: NSUTF8StringEncoding error: &error];
|
||||
|
||||
[p orderOut: nil];
|
||||
|
||||
if (error) {
|
||||
[self presentError: error];
|
||||
return;
|
||||
}
|
||||
|
||||
// chmod 755...
|
||||
int ok = chmod([url fileSystemRepresentation], 0755);
|
||||
if (ok < 0) {
|
||||
// ...
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
@ -13,7 +13,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@interface LogWindowController : NSWindowController <NSWindowDelegate>
|
||||
|
||||
+(id)controllerForTask: (NSTask *)task;
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@ -6,6 +6,7 @@
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "LogWindowController.h"
|
||||
|
||||
static NSMutableSet *LogWindows;
|
||||
@ -35,6 +36,30 @@ static NSMutableSet *LogWindows;
|
||||
return controller;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args {
|
||||
|
||||
// NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
NSURL *url = MameURL();
|
||||
|
||||
if (!url) {
|
||||
NSAlert *alert = [NSAlert new];
|
||||
|
||||
[alert setMessageText: @"Unable to find MAME executable path"];
|
||||
[alert runModal];
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSTask *task = [NSTask new];
|
||||
[task setExecutableURL: url];
|
||||
[task setArguments: args];
|
||||
[task setCurrentDirectoryURL: MameWorkingDirectory()];
|
||||
|
||||
return [LogWindowController controllerForTask: task];
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
@ -47,7 +72,10 @@ static NSMutableSet *LogWindows;
|
||||
{
|
||||
if ([string length])
|
||||
{
|
||||
[[[_textView textStorage] mutableString] appendString: string];
|
||||
// needs explicit color attribute for proper dark mode support.
|
||||
NSDictionary *attr = @{ NSForegroundColorAttributeName: [NSColor textColor] };
|
||||
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
||||
[[_textView textStorage] appendAttributedString: astr];
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,22 +86,33 @@ static NSMutableSet *LogWindows;
|
||||
|
||||
NSError *error = nil;
|
||||
NSPipe *pipe = [NSPipe pipe];
|
||||
|
||||
|
||||
// window not yet loaded until [self window] called.
|
||||
const char *path = [[task executableURL] fileSystemRepresentation];
|
||||
// if (cp) [self appendString: [NSString stringWithFormat: @"MAME path: %s", cp]];
|
||||
const char *wd = [[task currentDirectoryURL] fileSystemRepresentation];
|
||||
// if (cp) [self appendString: [NSString stringWithFormat: @"Working Directory: %s", cp]];
|
||||
|
||||
[task setStandardError: pipe];
|
||||
[task setStandardOutput: pipe];
|
||||
[task launchAndReturnError: &error];
|
||||
|
||||
|
||||
if (error) {
|
||||
NSLog(@"launchAction: %@", error);
|
||||
[self appendString: [error description]];
|
||||
// NSURL *url = [task executableURL];
|
||||
// NSString *path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
NSLog(@"NSTask error. Path = %s error = %@", path, error);
|
||||
// [self appendString: path];
|
||||
// [self appendString: [error description]];
|
||||
return error;
|
||||
}
|
||||
_task = task;
|
||||
NSString *title = [NSString stringWithFormat: @"Log Window - %u", [task processIdentifier]];
|
||||
NSString *title = [NSString stringWithFormat: @"Ample Log - %u", [task processIdentifier]];
|
||||
[[self window] setTitle: title];
|
||||
_handle = [pipe fileHandleForReading];
|
||||
|
||||
|
||||
if (path) [self appendString: [NSString stringWithFormat: @"MAME path: %s\n", path]];
|
||||
if (wd) [self appendString: [NSString stringWithFormat: @"Working Directory: %s\n", wd]];
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
@ -134,8 +173,7 @@ static NSMutableSet *LogWindows;
|
||||
}
|
||||
else
|
||||
{
|
||||
string = @"\n\n[Caught signal]\n\n";
|
||||
|
||||
string = [NSString stringWithFormat: @"\n\n[Caught signal %d (%s)]\n\n", status, strsignal(status)];
|
||||
}
|
||||
|
||||
[self appendString: string];
|
||||
@ -145,7 +183,7 @@ static NSMutableSet *LogWindows;
|
||||
|
||||
[[self window] setDocumentEdited: NO];
|
||||
|
||||
if (ok && [[NSUserDefaults standardUserDefaults] boolForKey: @"AutoCloseLogWindow"]) {
|
||||
if (ok && [[NSUserDefaults standardUserDefaults] boolForKey: kAutoCloseLogWindow]) {
|
||||
|
||||
[[self window] close];
|
||||
//[LogWindows removeObject: self]; // close sends WindowWillClose notification.
|
||||
|
@ -24,7 +24,7 @@
|
||||
_data = [NSArray arrayWithContentsOfFile: path];
|
||||
|
||||
|
||||
/* My Copy of XCode/Interface Builder barfs on NSBrowser. */
|
||||
/* XCode/Interface Builder 11.3 barfs on NSBrowser. */
|
||||
|
||||
NSBrowser *browser;
|
||||
NSRect frame = NSMakeRect(0, 0, 718, 200);
|
||||
|
30
Ample/Media.h
Normal file
@ -0,0 +1,30 @@
|
||||
//
|
||||
// Media.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 3/7/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef Media_h
|
||||
#define Media_h
|
||||
|
||||
|
||||
typedef struct Media {
|
||||
unsigned cass;
|
||||
unsigned cdrom;
|
||||
unsigned hard;
|
||||
unsigned floppy_5_25;
|
||||
unsigned floppy_3_5;
|
||||
unsigned pseudo_disk;
|
||||
} Media;
|
||||
|
||||
struct Media MediaFromDictionary(NSDictionary *);
|
||||
|
||||
void MediaAdd(Media *dest, const Media *src);
|
||||
|
||||
BOOL MediaEqual(const Media *lhs, const Media *rhs);
|
||||
|
||||
extern const Media EmptyMedia;
|
||||
|
||||
#endif /* Media_h */
|
58
Ample/Media.m
Normal file
@ -0,0 +1,58 @@
|
||||
//
|
||||
// Media.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 3/7/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "Media.h"
|
||||
|
||||
const Media EmptyMedia = { 0 };
|
||||
|
||||
struct Media MediaFromDictionary(NSDictionary *dict) {
|
||||
|
||||
Media m = { 0 };
|
||||
|
||||
#define _(name) m.name = [[dict objectForKey: @ # name] unsignedIntValue]
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
_(hard);
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
|
||||
return m;
|
||||
#undef _
|
||||
}
|
||||
|
||||
void MediaAdd(Media *dest, const Media *src) {
|
||||
|
||||
if (!src || !dest) return;
|
||||
|
||||
#define _(name) dest->name += src->name;
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
_(hard);
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
#undef _
|
||||
}
|
||||
|
||||
BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
||||
if (lhs == rhs) return YES;
|
||||
if (!lhs || !rhs) return NO;
|
||||
|
||||
|
||||
#define _(name) if (lhs->name != rhs->name) return NO;
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
_(hard);
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
return YES;
|
||||
#undef _
|
||||
}
|
@ -7,16 +7,17 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "Media.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MediaViewController : NSViewController <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
||||
|
||||
@property (weak) IBOutlet NSOutlineView *outlineView;
|
||||
@property (nonatomic) NSDictionary *media;
|
||||
@property (nonatomic) Media media;
|
||||
@property NSArray *args;
|
||||
|
||||
- (IBAction)deleteAction:(id)sender;
|
||||
- (IBAction)ejectAction:(id)sender;
|
||||
- (IBAction)pathAction:(id)sender;
|
||||
|
||||
|
||||
@ -26,10 +27,4 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
||||
|
||||
@interface TablePathView : NSTableCellView
|
||||
@property (weak) IBOutlet NSPathControl *pathControl;
|
||||
@property (weak) IBOutlet NSButton *deleteButton;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@ -7,11 +7,7 @@
|
||||
//
|
||||
|
||||
#import "MediaViewController.h"
|
||||
|
||||
|
||||
@implementation TablePathView
|
||||
|
||||
@end
|
||||
#import "TableCellView.h"
|
||||
|
||||
|
||||
@protocol MediaNode
|
||||
@ -22,14 +18,16 @@
|
||||
-(NSString *)viewIdentifier;
|
||||
-(void)prepareView: (NSTableCellView *)view;
|
||||
-(CGFloat)height;
|
||||
-(NSInteger)index;
|
||||
@end
|
||||
|
||||
@interface MediaCategory : NSObject <MediaNode> {
|
||||
|
||||
}
|
||||
@property NSInteger validCount;
|
||||
@property NSArray *children; // URLs?
|
||||
@property NSMutableArray *children; // URLs?
|
||||
@property NSString *title;
|
||||
@property NSInteger index;
|
||||
|
||||
-(NSInteger)count;
|
||||
-(id)objectAtIndex:(NSInteger)index;
|
||||
@ -40,6 +38,7 @@
|
||||
|
||||
@property NSURL *url;
|
||||
@property BOOL valid;
|
||||
@property NSInteger index;
|
||||
|
||||
-(NSInteger)count;
|
||||
-(id)objectAtIndex:(NSInteger)index;
|
||||
@ -52,6 +51,10 @@
|
||||
|
||||
@implementation MediaCategory
|
||||
|
||||
+(instancetype)categoryWithTitle: (NSString *)title {
|
||||
return [[self alloc] initWithTitle: title];
|
||||
}
|
||||
|
||||
-(instancetype)initWithTitle: (NSString *)title {
|
||||
[self setTitle: title];
|
||||
return self;
|
||||
@ -77,6 +80,8 @@
|
||||
}
|
||||
|
||||
-(void)prepareView: (NSTableCellView *)view {
|
||||
|
||||
[view setObjectValue: self];
|
||||
[[view textField] setStringValue: _title];
|
||||
}
|
||||
|
||||
@ -92,53 +97,88 @@
|
||||
}
|
||||
|
||||
unsigned count = (unsigned)[_children count];
|
||||
NSMutableArray *tmp = [NSMutableArray arrayWithArray: _children];
|
||||
|
||||
_validCount = newCount;
|
||||
if (!_children) _children = [NSMutableArray new];
|
||||
|
||||
for (unsigned i = count; i < newCount; ++i) {
|
||||
[tmp addObject: [MediaItem new]];
|
||||
MediaItem *item = [MediaItem new];
|
||||
[item setIndex: i];
|
||||
[_children addObject: item];
|
||||
}
|
||||
|
||||
// delete excess items, if blank. otherwise, mark invalid.
|
||||
unsigned ix = 0;
|
||||
for(MediaItem *item in tmp) {
|
||||
for(MediaItem *item in _children) {
|
||||
[item setValid: ix++ < newCount];
|
||||
}
|
||||
|
||||
for (unsigned i = newCount; i < count; ++i) {
|
||||
MediaItem *item = [tmp lastObject];
|
||||
MediaItem *item = [_children lastObject];
|
||||
if ([item url]) break;
|
||||
|
||||
[tmp removeLastObject];
|
||||
[_children removeLastObject];
|
||||
}
|
||||
|
||||
[self setChildren: tmp];
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)pruneChildren {
|
||||
-(BOOL)pruneChildrenWithOutlineView: (NSOutlineView *)view {
|
||||
NSUInteger count = [_children count];
|
||||
BOOL delta = NO;
|
||||
if (_validCount == count) return NO;
|
||||
NSMutableIndexSet *set = [NSMutableIndexSet new];
|
||||
|
||||
NSMutableArray *tmp = [NSMutableArray arrayWithArray: _children];
|
||||
for (NSInteger i = _validCount; i < count; ++i) {
|
||||
MediaItem *item = [tmp lastObject];
|
||||
MediaItem *item = [_children lastObject];
|
||||
if ([item url]) break;
|
||||
|
||||
[tmp removeLastObject];
|
||||
[_children removeLastObject];
|
||||
[set addIndex: [_children count]];
|
||||
|
||||
delta = YES;
|
||||
}
|
||||
if (delta) {
|
||||
[self setChildren: tmp];
|
||||
|
||||
if (view)
|
||||
[view removeItemsAtIndexes: set inParent: self withAnimation: NSTableViewAnimationEffectFade];
|
||||
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
-(BOOL)moveItemFrom: (NSInteger)oldIndex to: (NSInteger)newIndex outlineView: (NSOutlineView *)view {
|
||||
if (newIndex == oldIndex) return NO;
|
||||
NSUInteger count = [_children count];
|
||||
if (oldIndex >= count) return NO;
|
||||
|
||||
MediaItem *item = [_children objectAtIndex: oldIndex];
|
||||
[_children removeObjectAtIndex: oldIndex];
|
||||
if (newIndex > oldIndex) newIndex--;
|
||||
if (newIndex >= count) {
|
||||
[_children addObject: item];
|
||||
} else {
|
||||
[_children insertObject: item atIndex: newIndex];
|
||||
}
|
||||
if (view) [view moveItemAtIndex: oldIndex inParent: self toIndex: newIndex inParent: self];
|
||||
|
||||
// re-index and re-validate.
|
||||
unsigned ix = 0;
|
||||
for (MediaItem *item in _children) {
|
||||
[item setIndex: ix];
|
||||
[item setValid: ix < _validCount];
|
||||
|
||||
// [view reloadItem: item];
|
||||
|
||||
++ix;
|
||||
}
|
||||
[self pruneChildrenWithOutlineView: view];
|
||||
//[view reloadItem: self reloadChildren: YES];
|
||||
return YES;
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@implementation MediaItem
|
||||
|
||||
-(instancetype)initWithURL: (NSURL *)url {
|
||||
@ -167,15 +207,35 @@
|
||||
}
|
||||
|
||||
-(void)prepareView: (TablePathView *)view {
|
||||
NSPathControl *pc = [view pathControl];
|
||||
|
||||
[pc setURL: _url]; //??? will binding take care of it?
|
||||
[pc unbind: @"value"];
|
||||
[pc bind: @"value" toObject: self withKeyPath: @"url" options: nil];
|
||||
|
||||
NSValueTransformer *t;
|
||||
NSDictionary *options;
|
||||
|
||||
[view setObjectValue: self];
|
||||
|
||||
NSPathControl *pc = [view pathControl];
|
||||
NSButton *button = [view ejectButton];
|
||||
|
||||
[pc unbind: @"value"];
|
||||
[pc unbind: @"enabled"];
|
||||
[pc bind: @"value" toObject: self withKeyPath: @"url" options: nil];
|
||||
[pc bind: @"enabled" toObject: self withKeyPath: @"valid" options: options];
|
||||
|
||||
[button unbind: @"enabled"];
|
||||
[button unbind: @"contentTintColor"];
|
||||
t = [NSValueTransformer valueTransformerForName: NSIsNotNilTransformerName];
|
||||
options = @{ NSValueTransformerBindingOption: t};
|
||||
[button bind: @"enabled" toObject: self withKeyPath: @"url" options: options];
|
||||
|
||||
t = [NSValueTransformer valueTransformerForName: @"ValidColorTransformer"];
|
||||
options = @{ NSValueTransformerBindingOption: t};
|
||||
[button bind: @"contentTintColor" toObject: self withKeyPath: @"valid" options: options];
|
||||
|
||||
#if 0
|
||||
NSColor *tintColor = nil;
|
||||
if (!_valid) tintColor = [NSColor redColor];
|
||||
[[view deleteButton] setContentTintColor: tintColor];
|
||||
if (!_valid) tintColor = [NSColor systemRedColor];
|
||||
[button setContentTintColor: tintColor];
|
||||
#endif
|
||||
}
|
||||
|
||||
-(CGFloat)height {
|
||||
@ -183,21 +243,36 @@
|
||||
}
|
||||
|
||||
-(void)invalidate {
|
||||
_valid = NO;
|
||||
if (!_valid) return;
|
||||
[self setValid: NO];
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
#define CATEGORY_COUNT 6
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
@interface MediaViewController () {
|
||||
|
||||
MediaCategory *_data[5];
|
||||
MediaCategory *_data[CATEGORY_COUNT];
|
||||
NSArray *_root;
|
||||
NSDictionary *_media;
|
||||
Media _media;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MediaViewController
|
||||
|
||||
enum {
|
||||
kIndexFloppy525 = 0,
|
||||
kIndexFloppy35,
|
||||
kIndexHardDrive,
|
||||
kIndexCDROM,
|
||||
kIndexCassette,
|
||||
kIndexDiskImage,
|
||||
};
|
||||
|
||||
|
||||
-(void)awakeFromNib {
|
||||
|
||||
static unsigned first = 0;
|
||||
@ -205,44 +280,30 @@
|
||||
if (first) return;
|
||||
first++;
|
||||
|
||||
MediaCategory *a, *b, *c, *d, *e;
|
||||
|
||||
a = [[MediaCategory alloc] initWithTitle: @"5.25\" Floppies"];
|
||||
b = [[MediaCategory alloc] initWithTitle: @"3.5\" Floppies"];
|
||||
c = [[MediaCategory alloc] initWithTitle: @"Hard Drives"];
|
||||
d = [[MediaCategory alloc] initWithTitle: @"CD-ROMs"];
|
||||
e = [[MediaCategory alloc] initWithTitle: @"Casettes"];
|
||||
|
||||
|
||||
_data[0] = a;
|
||||
_data[1] = b;
|
||||
_data[2] = c;
|
||||
_data[3] = d;
|
||||
_data[4] = e;
|
||||
_data[kIndexFloppy525] = [MediaCategory categoryWithTitle: @"5.25\" Floppies"];
|
||||
_data[kIndexFloppy35] = [MediaCategory categoryWithTitle: @"3.5\" Floppies"];
|
||||
_data[kIndexHardDrive] = [MediaCategory categoryWithTitle: @"Hard Drives"];
|
||||
_data[kIndexCDROM] = [MediaCategory categoryWithTitle: @"CD-ROMs"];
|
||||
_data[kIndexCassette] = [MediaCategory categoryWithTitle: @"Cassettes"];
|
||||
_data[kIndexDiskImage] = [MediaCategory categoryWithTitle: @"Hard Disk Images"]; // Mac Nubus psuedo image device
|
||||
|
||||
_root = @[];
|
||||
|
||||
}
|
||||
|
||||
|
||||
enum {
|
||||
kIndexFloppy_5_25 = 0,
|
||||
kIndexFloppy_3_5,
|
||||
kIndex_HardDrive,
|
||||
kIndexCDROM,
|
||||
kIndexCassette
|
||||
};
|
||||
|
||||
-(void)rebuildArgs {
|
||||
|
||||
static char* prefix[] = {
|
||||
"flop", "flop", "hard", "cdrm", "cass"
|
||||
"flop", "flop", "hard", "cdrm", "cass", "disk"
|
||||
};
|
||||
static_assert(SIZEOF(prefix) == CATEGORY_COUNT, "Missing item");
|
||||
NSMutableArray *args = [NSMutableArray new];
|
||||
|
||||
unsigned counts[5] = { 0, 0, 0, 0, 0 };
|
||||
unsigned counts[CATEGORY_COUNT] = { 0 };
|
||||
|
||||
for (unsigned j = 0; j < 5; ++j) {
|
||||
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||
|
||||
MediaCategory *cat = _data[j];
|
||||
NSInteger valid = [cat validCount];
|
||||
@ -265,51 +326,52 @@ enum {
|
||||
|
||||
-(void)rebuildRoot {
|
||||
NSMutableArray *tmp = [NSMutableArray new];
|
||||
for (unsigned j = 0 ; j < 5; ++j) {
|
||||
int ix = 0;
|
||||
for (unsigned j = 0 ; j < CATEGORY_COUNT; ++j) {
|
||||
MediaCategory *cat = _data[j];
|
||||
if ([cat count]) [tmp addObject: cat];
|
||||
[cat setIndex: -1];
|
||||
if ([cat count]) {
|
||||
[cat setIndex: ix++];
|
||||
[tmp addObject: cat];
|
||||
}
|
||||
}
|
||||
_root = tmp;
|
||||
//[_outlineView reloadItem: nil reloadChildren: YES];
|
||||
|
||||
// todo - switch this to use removeItemsAtIndexes:inParent:withAnimation:
|
||||
// and insertItemsAtIndexes:inParent:withAnimation:
|
||||
|
||||
[_outlineView reloadData];
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
}
|
||||
|
||||
-(void)setMedia: (NSDictionary *)media {
|
||||
-(void)setMedia: (Media)media {
|
||||
|
||||
static NSString *Keys[] = {
|
||||
@"flop_5_25",
|
||||
@"flop_3_5",
|
||||
@"hard",
|
||||
@"cdrm",
|
||||
@"cass"
|
||||
};
|
||||
|
||||
NSNumber *o;
|
||||
MediaCategory *cat;
|
||||
unsigned i;
|
||||
BOOL delta = NO;
|
||||
|
||||
|
||||
if (_media == media) return;
|
||||
unsigned x;
|
||||
|
||||
if (MediaEqual(&_media, &media)) return;
|
||||
_media = media;
|
||||
|
||||
for (unsigned j = 0; j < 5; ++j) {
|
||||
|
||||
o = [media objectForKey: Keys[j]];
|
||||
i = [o unsignedIntValue];
|
||||
cat = _data[j];
|
||||
delta |= [cat setItemCount: i];
|
||||
}
|
||||
#undef _
|
||||
#define _(name, index) \
|
||||
x = media.name; cat = _data[index]; delta |= [cat setItemCount: x]
|
||||
_(cass, kIndexCassette);
|
||||
_(cdrom, kIndexCDROM);
|
||||
_(hard, kIndexHardDrive);
|
||||
_(floppy_3_5, kIndexFloppy35);
|
||||
_(floppy_5_25, kIndexFloppy525);
|
||||
_(pseudo_disk, kIndexDiskImage);
|
||||
|
||||
|
||||
|
||||
if (delta) {
|
||||
[self rebuildRoot];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
}
|
||||
|
||||
static NSString *kDragType = @"private.ample.media";
|
||||
- (void)viewDidLoad {
|
||||
|
||||
[super viewDidLoad];
|
||||
@ -317,8 +379,11 @@ enum {
|
||||
//NSOutlineView *view = [self view];
|
||||
//[view expandItem: nil expandChildren: YES];
|
||||
// Do view setup here.
|
||||
|
||||
[_outlineView reloadData];
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
|
||||
[_outlineView registerForDraggedTypes: @[kDragType]];
|
||||
}
|
||||
|
||||
#pragma mark - NSOutlineViewDelegate
|
||||
@ -340,6 +405,7 @@ enum {
|
||||
if (!ident) return nil;
|
||||
NSTableCellView *v = [outlineView makeViewWithIdentifier: ident owner: self];
|
||||
[(id<MediaNode>)item prepareView: v];
|
||||
[v setObjectValue: item];
|
||||
return v;
|
||||
}
|
||||
|
||||
@ -402,9 +468,139 @@ enum {
|
||||
return [item height];
|
||||
}
|
||||
|
||||
#if 0
|
||||
- (id<NSPasteboardWriting>)outlineView:(NSOutlineView *)outlineView pasteboardWriterForItem:(id<MediaNode>)item {
|
||||
|
||||
if ([item isGroupItem]) return nil;
|
||||
|
||||
NSPasteboardItem *pb = [NSPasteboardItem new];
|
||||
|
||||
return pb;
|
||||
}
|
||||
#endif
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard {
|
||||
if ([items count] > 1) return NO;
|
||||
|
||||
//NSLog(@"%s", sel_getName(_cmd));
|
||||
|
||||
MediaItem *item = [items firstObject];
|
||||
|
||||
if (![item isKindOfClass: [MediaItem class]]) return NO;
|
||||
|
||||
// find the category. only allow if more than 1 item in the category.
|
||||
|
||||
MediaCategory *cat = nil;
|
||||
|
||||
|
||||
for (MediaCategory *c in _root) {
|
||||
NSUInteger ix = [[c children] indexOfObject: item];
|
||||
if (ix != NSNotFound){
|
||||
cat = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!cat) return NO;
|
||||
if ([cat count] < 2) return NO;
|
||||
|
||||
NSInteger indexes[2] = { 0, 0 };
|
||||
indexes[0] = [cat index];
|
||||
indexes[1] = [item index];
|
||||
NSData *data = [NSData dataWithBytes: indexes length: sizeof(indexes)];
|
||||
|
||||
[pasteboard setData: data forType: kDragType];
|
||||
return YES;
|
||||
}
|
||||
|
||||
/*
|
||||
* IF item is present, it's a MediaCategory and index is the index of the MediaItem it would be inserted as.
|
||||
* IF item is nil, index is the MediaCategory index, which should be converted to moving to the end.
|
||||
* IF index < 0, dragging far beyond the category list, so NOPE it.
|
||||
*
|
||||
*/
|
||||
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id<NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index {
|
||||
|
||||
if (index < 0) return NSDragOperationNone;
|
||||
|
||||
|
||||
NSPasteboard *pb = [info draggingPasteboard];
|
||||
NSData *data = [pb dataForType: kDragType];
|
||||
|
||||
if (!data) return NSDragOperationNone;
|
||||
|
||||
NSInteger indexes[2];
|
||||
if ([data length] != sizeof(indexes)) return NSDragOperationNone;
|
||||
[data getBytes: &indexes length: sizeof(indexes)];
|
||||
|
||||
//NSLog(@"%d - %d", (int)indexes[0], (int)indexes[1]);
|
||||
|
||||
MediaCategory *cat = item;
|
||||
if (!item) {
|
||||
// move to the END of the previous category.
|
||||
if (index == 0) return NSDragOperationNone;
|
||||
cat = [_root objectAtIndex: index - 1];
|
||||
index = [cat count]; // -1; - interferes w/ -1 logic below.
|
||||
}
|
||||
|
||||
//NSLog(@"%d - %d", (int)[(MediaCategory *)item index], (int)index);
|
||||
|
||||
|
||||
if ([cat index] != indexes[0]) return NSDragOperationNone;
|
||||
if (indexes[1] == index) return NSDragOperationNone;
|
||||
if (indexes[1] == index-1) return NSDragOperationNone;
|
||||
return NSDragOperationMove;
|
||||
|
||||
}
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id<NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index {
|
||||
|
||||
if (index < 0) return NO;
|
||||
|
||||
|
||||
NSPasteboard *pb = [info draggingPasteboard];
|
||||
NSData *data = [pb dataForType: kDragType];
|
||||
|
||||
if (!data) return NSDragOperationNone;
|
||||
|
||||
NSInteger indexes[2];
|
||||
if ([data length] != sizeof(indexes)) return NO;
|
||||
[data getBytes: &indexes length: sizeof(indexes)];
|
||||
|
||||
//NSLog(@"%d - %d", (int)indexes[0], (int)indexes[1]);
|
||||
|
||||
MediaCategory *cat = item;
|
||||
|
||||
if (!item) {
|
||||
// move to the END of the previous category.
|
||||
if (index == 0) return NO;
|
||||
cat = [_root objectAtIndex: index - 1];
|
||||
index = [cat count]; // -1; - interferes w/ -1 logic below.
|
||||
}
|
||||
|
||||
//NSLog(@"%d - %d", (int)[(MediaCategory *)item index], (int)index);
|
||||
|
||||
|
||||
if ([cat index] != indexes[0]) return NO;
|
||||
if (indexes[1] == index) return NO;
|
||||
if (indexes[1] == index-1) return NO;
|
||||
|
||||
NSInteger oldIndex = indexes[1];
|
||||
|
||||
[_outlineView beginUpdates];
|
||||
[cat moveItemFrom: oldIndex to: index outlineView: _outlineView];
|
||||
[_outlineView endUpdates];
|
||||
[self rebuildArgs];
|
||||
|
||||
//[_outlineView reloadItem: cat reloadChildren: YES];
|
||||
return YES;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma mark - IBActions
|
||||
- (IBAction)deleteAction:(id)sender {
|
||||
- (IBAction)ejectAction:(id)sender {
|
||||
|
||||
NSInteger row = [_outlineView rowForView: sender];
|
||||
if (row < 0) return;
|
||||
@ -417,12 +613,27 @@ enum {
|
||||
// if item is invalid, should attempt to remove...
|
||||
if (![item valid]) {
|
||||
MediaCategory *cat = [_outlineView parentForItem: item];
|
||||
if ([cat pruneChildren]) [self rebuildRoot];
|
||||
[_outlineView beginUpdates];
|
||||
[cat pruneChildrenWithOutlineView: _outlineView];
|
||||
[_outlineView endUpdates];
|
||||
}
|
||||
|
||||
// todo -- if this eliminates a category completely, it will still be included
|
||||
// since we're now using animaations instead of reloading.
|
||||
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
- (IBAction)pathAction:(id)sender {
|
||||
// need to update the eject button...
|
||||
|
||||
NSURL *url = [(NSPathControl *)sender URL];
|
||||
|
||||
if (url) {
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc postNotificationName: @"DiskImageAdded" object: url];
|
||||
}
|
||||
|
||||
[self rebuildArgs];
|
||||
}
|
||||
@end
|
||||
|
15
Ample/Menu.h
Normal file
@ -0,0 +1,15 @@
|
||||
//
|
||||
// Menu.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 10/3/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef Menu_h
|
||||
#define Menu_h
|
||||
|
||||
NSFont *ItalicMenuFont(void);
|
||||
NSAttributedString *ItalicMenuString(NSString *s);
|
||||
|
||||
#endif /* Menu_h */
|
27
Ample/Menu.m
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// Menu.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 10/3/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NSFont *ItalicMenuFont(void) {
|
||||
NSFont *font = [NSFont menuFontOfSize: 0];
|
||||
NSFontDescriptor *fd = [font fontDescriptor];
|
||||
NSFontDescriptor *fd2 = [fd fontDescriptorWithSymbolicTraits: NSFontDescriptorTraitItalic];
|
||||
return [NSFont fontWithDescriptor: fd2 size: [font pointSize]];
|
||||
}
|
||||
|
||||
NSAttributedString *ItalicMenuString(NSString *s) {
|
||||
static NSDictionary *attr = nil;
|
||||
if (!attr) {
|
||||
attr = @{
|
||||
NSFontAttributeName: ItalicMenuFont()
|
||||
};
|
||||
}
|
||||
return [[NSAttributedString alloc] initWithString: s attributes: attr];
|
||||
}
|
29
Ample/NewSlotViewController.h
Normal file
@ -0,0 +1,29 @@
|
||||
//
|
||||
// NewSlotViewController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/9/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "Media.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface NewSlotViewController : NSViewController
|
||||
|
||||
@property NSArray *args;
|
||||
@property Media media;
|
||||
@property NSSize resolution;
|
||||
@property (nonatomic) NSString *machine;
|
||||
@end
|
||||
|
||||
@interface NewSlotViewController (OutlineView) <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
342
Ample/NewSlotViewController.m
Normal file
@ -0,0 +1,342 @@
|
||||
//
|
||||
// NewSlotViewController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/9/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
#import "Ample.h"
|
||||
#import "NewSlotViewController.h"
|
||||
#import "Menu.h"
|
||||
#import "Slot.h"
|
||||
#import "Media.h"
|
||||
|
||||
|
||||
#import <objc/runtime.h>
|
||||
|
||||
/* number of slot types. bitmask used so should be < sizeof(unsigned *8) */
|
||||
#define SLOT_COUNT 22
|
||||
static_assert(SLOT_COUNT <= sizeof(unsigned) * 8, "too many slot types");
|
||||
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
|
||||
static unsigned RootKey = 0;
|
||||
|
||||
|
||||
@interface NewSlotViewController ()
|
||||
@property (weak) IBOutlet NSOutlineView *outlineView;
|
||||
@property (weak) IBOutlet NSOutlineView *childOutlineView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation NewSlotViewController {
|
||||
NSArray *_root;
|
||||
|
||||
unsigned _slots_explicit;
|
||||
unsigned _slots_valid;
|
||||
unsigned _slots_default;
|
||||
|
||||
Slot *_slot_object[SLOT_COUNT];
|
||||
NSString *_slot_value[SLOT_COUNT]; // when explicitely set.
|
||||
|
||||
Media _slot_media[SLOT_COUNT];
|
||||
Media _machine_media;
|
||||
|
||||
NSDictionary *_machine_data;
|
||||
|
||||
IBOutlet NSPopover *_popover;
|
||||
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// Do view setup here.
|
||||
|
||||
_root = @[];
|
||||
objc_setAssociatedObject(_outlineView, &RootKey, _root, OBJC_ASSOCIATION_RETAIN);
|
||||
|
||||
|
||||
//[_outlineView setIndentationPerLevel: 2.0];
|
||||
}
|
||||
|
||||
-(void)resetMachine {
|
||||
|
||||
_root = @[];
|
||||
objc_setAssociatedObject(_outlineView, &RootKey, _root, OBJC_ASSOCIATION_RETAIN);
|
||||
|
||||
[_outlineView reloadData];
|
||||
|
||||
_slots_valid = 0;
|
||||
_slots_explicit = 0;
|
||||
_slots_default = 0;
|
||||
_machine_media = EmptyMedia;
|
||||
_machine_data = nil;
|
||||
|
||||
for (unsigned i = 0; i < SLOT_COUNT; ++i) {
|
||||
_slot_media[i] = EmptyMedia;
|
||||
_slot_object[i] = nil;
|
||||
_slot_value[i] = nil;
|
||||
}
|
||||
|
||||
[self setResolution: NSMakeSize(0, 0)];
|
||||
[self setArgs: @[]];
|
||||
[self setMedia: EmptyMedia];
|
||||
}
|
||||
|
||||
|
||||
-(void)loadMachine {
|
||||
|
||||
|
||||
NSDictionary *d = MameMachine(_machine);
|
||||
|
||||
|
||||
if (!d) {
|
||||
[self resetMachine];
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray *r = [d objectForKey: @"resolution"];
|
||||
NSSize res = NSMakeSize(0, 0);
|
||||
if (r) {
|
||||
res.width = [(NSNumber *)[r objectAtIndex: 0 /*@"width"*/] doubleValue];
|
||||
res.height = [(NSNumber *)[r objectAtIndex: 1 /*@"height"*/] doubleValue];
|
||||
}
|
||||
[self setResolution: res];
|
||||
|
||||
_slots_valid = 0;
|
||||
//_slots_explicit = 0;
|
||||
_slots_default = 0;
|
||||
|
||||
_machine_media = MediaFromDictionary([d objectForKey: @"media"]);
|
||||
|
||||
_machine_data = d;
|
||||
|
||||
for (unsigned i = 0; i < SLOT_COUNT; ++i) {
|
||||
_slot_media[i] = EmptyMedia;
|
||||
_slot_object[i] = nil;
|
||||
}
|
||||
|
||||
|
||||
extern NSArray *BuildSlots(NSString *name, NSDictionary *data);
|
||||
_root = BuildSlots(_machine, d);
|
||||
objc_setAssociatedObject(_outlineView, &RootKey, _root, OBJC_ASSOCIATION_RETAIN);
|
||||
|
||||
for (Slot *item in _root) {
|
||||
NSInteger index = [item index];
|
||||
if (index < 0) continue;
|
||||
unsigned mask = 1 << index;
|
||||
|
||||
_slots_valid |= mask;
|
||||
if ([item defaultIndex] >= 0)
|
||||
_slots_default |= mask;
|
||||
|
||||
if (_slot_value[index])
|
||||
[item selectValue: _slot_value[index]];
|
||||
|
||||
_slot_media[index] = [item selectedMedia];
|
||||
_slot_object[index] = item;
|
||||
}
|
||||
|
||||
|
||||
[_outlineView reloadData];
|
||||
[self rebuildMedia];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
-(void)setMachine: (NSString *)machine {
|
||||
if (_machine == machine) return;
|
||||
if (_machine && machine && [machine compare: _machine] == NSOrderedSame) return;
|
||||
_machine = machine;
|
||||
|
||||
if (!machine) {
|
||||
[self resetMachine];
|
||||
return;
|
||||
}
|
||||
[self loadMachine];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
-(void)rebuildMedia {
|
||||
|
||||
|
||||
Media media = _machine_media;
|
||||
|
||||
unsigned mask = 1;
|
||||
for (unsigned i = 0; i < SLOT_COUNT; ++i, mask <<= 1) {
|
||||
|
||||
if (_slots_valid & mask) {
|
||||
MediaAdd(&media, &_slot_media[i]);
|
||||
}
|
||||
}
|
||||
|
||||
[self setMedia: media];
|
||||
}
|
||||
|
||||
|
||||
-(void)rebuildArgs {
|
||||
|
||||
NSMutableArray *args = [NSMutableArray new];
|
||||
|
||||
for (Slot *item in _root) {
|
||||
|
||||
NSArray *x = [item args];
|
||||
if (x) [args addObjectsFromArray: x];
|
||||
}
|
||||
|
||||
[self setArgs: args];
|
||||
}
|
||||
|
||||
- (IBAction)menuChanged:(NSPopUpButton *)sender {
|
||||
|
||||
BOOL direct = YES;
|
||||
NSInteger index = [sender tag];
|
||||
if (index < 0) return; //
|
||||
|
||||
if (index >= 0 && index < SLOT_COUNT) {
|
||||
direct = YES;
|
||||
} else {
|
||||
direct = NO;
|
||||
index &= ~0x10000;
|
||||
}
|
||||
if (index >= SLOT_COUNT) return; //
|
||||
unsigned mask = 1 << index;
|
||||
|
||||
|
||||
// index 0 = ram = special case...
|
||||
|
||||
SlotOption *o = [[sender selectedItem] representedObject];
|
||||
Slot *item = _slot_object[index];
|
||||
|
||||
if (direct) {
|
||||
_slots_explicit |= mask;
|
||||
_slot_value[index] = [o value];
|
||||
//_slots_default &= ~mask;
|
||||
}
|
||||
|
||||
Media media = [item selectedMedia];
|
||||
if (!MediaEqual(&media, &_slot_media[index])) {
|
||||
_slot_media[index] = media;
|
||||
[self rebuildMedia];
|
||||
|
||||
}
|
||||
|
||||
// needs to reload children if expanded.
|
||||
#ifdef SLOT_TREE
|
||||
if (direct) {
|
||||
BOOL rc = ([_outlineView isItemExpanded: item]);
|
||||
[_outlineView reloadItem: item reloadChildren: rc];
|
||||
}
|
||||
#endif
|
||||
[self rebuildArgs];
|
||||
}
|
||||
- (IBAction)hamburger:(id)sender {
|
||||
|
||||
#if 0
|
||||
if ([_popover isShown]) {
|
||||
[_popover close];
|
||||
}
|
||||
#endif
|
||||
|
||||
NSInteger index = [sender tag];
|
||||
if (index < 0 || index >= SLOT_COUNT) return;
|
||||
|
||||
Slot *item = _slot_object[index];
|
||||
|
||||
NSArray *children = [item selectedChildren];
|
||||
objc_setAssociatedObject(_childOutlineView, &RootKey, children, OBJC_ASSOCIATION_RETAIN);
|
||||
if (!children) return;
|
||||
|
||||
[_childOutlineView reloadData];
|
||||
NSSize size = [_popover contentSize];
|
||||
if (size.width < 200) size.width = 250;
|
||||
size = [_childOutlineView sizeThatFits: size];
|
||||
size.height += 40;
|
||||
[_popover setContentSize: size];
|
||||
|
||||
[_popover showRelativeToRect: [sender bounds]
|
||||
ofView: sender
|
||||
preferredEdge: NSRectEdgeMaxY];
|
||||
}
|
||||
|
||||
-(IBAction)resetSlots:(id)sender {
|
||||
|
||||
_slots_explicit = 0;
|
||||
for (unsigned i = 0; i < SLOT_COUNT; ++i) {
|
||||
_slot_media[i] = EmptyMedia;
|
||||
_slot_value[i] = nil;
|
||||
}
|
||||
for (Slot *item in _root) {
|
||||
[item reset];
|
||||
// if children, reset them too...
|
||||
NSInteger index = [item index];
|
||||
if (index < 0) continue;
|
||||
_slot_media[index] = [item selectedMedia];
|
||||
}
|
||||
|
||||
#ifdef SLOT_TREE
|
||||
[_outlineView reloadData];
|
||||
#endif
|
||||
[self rebuildMedia];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation NewSlotViewController (OutlineView)
|
||||
|
||||
|
||||
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
|
||||
|
||||
NSArray *root = objc_getAssociatedObject(outlineView, &RootKey);
|
||||
if (!item) return [root count];
|
||||
|
||||
#ifdef SLOT_TREE
|
||||
NSArray *tmp = [(Slot *)item selectedChildren];
|
||||
return [tmp count];
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
|
||||
NSArray *root = objc_getAssociatedObject(outlineView, &RootKey);
|
||||
|
||||
if (!item) return [root objectAtIndex: index];
|
||||
#ifdef SLOT_TREE
|
||||
NSArray *tmp = [(Slot *)item selectedChildren];
|
||||
return [tmp objectAtIndex: index];
|
||||
#endif
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
|
||||
|
||||
#ifdef SLOT_TREE
|
||||
if (!item) return NO;
|
||||
NSArray *tmp = [(Slot *)item selectedChildren];
|
||||
return [tmp count] > 0;
|
||||
#else
|
||||
return NO;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(Slot *)item {
|
||||
|
||||
SlotTableCellView *v = [outlineView makeViewWithIdentifier: @"MenuCell" owner: self];
|
||||
|
||||
[item prepareView: v];
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
17
Ample/PreferencesWindowController.h
Normal file
@ -0,0 +1,17 @@
|
||||
//
|
||||
// PreferencesWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 8/31/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface PreferencesWindowController : NSWindowController
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
199
Ample/PreferencesWindowController.m
Normal file
@ -0,0 +1,199 @@
|
||||
//
|
||||
// PreferencesWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 8/31/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "PreferencesWindowController.h"
|
||||
|
||||
#import <Security/Security.h>
|
||||
|
||||
|
||||
@interface PreferencesWindowController ()
|
||||
@property (weak) IBOutlet NSTextField *pathField;
|
||||
@property (weak) IBOutlet NSTextField *wdField;
|
||||
@property (weak) IBOutlet NSButton *fixButton;
|
||||
|
||||
@end
|
||||
|
||||
@implementation PreferencesWindowController
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"Preferences";
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
[super windowDidLoad];
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
|
||||
[self validateMamePath: [defaults stringForKey: kMamePath]];
|
||||
[self validateMameWD: [defaults stringForKey: kMameWorkingDirectory]];
|
||||
|
||||
/* check vmnet_helper permissions */
|
||||
|
||||
int needs_fixin = [self checkHelperPermissions: nil];
|
||||
[_fixButton setEnabled: needs_fixin > 0];
|
||||
}
|
||||
|
||||
-(void)validateMamePath: (NSString *)path {
|
||||
NSFileManager * fm = [NSFileManager defaultManager];
|
||||
|
||||
if ([path length] == 0 || [fm isExecutableFileAtPath: path]) {
|
||||
[_pathField setTextColor: nil];
|
||||
} else {
|
||||
[_pathField setTextColor: [NSColor systemRedColor]];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)validateMameWD: (NSString *)path {
|
||||
NSFileManager * fm = [NSFileManager defaultManager];
|
||||
BOOL directory = YES;
|
||||
|
||||
if ([path length] == 0) {
|
||||
[_wdField setTextColor: nil];
|
||||
return;
|
||||
}
|
||||
|
||||
if ([fm fileExistsAtPath: path isDirectory: &directory] && directory) {
|
||||
[_wdField setTextColor: nil];
|
||||
return;
|
||||
|
||||
}
|
||||
[_wdField setTextColor: [NSColor systemRedColor]];
|
||||
}
|
||||
|
||||
- (IBAction)pathChanged:(id)sender {
|
||||
|
||||
NSString *path = [sender stringValue];
|
||||
|
||||
[self validateMamePath: path];
|
||||
|
||||
}
|
||||
- (IBAction)wdChanged:(id)sender {
|
||||
|
||||
NSString *path = [sender stringValue];
|
||||
|
||||
[self validateMameWD: path];
|
||||
}
|
||||
|
||||
// -1 - error
|
||||
// 1 - needs help
|
||||
// 0 - a-ok
|
||||
-(int)checkHelperPermissions: (NSString *)path {
|
||||
|
||||
static const unsigned Mask = S_ISUID | S_ISGID;
|
||||
if (!path) {
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
path = [bundle pathForAuxiliaryExecutable: @"vmnet_helper"];
|
||||
}
|
||||
if (!path) return -1;
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
NSDictionary *attr = [fm attributesOfItemAtPath: path error: &error];
|
||||
|
||||
if (error) return -1;
|
||||
|
||||
NSNumber *owner = [attr objectForKey: NSFileOwnerAccountID];
|
||||
NSNumber *perm = [attr objectForKey: NSFilePosixPermissions];
|
||||
if ([owner longValue] == 0 && ([perm unsignedIntValue] & Mask) == Mask) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
- (IBAction)fixPerms:(id)sender {
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSString *path = [bundle pathForAuxiliaryExecutable: @"vmnet_helper"];
|
||||
if (!path) return;
|
||||
|
||||
|
||||
#if 0
|
||||
// this requires an entitlement and sanboxing and Apple's permission.
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
|
||||
[ws requestAuthorizationOfType:NSWorkspaceAuthorizationTypeSetAttributes
|
||||
completionHandler: ^(NSWorkspaceAuthorization *a, NSError *e){
|
||||
if (e || !a) return;
|
||||
|
||||
NSError *error = nil;
|
||||
NSDictionary *attr = @{
|
||||
NSFileOwnerAccountID: @0, /* root */
|
||||
NSFileGroupOwnerAccountID: @20, /* staff */
|
||||
// NSFilePosixPermissions: @0106755 /* 755 + setuid + setgid */
|
||||
};
|
||||
|
||||
|
||||
|
||||
NSFileManager *fm = [NSFileManager fileManagerWithAuthorization: a];
|
||||
[fm setAttributes: attr ofItemAtPath: path error: &error];
|
||||
if (error) {
|
||||
NSLog(@"%@", error);
|
||||
// NSAlert *a = [NSAlert alertWithError: error];
|
||||
// [a runModal];
|
||||
}
|
||||
else {
|
||||
[self->_fixButton setEnabled: NO];
|
||||
}
|
||||
|
||||
}];
|
||||
#endif
|
||||
|
||||
// AuthorizationExecuteWithPrivileges - deprecated in 10.7
|
||||
// https://github.com/sveinbjornt/STPrivilegedTask
|
||||
// XMJobBless + launchd stuff - the preferred way to do it...
|
||||
// https://developer.apple.com/library/archive/samplecode/BetterAuthorizationSample/Introduction/Intro.html
|
||||
// https://developer.apple.com/library/archive/samplecode/SMJobBless/Listings/ReadMe_txt.html#//apple_ref/doc/uid/DTS40010071-ReadMe_txt-DontLinkElementID_3
|
||||
//
|
||||
// really should be a launchd service but that's for another time...
|
||||
|
||||
AuthorizationRef myAuthorizationRef = 0;
|
||||
OSStatus myStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &myAuthorizationRef);
|
||||
if (myStatus) return;
|
||||
|
||||
AuthorizationItem myItems[1] = {{0}};
|
||||
myItems[0].name = kAuthorizationRightExecute;
|
||||
myItems[0].valueLength = 0;
|
||||
myItems[0].value = NULL;
|
||||
myItems[0].flags = 0;
|
||||
AuthorizationRights myRights = {0};
|
||||
myRights.count = sizeof(myItems) / sizeof(myItems[0]);
|
||||
myRights.items = myItems;
|
||||
AuthorizationFlags myFlags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed |
|
||||
kAuthorizationFlagExtendRights | kAuthorizationFlagPreAuthorize;
|
||||
myStatus = AuthorizationCopyRights(myAuthorizationRef, &myRights,
|
||||
kAuthorizationEmptyEnvironment, myFlags, NULL);
|
||||
|
||||
if (!myStatus) {
|
||||
FILE *fp = NULL;
|
||||
static char buffer[4096];
|
||||
const char *cp = [path fileSystemRepresentation];
|
||||
const char* args_chown[] = {"root", cp , NULL};
|
||||
const char* args_chmod[] = {"+s", cp, NULL};
|
||||
|
||||
// well ... the second command executes a lot more consistently when the (optional) fp is provided and the we fgets the buffer.
|
||||
// textmate does a wait() to wait for a child to exit. Using the fp (which is popened()?) and reading until EOF
|
||||
// accomplishes the same thing.
|
||||
myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/usr/sbin/chown", kAuthorizationFlagDefaults, (char**)args_chown, &fp);
|
||||
while (fgets(buffer, sizeof(buffer), fp));
|
||||
fclose(fp);
|
||||
// fprintf(stderr, "myStatus = %d\ndata: %s\n", myStatus, buffer);
|
||||
|
||||
myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/bin/chmod", kAuthorizationFlagDefaults, (char**)args_chmod, &fp);
|
||||
while (fgets(buffer, sizeof(buffer), fp));
|
||||
fclose(fp);
|
||||
// fprintf(stderr, "myStatus = %d\ndata: %s\n", myStatus, buffer);
|
||||
|
||||
}
|
||||
AuthorizationFree(myAuthorizationRef, kAuthorizationFlagDestroyRights);
|
||||
|
||||
int needs_fixin = [self checkHelperPermissions: path];
|
||||
[_fixButton setEnabled: needs_fixin > 0];
|
||||
}
|
||||
|
||||
|
||||
@end
|
222
Ample/Resources/CheatSheet.html
Normal file
@ -0,0 +1,222 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Keyboard Cheat Sheet</title>
|
||||
<style type="text/css">
|
||||
:root {
|
||||
color-scheme: light dark;
|
||||
font-family: -apple-system, 'HelveticaNeue' ;
|
||||
font: -apple-system-body;
|
||||
}
|
||||
|
||||
body {
|
||||
user-select: none;
|
||||
|
||||
background-color: rgb(236, 236, 236);
|
||||
color: rgb(38, 38, 38);
|
||||
}
|
||||
h1, h2 {
|
||||
text-align: center;
|
||||
font-size: 150%;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
kbd {
|
||||
display: inline-block;
|
||||
border-radius: 3px;
|
||||
padding-left: .5em;
|
||||
padding-right: .5em;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 2px;
|
||||
margin-bottom: 5px;
|
||||
margin-right: 5px;
|
||||
margin-left: 4px;
|
||||
|
||||
border: solid 1px black;
|
||||
box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.75), inset 1px 1px 2px 0px white;
|
||||
text-shadow: 0px 1px 0px rgb(255, 255, 255);
|
||||
background-color: rgb(225, 225, 225);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
background-color: rgb(50, 50, 50);
|
||||
color: rgb(225, 225, 225);
|
||||
}
|
||||
|
||||
kbd {
|
||||
border: solid 1px black;
|
||||
text-shadow: 0px 1px 0px black;
|
||||
box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.75);
|
||||
background-color: rgb(101, 101, 101);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
function macbook(onoff) {
|
||||
var nodes = document.querySelectorAll("[data-macbook]");
|
||||
nodes.forEach( (e) => {
|
||||
var m = (e.dataset.macbook == "true");
|
||||
e.hidden = m ^ onoff;
|
||||
});
|
||||
}
|
||||
window.addEventListener('load', (event)=> {
|
||||
macbook(false);
|
||||
|
||||
var e = document.getElementById('macbook');
|
||||
if (e) {
|
||||
e.checked = false;
|
||||
e.addEventListener('click', (event) => {
|
||||
macbook(e.checked);
|
||||
});
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
MacBook: <input type="checkbox" id="macbook" />
|
||||
</div>
|
||||
<h1>Full UI Mode</h1>
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 14em;" />
|
||||
<col />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>Delete</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Delete</kbd></span>
|
||||
</td>
|
||||
<td>Toggle partial UI mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Option</kbd>+<kbd>Enter</kbd></td>
|
||||
<td>Toggle full screen mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>F12</kbd></td>
|
||||
<td>Reset Key</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h1>Partial UI Mode</h1>
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 14em;" />
|
||||
<col />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>Delete</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Delete</kbd></span>
|
||||
</td>
|
||||
<td>Toggle full UI mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Option</kbd>+<kbd>Enter</kbd></td>
|
||||
<td>Toggle full screen mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Tab</kbd></td>
|
||||
<td>Config menu</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Esc</kbd></td>
|
||||
<td>Quit</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>P</kbd></td>
|
||||
<td>Pause</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>~</kbd></td>
|
||||
<td>Debugger break (when active)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>Page Down</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Down Arrow</kbd></span>
|
||||
</td>
|
||||
<td>Fast forward (while pressed)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F3</kbd></td>
|
||||
<td>Soft reset</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F3</kbd></td>
|
||||
<td>Hard reset</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td><kbd>F5</kbd></td>
|
||||
<td>Toggle debugger</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F5</kbd></td>
|
||||
<td>Toggle graphic filters</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F7</kbd></td>
|
||||
<td>Load state</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F7</kbd></td>
|
||||
<td>Save state</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F10</kbd></td>
|
||||
<td>Toggle throttle</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F11</kbd></td>
|
||||
<td>Show FPS</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F11</kbd></td>
|
||||
<td>Show profiler</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F12</kbd></td>
|
||||
<td>Save snapshot</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F12</kbd></td>
|
||||
<td>Record MNG video</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>F12</kbd></td>
|
||||
<td>Record AVI video</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Option</kbd>+<kbd>Shift</kbd>+<kbd>F12</kbd></td>
|
||||
<td>Record rendered AVI video</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Note</h2>
|
||||
<ul class="note">
|
||||
<li><kbd>F</kbd> keys may require <kbd>Fn</kbd> key depending on keyboard and system settings.</li>
|
||||
<li><kbd>Shift</kbd>, <kbd>Control</kbd>, and <kbd>Option</kbd> assume left-key unless otherwise specified.</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
5972
Ample/Resources/ace1000.plist
Normal file
@ -6,21 +6,8 @@
|
||||
<string>agat7</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7</string>
|
||||
<key>ram</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
<key>cass</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
@ -29,325 +16,562 @@
|
||||
<integer>512</integer>
|
||||
<integer>512</integer>
|
||||
</array>
|
||||
<key>sl2</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>value</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>name</key>
|
||||
<string>sl2</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Slot 2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>name</key>
|
||||
<string>sl3</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Slot 3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>name</key>
|
||||
<string>sl4</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<string>Slot 4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>name</key>
|
||||
<string>sl5</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>Slot 5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>name</key>
|
||||
<string>sl6</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Slot 6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl3</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:centronics</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Centronics Printer</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pl80</string>
|
||||
<key>description</key>
|
||||
<string>COMX PL-80</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>covox_stereo</string>
|
||||
<key>description</key>
|
||||
<string>Covox (Stereo-in-1)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>covox</string>
|
||||
<key>description</key>
|
||||
<string>Covox Speech Thing</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ap2000</string>
|
||||
<key>description</key>
|
||||
<string>Epson ActionPrinter 2000</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ex800</string>
|
||||
<key>description</key>
|
||||
<string>Epson EX-800</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>lx800</string>
|
||||
<key>description</key>
|
||||
<string>Epson LX-800</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>lx810l</string>
|
||||
<key>description</key>
|
||||
<string>Espon LX-810L</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>p72</string>
|
||||
<key>description</key>
|
||||
<string>NEC PinWriter P72</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>samdac</string>
|
||||
<key>description</key>
|
||||
<string>SAMDAC</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>chessmec</string>
|
||||
<key>description</key>
|
||||
<string>Tasc ChessMachine EC Interface</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>smartboard</string>
|
||||
<key>description</key>
|
||||
<string>Tasc SmartBoard SB30 Interface</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>agat_fdc</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525dsqd</string>
|
||||
<key>description</key>
|
||||
<string>5.25" quad density floppy drive</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525dsqd</string>
|
||||
<key>description</key>
|
||||
<string>5.25" quad density floppy drive</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl4</key>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl5</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl6</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -6,151 +6,281 @@
|
||||
<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>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>8192</integer>
|
||||
<key>description</key>
|
||||
<string>8K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>12288</integer>
|
||||
<key>description</key>
|
||||
<string>12K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>16384</integer>
|
||||
<key>description</key>
|
||||
<string>16K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>20480</integer>
|
||||
<key>description</key>
|
||||
<string>20K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>24576</integer>
|
||||
<key>description</key>
|
||||
<string>24K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>28672</integer>
|
||||
<key>description</key>
|
||||
<string>28K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>36864</integer>
|
||||
<key>description</key>
|
||||
<string>36K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>40960</integer>
|
||||
<key>description</key>
|
||||
<string>40K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>45056</integer>
|
||||
<key>description</key>
|
||||
<string>44K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>49152</integer>
|
||||
<key>description</key>
|
||||
<string>48K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cass</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>exp</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4096</integer>
|
||||
<key>description</key>
|
||||
<string>4K</string>
|
||||
<key>value</key>
|
||||
<string>4K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8192</integer>
|
||||
<key>description</key>
|
||||
<string>8K</string>
|
||||
<key>value</key>
|
||||
<string>8K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>12288</integer>
|
||||
<key>description</key>
|
||||
<string>12K</string>
|
||||
<key>value</key>
|
||||
<string>12K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>16384</integer>
|
||||
<key>description</key>
|
||||
<string>16K</string>
|
||||
<key>value</key>
|
||||
<string>16K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>20480</integer>
|
||||
<key>description</key>
|
||||
<string>20K</string>
|
||||
<key>value</key>
|
||||
<string>20K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>24576</integer>
|
||||
<key>description</key>
|
||||
<string>24K</string>
|
||||
<key>value</key>
|
||||
<string>24K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>28672</integer>
|
||||
<key>description</key>
|
||||
<string>28K</string>
|
||||
<key>value</key>
|
||||
<string>28K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>value</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>36864</integer>
|
||||
<key>description</key>
|
||||
<string>36K</string>
|
||||
<key>value</key>
|
||||
<string>36K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>40960</integer>
|
||||
<key>description</key>
|
||||
<string>40K</string>
|
||||
<key>value</key>
|
||||
<string>40K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>45056</integer>
|
||||
<key>description</key>
|
||||
<string>44K</string>
|
||||
<key>value</key>
|
||||
<string>44K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>49152</integer>
|
||||
<key>description</key>
|
||||
<string>48K</string>
|
||||
<key>value</key>
|
||||
<string>48K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cassette</string>
|
||||
<key>name</key>
|
||||
<string>exp</string>
|
||||
<key>description</key>
|
||||
<string>Apple I cassette board</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cass</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<string>Expansion</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cassette</string>
|
||||
<key>description</key>
|
||||
<string>Apple I cassette board</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a1cass</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cass</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cffa</string>
|
||||
<key>description</key>
|
||||
<string>CFFA Compact Flash for Apple I</string>
|
||||
<key>devname</key>
|
||||
<string>cffa1</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cffa</string>
|
||||
<key>description</key>
|
||||
<string>CFFA Compact Flash for Apple I</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>name</key>
|
||||
<string>cffa1</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:cffa_ata:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>hdd</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:cffa_ata:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>hdd</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple1.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -6,17 +6,6 @@
|
||||
<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>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
@ -25,222 +14,463 @@
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>gameio</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Game I/O</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>devname</key>
|
||||
<string>a2joy</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>devname</key>
|
||||
<string>a2pdls</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>devname</key>
|
||||
<string>a2gizmo</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>printer</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Printer</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Modem</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>modem</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sl6:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525</string>
|
||||
<key>description</key>
|
||||
<string>5.25"</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sl6:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525</string>
|
||||
<key>description</key>
|
||||
<string>5.25"</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:keyboard</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type3hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type4hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5gbhle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5jphle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5sehle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple2_flop_clcracked.xml</string>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -6,54 +6,11 @@
|
||||
<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>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
<key>flop_3_5</key>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
@ -61,222 +18,421 @@
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>gameio</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>value</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>value</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>value</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>value</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Game I/O</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>devname</key>
|
||||
<string>a2joy</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>devname</key>
|
||||
<string>a2pdls</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>devname</key>
|
||||
<string>a2gizmo</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>printer</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Printer</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Modem</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>modem</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:keyboard</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type3hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type4hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5gbhle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5jphle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5sehle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple2_flop_clcracked.xml</string>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
7385
Ample/Resources/cec2000.plist
Normal file
7385
Ample/Resources/cece.plist
Normal file
7385
Ample/Resources/cecg.plist
Normal file
7385
Ample/Resources/ceci.plist
Normal file
7385
Ample/Resources/cecm.plist
Normal file
@ -6,52 +6,9 @@
|
||||
<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>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
@ -59,222 +16,421 @@
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>gameio</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>value</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>value</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>value</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>value</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Game I/O</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>devname</key>
|
||||
<string>a2joy</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>devname</key>
|
||||
<string>a2pdls</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>devname</key>
|
||||
<string>a2gizmo</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>printer</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Printer</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Modem</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>modem</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:keyboard</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type3hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type4hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5gbhle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5jphle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5sehle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple2_flop_clcracked.xml</string>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
370
Ample/Resources/mac128k.plist
Normal file
@ -0,0 +1,370 @@
|
||||
<?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>mac128k</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh 128k</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120p</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
1305
Ample/Resources/mac2fdhd.plist
Normal file
370
Ample/Resources/mac512k.plist
Normal file
@ -0,0 +1,370 @@
|
||||
<?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>mac512k</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh 512k</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>524288</integer>
|
||||
<key>description</key>
|
||||
<string>512K</string>
|
||||
<key>value</key>
|
||||
<string>512K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120p</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
370
Ample/Resources/mac512ke.plist
Normal file
@ -0,0 +1,370 @@
|
||||
<?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>mac512ke</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh 512ke</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>524288</integer>
|
||||
<key>description</key>
|
||||
<string>512K</string>
|
||||
<key>value</key>
|
||||
<string>512K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120p</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
224
Ample/Resources/macclas2.plist
Normal file
@ -0,0 +1,224 @@
|
||||
<?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>macclas2</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Classic II</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>6291456</integer>
|
||||
<key>description</key>
|
||||
<string>6M</string>
|
||||
<key>value</key>
|
||||
<string>6M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>10485760</integer>
|
||||
<key>description</key>
|
||||
<string>10M</string>
|
||||
<key>value</key>
|
||||
<string>10M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
204
Ample/Resources/macclasc.plist
Normal file
@ -0,0 +1,204 @@
|
||||
<?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>macclasc</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Classic</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2621440</integer>
|
||||
<key>description</key>
|
||||
<string>2560K</string>
|
||||
<key>value</key>
|
||||
<string>2560K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
1305
Ample/Resources/macii.plist
Normal file
873
Ample/Resources/maciici.plist
Normal file
@ -0,0 +1,873 @@
|
||||
<?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>maciici</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh IIci</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>640</integer>
|
||||
<integer>480</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>16777216</integer>
|
||||
<key>description</key>
|
||||
<string>16M</string>
|
||||
<key>value</key>
|
||||
<string>16M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>33554432</integer>
|
||||
<key>description</key>
|
||||
<string>32M</string>
|
||||
<key>value</key>
|
||||
<string>32M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>50331648</integer>
|
||||
<key>description</key>
|
||||
<string>48M</string>
|
||||
<key>value</key>
|
||||
<string>48M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>67108864</integer>
|
||||
<key>description</key>
|
||||
<string>64M</string>
|
||||
<key>value</key>
|
||||
<string>64M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>134217728</integer>
|
||||
<key>description</key>
|
||||
<string>128M</string>
|
||||
<key>value</key>
|
||||
<string>128M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nbc</string>
|
||||
<key>description</key>
|
||||
<string>Slot C</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>enetnb</string>
|
||||
<key>description</key>
|
||||
<string>Apple NuBus Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_aenet</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>quadralink</string>
|
||||
<key>description</key>
|
||||
<string>Applied Engineering Quadralink serial card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_qdlink</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>asmc3nb</string>
|
||||
<key>description</key>
|
||||
<string>Asante MC3NB Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_amc3b</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>bootbug</string>
|
||||
<key>description</key>
|
||||
<string>Brigent BootBug debugger card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Portrait Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
<key>description</key>
|
||||
<string>Moniterm Viking video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_vikbw</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>image</string>
|
||||
<key>description</key>
|
||||
<string>NuBus Disk Image Pseudo-Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_image</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>pseudo_disk</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>radiustpd</string>
|
||||
<key>description</key>
|
||||
<string>Radius Two Page Display video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_rtpd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cb264</string>
|
||||
<key>description</key>
|
||||
<string>RasterOps ColorBoard 264 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_c264</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>laserview</string>
|
||||
<key>description</key>
|
||||
<string>Sigma Designs LaserView video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_laserview</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>specpdq</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum PDQ video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_spdq</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>spec8s3</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum/8 Series III video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_sp8s3</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nbd</string>
|
||||
<key>description</key>
|
||||
<string>Slot D</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>enetnb</string>
|
||||
<key>description</key>
|
||||
<string>Apple NuBus Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_aenet</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>quadralink</string>
|
||||
<key>description</key>
|
||||
<string>Applied Engineering Quadralink serial card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_qdlink</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>asmc3nb</string>
|
||||
<key>description</key>
|
||||
<string>Asante MC3NB Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_amc3b</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>bootbug</string>
|
||||
<key>description</key>
|
||||
<string>Brigent BootBug debugger card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Portrait Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
<key>description</key>
|
||||
<string>Moniterm Viking video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_vikbw</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>image</string>
|
||||
<key>description</key>
|
||||
<string>NuBus Disk Image Pseudo-Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_image</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>pseudo_disk</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>radiustpd</string>
|
||||
<key>description</key>
|
||||
<string>Radius Two Page Display video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_rtpd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cb264</string>
|
||||
<key>description</key>
|
||||
<string>RasterOps ColorBoard 264 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_c264</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>laserview</string>
|
||||
<key>description</key>
|
||||
<string>Sigma Designs LaserView video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_laserview</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>specpdq</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum PDQ video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_spdq</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>spec8s3</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum/8 Series III video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_sp8s3</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nbe</string>
|
||||
<key>description</key>
|
||||
<string>Slot E</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>enetnb</string>
|
||||
<key>description</key>
|
||||
<string>Apple NuBus Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_aenet</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>quadralink</string>
|
||||
<key>description</key>
|
||||
<string>Applied Engineering Quadralink serial card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_qdlink</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>asmc3nb</string>
|
||||
<key>description</key>
|
||||
<string>Asante MC3NB Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_amc3b</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>bootbug</string>
|
||||
<key>description</key>
|
||||
<string>Brigent BootBug debugger card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Portrait Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
<key>description</key>
|
||||
<string>Moniterm Viking video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_vikbw</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>image</string>
|
||||
<key>description</key>
|
||||
<string>NuBus Disk Image Pseudo-Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_image</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>pseudo_disk</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>radiustpd</string>
|
||||
<key>description</key>
|
||||
<string>Radius Two Page Display video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_rtpd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cb264</string>
|
||||
<key>description</key>
|
||||
<string>RasterOps ColorBoard 264 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_c264</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>laserview</string>
|
||||
<key>description</key>
|
||||
<string>Sigma Designs LaserView video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_laserview</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>specpdq</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum PDQ video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_spdq</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>spec8s3</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum/8 Series III video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_sp8s3</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nb_btbug</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nb_qdlink</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
855
Ample/Resources/maciicx.plist
Normal file
@ -0,0 +1,855 @@
|
||||
<?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>maciicx</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh IIcx</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>640</integer>
|
||||
<integer>480</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>33554432</integer>
|
||||
<key>description</key>
|
||||
<string>32M</string>
|
||||
<key>value</key>
|
||||
<string>32M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>67108864</integer>
|
||||
<key>description</key>
|
||||
<string>64M</string>
|
||||
<key>value</key>
|
||||
<string>64M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>100663296</integer>
|
||||
<key>description</key>
|
||||
<string>96M</string>
|
||||
<key>value</key>
|
||||
<string>96M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>134217728</integer>
|
||||
<key>description</key>
|
||||
<string>128M</string>
|
||||
<key>value</key>
|
||||
<string>128M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nb9</string>
|
||||
<key>description</key>
|
||||
<string>Slot 9</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>enetnb</string>
|
||||
<key>description</key>
|
||||
<string>Apple NuBus Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_aenet</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>quadralink</string>
|
||||
<key>description</key>
|
||||
<string>Applied Engineering Quadralink serial card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_qdlink</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>asmc3nb</string>
|
||||
<key>description</key>
|
||||
<string>Asante MC3NB Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_amc3b</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>bootbug</string>
|
||||
<key>description</key>
|
||||
<string>Brigent BootBug debugger card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Portrait Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
<key>description</key>
|
||||
<string>Moniterm Viking video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_vikbw</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>image</string>
|
||||
<key>description</key>
|
||||
<string>NuBus Disk Image Pseudo-Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_image</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>pseudo_disk</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>radiustpd</string>
|
||||
<key>description</key>
|
||||
<string>Radius Two Page Display video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_rtpd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cb264</string>
|
||||
<key>description</key>
|
||||
<string>RasterOps ColorBoard 264 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_c264</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>laserview</string>
|
||||
<key>description</key>
|
||||
<string>Sigma Designs LaserView video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_laserview</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>specpdq</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum PDQ video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_spdq</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>spec8s3</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum/8 Series III video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_sp8s3</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nba</string>
|
||||
<key>description</key>
|
||||
<string>Slot A</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>enetnb</string>
|
||||
<key>description</key>
|
||||
<string>Apple NuBus Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_aenet</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>quadralink</string>
|
||||
<key>description</key>
|
||||
<string>Applied Engineering Quadralink serial card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_qdlink</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>asmc3nb</string>
|
||||
<key>description</key>
|
||||
<string>Asante MC3NB Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_amc3b</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>bootbug</string>
|
||||
<key>description</key>
|
||||
<string>Brigent BootBug debugger card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Portrait Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
<key>description</key>
|
||||
<string>Moniterm Viking video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_vikbw</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>image</string>
|
||||
<key>description</key>
|
||||
<string>NuBus Disk Image Pseudo-Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_image</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>pseudo_disk</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>radiustpd</string>
|
||||
<key>description</key>
|
||||
<string>Radius Two Page Display video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_rtpd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cb264</string>
|
||||
<key>description</key>
|
||||
<string>RasterOps ColorBoard 264 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_c264</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>laserview</string>
|
||||
<key>description</key>
|
||||
<string>Sigma Designs LaserView video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_laserview</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>specpdq</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum PDQ video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_spdq</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>spec8s3</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum/8 Series III video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_sp8s3</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nbb</string>
|
||||
<key>description</key>
|
||||
<string>Slot B</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>enetnb</string>
|
||||
<key>description</key>
|
||||
<string>Apple NuBus Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_aenet</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>quadralink</string>
|
||||
<key>description</key>
|
||||
<string>Applied Engineering Quadralink serial card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_qdlink</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>asmc3nb</string>
|
||||
<key>description</key>
|
||||
<string>Asante MC3NB Ethernet card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_amc3b</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>bootbug</string>
|
||||
<key>description</key>
|
||||
<string>Brigent BootBug debugger card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Portrait Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
<key>description</key>
|
||||
<string>Moniterm Viking video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_vikbw</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>image</string>
|
||||
<key>description</key>
|
||||
<string>NuBus Disk Image Pseudo-Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_image</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>pseudo_disk</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>radiustpd</string>
|
||||
<key>description</key>
|
||||
<string>Radius Two Page Display video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_rtpd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cb264</string>
|
||||
<key>description</key>
|
||||
<string>RasterOps ColorBoard 264 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_c264</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>laserview</string>
|
||||
<key>description</key>
|
||||
<string>Sigma Designs LaserView video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_laserview</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>specpdq</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum PDQ video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_spdq</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>spec8s3</string>
|
||||
<key>description</key>
|
||||
<string>SuperMac Spectrum/8 Series III video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_sp8s3</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nb_btbug</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>nb_qdlink</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:serport3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|