I don’t know much about CPU and memory back then, but did they not have some kind of memory access debugging mode where it would match every access against the alloc map, understanding that it could be very slow, but would find some of this kind of bug? Come to think of it, do we even have that today?

There was such a tool, called Purify.

https://web.stanford.edu/class/cs343/resources/purify.pdf

Purify was great until Rational bought it and jacked up the price 10x.

This is what sanitizers do.

I know compilers have advanced, but I was wondering about a runtime debug check.

A sanitizer is that runtime debug check. The compiler just inserts those checks.

Okay. Then I have to assume that they didn't do it for SimCity! Thanks.

Sanitizers come with a lot of overhead, and the tech wasn't readily available in SimCity's day, certainly not for Windows 95.

I was imagining more like some kind of primitive CPU mode that sends every single RAM request to a software exception. Something you would normally have turned off but available for truly heavy duty debugging.

That sounds pretty similar to what Valgrind does, basically runs your program in a VM with that kind of instrumentation. The details of how it works are way past the boundaries of my own knowledge though :)

[deleted]

The operating system could effect this by not providing any page tables to the CPU, so every memory reference faults and the OS has to handle them all.