Bolo Crashing on Mac Classic

So if I've ruled out bad memory by doing a RAM test and ruled out extensions by using a minimal system install... is there anything else that could be causing this?
Well, we know that the game doesn't usually have a problem with the trap table or system image, so either the pointer is pointing at the wrong location in memory, or *something* has messed with the memory contents. Possibly the app itself has got corrupted somehow?
 
Totally illogical thing id try if it was me: unplug your RAM card, start into 6.0.8, and see if it works. If it does, there’s some issue with the card or the RAM on it…or an intermittent connection.
 
Well, we know that the game doesn't usually have a problem with the trap table or system image, so either the pointer is pointing at the wrong location in memory, or *something* has messed with the memory contents. Possibly the app itself has got corrupted somehow?
I've tried multiple versions of the app itself, so I doubt it is that.
I guess the other option is: boot into System 7 and see if the problem goes away.
As LaPorta said, yeah I tried 7.1 and 7.5.5, same issue both times.
Totally illogical thing id try if it was me: unplug your RAM card, start into 6.0.8, and see if it works. If it does, there’s some issue with the card or the RAM on it…or an intermittent connection.
Will definitely give this a try next time I have the motivation to crack open the Classic ;)
 
I recently tried running Bolo on a Classic I installed an accelerator in. I had a crash when running the internet bolo buddy (I think it was an implemented trap error). I chalked it up to the accelerator but maybe it just doesn't run on the Classic. I haven't tried the game tutorial though. If the main game runs (ie in solo mode) are you trying to just run the tutorial to learn the game?

When I have a chance I'll fire up a regular (non accelerated classic) and see if those items run.
 
I recently tried running Bolo on a Classic I installed an accelerator in. I had a crash when running the internet bolo buddy (I think it was an implemented trap error). I chalked it up to the accelerator but maybe it just doesn't run on the Classic. I haven't tried the game tutorial though. If the main game runs (ie in solo mode) are you trying to just run the tutorial to learn the game?

When I have a chance I'll fire up a regular (non accelerated classic) and see if those items run.
Would be interesting if Bolo won't run on a Classic. I wonder what differences in the hardware would cause the incompatibility.
 
The Classic itself is basically identical to an SE, so the accelerator is likely the source of the incompatibility.
 
The Classic itself is basically identical to an SE, so the accelerator is likely the source of the incompatibility.
Again, Bolo runs perfectly fine on a Classic as has been noted throughout this thread. What crashed on my accelerated Classic is Internet Bolo Buddy (which is NOT the game, but a tool to find games
over the internet). Also the OP noted the tutorial crashes. Again, this isn't the same as saying the actual Bolo game crashes.
 
I have the opposite problem. I have a bog standard Mac Classic and an SE with an accelerator. The SE runs Bolo fine, but the Classic crashes.
 
I have the opposite problem. I have a bog standard Mac Classic and an SE with an accelerator. The SE runs Bolo fine, but the Classic crashes.
Where does Bolo crash for you on the Classic?
If it's the same spots as me that seems to be a little more evidence for the case of the Classic having some incompatibility with Bolo.
 
Bolo works correctly (if not swiftly) on a Mac Classic. I played Bolo on a Classic for years in the 90s.

I did not have Internet access at the time and only played local games using AppleTalk, so I never used Internet Bolo Buddy.

Interesting... so the same error, "Undefined A-Trap at 003477FE KevAppIsRunningCopyOfThisApp__FP19ProcessSe..." for both.

I suspect that's not the case. KevAppIsRunningCopyOfThisApp__FP19ProcessSerialNumber is not a symbol in Bolo, but it is a symbol in Internet Bolo Buddy. I suspect the Internet Bolo Buddy crash screenshot was taken first, and then Bolo was run without restarting in between. If so, MacsBug's output does not clear between programs, so the line about KevAppIsRunningCopyOfThisApp__FP19ProcessSerialNumber should be ignored for the Bolo crash, since that was from the Internet Bolo Buddy crash.

  • I've tried it with minimal 6.0.8, and also 7.1 and 7.5.5 with extensions. Same result in every OS.

