Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d7b5bdfb72 | |||
| 5c4d7926f2 |
+269
-43
@@ -33,6 +33,8 @@
|
||||
|
||||
#import "C64.h"
|
||||
#import "C64_archdep.h"
|
||||
#import "C64dtv.h"
|
||||
#import "C64dtv_archdep.h"
|
||||
#import "C128.h"
|
||||
#import "C128_archdep.h"
|
||||
#import "Vic20.h"
|
||||
@@ -40,17 +42,21 @@
|
||||
|
||||
const NSEventModifierFlags OENSEventModifierFlagFunctionKey = 1 << 24;
|
||||
|
||||
@interface ViceGameCore() <OEC64SystemResponderClient, C64Delegate>
|
||||
@interface ViceGameCore() <OEC64SystemResponderClient, C64Delegate, C128Delegate, Vic20Delegate>
|
||||
{
|
||||
NSArray *_availableDisplayModes;
|
||||
BOOL _isJoystickPortSwapped;
|
||||
BOOL _runstopLock;
|
||||
C64 *_c64;
|
||||
C64dtv *_c64dtv;
|
||||
C64 *_c64;
|
||||
C128 *_c128;
|
||||
Vic20 *_vic20;
|
||||
NSArray<NSString *> *_sysfilePathList;
|
||||
uint32_t *_buffer;
|
||||
OEIntSize _bufferSize;
|
||||
OEIntRect _screenRect;
|
||||
NSTimeInterval _frameInterval;
|
||||
NSString *_viceCore;
|
||||
}
|
||||
|
||||
- (void)initializeEmulator;
|
||||
@@ -61,13 +67,49 @@ const NSEventModifierFlags OENSEventModifierFlagFunctionKey = 1 << 24;
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if([[self systemIdentifier] isEqualToString:@"openemu.system.vic20"]){
|
||||
_viceCore = @"Vic20";
|
||||
} else if([[self systemIdentifier] isEqualToString:@"openemu.system.c128"]){
|
||||
_viceCore = @"C128";
|
||||
}else if([[self systemIdentifier] isEqualToString:@"openemu.system.c64dtv"]){
|
||||
_viceCore = @"DTV";
|
||||
} else {
|
||||
_viceCore = @"C64";
|
||||
}
|
||||
|
||||
_viceCore = @"DTV";
|
||||
|
||||
if((self = [super init])) {
|
||||
_c64 = C64.shared;
|
||||
_c64.delegate = self;
|
||||
_bufferSize = OEIntSizeMake(384, 272);
|
||||
NSRect f = _c64.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c64.videoFrequency;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
_vic20 = Vic20.shared;
|
||||
_vic20.delegate = self;
|
||||
_bufferSize = OEIntSizeMake(900, 700);
|
||||
NSRect f = _vic20.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _vic20.videoFrequency;
|
||||
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
_c128 = C128.shared;
|
||||
_c128.delegate = self;
|
||||
_bufferSize = OEIntSizeMake(384, 272);
|
||||
NSRect f = _c128.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c128.videoFrequency;
|
||||
} else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
_c64dtv = C64dtv.shared;
|
||||
_c64dtv.delegate = self;
|
||||
_bufferSize = OEIntSizeMake(384, 272);
|
||||
NSRect f = _c64dtv.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c64dtv.videoFrequency;
|
||||
} else {
|
||||
_c64 = C64.shared;
|
||||
_c64.delegate = self;
|
||||
_bufferSize = OEIntSizeMake(384, 272);
|
||||
NSRect f = _c64.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c64.videoFrequency;
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -80,59 +122,146 @@ const NSEventModifierFlags OENSEventModifierFlagFunctionKey = 1 << 24;
|
||||
}
|
||||
|
||||
- (void)canvasWillResizeWidth:(NSUInteger)width height:(NSUInteger)height {
|
||||
NSRect f = _c64.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c64.videoFrequency;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
NSRect f = _vic20.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _vic20.videoFrequency;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
NSRect f = _c128.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c128.videoFrequency;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
NSRect f = _c64dtv.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c64dtv.videoFrequency;
|
||||
} else {
|
||||
NSRect f = _c64.videoFrame;
|
||||
_screenRect = OEIntRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height);
|
||||
_frameInterval = _c64.videoFrequency;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - emulation
|
||||
|
||||
- (void)setupEmulation {
|
||||
_c64.delegate = self;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
_vic20.delegate = self;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
_c128.delegate = self;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
_c64dtv.delegate = self;
|
||||
} else {
|
||||
_c64.delegate = self;
|
||||
}
|
||||
[super setupEmulation];
|
||||
}
|
||||
|
||||
- (void)stopEmulation {
|
||||
[_c64 resetMachineHard];
|
||||
_c64.delegate = nil;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 resetMachineHard];
|
||||
_vic20.delegate = nil;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 resetMachineHard];
|
||||
_c128.delegate = nil;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv resetMachineHard];
|
||||
_c64dtv.delegate = nil;
|
||||
} else {
|
||||
[_c64 resetMachineHard];
|
||||
_c64.delegate = nil;
|
||||
}
|
||||
|
||||
[super stopEmulation];
|
||||
}
|
||||
|
||||
- (BOOL)loadFileAtPath:(NSString *)path error:(NSError **)error
|
||||
{
|
||||
[self initializeEmulator];
|
||||
// return true;
|
||||
|
||||
return [_c64 autostartImageAtURL:[NSURL fileURLWithPath:path] error:error];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
return [_vic20 autostartImageAtURL:[NSURL fileURLWithPath:path] error:error];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
return [_c128 autostartImageAtURL:[NSURL fileURLWithPath:path] error:error];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
return [_c64dtv autostartImageAtURL:[NSURL fileURLWithPath:path] error:error];
|
||||
} else {
|
||||
return [_c64 autostartImageAtURL:[NSURL fileURLWithPath:path] error:error];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)insertFileAtURL:(NSURL *)url completionHandler:(void(^)(BOOL success, NSError *error))block
|
||||
{
|
||||
C64ImageType type = [_c64 imageTypeAtURL:url];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
Vic20ImageType type = [_vic20 imageTypeAtURL:url];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
C128ImageType type = [_c128 imageTypeAtURL:url];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
C64dtvImageType type = [_c64dtv imageTypeAtURL:url];
|
||||
} else {
|
||||
C64ImageType type = [_c64 imageTypeAtURL:url];
|
||||
}
|
||||
|
||||
block(YES, nil);
|
||||
}
|
||||
|
||||
- (void)resetEmulation
|
||||
{
|
||||
[_c64 resetMachineHard];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 resetMachineHard];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 resetMachineHard];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv resetMachineHard];
|
||||
} else {
|
||||
[_c64 resetMachineHard];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)executeFrame
|
||||
{
|
||||
[_c64 execute];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 execute];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 execute];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv execute];
|
||||
} else {
|
||||
[_c64 execute];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)saveStateToFileAtPath:(NSString *)fileName completionHandler:(void(^)(BOOL success, NSError *error))block
|
||||
{
|
||||
NSError *err = nil;
|
||||
BOOL res = [_c64 saveStateFromFileAtPath:fileName error:&err];
|
||||
BOOL res = false;
|
||||
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
res = [_vic20 saveStateFromFileAtPath:fileName error:&err];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
res = [_c128 saveStateFromFileAtPath:fileName error:&err];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
res = [_c64dtv saveStateFromFileAtPath:fileName error:&err];
|
||||
} else {
|
||||
res = [_c64 saveStateFromFileAtPath:fileName error:&err];
|
||||
}
|
||||
block(res, err);
|
||||
}
|
||||
|
||||
- (void)loadStateFromFileAtPath:(NSString *)fileName completionHandler:(void(^)(BOOL success, NSError *error))block
|
||||
{
|
||||
NSError *err = nil;
|
||||
BOOL res = [_c64 loadStateFromFileAtPath:fileName error:&err];
|
||||
BOOL res = false;
|
||||
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
res = [_vic20 loadStateFromFileAtPath:fileName error:&err];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
res = [_c64 loadStateFromFileAtPath:fileName error:&err];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
res = [_c64dtv loadStateFromFileAtPath:fileName error:&err];
|
||||
} else {
|
||||
res = [_c64 loadStateFromFileAtPath:fileName error:&err];
|
||||
}
|
||||
block(res, err);
|
||||
}
|
||||
|
||||
@@ -142,7 +271,15 @@ const NSEventModifierFlags OENSEventModifierFlagFunctionKey = 1 << 24;
|
||||
|
||||
- (const void*)getVideoBufferWithHint:(void *)hint {
|
||||
_buffer = hint;
|
||||
[_c64 setBuffer:hint size:NSSizeFromOEIntSize(_bufferSize)];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 setBuffer:hint size:NSSizeFromOEIntSize(_bufferSize)];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 setBuffer:hint size:NSSizeFromOEIntSize(_bufferSize)];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv setBuffer:hint size:NSSizeFromOEIntSize(_bufferSize)];
|
||||
} else {
|
||||
[_c64 setBuffer:hint size:NSSizeFromOEIntSize(_bufferSize)];
|
||||
}
|
||||
return hint;
|
||||
}
|
||||
|
||||
@@ -179,11 +316,25 @@ const NSEventModifierFlags OENSEventModifierFlagFunctionKey = 1 << 24;
|
||||
|
||||
- (double)audioSampleRate
|
||||
{
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
return _vic20.audioFrequency;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
return _c128.audioFrequency;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
return _c64dtv.audioFrequency;
|
||||
}
|
||||
return _c64.audioFrequency;
|
||||
}
|
||||
|
||||
- (NSUInteger)channelCount
|
||||
{
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
return _vic20.audioChannels;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
return _c128.audioChannels;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
return _c64dtv.audioChannels;
|
||||
}
|
||||
return _c64.audioChannels;
|
||||
}
|
||||
|
||||
@@ -259,7 +410,7 @@ KeyboardMod flagsToMod(NSEventModifierFlags flags) {
|
||||
return res;
|
||||
}
|
||||
|
||||
- (oneway void)keyDown:(NSUInteger)keyCode
|
||||
- (oneway void)keyDown:(unsigned short)keyCode characters:(NSString *)characters charactersIgnoringModifiers:(NSString *)charactersIgnoringModifiers flags:(NSEventModifierFlags)flags
|
||||
{
|
||||
if(keyCode == kVK_Function)
|
||||
return;
|
||||
@@ -281,18 +432,26 @@ KeyboardMod flagsToMod(NSEventModifierFlags flags) {
|
||||
if (!(flags & OENSEventModifierFlagFunctionKey))
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Fix flags, which will be sent as virtual key codes
|
||||
KeyboardMod mod = flagsToMod(0);
|
||||
|
||||
KeyboardMod mod = flagsToMod(flags);
|
||||
|
||||
NSLog(@"keyDown: code=%03d, flags=%08x, mod=%08lx", keyCode, (uint32_t)flags, mod);
|
||||
|
||||
// Set the RunStopLock flag if Arrow up is pressed
|
||||
// if (keyCode == kVK_UpArrow) RunStopLock = true;
|
||||
[_c64 keyboardKeyDown:keyCode mod:mod];
|
||||
// if (keyCode == kVK_UpArrow) RunStopLock = true;
|
||||
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 keyboardKeyDown:keyCode mod:mod];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 keyboardKeyDown:keyCode mod:mod];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv keyboardKeyDown:keyCode mod:mod];
|
||||
} else {
|
||||
[_c64 keyboardKeyDown:keyCode mod:mod];
|
||||
}
|
||||
}
|
||||
|
||||
- (oneway void)keyUp:(NSUInteger)keyCode
|
||||
- (oneway void)keyUp:(unsigned short)keyCode characters:(NSString *)characters charactersIgnoringModifiers:(NSString *)charactersIgnoringModifiers flags:(NSEventModifierFlags)flags
|
||||
{
|
||||
if(keyCode == kVK_Function)
|
||||
return;
|
||||
@@ -315,15 +474,22 @@ KeyboardMod flagsToMod(NSEventModifierFlags flags) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Fix flags, which will be sent as virtual key codes
|
||||
KeyboardMod mod = flagsToMod(0);
|
||||
KeyboardMod mod = flagsToMod(flags);
|
||||
|
||||
NSLog(@"keyUp: code=%03d, flags=%08x, mod=%08lx", keyCode, (uint32_t)flags, mod);
|
||||
|
||||
// UnSet RunStopLock flag if Arrow up is released
|
||||
// if (keyCode == 126) RunStopLock = false;
|
||||
|
||||
[_c64 keyboardKeyUp:keyCode mod:mod];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 keyboardKeyUp:keyCode mod:mod];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 keyboardKeyUp:keyCode mod:mod];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv keyboardKeyUp:keyCode mod:mod];
|
||||
} else {
|
||||
[_c64 keyboardKeyUp:keyCode mod:mod];
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t joystick_bits[] = {
|
||||
@@ -353,8 +519,17 @@ static uint8_t joystick_bits[] = {
|
||||
port = _isJoystickPortSwapped ? 1 : 2;
|
||||
else
|
||||
port = _isJoystickPortSwapped ? 2 : 1;
|
||||
|
||||
[_c64 joystickOrValue:joystick_bits[button] forPort:port];
|
||||
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 joystickOrValue:joystick_bits[button] forPort:port];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 joystickOrValue:joystick_bits[button] forPort:port];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv joystickOrValue:joystick_bits[button] forPort:port];
|
||||
} else {
|
||||
[_c64 joystickOrValue:joystick_bits[button] forPort:port];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (oneway void)didReleaseC64Button:(OEC64Button)button forPlayer:(NSUInteger)player
|
||||
@@ -369,7 +544,15 @@ static uint8_t joystick_bits[] = {
|
||||
port = _isJoystickPortSwapped ? 2 : 1;
|
||||
|
||||
uint8_t val = 0xff & ~joystick_bits[button];
|
||||
[_c64 joystickAndValue:val forPort:port];
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
[_vic20 joystickAndValue:val forPort:port];
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
[_c128 joystickAndValue:val forPort:port];
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
[_c64dtv joystickAndValue:val forPort:port];
|
||||
} else {
|
||||
[_c64 joystickAndValue:val forPort:port];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray <NSDictionary <NSString *, id> *> *)displayModes
|
||||
@@ -415,9 +598,25 @@ static uint8_t joystick_bits[] = {
|
||||
}
|
||||
|
||||
if ([displayMode isEqualToString:@"NTSC"]) {
|
||||
_c64.model = C64ModelNTSC;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
_vic20.model = Vic20ModelNTSC;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
_c128.model = C128ModelNTSC;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
_c64dtv.model = DTVModelV3NTSC;
|
||||
} else {
|
||||
_c64.model = C64ModelNTSC;
|
||||
}
|
||||
} else {
|
||||
_c64.model = C64ModelPAL;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
_vic20.model = Vic20ModelPAL;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
_c128.model = C128ModelPAL;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
_c64dtv.model = DTVModelV3PAL;
|
||||
} else {
|
||||
_c64.model = C64ModelPAL;
|
||||
}
|
||||
}
|
||||
|
||||
_availableDisplayModes = tempModesArray;
|
||||
@@ -433,13 +632,40 @@ static uint8_t joystick_bits[] = {
|
||||
if (!initialized) {
|
||||
NSString *bootPath = self.owner.bundle.resourcePath;
|
||||
#define MACOSX_ROMDIR @"ROM"
|
||||
NSArray<NSString *> *pathList = @[
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"C64"]],
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"DRIVES"]],
|
||||
];
|
||||
[_c64 initializeWithBootPath:bootPath systemPathList:pathList];
|
||||
_c64.model = C64ModelPAL;
|
||||
_frameInterval = _c64.videoFrequency;
|
||||
if ([_viceCore isEqualToString:@"Vic20"]){
|
||||
NSArray<NSString *> *pathList = @[
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"VIC20"]],
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"DRIVES"]],
|
||||
];
|
||||
[_vic20 initializeWithBootPath:bootPath systemPathList:pathList];
|
||||
_vic20.model = Vic20ModelPAL;
|
||||
_frameInterval = _vic20.videoFrequency;
|
||||
} else if([_viceCore isEqualToString:@"C128"]){
|
||||
NSArray<NSString *> *pathList = @[
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"C128"]],
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"DRIVES"]],
|
||||
];
|
||||
[_c128 initializeWithBootPath:bootPath systemPathList:pathList];
|
||||
_c128.model = C128ModelPAL;
|
||||
_frameInterval = _c128.videoFrequency;
|
||||
}else if ([_viceCore isEqualToString:@"DTV"]){
|
||||
NSArray<NSString *> *pathList = @[
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"C64DTV"]],
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"DRIVES"]],
|
||||
];
|
||||
[_c64dtv initializeWithBootPath:bootPath systemPathList:pathList];
|
||||
_c64dtv.model = DTVModelV3PAL;
|
||||
_frameInterval = _c64dtv.videoFrequency;
|
||||
} else {
|
||||
NSArray<NSString *> *pathList = @[
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"C64"]],
|
||||
[NSString pathWithComponents:@[bootPath, MACOSX_ROMDIR, @"DRIVES"]],
|
||||
];
|
||||
[_c64 initializeWithBootPath:bootPath systemPathList:pathList];
|
||||
_c64.model = C64ModelPAL;
|
||||
_frameInterval = _c64.videoFrequency;
|
||||
}
|
||||
|
||||
|
||||
// Use the last selected display mode or default to the appropriate for the user system locale
|
||||
if (self.displayModeInfo == nil)
|
||||
|
||||
+305
-23
@@ -69,8 +69,61 @@
|
||||
3EDA96831F19560C0015CED2 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 059611F81C3C47FD005C174C /* libz.tbd */; };
|
||||
3EDA96841F19560C0015CED2 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 059611FA1C3C482C005C174C /* libstdc++.tbd */; };
|
||||
3EDA96851F19560C0015CED2 /* OpenEmuBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0598D2561C44C38200E456A6 /* OpenEmuBase.framework */; };
|
||||
EE9CDC7C251D51B400296520 /* liboex64sc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = EE9CDB4F251BF85800296520 /* liboex64sc.dylib */; };
|
||||
EE9CDC7D251D51B400296520 /* liboex64sc.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = EE9CDB4F251BF85800296520 /* liboex64sc.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
EE9CDCD6251DAB4D00296520 /* kernal64 in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC97251DAAAD00296520 /* kernal64 */; };
|
||||
EE9CDCD7251DAB4D00296520 /* basichi in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC98251DAAAD00296520 /* basichi */; };
|
||||
EE9CDCD8251DAB4D00296520 /* colodore.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC99251DAAAD00296520 /* colodore.vpl */; };
|
||||
EE9CDCD9251DAB4D00296520 /* pc64.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC9A251DAAAD00296520 /* pc64.vpl */; };
|
||||
EE9CDCDA251DAB4D00296520 /* kernalde in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC9B251DAAAD00296520 /* kernalde */; };
|
||||
EE9CDCDB251DAB4E00296520 /* basic64 in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC9C251DAAAD00296520 /* basic64 */; };
|
||||
EE9CDCDC251DAB4E00296520 /* community-colors.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC9D251DAAAD00296520 /* community-colors.vpl */; };
|
||||
EE9CDCDD251DAB4E00296520 /* godot.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC9E251DAAAD00296520 /* godot.vpl */; };
|
||||
EE9CDCDE251DAB4E00296520 /* chargde in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDC9F251DAAAD00296520 /* chargde */; };
|
||||
EE9CDCE0251DAB4E00296520 /* pepto-ntsc.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA1251DAAAD00296520 /* pepto-ntsc.vpl */; };
|
||||
EE9CDCE1251DAB4E00296520 /* pepto-ntsc-sony.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA2251DAAAD00296520 /* pepto-ntsc-sony.vpl */; };
|
||||
EE9CDCE2251DAB4E00296520 /* default.vrs in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA3251DAAAD00296520 /* default.vrs */; };
|
||||
EE9CDCE4251DAB4E00296520 /* chargen in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA5251DAAAD00296520 /* chargen */; };
|
||||
EE9CDCE5251DAB4E00296520 /* chargfr in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA6251DAAAD00296520 /* chargfr */; };
|
||||
EE9CDCE6251DAB4E00296520 /* pepto-pal.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA7251DAAAD00296520 /* pepto-pal.vpl */; };
|
||||
EE9CDCE7251DAB4E00296520 /* kernalfr in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA8251DAAAD00296520 /* kernalfr */; };
|
||||
EE9CDCE8251DAB4E00296520 /* ptoing.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCA9251DAAAD00296520 /* ptoing.vpl */; };
|
||||
EE9CDCE9251DAB4E00296520 /* kernalfi in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCAA251DAAAD00296520 /* kernalfi */; };
|
||||
EE9CDCEA251DAB4E00296520 /* basiclo in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCAB251DAAAD00296520 /* basiclo */; };
|
||||
EE9CDCEB251DAB4E00296520 /* vice.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCAC251DAAAD00296520 /* vice.vpl */; };
|
||||
EE9CDCEC251DAB4E00296520 /* pepto-palold.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCAD251DAAAD00296520 /* pepto-palold.vpl */; };
|
||||
EE9CDCED251DAB4E00296520 /* kernal in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCAE251DAAAD00296520 /* kernal */; };
|
||||
EE9CDCF0251DAB4E00296520 /* kernalse in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB1251DAAAD00296520 /* kernalse */; };
|
||||
EE9CDCF1251DAB4E00296520 /* chargse in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB2251DAAAD00296520 /* chargse */; };
|
||||
EE9CDCF2251DAB4E00296520 /* chargno in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB3251DAAAD00296520 /* chargno */; };
|
||||
EE9CDCF3251DAB4E00296520 /* kernalno in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB4251DAAAD00296520 /* kernalno */; };
|
||||
EE9CDCF4251DAB4E00296520 /* vdc_comp.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB5251DAAAD00296520 /* vdc_comp.vpl */; };
|
||||
EE9CDCF5251DAB4E00296520 /* cjam.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB6251DAAAD00296520 /* cjam.vpl */; };
|
||||
EE9CDCF6251DAB4E00296520 /* rgb.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB7251DAAAD00296520 /* rgb.vpl */; };
|
||||
EE9CDCF7251DAB4E00296520 /* chargch in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB8251DAAAD00296520 /* chargch */; };
|
||||
EE9CDCF8251DAB4E00296520 /* kernalch in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCB9251DAAAD00296520 /* kernalch */; };
|
||||
EE9CDCF9251DAB4E00296520 /* kernalit in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCBA251DAAAD00296520 /* kernalit */; };
|
||||
EE9CDCFA251DAB4E00296520 /* ccs64.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCBB251DAAAD00296520 /* ccs64.vpl */; };
|
||||
EE9CDCFB251DAB4E00296520 /* deekay.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCBC251DAAAD00296520 /* deekay.vpl */; };
|
||||
EE9CDCFC251DAB4E00296520 /* c64hq.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCBD251DAAAD00296520 /* c64hq.vpl */; };
|
||||
EE9CDCFD251DAB4E00296520 /* vdc_deft.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCBE251DAAAD00296520 /* vdc_deft.vpl */; };
|
||||
EE9CDCFF251DAB4E00296520 /* frodo.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCC0251DAAAD00296520 /* frodo.vpl */; };
|
||||
EE9CDD01251DAB4E00296520 /* c64s.vpl in Copy C128 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCC2251DAAAD00296520 /* c64s.vpl */; };
|
||||
EE9CDD05251DABCF00296520 /* colodore_vic.vpl in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCC5251DAAAD00296520 /* colodore_vic.vpl */; };
|
||||
EE9CDD07251DABCF00296520 /* default.vrs in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCC7251DAAAD00296520 /* default.vrs */; };
|
||||
EE9CDD08251DABCF00296520 /* chargen in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCC9251DAAAD00296520 /* chargen */; };
|
||||
EE9CDD09251DABCF00296520 /* basic in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCCA251DAAAD00296520 /* basic */; };
|
||||
EE9CDD0A251DABCF00296520 /* vice.vpl in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCCB251DAAAD00296520 /* vice.vpl */; };
|
||||
EE9CDD0B251DABCF00296520 /* kernal in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCCC251DAAAD00296520 /* kernal */; };
|
||||
EE9CDD0E251DABCF00296520 /* mike-ntsc.vpl in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCCF251DAAAD00296520 /* mike-ntsc.vpl */; };
|
||||
EE9CDD13251DABCF00296520 /* mike-pal.vpl in Copy Vic20 ROM Files */ = {isa = PBXBuildFile; fileRef = EE9CDCD4251DAAAD00296520 /* mike-pal.vpl */; };
|
||||
EEB6072325226C4700EA1F3A /* liboex64dtv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = EE49398E2521803F00F4FE78 /* liboex64dtv.dylib */; };
|
||||
EEB6072425226C4700EA1F3A /* liboex64dtv.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = EE49398E2521803F00F4FE78 /* liboex64dtv.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
EEB607D925226F6700EA1F3A /* c64mem.sym in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607B725226F0100EA1F3A /* c64mem.sym */; };
|
||||
EEB607DC25226F6C00EA1F3A /* default.vrs in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607BA25226F0100EA1F3A /* default.vrs */; };
|
||||
EEB607DE25226F6E00EA1F3A /* chargen in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607BC25226F0100EA1F3A /* chargen */; };
|
||||
EEB607DF25226F7000EA1F3A /* basic in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607C025226F0100EA1F3A /* basic */; };
|
||||
EEB607E125226F7200EA1F3A /* kernal in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607C425226F0100EA1F3A /* kernal */; };
|
||||
EEB607E225226F7300EA1F3A /* dtvrom.bin in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607D125226F0100EA1F3A /* dtvrom.bin */; };
|
||||
EEB607E425226F7500EA1F3A /* spiff.vpl in CopyFiles */ = {isa = PBXBuildFile; fileRef = EEB607D625226F0100EA1F3A /* spiff.vpl */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -84,17 +137,6 @@
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
05A8980623EF64AB000CA1D2 /* Embed Libraries */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
EE9CDC7D251D51B400296520 /* liboex64sc.dylib in Embed Libraries */,
|
||||
);
|
||||
name = "Embed Libraries";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
3EDA96881F19560C0015CED2 /* Copy C64 ROM Files */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -157,6 +199,99 @@
|
||||
name = "Copy Drive ROM Files";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
EE9CDCD5251DAAD300296520 /* Copy C128 ROM Files */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = ROM/C128;
|
||||
dstSubfolderSpec = 7;
|
||||
files = (
|
||||
EE9CDCD6251DAB4D00296520 /* kernal64 in Copy C128 ROM Files */,
|
||||
EE9CDCD7251DAB4D00296520 /* basichi in Copy C128 ROM Files */,
|
||||
EE9CDCD8251DAB4D00296520 /* colodore.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCD9251DAB4D00296520 /* pc64.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCDA251DAB4D00296520 /* kernalde in Copy C128 ROM Files */,
|
||||
EE9CDCDB251DAB4E00296520 /* basic64 in Copy C128 ROM Files */,
|
||||
EE9CDCDC251DAB4E00296520 /* community-colors.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCDD251DAB4E00296520 /* godot.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCDE251DAB4E00296520 /* chargde in Copy C128 ROM Files */,
|
||||
EE9CDCE0251DAB4E00296520 /* pepto-ntsc.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCE1251DAB4E00296520 /* pepto-ntsc-sony.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCE2251DAB4E00296520 /* default.vrs in Copy C128 ROM Files */,
|
||||
EE9CDCE4251DAB4E00296520 /* chargen in Copy C128 ROM Files */,
|
||||
EE9CDCE5251DAB4E00296520 /* chargfr in Copy C128 ROM Files */,
|
||||
EE9CDCE6251DAB4E00296520 /* pepto-pal.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCE7251DAB4E00296520 /* kernalfr in Copy C128 ROM Files */,
|
||||
EE9CDCE8251DAB4E00296520 /* ptoing.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCE9251DAB4E00296520 /* kernalfi in Copy C128 ROM Files */,
|
||||
EE9CDCEA251DAB4E00296520 /* basiclo in Copy C128 ROM Files */,
|
||||
EE9CDCEB251DAB4E00296520 /* vice.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCEC251DAB4E00296520 /* pepto-palold.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCED251DAB4E00296520 /* kernal in Copy C128 ROM Files */,
|
||||
EE9CDCF0251DAB4E00296520 /* kernalse in Copy C128 ROM Files */,
|
||||
EE9CDCF1251DAB4E00296520 /* chargse in Copy C128 ROM Files */,
|
||||
EE9CDCF2251DAB4E00296520 /* chargno in Copy C128 ROM Files */,
|
||||
EE9CDCF3251DAB4E00296520 /* kernalno in Copy C128 ROM Files */,
|
||||
EE9CDCF4251DAB4E00296520 /* vdc_comp.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCF5251DAB4E00296520 /* cjam.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCF6251DAB4E00296520 /* rgb.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCF7251DAB4E00296520 /* chargch in Copy C128 ROM Files */,
|
||||
EE9CDCF8251DAB4E00296520 /* kernalch in Copy C128 ROM Files */,
|
||||
EE9CDCF9251DAB4E00296520 /* kernalit in Copy C128 ROM Files */,
|
||||
EE9CDCFA251DAB4E00296520 /* ccs64.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCFB251DAB4E00296520 /* deekay.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCFC251DAB4E00296520 /* c64hq.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCFD251DAB4E00296520 /* vdc_deft.vpl in Copy C128 ROM Files */,
|
||||
EE9CDCFF251DAB4E00296520 /* frodo.vpl in Copy C128 ROM Files */,
|
||||
EE9CDD01251DAB4E00296520 /* c64s.vpl in Copy C128 ROM Files */,
|
||||
);
|
||||
name = "Copy C128 ROM Files";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
EE9CDD04251DAB9300296520 /* Copy Vic20 ROM Files */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = ROM/VIC20;
|
||||
dstSubfolderSpec = 7;
|
||||
files = (
|
||||
EE9CDD05251DABCF00296520 /* colodore_vic.vpl in Copy Vic20 ROM Files */,
|
||||
EE9CDD07251DABCF00296520 /* default.vrs in Copy Vic20 ROM Files */,
|
||||
EE9CDD08251DABCF00296520 /* chargen in Copy Vic20 ROM Files */,
|
||||
EE9CDD09251DABCF00296520 /* basic in Copy Vic20 ROM Files */,
|
||||
EE9CDD0A251DABCF00296520 /* vice.vpl in Copy Vic20 ROM Files */,
|
||||
EE9CDD0B251DABCF00296520 /* kernal in Copy Vic20 ROM Files */,
|
||||
EE9CDD0E251DABCF00296520 /* mike-ntsc.vpl in Copy Vic20 ROM Files */,
|
||||
EE9CDD13251DABCF00296520 /* mike-pal.vpl in Copy Vic20 ROM Files */,
|
||||
);
|
||||
name = "Copy Vic20 ROM Files";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
EEB6072525226C4700EA1F3A /* Embed Libraries */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
EEB6072425226C4700EA1F3A /* liboex64dtv.dylib in Embed Libraries */,
|
||||
);
|
||||
name = "Embed Libraries";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
EEB607D825226F4500EA1F3A /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = ROM/C64DTV;
|
||||
dstSubfolderSpec = 7;
|
||||
files = (
|
||||
EEB607D925226F6700EA1F3A /* c64mem.sym in CopyFiles */,
|
||||
EEB607E125226F7200EA1F3A /* kernal in CopyFiles */,
|
||||
EEB607E425226F7500EA1F3A /* spiff.vpl in CopyFiles */,
|
||||
EEB607E225226F7300EA1F3A /* dtvrom.bin in CopyFiles */,
|
||||
EEB607DF25226F7000EA1F3A /* basic in CopyFiles */,
|
||||
EEB607DC25226F6C00EA1F3A /* default.vrs in CopyFiles */,
|
||||
EEB607DE25226F6E00EA1F3A /* chargen in CopyFiles */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@@ -215,19 +350,77 @@
|
||||
05A8982423F1229F000CA1D2 /* osx_pos.vkm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = osx_pos.vkm; sourceTree = "<group>"; };
|
||||
05A8982523F1229F000CA1D2 /* osx_sym.vkm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = osx_sym.vkm; sourceTree = "<group>"; };
|
||||
3E1BCCA31F16DA250022C2EF /* libedit.3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libedit.3.0.tbd; path = usr/lib/libedit.3.0.tbd; sourceTree = SDKROOT; };
|
||||
3E3DDE7E1F46863A00639644 /* OEC64SystemResponderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OEC64SystemResponderClient.h; path = "../../OpenEmu/SystemPlugins/Commodore 64/OEC64SystemResponderClient.h"; sourceTree = "<group>"; };
|
||||
3E3DDE7E1F46863A00639644 /* OEC64SystemResponderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OEC64SystemResponderClient.h; path = "../../OpenEmu/Commodore 64/OEC64SystemResponderClient.h"; sourceTree = "<group>"; };
|
||||
3E6E5E3B1F17301C007FEF0A /* libedit.3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libedit.3.tbd; path = usr/lib/libedit.3.tbd; sourceTree = SDKROOT; };
|
||||
3EDA96DB1F19560C0015CED2 /* VICE.oecoreplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VICE.oecoreplugin; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3EDA98AC1F197B540015CED2 /* OpenEmuBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenEmuBase.framework; path = "../../Library/Developer/Xcode/DerivedData/OpenEmu-daupfkdcntzkhycxsuyuvqosnsbs/Build/Products/Debug/OpenEmuBase.framework"; sourceTree = "<group>"; };
|
||||
3EDA98AD1F197B540015CED2 /* OpenEmuSystem.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenEmuSystem.framework; path = "../../Library/Developer/Xcode/DerivedData/OpenEmu-daupfkdcntzkhycxsuyuvqosnsbs/Build/Products/Debug/OpenEmuSystem.framework"; sourceTree = "<group>"; };
|
||||
3EDA98B01F197B770015CED2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
87BEF9312175226000E38B38 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
|
||||
EE9CDB4F251BF85800296520 /* liboex64sc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liboex64sc.dylib; path = deps/vice/liboex64sc.dylib; sourceTree = "<group>"; };
|
||||
EE49398B25211F5000F4FE78 /* C64dtv_archdep.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = C64dtv_archdep.h; path = deps/vice/src/arch/oeheadless/C64dtv_archdep.h; sourceTree = SOURCE_ROOT; };
|
||||
EE49398D25211F6B00F4FE78 /* C64dtv.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = C64dtv.h; sourceTree = "<group>"; };
|
||||
EE49398E2521803F00F4FE78 /* liboex64dtv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liboex64dtv.dylib; path = deps/vice/liboex64dtv.dylib; sourceTree = "<group>"; };
|
||||
EE9CDB53251BFBD900296520 /* C128.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = C128.h; sourceTree = "<group>"; };
|
||||
EE9CDB5B251D487F00296520 /* Vic20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vic20.h; sourceTree = "<group>"; };
|
||||
EE9CDBEA251D49CE00296520 /* C64_archdep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = C64_archdep.h; path = deps/vice/src/arch/oeheadless/C64_archdep.h; sourceTree = SOURCE_ROOT; };
|
||||
EE9CDBEB251D49CE00296520 /* C128_archdep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = C128_archdep.h; path = deps/vice/src/arch/oeheadless/C128_archdep.h; sourceTree = SOURCE_ROOT; };
|
||||
EE9CDBEC251D49CE00296520 /* Vic20_archdep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vic20_archdep.h; path = deps/vice/src/arch/oeheadless/Vic20_archdep.h; sourceTree = SOURCE_ROOT; };
|
||||
EE9CDC89251D698B00296520 /* liboex64sc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liboex64sc.dylib; path = deps/vice/liboex64sc.dylib; sourceTree = "<group>"; };
|
||||
EE9CDC8A251D698B00296520 /* liboex128.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liboex128.dylib; path = deps/vice/liboex128.dylib; sourceTree = "<group>"; };
|
||||
EE9CDC8B251D698C00296520 /* liboexvic20.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liboexvic20.dylib; path = deps/vice/liboexvic20.dylib; sourceTree = "<group>"; };
|
||||
EE9CDC97251DAAAD00296520 /* kernal64 */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernal64; sourceTree = "<group>"; };
|
||||
EE9CDC98251DAAAD00296520 /* basichi */ = {isa = PBXFileReference; lastKnownFileType = file; path = basichi; sourceTree = "<group>"; };
|
||||
EE9CDC99251DAAAD00296520 /* colodore.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = colodore.vpl; sourceTree = "<group>"; };
|
||||
EE9CDC9A251DAAAD00296520 /* pc64.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = pc64.vpl; sourceTree = "<group>"; };
|
||||
EE9CDC9B251DAAAD00296520 /* kernalde */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalde; sourceTree = "<group>"; };
|
||||
EE9CDC9C251DAAAD00296520 /* basic64 */ = {isa = PBXFileReference; lastKnownFileType = file; path = basic64; sourceTree = "<group>"; };
|
||||
EE9CDC9D251DAAAD00296520 /* community-colors.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "community-colors.vpl"; sourceTree = "<group>"; };
|
||||
EE9CDC9E251DAAAD00296520 /* godot.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = godot.vpl; sourceTree = "<group>"; };
|
||||
EE9CDC9F251DAAAD00296520 /* chargde */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargde; sourceTree = "<group>"; };
|
||||
EE9CDCA1251DAAAD00296520 /* pepto-ntsc.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "pepto-ntsc.vpl"; sourceTree = "<group>"; };
|
||||
EE9CDCA2251DAAAD00296520 /* pepto-ntsc-sony.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "pepto-ntsc-sony.vpl"; sourceTree = "<group>"; };
|
||||
EE9CDCA3251DAAAD00296520 /* default.vrs */ = {isa = PBXFileReference; lastKnownFileType = text; path = default.vrs; sourceTree = "<group>"; };
|
||||
EE9CDCA5251DAAAD00296520 /* chargen */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargen; sourceTree = "<group>"; };
|
||||
EE9CDCA6251DAAAD00296520 /* chargfr */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargfr; sourceTree = "<group>"; };
|
||||
EE9CDCA7251DAAAD00296520 /* pepto-pal.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "pepto-pal.vpl"; sourceTree = "<group>"; };
|
||||
EE9CDCA8251DAAAD00296520 /* kernalfr */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalfr; sourceTree = "<group>"; };
|
||||
EE9CDCA9251DAAAD00296520 /* ptoing.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ptoing.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCAA251DAAAD00296520 /* kernalfi */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalfi; sourceTree = "<group>"; };
|
||||
EE9CDCAB251DAAAD00296520 /* basiclo */ = {isa = PBXFileReference; lastKnownFileType = file; path = basiclo; sourceTree = "<group>"; };
|
||||
EE9CDCAC251DAAAD00296520 /* vice.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = vice.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCAD251DAAAD00296520 /* pepto-palold.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "pepto-palold.vpl"; sourceTree = "<group>"; };
|
||||
EE9CDCAE251DAAAD00296520 /* kernal */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernal; sourceTree = "<group>"; };
|
||||
EE9CDCB1251DAAAD00296520 /* kernalse */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalse; sourceTree = "<group>"; };
|
||||
EE9CDCB2251DAAAD00296520 /* chargse */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargse; sourceTree = "<group>"; };
|
||||
EE9CDCB3251DAAAD00296520 /* chargno */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargno; sourceTree = "<group>"; };
|
||||
EE9CDCB4251DAAAD00296520 /* kernalno */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalno; sourceTree = "<group>"; };
|
||||
EE9CDCB5251DAAAD00296520 /* vdc_comp.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = vdc_comp.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCB6251DAAAD00296520 /* cjam.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = cjam.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCB7251DAAAD00296520 /* rgb.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = rgb.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCB8251DAAAD00296520 /* chargch */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargch; sourceTree = "<group>"; };
|
||||
EE9CDCB9251DAAAD00296520 /* kernalch */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalch; sourceTree = "<group>"; };
|
||||
EE9CDCBA251DAAAD00296520 /* kernalit */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernalit; sourceTree = "<group>"; };
|
||||
EE9CDCBB251DAAAD00296520 /* ccs64.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ccs64.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCBC251DAAAD00296520 /* deekay.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = deekay.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCBD251DAAAD00296520 /* c64hq.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = c64hq.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCBE251DAAAD00296520 /* vdc_deft.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = vdc_deft.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCC0251DAAAD00296520 /* frodo.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = frodo.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCC2251DAAAD00296520 /* c64s.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = c64s.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCC5251DAAAD00296520 /* colodore_vic.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = colodore_vic.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCC7251DAAAD00296520 /* default.vrs */ = {isa = PBXFileReference; lastKnownFileType = text; path = default.vrs; sourceTree = "<group>"; };
|
||||
EE9CDCC9251DAAAD00296520 /* chargen */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargen; sourceTree = "<group>"; };
|
||||
EE9CDCCA251DAAAD00296520 /* basic */ = {isa = PBXFileReference; lastKnownFileType = file; path = basic; sourceTree = "<group>"; };
|
||||
EE9CDCCB251DAAAD00296520 /* vice.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = vice.vpl; sourceTree = "<group>"; };
|
||||
EE9CDCCC251DAAAD00296520 /* kernal */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernal; sourceTree = "<group>"; };
|
||||
EE9CDCCF251DAAAD00296520 /* mike-ntsc.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mike-ntsc.vpl"; sourceTree = "<group>"; };
|
||||
EE9CDCD4251DAAAD00296520 /* mike-pal.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mike-pal.vpl"; sourceTree = "<group>"; };
|
||||
EEB607B725226F0100EA1F3A /* c64mem.sym */ = {isa = PBXFileReference; lastKnownFileType = text; path = c64mem.sym; sourceTree = "<group>"; };
|
||||
EEB607BA25226F0100EA1F3A /* default.vrs */ = {isa = PBXFileReference; lastKnownFileType = text; path = default.vrs; sourceTree = "<group>"; };
|
||||
EEB607BC25226F0100EA1F3A /* chargen */ = {isa = PBXFileReference; lastKnownFileType = file; path = chargen; sourceTree = "<group>"; };
|
||||
EEB607C025226F0100EA1F3A /* basic */ = {isa = PBXFileReference; lastKnownFileType = file; path = basic; sourceTree = "<group>"; };
|
||||
EEB607C425226F0100EA1F3A /* kernal */ = {isa = PBXFileReference; lastKnownFileType = file; path = kernal; sourceTree = "<group>"; };
|
||||
EEB607D125226F0100EA1F3A /* dtvrom.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; path = dtvrom.bin; sourceTree = "<group>"; };
|
||||
EEB607D625226F0100EA1F3A /* spiff.vpl */ = {isa = PBXFileReference; lastKnownFileType = text; path = spiff.vpl; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -238,8 +431,8 @@
|
||||
3EDA96821F19560C0015CED2 /* libedit.3.0.tbd in Frameworks */,
|
||||
3EDA96831F19560C0015CED2 /* libz.tbd in Frameworks */,
|
||||
3EDA96841F19560C0015CED2 /* libstdc++.tbd in Frameworks */,
|
||||
EEB6072325226C4700EA1F3A /* liboex64dtv.dylib in Frameworks */,
|
||||
3EDA96851F19560C0015CED2 /* OpenEmuBase.framework in Frameworks */,
|
||||
EE9CDC7C251D51B400296520 /* liboex64sc.dylib in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -267,7 +460,10 @@
|
||||
059612CF1C3CEE6A005C174C /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EE9CDB4F251BF85800296520 /* liboex64sc.dylib */,
|
||||
EE49398E2521803F00F4FE78 /* liboex64dtv.dylib */,
|
||||
EE9CDC89251D698B00296520 /* liboex64sc.dylib */,
|
||||
EE9CDC8A251D698B00296520 /* liboex128.dylib */,
|
||||
EE9CDC8B251D698C00296520 /* liboexvic20.dylib */,
|
||||
3EDA98B01F197B770015CED2 /* Cocoa.framework */,
|
||||
3EDA98AC1F197B540015CED2 /* OpenEmuBase.framework */,
|
||||
3EDA98AD1F197B540015CED2 /* OpenEmuSystem.framework */,
|
||||
@@ -302,13 +498,16 @@
|
||||
path = Classes;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
05A8973D23EF5CFD000CA1D2 /* C64 */ = {
|
||||
05A8973D23EF5CFD000CA1D2 /* ROMS */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EEB607B425226F0100EA1F3A /* C64DTV */,
|
||||
EE9CDC96251DAAAD00296520 /* C128 */,
|
||||
EE9CDCC4251DAAAD00296520 /* VIC20 */,
|
||||
05A8974F23EF5D2C000CA1D2 /* C64 */,
|
||||
05A8973E23EF5D2C000CA1D2 /* DRIVES */,
|
||||
);
|
||||
name = C64;
|
||||
name = ROMS;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
05A8973E23EF5D2C000CA1D2 /* DRIVES */ = {
|
||||
@@ -381,6 +580,7 @@
|
||||
05A897FF23EF5ECC000CA1D2 /* public */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EE49398D25211F6B00F4FE78 /* C64dtv.h */,
|
||||
EE9CDB5B251D487F00296520 /* Vic20.h */,
|
||||
EE9CDB53251BFBD900296520 /* C128.h */,
|
||||
05A8980723EF7DD5000CA1D2 /* archdep.h */,
|
||||
@@ -395,7 +595,7 @@
|
||||
87BEF9302175212400E38B38 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
05A8973D23EF5CFD000CA1D2 /* C64 */,
|
||||
05A8973D23EF5CFD000CA1D2 /* ROMS */,
|
||||
87BEF9312175226000E38B38 /* Info.plist */,
|
||||
);
|
||||
path = Resources;
|
||||
@@ -404,12 +604,91 @@
|
||||
EE9CDBE9251D498B00296520 /* archdep */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EE49398B25211F5000F4FE78 /* C64dtv_archdep.h */,
|
||||
EE9CDBEA251D49CE00296520 /* C64_archdep.h */,
|
||||
EE9CDBEB251D49CE00296520 /* C128_archdep.h */,
|
||||
EE9CDBEC251D49CE00296520 /* Vic20_archdep.h */,
|
||||
);
|
||||
path = archdep;
|
||||
sourceTree = "<group>";
|
||||
name = archdep;
|
||||
path = "/Users/haverlan@us.ibm.com/Documents/Code/OpenEmu/Vice/Core/archdep";
|
||||
sourceTree = "<absolute>";
|
||||
};
|
||||
EE9CDC96251DAAAD00296520 /* C128 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EE9CDC97251DAAAD00296520 /* kernal64 */,
|
||||
EE9CDC98251DAAAD00296520 /* basichi */,
|
||||
EE9CDC99251DAAAD00296520 /* colodore.vpl */,
|
||||
EE9CDC9A251DAAAD00296520 /* pc64.vpl */,
|
||||
EE9CDC9B251DAAAD00296520 /* kernalde */,
|
||||
EE9CDC9C251DAAAD00296520 /* basic64 */,
|
||||
EE9CDC9D251DAAAD00296520 /* community-colors.vpl */,
|
||||
EE9CDC9E251DAAAD00296520 /* godot.vpl */,
|
||||
EE9CDC9F251DAAAD00296520 /* chargde */,
|
||||
EE9CDCA1251DAAAD00296520 /* pepto-ntsc.vpl */,
|
||||
EE9CDCA2251DAAAD00296520 /* pepto-ntsc-sony.vpl */,
|
||||
EE9CDCA3251DAAAD00296520 /* default.vrs */,
|
||||
EE9CDCA5251DAAAD00296520 /* chargen */,
|
||||
EE9CDCA6251DAAAD00296520 /* chargfr */,
|
||||
EE9CDCA7251DAAAD00296520 /* pepto-pal.vpl */,
|
||||
EE9CDCA8251DAAAD00296520 /* kernalfr */,
|
||||
EE9CDCA9251DAAAD00296520 /* ptoing.vpl */,
|
||||
EE9CDCAA251DAAAD00296520 /* kernalfi */,
|
||||
EE9CDCAB251DAAAD00296520 /* basiclo */,
|
||||
EE9CDCAC251DAAAD00296520 /* vice.vpl */,
|
||||
EE9CDCAD251DAAAD00296520 /* pepto-palold.vpl */,
|
||||
EE9CDCAE251DAAAD00296520 /* kernal */,
|
||||
EE9CDCB1251DAAAD00296520 /* kernalse */,
|
||||
EE9CDCB2251DAAAD00296520 /* chargse */,
|
||||
EE9CDCB3251DAAAD00296520 /* chargno */,
|
||||
EE9CDCB4251DAAAD00296520 /* kernalno */,
|
||||
EE9CDCB5251DAAAD00296520 /* vdc_comp.vpl */,
|
||||
EE9CDCB6251DAAAD00296520 /* cjam.vpl */,
|
||||
EE9CDCB7251DAAAD00296520 /* rgb.vpl */,
|
||||
EE9CDCB8251DAAAD00296520 /* chargch */,
|
||||
EE9CDCB9251DAAAD00296520 /* kernalch */,
|
||||
EE9CDCBA251DAAAD00296520 /* kernalit */,
|
||||
EE9CDCBB251DAAAD00296520 /* ccs64.vpl */,
|
||||
EE9CDCBC251DAAAD00296520 /* deekay.vpl */,
|
||||
EE9CDCBD251DAAAD00296520 /* c64hq.vpl */,
|
||||
EE9CDCBE251DAAAD00296520 /* vdc_deft.vpl */,
|
||||
EE9CDCC0251DAAAD00296520 /* frodo.vpl */,
|
||||
EE9CDCC2251DAAAD00296520 /* c64s.vpl */,
|
||||
);
|
||||
name = C128;
|
||||
path = deps/vice/data/C128;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
EE9CDCC4251DAAAD00296520 /* VIC20 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EE9CDCC5251DAAAD00296520 /* colodore_vic.vpl */,
|
||||
EE9CDCC7251DAAAD00296520 /* default.vrs */,
|
||||
EE9CDCC9251DAAAD00296520 /* chargen */,
|
||||
EE9CDCCA251DAAAD00296520 /* basic */,
|
||||
EE9CDCCB251DAAAD00296520 /* vice.vpl */,
|
||||
EE9CDCCC251DAAAD00296520 /* kernal */,
|
||||
EE9CDCCF251DAAAD00296520 /* mike-ntsc.vpl */,
|
||||
EE9CDCD4251DAAAD00296520 /* mike-pal.vpl */,
|
||||
);
|
||||
name = VIC20;
|
||||
path = deps/vice/data/VIC20;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
EEB607B425226F0100EA1F3A /* C64DTV */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EEB607B725226F0100EA1F3A /* c64mem.sym */,
|
||||
EEB607BA25226F0100EA1F3A /* default.vrs */,
|
||||
EEB607BC25226F0100EA1F3A /* chargen */,
|
||||
EEB607C025226F0100EA1F3A /* basic */,
|
||||
EEB607C425226F0100EA1F3A /* kernal */,
|
||||
EEB607D125226F0100EA1F3A /* dtvrom.bin */,
|
||||
EEB607D625226F0100EA1F3A /* spiff.vpl */,
|
||||
);
|
||||
name = C64DTV;
|
||||
path = deps/vice/data/C64DTV;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
@@ -423,7 +702,10 @@
|
||||
3EDA96861F19560C0015CED2 /* Resources */,
|
||||
3EDA96881F19560C0015CED2 /* Copy C64 ROM Files */,
|
||||
3EDA96A41F19560C0015CED2 /* Copy Drive ROM Files */,
|
||||
05A8980623EF64AB000CA1D2 /* Embed Libraries */,
|
||||
EE9CDCD5251DAAD300296520 /* Copy C128 ROM Files */,
|
||||
EE9CDD04251DAB9300296520 /* Copy Vic20 ROM Files */,
|
||||
EEB6072525226C4700EA1F3A /* Embed Libraries */,
|
||||
EEB607D825226F4500EA1F3A /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
|
||||
Vendored
+95
-22
@@ -1,6 +1,7 @@
|
||||
|
||||
add_subdirectory(arch)
|
||||
add_subdirectory(c64)
|
||||
add_subdirectory(c64dtv)
|
||||
add_subdirectory(c128)
|
||||
add_subdirectory(vic20)
|
||||
add_subdirectory(core)
|
||||
@@ -102,9 +103,9 @@ set(VICE_SOURCES
|
||||
${SRC_BASE_SOURCES}
|
||||
${SRC_MIDI_SOURCES}
|
||||
)
|
||||
|
||||
set(COMMON_LIBS
|
||||
c64commoncart
|
||||
tapeport
|
||||
driveiec
|
||||
driveiecieee
|
||||
driveieee
|
||||
@@ -129,6 +130,7 @@ set(XVIC20_LIBS
|
||||
vic20cartsystem
|
||||
mascuerade
|
||||
oeheadless_vic20
|
||||
tapeport
|
||||
${COMMON_LIBS}
|
||||
${ARCH_LIBS}
|
||||
${DRIVER_LIBS}
|
||||
@@ -138,6 +140,19 @@ set(X64_LIBS
|
||||
c64cart
|
||||
c64cartsystem
|
||||
driveiecc64exp
|
||||
tapeport
|
||||
${COMMON_LIBS}
|
||||
${DRIVER_LIBS}
|
||||
${ARCH_LIBS}
|
||||
)
|
||||
|
||||
set(X64DTV_LIBS
|
||||
c64dtv
|
||||
viciidtv
|
||||
tapeportdtv
|
||||
oeheadless_c64dtv
|
||||
driveiecc64exp
|
||||
c64c64dtv
|
||||
${COMMON_LIBS}
|
||||
${DRIVER_LIBS}
|
||||
${ARCH_LIBS}
|
||||
@@ -155,9 +170,11 @@ set(X128_LIBS
|
||||
c128
|
||||
oeheadless_c128
|
||||
driveiec128dcr
|
||||
c64c128
|
||||
${X64_LIBS}
|
||||
)
|
||||
add_executable(x64sc main.c ${VICE_SOURCES})
|
||||
add_executable(x64dtv main.c ${VICE_SOURCES} )
|
||||
add_executable(xvic20 main.c ${VICE_SOURCES})
|
||||
add_executable(x128 main.c ${VICE_SOURCES})
|
||||
|
||||
@@ -182,6 +199,27 @@ target_include_directories(x64sc PRIVATE
|
||||
socketdrv
|
||||
lib/linenoise-ng
|
||||
)
|
||||
target_include_directories(x64dtv PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
.
|
||||
c64dtv
|
||||
drive
|
||||
monitor
|
||||
plus4
|
||||
vic20
|
||||
vdrive
|
||||
diskimage
|
||||
imagecontents
|
||||
diag
|
||||
userport
|
||||
lib/p64
|
||||
joyport
|
||||
rtc
|
||||
tapeport
|
||||
tape
|
||||
socketdrv
|
||||
lib/linenoise-ng
|
||||
)
|
||||
|
||||
target_include_directories(x128 PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
@@ -207,30 +245,34 @@ target_include_directories(x128 PRIVATE
|
||||
lib/linenoise-ng
|
||||
)
|
||||
|
||||
target_include_directories(xvic20 PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
.
|
||||
drive
|
||||
monitor
|
||||
plus4
|
||||
vic20
|
||||
vdrive
|
||||
vdc
|
||||
diskimage
|
||||
imagecontents
|
||||
diag
|
||||
userport
|
||||
lib/p64
|
||||
joyport
|
||||
rtc
|
||||
tapeport
|
||||
tape
|
||||
socketdrv
|
||||
lib/linenoise-ng
|
||||
)
|
||||
target_include_directories(xvic20 PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
.
|
||||
drive
|
||||
monitor
|
||||
plus4
|
||||
vic20
|
||||
vdrive
|
||||
vdc
|
||||
diskimage
|
||||
imagecontents
|
||||
diag
|
||||
userport
|
||||
lib/p64
|
||||
joyport
|
||||
rtc
|
||||
tapeport
|
||||
tape
|
||||
socketdrv
|
||||
lib/linenoise-ng
|
||||
)
|
||||
target_link_libraries(x64sc ${VICE_LIBS} z "-framework CoreAudio" "-framework AudioToolbox" "-framework CoreFoundation")
|
||||
target_compile_options(x64sc PUBLIC "-fobjc-arc")
|
||||
|
||||
target_link_libraries(x64dtv ${VICE_LIBS} z "-framework CoreAudio" "-framework AudioToolbox" "-framework CoreFoundation")
|
||||
target_compile_options(x64dtv PUBLIC "-fobjc-arc")
|
||||
|
||||
|
||||
target_link_libraries(x128 ${VICE_LIBS} z "-framework CoreAudio" "-framework AudioToolbox" "-framework CoreFoundation")
|
||||
target_compile_options(x128 PUBLIC "-fobjc-arc")
|
||||
|
||||
@@ -241,12 +283,14 @@ include(CheckIPOSupported)
|
||||
check_ipo_supported(RESULT IPO_SUPPORTED)
|
||||
if (IPO_SUPPORTED)
|
||||
set_target_properties(x64sc PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(x64dtv PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(x128 PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(xvic20 PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
endif ()
|
||||
|
||||
if (USE_OEHEADLESS)
|
||||
add_library(oex64sc SHARED ${VICE_SOURCES})
|
||||
add_library(oex64dtv SHARED ${VICE_SOURCES} ps2mouse.c)
|
||||
add_library(oex128 SHARED ${VICE_SOURCES})
|
||||
add_library(oexvic20 SHARED ${VICE_SOURCES})
|
||||
|
||||
@@ -271,6 +315,7 @@ if (USE_OEHEADLESS)
|
||||
hvsc
|
||||
lib/linenoise-ng
|
||||
)
|
||||
|
||||
target_include_directories(oex64sc PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
.
|
||||
@@ -294,6 +339,25 @@ if (USE_OEHEADLESS)
|
||||
lib/linenoise-ng
|
||||
)
|
||||
|
||||
target_include_directories(oex64dtv PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
.
|
||||
c64dtv
|
||||
drive
|
||||
monitor
|
||||
vdrive
|
||||
diskimage
|
||||
imagecontents
|
||||
diag
|
||||
userport
|
||||
lib/p64
|
||||
joyport
|
||||
tapeport
|
||||
tape
|
||||
socketdrv
|
||||
lib/linenoise-ng
|
||||
)
|
||||
|
||||
target_include_directories(oex128 PRIVATE
|
||||
${ARCH_INCLUDES}
|
||||
.
|
||||
@@ -321,6 +385,9 @@ target_include_directories(oex128 PRIVATE
|
||||
target_link_libraries(oex64sc ${X64SC_LIBS} z "-framework Foundation" "-framework Carbon")
|
||||
target_compile_options(oex64sc PUBLIC "-fobjc-arc")
|
||||
|
||||
target_link_libraries(oex64dtv ${X64DTV_LIBS} z "-framework Foundation" "-framework Carbon")
|
||||
target_compile_options(oex64dtv PUBLIC "-fobjc-arc")
|
||||
|
||||
target_link_libraries(oex128 ${X128_LIBS} z "-framework Foundation" "-framework Carbon")
|
||||
target_compile_options(oex128 PUBLIC "-fobjc-arc")
|
||||
|
||||
@@ -329,6 +396,7 @@ target_include_directories(oex128 PRIVATE
|
||||
|
||||
if (IPO_SUPPORTED)
|
||||
set_target_properties(oex64sc PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(oex64dtv PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(oex128 PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(oexvic20 PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
endif ()
|
||||
@@ -338,6 +406,11 @@ target_include_directories(oex128 PRIVATE
|
||||
COMMENT "Copying library"
|
||||
)
|
||||
|
||||
add_custom_command(TARGET oex64dtv POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:oex64dtv> ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Copying library"
|
||||
)
|
||||
|
||||
add_custom_command(TARGET oex128 POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:oex128> ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Copying library"
|
||||
|
||||
Vendored
+18
@@ -26,6 +26,24 @@ OE_STATIC_ASSERT(C128ModelNTSC == (C128Model)C128MODEL_C128_NTSC);
|
||||
OE_STATIC_ASSERT(C128ModelDNTSC == (C128Model)C128MODEL_C128D_NTSC);
|
||||
OE_STATIC_ASSERT(C128ModelDCRNTSC == (C128Model)C128MODEL_C128DCR_NTSC);
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface Vic20: NSObject
|
||||
@end
|
||||
@implementation Vic20 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64: NSObject
|
||||
@end
|
||||
@implementation C64 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64dtv: NSObject
|
||||
@end
|
||||
@implementation C64dtv {}
|
||||
@end
|
||||
|
||||
@implementation C128 {
|
||||
BOOL _initialized;
|
||||
video_canvas_t *_canvas;
|
||||
|
||||
Vendored
+19
-1
@@ -23,6 +23,24 @@ OE_STATIC_ASSERT(C64ModelCPAL == (C64Model)C64MODEL_C64C_PAL);
|
||||
OE_STATIC_ASSERT(C64ModelNTSC == (C64Model)C64MODEL_C64_NTSC);
|
||||
OE_STATIC_ASSERT(C64ModelCNTSC == (C64Model)C64MODEL_C64C_NTSC);
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface Vic20: NSObject
|
||||
@end
|
||||
@implementation Vic20 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C128: NSObject
|
||||
@end
|
||||
@implementation C128 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64dtv: NSObject
|
||||
@end
|
||||
@implementation C64dtv {}
|
||||
@end
|
||||
|
||||
@implementation C64 {
|
||||
BOOL _initialized;
|
||||
video_canvas_t *_canvas;
|
||||
@@ -318,4 +336,4 @@ extern unsigned long vsyncarch_ticks;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@end
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
#import "public/C64dtv.h"
|
||||
#import "videoarch.h"
|
||||
|
||||
@interface C64dtv(Private)
|
||||
|
||||
- (void)createCanvas:(video_canvas_t *)canvas width:(unsigned int *)width height:(unsigned int *)height;
|
||||
- (void)canvasDidResize:(video_canvas_t *)canvas;
|
||||
|
||||
- (void)initSoundSpeed:(int *)speed fragSize:(int *)fragSize fragNumber:(int *)fragNumber channels:(int *)channels;
|
||||
|
||||
@end
|
||||
+340
@@ -0,0 +1,340 @@
|
||||
#import "public/api.h"
|
||||
#import "C64dtv_archdep.h"
|
||||
#import "public/C64dtv.h"
|
||||
#import "C64dtv+Private.h"
|
||||
#import "interrupt.h"
|
||||
#import "machine.h"
|
||||
#import "snapshot.h"
|
||||
#import "resources.h"
|
||||
#import "maincpu.h"
|
||||
#import "autostart.h"
|
||||
#import "c64dtvmodel.h"
|
||||
#import "main.h"
|
||||
#import "video.h"
|
||||
#import "keyboard.h"
|
||||
#import "joystick.h"
|
||||
#import "vsync.h"
|
||||
|
||||
// sanity checks
|
||||
OE_STATIC_ASSERT(KeyboardModLShift == (KeyboardMod)KBD_MOD_LSHIFT);
|
||||
OE_STATIC_ASSERT(KeyboardModRALT == (KeyboardMod)KBD_MOD_RALT);
|
||||
OE_STATIC_ASSERT(DTVModelV2PAL == (C64dtvModel)DTVMODEL_V2_PAL);
|
||||
OE_STATIC_ASSERT(DTVModelV2NTSC == (C64dtvModel)DTVMODEL_V2_NTSC);
|
||||
OE_STATIC_ASSERT(DTVModelV3PAL == (C64dtvModel)DTVMODEL_V3_PAL);
|
||||
OE_STATIC_ASSERT(DTVModelV3NTSC == (C64dtvModel)DTVMODEL_V3_NTSC);
|
||||
OE_STATIC_ASSERT(DTVModelHummerNTSC == (C64dtvModel)DTVMODEL_HUMMER_NTSC);
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface Vic20: NSObject
|
||||
@end
|
||||
@implementation Vic20 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C128: NSObject
|
||||
@end
|
||||
@implementation C128 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64: NSObject
|
||||
@end
|
||||
@implementation C64 {}
|
||||
@end
|
||||
|
||||
@implementation C64dtv {
|
||||
BOOL _initialized;
|
||||
video_canvas_t *_canvas;
|
||||
void *_buffer;
|
||||
NSSize _bufferSize;
|
||||
size_t _stateSize;
|
||||
unsigned long _ticksPerFrame;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
if ((self = [super init])) {
|
||||
_initialized = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (C64dtv *)shared {
|
||||
static C64dtv *shared;
|
||||
|
||||
static dispatch_once_t once;
|
||||
dispatch_once(&once, ^{
|
||||
shared = [C64dtv new];
|
||||
});
|
||||
|
||||
return shared;
|
||||
}
|
||||
|
||||
#pragma mark - private
|
||||
|
||||
- (void)updateCanvasFromBuffer {
|
||||
if (_canvas == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
_canvas->screen.pixels = _buffer;
|
||||
_canvas->screen.bpp = 32;
|
||||
_canvas->screen.pitch = (unsigned int)_bufferSize.width * 4;
|
||||
}
|
||||
|
||||
- (void)createCanvas:(video_canvas_t *)canvas width:(unsigned int *)width height:(unsigned int *)height {
|
||||
_canvas = canvas;
|
||||
|
||||
canvas->videoconfig->rendermode = VIDEO_RENDER_RGB_1X1;
|
||||
canvas->created = 1;
|
||||
canvas->initialized = 1;
|
||||
[self updateCanvasFromBuffer];
|
||||
}
|
||||
|
||||
- (void)canvasDidResize:(video_canvas_t *)canvas {
|
||||
[_delegate canvasWillResizeWidth:canvas->draw_buffer->canvas_width height:canvas->draw_buffer->canvas_height];
|
||||
}
|
||||
|
||||
- (void)initSoundSpeed:(int *)speed fragSize:(int *)fragSize fragNumber:(int *)fragNumber channels:(int *)channels {
|
||||
_audioFrequency = *speed;
|
||||
_audioChannels = *channels;
|
||||
}
|
||||
|
||||
#pragma mark - video
|
||||
|
||||
- (double)videoFrequency {
|
||||
return vsync_get_refresh_frequency();
|
||||
}
|
||||
|
||||
- (NSRect)videoFrame {
|
||||
if (_canvas) {
|
||||
return NSMakeRect(0, 0, _canvas->draw_buffer->canvas_width, _canvas->draw_buffer->canvas_height);
|
||||
}
|
||||
// default to PAL
|
||||
return NSMakeRect(0, 0, 384, 272);
|
||||
}
|
||||
|
||||
#pragma mark - initialization
|
||||
|
||||
- (void)initializeWithBootPath:(NSString *)bootPath systemPathList:(NSArray<NSString *> *)pathList {
|
||||
if (_initialized) {
|
||||
assert(false);
|
||||
}
|
||||
|
||||
_bootPath = [bootPath copy];
|
||||
_sysfilePathList = [pathList copy];
|
||||
|
||||
main_program(0, NULL);
|
||||
[self updateTicksPerFrame];
|
||||
_initialized = YES;
|
||||
}
|
||||
|
||||
#pragma mark - configuration
|
||||
|
||||
- (void)updateTicksPerFrame {
|
||||
_ticksPerFrame = (unsigned long)(1e6 / vsync_get_refresh_frequency());
|
||||
}
|
||||
|
||||
- (void)setModel:(C64dtvModel)model {
|
||||
if (dtvmodel_get() == model) {
|
||||
return;
|
||||
}
|
||||
[self willChangeValueForKey:@"model"];
|
||||
dtvmodel_set(model);
|
||||
[self updateTicksPerFrame];
|
||||
[self didChangeValueForKey:@"model"];
|
||||
}
|
||||
|
||||
- (C64dtvModel)model {
|
||||
return (C64dtvModel)dtvmodel_get();
|
||||
}
|
||||
|
||||
#pragma mark - image management
|
||||
|
||||
- (C64dtvImageType)imageTypeAtURL:(NSURL *)url {
|
||||
static NSSet<NSString *> *tape;
|
||||
static NSSet<NSString *> *cart;
|
||||
static NSSet<NSString *> *disk;
|
||||
|
||||
static dispatch_once_t init;
|
||||
dispatch_once(&init, ^{
|
||||
tape = [NSSet setWithArray:@[@"tap", @"t64"]];
|
||||
cart = [NSSet setWithArray:@[@"crt", @"bin"]];
|
||||
disk = [NSSet setWithArray:@[@"d64", @"d67", @"d71", @"d80", @"d81", @"d82", @"g41", @"g64", @"g71", @"p64",
|
||||
@"x64", @"d1m", @"d2m", @"d4m"]];
|
||||
});
|
||||
|
||||
NSString *fileExtension = url.pathExtension.lowercaseString;
|
||||
if ([tape containsObject:fileExtension]) {
|
||||
return C64dtvImageTypeTape;
|
||||
} else if ([cart containsObject:fileExtension]) {
|
||||
return C64dtvImageTypeCartridge;
|
||||
} else if ([disk containsObject:fileExtension]) {
|
||||
return C64dtvImageTypeDisk;
|
||||
}
|
||||
|
||||
return C64dtvImageTypeUnknown;
|
||||
}
|
||||
|
||||
- (BOOL)attachImageAtURL:(NSURL *)url error:(NSError **)error {
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)autostartImageAtURL:(NSURL *)url error:(NSError **)error {
|
||||
int res = autostart_autodetect(url.fileSystemRepresentation, NULL, 0, AUTOSTART_MODE_RUN);
|
||||
return res == 0;
|
||||
}
|
||||
|
||||
#pragma mark - save / load state
|
||||
|
||||
typedef void (^trapBlock)(void);
|
||||
|
||||
static void trap_handler(uint16_t addr, void *success)
|
||||
{
|
||||
void (^handler)(void);
|
||||
handler = (__bridge trapBlock)(success);
|
||||
handler();
|
||||
}
|
||||
|
||||
- (void)executeTrap:(trapBlock)block {
|
||||
interrupt_maincpu_trigger_trap(trap_handler, (__bridge void *)block);
|
||||
maincpu_headless_mainloop(MACHINE_EVENT_TRAP);
|
||||
}
|
||||
|
||||
- (BOOL)loadStateFromFileAtPath:(NSString *)fileName error:(NSError **)error {
|
||||
__block int res = 0;
|
||||
[self executeTrap:^{
|
||||
res = machine_read_snapshot(fileName.UTF8String, 0);
|
||||
}];
|
||||
return res >= 0;
|
||||
}
|
||||
|
||||
- (BOOL)saveStateFromFileAtPath:(NSString *)fileName error:(NSError **)error {
|
||||
__block int res = 0;
|
||||
[self executeTrap:^{
|
||||
res = machine_write_snapshot(fileName.UTF8String, 0, 1, 0);
|
||||
}];
|
||||
|
||||
return res >= 0;
|
||||
}
|
||||
|
||||
#pragma mark - serialization
|
||||
|
||||
- (NSUInteger)stateSize {
|
||||
__block NSUInteger stateSize = 0;
|
||||
|
||||
[self executeTrap:^{
|
||||
int drive_type;
|
||||
resources_get_int("Drive8Type", &drive_type);
|
||||
int save_disks = (drive_type < 1550) ? 1 : 0;
|
||||
|
||||
snapshot_stream_t *snapshot_stream = snapshot_memory_write_fopen(NULL, 0);
|
||||
int res = machine_write_snapshot_to_stream(snapshot_stream, 0, save_disks, 0);
|
||||
if (res >= 0) {
|
||||
snapshot_fseek(snapshot_stream, 0, SEEK_END);
|
||||
stateSize = (NSUInteger)snapshot_ftell(snapshot_stream);
|
||||
}
|
||||
snapshot_fclose(snapshot_stream);
|
||||
}];
|
||||
|
||||
return stateSize;
|
||||
}
|
||||
|
||||
- (NSData *)serializeState {
|
||||
if (_stateSize == 0) {
|
||||
_stateSize = self.stateSize;
|
||||
}
|
||||
|
||||
__block void *buf = nil;
|
||||
__block NSUInteger stateSize = 0;
|
||||
__block int res = 0;
|
||||
|
||||
[self executeTrap:^{
|
||||
int drive_type;
|
||||
resources_get_int("Drive8Type", &drive_type);
|
||||
int save_disks = (drive_type < 1550) ? 1 : 0;
|
||||
|
||||
buf = malloc(_stateSize);
|
||||
snapshot_stream_t *snapshot_stream = snapshot_memory_write_fopen(buf, _stateSize);
|
||||
res = machine_write_snapshot_to_stream(snapshot_stream, 0, save_disks, 0);
|
||||
snapshot_fseek(snapshot_stream, 0, SEEK_END);
|
||||
stateSize = (NSUInteger)snapshot_ftell(snapshot_stream);
|
||||
snapshot_fclose(snapshot_stream);
|
||||
}];
|
||||
|
||||
NSData *data = [NSData dataWithBytesNoCopy:buf length:stateSize freeWhenDone:YES];
|
||||
if (res >= 0) {
|
||||
return data;
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (BOOL)deserializeState:(NSData *)data {
|
||||
__block int res = 0;
|
||||
|
||||
[self executeTrap:^{
|
||||
resources_set_int("WarpMode", 0);
|
||||
snapshot_stream_t *snapshot_stream = snapshot_memory_read_fopen(data.bytes, data.length);
|
||||
res = machine_read_snapshot_from_stream(snapshot_stream, 0);
|
||||
snapshot_fclose(snapshot_stream);
|
||||
}];
|
||||
|
||||
return res >= 0;
|
||||
}
|
||||
|
||||
#pragma mark - execution
|
||||
|
||||
extern unsigned long vsyncarch_ticks;
|
||||
|
||||
- (BOOL)execute {
|
||||
maincpu_headless_mainloop(MACHINE_EVENT_FRAME);
|
||||
vsyncarch_ticks += _ticksPerFrame;
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)resetMachineSoft {
|
||||
machine_trigger_reset(MACHINE_RESET_MODE_SOFT);
|
||||
}
|
||||
|
||||
- (void)resetMachineHard {
|
||||
machine_trigger_reset(MACHINE_RESET_MODE_HARD);
|
||||
}
|
||||
|
||||
- (void)setBuffer:(void *)buffer size:(NSSize)size {
|
||||
_buffer = buffer;
|
||||
_bufferSize = size;
|
||||
[self updateCanvasFromBuffer];
|
||||
}
|
||||
|
||||
#pragma mark - input
|
||||
|
||||
- (void)keyboardKeyDown:(int)keycode mod:(KeyboardMod)mod {
|
||||
keyboard_key_pressed(keycode, mod);
|
||||
}
|
||||
|
||||
- (void)keyboardKeyUp:(int)keycode mod:(KeyboardMod)mod {
|
||||
keyboard_key_released(keycode, mod);
|
||||
}
|
||||
|
||||
- (void)keyboardKeyClear {
|
||||
keyboard_key_clear();
|
||||
}
|
||||
|
||||
- (void)joystickOrValue:(uint8_t)value forPort:(unsigned int)port {
|
||||
joystick_set_value_or(port, value);
|
||||
}
|
||||
|
||||
- (void)joystickAndValue:(uint8_t)value forPort:(unsigned int)port {
|
||||
joystick_set_value_and(port, value);
|
||||
}
|
||||
|
||||
- (void)joystickClearValueForPort:(unsigned int)port {
|
||||
joystick_clear(port);
|
||||
}
|
||||
|
||||
- (void)joystickClearAll {
|
||||
joystick_clear_all();
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,8 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@protocol C64dtvDelegate <NSObject>
|
||||
|
||||
- (void)updateAudioBuffer:(int16_t const *)buffer samples:(NSInteger)samples;
|
||||
- (void)canvasWillResizeWidth:(NSUInteger)width height:(NSUInteger)height;
|
||||
|
||||
@end
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
#import "public/C64dtv.h"
|
||||
#import "public/api.h"
|
||||
#import "C64dtv_archdep.h"
|
||||
#include "vice.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include "util.h"
|
||||
#include "archdep.h"
|
||||
#include "lib.h"
|
||||
#include "log.h"
|
||||
|
||||
int console_mode = 0;
|
||||
int video_disabled_mode = 0;
|
||||
|
||||
|
||||
/** \brief Arch-dependent init
|
||||
*
|
||||
* \param[in] argc pointer to argument count
|
||||
* \param[in] argv argument vector
|
||||
*
|
||||
* \return 0
|
||||
*/
|
||||
int archdep_init(int *argc, char **argv)
|
||||
{
|
||||
(void)C64dtv.shared;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** \brief Architecture-dependent shutdown hanlder
|
||||
*/
|
||||
void archdep_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
char *archdep_user_config_path(void)
|
||||
{
|
||||
return (char *)NSHomeDirectory().UTF8String;
|
||||
}
|
||||
|
||||
const char *archdep_boot_path(void)
|
||||
{
|
||||
return lib_strdup(C64dtv.shared.bootPath.UTF8String);
|
||||
}
|
||||
|
||||
char *archdep_default_sysfile_pathlist(const char *emu_id)
|
||||
{
|
||||
const char *paths[17];
|
||||
int i = 0;
|
||||
|
||||
for (NSString *path in C64dtv.shared.sysfilePathList) {
|
||||
paths[i] = path.UTF8String;
|
||||
i++;
|
||||
}
|
||||
|
||||
paths[i] = NULL;
|
||||
return util_strjoin(paths, ARCHDEP_FINDPATH_SEPARATOR_STRING);
|
||||
}
|
||||
|
||||
#pragma mark stubs
|
||||
|
||||
char *archdep_default_autostart_disk_image_file_name(void)
|
||||
{
|
||||
const char* home = [NSHomeDirectory() cStringUsingEncoding:NSASCIIStringEncoding];
|
||||
return util_concat(home, "/autostart-vice.d64", NULL);
|
||||
}
|
||||
|
||||
char *archdep_default_fliplist_file_name(void)
|
||||
{
|
||||
return lib_strdup("");
|
||||
}
|
||||
|
||||
int archdep_default_logger(const char *level_string, const char *txt)
|
||||
{
|
||||
NSLog(@"Vice-Core: %s - %s" , level_string, txt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *archdep_default_resource_file_name(void)
|
||||
{
|
||||
return lib_strdup("");
|
||||
}
|
||||
|
||||
char *archdep_default_rtc_file_name(void)
|
||||
{
|
||||
return lib_strdup("");
|
||||
}
|
||||
|
||||
char *archdep_default_save_resource_file_name(void)
|
||||
{
|
||||
return lib_strdup("");
|
||||
}
|
||||
|
||||
int archdep_expand_path(char **return_path, const char *orig_name)
|
||||
{
|
||||
*return_path = lib_strdup(orig_name);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "vice.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#import <public/api.h>
|
||||
#import "C64dtv_archdep.h"
|
||||
|
||||
#include "sound.h"
|
||||
#import "C64dtv+Private.h"
|
||||
|
||||
static int headless_init(const char *param, int *speed, int *fragsize, int *fragnr, int *channels)
|
||||
{
|
||||
[C64dtv.shared initSoundSpeed:speed fragSize:fragsize fragNumber:fragnr channels:channels];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int headless_write(int16_t *pbuf, size_t nr)
|
||||
{
|
||||
[C64dtv.shared.delegate updateAudioBuffer:pbuf samples:nr];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static sound_device_t headless_device =
|
||||
{
|
||||
.name = "headless",
|
||||
.init = headless_init,
|
||||
.write = headless_write,
|
||||
.need_attenuation = 0,
|
||||
.max_channels = 2,
|
||||
};
|
||||
|
||||
int sound_init_headless_device(void)
|
||||
{
|
||||
return sound_register_device(&headless_device);
|
||||
}
|
||||
+196
@@ -0,0 +1,196 @@
|
||||
/**
|
||||
* \file video.c
|
||||
* \brief Headless UI video stuff
|
||||
*
|
||||
* \author Marco van den Heuvel <blackystardust68@yahoo.com>
|
||||
* \author Michael C. Martin <mcmartin@gmail.com>
|
||||
*/
|
||||
|
||||
/* This file is part of VICE, the Versatile Commodore Emulator.
|
||||
* See README for copyright notice.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* 02111-1307 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "vice.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#import <oeheadless/public/api.h>
|
||||
|
||||
#include "cmdline.h"
|
||||
#include "machine.h"
|
||||
#include "resources.h"
|
||||
#include "videoarch.h"
|
||||
#include "video.h"
|
||||
#import "C64dtv+Private.h"
|
||||
#include "palette.h"
|
||||
|
||||
|
||||
/** \brief Command line options related to generic video output
|
||||
*/
|
||||
static const cmdline_option_t cmdline_options[] =
|
||||
{
|
||||
CMDLINE_LIST_END
|
||||
};
|
||||
|
||||
|
||||
/** \brief Integer/boolean resources related to video output
|
||||
*/
|
||||
static const resource_int_t resources_int[] =
|
||||
{
|
||||
RESOURCE_INT_LIST_END
|
||||
};
|
||||
|
||||
/** \brief Arch-specific initialization for a video canvas
|
||||
* \param[inout] canvas The canvas being initialized
|
||||
* \sa video_canvas_create
|
||||
*/
|
||||
void video_arch_canvas_init(struct video_canvas_s *canvas)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/** \brief Initialize command line options for generic video resouces
|
||||
*
|
||||
* \return 0 on success, < 0 on failure
|
||||
*/
|
||||
int video_arch_cmdline_options_init(void)
|
||||
{
|
||||
return cmdline_register_options(cmdline_options);
|
||||
}
|
||||
|
||||
|
||||
/** \brief Initialize video-related resources
|
||||
*
|
||||
* \return 0 on success, < on failure
|
||||
*/
|
||||
int video_arch_resources_init(void)
|
||||
{
|
||||
return resources_register_int(resources_int);
|
||||
}
|
||||
|
||||
/** \brief Clean up any memory held by arch-specific video resources. */
|
||||
void video_arch_resources_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
/** \brief Query whether a canvas is resizable.
|
||||
* \param canvas The canvas to query
|
||||
* \return TRUE if the canvas can be resized.
|
||||
*/
|
||||
char video_canvas_can_resize(video_canvas_t *canvas)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** \brief Create a new video_canvas_s.
|
||||
* \param[inout] canvas A freshly allocated canvas object.
|
||||
* \param[in] width Pointer to a width value. May be NULL if canvas
|
||||
* size is not yet known.
|
||||
* \param[in] height Pointer to a height value. May be NULL if canvas
|
||||
* size is not yet known.
|
||||
* \param mapped Unused.
|
||||
* \return The completely initialized canvas. The window that holds
|
||||
* it will be visible in the UI at time of return.
|
||||
*/
|
||||
video_canvas_t *video_canvas_create(video_canvas_t *canvas,
|
||||
unsigned int *width, unsigned int *height,
|
||||
int mapped)
|
||||
{
|
||||
[C64dtv.shared createCanvas:canvas width:width height:height];
|
||||
return canvas;
|
||||
}
|
||||
|
||||
/** \brief Free a previously created video canvas and all its
|
||||
* components.
|
||||
* \param[in] canvas The canvas to destroy.
|
||||
*/
|
||||
void video_canvas_destroy(struct video_canvas_s *canvas)
|
||||
{
|
||||
}
|
||||
|
||||
/** \brief Update the display on a video canvas to reflect the machine
|
||||
* state.
|
||||
* \param canvas The canvas to update.
|
||||
* \param xs A parameter to forward to video_canvas_render()
|
||||
* \param ys A parameter to forward to video_canvas_render()
|
||||
* \param xi X coordinate of the leftmost pixel to update
|
||||
* \param yi Y coordinate of the topmost pixel to update
|
||||
* \param w Width of the rectangle to update
|
||||
* \param h Height of the rectangle to update
|
||||
*/
|
||||
void video_canvas_refresh(struct video_canvas_s *canvas,
|
||||
unsigned int xs, unsigned int ys,
|
||||
unsigned int xi, unsigned int yi,
|
||||
unsigned int w, unsigned int h)
|
||||
{
|
||||
if (canvas->screen.pixels == NULL) { return; }
|
||||
|
||||
video_canvas_render(canvas, (uint8_t *)canvas->screen.pixels, w, h, xs, ys, xi, yi, canvas->screen.pitch, canvas->screen.bpp);
|
||||
}
|
||||
|
||||
/** \brief Update canvas size to match the draw buffer size requested
|
||||
* by the emulation core.
|
||||
* \param canvas The video canvas to update.
|
||||
* \param resize_canvas Ignored - the canvas will always resize.
|
||||
*/
|
||||
|
||||
void video_canvas_resize(struct video_canvas_s *canvas, char resize_canvas)
|
||||
{
|
||||
if (!(canvas && canvas->draw_buffer && canvas->videoconfig)) {
|
||||
return;
|
||||
}
|
||||
[C64dtv.shared canvasDidResize:canvas];
|
||||
}
|
||||
|
||||
/** \brief Assign a palette to the canvas.
|
||||
* \param canvas The canvas to update the palette
|
||||
* \param palette The new palette to assign
|
||||
* \return Zero on success, nonzero on failure
|
||||
*/
|
||||
int video_canvas_set_palette(struct video_canvas_s *canvas,
|
||||
struct palette_s *palette)
|
||||
{
|
||||
canvas->palette = palette;
|
||||
|
||||
for (int i = 0; i < palette->num_entries; i++) {
|
||||
unsigned int col = palette->entries[i].red<<16 | palette->entries[i].green<<8 | palette->entries[i].blue;
|
||||
video_render_setphysicalcolor(canvas->videoconfig, i, col, 32);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
video_render_setrawrgb(i, i, i, i);
|
||||
}
|
||||
|
||||
video_render_initraw(canvas->videoconfig);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** \brief Perform any frontend-specific initialization.
|
||||
* \return 0 on success, nonzero on failure
|
||||
*/
|
||||
int video_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** \brief Perform any frontend-specific uninitialization. */
|
||||
void video_shutdown(void)
|
||||
{
|
||||
|
||||
}
|
||||
+11
@@ -57,6 +57,13 @@ set(OEHEADLESS_C64_SOURCES
|
||||
C64_video.m
|
||||
)
|
||||
|
||||
set(OEHEADLESS_C64DTV_SOURCES
|
||||
C64dtv.m
|
||||
C64dtv_archdep.m
|
||||
C64dtv_soundheadless.m
|
||||
C64dtv_video.m
|
||||
)
|
||||
|
||||
set(OEHEADLESS_C128_SOURCES
|
||||
C128.m
|
||||
C128_archdep.m
|
||||
@@ -103,6 +110,10 @@ target_include_directories(oeheadless_vic20 PRIVATE ${OEHEADLESS_INCLUDES})
|
||||
add_library(oeheadless_c64 STATIC ${OEHEADLESS_C64_SOURCES})
|
||||
target_include_directories(oeheadless_c64 PRIVATE ${OEHEADLESS_INCLUDES})
|
||||
|
||||
add_library(oeheadless_c64dtv STATIC ${OEHEADLESS_C64DTV_SOURCES})
|
||||
target_include_directories(oeheadless_c64dtv PRIVATE ${OEHEADLESS_INCLUDES})
|
||||
|
||||
|
||||
add_library(oeheadless_c128 STATIC ${OEHEADLESS_C128_SOURCES})
|
||||
target_include_directories(oeheadless_c128 PRIVATE ${OEHEADLESS_INCLUDES})
|
||||
|
||||
|
||||
+19
@@ -23,6 +23,25 @@ OE_STATIC_ASSERT(Vic20ModelPAL == (Vic20Model)VIC20MODEL_VIC20_PAL);
|
||||
OE_STATIC_ASSERT(Vic20ModelNTSC == (Vic20Model)VIC20MODEL_VIC20_NTSC);
|
||||
OE_STATIC_ASSERT(Vic20ModelSuperVIC == (Vic20Model)VIC20MODEL_VIC21);
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64: NSObject
|
||||
@end
|
||||
@implementation C64 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C128: NSObject
|
||||
@end
|
||||
@implementation C128 {}
|
||||
@end
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64dtv: NSObject
|
||||
@end
|
||||
@implementation C64dtv {}
|
||||
@end
|
||||
|
||||
|
||||
@implementation Vic20 {
|
||||
BOOL _initialized;
|
||||
video_canvas_t *_canvas;
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "api.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol C64dtvDelegate;
|
||||
|
||||
typedef NS_ENUM(NSUInteger, C64dtvImageType)
|
||||
{
|
||||
C64dtvImageTypeUnknown,
|
||||
C64dtvImageTypeDisk,
|
||||
C64dtvImageTypeTape,
|
||||
C64dtvImageTypeCartridge,
|
||||
C64dtvImageTypePRG,
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSUInteger, C64dtvModel)
|
||||
{
|
||||
DTVModelV2PAL = 0,
|
||||
DTVModelV2NTSC = 1,
|
||||
DTVModelV3PAL = 2,
|
||||
DTVModelV3NTSC = 3,
|
||||
DTVModelHummerNTSC = 4
|
||||
|
||||
};
|
||||
|
||||
OE_EXPORTED_CLASS
|
||||
@interface C64dtv: NSObject
|
||||
|
||||
@property (class, nonatomic, readonly) C64dtv *shared;
|
||||
|
||||
@property (nonatomic, assign, nullable) id<C64dtvDelegate> delegate;
|
||||
- (void)initializeWithBootPath:(NSString *)bootPath systemPathList:(NSArray<NSString *>*)pathList;
|
||||
|
||||
#pragma mark - configuration
|
||||
|
||||
@property (nonatomic) C64dtvModel model;
|
||||
@property (nonatomic, readonly) NSString *bootPath;
|
||||
@property (nonatomic, readonly) NSArray<NSString *> *sysfilePathList;
|
||||
|
||||
#pragma mark - video
|
||||
|
||||
@property (nonatomic, readonly) double videoFrequency;
|
||||
@property (nonatomic, readonly) NSRect videoFrame;
|
||||
|
||||
#pragma mark - audio
|
||||
|
||||
@property (nonatomic, readonly) int audioFrequency;
|
||||
@property (nonatomic, readonly) int audioChannels;
|
||||
|
||||
#pragma mark - image management
|
||||
|
||||
- (C64dtvImageType)imageTypeAtURL:(NSURL *)url;
|
||||
- (BOOL)attachImageAtURL:(NSURL *)url error:(NSError **)error;
|
||||
- (BOOL)autostartImageAtURL:(NSURL *)url error:(NSError **)error;
|
||||
|
||||
#pragma mark - save / load save state
|
||||
|
||||
- (BOOL)loadStateFromFileAtPath:(NSString *)fileName error:(NSError **)error;
|
||||
- (BOOL)saveStateFromFileAtPath:(NSString *)fileName error:(NSError **)error;
|
||||
|
||||
#pragma mark - execution
|
||||
|
||||
- (BOOL)execute;
|
||||
- (void)resetMachineSoft;
|
||||
- (void)resetMachineHard;
|
||||
- (void)setBuffer:(void *)buffer size:(NSSize)size;
|
||||
|
||||
#pragma mark - input
|
||||
|
||||
- (void)keyboardKeyDown:(int)keycode mod:(KeyboardMod)mod;
|
||||
- (void)keyboardKeyUp:(int)keycode mod:(KeyboardMod)mod;
|
||||
- (void)keyboardKeyClear;
|
||||
|
||||
- (void)joystickOrValue:(uint8_t)value forPort:(unsigned int)port;
|
||||
- (void)joystickAndValue:(uint8_t)value forPort:(unsigned int)port;
|
||||
- (void)joystickClearValueForPort:(unsigned int)port;
|
||||
- (void)joystickClearAll;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -11,6 +11,21 @@ target_link_libraries(testc64 oex64sc)
|
||||
|
||||
target_compile_definitions(testc64 PRIVATE -DSOURCE_ROOT="${CMAKE_SOURCE_DIR}")
|
||||
|
||||
add_executable(testc64dtv)
|
||||
target_sources(testc64dtv PUBLIC
|
||||
c64dtvmain.m
|
||||
)
|
||||
target_include_directories(testc64dtv PRIVATE
|
||||
../public
|
||||
../
|
||||
../../..
|
||||
)
|
||||
target_link_libraries(testc64dtv oex64dtv)
|
||||
|
||||
target_compile_definitions(testc64dtv PRIVATE -DSOURCE_ROOT="${CMAKE_SOURCE_DIR}")
|
||||
|
||||
|
||||
|
||||
add_executable(testvic20)
|
||||
target_sources(testvic20 PUBLIC
|
||||
vic20main.m
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
#import "api.h"
|
||||
#import "C64dtv_archdep.h"
|
||||
#import "C64dtv.h"
|
||||
#import "resources.h"
|
||||
|
||||
int callback(int i, resource_ram_t *item, void *context)
|
||||
{
|
||||
printf("%-30s: ", item->name);
|
||||
switch (item->type) {
|
||||
case RES_STRING: {
|
||||
char const *v = *(char const **)item->value_ptr;
|
||||
printf("%s", (v == NULL || strlen(v) == 0) ? "[EMPTY]" : v);
|
||||
break;
|
||||
}
|
||||
|
||||
case RES_INTEGER:
|
||||
printf("%d", *(int *)item->value_ptr);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("NONE");
|
||||
}
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@interface Delegate: NSObject<C64dtvDelegate>
|
||||
@property (nonatomic, readwrite) int written;
|
||||
@end
|
||||
|
||||
@implementation Delegate
|
||||
|
||||
- (void)canvasWillResizeWidth:(NSUInteger)width height:(NSUInteger)height {
|
||||
|
||||
}
|
||||
|
||||
|
||||
-(void)updateAudioBuffer:(int16_t const *)buffer samples:(NSInteger)samples {
|
||||
_written += samples;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
C64dtv *c64 = C64dtv.shared;
|
||||
NSString *bootPath = @SOURCE_ROOT;
|
||||
NSArray<NSString *> *paths = @[
|
||||
[NSString pathWithComponents:@[bootPath, @"data", @"C64"]],
|
||||
[NSString pathWithComponents:@[bootPath, @"data", @"DRIVES"]],
|
||||
];
|
||||
Delegate *delegate = [Delegate new];
|
||||
c64.delegate = delegate;
|
||||
[c64 initializeWithBootPath:bootPath systemPathList:paths];
|
||||
|
||||
c64.model = DTVModelV2PAL;
|
||||
printf("frequency %f\n", c64.videoFrequency);
|
||||
c64.model = DTVModelV2NTSC;
|
||||
printf("frequency %f\n", c64.videoFrequency);
|
||||
c64.model = DTVModelV3PAL;
|
||||
printf("frequency %f\n", c64.videoFrequency);
|
||||
c64.model = DTVModelV3NTSC;
|
||||
printf("frequency %f\n", c64.videoFrequency);
|
||||
c64.model = DTVModelHummerNTSC;
|
||||
printf("frequency %f\n", c64.videoFrequency);
|
||||
|
||||
delegate.written = 0;
|
||||
int frames = 0;
|
||||
for (int j=0; j<10000; j++) {
|
||||
[c64 execute];
|
||||
frames+=1;
|
||||
if (frames >= c64.videoFrequency) {
|
||||
frames = 0;
|
||||
printf("frames=%03d, written=%d\n", j, delegate.written);
|
||||
delegate.written = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// resource_enumerate(&callback, nil);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Vendored
+54
-1
@@ -23,6 +23,54 @@ set(C64_INCLUDES
|
||||
${CMAKE_SOURCE_DIR}/src/hvsc
|
||||
)
|
||||
|
||||
set (C64C64DTV_SOURCES
|
||||
c64bus.c
|
||||
c64cart.h
|
||||
c64drive.c
|
||||
c64fastiec.c
|
||||
c64fastiec.h
|
||||
c64keyboard.c
|
||||
c64keyboard.h
|
||||
c64parallel.c
|
||||
c64parallel.h
|
||||
c64rom.c
|
||||
c64rom.h
|
||||
c64romset.c
|
||||
c64rsuser.c
|
||||
c64rsuser.h
|
||||
c64video.c
|
||||
patchrom.c
|
||||
patchrom.h
|
||||
)
|
||||
set(C64_C128_SOURCES
|
||||
c64bus.c
|
||||
c64cart.h
|
||||
c64cia.h
|
||||
c64cia2.c
|
||||
c64datasette.c
|
||||
c64export.c
|
||||
c64gluelogic.c
|
||||
c64gluelogic.h
|
||||
c64iec.c
|
||||
c64iec.h
|
||||
c64io.c
|
||||
c64keyboard.c
|
||||
c64keyboard.h
|
||||
c64meminit.c
|
||||
c64meminit.h
|
||||
c64memrom.c
|
||||
c64memrom.h
|
||||
c64printer.c
|
||||
c64pla.c
|
||||
c64pla.h
|
||||
c64parallel.c
|
||||
c64parallel.h
|
||||
c64rsuser.c
|
||||
c64rsuser.h
|
||||
c64sound.c
|
||||
patchrom.c
|
||||
patchrom.h
|
||||
)
|
||||
set(C64_SOURCES
|
||||
c64-cmdline-options.c
|
||||
c64-cmdline-options.h
|
||||
@@ -85,12 +133,17 @@ set(C64_SOURCES
|
||||
plus60k.c
|
||||
plus60k.h
|
||||
)
|
||||
|
||||
set(C64SC_SOURCES
|
||||
c64cpusc.c
|
||||
)
|
||||
add_library(c64base STATIC ${C64_SOURCES})
|
||||
target_include_directories(c64base PRIVATE ${C64_INCLUDES})
|
||||
|
||||
add_library(c64c64dtv STATIC ${C64C64DTV_SOURCES})
|
||||
target_include_directories(c64c64dtv PRIVATE ${C64_INCLUDES})
|
||||
|
||||
add_library(c64c128 STATIC ${C64_C128_SOURCES})
|
||||
target_include_directories(c64c128 PRIVATE ${C64_INCLUDES})
|
||||
|
||||
add_library(c64 STATIC ${C64SC_SOURCES})
|
||||
target_include_directories(c64 PRIVATE ${C64_INCLUDES})
|
||||
|
||||
Vendored
+63
@@ -0,0 +1,63 @@
|
||||
set(C64DTV_INCLUDES
|
||||
${ARCH_INCLUDES}
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/c64
|
||||
${CMAKE_SOURCE_DIR}/src/c64/cart
|
||||
${CMAKE_SOURCE_DIR}/src/drive
|
||||
${CMAKE_SOURCE_DIR}/src/raster
|
||||
${CMAKE_SOURCE_DIR}/src/sid
|
||||
${CMAKE_SOURCE_DIR}/src/tape
|
||||
${CMAKE_SOURCE_DIR}/src/userport
|
||||
${CMAKE_SOURCE_DIR}/src/vicii
|
||||
${CMAKE_SOURCE_DIR}/src/lib/p64
|
||||
${CMAKE_SOURCE_DIR}/src/video
|
||||
${CMAKE_SOURCE_DIR}/src/joyport
|
||||
${CMAKE_SOURCE_DIR}/src/samplerdrv
|
||||
${CMAKE_SOURCE_DIR}/src/tapeport
|
||||
${CMAKE_SOURCE_DIR}/src/rs232drv
|
||||
)
|
||||
|
||||
set(C64DTV_SOURCES
|
||||
c64dtvcart.c
|
||||
c64dtvmemsnapshot.h
|
||||
c64dtvmemsnapshot.c
|
||||
c64dtvmem.h
|
||||
c64dtvmem.c
|
||||
c64dtvmemrom.c
|
||||
c64dtvblitter.c
|
||||
c64dtvblitter.h
|
||||
c64dtvcpu.c
|
||||
c64dtvcpu.h
|
||||
c64dtvdma.c
|
||||
c64dtvdma.h
|
||||
c64dtvflash.c
|
||||
c64dtvflash.h
|
||||
c64dtv-cmdline-options.c
|
||||
c64dtv-cmdline-options.h
|
||||
c64dtv-resources.c
|
||||
c64dtv-resources.h
|
||||
c64dtv-snapshot.c
|
||||
c64dtv-snapshot.h
|
||||
c64dtv.c
|
||||
c64dtv.h
|
||||
c64dtvcia1.c
|
||||
c64dtvcia2.c
|
||||
c64dtvembedded.c
|
||||
c64dtviec.c
|
||||
c64dtvmeminit.c
|
||||
c64dtvmeminit.h
|
||||
c64dtvmodel.c
|
||||
c64dtvmodel.h
|
||||
c64dtvpla.c
|
||||
c64dtvprinter.c
|
||||
c64dtvsound.c
|
||||
debugcart.c
|
||||
debugcart.h
|
||||
flash-trap.c
|
||||
flash-trap.h
|
||||
hummeradc.c
|
||||
hummeradc.h
|
||||
)
|
||||
|
||||
add_library(c64dtv STATIC ${C64DTV_SOURCES})
|
||||
target_include_directories(c64dtv PRIVATE ${C64DTV_INCLUDES})
|
||||
Vendored
+2
-2
@@ -448,7 +448,7 @@ static uint8_t flag_n = 0;
|
||||
static int8_t flag_z = 0;
|
||||
|
||||
#ifndef NEED_REG_PC
|
||||
static unsigned int reg_pc;
|
||||
static unsigned int reg_pc = ctx->reg_pc;
|
||||
#endif
|
||||
|
||||
static uint8_t *bank_base = NULL;
|
||||
@@ -484,7 +484,7 @@ void maincpu_headless_mainloop(machine_event_flags event_mask)
|
||||
{
|
||||
|
||||
*machine_event = MACHINE_EVENT_CLEAR;
|
||||
|
||||
|
||||
do {
|
||||
#define CLK maincpu_clk
|
||||
#define RMW_FLAG maincpu_rmw_flag
|
||||
|
||||
+10
-3
@@ -1,4 +1,4 @@
|
||||
set(TAPEPORT_INCLUDES
|
||||
set(TAPEPORT_INCLUDES
|
||||
${ARCH_INCLUDES}
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
@@ -6,7 +6,7 @@ set(TAPEPORT_INCLUDES
|
||||
${CMAKE_SOURCE_DIR}/src/diag
|
||||
)
|
||||
|
||||
set(TAPEPORT_SOURCES
|
||||
set(TAPEPORTDTV_SOURCES
|
||||
cp-clockf83.c
|
||||
cp-clockf83.h
|
||||
dtl-basic-dongle.c
|
||||
@@ -20,10 +20,17 @@ set(TAPEPORT_SOURCES
|
||||
tapecart-loader.h
|
||||
tapelog.c
|
||||
tapelog.h
|
||||
tapeport.c
|
||||
tapeport.h
|
||||
)
|
||||
|
||||
set(TAPEPORT_SOURCES
|
||||
${TAPEPORTDTV_SOURCES}
|
||||
tapeport.c
|
||||
)
|
||||
|
||||
add_library(tapeportdtv STATIC ${TAPEPORTDTV_SOURCES})
|
||||
target_include_directories(tapeportdtv PRIVATE ${TAPEPORT_INCLUDES})
|
||||
|
||||
add_library(tapeport STATIC ${TAPEPORT_SOURCES})
|
||||
target_include_directories(tapeport PRIVATE ${TAPEPORT_INCLUDES})
|
||||
|
||||
|
||||
Vendored
+32
@@ -10,6 +10,35 @@ set(VICII_INCLUDES
|
||||
${CMAKE_SOURCE_DIR}/src/c64dtv
|
||||
)
|
||||
|
||||
set (VICIIDTV_SOURCES
|
||||
vicii-badline.c
|
||||
vicii-badline.h
|
||||
vicii-cmdline-options.c
|
||||
vicii-cmdline-options.h
|
||||
viciidtv-color.c
|
||||
vicii-color.h
|
||||
viciidtv-draw.c
|
||||
vicii-draw.h
|
||||
vicii-fetch.c
|
||||
vicii-fetch.h
|
||||
vicii-irq.c
|
||||
vicii-irq.h
|
||||
vicii-mem.c
|
||||
vicii-mem.h
|
||||
vicii-phi1.c
|
||||
vicii-phi1.h
|
||||
vicii-resources.c
|
||||
vicii-resources.h
|
||||
viciidtv-snapshot.c
|
||||
vicii-snapshot.h
|
||||
vicii-sprites.c
|
||||
vicii-sprites.h
|
||||
vicii-timing.c
|
||||
vicii-timing.h
|
||||
vicii.c
|
||||
viciitypes.h
|
||||
)
|
||||
|
||||
set(VICII_SOURCES
|
||||
vicii-badline.c
|
||||
vicii-badline.h
|
||||
@@ -46,3 +75,6 @@ set(VICII_SOURCES
|
||||
|
||||
add_library(vicii STATIC ${VICII_SOURCES})
|
||||
target_include_directories(vicii PRIVATE ${VICII_INCLUDES})
|
||||
|
||||
add_library(viciidtv STATIC ${VICIIDTV_SOURCES})
|
||||
target_include_directories(viciidtv PRIVATE ${VICII_INCLUDES})
|
||||
|
||||
Reference in New Issue
Block a user