- Default ROM is //e, instead of Enhanced version

- WOZ file load error handling
- Only place filename to recents when load was successful
This commit is contained in:
tudnai 2020-06-04 11:37:35 -07:00
parent b6f67f981c
commit 0aa6098846
6 changed files with 413 additions and 63 deletions

View File

@ -14,13 +14,10 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "BRA:6502_instr_branch.h">
contextName = "specialized closure #1 in ViewController.Update():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "">
</PersistentString>
<PersistentString
value = "RAM[0x346f]">
value = "self.HiRes.frame">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -67,7 +64,7 @@
contextName = "closure #1 in ViewController.Update():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "MEMcfg.txt_page_2">
value = "txtArr">
</PersistentString>
<PersistentString
value = "self.shadowTxt">
@ -76,10 +73,10 @@
value = "txt">
</PersistentString>
<PersistentString
value = "MEMcfg.is_80STORE">
value = "MEMcfg.txt_page_2">
</PersistentString>
<PersistentString
value = "txtArr">
value = "MEMcfg.is_80STORE">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -131,6 +128,9 @@
<PersistentString
value = "sender.identifier!.rawValue">
</PersistentString>
<PersistentString
value = "Bundle.main.resourcePath! + &quot;/&quot; + menuIdentifier.rawValue + &quot;.woz&quot;">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
@ -209,15 +209,15 @@
<ContextState
contextName = "spkr_update:speaker.c">
<PersistentStrings>
<PersistentString
value = "(uint8_t)spkr_samples[455]">
</PersistentString>
<PersistentString
value = "(uint8_t)spkr_samples[451]">
</PersistentString>
<PersistentString
value = "(uint8_t)spkr_samples[452]">
</PersistentString>
<PersistentString
value = "(uint8_t)spkr_samples[455]">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
@ -264,7 +264,7 @@
value = "pdl_value[pdl]">
</PersistentString>
<PersistentString
value = "normalized_time">
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
</PersistentString>
<PersistentString
value = "(3300 * 255/3300)">
@ -276,7 +276,7 @@
value = "1 * 512 * (1 - ( 3300 / 3300.0 ))">
</PersistentString>
<PersistentString
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
value = "normalized_time">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -293,13 +293,13 @@
value = "textLines">
</PersistentString>
<PersistentString
value = "hires.frame">
value = "hires.layer">
</PersistentString>
<PersistentString
value = "view">
</PersistentString>
<PersistentString
value = "hires.layer">
value = "hires.frame">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -315,7 +315,7 @@
contextName = "LoRes.Update():LoRes.swift">
<PersistentStrings>
<PersistentString
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
value = "blockChanged[ screenIdx ]">
</PersistentString>
<PersistentString
value = "UInt8(block)">
@ -324,7 +324,7 @@
value = "UInt8(block &amp; 4)">
</PersistentString>
<PersistentString
value = "blockChanged[ screenIdx ]">
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -343,10 +343,10 @@
contextName = "set_flags_NZC:common.h">
<PersistentStrings>
<PersistentString
value = "(unsigned)0xFF">
value = "(unsigned)test ">
</PersistentString>
<PersistentString
value = "(unsigned)test ">
value = "(unsigned)0xFF">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -488,10 +488,10 @@
contextName = "HiRes.draw(_:):HiRes.swift">
<PersistentStrings>
<PersistentString
value = "ctx?.bitsPerComponent">
value = "linAddr">
</PersistentString>
<PersistentString
value = "ctx?.data">
value = "ctx?.height">
</PersistentString>
<PersistentString
value = "ctx?.width">
@ -514,14 +514,14 @@
<PersistentString
value = "(blockH7 | ( block &amp; bitMask ))">
</PersistentString>
<PersistentString
value = "ctx?.bitsPerComponent">
</PersistentString>
<PersistentString
value = "HiRes.blockCols">
</PersistentString>
<PersistentString
value = "linAddr">
</PersistentString>
<PersistentString
value = "ctx?.height">
value = "ctx?.data">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -537,13 +537,13 @@
contextName = "HiRes.compute():HiRes.swift">
<PersistentStrings>
<PersistentString
value = "UnsafeRawBufferPointer(result)">
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
</PersistentString>
<PersistentString
value = "result[2]">
</PersistentString>
<PersistentString
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
value = "UnsafeRawBufferPointer(result)">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -569,10 +569,10 @@
value = "mouseLocation">
</PersistentString>
<PersistentString
value = "txtArr">
value = "clkfrm">
</PersistentString>
<PersistentString
value = "clkfrm">
value = "txtArr">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -633,10 +633,10 @@
value = "Apple2_64K_AUX + 0xC600">
</PersistentString>
<PersistentString
value = "Apple2_64K_RAM + 0xC600">
value = "(void*)rom">
</PersistentString>
<PersistentString
value = "(void*)rom">
value = "Apple2_64K_RAM + 0xC600">
</PersistentString>
<PersistentString
value = "strlen(fullPath)">
@ -653,10 +653,13 @@
contextName = "BNE:6502_instr_branch.h">
</ContextState>
<ContextState
contextName = "specialized closure #1 in ViewController.Update():ViewController.swift">
contextName = "BRA:6502_instr_branch.h">
<PersistentStrings>
<PersistentString
value = "self.HiRes.frame">
value = "">
</PersistentString>
<PersistentString
value = "RAM[0x346f]">
</PersistentString>
</PersistentStrings>
</ContextState>