I am able to reproduce the crash with Internet Bolo Buddy 2.0 in Mini vMac emulating a Mac Classic and running System 6.0.8. It crashes into MacsBug with an unimplemented trap error while in the KevAppIsRunningCopyOfThisApp__FP19ProcessSerialNumber function. By disassembling the code around the program counter with the ip pc command, I can see that the trap it's trying to use is _GetCurrentProcess. That's part of the Process Manager which was introduced in System 7, so Internet Bolo Buddy evidently requires System 7 or later, and was not programmed to fail gracefully on older systems.

If I try under System 7.0.1, it crashes in a different function, KevDevGetMainDeviceRect. It's still an unimplemented trap error, but here the trap it's trying to use is _GetMainDevice which is part of Color QuickDraw, so Internet Bolo Buddy evidently requires Color QuickDraw, which does not exist on a Mac Classic.

  • I installed MacsBug and that allowed me to somewhat get past the crashing in Bolo by continuing program execution every time it happened, but it didn't help with the Bolo Buddy.

Using MacsBug to continue past a crash will usually get you more and weirder crashes, especially if the crash was an unimplemented trap and the trap required parameters.

The Mac toolbox uses Pascal calling conventions which means that before calling a toolbox function, the program pushes the required parameters onto the stack. The act of calling a function with the JSR instruction then causes the current program counter to be pushed onto the stack, so that execution can return here after the function call is done. (Toolbox traps aren't called with JSR but the principle is the same.) The toolbox function is expected to have popped our parameters off the stack before it returns.

With an unimplemented trap, that means there's no code in the OS for that function, not even code to remove those parameters. After all, how could an earlier OS know how many parameters are expected by a future OS function? Hence, if you continue past an unimplemented trap error, the stack can have more items on it than it should. This may be what MacsBug means when it says "Warning: The command completed without using all parameters" in your screenshot. When your function eventually wants to return to its caller using the RTS instruction, it pops what it thinks is the return address off the stack, but actually something else is at that position of the stack and gets misinterpreted as a return address, so execution then jumps to a completely wrong location in memory. That location could contain unrelated code from your program, any other program (even one that is no longer running but whose memory has not yet been reused), the OS, non-code data, or random garbage. Depending on what's there, the CPU may continue executing these meaningless instructions for some time before it eventually reaches one that doesn't make sense and causes a crash, so the information MacsBug tells you about what function you're in when you crashed or what it was doing may be meaningless.

For example, _GetCurrentProcess requires one parameter: a memory location into which the process serial number will be written. Continuing past that unimplemented trap will corrupt the stack and lead to a crash.

Each application gets its own stack, so if you crash with an unimplemented trap error, you might be able to recover your computing session by force-quitting the program using MacsBug's escape to shell command es (after which you should immediately save work in other programs and restart properly), but trying to continue the program after a crash is likely to lock up the computer and require an immediate restart.

The error in your Bolo crash screenshot was:

Code:
Address Error at 0008CD92 'CODE 0005 011C Mac Support'+28B6
  'CODE 0005 011C Mac Support'
     +28B6  0008CD92  *ORI.B      #$6E40,D4

But looking in Bolo's CODE resource ID 5 around that offset, its code is actually:

Code:
+28B4   CMP.W $0004(A0),D0      ;B068 0004
+28B8   BGT.S Anon40+$0152      ;6E40

Offset +28B6 where it crashed is not the start of an instruction. It's in the middle of the CMP instruction. As a result, the CPU misinterprets the CMP operand 0004 as an ORI opcode, and misinterprets the BGT opcode 6E40 as ORI's operand. Knowing that this crashed with an address error isn't useful since this isn't an instruction that anyone ever intended it to run.

If you still get this crash when running Bolo, and you don't have any weird extensions installed, and you haven't run Internet Bolo Buddy or any other programs this session that might've messed up the system, and you haven't used MacsBug to continue past any earlier errors, then some investigation would be needed to determine what caused program execution to continue at this incorrect address. MacsBug's stack crawl commands sc6 and sc7 can be useful to show what functions were called, except that if the stack is corrupted it might not be completely accurate.
 
Last edited:
Back
Top