diff --git a/Mini vMac/CNFGGLOB.h b/Mini vMac/CNFGGLOB.h
index ae0a0f6..686cb99 100644
--- a/Mini vMac/CNFGGLOB.h
+++ b/Mini vMac/CNFGGLOB.h
@@ -8,6 +8,8 @@
#define SmallGlobals 0
#define cIncludeUnused 0
#define UnusedParam(p) (void) p
+#define AutoTimeZone 1
+#define AutoLocation 1
/* --- integer types ---- */
diff --git a/Mini vMac/Info.plist b/Mini vMac/Info.plist
index 7914a23..2d80c1e 100644
--- a/Mini vMac/Info.plist
+++ b/Mini vMac/Info.plist
@@ -76,7 +76,7 @@
LSSupportsOpeningDocumentsInPlace
MNVMVersion
- 3.5.8
+ 36.04
UIBackgroundModes
audio
diff --git a/Mini vMac/MYOSGLUE.m b/Mini vMac/MYOSGLUE.m
index eef9474..5b753e1 100644
--- a/Mini vMac/MYOSGLUE.m
+++ b/Mini vMac/MYOSGLUE.m
@@ -108,6 +108,7 @@ LOCALPROC dbglog_close0(void) {
#define WantColorTransValid 1
#include "COMOSGLU.h"
+#include "PBUFSTDC.h"
#pragma mark - Cocoa Stuff
@@ -167,78 +168,6 @@ LOCALPROC Screen_UnInit(void) {
}
}
-#pragma mark - Parameter Buffers
-
-#if IncludePbufs
-LOCALVAR void *PbufDat[NumPbufs];
-#endif
-
-#if IncludePbufs
-LOCALFUNC tMacErr PbufNewFromPtr(void *p, ui5b count, tPbuf *r) {
- tPbuf i;
- tMacErr err;
-
- if (!FirstFreePbuf(&i)) {
- free(p);
- err = mnvm_miscErr;
- } else {
- *r = i;
- PbufDat[i] = p;
- PbufNewNotify(i, count);
- err = mnvm_noErr;
- }
-
- return err;
-}
-#endif
-
-#if IncludePbufs
-GLOBALFUNC tMacErr PbufNew(ui5b count, tPbuf *r) {
- tMacErr err = mnvm_miscErr;
-
- void *p = calloc(1, count);
- if (NULL != p) {
- err = PbufNewFromPtr(p, count, r);
- }
-
- return err;
-}
-#endif
-
-#if IncludePbufs
-GLOBALPROC PbufDispose(tPbuf i) {
- free(PbufDat[i]);
- PbufDisposeNotify(i);
-}
-#endif
-
-#if IncludePbufs
-LOCALPROC UnInitPbufs(void) {
- tPbuf i;
-
- for (i = 0; i < NumPbufs; ++i) {
- if (PbufIsAllocated(i)) {
- PbufDispose(i);
- }
- }
-}
-#endif
-
-#if IncludePbufs
-GLOBALPROC PbufTransfer(ui3p Buffer,
- tPbuf i,
- ui5r offset,
- ui5r count,
- blnr IsWrite) {
- void *p = ((ui3p)PbufDat[i]) + offset;
- if (IsWrite) {
- (void)memcpy(p, Buffer, count);
- } else {
- (void)memcpy(Buffer, p, count);
- }
-}
-#endif
-
#pragma mark - Text Translation
LOCALPROC UniCharStrFromSubstCStr(int *L, unichar *x, char *s, blnr AddEllipsis) {
diff --git a/Mini vMac/about.plist b/Mini vMac/about.plist
index 20578af..f26b4f8 100644
--- a/Mini vMac/about.plist
+++ b/Mini vMac/about.plist
@@ -39,11 +39,11 @@
footer.html
Mini vMac for iOS<br/>
-©2008-2018 Jesús A. Álvarez<br/>
+©2008-2019 Jesús A. Álvarez<br/>
<a href="https://namedfork.net/minivmac">namedfork.net/minivmac</a><br/>
<hr/>
based on Mini vMac $mnvmversion<br/>
-©2001-2017 Paul C. Pratt<br/>
+©2001-2019 Paul C. Pratt<br/>
<a href="http://gryphel.com/c/minivmac">gryphel.com/c/minivmac</a>
diff --git a/Mini vMac/mnvm_core/ACTVCODE.h b/Mini vMac/mnvm_core/ACTVCODE.h
old mode 100755
new mode 100644
index ec74935..0867a25
--- a/Mini vMac/mnvm_core/ACTVCODE.h
+++ b/Mini vMac/mnvm_core/ACTVCODE.h
@@ -93,7 +93,7 @@ LOCALFUNC blnr CheckActvCode(ui3p p, blnr *Trial)
/* user interface */
-LOCALFUNC blnr Key2Digit(int key, ui3r *r)
+LOCALFUNC blnr Key2Digit(ui3r key, ui3r *r)
{
ui3r v;
@@ -160,7 +160,7 @@ FORWARDFUNC tMacErr ActvCodeFileLoad(ui3p p);
LOCALVAR ui3b CurActvCode[ActvCodeFileLen];
-LOCALPROC DoActvCodeModeKey(int key)
+LOCALPROC DoActvCodeModeKey(ui3r key)
{
ui3r digit;
ui3r L;
diff --git a/Mini vMac/mnvm_core/ADBEMDEV.c b/Mini vMac/mnvm_core/ADBEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/ADBEMDEV.h b/Mini vMac/mnvm_core/ADBEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/ADBSHARE.h b/Mini vMac/mnvm_core/ADBSHARE.h
old mode 100755
new mode 100644
index ad86f16..4bc8dd2
--- a/Mini vMac/mnvm_core/ADBSHARE.h
+++ b/Mini vMac/mnvm_core/ADBSHARE.h
@@ -48,12 +48,13 @@ LOCALPROC ADB_DoMouseTalk(void)
switch (ADB_CurCmd & 3) {
case 0:
{
- blnr overflow = falseblnr;
+ MyEvtQEl *p;
ui4b partH;
ui4b partV;
+ blnr overflow = falseblnr;
blnr MouseButtonChange = falseblnr;
- MyEvtQEl *p = MyEvtQOutP();
- if (nullpr != p) {
+
+ if (nullpr != (p = MyEvtQOutP())) {
if (MyEvtQElKindMouseDelta == p->kind) {
MouseADBDeltaH += p->u.pos.h;
MouseADBDeltaV += p->u.pos.v;
@@ -86,8 +87,7 @@ LOCALPROC ADB_DoMouseTalk(void)
MouseADBDeltaH -= partH;
MouseADBDeltaV -= partV;
if (! overflow) {
- MyEvtQEl *p = MyEvtQOutP();
- if (nullpr != p) {
+ if (nullpr != (p = MyEvtQOutP())) {
if (MyEvtQElKindMouseButton == p->kind) {
SavedCurMouseButton = p->u.press.down;
MouseButtonChange = trueblnr;
diff --git a/Mini vMac/mnvm_core/ALTKEYSM.h b/Mini vMac/mnvm_core/ALTKEYSM.h
old mode 100755
new mode 100644
index 89588d6..94350ad
--- a/Mini vMac/mnvm_core/ALTKEYSM.h
+++ b/Mini vMac/mnvm_core/ALTKEYSM.h
@@ -47,7 +47,7 @@ LOCALPROC CheckAltKeyUseMode(void)
}
}
-LOCALPROC Keyboard_UpdateKeyMap1(int key, blnr down)
+LOCALPROC Keyboard_UpdateKeyMap1(ui3r key, blnr down)
{
if (MKC_Command == key) {
AltKeysTrueCmnd = down;
diff --git a/Mini vMac/mnvm_core/ASCEMDEV.c b/Mini vMac/mnvm_core/ASCEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/ASCEMDEV.h b/Mini vMac/mnvm_core/ASCEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/BPFILTER.h b/Mini vMac/mnvm_core/BPFILTER.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/COMOSGLU.h b/Mini vMac/mnvm_core/COMOSGLU.h
old mode 100755
new mode 100644
index bf7a546..7298eb2
--- a/Mini vMac/mnvm_core/COMOSGLU.h
+++ b/Mini vMac/mnvm_core/COMOSGLU.h
@@ -37,6 +37,7 @@
#endif
GLOBALVAR ui3p ROM = nullpr;
+LOCALVAR blnr ROM_loaded = falseblnr;
GLOBALVAR ui5b vSonyWritableMask = 0;
GLOBALVAR ui5b vSonyInsertedMask = 0;
@@ -55,9 +56,13 @@ GLOBALVAR tPbuf vSonyNewDiskName = NotAPbuf;
#endif
GLOBALVAR ui5b CurMacDateInSeconds = 0;
+#if AutoLocation
GLOBALVAR ui5b CurMacLatitude = 0;
GLOBALVAR ui5b CurMacLongitude = 0;
+#endif
+#if AutoTimeZone
GLOBALVAR ui5b CurMacDelta = 0;
+#endif
#if 0 != vMacScreenDepth
GLOBALVAR blnr UseColorMode = falseblnr;
@@ -183,7 +188,9 @@ LOCALFUNC blnr FirstFreeDisk(tDrive *Drive_No)
for (i = 0; i < NumDrives; ++i) {
if (! vSonyIsInserted(i)) {
- *Drive_No = i;
+ if (nullpr != Drive_No) {
+ *Drive_No = i;
+ }
return trueblnr;
}
}
@@ -1020,10 +1027,10 @@ LOCALFUNC MyEvtQEl * MyEvtQElAlloc(void)
LOCALVAR ui5b theKeys[4];
-LOCALPROC Keyboard_UpdateKeyMap(int key, blnr down)
+LOCALPROC Keyboard_UpdateKeyMap(ui3r key, blnr down)
{
- int k = key & 127; /* just for safety */
- int bit = 1 << (k & 7);
+ ui3r k = key & 127; /* just for safety */
+ ui3r bit = 1 << (k & 7);
ui3b *kp = (ui3b *)theKeys;
ui3b *kpi = &kp[k / 8];
blnr CurDown = ((*kpi & bit) != 0);
@@ -1175,7 +1182,9 @@ LOCALPROC MyEvtQTryRecoverFromFull(void)
LOCALVAR char *SavedBriefMsg = nullpr;
LOCALVAR char *SavedLongMsg;
+#if WantAbnormalReports
LOCALVAR ui4r SavedIDMsg = 0;
+#endif
LOCALVAR blnr SavedFatalMsg;
LOCALPROC MacMsg(char *briefMsg, char *longMsg, blnr fatal)
@@ -1192,17 +1201,7 @@ LOCALPROC MacMsg(char *briefMsg, char *longMsg, blnr fatal)
}
}
-GLOBALOSGLUPROC WarnMsgCorruptedROM(void)
-{
- MacMsg(kStrCorruptedROMTitle, kStrCorruptedROMMessage, falseblnr);
-}
-
-GLOBALOSGLUPROC WarnMsgUnsupportedROM(void)
-{
- MacMsg(kStrUnsupportedROMTitle,
- kStrUnsupportedROMMessage, falseblnr);
-}
-
+#if WantAbnormalReports
GLOBALOSGLUPROC WarnMsgAbnormalID(ui4r id)
{
MacMsg(kStrReportAbnormalTitle,
@@ -1217,3 +1216,4 @@ GLOBALOSGLUPROC WarnMsgAbnormalID(ui4r id)
SavedIDMsg = id;
}
}
+#endif
diff --git a/Mini vMac/mnvm_core/CONTROLM.h b/Mini vMac/mnvm_core/CONTROLM.h
old mode 100755
new mode 100644
index a0deb95..ebfb998
--- a/Mini vMac/mnvm_core/CONTROLM.h
+++ b/Mini vMac/mnvm_core/CONTROLM.h
@@ -34,6 +34,7 @@ enum {
#if UseActvCode
SpclModeActvCode,
#endif
+ SpclModeNoRom,
SpclModeMessage,
#if UseControlKeys
SpclModeControl,
@@ -264,9 +265,9 @@ LOCALPROC DrawCellsOneLineStr(char *s)
LOCALPROC DrawCellsKeyCommand(char *k, char *s)
{
DrawCellsBeginLine();
- DrawCellsFromStr("'");
+ DrawCellsFromStr(" ");
DrawCellsFromStr(k);
- DrawCellsFromStr("' - ");
+ DrawCellsFromStr(" - ");
DrawCellsFromStr(s);
DrawCellsEndLine();
}
@@ -324,6 +325,7 @@ LOCALPROC DrawSpclMode0(char *Title, SpclModeBody Body)
#define DisconnectKeyCodes1 DisconnectKeyCodes
#endif
+#if WantAbnormalReports || UseActvFile
LOCALPROC ClStrAppendHexNib(int *L0, ui3b *r, ui3r v)
{
if (v < 10) {
@@ -332,19 +334,25 @@ LOCALPROC ClStrAppendHexNib(int *L0, ui3b *r, ui3r v)
ClStrAppendChar(L0, r, kCellUpA + (v - 10));
}
}
+#endif
+#if WantAbnormalReports || UseActvFile
LOCALPROC ClStrAppendHexByte(int *L0, ui3b *r, ui3r v)
{
ClStrAppendHexNib(L0, r, (v >> 4) & 0x0F);
ClStrAppendHexNib(L0, r, v & 0x0F);
}
+#endif
+#if WantAbnormalReports || UseActvFile
LOCALPROC ClStrAppendHexWord(int *L0, ui3b *r, ui4r v)
{
ClStrAppendHexByte(L0, r, (v >> 8) & 0xFF);
ClStrAppendHexByte(L0, r, v & 0xFF);
}
+#endif
+#if WantAbnormalReports
LOCALPROC DrawCellsOneLineHexWord(ui4r v)
{
ui3b ps[ClStrMaxLength];
@@ -359,16 +367,19 @@ LOCALPROC DrawCellsOneLineHexWord(ui4r v)
}
DrawCellsEndLine();
}
+#endif
LOCALPROC DrawCellsMessageModeBody(void)
{
DrawCellsOneLineStr(SavedBriefMsg);
DrawCellsBlankLine();
DrawCellsOneLineStr(SavedLongMsg);
+#if WantAbnormalReports
if (0 != SavedIDMsg) {
DrawCellsBlankLine();
DrawCellsOneLineHexWord(SavedIDMsg);
}
+#endif
}
LOCALPROC DrawMessageMode(void)
@@ -380,7 +391,9 @@ LOCALPROC MacMsgDisplayOff(void)
{
SpecialModeClr(SpclModeMessage);
SavedBriefMsg = nullpr;
+#if WantAbnormalReports
SavedIDMsg = 0;
+#endif
NeedWholeScreenDraw = trueblnr;
}
@@ -392,7 +405,7 @@ LOCALPROC MacMsgDisplayOn(void)
SpecialModeSet(SpclModeMessage);
}
-LOCALPROC DoMessageModeKey(int key)
+LOCALPROC DoMessageModeKey(ui3r key)
{
if (MKC_C == key) {
MacMsgDisplayOff();
@@ -423,6 +436,28 @@ LOCALPROC DoAboutMsg(void)
}
#endif
+LOCALPROC NoRomMsgDisplayOff(void)
+{
+ SpecialModeClr(SpclModeNoRom);
+ NeedWholeScreenDraw = trueblnr;
+}
+
+LOCALPROC NoRomMsgDisplayOn(void)
+{
+ NeedWholeScreenDraw = trueblnr;
+ SpecialModeSet(SpclModeNoRom);
+}
+
+LOCALPROC DrawCellsNoRomModeBody(void)
+{
+ DrawCellsOneLineStr(kStrNoROMMessage);
+}
+
+LOCALPROC DrawNoRomMode(void)
+{
+ DrawSpclMode0(kStrNoROMTitle, DrawCellsNoRomModeBody);
+}
+
#if UseControlKeys
LOCALVAR blnr LastControlKey = falseblnr;
@@ -432,8 +467,12 @@ LOCALVAR int ControlMessage = 0;
enum {
kCntrlModeOff,
kCntrlModeBase,
+#if WantEnblCtrlRst
kCntrlModeConfirmReset,
+#endif
+#if WantEnblCtrlInt
kCntrlModeConfirmInterrupt,
+#endif
kCntrlModeConfirmQuit,
kCntrlModeSpeedControl,
@@ -448,15 +487,21 @@ enum {
#if VarFullScreen
kCntrlMsgFullScreen,
#endif
+#if WantEnblCtrlRst
kCntrlMsgConfirmResetStart,
kCntrlMsgHaveReset,
kCntrlMsgResetCancelled,
+#endif
+#if WantEnblCtrlInt
kCntrlMsgConfirmInterruptStart,
kCntrlMsgHaveInterrupted,
kCntrlMsgInterruptCancelled,
+#endif
kCntrlMsgConfirmQuitStart,
kCntrlMsgQuitCancelled,
+#if WantEnblCtrlKtg
kCntrlMsgEmCntrl,
+#endif
kCntrlMsgSpeedControlStart,
kCntrlMsgNewSpeed,
kCntrlMsgNewStopped,
@@ -466,7 +511,10 @@ enum {
#endif
kCntrlMsgAbout,
kCntrlMsgHelp,
-#if UseActvCode || EnableDemoMsg
+#if IncludePbufs
+ kCntrlMsgOptionsStrCopied,
+#endif
+#if 0 && (UseActvCode || EnableDemoMsg)
kCntrlMsgRegStrCopied,
#endif
@@ -511,17 +559,44 @@ LOCALPROC SetSpeedValue(ui3b i)
#if VarFullScreen
FORWARDPROC ToggleWantFullScreen(void);
#endif
-#if UseActvCode
-FORWARDPROC CopyRegistrationStr(void);
-#elif EnableDemoMsg
-LOCALPROC CopyRegistrationStr(void)
+
+#if IncludeHostTextClipExchange
+LOCALPROC HTCEexportSubstCStr(char *s)
{
- ui3b ps[ClStrMaxLength];
int i;
int L;
tPbuf j;
+#ifdef PbufHaveLock
+ int n = ClStrSizeSubstCStr(s);
- ClStrFromSubstCStr(&L, ps, "^v");
+ if (mnvm_noErr == PbufNew(n, &j)) {
+ blnr IsOk = falseblnr;
+ ui3p p = PbufLock(j);
+
+ if (nullpr != p) {
+ L = 0;
+ ClStrAppendSubstCStr(&L, p, s);
+
+ if (L == n) {
+ for (i = 0; i < n; ++i) {
+ p[i] = Cell2MacAsciiMap[p[i]];
+ }
+ IsOk = trueblnr;
+ }
+
+ PbufUnlock(j);
+ }
+
+ if (IsOk) {
+ HTCEexport(j);
+ } else {
+ PbufDispose(j);
+ }
+ }
+#else
+ ui3b ps[ClStrMaxLength];
+
+ ClStrFromSubstCStr(&L, ps, s);
for (i = 0; i < L; ++i) {
ps[i] = Cell2MacAsciiMap[ps[i]];
@@ -531,28 +606,53 @@ LOCALPROC CopyRegistrationStr(void)
PbufTransfer(ps, j, 0, L, trueblnr);
HTCEexport(j);
}
+#endif
}
#endif
-LOCALPROC DoControlModeKey(int key)
+#if IncludeHostTextClipExchange
+LOCALPROC CopyOptionsStr(void)
+{
+ HTCEexportSubstCStr(kBldOpts);
+}
+#endif
+
+#if 0
+#if UseActvCode
+FORWARDPROC CopyRegistrationStr(void);
+#elif EnableDemoMsg
+LOCALPROC CopyRegistrationStr(void)
+{
+ HTCEexportSubstCStr("^v");
+}
+#endif
+#endif
+
+
+LOCALPROC DoControlModeKey(ui3r key)
{
switch (CurControlMode) {
case kCntrlModeBase:
switch (key) {
+#if WantEnblCtrlKtg
case MKC_K:
ControlKeyPressed = ! ControlKeyPressed;
ControlMessage = kCntrlMsgEmCntrl;
- Keyboard_UpdateKeyMap1(MKC_Control,
+ Keyboard_UpdateKeyMap1(MKC_UnMappedKey,
ControlKeyPressed);
break;
+#endif
case MKC_S:
CurControlMode = kCntrlModeSpeedControl;
ControlMessage = kCntrlMsgSpeedControlStart;
break;
+#if WantEnblCtrlInt
case MKC_I:
CurControlMode = kCntrlModeConfirmInterrupt;
ControlMessage = kCntrlMsgConfirmInterruptStart;
break;
+#endif
+#if WantEnblCtrlRst
case MKC_R:
if (! AnyDiskInserted()) {
WantMacReset = trueblnr;
@@ -562,6 +662,7 @@ LOCALPROC DoControlModeKey(int key)
ControlMessage = kCntrlMsgConfirmResetStart;
}
break;
+#endif
case MKC_Q:
if (! AnyDiskInserted()) {
ForceMacOff = trueblnr;
@@ -593,14 +694,50 @@ LOCALPROC DoControlModeKey(int key)
ControlMessage = kCntrlMsgFullScreen;
break;
#endif
-#if UseActvCode || EnableDemoMsg
+#if IncludeHostTextClipExchange
+ case MKC_P:
+ CopyOptionsStr();
+ ControlMessage = kCntrlMsgOptionsStrCopied;
+ break;
+#endif
+#if 0 && (UseActvCode || EnableDemoMsg)
case MKC_P:
CopyRegistrationStr();
ControlMessage = kCntrlMsgRegStrCopied;
break;
+#endif
+#if NeedRequestIthDisk
+ case MKC_1:
+ RequestIthDisk = 1;
+ break;
+ case MKC_2:
+ RequestIthDisk = 2;
+ break;
+ case MKC_3:
+ RequestIthDisk = 3;
+ break;
+ case MKC_4:
+ RequestIthDisk = 4;
+ break;
+ case MKC_5:
+ RequestIthDisk = 5;
+ break;
+ case MKC_6:
+ RequestIthDisk = 6;
+ break;
+ case MKC_7:
+ RequestIthDisk = 7;
+ break;
+ case MKC_8:
+ RequestIthDisk = 8;
+ break;
+ case MKC_9:
+ RequestIthDisk = 9;
+ break;
#endif
}
break;
+#if WantEnblCtrlRst
case kCntrlModeConfirmReset:
switch (key) {
case MKC_Y:
@@ -618,6 +755,8 @@ LOCALPROC DoControlModeKey(int key)
break;
}
break;
+#endif
+#if WantEnblCtrlInt
case kCntrlModeConfirmInterrupt:
switch (key) {
case MKC_Y:
@@ -635,6 +774,7 @@ LOCALPROC DoControlModeKey(int key)
break;
}
break;
+#endif
case kCntrlModeConfirmQuit:
switch (key) {
case MKC_Y:
@@ -665,9 +805,11 @@ LOCALPROC DoControlModeKey(int key)
ControlMessage = kCntrlMsgNewRunInBack;
break;
case MKC_D:
- SpeedStopped = ! SpeedStopped;
- CurControlMode = kCntrlModeBase;
- ControlMessage = kCntrlMsgNewStopped;
+ if (ROM_loaded) {
+ SpeedStopped = ! SpeedStopped;
+ CurControlMode = kCntrlModeBase;
+ ControlMessage = kCntrlMsgNewStopped;
+ }
break;
#if EnableAutoSlow
case MKC_W:
@@ -708,12 +850,16 @@ LOCALFUNC char * ControlMode2TitleStr(void)
char *s;
switch (CurControlMode) {
+#if WantEnblCtrlRst
case kCntrlModeConfirmReset:
s = kStrModeConfirmReset;
break;
+#endif
+#if WantEnblCtrlInt
case kCntrlModeConfirmInterrupt:
s = kStrModeConfirmInterrupt;
break;
+#endif
case kCntrlModeConfirmQuit:
s = kStrModeConfirmQuit;
break;
@@ -737,12 +883,7 @@ LOCALPROC DrawCellsControlModeBody(void)
{
switch (ControlMessage) {
case kCntrlMsgAbout:
-#ifndef kStrSponsorName
DrawCellsOneLineStr(kStrProgramInfo);
-#else
- DrawCellsOneLineStr(kStrSponsorIs);
- DrawCellsOneLineStr(kStrSponsorName);
-#endif
DrawCellsBlankLine();
@@ -776,9 +917,16 @@ LOCALPROC DrawCellsControlModeBody(void)
#if VarFullScreen
DrawCellsKeyCommand("F", kStrCmdFullScrnToggle);
#endif
+#if WantEnblCtrlKtg
DrawCellsKeyCommand("K", kStrCmdCtrlKeyToggle);
+#endif
+#if WantEnblCtrlRst
DrawCellsKeyCommand("R", kStrCmdReset);
+#endif
+#if WantEnblCtrlInt
DrawCellsKeyCommand("I", kStrCmdInterrupt);
+#endif
+ DrawCellsKeyCommand("P", kStrCmdCopyOptions);
DrawCellsKeyCommand("H", kStrCmdHelp);
break;
case kCntrlMsgSpeedControlStart:
@@ -823,6 +971,12 @@ LOCALPROC DrawCellsControlModeBody(void)
DrawCellsOneLineStr(kStrNewFullScreen);
break;
#endif
+#if IncludeHostTextClipExchange
+ case kCntrlMsgOptionsStrCopied:
+ DrawCellsOneLineStr(kStrHaveCopiedOptions);
+ break;
+#endif
+#if 0
#if UseActvCode
case kCntrlMsgRegStrCopied:
DrawCellsOneLineStr("Registration String copied.");
@@ -832,6 +986,8 @@ LOCALPROC DrawCellsControlModeBody(void)
DrawCellsOneLineStr("Variation name copied.");
break;
#endif
+#endif
+#if WantEnblCtrlRst
case kCntrlMsgConfirmResetStart:
DrawCellsOneLineStr(kStrConfirmReset);
DrawCellsBlankLine();
@@ -844,6 +1000,8 @@ LOCALPROC DrawCellsControlModeBody(void)
case kCntrlMsgResetCancelled:
DrawCellsOneLineStr(kStrCancelledReset);
break;
+#endif
+#if WantEnblCtrlInt
case kCntrlMsgConfirmInterruptStart:
DrawCellsOneLineStr(kStrConfirmInterrupt);
DrawCellsBlankLine();
@@ -856,6 +1014,7 @@ LOCALPROC DrawCellsControlModeBody(void)
case kCntrlMsgInterruptCancelled:
DrawCellsOneLineStr(kStrCancelledInterrupt);
break;
+#endif
case kCntrlMsgConfirmQuitStart:
DrawCellsOneLineStr(kStrConfirmQuit);
DrawCellsBlankLine();
@@ -865,9 +1024,11 @@ LOCALPROC DrawCellsControlModeBody(void)
case kCntrlMsgQuitCancelled:
DrawCellsOneLineStr(kStrCancelledQuit);
break;
+#if WantEnblCtrlKtg
case kCntrlMsgEmCntrl:
DrawCellsOneLineStr(kStrNewCntrlKey);
break;
+#endif
case kCntrlMsgBaseStart:
default:
DrawCellsOneLineStr(kStrHowToLeaveControl);
@@ -925,6 +1086,9 @@ LOCALPROC DrawSpclMode(void)
if (SpecialModeTst(SpclModeMessage)) {
DrawMessageMode();
} else
+ if (SpecialModeTst(SpclModeNoRom)) {
+ DrawNoRomMode();
+ } else
#if UseActvCode
if (SpecialModeTst(SpclModeActvCode)) {
DrawActvCodeMode();
@@ -964,67 +1128,127 @@ LOCALFUNC ui3p GetCurDrawBuff(void)
return p;
}
-LOCALPROC Keyboard_UpdateKeyMap2(int key, blnr down)
+#ifdef WantKeyboard_RemapMac
+LOCALFUNC ui3r Keyboard_RemapMac(ui3r key)
{
-#ifndef MKC_formac_Control
-#if SwapCommandControl
-#define MKC_formac_Control MKC_Command
-#else
-#define MKC_formac_Control MKC_Control
-#endif
-#endif
+ switch (key) {
#if MKC_formac_Control != MKC_Control
- if (MKC_Control == key) {
- key = MKC_formac_Control;
- } else
-#endif
-
-#ifndef MKC_formac_Command
-#if SwapCommandControl
-#define MKC_formac_Command MKC_Control
-#else
-#define MKC_formac_Command MKC_Command
-#endif
+ case MKC_Control:
+ key = MKC_formac_Control;
+ break;
#endif
#if MKC_formac_Command != MKC_Command
- if (MKC_Command == key) {
- key = MKC_formac_Command;
- } else
-#endif
-
-#ifndef MKC_formac_Option
-#define MKC_formac_Option MKC_Option
+ case MKC_Command:
+ key = MKC_formac_Command;
+ break;
#endif
#if MKC_formac_Option != MKC_Option
- if (MKC_Option == key) {
- key = MKC_formac_Option;
- } else
+ case MKC_Option:
+ key = MKC_formac_Option;
+ break;
#endif
-
-#ifndef MKC_formac_F1
-#define MKC_formac_F1 MKC_Option
+#if MKC_formac_Shift != MKC_Shift
+ case MKC_Shift:
+ key = MKC_formac_Shift;
+ break;
+#endif
+#if MKC_formac_CapsLock != MKC_CapsLock
+ case MKC_CapsLock:
+ key = MKC_formac_CapsLock;
+ break;
#endif
#if MKC_formac_F1 != MKC_F1
- if (MKC_F1 == key) {
- key = MKC_formac_F1;
- } else
-#endif
-
-#ifndef MKC_formac_F2
-#define MKC_formac_F2 MKC_Command
+ case MKC_F1:
+ key = MKC_formac_F1;
+ break;
#endif
#if MKC_formac_F2 != MKC_F2
- if (MKC_F2 == key) {
- key = MKC_formac_F2;
- } else
+ case MKC_F2:
+ key = MKC_formac_F2;
+ break;
#endif
-
- {
+#if MKC_formac_F3 != MKC_F3
+ case MKC_F3:
+ key = MKC_formac_F3;
+ break;
+#endif
+#if MKC_formac_F4 != MKC_F4
+ case MKC_F4:
+ key = MKC_formac_F4;
+ break;
+#endif
+#if MKC_formac_F5 != MKC_F5
+ case MKC_F5:
+ key = MKC_formac_F5;
+ break;
+#endif
+#if MKC_formac_Escape != MKC_Escape
+ case MKC_Escape:
+ key = MKC_formac_Escape;
+ break;
+#endif
+#if MKC_formac_BackSlash != MKC_BackSlash
+ case MKC_BackSlash:
+ key = MKC_formac_BackSlash;
+ break;
+#endif
+#if MKC_formac_Slash != MKC_Slash
+ case MKC_Slash:
+ key = MKC_formac_Slash;
+ break;
+#endif
+#if MKC_formac_Grave != MKC_Grave
+ case MKC_Grave:
+ key = MKC_formac_Grave;
+ break;
+#endif
+#if MKC_formac_Enter != MKC_Enter
+ case MKC_Enter:
+ key = MKC_formac_Enter;
+ break;
+#endif
+#if MKC_formac_PageUp != MKC_PageUp
+ case MKC_PageUp:
+ key = MKC_formac_PageUp;
+ break;
+#endif
+#if MKC_formac_PageDown != MKC_PageDown
+ case MKC_PageDown:
+ key = MKC_formac_PageDown;
+ break;
+#endif
+#if MKC_formac_Home != MKC_Home
+ case MKC_Home:
+ key = MKC_formac_Home;
+ break;
+#endif
+#if MKC_formac_End != MKC_End
+ case MKC_End:
+ key = MKC_formac_End;
+ break;
+#endif
+#if MKC_formac_Help != MKC_Help
+ case MKC_Help:
+ key = MKC_formac_Help;
+ break;
+#endif
+#if MKC_formac_ForwardDel != MKC_ForwardDel
+ case MKC_ForwardDel:
+ key = MKC_formac_ForwardDel;
+ break;
+#endif
+ default:
+ break;
}
+ return key;
+}
+#endif /* WantKeyboard_RemapMac */
+LOCALPROC Keyboard_UpdateKeyMap2(ui3r key, blnr down)
+{
#if UseControlKeys
- if (MKC_Control == key) {
+ if (MKC_CM == key) {
Keyboard_UpdateControlKey(down);
} else
#endif
@@ -1073,3 +1297,99 @@ LOCALPROC DisconnectKeyCodes2(void)
Keyboard_UpdateControlKey(falseblnr);
#endif
}
+
+#ifndef CheckRomCheckSum
+#define CheckRomCheckSum 1
+#endif
+
+#if CheckRomCheckSum
+LOCALFUNC ui5r Calc_Checksum(void)
+{
+ long int i;
+ ui5b CheckSum = 0;
+ ui3p p = 4 + ROM;
+
+ for (i = (kCheckSumRom_Size - 4) >> 1; --i >= 0; ) {
+ CheckSum += do_get_mem_word(p);
+ p += 2;
+ }
+
+ return CheckSum;
+}
+#endif
+
+#if CheckRomCheckSum && RomStartCheckSum
+LOCALPROC WarnMsgCorruptedROM(void)
+{
+ MacMsgOverride(kStrCorruptedROMTitle, kStrCorruptedROMMessage);
+}
+#endif
+
+#if CheckRomCheckSum
+LOCALPROC WarnMsgUnsupportedROM(void)
+{
+ MacMsgOverride(kStrUnsupportedROMTitle,
+ kStrUnsupportedROMMessage);
+}
+#endif
+
+LOCALFUNC tMacErr ROM_IsValid(void)
+{
+#if CheckRomCheckSum
+ ui5r CheckSum = Calc_Checksum();
+
+#if RomStartCheckSum
+ if (CheckSum != do_get_mem_long(ROM)) {
+ WarnMsgCorruptedROM();
+ return mnvm_miscErr;
+ } else
+#endif
+#ifdef kRomCheckSum1
+ if (CheckSum == kRomCheckSum1) {
+ } else
+#endif
+#ifdef kRomCheckSum2
+ if (CheckSum == kRomCheckSum2) {
+ } else
+#endif
+#ifdef kRomCheckSum3
+ if (CheckSum == kRomCheckSum3) {
+ } else
+#endif
+ {
+ WarnMsgUnsupportedROM();
+ return mnvm_miscErr;
+ }
+ /*
+ Even if ROM is corrupt or unsupported, go ahead and
+ try to run anyway. It shouldn't do any harm.
+ [update: no, don't]
+ */
+
+#endif /* CheckRomCheckSum */
+
+ ROM_loaded = trueblnr;
+ SpeedStopped = falseblnr;
+
+ return mnvm_noErr;
+}
+
+LOCALFUNC blnr WaitForRom(void)
+{
+ if (! ROM_loaded) {
+ NoRomMsgDisplayOn();
+
+ SpeedStopped = trueblnr;
+ do {
+ WaitForNextTick();
+
+ if (ForceMacOff) {
+ return falseblnr;
+ }
+ } while (SpeedStopped);
+
+ NoRomMsgDisplayOff();
+ }
+
+ return trueblnr;
+}
diff --git a/Mini vMac/mnvm_core/DATE2SEC.h b/Mini vMac/mnvm_core/DATE2SEC.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/DISAM68K.c b/Mini vMac/mnvm_core/DISAM68K.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/DISAM68K.h b/Mini vMac/mnvm_core/DISAM68K.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/ENDIANAC.h b/Mini vMac/mnvm_core/ENDIANAC.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/FPCPEMDV.h b/Mini vMac/mnvm_core/FPCPEMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/FPMATHEM.h b/Mini vMac/mnvm_core/FPMATHEM.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/GLOBGLUE.c b/Mini vMac/mnvm_core/GLOBGLUE.c
old mode 100755
new mode 100644
index 8e23818..3710049
--- a/Mini vMac/mnvm_core/GLOBGLUE.c
+++ b/Mini vMac/mnvm_core/GLOBGLUE.c
@@ -201,12 +201,15 @@ GLOBALPROC dbglog_WriteSetBool(char *s, blnr v)
}
#endif
+#if WantAbnormalReports
LOCALVAR blnr GotOneAbnormal = falseblnr;
+#endif
#ifndef ReportAbnormalInterrupt
#define ReportAbnormalInterrupt 0
#endif
+#if WantAbnormalReports
GLOBALPROC DoReportAbnormalID(ui4r id
#if dbglog_HAVE
, char *s
@@ -228,6 +231,7 @@ GLOBALPROC DoReportAbnormalID(ui4r id
GotOneAbnormal = trueblnr;
}
}
+#endif
/* map of address space */
diff --git a/Mini vMac/mnvm_core/GLOBGLUE.h b/Mini vMac/mnvm_core/GLOBGLUE.h
old mode 100755
new mode 100644
index aed5648..5635e01
--- a/Mini vMac/mnvm_core/GLOBGLUE.h
+++ b/Mini vMac/mnvm_core/GLOBGLUE.h
@@ -133,6 +133,9 @@ EXPORTPROC dbglog_AddrAccess(char *s,
EXPORTPROC dbglog_Access(char *s, ui5r Data, blnr WriteMem);
#endif
+#if ! WantAbnormalReports
+#define ReportAbnormalID(id, s)
+#else
#if dbglog_HAVE
#define ReportAbnormalID DoReportAbnormalID
#else
@@ -143,6 +146,7 @@ EXPORTPROC DoReportAbnormalID(ui4r id
, char *s
#endif
);
+#endif /* WantAbnormalReports */
EXPORTPROC VIAorSCCinterruptChngNtfy(void);
diff --git a/Mini vMac/mnvm_core/HPMCHACK.h b/Mini vMac/mnvm_core/HPMCHACK.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/INTLCHAR.h b/Mini vMac/mnvm_core/INTLCHAR.h
old mode 100755
new mode 100644
index e943c8a..c22519b
--- a/Mini vMac/mnvm_core/INTLCHAR.h
+++ b/Mini vMac/mnvm_core/INTLCHAR.h
@@ -22,7 +22,7 @@
/*
Data in commments:
Mini vMac Cell name
- Mac Roman
+ Mac Roman (Octal)
windows-1252 code page
Unicode
plain ascii
@@ -222,7 +222,7 @@ LOCALVAR const ui3b CellData[] = {
/* kCellAmpersand 046 0x26 0x0026 '&' '&' amp */
0x00, 0x00, 0x00, 0x30, 0x48, 0x48, 0x50, 0x20,
0x50, 0x4A, 0x44, 0x3A, 0x00, 0x00, 0x00, 0x00,
- /* kCellApostrophe 047 0x27 0x0027 '\047' ';la' apos */
+ /* kCellApostrophe 047 0x27 0x0027 '\047' ';la' #39 (apos) */
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* kCellLeftParen 050 0x28 0x0028 '(' '(' ( */
@@ -246,13 +246,13 @@ LOCALVAR const ui3b CellData[] = {
/* kCellColon 072 0x3A 0x003A ':' ':' : */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
- /* kCellSemicolon 073 0x3B 0x003B ';' ';ls' #59 */
+ /* kCellSemicolon 073 0x3B 0x003B ';' ';ls' #59 (semi) */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x00, 0x00, 0x08, 0x08, 0x08, 0x10, 0x00, 0x00,
/* kCellQuestion 077 0x3F 0x003F '?' '?' ? */
0x00, 0x00, 0x00, 0x38, 0x44, 0x04, 0x08, 0x10,
0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
- /* kCellEllipsis 311 0x85 0x2026 '_' ';ll' #8230 */
+ /* kCellEllipsis 311 0x85 0x2026 '_' ';ll' #8230 (mldr) */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00,
/* kCellUnderscore 137 0x5F 0x005F '_' '_' _ */
@@ -468,54 +468,96 @@ LOCALVAR const ui3b CellData[] = {
0x00, 0x00, 0x00, 0x1C, 0x22, 0x42, 0x44, 0x44,
0x42, 0x42, 0x42, 0x5C, 0x40, 0x00, 0x00, 0x00,
- /* kCellUpACedille 260 ? 0x0104 'A' ';dA' #260 */
+ /* kCellUpACedille 260 ? 0x0104 'A' ';dA' #260 (Aogon) */
0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x7E,
0x42, 0x42, 0x42, 0x42, 0x04, 0x04, 0x02, 0x00,
- /* kCellLoACedille 261 ? 0x0105 'a' ';da' #261 */
+ /* kCellLoACedille 261 ? 0x0105 'a' ';da' #261 (aogon) */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x42,
0x42, 0x42, 0x46, 0x3A, 0x04, 0x04, 0x02, 0x00,
- /* kCellUpCAcute 262 ? 0x0106 'C' ';eC' #262 */
+ /* kCellUpCAcute 262 ? 0x0106 'C' ';eC' #262 (Cacute) */
0x08, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x40, 0x40,
0x40, 0x40, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
- /* kCellLoCAcute 263 ? 0x0107 'c' ';ec' #263 */
+ /* kCellLoCAcute 263 ? 0x0107 'c' ';ec' #263 (cacute) */
0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3C, 0x42,
0x40, 0x40, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
- /* kCellUpECedille 264 ? 0x0118 'E' ';dE' #280 */
+ /* kCellUpECedille 264 ? 0x0118 'E' ';dE' #280 (Eogon) */
0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C,
0x40, 0x40, 0x40, 0x7E, 0x04, 0x04, 0x02, 0x00,
- /* kCellLoECedille 265 ? 0x0119 'e' ';de' #281 */
+ /* kCellLoECedille 265 ? 0x0119 'e' ';de' #281 (eogon) */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42,
0x7E, 0x40, 0x42, 0x3C, 0x08, 0x08, 0x04, 0x00,
- /* kCellUpLBar 266 ? 0x0141 'L' ';dL' #321 */
+ /* kCellUpLBar 266 ? 0x0141 'L' ';dL' #321 (Lstrok) */
0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x60, 0x40,
0xC0, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, 0x00,
- /* kCellLoLBar 267 ? 0x0142 'l' ';dl' #322 */
+ /* kCellLoLBar 267 ? 0x0142 'l' ';dl' #322 (lstrok) */
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x0C, 0x08,
0x18, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
- /* kCellUpNAcute 270 ? 0x0143 'N' ';eN' #323 */
+ /* kCellUpNAcute 270 ? 0x0143 'N' ';eN' #323 (Nacute) */
0x08, 0x10, 0x00, 0x42, 0x42, 0x62, 0x52, 0x4A,
0x46, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
- /* kCellLoNAcute 271 ? 0x0144 'n' ';en' #324 */
+ /* kCellLoNAcute 271 ? 0x0144 'n' ';en' #324 (nacute) */
0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7C, 0x42,
0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
- /* kCellUpSAcute 272 ? 0x015A 'S' ';eS' #346 */
+ /* kCellUpSAcute 272 ? 0x015A 'S' ';eS' #346 (Sacute) */
0x08, 0x10, 0x00, 0x3C, 0x42, 0x40, 0x40, 0x3C,
0x02, 0x02, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
- /* kCellLoSAcute 273 ? 0x015B 's' ';es' #347 */
+ /* kCellLoSAcute 273 ? 0x015B 's' ';es' #347 (sacute) */
0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3C, 0x42,
0x3C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
- /* kCellUpZAcute 274 ? 0x0179 'Z' ';eZ' #377 */
+ /* kCellUpZAcute 274 ? 0x0179 'Z' ';eZ' #377 (Zacute) */
0x08, 0x10, 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10,
0x20, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, 0x00,
- /* kCellLoZAcute 275 ? 0x017A 'z' ';ez' #378 */
+ /* kCellLoZAcute 275 ? 0x017A 'z' ';ez' #378 (zacute) */
0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7E, 0x04,
0x08, 0x10, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00,
- /* kCellUpZDot 276 ? 0x017B 'Z' ';dZ' #379 */
+ /* kCellUpZDot 276 ? 0x017B 'Z' ';dZ' #379 (Zdot) */
0x10, 0x00, 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10,
0x20, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, 0x00,
- /* kCellLoZDot 277 ? 0x017C 'z' ';dz' #380 */
+ /* kCellLoZDot 277 ? 0x017C 'z' ';dz' #380 (zdot) */
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x7E, 0x04,
0x08, 0x10, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ /* kCellMidDot 341 0xB7 0x00B7 '.' ';l.' middot */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* kCellUpCCaron 077 ? 0x010C 'C' ';vC' #268 (Ccaron) */
+ 0x14, 0x08, 0x00, 0x3C, 0x42, 0x42, 0x40, 0x40,
+ 0x40, 0x40, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoCCaron 077 ? 0x010D 'c' ';vc' #269 (ccaron) */
+ 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x3C, 0x42,
+ 0x40, 0x40, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoECaron 077 ? 0x011B 'e' ';ve' #283 (ecaron) */
+ 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x3C, 0x42,
+ 0x7E, 0x40, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoRCaron 077 ? 0x0159 'r' ';vr' #345 (rcaron) */
+ 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x5C, 0x62,
+ 0x42, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoSCaron 077 0x9A 0x0161 's' ';vs' #353 (scaron) */
+ 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x3C, 0x42,
+ 0x3C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoTCaron 077 ? 0x0165 't' ';vt' #357 (tcaron) */
+ 0x00, 0x14, 0x08, 0x00, 0x20, 0x20, 0x78, 0x20,
+ 0x20, 0x20, 0x20, 0x1C, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoZCaron 077 0x9E 0x017E 'z' ';vz' #382 (zcaron) */
+ 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x7E, 0x04,
+ 0x08, 0x10, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ /* kCellUpYAcute 077 0xDD 0x00DD 'Y' ';eY' Yacute */
+ 0x08, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x14,
+ 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoYAcute 077 0xFD 0x00FD 'y' ';ey' yacute */
+ 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3E, 0x02, 0x42, 0x3C, 0x00,
+ /* kCellLoUDblac 077 ? 0x0171 'u' ';Eu' #369 (udblac) */
+ 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x42, 0x42,
+ 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoURing 077 ? 0x016F 'u' ';ru' #367 (uring) */
+ 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x42, 0x42,
+ 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, 0x00,
+ /* kCellUpDStroke 077 ? 0x0110 'D' ';dD' #272 (Dstrok) */
+ 0x00, 0x00, 0x00, 0x7C, 0x42, 0x42, 0x42, 0xF2,
+ 0x42, 0x42, 0x42, 0x7C, 0x00, 0x00, 0x00, 0x00,
+ /* kCellLoDStroke 077 ? 0x0111 'd' ';dd' #273 (dstrok) */
+ 0x00, 0x00, 0x00, 0x02, 0x0F, 0x02, 0x3E, 0x42,
+ 0x42, 0x42, 0x42, 0x3E, 0x00, 0x00, 0x00, 0x00,
#endif
/* kCellUpperLeft */
@@ -797,6 +839,20 @@ enum {
kCellLoZAcute,
kCellUpZDot,
kCellLoZDot,
+ kCellMidDot,
+ kCellUpCCaron,
+ kCellLoCCaron,
+ kCellLoECaron,
+ kCellLoRCaron,
+ kCellLoSCaron,
+ kCellLoTCaron,
+ kCellLoZCaron,
+ kCellUpYAcute,
+ kCellLoYAcute,
+ kCellLoUDblac,
+ kCellLoURing,
+ kCellUpDStroke,
+ kCellLoDStroke,
#endif
kCellUpperLeft,
@@ -848,7 +904,7 @@ enum {
#endif
#ifndef NeedCell2MacAsciiMap
-#if UseActvCode || EnableDemoMsg
+#if 1 /* UseActvCode || EnableDemoMsg */
#define NeedCell2MacAsciiMap 1
#else
#define NeedCell2MacAsciiMap 0
@@ -1026,6 +1082,20 @@ LOCALVAR const char Cell2MacAsciiMap[] = {
'\275', /* kCellLoZAcute */
'\276', /* kCellUpZDot */
'\277', /* kCellLoZDot */
+ '\341', /* kCellMidDot */
+ '\103', /* kCellUpCCaron */
+ '\143', /* kCellLoCCaron */
+ '\145', /* kCellLoECaron */
+ '\162', /* kCellLoRCaron */
+ '\163', /* kCellLoSCaron */
+ '\164', /* kCellLoTCaron */
+ '\172', /* kCellLoZCaron */
+ '\131', /* kCellUpYAcute */
+ '\171', /* kCellLoYAcute */
+ '\165', /* kCellLoUDblac */
+ '\165', /* kCellLoURing */
+ '\104', /* kCellUpDStroke */
+ '\144', /* kCellLoDStroke */
#endif
'\0' /* just so last above line can end in ',' */
@@ -1207,6 +1277,20 @@ LOCALVAR const ui3b Cell2WinAsciiMap[] = {
0x7A, /* kCellLoZAcute */
0x5A, /* kCellUpZDot */
0x7A, /* kCellLoZDot */
+ 0xB7, /* kCellMidDot */
+ 0x43, /* kCellUpCCaron */
+ 0x63, /* kCellLoCCaron */
+ 0x65, /* kCellLoECaron */
+ 0x61, /* kCellLoRCaron */
+ 0x9A, /* kCellLoSCaron */
+ 0x74, /* kCellLoTCaron */
+ 0x9E, /* kCellLoZCaron */
+ 0xDD, /* kCellUpYAcute */
+ 0xFD, /* kCellLoYAcute */
+ 0x75, /* kCellLoUDblac */
+ 0x75, /* kCellLoURing */
+ 0x44, /* kCellUpDStroke */
+ 0x64, /* kCellLoDStroke */
#endif
'\0' /* just so last above line can end in ',' */
@@ -1388,6 +1472,20 @@ LOCALVAR const char Cell2PlainAsciiMap[] = {
'z', /* kCellLoZAcute */
'Z', /* kCellUpZDot */
'z', /* kCellLoZDot */
+ '.', /* kCellMidDot */
+ 'C', /* kCellUpCCaron */
+ 'c', /* kCellLoCCaron */
+ 'e', /* kCellLoECaron */
+ 'r', /* kCellLoRCaron */
+ 's', /* kCellLoSCaron */
+ 't', /* kCellLoTCaron */
+ 'z', /* kCellLoZCaron */
+ 'Y', /* kCellUpYAcute */
+ 'y', /* kCellLoYAcute */
+ 'u', /* kCellLoUDblac */
+ 'u', /* kCellLoURing */
+ 'D', /* kCellUpDStroke */
+ 'd', /* kCellLoDStroke */
#endif
'\0' /* just so last above line can end in ',' */
@@ -1569,6 +1667,20 @@ LOCALVAR const ui4b Cell2UnicodeMap[] = {
0x017A, /* kCellLoZAcute */
0x017B, /* kCellUpZDot */
0x017C, /* kCellLoZDot */
+ 0x00B7, /* kCellMidDot */
+ 0x010C, /* kCellUpCCaron */
+ 0x010D, /* kCellLoCCaron */
+ 0x011B, /* kCellLoECaron */
+ 0x0159, /* kCellLoRCaron */
+ 0x0161, /* kCellLoSCaron */
+ 0x0165, /* kCellLoTCaron */
+ 0x017E, /* kCellLoZCaron */
+ 0x00DD, /* kCellUpYAcute */
+ 0x00FD, /* kCellLoYAcute */
+ 0x0171, /* kCellLoUDblac */
+ 0x016F, /* kCellLoURing */
+ 0x0110, /* kCellUpDStroke */
+ 0x0111, /* kCellLoDStroke */
#endif
'\0' /* just so last above line can end in ',' */
@@ -1591,10 +1703,30 @@ LOCALVAR blnr WantMagnify = (WantInitMagnify != 0);
LOCALVAR blnr RequestInsertDisk = falseblnr;
#endif
+#ifndef NeedRequestIthDisk
+#define NeedRequestIthDisk 0
+#endif
+
+#if NeedRequestIthDisk
+LOCALVAR ui3r RequestIthDisk = 0;
+#endif
+
#if UseControlKeys
LOCALVAR blnr ControlKeyPressed = falseblnr;
#endif
+#ifndef kStrCntrlKyName
+#define kStrCntrlKyName "control"
+#endif
+
+#ifndef kControlModeKey
+#define kControlModeKey kStrCntrlKyName
+#endif
+
+#ifndef kUnMappedKey
+#define kUnMappedKey kStrCntrlKyName
+#endif
+
LOCALFUNC char * GetSubstitutionStr(char x)
{
char *s;
@@ -1615,6 +1747,12 @@ LOCALFUNC char * GetSubstitutionStr(char x)
case 'r':
s = RomFileName;
break;
+ case 'c':
+ s = kControlModeKey;
+ break;
+ case 'm':
+ s = kUnMappedKey;
+ break;
#if UseControlKeys
case 'k':
if (ControlKeyPressed) {
@@ -1697,47 +1835,108 @@ LOCALFUNC char * GetSubstitutionStr(char x)
return s;
}
-#define ClStrMaxLength 512
+LOCALFUNC int ClStrSizeSubstCStr(char *s)
+{
+ /* must match ClStrAppendSubstCStr ! */
+
+ char *p = s;
+ char c;
+ int L = 0;
+
+ while (0 != (c = *p++)) {
+ if ('^' == c) {
+ if (0 == (c = *p++)) {
+ goto l_exit; /* oops, unexpected end of string, abort */
+ } else if ('^' == c) {
+ ++L;
+ } else {
+ L += ClStrSizeSubstCStr(GetSubstitutionStr(c));
+ }
+ } else if (';' == c) {
+ if (0 == (c = *p++)) {
+ goto l_exit; /* oops, unexpected end of string, abort */
+ }
+
+ switch (c) {
+ case 'l':
+#if NeedIntlChars
+ case '`':
+ case 'd':
+ case 'e':
+ case 'i':
+ case 'n':
+ case 'u':
+ case 'v':
+ case 'E':
+ case 'r':
+#endif
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ goto l_exit;
+ }
+ break;
+ default:
+ break;
+ }
+ ++L;
+ } else {
+ ++L;
+ }
+ }
+
+l_exit:
+ return L;
+}
LOCALPROC ClStrAppendChar(int *L0, ui3b *r, ui3b c)
{
- unsigned short L = *L0;
+ int L = *L0;
- if (ClStrMaxLength != L) {
- r[L] = c;
- L++;
- *L0 = L;
- }
+ r[L] = c;
+ L++;
+ *L0 = L;
}
LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
{
+ /* must match ClStrSizeSubstCStr ! */
+
char *p = s;
char c;
ui3b x;
- while ((c = *p++) != 0) {
- if (c == '^') {
- if ((c = *p++) == 0) {
+ while (0 != (c = *p++)) {
+ if ('^' == c) {
+ if (0 == (c = *p++)) {
return; /* oops, unexpected end of string, abort */
- } else if (c == '^') {
+ } else if ('^' == c) {
ClStrAppendChar(L, r, c);
} else {
ClStrAppendSubstCStr(L, r, GetSubstitutionStr(c));
}
- } else if (c == ';') {
- switch (*p++) {
+ } else if (';' == c) {
+ if (0 == (c = *p++)) {
+ return; /* oops, unexpected end of string, abort */
+ }
+
+ switch (c) {
case 'g': x = kCellCopyright; break;
case 'l':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'a': x = kCellApostrophe; break;
case 'l': x = kCellEllipsis; break;
case 's': x = kCellSemicolon; break;
#if NeedIntlChars
case 'E': x = kCellUpAE; break;
case 'e': x = kCellLoAE; break;
+ case '.': x = kCellMidDot; break;
#endif
- default: return; break;
+ default: x = kCellQuestion; break;
}
break;
case '[': x = kCellLeftDQuote; break;
@@ -1751,7 +1950,12 @@ LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
case 'O': x = kCellUpOStroke; break;
case 'Q': x = kCellUpLigatureOE; break;
case '`':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'A': x = kCellUpAGrave; break;
case 'E': x = kCellUpEGrave; break;
case 'I': x = kCellUpIGrave; break;
@@ -1762,26 +1966,38 @@ LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
case 'i': x = kCellLoIGrave; break;
case 'o': x = kCellLoOGrave; break;
case 'u': x = kCellLoUGrave; break;
- default: return; break;
+ default: x = kCellQuestion; break;
}
break;
case 'a': x = kCellLoARing; break;
case 'c': x = kCellLoCCedilla; break;
case 'd':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'A': x = kCellUpACedille; break;
case 'a': x = kCellLoACedille; break;
+ case 'D': x = kCellUpDStroke; break;
+ case 'd': x = kCellLoDStroke; break;
case 'E': x = kCellUpECedille; break;
case 'e': x = kCellLoECedille; break;
case 'L': x = kCellUpLBar; break;
case 'l': x = kCellLoLBar; break;
case 'Z': x = kCellUpZDot; break;
case 'z': x = kCellLoZDot; break;
- default: return; break;
+ default: x = kCellQuestion; break;
}
break;
case 'e':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'A': x = kCellUpAAcute; break;
case 'E': x = kCellUpEAcute; break;
case 'I': x = kCellUpIAcute; break;
@@ -1801,12 +2017,19 @@ LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
case 's': x = kCellLoSAcute; break;
case 'Z': x = kCellUpZAcute; break;
case 'z': x = kCellLoZAcute; break;
+ case 'Y': x = kCellUpYAcute; break;
+ case 'y': x = kCellLoYAcute; break;
- default: return; break;
+ default: x = kCellQuestion; break;
}
break;
case 'i':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'A': x = kCellUpACircumflex; break;
case 'E': x = kCellUpECircumflex; break;
case 'I': x = kCellUpICircumflex; break;
@@ -1817,25 +2040,35 @@ LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
case 'i': x = kCellLoICircumflex; break;
case 'o': x = kCellLoOCircumflex; break;
case 'u': x = kCellLoUCircumflex; break;
- default: return; break;
+ default: x = kCellQuestion; break;
}
break;
case 'n':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'A': x = kCellUpATilde; break;
case 'N': x = kCellUpNTilde; break;
case 'O': x = kCellUpOTilde; break;
case 'a': x = kCellLoATilde; break;
case 'n': x = kCellLoNTilde; break;
case 'o': x = kCellLoOTilde; break;
- default: return; break;
+ default: x = kCellQuestion; break;
}
break;
case 'o': x = kCellLoOStroke; break;
case 'q': x = kCellLoLigatureOE; break;
case 's': x = kCellSharpS; break;
case 'u':
- switch (*p++) {
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
case 'A': x = kCellUpADiaeresis; break;
case 'E': x = kCellUpEDiaeresis; break;
case 'I': x = kCellUpIDiaeresis; break;
@@ -1848,17 +2081,50 @@ LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
case 'o': x = kCellLoODiaeresis; break;
case 'u': x = kCellLoUDiaeresis; break;
case 'y': x = kCellLoYDiaeresis; break;
- default: return; break;
+ default: x = kCellQuestion; break;
+ }
+ break;
+ case 'v':
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
+ case 'C': x = kCellUpCCaron; break;
+ case 'c': x = kCellLoCCaron; break;
+ case 'e': x = kCellLoECaron; break;
+ case 'r': x = kCellLoRCaron; break;
+ case 's': x = kCellLoSCaron; break;
+ case 't': x = kCellLoTCaron; break;
+ case 'z': x = kCellLoZCaron; break;
+ default: x = kCellQuestion; break;
+ }
+ break;
+ case 'E':
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
+ case 'u': x = kCellLoUDblac; break;
+ default: x = kCellQuestion; break;
+ }
+ break;
+ case 'r':
+ if (0 == (c = *p++)) {
+ /* oops, unexpected end of string, abort */
+ return;
+ }
+
+ switch (c) {
+ case 'u': x = kCellLoURing; break;
+ default: x = kCellQuestion; break;
}
break;
#endif
- default:
- return;
- /*
- oops, unexpected char,
- maybe end of string, abort
- */
- break;
+ default: x = kCellQuestion; break;
}
ClStrAppendChar(L, r, x);
} else {
@@ -1937,15 +2203,29 @@ LOCALPROC ClStrAppendSubstCStr(int *L, ui3b *r, char *s)
case ';': x = kCellSemicolon; break;
case '?': x = kCellQuestion; break;
case '_': x = kCellUnderscore; break;
- default: x = kCellSpace; break;
+ case ' ': x = kCellSpace; break;
+ case '\047': x = kCellApostrophe; break;
+
+ default: x = kCellQuestion; break;
}
ClStrAppendChar(L, r, x);
}
}
}
+#define ClStrMaxLength 512
+
LOCALPROC ClStrFromSubstCStr(int *L, ui3b *r, char *s)
{
+ int n = ClStrSizeSubstCStr(s);
+
*L = 0;
- ClStrAppendSubstCStr(L, r, s);
+ if (n <= ClStrMaxLength) {
+ ClStrAppendSubstCStr(L, r, s);
+
+ if (n != *L) {
+ /* try to ensure mismatch is noticed */
+ *L = 0;
+ }
+ }
}
diff --git a/Mini vMac/mnvm_core/IWMEMDEV.c b/Mini vMac/mnvm_core/IWMEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/IWMEMDEV.h b/Mini vMac/mnvm_core/IWMEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/KBRDEMDV.c b/Mini vMac/mnvm_core/KBRDEMDV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/KBRDEMDV.h b/Mini vMac/mnvm_core/KBRDEMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/M68KITAB.c b/Mini vMac/mnvm_core/M68KITAB.c
old mode 100755
new mode 100644
index 2798b4c..9076856
--- a/Mini vMac/mnvm_core/M68KITAB.c
+++ b/Mini vMac/mnvm_core/M68KITAB.c
@@ -1947,7 +1947,7 @@ LOCALPROCUSEDONCE DeCode5(WorkR *p)
#if Use68020
if ((mode(p) == 7) && (reg(p) >= 2)) {
/* TRAPcc 0101cccc11111sss */
- p->DecOp.y.v[0].ArgDat = reg(p);
+ p->DecOp.y.v[1].ArgDat = reg(p);
p->MainClass = kIKindTRAPcc;
} else
#endif
diff --git a/Mini vMac/mnvm_core/M68KITAB.h b/Mini vMac/mnvm_core/M68KITAB.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/MINEM68K.c b/Mini vMac/mnvm_core/MINEM68K.c
old mode 100755
new mode 100644
index 4c30043..a656019
--- a/Mini vMac/mnvm_core/MINEM68K.c
+++ b/Mini vMac/mnvm_core/MINEM68K.c
@@ -747,11 +747,68 @@ LOCALVAR const func_pointer_t OpDispatch[kNumIKinds + 1] = {
0
};
-LOCALPROC m68k_go_MaxCycles(void)
+#ifndef WantBreakPoint
+#define WantBreakPoint 0
+#endif
+
+#if WantBreakPoint
+
+#define BreakPointAddress 0xD198
+
+LOCALPROC BreakPointAction(void)
+{
+ dbglog_StartLine();
+ dbglog_writeCStr("breakpoint A0=");
+ dbglog_writeHex(m68k_areg(0));
+ dbglog_writeCStr(" A1=");
+ dbglog_writeHex(m68k_areg(1));
+ dbglog_writeReturn();
+}
+
+#endif
+
+LOCALINLINEPROC DecodeNextInstruction(func_pointer_t *d, ui4rr *Cycles,
+ DecOpYR *y)
{
ui5r opcode;
DecOpR *p;
ui4rr MainClas;
+
+ opcode = nextiword();
+
+ p = &V_regs.disp_table[opcode];
+
+#if WantCloserCyc
+ V_regs.CurDecOp = p;
+#endif
+ MainClas = p->x.MainClas;
+ *Cycles = p->x.Cycles;
+ *y = p->y;
+#if WantDumpTable
+ DumpTable[MainClas] ++;
+#endif
+ *d = OpDispatch[MainClas];
+}
+
+LOCALINLINEPROC UnDecodeNextInstruction(ui4rr Cycles)
+{
+ V_MaxCyclesToGo += Cycles;
+
+ BackupPC();
+
+#if WantDumpTable
+ {
+ ui5r opcode = do_get_mem_word(V_pc_p);
+ DecOpR *p = &V_regs.disp_table[opcode];
+ ui4rr MainClas = p->x.MainClas;
+
+ DumpTable[MainClas] --;
+ }
+#endif
+}
+
+LOCALPROC m68k_go_MaxCycles(void)
+{
ui4rr Cycles;
DecOpYR y;
func_pointer_t d;
@@ -764,37 +821,36 @@ LOCALPROC m68k_go_MaxCycles(void)
Needed for trace flag to work.
*/
- goto label_enter;
+ DecodeNextInstruction(&d, &Cycles, &y);
+
+ V_MaxCyclesToGo -= Cycles;
do {
V_regs.CurDecOpY = y;
+
+#if WantDisasm || WantBreakPoint
+ {
+ CPTR pc = m68k_getpc() - 2;
+#if WantDisasm
+ DisasmOneOrSave(pc);
+#endif
+#if WantBreakPoint
+ if (BreakPointAddress == pc) {
+ BreakPointAction();
+ }
+#endif
+ }
+#endif
+
d();
-label_enter:
-
-#if WantDisasm
- DisasmOneOrSave(m68k_getpc());
-#endif
-
- opcode = nextiword();
-
- p = &V_regs.disp_table[opcode];
-
-#if WantCloserCyc
- V_regs.CurDecOp = p;
-#endif
- MainClas = p->x.MainClas;
- Cycles = p->x.Cycles;
- y = p->y;
-#if WantDumpTable
- DumpTable[MainClas] ++;
-#endif
- d = OpDispatch[MainClas];
+ DecodeNextInstruction(&d, &Cycles, &y);
} while (((si5rr)(V_MaxCyclesToGo -= Cycles)) > 0);
- V_regs.CurDecOpY = y;
- d();
+ /* abort instruction that have started to decode */
+
+ UnDecodeNextInstruction(Cycles);
}
FORWARDFUNC ui5r my_reg_call get_byte_ext(CPTR addr);
@@ -7670,7 +7726,7 @@ LOCALIPROC DoCodeTRAPcc(void)
{
/* TRAPcc 0101cccc11111sss */
/* ReportAbnormal("TRAPcc"); */
- switch (V_regs.CurDecOpY.v[0].ArgDat) {
+ switch (V_regs.CurDecOpY.v[1].ArgDat) {
case 2:
ReportAbnormalID(0x011C, "TRAPcc word data");
SkipiWord();
@@ -7726,12 +7782,12 @@ LOCALIPROC DoBitField(void)
{
ui5b tmp;
ui5b newtmp;
- si5b dsta;
+ CPTR dsta;
ui5b bf0;
ui3b bf1;
ui5b dstreg = V_regs.CurDecOpY.v[1].ArgDat;
ui4b extra = nextiword();
- si5b offset = ((extra & 0x0800) != 0)
+ ui5b offset = ((extra & 0x0800) != 0)
? m68k_dreg((extra >> 6) & 7)
: ((extra >> 6) & 0x1f);
ui5b width = ((extra & 0x0020) != 0)
@@ -7756,8 +7812,7 @@ LOCALIPROC DoBitField(void)
otherwise illegal and don't get here
*/
dsta = DecodeDst();
- dsta +=
- (offset >> 3) | (offset & 0x80000000 ? ~ 0x1fffffff : 0);
+ dsta += Ui5rASR(offset, 3);
offset &= 7;
offwid = offset + ((width == 0) ? 32 : width);
@@ -7827,7 +7882,7 @@ LOCALIPROC DoBitField(void)
case 5: /* BFFFO */
{
ui5b mask = 1 << ((width == 0) ? 31 : (width - 1));
- si5b i = offset;
+ ui5r i = offset;
while ((0 != mask) && (0 == (tmp & mask))) {
mask >>= 1;
diff --git a/Mini vMac/mnvm_core/MINEM68K.h b/Mini vMac/mnvm_core/MINEM68K.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/MOUSEMDV.c b/Mini vMac/mnvm_core/MOUSEMDV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/MOUSEMDV.h b/Mini vMac/mnvm_core/MOUSEMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/MYOSGLUE.h b/Mini vMac/mnvm_core/MYOSGLUE.h
old mode 100755
new mode 100644
index 764bd1b..50e1e9f
--- a/Mini vMac/mnvm_core/MYOSGLUE.h
+++ b/Mini vMac/mnvm_core/MYOSGLUE.h
@@ -34,9 +34,9 @@
#endif
-EXPORTOSGLUPROC WarnMsgCorruptedROM(void);
-EXPORTOSGLUPROC WarnMsgUnsupportedROM(void);
+#if WantAbnormalReports
EXPORTOSGLUPROC WarnMsgAbnormalID(ui4r id);
+#endif
#if dbglog_HAVE
EXPORTOSGLUPROC dbglog_writeCStr(char *s);
@@ -161,10 +161,14 @@ EXPORTOSGLUFUNC tMacErr HTCEimport(tPbuf *r);
EXPORTVAR(ui5b, OnTrueTime)
EXPORTVAR(ui5b, CurMacDateInSeconds)
+#if AutoLocation
EXPORTVAR(ui5b, CurMacLatitude)
EXPORTVAR(ui5b, CurMacLongitude)
+#endif
+#if AutoTimeZone
EXPORTVAR(ui5b, CurMacDelta)
/* (dlsDelta << 24) | (gmtDelta & 0x00FFFFFF) */
+#endif
#define vMacScreenNumPixels \
@@ -407,3 +411,31 @@ EXPORTOSGLUPROC MyEvtQOutDone(void);
#define MKC_Pause 0x71
#define MKC_AngleBracket 0x0A /* found on german keyboard */
+
+/*
+ Additional codes found in Apple headers
+
+ #define MKC_RightShift 0x3C
+ #define MKC_RightOption 0x3D
+ #define MKC_RightControl 0x3E
+ #define MKC_Function 0x3F
+
+ #define MKC_VolumeUp 0x48
+ #define MKC_VolumeDown 0x49
+ #define MKC_Mute 0x4A
+
+ #define MKC_F16 0x6A
+ #define MKC_F17 0x40
+ #define MKC_F18 0x4F
+ #define MKC_F19 0x50
+ #define MKC_F20 0x5A
+
+ #define MKC_F13 MKC_Print
+ #define MKC_F14 MKC_ScrollLock
+ #define MKC_F15 MKC_Pause
+*/
+
+/* not Apple key codes, only for Mini vMac */
+
+#define MKC_CM 0x80
+#define MKC_None 0xFF
diff --git a/Mini vMac/mnvm_core/PBUFSTDC.h b/Mini vMac/mnvm_core/PBUFSTDC.h
new file mode 100644
index 0000000..e15f37a
--- /dev/null
+++ b/Mini vMac/mnvm_core/PBUFSTDC.h
@@ -0,0 +1,121 @@
+/*
+ PBUFSTDC.h
+
+ Copyright (C) 2018 Paul C. Pratt
+
+ You can redistribute this file and/or modify it under the terms
+ of version 2 of the GNU General Public License as published by
+ the Free Software Foundation. You should have received a copy
+ of the license along with this file; see the file COPYING.
+
+ This file 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
+ license for more details.
+*/
+
+/*
+ Parameter BUFfers implemented with STanDard C library
+*/
+
+
+#if IncludePbufs
+LOCALVAR void *PbufDat[NumPbufs];
+#endif
+
+#if IncludePbufs
+LOCALFUNC tMacErr PbufNewFromPtr(void *p, ui5b count, tPbuf *r)
+{
+ tPbuf i;
+ tMacErr err;
+
+ if (! FirstFreePbuf(&i)) {
+ free(p);
+ err = mnvm_miscErr;
+ } else {
+ *r = i;
+ PbufDat[i] = p;
+ PbufNewNotify(i, count);
+ err = mnvm_noErr;
+ }
+
+ return err;
+}
+#endif
+
+#if IncludePbufs
+LOCALPROC PbufKillToPtr(void **p, ui5r *count, tPbuf r)
+{
+ *p = PbufDat[r];
+ *count = PbufSize[r];
+
+ PbufDisposeNotify(r);
+}
+#endif
+
+#if IncludePbufs
+GLOBALOSGLUFUNC tMacErr PbufNew(ui5b count, tPbuf *r)
+{
+ tMacErr err = mnvm_miscErr;
+
+ void *p = calloc(1, count);
+ if (NULL != p) {
+ err = PbufNewFromPtr(p, count, r);
+ }
+
+ return err;
+}
+#endif
+
+#if IncludePbufs
+GLOBALOSGLUPROC PbufDispose(tPbuf i)
+{
+ void *p;
+ ui5r count;
+
+ PbufKillToPtr(&p, &count, i);
+
+ free(p);
+}
+#endif
+
+#if IncludePbufs
+LOCALPROC UnInitPbufs(void)
+{
+ tPbuf i;
+
+ for (i = 0; i < NumPbufs; ++i) {
+ if (PbufIsAllocated(i)) {
+ PbufDispose(i);
+ }
+ }
+}
+#endif
+
+#if IncludePbufs
+#define PbufHaveLock 1
+#endif
+
+#if IncludePbufs
+LOCALFUNC ui3p PbufLock(tPbuf i)
+{
+ return (ui3p)PbufDat[i];
+}
+#endif
+
+#if IncludePbufs
+#define PbufUnlock(i)
+#endif
+
+#if IncludePbufs
+GLOBALOSGLUPROC PbufTransfer(ui3p Buffer,
+ tPbuf i, ui5r offset, ui5r count, blnr IsWrite)
+{
+ void *p = ((ui3p)PbufDat[i]) + offset;
+ if (IsWrite) {
+ (void) memcpy(p, Buffer, count);
+ } else {
+ (void) memcpy(Buffer, p, count);
+ }
+}
+#endif
diff --git a/Mini vMac/mnvm_core/PMUEMDEV.c b/Mini vMac/mnvm_core/PMUEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/PMUEMDEV.h b/Mini vMac/mnvm_core/PMUEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/PROGMAIN.c b/Mini vMac/mnvm_core/PROGMAIN.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/PROGMAIN.h b/Mini vMac/mnvm_core/PROGMAIN.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/ROMEMDEV.c b/Mini vMac/mnvm_core/ROMEMDEV.c
old mode 100755
new mode 100644
index e44aba3..c5ce081
--- a/Mini vMac/mnvm_core/ROMEMDEV.c
+++ b/Mini vMac/mnvm_core/ROMEMDEV.c
@@ -239,10 +239,6 @@ LOCALPROC Sony_Install(void)
}
#endif
-#ifndef CheckRomCheckSum
-#define CheckRomCheckSum 1
-#endif
-
#ifndef DisableRomCheck
#define DisableRomCheck 1
#endif
@@ -251,22 +247,6 @@ LOCALPROC Sony_Install(void)
#define DisableRamTest 1
#endif
-#if CheckRomCheckSum
-LOCALFUNC ui5r Calc_Checksum(void)
-{
- long int i;
- ui5b CheckSum = 0;
- ui3p p = 4 + ROM;
-
- for (i = (kCheckSumRom_Size - 4) >> 1; --i >= 0; ) {
- CheckSum += do_get_mem_word(p);
- p += 2;
- }
-
- return CheckSum;
-}
-#endif
-
#ifdef CurAltHappyMac
#include "HPMCHACK.h"
#endif
@@ -296,68 +276,6 @@ LOCALPROC ROMscrambleForMTB(void)
GLOBALFUNC blnr ROM_Init(void)
{
-#if CheckRomCheckSum
- ui5r CheckSum = Calc_Checksum();
-
-#if CurEmMd >= kEmMd_Twiggy
- if (CheckSum != do_get_mem_long(ROM)) {
- WarnMsgCorruptedROM();
- } else
-#endif
-#if CurEmMd <= kEmMd_Twig43
- if (CheckSum == 0x27F4E04B) {
- } else
-#elif CurEmMd <= kEmMd_Twiggy
- if (CheckSum == 0x2884371D) {
- } else
-#elif CurEmMd <= kEmMd_128K
- if (CheckSum == 0x28BA61CE) {
- } else
- if (CheckSum == 0x28BA4E50) {
- } else
-#elif CurEmMd <= kEmMd_Plus
- if (CheckSum == 0x4D1EEEE1) {
- /* Mac Plus ROM v 1, 'Lonely Hearts' */
- } else
- if (CheckSum == 0x4D1EEAE1) {
- /* Mac Plus ROM v 2, 'Lonely Heifers' */
- } else
- if (CheckSum == 0x4D1F8172) {
- /* Mac Plus ROM v 3, 'Loud Harmonicas' */
- } else
-#elif CurEmMd <= kEmMd_SE
- if (CheckSum == 0xB2E362A8) {
- } else
-#elif CurEmMd <= kEmMd_SEFDHD
- if (CheckSum == 0xB306E171) {
- } else
-#elif CurEmMd <= kEmMd_Classic
- if (CheckSum == 0xA49F9914) {
- } else
-#elif CurEmMd <= kEmMd_PB100
- if (CheckSum == 0x96645F9C) {
- } else
-#elif CurEmMd <= kEmMd_II
- if (CheckSum == 0x9779D2C4) {
- } else
- if (CheckSum == 0x97221136) {
- /* accept IIx ROM */
- } else
-#elif CurEmMd <= kEmMd_IIx
- if (CheckSum == 0x97221136) {
- } else
-#endif
- {
- WarnMsgUnsupportedROM();
- }
- /*
- Even if ROM is corrupt or unsupported, go ahead and
- try to run anyway. It shouldn't do any harm.
- */
-
-#endif /* CheckRomCheckSum */
-
-
#if DisableRomCheck
/* skip the rom checksum */
diff --git a/Mini vMac/mnvm_core/ROMEMDEV.h b/Mini vMac/mnvm_core/ROMEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/RTCEMDEV.c b/Mini vMac/mnvm_core/RTCEMDEV.c
old mode 100755
new mode 100644
index ff86104..acfedf5
--- a/Mini vMac/mnvm_core/RTCEMDEV.c
+++ b/Mini vMac/mnvm_core/RTCEMDEV.c
@@ -262,6 +262,37 @@ GLOBALFUNC blnr RTC_Init(void)
RTC.PARAMRAM[0x81] = 0x80;
#endif
+#if (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx)
+
+#define pr_HilColRedHi (pr_HilColRed >> 8)
+#if 0 != pr_HilColRedHi
+ RTC.PARAMRAM[0x82] = pr_HilColRedHi;
+#endif
+#define pr_HilColRedLo (pr_HilColRed & 0xFF)
+#if 0 != pr_HilColRedLo
+ RTC.PARAMRAM[0x83] = pr_HilColRedLo;
+#endif
+
+#define pr_HilColGreenHi (pr_HilColGreen >> 8)
+#if 0 != pr_HilColGreenHi
+ RTC.PARAMRAM[0x84] = pr_HilColGreenHi;
+#endif
+#define pr_HilColGreenLo (pr_HilColGreen & 0xFF)
+#if 0 != pr_HilColGreenLo
+ RTC.PARAMRAM[0x85] = pr_HilColGreenLo;
+#endif
+
+#define pr_HilColBlueHi (pr_HilColBlue >> 8)
+#if 0 != pr_HilColBlueHi
+ RTC.PARAMRAM[0x86] = pr_HilColBlueHi;
+#endif
+#define pr_HilColBlueLo (pr_HilColBlue & 0xFF)
+#if 0 != pr_HilColBlueLo
+ RTC.PARAMRAM[0x87] = pr_HilColBlueLo;
+#endif
+
+#endif /* (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) */
+
#if HaveXPRAM /* extended parameter ram initialized */
do_put_mem_long(&RTC.PARAMRAM[0xE4], CurMacLatitude);
do_put_mem_long(&RTC.PARAMRAM[0xE8], CurMacLongitude);
diff --git a/Mini vMac/mnvm_core/RTCEMDEV.h b/Mini vMac/mnvm_core/RTCEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCCEMDEV.c b/Mini vMac/mnvm_core/SCCEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCCEMDEV.h b/Mini vMac/mnvm_core/SCCEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCRNEMDV.c b/Mini vMac/mnvm_core/SCRNEMDV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCRNEMDV.h b/Mini vMac/mnvm_core/SCRNEMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCRNHACK.h b/Mini vMac/mnvm_core/SCRNHACK.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCRNMAPR.h b/Mini vMac/mnvm_core/SCRNMAPR.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCRNTRNS.h b/Mini vMac/mnvm_core/SCRNTRNS.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCSIEMDV.c b/Mini vMac/mnvm_core/SCSIEMDV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SCSIEMDV.h b/Mini vMac/mnvm_core/SCSIEMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SGLUALSA.h b/Mini vMac/mnvm_core/SGLUALSA.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SGLUDDSP.h b/Mini vMac/mnvm_core/SGLUDDSP.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SNDEMDEV.c b/Mini vMac/mnvm_core/SNDEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SNDEMDEV.h b/Mini vMac/mnvm_core/SNDEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SONYEMDV.c b/Mini vMac/mnvm_core/SONYEMDV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/SONYEMDV.h b/Mini vMac/mnvm_core/SONYEMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/STRCNENG.h b/Mini vMac/mnvm_core/STRCNENG.h
old mode 100755
new mode 100644
index 502a8c6..eddd61e
--- a/Mini vMac/mnvm_core/STRCNENG.h
+++ b/Mini vMac/mnvm_core/STRCNENG.h
@@ -24,7 +24,7 @@
#define kStrAboutMessage "To display information about this program, use the ;]A;} command of the ^p Control Mode. To learn about the Control Mode, see the ;[More Commands;ll;{ item in the ;[Special;{ menu."
#define kStrMoreCommandsTitle "More commands are available in the ^p Control Mode."
-#define kStrMoreCommandsMessage "To enter the Control Mode, press and hold down the ;]control;} key. You will remain in the Control Mode until you release the ;]control;} key. Type ;]H;} in the Control Mode to list available commands."
+#define kStrMoreCommandsMessage "To enter the Control Mode, press and hold down the ;]^c;} key. You will remain in the Control Mode until you release the ;]^c;} key. Type ;]H;} in the Control Mode to list available commands."
#define kStrTooManyImagesTitle "Too many Disk Images"
#define kStrTooManyImagesMessage "I can not mount that many Disk Images. Try ejecting one."
@@ -83,7 +83,7 @@
#define kStrDisclaimer " ^p is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;ls without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
/* Help Screen */
-#define kStrHowToLeaveControl "To leave the Control Mode, release the ;]control;} key."
+#define kStrHowToLeaveControl "To leave the Control Mode, release the ;]^c;} key."
#define kStrHowToPickACommand "Otherwise, type a letter. Available commands are:"
#define kStrCmdAbout "About (version information)"
#define kStrCmdOpenDiskImage "Open disk image;ll"
@@ -91,7 +91,7 @@
#define kStrCmdSpeedControl "Speed control;ll (^s)"
#define kStrCmdMagnifyToggle "Magnify toggle (^g)"
#define kStrCmdFullScrnToggle "Full screen toggle (^f)"
-#define kStrCmdCtrlKeyToggle "emulated ;]control;} Key toggle (^k)"
+#define kStrCmdCtrlKeyToggle "emulated ;]^m;} Key toggle (^k)"
#define kStrCmdReset "Reset"
#define kStrCmdInterrupt "Interrupt"
#define kStrCmdHelp "Help (show this page)"
@@ -115,7 +115,7 @@
#define kStrNewFullScreen "Full Screen is ^f."
-#define kStrNewCntrlKey "Emulated ;]control;} key ^k."
+#define kStrNewCntrlKey "Emulated ;]^m;} key ^k."
#define kStrCmdCancel "cancel"
@@ -162,3 +162,6 @@
#define kStrAppMenuItemHideOthers "Hide Others"
#define kStrAppMenuItemShowAll "Show All"
#define kStrAppMenuItemQuit "Quit ^p"
+
+#define kStrCmdCopyOptions "copy variation options"
+#define kStrHaveCopiedOptions "Variation options copied"
diff --git a/Mini vMac/mnvm_core/SYSDEPNS.h b/Mini vMac/mnvm_core/SYSDEPNS.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/VIA2EMDV.c b/Mini vMac/mnvm_core/VIA2EMDV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/VIA2EMDV.h b/Mini vMac/mnvm_core/VIA2EMDV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/VIAEMDEV.c b/Mini vMac/mnvm_core/VIAEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/VIAEMDEV.h b/Mini vMac/mnvm_core/VIAEMDEV.h
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/VIDEMDEV.c b/Mini vMac/mnvm_core/VIDEMDEV.c
old mode 100755
new mode 100644
diff --git a/Mini vMac/mnvm_core/VIDEMDEV.h b/Mini vMac/mnvm_core/VIDEMDEV.h
old mode 100755
new mode 100644