View File

@ -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;
}
}

View File

@ -752,41 +752,338 @@
</items>
</menu>
</menuItem>
<menuItem title="Config" id="n97-rZ-OOP" userLabel="Config">
<menuItem title="Machine" id="n97-rZ-OOP">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Config" id="Xqf-B7-gCo">
<menu key="submenu" title="Machine" id="Xqf-B7-gCo">
<items>
<menuItem title="ROM" id="Y3v-20-h2Q">
<menuItem title="► Power On" id="VJp-Pq-vAd">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Disk 1" id="7dA-Bf-QS9">
</menuItem>
<menuItem title="❚❚ Pause" id="UvV-rl-Pa2">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="■ Off" id="Pvr-O3-O0W">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="EpV-Zl-RlZ"/>
<menuItem title="Cold Reset" id="nzj-IC-y8T">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Warm Reset" id="ivK-Gh-v9c">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="iZQ-dd-f8J"/>
<menuItem title="Snapshot" id="5oA-Fb-xBS">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Machine" id="sPt-bm-xHF">
<items>
<menuItem title="Apple ][" identifier="apple" id="vNT-Vf-GnM">
<menuItem title="Save" id="TfJ-FC-fVE">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Revert" id="BSq-Md-dlE">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Clone" id="62P-mr-JdC">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Remove" id="F3V-BM-MBF">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Config" id="xCX-YJ-V4X" userLabel="Config">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Config" id="deK-A1-Cfu">
<items>
<menuItem title="Computer" id="Z2C-d8-YZG">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Computer" id="ksd-DR-LZn">
<items>
<menuItem title="Apple I" id="vdn-oV-Yg6">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="i6d-jg-ge0"/>
<menuItem title="Apple ][" id="mhi-Ny-X7h">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Apple ][ Autostart" id="h9I-nf-vNQ">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="wZ1-Eu-OOC"/>
<menuItem title="Apple ][ Plus" id="5gw-29-Gu5">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Apple ][ EuroPlus" id="7gZ-uL-uyF">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Apple ][ JPlus" id="csX-uP-6sJ">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="16c-Wd-Y9a"/>
<menuItem title="Apple //e" state="on" id="BrQ-r4-3m4">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Apple //e Enhanced" id="LjH-XA-GH7">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Apple //e Platinum" id="DKl-ia-cn9">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="auc-hx-H4k"/>
<menuItem title="Apple //c" id="U9I-j7-k9t">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Apple //c Plus" id="iyK-TF-6Bt">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="CPU" id="SmQ-6o-1XX">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="CPU" id="KT1-Ia-kZn">
<items>
<menuItem title="6502" state="on" id="k7j-VG-VO2">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="6502 Vanilla" id="tO1-Vs-L9f">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="65C02" id="4mW-JB-ErL">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="e8D-Kj-mbv"/>
<menuItem title="1.023 MHz" state="on" id="1RN-01-nf4">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="2 MHz" id="pxO-n6-xHE">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="4 MHz" id="GRs-A7-t6X">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="10 MHz" id="PBY-Ro-rwy">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="100 MHz" id="Aja-GC-sCf">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="MAX MHz" id="xtW-45-OFk">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="RAM" id="Gnp-Nx-lOL">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="RAM" id="90x-gh-RRS">
<items>
<menuItem title="16 K" identifier="apple" id="vCx-u7-Wi3">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="32 K" identifier="Apple2Plus" id="fLN-L3-YoC">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="48 K" state="on" identifier="Apple2e" id="8lO-CC-7hQ">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="SZ8-yX-RKG"/>
<menuItem title="16 K Language Card" state="on" identifier="Apple2e_Enhanced" id="nJd-RL-OY8">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="64 K Aux Memory" identifier="Apple2e_Enhanced" id="Nru-sa-j2J">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="ROM" id="pY1-DR-M27">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Disk 1" id="Grf-T3-bgk">
<items>
<menuItem title="Apple ][" identifier="apple" id="s4p-zb-EBc">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="kGO-kr-gGf"/>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="fog-8o-ZAp"/>
</connections>
</menuItem>
<menuItem title="Apple ][ Plus" identifier="Apple2Plus" id="wL6-44-pA1">
<menuItem title="Apple ][ Plus" identifier="Apple2Plus" id="a2P-0Y-S0y">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="7Z4-x3-Io3"/>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="dhI-7d-ciT"/>
</connections>
</menuItem>
<menuItem title="Apple //e" identifier="Apple2e" id="fj0-JM-dwU">
<menuItem title="Apple //e" state="on" identifier="Apple2e" id="MeE-Kj-pad">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="xDa-lu-WEG"/>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="2W2-oY-Osz"/>
</connections>
</menuItem>
<menuItem title="Apple //e Enhanced" identifier="Apple2e_Enhanced" id="xHh-GT-uQa">
<menuItem title="Apple //e Enhanced" identifier="Apple2e_Enhanced" id="cDl-MC-vGJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="A4H-Kk-DWT"/>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="Fob-HD-kdv"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Audio" id="USc-hU-e3R">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Audio" id="hv3-Ib-zwY">
<items>
<menuItem title="Internal Speaker" state="on" id="t2j-es-fcH">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Fake Stereo" id="3QI-CD-CP2">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="MfR-qp-xcm"/>
<menuItem title="Soft" id="5tZ-ML-0aT">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Normal" state="on" id="kaI-LZ-xPd">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Hard" id="8Rl-q3-SsH">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="Pcw-F8-msF"/>
<menuItem title="Quiet" id="P3j-WZ-K17">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Medium" state="on" id="a2w-0R-hbE">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Loud" id="W9O-C4-6aP">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Video" id="KaL-8u-rRU">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Video" id="Jdm-9V-ppb">
<items>
<menuItem title="Green" id="Xk5-f8-n1H">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Amber" id="4jU-9d-4Kc">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="White" id="Gh1-av-QsV">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Color" state="on" id="rtw-tz-VQa">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="oNR-hU-4fW"/>
<menuItem title="Scan Lines" id="9yZ-sl-GN9">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="Uy4-cl-Goa"/>
<menuItem title="Videx 80 Col" state="on" id="1AP-7s-pbz">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Device" id="tWa-mz-8FE">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Device" id="2h9-TO-Gxp">
<items>
<menuItem title="#4 Mouse" state="on" id="zb4-xg-8G3">
<menu key="submenu" title="#4 Mouse" id="ZhQ-0N-U3c">
<items>
<menuItem title="Enabled" state="on" id="po4-cY-7DO">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Calibrate" id="SUX-t1-KZF">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="#5 Smart Drive" id="WCm-42-OWi">
<menu key="submenu" title="#5 Smart Drive" id="X4T-1z-ROt">
<items>
<menuItem title="Drive 1" state="on" id="AHa-J8-6Ta">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="Fvj-WP-78c"/>
</connections>
</menuItem>
<menuItem title="Drive 2" state="on" id="DQ6-1k-dPR">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="bsm-mE-Wgc"/>
</connections>
</menuItem>
<menuItem title="Normal Speed" id="45z-1z-gjm">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Enhanced Speed" state="on" id="pBw-9b-ilt">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="#6 Disk ][" state="on" id="SMA-1k-EdT">
<menu key="submenu" title="#6 Disk ][" id="bTm-cg-Qdm">
<items>
<menuItem title="Drive 1" state="on" id="mZb-qD-Rcv">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="G6H-Iv-RQE"/>
</connections>
</menuItem>
<menuItem title="Drive 2" state="on" id="rtf-6x-XqC">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="zLW-7d-aGa"/>
</connections>
</menuItem>
<menuItem title="Normal Speed" id="6pP-NT-9Wi">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Enhanced Speed" state="on" id="Ck6-Su-ss5">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Game Controller" id="whx-uP-lMP">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Game Controller" id="UFl-tP-yg9">
<items>
<menuItem title="Enabled" state="on" id="yac-LJ-3bQ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="SsM-bV-Gwt"/>
</connections>
</menuItem>
<menuItem title="Keyboard 2 Paddle" state="on" id="hQ7-E1-FD5">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="WIs-9Q-Lik"/>
</connections>
</menuItem>
<menuItem title="Mouse 2 Joystick" id="gkx-1Y-kWQ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="ROM_Selected:" target="Voe-Tx-rLC" id="nhy-co-aDH"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>

View File

@ -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)
}
}
}
}

View File

@ -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;
}

View File

@ -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 */