diff --git a/bin/loader.cpp b/bin/loader.cpp index 34ade2f..49f5161 100644 --- a/bin/loader.cpp +++ b/bin/loader.cpp @@ -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