From 0aa60988463a96d697a6a66c7a96f42110badcfe Mon Sep 17 00:00:00 2001 From: tudnai Date: Thu, 4 Jun 2020 11:37:35 -0700 Subject: [PATCH] - Default ROM is //e, instead of Enhanced version - WOZ file load error handling - Only place filename to recents when load was successful --- .../xcdebugger/Expressions.xcexplist | 69 ++-- A2Mac/AppDelegate.swift | 12 +- A2Mac/Base.lproj/Main.storyboard | 321 +++++++++++++++++- A2Mac/ViewController.swift | 55 ++- src/dev/disk/woz.c | 11 +- src/dev/disk/woz.h | 8 +- 6 files changed, 413 insertions(+), 63 deletions(-) diff --git a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist index 07e8c6a..ce9a148 100644 --- a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist +++ b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist @@ -14,13 +14,10 @@ + contextName = "specialized closure #1 in ViewController.Update():ViewController.swift"> - - + value = "self.HiRes.frame"> @@ -67,7 +64,7 @@ contextName = "closure #1 in ViewController.Update():ViewController.swift"> + value = "txtArr"> @@ -76,10 +73,10 @@ value = "txt"> + value = "MEMcfg.txt_page_2"> + value = "MEMcfg.is_80STORE"> @@ -131,6 +128,9 @@ + + + + - - + value = "normalized_time >= pdl_value[pdl] ? 255 : 0"> @@ -276,7 +276,7 @@ value = "1 * 512 * (1 - ( 3300 / 3300.0 ))"> + value = "normalized_time"> @@ -293,13 +293,13 @@ value = "textLines"> + value = "hires.layer"> + value = "hires.frame"> @@ -315,7 +315,7 @@ contextName = "LoRes.Update():LoRes.swift"> + value = "blockChanged[ screenIdx ]"> @@ -324,7 +324,7 @@ value = "UInt8(block & 4)"> + value = "UInt8( (block >> 4) & 0x0F )"> @@ -343,10 +343,10 @@ contextName = "set_flags_NZC:common.h"> + value = "(unsigned)test "> + value = "(unsigned)0xFF"> @@ -488,10 +488,10 @@ contextName = "HiRes.draw(_:):HiRes.swift"> + value = "linAddr"> + value = "ctx?.height"> @@ -514,14 +514,14 @@ + + - - + value = "ctx?.data"> @@ -537,13 +537,13 @@ contextName = "HiRes.compute():HiRes.swift"> + value = "computePipelineState.maxTotalThreadsPerThreadgroup"> + value = "UnsafeRawBufferPointer(result)"> @@ -569,10 +569,10 @@ value = "mouseLocation"> + value = "clkfrm"> + value = "txtArr"> @@ -633,10 +633,10 @@ value = "Apple2_64K_AUX + 0xC600"> + value = "(void*)rom"> + value = "Apple2_64K_RAM + 0xC600"> @@ -653,10 +653,13 @@ contextName = "BNE:6502_instr_branch.h"> + contextName = "BRA:6502_instr_branch.h"> + value = ""> + + diff --git a/A2Mac/AppDelegate.swift b/A2Mac/AppDelegate.swift index 8555d16..09a832f 100644 --- a/A2Mac/AppDelegate.swift +++ b/A2Mac/AppDelegate.swift @@ -22,7 +22,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { @IBAction func Disk1_Selected(_ sender: NSMenuItem) { if let menuIdentifier = sender.identifier { - woz_loadFile( Bundle.main.resourcePath! + "/" + menuIdentifier.rawValue + ".woz" ) + let woz_err = woz_loadFile( Bundle.main.resourcePath! + "/" + menuIdentifier.rawValue + ".woz" ) + ViewController.current?.chk_woz_load(err: woz_err) } } @@ -35,16 +36,15 @@ class AppDelegate: NSObject, NSApplicationDelegate { } @IBAction func selectAnImageFromFile(sender: AnyObject) { - if ( ViewController.current != nil ) { - ViewController.current?.perform(#selector(ViewController.openDiskImage)) - } + ViewController.current?.openDiskImage() } func application(_ sender: NSApplication, openFile filename: String) -> Bool { - woz_loadFile( filename ) + let woz_err = woz_loadFile( filename ) - return true + return woz_err == 0; } + } diff --git a/A2Mac/Base.lproj/Main.storyboard b/A2Mac/Base.lproj/Main.storyboard index e94d324..041b736 100644 --- a/A2Mac/Base.lproj/Main.storyboard +++ b/A2Mac/Base.lproj/Main.storyboard @@ -752,41 +752,338 @@ - + - + - + - + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/A2Mac/ViewController.swift b/A2Mac/ViewController.swift index 1d9ae93..0c6c83f 100644 --- a/A2Mac/ViewController.swift +++ b/A2Mac/ViewController.swift @@ -98,13 +98,49 @@ class ViewController: NSViewController { static var charConvTbl = charConvTblFlashOn - static var romFileName = "Apple2e_Enhanced.rom"; + static var romFileName = "Apple2e.rom"; static let textLineOfs : [Int] = [ 0x000, 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x028, 0x0A8, 0x128, 0x1A8, 0x228, 0x2A8, 0x328, 0x3A8, 0x050, 0x0D0, 0x150, 0x1D0, 0x250, 0x2D0, 0x350, 0x3D0 ] + + func dialogOK(title: String, text: String) { + let alert = NSAlert() + alert.messageText = title + alert.informativeText = text + alert.alertStyle = .warning + alert.addButton(withTitle: "OK") + alert.runModal() + // return alert.runModal() == .alertFirstButtonReturn + } + + + @objc func chk_woz_load(err : Int32) { + switch (err) { + case WOZ_ERR_OK: + break + + case WOZ_ERR_FILE_NOT_FOUND: + dialogOK(title: "Error Loading Disk Image", text: "File Not Found!") + break + + case WOZ_ERR_NOT_WOZ_FILE: + dialogOK(title: "Error Loading Disk Image", text: "File is not a WOZ image!") + break + + case WOZ_ERR_BAD_CHUNK_HDR, WOZ_ERR_BAD_DATA: + dialogOK(title: "Error Loading Disk Image", text: "Malformed WOZ image!") + break + + default: + dialogOK(title: "Error Loading Disk Image", text: "Unknown Error! (\(err))" ) + break + } + } + + var workItem : DispatchWorkItem? = nil; @IBAction func Power(_ sender: Any) { @@ -734,7 +770,7 @@ class ViewController: NSViewController { let upd = RepeatingTimer(timeInterval: 1/Double(fps)) - static var current : NSViewController? = nil + static var current : ViewController? = nil override func viewDidLoad() { super.viewDidLoad() @@ -743,8 +779,9 @@ class ViewController: NSViewController { hires.clearScreen(); - woz_loadFile( Bundle.main.resourcePath! + "/Apple DOS 3.3 January 1983.woz" ) - + let woz_err = woz_loadFile( Bundle.main.resourcePath! + "/Apple DOS 3.3 January 1983.woz" ) + chk_woz_load(err: woz_err) + //view.frame = CGRect(origin: CGPoint(), size: NSScreen.main!.visibleFrame.size) // createHiRes() @@ -877,8 +914,14 @@ class ViewController: NSViewController { //but otherwise a for loop works if let filePath = openPanel.url?.path { - woz_loadFile( filePath ) - NSDocumentController.shared.noteNewRecentDocumentURL(URL(fileURLWithPath: filePath)) + let woz_err = woz_loadFile( filePath ) + + if woz_err == WOZ_ERR_OK { + NSDocumentController.shared.noteNewRecentDocumentURL(URL(fileURLWithPath: filePath)) + } + else { + self.chk_woz_load(err: woz_err) + } } } } diff --git a/src/dev/disk/woz.c b/src/dev/disk/woz.c index 4572cf2..6b861dc 100644 --- a/src/dev/disk/woz.c +++ b/src/dev/disk/woz.c @@ -301,7 +301,7 @@ uint8_t woz_read() { } -void woz_loadFile( const char * filename ) { +int woz_loadFile( const char * filename ) { // char fullpath[256]; // @@ -312,12 +312,12 @@ void woz_loadFile( const char * filename ) { FILE * f = fopen(filename, "rb"); if (f == NULL) { perror("Failed to read WOZ: "); - return; + return WOZ_ERR_FILE_NOT_FOUND; } fread( &woz_header, 1, sizeof(woz_header_t), f); if ( woz_header.magic != WOZ1_MAGIC ) { - return; + return WOZ_ERR_NOT_WOZ_FILE; } while ( ! feof(f) ) { @@ -325,7 +325,7 @@ void woz_loadFile( const char * filename ) { long r = fread( &woz_chunk_header, 1, sizeof(woz_chunk_header_t), f); if ( r != sizeof(woz_chunk_header_t) ) { - break; + return r == 0 ? 0 : WOZ_ERR_BAD_CHUNK_HDR; } long foffs = ftell(f); @@ -353,7 +353,7 @@ void woz_loadFile( const char * filename ) { if (buf) { r = fread( buf, 1, woz_chunk_header.size, f); if ( r != woz_chunk_header.size ) { - break; + return WOZ_ERR_BAD_DATA; } } @@ -363,6 +363,7 @@ void woz_loadFile( const char * filename ) { fclose(f); + return WOZ_ERR_OK; } diff --git a/src/dev/disk/woz.h b/src/dev/disk/woz.h index 20ea9ab..66f1774 100644 --- a/src/dev/disk/woz.h +++ b/src/dev/disk/woz.h @@ -23,6 +23,12 @@ #define WOZ_TRKS_CHUNK_ID 0x534B5254 #define WOZ_META_CHUNK_ID 0x4154454D +#define WOZ_ERR_OK 0 +#define WOZ_ERR_FILE_NOT_FOUND -1 +#define WOZ_ERR_NOT_WOZ_FILE -2 +#define WOZ_ERR_BAD_CHUNK_HDR -3 +#define WOZ_ERR_BAD_DATA -4 + #pragma pack(push) #pragma pack(1) @@ -120,7 +126,7 @@ extern uint8_t WOZlatch; extern uint8_t woz_read(void); -extern void woz_loadFile( const char * filename ); +extern int woz_loadFile( const char * filename ); #endif /* woz_h */