Hacker News new | past | comments | ask | show | jobs | submit login
Salt Lake 2002 – not enough memory/crashes to desktop after starting error (vogons.org)
140 points by DMell on May 22, 2023 | hide | past | favorite | 30 comments



This reminded me of work I did for Proton/Wine a few years back: finding a buffer overflow in the Rockstar Games Launcher installer NSIS script, having to implement an ancient deprecated Windows named pipe mode that RGL uses, reverse-engineering the VRAM display/detection in GTA IV…

If anyone wants to do this kind of reverse-engineering for a living, we’re hiring at CodeWeavers: https://www.codeweavers.com/about/jobs


Thanks for the often unrecognized work that goes in creating something like this.

Once in a while I try some of my father old games with my steam deck ('90s game like the OG Colin Mc Rae Rally or the early Need For Speed games)and I'm impressed how they work with basically no issues on current-gen devices.


Anyone else see the title and the site domain think, "Oh, was Salt Lake an obscure Intel architecture that was too stable and caused errors in programs because there weren't enough CPU errors during startup?"

The actual debugging war story (decompiling an old InstallShield installer and detailed examinations of a routine that presumed that 64MB was more VRAM that anyone would _ever_ need) was quite good too.


I love this super interesting debugging war story, on such a pointless target. There's something delicious about putting so much effort and coming to such a satisfying conclusion when working on such an obscure game.


I'm intrigued why MS decided to have GlobalMemoryStatus return a negative number if there is more than 4GB, rather than returning the maximum value.


When interpreted as an unsigned integer, it actually corresponds to the maximum value of almost 4 GB (0xFFFFFFFF). Note that the fields are declared as SIZE_T, which is unsigned. (Not sure if they always were.) The installer may be incorrectly assigning the value to a signed integer type.

The actual behavior of GlobalMemoryStatus is a bit more complicated, see https://ftp.zx.net.nz/pub/archive/ftp.microsoft.com/MISC/KB/....


I think it's worse than that. It returns the max value (2GB) when there is more than 2GB but less than 4GB, but a negative value if there is more than 4GB.


This actually depends on the LARGEMEMORYAWARE flag, see https://ftp.zx.net.nz/pub/archive/ftp.microsoft.com/MISC/KB/....


2^32 is 4294967296, or 4 GiB. Back before Windows ran on 64-bit machines, 4 GiB was as big a number as a standard int could represent. Updating it for 64-bit mode would mean breaking 32-bit programs, so "fixing" it isn't necessarily an upgrade.


I think OP was suggesting that instead of overflowing, the API could have instead returned 2^32 / 4 GiB.


I was thinking the same. I’m guessing that originally the lack of a bounds check was for efficiency’s sake (save a CPU cycle or two) and they chose not to update it assuming people would use the newer API.


> assuming people would use the newer API

that's a pretty bad assumption for an OS that is notorious for its backwards compatibility.


If I was more skilled with a debugger, I'd try to dig into why one of my favorite childhood games (an arcade WWII dogfighter game) runs just fine on Windows for ARM64, EXCEPT resetting inventory between each level, which makes final bosses much less fun, as part of the game is stacking powerups.


I'm going to take a wild stab at "probably some sort of piracy protection".


This wasn't a problem back in 2002. Back then, you could just leak however much memory you'd need to bring the total down to a positive number.

https://web.archive.org/web/20020207000806/https://www.php.n...


This is why “warning. Game needs 64 mb and you have -2gb continue y/n?” Is better than just dying out.


I think it depends on application. For a video game, that’s what you should do. However, that’s not really advisable for a database where broken invariants might lead to corruption.


In open source software where you can throw it over the fence and say "no warranty", perhaps.

In commercial software where your users will say "Y" even when they have 16MB of RAM, have an awful time, waste your money calling your support in that unsupported configuration (and forget to mention it), and leave negative reviews - no, hard blocks make a lot of sense.


How does the hard block prevent wasted support time and negative reviews?


"The program won't start" is straightforward and a short script will quickly identify the real problem.

"On Tuesdays when I alt-tab to Backgammon, my save file is corrupted" is much tougher to immediately identify as out of memory.

Telling users no at the beginning yields far fewer negative feelings than letting them get invested and then experience a major problem, blocker, or just constant random irritations


Was just going to post this but you beat me to it! This was a fun read, and introduced me to vogons where I think I'll be spending some time.


Vogons is a great place with lots of experts on vintage software and hardware. Definitely recommend it to anyone interested in either running old stuff or just on history/tidbits/how-things-worked like that post.


Just don't read their poetry.


Honestly the Vogons were only the third worst poets in the universe. If you can read awful human poetry like anything by Paula Nancy Millstone Jennings, they won't faze you.


In the original radio series, the name was Paul Neil Milne Johnstone… who was an actual schoolfriend, or at least was at school with, Douglas Adams. He didn't appreciate being name-checked in the Hitchhikers Guide to the Galaxy so it had to be changed. I believe that if you closely watch the fake video graphics in the BBC TV series, you can see some of Adams' best efforts to remember Johnstons actual "poetry" on screen.


I tried once, but I had to gnaw my own legs off to survive.


They also have a collection of old drivers that have become hard to find with time.


It was an amazing read! I still have so much more digging to do from it.


This is everything that is great about the Internet.


Elegant, with a wafting hint of the sublime




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: