From 1140676a8caf9f720d6e20156d8ae9cc5716796c Mon Sep 17 00:00:00 2001 From: nigel <> Date: Wed, 26 Mar 2003 23:04:46 +0000 Subject: [PATCH] Fixes for safe Restart()ing, some tidying up --- BasiliskII/src/MacOSX/Emulator.mm | 47 ++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/BasiliskII/src/MacOSX/Emulator.mm b/BasiliskII/src/MacOSX/Emulator.mm index fb4b6bb2..b5a1b4a1 100644 --- a/BasiliskII/src/MacOSX/Emulator.mm +++ b/BasiliskII/src/MacOSX/Emulator.mm @@ -94,11 +94,8 @@ //[win setHasShadow: NO]; // This causes view & window to now be drawn correctly [win useOptimizedDrawing: YES]; -// [win center]; [win makeKeyAndOrderFront:self]; -// [self resizeWinToWidth:x Height:y]; - if ( redrawDelay ) [speed setFloatValue: 1.0 / redrawDelay]; else @@ -147,6 +144,30 @@ [self Resume: self]; } +#ifdef NIGEL +- (IBAction) EjectCD: (id)sender; +{ + NSString *path; + const char *cdrom = PrefsFindString("cdrom"); + + if ( cdrom ) + { + #include + #define KERNEL + #include + + struct statfs buf; + if ( fsstat(path, &buf) < 0 ) + return; + + path = [NSString stringWithCString: cdrom]; + + [[NSWorkspace sharedWorkspace] unmountAndEjectDeviceAtPath: path]; +// [path release]; + } +} +#endif + - (IBAction) Interrupt: (id)sender; { WarningSheet (@"Interrupt action not yet supported", win); @@ -177,18 +198,26 @@ NSLog (@"%s - uae_cpu reset not yet supported, will try to fake it", __PRETTY_FUNCTION__); -// [screen blacken]; - [screen setNeedsDisplay: YES]; + [screen clear]; + [screen display]; [emul terminate]; QuitEmuNoExit(); + + // OK. We have killed & cleaned up. Now, start afresh: + #include + int argc = 0; + char **argv; + + PrefsInit(argc, argv); + SysInit(); + emul = [NNThread new]; [emul perform:@selector(emulThread) of:self]; [emul start]; if ( display_type != DISPLAY_SCREEN ) [redraw resume]; - uaeCreated = YES; } } @@ -351,8 +380,6 @@ uint8 lastXPRAM[XPRAM_SIZE]; // Copy of PRAM [redraw invalidate]; [redraw release]; redraw = nil; [RTC invalidate]; [RTC release]; RTC = nil; [xPRAM invalidate]; [xPRAM release]; xPRAM = nil; - if ( uaeCreated ) - QuitEmuNoExit(); } - (void) emulThread @@ -395,13 +422,13 @@ uint8 lastXPRAM[XPRAM_SIZE]; // Copy of PRAM { if ( display_type == DISPLAY_SCREEN ) { - NSLog(@"Why was redrawScreen() called?"); + NSLog(@"We are in fullscreen mode - why was redrawScreen() called?"); return; } [barberPole animate:self]; // wobble the pole [screen setNeedsDisplay: YES]; // redisplay next time through runLoop // Or, use a direct method. e.g. - // [screen cgDrawInto: ...]; + // [screen display] or [screen cgDrawInto: ...]; } #include // For #define INTFLAG_60HZ