Post At6SPI2V5ayfpLtFgW by foone@digipres.club
 (DIR) More posts by foone@digipres.club
 (DIR) Post #ApfB3ORyeDeL8M2ILI by foone@digipres.club
       2025-01-02T06:26:31Z
       
       0 likes, 0 repeats
       
       tandy put their sound chip on the 1A interrupt? THE TIME SERVICES?
       
 (DIR) Post #ApfB9uSIZ9xM8LIFvs by foone@digipres.club
       2025-01-02T06:27:44Z
       
       0 likes, 0 repeats
       
       I started reverse engineering Where in the World is Carmen Sandiego (Enhanced DOS edition) and I'm trying to find how it generates its random seeds so I search on int 1a and the first thing I find is it's doing TANDY SOUNDS?
       
 (DIR) Post #ApfBG9pOKBNRY24f9k by ch0ccyra1n@emeraldsocial.org
       2025-01-02T06:28:49Z
       
       0 likes, 0 repeats
       
       @foone I would love to see the Amiga version reverse engineered too. Maybe that's an excuse for me to learn reverse engineering lol
       
 (DIR) Post #ApfC4xIKgMblRgpjxQ by foone@digipres.club
       2025-01-02T06:38:01Z
       
       1 likes, 0 repeats
       
       Funny fact: I was trying to get an online assembler to spit out the machine code for "int 1a" but couldn't get it to, so I just went "fuck it, I can probably just do that in my head!"Turns out I can. My brain is weird.
       
 (DIR) Post #ApfCAaHLAUBTng3NMe by tess@mastodon.social
       2025-01-02T06:39:02Z
       
       0 likes, 0 repeats
       
       @foone this doesn't surprise me; the amount of work you would have had to put in to get decent three channel sound on an 8088 😬
       
 (DIR) Post #ApfCUIrPdd85ZQKRFI by azonenberg@ioc.exchange
       2025-01-02T06:42:34Z
       
       0 likes, 0 repeats
       
       @foone For what, i386?CD 1A
       
 (DIR) Post #ApfCYJBsLwr5khoHZY by foone@digipres.club
       2025-01-02T06:43:20Z
       
       0 likes, 0 repeats
       
       @azonenberg exactly yeah
       
 (DIR) Post #ApfCfpuf5fZLGYLd4q by azonenberg@ioc.exchange
       2025-01-02T06:44:39Z
       
       0 likes, 0 repeats
       
       @foone guess my brain is weird too.At one point I was thinking of getting car license plate 55 8B EC.But decide not to because I'd want 8B E5 5D C3 on the rear plate if I did that.
       
 (DIR) Post #ApfDjlwRtg163ucmQ4 by foone@digipres.club
       2025-01-02T06:56:37Z
       
       0 likes, 0 repeats
       
       Here's something I didn't know existed until just now: Where in the World is Carmen Sandiego checks your name against the list dossier list and rejects you if you use any of those names.
       
 (DIR) Post #ApfEA04pxsrpQn3REu by foone@digipres.club
       2025-01-02T07:01:21Z
       
       0 likes, 0 repeats
       
       PRONOUNS DETECTED: THIS GAME IS WOKEsadly they don't have they/them on here. What about the non-binary criminals, huh?
       
 (DIR) Post #ApfEN2jBQ9EvPu94Iy by foone@digipres.club
       2025-01-02T07:03:44Z
       
       0 likes, 0 repeats
       
       stretch goal: hack in at least on enby criminal with appropriate pronouns. maybe I'll just put myself in the game as one of the criminals you can apprehend
       
 (DIR) Post #ApfG4FmarGouJQuOjw by foone@digipres.club
       2025-01-02T07:22:41Z
       
       0 likes, 0 repeats
       
       I faked this screenshot but this is what I mean
       
 (DIR) Post #ApfGj4AqvLVUBJiUnw by foone@digipres.club
       2025-01-02T07:30:01Z
       
       0 likes, 0 repeats
       
       I think I might be able to do the hack I want by changing one byte.I'm trying to change it so it has "daily challenges", and I think I can fix that by just switching a INT 1A from subfunction 00 to 04, making it seed the random function with the date instead of the ticks-since-midnight
       
 (DIR) Post #ApfGpfhyHm1GKTMDi4 by shtrom@piaille.fr
       2025-01-02T07:31:14Z
       
       0 likes, 0 repeats
       
       @foone but... if you put yourself in as a criminal, you will no longer be allowed to play!
       
 (DIR) Post #ApfHupZn7jeUKvYU4G by foone@digipres.club
       2025-01-02T07:43:25Z
       
       0 likes, 0 repeats
       
       @shtrom that's the price you pay for representation
       
 (DIR) Post #ApfIb3GUcTmixCf2SO by dascandy@infosec.exchange
       2025-01-02T07:50:56Z
       
       0 likes, 0 repeats
       
       @foone Friend 🙂 I recommend using MS Paint or Gimp (with gamma correction turned off) to write raw machine code. 24-bit BMPs are excellent for 16-bit machine code; each opcode maps to exactly one color, including a 2-byte argument.Most MOVs are blue though, which is kind of sad.
       
 (DIR) Post #ApfJAZbYND1NOBRwzw by foone@digipres.club
       2025-01-02T07:57:29Z
       
       0 likes, 0 repeats
       
       @azonenberg cute
       
 (DIR) Post #ApfJrVzLh5lkcr3XfM by dramforever@mastodon.social
       2025-01-02T08:05:09Z
       
       0 likes, 0 repeats
       
       @foone i hate this why do i know this
       
 (DIR) Post #ApfJynrrcMLu6X1wki by foone@digipres.club
       2025-01-02T08:06:33Z
       
       0 likes, 0 repeats
       
       eh, I used 5 bytes. I don't need to impress anyone
       
 (DIR) Post #ApfNIITyJiiiQ0qGuG by foone@digipres.club
       2025-01-02T08:43:34Z
       
       0 likes, 0 repeats
       
       @raimue @azonenberg ooh, handy. easier than making a file for NASM to encode it with
       
 (DIR) Post #ApfTRck2xjF1aCBwIK by foone@digipres.club
       2025-01-02T09:52:35Z
       
       1 likes, 0 repeats
       
       NORMAL CODE       random(*(byte *)*(undefined2 *)                       (*(int *)(*(int *)0x39a6 * 0xe + local_c * 2 + 0x1d02) * 2 +                       *(int *)(local_c * 2 + 0x24b)) - 1);
       
 (DIR) Post #ApfThJ5FolkbFRabIW by foone@digipres.club
       2025-01-02T09:55:26Z
       
       0 likes, 0 repeats
       
       I found another set of pronouns!
       
 (DIR) Post #ApfTomChwporaddahE by foone@digipres.club
       2025-01-02T09:56:49Z
       
       1 likes, 0 repeats
       
       I haven't figured out how this game stores gender, but I'm gonna go out on a limb and say it's like this:male: 0female: 4
       
 (DIR) Post #ApfTx519snaKFxC8h6 by DotMaetrix@chitter.xyz
       2025-01-02T09:58:16Z
       
       0 likes, 0 repeats
       
       @foone fae suspect who's stolen all the other genders from the National Pronoun Repository
       
 (DIR) Post #ApfU1ESKjX1kgesyES by foone@digipres.club
       2025-01-02T09:59:04Z
       
       0 likes, 0 repeats
       
       why? because they have strings like:"He\0\0She\0""His\0Hers\0""Him\0Her\0"so they can do like:  printf("Follow %s to %s lair, and capture %s alive!", badguy->name, HIS+badguy->gender, HIM+badguy->gender);
       
 (DIR) Post #ApfU3Zp2GWLLX3ceFU by foone@digipres.club
       2025-01-02T09:59:28Z
       
       0 likes, 0 repeats
       
       @DotMaetrix You mean the Strategic National Pronoun Reserve?
       
 (DIR) Post #ApfUC3zA0EyxOmPA3c by foone@digipres.club
       2025-01-02T10:00:57Z
       
       1 likes, 0 repeats
       
       I like how the game only asks your name, not your gender.Player's don't have genders. Only thieves have genders.
       
 (DIR) Post #ApfUEyprbg5oIMRnCC by foone@digipres.club
       2025-01-02T10:01:13Z
       
       0 likes, 0 repeats
       
       It's a prequel to Disco Elysium, and your gender is set to COP
       
 (DIR) Post #ApfUKoKrYgOBT2j98K by ozzelot@mstdn.social
       2025-01-02T10:02:33Z
       
       0 likes, 0 repeats
       
       @foone Having a gender is NPC behavior
       
 (DIR) Post #ApfUdvJPqML0biADtg by jollysea@chaos.social
       2025-01-02T10:05:58Z
       
       0 likes, 0 repeats
       
       @foone you're french and you're a member of the Gendermarie
       
 (DIR) Post #ApfUnynlixnEKG9lCa by Larymir@chaos.social
       2025-01-02T10:07:44Z
       
       0 likes, 0 repeats
       
       @foone those thieves are pretty good if they stole *all* the genders!
       
 (DIR) Post #ApfUxTzr6yR1gJLEJc by foone@digipres.club
       2025-01-02T10:09:03Z
       
       0 likes, 0 repeats
       
       @Larymir When no one was looking, Foone took forty genders. She took 40 genders.And that's terrible.
       
 (DIR) Post #ApfVFhO04Ja2Q8JxC4 by foone@digipres.club
       2025-01-02T10:12:53Z
       
       0 likes, 0 repeats
       
       @jollysea I am definitely a member of the gender army
       
 (DIR) Post #ApfVIyBc3vI5OV5QZM by mkoek@mastodon.nl
       2025-01-02T10:13:24Z
       
       0 likes, 0 repeats
       
       @foone hope they’ll never have to translate (and that they do bounds checking on that gender value…)
       
 (DIR) Post #ApfVMSxG7dkLgp2Wp6 by foone@digipres.club
       2025-01-02T10:14:05Z
       
       0 likes, 0 repeats
       
       @mkoek yeah, it's only a game about world geography, why would anyone in nations that don't speak english want to play this?
       
 (DIR) Post #ApfVlPRAL0H81GvF4q by lydiafacts@chaos.social
       2025-01-02T10:18:31Z
       
       0 likes, 0 repeats
       
       @foone so it also supports e/im/is, he/er/er, e/e/e and no pronouns as genders 1, 5 and 3/6?
       
 (DIR) Post #ApfVoyb44UVXvyFlgm by foone@digipres.club
       2025-01-02T10:19:12Z
       
       0 likes, 0 repeats
       
       @lydiafacts technically yes! as well as large number of neopronouns used by indexing into other strings, possible?
       
 (DIR) Post #ApfWZHlz6i8mjERWnw by brouhaha@mastodon.social
       2025-01-02T10:27:31Z
       
       0 likes, 0 repeats
       
       @foone Gotta catch 'em all!
       
 (DIR) Post #ApfX5QWI7cnF7hQdXc by foone@digipres.club
       2025-01-02T10:33:26Z
       
       1 likes, 0 repeats
       
       why does ghidra's "search by instruction pattern" default to BINARY?what kind of a freak remembers the machine code for INT 21 on x86 in BINARY?it's CD21h, not 1100110100100001! what are you, some kind of nerd?
       
 (DIR) Post #ApfXQspm2sdl1GlyYi by foone@digipres.club
       2025-01-02T10:37:04Z
       
       0 likes, 0 repeats
       
       @mossfet it might! this is just theorizing based on memory layout
       
 (DIR) Post #ApfZKFEUZLgUMwISFU by KateKarnage@mastodon.me.uk
       2025-01-02T10:58:26Z
       
       0 likes, 0 repeats
       
       @foone ACAB. Assigned Cop At Birth. (Which is how I always read that acronym before remembering what it should read...)
       
 (DIR) Post #ApfZoVK1JYnCxLJMJs by ZILtoid1991@mastodon.world
       2025-01-02T11:03:55Z
       
       0 likes, 0 repeats
       
       @fooneIf a game wants to be "non-woke", it must never use any pronouns, and go "Hulk speak" and use the full names instead of the shorter pronouns.
       
 (DIR) Post #ApfaPwj6O6xAfFtf9M by foone@digipres.club
       2025-01-02T11:10:44Z
       
       1 likes, 0 repeats
       
       I love reversing a string and it's:void printString(char* str, int length);and I go look what calls it, reverse that function, and it's:void printStringSimple(char *str){   printString(str, strlen(str));}
       
 (DIR) Post #ApfaSjG0vFTll8cNKS by foone@digipres.club
       2025-01-02T11:11:16Z
       
       1 likes, 0 repeats
       
       it's like "aww, did someone have second thoughts about making PRINT always take a length, and got tired of having to manually calculate lengths so you just wrapped it?and your compiler didn't inline SHIT?
       
 (DIR) Post #ApfbJQaB5LnpBkB6pc by nathan@mastodon.e4b4.eu
       2025-01-02T11:20:38Z
       
       0 likes, 0 repeats
       
       @foone when i was younger and a lot more naive i used to think old games were all hyper-optimized, artfully crafted code wrote by ancient wizards who would eek out the most of every clock cycle.... yeah.
       
 (DIR) Post #Apffk8Qr4kSgX0o9w0 by chocobo13@mastodon.social
       2025-01-02T12:05:26Z
       
       0 likes, 0 repeats
       
       @fooneWanted: FooneSeveral counts of crimes against keyboards
       
 (DIR) Post #ApfggWUDng5xvkDxlQ by foone@digipres.club
       2025-01-02T12:20:56Z
       
       0 likes, 0 repeats
       
       oh those poor people of Bamako! Someone stole their.
       
 (DIR) Post #Apfh6sKpBtTNDmOWyO by LAbare@anticapitalist.party
       2025-01-02T12:25:41Z
       
       0 likes, 0 repeats
       
       @foone If someone stole their, that may be why there's no they/them in the game
       
 (DIR) Post #ApfhUJQ2etzdsj0iKe by timixretroplays@digipres.club
       2025-01-02T12:29:55Z
       
       0 likes, 0 repeats
       
       @foone stealing their  can only be the diabolical work of one Carmen Sandiego
       
 (DIR) Post #Apfj4I5tA8X09RItqC by foone@digipres.club
       2025-01-02T12:47:37Z
       
       0 likes, 0 repeats
       
       okay so when you start a game (well, technically when you restart), the game rolls 3 dice:0-31: where the shit was stolen from0-2: which item it is from that location0-8: whodunnit
       
 (DIR) Post #ApfjYfuhAP18iIYYxU by foone@digipres.club
       2025-01-02T12:53:10Z
       
       0 likes, 0 repeats
       
       like if you roll 0 on the first, you get Athens. For the second one, it's:0: mask of Priam1: Achilles's heel2: sibyl's secret.
       
 (DIR) Post #ApfjmptIrpb1iEeqga by foone@digipres.club
       2025-01-02T12:55:43Z
       
       0 likes, 0 repeats
       
       The last die is used as a lookup table into the dossier's list.It's got 1 added to it so you won't get Carmen Sandiego, as a rookie at least.
       
 (DIR) Post #ApflQkuWu2DTnupYOW by arensb@mastodon.social
       2025-01-02T13:14:06Z
       
       0 likes, 0 repeats
       
       @foone It’s been so long since I did any C programming, I can’t even tell the name of the variable being declared there.
       
 (DIR) Post #ApflWjuhWVnMRslQfY by arensb@mastodon.social
       2025-01-02T13:15:12Z
       
       0 likes, 0 repeats
       
       @foone Unlike Leather Goddesses of Phobos, where that’s the first thing the game asks.
       
 (DIR) Post #ApfmFgHjrPcEE6yAN6 by foone@digipres.club
       2025-01-02T13:23:20Z
       
       0 likes, 0 repeats
       
       so the game uses a pattern like this:char * RANKS="Rookie\0Sleuth\0Private Eye\0Investigator\0Ace Detective\0" and then latter they do:char* your_rank = select_string(RANKS, player->rank);and select_string is a confusing function to reverse engineer, but knowing the name I gave it gives it away: it advances through the list until it's on the nth string and returns it
       
 (DIR) Post #ApfmI1gZGUdJB6hXhg by foone@digipres.club
       2025-01-02T13:23:39Z
       
       0 likes, 0 repeats
       
       there is no check for going past the end.
       
 (DIR) Post #ApfmNAXjlC76661UjA by foone@digipres.club
       2025-01-02T13:24:43Z
       
       0 likes, 0 repeats
       
       so probably it uses the same trick for pronouns. The string I'm seeing is probably like: "He\0Him\She\0Her\0"
       
 (DIR) Post #ApfmWEjXY9U9hRrr9M by ciatmusings@raru.re
       2025-01-02T13:26:19Z
       
       0 likes, 0 repeats
       
       @foone gonna make a "Foone posts that sound deep and menacingly existential" account and become more known than Jesus in two weeks
       
 (DIR) Post #ApfmYqTWCMvXKfcLfU by ozzelot@mstdn.social
       2025-01-02T13:26:47Z
       
       0 likes, 0 repeats
       
       @foone You may therefore reach secret ranks, like Modern Major General, or ŸŸŸŸŸŸŸŸ.
       
 (DIR) Post #Apfn2oSMGhzRl7Meoa by foone@digipres.club
       2025-01-02T13:32:15Z
       
       1 likes, 0 repeats
       
       Ghidra is officially sexist. It'll automatically detect the word "Female" and mark it as a string, but not the word "Male"! Why? SEXISM! or the fact the default minimum length for strings is 5 characters, so "female" is long enough but "male" isn't.
       
 (DIR) Post #ApfnB96xMH3y8SKMjY by Siph@meemu.org
       2025-01-02T13:33:42Z
       
       0 likes, 0 repeats
       
       @foone clearly it believes that only women exist
       
 (DIR) Post #ApfnDd6wn4Yll1VX6G by futurebird@sauropods.win
       2025-01-02T13:34:31Z
       
       0 likes, 0 repeats
       
       @foone But aren't then "fellows" then a string and "gals" are not?
       
 (DIR) Post #ApfnGNGOAV7hTXETQ0 by adriano@lile.cl
       2025-01-02T13:35:00Z
       
       0 likes, 0 repeats
       
       @futurebird @foone "good" and "evil" aren't strings either. This just got metaphysical.
       
 (DIR) Post #ApfnTFpP7jI2BDkhmq by suetanvil@freeradical.zone
       2025-01-02T13:36:59Z
       
       0 likes, 0 repeats
       
       @foone A friend of mine many years ago told me about a similar trick on the Commodore 64. You turn the volume down, set the sound chip to be really noisy and then sample the output bits.  He claimed it was genuinely random.I wasn't really doing DOS PC stuff in the Tandy era, but IIRC, date+time clocks were not reliably up to date.
       
 (DIR) Post #ApfnXPE67gkOUEHYSO by Nine@chitter.xyz
       2025-01-02T13:37:42Z
       
       0 likes, 0 repeats
       
       @foone heruururhg the "male" isn't long enough heeuehehehehe ¬w¬
       
 (DIR) Post #ApfoylnQPumEG5PzfM by foone@digipres.club
       2025-01-02T13:53:50Z
       
       0 likes, 0 repeats
       
       correction: there IS a check for going over the end, it's just not used in every place select_string is called. so it's sometimes-safe
       
 (DIR) Post #Apfp239mKMHCyCRDBw by adriano@lile.cl
       2025-01-02T13:54:24Z
       
       0 likes, 0 repeats
       
       @foone The Best Kind of safe
       
 (DIR) Post #Apfp5EU8fIcIyOTkmG by gwenthekween@kitsunes.club
       2025-01-02T13:39:27.354Z
       
       0 likes, 0 repeats
       
       @foone@digipres.club You just made the funniest typo this year (so far at least). It doesn't detract in any way from the quality of your posting, but my brain is amused to think of the logical conclusion to a world where that wasn't a typo:Because of a missing 0, makes it sound like the game has the pronouns: "he", "him/she", "her". meaning either you're bigender, or you have an incomplete set of pronouns
       
 (DIR) Post #Apfp5Fmbq6zAzy81Cq by foone@digipres.club
       2025-01-02T13:54:53Z
       
       0 likes, 0 repeats
       
       @gwenthekween hah, whoops
       
 (DIR) Post #ApfqKIJinfHv9iLttQ by foone@digipres.club
       2025-01-02T14:08:57Z
       
       1 likes, 0 repeats
       
       they have invented a Pronoun Markup Language.It's \x80 for He/SheIt's \x81 for he/she It's \x82 for his/herso a string will be "\x80  mentioned \x81 liked seafood and offered me a ride in \x82 motorcycle"and it'll fill it out based on the pronouns of the suspect
       
 (DIR) Post #ApfqN89X2ziIV4wFRg by foone@digipres.club
       2025-01-02T14:09:21Z
       
       0 likes, 0 repeats
       
       @punissuer exactly! it's all english's fault.
       
 (DIR) Post #ApfqXKeDRjmU9G9g12 by foone@digipres.club
       2025-01-02T14:11:23Z
       
       0 likes, 0 repeats
       
       BOOOOOOOOOOOOO
       
 (DIR) Post #Apfqcy5aEQ2fvCdxcu by kate@federatedfandom.net
       2025-01-02T14:12:22Z
       
       0 likes, 0 repeats
       
       @foone ah yes the sometimes lifeboat
       
 (DIR) Post #Apfqx8Mpj8ZJagKO3c by foone@digipres.club
       2025-01-02T14:15:48Z
       
       0 likes, 0 repeats
       
       @tauon way ahead of you
       
 (DIR) Post #Apfr1XUkFG6ogH83n6 by foone@digipres.club
       2025-01-02T14:16:49Z
       
       1 likes, 0 repeats
       
       in trying to hack myself into the game, it glitched and said I had "Hobby: Male"no... I haven't done that in ages!
       
 (DIR) Post #ApfryEsf60TE2FJ2n2 by curtmack@floss.social
       2025-01-02T14:27:20Z
       
       0 likes, 0 repeats
       
       @foone There's a very obvious problem here, and I know we're all thinking it, so I'm just going to come out and say it.There's no capitalized His/Her option!! Now there's no way they could write the sentence "[His/Her] pet cat loves fugu," and the list of available hints pointing you to Japan is duller for it.
       
 (DIR) Post #Apft0VnpFdQ33Egx0a by foone@digipres.club
       2025-01-02T14:39:01Z
       
       1 likes, 2 repeats
       
       I'm in the game now
       
 (DIR) Post #ApftRyqBOeCIvhtNcO by peblo@owo.cafe
       2025-01-02T14:43:54Z
       
       0 likes, 0 repeats
       
       @foone I'm all into accidentally turning the death generator into some kind of limited picrew and I didn't think about the possibility until now!
       
 (DIR) Post #Apftmmf7s1qfEydlTs by fabrice@infosec.exchange
       2025-01-02T14:47:43Z
       
       0 likes, 0 repeats
       
       @foone the simulation is lying to you... it's NOT monday (even if it feels that way) and it's currently *checks clock* 15:47 in Paris.
       
 (DIR) Post #ApfxkEb3xCrqpFmOw4 by foone@digipres.club
       2025-01-02T15:32:04Z
       
       0 likes, 0 repeats
       
       I modified the game's NUM_GENDERS and found where it stores the database of criminals, so now you can find me if you search SEX=NB.
       
 (DIR) Post #ApfyhlJdwt3rO516iu by simrob@social.wub.site
       2025-01-02T15:42:49Z
       
       0 likes, 0 repeats
       
       @foone foone turing, the world’s preeminent nonbinary criminal
       
 (DIR) Post #ApfymEu3sxmUJFBbRg by kurtn@toot.bldrweb.org
       2025-01-02T15:43:34Z
       
       0 likes, 0 repeats
       
       @foone It says bad things about our society when "Auto" is #6  on a person's list of defining characteristics.
       
 (DIR) Post #ApfzVDzq6UZsWoL6A4 by Bel_tamtu@meemu.org
       2025-01-02T15:51:45Z
       
       0 likes, 0 repeats
       
       @foone Love it!
       
 (DIR) Post #ApfzgeZncW1W9MboVU by foone@digipres.club
       2025-01-02T15:53:51Z
       
       1 likes, 0 repeats
       
       so in addition to the 5 listed attributes (and their name), the game tracks one hidden attribute:food preference.There are only two options:00=Mexican01=Seafoodwhat an odd binary
       
 (DIR) Post #Apfzkp1ihxelifekqW by rotopenguin@mastodon.social
       2025-01-02T15:54:37Z
       
       0 likes, 0 repeats
       
       @foone ah, the same way that Intel stores privilege levels.
       
 (DIR) Post #ApfzpRBsl1inF0buOO by mmu_man@m.g3l.org
       2025-01-02T15:55:24Z
       
       0 likes, 0 repeats
       
       @foone which is odd because caring about length is usually a male prerogative…
       
 (DIR) Post #Apfzs2JvgGp0yac6mu by ClarusPlusPlus@peoplemaking.games
       2025-01-02T15:55:27Z
       
       0 likes, 0 repeats
       
       @foone still less weird than the gender binary
       
 (DIR) Post #Apg08q8cECuU7FKmoq by grrrr_shark@supervolcano.angryshark.eu
       2025-01-02T15:58:55Z
       
       0 likes, 0 repeats
       
       @foone I mean, in my world, these are the two categories of "correct food options on my birthday", soooo..
       
 (DIR) Post #Apg0wTUeh5q6MeJKro by scavello@m.epon.io
       2025-01-02T16:07:54Z
       
       0 likes, 0 repeats
       
       @foone “Yea we serve both kinds of food here. You want Mexican or Seafood?”
       
 (DIR) Post #Apg1PU3DhTpOUWJKMq by foone@digipres.club
       2025-01-02T16:13:06Z
       
       0 likes, 0 repeats
       
       @ClarusPlusPlus "makes more sense than the gender binary" is a pretty low bar to clear
       
 (DIR) Post #Apg1a42Alqm2zErkoK by lewdmachines@mastodon.social
       2025-01-02T16:14:56Z
       
       0 likes, 0 repeats
       
       @foone seems right to me
       
 (DIR) Post #Apg3qVyiqG9gCEDxPE by seb@androiddev.social
       2025-01-02T16:40:19Z
       
       0 likes, 0 repeats
       
       @foone the two genders of food™
       
 (DIR) Post #Apg8lA9R4Ddyp6VDPs by bonzoesc@m.bonzoesc.net
       2025-01-02T17:35:25Z
       
       0 likes, 0 repeats
       
       @foone the game developer’s mind could not comprehend this
       
 (DIR) Post #ApgAHh4SJ9AE8uFUrg by leonerd@fosstodon.org
       2025-01-02T17:52:30Z
       
       0 likes, 0 repeats
       
       @foone That's 2, but in hexadecimal
       
 (DIR) Post #ApgH5NLmVBKXBVQUZE by phi1997@mastodon.social
       2025-01-02T19:08:47Z
       
       0 likes, 0 repeats
       
       @fooneWhat did you do?
       
 (DIR) Post #ApgPfgr6G7Bfjku0qe by arensb@mastodon.social
       2025-01-02T20:44:55Z
       
       0 likes, 0 repeats
       
       @foone There was a tone when I would have thought that extremely clever. These days, I look at that and shake my head at how English-centric it is.
       
 (DIR) Post #ApgaKfpzwlUzzkZIDg by foone@digipres.club
       2025-01-02T22:44:21Z
       
       0 likes, 0 repeats
       
       @aburka 16, in fact.
       
 (DIR) Post #ApgigB87b5LElEoJU0 by AMS@infosec.exchange
       2025-01-03T00:17:56Z
       
       0 likes, 0 repeats
       
       @foone But now you can't play the game anymore.
       
 (DIR) Post #Apglb60rUjTnIygOye by foone@digipres.club
       2025-01-03T00:50:42Z
       
       0 likes, 0 repeats
       
       @AMS only if I give my full name. I can just go by "foone" and it won't notice
       
 (DIR) Post #AphuhIY6tKuEfWE7Si by ChartreuseK@social.restless.systems
       2025-01-03T14:07:20Z
       
       0 likes, 0 repeats
       
       @foone clearly we need the compromise of octal. 315 061
       
 (DIR) Post #Aphw3KYyBVHhEuhN8C by vxo@digipres.club
       2025-01-03T14:22:32Z
       
       0 likes, 0 repeats
       
       @foone i wonder if this is why the tandy sound stuff wasn't well supported by other software... I remember having a Sound Blaster in my Tandy 1000TL because not that much would use the onboard
       
 (DIR) Post #AphwMAIMaI0QtdubPE by foone@digipres.club
       2025-01-03T14:26:00Z
       
       0 likes, 0 repeats
       
       @ChartreuseK not even supported by this ghidra dialog. Binary or hex are the only options.And note the weird part where it's "search by instruction pattern" but typing in instructions isn't possible.You need the machine code for int 21h, not just "int 21h"
       
 (DIR) Post #ApiQ3wg1TYdC4XCspU by irina@critter.cafe
       2025-01-03T19:58:45Z
       
       0 likes, 0 repeats
       
       @foone i like mexican but don't like seafood, so it checks out
       
 (DIR) Post #Apl8AEFZprVuc0Yz9k by foone@digipres.club
       2025-01-05T03:22:25Z
       
       0 likes, 0 repeats
       
       I'm thinking I might do a "full"(ish) disassembly of this game. I've thought for a long while (basically ever since I knew Where In North Dakota is Carmen Sandiego? existed) that there should be an SDK for making your own version of this game, for whatever arbitrary geographical area you want.
       
 (DIR) Post #Apl8E8xDT6DHLQqFm4 by foone@digipres.club
       2025-01-05T03:23:11Z
       
       0 likes, 1 repeats
       
       and of course there's no reason you would have to limit yourself to reality. You could always do, like, "Where in Middle Earth is Carmen Sandiego?"
       
 (DIR) Post #Apl8H399W6iKCZoKMy by foone@digipres.club
       2025-01-05T03:23:40Z
       
       0 likes, 0 repeats
       
       you go to Rivendell and talk to an Elf who says the perp was talking about how he wanted to collect "his precious"
       
 (DIR) Post #Apl8US3CEgiPCkPnxQ by trochee@dair-community.social
       2025-01-05T03:26:01Z
       
       0 likes, 0 repeats
       
       @foone In that one, you have to be in Minas Morgul's Secret Service, on the heels of notorious jewelry thief Bilbao Bigend and his nephew Fresno
       
 (DIR) Post #Apl8nmEdPlhBJ8yr6u by deater78@mastodon.social
       2025-01-05T03:29:33Z
       
       0 likes, 1 repeats
       
       @foone
       
 (DIR) Post #Apl9AfA5sYCy1yllXU by Chip_Unicorn@im-in.space
       2025-01-05T03:33:35Z
       
       0 likes, 0 repeats
       
       @foone@set NUM_GENDERS=255 # Max for one byte.
       
 (DIR) Post #Apl9M8qBsDLTGQvvMm by ocdtrekkie@mastodon.social
       2025-01-05T03:35:44Z
       
       0 likes, 0 repeats
       
       @foone How badly would it play the Rockapella version of the theme?
       
 (DIR) Post #Apl9ShEguEBJfzWDvE by ajroach42@retro.social
       2025-01-05T03:36:55Z
       
       0 likes, 0 repeats
       
       @foone I want to make a Carmen Sandiego game. Dammit foone, I don't have time for more projects, I have to make toys and produce television.
       
 (DIR) Post #Apl9cTqvWGqD444Jea by foone@digipres.club
       2025-01-05T03:38:45Z
       
       0 likes, 0 repeats
       
       @deater78 nice!
       
 (DIR) Post #Apl9hYnyXAeDs86uHo by foone@digipres.club
       2025-01-05T03:39:41Z
       
       0 likes, 0 repeats
       
       I say "full" in quotes because I don't think I need to reverse the whole game to make it customizable, just enough to let you customize the locations, bad guys, hints, search types, etc.
       
 (DIR) Post #Apl9kT7M8V6T6MYvU8 by foone@digipres.club
       2025-01-05T03:40:08Z
       
       0 likes, 0 repeats
       
       sadly they didn't design the game as a completely empty husk that just loads datafiles. That would have been the smart thing to do, since they could then trivially make new versions.
       
 (DIR) Post #Apl9nPwiNuKK8LzVo0 by foone@digipres.club
       2025-01-05T03:40:43Z
       
       0 likes, 0 repeats
       
       maybe instead of fully decompiling it, I just hack it to grab data from external files, then make a tool for making those files
       
 (DIR) Post #AplAiVV8P3ffrwJTI8 by MedeaVanamonde@chaosfem.tw
       2025-01-05T03:50:59Z
       
       0 likes, 0 repeats
       
       @foone what now Player?
       
 (DIR) Post #AplB3bQlYJMqLAKS4u by growf@mastodon.org.uk
       2025-01-05T03:54:50Z
       
       0 likes, 0 repeats
       
       @foone Where in IKEA is Carmen Sandiego?
       
 (DIR) Post #AplEcLyJJuBKORHUSO by foone@digipres.club
       2025-01-05T04:34:39Z
       
       0 likes, 0 repeats
       
       @ckape great idea!
       
 (DIR) Post #AplH9t4jSjhOWiP1xw by njvack@ruby.social
       2025-01-05T05:03:07Z
       
       0 likes, 0 repeats
       
       @foone always wanted to do one based on Dante’s Inferno and call it “Where in the Hell is Carmen Sandiego”
       
 (DIR) Post #AplHHk3qrRMSt0jhho by peter@social.linss.com
       2025-01-05T05:04:25Z
       
       0 likes, 0 repeats
       
       @foone I always wanted to do one based on Dante’s Inferno, “Where in hell is Carmen Sandiego?”
       
 (DIR) Post #AplIXGsNEpPoxRKuh6 by lritter@mastodon.gamedev.place
       2025-01-05T05:18:34Z
       
       0 likes, 0 repeats
       
       @foone Where on this Hilbert Curve is Carmen Sandiego?
       
 (DIR) Post #AplN1r4zbAEHkG4sJk by rappscal@dosgame.club
       2025-01-05T06:08:50Z
       
       0 likes, 0 repeats
       
       @foone where in Zork is Carmen Sandiego?
       
 (DIR) Post #Aplo6PtgmpM3eQBqsK by foone@digipres.club
       2025-01-05T11:11:04Z
       
       1 likes, 0 repeats
       
       ahh, the PC. No one else ever thought XORing your VRAM was a good idea
       
 (DIR) Post #ApltUQMlC6wLpH3TBA by foone@digipres.club
       2025-01-05T12:12:42Z
       
       0 likes, 0 repeats
       
       turns out this version of the game has impressive support for older video cards. Here's Hercules support, which looks horrible without aspect ratio correction!
       
 (DIR) Post #Aplu7rFt9fDgVze0Q4 by foone@digipres.club
       2025-01-05T12:19:50Z
       
       1 likes, 0 repeats
       
       wow, this is actually the first game I've seen actually use the VGA bios call to set the VGA palette. (int 10h, AX=1012h)
       
 (DIR) Post #ApluACNLbKLIb7FVg0 by foone@digipres.club
       2025-01-05T12:20:06Z
       
       0 likes, 0 repeats
       
       everyone else just programs the VGA card directly.
       
 (DIR) Post #AplubANr7ADqEsLWbI by whvholst@eupolicy.social
       2025-01-05T12:20:36Z
       
       0 likes, 0 repeats
       
       @foone Now I remember playing it on CGA...
       
 (DIR) Post #AplubBObLsPfNThdOy by foone@digipres.club
       2025-01-05T12:25:06Z
       
       0 likes, 0 repeats
       
       @whvholst Did it look like this?
       
 (DIR) Post #ApludLpVWtYWJjK0wa by jernej__s@infosec.exchange
       2025-01-05T12:25:29Z
       
       0 likes, 0 repeats
       
       @foone IIRC QuickBasic's PALETTE call also went through BIOS.
       
 (DIR) Post #AplunIpVXRANuP4E6a by foone@digipres.club
       2025-01-05T12:27:20Z
       
       0 likes, 0 repeats
       
       @jernej__s That'd make sense. it was never terribly fast, and it needed to run on absolutely everything DOS did, so why not use the slow BIOS calls?
       
 (DIR) Post #AplvrKRHb4N80pDgjg by jernej__s@infosec.exchange
       2025-01-05T12:39:13Z
       
       0 likes, 0 repeats
       
       @foone It was also not documented well – you had to figure out that the value was R+256*G+65536*B yourself (while the range for R/G/B was 0-63, and any other value just threw an error).
       
 (DIR) Post #Aplx4lf9n5SgAEgJBw by foone@digipres.club
       2025-01-05T12:52:52Z
       
       0 likes, 0 repeats
       
       so when the game starts, it loads:ACME.DATCARMEN.DATMIDISND.DATDIGISND.DATCITIES.DATInterestingly, it uses the same code to load the last three, suggesting they're some kind of basic container format
       
 (DIR) Post #Apm0D6uKzDuSEVS4Aq by onlinejobsite@mastodon.social
       2025-01-05T13:27:50Z
       
       0 likes, 0 repeats
       
       @foone Are you need a job ? Apply here> https://smrturl.co/a/s944b4e1162/1706?s1=
       
 (DIR) Post #Apm0FpfzVbqnex2Um8 by onlinejobsite@mastodon.social
       2025-01-05T13:27:55Z
       
       0 likes, 0 repeats
       
       @foone Are you need a job ? Apply here> https://smrturl.co/a/s944b4e1162/1706?s1=
       
 (DIR) Post #Apm0RmkCEiVI2Zhohs by Datenegassie@mastodon.gamedev.place
       2025-01-05T13:30:37Z
       
       0 likes, 0 repeats
       
       @foone what if a mod was creepily specific like Where in 62 West Wallaby Street, Lancashire, England is Carmen Sandiego
       
 (DIR) Post #Apm1YezPZ9pjyHfGFM by artwaw@c.im
       2025-01-05T13:43:03Z
       
       0 likes, 0 repeats
       
       @foone Borland Pascal / C++ BGI driver stack methods also went through Bios. I was digging in that environment of late and found out that a) original support for graphics in BP7 was ending at VESA 16 colour driver (so 1024x768 but 16 colours), andb) some fanatic redid VESA drivers for newer cards, including fixing mouse cursor at higher res, and after a period of selling this package released it free for the people to use.So technically I could write now a DOS program operating in high res modes with 24bit colour.Makes me want to de-dust some skills, really.
       
 (DIR) Post #Apm22q09Bl8aoNOlea by whvholst@eupolicy.social
       2025-01-05T13:48:30Z
       
       0 likes, 0 repeats
       
       @foone It was around 1987, almost forty years ago, the telex looks familiar, the cartoon dialogs less so.
       
 (DIR) Post #Apm2t5WOjKUa0MOl6m by nobletrout@infosec.exchange
       2025-01-05T13:57:55Z
       
       0 likes, 0 repeats
       
       @foone growing up as a privileged kid with a full 256 colors I always wondered WTF Hercules was.
       
 (DIR) Post #Apm4CL8qyj9NuG85rM by foone@digipres.club
       2025-01-05T14:12:40Z
       
       0 likes, 0 repeats
       
       @whvholst probably this version then:https://archive.org/details/msdos_Where_in_the_World_is_Carmen_Sandiego_1985
       
 (DIR) Post #Apm5hH3mIwloB64Oum by whvholst@eupolicy.social
       2025-01-05T14:29:25Z
       
       0 likes, 0 repeats
       
       @foone Yes, the little copper cartoon was in there.
       
 (DIR) Post #Apm80LBxMli8P47B7w by foone@digipres.club
       2025-01-05T14:55:20Z
       
       0 likes, 0 repeats
       
       starting writing code to generate a JSON file of all the various switchable info in the EXE. Things like hobbies, hair colors, locations, etc.
       
 (DIR) Post #Apm8LZXPDuoQygGtGa by ryne@androiddev.social
       2025-01-05T14:59:07Z
       
       0 likes, 0 repeats
       
       @foone Where in The Magic School Bus Explores Carmen San Diego’s Body is Carmen San Diego?
       
 (DIR) Post #ApmTWZjquomzp6BIeW by xarph@rusty.cat
       2025-01-05T18:56:21Z
       
       0 likes, 0 repeats
       
       @foone
       
 (DIR) Post #Apn6gvjBuXBn87ngJM by foone@digipres.club
       2025-01-06T02:15:20Z
       
       0 likes, 0 repeats
       
       this blit function seems to take a useless first argument, a second argument that's the height, a third argument that's the width, and a fourth argument that doesn't seem to do anything. notice anything missing? like... a lot of things?
       
 (DIR) Post #Apn83o0UsncXnaMnpo by foone@digipres.club
       2025-01-06T02:30:43Z
       
       0 likes, 0 repeats
       
       I think this game might be doing something weird where blit-source positions and destination positions are all globals, for some fucking reason
       
 (DIR) Post #Apn8yPkZk2Sv4dueKO by foone@digipres.club
       2025-01-06T02:40:56Z
       
       0 likes, 0 repeats
       
       I think it stores them inside the VGA driver? huh
       
 (DIR) Post #Apn95voavKZMY3NRI0 by foone@digipres.club
       2025-01-06T02:42:15Z
       
       0 likes, 0 repeats
       
       the game internally has 5 drivers (as of 2.2, I have other versions here and they're different): CGA, Hercules, EGA, Tandy, VGA.
       
 (DIR) Post #Apn9BxSBkCs3MrlpI0 by crobbler@mastodon.social
       2025-01-06T02:43:19Z
       
       0 likes, 0 repeats
       
       @foone
       
 (DIR) Post #ApnA7Qo1HoPEuMO4UC by foone@digipres.club
       2025-01-06T02:53:45Z
       
       0 likes, 0 repeats
       
       WHY ARE THERE TWO STRCATS
       
 (DIR) Post #ApnAKXYtTkNRcsYyHY by cadey@pony.social
       2025-01-06T02:56:02Z
       
       1 likes, 2 repeats
       
       @foone
       
 (DIR) Post #ApnAXiR0MiVv709hui by hisham_hm@mastodon.social
       2025-01-06T02:58:28Z
       
       0 likes, 0 repeats
       
       @foone starcat and straycat
       
 (DIR) Post #ApnAcJAXjHgiCTe5K4 by foone@digipres.club
       2025-01-06T02:59:22Z
       
       0 likes, 0 repeats
       
       @cadey redundant strcats
       
 (DIR) Post #ApnB9QxnlpwlvlTud6 by chontorres@mastodon.social
       2025-01-06T03:05:16Z
       
       0 likes, 0 repeats
       
       @foone "Wild strcat, you're a real gone guy  I wish I could be as carefree and wild  But I got cat class, and I got cat style" - sophisticated strcat
       
 (DIR) Post #ApnBaMv2uq1lCp2IBk by foone@digipres.club
       2025-01-06T03:10:03Z
       
       0 likes, 0 repeats
       
       @rudi FUCK this is gonna make reverse engineering that much harder
       
 (DIR) Post #ApnCZXyOQpRH9am1VQ by foone@digipres.club
       2025-01-06T03:21:12Z
       
       0 likes, 0 repeats
       
       @dalias you have a point!
       
 (DIR) Post #ApnGkGCVFVPf2GjmPQ by RueNahcMohr@infosec.exchange
       2025-01-06T04:07:54Z
       
       0 likes, 0 repeats
       
       @foone one uses null terminated strings, the other uses strings terminated with 't'
       
 (DIR) Post #ApnGtE60Raa777yRTU by RueNahcMohr@infosec.exchange
       2025-01-06T04:09:35Z
       
       0 likes, 0 repeats
       
       @foone This is normal programming.
       
 (DIR) Post #ApnJfmWTwqK9hCddzs by jonhendry@iosdev.space
       2025-01-06T04:40:44Z
       
       0 likes, 0 repeats
       
       @foone “What do you call this act?”“The Two Strcats!”
       
 (DIR) Post #Apo33L02QVA5Dm4NPM by InkomTech@infosec.exchange
       2025-01-06T13:09:05Z
       
       0 likes, 0 repeats
       
       @foone complex system analyst: “why TF does the sys crash if I remove either of these identical functions?”
       
 (DIR) Post #AqN4JghNvxcEQa84Vk by foone@digipres.club
       2025-01-23T10:38:20Z
       
       0 likes, 0 repeats
       
       I've been working on cities.dat. I can now confirm that this game (Where in the World is Carmen Sandiego Enhanced (DOS, 1990)) has 30 cities, and they're the same 30 cities as the 1985 original.
       
 (DIR) Post #AqN5DCd8ulOlOAcHlg by foone@digipres.club
       2025-01-23T10:48:16Z
       
       1 likes, 0 repeats
       
       hmm. I could reuse my readString code between these two formats, but it would technically enable world cities to have pronouns.
       
 (DIR) Post #AqN7CP0HcqH5NmBcG0 by foone@digipres.club
       2025-01-23T11:10:36Z
       
       0 likes, 0 repeats
       
       this game uses a fun text encoding method: both-ended null terminated! It stores city names with a nul at the beginning because it reads them backwards. For some fucking reason.
       
 (DIR) Post #AqN7dGm2Kcmpg2KlLk by foone@digipres.club
       2025-01-23T11:15:27Z
       
       0 likes, 0 repeats
       
       why in the fuck is loading the data for Paris suddenly grabbing some random data out of Kigali? this implies some weird things about the compression, or the data normalization
       
 (DIR) Post #AqN8GHbjAKrrYZ7Bce by foone@digipres.club
       2025-01-23T11:22:29Z
       
       0 likes, 0 repeats
       
       going to moscow loads the same byte. strange.
       
 (DIR) Post #AqN9rAoTUQzt9XERBg by foone@digipres.club
       2025-01-23T11:40:20Z
       
       0 likes, 0 repeats
       
       they seek to position Xread 1 byteread 99 more bytesthen seek to position X+100now if you know how both math and random access files work, you'll realize something the programmers of Where in the World is Carmen Sandiego? Enhanced (1990, DOS) did not:THEY'RE SEEKING TO THE POSITION THEY'RE ALREADY AT
       
 (DIR) Post #AqNDHdE6lu4cfQWtsG by foone@digipres.club
       2025-01-23T12:18:45Z
       
       1 likes, 0 repeats
       
       I tried to corrupt the image to see if that'd tell me anything about how it was encoded, and it told me to put my hard drive back in.
       
 (DIR) Post #AqNFh6B0TOsjbNLm7c by foone@digipres.club
       2025-01-23T12:45:48Z
       
       0 likes, 0 repeats
       
       @jn nah nah, you just use malloc backwards so you don't need a free! p=malloc(1234);// do something with pmalloc(-p); // free p
       
 (DIR) Post #AqNJf8mgCsg0vWIFd2 by foone@digipres.club
       2025-01-23T13:30:14Z
       
       0 likes, 0 repeats
       
       the way this game does the investigations is interesting. so the basic gameplay is that you're in location X, you get 3 hints, which lead you to location Y, where the whole process repeats.But if you savescum to experience the same pursuit again, they'll always go through the same places... but if you don't get the hints, they won't be there.
       
 (DIR) Post #AqNJjthvglA1cDL7gG by foone@digipres.club
       2025-01-23T13:30:58Z
       
       0 likes, 0 repeats
       
       like the hints will always tell you to go to sri lanka, but if you go there without first having heard those hints, then he won't be in sri lanka
       
 (DIR) Post #AqNOilHU24bKxiFP96 by foone@digipres.club
       2025-01-23T14:26:52Z
       
       0 likes, 0 repeats
       
       @lumecolca just one will do.
       
 (DIR) Post #AqOR2FWQDQj1JycBiy by foone@digipres.club
       2025-01-24T02:27:33Z
       
       1 likes, 0 repeats
       
       Hah! the game apparently calculates some info ahead of time, but only a few steps. I changed who the suspect was by memory editing, and it didn't take effect... until I got to the third location.Since I went from a robbery by Fast Eddie B to one by Merey LaRoc, it means the pronouns changed when I got to London.Congrats on coming out as a trans woman, Merey.
       
 (DIR) Post #AqOZ4PBQ47qVUuKX2W by foone@digipres.club
       2025-01-24T03:57:34Z
       
       0 likes, 0 repeats
       
       ok I ran my dosspin tool to gibberish every byte of the save game file (it's only 102 bytes, so this is easy!) and none of them change where you start. very interesting... I'm guessing either the values are spread out too much for my gibberishing to reach, or you need to modify multiple bytes at once
       
 (DIR) Post #AqOdBCET0xaJAuFWSm by foone@digipres.club
       2025-01-24T04:43:39Z
       
       0 likes, 0 repeats
       
       huh, I found a hidden(?) key: if you hold down either shift, it skips all the pauses in the printing. so it goes at MAX CPU SPEED
       
 (DIR) Post #AqOdRH4KnesaoCB0aW by foone@digipres.club
       2025-01-24T04:46:32Z
       
       0 likes, 0 repeats
       
       ahh good. it's always fun to find code that looks like:do{ while(variable!=0);some one has a custom tick handler that's permutating a global!
       
 (DIR) Post #AqOdUVk4hZ6XBZFAPo by foone@digipres.club
       2025-01-24T04:46:59Z
       
       0 likes, 0 repeats
       
       can't be threading, this is 16-bit DOS. There is no threading.
       
 (DIR) Post #AqOdpjYuVy7O828pii by foone@digipres.club
       2025-01-24T04:50:36Z
       
       0 likes, 0 repeats
       
       @nil exactly!
       
 (DIR) Post #AqOefb77Acm6z7s2t6 by foone@digipres.club
       2025-01-24T05:00:19Z
       
       0 likes, 0 repeats
       
       @re exactly. I can steal what I want!
       
 (DIR) Post #AqOgX6EqHQtgonYpd2 by foone@digipres.club
       2025-01-24T05:21:12Z
       
       0 likes, 0 repeats
       
       looking at interrupts, and I found a bug.they set handlers for various CPU errors, but they accidentally set 10 (COPROCESSOR ERROR) twice, instead of the 05 (BOUND check)/10 (COPRPOCESSOR) interrupts they savesomeone copy-pasted and missed a bit
       
 (DIR) Post #AqOhwbSvPobOrSsBG4 by foone@digipres.club
       2025-01-24T05:37:01Z
       
       0 likes, 0 repeats
       
       @munin THEN I DESERVE WHAT I GET
       
 (DIR) Post #AqOkiCmyfJ9M8X4v4q by foone@digipres.club
       2025-01-24T06:08:01Z
       
       0 likes, 0 repeats
       
       I finally found the two helper functions they use to get and set vectors!all the 30 other places I've seen them set/get vectors, they do it manually, but hey, maybe they use the helpers too
       
 (DIR) Post #AqOklmj5VXwmSkxwps by foone@digipres.club
       2025-01-24T06:08:38Z
       
       0 likes, 0 repeats
       
       could also be that this is a compiler-provided bit of code, which is left in because the runtime needs it, or they just didn't eliminate dead code
       
 (DIR) Post #AqOqPJN4ZHrkm2Kri4 by foone@digipres.club
       2025-01-24T07:11:50Z
       
       0 likes, 0 repeats
       
       okay I've figured out there's a shared format they're using here. it chunks the file into chunks, which have a 16-bit ID (unique per file, but not globally), an offset, and 16-bit length
       
 (DIR) Post #AqOqZKSXNSDz2ofUwa by foone@digipres.club
       2025-01-24T07:13:38Z
       
       0 likes, 0 repeats
       
       so like, midisnd.dat will have 12 entries, and the first 11 are 200-500 bytes each, and then the last is 3k. presumably it's each song and then some config info?
       
 (DIR) Post #AqOqkKKIDCrVok3XmK by foone@digipres.club
       2025-01-24T07:15:41Z
       
       0 likes, 0 repeats
       
       cities.dat is very interesting. There's 30 cities in total, but 491 entries in it! So they must be doing something odd there, that doesn't divide equally. Maybe one city-chunk gives IDs of the others?
       
 (DIR) Post #AqOqsvcTRN6XnTf5cG by foone@digipres.club
       2025-01-24T07:17:12Z
       
       0 likes, 0 repeats
       
       idea for a test: it's easy to spot which chunk in a city is the image, because it's the biggest. Here's a way to determine if it's looking up by IDs or offsets/indices: swap the IDs of two images
       
 (DIR) Post #AqOrQZVs8dHx54cGw4 by foone@digipres.club
       2025-01-24T07:23:15Z
       
       0 likes, 0 repeats
       
       darn. turns out you can't just renumber the chunks, because they have to be in increasing order. so maybe I just need to leave the chunk indexes as is, and instead of moving the entries around, I move where they're pointing?
       
 (DIR) Post #AqOrqqcb9TalffI956 by foone@digipres.club
       2025-01-24T07:28:03Z
       
       0 likes, 0 repeats
       
       Bingo! I'm in Athens, but I'm seeing the image for Baghdad, and apparently with the Baghdad palette?So one of these other chunks must be the palette for a city. Or it selects from a selection of palettes? Maybe they've just got a couple defined.
       
 (DIR) Post #AqOsRWnXolWEu7tzqy by foone@digipres.club
       2025-01-24T07:34:38Z
       
       0 likes, 0 repeats
       
       okay I figured out the cities.dat IDs:They're all 1XXYY (in decimal):XX is the city number (0-29), YY is the sub-chunk-id. So like:YY=0: City nameYY=2: City image.They go between 00 and 22, and not all numbers need to be present.
       
 (DIR) Post #AqOx75T4DlUu7VOdw8 by foone@digipres.club
       2025-01-24T08:26:53Z
       
       0 likes, 0 repeats
       
       hmm, reading a buffer and then summing all the values of the bytes in it.suspicious behavior.
       
 (DIR) Post #AqOyHegQFIPKBlFKs4 by foone@digipres.club
       2025-01-24T08:40:00Z
       
       0 likes, 0 repeats
       
       okay I think it has a very simple 1-byte CRC check on the chunks, which are optionally not run. I can't make the math work but I'm reasonably sure that's what it is
       
 (DIR) Post #AqOypWF48WJ9r2b8me by foone@digipres.club
       2025-01-24T08:46:13Z
       
       0 likes, 0 repeats
       
       @kawa YEAH BUT YOU SHOULDN'T
       
 (DIR) Post #AqOytdAGLAyyTzJPCS by foone@digipres.club
       2025-01-24T08:46:55Z
       
       0 likes, 0 repeats
       
       @kawa I'LL PROBLEM YOUR ATTITUDE
       
 (DIR) Post #AqP2RJf1f4M7hWSI52 by foone@digipres.club
       2025-01-24T09:26:38Z
       
       0 likes, 0 repeats
       
       okay they're using a blit that's UI-aware, so it starts the coordinate system at (1,13). Fun!
       
 (DIR) Post #AqP3blNHZpEMVIhY4O by foone@digipres.club
       2025-01-24T09:39:46Z
       
       1 likes, 0 repeats
       
       looking into the blitting code I managed to steal the world map out of RAM
       
 (DIR) Post #AqP51Zbi39V5UXJwNE by foone@digipres.club
       2025-01-24T09:55:33Z
       
       0 likes, 0 repeats
       
       ugh. TODO for my eventual Good DOS Debugger:Instant Video display.I don't know exactly how DOSBox-X is doing it, but while single-stepping the debugger, the display never updates. I can dump the ram at A000:0000 and see what updated, but not on the screen in DOSBox
       
 (DIR) Post #AqP5UUSUGuUbv9nOQi by th@social.v.st
       2025-01-24T09:57:49Z
       
       0 likes, 0 repeats
       
       @foone someone alert CIAA (the Cartographers Industry Association of America)
       
 (DIR) Post #AqP78WoX26vOlQlK3k by foone@digipres.club
       2025-01-24T10:19:18Z
       
       0 likes, 0 repeats
       
       found a suspicious array, which goes:[ (-1,0), (-1,1), (0,1), (1,1), (1,0), (1,-1), (0, -1), (-1,-1), (0,0)]POP QUIZ: why does the font renderer need this array? how are they being "lazy" with this array?
       
 (DIR) Post #AqP7HShbgoYwcNmcBE by foone@digipres.club
       2025-01-24T10:20:54Z
       
       0 likes, 0 repeats
       
       there's also this code in the for-loop that steps through this array:if index==8:  color=whiteelse:  color=black
       
 (DIR) Post #AqP7KdVLz0oazQZ6vo by foone@digipres.club
       2025-01-24T10:21:20Z
       
       0 likes, 0 repeats
       
       @riley could be. I may have to see if I can hack it so that stepping the debugger tails the main window to update somehow
       
 (DIR) Post #AqP7NdXaJ17LyD2WES by foone@digipres.club
       2025-01-24T10:21:24Z
       
       0 likes, 0 repeats
       
       @th nice
       
 (DIR) Post #AqP83Naa0JG2ewLSCm by foone@digipres.club
       2025-01-24T10:29:32Z
       
       0 likes, 0 repeats
       
       @rappet Nope. Remember, it's in the font renderer
       
 (DIR) Post #AqP86o9fglIJvAOTKq by foone@digipres.club
       2025-01-24T10:29:42Z
       
       0 likes, 0 repeats
       
       @dividuum bingo!
       
 (DIR) Post #AqP8ABoKC4zu9m1ODY by foone@digipres.club
       2025-01-24T10:30:44Z
       
       0 likes, 0 repeats
       
       @dividuum got it:they're drawing the font 9 times, offset in each of the 8 directions, and in black. then they draw it in white, with no offset. It's a pixel-outliner! By drawing their pixel font offset in each direction, they get a black outline on their font.
       
 (DIR) Post #AqR7qP9lFmjk4XXADg by foone@digipres.club
       2025-01-25T09:36:34Z
       
       0 likes, 0 repeats
       
       The Answer to the DRM questions for Where in the world is Carmen Sandiego? Enhanced (DOS, 1990) are, in no particular order:23Kentdragoncalcium1796Warrenrevenue1792Willard1937CraterTanzaniaHartfordDuluthLondonGemSilentsqueaker
       
 (DIR) Post #AqVtD3EuNa9tEi583E by foone@digipres.club
       2025-01-27T16:46:14Z
       
       0 likes, 0 repeats
       
       if ((0x80 >> ((byte)local_4 & 7) &            (int)(char)*(byte *)((int)((int *)param_1 + 1) + (local_4 >> 3))) != 0) {COULD YOU USE SOME MORE CASTS MAYBE?
       
 (DIR) Post #AqVtQLzrx1KTAyOGeG by jordan@sometimes.social
       2025-01-27T16:48:35Z
       
       0 likes, 0 repeats
       
       @foone If I had any more casts, I'd be beloved long-running musical Cats
       
 (DIR) Post #AqVtodWWRGh2U4F5zU by foone@digipres.club
       2025-01-27T16:52:57Z
       
       0 likes, 0 repeats
       
       oh it's because ghidra's near/far pointer support is shit.I had param2 defined as a byte*32 and it was casting it to a byte* before using it
       
 (DIR) Post #AqVts2jx8loDYp9Iie by foone@digipres.club
       2025-01-27T16:53:26Z
       
       0 likes, 0 repeats
       
       if I define it as byte* and let the calling convention implicitly define it as 32bit, it doesn't do the cast
       
 (DIR) Post #AqVu0fkpyDP6sUg3sG by luisfcorreia@mastodon.social
       2025-01-27T16:55:02Z
       
       0 likes, 0 repeats
       
       @foone that reminds me when DoubleFine had to modify their Lua language version to support longer jumps for the first Psychonauts Game
       
 (DIR) Post #AqVuBf3UuRy7tZe50S by foone@digipres.club
       2025-01-27T16:57:07Z
       
       0 likes, 0 repeats
       
       @avesbury_rosetta no unicode, this game predates unicode. I'm not really sure why it's casting.
       
 (DIR) Post #AqVuiQJgjGhjjvqBiS by foone@digipres.club
       2025-01-27T17:03:01Z
       
       0 likes, 0 repeats
       
       well I found the decompression method. as always, I hate it. decompression routines are probably my least favorite thing to reverse engineer
       
 (DIR) Post #AqVvG4KB0AYlNW725Q by foone@digipres.club
       2025-01-27T17:09:09Z
       
       0 likes, 0 repeats
       
       I think this compression is specifically designed for ASCII text, which is annoying because they've also got compressed images... which probably use a DIFFERENT COMPRESSION!
       
 (DIR) Post #AqVvYSM2OhPt7PkcG8 by BRicker@fosstodon.org
       2025-01-27T17:12:31Z
       
       0 likes, 0 repeats
       
       @foone Frequency is the inverse of Duration? 🤪
       
 (DIR) Post #AqVw0Rd2gmvQya3C8u by foone@digipres.club
       2025-01-27T17:17:23Z
       
       0 likes, 0 repeats
       
       it looks like this chunk has length 256, which means 253 usable bytes, and it expands to 374 bytes. Not the greatest compression. a little better than just doing 6-bit ASCII.
       
 (DIR) Post #AqVx4ZOxpboQCCzqQC by foone@digipres.club
       2025-01-27T17:29:30Z
       
       0 likes, 0 repeats
       
       it's some kind of shifting bit mask but it starts at encoding values in 4 bits, then it can increase (or decrease, I guess) based on the input stream. then it has an output filter, where if the number specified wasn't 8 bits, it's actually an index into a predefined text table
       
 (DIR) Post #AqVx80OdvD7GmtU5zc by foone@digipres.club
       2025-01-27T17:30:10Z
       
       0 likes, 0 repeats
       
       the predefined table starts with 00, space, then:aetonisrdlhugfcwypbmk,vSA.T'PMxBCIRGDWHqE-zNFKL0j:51YJ8\U?73Q;2!469\r\nOVXZ()*+"#$%&<=>/@[]^_`
       
 (DIR) Post #AqVyhK3KvpN1q9vHVo by foone@digipres.club
       2025-01-27T17:47:30Z
       
       0 likes, 0 repeats
       
       given that the most comment symbols are near the beginning, this is presumably a sort of lazy huffman coding
       
 (DIR) Post #AqVykiYSI52ahU66Ai by foone@digipres.club
       2025-01-27T17:47:54Z
       
       0 likes, 0 repeats
       
       but I've got the predefined table, an input file, an output file, and now I need to write some python code to replicate this, hopefully without crying
       
 (DIR) Post #AqVzbu2wINRdgmiUvQ by JamesTrading@mastodon.social
       2025-01-27T17:57:51Z
       
       0 likes, 0 repeats
       
       @foone https://t.me/TradersEdgesignal
       
 (DIR) Post #AqW0SOADZ4jk9f9G2S by foone@digipres.club
       2025-01-27T18:07:17Z
       
       0 likes, 0 repeats
       
       "vs ses oa is isgit's tc eital and largest t u anhtA ttggh os nnotosnhrdsmarosogdn ss drte tishoth's isdhsceohtsnthminder of isgit's t nuorhdhtpast\x00 geru is slightltsn oaller than ndhd na and is o nnsgtgstbtst oa dotlalssaaolootbiaoht Sal gh, sonuhvia and sl ghh\x00isgit, ontvdn ss nhsiaalgarsnadlfnaatawlarst oadrlhrs i is a rugged land dooousr'casrbhe nrdsgs fountainsnht iah"
       
 (DIR) Post #AqW0W3dpoAJ5fFkcDY by foone@digipres.club
       2025-01-27T18:07:32Z
       
       0 likes, 0 repeats
       
       I mean, it's not 100% wrong, but it's not right either
       
 (DIR) Post #AqW0aCPX96ZY1K2K6i by gsuberland@chaos.social
       2025-01-27T18:08:27Z
       
       0 likes, 0 repeats
       
       @foone bames jond's having a stronk
       
 (DIR) Post #AqW0eLoa7kJULQjSKW by foone@digipres.club
       2025-01-27T18:09:09Z
       
       0 likes, 0 repeats
       
       that's supposed to read:"\x03Lima is Peru's capital and largest city. A well-known landmark is the Archbishop's Palace, a reminder of Peru's colonial past\x00Peru is slightly smaller than Alaska and is bordered by Ecuador, Colombia, Brazil, Bolivia and Chile\x00Peru, once the center of the mighty Incan Empire, is a rugged land dominated by the Andes Mountains. Forests and jungles cover half its land area\x00"
       
 (DIR) Post #AqW2zyzPrsqzpgF6G0 by foone@digipres.club
       2025-01-27T18:35:55Z
       
       1 likes, 0 repeats
       
       I somehow confused the dosbox-x debugger into not accepting letters anymore
       
 (DIR) Post #AqW4CkXN0r38jCmABE by foone@digipres.club
       2025-01-27T18:49:19Z
       
       0 likes, 0 repeats
       
       it was a trivial off-by-one error.I was doing saved_byte=input[3]but while I needed the 3rd byte, that's at input[2]
       
 (DIR) Post #AqW4It5u6wSl0Lr6lU by foone@digipres.club
       2025-01-27T18:50:20Z
       
       0 likes, 0 repeats
       
       @Lynne yep, same
       
 (DIR) Post #AqW6Il0SNhQXpSNCWe by foone@digipres.club
       2025-01-27T19:12:52Z
       
       1 likes, 0 repeats
       
       yess! C:\DOSBox-X\drive_c\carmen\py>python datfile.py cities.dat --dump=12803 --decompress"\x03Sydney, with a population of more than 3.3 million people, is Australia's largest city. A well-known sight is Sydney's distinctively designed Opera House\x00An island continent, Australia is nearly as large as the United States but has only one-fifteenth the population\x00The capital of Australia is Canberra, located in the southeast corner of the country between Sydney and Melbourne\x00"
       
 (DIR) Post #AqW6VKbFs4jLhAa5XE by foone@digipres.club
       2025-01-27T19:15:01Z
       
       0 likes, 0 repeats
       
       It starts with \x03 to indicate there's three strings: then it describes the city three times. at runtime it uses select_string function with a random input to select one of the three strings
       
 (DIR) Post #AqW78PJeGrLpcDyjzM by foone@digipres.club
       2025-01-27T19:22:14Z
       
       0 likes, 0 repeats
       
       okay now that I can decode the chunks (well, most of them) I can identify a lot more of them:00 Name and (some other info)01 ???02 Image03 City descriptions04 Items to steal10 ??? 11&up: Hints leading here
       
 (DIR) Post #AqW7DX6Wk1nzDcHkga by foone@digipres.club
       2025-01-27T19:23:05Z
       
       0 likes, 0 repeats
       
       So like, the 11 chunk for Tokyo says:b'\x05asked about the exchange rate for yen\x00was practicing Japanese characters\x00said\x81planned to take photographs of Mount Fuji\x00asked about tours of the Imperial Palace\x00was interested in visiting Shinto shrines\x00'So it picks from one of those 5 options
       
 (DIR) Post #AqW7L8jTEtofwn80HI by foone@digipres.club
       2025-01-27T19:23:46Z
       
       0 likes, 0 repeats
       
       and then 13 will be:b'\x02asked questions about Shinto rituals\x00said\x81was researching an archipelago\x00'
       
 (DIR) Post #AqW7OGSUyBVmmKgBl2 by foone@digipres.club
       2025-01-27T19:24:05Z
       
       0 likes, 0 repeats
       
       so when it sets up a city that has hints to lead to Tokyo, it picks 3 of these sets of questions, then picks a question in each set.
       
 (DIR) Post #AqW98YP6gK8ji4jHbk by n1vux@mastodon.radio
       2025-01-27T19:44:32Z
       
       0 likes, 0 repeats
       
       @foone ... because of course it is ... #FencepostAllTheThings
       
 (DIR) Post #AqWyh4PDIlgqTAzlbs by foone@digipres.club
       2025-01-28T05:22:22Z
       
       0 likes, 0 repeats
       
       tool that'd really be handy right now:a "live" version of binxelview, so I can step through the DOSBox-x debugger and see how memory is changing in real time, as an image.
       
 (DIR) Post #AqWyjnW8Y4e2xaXBMe by foone@digipres.club
       2025-01-28T05:22:36Z
       
       0 likes, 0 repeats
       
       that might not be TOO hard to hack in, hmm.
       
 (DIR) Post #AqWyn1ptlhHyEnJmvw by foone@digipres.club
       2025-01-28T05:23:33Z
       
       0 likes, 0 repeats
       
       I'm stepping through a high-level loading routine I don't understand yet, trying to figure out when it decompresses an image by watching the RAM it uses for file loading and decompression and spotting when the image appears
       
 (DIR) Post #AqWz8cjplJ32ljmLse by foone@digipres.club
       2025-01-28T05:27:27Z
       
       0 likes, 0 repeats
       
       sadly DOSBox-X's memory breakpoints don't let you set up a breakpoint that covers a whole 64k. you only get one byte. A shame.
       
 (DIR) Post #AqWzgDiRIkcB0c99Oq by foone@digipres.club
       2025-01-28T05:33:28Z
       
       0 likes, 0 repeats
       
       ooh, I'd also need to be able to watch multiple address ranges at once. that'd be sweet, multiple windows of visibility into RAM
       
 (DIR) Post #AqWzrSRsrgW7t6lGrY by foone@digipres.club
       2025-01-28T05:35:27Z
       
       0 likes, 0 repeats
       
       I'm in Paris, I look at work ram, I see the image of the Eiffel. I head to Rome, and before I load the next image, I can see that the Eiffle tower in workram now has the wrong stride. That's odd, because it means it had to rewrite the image in memory, the image it's about to unload.
       
 (DIR) Post #AqWzunrDiymP9dCvaq by foone@digipres.club
       2025-01-28T05:36:09Z
       
       0 likes, 0 repeats
       
       I think this might be the GUI system doing a screenshot of the image under a window, so it can restore it at the end. And it still does that here, even though we'll never need to restore that image: we're about to overwrite it
       
 (DIR) Post #AqX14Y9n3MYdJI6Z4i by foone@digipres.club
       2025-01-28T05:49:06Z
       
       0 likes, 0 repeats
       
       Here's what I want a tool to do:I hit a breakpoint in the debugger, I turn it on, set another breakpoint, and hit go. between those two breakpoints, every time a CALL instruction is hit, it dumps my selected memory region. If it's identical to the last dump, it's ignored.At the end, each dump is rendered as an image, and the combined set are an animation I can scroll through.
       
 (DIR) Post #AqX1Fa6EAg82WJhNU8 by foone@digipres.club
       2025-01-28T05:51:03Z
       
       0 likes, 0 repeats
       
       I need a higher order debugger. I'm doing too much shit manually
       
 (DIR) Post #AqX1JebpLX8hfIQAj2 by Ongion@mendeddrum.org
       2025-01-28T05:51:19Z
       
       0 likes, 0 repeats
       
       @foone not sure if you could use it for older programs, but have you ever used Time Travel Debugging?
       
 (DIR) Post #AqX1bxCYxUKMXcKWQK by foone@digipres.club
       2025-01-28T05:55:08Z
       
       0 likes, 0 repeats
       
       GOT YOU, YOU SON OF A BITCH! I FOUND YOU.
       
 (DIR) Post #AqX1g7IVMeNb0l5uVM by foone@digipres.club
       2025-01-28T05:55:47Z
       
       0 likes, 0 repeats
       
       @Ongion I've not, no. It sounds awesome, but sadly it doesn't seem it's usable for my usual ancient-software-reversing tasks
       
 (DIR) Post #AqX1m31YALTbUjzZAW by foone@digipres.club
       2025-01-28T05:56:52Z
       
       0 likes, 0 repeats
       
       it's in a function I already found, temporarily named "blit_related".I guess they don't decode the image until RIGHT before it needs to go up on the screen!
       
 (DIR) Post #AqX2AgzFEjXkO4fIiO by foone@digipres.club
       2025-01-28T06:01:21Z
       
       0 likes, 0 repeats
       
       if definitely decompresses and then blits the image as two parts, which aren't evenly sized, and it starts from the bottom
       
 (DIR) Post #AqX2Vq2QmM46XbErC4 by foone@digipres.club
       2025-01-28T06:05:12Z
       
       0 likes, 0 repeats
       
       I think they're just trying to keep their RAM usage down by not having both halves in memory at once
       
 (DIR) Post #AqX2tJlQQRalOUTppY by rakslice@mastodon.social
       2025-01-28T06:05:26Z
       
       0 likes, 0 repeats
       
       @foone this sounds like a job for whatever scripting the debugger supports?
       
 (DIR) Post #AqX2tKdJC6h45bgrom by foone@digipres.club
       2025-01-28T06:09:25Z
       
       0 likes, 0 repeats
       
       @rakslice new side project: add scripting to this debugger
       
 (DIR) Post #AqX3ZZYw4qMMYSmr6u by foone@digipres.club
       2025-01-28T06:17:05Z
       
       0 likes, 0 repeats
       
       wait is this image format vertically interlaced!?
       
 (DIR) Post #AqX4CxDQ4O8tCtV9bk by foone@digipres.club
       2025-01-28T06:23:28Z
       
       0 likes, 0 repeats
       
       It loads the half-width version, then a few functions later, it's been replaced with a full-width version. Strange!
       
 (DIR) Post #AqX4G0BVUFufHh3nMm by foone@digipres.club
       2025-01-28T06:24:10Z
       
       0 likes, 0 repeats
       
       wait no, the colors are wrong... I bet I'm seeing it decompress the binary, but that's using the full width of the bytes. it then gets expanded out to a 16-color image.
       
 (DIR) Post #AqX5CAh4ZXmifpYvCq by foone@digipres.club
       2025-01-28T06:35:16Z
       
       0 likes, 0 repeats
       
       well the good news is that I think I've found the decompress_image function. the bad news is that now I have to reverse engineer it :(
       
 (DIR) Post #AqX7aY4BWZ9o1O7ls8 by foone@digipres.club
       2025-01-28T07:02:02Z
       
       0 likes, 0 repeats
       
       it's currently doing the obvious thing for a decompressor to do:write the byte 04 every 69 bytes
       
 (DIR) Post #AqX8OxieQFLY3q5iIy by foone@digipres.club
       2025-01-28T07:11:10Z
       
       0 likes, 0 repeats
       
       oh sweet jesus, that's the left two pixels of the image.it's loading the image vertically! at least it's top to bottom.
       
 (DIR) Post #AqX8SD9XUrHknRDWca by foone@digipres.club
       2025-01-28T07:11:48Z
       
       0 likes, 0 repeats
       
       yeah, doom did that too, but Doom was a 2.5D image that had to do pseudo-raycasting. THIS GAME DOES NOT
       
 (DIR) Post #AqX9QGrCqxM9ezHT4C by benbe@social.chaotikum.org
       2025-01-28T07:22:30Z
       
       0 likes, 0 repeats
       
       @foone Nah, that source is not a casting show …
       
 (DIR) Post #AqXFOTjib4dakZJ5ZQ by coreworlder@dice.camp
       2025-01-28T08:29:26Z
       
       0 likes, 0 repeats
       
       @foone New image format that orders the pixels in a spiral anticlockwise from the top left to the centre.
       
 (DIR) Post #AqXU3qBnQB6fcM3bqC by lethal_guitar@mastodon.social
       2025-01-28T11:13:46Z
       
       0 likes, 0 repeats
       
       @foone it's the most efficient way to render images in planar EGA/VGA video modes. So clearly that's what you need to use for a game that's mostly static screens 😄
       
 (DIR) Post #AqXZBBNRXjxp81pE4O by foone@digipres.club
       2025-01-28T12:11:08Z
       
       0 likes, 0 repeats
       
       @lethal_guitar yeah. I guess it's faster to draw, but given that it's static scenes... The disk access is gonna take longer!
       
 (DIR) Post #AqZ9Pty4LMpkzDEbVg by foone@digipres.club
       2025-01-29T06:31:58Z
       
       0 likes, 0 repeats
       
       it allocates a 1024 byte buffer, then makes a pointer to the end of it, minus -0x42?why would you need a link to the end of a new, freshly cleared buffer, minus 62?
       
 (DIR) Post #AqZ9e3vc6kYtvqq2a0 by foone@digipres.club
       2025-01-29T06:34:31Z
       
       0 likes, 0 repeats
       
       I think the memory allocation system here is that every malloc returns 2 extra bytes, which is a pointer to the previous block. unless it's an odd number, in which case it's a free block. and pointer to the previous block, once you make it even again
       
 (DIR) Post #AqZ9gxmHQq35j1r81Q by foone@digipres.club
       2025-01-29T06:34:51Z
       
       0 likes, 0 repeats
       
       I hate dealing with the internals of memory allocation systems. I prefer to leave that to smarter people than me
       
 (DIR) Post #AqZ9mhJXYWaYOz9CeO by Flux@wandering.shop
       2025-01-29T06:35:56Z
       
       0 likes, 0 repeats
       
       @foone -66.  Off by one from 'A'.  I bet they start some sort of count or lookup table of some text and are saving the subtraction in the loop.
       
 (DIR) Post #AqZBRt5EnojAjNf7ce by foone@digipres.club
       2025-01-29T06:54:44Z
       
       0 likes, 1 repeats
       
       You see this little About dialog box? Guess how many times the DrawText function is called?Once! and just to draw "Where in the World is Carmen Sandiego?".The rest of the text is draw elsewhere, and I have no idea why.
       
 (DIR) Post #AqZCH3oGgLUilb7sC8 by kb9ens@mastodon.radio
       2025-01-29T07:03:53Z
       
       0 likes, 0 repeats
       
       @foone love your deep dives :) thanks for posting them.
       
 (DIR) Post #AqZCLq4TBoKfbYyzXk by nosword@localization.cafe
       2025-01-29T07:04:49Z
       
       0 likes, 0 repeats
       
       @foone “I saw the routine you’re looking for. It left in a GOTO statement flying a blue and white flag.”
       
 (DIR) Post #AqZCcRLONSHZq1oXHU by foone@digipres.club
       2025-01-29T07:07:54Z
       
       0 likes, 0 repeats
       
       correction: it calls it once to draw "Where in the World is Carmen Sandiego?" but that's unrelated to the one on screen WHAT?
       
 (DIR) Post #AqZCpjOkZ0Zhb3iqum by NosirrahSec@infosec.exchange
       2025-01-29T07:10:11Z
       
       0 likes, 0 repeats
       
       @foone maybe it's a template used by many games made by the devs, and it's done differently than the title and that's why it's somewhere else in the code?
       
 (DIR) Post #AqZEYV4QmRoG9586KW by Norgg@mastodon.social
       2025-01-29T07:29:28Z
       
       0 likes, 0 repeats
       
       @foone they made the whole thing a bitmap just to handle the o in broderbund?
       
 (DIR) Post #AqZHBJUfxKTtRX2adU by yomimono@wandering.shop
       2025-01-29T07:58:51Z
       
       0 likes, 0 repeats
       
       @foone it says who you can ask about it right there!
       
 (DIR) Post #AqZU1PH8u5JdsoJj9M by neogetz@mastodon.social
       2025-01-29T10:22:51Z
       
       0 likes, 0 repeats
       
       @foone wow that screenshot is a blast of nostalgia. I played that game so much
       
 (DIR) Post #AqbIhY5nha2uG1GD0y by foone@digipres.club
       2025-01-30T07:25:27Z
       
       0 likes, 0 repeats
       
       Ahh, it's using a different version of the DrawFont call: DrawFontN
       
 (DIR) Post #AqbIlbL3ZiOBU1KR8q by foone@digipres.club
       2025-01-30T07:26:10Z
       
       0 likes, 0 repeats
       
       the only problem with using Ghidra to hack children's games instead of, like, Serious Things like firmwares or malware or whatever, is sometimes you have to make a label named NUM_MOUNTAIN_CLIMBING_HINTS
       
 (DIR) Post #AqbIogv9HFkRfGgSPo by foone@digipres.club
       2025-01-30T07:26:24Z
       
       0 likes, 0 repeats
       
       (the number of mountain climbing hints is 3, by the way)
       
 (DIR) Post #AqbLeeAEyGl058e2zI by nycki@bark.lgbt
       2025-01-30T07:58:24Z
       
       0 likes, 0 repeats
       
       @foone Oh! I love that game! My first roguelite (?)
       
 (DIR) Post #AqbLwvTDMm8wy5EhMW by foone@digipres.club
       2025-01-30T08:01:51Z
       
       0 likes, 0 repeats
       
       I think I accidentally hacked my debugger
       
 (DIR) Post #AqbW0G1qNycX8if2kS by foone@digipres.club
       2025-01-30T09:54:29Z
       
       0 likes, 0 repeats
       
       It has a surprisingly robust UI engine. I swapped from BoldFont to SmalFont and the menu adapted perfectly.
       
 (DIR) Post #AqbWy5p1SmmWrJCBqC by foone@digipres.club
       2025-01-30T10:05:19Z
       
       0 likes, 0 repeats
       
       The game loads the BoldFont first, then the SmallFont, then the NormalFont.Annoyingly this isn't how they're laid out in memory:It's SmallFont, then BoldFont, then NormalFont
       
 (DIR) Post #AqbX7vyKwIgRCqFF32 by foone@digipres.club
       2025-01-30T10:07:03Z
       
       0 likes, 0 repeats
       
       Weirdly, swapping the NormalFont for the SmallFont causes the printer text to be VERTICAL, for reasons I do not remotely understand!
       
 (DIR) Post #AqbY5LjUnzmSBddPNo by Plan_A_to_Y@furry.engineer
       2025-01-30T10:17:46Z
       
       0 likes, 0 repeats
       
       @foone I dunno why but that gives me a "subtle thing that's wrong which leads into things turning to horror" vibe."Where in the world is Carmen Sandiego?"she's right behind yourun.
       
 (DIR) Post #AqbapGpnY7XCDwbhKa by foone@digipres.club
       2025-01-30T10:48:31Z
       
       1 likes, 0 repeats
       
       font_alloc = malloc(local_a);  if (font_alloc == (void *)0x0) {    font_alloc = (void *)0x0;  }  Ahh yes. remember, if you get a null pointer back from malloc(), make sure to set that variable to NULL so it won't be left as... NULL?
       
 (DIR) Post #Aqbb4VeSk2yAWRZUMS by ingram@mastodon.social
       2025-01-30T10:50:31Z
       
       0 likes, 0 repeats
       
       @foone that sort of nonsense makes me c-sick. Python has its flaws, but that ain't one of them
       
 (DIR) Post #AqbbWFZe6z6ulaXveK by pettter@social.accum.se
       2025-01-30T10:56:12Z
       
       0 likes, 0 repeats
       
       @foone I mean, it's good to double-check right?
       
 (DIR) Post #AqbcchJ411YaT9Qc1A by foone@digipres.club
       2025-01-30T11:08:17Z
       
       0 likes, 0 repeats
       
       @Plan_A_to_Y the last thing a young ACME sleuth hears is a chuckle and "nothing personal, kid"
       
 (DIR) Post #AqbfUIAFuQ3S2QzYUy by foone@digipres.club
       2025-01-30T11:40:47Z
       
       0 likes, 0 repeats
       
       The three fonts
       
 (DIR) Post #Aqbfm7E1JsdbK6FfHM by lritter@mastodon.gamedev.place
       2025-01-30T11:43:55Z
       
       0 likes, 0 repeats
       
       @foone hey. who nicked me brunch
       
 (DIR) Post #AqbfqtsKNil3MpO2CW by elonmusk38@mastodon.social
       2025-01-30T11:43:42Z
       
       0 likes, 0 repeats
       
       @foone You have been randomly selected as one of Elon musk's lucky winner for the Week kindly sending him s private message on telegram with the word TESLA via the link below 🔗 🔗 t.me/Elonmusk9872
       
 (DIR) Post #AqbgUlFTsGVGCCDuqm by dave@basilisk.gallery
       2025-01-30T11:51:58Z
       
       0 likes, 0 repeats
       
       @foone That 'small' font is a fitty.
       
 (DIR) Post #AqbgjO4WKLewer4TBo by viraptor@cyberplace.social
       2025-01-30T11:54:33Z
       
       0 likes, 0 repeats
       
       @foone inlined helper that optimises out to a null?
       
 (DIR) Post #AqbhtFqPs63RzUk7qy by foone@digipres.club
       2025-01-30T12:07:19Z
       
       0 likes, 0 repeats
       
       @viraptor probably. or a macro and a poor optimizer.
       
 (DIR) Post #AqbkSTJ60fAfmv4uUi by apmasell@mastodon.social
       2025-01-30T12:29:48Z
       
       0 likes, 0 repeats
       
       @foone why does bold, the largest of the fonts, not simply eat the others?
       
 (DIR) Post #AqbwH9uIzqGlsvr3Ca by lambdageek@mastodon.social
       2025-01-30T14:48:48Z
       
       0 likes, 0 repeats
       
       @foone I bet they had a debug build that did something fun inside that branch. Maybe they put some sentinel value there to track which caller of malloc was responsible.Not sure why their compiler didn't optimize the branch away in the release build, though
       
 (DIR) Post #AqbxMwsATGuP9QBBtQ by StompyRobot@mastodon.gamedev.place
       2025-01-30T15:00:59Z
       
       0 likes, 0 repeats
       
       @foone back in the day, not everybody who worked in programming was certain about how assignment worked. To be fair, I think we'll get more of those if we're all starting to rely on AI completions...
       
 (DIR) Post #Aqc1nUHXHLmU75xI2a by foone@digipres.club
       2025-01-30T15:50:45Z
       
       0 likes, 0 repeats
       
       @lambdageek well it's a compiler from 1988, it's not the best
       
 (DIR) Post #Aqd5IIWJYIvldJD8Vs by Plan_A_to_Y@furry.engineer
       2025-01-31T04:04:34Z
       
       0 likes, 0 repeats
       
       @foone A classic PC game reimagined as a modern crime thriller. Just where is Carmen Sandiego?And where will her gang strike next?Honestly, I'd watch the hell out of that.
       
 (DIR) Post #Aqd6v3BObt3XJST8i0 by foone@digipres.club
       2025-01-31T04:22:50Z
       
       0 likes, 0 repeats
       
       man, running on 4 hours of sleep is killing me.I can't even remember the MS-DOS interrupt to open a file! I know reading it is int 21 ah=3f, closing it is int 21 ah=3d, and I'll never forget that seeking is int 21 ah=42, but how do you open a file?I mean, not the int 21 ax=6c00 way, that one is only for DOS 4.0+, and obviously a game released in 1990 isn't gonna use that.
       
 (DIR) Post #Aqd70wZS6eAwXlX0Nc by foone@digipres.club
       2025-01-31T04:23:53Z
       
       0 likes, 0 repeats
       
       ahh, now that I've looked it up, it seems I was wrong! closing isn't 3D, that's 3E! 3D is open! no wonder I couldn't remember it, I had it confused with another call
       
 (DIR) Post #Aqd747Br51M0Ld0RRw by foone@digipres.club
       2025-01-31T04:24:14Z
       
       0 likes, 0 repeats
       
       looking it up took less than 10 seconds, but that's 10 seconds I'll never get back.
       
 (DIR) Post #Aqd7esMz93On66k0hc by foone@digipres.club
       2025-01-31T04:31:07Z
       
       0 likes, 0 repeats
       
       what the fuck do you mean that carmen.dat is opened on the first call to finish_draw_maybe()? like, I know there's a "maybe" in that name, but it's not THAT big of a maybe.
       
 (DIR) Post #Aqd7oLdxfulOUkCM9w by capeta@ursal.zone
       2025-01-31T04:28:45Z
       
       0 likes, 0 repeats
       
       @foone why aren't there tv shows with this specific kind of archeology ☹️
       
 (DIR) Post #Aqd7taym5JWNVPR4Do by scottmichaud@mastodon.gamedev.place
       2025-01-31T04:33:45Z
       
       0 likes, 0 repeats
       
       @foone The hit single from Carmen Dat Jepson... Call My Maybe().
       
 (DIR) Post #Aqd7w7Jkp2zmNeS1a4 by foone@digipres.club
       2025-01-31T04:34:02Z
       
       0 likes, 0 repeats
       
       oh thank god, that was a bit of confusion from manually tracking stack frames.it actually LoadDatFile, which makes a HELL of a lot more sense
       
 (DIR) Post #Aqd8MQVs4ondRXfEPI by foone@digipres.club
       2025-01-31T04:39:01Z
       
       0 likes, 0 repeats
       
       @scottmichaud  hah! I should get a sticker for my laptop that says "I'd rather be listening to Carly Rae Jepsen's hit 2015 album Emotion than this!"
       
 (DIR) Post #Aqd9pkH5mZEt5KINSC by foone@digipres.club
       2025-01-31T04:55:30Z
       
       0 likes, 0 repeats
       
       darn. Compiler Explorer doesn't support MS C Compiler 5.1 from 1988. Guess I gotta spin up an emulator again
       
 (DIR) Post #AqdATX9G0NotxQbSFM by foone@digipres.club
       2025-01-31T05:02:39Z
       
       0 likes, 0 repeats
       
       the annoying thing is that MS C Compiler 5.1 is the most mundane-ass DOS application. If I had a 32bit windows install rather than 64bit, it would probably just run natively on my system
       
 (DIR) Post #AqdAZYPoCvgpcmDRKa by foone@digipres.club
       2025-01-31T05:03:44Z
       
       1 likes, 0 repeats
       
       I'm gonna build an m.2 addon that's just a drop in x86 coprocessor. I know a lot of computers that could use an x86 processor these days.
       
 (DIR) Post #AqdAd19xnDlRdtSJyy by foone@digipres.club
       2025-01-31T05:04:07Z
       
       0 likes, 0 repeats
       
       it's like a Super Game Boy, but for your PC! Plug in this extra hardware, and now your system is compatible with a ton more software!
       
 (DIR) Post #AqdAgPN0EgyNb9AhSi by leo@60228.dev
       2025-01-31T05:04:35Z
       
       0 likes, 0 repeats
       
       @foone i wonder if you could use dosemu2 in wsl2
       
 (DIR) Post #AqdB0t8NHdsphY5wyu by foone@digipres.club
       2025-01-31T05:08:38Z
       
       0 likes, 0 repeats
       
       @rudi if I could get a SunPCI for my current computer I'd be so happy. Even at those same specs, honestly.
       
 (DIR) Post #AqdCIS54hnLWxpUTD6 by foone@digipres.club
       2025-01-31T05:22:41Z
       
       0 likes, 0 repeats
       
       note to self: figure out how Ghidra fidb works, so I can apply it to MSC5.1 (which was sadly overlooked by the developers of ghidra)
       
 (DIR) Post #AqdCp6zQ8v2j6hQ32O by foone@digipres.club
       2025-01-31T05:29:01Z
       
       0 likes, 0 repeats
       
       note to self:maybe do it for everything MS-DOS.
       
 (DIR) Post #AqdCxFfLli3CKgueMi by timixretroplays@digipres.club
       2025-01-31T05:30:24Z
       
       0 likes, 0 repeats
       
       @foone por que no los MS-DOS?
       
 (DIR) Post #AqdE0lhxC3hcX3N5N2 by foone@digipres.club
       2025-01-31T05:42:20Z
       
       0 likes, 0 repeats
       
       okay don't change that byte, GOT IT.I think I failed to load the cursor, which caused it to corrupt the mouse cursor catastrophically
       
 (DIR) Post #AqdEG9e2TlQB7AsQiW by foone@digipres.club
       2025-01-31T05:45:04Z
       
       0 likes, 0 repeats
       
       a fun kind of reverse engineering tactic that I practice probably more than I should is a version of The Scream Test (which is the principle that the easiest way to find who "owns" a server is to turn it off and see who screams): if you don't know what some code does, break it. and see what screams.
       
 (DIR) Post #AqdF4ZwuxBw9Axke8m by hirvox@mastodon.online
       2025-01-31T05:54:10Z
       
       0 likes, 0 repeats
       
       @foone There's also a corollary in testing: If you change something important and your tests don't scream bloody murder, your tests lack coverage.
       
 (DIR) Post #AqdGBYrTUptxmd6BxA by kinsale42@mstdn.games
       2025-01-31T06:06:38Z
       
       0 likes, 0 repeats
       
       @foone that's pretty much how we test lighting circuits in new construction too. Flip the breakers and see which one trips, or see what lights didn't come on.
       
 (DIR) Post #AqdRkhf5rs8OhyGdAO by andy@social.dvsn.net
       2025-01-31T08:16:09Z
       
       0 likes, 0 repeats
       
       @foone I may have employed this tactic in a previous role, with interesting results.
       
 (DIR) Post #AqdeyLYS9nzNbPzt7g by foone@digipres.club
       2025-01-31T10:44:20Z
       
       0 likes, 0 repeats
       
       I think I may have found unused graphics for a feature that'd change the Acme Detective Agency at the beginning to be season-specific. There's summer, fall, winter, and spring variants, but the game seems to be hardcoded to summer
       
 (DIR) Post #AqdfZWLN0U79mKbUFE by foone@digipres.club
       2025-01-31T10:51:05Z
       
       0 likes, 0 repeats
       
       no, this should be working. Hmm. Maybe they just missed one of the four images?
       
 (DIR) Post #AqdgPbkAAvYtaI2Nge by foone@digipres.club
       2025-01-31T11:00:24Z
       
       0 likes, 1 repeats
       
       nope! it's fully functional, based on the system date.
       
 (DIR) Post #AqdgiXTmFo1brROs8e by philbetts@mastodon.social
       2025-01-31T11:03:50Z
       
       0 likes, 0 repeats
       
       @foone Foone, you do the work of the angels. 🙏
       
 (DIR) Post #Aqdl9v8smcNosywH2G by foone@digipres.club
       2025-01-31T11:53:41Z
       
       0 likes, 0 repeats
       
       I did a little looking into the contents of MIDISND.DATIt's got 12 small tracks, and each of them is a valid MIDI file if you remove the first byte.
       
 (DIR) Post #AqdloL27wM06lj3GQS by rkarman@mastodon.world
       2025-01-31T12:00:54Z
       
       0 likes, 0 repeats
       
       @foone Not me clicking one of the thumbnails to get a larger image, only to realize that these were of course full-sized already... 🤦‍♂️
       
 (DIR) Post #AqdlrilOAXOFEcprUW by foone@digipres.club
       2025-01-31T12:01:12Z
       
       0 likes, 0 repeats
       
       @tomasino I've definitely seen that image, but I don't think it's in this version: There's only three "you're close" animations: A gun, a knife, and an axe.
       
 (DIR) Post #AqdmGJFu8xKlMapkdk by foone@digipres.club
       2025-01-31T12:06:05Z
       
       0 likes, 0 repeats
       
       heh. I was checking different near-death animations by overriding the randomness, so I had to tell my debugger to set AX to 0 guess which animation that is? The one with the AXe.
       
 (DIR) Post #AqdsSYC31wSUtNFYae by KatS@chaosfem.tw
       2025-01-31T13:15:18Z
       
       0 likes, 0 repeats
       
       @foone The scream test is the single most reliable method I've found for identifying the business owner of a service.Not necessarily the best for one's prospects for promotion, but I'm autistic, so I was screwed on that one from the start 🤷‍♀️
       
 (DIR) Post #AqdvxdWzXBJWHpYpJQ by foone@digipres.club
       2025-01-31T13:54:44Z
       
       0 likes, 0 repeats
       
       why do they store the day of the week as a 16bit int?future proofing in case the calendar gets updated and has more than 256 days in the week?
       
 (DIR) Post #AqdwEYgqmnUuCBF0oi by billgoats@bitbang.social
       2025-01-31T13:57:45Z
       
       0 likes, 0 repeats
       
       @foone Hey, you never know what’s going to be next for calendars after 2038!
       
 (DIR) Post #AqdwPfG4hqTHkf0rEu by RonanLK@piaille.fr
       2025-01-31T13:59:42Z
       
       0 likes, 0 repeats
       
       @foone 256 days in a week seems enough.I think a week sould be equivalent to a month should be equivalent to a year and everything should be 256 days. It would make dates handling far easier.
       
 (DIR) Post #AqdwU86lNwbyNzmpgO by Ronflaix@mastodon.gamedev.place
       2025-01-31T13:59:43Z
       
       0 likes, 0 repeats
       
       @foone Cargo cult about register type/width and speed or experience with compiler shenanigans? When I tried to write a certain drawing routine optimized for a certain SH4AL CPU, it was faster to have a consistent variable typing because otherwise the compiler would insert zero/sign extension operands to adapt between 8/16 and 32 integer types.
       
 (DIR) Post #AqdwYZ1zEDBt2ofOuu by drsbaitso@infosec.exchange
       2025-01-31T14:00:31Z
       
       0 likes, 0 repeats
       
       @foone Earth has 8 corners, simultaneous 28 day time cubed in only 7 day weeks. No 7 Day Gods.
       
 (DIR) Post #Aqdwc7RRkMHCdUGq92 by foone@digipres.club
       2025-01-31T14:01:29Z
       
       0 likes, 0 repeats
       
       I accidentally applied a patch backwards and put the detective to sleep, forever.They're in Rome and they've just slept through about two months of nothing
       
 (DIR) Post #AqdwpDglpb0hm9gXlQ by foone@digipres.club
       2025-01-31T14:04:28Z
       
       0 likes, 0 repeats
       
       patching 0x148C9 in the EXE to 90 90 will stop the clock advancing, so you now have Infinite Time to catch the culprit
       
 (DIR) Post #Aqdx0ggKNQ7UsfwjHk by Craigp@mastodon.social
       2025-01-31T14:06:26Z
       
       0 likes, 0 repeats
       
       @foone This is why they have 248 extra days of the week!
       
 (DIR) Post #Aqdx4Cbw7a8gmBZIhs by RueNahcMohr@infosec.exchange
       2025-01-31T14:06:39Z
       
       0 likes, 0 repeats
       
       @foone it will probably be trumps directive next week.
       
 (DIR) Post #AqdyBeYGjhktPkyAoS by foone@digipres.club
       2025-01-31T14:19:41Z
       
       0 likes, 0 repeats
       
       I finally figured out how it calculates travel times.It's the difference in X coordinate between the two cities, plus the difference between the Y coordinate, plus one.that quantity divided by 40, then has 2 added. if the result is over 7, it's set to 7. Weird! that's not how you measure distance, Carmen.
       
 (DIR) Post #AqdyLJBd1gYo2zz3BY by foone@digipres.club
       2025-01-31T14:21:20Z
       
       0 likes, 0 repeats
       
       TODO: plot all the distances between all 30 cities and compare how inɐccurate this mess is
       
 (DIR) Post #AqdyVs5E8Td5Ap1ge0 by darkling@mstdn.social
       2025-01-31T14:23:12Z
       
       0 likes, 0 repeats
       
       @foone Travelling salesman problem ahoy!(I did my PhD in combinatorial optimisation...)
       
 (DIR) Post #AqdyZLq7xTtWKXcg64 by foone@digipres.club
       2025-01-31T14:23:21Z
       
       0 likes, 0 repeats
       
       also, it's the 90s, I can afford a sqrt().I should fix it up for my version.or use a squared lookup table. you could do this REAL easy by making it a table search: there's only 6 possible results: 2,3,4,5,6,7. each entry in the lookup table contains the maximum squared distance that can generate that number of hours
       
 (DIR) Post #AqdyvgZLZGPkzZQKjA by foone@digipres.club
       2025-01-31T14:27:56Z
       
       0 likes, 0 repeats
       
       here's all 30 city locations:https://gist.github.com/foone/0992517879877e0e995259d08a0941a7it's currently way too 6am to do more calculations, though. I'll do that tomorrow
       
 (DIR) Post #Aqe057TT0KLSztjfxg by Scmbradley@mathstodon.xyz
       2025-01-31T14:40:46Z
       
       0 likes, 0 repeats
       
       @foone why is that 'a' upside down!? The first one in "inaccurate"...
       
 (DIR) Post #Aqe09QkNI5W5vehRsu by MegaMichelle@a2mi.social
       2025-01-31T14:41:23Z
       
       0 likes, 0 repeats
       
       @foone Quantum???
       
 (DIR) Post #Aqe26zbRRNiz4XUErI by frenshape@beige.party
       2025-01-31T15:03:36Z
       
       0 likes, 0 repeats
       
       @foone Honestly, at this point sleeping through two months of nothing sounds like a life goal
       
 (DIR) Post #Aqe6XJRwflz5yJqoMK by cdamian@rls.social
       2025-01-31T15:53:01Z
       
       0 likes, 0 repeats
       
       @fooneMaybe for Uranus or Neptune, assuming they stick with 52 weeks, which seems unlikely.
       
 (DIR) Post #Aqe8pRsuFbUFFkElnM by StompyRobot@mastodon.gamedev.place
       2025-01-31T16:18:51Z
       
       0 likes, 0 repeats
       
       @foone if it's 6am you mean you'll do it "later today?"
       
 (DIR) Post #Aqe9TQXKgKCyeiD2q8 by dave_cochran@infosec.exchange
       2025-01-31T16:26:07Z
       
       0 likes, 0 repeats
       
       @foone other than the "Rome" part and the "nothing" part, same
       
 (DIR) Post #Aqe9f9L4RrN2nD41A0 by dave_cochran@infosec.exchange
       2025-01-31T16:28:16Z
       
       0 likes, 0 repeats
       
       @foone patch notes for v1.whatever: "game can now be configured to use julian dates in its internal logic, if you feel like that would be a fun thing to do or whatever, we guess"
       
 (DIR) Post #Aqe9seZtc5YnRZRAyO by pjokse@social.restless.systems
       2025-01-31T16:30:42Z
       
       0 likes, 0 repeats
       
       @foonehttps://github.com/moralrecordings/ghidra-fidb-dos-win16 theese should probably do
       
 (DIR) Post #AqeJXPLc2kyJfTGSAq by fishidwardrobe@mastodon.me.uk
       2025-01-31T18:18:39Z
       
       0 likes, 0 repeats
       
       @foone I'm not sure travel time is really a function of distance?
       
 (DIR) Post #AqeRrTJ5pcQ5NAAEPA by dryak@mstdn.science
       2025-01-31T19:51:52Z
       
       0 likes, 0 repeats
       
       @foone Code hastily ported from a platform where it's simpler to work with 16bit words, so broderbund just stuck "int day;"?
       
 (DIR) Post #AqeVg5Naqug1nJ5y7s by modulusshift@digipres.club
       2025-01-31T20:34:50Z
       
       0 likes, 0 repeats
       
       @foone I did it lol https://docs.google.com/spreadsheets/d/e/2PACX-1vTr5GBfUNkxzVN7RoAiMg081ihERAFs93oE_m_1dPj67IxG-pkMQ41zoVVDlK0DJQepfeRe3NcA-9z8/pubhtmlhope this answered any questions you had
       
 (DIR) Post #AqeY7GhB5WcCcJLSS0 by vmp_@mastodon.social
       2025-01-31T21:02:12Z
       
       0 likes, 0 repeats
       
       @foone saturating Manhattan :)
       
 (DIR) Post #AqeYoMCOVBeA8bUbR2 by MegaMichelle@a2mi.social
       2025-01-31T21:10:02Z
       
       0 likes, 0 repeats
       
       @foone The government of Athens reports that Carmen Sandiego has stolen Pythagoras's Theorem!
       
 (DIR) Post #AqenKJQpixnWBGNV0S by foone@digipres.club
       2025-01-31T23:52:43Z
       
       0 likes, 0 repeats
       
       @pjokse oh awesome, thanks!
       
 (DIR) Post #AqenPWFfUHmtOAddwm by foone@digipres.club
       2025-01-31T23:53:31Z
       
       0 likes, 0 repeats
       
       @StompyRobot nah. I meant human days, which can only change when you sleep
       
 (DIR) Post #AqenVCkKv9TIdDh6cS by foone@digipres.club
       2025-01-31T23:54:37Z
       
       0 likes, 0 repeats
       
       @Scmbradley I fat-fingered my compose key, and compose-a-a is ɐ
       
 (DIR) Post #AqfEsZa4t0FWsHGNge by foone@digipres.club
       2025-02-01T05:01:22Z
       
       0 likes, 0 repeats
       
       @modulusshift Awesome, thanks!
       
 (DIR) Post #AqfEwfyJ4EYJqyYJiS by foone@digipres.club
       2025-02-01T05:02:13Z
       
       0 likes, 0 repeats
       
       Good news: @modulusshift did the calculations for me!https://digipres.club/@modulusshift/113924878526681049
       
 (DIR) Post #AqfF0Qbg8TtfMGl2IK by foone@digipres.club
       2025-02-01T05:02:54Z
       
       0 likes, 0 repeats
       
       I think that says that it doesn't matter much. The biggest error is in the biggest distances, which are all saturated to the max of 7-hours anyway.
       
 (DIR) Post #AqfbQhzoIswtoJyvYG by StompyRobot@mastodon.gamedev.place
       2025-02-01T09:14:00Z
       
       0 likes, 0 repeats
       
       @foone heh. Humans.
       
 (DIR) Post #Aqg5zQcrsFzwhNiqdE by foone@digipres.club
       2025-02-01T14:56:28Z
       
       0 likes, 0 repeats
       
       @StompyRobot "human" is in massive air quotes here, I'm not terribly human in the first place, but you know what I mean. The difference between lived experience and a clock.
       
 (DIR) Post #Aqg77ydpOBiiSzoNOK by StompyRobot@mastodon.gamedev.place
       2025-02-01T15:09:14Z
       
       0 likes, 0 repeats
       
       @foone well I'm a robot! I'll allow "colloquial meaning of next day" though. Colloquial is such a useful word!
       
 (DIR) Post #Aqg8qxNt0fBHYMMnw0 by foone@digipres.club
       2025-02-01T15:28:36Z
       
       0 likes, 0 repeats
       
       @StompyRobot good point. "lived experience" doesn't exactly work if you're not technically alive.
       
 (DIR) Post #AqhvROJeYYUN5WAKG0 by vjon@mastodon.online
       2025-02-02T12:07:44Z
       
       0 likes, 0 repeats
       
       @foone M.2 -> PCIe -> PCI -> SunPCI? Sounds doable, it's a shame that SunPCI cards only work on very specific Solaris versions.
       
 (DIR) Post #AqiXKPYVLVVvACD8fQ by foone@digipres.club
       2025-02-02T19:12:18Z
       
       0 likes, 0 repeats
       
       PUSH       ESPUSH       AXRETFwhy must you hurt me, carmen sandiego?
       
 (DIR) Post #AqiXc0Xr4aFOo7IWci by philpem@digipres.club
       2025-02-02T19:15:24Z
       
       0 likes, 0 repeats
       
       @foone that is definitely a "masochist or masochistic compiler writer" instruction sequence
       
 (DIR) Post #AqiYUQiTz5WJc8DecK by capn_b@mastodon.online
       2025-02-02T19:24:54Z
       
       0 likes, 0 repeats
       
       @foone I read that in the Rockapella voice
       
 (DIR) Post #AqiZ78c5E2RIlHgQqW by foone@digipres.club
       2025-02-02T19:31:52Z
       
       0 likes, 0 repeats
       
       I'm confused by the graphics detection routines. I thought it was returning 0 for "no graphics" or something, but it turns out 0 means MCGA.So the GraphicsMode enum goes:0: MCGA1: CGA2: Hercules3: EGA4: Tandy5: VGA6: ???
       
 (DIR) Post #AqiZAYZx8shaA4JixU by foone@digipres.club
       2025-02-02T19:32:46Z
       
       0 likes, 0 repeats
       
       I don't think there's any reason why this would support SVGA. It always use 320x200 at a maximum of 256 colors. VGA is more than enough to handle it
       
 (DIR) Post #AqiZn30iRjpTY1Bmvw by jbqueru@fosstodon.org
       2025-02-02T19:39:45Z
       
       0 likes, 0 repeats
       
       @foone That's called Manhattan distance.
       
 (DIR) Post #AqiaDZdtkC0WHcAIFc by foone@digipres.club
       2025-02-02T19:44:33Z
       
       0 likes, 0 repeats
       
       @jbqueru which is famously not how planes navigate :)
       
 (DIR) Post #Aqidv52LCFBLxu2EKW by TomF@mastodon.gamedev.place
       2025-02-02T20:26:02Z
       
       0 likes, 0 repeats
       
       @foone ModeX VGA? Though again - why?
       
 (DIR) Post #AqieInJsigf3xzXzl2 by dryak@mstdn.science
       2025-02-02T20:30:13Z
       
       0 likes, 0 repeats
       
       @foone hypothesis for 6:- non stanadard clone EGA + monitor combos that can do 6bits RrGgBb in 200 lines mode?- InColor? (Hercules 16colors hires card, like EGA but without Latches&ALU)
       
 (DIR) Post #Aqig4KUJJp64OteiLA by foone@digipres.club
       2025-02-02T20:50:08Z
       
       0 likes, 0 repeats
       
       being able to do a textual find-replace on VRAM is a weird but occasionally useful ability
       
 (DIR) Post #AqigRwLkiO8OUIuYFs by foone@digipres.club
       2025-02-02T20:54:28Z
       
       0 likes, 0 repeats
       
       I find-replaced the background from palette entry 0 to palette entry C:Now I can confirm how big this image is. Previously it was set into a black background, which made it harder
       
 (DIR) Post #AqihBpUeXUheXlxKc4 by Mondobizarrro@social.xenofem.me
       2025-02-02T21:03:03.793625Z
       
       0 likes, 0 repeats
       
       @foone really high quality image
       
 (DIR) Post #AqiljUgqn7fXgay9b6 by foone@digipres.club
       2025-02-02T21:53:19Z
       
       0 likes, 0 repeats
       
       @punissuer yep! as you'd expect from a game distributed on a 720kb floppy disk (or two 360kb disks)
       
 (DIR) Post #AqiltDAmm5JQFlbYps by foone@digipres.club
       2025-02-02T21:55:24Z
       
       0 likes, 0 repeats
       
       worst thing that could happen just happened:I just realized the portable Where in the World is Carmen Sandiego? is based on the same version I'm hacking, meaning it's in-scope for me to get this, dump the ROM, and compare. That just increased the cost and complexity of this project by bunch
       
 (DIR) Post #Aqim8ZdPXps6GEJrcm by foone@digipres.club
       2025-02-02T21:58:15Z
       
       0 likes, 0 repeats
       
       WAIT HOLD ALL THE PHONES.Here's a photo from a MS-DOS version. It does that thing some companies (like Sierra) did back in the day, and included both 3.5" and 5.25" disks in the package. BUT WHY ARE THERE SO MANY DISKS?
       
 (DIR) Post #AqimG6jEtt16vXdc2q by foone@digipres.club
       2025-02-02T21:59:21Z
       
       0 likes, 0 repeats
       
       The copy of this game I have is approximately 470kb! You could fit this on ONE disk!
       
 (DIR) Post #AqimLQOPDYQrMUQdO4 by 4bz@freeradical.zone
       2025-02-02T22:00:35Z
       
       0 likes, 0 repeats
       
       @foone I think Earl floppies had less than  the 1.4 mb were used to?
       
 (DIR) Post #AqimWBujOBbpdtgMsK by old_angry_queer@girlcock.club
       2025-02-02T22:02:09Z
       
       0 likes, 0 repeats
       
       @foone so you don't know which disk carmen sandiego is on?
       
 (DIR) Post #AqimZACqCBQPDLZQeG by foone@digipres.club
       2025-02-02T22:02:59Z
       
       0 likes, 0 repeats
       
       ARG, they mislabeled this.Admittedly, this isn't really their fault, this is confusing shit.This is the 1992 Where in the World Is Carmen Sandiego? Deluxe, not the 1990 Where in the World Is Carmen Sandiego? Enhanced.
       
 (DIR) Post #AqimjUy7r5WcVKcECm by old_angry_queer@girlcock.club
       2025-02-02T22:04:53Z
       
       0 likes, 0 repeats
       
       @foone that's still only 5mb according to the abandonware site though, so that's still a lot of extra disks.
       
 (DIR) Post #Aqin0ZYu1zaXflxXPs by Vorador@techhub.social
       2025-02-02T22:07:58Z
       
       0 likes, 0 repeats
       
       @foone I played this on it's day on a 286 and it came on one disk. That photo is the deluxe edition (you can see it written on the black bar below the name if you zoom)
       
 (DIR) Post #AqinMmY8QMACK9BrtY by foone@digipres.club
       2025-02-02T22:12:04Z
       
       0 likes, 0 repeats
       
       okay I finally found a boxed copy of the Enhanced 1990 DOS edition. (confusingly labeled the 1993 edition)It comes on two 5.25" disks: presumably double-density, so that's 720kb in total.Floppy Disk Pop Quiz: What's weird about these floppies, specifically given that this is MS-DOS version?
       
 (DIR) Post #AqinYjheph4OyGLR7A by foone@digipres.club
       2025-02-02T22:14:12Z
       
       0 likes, 0 repeats
       
       I happened to look at mobygames, and noticed two interesting things.First, the Mac version is very similar to the DOS version, other than the expected changes you'd get from it being on a monochrome system with a GUI. But wow, that's a completely different font! Is that built into macs or something? Otherwise, yikes. (also, the dialogue box is top-aligned. DOS bottom-aligns them)
       
 (DIR) Post #AqineKG0Ly8Dmz4kgi by henryk@chaos.social
       2025-02-02T22:15:10Z
       
       0 likes, 0 repeats
       
       @foone Why the hell would they be writable?
       
 (DIR) Post #AqinpUhZrPMTMtIXjs by foone@digipres.club
       2025-02-02T22:16:37Z
       
       0 likes, 0 repeats
       
       Secondly, the TurboGrafx-16 version didn't even THINK about using the same GUI!
       
 (DIR) Post #Aqio02hWJ7uXi6IjRo by foone@digipres.club
       2025-02-02T22:18:39Z
       
       0 likes, 0 repeats
       
       @arrjay bingo!
       
 (DIR) Post #Aqio8YyoBBT68cRzhQ by foone@digipres.club
       2025-02-02T22:20:42Z
       
       0 likes, 0 repeats
       
       @Vorador Right! That's the 1985 port. The specific version I'm hacking on is the 1990 DOS version, not to be confused with the 1992 DOS version.
       
 (DIR) Post #AqioCSfhZhydjRN9W4 by foone@digipres.club
       2025-02-02T22:21:11Z
       
       0 likes, 0 repeats
       
       @amr thanks!
       
 (DIR) Post #AqioFjJk8u20E7eyyO by pop_justy@social.linux.pizza
       2025-02-02T22:21:06Z
       
       0 likes, 0 repeats
       
       @foone Floppy disk quiz:  Correct me if I'm wrong, but I don't think MS-DOS has a media descriptor for 5.25" 720K.  There's one for 1.2M, 360K, and 320K.  And two more for the one side version of those last two, 180K and 160K.But I don't recall a 720K.  There's a 720K for 3.5 that's 2 sided and 9 sectors.  But I don't recall a 720K for 5.25.But I could be wrong, but that's my guess here.
       
 (DIR) Post #AqioMYTypCYieMhd9k by foone@digipres.club
       2025-02-02T22:22:38Z
       
       0 likes, 0 repeats
       
       I don't want to go through a million platforms but all the other ports of this game tweaked some art here and there or put in different location-photos, but all of them have the same basic tall-window-on-the-left, smaller-window-in-the-top-right, four-buttons-in-lower-right design
       
 (DIR) Post #AqioPkaYGtSp45IftA by foone@digipres.club
       2025-02-02T22:23:35Z
       
       0 likes, 0 repeats
       
       @pop_justy nah, I meant "720kb" as the two combined, which are 360kb disks
       
 (DIR) Post #AqioexyEndiyucdPEG by foone@digipres.club
       2025-02-02T22:26:29Z
       
       0 likes, 0 repeats
       
       The answer for "what's wrong with these floppies?" is that they're double-notched. That's needed for double-sided disks... on systems which have single-sided drives! The PC has basically always been double-sided, so they only need one notch, on the top/a side.
       
 (DIR) Post #AqioiNxWdD7aNnvpYG by root42@chaos.social
       2025-02-02T22:26:48Z
       
       0 likes, 0 repeats
       
       @foone they are doing like Talking Heads and going flippy floppy!
       
 (DIR) Post #AqiolKcxTWPAv0iUOu by foone@digipres.club
       2025-02-02T22:27:24Z
       
       0 likes, 0 repeats
       
       here's why they shipped it on a double-notched disk anyway:Broderbund was releasing games on a bunch of other systems that DID have single-sided drives. For simplicity they just bought Xty-thousand double-notched disks
       
 (DIR) Post #Aqiorny5IeZTeegWVE by foone@digipres.club
       2025-02-02T22:28:46Z
       
       0 likes, 0 repeats
       
       is it gonna matter? not in the slightest (assuming there's no format-mismatching, which their shouldn't be: these are all the same density of disks, I think).The PC doesn't check for a notch there, so it won't notice either.
       
 (DIR) Post #AqiowU96QThJco4PwG by foone@digipres.club
       2025-02-02T22:29:36Z
       
       0 likes, 0 repeats
       
       It's just funny because this is, like, technically wrong?. These aren't PC disks, but the difference doesn't matter, so why not? It probably saved them a decent amount of money because of bulk discounts and inventory simplicity.
       
 (DIR) Post #Aqip040bXqoBijnlVw by foone@digipres.club
       2025-02-02T22:30:15Z
       
       0 likes, 0 repeats
       
       @old_angry_queer hah!
       
 (DIR) Post #Aqip53O1Ho8nEq8KPY by foone@digipres.club
       2025-02-02T22:31:09Z
       
       0 likes, 0 repeats
       
       also after all this wondering about "how many disks does Carmen Sandiego Enhanced (1990, DOS) come on?" is even sillier because I ALREADY KNEW THE ANSWER, I JUST FORGOT I KNEW IT
       
 (DIR) Post #AqipCRVzyUeu6DOAQy by mgleadow@mastodon.green
       2025-02-02T22:31:45Z
       
       0 likes, 0 repeats
       
       @foone what happens if you put it into a pc flipped?
       
 (DIR) Post #AqipGMTEfjppc0xtMe by foone@digipres.club
       2025-02-02T22:31:52Z
       
       0 likes, 0 repeats
       
       I am currently, as in this very thread, reverse engineering Carmen Sandiego Enhanced (1990, DOS)! I've seen the code that asks for you to put in the other disk! And it only asks for DISK1 and DISK2!
       
 (DIR) Post #AqipNLfy1cIfAtFfpA by foone@digipres.club
       2025-02-02T22:34:33Z
       
       0 likes, 0 repeats
       
       just looking at the files, not the code (and not having seen original disk images yet that I can recall), I bet the answer is that they put CITIES.DAT on DISK2. the whole game - cities.dat is ~300kb, with cities.dat being 168kb.They could do the whole game - carmen.dat and cities.dat in only 200kb, which'd give them 160kb (luxury!) for a fancy installer.
       
 (DIR) Post #AqipTNC7IAe9ccA7Dk by foone@digipres.club
       2025-02-02T22:35:35Z
       
       0 likes, 0 repeats
       
       This game autodetects everything (video and audio modes) and you can install it by just doing "copy A:*.* C:\CARMEN" on each disk, so I don't think they would have needed a fancy installer.
       
 (DIR) Post #AqipjFM4CtHVwQNxLM by foone@digipres.club
       2025-02-02T22:38:30Z
       
       0 likes, 0 repeats
       
       I should just check. I'm sure disk images can be tracked down in places. the video and audio detection seems to be excellent, by the way. it just silently figures it out, without asking questions or requiring special arguments or configuration. Perfect for a game aimed at the little childrens.
       
 (DIR) Post #AqipwAooNtDNdWzir2 by foone@digipres.club
       2025-02-02T22:40:49Z
       
       0 likes, 0 repeats
       
       I found two different copies of the disk images, in different places.both are imaged off a 3.5" disk version, which of course comes on only one (double density, 720kb) disk!
       
 (DIR) Post #AqipzkGR3TcqRCcP5s by yakkoj@fosstodon.org
       2025-02-02T22:41:06Z
       
       0 likes, 0 repeats
       
       @foone the "back side" is notched for write-enable.Must have been an overstock of Apple disks, just re-used for IBM (all the IBM ones cared about was the sync hole, which disk][ didn't use, and side 1's WP notch)
       
 (DIR) Post #Aqiq5UUwaMlBHI918K by foone@digipres.club
       2025-02-02T22:41:10Z
       
       0 likes, 0 repeats
       
       @julie @amr not a million miles away from what I am doing
       
 (DIR) Post #Aqiq6P6S862Opq7lNA by jacquiharper@mastodon.world
       2025-02-02T22:42:29Z
       
       0 likes, 0 repeats
       
       @foone Back in the service bureau days, we would tape over the second hole if the disc first presented as unreadable
       
 (DIR) Post #AqiqD43CnfpzZMmV9M by jernej__s@infosec.exchange
       2025-02-02T22:33:02Z
       
       0 likes, 0 repeats
       
       @mgleadow @foone It won't work unless you reformat it (then it won't work unflipped).
       
 (DIR) Post #AqiqD4koBYiRkbBK76 by foone@digipres.club
       2025-02-02T22:43:51Z
       
       0 likes, 0 repeats
       
       @jernej__s @mgleadow the funny thing is that I don't think it's breaking because it can't find the right sectors (because they're on the other side), or even the fact that the tracks are in the wrong places (single-sided drives put the bottom side's tracks in a different place than double-sided drive would), but the fact you're spinning the disk BACKWARDS from its perspective. So the phase transitions and sector headers are all gibberish and it has no idea what the fuck it's looking at.
       
 (DIR) Post #Aqirr3SgVeEbHQKdDU by foone@digipres.club
       2025-02-02T23:02:17Z
       
       0 likes, 0 repeats
       
       That version has no installer. Just the usual files (and a "DESKTOPD.CFG" file that I don't understand)
       
 (DIR) Post #Aqiw1loEseABXBmKiu by redrummy@ohai.social
       2025-02-02T23:48:57Z
       
       0 likes, 0 repeats
       
       @foone Did you ever mess with DR-DOS? It was THE SHIT. I could multitask AutoCAD and Windows 3.0 in real mode, and it blew people's minds. I was smarter as a kid.
       
 (DIR) Post #Aqj55kE9bTOpNDs0Om by lffontenelle@mastodon.social
       2025-02-03T01:28:55Z
       
       0 likes, 0 repeats
       
       @foone should be fun in the Southern Hemisphere
       
 (DIR) Post #AqjLCKXJ7RkOzIzVnE by tomjennings@tldr.nettime.org
       2025-02-03T04:31:31Z
       
       0 likes, 0 repeats
       
       @foone Flippy diskettes!
       
 (DIR) Post #AqjPMu0gTzaNij1pk8 by tomjennings@tldr.nettime.org
       2025-02-03T05:18:14Z
       
       0 likes, 0 repeats
       
       @foone I'm pretty sure those are "Flippy" disks, not double sided. Double sided drives have a head for top and bottom. Flippy disks were really single sided media, but written on both physical sides. You had to take it out and flip it over to read the other side. A cheapskate way to distribute code. I apologize if this was all implicit.
       
 (DIR) Post #AqjhiUDQrfTVGZQudE by wiredfool@fosstodon.org
       2025-02-03T08:43:18Z
       
       0 likes, 0 repeats
       
       @foone IIRC, the notch allowed writing, so commercial software would often be shipped with no notch for either side.  (At least in the apple //)
       
 (DIR) Post #AqpjZPWgIRNuyLzpeS by foone@digipres.club
       2025-02-06T06:31:25Z
       
       0 likes, 0 repeats
       
       I did not realize they implemented a file browser in this program! I only found it by hiding all the DAT files from the EXE, to see if it'd ask me to put in floppies in.
       
 (DIR) Post #AqpmCjt8iw2dKKNkUy by codl@chitter.xyz
       2025-02-06T06:35:22Z
       
       0 likes, 0 repeats
       
       @foone in a better world this dialog would say "Where in the world is CARMEN.DAT?"
       
 (DIR) Post #AqpmCkkfVurM0LQUvw by foone@digipres.club
       2025-02-06T06:39:13Z
       
       0 likes, 0 repeats
       
       @codl I know, right?!
       
 (DIR) Post #AqpqdG6PyTeIaDUgAC by foone@digipres.club
       2025-02-06T07:40:32Z
       
       0 likes, 0 repeats
       
       So I've got code at 17DA:08AA, which is E8 5D F7. DOSBox decodes that as CALL 000A.Manually decoding it myself, it should be a relative jump, and it's a jump to $-0x8a3. following the jump it ends up at 17DA:000A.BUT GHIDRA thinks this code is at  1fb7:08aa, and it decodes it as call SUB_2000_fb7a, which doesn't exist. I'm not sure how (0x08aa+3)-0x8a3 = 2000:fb7a. Something weird is going on. Why is the number BIGGER?
       
 (DIR) Post #AqpqdH04dYAVMpX7ui by foone@digipres.club
       2025-02-06T07:40:53Z
       
       0 likes, 0 repeats
       
       the +3 is because E8 5D F7 is 3 bytes, and it goes off the address of the next instruction
       
 (DIR) Post #Aqpqg0V6REPD40LnF2 by foone@digipres.club
       2025-02-06T07:44:04Z
       
       0 likes, 0 repeats
       
       Ghidra even recognizes there's a function at 1fb7:000A! It's called VideoDetect
       
 (DIR) Post #Aqpqg1HfWfFnUd4ZwO by foone@digipres.club
       2025-02-06T07:49:32Z
       
       0 likes, 0 repeats
       
       eww. They're using the NEAR version of CALL to call a FAR procedure. You might say "wait, won't that break when it tries to do RETF?" and yes, it would, unless they manually do PUSH CS before they call it!
       
 (DIR) Post #Aqpqg1vN930rTleHpI by foone@digipres.club
       2025-02-06T07:52:06Z
       
       0 likes, 0 repeats
       
       I think this saves one byte?a call FAR absolute would be 5 bytes for the call, whereas push CS + call NEAR is 3+1 bytes
       
 (DIR) Post #AqpqgWQFknXY4EKN7o by dascandy@infosec.exchange
       2025-02-06T07:49:59Z
       
       0 likes, 0 repeats
       
       @foone Something tells me they do (3 - 0x8a3) as int16, convert to int32 and then add the 8aa to it.Why they would do that? No clue.
       
 (DIR) Post #Aqpr1rt391g6ieyYBk by foone@digipres.club
       2025-02-06T07:56:00Z
       
       0 likes, 0 repeats
       
       I might have to make a NASM test case. This could be Ghidra fucking up at decoding this one instruction
       
 (DIR) Post #Aqpr6HfjDZpPqgqmSu by foone@digipres.club
       2025-02-06T07:56:52Z
       
       0 likes, 0 repeats
       
       @sif Where in The Fuck is That Goddamn File?!
       
 (DIR) Post #AqprPtwR9nig2e1IKe by kc@theblower.au
       2025-02-06T08:00:17Z
       
       0 likes, 0 repeats
       
       @foone I had something like this and it turned out my disassembler didn't know enough about real-mode segmented memory.The limited bit width of cs:ip registers in real-mode made DOSBox wrap around the value (like a real PC would) but my disassembler merrily carried on (positively!) in its linear memory, entirely the wrong place.And checking your values with that same tool now, I find it gets the same result your GHIDRA gets: call 0x17daa - which it calls 1000:7daa, because that's how it (un)rolls.
       
 (DIR) Post #AqpslhOOavrVRk3Teq by foone@digipres.club
       2025-02-06T08:15:30Z
       
       0 likes, 0 repeats
       
       @kc yeah that aligns with what I'm seeing in my test file. if I adjust the memory map so that instead of 1fb7, it thinks it's at 17da (as it is in dosbox), the error goes away.
       
 (DIR) Post #Aqpt3HGGUL17cAdNJY by foone@digipres.club
       2025-02-06T08:18:40Z
       
       0 likes, 0 repeats
       
       similar things in the test.com file. I moved stuff around in the memory map and it's not erroring now. I've probably created endless glitches elsewhere though
       
 (DIR) Post #AqptMrzGAQLX1H1Rzc by foone@digipres.club
       2025-02-06T08:22:15Z
       
       0 likes, 0 repeats
       
       Anyway it seems it doesn't have a VideoDetect function, it's a DriverDetect function, since it's used for sound too.First it goes through the video drivers in the following order:VGA, TGA, EGA, HGA, HERC, and CGA. Then it goes into the audio drivers:stdsnd, adlib, covox, gblast, ibmg, sblast, tandy.
       
 (DIR) Post #AqptZpM3GWhqcUrUVE by foone@digipres.club
       2025-02-06T08:24:04Z
       
       0 likes, 0 repeats
       
       stdsnd is pc speaker, adlib is adlib, covox is the speech thing, gblast is game blaster, most likely, ibmg is... I'm not sure. The PS-1 Audio card?sblash is soundblaster and tandy is tandy 3-voice
       
 (DIR) Post #Aqpu6AlvAjjeJLNxgm by christopherkunz@chaos.social
       2025-02-06T08:30:16Z
       
       0 likes, 0 repeats
       
       @foone IBM Music Feature Card? Is this a Sierra game or still Carmen?
       
 (DIR) Post #Aqq3dsPMqzsEn2yxpQ by foone@digipres.club
       2025-02-06T08:43:25Z
       
       0 likes, 0 repeats
       
       I'm an idiot, this isn't a driver check... it's an argv check! you can pass "ega" or "vga" or whatever to carmen.exe to select those types.
       
 (DIR) Post #Aqq3dszWgYnUbBtqBk by foone@digipres.club
       2025-02-06T08:55:35Z
       
       0 likes, 0 repeats
       
       the other argument you can pass is ROSTER=$FILENAMEThis lets you reset which file it uses for the list of registered players, setting it to something other than the default ACME.DATNot mentioned in the manual, but I can see how that might be useful for schools and such
       
 (DIR) Post #Aqq3dtW8jIswEL9t1U by foone@digipres.club
       2025-02-06T08:56:53Z
       
       0 likes, 0 repeats
       
       I would say "especially if they're on a network!" but... this program is from 1990. Not many schools had networks in '90.
       
 (DIR) Post #Aqq3duEo3Ec8Ss3Ye0 by foone@digipres.club
       2025-02-06T09:05:28Z
       
       0 likes, 0 repeats
       
       looks like GameBlaster (GBLAST) has extra options, so you can do like GBLAST260 to set the IO addr
       
 (DIR) Post #Aqq3duhsJ9rlv1elxA by foone@digipres.club
       2025-02-06T09:07:33Z
       
       0 likes, 0 repeats
       
       stdsnd can also be written as stdsnd! which does something different. What? I have no idea.
       
 (DIR) Post #Aqq3dvLDwrLFt44CHo by foone@digipres.club
       2025-02-06T09:21:47Z
       
       0 likes, 0 repeats
       
       ugh. I pulled the thread to try and remap the memory to avoid ghidra disassembling it wrong, and it keeps getting worse. this is a mess.
       
 (DIR) Post #Aqq3dvrpzbQhWDKF7Y by foone@digipres.club
       2025-02-06T09:47:52Z
       
       0 likes, 0 repeats
       
       okay I reverted back to my old mapping, then created a new memory mapping: I made up some bytes at 2000:xxxx where it incorrectly thinks it's going, and set up a JMP $CORRECT_ADDRESS there by editing the bytes, then telling Ghidra it's a thunk.
       
 (DIR) Post #Aqq3dwY1SlApd33vsG by foone@digipres.club
       2025-02-06T09:48:48Z
       
       0 likes, 0 repeats
       
       this is deeply stupid but it appears to mostly work
       
 (DIR) Post #Aqq3dx2rc5qNAhUYwi by Unixbigot@aus.social
       2025-02-06T10:17:16Z
       
       0 likes, 0 repeats
       
       @foone society?  Oh, thread, never mind.
       
 (DIR) Post #Aqq3dxxaDDDK0c1rM0 by foone@digipres.club
       2025-02-06T09:53:11Z
       
       0 likes, 0 repeats
       
       THE MEMORY ADDRESSES ARE OVERLAPPING AGAIN
       
 (DIR) Post #Aqq3dybdoHFy0qlqnA by foone@digipres.club
       2025-02-06T09:53:22Z
       
       0 likes, 0 repeats
       
       this isn't supposed to be possible but apparently it is
       
 (DIR) Post #Aqq3dzNUwLXOPHA4O0 by foone@digipres.club
       2025-02-06T10:09:26Z
       
       0 likes, 0 repeats
       
       so the program has three main code segments, as it has approximately 111kb of code The problem is that ghidra gets confused when the relative addresses are too big.
       
 (DIR) Post #Aqq3e00qa30sNJZUie by foone@digipres.club
       2025-02-06T10:11:29Z
       
       0 likes, 0 repeats
       
       so the first one is at 1000:0000 and the second was at 1fb7:0009. I moved it to 5000:7000, and the second segment seems to be working fine now.the problem is that I was only able to do that because the segment is only 82a7h long. the first segment, the 1000:0000 one, is FB79 long. So I can't just move it so it's in the middle of a segment, since it'll end up spanning into the next 64k chunk, which is where ghidra fucks up
       
 (DIR) Post #Aqq3e0sNN1pb3KcF9c by foone@digipres.club
       2025-02-06T10:11:55Z
       
       0 likes, 0 repeats
       
       I guess I could test it anyway. Move it to 9000:8000 and see what breaks. (like everything)
       
 (DIR) Post #Aqq3eF3WeN4J1xwLTc by foone@digipres.club
       2025-02-06T10:15:30Z
       
       0 likes, 0 repeats
       
       9000:8006 9a  d7  05       b7  1f CALLF      SUB_2000_0147                 Hey ghidra I can read the machine code. That's CALL FAR  1fb7:05d7, not CALL FAR 2000:0147! WHY ARE YOU CONFUSED BY THIS?
       
 (DIR) Post #Aqq3onOjp0dER8tWL2 by foone@digipres.club
       2025-02-06T10:19:18Z
       
       0 likes, 0 repeats
       
       well, if nothing else, I think this has caused it to stop thinking there's jumps into the middle of functions. so now I can just manually thunk every cross-segment call, by creating the 2000:0000 segment that ghidra is imagining exists
       
 (DIR) Post #Aqq3slqDYGmWlbdwK8 by mega@chaos.social
       2025-02-06T09:23:08Z
       
       0 likes, 0 repeats
       
       @foone doesn't farcall require two bytes for the selector?https://godbolt.org/z/o4zq8YM6M (32bits tests)
       
 (DIR) Post #Aqq3smhkLFbFRcggl6 by foone@digipres.club
       2025-02-06T09:26:03Z
       
       0 likes, 0 repeats
       
       @mega this is 16bit, though
       
 (DIR) Post #Aqq3vmnATOSEaIee24 by foone@digipres.club
       2025-02-06T10:20:39Z
       
       0 likes, 0 repeats
       
       I'll have to write some code to find all the CALL 2000:xxxxs and set up matching thunks
       
 (DIR) Post #Aqq3wtzHCs8fBpqmzA by foone@digipres.club
       2025-02-06T09:56:04Z
       
       0 likes, 0 repeats
       
       @dysfun the weird thing is that I'm non-binary, so why are all these binary-digits showing up?
       
 (DIR) Post #Aqq417HjhwzDafUiUi by foone@digipres.club
       2025-02-06T08:37:48Z
       
       0 likes, 0 repeats
       
       @christopherkunz Still carmen.
       
 (DIR) Post #Aqq75EBEJWPXzo6SIa by jn@boopsnoot.de
       2025-02-06T09:18:53Z
       
       0 likes, 0 repeats
       
       @foone "the average person only knows two or three DOS interrupts ..." ;p
       
 (DIR) Post #Aqq7c5gWv4nXClPiOO by doidydoidy@aus.social
       2025-02-06T11:01:45Z
       
       0 likes, 0 repeats
       
       @foone That's... that is the same place in physical memory, right? It seems as though Ghidra has converted it to a physical address, then naively converted it back to a segment:offset pair just by putting the top 4 bits up there, possibly just for the purpose of making up a label? (Although if it was doing that I can't think of a reason you wouldn't just make it SUB_20147.)
       
 (DIR) Post #AqqDEHwwGf8S1B7e8O by baljemmett@mastodon.online
       2025-02-06T12:04:43Z
       
       0 likes, 0 repeats
       
       @foone This is the point at which I stalled out on reverse engineering the firmware for a Polaroid slide recorder the other, er, year.  Must pick that up again sometime...
       
 (DIR) Post #AqqM3xn5GLJUBhfF32 by Argonel@dice.camp
       2025-02-06T12:55:02Z
       
       0 likes, 0 repeats
       
       @foone internet access was pretty uncommon, but a lot of schools would have had a networked computer lab.  Probably a bunch of apple 2s and a corvus systems server.
       
 (DIR) Post #Aqqcf1Q4Kew3QJal72 by azurelore@eldritch.cafe
       2025-02-06T16:49:38Z
       
       0 likes, 0 repeats
       
       @foone my life story tbh
       
 (DIR) Post #AqqeHXC2kKf4vUxYTA by tomjennings@tldr.nettime.org
       2025-02-06T17:08:20Z
       
       0 likes, 0 repeats
       
       @foone I remember issues like that.... The dilemma is that for a given subr X, if you need it callable by both near and far you need two subrs or a wrapper for the other. Or, of its just one or two exceptions, yeah, push cs and go.It's so fucking stupid. Mixing modes is horrible. Far code is horrible. In one big program I used (gasp) overlays and all small model. Like it's 1960 or something. Is there any known history of who the fuckwits were that chose segmentation as a solution?
       
 (DIR) Post #AqqpTtHBZEKcO0SXK4 by foone@digipres.club
       2025-02-06T19:13:18Z
       
       0 likes, 0 repeats
       
       @cazabon I know! How could they lack the vision to see the potential greatness?
       
 (DIR) Post #AqrmbQNmlsJCO2PJ7g by foone@digipres.club
       2025-02-07T06:15:39Z
       
       0 likes, 0 repeats
       
       I have discovered the bellhop island of stability
       
 (DIR) Post #AqrmiUhn68Yxov8T7A by foone@digipres.club
       2025-02-07T06:17:09Z
       
       0 likes, 0 repeats
       
       I was extracting the portraits of the people you talk to, and it turns out they're number 1-36. naturally I checked all 256 possible options.but it turns out every thing above 37 either:1. crashes2. shows nothing3. shows pixel gibberish.EXCEPT 238. 238 renders a bellhop perfectly, just like 5 does
       
 (DIR) Post #AqroJSU8PpXjbRwCie by foone@digipres.club
       2025-02-07T06:34:59Z
       
       0 likes, 2 repeats
       
       All 36 people you can talk to in Where in the World is Carmen Sandiego? (enhanced, DOS, 1990)
       
 (DIR) Post #AqrqKkbqiNK80rI3DE by Cybird@floofy.tech
       2025-02-07T06:57:35Z
       
       0 likes, 0 repeats
       
       @foone BIRB
       
 (DIR) Post #AqrrN08A4uncgU2b3Y by foone@digipres.club
       2025-02-07T07:09:19Z
       
       0 likes, 0 repeats
       
       I'm kinda surprised they're so dithered. with the support for EGA/MCGA/VGA monitors, they could have pulled something like sierra did and encoded the dithering into their compression. Then when they're displaying on higher-colordepth displays they could swap it out for an intermediate color.
       
 (DIR) Post #AqrrQEaQmuFUO4nzt2 by foone@digipres.club
       2025-02-07T07:09:37Z
       
       0 likes, 0 repeats
       
       that'd also help because then they wouldn't be compressing dithering
       
 (DIR) Post #AqrrXR9yRHgXPSrgCu by foone@digipres.club
       2025-02-07T07:11:09Z
       
       0 likes, 0 repeats
       
       maybe they just mastered these at 16colors so they couldn't easily see what it'd look like
       
 (DIR) Post #AqrrhwljlvhmL6XWwy by noodle@aus.social
       2025-02-07T07:12:59Z
       
       0 likes, 0 repeats
       
       @foone 'compressing dithering' sounds like an ADHD superpower.
       
 (DIR) Post #AqrrsQkp8tC2EV6ylk by foone@digipres.club
       2025-02-07T07:14:55Z
       
       0 likes, 0 repeats
       
       @noodle I wish! compression is one of my biggest weaknesses
       
 (DIR) Post #Aqrt53f8PMvOKl2Gn2 by jonathankoren@sfba.social
       2025-02-07T07:28:24Z
       
       0 likes, 0 repeats
       
       @foone I had to zoom in on this one. It really looks like he’s not wearing a shirt, but rather just a collar and bow tie, like he’s a chippendale dancer.I’m going to call him Mike. And his hobby is magic.
       
 (DIR) Post #AqrtDjT0rctmIxVBaa by foone@digipres.club
       2025-02-07T07:30:02Z
       
       1 likes, 0 repeats
       
       Would you like to visit the Sport Club, Marketplace, or THE ASCENDING TONE OF INFINITY?
       
 (DIR) Post #AqrtTJsblRLva4uGbA by mistfunk@oldbytes.space
       2025-02-07T07:33:07Z
       
       0 likes, 0 repeats
       
       @foone Shouldn't that be "Where in the world is the file 'CARMEN.DAT'?"
       
 (DIR) Post #Aqrue9L5OVrm1rxGKG by foone@digipres.club
       2025-02-07T07:45:56Z
       
       0 likes, 0 repeats
       
       it has been zero days since Ghidra has done something I can't understand and seems to be obviously wrong. I've got B8 B0 26: this decodes to mov ax, 0x26b0. a 16bit immediate, moving into a 16bit register.
       
 (DIR) Post #Aqruin1XmzMKGf1iqm by foone@digipres.club
       2025-02-07T07:46:51Z
       
       0 likes, 0 repeats
       
       ghidra disassembles this as:b8  b0  26       MOV        uVar1 ,0x26b0uVar is defined as a ushort: a 16bit type.
       
 (DIR) Post #AqrunLJ0GystkTMeDQ by foone@digipres.club
       2025-02-07T07:47:40Z
       
       0 likes, 0 repeats
       
       all makes sense, right? 16bit to 16bit! so ghidra decompiles it as uVar1._0_1_ = 0xb0;
       
 (DIR) Post #AqruqmlOdp9nmDHpXk by foone@digipres.club
       2025-02-07T07:48:01Z
       
       0 likes, 0 repeats
       
       that's 8-bit to 8-bit! where did you get the idea this is 8bit, ghidra?
       
 (DIR) Post #Aqrv33wMbV6QWbGpn6 by foone@digipres.club
       2025-02-07T07:50:29Z
       
       0 likes, 0 repeats
       
       the most annoying thing? this is picking between two strings to display, and those strings are "he" and "she". GENDER: YOU CANNOT ESCAPE, EVEN WHEN YOU ARE HACKING 35 YEAR OLD COMPUTER GAMES
       
 (DIR) Post #AqrvcqyCIy3oisC8Dw by foone@digipres.club
       2025-02-07T07:56:59Z
       
       0 likes, 0 repeats
       
       Since they devoted an entire word to gender, we can truthfully state that Where in the World is Carmen Sandiego? (enhanced, DOS, 1990) believes there are 65536 genders.
       
 (DIR) Post #AqrvhcgipdxZsOIM52 by foone@digipres.club
       2025-02-07T07:57:51Z
       
       0 likes, 0 repeats
       
       unfortunately due to an oversight it believes those 65536 genders are allocated as:0: He/he/Him/him1-65535: She/she/Her/her
       
 (DIR) Post #AqrvnL4jEFVGzMFWe8 by Nakafeero@social.vivaldi.net
       2025-02-07T07:58:48Z
       
       0 likes, 0 repeats
       
       @foone Hello dear friend How are you doing today
       
 (DIR) Post #AqrvqLDh9DC4J1sJRg by foone@digipres.club
       2025-02-07T07:59:14Z
       
       0 likes, 0 repeats
       
       @ezmyrelda apparently gender IS binary, it's just not 1 bit. It's 16-bits.
       
 (DIR) Post #Aqrvub2UH35oWif5d2 by mkoek@mastodon.nl
       2025-02-07T07:59:25Z
       
       0 likes, 0 repeats
       
       @foone or more than 256, at least
       
 (DIR) Post #Aqrw09PltU7IaYCXgG by foone@digipres.club
       2025-02-07T08:01:04Z
       
       0 likes, 0 repeats
       
       I've made a note to fix this, of course.
       
 (DIR) Post #AqrwEhbfZ9aQgehmSG by foone@digipres.club
       2025-02-07T08:03:50Z
       
       0 likes, 0 repeats
       
       BTW, my plan for expanding the program is simple: I'm gonna bypass a lot of code/data, by stuffing my own allocation into the memory space of carmen, which'll load extra data off the disk, in a CUSTOM.DAT file
       
 (DIR) Post #AqrwMzBu4UNzXabSee by foone@digipres.club
       2025-02-07T08:05:17Z
       
       0 likes, 0 repeats
       
       this'll be (relatively) easy to do, since it turns out this program only needs 432 KB, since it targets a 512 KB RAM machine.Since it's no longer 1990, I think I can safely bump that up a bit? I won't need more than another 64 KB, which means I'll just bump the game up to 496 KB memory required. Completely doable in any 640 KB or more machine!
       
 (DIR) Post #AqrwV6RD0mVEKidHqS by DotMaetrix@chitter.xyz
       2025-02-07T08:06:41Z
       
       0 likes, 0 repeats
       
       @foone ah yes, the 16-bit gender binary
       
 (DIR) Post #AqrwY295QW9DtDYNrk by foone@digipres.club
       2025-02-07T08:07:00Z
       
       0 likes, 0 repeats
       
       my added code will just load the CUSTOM.DAT file off the disk, and then inject pointers to it in the rest of the program.
       
 (DIR) Post #Aqrwd8M7lSL2bA5G3k by foone@digipres.club
       2025-02-07T08:08:16Z
       
       0 likes, 0 repeats
       
       @DotMaetrix gender apparently is binary, but it's not 1-bit
       
 (DIR) Post #AqrwiDHkrd0jKpSiTw by static@aus.social
       2025-02-07T08:08:58Z
       
       0 likes, 0 repeats
       
       @foone I just got a throwback of rebooting with a different CONFIG.SYS to free up memory for something that wanted a lot. Especially prevalent on corporate PCs where there were often memory hungry network drivers, as well as memory hungry productivity programs.
       
 (DIR) Post #Aqrwp8HvqF3ZrbqPom by foone@digipres.club
       2025-02-07T08:09:47Z
       
       0 likes, 0 repeats
       
       @static yeah. network drivers seemed to just EAT tons of memory, presumably because they assumed it meant you were doing Business, and not Gaming
       
 (DIR) Post #Aqrx1z6TImS98rc16e by static@aus.social
       2025-02-07T08:12:42Z
       
       0 likes, 0 repeats
       
       @foone Especially the MS-DOS NDIS wrapper libraries.
       
 (DIR) Post #AqrxMwswkC4ULNHZVg by foone@digipres.club
       2025-02-07T08:16:31Z
       
       0 likes, 0 repeats
       
       the applyPronouns function lets you adjust how it's encoded dynamically. Fancy! So how it works is you do something like this:applyPronouns("\80 was bald", 0x80, "he\0him")and it'll return "He was bald", right? But it's more than just a simple find-replace...
       
 (DIR) Post #AqrxWsmWr6xEVr191s by foone@digipres.club
       2025-02-07T08:18:18Z
       
       0 likes, 0 repeats
       
       Because you can do:applyPronouns("I saw \81. \80 was bald!", 0x80, "he\0him")and it'll return "I saw him. he was bald!". See, you can specify multiple replacements at once, by using \x80, \x81, \x82 and so on.
       
 (DIR) Post #Aqrxbi3Y9zEKhEHSZU by foone@digipres.club
       2025-02-07T08:19:12Z
       
       0 likes, 0 repeats
       
       The way it actually works is the game uses "He/he/Him/him" for the pronouns, so \80 is uppercase "He", \81 is lowercase, \x82 is uppercase "Him", and \x83 is lowercase.
       
 (DIR) Post #AqryrDus5Tvfo3BOHg by Nekoplanet@paquita.masto.host
       2025-02-07T08:33:07Z
       
       0 likes, 0 repeats
       
       @foone @amr that makes sense. MacOS at that time heavily penalized custom rendering (especially on low end macs), so most games used the OS toolkit whenever possible. The fonts used on that screenshot are Chicago (buttons) and Venice (dialog)
       
 (DIR) Post #AqrznSU84z8BmnRWQy by irina@wandering.shop
       2025-02-07T08:43:32Z
       
       0 likes, 0 repeats
       
       @foone *splork*
       
 (DIR) Post #AqrzqgnBLFCx1ntYtk by irina@wandering.shop
       2025-02-07T08:43:49Z
       
       0 likes, 0 repeats
       
       @foone Fairly accurate, I'd say.
       
 (DIR) Post #Aqs7fhzfKlr7Ca0dl2 by Unixbigot@aus.social
       2025-02-07T10:11:49Z
       
       0 likes, 0 repeats
       
       @foone bool girl;
       
 (DIR) Post #AqsR6CR2fq7CGz9yKm by burnitdown@beige.party
       2025-02-07T13:49:24Z
       
       0 likes, 0 repeats
       
       @foone til gender is 16-bit
       
 (DIR) Post #AqtTsW6LFk86EUbXbE by foone@digipres.club
       2025-02-08T01:55:26Z
       
       0 likes, 0 repeats
       
       trying to figure out how to properly decode the fonts in this game is REALLY reminding me why I constantly cheat with The Death Generator. Staring at a decompilation/disassembly and hex editor is no fun
       
 (DIR) Post #AqtaIAcMLmiSrBCEL2 by zero@retroverse.social
       2025-02-08T03:07:19Z
       
       0 likes, 0 repeats
       
       @foone Wait, the Death Generator isn't running a full system emulation in the background??? You cheated!
       
 (DIR) Post #AqtaKzRmL5Eb52akds by foone@digipres.club
       2025-02-08T03:07:52Z
       
       0 likes, 0 repeats
       
       @zero you have no idea how much I've been tempted to do that. I'm probably going to do it as a proof of concept one of these days
       
 (DIR) Post #AqtbDWatJcSFWNrGkK by foone@digipres.club
       2025-02-08T03:17:43Z
       
       0 likes, 0 repeats
       
       it makes some sense that I'm having trouble with it. I think it's technically DOUBLECOMPRESSED
       
 (DIR) Post #AqttW3RnhjZfnlajr6 by foone@digipres.club
       2025-02-08T06:20:29Z
       
       0 likes, 0 repeats
       
       I should be able to put a breakpoint on "the palette changed"
       
 (DIR) Post #AqtuAqdcEaiFwlZNsu by foone@digipres.club
       2025-02-08T06:25:26Z
       
       0 likes, 0 repeats
       
       ooh, timing NOPs. Someone figured that PCs wouldn't get any faster after 1990
       
 (DIR) Post #AqtuTuPIRfaB8dxdfU by jpm@aus.social
       2025-02-08T06:53:33Z
       
       0 likes, 0 repeats
       
       @foone that’s what the turbo button is for!
       
 (DIR) Post #AqtxuiShGTwjlx1ekq by WizardOfDocs@wandering.shop
       2025-02-08T07:09:16Z
       
       0 likes, 0 repeats
       
       @foone ɐ
       
 (DIR) Post #AquAhn5o2FBRm3UBDk by rvalue@infosec.exchange
       2025-02-08T09:31:09Z
       
       0 likes, 0 repeats
       
       @foone they don’t get faster they just go further and further out of their way to make creating software “easier.”The course gets longer to keep lap times the same.
       
 (DIR) Post #AquN9DLRjkFsSke0n2 by yildo@eozygodon.com
       2025-02-08T12:14:34Z
       
       0 likes, 0 repeats
       
       @foone 0.016 GHz ought to be enough for anybody!
       
 (DIR) Post #Ar11bD1jRAP8SwABV2 by foone@digipres.club
       2025-02-11T17:16:13Z
       
       0 likes, 0 repeats
       
       I got my floppy copy in the mail, I just need to image it.Fun fact from the box: It has a latter from the player character to their cousin, and I believe this is the only place in the game and associated media that they name your character.It's Dale.
       
 (DIR) Post #Ar14XGQ7B9Rjh5NX28 by foone@digipres.club
       2025-02-11T17:49:11Z
       
       0 likes, 0 repeats
       
       I also discovered that in the Amiga port, they redrew the crime computer to make it clearly an amiga. Cute!
       
 (DIR) Post #Ar190m1DAx1vuQ3b0a by foone@digipres.club
       2025-02-11T18:39:12Z
       
       0 likes, 0 repeats
       
       Imaged my original disks. Two 360kb 5.25" disks.They're laid out like this:Disk 1: CARMEN.EXECARMEN.DATDisk 2:CITIES.DATMIDISND.DATDIGISND.DAT
       
 (DIR) Post #Ar19Lssyq3ENHxH0Pg by foone@digipres.club
       2025-02-11T18:43:01Z
       
       1 likes, 0 repeats
       
       Finally, we know the answer to the age-old question of Where in the World is Carmen Sandiego?The answer is "My floppy drive"
       
 (DIR) Post #Ar19jpmc1fUwcEiO9o by billgoats@bitbang.social
       2025-02-11T18:46:36Z
       
       0 likes, 0 repeats
       
       @foone Great job gumshoe!
       
 (DIR) Post #Ar1Adi6DmTQp0AWxe4 by NocturnalNessa@infosec.exchange
       2025-02-11T18:57:30Z
       
       0 likes, 0 repeats
       
       @foone a proper desk top must have:a floppy drivea minidisc drivea tape driveand of course dvd/cd drive, sd slot, etcor else its just a toy, like a nintento
       
 (DIR) Post #Ar1CySG64TWbrWAYwS by foone@digipres.club
       2025-02-11T19:23:41Z
       
       0 likes, 0 repeats
       
       @Keab42 It's an internally mounted Greaseweazle USB floppy disk controller.
       
 (DIR) Post #Ar1PFYxxaKtZ2PbteC by jstanley0@mstdn.social
       2025-02-11T21:41:04Z
       
       0 likes, 0 repeats
       
       @foone when I was a teenager my friends and I would play this game where we tried to find a file the other had hidden on a floppy disk. In deep directory structures, with the hidden attribute, stuff like that. Once I used a double-notched disk and formatted each side separately, and put a bunch of chaff on the “top” side while the target was hidden on the “bottom”. My friend never considered putting the disk in upside-down!
       
 (DIR) Post #Ar1RlcJQsXmqaj49qK by stenpett@mstdn.games
       2025-02-11T22:09:22Z
       
       0 likes, 0 repeats
       
       @foone it's not every day I see a PC with 5¼" and 3½" floppy drives, USB 2.0, *and* USB 3.0 ports, all at the same time. Now, if that PC also includes an RS232 port, an LPT port, and a reversible VGA port, my mind would probably not even comprehend the greatness before me!
       
 (DIR) Post #Ar8ogtAwPf3GUmWod6 by The3rdCrow@masto.ai
       2025-02-15T11:29:13Z
       
       0 likes, 0 repeats
       
       @foone That makes sense, since COP has one gender; ACAB
       
 (DIR) Post #ArSlmtDikGjtffCFxg by foone@digipres.club
       2025-02-25T02:31:02Z
       
       0 likes, 0 repeats
       
       it has been 0 days since foone has foolishly tried to hack a decompression algorithm.
       
 (DIR) Post #ArSnTs9WgruylYIJbE by foone@digipres.club
       2025-02-25T02:50:00Z
       
       0 likes, 0 repeats
       
       @MorningSong it was, like, 3? maybe 4 if I push it?
       
 (DIR) Post #ArTkRaeCrGKVH9dGuu by foone@digipres.club
       2025-02-25T13:50:42Z
       
       0 likes, 0 repeats
       
       well my "ignore the problem" solution of using bochscpu to embed a 16bit x86 emulator has failed. it's somehow broken and it's broken in the rust library or C core, not the python, and I really don't want to have to deal with debugging this.time to switch to a completely different x86 emulator? PROBABLY!
       
 (DIR) Post #ArTnaHlKk1PLAonuOu by burnoutqueen@todon.nl
       2025-02-25T14:25:47Z
       
       0 likes, 0 repeats
       
       @foone write your own emulator in pure python
       
 (DIR) Post #ArTo1lgzZQQDonsVCy by foone@digipres.club
       2025-02-25T14:30:45Z
       
       0 likes, 0 repeats
       
       @burnoutqueen I've done that before! but it was for 32bit x86, not 16bit.I am, of course, tempted
       
 (DIR) Post #ArWLAo4NmplcbKekKG by foone@digipres.club
       2025-02-26T19:51:43Z
       
       0 likes, 0 repeats
       
       unicorn has great documentation. at least I assume it would be great, if it existed
       
 (DIR) Post #ArWbXVNl1yseZOZ2GG by foone@digipres.club
       2025-02-26T22:55:01Z
       
       0 likes, 0 repeats
       
       x86 16bit segmentation and regular expressions:BECAUSE FUCK IT
       
 (DIR) Post #ArWboC9hlhcPrWwvYG by foone@digipres.club
       2025-02-26T22:57:46Z
       
       0 likes, 0 repeats
       
       @Tamber MULTITHREADING!
       
 (DIR) Post #ArWct4aJRaNnmfHidM by foone@digipres.club
       2025-02-26T23:10:08Z
       
       0 likes, 0 repeats
       
       I'm implementing unicorn as an x86 emulator to do the decompression, but I'm single-stepping the processor and I'm aiding debugging by showing what instruction I'm on.but instead of having to set up an x86 disassembly engine, I'm just parsing a plain text ghidra dump of the disassembly. I'm parsing it with regexes
       
 (DIR) Post #ArWdX3aiYagYHnXXw8 by foone@digipres.club
       2025-02-26T23:17:25Z
       
       0 likes, 0 repeats
       
       it's too bad python's ctypes doesn't support 16-bit x86. it'd be handy right now
       
 (DIR) Post #ArWdkUHMdx9soztLv6 by foone@digipres.club
       2025-02-26T23:19:51Z
       
       0 likes, 0 repeats
       
       my latest bad idea: DUMBPATCH.to avoid the complexity of generating functions and mapping them into the address space of the emulated PC, I instead designed a simple syntax:a 16bit segmented address plus a number. that function is emulated as if it returned that number in EAX. There are no other options. I suspect I'll be able to emulate up to 80% of complex subfunctions with this one bit of functionality
       
 (DIR) Post #ArWdpGCePBGYc5xlfU by foone@digipres.club
       2025-02-26T23:20:43Z
       
       0 likes, 0 repeats
       
       I need this because the decompression routine I'm emulating isn't entirely standalone: it calls malloc() at the beginning and free() at the endso I'm replacing malloc() with a static value and free() with a return value no one will check
       
 (DIR) Post #ArWdsn08v0O3CinN4q by foone@digipres.club
       2025-02-26T23:21:24Z
       
       0 likes, 0 repeats
       
       ideally I should be able to patch arbitrary python in there and do some kind of interop to return values to pythonbut that's hard. and way easier unflexible thing this is 80% of what I need that for
       
 (DIR) Post #ArWeRfzCzZr9aBzfQ8 by foone@digipres.club
       2025-02-26T23:27:40Z
       
       0 likes, 0 repeats
       
       I forgot about callee cleanup. fucking stdcall is callee cleanup. I can't have a generic int blah(){return 0x1234;} function because it needs to know how many words of arguments were pushed.
       
 (DIR) Post #ArWgp6XGeFvcUcDvSS by foone@digipres.club
       2025-02-26T23:54:17Z
       
       0 likes, 0 repeats
       
       RELOCATIONS!!!! *shakes fist at sky*
       
 (DIR) Post #ArWkPxkoYnaHpnpLM0 by tekhedd@byteheaven.net
       2025-02-27T00:34:29Z
       
       0 likes, 0 repeats
       
       @foone See, not just action and drama, but also excellent comic relief.Nothing funnier than when "return" doesn't do what you expect!
       
 (DIR) Post #ArWp14J1YzicgZmFii by Wren@chitter.xyz
       2025-02-27T01:25:59Z
       
       0 likes, 0 repeats
       
       @foone this might be one of the most cursed things I've ever read
       
 (DIR) Post #ArotjQf2zVeYpdXcem by foone@digipres.club
       2025-03-07T18:43:53Z
       
       0 likes, 0 repeats
       
       I took a look at the 1985 version to see if it had any other graphics command line options (it doesn't), but I did discover in passing that it uses a different pronoun system than the 1990 Enhanced version!
       
 (DIR) Post #ArotpoUnHskQUVn1ea by foone@digipres.club
       2025-03-07T18:45:04Z
       
       0 likes, 0 repeats
       
       It uses @0 for "He/She", @1 for "he/she", and @2 for "his/her".
       
 (DIR) Post #ArotuU3AjMxwWp63rU by foone@digipres.club
       2025-03-07T18:45:55Z
       
       0 likes, 0 repeats
       
       hacking a computer system by changing my pronouns to they/them so that it'll use up more memory composing strings referring to me and overflow the buffer
       
 (DIR) Post #AroudvOVucqiMlkNiy by foone@digipres.club
       2025-03-07T18:54:06Z
       
       0 likes, 0 repeats
       
       Where in the World is Carmen Sandiego? (1985) has an invert-y-axis option for the joystick, just in case you want to use flight simulator controls to navigate a menu
       
 (DIR) Post #Aroy435SEYI9cFyryK by dan@discuss.systems
       2025-03-07T19:24:43Z
       
       0 likes, 0 repeats
       
       @foone a couple years ago we discovered that one of the console servers in my lab wouldn't let people log in if they had pronouns set in the directory"KVM server has succumbed to anti-woke propaganda" has got to be the best support ticket I have ever opened(apparently it was actually entirely unprepared for a / in someone's name)
       
 (DIR) Post #Aroy43eu6keFOCZBE8 by foone@digipres.club
       2025-03-07T19:32:23Z
       
       0 likes, 0 repeats
       
       @dan hah!I remember when I was at google there was this trick where you'd log into google+ and set your location to, like, "she/her" because it'd show your name like Foone Turing (she/her) but this confused anything that needed to actually look up your location
       
 (DIR) Post #Arp2aZBUpb9AFQZH0K by jjtech@infosec.exchange
       2025-03-07T19:55:36Z
       
       0 likes, 0 repeats
       
       @foone I implemented an entire replacement for dyld on top of Unicorn, i.e. it parsed Mach-O, did relocations/function bindings, etc.For hooks/patching I did it by symbol, Unicorn is stupid though so I made the hook callback stop the emulator and bubble up the current hook so I could nest hooks inside hooks for reasons.
       
 (DIR) Post #ArvWPCWmtHMqMqmbYm by foone@digipres.club
       2025-03-10T23:25:22Z
       
       0 likes, 0 repeats
       
       back on hacking Enhanced, DOS, 1990.My best guess is that this game has between 4-6 compression algorithms, depending on how you count them. Possibly more are hidden in the bowels of this program.
       
 (DIR) Post #ArvWcK8TupabjBfgga by foone@digipres.club
       2025-03-10T23:27:44Z
       
       0 likes, 0 repeats
       
       that may be only the IMAGE compression algorithms, and they use a separate different compression algorithm for text.
       
 (DIR) Post #ArvYTSxJxBWyNuM4vo by plinth@infosec.exchange
       2025-03-10T23:48:28Z
       
       0 likes, 0 repeats
       
       @foone reminds of when I used to crack^H^H^H^H^Hreverse engineer (for educational/research purposes) Apple ][ code. I would almost always start by searching for all references to $C00x to find keyboard scanning and replace the opcode with a BRK to find the game start code.
       
 (DIR) Post #ArvYZXCD6MqzGyDHLE by foone@digipres.club
       2025-03-10T23:49:39Z
       
       0 likes, 0 repeats
       
       everything is going WONDERFULLY
       
 (DIR) Post #ArvZF56bvmzMJZPBFg by foone@digipres.club
       2025-03-10T23:57:07Z
       
       0 likes, 0 repeats
       
       this is not the game to do it with, but I really wanna try swapping out the drawing routines for one of these games once. go into a VESA mode where I can run at 1024x768 or something, and just make the drawing write to that buffer instead. Could I make BIGSCREEN DOS GAMES?
       
 (DIR) Post #ArvZHXeCmgB1PmI9ia by foone@digipres.club
       2025-03-10T23:57:31Z
       
       0 likes, 0 repeats
       
       maybe I'll try it with railroad tycoon sometime. that game has loadable graphics modules. if I figure out enough of how it works, I could write my own driver for VESA Railroads
       
 (DIR) Post #ArvZiOe6MOPLJc35DU by foone@digipres.club
       2025-03-11T00:02:25Z
       
       0 likes, 0 repeats
       
       I want a girl with a short skirt and loooong BUTTONS!
       
 (DIR) Post #ArvZmJz5dKaC14jmAS by foone@digipres.club
       2025-03-11T00:02:33Z
       
       0 likes, 0 repeats
       
       @kawa awww
       
 (DIR) Post #Arva6RhAfpmzitx5VI by kirakira@furry.engineer
       2025-03-11T00:06:47Z
       
       0 likes, 0 repeats
       
       @foone those kinds of buttons feel so good to click
       
 (DIR) Post #ArveBnaD7fdks5VKTI by foone@digipres.club
       2025-03-11T00:52:31Z
       
       0 likes, 0 repeats
       
       hah, I love DOS programmers.This code mallocs 65516 bytes in a loop until malloc returns zero.
       
 (DIR) Post #ArveFWlXagxXs7a8hc by foone@digipres.club
       2025-03-11T00:53:16Z
       
       0 likes, 0 repeats
       
       totally normal part of starting program: allocate all the RAM in the system.I mean, it's DOS. There's nothing else running that could possibly call malloc. So why not?
       
 (DIR) Post #ArveM0roaWq6xzbpIG by foone@digipres.club
       2025-03-11T00:54:27Z
       
       0 likes, 0 repeats
       
       You also have to remember that it's not going to succeed more than, like, 6-8 times? There's just not that much memory in the system that this can touch, since it's not supporting any of the endless varieties of breaking the 640k barrier
       
 (DIR) Post #ArveXpei66tPfc7D8K by foone@digipres.club
       2025-03-11T00:56:34Z
       
       0 likes, 0 repeats
       
       there's a story on Old New Thing somewhere about Windows 95 accidentally breaking a DOS game, because it did this same trick of allocating all the memory, but since Win95 was running as the DPMS, it meant it had access to all of windows 95's virtual memory. including the swap. So instead of mallocing all 8mb or whatever your 486 had, it malloced all that and then tried to use up YOUR ENTIRE HARD DRIVE, slowly.
       
 (DIR) Post #Arveav4ARBkFJsUjpY by foone@digipres.club
       2025-03-11T00:57:10Z
       
       0 likes, 0 repeats
       
       And then it crashed because it didn't expect to succeed that many times. It had a fixed array of handles to memory, and it overflowed because it was run on a system with HUNDREDS OF MEGABYTES OF RAM, which is clearly impossible and unthinkable
       
 (DIR) Post #ArveerfqzWs3xQ0HRo by foone@digipres.club
       2025-03-11T00:57:49Z
       
       0 likes, 0 repeats
       
       @aburka nope! malloc just returns NULL and you're expected to deal with it or crash.
       
 (DIR) Post #ArvelS9OHmvMpAxd8C by foone@digipres.club
       2025-03-11T00:59:02Z
       
       0 likes, 0 repeats
       
       I think the solution was that win95 just defaults DOS programs to maxing out at 16mb. It won't let them allocate more than that unless you adjust the EXE options
       
 (DIR) Post #ArvfXAqDwamL2bkbZI by adriano@lile.cl
       2025-03-11T01:07:34Z
       
       0 likes, 0 repeats
       
       @foone the game was sim city and the solution was to have malloc detect if that was running and in that case behave in such a way that it wouldn’t crash.
       
 (DIR) Post #ArvgPlLQRSRztKNJ1E by foone@digipres.club
       2025-03-11T01:17:28Z
       
       0 likes, 0 repeats
       
       @fluffy I think so, yeah
       
 (DIR) Post #ArvgVHGHCdXgKOb1TU by GabeMoralesVR@mastodon.social
       2025-03-11T01:09:47Z
       
       0 likes, 0 repeats
       
       @adriano @foone so preemptively multitasking sim city on windows was a duct-taped hack, but preemptively multitasking sim city on the amiga released 10 years prior was a-ok. Sounds about right.
       
 (DIR) Post #ArvgVIasFXc2SZEzDc by foone@digipres.club
       2025-03-11T01:18:18Z
       
       0 likes, 0 repeats
       
       @GabeMoralesVR @adriano windows is a matryoshka doll of hacks, and especially when DOS is concerned (because it's also a matryoshka doll of hacks)
       
 (DIR) Post #ArvkkEJqpAMJMYeZyC by solemnwarning@fosstodon.org
       2025-03-11T02:05:57Z
       
       0 likes, 0 repeats
       
       @foone and then Java came along
       
 (DIR) Post #Arvl2GI4EZECgmPwPI by cesarb@mastodon.social
       2025-03-11T02:09:17Z
       
       0 likes, 0 repeats
       
       @foone Was it this one? https://devblogs.microsoft.com/oldnewthing/20160328-00/?p=93204 "As I recall, we fixed this by setting a default policy for MS-DOS applications to limit EMS and XMS memory usage to the actual amount of physical RAM installed in the computer. (The DPMI memory quota defaulted to 8MB or a little bit less than physical memory, whichever is lower.) That way, these programs that try to allocate all the memory in the system would give up before the swap file spiraled out of control."
       
 (DIR) Post #Arvnvkhh3jn0qjzXIu by foone@digipres.club
       2025-03-11T02:41:45Z
       
       0 likes, 0 repeats
       
       @cesarb aye, that's it
       
 (DIR) Post #ArvoZ62xdl0qKzhSZU by foone@digipres.club
       2025-03-11T02:48:49Z
       
       0 likes, 0 repeats
       
       this game runs mostly in a 16 color mode, with some high-end modes being basically 16-colors within 64 or 256 colors, right?SO WHY DOES IT USE 16-BIT INTEGERS FOR COLOR INDICES?
       
 (DIR) Post #ArvocMPdFXAjxnrPxA by foone@digipres.club
       2025-03-11T02:49:24Z
       
       0 likes, 0 repeats
       
       I'm not sure if anyone has ever designed a paletted graphics system that uses more than 256 colors. Probably at some point someone thought it was a good idea.
       
 (DIR) Post #ArvpsVKrwPB0E3tWgS by HoustonDog@mastodon.world
       2025-03-11T03:03:30Z
       
       0 likes, 0 repeats
       
       @foone  didn't the 68000 Atari computer go with a palette of 512 colors for sixteen simultaneous colors ? * forty years later, I can only remember their ST 640x400 high resolution grayscale monitor 🤷
       
 (DIR) Post #ArvpvLKbapXe4D7nhw by yomimono@wandering.shop
       2025-03-11T03:03:50Z
       
       0 likes, 0 repeats
       
       @foone popular embroidery floss manufacturers have more than 256 colors
       
 (DIR) Post #ArvriXhKVG0sZ4mIFs by markjustmark@aus.social
       2025-03-11T03:24:04Z
       
       0 likes, 0 repeats
       
       @foone are you talking about the number of colours on screen simultaneously, or the total number of colours in the palette?The Amiga had a lo-res mode with 32 colours from a 4096 colour palette.
       
 (DIR) Post #Arvs5ZaHeirz4kSpWq by psilocervine@gamedev.lgbt
       2025-03-11T03:28:16Z
       
       0 likes, 0 repeats
       
       @foone eh, who needs it? just dither
       
 (DIR) Post #Arvu20eNHbu1lko25I by foone@digipres.club
       2025-03-11T03:49:51Z
       
       0 likes, 0 repeats
       
       @gereedy ohh, nice
       
 (DIR) Post #ArvzxbekrpDiopGeMS by StompyRobot@mastodon.gamedev.place
       2025-03-11T04:56:25Z
       
       0 likes, 0 repeats
       
       @foone recompile it to wasm, make graphics call out to we GPU.Thinking about it, there has to be DOS for wasm, right?
       
 (DIR) Post #Arw3E0akE3POeMu8qe by foone@digipres.club
       2025-03-11T05:33:02Z
       
       0 likes, 0 repeats
       
       @StompyRobot yeah, that's what the internet archive uses for their emulation
       
 (DIR) Post #ArwDYuuVXheYeXl0OO by ruawhitepaw@chitter.xyz
       2025-03-11T07:28:53Z
       
       0 likes, 0 repeats
       
       @foone why 65516 and not 65536?
       
 (DIR) Post #ArwE9vmjFo5050lhOS by foone@digipres.club
       2025-03-11T07:35:36Z
       
       0 likes, 0 repeats
       
       @ruawhitepaw I'm not really sure. It could be that the malloc algorithm itself has 20 bytes of overhead?
       
 (DIR) Post #ArwkQVWRLf4S5F66W8 by troed@swecyb.com
       2025-03-11T13:36:38Z
       
       0 likes, 0 repeats
       
       @foone Fun fact: On Atari ST the launched application automatically got all free RAM allocated to it by the OS. If you _wanted to be nice_ you could choose to give back what you didn't need. It also meant that if you tried to malloc memory without first having done mshrink the alloc would fail. Totally catches people out nowadays who come back for retro purposes and have forgot :)
       
 (DIR) Post #As06uMtCn3v4SkGl7o by foone@digipres.club
       2025-03-13T04:33:11Z
       
       0 likes, 0 repeats
       
       note to self: patch out the Romani slur in one of the hints for Budapest.
       
 (DIR) Post #As08H7gTabANv1jIMS by foone@digipres.club
       2025-03-13T04:48:34Z
       
       0 likes, 0 repeats
       
       This game was released in 1990 but it has a hint that refers to the currency of Brazil as the "cruzado". But in 1989, it had been replaced by the cruzado novo. Clearly someone was using an out of date encyclopedia!
       
 (DIR) Post #As08KivPaKcGHvQs6K by foone@digipres.club
       2025-03-13T04:49:14Z
       
       0 likes, 0 repeats
       
       (Brazil has had 3/4 currency changes since then, depending on how you count it)
       
 (DIR) Post #As08QxZ843jzQsz2bA by foone@digipres.club
       2025-03-13T04:50:19Z
       
       0 likes, 0 repeats
       
       I'm thinking of dumping a list of all the hints in this game and calculating how many of them are wrong by now.
       
 (DIR) Post #As09BfagiDjxILzB5s by foone@digipres.club
       2025-03-13T04:58:44Z
       
       0 likes, 0 repeats
       
       like, most of the flag clues. do you know how many countries have changed their flags since 1989? LOTS OF THEM
       
 (DIR) Post #As09iczpNalSnwSbQ0 by engarneering@floss.social
       2025-03-13T05:04:34Z
       
       0 likes, 0 repeats
       
       @foone carmen sandiego games made the world feel big and exciting
       
 (DIR) Post #As0GWv7YrjpxDnRTRg by foone@digipres.club
       2025-03-13T06:21:00Z
       
       0 likes, 0 repeats
       
       The description of Hungary says it's bordered by Czechoslovakia, Austria, Yugoslavia, Romania, and the Soviet Union. Two of those are still right!
       
 (DIR) Post #As0Ja4HHZqaiLtBKDI by foone@digipres.club
       2025-03-13T06:55:06Z
       
       0 likes, 0 repeats
       
       @lasombra_br yup
       
 (DIR) Post #As0KzjuC2m68eSBdvk by foone@digipres.club
       2025-03-13T07:11:03Z
       
       0 likes, 0 repeats
       
       so I fly into Reykjavík, and immediately sleep for 8 hours. In the morning, I can go to either the airport or the hotel, but it'll take 3 hours to get to either.Question: where am I right now, if I'm not at the hotel or the airport?
       
 (DIR) Post #As0LBOynfeNRE6u1zM by uint8_t@chaos.social
       2025-03-13T07:13:07Z
       
       0 likes, 0 repeats
       
       @foone still in an airplane!
       
 (DIR) Post #As0LJmfdTM1R1Fw4JM by foone@digipres.club
       2025-03-13T07:14:37Z
       
       0 likes, 0 repeats
       
       @krutonium I don't recall. I don't think I ever used it with BD, so it might be DVD only?
       
 (DIR) Post #As0LX73yxqIA1xgAwC by yomimono@wandering.shop
       2025-03-13T07:16:56Z
       
       0 likes, 0 repeats
       
       @foone ACME safehouse! It has an almanac and a terminal.
       
 (DIR) Post #As0M384ek1HcQsGF4i by aatheus@batchats.net
       2025-03-13T07:22:50Z
       
       0 likes, 0 repeats
       
       @foone Whatcha doing in Iceland, friend?
       
 (DIR) Post #As0MkwhYNyCHu1LemO by gsuberland@chaos.social
       2025-03-13T07:30:42Z
       
       0 likes, 0 repeats
       
       @foone no idea, but enjoy Iceland! it's a lovely country to explore.
       
 (DIR) Post #As0N2kwyoaVwfZ3Z68 by drolltergeist@meemu.org
       2025-03-13T07:33:58Z
       
       0 likes, 0 repeats
       
       @foone Sounds like you're in Reykjavik, boss
       
 (DIR) Post #As0NzJbw6c9qxm8WuG by kboyd@phpc.social
       2025-03-13T07:44:29Z
       
       0 likes, 0 repeats
       
       @foone hotdog restaurant?
       
 (DIR) Post #As0OWypvqmPcNXjfyC by foone@digipres.club
       2025-03-13T07:50:37Z
       
       0 likes, 0 repeats
       
       @aatheus searching for the elusive Carmen Sandiego!
       
 (DIR) Post #As0Oa7MwaE5di6fmMK by aatheus@batchats.net
       2025-03-13T07:51:15Z
       
       0 likes, 0 repeats
       
       @foone I hear that she is in The World. Where, we do not know!
       
 (DIR) Post #As0PRzOATBdeb6vuyW by modulusshift@digipres.club
       2025-03-13T08:00:50Z
       
       0 likes, 0 repeats
       
       @foone in a bed at the hotel attached to the airport. You could theoretically walk to the hotel lobby or the airport terminal in, at most, 15 minutes. You just have ADHD and are attempting to be realistic in your expectations. (don’t worry, me too)
       
 (DIR) Post #As0t7PiEOwdWmZQGWW by ppxl@social.tchncs.de
       2025-03-13T13:33:17Z
       
       0 likes, 0 repeats
       
       @foone 3 hours huh? I guess that'd be one of the 10 pubs in Reykjavik because besides volcanoes and harbors there isn't much to see
       
 (DIR) Post #As1rmqQHzVzWkLcOa8 by baljemmett@mastodon.online
       2025-03-14T00:53:07Z
       
       0 likes, 0 repeats
       
       @foone Ah, now, that one I can answer from personal experience - interviewing for my first job, the company put me up in a hotel overnight beforehand.  Problem: they accidentally booked me into the hotel chain's branch in [suburb], and were then confused when they arrived at the airport hotel to interview me. The shuttlebus back to the airport had just left when we twigged it, too, so it took a good hour+ to make my way over there...
       
 (DIR) Post #As1z5NpZDiBpFaEFlo by foone@digipres.club
       2025-03-14T02:14:51Z
       
       0 likes, 0 repeats
       
       @cazabon then why does it take me three hours to get to the airport?
       
 (DIR) Post #As2iFErntliIHZLgEC by spider@fosstodon.org
       2025-03-14T10:40:58Z
       
       0 likes, 0 repeats
       
       @foone Keflavík!
       
 (DIR) Post #At6SHhhfmr3H6eWyy8 by foone@digipres.club
       2025-04-15T03:53:03Z
       
       0 likes, 0 repeats
       
       They initialized the SoundBlaster DSP backwards.You're supposed to send a 0 to the reset port, wait 3 microseconds, send a 1, then wait up to 100 microseconds for an 0xAA to show up on the data port.They instead send a 1, then a 0, then immediately start trying to read the data port.
       
 (DIR) Post #At6SPI2V5ayfpLtFgW by foone@digipres.club
       2025-04-15T03:54:25Z
       
       0 likes, 0 repeats
       
       they read from the ports instead of measuring time, because that'll take a certain amount of time on x86. I'm too tired to confirm if their timing logic is sound. It's possible they're just assuming the PC is slow enough that it'll wait long enough
       
 (DIR) Post #At6TDesuQPwB9yQBoe by tekhedd@byteheaven.net
       2025-04-15T04:03:30Z
       
       0 likes, 0 repeats
       
       @foone I appreciate your lack of judgment. Back in those times it might have actually been a totally reasonable assumption. I mean, better than spinning the CPU, the totally next level timing delay mechanism of the times.
       
 (DIR) Post #At6TnX3R0zopIeRzzU by foone@digipres.club
       2025-04-15T04:10:04Z
       
       0 likes, 0 repeats
       
       I bet broderbund bought this sound code. It feels completely different: This was either compiled on a different compiler or was written in assembly.
       
 (DIR) Post #At6Tqlx05V6QMtzCMq by foone@digipres.club
       2025-04-15T04:10:40Z
       
       0 likes, 0 repeats
       
       @tekhedd oh yeah, it made sense back in the day. that's a valid method of timing, I'm just not 100% sure they're actually matching the docs on how long they should wait, especially on later and faster systems
       
 (DIR) Post #At6UUA4YKy8aTUIiAq by foone@digipres.club
       2025-04-15T04:17:46Z
       
       0 likes, 0 repeats
       
       yeah a compiler doesn't just start using CF to return bools instead of AX. This is assembly.
       
 (DIR) Post #At6UsKxzU6ZHDDl8Yi by foone@digipres.club
       2025-04-15T04:22:05Z
       
       0 likes, 0 repeats
       
       they're passing single bytes to functions! C widens integers to a word, so on a 16bit system, they're passed in 16-bit registers.
       
 (DIR) Post #At6VNuoSG8LjMeMAXA by foone@digipres.club
       2025-04-15T04:27:51Z
       
       0 likes, 0 repeats
       
       they're sending a... internal soundblaster test command? (DSP 0xF0)I dunno why this code is like this.
       
 (DIR) Post #At6W9VnmYIFBh7jnge by mkoek@mastodon.nl
       2025-04-15T04:36:21Z
       
       0 likes, 0 repeats
       
       @foone incredible that you know this stuff 🙂 I enjoy your reversing threads, thank you
       
 (DIR) Post #At6WJsaYgcj3GJUoqW by foone@digipres.club
       2025-04-15T04:38:19Z
       
       0 likes, 0 repeats
       
       I suspect there may be an issue here: I identified a variable as containing the Soundblaster IO port, right? and I'm assuming everything that uses it is Soundblaster code.But it may just be "soundcard IO port" and there's other sound device code mixed in here. So that's why some of it doesn't make sense as soundblaster, it's actually tandy 3voice or something
       
 (DIR) Post #At6YBBEmBK72OzHrvM by foone@digipres.club
       2025-04-15T04:59:05Z
       
       0 likes, 0 repeats
       
       I just found a function (inside another function!) that's a fixed delay. How long is it?it's a loop that runs 256 times!
       
 (DIR) Post #At6YEHvzjqla2cz5we by foone@digipres.club
       2025-04-15T04:59:25Z
       
       0 likes, 0 repeats
       
       that's so cute that this code considers "256 instructions" to be a meaningful length of time.
       
 (DIR) Post #At6ZqF8KhVmiJRPx2G by TomF@mastodon.gamedev.place
       2025-04-15T05:17:40Z
       
       0 likes, 0 repeats
       
       @foone I hope this isn't a super-early version of the Miles library! He'd be so embarrassed...
       
 (DIR) Post #At6aqWfTbjR2eJcREm by jpm@aus.social
       2025-04-15T05:28:58Z
       
       0 likes, 0 repeats
       
       @foone I remember this from the days of C64 BASIC
       
 (DIR) Post #At6bh7aFbJssCRFoKe by jbqueru@fosstodon.org
       2025-04-15T05:38:29Z
       
       0 likes, 0 repeats
       
       @foone the Z80 considers 128 instructions to be a good DRAM refresh interval. With more complexity than that, of course.
       
 (DIR) Post #At6boshIpcKKLbFjbU by polpo@bitbang.social
       2025-04-15T05:39:53Z
       
       0 likes, 0 repeats
       
       @foone I’ve run into so much nonsensical SB init code
       
 (DIR) Post #At6cc0zMnEekFh8AeO by coreworlder@dice.camp
       2025-04-15T05:48:43Z
       
       0 likes, 0 repeats
       
       @foone That reminds me of a game (I think it was Space Crusade) which was very glitchy on my family’s 486 DX2 66 and eventually led to me discovering a use for the Turbo button that dropped it to 7Mhz (or so the seven segment display on the front claimed).
       
 (DIR) Post #At6dNBIGIX9zp2SY3U by foone@digipres.club
       2025-04-15T05:57:18Z
       
       0 likes, 0 repeats
       
       there's code in here specifically to detect if it's running on an IBM PS/1 by looking at the CMOS area? WHAT THE
       
 (DIR) Post #At6eLLuVxA3k7p2lX6 by jbqueru@fosstodon.org
       2025-04-15T06:08:10Z
       
       0 likes, 0 repeats
       
       @foone Working on some compression tricks, I am assuming 10 bits per symbol, in order to be able to preprocess 8bpp graphics with delta compression in both x and y. And I'll have 3 symbols left just in case (for end of stream markers or other tricks).
       
 (DIR) Post #At6fSbQsjzmAFOCjVA by foone@digipres.club
       2025-04-15T06:20:43Z
       
       0 likes, 0 repeats
       
       the menu system limits menus to having a maximum of 32 items.which is weird because ONLY 17 WILL FIT ON SCREEN
       
 (DIR) Post #At6hl2caalMlh0bHIe by otte_homan@theblower.au
       2025-04-15T06:46:23Z
       
       0 likes, 0 repeats
       
       @foone well, look, having 1 bit less to index the menu would limit it to a max of 16, and then d have the "THERE WOULD BE SPACE FOR ONE MORE!!!" drama.
       
 (DIR) Post #At6iwcwry8FVUzAtH6 by cerement@social.targaryen.house
       2025-04-15T06:59:37Z
       
       0 likes, 0 repeats
       
       @foone Adobe and their 5 screens of scrolling font menu …
       
 (DIR) Post #At6zCSWq4lVz59ZPvs by foone@digipres.club
       2025-04-15T10:01:47Z
       
       0 likes, 0 repeats
       
       @jez yeah!I knew a kid back in the 90s who played NES games with the controller backwards
       
 (DIR) Post #At77jUbYB4TAi62K3c by timoj@mastodon.online
       2025-04-15T11:37:28Z
       
       0 likes, 0 repeats
       
       @foone Probably to somehow commiserate with the user over their famously pathetic keyboard.
       
 (DIR) Post #At79eYQoio8h2VmzCq by timoj@mastodon.online
       2025-04-15T11:59:00Z
       
       0 likes, 0 repeats
       
       @foone It should really be on the lookout for a PCjr. ;)
       
 (DIR) Post #At7jvZpYN18ieQm9FQ by tekhedd@byteheaven.net
       2025-04-15T18:45:28Z
       
       0 likes, 0 repeats
       
       @foone The problem with byzantine systems is that everything *could* make sense :P
       
 (DIR) Post #At8kYOOH22qJceU5ce by datawuppi@troet.cafe
       2025-04-16T06:27:05Z
       
       0 likes, 0 repeats
       
       @foone that reminds ne of my Amiga BASIC days. As it had no sleep or somesuch, it actually required:FOR I 1 TO 1000; NEXTIIRC that where ~3s or something.And yes, that thing was in the manual for some of the example programs.
       
 (DIR) Post #At96ZCoxjMj51NlE92 by foone@digipres.club
       2025-04-16T10:33:46Z
       
       0 likes, 0 repeats
       
       I did some experimenting with MSVC 5.1, and it's weird. I get the same strings in the exe as carmen.exe has, but the code itself looks completely different. either I set up my compiler wrong, or this game is full of assembly even for very simple functions
       
 (DIR) Post #At9B6Af1BRQlh55G9A by foone@digipres.club
       2025-04-16T11:24:35Z
       
       0 likes, 0 repeats
       
       I don't know exactly what this function does (I know it sets some flags based on something in the graphics context) but I DO know one important thing about it:they included it in the final binary FOUR TIMES.
       
 (DIR) Post #At9B9C6oFtm13QWavY by foone@digipres.club
       2025-04-16T11:25:10Z
       
       1 likes, 0 repeats
       
       byte-identical.this is a compiler & linker from 1988, it doesn't understand how to merge identical copies of functions apparently
       
 (DIR) Post #At9D0OEC1lKZwWuKzg by foone@digipres.club
       2025-04-16T11:45:55Z
       
       0 likes, 0 repeats
       
       @clark nope! no overlays here. Not nearly enough code to need it.
       
 (DIR) Post #At9HM60upMd7dlIqtU by foone@digipres.club
       2025-04-16T12:34:42Z
       
       0 likes, 0 repeats
       
       I found another function which has 4 copies.I'm starting to suspect this program originally had 4 C source files and the linker wasn't optimizing this
       
 (DIR) Post #At9HfzA60pbIBI55t2 by anparker@techhub.social
       2025-04-16T12:38:20Z
       
       0 likes, 0 repeats
       
       @foone But you can't have 4 symbols with the same name. Maybe it some sort of inlining?
       
 (DIR) Post #At9I2S88zMjeOcshk0 by foone@digipres.club
       2025-04-16T12:42:26Z
       
       0 likes, 0 repeats
       
       wait I bet it's drivers!like, one version of this function is called by VGA_DrawFuncUnknown and nothing else. Another one? CGA/Hercules.the third? EGAThe last? Tandy.They compiled the 4 video drivers separately, and then linked them into the EXE, with no deduplication across compile units
       
 (DIR) Post #At9JHCPhnzu3wvgugq by foone@digipres.club
       2025-04-16T12:56:12Z
       
       0 likes, 0 repeats
       
       yeah. Found another: VGAMalloc is the same as CGAMalloc (and Hercules doesn't have it's own HerculesMalloc, because it's in the same code unit as CGA: So it just uses CGAMalloc)Tandy has TandyMalloc.But not EGAMalloc. That one is completely different.
       
 (DIR) Post #At9JqXZ1A4CpgHtmtM by whvholst@eupolicy.social
       2025-04-16T13:02:34Z
       
       0 likes, 0 repeats
       
       @foone That is odd, given the differences in video memory layout between VGA and CGA
       
 (DIR) Post #At9LP4snt7DOooBb9s by foone@digipres.club
       2025-04-16T13:20:06Z
       
       0 likes, 0 repeats
       
       @whvholst the function just mallocs the param passed in, so it doesn't care about layout.except for EGA. which I don't understand yet
       
 (DIR) Post #AtCst8jKc3Pfvs1rHM by foone@digipres.club
       2025-04-18T06:19:22Z
       
       0 likes, 0 repeats
       
       the DrawLine API is weird. To draw the horizontal underline for the hotkeys in the menu, it calls DrawLine(0, -width). It's DrawLine(int y, int x), and yeah you pass negative numbers
       
 (DIR) Post #AtCt9LsHVgj3KewhG4 by foone@digipres.club
       2025-04-18T06:22:22Z
       
       0 likes, 0 repeats
       
       it's also off by one. because 0,0 is silly, you're always drawing at least one pixel. So DrawLine(0, -5) draws a six pixel wide horizontal line to the left
       
 (DIR) Post #AtDTfUppKNJqjsQO92 by gistofspirit@retro.pizza
       2025-04-18T13:11:24Z
       
       0 likes, 0 repeats
       
       @foone That sounds more like (int startPoint, int endPoint) than (int startPoint, int length).
       
 (DIR) Post #AtLeTdKYZJbwNC1W6q by foone@digipres.club
       2025-04-22T11:50:16Z
       
       0 likes, 0 repeats
       
       PUSH       BXPUSH       ESPUSH       SICALL       StartPlayingSoundPOP        BXPOP        ESPOP        SIsince when has the x86 stack been FIFO instead of LIFO?
       
 (DIR) Post #AtLfjsEb1YDrBTXko4 by KeyJ@mastodon.gamedev.place
       2025-04-22T12:04:27Z
       
       0 likes, 0 repeats
       
       @foone Hey, it's a free XCHG BX, SI - what's not to like? ;)
       
 (DIR) Post #AtLfmbdbBddgZxXbk0 by dentaku@fnordon.de
       2025-04-22T12:04:46Z
       
       0 likes, 0 repeats
       
       @foone Driveby register swap.
       
 (DIR) Post #AtLg7b7iIHl946dWnw by foone@digipres.club
       2025-04-22T12:08:49Z
       
       0 likes, 0 repeats
       
       the internal audio API used by this game is interesting. LoadAndPlaySoundChunk is called with a chunk name from digisnd.dat, but you can also pass -1 or 0. I'm not sure what -1 does yet (maybe silence a currently playing sound?) but 0 means "wait until the sound finishes"
       
 (DIR) Post #AtLgBXEYhIDQ9ziRLk by foone@digipres.club
       2025-04-22T12:09:34Z
       
       0 likes, 0 repeats
       
       I'm not really sure why it works that way, especially because calling LoadAndPlaySoundChunk(0) is equivalent to calling WaitUntilSoundFinishes().So why not just do that instead?
       
 (DIR) Post #AtLh8BvVYp1DA7m568 by foone@digipres.club
       2025-04-22T12:20:02Z
       
       0 likes, 0 repeats
       
       uh oh. the computer noise is triggered with:LoadAndPlaySoundChunk(217)but I look in the DIGISND.DAT file and it has chunks 200-216. So either my DAT file parsing is wrong or it's loading sounds from elsewhere, somehow? because the sound DOES play, so it's not just an error
       
 (DIR) Post #AtLhI5nbCJWJ3OnR0y by foone@digipres.club
       2025-04-22T12:21:53Z
       
       0 likes, 0 repeats
       
       I thought it might just be playing from MIDISND.DAT instead (since the computer noise is very beepy, maybe it's just a synth sound?) but MIDISND.DAT starts at chunk id 218 and goes up. WHERE IS 217?
       
 (DIR) Post #AtLhXa46wz8xGbuB28 by gabe@mendeddrum.org
       2025-04-22T12:24:41Z
       
       0 likes, 0 repeats
       
       @foone based on your post experiences with this kind of code: is it only using the lower seven bits, so sound 217 is actually 89?
       
 (DIR) Post #AtLhvD5W1zkCxCpU7E by foone@digipres.club
       2025-04-22T12:28:59Z
       
       0 likes, 0 repeats
       
       @gabe nah, it's a 16bit value. other chunks are like 12922
       
 (DIR) Post #AtLhyFPtpTkv2roPzM by foone@digipres.club
       2025-04-22T12:29:24Z
       
       0 likes, 0 repeats
       
       @BetaRays they're not ordinals, the data file species which chunk id the chunk is. there's a lot of gaps.
       
 (DIR) Post #AtLi2VgLIVlyeJXHGq by foone@digipres.club
       2025-04-22T12:30:16Z
       
       0 likes, 0 repeats
       
       huh. weird. when you try to backspace too far in the name entry screen, it goes "duh-nuh" at you, but that isn't connected to a LoadAndPlaySoundChunk call.So it's using a different function for this ONE NOISE?
       
 (DIR) Post #AtLi5Y3CwllkrfgC0m by foone@digipres.club
       2025-04-22T12:30:40Z
       
       0 likes, 0 repeats
       
       maybe it's hardcoded to pc speaker and I can't tell the difference between soundblaster and pc speaker because they're both coming out of the same laptop
       
 (DIR) Post #AtLiImmbU5JMJvE1c8 by foone@digipres.club
       2025-04-22T12:33:16Z
       
       0 likes, 0 repeats
       
       YEP. muted my soundblaster (MIXER SB 0:0) and it's still duh-nuhing at me. why would you do this to me, brøderbund?
       
 (DIR) Post #AtLiWa1jhuRSoRsgPA by galibert@piaille.fr
       2025-04-22T12:35:41Z
       
       0 likes, 0 repeats
       
       @foone Perhaps a library they reused?
       
 (DIR) Post #AtLirNcV20kaPjzkAK by foone@digipres.club
       2025-04-22T12:39:29Z
       
       0 likes, 0 repeats
       
       @galibert I do think they used an external library for the sound code: the calling convention changes whenever sound is involved
       
 (DIR) Post #AtLivTNjYDrTRV2XPk by galibert@piaille.fr
       2025-04-22T12:40:13Z
       
       0 likes, 0 repeats
       
       @foone Oh yeah, that's a good hint
       
 (DIR) Post #AtLjxc6CDBtf0mQBiy by foone@digipres.club
       2025-04-22T12:51:48Z
       
       0 likes, 0 repeats
       
       ah-ha! I found 217. DIGISND.DAT has PCM sound effects for 200-216. But there's also chunks in CARMEN.DAT for 200-229.I didn't think the ones in CARMEN.DAT were sound files because they're so small... but they're just the right size to be PC speaker sound effects!
       
 (DIR) Post #AtLk2Z1t3FrcwJla88 by foone@digipres.club
       2025-04-22T12:52:44Z
       
       0 likes, 0 repeats
       
       the way the game works is that it loads CARMEN.DAT always, then if you have a sound card it supports, it loads DIGISND.DAT which replaces chunks 200-216 in memory with the DIGISND.DAT ones, which are PCM. But if you don't have a sound card, it still has the CARMEN.DAT ones loaded, and they're all pc speaker sound effects.
       
 (DIR) Post #AtLntCFam0kzVCxw3M by foone@digipres.club
       2025-04-22T13:35:47Z
       
       0 likes, 0 repeats
       
       they hardcoded two sound effects into the EXE and the rest are loaded from the DAT files.eww. Someone hacked something in at the last moment!
       
 (DIR) Post #AtLnyfPvl9SFPRPTjU by oliversampson@sigmoid.social
       2025-04-22T13:36:45Z
       
       0 likes, 0 repeats
       
       @foone That's....something.
       
 (DIR) Post #AtLo7VteWgqEUJWx8q by foone@digipres.club
       2025-04-22T13:38:26Z
       
       0 likes, 0 repeats
       
       yeah lets just return 17 bits from this function WHY NOT there are no rules
       
 (DIR) Post #AtLoEUpisVylDW1QdE by adriano@lile.cl
       2025-04-22T13:39:39Z
       
       0 likes, 0 repeats
       
       @foone A nice, solid prime number, like momma used to make
       
 (DIR) Post #AtLoH1QIgFvis8KqIq by foone@digipres.club
       2025-04-22T13:39:51Z
       
       0 likes, 0 repeats
       
       correction: 33 bits
       
 (DIR) Post #AtLpBr1K1xqh79keci by foone@digipres.club
       2025-04-22T13:50:24Z
       
       0 likes, 0 repeats
       
       correction correction: 49 bits
       
 (DIR) Post #AtLyiFW7O3wHwZg6XA by RueNahcMohr@infosec.exchange
       2025-04-22T15:37:04Z
       
       0 likes, 0 repeats
       
       @foone StartPlayingSound:POP         AXPOP        BXPOP        ESPOP        SICALL       EnableSoundPUSH       BXPUSH       ESPUSH       SIPUSH      AX🤣
       
 (DIR) Post #AthVvDdlZSmAuiOjJo by foone@digipres.club
       2025-05-03T00:58:10Z
       
       0 likes, 0 repeats
       
       did some stats: there's 729 functions in the EXE.I've named (in some way, counting placeholders) 355 of them, or 49%
       
 (DIR) Post #AthW5CZEPpwoTu2Lgm by foone@digipres.club
       2025-05-03T01:00:00Z
       
       0 likes, 0 repeats
       
       by placeholders I mean things like "pcjr_sound_related" or "VGAFunc8"and 13 of those function names include the word "maybe"
       
 (DIR) Post #AthacJMQZuiEvL5iz2 by static@aus.social
       2025-05-03T01:03:41Z
       
       0 likes, 0 repeats
       
       @foone IBM missed an opportunity to put the PCjr sound in the AT.
       
 (DIR) Post #AthaxqILKDg99GRoSe by azonenberg@ioc.exchange
       2025-05-03T01:54:31Z
       
       0 likes, 0 repeats
       
       @foone Sounds like most of my IDBs."UART_func4", "Socket_func2"
       
 (DIR) Post #AthpUUZmUimKhg4DB2 by foone@digipres.club
       2025-05-03T04:37:24Z
       
       0 likes, 0 repeats
       
       up to 52% after today's work
       
 (DIR) Post #Atidml5KqgVgpFjIZM by foone@digipres.club
       2025-05-03T14:00:54Z
       
       0 likes, 0 repeats
       
       I think they generated their hints wrong.The *22 chunk for a city says something like "$SUSPECT was going to an opera with the president" or "$SUSPECT would be having tea with the Emperor", right?but it's also got "drove away in a vehicle flying a green, blue, and yellow flag". which'd be fine, except that hint is also in *19! I think they accidentally duplicated it when they generated the cities.dat file
       
 (DIR) Post #Atidpj16ziSfHRAWX2 by foone@digipres.club
       2025-05-03T14:01:20Z
       
       0 likes, 0 repeats
       
       this causes a glitch in the game where you can have 2 of your 3 informants give you the same flag-color hint, which is less than useful
       
 (DIR) Post #AtlLBITR2wo7fqrxWS by foone@digipres.club
       2025-05-04T21:16:38Z
       
       0 likes, 0 repeats
       
       ugh. ghidra really doesn't understand that you can call far functions using near calls. and the compiler for this LOVES using them.
       
 (DIR) Post #AtlLHzdNUSLXGriG8W by foone@digipres.club
       2025-05-04T21:17:54Z
       
       0 likes, 0 repeats
       
       I might have explained this before, but normally a near call to a far function will break, because it'll pop 4 bytes off the stack for the return address, when the near call only pushed 2. So you fix this by doing push CS first, so it'll pop the 2 from the call, and then the 2 you placed before.
       
 (DIR) Post #AtlLLJX7xhkRr8NAzg by foone@digipres.club
       2025-05-04T21:18:31Z
       
       0 likes, 0 repeats
       
       but ghidra doesn't understand that this is what's happening, so it hallucinates it as a parameter to the function that's CS.
       
 (DIR) Post #AtlLONsIHFZeBnjlMe by foone@digipres.club
       2025-05-04T21:19:03Z
       
       0 likes, 0 repeats
       
       so you'll see, for example, it decompiles a strlen as:uint1 = strlen(0x1000, some_String);which is less than useful
       
 (DIR) Post #AtlLUVaMWP1HqEGoAi by foone@digipres.club
       2025-05-04T21:20:10Z
       
       0 likes, 0 repeats
       
       this is "thing 9005 that you don't have to worry about anymore, thank fuck"
       
 (DIR) Post #AtlLZ2AXJqKK3VLeQi by foone@digipres.club
       2025-05-04T21:21:01Z
       
       0 likes, 0 repeats
       
       in 32bit we do 32bit calls and 32bit returns. in 64bit we do 64bit calls and 64bit returns.in 16bit we can do 16bit calls and 16 bits returns, 32bit calls and 32bit returns, and sometimes we do a 16bit call to a 32bit return because it's slightly fewer bytes
       
 (DIR) Post #AtlNYRNWIznprNGYOO by foone@digipres.club
       2025-05-04T21:43:17Z
       
       0 likes, 1 repeats
       
       one of my favorite stupid methods of reversing is "break it"what's this function do? well, lemme disable it, and see what breaks.Apparently this is the "restore the image under the cursor" function.
       
 (DIR) Post #AtlPhgUDhehhEOw3FY by montyontherun@bitbang.social
       2025-05-04T22:07:16Z
       
       0 likes, 0 repeats
       
       @foone I honestly expected this game to be written in ASM and now follow any calling convention? Or maybe things were less chaotic than I really knew back then?
       
 (DIR) Post #AtlQRh3FvzL0IxGIoi by Unixbigot@aus.social
       2025-05-04T22:15:35Z
       
       0 likes, 0 repeats
       
       @foone TIL, thanks, filing that trick away.  (JK about to go use it on a problem)
       
 (DIR) Post #AtlQUWhMsoPD42NJ8S by foone@digipres.club
       2025-05-04T22:15:55Z
       
       0 likes, 0 repeats
       
       @montyontherun it's partially in ASM (although possible just some included libraries) but it's mainly C, since I can tell it was (mostly) compiled with Microsoft C 5.0
       
 (DIR) Post #AtlRv3vK4k2Haq7SS0 by foone@digipres.club
       2025-05-04T22:32:08Z
       
       0 likes, 0 repeats
       
       DOSBox needs logging breakpoints. yet another thing to stick on my list of stuff-it'd-be-neat-to-have in my dosbox-debugger
       
 (DIR) Post #AtlTIOMWLp17b5WsHQ by foone@digipres.club
       2025-05-04T22:47:28Z
       
       0 likes, 0 repeats
       
       @gloriouscow oh I'm excited looking forward to it. I'm gonna use MartyPC as soon as a game I'm hacking on is supported in it
       
 (DIR) Post #AtlTUSH3dH5zCkj4c4 by foone@digipres.club
       2025-05-04T22:49:47Z
       
       0 likes, 0 repeats
       
       @gloriouscow I think so, yeah.Actually, it supports EGA/CGA/Hercules/MCGA as well, so I could definitely try running Carmen in MartyPC. Maybe next session, I'm already halfway through a lot of nasty stuff
       
 (DIR) Post #AtlTvbcsyBZ61oslnM by foone@digipres.club
       2025-05-04T22:54:39Z
       
       0 likes, 0 repeats
       
       @gloriouscow I'm specifically thinking of logging breakpoints of the sorts where you can attach an expression. So it's not just 0823:A35C DrawString, it's something like 0823:A35C DrawString(25, 60, "Foobar"), because you can define it with some kind of simple expression language. like I tell it when it hits 0823:A35C, it treats stack[4:6],stack[6:8] as ints, and stack[8:10] as a string. OllyDBG and X64dbg do this, and it's very handy for understanding more complex code
       
 (DIR) Post #AtlUGifzx6q7yXPEsi by foone@digipres.club
       2025-05-04T22:58:30Z
       
       0 likes, 0 repeats
       
       @gloriouscow understandable! this is an advanced feature.
       
 (DIR) Post #AtlUg9MLsl9NyHLJhY by foone@digipres.club
       2025-05-04T23:03:06Z
       
       0 likes, 0 repeats
       
       @gloriouscow I know the feeling! it reminds me, in a bad way, of BASIC
       
 (DIR) Post #AtlV12nPTrGDhCxiAS by foone@digipres.club
       2025-05-04T23:06:53Z
       
       0 likes, 0 repeats
       
       it's a good thing ghidra has both enums and equates, because the equates function only sometimes works.
       
 (DIR) Post #AtlVi35gGDxx3u0wmO by foone@digipres.club
       2025-05-04T23:14:32Z
       
       0 likes, 0 repeats
       
       @s0 well this is set in 1990, which was a very different time
       
 (DIR) Post #AtlY8QLIdJ1Uc81Yyu by foone@digipres.club
       2025-05-04T23:41:48Z
       
       0 likes, 0 repeats
       
       1. This is a flat-earth-ass flight path. Apparently Where in the World is Carmen Sandiego? takes place on a rectangle-planet. 2. the world doesn't wrap. This path is longer than "just" crossing the pacific, which is how this flight actually goes.
       
 (DIR) Post #AtlYBpoKOocETGEE1Q by foone@digipres.club
       2025-05-04T23:42:27Z
       
       0 likes, 0 repeats
       
       adding "make the flight paths realistic" to my silly-ideas todo list
       
 (DIR) Post #AtlYnQBG8jP5z6sRFY by troldann@techhub.social
       2025-05-04T23:49:12Z
       
       0 likes, 0 repeats
       
       @foone Complete with geodesic calculations?
       
 (DIR) Post #AtlZ9t3zR2HjvxBnoe by foone@digipres.club
       2025-05-04T23:53:19Z
       
       0 likes, 0 repeats
       
       @troldann of course! (there's only 435 routes, I can precalculate them offline and just embed the answers in the code)
       
 (DIR) Post #AtlZOkxTqqul8lEcfw by timixretroplays@digipres.club
       2025-05-04T23:55:57Z
       
       0 likes, 0 repeats
       
       @foone Ah yes, the four capital cities
       
 (DIR) Post #AtlZn7i8uRSIekgD32 by foone@digipres.club
       2025-05-05T00:00:21Z
       
       0 likes, 0 repeats
       
       @timixretroplays 4 ought to be enough for anyone - willy gates
       
 (DIR) Post #AtlaBv2r8cHac5BxDs by TomF@mastodon.gamedev.place
       2025-05-05T00:04:48Z
       
       0 likes, 0 repeats
       
       @foone This means Carmen Sandiego lives in the Cobra Kai universe.https://www.instagram.com/cobrakaiseries/reel/DC7FcKSP47e/
       
 (DIR) Post #AtlaSqiGUvhg6HdKu8 by Oneironaut@infosec.exchange
       2025-05-05T00:07:55Z
       
       0 likes, 0 repeats
       
       @foone this behavior has always bothered me
       
 (DIR) Post #AtldoiBx9xgHuDdVqK by jpm@aus.social
       2025-05-05T00:45:27Z
       
       0 likes, 0 repeats
       
       @foone @troldann a direct JFK-SYD flight? Even with Qantas’s Project Sunrise, it’s still a bit too far…
       
 (DIR) Post #Atm4jTFVzBQysQ1m9w by gkrnours@mastodon.gamedev.place
       2025-05-05T05:46:57Z
       
       0 likes, 0 repeats
       
       @foone I wonder if an easy fix would be to have 3 maps, centered on the US / Europe / Asia, compute the linear distance on each and use the map with the shorter distance and most centered.
       
 (DIR) Post #AtmBb1pwihUFDlzPxg by cyberlyra@masto.hackers.town
       2025-05-05T07:03:52Z
       
       0 likes, 0 repeats
       
       @foonebest game ever tho @trochee
       
 (DIR) Post #AtmrIBihwjGgRjIp7Y by BRicker@fosstodon.org
       2025-05-05T14:51:10Z
       
       0 likes, 0 repeats
       
       @foone for a game ostensibly teaching geography that's horrendous! (Otoh for intending to run on home PCs with 8088, 386, 486sx (emulated floating point only), that might be excusable? CORDIC integer trig is amazing but avoiding it might be forgivable.)
       
 (DIR) Post #AtmrxBnuXTqGZzHs9I by BRicker@fosstodon.org
       2025-05-05T14:58:34Z
       
       0 likes, 0 repeats
       
       @foone @troldann Only 30 destinations? I guess that was just enough to keep each play through somewhat different without switching floppies 💾 30×(30−1)÷2
       
 (DIR) Post #AtmslxdSybyRPCbyvA by foone@digipres.club
       2025-05-05T15:07:48Z
       
       0 likes, 0 repeats
       
       @BRicker @troldann yeah, there's only 30. They had room for more, but I guess they had to stop somewhere.The second disk has the CITIES.DAT file, which is 168kb. There's still 102kb free on that disk, so it would be doable to add another 20 or so cities
       
 (DIR) Post #AtmtgNEwxyoV282nLs by BRicker@fosstodon.org
       2025-05-05T15:17:56Z
       
       0 likes, 0 repeats
       
       @foone More opportunities!
       
 (DIR) Post #Atn7iIXwmqF6Pik2W8 by montyontherun@bitbang.social
       2025-05-05T17:55:06Z
       
       0 likes, 0 repeats
       
       @foone well, given that it is not graphically intensive, it makes sense. I just assumed people went the ASM way by default.Thanks for the clarification!
       
 (DIR) Post #Au2AKnHW4rOU1JwHSq by foone@digipres.club
       2025-05-13T00:05:14Z
       
       0 likes, 0 repeats
       
       arg, this function is saving and storing part of it's own return address. It's a farcall (in 16bit mode), and it is looking at the stack to read the segment portion of the address, so it can save it away in a struct.
       
 (DIR) Post #Au2D2F8caD56mBclyy by foone@digipres.club
       2025-05-13T00:35:27Z
       
       0 likes, 0 repeats
       
       this is a SaveRegisters function, which also saves the cs:ip of the calling function. but there's also a RestoreRegisters function, which ALSO restores the cs:ip of the calling function.and then it returns. to the restored cs:ipTHIS FUNCTION IS A DYNAMIC GOTO
       
 (DIR) Post #Au2D9ciZJQNRw0xQxc by foone@digipres.club
       2025-05-13T00:36:49Z
       
       0 likes, 0 repeats
       
       is this a setjmp/longjmp, maybe? that's the only way this could really be C
       
 (DIR) Post #Au2DD2VRt7qimiRwwa by astrid@tiny.tilde.website
       2025-05-13T00:37:20Z
       
       0 likes, 0 repeats
       
       @foone everyone loves a surprise longjmp()
       
 (DIR) Post #Au2DEkQU52rTI0wTvE by foone@digipres.club
       2025-05-13T00:37:26Z
       
       0 likes, 0 repeats
       
       gonna have to dig out the appropriate compiler and check if setjmp/longjmp compiles the same.then cry
       
 (DIR) Post #Au2DJA16sPN1ofB5Pc by Canageek@wandering.shop
       2025-05-13T00:38:28Z
       
       0 likes, 0 repeats
       
       @foone Wait, doesn't C have a goto command that you can use with text labels? I seem to recall it, my professor, having a discussion with us about when it was okay to use go to, as well as the dangers of it in my first year C class, many years ago
       
 (DIR) Post #Au2DwkHbyQh5aTlupk by foone@digipres.club
       2025-05-13T00:45:40Z
       
       0 likes, 0 repeats
       
       @Canageek yeah, but this isn't a static goto, it's a dynamic one. the destination changes at runtime, which isn't something that goto can do
       
 (DIR) Post #Au2ERy4QlKUJKEUj4a by Canageek@wandering.shop
       2025-05-13T00:51:13Z
       
       0 likes, 0 repeats
       
       @foone ah, that makes sense, thank you
       
 (DIR) Post #Au2EayUGaAhxDwsEoS by whitequark@mastodon.social
       2025-05-13T00:52:56Z
       
       0 likes, 0 repeats
       
       @foone that sounds extremely SjLj-like, yeah
       
 (DIR) Post #Au2FbuqVhp08AtI6DY by foone@digipres.club
       2025-05-13T01:04:17Z
       
       0 likes, 0 repeats
       
       okay it is not the same setjmp/longjmp as the one MSC5.0 generates. But it's close enough that yeah, this is a setjmp
       
 (DIR) Post #Au2FuBhpl8Glg4wfUe by foone@digipres.club
       2025-05-13T01:07:40Z
       
       0 likes, 0 repeats
       
       this also tells me that I'm probably right about this game being primarily written in C, but I'm wrong about which compiler was used. MSC5.0 doesn't match: it saves DX, when the setjmp used in carmen doesn't.
       
 (DIR) Post #Au2G0zGSPn7F7NNlPU by foone@digipres.club
       2025-05-13T01:08:53Z
       
       0 likes, 0 repeats
       
       I need to build my own crappy Compiler Explorer project for old DOS compilers
       
 (DIR) Post #Au2G3PPACFCulobpo0 by foone@digipres.club
       2025-05-13T01:09:14Z
       
       0 likes, 0 repeats
       
       something that has some structure, rather than just slowly filling my hard drive with ancient compilers
       
 (DIR) Post #Au2GSHAFyHVqS7Uhea by foone@digipres.club
       2025-05-13T01:13:48Z
       
       0 likes, 0 repeats
       
       okay so, the way main works is like this:it calls initGame(), then setjmp.if setjmp returns 0, it initializes the game. if it returns 2, it goes into the main game loop. except it's not really a loop? because the functions longjmp back to main(). it's a distributed dynamic goto loop
       
 (DIR) Post #Au2Ghom9Hv1L2Vd3ui by foone@digipres.club
       2025-05-13T01:16:38Z
       
       0 likes, 0 repeats
       
       like if you do File->New, it longjmps(&env, 1).which causes the game to reload from the beginning.
       
 (DIR) Post #Au2GkNNraP4MxEUPdQ by foone@digipres.club
       2025-05-13T01:16:55Z
       
       0 likes, 0 repeats
       
       but the handler for file->new is inside main itself. so this global goto ends up being local
       
 (DIR) Post #Au2H327uqOmYWovVuS by blackbirdsr72@infosec.exchange
       2025-05-13T01:20:25Z
       
       0 likes, 0 repeats
       
       @foone https://en.wikipedia.org/wiki/Turbo_Pascal
       
 (DIR) Post #Au2H5Fnoy6hnWSaPkO by foone@digipres.club
       2025-05-13T01:20:46Z
       
       0 likes, 0 repeats
       
       MSC4.0's installer is "go read the manual, it'll tell you which directories to make and which files to copy there"
       
 (DIR) Post #Au2HqFanZDjiTuuA0u by AVincentInSpace@furry.engineer
       2025-05-13T01:29:18Z
       
       0 likes, 0 repeats
       
       @foone i simply MUST know how you connected an internal 5.25" floppy drive to a modern x86 system
       
 (DIR) Post #Au2HuQmntKEUM9VuBU by foone@digipres.club
       2025-05-13T01:30:07Z
       
       0 likes, 0 repeats
       
       @AVincentInSpace It's got a Greaseweazle floppy disk controller mounted internally
       
 (DIR) Post #Au2IEsPatD5fpMPH3A by foone@digipres.club
       2025-05-13T01:33:47Z
       
       0 likes, 0 repeats
       
       *smacks forehead*of course this compiler doesn't take ANSI C. it's from three years BEFORE ANSI C
       
 (DIR) Post #Au2ISe2P81yNIk7oTA by foone@digipres.club
       2025-05-13T01:36:17Z
       
       0 likes, 0 repeats
       
       lemme just quickly un-ansi my C code. it'll work better if I K&R it
       
 (DIR) Post #Au2IZCq4eSwSyMUDFw by stilescrisis@mastodon.gamedev.place
       2025-05-13T01:37:27Z
       
       0 likes, 0 repeats
       
       @foone It is not that much work to add a compiler to Godbolt. https://github.com/compiler-explorer/compiler-explorer/blob/main/docs/AddingACompiler.md#adding-a-new-compiler-locally
       
 (DIR) Post #Au2JFMma4VLByUxKj2 by foone@digipres.club
       2025-05-13T01:45:04Z
       
       0 likes, 0 repeats
       
       okay it looks closer, but it doesn't exactly match. I think it's just that I'm in the wrong model.I only have Small installed. lemme find the floppy disk to install Compact/Medium/Large
       
 (DIR) Post #Au2JuCaOt24GDwjMGm by foone@digipres.club
       2025-05-13T01:52:29Z
       
       0 likes, 0 repeats
       
       Bingo! it's byte-for-byte identical to the medium model MSC4.0
       
 (DIR) Post #Au2K4b0CxjMgqTl3uC by foone@digipres.club
       2025-05-13T01:54:23Z
       
       0 likes, 0 repeats
       
       and I think Large is the same, which is probably more likely to be what carmen is using.
       
 (DIR) Post #Au2LeXeD0rEootAkG8 by foone@digipres.club
       2025-05-13T02:12:02Z
       
       0 likes, 0 repeats
       
       it's not large... because large saves DX.uh-oh. was MSC5 right all along, I just had the wrong model?
       
 (DIR) Post #Au2Lt51lhgRSOs7mZU by foone@digipres.club
       2025-05-13T02:14:40Z
       
       0 likes, 0 repeats
       
       yeah. msc5 matches as well, if I set it to the right model.WELL THAT WAS A WASTE OF TIME
       
 (DIR) Post #Au2R8iQI0v0UhJrwEC by agowa338@chaos.social
       2025-05-13T03:13:23Z
       
       0 likes, 0 repeats
       
       @foone Sounds legit, what's the problem with it? Isn't this how compiler optimizations join consecutive functions together so that it doesn't pointlessly return to main just to jump to another function immediately after?Am I missing something?
       
 (DIR) Post #Au2TVnfqrAnzYIHd1E by foone@digipres.club
       2025-05-13T03:40:03Z
       
       0 likes, 0 repeats
       
       I have a sneaky suspicion it was build with MSC5.1, not 5.0.it's going to take an annoyingly long amount of time to verify that suspicion
       
 (DIR) Post #Au2UqOp8Xo2cW30qxs by agowa338@chaos.social
       2025-05-13T03:54:59Z
       
       0 likes, 0 repeats
       
       @foone I'm surprised that you don't have a decision tree with some automation to simplify the compiler detection process by now.
       
 (DIR) Post #Au2V6jYrD7vTSuBejI by foone@digipres.club
       2025-05-13T03:58:01Z
       
       0 likes, 0 repeats
       
       it turns out what I thought was my MSC5.0 install WAS 5.1so I need to install MSC5.0, not MSC5.1
       
 (DIR) Post #Au2V94h1c9cFaE7j5k by foone@digipres.club
       2025-05-13T03:58:18Z
       
       0 likes, 0 repeats
       
       also I manged to get my include and lib directories backwards. \lib was full of .h files, and \include was full of .lib files
       
 (DIR) Post #Au2VBRlMoNQxiGHllg by foone@digipres.club
       2025-05-13T03:58:54Z
       
       0 likes, 0 repeats
       
       this is the kind of installation error that hasn't been possible since, like, 1991
       
 (DIR) Post #Au2VhfRxSX5LQeZTuK by foone@digipres.club
       2025-05-13T04:04:40Z
       
       0 likes, 0 repeats
       
       yeah it's definitely not 5.0. ugh. it's not 5.1 either. there may be some minor patch that I don't have access to
       
 (DIR) Post #Au2YdsjcQMgxKqibLs by Yuki@xantronix.social
       2025-05-13T04:37:31Z
       
       0 likes, 0 repeats
       
       @foone if only the include folder was just named h it'd be harder to mess up!
       
 (DIR) Post #Au2acr3lMmqvl6mLE8 by foone@digipres.club
       2025-05-13T04:59:45Z
       
       0 likes, 0 repeats
       
       __aaltstkovrthat's a name, all right.
       
 (DIR) Post #Au2gOYT4IFHPlgBC6q by gsuberland@chaos.social
       2025-05-13T06:04:19Z
       
       0 likes, 0 repeats
       
       @foone someone's been snorting the intel mnemonics
       
 (DIR) Post #Au2hgNxKDP5kKfOjrc by foone@digipres.club
       2025-05-13T06:18:50Z
       
       0 likes, 0 repeats
       
       current stats:Total funcs:   756Unnamed funcs: 360% named:       52.4%
       
 (DIR) Post #Au2pudOQPsjTtgNZdw by abrasive@digipres.club
       2025-05-13T07:50:58Z
       
       0 likes, 0 repeats
       
       @foone I nearly named my kid ??2@YAPAXI@Z. never say we don't hold tight the scars of these compilers; authors of the many, many tomes of our chosen misfortunes
       
 (DIR) Post #Au4OhTabFJG7HTUkNs by foone@digipres.club
       2025-05-14T01:55:34Z
       
       0 likes, 0 repeats
       
       after extensive cross-referencing with the msc5.0 manual and the msc5.1 libraries being opened in a parallel copy of ghidra, I have finally been able to determine that the function I named sprintf_maybe is, in fact, _sprintf.my hard work, as always, pays amazing dividends
       
 (DIR) Post #Au4UbjwO8dNryuKn0S by foone@digipres.club
       2025-05-14T03:01:45Z
       
       0 likes, 0 repeats
       
       I'm currently figuring out functions through the amazing insight of "the linker is simple and linear"which means when I have _memmove, FUNC_1fb7_6db0, and _strcmp in the EXE, FUNC_1fb7_6db0 is probably not going to be an adlib sound driver. it's going to be something from the libc.
       
 (DIR) Post #Au4UpzCYCDyXMjgfI0 by azonenberg@ioc.exchange
       2025-05-14T03:04:20Z
       
       0 likes, 0 repeats
       
       @foone I've done this a lot especially in embedded stuff where you have an open source peripheral library or RTOS bolted onto closed source application code.Find one xref to a SFR, match to the corresponding vendor HAL function, then you probably get 30 functions with minimal effort that are right before/after in the same order as the .c
       
 (DIR) Post #Au4XeFcfcGPsgP04yO by foone@digipres.club
       2025-05-14T03:35:50Z
       
       0 likes, 0 repeats
       
       okay I've got all the libc stuff named, other than some internal functions (which I don't have names for), and one weird memmove-ish function that I just named "memmoveish"it looks very similar to memmove, but with an extra check or two, but I can't match it to anything in the library
       
 (DIR) Post #Au4YQRhG1pVG1u7vxg by foone@digipres.club
       2025-05-14T03:44:34Z
       
       0 likes, 0 repeats
       
       Total funcs:   758Unnamed funcs: 332% named:       56.2%pretty good for a day's work: nearly 4% done
       
 (DIR) Post #Au4jfMZ6UM0pxDd2fI by foone@digipres.club
       2025-05-14T05:50:32Z
       
       0 likes, 0 repeats
       
       made a discovery:Galleons of Glory: The Secret Voyage of Magellan, released by Brøderbund in 1990, uses the same DAT format for its game files. I haven't looked into the EXE yet, but that definitely sounds like they're sharing code
       
 (DIR) Post #Au4jxM5azrW5gsPEbw by foone@digipres.club
       2025-05-14T05:53:45Z
       
       0 likes, 0 repeats
       
       the programmer credited for Galleons is Louis Ewens, who did work on several of the Carmen Sandiego games, but not the DOS-enhanced one.
       
 (DIR) Post #Au4kzTHlJQ7kXhfZwW by foone@digipres.club
       2025-05-14T06:05:22Z
       
       0 likes, 0 repeats
       
       oh wow, it looks like Prince of Persia (DOS) also uses this DAT format!Sadly, while the source for Prince of Persia is available... it's for the Apple II version. The DOS version is a complete reimplementation
       
 (DIR) Post #Au4lLPVG3V0XBORYnI by foone@digipres.club
       2025-05-14T06:09:21Z
       
       0 likes, 0 repeats
       
       1991's The Treehouse uses DAT files, with some of the same names as carmen... but my parser fails on it. I think it's a variation in the format, so I'm a byte off or something
       
 (DIR) Post #Au4lWxTE6eojiR0328 by foone@digipres.club
       2025-05-14T06:11:26Z
       
       0 likes, 0 repeats
       
       prince of persia 2 shows the same behavior. I think this is a different version of the Brøderbund Chunk Format
       
 (DIR) Post #Au4ltRXL08OdKre0ye by foone@digipres.club
       2025-05-14T06:15:27Z
       
       0 likes, 0 repeats
       
       The Backyard (1993) has the same later-chunk format
       
 (DIR) Post #Au4mGcwWl7NzN7TvFI by foone@digipres.club
       2025-05-14T06:19:40Z
       
       0 likes, 0 repeats
       
       SDLPoP is based on reverse engineering of the DOS PoP, maybe I can see how they implement DAT file reading.https://github.com/NagyD/SDLPoP
       
 (DIR) Post #Au4mJHFJsrrcwtXFJ2 by foone@digipres.club
       2025-05-14T06:19:56Z
       
       0 likes, 0 repeats
       
       I've got my own code but it's not fully complete. I can't decompress all chunks yet
       
 (DIR) Post #Au4mZRBkgaNgPzZXrE by foone@digipres.club
       2025-05-14T06:23:03Z
       
       0 likes, 0 repeats
       
       yeah from looking at the SDLPoP code, they've got some very familiar looking decompression code. Awesome.
       
 (DIR) Post #Au4sGIs1zI8AqKbiXw by tomdewar@mas.to
       2025-05-14T07:26:45Z
       
       0 likes, 0 repeats
       
       @foone I had the original Prince of Persia on my then top of the line Amstead PPC. It was a groundbreaker. I think the first to use a form of motion capture to create the character movement animations.
       
 (DIR) Post #Au67fLlo2Lo5Xv3aO8 by foone@digipres.club
       2025-05-14T21:54:08Z
       
       0 likes, 0 repeats
       
       I'm now doing some manual comparison of functions in PRINCE.EXE, and yep. they're byte-for-byte identical. There's shared code here! Awesome.
       
 (DIR) Post #Au67nep94xTwxPa1aq by foone@digipres.club
       2025-05-14T21:55:37Z
       
       0 likes, 0 repeats
       
       I wonder if it'd be worth automating this. I don't currently have any tools to let me find functions in binary A that are also in binary B
       
 (DIR) Post #Au686fQR4DG2KC5RGS by cr1901@mastodon.social
       2025-05-14T21:59:01Z
       
       0 likes, 0 repeats
       
       @foone You know what time it is, the? That's right! It's time to spend ten times as much time as you wanted to spend on this project making your own tools :'D.
       
 (DIR) Post #Au68E57XvlTK2omqga by henryk@chaos.social
       2025-05-14T22:00:17Z
       
       0 likes, 0 repeats
       
       @foone You mean, like BinDiff by HexRays?
       
 (DIR) Post #Au68fhjKUQw3bldCGO by foone@digipres.club
       2025-05-14T22:05:24Z
       
       0 likes, 0 repeats
       
       @cr1901 that's my favorite time!
       
 (DIR) Post #Au68nVxE9jdXP1r87c by cr1901@mastodon.social
       2025-05-14T22:06:50Z
       
       0 likes, 0 repeats
       
       @foone It would be nice if the time spent was closer to 5 times or less. But no, in practice, it's an order of magnitude more time spent :'D.
       
 (DIR) Post #Au69VebvKhsCzXwGPI by foone@digipres.club
       2025-05-14T22:14:47Z
       
       0 likes, 0 repeats
       
       @henryk ahh, neat.Not a tool I have access to, sadly.
       
 (DIR) Post #Au6DxpUAtQrUe30M64 by foone@digipres.club
       2025-05-14T23:04:41Z
       
       0 likes, 0 repeats
       
       hey look, Prince of Persia uses the same setjmp/longjmp mainloop design!https://github.com/NagyD/SDLPoP/blob/7bd3bb85d8f7d4cb8ef72557ea0e65d80ba0906d/src/seg000.c#L197
       
 (DIR) Post #Au6G8mzghIau0j6ALY by foone@digipres.club
       2025-05-14T23:29:04Z
       
       0 likes, 0 repeats
       
       they did modify the random function though: the PoP one checks if the seed has been initialized. Carmen never does
       
 (DIR) Post #Au6PrFbQaigh4I1ivg by foone@digipres.club
       2025-05-15T01:17:56Z
       
       0 likes, 0 repeats
       
       the compression has a fun quirk: images can be compressed either top to bottom or left to right.and the game switches between the two compression formats on a per-image basis. So the developers just compressed each image both ways and used the smaller one. clever.
       
 (DIR) Post #Au6PxJ32h6axUWpZXE by foone@digipres.club
       2025-05-15T01:19:07Z
       
       0 likes, 0 repeats
       
       their compression algorithm is 87 bytes long. as long as supporting two algorithms saved at least 87 bytes, it was worth it
       
 (DIR) Post #Au6i90mCFhAjTMgNKS by StompyRobot@mastodon.gamedev.place
       2025-05-15T04:42:48Z
       
       0 likes, 0 repeats
       
       @foone I mean, I've written a couple of threading systems on top of setjmp, but using it for "the main loop" seems exciting...
       
 (DIR) Post #Au8R16hP2QCicW0Ngu by foone@digipres.club
       2025-05-16T00:40:23Z
       
       1 likes, 0 repeats
       
       I've now got a boolean that has three values (true, false, and 'image')but it's okay, I have a permit: I'm non-binary.
       
 (DIR) Post #Au8RADtJfQRlX4vNCa by kataemaus@cyberpunk.lol
       2025-05-16T00:41:51Z
       
       0 likes, 0 repeats
       
       @foone Many images are amazing
       
 (DIR) Post #Au8RCExue1OdRX2JDk by azonenberg@ioc.exchange
       2025-05-16T00:42:00Z
       
       0 likes, 0 repeats
       
       @foone we all know your real gender is [Object object]
       
 (DIR) Post #Au8RteeV17PHYseohk by foone@digipres.club
       2025-05-16T00:50:15Z
       
       0 likes, 0 repeats
       
       @azonenberg how dare you imply I'm made of javascript?
       
 (DIR) Post #Au8S5ZmWx1vpvn6AK0 by azonenberg@ioc.exchange
       2025-05-16T00:52:25Z
       
       0 likes, 0 repeats
       
       @foone Ok true it would probably be more like win3.1 wingdings glyphs
       
 (DIR) Post #Au8USuX8AATErN9M4e by foone@digipres.club
       2025-05-16T01:19:01Z
       
       0 likes, 0 repeats
       
       I have successfully extracted the first image from the game, using the ported SDLPoP compression code! 1 compression method down, 3 to go.
       
 (DIR) Post #Au8UWgKotXf5yxBpNA by foone@digipres.club
       2025-05-16T01:19:45Z
       
       0 likes, 0 repeats
       
       Here's the image: Tokyo!
       
 (DIR) Post #Au8UZWCP2HVNPobagi by foone@digipres.club
       2025-05-16T01:19:53Z
       
       0 likes, 0 repeats
       
       @azonenberg exactly
       
 (DIR) Post #Au8UhDVMQN5vkk8xxg by foone@digipres.club
       2025-05-16T01:21:32Z
       
       0 likes, 0 repeats
       
       @gloriouscow everyone* knows canada only has one city, and it's Montreal.* the 1990 game Where in the World is Carmen Sandiego? Enhanced
       
 (DIR) Post #Au8UtSXOMIhhqpvo0G by foone@digipres.club
       2025-05-16T01:23:51Z
       
       0 likes, 0 repeats
       
       Tokyo: fine. Sydney: fine.Singapore: fine.San Marino: fine.Rome: PYTHON CRASHED
       
 (DIR) Post #Au8V5tfXJKKjTMfhEu by foone@digipres.club
       2025-05-16T01:26:05Z
       
       0 likes, 0 repeats
       
       Rome is the first city in that list that uses the LZG_UD compression format, rather than the LZG_LR format. that's why it's crashing.
       
 (DIR) Post #Au8VYR9qOSgZRdSNZw by foone@digipres.club
       2025-05-16T01:31:16Z
       
       0 likes, 0 repeats
       
       well, that's closer. it's an image instead of a segfault, at least.
       
 (DIR) Post #Au8W4ZHVj2QhuGMd5U by foone@digipres.club
       2025-05-16T01:37:01Z
       
       0 likes, 0 repeats
       
       rome.png wasn't decompressed in a day
       
 (DIR) Post #Au8WWqwvd6A6oMDxWS by foone@digipres.club
       2025-05-16T01:42:11Z
       
       0 likes, 0 repeats
       
       okay it's working, but only for even-width'd images.huh.
       
 (DIR) Post #Au8Z0xH8sF9P1jA0SO by foone@digipres.club
       2025-05-16T02:09:59Z
       
       0 likes, 0 repeats
       
       I'm getting some crashes. I think I'm gonna switch away from CFFI to just making a C wrapper around the code, and subprocessing that. That'll make it easier to debug why it's crashing
       
 (DIR) Post #Au8Z3cViX9qjUiFTaC by foone@digipres.club
       2025-05-16T02:10:14Z
       
       0 likes, 0 repeats
       
       (and it won't take out my python process when it crashes)
       
 (DIR) Post #Au8ayNi2Kxfa37dmWe by foone@digipres.club
       2025-05-16T02:31:49Z
       
       0 likes, 0 repeats
       
       @CutInBismuth I think it makes some images marginally smaller to compress them in a different way, so they swapped back and forth depending on which compressor was better for a given image
       
 (DIR) Post #Au8c4ljO2O5EF8sjI0 by RueNahcMohr@infosec.exchange
       2025-05-16T02:44:14Z
       
       0 likes, 0 repeats
       
       @foone buffer overrun (guess)
       
 (DIR) Post #Au8iCNF1ZaTYKbgoa0 by foone@digipres.club
       2025-05-16T03:52:51Z
       
       0 likes, 0 repeats
       
       I can now extract every image in every DAT for Where in the World is Carmen Sandiego? (1990, Enhanced)!
       
 (DIR) Post #Au8izEP1DxFV6kf4Bk by foone@digipres.club
       2025-05-16T04:01:44Z
       
       0 likes, 0 repeats
       
       and Where in the U.S.A. Is Carmen Sandiego? (1990, Enhanced)
       
 (DIR) Post #Au8k5WEnvSqa7ARh5s by foone@digipres.club
       2025-05-16T04:14:03Z
       
       0 likes, 0 repeats
       
       @alilly oh yeah
       
 (DIR) Post #Au8n1BH2E9uPnf70lc by mage_of_dragons@mastodon.social
       2025-05-16T04:46:51Z
       
       0 likes, 0 repeats
       
       @foone Transistors operated by a non-binary person automatically become trinary? Neat
       
 (DIR) Post #AuAALPhMnZGcQu0Nn6 by foone@digipres.club
       2025-05-16T18:49:47Z
       
       0 likes, 0 repeats
       
       @ppxl I'm not done, but I'm making a lot of progress!
       
 (DIR) Post #AuAotVVrgPfaTjRAbA by foone@digipres.club
       2025-05-17T04:17:20Z
       
       0 likes, 0 repeats
       
       working on a full dat exporter, to build a JSON of all the hints.and I'm running into pronoun issues. Story of my fucking life.
       
 (DIR) Post #AuAuyMeEfaRK9o3H1M by foone@digipres.club
       2025-05-17T05:25:24Z
       
       0 likes, 0 repeats
       
       yeah looks good.https://gist.github.com/foone/82de72a08f0e973fd3fa19b22d607d9aThe misplaced entries (like Cairo having a leader hint of "left in a vehicle flying a red, white and black flag") are like that in the original data files. Brøderbund just got their hints miscategorized sometimes.
       
 (DIR) Post #AuB3HBF3ySawZ5Yvyq by foone@digipres.club
       2025-05-17T06:58:26Z
       
       0 likes, 0 repeats
       
       I'm like 90% sure that this game actually matches building types to what sorts of hints it gives you, and I'm also like 90% sure that this should have been obvious to me long ago
       
 (DIR) Post #AuCiL80oDPdKz6r9Ps by BRicker@fosstodon.org
       2025-05-18T02:13:17Z
       
       0 likes, 0 repeats
       
       @foone 😅👍
       
 (DIR) Post #AuEhvHllhgNO29Q000 by foone@digipres.club
       2025-05-19T01:18:08Z
       
       0 likes, 0 repeats
       
       Idly playing Where in the USA is Carman Sandiego, and found an unexpected example of "things that have changed since 1990": The IMAGE for New Hampshire! It's the Old Man of the Mountain, which collapsed in 2004.
       
 (DIR) Post #AuEi58NRTkxlndjhPU by zarky@bitbang.social
       2025-05-19T01:19:48Z
       
       0 likes, 0 repeats
       
       @foone NH still uses the image all over everything. its such a funny metaphor for NH in general. Clinging on to the glory of the past despite its complete irrelelevence today.  I live there....
       
 (DIR) Post #AuEiMmzXjDTYgbyZgO by jbaggs@infosec.exchange
       2025-05-19T01:22:36Z
       
       0 likes, 0 repeats
       
       @foone That thing was so cobbled together to keep it from collapsing before that, it was kind of incredible.
       
 (DIR) Post #AuEiQAFNinKTgFzft2 by Video_Game_King@digipres.club
       2025-05-19T01:23:20Z
       
       0 likes, 0 repeats
       
       @foone ...You mean that wasn't just a Simpsons joke?
       
 (DIR) Post #AuEiYBGdoOe5A5PCLo by grumpasaurus@infosec.exchange
       2025-05-19T01:25:03Z
       
       0 likes, 0 repeats
       
       @foone wait what do people in New Hampshire have on their plates now.
       
 (DIR) Post #AuEjBuuA4CjHztq2Ou by foone@digipres.club
       2025-05-19T01:32:16Z
       
       0 likes, 0 repeats
       
       @rezmason that's what killed it!
       
 (DIR) Post #AuEkq2DuNNIKEUlhdw by LAbare@anticapitalist.party
       2025-05-19T01:50:41Z
       
       0 likes, 0 repeats
       
       @foone There could be a “Where in the timeline is Carmen Sandiego?” version
       
 (DIR) Post #AuEnIrZpEphnWGtUlU by foone@digipres.club
       2025-05-19T02:18:20Z
       
       0 likes, 0 repeats
       
       arg the way this game does travel can be really annoyingif you are in New Delhi and need to go to the USSR, but misclick on Oslo instead of Moscow, you can't just fly to Moscow from Oslo. You have to go back to New Delhi first
       
 (DIR) Post #AuEodWKnVnrzfmHMMy by foone@digipres.club
       2025-05-19T02:33:18Z
       
       0 likes, 0 repeats
       
       I got halfway to googling this hint before remembering I'M FROM THERE (that state, at least. I'm from the other end of it)
       
 (DIR) Post #AuEqyhF0MATNULnKUa by wcbdata@vis.social
       2025-05-19T02:59:30Z
       
       0 likes, 0 repeats
       
       @foone I irritate my family by referring to it as "The Old Man in A Pile At The Bottom Of The Mountain" whenever we go past those signs in New Hampshire.
       
 (DIR) Post #AuEtrKNRGWn4PduwjY by nuxi@mastodon.sdf.org
       2025-05-19T03:31:43Z
       
       0 likes, 0 repeats
       
       @foone Right. If it were in any way realistic, you'd have to fly to ATL first.
       
 (DIR) Post #AuFcRVUpnW6pJ4RG88 by trurl@mastodon.sdf.org
       2025-05-19T11:51:18Z
       
       0 likes, 0 repeats
       
       @foone I should still have access to the Fodor'd USA Travel Guide, if that is somehow useful in this effort
       
 (DIR) Post #AuFnppd9gpCmCJ8FxA by n1vux@mastodon.radio
       2025-05-19T13:58:47Z
       
       0 likes, 0 repeats
       
       @foone TBQF, some decades that's true IRL too.*When m-i-l & darling went to see the Schlieman Gold of Troy during Glasnost, flights to Moscow were change planes in Finland or Poland.*(for that SPECIFIC example. I do realize you gave an example of a rigid game mechanic. I just find it a peculiarly interesting example.)
       
 (DIR) Post #AuFo2d7jV7qpAmXND6 by n1vux@mastodon.radio
       2025-05-19T14:01:05Z
       
       0 likes, 0 repeats
       
       @foone 😪
       
 (DIR) Post #AuQwVXvepYSVpckPgW by foone@digipres.club
       2025-05-24T22:58:03Z
       
       0 likes, 0 repeats
       
       fun fact about Prince of Persia (which I am doing research on because of how it reuses code from Carmen or vice versa):A copy of it leaked with symbols included, but it's not the most normal version you can imagine... it's the mac port recompiled for MIPS.
       
 (DIR) Post #AuQwYse6GKPUx77oYa by foone@digipres.club
       2025-05-24T22:58:19Z
       
       0 likes, 0 repeats
       
       could this still be relevant to my x86 code? WHO KNOWS?
       
 (DIR) Post #AuQxSy5dCzPC3NkOhM by foone@digipres.club
       2025-05-24T23:08:44Z
       
       0 likes, 0 repeats
       
       @Devourer_ITA It's from a PS2 port! PoP Sands of Time included the original PoP as a bonus, and an early leaked version included the symbols
       
 (DIR) Post #AuQxlQcpqvi5le54HQ by foone@digipres.club
       2025-05-24T23:12:10Z
       
       0 likes, 0 repeats
       
       I think all I'd be able to get from it is some canonical names of library functions
       
 (DIR) Post #AuQyrf9MrZ7oVTpmG8 by foone@digipres.club
       2025-05-24T23:24:30Z
       
       0 likes, 0 repeats
       
       tried bindiff: it doesn't like carmen.exe and binexport really doesn't like PRINCE.EXE, so that's a dead end for now
       
 (DIR) Post #AuR2coxqUXPWPxchIO by gsuberland@chaos.social
       2025-05-24T23:13:53Z
       
       0 likes, 0 repeats
       
       @foone do the symbols not include compilation unit names for all the non-inlined functions at least?
       
 (DIR) Post #AuR2rBdQzzV4mfvTgO by foone@digipres.club
       2025-05-25T00:09:04Z
       
       0 likes, 0 repeats
       
       @astraleureka PS2!
       
 (DIR) Post #AuR2ux2JDcqGfIM8Iq by foone@digipres.club
       2025-05-25T00:09:15Z
       
       0 likes, 0 repeats
       
       @onfy PS2!
       
 (DIR) Post #AuR2y3R5sgkbNlQdai by foone@digipres.club
       2025-05-25T00:09:54Z
       
       0 likes, 0 repeats
       
       @gsuberland yeah, but unless those functions are reused in carmen, that's not useful to me
       
 (DIR) Post #AuR387Orztk2ZZBfl2 by foone@digipres.club
       2025-05-25T00:12:10Z
       
       0 likes, 0 repeats
       
       idea for debugging feature for dosbox:press a button, then for the next X seonds, all modifications to the display memory are recorded along with the backtrace of what code changed it. So you could see a button get drawn, and check what code did that.
       
 (DIR) Post #AuR3BOLhREpC0WGVV2 by foone@digipres.club
       2025-05-25T00:12:29Z
       
       0 likes, 0 repeats
       
       right now I'm doing this sorta manually by running dosbox with cycles=30 and watching it draw in real time
       
 (DIR) Post #AuR3Upeq857oCpUJ84 by gsuberland@chaos.social
       2025-05-25T00:16:17Z
       
       0 likes, 0 repeats
       
       @foone ah gotcha
       
 (DIR) Post #AuR3XmbzuUaRd0Z7bc by foone@digipres.club
       2025-05-25T00:16:27Z
       
       0 likes, 0 repeats
       
       the original PC ran an 8088 at 4.77mhz, which DOSBox emulates as 240 cycles. so this is approximately equivalent to a half-megahertz PC
       
 (DIR) Post #AuR3aif939FIFTRCmO by foone@digipres.club
       2025-05-25T00:17:26Z
       
       0 likes, 0 repeats
       
       @astraleureka @gsuberland I think it's the color mac version, which redrew all the sprites at higher resolution.
       
 (DIR) Post #AuR3nuzIXLPKEr9ql6 by ppxl@social.tchncs.de
       2025-05-24T23:33:22Z
       
       0 likes, 0 repeats
       
       @foone this figures because one irregularity might lead another. Well known processes in turn tend to be the same.
       
 (DIR) Post #AuR6sxjw20D65K4KoK by foone@digipres.club
       2025-05-25T00:54:21Z
       
       0 likes, 0 repeats
       
       @ppxl yup
       
 (DIR) Post #AuRAe6RdmfU6YVgKeW by foone@digipres.club
       2025-05-25T01:36:25Z
       
       0 likes, 0 repeats
       
       @onfy yeah. I think because the mac version redrew a bunch of sprites and raised the resolution
       
 (DIR) Post #AuRF4txygbRFUQqDsu by StompyRobot@mastodon.gamedev.place
       2025-05-25T02:26:04Z
       
       0 likes, 0 repeats
       
       @foone a write breakpoint on the memory location of the button on the screen would do that, right?
       
 (DIR) Post #AuRFHKpSdZjyHHmo9Q by foone@digipres.club
       2025-05-25T02:28:25Z
       
       1 likes, 0 repeats
       
       do you have enough cursors, queen of mice?
       
 (DIR) Post #AuRG4RmZZbiS26qztw by foone@digipres.club
       2025-05-25T02:37:15Z
       
       0 likes, 0 repeats
       
       @StompyRobot yeah and that's the sort of thing I'm doing now. but it's not quick to calculate the address of the screen and then set a breakpoint. I'm thinking of an overkill tool that'd make it super quick to do this across many places in a game
       
 (DIR) Post #AuRGIeRnHZZNMmuLKK by StompyRobot@mastodon.gamedev.place
       2025-05-25T02:39:47Z
       
       0 likes, 0 repeats
       
       @foone like Pix for DOS!
       
 (DIR) Post #AuRHNTJCDtOGDrkTcO by neko68k@digipres.club
       2025-05-25T02:51:49Z
       
       0 likes, 0 repeats
       
       @foone where in the cursor hell is carmen sandiego?
       
 (DIR) Post #AuRHe2uFdiFxGBz4SW by foone@digipres.club
       2025-05-25T02:54:58Z
       
       0 likes, 0 repeats
       
       it has been zero days since MSC5's little "push cs;CALL (not CALLF) farfunction" trick has confused ghidra
       
 (DIR) Post #AuRIHSZW9Jqy9d51SC by foone@digipres.club
       2025-05-25T03:02:03Z
       
       0 likes, 0 repeats
       
       PUSH  DSPUSH  peel_ptrPUSH  DSPUSH  peel_ptrthe pointer so great they pushed it twice!
       
 (DIR) Post #AuRIrV7o8OgaUuIx3g by alterae@critters.gay
       2025-05-25T02:58:39.359Z
       
       0 likes, 0 repeats
       
       @foone@digipres.club they should make a disassembler that works i think
       
 (DIR) Post #AuRIrWFzvQpc0b90Sm by foone@digipres.club
       2025-05-25T03:08:24Z
       
       0 likes, 0 repeats
       
       @alterae IT'D BE NICE
       
 (DIR) Post #AuRJPQAL4xHCxkfATQ by madmaurice@soc.zom.bi
       2025-05-25T03:14:37Z
       
       0 likes, 0 repeats
       
       @foone Backups are important.
       
 (DIR) Post #AuRJaVF2Y0ExtH97gG by TomF@mastodon.gamedev.place
       2025-05-25T03:16:40Z
       
       0 likes, 0 repeats
       
       @foone I assume first one is a context save and the second one is a parameter? Compilers were not the smartest back then...
       
 (DIR) Post #AuROauDMCMw775N1Qu by foone@digipres.club
       2025-05-25T04:12:47Z
       
       1 likes, 0 repeats
       
       running this software at 15 cycles/second, I can confirm that the creators of it definitely didn't do that.their general approach is "I KNOW PROGRAMMERS WHO TRY TO AVOID OVERDRAW AND THEY'RE ALL COWARDS
       
 (DIR) Post #AuROf68jnljFG3D0KW by foone@digipres.club
       2025-05-25T04:13:35Z
       
       0 likes, 0 repeats
       
       when it's trying to un-show a dialog box, it fills in the dialog box with black.then white.then it starts redrawing the background.
       
 (DIR) Post #AuROoPdWgQCSKd3EvY by foone@digipres.club
       2025-05-25T04:15:13Z
       
       0 likes, 0 repeats
       
       this only happens with movable dialogs. unmovable dialogs don't flash black+white. which makes me think it's a bug rather than an intentional decision
       
 (DIR) Post #AuRPLGV7fapNYRmn8S by foone@digipres.club
       2025-05-25T04:21:10Z
       
       0 likes, 0 repeats
       
       oh good lord. when you open the Hall of Fame window, it paints the background light blue, then loads the background image which overwrites the light blue with dark blue
       
 (DIR) Post #AuRPhdGtgqa0XynW1g by troldann@techhub.social
       2025-05-25T04:25:12Z
       
       0 likes, 0 repeats
       
       @foone it's not like they were making Doom here!
       
 (DIR) Post #AuRTCQ4Z747eS1OxNo by monotonehell@aus.social
       2025-05-25T05:04:19Z
       
       0 likes, 0 repeats
       
       @foone I've noticed stuff like that in the past and attributed it to needing to change a pallet or something... But I guess not?
       
 (DIR) Post #AuRTGEfxQcGAGKi9Qm by foone@digipres.club
       2025-05-25T05:05:03Z
       
       0 likes, 0 repeats
       
       @monotonehell not here, no. it only changes the palette (in VGA mode) when you change cities
       
 (DIR) Post #AuRUP2tCidJiGgfiYy by foone@digipres.club
       2025-05-25T05:17:49Z
       
       0 likes, 0 repeats
       
       @troldann Doom, or WHERE IN THE HELL IS MY BUNNY DAISY?
       
 (DIR) Post #AuRYDNyGB3Oy5nOKvo by foone@digipres.club
       2025-05-25T06:00:32Z
       
       0 likes, 0 repeats
       
       b8  13  29      MOV  AX ,0x291350              PUSH AXb8  00  00      MOV  AX ,0x050              PUSH AXPOP QUIX: The usual way to zero out a register on x86 is XOR AX,AX. This'd be only 2 bytes (31 C0). The compiler knows this. Why didn't it use XOR AX, AX here, instead of the bigger MOV AX, 0x0?(It's not because optimizations were off!)
       
 (DIR) Post #AuRYrQ8hXCVyOvMinI by foone@digipres.club
       2025-05-25T06:07:43Z
       
       0 likes, 0 repeats
       
       @millihertz nope, not flags.
       
 (DIR) Post #AuRYtP9gAHNhvZljtY by foone@digipres.club
       2025-05-25T06:08:00Z
       
       0 likes, 0 repeats
       
       here's a hint: that disassembly is from the EXE, not from the memory of a running program. (why would that matter?)
       
 (DIR) Post #AuRZOOJhKdouIwEMiG by foone@digipres.club
       2025-05-25T06:13:39Z
       
       0 likes, 0 repeats
       
       @millihertz you got it. they needed to leave space for the exe loader to put in relocated addresses!
       
 (DIR) Post #AuRZS0gp7PPoBWlzrE by foone@digipres.club
       2025-05-25T06:14:26Z
       
       0 likes, 0 repeats
       
       @millihertz got it:https://oldbytes.space/@millihertz/114566979912182848
       
 (DIR) Post #AuRb0oZEHVckg3NgJ6 by TomF@mastodon.gamedev.place
       2025-05-25T06:31:54Z
       
       0 likes, 0 repeats
       
       @foone SMC! But make sure you know if you're running on an 8088 versus an 8086 :-)
       
 (DIR) Post #AuRjWX8bQ0NlWLYuq8 by foone@digipres.club
       2025-05-25T08:07:16Z
       
       0 likes, 0 repeats
       
       I named this variable SoundBlasterPort but now, thanks to crossreferencing with the Prince of Persia disassembly, I know it's actually sound_blaster_port
       
 (DIR) Post #AuRtJKSwDjO9zpPs8m by foone@digipres.club
       2025-05-25T09:56:54Z
       
       0 likes, 0 repeats
       
       Total funcs:   762Unnamed funcs: 293% named:       61.5%118 of those named functions have been marked as identical to ones from Prince Of Persia (or vice versa... I have no idea which game had this code first)
       
 (DIR) Post #AuUknrx1yFtIQJrLtI by vjon@mastodon.online
       2025-05-26T19:05:39Z
       
       0 likes, 0 repeats
       
       @foone @onfy Oh, you mean the Sony one, not the IBM one with the slash. It took me 5 minutes, including a quick search for “cancelled ibm pc mips”.
       
 (DIR) Post #AuVCNLNvE61QbmZszQ by foone@digipres.club
       2025-05-27T00:14:38Z
       
       0 likes, 0 repeats
       
       @vjon @onfy yeah, sadly IBM never tried to move the PC to a different cpu architecture.
       
 (DIR) Post #AuVRatmm8PZwNU7lZ2 by foone@digipres.club
       2025-05-27T03:05:13Z
       
       0 likes, 0 repeats
       
       63.9% named, and I'm up to 160 matching functions with prince.exe
       
 (DIR) Post #AuVeSAAd976LzZRmLo by vjon@mastodon.online
       2025-05-27T05:29:14Z
       
       0 likes, 0 repeats
       
       @foone @onfy They did make the RS/6000, including that one weird PowerPC ThinkPad, so there's that…All the RISC computer manufacturers just couldn't get rid of the idea that *their* workstation will sell despite being so expensive and they'll get rich despite lacking any plan for Step 2 in their 3-step scheme. Shame.
       
 (DIR) Post #AuZhndf1m2h61xR8wS by foone@digipres.club
       2025-05-29T04:25:40Z
       
       0 likes, 0 repeats
       
       my initial theory of how the code sharing went:Prince of Persia -> Where in the World is Carmen Sandiego (enhanced) -> Where in the USA is Carmen Sandiego (enhanced) ->Galleons of Glory: The Secret Voyage of Magellan
       
 (DIR) Post #AuZikuaqSjy9dCkC8m by foone@digipres.club
       2025-05-29T04:36:21Z
       
       0 likes, 0 repeats
       
       1000:700b MOV  CX,0x20TimingLoop: 1000:700e LOOP TimingLoopahh, the good ol' days when "20 instructions" was a meaningful unit of time.
       
 (DIR) Post #AuZjQ5obe0vOJBojXE by foone@digipres.club
       2025-05-29T04:43:49Z
       
       0 likes, 0 repeats
       
       1. why does the PS/1 sound card use the gameport IO range?2. WHY DID I HAVE TO READ THE DOSBOX-X SOURCE CODE TO FIND THIS OUT?
       
 (DIR) Post #AuZjUo78srFkrEjey0 by foone@digipres.club
       2025-05-29T04:44:40Z
       
       0 likes, 0 repeats
       
       @marcel No, because it doesn't look like any code got shared from that carmen to this one. I think they did a complete rewrite.
       
 (DIR) Post #AuZkHYg34CnJAcJCvw by rf@mas.to
       2025-05-29T04:53:26Z
       
       0 likes, 0 repeats
       
       @foone we're doing computational genetics on .exes now
       
 (DIR) Post #AuZkuCcL1DUI2x04nY by autinerd@chaos.social
       2025-05-29T05:00:13Z
       
       0 likes, 0 repeats
       
       @foone 32 instructions 😄
       
 (DIR) Post #AuZlCvxPBXBXsUmnK4 by foone@digipres.club
       2025-05-29T05:03:52Z
       
       0 likes, 0 repeats
       
       @rf I'm gonna start assigning taxonomic names next. I'll have to figure out how to translate "carmen sandiego" into latin
       
 (DIR) Post #AuZlJ2LwJpPZS3Aj2m by foone@digipres.club
       2025-05-29T05:04:58Z
       
       0 likes, 0 repeats
       
       @autinerd whoops. yeah. 32. I forgot this was hex!
       
 (DIR) Post #AuZnoeyUyOva7XPkci by TomF@mastodon.gamedev.place
       2025-05-29T05:32:41Z
       
       0 likes, 0 repeats
       
       @foone Heh - reminds me of the encoding trick with the PAUSE instruction on modern(ish) x86.
       
 (DIR) Post #AuZokQ2YeowUb7r3cO by ppxl@social.tchncs.de
       2025-05-29T05:43:26Z
       
       0 likes, 0 repeats
       
       @foone fuck yeah, that was specs of my first PC. A Siemens telewriter that came with an onboard Hercules gfx card.For a wild reason when I added a CGA card it jumped to 4.78 MHz. I still miss that old box
       
 (DIR) Post #AuZop81b49fuAhePey by RueNahcMohr@infosec.exchange
       2025-05-29T05:44:20Z
       
       0 likes, 0 repeats
       
       @foone do you think you would be into (one day) a deep dive on one of the old BASIC softwares?
       
 (DIR) Post #AubLdWq3wHAtHyThr6 by foone@digipres.club
       2025-05-29T23:26:42Z
       
       0 likes, 0 repeats
       
       @pepper that'd make sense, but no.
       
 (DIR) Post #AubOvqLESzcKqnTxYm by foone@digipres.club
       2025-05-30T00:03:36Z
       
       0 likes, 0 repeats
       
       the game picks between "they flew off to X" and "they drove off to X" and "they rowed off to X" and "they sailed off to X" but it doesn't seem to do this with any smarts. or if it does, the database is incorrect.carmen apparently drove off to nepal from canada
       
 (DIR) Post #AubP3ByeQKV9yoQMfg by phoenixgee@mstdn.social
       2025-05-30T00:04:57Z
       
       0 likes, 0 repeats
       
       @foone Where there's a will, there's a way! :)
       
 (DIR) Post #AubPWPCQLKaDNxnR4K by foone@digipres.club
       2025-05-30T00:10:15Z
       
       0 likes, 0 repeats
       
       The game also refers to the capitol of china as Peking, which is weird considering it's been Beijing since 1945. I know it took a long while for everywhere to catch up, but by 1990 pretty much everyone was using Beijing. I guess they used an old atlas?
       
 (DIR) Post #AubPpq6OXkkaKDF8T2 by kboyd@phpc.social
       2025-05-30T00:13:47Z
       
       0 likes, 0 repeats
       
       @foone at the time, it probably would've been technically possible due to the sea ice.
       
 (DIR) Post #AubQ8JueRmI1zeYwGe by Lady_Noremon@mas.to
       2025-05-30T00:17:06Z
       
       0 likes, 0 repeats
       
       @foone Hovercrafts
       
 (DIR) Post #AubQVgCRkattmA1b2O by foone@digipres.club
       2025-05-30T00:21:21Z
       
       0 likes, 0 repeats
       
       another way in which this game shows that it's from 1990 is that the librarians will tell you anything about their patrons. that shit stopped after 2001
       
 (DIR) Post #AubRNqnmY21wINJpRI by foone@digipres.club
       2025-05-30T00:31:06Z
       
       0 likes, 0 repeats
       
       what do you mean he changed his money to rupees? You're in Sri Lanka! YOUR currency is rupees!
       
 (DIR) Post #AubThQ3pscgr3kHpjM by jonhendry@iosdev.space
       2025-05-30T00:57:01Z
       
       0 likes, 0 repeats
       
       @foone Changed his money to unmarked rupees?
       
 (DIR) Post #AubVUU8BdTi9pJHXWq by rotopenguin@mastodon.social
       2025-05-30T01:16:59Z
       
       0 likes, 0 repeats
       
       @foone he came in and smashed all of my shit to nick a few rupees.
       
 (DIR) Post #AubVtqM29AqHzTqnMO by nabijaczleweli@101010.pl
       2025-05-30T01:21:40Z
       
       0 likes, 0 repeats
       
       @foone yeah and he's going to india
       
 (DIR) Post #AubYvpeo0g3UGnGrEu by foone@digipres.club
       2025-05-30T01:55:42Z
       
       0 likes, 0 repeats
       
       @nabijaczleweli Nepal, actually!
       
 (DIR) Post #Aubp6DPO9kye6025Vw by foone@digipres.club
       2025-05-30T04:56:51Z
       
       0 likes, 1 repeats
       
       I'm experimenting with a way to show how DOS games render themselves. Basically I'm recording a lossless video of the game running on a very slow CPU, then removing all the frames where nothing happens, and I'm playing it back sped up a lot. The highlight of this video is how terrible the handling of the mouse cursor is! it's getting peeled and restored constantly
       
 (DIR) Post #AubpeIV7jG4Xjfy0JM by morgan3d@mastodon.gamedev.place
       2025-05-30T05:03:00Z
       
       0 likes, 0 repeats
       
       @foone Hardware mouse cursors were such a tiny thing that was such a huge improvement for game developers. No more XOR and dirty mouse rectangles.
       
 (DIR) Post #Aubq8D1UezZzQxN2AK by n1vux@mastodon.radio
       2025-05-30T05:08:24Z
       
       0 likes, 0 repeats
       
       @foone Cool technique you've developed!
       
 (DIR) Post #AubqAblhd2Tul881js by lackthereof@beige.party
       2025-05-30T05:08:52Z
       
       0 likes, 0 repeats
       
       @foone I remember mouse cursors flickering a ton back in the day.I was just happy to have a mouse at the time
       
 (DIR) Post #AubqHEdQ2N432SPiO8 by foone@digipres.club
       2025-05-30T05:10:06Z
       
       0 likes, 0 repeats
       
       the mouse cursor appearing and disappearing is because they don't have multiple frame buffers: they have to hide the mouse cursor before they can draw anything, or the cursor would corrupt the newly drawn stuff if it happened to be over it.so they solve this by hiding the cursor before every drawing command and showing it afterwards.but instead of doing it once per screen, they're doing it once per command.
       
 (DIR) Post #AubqK7LtZQPDJwakQS by foone@digipres.club
       2025-05-30T05:10:30Z
       
       0 likes, 0 repeats
       
       This normally would be invisible because all this happens over a single frame (or a couple), but running this slow makes it visible.the GUI system they're using (I'm just calling it the broderbund UI in my reverse engineering work) DOES support avoiding this mess: you can tell it to hide the cursor, then when each sub-command tries to hide/restore it, it stays hidden, but they're not using it here.
       
 (DIR) Post #Aubuj2HhwqDaezlpce by 0xabad1dea@infosec.exchange
       2025-05-30T05:59:44Z
       
       0 likes, 0 repeats
       
       @foone only a few years ago I told my mother that Beijing and Peking were the same city and she was surprised. I imagine thinking they’re two different cities is quite common.
       
 (DIR) Post #Auc6CKc3yvwtOkSmxs by krono@toot.berlin
       2025-05-30T08:08:27Z
       
       0 likes, 0 repeats
       
       @foone It's still "Peking" in German, for example.Reading the German Wikipedia etyomolgy section, that follows a Chinese postal romanization, which, apparently, fell out of use between 1980s and early 2000s.https://en.wikipedia.org/wiki/Names_of_Beijing suggests that, yes, mid-80s would be a typical swich  time.Maybe the editor was German?
       
 (DIR) Post #Auc6sn6YRME9vUyIu8 by gkrnours@mastodon.gamedev.place
       2025-05-30T08:16:08Z
       
       0 likes, 0 repeats
       
       @foone french used Pekin in the 90s.
       
 (DIR) Post #Auc7hathaPcappBWCW by ppxl@social.tchncs.de
       2025-05-30T08:24:22Z
       
       0 likes, 0 repeats
       
       @foone this strongly reminds of badly written react.js apps (which is so easy to do, mind you)
       
 (DIR) Post #Auc8CQghazIe9Bo8OG by eniko@mastodon.gamedev.place
       2025-05-30T08:30:50Z
       
       0 likes, 0 repeats
       
       @foone ohh I wonder if I could do this for my research for my video on blobbers 🤔 there's actually very little information out there on how to optimize the drawingAre you just setting the emulator to very low cycles?
       
 (DIR) Post #Auc9YjBva1TVrObrc0 by efi@chitter.xyz
       2025-05-30T08:46:02Z
       
       0 likes, 0 repeats
       
       @foone so weird to see it at this speed
       
 (DIR) Post #AucA4UQC1tpbJpQYiG by foone@digipres.club
       2025-05-30T08:51:50Z
       
       0 likes, 0 repeats
       
       @eniko yeah! I'm setting the cycles down to 15-50 (depending on the game) while recording, then I ffmpeg it out to individual PNGs so I can deal with it as frames
       
 (DIR) Post #AucA9sxkDJ7ssbh4Nc by foone@digipres.club
       2025-05-30T08:52:40Z
       
       0 likes, 0 repeats
       
       @eniko I'd be happy to generate some for any games you'd like to have this for
       
 (DIR) Post #AucAfhcLvhKwxbrLSS by eniko@mastodon.gamedev.place
       2025-05-30T08:58:33Z
       
       0 likes, 0 repeats
       
       @foone oh that'd be super useful, thanks! Let me figure out what titles I actually need this for and get back to you
       
 (DIR) Post #AucDIp6UELPPNcjhxo by eniko@mastodon.gamedev.place
       2025-05-30T09:09:19Z
       
       0 likes, 0 repeats
       
       @foone oh hm this probably won't work for anything that double buffers will it?
       
 (DIR) Post #AucDIqYWpZQxssrcJM by foone@digipres.club
       2025-05-30T09:28:01Z
       
       0 likes, 0 repeats
       
       @eniko not directly. I can make it work, though: I'll just record the back buffer instead
       
 (DIR) Post #AucE0PIzVctO6rMqaO by eniko@mastodon.gamedev.place
       2025-05-30T09:35:54Z
       
       0 likes, 0 repeats
       
       @foone :o you can do that?
       
 (DIR) Post #AucE9GIGNrW4laFWAi by foone@digipres.club
       2025-05-30T09:37:34Z
       
       0 likes, 0 repeats
       
       @eniko I am a hacker
       
 (DIR) Post #AucEJSk6x9JcGy8gK0 by foone@digipres.club
       2025-05-30T09:39:18Z
       
       0 likes, 0 repeats
       
       @AT1ST @eniko yeah it depends on the game and what graphics hardware it targets. but it's usually easy to figure out where it is:set a write breakpoint on the visible screen, and when it's hit, you now know what code writes to the screen. probably that's just a memcpy from main ram or vram, depending
       
 (DIR) Post #AucFBhSKSwKLXggT0S by dr_barnowl@topspicy.social
       2025-05-30T09:49:05Z
       
       0 likes, 0 repeats
       
       @foone One of the bonkers things to me is that games _still_ have "disable hardware cursor" as an option in this day and age.
       
 (DIR) Post #AucFFgmktuQgcZ8ldY by eniko@mastodon.gamedev.place
       2025-05-30T09:49:51Z
       
       0 likes, 0 repeats
       
       @foone :Owell i know one of the big ones is lands of lore, because it doesn't just draw the scene but it also intersperses critters into iti spent hours looking at the source for the scummvm engine but it's almost entirely uncommented and they do stuff like bitwise ops using raw numbers everywhere so it was just too hard to follow and figure out what was going on :/
       
 (DIR) Post #AucKKAGfj88UzM5Sd6 by foone@digipres.club
       2025-05-30T10:46:40Z
       
       0 likes, 0 repeats
       
       @eniko I'll take a look!
       
 (DIR) Post #AucOFqzNrYoJr3CUq0 by foone@digipres.club
       2025-05-30T11:30:47Z
       
       0 likes, 0 repeats
       
       @eniko spotted it in ram and I can see it drawing the graphics. I'll write some automation to make this an animation tomorrow
       
 (DIR) Post #AucOVUONe3ZIPBLdpY by eniko@mastodon.gamedev.place
       2025-05-30T11:33:34Z
       
       0 likes, 0 repeats
       
       @foone awesome! thank you so much :D if you can catch some enemies or other entity sprites in it that'd be even better
       
 (DIR) Post #AuhtuXeCkQn46syWoa by foone@digipres.club
       2025-06-02T03:19:03Z
       
       0 likes, 0 repeats
       
       ghidra (at least in x86-16bit) mode, has a real annoying bug where it decides instead of just passing a pointer-to-struct as an argument, the code is passing a pointer to the first member of the struct, just cast back to a pointer.
       
 (DIR) Post #AuhtyoE92yP4gnoxUG by foone@digipres.club
       2025-06-02T03:19:50Z
       
       0 likes, 0 repeats
       
       which is of course equivalent, but it means you get this code:           offset2_rect(-y - param_3->bottom,-x - param_3->right,                        (Rect *)CONCAT22((char *)ds,&param_3->bottom),                        (Rect *)CONCAT22((char *)ds,&param_3->bottom));instead of:           offset2_rect(-y - param_3->bottom,-x - param_3->right, parem_3, parem_3);
       
 (DIR) Post #AuhusSiEE2OgBAQhMG by foone@digipres.club
       2025-06-02T03:29:53Z
       
       1 likes, 0 repeats
       
       broderbund::hide_cursor();broderbund::show_cursor();WERE YOU PUNKS GETTING PAID BY THE CYCLE?
       
 (DIR) Post #Auhv0TG452B4Bk4ixc by foone@digipres.club
       2025-06-02T03:31:22Z
       
       0 likes, 0 repeats
       
       right after this it checks if the mouse is even enabled (hey, it's 1990, not everyone has a mouse!)I'd think that you would check that before you try to hide and redraw the cursor, but maybe this is exactly why I'm not employed writing educational games in 1990?
       
 (DIR) Post #Auhv8JfNcrCSkzentQ by hirvox@mastodon.online
       2025-06-02T03:32:41Z
       
       0 likes, 0 repeats
       
       @foone I smell a kludge addressing a poorly-understood bug/undocumented behavior.
       
 (DIR) Post #AuhvSJlGywhSqLx1EW by foone@digipres.club
       2025-06-02T03:36:24Z
       
       0 likes, 0 repeats
       
       oh eww, they're kluding a 32bit MOV (in 16bit real mode) by using LES.
       
 (DIR) Post #AuhvYYL5hAhnnDg4eW by foone@digipres.club
       2025-06-02T03:37:33Z
       
       0 likes, 0 repeats
       
       MousePos is a struct with 2 shorts, x & y. they need MousePos.x & MousePos.y into CX and DX. BUT HOW? LES DX, [MousePos.x]MOV CX, ES
       
 (DIR) Post #Auhvb9FfQV1wr1NW3E by kevinriggle@ioc.exchange
       2025-06-02T03:37:50Z
       
       0 likes, 0 repeats
       
       @foone were they using this specifically to slow things down?
       
 (DIR) Post #AuhvgJzouG5RcpQtPs by foone@digipres.club
       2025-06-02T03:38:53Z
       
       0 likes, 0 repeats
       
       LES loads the far pointer at MousePos.x into the segment selector ES and the register DX. This is a far pointer in segmented mode, a 16bit segment selector plus a 16bit offset, like ES:DX or SS:BP or DS:1234
       
 (DIR) Post #AuhvkItew4vDNFRxbc by foone@digipres.club
       2025-06-02T03:39:41Z
       
       0 likes, 0 repeats
       
       but there's no far pointer here! it's just using the code to load two 16-bit values at the same time.
       
 (DIR) Post #AuhvpuojNLksQjowEq by gsuberland@chaos.social
       2025-06-02T03:40:37Z
       
       0 likes, 0 repeats
       
       @foone cursed
       
 (DIR) Post #Auhw5aTOmYEjy3Jcw4 by foone@digipres.club
       2025-06-02T03:43:30Z
       
       0 likes, 0 repeats
       
       the only downside is that it clobbers ES, but if they already know they aren't using ES, this... theoretically could be faster?
       
 (DIR) Post #AuhwC9ch0aVGijnIQa by foone@digipres.club
       2025-06-02T03:44:41Z
       
       0 likes, 0 repeats
       
       okay on an original 8086, LDS + MOV REG,REG is 29+2=31 cycles. MOV REG, MEM*2 is 18*2=36 cycles. I GUESS?
       
 (DIR) Post #AuhwSO4p2OkgBIgxwO by gsuberland@chaos.social
       2025-06-02T03:47:35Z
       
       0 likes, 0 repeats
       
       @foone is the 8088 any different?
       
 (DIR) Post #AuhwWRGt6OXjFPGe5w by foone@digipres.club
       2025-06-02T03:48:22Z
       
       0 likes, 0 repeats
       
       I wonder if this compiler is smart enough to do this or this is the ghostly hand of the most dreaded adversary of reverse engineers: HUMAN WRITTEN ASSEMBLY
       
 (DIR) Post #AuhwdZ4QVJChSkpw2K by foone@digipres.club
       2025-06-02T03:49:38Z
       
       0 likes, 0 repeats
       
       compilers are programs. programs are predictable (with enough effort. if it was easy, we wouldn't need people like me)humans are not predictable. reverse engineering what a human is doing is much, much harder.
       
 (DIR) Post #AuhwhrTo05YbiUkxWa by StumpyTheMutt@social.linux.pizza
       2025-06-02T03:48:36Z
       
       0 likes, 0 repeats
       
       @gsuberland @foone memory access is 2x since it's 8 bits
       
 (DIR) Post #Auhwhsmz8GUdmGjn3g by foone@digipres.club
       2025-06-02T03:50:23Z
       
       0 likes, 0 repeats
       
       @StumpyTheMutt @gsuberland yeah I think the 8088 be relatively the same except for memory taking twice as long
       
 (DIR) Post #Auhx1L6A6SPv4yz8Ns by foone@digipres.club
       2025-06-02T03:53:55Z
       
       0 likes, 0 repeats
       
       so I think https://digipres.club/@foone/114611650132539367 does make some sense: it's hiding and redrawing the cursor because it already moved the mouse position, and wants the on-screen cursor to match up .
       
 (DIR) Post #Auhx63pHkS0qxULIG0 by foone@digipres.club
       2025-06-02T03:54:47Z
       
       0 likes, 0 repeats
       
       it's just you'd think this would be like:hide_cursor();cursor.pos=newpos;show_cursor();but apparently the way the cursor hiding/showing works, hiding uses a saved position, while show_cursor uses the new global position.
       
 (DIR) Post #Aui3Xy0Daqv2jK97ZI by tekhedd@byteheaven.net
       2025-06-02T05:06:55Z
       
       0 likes, 0 repeats
       
       @foone well of course, why wouldn't it? 😂😂
       
 (DIR) Post #Aui649WcUJJ3dqmDuS by foone@digipres.club
       2025-06-02T05:35:12Z
       
       0 likes, 0 repeats
       
       so the code that uses the soundblaster auto-detects the IRQ in use by simply setting up a handler for every possible SB interrupt, then asking the SB to fire an interrupt. then it sees which one triggered. Makes sense, but I wonder why this wasn't universal? why were programs always asking me which IRQ to use? maybe this isn't compatible with less-accurate SB clones?
       
 (DIR) Post #Aui6LSkuF7IACsiHeC by colin_mcmillen@piaille.fr
       2025-06-02T05:38:19Z
       
       0 likes, 0 repeats
       
       @foone The logical explanation is that the mouse position is updated outside of the drawing loop, for VBL reasons. So clear must refer to the last drawn position. (Ask me how I know!)
       
 (DIR) Post #Aui9CAZ0oHdp2fPUBM by foone@digipres.club
       2025-06-02T06:10:16Z
       
       0 likes, 0 repeats
       
       currently in destructive-debugging mode.I've a bunch of functions I tagged as "draw_relatedNN". Currently I'm down to 1, 2, 7, 9, 11, and 20.So I'm running the game with them disabled (one at a time, natch) to see what doesn't render properly.for example, when the first instruction of draw_related1 is a RET, suddenly animations don't play
       
 (DIR) Post #AuiAXykhVOMajaqBmq by foone@digipres.club
       2025-06-02T06:25:25Z
       
       0 likes, 0 repeats
       
       ahh yes, nothing more suspicious than someone practicing their french in... Montreal?
       
 (DIR) Post #AuiAxHTF31fc1njtuC by foone@digipres.club
       2025-06-02T06:28:59Z
       
       0 likes, 0 repeats
       
       @wyatt I think that'd still work? since it only sends a "hey SBcard, IRQ me!" message to one of them
       
 (DIR) Post #AuiB4XCowXuurBW8mm by foone@digipres.club
       2025-06-02T06:31:22Z
       
       0 likes, 0 repeats
       
       Disabling draw_related2 produces blackout mode, as none of the static UI will render.
       
 (DIR) Post #AuiBBSKnSACXm9Y4HI by 1000millimeter@chaos.social
       2025-06-02T06:32:31Z
       
       0 likes, 0 repeats
       
       @foone Well they do speak french in Montreal.
       
 (DIR) Post #AuiBFWT020UrkZKB3A by pipe_dreams@mstdn.social
       2025-06-02T06:33:19Z
       
       0 likes, 0 repeats
       
       @foone But where in the world *is* she XD
       
 (DIR) Post #AuiG8SdMNoihbecenI by vstab@infosec.exchange
       2025-06-02T07:27:58Z
       
       0 likes, 0 repeats
       
       @foone What a beaut'!
       
 (DIR) Post #AuiJwsDzoJxTJhUNIe by foone@digipres.club
       2025-06-02T08:10:43Z
       
       0 likes, 0 repeats
       
       I was gonna give up on draw_related7 since disabling it didn't seem to change anything. then I tried to quit...
       
 (DIR) Post #AuiKKm9I3IlxQGgXia by foone@digipres.club
       2025-06-02T08:15:08Z
       
       0 likes, 0 repeats
       
       oh god I turned off the shadowsnow everything is flat
       
 (DIR) Post #AuiKsVsd2sTUoOymBs by foone@digipres.club
       2025-06-02T08:21:13Z
       
       0 likes, 0 repeats
       
       @pence exactly! it's mobile as fuck now!
       
 (DIR) Post #AuiOHpKGBRxiDvfKdM by jernej__s@infosec.exchange
       2025-06-02T08:59:20Z
       
       0 likes, 0 repeats
       
       @foone Modern!
       
 (DIR) Post #AuiTMHDcv4q1f4VK1A by foone@digipres.club
       2025-06-02T09:56:15Z
       
       0 likes, 0 repeats
       
       the menu items 1-indexed, sort of. it treats 0 as "the whole menu itself"so like:set_menu_enabled(TRUE, 1, Menu_Game); sets the first item in Game to enabled, but set_menu_enabled(TRUE, 0, Menu_Game); sets the whole Game menu to enabled.
       
 (DIR) Post #AuiUbvBGixLXtoQPh2 by foone@digipres.club
       2025-06-02T10:10:16Z
       
       0 likes, 0 repeats
       
       the second thing the main() does is try to unload the game.this is a side-effect of how they're using setjmp to make main() a sort of event handler, so when they need to load the game's resources they don't know they're not already loaded, so it first tries to unload them, fails because they're not loaded, and THEN loads them
       
 (DIR) Post #AuiY1T0oNQHNvYPGLo by KeyJ@mastodon.gamedev.place
       2025-06-02T10:48:24Z
       
       0 likes, 0 repeats
       
       @foone Probably the other way round - it was likely too prone to false positives.Printing something in the background (one of the few multi-tasking things DOS could do)? Instant IRQ7 misdetection.Receiving a packet from a network card that's configured to an IRQ line which is also typical for a sound card? Well ...
       
 (DIR) Post #AuiYV3HuaDgkpgVocy by foone@digipres.club
       2025-06-02T10:53:52Z
       
       0 likes, 0 repeats
       
       @KeyJ this code does specifically turn off the printer/serial port IRQs while it's testing, but I don't doubt they could have easily missed one possible source of IRQs
       
 (DIR) Post #AuiZKogK8Mwoafc7hQ by effika@mastodon.social
       2025-06-02T11:03:11Z
       
       0 likes, 0 repeats
       
       @foone ah, "modern" design
       
 (DIR) Post #AuzPj9MJDDk9obXFQm by foone@digipres.club
       2025-06-10T14:05:29Z
       
       0 likes, 0 repeats
       
       so the datafiles are mostly understood now (I haven't tried attacking ACME.DAT, the highscores/user database) yet, but there's several remaining chunks in the DATs that I don't understand yet:1. Exactly how animations work. I can now dump all the frames, but they're not simple: one of the animations is an axe spinning across the screen, but it only has 4 frames of animation, it's somehow drawing those same source images at different locations.
       
 (DIR) Post #AuzPmUIDpuTDbsDPIe by foone@digipres.club
       2025-06-10T14:06:08Z
       
       0 likes, 0 repeats
       
       2. sounds/music. I don't do noises, so I've not taken a crack at this. 3. FUCKING CHUNK 10
       
 (DIR) Post #AuzPrlvXhTDjkW7vUG by foone@digipres.club
       2025-06-10T14:07:13Z
       
       0 likes, 0 repeats
       
       to explain chunk ten, the way the cities work is that the they're numbered 10000 + 100*city_num.So Athens is 10000, Baghdad is 10100, Bamako is 10200.
       
 (DIR) Post #AuzPxygHC8ll2ewfdw by foone@digipres.club
       2025-06-10T14:08:18Z
       
       0 likes, 0 repeats
       
       and each city has chunks numbered by an offset that's added onto the city's main chunk number.So +0 is the city's chunk itself, +1 is the imagegroup for the city, +2 is the image itself, +3 is is the city's description, +4 is the list of things that could be stolen from there
       
 (DIR) Post #AuzQ21BnoIX5ypcNUW by foone@digipres.club
       2025-06-10T14:09:03Z
       
       0 likes, 0 repeats
       
       then from +11 to +22 there's the different hints that lead to this city. +11 is a hint about the money, +17-+19 are about flags, +22 is about the leader, etc.
       
 (DIR) Post #AuzQ66lL20HoQJBpVQ by pdo@infosec.exchange
       2025-06-10T14:09:02Z
       
       0 likes, 0 repeats
       
       @foone I was not prepared for how insignificant Bamako has been in adulthood
       
 (DIR) Post #AuzQBIAG4Bx7EYJlPk by foone@digipres.club
       2025-06-10T14:10:44Z
       
       0 likes, 0 repeats
       
       but cities all have a +10 chunk. and I have no idea what it is FOR. It's 20 to 26 bytes, it doesn't make sense as-is or run through the decompression, and it's binary. Here's Tokyo's:0B 00 01 00 02 00 03 00 04 00 05 00 07 00 08 00 09 00 0A 00 0B 00 0C 00
       
 (DIR) Post #AuzQMq5OHtUfcnXzEW by foone@digipres.club
       2025-06-10T14:12:50Z
       
       0 likes, 0 repeats
       
       it seems to be a list of short-ints maybe?The first one is 11, and it's followed by 11 words.
       
 (DIR) Post #AuzQfvsCziSf4mUB4C by foone@digipres.club
       2025-06-10T14:16:15Z
       
       0 likes, 0 repeats
       
       nevermind I figured it out:It tells the game which hints are available. I figured the game would just try and fail to load missing chunks but I guess this is an optimization so it doesn't need to do a disk read every time
       
 (DIR) Post #AuzRr4fwhyGnW0cv4K by foone@digipres.club
       2025-06-10T14:29:25Z
       
       0 likes, 0 repeats
       
       @charlotte I don't think it's position-dependant (or they'd just make it have all the possible hint types, with null/sentinel values for missing ones), but it'd be a pain to test so I'm not gonna
       
 (DIR) Post #AuzSAUaaaPNfO3NdsO by foone@digipres.club
       2025-06-10T14:32:59Z
       
       0 likes, 0 repeats
       
       I did figure out what the sounds are, I just don't know how the format works.That's the digisnd ones, which are some kind of waveform. There's also the midisnd ones, which appear to be mostly regular midi (they've got a byte before the header chunk starts, which isn't in regular midi files. it's always 02)
       
 (DIR) Post #AuzSKTvDvCgYDInMTg by kawa@mas.to
       2025-06-10T14:34:43Z
       
       0 likes, 0 repeats
       
       @foone That did not take long.
       
 (DIR) Post #AuzSTSIrJFxNnc85Vg by foone@digipres.club
       2025-06-10T14:36:19Z
       
       0 likes, 0 repeats
       
       there is a decompress_sound function in the shared broderbund code, but I don't understand how it works (and it's seemingly not documented by the Prince of Persia hackers, and it's not included in SDL_PoP)
       
 (DIR) Post #AuzSsdUWqhoJjqawvA by foone@digipres.club
       2025-06-10T14:40:56Z
       
       0 likes, 0 repeats
       
       ahh, there is code to handle it in Princed, the Prince of Persia datafile editor https://www.popot.org/other_useful_tools.php?tool=PR
       
 (DIR) Post #AuzTLekhEyg42wzlNw by foone@digipres.club
       2025-06-10T14:46:12Z
       
       0 likes, 0 repeats
       
       @kawa I enjoy using the entire internet as a rubber duck
       
 (DIR) Post #AuzUebuq6tzchpLEVU by foone@digipres.club
       2025-06-10T15:00:39Z
       
       0 likes, 0 repeats
       
       it turns out the palette format for PoP is slightly different from the one used in Carmen, so while it can extract the images from Carmen DATs, it gibberishes their palettes. Here's Tokyo.
       
 (DIR) Post #AuzUp5VovUCNOSdQki by foone@digipres.club
       2025-06-10T15:02:46Z
       
       0 likes, 0 repeats
       
       oh I forgot some unknown chunks:CARMEN.DAT has 28 chunks from #100 to #229, which are between 11 and 527 bytes each. None of them decompress properly or make any sense without decompression.I think some of them are PC speaker sound files?
       
 (DIR) Post #AuzUsUIfDq2z8l6P2W by christopherkunz@chaos.social
       2025-06-10T15:03:19Z
       
       0 likes, 0 repeats
       
       @foone This looks almost like it could be from Sword of the Samurai (just the palette is weird).
       
 (DIR) Post #AuzWo2pvaYjgiJfcvo by psilocervine@gamedev.lgbt
       2025-06-10T15:24:53Z
       
       0 likes, 0 repeats
       
       @foone kinda a vibe though
       
 (DIR) Post #AuzXhHqjTLSFCdO8C8 by trurl@mastodon.sdf.org
       2025-06-10T15:34:46Z
       
       0 likes, 0 repeats
       
       @foone "The sky above the mountain was the color of a bitmap reaource, decoded with the wrong channels."
       
 (DIR) Post #AuzYTkF3DJpb9xry9w by foone@digipres.club
       2025-06-10T15:43:41Z
       
       0 likes, 0 repeats
       
       utterly amused by the consistent uncertainty in these names:void __stdcall16far free_animation_probably(AnimationProbably *anim)
       
 (DIR) Post #AuzYnR8XxH7phNDW2S by KatS@chaosfem.tw
       2025-06-10T15:47:13Z
       
       0 likes, 0 repeats
       
       @foone This makes me seriously nostalgic for the Apple ][es that we used in high school.
       
 (DIR) Post #AuzYq4T4h5OiGF4iAK by rk@mastodon.well.com
       2025-06-10T15:47:42Z
       
       0 likes, 0 repeats
       
       @foone There was a space 4X game (not Star Control but in that vein) that had a terraforming mechanic. On the Amiga version when you kicked off a terraform operation on a planet, it used the language the Workbench disk formatting dialog used (you were doing a double density FFS terraforming operation or something to that effect).
       
 (DIR) Post #AuzbTYcQj9VyyTPIye by foone@digipres.club
       2025-06-10T16:17:15Z
       
       0 likes, 0 repeats
       
       @rk nice!
       
 (DIR) Post #AuzbzDplXZYvmHkAnQ by philpem@digipres.club
       2025-06-10T16:22:54Z
       
       0 likes, 0 repeats
       
       @foone sounds like the "magic/more magic" switch
       
 (DIR) Post #Auzcj385fhIDtpAQHw by foone@digipres.club
       2025-06-10T16:31:15Z
       
       0 likes, 0 repeats
       
       DOS & DOSBox is great because sometimes you'll set a breakpoint at address X and it'll hit at address Y! I set a breakpoint for 17DA:0027 and it fired at 17DA:4EC0
       
 (DIR) Post #AuzcxKdZNJKCFjhYiu by cr1901@mastodon.social
       2025-06-10T16:33:49Z
       
       0 likes, 0 repeats
       
       @foone So it's like gdb on any optimized code :D.
       
 (DIR) Post #AuzdfziG1BMkO8Btxo by ozzelot@mstdn.social
       2025-06-10T16:42:23Z
       
       0 likes, 0 repeats
       
       @fooneWhy it do that
       
 (DIR) Post #AuzeJwsVyaMRBF2ZLU by foone@digipres.club
       2025-06-10T16:49:10Z
       
       0 likes, 0 repeats
       
       so it turns out the hall of fame only stores 27 names. if you win the game and there's already 27, it just overwrites the last name on the list
       
 (DIR) Post #AuzeT61JM9Ia8iW6HA by gsuberland@chaos.social
       2025-06-10T16:50:46Z
       
       0 likes, 0 repeats
       
       @foone just like the walk of fame in real life
       
 (DIR) Post #AuzedcZZBK6fzlYfBo by foone@digipres.club
       2025-06-10T16:52:41Z
       
       0 likes, 0 repeats
       
       current players are handled differently: you can have up to 40 of them, and if there's already 40, it just tells you "no you can't register, use one of the existing names"
       
 (DIR) Post #AuzwlVKHo27B0pJs1I by foone@digipres.club
       2025-06-10T20:15:41Z
       
       0 likes, 0 repeats
       
       okay, so the length of a chase depends on the player's rank.Rookie: 4Sleuth: 5Private Eye: 6Investigator: 7Ace Detective: 8
       
 (DIR) Post #AuzyPD1BOVkTlgsejg by foone@digipres.club
       2025-06-10T20:34:09Z
       
       0 likes, 0 repeats
       
       So when you get to the final town and go to a building to question someone, it selects randomly which of the three buildings they're in.and it keeps rerolling until it picks one that's not the one you picked. This means that you can't catch the bad guy on your first guess by random chance: just like minesweeper, it'll always be a miss on the first attempt.
       
 (DIR) Post #Auzyb0jQtsUZ8cCohE by foone@digipres.club
       2025-06-10T20:36:22Z
       
       0 likes, 0 repeats
       
       this only happens the first time you pick: once you've gone through this process, it stays static at whichever building it picked.
       
 (DIR) Post #AuzyrmPXOkWle4tc4e by otte_homan@theblower.au
       2025-06-10T20:39:21Z
       
       0 likes, 0 repeats
       
       @foone waitaminute ... are you saying that Minesweeper gives you two ones and one two in a random corner, and only generates the rest of the minefield *after* you've made your first move ?!?
       
 (DIR) Post #AuzzORHkxmWTgLpUaO by foone@digipres.club
       2025-06-10T20:45:15Z
       
       0 likes, 0 repeats
       
       @otte_homan Minesweeper actually generates the minefield before your first move, then if your first click is a mine, it moves the mine to the top-left corner!
       
 (DIR) Post #AuzzowV1X6NS1Hfms4 by gparker@discuss.systems
       2025-06-10T20:50:02Z
       
       0 likes, 0 repeats
       
       @foone Officer: "I'm sorry, Detective Hall, you want to what?"Detective Monty Hall: "I want to switch."
       
 (DIR) Post #Av007bBsyxXPQycLAm by foone@digipres.club
       2025-06-10T20:53:26Z
       
       0 likes, 0 repeats
       
       @paula glad you enjoyed it!
       
 (DIR) Post #Av00HpJbK4QA8V6SDg by foone@digipres.club
       2025-06-10T20:55:11Z
       
       0 likes, 0 repeats
       
       @gparker that punk is always making this harder
       
 (DIR) Post #Av00SURFHYI4ZclOPA by foone@digipres.club
       2025-06-10T20:57:13Z
       
       0 likes, 0 repeats
       
       so the way the game internally keeps track of the suspects location is very simple: it's just the next city. so when you start, it picks one of the 3-4 cities connected to your starting city, and marks that as the next city. when you end up in that city, it repeats this process. but each time it does, it decrements the cities_to_chase_through variable, and if it hits zero, it doesn't pick a next city, it leaves them in the current city
       
 (DIR) Post #Av00bsQJTZMJZGnrkm by Ongion@mendeddrum.org
       2025-06-10T20:58:52Z
       
       0 likes, 0 repeats
       
       @foone wait, does that mean it normally never puts a mine in the top-left corner? Or does it mean you *can* lose on the first click if you choose the top-left corner?
       
 (DIR) Post #Av00fCMBouSiG8STvU by foone@digipres.club
       2025-06-10T20:59:01Z
       
       0 likes, 0 repeats
       
       this is also why you can't cheat with savegames and such: they're not in the final town, they're always just one step ahead of you, because they only move when you arrive in the same city as them
       
 (DIR) Post #Av00qIIm3cWlsm9T7Y by foone@digipres.club
       2025-06-10T21:01:29Z
       
       0 likes, 0 repeats
       
       @Ongion I think it can put a mine in the upper left, it just gets deleted/replaced when you first click (if you hit a mine).I'm not sure about the second question, maybe? I read this on the minesweeper wiki that seems to have died or at least vanished from google
       
 (DIR) Post #Av0110QsppYFeD3Jwm by foone@digipres.club
       2025-06-10T21:03:28Z
       
       0 likes, 0 repeats
       
       @Ongion here we go:if you click on the top-left corner, any mines get shifted to the 2nd spot to the right:https://web.archive.org/web/20180618103640/http://www.techuser.net/mineclick.html
       
 (DIR) Post #Av01sjJGiHgMBC6m2K by otte_homan@theblower.au
       2025-06-10T21:13:08Z
       
       0 likes, 0 repeats
       
       @foone huh? What? Why?
       
 (DIR) Post #Av0253jwa0yX1ASrgW by foone@digipres.club
       2025-06-10T21:15:21Z
       
       0 likes, 0 repeats
       
       @otte_homan to keep you from losing on the first move
       
 (DIR) Post #Av02N2OCLB5u2brk5g by foone@digipres.club
       2025-06-10T21:18:38Z
       
       0 likes, 0 repeats
       
       Total funcs:   701Unnamed funcs: 188% named:       73.2%
       
 (DIR) Post #Av18NRtBioL7pVcmdk by foone@digipres.club
       2025-06-11T10:00:32Z
       
       0 likes, 0 repeats
       
       normal foone-at-3am stuff: having to understand how x86 instruction encodings work because I'm pretty sure Ghidra is doing it wrong and I don't know enough to understand WHY
       
 (DIR) Post #Av18VkojEPmCqoUzgm by Beckydog@hydaelyn.coerthansnowstorm.online
       2025-06-11T10:01:59Z
       
       0 likes, 0 repeats
       
       @foone not the same level of smart, but I was up at 3, trying to unlock a boot loader ^^
       
 (DIR) Post #Av18lSe6Ym0p7v1GM4 by foone@digipres.club
       2025-06-11T10:05:03Z
       
       0 likes, 0 repeats
       
       so at 17DA:4AE5, there's the bytes E8 CE B5.This is a call near instruction. DOSBox interprets it as:call B6 ($-4a32)which takes us to 17DA:00B6.So it's a jump to a different part of the same segment! simple, right?
       
 (DIR) Post #Av18qNByGRjXezCbLc by foone@digipres.club
       2025-06-11T10:05:53Z
       
       0 likes, 0 repeats
       
       but Ghidra (Which thinks this code is at 1FB7:4AE5), interprets those same bytes as a call to 2000:fc26: Different segment, different offset
       
 (DIR) Post #Av191FnW64FHubx6Rc by foone@digipres.club
       2025-06-11T10:07:53Z
       
       0 likes, 0 repeats
       
       Those aren't two ways to describe the same linear memory address. they're 45kb apart
       
 (DIR) Post #Av19Zf5gZ3AcCdrEOm by foone@digipres.club
       2025-06-11T10:14:06Z
       
       0 likes, 0 repeats
       
       moving the memory map around in ghidra to match dosbox seems to have fixed it.. but adjusting the mapping can break other things, and this game's memory map is already messed up
       
 (DIR) Post #Av1ACPgxkaDNjpluz2 by foone@digipres.club
       2025-06-11T10:21:03Z
       
       0 likes, 0 repeats
       
       yeah this has broken a lot of other function linkages. fucking ghidra.
       
 (DIR) Post #Av1APTPbENc72XsUNM by foone@digipres.club
       2025-06-11T10:23:25Z
       
       0 likes, 0 repeats
       
       the disasembly:CALLF SUB_0823_8d10the decompilation:func_0x00010f40(0x1000);if I click the decompilation, nothing happens. I can't zoom to that function.if I click the disassembly, I don't end up at SUB_0823_8d10, I end up at broderbund::load_from_opendats_metadat, the function at 0823:8d10!
       
 (DIR) Post #Av1AUZCl7X6WSEIhEW by foone@digipres.club
       2025-06-11T10:24:24Z
       
       0 likes, 0 repeats
       
       so why does the assembly understand where to go, but not what it's named? why doesn't the decompilation know either of these things?
       
 (DIR) Post #Av1CIm0DudnwZywQ4G by foone@digipres.club
       2025-06-11T10:44:35Z
       
       0 likes, 0 repeats
       
       it's broken because of relocations not being applied.if I manually apply them, it fixes itself. ugh.
       
 (DIR) Post #Av1CNmESUDO6jtzAIK by foone@digipres.club
       2025-06-11T10:45:31Z
       
       0 likes, 0 repeats
       
       I am going to have to write a script to fix this. I'm not gonna manually apply 823 relocations
       
 (DIR) Post #AvGCUyBZMAzJD6Sl0a by foone@digipres.club
       2025-06-18T16:27:25Z
       
       0 likes, 1 repeats
       
       I love when DOS games interpret corrupted datafiles as you needing to insert the right floppy disk into the hard drive.
       
 (DIR) Post #AvGGTOIDieEDPz4nUe by rotopenguin@mastodon.social
       2025-06-18T16:59:17Z
       
       0 likes, 0 repeats
       
       @foone grab the torx driver, it's time to change C:'s disk.
       
 (DIR) Post #AvGHVzNgtfIyyjRDYO by herzmut@23.social
       2025-06-18T16:32:41Z
       
       0 likes, 0 repeats
       
       @foone also the key you're ought to press when no keyboard is recognized
       
 (DIR) Post #AvGINEdQuiIHdTBtsu by reyna@furry.engineer
       2025-06-18T16:38:46Z
       
       0 likes, 0 repeats
       
       @foone An absolute classic!
       
 (DIR) Post #AvGVflofaHUBA6cDGy by dhamlinmusic@dragonscave.space
       2025-06-18T20:02:06Z
       
       0 likes, 0 repeats
       
       @foone I mean you could insert the right disk into your floppy drive.
       
 (DIR) Post #AvH6WLEgjj5eQF9WIy by retroswim@bitbang.social
       2025-06-19T02:54:56Z
       
       0 likes, 0 repeats
       
       @foone I've never had much success attacking real mode stuff with Ghidra.
       
 (DIR) Post #AvHJdjmNBMeryOlVFQ by monotonehell@aus.social
       2025-06-19T05:22:08Z
       
       0 likes, 0 repeats
       
       @foone "I can't find what I want. Give me what I want."
       
 (DIR) Post #AvHoxZhVScm15OQbXU by foone@digipres.club
       2025-06-19T11:13:04Z
       
       0 likes, 0 repeats
       
       @retroswim I've had some but it is fucking annoying at times. it feels like ghidra only put minimal effort into ensuring it worked, but there's been no actual follow up on all the ways it doesn't.which I guess makes sense: if the development of ghidra is supported for anti-malware reasons, there aren't a lot of 16bit x86 malwares that matter these days