Posts by aaronsgiles@corteximplant.com
 (DIR) Post #Ak85bAdkSgUpV4i7o8 by aaronsgiles@corteximplant.com
       2024-07-20T08:49:36Z
       
       1 likes, 0 repeats
       
       This might be my oldest usenet post, from June 1991 (end of my second year in college). The IIcx belonged to my future wife, and I did eventually invest in a memory upgrade that got it to 256 grayscales, which made it possible to play early Mac games that requires a "color" (i.e., non-monochrome) display.
       
 (DIR) Post #Akag260Oq1oXikK0zw by aaronsgiles@corteximplant.com
       2024-08-03T07:24:29Z
       
       0 likes, 0 repeats
       
       Rewatched Point Break for the first time in a bunch of years and man, that movie is still awesome. I used to call it a guilty pleasure, but nah, it's a solidly great early 90s actioner full stop. Kathryn Bigelow directs the hell out of it, just so many iconic action scenes. Keanu and Swayze are perfect for their roles.
       
 (DIR) Post #Akds1XeYLDZI6RU93Y by aaronsgiles@corteximplant.com
       2024-08-05T01:58:11Z
       
       0 likes, 0 repeats
       
       Sweet! Thought for sure it was done after the brilliant S3.
       
 (DIR) Post #AkdxxOO9Ray7w6DaOe by aaronsgiles@corteximplant.com
       2024-08-05T03:04:39Z
       
       0 likes, 0 repeats
       
       Apparently the local brewery changed the logo on their glasses. Guess my old glass (second photo) is now a collectible? 🤪
       
 (DIR) Post #AkpZMcPiGmVPiVOqa8 by aaronsgiles@corteximplant.com
       2024-08-10T00:58:44Z
       
       0 likes, 2 repeats
       
       Anyone got a lead on old QuickTime SDKs (Windows 95 era, like 4.0)? Initial forays at archive.org haven't turned up much, but maybe my search-fu there isn't up to the task.I see code loading the DLL named quicktime.qts, which I have and can fake an export table for, but then it calls the helpfully-named function theQuickTimeDispatcher, and who knows WTF that does. I suspect there's some header file magic to package and throw stuff over the wall, so the SDK is where I'd probably find that.Also feel the need to point out that it's bad enough when published sample code has variables named like theItem and myStuff, but shipping actual public functions with sickeningly twee names like that is truly vomit-inducing.
       
 (DIR) Post #AoYfyfJx8v6QD2VCqm by aaronsgiles@corteximplant.com
       2024-11-30T02:21:11Z
       
       0 likes, 1 repeats
       
       While I will not claim to have "conquered" DirectPlay emulation yet, I will say that I am pleased to report successful host/join of games in Outlaws, Jedi Knight, Mysteries of the Sith, Episode I Racer, X-Wing vs.TIE Fighter, X-Wing Alliance, and Monopoly Star Wars, so that's pretty solid.
       
 (DIR) Post #AoghkoIeiTLzAz61Bo by aaronsgiles@corteximplant.com
       2024-12-03T23:28:36Z
       
       0 likes, 1 repeats
       
       Yeah, GOG creating this "preservation program" and then including games which are no longer actually being preserved in their original form (including these two and The Secret of Monkey Island) is not really a good look.https://arstechnica.com/gaming/2024/12/blizzards-pulling-of-warcraft-i-ii-tests-gogs-new-preservation-program/
       
 (DIR) Post #Apju3tZIDzv0DKuY4W by aaronsgiles@corteximplant.com
       2025-01-04T07:14:49Z
       
       0 likes, 0 repeats
       
       Hmmm, MacOS networking question.If I host a game on my Windows machine, and from my Mac send a broadcast packet to query for sessions, the Windows box receives it and responds.If I host a game on my Mac, and from my Windows machine send a broadcast packet to query for sessions, the Mac seemingly never receives it. However, if I send a packet directly to the Mac's IP address it does respond.Is there some default setting/behavior on MacOS that would ignore broadcast packets? I checked the firewall and it seems to be disabled on my Mac.
       
 (DIR) Post #ApkM2sStddQ3DgDpvE by aaronsgiles@corteximplant.com
       2025-01-04T18:23:08Z
       
       0 likes, 0 repeats
       
       @shalien Good thought. However, I scanned the list of keys and don't see any that seem to impact basic socket-level networking. Maybe I'm blind.
       
 (DIR) Post #ApkMmiNVTPm5FxYf5c by aaronsgiles@corteximplant.com
       2025-01-04T18:31:55Z
       
       0 likes, 0 repeats
       
       @shalien Yeah, I'm listening on 47624 (since I'm emulating DirectPlay and that's the documented port for it).
       
 (DIR) Post #ApkWtXGqAV9mNMKajg by aaronsgiles@corteximplant.com
       2025-01-04T20:25:06Z
       
       0 likes, 0 repeats
       
       @shalien So running two instances on the Mac, the host still does not need broadcast packets sent by the other instance, so it's definitely some kind of limitation. While searching I saw some reference to Big Sur requiring apps to be hardened or something. Not sure the veracity of this info since as usual Apple's documentation seems to be lacking. https://forum.xojo.com/t/big-sur-udp-broadcast-not-working-normally/58832
       
 (DIR) Post #As15lhZgbmWHDLP3BY by aaronsgiles@corteximplant.com
       2025-03-13T14:46:42Z
       
       1 likes, 1 repeats
       
       When I was doing MacOS ports of LucasArts games back in the 90s, I needed to provide appropriate "About" screens from the Apple menu, so I got to exercise my Programmer Art skills. Recently a kind MacOS fan extracted them for posterity.
       
 (DIR) Post #As15lpJfpCSrDzyNKy by aaronsgiles@corteximplant.com
       2025-03-13T14:49:15Z
       
       0 likes, 0 repeats
       
       And then I went back and ported a few previously overlooked games, and also re-ported Indiana Jones and the Fate of Atlantis, which I actually totally forgot about until recently.
       
 (DIR) Post #As15lxNVqoHyEDpYQq by aaronsgiles@corteximplant.com
       2025-03-13T14:51:33Z
       
       0 likes, 0 repeats
       
       That DOTT one in particular was a ton of work because there wasn't a proper font for it. So all the text was created by painstakingly copy/pasting it letter-by-letter from game screenshots.
       
 (DIR) Post #At1NDEHhkirt96dF20 by aaronsgiles@corteximplant.com
       2025-04-12T07:52:10Z
       
       0 likes, 1 repeats
       
       Was recently reminded of my first "feature" in BYTE magazine, from November 1992.Weird to remember back in the day that JPEG decoding/viewing was a novelty. The OG browser NCSA Mosaic didn't show JPEGs inline; rather, it relied on external programs to display them. This became my early claim to fame, since I offered a simple JPEG viewing program that was free.The other novelty of the time was that by default JPEGView scaled images to fit your screen, rather than displaying large images at 1:1 and requiring you to scroll around. It seems kind of silly now, but at the time, it was unheard of to do this. As a result, I put a lot of effort into high quality optimized scaling algorithms, written as 68020 assembly QuickDraw hooks. At the time, 8-bit color was also the most common configuration, so I also spent lots of time tweaking the algorithms to pick the best 256 colors for each image. I created a variant of Floyd-Steinberg dithering that limited the error factor to help eliminate weird green pixels in, erm, "flesh toned" images, heh. It was actually picked up by a few other image processing programs of the era.Let's just say I got a lot of errors reports for images that didn't display well. When I asked the users to send me said images, I would often be ghosted. Wonder why. 🤔😜
       
 (DIR) Post #At44yzFLeRcqkeT6fY by aaronsgiles@corteximplant.com
       2025-04-14T00:10:24Z
       
       0 likes, 1 repeats
       
       Whelp, finally managed to get the SecuROM loader through all of its anti-debugging shenanigans.Beyond the various exception cleverness mentioned previously, the cms32_nt.dll DLL does some additional trickery in its DllMain function at process attach time. First it decompresses/decrypts some data into an allocated memory block, but along the way "accidentally" writes to the first page of the image. This, of course, is not an accident, but just a pretext to get dumped into a new exception handler.This new handler walks the exception chain at fs:[0] an extra level and presumes that the entry two levels in points to the exception handler of the module loading the cms32_nt.dll library. This means it expects Windows to have inserted its own exception handler in-between, so I had to simulate that behavior to make it happy.Another wrinkle is that it does a few operations using values in the Thread Environment Block (TEB). These seem to be red herrings, but because the TEB is accessed relative to FS:, it meant I had to add support for a few more FS-based operations. (When running Windows I run my x86 emulator in "flat" mode which presumes all segments are wide-open, based at 0. Since FS violates this assumption, all FS-based operations are special cases in this mode.)Once it got past that, however, it began doing interesting things. It scans the drives looking for a CD-ROM, then opens a handle to the volume. This was also something new, so I had to cheese up this functionality. Of course, I knew what was coming next: calls to DeviceIoControl() attempting to do low-level checks.At this point I've jumped through the first couple of hoops, but it's now issuing an IOCTL_SCSI_PASS_THROUGH, and it may be time to pause this investigation for a bit because cracking SCSI commands sounds less fun at the moment. Also I should probably fix some reported bugs and get a new beta out. I'll probably take another swing at it in the near future....
       
 (DIR) Post #AtGaMy2bnX4UyIOXTM by aaronsgiles@corteximplant.com
       2025-04-19T22:40:19Z
       
       1 likes, 0 repeats
       
       A surprising amount of work I end up doing with DREAMM is sorting out and identifying all the official releases of the various games. Currently The Secret of Monkey Island wins with the most known variants (just under 50).
       
 (DIR) Post #AtvzzMvmgib9iy9x5c by aaronsgiles@corteximplant.com
       2025-05-10T00:15:24Z
       
       0 likes, 1 repeats
       
       Another day, another LucasArts game that shipped with corrupt data. This time it's the Rebel Assault demo that shipped in Germany on the Covermount releases of Indiana Jones and the Last Crusade. The file LVL8\L8PLAY.ANM has 14 CD sectors of incorrect data starting at offset 0x11D8000.How do I know it's incorrect? Well, for one, I have a version of the same demo that shipped on non-Covermount CDs for comparison. Diffing the two makes it pretty clear that something is wrong, especially since the differences begin/end exactly on 2k boundaries.How do I know which one is correct? Neither version has the usual fill patterns of 0x55 or 0x00 that I often see on bad CD reads. The data actually looks kind of legit for both. However, the ANM file format uses a RIFF-like structure, so it's easy to find the first RIFF tag before the differing area and follow its link to the next tag, which is completely incorrect in the Covermount version.Interestingly, this must have a been a problem when they created the initial release, either a bad read from the original data, or some kind of initial corruption, as they produced two subsequent re-releases, each of which has the same corrupt file. Or I guess maybe they created the masters for the later releases by just copying the stuff that didn't change from first release, not realizing there was bad data there.Because early CD-ROMs were not totally reliable, I know that Vince Lee had lots of checksumming and other verification in his video playback engine. So I'm guessing the effect of this corrupt data is that the level exits early. Or it's possible the bad data was only hit if you went down a certain path. But it's quite likely that the engine didn't make it obvious that there was an issue.
       
 (DIR) Post #Auas1nknhf5I4jfufg by aaronsgiles@corteximplant.com
       2025-05-29T17:40:09Z
       
       0 likes, 0 repeats
       
       I have an older machine that can't upgrade to Win11, so I'd like to put some form of Linux on it, and I'm looking for suggestions for an appropriate distro to use.I am not a tweaker, so I just want the lowest-effort Linux that's going to work on the system and allow me to test my DREAMM emulator (so I'll want a working OpenGL driver).Specs:Pentium G3220 (2 cores) @ 3GHz8GB RAM2GB GeForce GTX 750TiDell BIOS
       
 (DIR) Post #AzMIfGQtrSQfINKYm8 by aaronsgiles@corteximplant.com
       2025-10-19T05:36:39Z
       
       1 likes, 0 repeats
       
       So it started a bunch of years ago with needing a basic expression evaluator for the MAME debugger. I found an article about infix-to-postfix conversion and wrote a simple expression compiler/executor based on the standard C operators and precedence. It supported a symbol table and allowed you to register functions that could be called to perform actions or get state.Flash forward to the dawn of DREAMM and I needed to evaluate some expressions, so I ported/cleaned up the engine I wrote for MAME, with essentially the same functionality.With DREAMM 4.0 I wanted to do more, and realized that if I could properly short-circuit the && and || operators, and add proper ternary ? : operator support, I could do quite a lot by combining those with the comma operator.After doing that, I realized it was a small step to add actual if/else keyword processing, and support multiple statements via semicolons instead of the comma hack.Then I realized that while loops were a pretty easy next step, and with some additional syntactic processing I could get C-style for loops working as well.Of course, I soon found a need for break/continue support, so added those keywords next.Then my scripts got complicated enough that I wanted to be able to define functions and call them (as opposed to calling external functions implemented by the engine). This need a bit more syntax, but was still a small step.Functions should be able to have parameters, so the next step was parsing the names of the parameters and mapping them to the items being passed. And functions need to be able to return results, so explicit return keyword support was added.And so at this point I've basically implemented a mostly complete C compiler/interpreter. 😜If I knew this is where I'd end up, perhaps it would have made more sense to find existing code and use that, but at this point I'm kind of committed to my own thing. Also lets me control the behaviors to work like I want them to.