move stack to the top of the memory to make MrC's stack checks happy.

This commit is contained in:
Kelvin Sherlock 2014-12-15 08:56:26 -05:00
parent d79f498cfd
commit 0b76b9266e
1 changed files with 16 additions and 3 deletions

View File

@ -418,7 +418,7 @@ void GlobalInit()
// so put stack at top of memory?
// 0x0130 -- ApplLimit
memoryWriteLong(Flags.memorySize - 1, MacOS::ApplLimit);
memoryWriteLong(Flags.memorySize - Flags.stackSize - 1, MacOS::ApplLimit);
}
@ -429,6 +429,7 @@ void CreateStack()
uint32_t address;
uint16_t error;
#if 0
Flags.stackSize = (Flags.stackSize + 3) & ~0x03;
error = MM::Native::NewPtr(Flags.stackSize, true, address);
@ -437,7 +438,11 @@ void CreateStack()
fprintf(stderr, "Unable to allocate stack (%08x bytes)\n", Flags.stackSize);
exit(EX_CONFIG);
}
#else
address = Flags.memorySize - Flags.stackSize;
#endif
Flags.stackRange.first = address;
Flags.stackRange.second = address + Flags.stackSize;
@ -865,6 +870,9 @@ int main(int argc, char **argv)
exit(EX_USAGE);
}
Flags.stackSize = (Flags.stackSize + 0xff) & ~0xff;
Flags.memorySize = (Flags.memorySize + 0xff) & ~0xff;
if (Flags.stackSize < 0x100)
{
fprintf(stderr, "Invalid stack size\n");
@ -877,6 +885,12 @@ int main(int argc, char **argv)
exit(EX_CONFIG);
}
if (Flags.stackSize >= Flags.memorySize)
{
fprintf(stderr, "Invalid stack/ram size\n");
exit(EX_CONFIG);
}
std::string command(argv[0]); // InitMPW updates argv...
@ -903,7 +917,7 @@ int main(int argc, char **argv)
// should we subtract memory from the top
// for the stack vs allocating it?
MM::Init(Memory, MemorySize, kGlobalSize);
MM::Init(Memory, MemorySize - Flags.stackSize, kGlobalSize);
OS::Init();
MPW::Init(argc, argv, defines);
@ -911,7 +925,6 @@ int main(int argc, char **argv)
cpuStartup();
cpuSetModel(3,0);
CreateStack();
#ifdef LOADER_LOAD