Post AquFitsGo2XgrqVEbg by matt@proud.social
(DIR) More posts by matt@proud.social
(DIR) Post #AqttpLCZuy2YMtfTAu by foone@digipres.club
2025-02-08T06:46:15Z
1 likes, 0 repeats
anyone feel like this is an invitation to crack a game?yes, even a bible game?
(DIR) Post #Aqtu2kIJw3OnxLkHzs by foone@digipres.club
2025-02-08T06:48:40Z
1 likes, 0 repeats
STEP ONE: unpack with UNP.UNP 4.12 Executable file restore utility, written by Ben Castricum, 07/22/96Special version registered to Otto Stock, distribution prohibited.processing file : ..\BB\BB.EXEDOS file size : 73447file-structure : executable (EXE)EXE part sizes : header 512 bytes, image 72935 bytes, overlay 0 bytesprocessed with : LINK V3.60, V3.64, V3.65 or V5.01.21 /EXEPACKaction : decompressing... donenew file size : 81792writing to file : ..\BB\BB.EXE
(DIR) Post #AqtuGTFw548nAOAtvc by foone@digipres.club
2025-02-08T06:51:07Z
1 likes, 0 repeats
Step two: loaded it in ghidra, do a string search. We find the "Oh, oh! This doesn't seem to be an original disk!" at 1fed:27cd. Since this is segmented, we can't just search for that string. but we CAN do a scalar search for 0x27cd!
(DIR) Post #AqtuQQWx4LMXbpshc0 by foone@digipres.club
2025-02-08T06:52:54Z
0 likes, 0 repeats
Which leads us right to FUN_1000_87c7, containing this code:
(DIR) Post #AqtuyHmo5QEaKqRVEu by foone@digipres.club
2025-02-08T06:59:02Z
1 likes, 0 repeats
FUN_1000_8798 seems to be the magic. It gets the current drive, then calls FUN_1000_8739.FUN_1000_8739 in turn, calls a low-level BIOS disk drive call. Perfect chance to do some copy protection
(DIR) Post #AqtwvbGdOpwLnJF1PM by foone@digipres.club
2025-02-08T07:08:13Z
1 likes, 0 repeats
Here we go. It gets passed a sector number, and it confirms that the sector doesn't exist, but the sector before and after it do.(with a free disk subsystem reset and read of sector 1 in the middle)
(DIR) Post #AqtwvbjLg4uPEMfxAG by foone@digipres.club
2025-02-08T07:08:54Z
1 likes, 0 repeats
They pass in sector_num of 0x2ca. So presumably on the original disks they did some special formatting (or manually marked that sector as bad?) so that sectors 0x2c9 and 0x2cb existed, but 0x2ca didn't.
(DIR) Post #AqtwvcgC9HyqAsCwt6 by foone@digipres.club
2025-02-08T07:09:19Z
0 likes, 0 repeats
naturally if you copy this program onto another disk (or a hard drive), all those sectors will be valid, so it'll fail the check.
(DIR) Post #Aqtwvd8uQWwtbvdse0 by foone@digipres.club
2025-02-08T07:11:32Z
0 likes, 0 repeats
Anyway that'd be a pain to replicate on a real disk or a virtual DOSBox hard drive.So, lets just patch out the check, or more accurately, the consequences of the check. at 1000:87eb we have 74 1d: JZ LAB_1000_880aLAB_1000_880a is after the print-uh-oh stuff, and it's jumping if the result of FUN_1000_8798 is non-NULL.
(DIR) Post #AqtwvdfAUaklDyjdvU by foone@digipres.club
2025-02-08T07:13:49Z
1 likes, 0 repeats
sticking 74 1D into https://shell-storm.org/online/Online-Assembler-and-Disassembler/, it tells us it's "je 0x1f" (JE is a synonym for JZ).So stick JMP 0x1f into the assembler, and we get EB 1D back. So we need to find that 74 in the binary and turn it into EB
(DIR) Post #AqtwveBmXKqCr7zglE by foone@digipres.club
2025-02-08T07:15:43Z
1 likes, 0 repeats
there's definitely some way to make ghidra tell you the fill offset of the current instruction, but I can't remember it, so I go to Bytes view, select the next 32 bytes or so, and search the EXE in a hex editor: Bingo, at 0x882B. Change to EB & save it out to BBCRACKD.EXE
(DIR) Post #AqtwveksQquibyPiSm by foone@digipres.club
2025-02-08T07:16:46Z
1 likes, 0 repeats
And we're in the game with no "YOU PIRATED THIS!" message.Done.
(DIR) Post #AqtwvfWNaEuYzIdeVM by DotMaetrix@chitter.xyz
2025-02-08T07:17:46Z
0 likes, 0 repeats
@foone you're telling me a Bible built this game?
(DIR) Post #Aqtwvg0rktIWVqu01Y by foone@digipres.club
2025-02-08T07:20:44Z
0 likes, 0 repeats
@DotMaetrix apparently! (I personally am a bridge-builder, not a bible-builder. Though I have been tempted to write my own bible more than once)
(DIR) Post #AqtwvgqceShL6N7KhE by Canageek@wandering.shop
2025-02-08T07:17:44Z
0 likes, 0 repeats
@foone Do you often get games checking for this and introducing errors? I know CRPG Addict has had issues with cracked games where they would introduce problems if you bypassed the copy protection in the most obvious way
(DIR) Post #Aqtww98fSxlmqRm8i8 by foone@digipres.club
2025-02-08T07:19:21Z
0 likes, 0 repeats
@Canageek not usually. I've run into one application that did a tricksy anti-cracking behavior: It loaded some plugins when the "hey this is trialware, please buy" dialog appeared, so if you patched that nag screen out, you'd have no plugins
(DIR) Post #Aqtx18oW6NqbHijQLA by foone@digipres.club
2025-02-08T07:21:59Z
1 likes, 0 repeats
this angel has no idea I just cracked their game
(DIR) Post #Aqtx6ylsLwpRsMHQTw by DotMaetrix@chitter.xyz
2025-02-08T07:22:58Z
0 likes, 0 repeats
@foone i mean I understand it's your papal perogative as a pope to do so
(DIR) Post #Aqtx9qcp61LtTpPi5I by foone@digipres.club
2025-02-08T07:23:02Z
0 likes, 0 repeats
@Len0w0ThinkBad I'm a pope and I played this as a kid, the chances I'd eventually hack on it are higher than you'd think
(DIR) Post #AqtxaaPhTk0f1G1dom by foone@digipres.club
2025-02-08T07:28:22Z
0 likes, 0 repeats
and there at offset C13B in the decompressed EXE, we've got the font.
(DIR) Post #Aqtxhizny5WDfEJiSW by foone@digipres.club
2025-02-08T07:29:44Z
1 likes, 0 repeats
it's 8x8 fixed width (like an NES font!) so we don't need to extract widths from anywhere to make a death generator
(DIR) Post #Aqtxl0RTYlGudppBGy by foone@digipres.club
2025-02-08T07:30:11Z
0 likes, 0 repeats
@Len0w0ThinkBad theologically accurate. gridiron football is the official sport of heaven
(DIR) Post #Aqty4KtZjtZzZuBXOa by TomF@mastodon.gamedev.place
2025-02-08T07:33:44Z
0 likes, 0 repeats
@foone That capital G is a crime.
(DIR) Post #AqtyKHkDDqjiRGPWbo by foone@digipres.club
2025-02-08T07:36:41Z
0 likes, 0 repeats
@TomF fun fact: that distinctive G is how I double checked I had the right font
(DIR) Post #Aqu9jGziFMw8qdmKoa by foone@digipres.club
2025-02-08T07:42:00Z
2 likes, 0 repeats
SHIT WHO TOLD THEM?
(DIR) Post #Aqu9jHmHKnmjHGV7Vw by foone@digipres.club
2025-02-08T08:04:18Z
0 likes, 0 repeats
That one is a joke, but the credits do actually have an anti-piracy message followed by Exodus 20:15: Thou Shalt Not Steal
(DIR) Post #Aqu9jIkXijzUIAhFRo by foone@digipres.club
2025-02-08T08:10:11Z
1 likes, 0 repeats
The funny thing is: They're inconsistent with the fact it says "Thou shalt not steal".Why? Because this game has FOUR BIBLES in it. Only one of those is the King James Version.
(DIR) Post #Aqu9jJMTRiKeBoRXZQ by foone@digipres.club
2025-02-08T08:11:46Z
0 likes, 0 repeats
NIV & Revised Standard say "You shall not steal."Living Bible says "You must not steal."Only the KJV says "Thou shalt not steal."
(DIR) Post #Aqu9jJptgJrrf4D2Qq by foone@digipres.club
2025-02-08T08:13:42Z
0 likes, 0 repeats
Come on guys, you could have made it switch between the different versions of the bible based on the current setting of which version to use! I'm gonna have to hack that in, aren't I?
(DIR) Post #Aqu9jKYZ0Fb3tb6i3M by foone@digipres.club
2025-02-08T08:14:48Z
0 likes, 0 repeats
the file DAT3 has chunks named SODOMA and SODOMB Come on guys, just 23 more and you'll be onto something!
(DIR) Post #Aqu9jL94oUntiqBrxw by foone@digipres.club
2025-02-08T08:19:56Z
0 likes, 0 repeats
there's some kind of compression going on here that's inexplicably bad?
(DIR) Post #Aqu9jLbR73UN8nSWAa by foone@digipres.club
2025-02-08T08:45:07Z
0 likes, 0 repeats
I modified some of my Carmen Sandiego scripts to handle its files, so now I can see what chunks are where:https://gist.github.com/foone/a8e2455dd0c5456e513cf69c56b727c8
(DIR) Post #Aqu9jMHcaDEVFdCCvI by foone@digipres.club
2025-02-08T08:45:26Z
0 likes, 0 repeats
you might notice I did DAT1, DAT2, DAT3, and then DAT5: DAT4 is completely different and apparently part of the copy protection?
(DIR) Post #Aqu9jMl2ooliisxhmi by foone@digipres.club
2025-02-08T09:25:47Z
0 likes, 0 repeats
hey @dosnostalgic: isn't there a way to mark clusters as bad in Norton Utilities? I didn't see it under DiskEdit
(DIR) Post #Aqu9jNJmjeYeSdDRw0 by foone@digipres.club
2025-02-08T09:26:04Z
0 likes, 0 repeats
(I'm trying to recreate the copy protection)
(DIR) Post #Aqu9jNr6jlDG7yo3sG by foone@digipres.club
2025-02-08T09:33:37Z
0 likes, 0 repeats
1 bad sector, eh? hopefully it's the right one!
(DIR) Post #Aqu9jOWaFYOECcDBWS by foone@digipres.club
2025-02-08T09:37:13Z
0 likes, 0 repeats
Doesn't work. Back to DOSBox so I can have a debugger!
(DIR) Post #Aqu9jPAHrw9IBkmtPM by foone@digipres.club
2025-02-08T09:42:50Z
0 likes, 0 repeats
oooooh! I'm totally wrong.this is doing an int 25 DOS 1+ - ABSOLUTE DISK READ.I set a cluster to BAD.This thing doesn't even USE clusters! it's raw sector access!
(DIR) Post #Aqu9kHkIwF2rT63Q2q by foone@digipres.club
2025-02-08T09:43:49Z
0 likes, 0 repeats
meaning this is a trickier compression than I thought: They left out a sector! it's just not on the disk.They had to do this in the formatting step!
(DIR) Post #Aqu9lyiqddGl2zBEqu by fercr@fosstodon.org
2025-02-08T09:42:27Z
0 likes, 0 repeats
@foone Very fascinating thread, thanks for this!
(DIR) Post #Aqu9vMrUG3zgWJhM7U by heathen_cat@furs.social
2025-02-08T07:55:02Z
0 likes, 0 repeats
@foone Thou shalt not copy the floppy!
(DIR) Post #AquABDK9UEPVZaf78S by foone@digipres.club
2025-02-08T09:49:23Z
0 likes, 0 repeats
looking into the freedos FORMAT source. maybe I can easily modify it to skip over 0x2CA
(DIR) Post #AquAEnv1stojwFchRA by foone@digipres.club
2025-02-08T07:55:52Z
0 likes, 0 repeats
@heathen_cat if I'd copied the floppy, I'd be find, it's only because I didn't (I copied the files) that this is a problem!
(DIR) Post #AquAIh4xFzxFsp7Wro by foone@digipres.club
2025-02-08T08:57:18Z
0 likes, 0 repeats
@tursiae always was, bub
(DIR) Post #AquAYPD7SVDf6CQnom by grajohnt@chaos.social
2025-02-08T09:25:42Z
0 likes, 0 repeats
@foone nah, just random coincidence
(DIR) Post #AquBVis20Vkp9sqtaC by foone@digipres.club
2025-02-08T08:16:31Z
0 likes, 0 repeats
@fluffy ahh, the good book! such wisdom
(DIR) Post #AquC0f0WQ6Bi9dZl6O by lritter@mastodon.gamedev.place
2025-02-08T09:15:14Z
0 likes, 0 repeats
@foone thou shalt not copy the floppybut be fruitful and multiply
(DIR) Post #AquC0xbhGccTq96hXs by greenWhale@dice.camp
2025-02-08T08:15:38Z
0 likes, 0 repeats
@foone š
(DIR) Post #AquD5RMIh1WZE3bbpA by foone@digipres.club
2025-02-08T10:22:00Z
0 likes, 0 repeats
okay sector 2ca is on CHS 19/1/12
(DIR) Post #AquDbuKSW98mLHE3vc by foone@digipres.club
2025-02-08T10:27:54Z
0 likes, 0 repeats
dang it, I started putting data into DEBUG.COM, then I realized I have no way to paste in the data I'm generating in a python script.I mean, not without designing a new keyboard...
(DIR) Post #AquEm8QJ4OZEuAOxkG by galibert@piaille.fr
2025-02-08T10:40:54Z
0 likes, 0 repeats
@foone With a upd765, it's not trivial (it is with a wd1772 and friends). What is your target though, a real floppy or some emulator format?
(DIR) Post #AquEoxL2jvL5OWHjKy by foone@digipres.club
2025-02-08T10:41:19Z
0 likes, 0 repeats
@galibert at the moment, just an emulator format.
(DIR) Post #AquEuZ91bYV861L2v2 by foone@digipres.club
2025-02-08T10:42:27Z
0 likes, 0 repeats
keyboard written (or rather, a script for my scriptable automation keyboard project). it generates a disk format or passing to int 13 ah=5, but once it generates it it then types it in at the keyboard. So I'll run it, switch to 86box, and let the keyboardscript type it into DEBUG.COM
(DIR) Post #AquFACzfjFNQ1uQH0i by DotMaetrix@chitter.xyz
2025-02-08T07:47:22Z
0 likes, 0 repeats
@foone As the good book warns us: "and she who cracketh the builder of these words shalt receive great chastisement from the LORD's blondest twink"
(DIR) Post #AquFgZWfURhVB9Hwwa by foone@digipres.club
2025-02-08T10:51:09Z
0 likes, 0 repeats
arg. I should have guessed debug.com has a tiny tiny input buffer, and it can't handle being asked to hold 68 bytes at once
(DIR) Post #AquFitsGo2XgrqVEbg by matt@proud.social
2025-02-08T07:47:15Z
0 likes, 0 repeats
@foone Copy protectionā½ Wouldnāt they want the nice word of the Lord to propagated freely?
(DIR) Post #AquGRrsL5JB7hPyemm by steadilyebbing@girlcock.club
2025-02-08T07:44:08Z
0 likes, 0 repeats
@foone Santa I suspect
(DIR) Post #AquGXDqioV9ZIXm3MG by foone@digipres.club
2025-02-08T11:00:26Z
0 likes, 0 repeats
meh this is a pain. to the NASM!
(DIR) Post #AquGtrIYp83m1Aab2G by neko@aus.social
2025-02-08T11:04:41Z
0 likes, 0 repeats
@foone The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
(DIR) Post #AquHlTHQL6DHADccka by foone@digipres.club
2025-02-08T11:14:26Z
0 likes, 0 repeats
note to self: before you try to CALL a function, make sure you have a stack first.
(DIR) Post #AquI4hLuF842JIt2EC by mjfgates@wandering.shop
2025-02-08T07:43:38Z
0 likes, 0 repeats
@foone You're hleping spread the Word of The Lord!
(DIR) Post #AquJiviOMVymOQ9UDA by foone@digipres.club
2025-02-08T11:36:23Z
0 likes, 0 repeats
I may have created the disk
(DIR) Post #AquJnD8RXJHBZxNX6m by WhyNotZoidberg@topspicy.social
2025-02-08T11:37:08Z
0 likes, 0 repeats
@foone Here: #
(DIR) Post #AquKqnWomeihH03PbU by foone@digipres.club
2025-02-08T11:48:57Z
0 likes, 0 repeats
20 bad sectors? No, I fucked up BAD somewhere.
(DIR) Post #AquKvGGPt7BlYLVizo by foone@digipres.club
2025-02-08T11:49:37Z
0 likes, 0 repeats
@nina_kali_nina technically correct, yes :)
(DIR) Post #AquLlK1T9pFmGlLMrA by vfig@mastodon.gamedev.place
2025-02-08T11:59:11Z
0 likes, 0 repeats
@foone wait, are you adding norton disk doctor to the death generator??
(DIR) Post #AquLog3RhSQNT7rsoa by foone@digipres.club
2025-02-08T11:59:26Z
0 likes, 0 repeats
I had off by one errors in two directions! but sadly they didn't cancel each other out.
(DIR) Post #AquLtU95PA0Dyunaym by foone@digipres.club
2025-02-08T12:00:43Z
0 likes, 0 repeats
@vfig no, this is a mostly death-generated-unrelated bit of nonsense
(DIR) Post #AquMftPqklYOFwirFg by foone@digipres.club
2025-02-08T12:09:28Z
0 likes, 0 repeats
SCANDISK really doesn't like this disk. it's sitting here forever looking for a sector that doesn't exit
(DIR) Post #AquN0ymO0VB2yKJoKu by foone@digipres.club
2025-02-08T12:13:14Z
0 likes, 0 repeats
well that's probably not a great sign
(DIR) Post #AquNCAIbW9iVsvipGa by shizamura@ciberlandia.pt
2025-02-08T12:15:00Z
0 likes, 0 repeats
@foone it's got a lot to think about. Non-existing sectors, very philosophical
(DIR) Post #AquNFGRn7D9Hp1UsF6 by w4tsn@darmstadt.social
2025-02-08T12:15:32Z
0 likes, 0 repeats
@foone successful software projects are just a bunch of off by one errors that cancel each other out. The trick is to add more until the tests pass āļø
(DIR) Post #AquNsXuM89pfGkaZKS by dryak@mstdn.science
2025-02-08T12:22:44Z
0 likes, 0 repeats
@foone but did the original game ship on weirdly formatted disks? Or did they merely punch a whole in the physical media?
(DIR) Post #AquOwd297DQgHKk8mG by foone@digipres.club
2025-02-08T12:34:50Z
0 likes, 0 repeats
@dryak I'm not sure yet!
(DIR) Post #AquP6sAbh2VG7SaMcq by plinth@infosec.exchange
2025-02-08T12:36:29Z
0 likes, 0 repeats
@foone on a clear disk you can seek forever.
(DIR) Post #AquPFDdtk87r21GYYi by foone@digipres.club
2025-02-08T12:38:14Z
0 likes, 0 repeats
I wrote a simple test program to try reading the 3 affected sectors, and... they're all successfully read on my disk. I think I have YET ANOTHER off-by-one error, like I'm reformatting the wrong track.
(DIR) Post #AquPILubSCl9Y0ZdWy by foone@digipres.club
2025-02-08T12:38:51Z
0 likes, 0 repeats
this would be easier to deal with if I didn't have to juggle 2 emulators, one of which has debugging and one of which supports flux-level disks
(DIR) Post #AquPLp3ZYEgQo5QKrQ by foone@digipres.club
2025-02-08T12:39:15Z
0 likes, 0 repeats
I might just have to write a program to check every sector on the disk, to confirm where I'm overwriting
(DIR) Post #AquPxHCNslQKnpP9yC by evraire@mastodon.gamedev.place
2025-02-08T12:46:10Z
0 likes, 0 repeats
@foone Add support for flux-level disks to emulator? š¤
(DIR) Post #AquQZyDOOgfrDfKL6e by foone@digipres.club
2025-02-08T12:53:06Z
0 likes, 0 repeats
said program is now runnign
(DIR) Post #AquQcyVvk41L11QlpA by foone@digipres.club
2025-02-08T12:53:48Z
0 likes, 0 repeats
@evraire that sounds like a lot of work for 5am!
(DIR) Post #AquR4ETCWg0QJx9SCW by foone@digipres.club
2025-02-08T12:58:42Z
0 likes, 0 repeats
BAD sectors start at 0x396? I was aiming for 0x02CA!
(DIR) Post #AquR8In6P1euseOuCu by foone@digipres.club
2025-02-08T12:59:20Z
0 likes, 0 repeats
they go to 0x03a7: that's 17 sectors, like I was trying to write, but presumably they're showing as BAD because I put them in ENTIRELY THE WRONG PLACE
(DIR) Post #AquRIiYZSfsRgeZQFE by foone@digipres.club
2025-02-08T13:01:19Z
0 likes, 0 repeats
I told it to write to track 19h (dec 25)but it's track DEC 19 that I was aiming for.WHOOPS
(DIR) Post #AquRMslxQ9ssWsokvg by baffinsquid@mastodon.me.uk
2025-02-08T13:01:59Z
0 likes, 0 repeats
@foone But Exodus is in the Old Testament, while newer instructions in Mark 16:15 state "Go into all the world and preach the gospel to all creation", which in terms of physical media should be interpreted as "Copy that Floppy"
(DIR) Post #AquRbn4gt5tTCYglPc by foone@digipres.club
2025-02-08T13:04:46Z
0 likes, 0 repeats
@baffinsquid clearly you are learned in the ways of scripture!
(DIR) Post #AquS8E5xxeoaGrkg64 by foone@digipres.club
2025-02-08T13:10:34Z
0 likes, 0 repeats
bingo! it fails to read sector 0x2CA but neighboring sectors are fine. I wonder if it'll pass scandisk? Lemme mark the cluster bad first.
(DIR) Post #AquSPL5HEJguryabpI by foone@digipres.club
2025-02-08T13:13:43Z
0 likes, 0 repeats
nope, crashes scandisk as well. Shame. lets see if I can copy files onto it
(DIR) Post #AquSTGihOibyUbu1Vg by galibert@piaille.fr
2025-02-08T13:14:08Z
0 likes, 0 repeats
@foone Then it's probably easier to find the sector in the format, whichever it is, and switch the bad crc flag or something
(DIR) Post #AquSaNodPkOUWj4UUK by foone@digipres.club
2025-02-08T13:15:00Z
0 likes, 0 repeats
Sector not found writing drive AAbort, Retry, Ignore, Fail?WHAT DO YOU MEAN? IT'S MARKED BAD!
(DIR) Post #AquSaRqCRs1T0jpnU0 by foone@digipres.club
2025-02-08T13:15:09Z
0 likes, 0 repeats
I probably have an off-by-one error in the FAT edits
(DIR) Post #AquSyxOmljFdpshMmW by foone@digipres.club
2025-02-08T13:20:09Z
0 likes, 0 repeats
I (mostly) WINThe game loaded with no "bad disk" complaints. it then froze because of there being some files missing from the disk, but I don't actually have enough space to write them all. I'm not really sure why that is. but that's a separate issue! the important thing is, I bypassed the copy protection without cracking it!
(DIR) Post #AquTCHlMMo6Sl5c3e4 by foone@digipres.club
2025-02-08T13:22:31Z
0 likes, 0 repeats
this article confirms it came on 720kb 3.5" floppies or 1.2mb 5.25" floppies:(there's CD copies on ebay. I ordered one, to see if they're using the same copy protection or if they came up with a different method/cracked it themselves)https://www.tampabay.com/archive/1992/12/19/exploring-scriptures-electronically/
(DIR) Post #AquTJdWZr9E4HICgue by foone@digipres.club
2025-02-08T13:23:52Z
0 likes, 0 repeats
and this warez NFO says it came on 3 720k disks.
(DIR) Post #AquTm3n9mvRBqxVoNk by foone@digipres.club
2025-02-08T13:29:00Z
0 likes, 0 repeats
this internet archive upload is technically mislabeled: it says it's the demo, but it's actually the full game: it's just stuck in demo mode because of the copy protection.https://archive.org/details/BibleBuilderSW1992EverbrightEducational
(DIR) Post #AquTurZYaYyyYtLezI by foone@digipres.club
2025-02-08T13:30:27Z
0 likes, 0 repeats
@antijingoist I've said before I want a WWE-style wrestling game about Jacob/Israel vs. God/an angel.
(DIR) Post #AquUCIS9tsNMqzCW2K by foone@digipres.club
2025-02-08T13:33:46Z
0 likes, 0 repeats
this site says it has some cracks for it. It'd be interesting to see how they work, but I don't have an account for them:https://www.dosgame.at/bible-builder-patch/
(DIR) Post #AquVXHxb1nalMOTlqK by foone@digipres.club
2025-02-08T13:48:43Z
1 likes, 0 repeats
the angel wants me to insert disk #1.man if I had a nickel for every time an angel talked to me about floppy disks...
(DIR) Post #AquWEqoRK89du9y640 by foone@digipres.club
2025-02-08T13:56:36Z
0 likes, 0 repeats
okay the disks need to look like this:DISK1: bb.exebb.icodat1dat2dat4DISK2: dat5DISK3:dat3
(DIR) Post #AquWIhzi3GB9iK4yJM by foone@digipres.club
2025-02-08T13:57:19Z
0 likes, 0 repeats
my version isn't exactly right, I was assuming 1.44mb disks. I need to recreate my tool but with 720kb in mind. Then I can make 3 disk images that'll work
(DIR) Post #AquWLarl0jB0TUjeGe by foone@digipres.club
2025-02-08T13:57:53Z
0 likes, 0 repeats
I also need to put the cracked version up on the internet archive to play, natch
(DIR) Post #AquWRsBjWJIBw64auW by foone@digipres.club
2025-02-08T13:59:01Z
0 likes, 0 repeats
I'm not 100% sure that disk file listing is original, but it seems to work. The game will ask you for different disks as you go around the program, and that seems to match
(DIR) Post #AquWa1pZYMDq9tb2cS by foone@digipres.club
2025-02-08T14:00:25Z
0 likes, 0 repeats
also I don't have a good way to get a stream image out of 86box (because it uses a format I don't have any other tools that support, 86f), so I'm gonna have to run the code on a real PC and then image the resulting disk. Yet another reason to fix my code for 720kb disks
(DIR) Post #AquWd2TjbKrl2Jok2i by suetanvil@freeradical.zone
2025-02-08T14:00:29Z
0 likes, 0 repeats
@foone Yeah, well, restricting access to God's Word is a MUCH BIGGER SIN!
(DIR) Post #AquWkYkrzrShAPQ0Rs by foone@digipres.club
2025-02-08T14:02:18Z
0 likes, 0 repeats
also need to:#1 figure out that FAT error. I'm in the wrong cluster or something.#2 write a wrong-sector instead of a missing-sector. writing only 17 sectors per tracks might accidentally leave behind an un-erased 18th sector from the previous formatting, and that's gonna confuse everything
(DIR) Post #AquWzAxckHzdiKLz72 by MishaVanMollusq@sfba.social
2025-02-08T14:05:01Z
0 likes, 0 repeats
@foone can you build a tower of Babel in it?
(DIR) Post #AquX4EUl23Ta7jGMiG by foone@digipres.club
2025-02-08T14:05:56Z
0 likes, 0 repeats
much to do. unfortunately it's 6am. so it'll have to be done elsewhen.
(DIR) Post #AquXYWUgg3IKdLfpKq by foone@digipres.club
2025-02-08T14:11:25Z
0 likes, 0 repeats
@MishaVanMollusq more importantly, can the tower of babel run doom?
(DIR) Post #AquYqh9HtwrGqUtQcy by MishaVanMollusq@sfba.social
2025-02-08T14:25:52Z
0 likes, 0 repeats
@foone ouch!
(DIR) Post #AqueBqr7VQ54nsIprk by MishaVanMollusq@sfba.social
2025-02-08T15:25:41Z
0 likes, 0 repeats
@foone probably better than a Mentat could. My Kabbalah teacher had a thing for Nimrod and his Tower and implied it had tech greater than we have now.It was also sustained by retrocausal fields and when it fell those inside who survived the crash were transformed into apes.
(DIR) Post #AqupVpRRZX9Bhm1Nqq by RueNahcMohr@infosec.exchange
2025-02-08T17:32:31Z
0 likes, 0 repeats
@foone I'd be curious to see what fsck.msdos would do with it.
(DIR) Post #Aquv0qQQSs8LVH9c9I by gewt@san-junipero.gimme-sympathy.org
2025-02-08T18:34:07Z
0 likes, 0 repeats
@foone this ordering sounds like something iād do
(DIR) Post #AqvCvOh7wBKpE2WBVo by astrid@tiny.tilde.website
2025-02-08T21:54:47Z
0 likes, 0 repeats
@foone function preludes only want one thing and its disgusting
(DIR) Post #AqvDN7T3a2TnuC9ijo by pyromuffin@mastodon.gamedev.place
2025-02-08T21:59:45Z
0 likes, 0 repeats
@foone this one is negotiable.
(DIR) Post #AqvDw9FKxW4NYcRQu0 by Neybulot@pawb.fun
2025-02-08T22:06:11Z
0 likes, 0 repeats
@foone Holy crap, Bible Builder. I repressed this game from my childhood.
(DIR) Post #AqvQJrpwXPFXxjdlDc by foone@digipres.club
2025-02-09T00:25:02Z
0 likes, 0 repeats
@RueNahcMohr nothing, I think. This is lower level than filesystem
(DIR) Post #AqvofUPEjOaQZ1zXc0 by foone@digipres.club
2025-02-09T04:57:36Z
0 likes, 0 repeats
@skysailor I ask myself, what would Jesus do?Give away stuff to thousands of people, clearly.
(DIR) Post #AqvvhQV6vAqki6bsC8 by foone@digipres.club
2025-02-09T06:16:25Z
0 likes, 0 repeats
@skysailor my fserve contains:* fish.fud* loaves.fudno ratio required
(DIR) Post #AqvyRMNcm3AV9w8fI0 by foone@digipres.club
2025-02-09T06:47:21Z
0 likes, 0 repeats
I'm doing a little research into copies of this game online, and so far I've found three distinct versions:1. a 1996-dated version2. a 1996-dated version with a savegame from 2021 because someone checked it worked and accidentally put the savegame in the zip/rar they distributed3. the same 1996 version, but with a 2009 date on the accidental save game.
(DIR) Post #AqvyXowXUQlnU3YCFE by foone@digipres.club
2025-02-09T06:48:27Z
0 likes, 1 repeats
I need to build me a tool to make this sort of research more automatic. I wanna give it a dozen copies of the game and have it tell me how many variants I have and what files are different, what dates are different, etc.
(DIR) Post #AqvyabvSLRhHynNH4i by foone@digipres.club
2025-02-09T06:48:39Z
0 likes, 0 repeats
then I just run it on EVERY GAME I CAN FIND
(DIR) Post #AqvymPgtewzbVcBz0a by foone@digipres.club
2025-02-09T06:51:10Z
1 likes, 0 repeats
why would I hack one game when I could hack EVERY GAME ?mwahahaha
(DIR) Post #AqvyqwxxsubvrvL57o by foone@digipres.club
2025-02-09T06:51:51Z
0 likes, 0 repeats
@rudi exactly!
(DIR) Post #AqvyxgOdtAiyVQ1m6K by hirvox@mastodon.online
2025-02-09T06:53:08Z
0 likes, 0 repeats
@foone Have you tried Diffware? https://github.com/airbus-seclab/diffware
(DIR) Post #AqvzDy8FiRjq947wmG by tekhedd@byteheaven.net
2025-02-09T06:55:58Z
0 likes, 0 repeats
@foone look maybe if I just train AI on your social media posts it can.. no wait that way lies madness
(DIR) Post #AqvzqKkm3hWBJARHyC by vxo@digipres.club
2025-02-09T07:03:04Z
0 likes, 0 repeats
@foone
(DIR) Post #AqwTQfSxBf02POrH6G by foone@digipres.club
2025-02-09T12:34:32Z
0 likes, 0 repeats
the game is running at 640x350 resolution, an EGA format.POP QUIZ: why did they split the opening image into two separate chunks in the data file?
(DIR) Post #AqwTu8TUPe02m8A05Q by UpLateGeek@bitbang.social
2025-02-09T12:39:49Z
0 likes, 0 repeats
@foone itās not even stealing, itās copyright infringement. Two completely different things.
(DIR) Post #AqwU2EeVKP5eFfAswy by foone@digipres.club
2025-02-09T12:41:21Z
0 likes, 0 repeats
@UpLateGeek Coming Soon! the new 21st century bible from Church⢠that includes "THOU SHALT NOT INFRINGE COPYRIGHT" as a commandment!
(DIR) Post #AqwUUpp6ik3bdylt8C by jernej__s@infosec.exchange
2025-02-09T12:46:27Z
0 likes, 0 repeats
@foone 64k segment limit? Is EGA 640x350 mode also planar like VGA?
(DIR) Post #AqwUiFnRSr5JxkOJ2u by foone@digipres.club
2025-02-09T12:48:54Z
0 likes, 0 repeats
@jernej__s it's planar, but that's not directly why they're doing it. It's because they don't want to have chunks that decompress to more than 64kb, because then they'd have to span segments
(DIR) Post #AqwUrN3bq2jL5VIhBg by foone@digipres.club
2025-02-09T12:50:38Z
0 likes, 0 repeats
eww, this file format doesn't store the width, it stores the stride.So it's (320,200) for an EGA 640x200 image, since it's 4 bits per pixel.
(DIR) Post #AqwagSVfpC8uXRbiWe by foone@digipres.club
2025-02-09T13:55:47Z
0 likes, 0 repeats
it checks each DAT file it opens to see if it starts with MZ.I guess it can accidentally open EXE files or something?
(DIR) Post #AqwddPPrAeIlw97jlI by foone@digipres.club
2025-02-09T14:28:55Z
0 likes, 0 repeats
SOME PROGRAMMERS NEED TO BE STOPPED alloc16((((DAT_1000_c79a + 0xfU >> 1 | (uint)((DAT_1000_c79c & 1) != 0) << 0xf) >> 1 | (uint)((DAT_1000_c79c >> 1 & 1) != 0) << 0xf) >> 1 | (uint)((DAT_1000_c79c >> 2 & 1) != 0) << 0xf) >> 1 | (uint)((DAT_1000_c79c >> 3 & 1) != 0) << 0xf);
(DIR) Post #AqwdvezlzC3HT3ctGa by dotoscat@mastodon.xyz
2025-02-09T14:32:12Z
0 likes, 0 repeats
@foone š³
(DIR) Post #AqweSqF9BfaDuPdiJU by foone@digipres.club
2025-02-09T14:38:12Z
0 likes, 0 repeats
code that indicates you're on 16-bit segmented x86 or you're about to break your PC:*(uint *)0x0 = uVar2;
(DIR) Post #Aqwee058woktbmHUnI by foone@digipres.club
2025-02-09T14:40:12Z
1 likes, 0 repeats
a fun part of naming functions that you don't understand yet is that it makes it look like the program was written by a really terrible programmer with a special weakness for function naming.calculate_some_things()
(DIR) Post #AqwehSSxs8xuVd4XdQ by foone@digipres.club
2025-02-09T14:40:19Z
0 likes, 0 repeats
COULD YOU BE MORE SPECIFIC PLZ
(DIR) Post #AqwfS3ZaF5qwulO7Xs by foone@digipres.club
2025-02-09T14:49:16Z
0 likes, 0 repeats
I found the decompression routine and I hate it. it's big and complicated and there's calls to subfunctions.reimplementing this will be a nightmare
(DIR) Post #AqwfVpoDMIaxNu26q0 by silvermoon82@wandering.shop
2025-02-09T14:49:27Z
0 likes, 0 repeats
@foone I can't help seeing it as: ```*(uint *)uwu = uVar3;```
(DIR) Post #AqwgtLBYy227JOj6h6 by foone@digipres.club
2025-02-09T15:05:20Z
0 likes, 0 repeats
step 1:fill a table of 256 words with 0xFFFF<dasharezone>OH SHIT IS THAT A MOTHERFUCKING HUFFMAN TABLE?</dasharezone>
(DIR) Post #AqwhCRSVrp6UGplMUi by foone@digipres.club
2025-02-09T15:08:51Z
0 likes, 0 repeats
calculate_some_things CHANGES DS? THE FUCK?
(DIR) Post #AqwhKcOp4gP0WCw4dE by foone@digipres.club
2025-02-09T15:10:21Z
0 likes, 0 repeats
segmented x86 is great, because in this code:MOV AX, [1234]CALL 0823:0000MOV AX, [1234] You can't be sure that AX is set to the same thing, even if the function at 0823:0000 doesn't touch the memory at 1234. It might be a DIFFERENT 1234, because 0823:0000 changed the value of DS
(DIR) Post #Aqwhf0EaAPG2ETrk9o by foone@digipres.club
2025-02-09T15:14:02Z
0 likes, 0 repeats
that tells me that someone wrote this in assembly because compilers do not do this. frankly, humans shouldn't do it either, but unfortunately nothing stops them
(DIR) Post #Aqwhtl5gkgovbrk3pQ by foone@digipres.club
2025-02-09T15:16:44Z
0 likes, 0 repeats
void allocate_36800_bytes(void)reasonable functions that imply good things about how your program is designed
(DIR) Post #Aqwi3Ks55esdBfwa5Q by foone@digipres.club
2025-02-09T15:18:28Z
0 likes, 0 repeats
I know programmers who use return values and parameters and they're all cowards
(DIR) Post #AqwiGc3uUEM2Ggo9Hk by foone@digipres.club
2025-02-09T15:20:08Z
0 likes, 0 repeats
this program is either doing something sneaky and clever (overwriting its own code dynamically) or it's doing something stupid (calling a function with no body)I pray (no pun intended) that it's the latter
(DIR) Post #AqwiKNTqduXyCbjeYy by sudo200@layer8.space
2025-02-09T15:21:04Z
0 likes, 0 repeats
@foone Sounds just like what the company my boss consults would write, everything they do is an absolute dumpster fire.Allocate 100kB structs on the stack for the entire lifetime of the firmware? Check.
(DIR) Post #AqwiPLT7Y8yPPXlQBs by foone@digipres.club
2025-02-09T15:22:24Z
0 likes, 0 repeats
I would say it's the result of a badly written debug macro, ie there's a function that only prints #IFDEF DEBUG, instead of a function that's only called if DEBUG is defined. except it takes no parameters, so that'd only work if it's a debug function that examples globals and prints about them.which is possible, this program is global-heavy
(DIR) Post #AqwiVw2gTzqaZzXaGe by foone@digipres.club
2025-02-09T15:23:35Z
0 likes, 0 repeats
I typo'd that as "global-heaven" which I guess is also technically true, in more way than one. Heaven is a big part of this game.
(DIR) Post #AqwiZBYBHTTLXsp4lc by wolf480pl@mstdn.io
2025-02-09T15:23:33Z
0 likes, 0 repeats
@foone looks like a reverse-engineered name :P
(DIR) Post #AqwicQL0l1MuHFCte4 by foone@digipres.club
2025-02-09T15:23:53Z
0 likes, 0 repeats
@wolf480pl it is! and a very accurate one that describes what it does
(DIR) Post #Aqwjcw8ccoVerFDjSS by grant_h@mastodon.social
2025-02-09T15:35:59Z
0 likes, 0 repeats
@foone thank you for the anti-pattern for my HS CS class tomorrow.
(DIR) Post #AqwjgjOhw60eVBYOem by trucy@girlcock.club
2025-02-09T15:28:51Z
0 likes, 0 repeats
@foone using functions is a sign of weakness, put all code in main()
(DIR) Post #AqwjgkZNZu8k8ZYQvg by foone@digipres.club
2025-02-09T15:36:08Z
0 likes, 0 repeats
@trucy main? C wimps!REAL programmers put everything in _entry
(DIR) Post #AqwkOd62iyRbhXkvTM by babble_endanger@freeradical.zone
2025-02-09T15:44:32Z
0 likes, 0 repeats
@foone Ah good thing I didn't suggest "Decompression sounds like an ideal case for TDD š " earlier huh
(DIR) Post #AqwkX1UptFFdh1M4JM by foone@digipres.club
2025-02-09T15:46:10Z
0 likes, 0 repeats
@ilmari this is all internal though, there shouldn't really be any ABI
(DIR) Post #AqwkzPF5CGPZRpWL6e by foone@digipres.club
2025-02-09T15:51:19Z
1 likes, 0 repeats
char * strlen(void)I AM GOING TO TRY TO EXPLODE YOU WITH YOUR MIND
(DIR) Post #Aqwl5K33Q9r34niPoG by foone@digipres.club
2025-02-09T15:52:21Z
0 likes, 0 repeats
call it twice in a row! that makes even more sense!
(DIR) Post #Aqwl8BteBY5ufAgPrM by foone@digipres.club
2025-02-09T15:52:53Z
1 likes, 0 repeats
sometimes the length of a string takes some time to settle, so to avoid race conditions you should always call strlen twice and check that the results match
(DIR) Post #AqwlBrqKgYutcuszLc by agowa338@chaos.social
2025-02-09T15:53:06Z
0 likes, 0 repeats
@foone As in they do rop-chaining or as in they don't?
(DIR) Post #AqwlFWYRmGUOlBGPU8 by dryak@mstdn.science
2025-02-09T15:53:34Z
0 likes, 0 repeats
@foone they could also achieve that with 4 chunks, one per plane. Given the memory architecture of EGA and (early, non Super-) VGA, it would be guaranteed to never exceed 64k.
(DIR) Post #AqwlZVmSMgt69QLaq0 by foone@digipres.club
2025-02-09T15:57:45Z
0 likes, 0 repeats
@SRAZKVT wow
(DIR) Post #AqwlkqzXqK4F7asTL6 by foone@digipres.club
2025-02-09T15:59:46Z
0 likes, 0 repeats
@pndc @ilmari yeah, MSVC 5.0 (from 1988) isn't the best optimizer
(DIR) Post #AqwlpLoBD1klr8hprM by usagi@moe.onl
2025-02-09T15:58:11.251Z
0 likes, 0 repeats
@foone@digipres.club You pray for ghost functions? ā:neocat_flop:ā
(DIR) Post #AqwlpMV4dY440Am5ia by foone@digipres.club
2025-02-09T16:00:04Z
0 likes, 0 repeats
@usagi I pray for anything that lets me avoid having to reverse engineer self-modifying code
(DIR) Post #AqwlwIaFb3hhskVIUC by babble_endanger@freeradical.zone
2025-02-09T16:01:45Z
0 likes, 0 repeats
@foone Just in case
(DIR) Post #AqwmdqPHidE1Ec8fFQ by sudo200@layer8.space
2025-02-09T16:05:25Z
0 likes, 0 repeats
@puppygirlhornypost2 @foone @4censord checking whether we are in a singularity... no
(DIR) Post #Aqwmdr9MxI5XXXhT4y by foone@digipres.club
2025-02-09T16:09:48Z
0 likes, 0 repeats
@sudo200 @puppygirlhornypost2 @4censord post singularity autotools might be a fun writing exercise. like just a list of weird sci-fi stuff as some code tries to determine if it can run in that universe.checking for magnetic monopoles... nochecking whether dark matter is massive compact halo objects... nochecking if P==NP.... no
(DIR) Post #Aqwn44gBHCsh1sY7KS by burnoutqueen@todon.nl
2025-02-09T16:14:33Z
0 likes, 0 repeats
@foone @sudo200 @puppygirlhornypost2 @4censord checking the sign of the cosmological constant...
(DIR) Post #AqwoLaTYPa6IWMYe6S by foone@digipres.club
2025-02-09T16:28:54Z
0 likes, 0 repeats
CLIMOV SP ,word ptr CS :[DAT_1000_c780 ]STIALRIGHT, FUCK YOU. I'M GOING TO BED
(DIR) Post #AqwoP2E1hCppSAwGbw by foone@digipres.club
2025-02-09T16:29:22Z
0 likes, 0 repeats
changing THE STACK POINTER? in a function called multiple times in the decompress?WHAT THE FUCK ARE YOU DOING?
(DIR) Post #AqwoY31G73loWSGSoq by codinghorror@infosec.exchange
2025-02-09T16:31:08Z
0 likes, 0 repeats
@foone I love to watch you work š
(DIR) Post #Aqwpd8Im03z8J9Rg24 by ColesStreetPothole@weatherishappening.network
2025-02-09T16:43:15Z
0 likes, 0 repeats
@foone I know zero about coding, but this is exciting.
(DIR) Post #AqwqwV4Lfx66NMUtTE by BRicker@fosstodon.org
2025-02-09T16:57:51Z
0 likes, 0 repeats
@foone Ouch this brings back memories of 386 DOS/WIN TSR coding 35+- years ago.If Some_Things requires a whole separate data segment to Calculate s.t.s, well sure.Would even be _plausibly_ reasonable to have separate DataSegments for loading/setup and play? In which case calculate_some_things() might both populate DataSegment2 and return with DS=DataSegment2 , and it's the key phase transition?(#include LookMeMadeThis.meme ?)
(DIR) Post #AqwrCtspBXA9y7vYCe by BRicker@fosstodon.org
2025-02-09T17:00:58Z
0 likes, 0 repeats
@foone Huff-ing the ManTable was quite popular back when memory was even more precious than clock-cylcles! So yeah, you are the singular person most likely to uncover them w/o the library used. #DigitalArchaeology
(DIR) Post #AqwrHfadkqUl5RhCxE by JacGoudsmit@techhub.social
2025-02-09T17:01:49Z
0 likes, 0 repeats
@foone something something setjmp longjump
(DIR) Post #AqwuUheBiVXr5uGHho by duckyfella@cupoftea.social
2025-02-09T17:37:40Z
0 likes, 0 repeats
@foone Call thrice, to establish quorum :D
(DIR) Post #AqwuzhOMiQuJHPdmsq by MegaMichelle@a2mi.social
2025-02-09T17:43:21Z
0 likes, 0 repeats
@foone One time I was curious: Is the New International Version of the Bible copyrighted? I couldn't find a free electronic version of it.I found a Christian chat room on IRC (I think this was the early 2000s) and asked them. They told me to just pirate it.So, the moral of the story is, yes, just pirate Christian stuff, it's totally okay by them.I guess it's a time-honored tradition going back to selling pieces of the True Cross and other holy relics.
(DIR) Post #AqwwY2SoyeWWQufBaa by llewelly@sauropods.win
2025-02-09T18:00:35Z
0 likes, 0 repeats
@foone this sounds like a job for cladistics!
(DIR) Post #AqwyNpC5ew68I25wUS by olsner@social.vivaldi.net
2025-02-09T18:21:17Z
0 likes, 0 repeats
@foone how wasteful with those sti/cli, even if they didnāt use only one instruction x86 automatically prevents interrupts for one instruction after changing stackā¦
(DIR) Post #Aqx3awTSP2FQP7IBKy by RueNahcMohr@infosec.exchange
2025-02-09T19:19:35Z
0 likes, 0 repeats
@foone pulling arguments?
(DIR) Post #Aqx3tB2H0BWWmKGwUK by RueNahcMohr@infosec.exchange
2025-02-09T19:22:26Z
0 likes, 0 repeats
@foone The length of a string is 4
(DIR) Post #Aqx66RkqLvfWIuZhRY by RueNahcMohr@infosec.exchange
2025-02-09T19:47:53Z
0 likes, 0 repeats
@foone I have a directory navigating CRC generator written in perl. you point it at a directory and it makes a CRC.txt with all the paths and files from that dir. do you want?
(DIR) Post #AqxYicH4UCKoeRddE8 by hotsoup@infosec.exchange
2025-02-10T01:08:24Z
0 likes, 0 repeats
@foone that Angel kinda looks like duke nukem if he was happy
(DIR) Post #AqxmUjPYYN3Y5dsdwu by foone@digipres.club
2025-02-10T03:42:40Z
0 likes, 0 repeats
@becomethewaifu yeah, stack probing would make sense, but this is MS C 5 from 1988, so I don't think it does stack probing
(DIR) Post #AqxmXvEP3xmbcOBX3Q by foone@digipres.club
2025-02-10T03:43:31Z
0 likes, 0 repeats
I had the bad idea of using 16bit protected mode to help me extract the decompress function, but there's a lot of reasons why that is probably a very bad idea
(DIR) Post #AqxoIgdNFjKVuUjBdg by foone@digipres.club
2025-02-10T04:03:06Z
0 likes, 0 repeats
I kinda want to yank the function out of the EXE into a separate tool and just call it remotely, but it's so globals-based that I'm worried it'd break writing some address I'm not emulating. So being able to have the pages not loaded and watching for page faults would be useful! unfortunately, 16bit real mode
(DIR) Post #AqxoN1EAd20KwE0MCW by foone@digipres.club
2025-02-10T04:03:59Z
0 likes, 0 repeats
maybe I should modify the emulator to give me Fake Protection. I need to write my own x86 emulator.again. sigh.
(DIR) Post #AqxoWyRdpUOHCg3KMK by foone@digipres.club
2025-02-10T04:05:40Z
1 likes, 0 repeats
11 years ago!?https://github.com/foone/DecompVM
(DIR) Post #AqxohAKOVG7IxDWSo4 by foone@digipres.club
2025-02-10T04:07:36Z
0 likes, 0 repeats
it supports 20 entire instructions! (assuming you count Jcc as one, if not it's 25)is that the same 25 instructions this code uses? NO!
(DIR) Post #Aqxojlunj3u06knJPE by foone@digipres.club
2025-02-10T04:07:49Z
1 likes, 0 repeats
also FUCK I wrote a 32bit x86 emulator! I need a 16bit emulator!
(DIR) Post #Aqxp2xOhG9IbDmvTZw by foone@digipres.club
2025-02-10T04:11:33Z
1 likes, 0 repeats
yes that's right, this isn't the first time I've gone "writing an x86 emulator would be easier than understanding this decompression code"I hate decompression code THAT MUCH
(DIR) Post #Aqxp5YCXOWEhwhTXTk by foone@digipres.club
2025-02-10T04:11:53Z
0 likes, 0 repeats
in fairness, x86 is documented. I can look up how it works. I can't do that with this decompression
(DIR) Post #AqxpUEFygW5TKQqtG4 by wilkie@archived.software
2025-02-10T04:16:19Z
0 likes, 0 repeats
@foone are we the same person. I'm thankful to relate to somebody else in this very specific way.
(DIR) Post #Aqxpc7brHZ931tqlkm by foone@digipres.club
2025-02-10T04:17:52Z
0 likes, 0 repeats
@wilkie it's entirely possible!
(DIR) Post #Aqxpi5ijDeUIuLuTpY by foone@digipres.club
2025-02-10T04:18:50Z
0 likes, 0 repeats
@cazabon it's like that quote about how reality is always weirder than fiction, because fiction has to make sense.
(DIR) Post #AqxppS46XYXAEhPzSS by StumpyTheMutt@social.linux.pizza
2025-02-10T04:20:04Z
0 likes, 0 repeats
@foone Many eons ago I wrote a fax Group 4 decompressor in x86 assembler. Several senior people looked over the code and we all worked hard to remove every extraneous clock cycle we could find. It worked great and was really fast, but it would not be easy to figure out without the extensive commentary I added.
(DIR) Post #AqxpzsgkPVHphcSyNU by foone@digipres.club
2025-02-10T04:22:07Z
0 likes, 0 repeats
what I want is a way to iteratively isolate a function.Like I tell it "hey, grab these bytes from this EXE. that's a function with this calling function. now call it, but trap whenever it accesses global data I haven't defined or calls other functions"
(DIR) Post #Aqxq2hPmmWhVbgsOjg by foone@digipres.club
2025-02-10T04:22:26Z
0 likes, 0 repeats
then I can go through and add those extra functions until I have a magic Just Run The Function tool
(DIR) Post #Aqxq6I8SiCLWMXUDC4 by foone@digipres.club
2025-02-10T04:22:54Z
0 likes, 0 repeats
I would also like this to be less than the slowest thing possible, but unfortunately my experience with x86-on-python has shown that to be tricky.
(DIR) Post #Aqxq9R4zukRMyGMhMm by foone@digipres.club
2025-02-10T04:23:53Z
0 likes, 0 repeats
@StumpyTheMutt oh god group 4. had to deal with that in a previous life: the problem was that we had millions of group-4 encoded TIFFs, and needed to give them to users as PDFs.so we had a tool that exploited the fact that both PDF and TIFF support group4, so it just swapped the headers. It, uh, mostly worked!
(DIR) Post #AqxqJRo83ww07mFUn2 by foone@digipres.club
2025-02-10T04:25:37Z
0 likes, 0 repeats
@cazabon @cstross Halting State! That's a good series, yeah. and I agree completely, I wouldn't even try to write near-future scifi. I've got a setting with multiple variant timelines in part so I can just set stuff in a world which still has a USSR in 2040 just so I don't have to think about possible futures for this timeline
(DIR) Post #Aqxr0KcMfaSIHIC97A by foone@digipres.club
2025-02-10T04:33:24Z
0 likes, 0 repeats
16bit decompression is way worse than 32bit decompression, btw.there's multiple different DS here and I'm not sure when it's changing. sometimes it's loading stuff from 4 and 8 and that can't be normal, those aren't real addresss
(DIR) Post #AqxrR9m75hNYT6Xugy by foone@digipres.club
2025-02-10T04:38:19Z
0 likes, 0 repeats
okay so, see the "mov ES, [bp+06]"? That's normal code that is getting the arguments to the function, right? which are at +4 and +6 on the original stack pointer. They're accessing through BP because the stack pointer changes when they push those other registers, to preserve them. HOWEVER, look at the DS and SS. SS is 1810, but DS is 2811. The problem is that that instruction should be accessing DS:bp+06, not SS:bp+04. and those are DIFFERNT
(DIR) Post #AqxrjITZTo0CfNWUTo by foone@digipres.club
2025-02-10T04:41:35Z
0 likes, 0 repeats
SS:BP+06 is in linear addresses, 27748hbut DS:BP+04 is 37758hthose are different places. this shouldn't work, unless I'm missing something very badly
(DIR) Post #Aqxs2jxhVn5pPlt4Eq by foone@digipres.club
2025-02-10T04:45:06Z
0 likes, 0 repeats
it IS pulling from the SS register, but I do not know why
(DIR) Post #Aqxs6fPmMMwITDtQEy by gsuberland@chaos.social
2025-02-10T04:45:47Z
0 likes, 0 repeats
@foone I also want this and would have found it useful yesterday.
(DIR) Post #Aqxsa1SBV0H9Dj12fY by lizzy@social.vlhl.dev
2025-02-10T04:44:30.049611Z
0 likes, 0 repeats
@foone I'm confused about the mov es, ... statement i thought you have to put values into a general purpose register first and then move them from there into segment registers
(DIR) Post #Aqxsa29QuCs1NrFa52 by foone@digipres.club
2025-02-10T04:50:53Z
0 likes, 0 repeats
@lizzy nah, there's some special MOV variants that let you do this.
(DIR) Post #AqxseyS85Fe5MSLpho by foone@digipres.club
2025-02-10T04:51:59Z
0 likes, 0 repeats
wikipedia has a great article documenting the ModR/M format used in x86 encoding, including a very handy table explaining how it works (in 16bit mode, too!), but it never mentions segment selectors once.https://en.wikipedia.org/wiki/ModR/M
(DIR) Post #AqxtDSZqaWBIdWPBZ2 by foone@digipres.club
2025-02-10T04:58:12Z
0 likes, 0 repeats
I'm now reading the DOSBox source code to try and figure this out because I have a normal life
(DIR) Post #AqxuHe1M5B7FEzpaa0 by foone@digipres.club
2025-02-10T05:10:09Z
0 likes, 0 repeats
okay it's doing some weird effective-address calculating that means there's an implicit SS: prefix on that address.Ghidra is not showing this to me, which is very very confusing
(DIR) Post #AqxuKr0WFtgoO1yEPA by foone@digipres.club
2025-02-10T05:10:20Z
0 likes, 0 repeats
I can't find the exact details but that's definitely what's happening
(DIR) Post #AqxvCjXIFYTWqszZCK by foone@digipres.club
2025-02-10T05:20:30Z
0 likes, 0 repeats
after it makes that array of 256 0xFFFFs, it makes another array that's the values 0-255. suspicious. definitely doing some kind of huffmanning
(DIR) Post #AqxvL3WPpKN59aY9T6 by vfig@mastodon.gamedev.place
2025-02-10T05:21:59Z
0 likes, 0 repeats
@foone its a long time since i did 16 bit x86, but iirc SP and BP use SS segment by default, unless theres an override prefix.
(DIR) Post #AqxvU70yD59Gao9yTo by TomF@mastodon.gamedev.place
2025-02-10T05:23:35Z
0 likes, 0 repeats
@foone Segment selector overrides is here:https://wiki.osdev.org/X86-64_Instruction_Encoding#Legacy_Prefixes0x36 is the SS segment override, but I'm not seeing it. You can see the 0x2E which is the CS: segment override.
(DIR) Post #Aqxvul02AZzO8IQYNM by foone@digipres.club
2025-02-10T05:28:28Z
0 likes, 0 repeats
the function that sneakily changes DS also changes SI.fun.this is definitely hand written assembly because compilers make more sense than this
(DIR) Post #Aqxw84g4JooUvZRGvw by static@aus.social
2025-02-10T05:30:51Z
0 likes, 0 repeats
@foone Oh the fun days of hand-written assembler. :)
(DIR) Post #AqxwEkYFXsYCXCxsDw by tthbaltazar@chaos.social
2025-02-10T05:31:54Z
0 likes, 0 repeats
@foone the output of compilersI am certain the internals of compilers don't make a lot of sense either
(DIR) Post #AqxwHPqMzc5LBBiAsK by wilkie@archived.software
2025-02-10T05:32:09Z
0 likes, 0 repeats
@foone ghidra for 16-bit work is...... a challenge. it gets constantly confused about segment addressing. Godspeed.
(DIR) Post #AqxwbSYyajjzPC8Kps by vfig@mastodon.gamedev.place
2025-02-10T05:29:27Z
0 likes, 0 repeats
@foone ah here, page 2-13 of https://edge.edx.org/c4x/BITSPilani/EEE231/asset/8086_family_Users_Manual_1_.pdf
(DIR) Post #AqxwbTcYeuCSgaoi3c by foone@digipres.club
2025-02-10T05:36:03Z
0 likes, 0 repeats
@vfig thanks!
(DIR) Post #Aqxwba0stNDwVmFDo8 by vfig@mastodon.gamedev.place
2025-02-10T05:33:11Z
0 likes, 0 repeats
@foone similarly, thers an implicit DS:SI and ES:DI in string instructions like STOSB (as the preceding paragraph in the manual describes)
(DIR) Post #Aqxwf7YocXUXQQnubI by TomF@mastodon.gamedev.place
2025-02-10T05:25:56Z
0 likes, 0 repeats
@foone Wait wait wait I vaguely remember this. Hang on, I will 100% check this, but FROM HAZY MEMORY by default if the base register is BP or SP, then it's assumed to be a stack reference, and thus use SS.Again, lemme check...
(DIR) Post #Aqxwf8y1OJFRmtbYWm by TomF@mastodon.gamedev.place
2025-02-10T05:29:58Z
0 likes, 0 repeats
@foone Yes, I found a StackOverflow answer confirming my memory. Not very compelling I know but:"Memory operands using esp or ebp as the base register default to SS, and so do the implicit accesses for stack instructions like push/pop/call/ret."(odd they reference esp and ebp rather than sp and bp but OK)
(DIR) Post #AqxwfA4RHvyZD5cCAa by foone@digipres.club
2025-02-10T05:36:07Z
0 likes, 0 repeats
@TomF thanks!
(DIR) Post #AqxwfGEaN7eoKIPNom by TomF@mastodon.gamedev.place
2025-02-10T05:33:26Z
0 likes, 0 repeats
@foone Ah, yes, here from the official Intel Instruction manual:
(DIR) Post #Aqy0UbiUYnyVaGZXt2 by galibert@piaille.fr
2025-02-10T06:19:39Z
0 likes, 0 repeats
@foone Cooperative multithreading?
(DIR) Post #Aqy3NF5Sb7v1EdUlma by kaleissin@wandering.shop
2025-02-10T06:51:49Z
0 likes, 0 repeats
@foone the *nostalgia*
(DIR) Post #Aqy63RLLcT5FJmAx6G by foone@digipres.club
2025-02-10T07:22:04Z
0 likes, 0 repeats
@galibert god I WISH I could find a game written by people as mentally twisted as to attempt a multi-threaded cooperative-multitasking DECOMPRESSION ALGORITHM on DOS.
(DIR) Post #Aqy7JFts252EPnQdeK by galibert@piaille.fr
2025-02-10T07:36:02Z
0 likes, 0 repeats
@foone well, you put the file reading and the actual decompression in different threads, switching when out of data... I could see not entirely sane people doing it
(DIR) Post #Aqy8LIdAx0BBPx9sRM by foone@digipres.club
2025-02-10T07:47:42Z
0 likes, 0 repeats
@galibert but the disk IO api is all synchronous! by technical necessity, really... although I guess maybe you could bypass both DOS and the BIOS and write to the controller directly, and use DMA and handle the IRQ yourself...that might pass in the demoscene if you wanted to have smooth animation while loading
(DIR) Post #AqyAwpEIua1R8zXvbU by foone@digipres.club
2025-02-10T08:16:49Z
0 likes, 0 repeats
this is a totally normal thing to think in 2025, guys.
(DIR) Post #AqyBzDXTbLKp4TDbiS by galibert@piaille.fr
2025-02-10T08:28:26Z
0 likes, 0 repeats
@foone that's why it would not be entirely sane in the first place... It makes no sense, but I can see it happening
(DIR) Post #AqyC2FZmU2suG3k6PQ by foone@digipres.club
2025-02-10T08:28:47Z
0 likes, 0 repeats
trying to script the DOSBox-X debugger by making a keyboard probably counts as using my powers for evil.I might still do it though. Someday I'll make a nice clean way to interface with DOSBox from python, but that would require a lot more work than just using a keyboard I made
(DIR) Post #AqyCM90gbc27gYoV1s by n_dimension@infosec.exchange
2025-02-10T08:32:38Z
0 likes, 0 repeats
@foone TSR!It's an old code, but it still checks out.
(DIR) Post #AqyCq08UAF6UqlhMfY by foone@digipres.club
2025-02-10T08:38:02Z
0 likes, 0 repeats
"what if I just smuggled in filenames using floating point variables?"VERY NORMAL THOUGHTS, FOONE
(DIR) Post #AqyDc4MLlQrFqj6W0W by foone@digipres.club
2025-02-10T08:46:43Z
0 likes, 0 repeats
anyone know off the top of their heads how many characters you can reliably store in your standard x87 floating point register?
(DIR) Post #AqyDpVGp1OOF4nvMXY by lunarood@mastodon.gamedev.place
2025-02-10T08:49:09Z
0 likes, 0 repeats
@foone Too many (or too few, depending on your perspective).
(DIR) Post #AqyDwBPfFVSFW7FGng by static@aus.social
2025-02-10T08:50:21Z
0 likes, 0 repeats
@foone Don't the MMX instructions use the floating point registers?
(DIR) Post #AqyEKW9Xn2BIn6JCfw by montyontherun@bitbang.social
2025-02-10T08:54:44Z
0 likes, 0 repeats
@foone we're talking about 80-bit registers, right?
(DIR) Post #AqyENAqRT9wRZddmJE by foone@digipres.club
2025-02-10T08:54:47Z
0 likes, 0 repeats
sadly I'm giving up on the floating point idea. I'm just gonna rewrite the EXE between every iteration. it's a bit easier.
(DIR) Post #AqyEQq46fYkeHkmOci by galibert@piaille.fr
2025-02-10T08:55:21Z
0 likes, 0 repeats
@foone 80 bits iirc. So trivially 10, more if you go funky.
(DIR) Post #AqyFFaCNQ8fHqQqQHw by jbqueru@fosstodon.org
2025-02-10T09:05:00Z
0 likes, 0 repeats
@foone It's easy to store 77 arbitrary bits in extended precision and have valid numbers (i.e. that can be loaded and stored back unmodified by any x87 FPU). 78 is possible with minor constraints, all 80 is unlikely to be possible. For 8-byte characters, you'll have 9 characters, with the caveats that they won't fit as 9 groups of 8 bits, at least of them will be split.
(DIR) Post #AqyI18qWcSVMoxQfVw by foone@digipres.club
2025-02-10T09:36:03Z
0 likes, 0 repeats
I ran into a minor problem because I had to rewrite some code, as I'd written "MOV DS,CS" which won't work: you can only move to segment registers like DS from general purpose registers.So I rewrote it as:MOV AX, CSMOV CS, AX Yeah that second line is a typo. I typed CS instead of DS. CS is where it gets instructions from, so the x86 will not let you write to it, although the encoding allows it. So yeah, that didn't work, it triggered a CPU fault
(DIR) Post #AqyK5OrXDGFfYr3l6O by foone@digipres.club
2025-02-10T09:59:15Z
0 likes, 0 repeats
setting the ORG wrong in your x86 assembly really fucks it up. It was calculating the addresses all wrong!
(DIR) Post #AqyKVHtTkETBTfJTSi by RueNahcMohr@infosec.exchange
2025-02-10T10:03:54Z
0 likes, 0 repeats
@foone I learned C because of floating point. "but it does the floating point for me"
(DIR) Post #AqyKiSzlmTwtflXXCC by Eupeptic@meemu.org
2025-02-10T10:06:09Z
0 likes, 0 repeats
@foone As far as I know, "haunted houses" are still popular? Especially in October.
(DIR) Post #AqyL1r0MjodJdh3z0K by foone@digipres.club
2025-02-10T10:09:47Z
0 likes, 0 repeats
fopen("w","1234568.ext")WHY ISN'T IT WORKING?, I say, while hitting myself in the head
(DIR) Post #AqyL5gdDFRWoco3qxU by overflo@23.social
2025-02-10T10:10:26Z
0 likes, 0 repeats
@foone switch those parameters maybe?
(DIR) Post #AqyLrOsOZ3GTSTukIS by ximo@tkz.one
2025-02-10T10:19:07Z
0 likes, 0 repeats
@foone missing ;
(DIR) Post #AqyLxQqCAnjHHxlGnA by christopherkunz@chaos.social
2025-02-10T10:20:06Z
0 likes, 0 repeats
@foone Ye olde needle-haystack quagmire.
(DIR) Post #AqyMsdEEmvvqDOHXZg by foone@digipres.club
2025-02-10T10:30:37Z
0 likes, 0 repeats
I miss the days when I could write:fwrite(ptr, size, 1, fp); and not worry about what segment ptr is in
(DIR) Post #AqyN3LrXh9uRXZmJ1c by foone@digipres.club
2025-02-10T10:32:34Z
0 likes, 0 repeats
ugh why am I even using fwrite. it's a pain when I'm writing assembly. I'm gonna give up and just call int 21h
(DIR) Post #AqyOI7rS8O98PiLRjs by foone@digipres.club
2025-02-10T10:46:20Z
0 likes, 0 repeats
normal thoughts for a python programmer:"THIS C SHIT IS TOO HIGH LEVEL!"
(DIR) Post #AqyOaSlP9rtUSDGAfQ by foone@digipres.club
2025-02-10T10:49:45Z
0 likes, 0 repeats
I can't tell if I'm 5 bytes off when writing out this file. That's REALLY annoying
(DIR) Post #AqyOi6CMwFVkmoVsrg by foone@digipres.club
2025-02-10T10:51:03Z
0 likes, 0 repeats
fuck it I'm overdumping every chunk by 5 bytes and I'll figure if I need to trim them later
(DIR) Post #AqyQYPZ6HLfJraebia by foone@digipres.club
2025-02-10T11:11:24Z
0 likes, 0 repeats
@lizzy the what?
(DIR) Post #AqyQglMb7JS1momw9A by foone@digipres.club
2025-02-10T11:13:16Z
0 likes, 0 repeats
YES! I extracted and decompressed every chunk in DAT1!
(DIR) Post #AqyQpoyb3OBPb7shlI by foone@digipres.club
2025-02-10T11:14:54Z
0 likes, 0 repeats
so I hacked the game like this:I wrote a little assembly program that basically just goes:unsigned short size=64020;ptr=loadChunk("internal.ext");f=fopen("12345678.ext","wb");fwrite(ptr,size,1,f);fclose(f);exit(0);
(DIR) Post #AqyQv6tdr36yck5NZo by foone@digipres.club
2025-02-10T11:15:52Z
0 likes, 0 repeats
then I compile that and I wrote a tiny python script to inject it into the EXE (by just copying the old EXE and pasting my shit in at an offset), and then I call that EXE once per chunk.well, I call a dosbox-x exe with a conf set to just run it and then exit.
(DIR) Post #AqyR0qoIZkMmTGK8fo by foone@digipres.club
2025-02-10T11:16:47Z
0 likes, 0 repeats
but since I didn't want to deal with writing code to parse the size and filenames and shit from the command line, I just have my script write a new EXE per chunk.It just takes the old EXE, applies patches over where size, "internal.ext", and "12345678.ext" are in the EXE, then it runs that new EXE
(DIR) Post #AqyR4JoPCjCXHr1lBo by foone@digipres.club
2025-02-10T11:17:09Z
0 likes, 0 repeats
(that's why the filenames are a full 8.3 characters, so I can overwrite them with any valid DOS name)
(DIR) Post #AqyRAZIaXOIF3X7pSq by foone@digipres.club
2025-02-10T11:17:59Z
0 likes, 0 repeats
it worked successfully so of course as soon as I try it on DAT2, it starts hanging.
(DIR) Post #AqyRAaA7KN6xjYAZto by foone@digipres.club
2025-02-10T11:18:06Z
0 likes, 0 repeats
TO THE DEBUGGER, BATMAN!
(DIR) Post #AqyRFmE9tffebKXLu4 by foone@digipres.club
2025-02-10T11:18:35Z
0 likes, 0 repeats
@lizzy oh right. I missed that. hah
(DIR) Post #AqyRttapvkXj1rH528 by foone@digipres.club
2025-02-10T11:26:48Z
0 likes, 0 repeats
ahh, I forgot the implicit state.I'm injecting into the game when it first tries to load the title screen, which it does before it loads DAT2,DAT3,DAT5
(DIR) Post #AqyRwpta8Pg8QhRcWG by foone@digipres.club
2025-02-10T11:27:19Z
0 likes, 0 repeats
hopefully I can just patch it to load DAT2 instead. That might break if it needs to use DAT1 resources first... I don't THINK it does? but I'm not sure.
(DIR) Post #AqyS4rGouIZl0h8hF2 by foone@digipres.club
2025-02-10T11:28:51Z
0 likes, 0 repeats
... they put BIB100.MUS in DAT1 and DAT2.MOTHERFUCKER
(DIR) Post #AqyS7ygLo4furlZJKa by foone@digipres.club
2025-02-10T11:29:12Z
0 likes, 0 repeats
I can't just extract them all to the same folder, because there's duplicates. possibly different duplicates!
(DIR) Post #AqySUBlxoiM1pvmjku by foone@digipres.club
2025-02-10T11:33:23Z
0 likes, 0 repeats
I should do this to Carmen when I get back to that project. Then instead of understanding it's compression, I just bypass it completely
(DIR) Post #AqyT5KdPpYv22KUvfU by steely_glint@chaos.social
2025-02-10T11:40:03Z
0 likes, 0 repeats
@foone sorta like a mantisa and an exponent š
(DIR) Post #AqyT8e9lhnbbS2DA3c by foone@digipres.club
2025-02-10T11:40:32Z
0 likes, 0 repeats
yep, changing it to DAT2 breaks it. I can't swap DAT2 into the place of DAT1, because it does indeed need other chunks from it.UGH.maybe I can just add my own call to load_dat_file at the top of my assembly. I do NOT want to have to relocate it, that sounds like it'd be REALLY FUCKING HARD
(DIR) Post #AqyTElRbWU4Fn6TFya by foone@digipres.club
2025-02-10T11:40:49Z
0 likes, 0 repeats
yep, changing it to DAT2 breaks it. I can't swap DAT2 into the place of DAT1, because it does indeed need other chunks from it.UGH.maybe I can just add my own call to load_dat_file at the top of my assembly. I do NOT want to have to relocate it, that sounds like it'd be REALLY FUCKING HARD
(DIR) Post #AqyTIQQ1dYgTjwThWy by foone@digipres.club
2025-02-10T11:41:58Z
0 likes, 0 repeats
my code starts right AFTER the chunk is loaded. I'd have to move it. MOTHERFUCKER
(DIR) Post #AqyTLoT8fvx9CPY9XU by foone@digipres.club
2025-02-10T11:42:59Z
0 likes, 0 repeats
ALRIGHT HERE'S WHAT WE'RE DOING. WE'RE DOING IT LIVE.loadChunk is gonna fail. Fine.We ignore it, then call load_dat_file on the correct dat, then we call loadChunk again! This is stupid, but it means I don't have to move the fucking start position!
(DIR) Post #AqyUDfxkW9PiSGYFJw by foone@digipres.club
2025-02-10T11:52:49Z
0 likes, 0 repeats
IT WORKS! I have DAT2 now! lets see how it breaks when we try DAT3...
(DIR) Post #AqyUiUs9nhQJ2JdGPw by foone@digipres.club
2025-02-10T11:58:22Z
0 likes, 0 repeats
all dats extracted. I need to write some code to convert the ART files, but they're simple and I understand most of them already. but now I have 89 example files to work on.
(DIR) Post #AqyW7GbW5SoXyfDwPY by foone@digipres.club
2025-02-10T12:14:02Z
0 likes, 0 repeats
whoops, I got my lefts and rights backwards. silly little-endian formats.
(DIR) Post #AqyWJoNEMHf2BeWW9o by foone@digipres.club
2025-02-10T12:16:18Z
0 likes, 0 repeats
there are two ART formats: TITLEA.ART is the first one, and TITLEB.ART is the second one. ewww. two halves of one image but they're encoded differently!
(DIR) Post #AqyXJpRQUMeHS73f16 by foone@digipres.club
2025-02-10T12:27:27Z
0 likes, 0 repeats
WHERE'S YOUR HEAD?
(DIR) Post #AqyXNMbFf9dNA0L6Ei by Nine@chitter.xyz
2025-02-10T12:27:52Z
0 likes, 0 repeats
@foone [basement jaxx intensifies]
(DIR) Post #AqyXtu1uuEQi6nKNKS by foone@digipres.club
2025-02-10T12:34:05Z
0 likes, 0 repeats
I think what's happening is that there's some animation supported in this format, and the extra animation bytes in the header are throwing off the parsing of the image (explaining the color and scrolling) and then I don't support the sprites yet (explaining the missing head)
(DIR) Post #AqyYaCS8nfLxPPlLEG by foone@digipres.club
2025-02-10T12:41:45Z
0 likes, 1 repeats
I fixed the scrolling problem, but the palettes are still deeply fuckt.
(DIR) Post #AqyYdrqRMWfaeVsS7U by shizamura@ciberlandia.pt
2025-02-10T12:42:17Z
0 likes, 0 repeats
@foone I wouldn't call this deeply fuckt, more like deeply rad
(DIR) Post #AqyYiln5IacJK8e45w by exec@furry.engineer
2025-02-10T12:43:11Z
0 likes, 0 repeats
@foone This looks like the best rave party ever with a big ass DJ counter
(DIR) Post #AqyYmzSaPztcsR4OWG by lritter@mastodon.gamedev.place
2025-02-10T12:44:01Z
0 likes, 0 repeats
@foone or are they
(DIR) Post #AqyZZx2KDYpNYA8I5Y by furbisms@retro.pizza
2025-02-10T12:52:50Z
0 likes, 0 repeats
@foone tbh this goes so hard though
(DIR) Post #AqyZtJBM6Z4PjfaRlY by th@social.v.st
2025-02-10T12:56:09Z
0 likes, 0 repeats
@foone they're the same picture?
(DIR) Post #AqyaoKYzdrPgWepjtI by foone@digipres.club
2025-02-10T13:06:41Z
0 likes, 0 repeats
okay I think I've got all the non-animated images extracting properly. other than one of jesuses which I can't figure out which palette it uses.
(DIR) Post #Aqyath3HSQuPijYcC0 by foone@digipres.club
2025-02-10T13:07:38Z
0 likes, 0 repeats
sadly this includes SODOMA.ART and SODOMB.ART, which render completely inaccurately.but hopefully I will be able to fix this tomorrow
(DIR) Post #AqybHLwxZ8WDDwsmVk by foone@digipres.club
2025-02-10T13:11:57Z
0 likes, 0 repeats
@th would you happen to be colorblind? :)
(DIR) Post #Aqyc4RcJHigyzOdGwC by foone@digipres.club
2025-02-10T13:20:44Z
0 likes, 0 repeats
@MorningSong that is literally how it renders SODOM. it takes both files and overlays them
(DIR) Post #AqygyiwoR7LSlyJWVs by Starcade@sfba.social
2025-02-10T14:15:38Z
0 likes, 0 repeats
@foone It's giving me a What We Do in the Shadows vibe
(DIR) Post #AqylrGSETUYk98Gy6y by MishaVanMollusq@sfba.social
2025-02-10T15:10:19Z
0 likes, 0 repeats
@foone the Mescaline play variant
(DIR) Post #Aqyrf0OAylxeZPufMO by cks@mastodon.social
2025-02-10T16:15:23Z
0 likes, 0 repeats
@foone From some angles, you could say that a TSR is an inversion or reverse of a keyboard, so it sounds like a perfectly normal Foone 2025 thing.
(DIR) Post #AqysxTHyMuNLMuNeq0 by Computeum@mastodon.bayern
2025-02-10T16:29:53Z
0 likes, 0 repeats
@foone May I insert some really old news? DOS already parses the command line for you, putting up to two file names into prepared FCB. Add a zero byte and you'll fine to use stream calls - or stay with FCB handling.Using a 128 bye loop does no longer make a notable speed difference with today's machines and all their huge blocks and caching...https://archive.org/details/The_MS-DOS_Encyclopedia_Ray_Duncan/page/109/mode/1up?view=theaterAlso, doing it as a com program (tiny memory model) saves the need to copy segment registers or care for them at all. Plain code like on an 8 bit CPU :))
(DIR) Post #AqzT0aQFto1siB2VYe by foone@digipres.club
2025-02-10T23:13:50Z
0 likes, 0 repeats
@Computeum sadly my COM is getting injected into an EXE, so I do have to worry about segment registers. I'm existing inside its memory model.The FCB handling is a good idea, but I was worried any arg handling the game already did would have messed it up. I've seen so many games overwrite the args with their own shit, it's a pain
(DIR) Post #Aqzey4a2W1c6pFBSK0 by Dianora@ottawa.place
2025-02-11T01:27:54Z
0 likes, 0 repeats
@foone It can be buggy as well.. DNS *whistles innocently*
(DIR) Post #AqzjcaoOUxpgBpTVAm by Computeum@mastodon.bayern
2025-02-11T02:20:00Z
0 likes, 0 repeats
@foone True,but args are stored after the FCB prototypes. When DOS starts a program it fills FCB and args before executing. Thus even if the program does somehow changes its args, the FCB prototype should be unaffected. Anyway you got a working solution, so no need to change.
(DIR) Post #Ar06FFAF7DnRKuWtrE by ppxl@social.tchncs.de
2025-02-11T06:33:26Z
0 likes, 0 repeats
@foone now that's a name I haven't heard in a long time.In a loong time.
(DIR) Post #Ar087p9RdFuQXXkK6y by foone@digipres.club
2025-02-11T06:54:36Z
0 likes, 0 repeats
I did some looking into the file format. It's tricky because it doesn't seem to ever declare how many sub-images are in an image, it just determines it by the header length, and the header length is something like n*11+48?+16? and I'm only like 80% sure of those numbers. I need to find the code in the binary for loading this. I've just been staring at the hex. it seemed simple enough, but the multi-image format is more complex than I thought
(DIR) Post #Ar08BfWNNXfRpaIztg by foone@digipres.club
2025-02-11T06:55:06Z
0 likes, 0 repeats
it's definitely multi-image, rather than simply animated. For example, the puzzle pieces at the end of a run are all in one chunk, they're just different images inside it.
(DIR) Post #Ar08yM3MY5IRdqwxJg by foone@digipres.club
2025-02-11T07:04:09Z
1 likes, 0 repeats
time for some late-night reading
(DIR) Post #Ar09DYtN62cPnwWnAG by aardvark@ioc.exchange
2025-02-11T07:06:54Z
0 likes, 0 repeats
@foone Z80 assembler!
(DIR) Post #Ar0cPK177o3joe6pgu by euneuber@graz.social
2025-02-11T12:33:55Z
0 likes, 0 repeats
@foone narrator: and read it at https://archive.org/details/writingtsrsthrou0000kane
(DIR) Post #Ar0r9gTFNClk8NGm5Q by foone@digipres.club
2025-02-11T15:18:26Z
0 likes, 0 repeats
no, angel, I will never give you up
(DIR) Post #Ar0roKvONycfBPopou by retrovg@cwb.social
2025-02-11T15:26:28Z
0 likes, 0 repeats
@foone is this a copy protection screen? It sounds like heresy.
(DIR) Post #Ar0sIXX24r2ayFpKO8 by foone@digipres.club
2025-02-11T15:31:54Z
0 likes, 0 repeats
@retrovg nah, this uses on-disk copy protection.although now I'm amused by the idea of a bible game that makes you enter verses from the bible to prove you're a christian
(DIR) Post #Ar0uQlzsNbDm3iN7Vw by foone@digipres.club
2025-02-11T15:55:50Z
0 likes, 0 repeats
@Uglesett never!
(DIR) Post #Ar0yz7DGPC5vWOGUBU by sapphicselene@sakurajima.moe
2025-02-11T16:46:44Z
0 likes, 0 repeats
@foone @retrovg I get locked from the game for using the NRSV instead of "The KJV that God Himself wrote down" lol
(DIR) Post #Ar0zLKY7V9y1Fpc5Mu by Mondobizarrro@social.xenofem.me
2025-02-11T16:51:15.398150Z
0 likes, 0 repeats
@foone that angel looks like he is about to murder my entire family
(DIR) Post #Ar11CnOl4XEO1vICC8 by foone@digipres.club
2025-02-11T17:11:43Z
0 likes, 0 repeats
@sapphicselene @retrovg This game is actually quite liberal on which translation it uses! It lets you pick between 4 editions:* Revised Standard* King James* New International* The Living Bible
(DIR) Post #Ar11GVqMHZyEk7yU9A by foone@digipres.club
2025-02-11T17:12:09Z
1 likes, 0 repeats
@Mondobizarrro he might, especially if you live in Sodom
(DIR) Post #Ar12cOaE3YPQYDQXa4 by foone@digipres.club
2025-02-11T17:27:37Z
0 likes, 0 repeats
what is the theological use in teaching children to identify hellenistic-era settlements in the Levant?
(DIR) Post #Ar13Fp85IBfuAy45fU by foone@digipres.club
2025-02-11T17:34:40Z
0 likes, 0 repeats
@riley Bible Builder, 1992 bible trivia game for DOS
(DIR) Post #Ar13JUvuK9PMhE7aLI by nil@furry.engineer
2025-02-11T17:35:07Z
0 likes, 0 repeats
@foone i love the lil guy on the candle
(DIR) Post #Ar13N3yMVJgaEpyALo by foone@digipres.club
2025-02-11T17:35:10Z
0 likes, 0 repeats
@riley but yeah, I'm intimately familiar with homeschooling textbooks, I was homeschooled
(DIR) Post #Ar13Qt1l8kDzS0Nj3A by foone@digipres.club
2025-02-11T17:36:11Z
0 likes, 0 repeats
@nil I know, right? I can't wait to extract all their animations.
(DIR) Post #Ar13eVUfR0q2W4OjHk by foone@digipres.club
2025-02-11T17:39:12Z
1 likes, 0 repeats
PROTESTANT SPOTTED (different religious traditions number the 10 commandments differently. The catholic 4th commandment is "Honour thy father and thy mother")
(DIR) Post #Ar14GfEreQ27kDCW8W by Mondobizarrro@social.xenofem.me
2025-02-11T17:46:15.479307Z
0 likes, 0 repeats
@foone oh.
(DIR) Post #Ar14JDF0Cc1ZmOTrHs by foone@digipres.club
2025-02-11T17:46:35Z
0 likes, 0 repeats
@riley fortunately I'm a hacker so I CAN
(DIR) Post #Ar154NJiYdBadlAuae by the_moep@mastodon.de
2025-02-11T17:55:04Z
0 likes, 0 repeats
@fooneThat depends on what kind of protestantism though. The one predominant in Europe (Lutheran) only orders 9 and 10 differently so the two major christian factions have the same fourth commandment.This seems more based on the more American churches (like adventists or anglican) or just plain the Judaic numbering
(DIR) Post #Ar16PJGeuM1e7JI4i8 by nev@bananachips.club
2025-02-11T18:05:59Z
0 likes, 0 repeats
@phooky @foone https://www.tumblr.com/orcboxer/750588377359941632/woke-up-this-morning-with-the-mental-image-of
(DIR) Post #Ar16PKToOw8nsOS5qq by foone@digipres.club
2025-02-11T18:09:47Z
0 likes, 0 repeats
@nev @phooky 90% sure I've reblogged that before, but it's good enough that I immediately reblogged it again
(DIR) Post #Ar16ewxNcwxfYPjNKa by krono@toot.berlin
2025-02-11T18:12:51Z
0 likes, 0 repeats
@foone Funnily, Lutherans also use the catholic numbering
(DIR) Post #Ar19gL6HeBIOaPFXBw by foone@digipres.club
2025-02-11T18:46:47Z
0 likes, 0 repeats
@cinebox the holiest day of the year
(DIR) Post #Ar1RLhxbG248ZwV2qO by 0xabad1dea@infosec.exchange
2025-02-11T22:04:39Z
0 likes, 0 repeats
@foone okay I am pretty good at useless āI was raised in a Christian fundamentalist cultā trivia of this tier and I have absolutely no bloody idea
(DIR) Post #Ar1SpRdOcZcAaQnE2q by foone@digipres.club
2025-02-11T22:21:25Z
1 likes, 0 repeats
oh hello there spooky mario 64 creepypasta, what are YOU doing here in this EGA bible game?
(DIR) Post #Ar4jltYLA0TAi8CWrA by foone@digipres.club
2025-02-13T12:15:20Z
0 likes, 0 repeats
okay I'm back to trying to do the floppy hack correctly (so, on a DD disk) and OH NO I have to figure out where the sector is again.I hate converting between LBA and CHS
(DIR) Post #Ar4k3keJ0G08JCVQLQ by foone@digipres.club
2025-02-13T12:18:34Z
0 likes, 0 repeats
track 44, side B, sector 3
(DIR) Post #Ar4kAdUpzl8y9UMOMy by lritter@mastodon.gamedev.place
2025-02-13T12:19:32Z
0 likes, 0 repeats
@foone *sound of needle dropping on vinyl*
(DIR) Post #Ar4lC5C4bPeEIVpxIW by foone@digipres.club
2025-02-13T12:30:35Z
0 likes, 0 repeats
@sif yeah! I think it's actually a partial EGA update: I think this game tracks changed pixels in order to do fewer screen updates
(DIR) Post #Ar4lFqsfl9AT46YlXs by foone@digipres.club
2025-02-13T12:31:51Z
0 likes, 0 repeats
nope fucked up again
(DIR) Post #Ar4lPvAIgY2RFTbeee by foone@digipres.club
2025-02-13T12:33:47Z
0 likes, 0 repeats
mov CX, 1300h ; TRACK 44HEY FOONE, IS 44 IN HEX "13"?
(DIR) Post #Ar4lb4Hd7lTuiJLlVw by foone@digipres.club
2025-02-13T12:35:44Z
0 likes, 0 repeats
@apicultor I do have a four-sided laserdisc player! It's sadly broken.
(DIR) Post #Ar4lmKiiLvsysROFdY by silvermoon82@wandering.shop
2025-02-13T12:37:26Z
0 likes, 0 repeats
@foone Track 44 sounds like it's trying to reach out to read the stack of floppies beside you in the bench.
(DIR) Post #Ar4lpykHznQlslrhT6 by foone@digipres.club
2025-02-13T12:38:25Z
0 likes, 0 repeats
BTW "BAD" is technically incorrect. Those sectors are not bad, in the sense we usually mean it: a spot on the disk that can no longer correctly store data, and reading from it will give checksum mismatches. No, those sectors are just not there. The drive controller is on the track, reading for those sectors numbers, and it finds nothing that matches.
(DIR) Post #Ar4lzMjMBoV0sPuAoi by foone@digipres.club
2025-02-13T12:40:04Z
0 likes, 0 repeats
I'd love to show you what the low-level track looks like but I can't load .86f files the HxE tools. Once I do this on a real machine I'll have an image, though
(DIR) Post #Ar4mOdUJ1WXm5VumPY by foone@digipres.club
2025-02-13T12:44:48Z
0 likes, 0 repeats
FAILED AGAIN.somehow sectors 321h, 323h, and 329h are bad. the fuck?
(DIR) Post #Ar4mhcTH1m4SR9U4i8 by foone@digipres.club
2025-02-13T12:48:06Z
0 likes, 0 repeats
"Note: This function does not set the INT 1E vector to point at the returned parameter table; it is the caller's responsibility to do so "whaaaat
(DIR) Post #Ar4nAMLQ46caopVxs8 by foone@digipres.club
2025-02-13T12:53:13Z
0 likes, 0 repeats
so the notes for int 13h/AH=05h say to call int13h/AH=17h first, to set up int 1Ebut the notes for Int 13h/AH=17h say not to use it, because it doesn't support 1.44mb drives, so use int 13h,AH=18h instead. but int13h, AH=18h doesn't set up INT 1E, which is THE ONLY REASON I'M CALLING IT
(DIR) Post #Ar4nUmiDjx5yO9v3B2 by foone@digipres.club
2025-02-13T12:57:05Z
0 likes, 0 repeats
fortunately DOS has a simple syscall I can use to set the vector. And surely the int 13h,AH=18 returns the new vector in the same registers as the dos set-interrupt syscall, right?RIGHT?
(DIR) Post #Ar4nYTuXaK1BEgRcfo by foone@digipres.club
2025-02-13T12:57:42Z
0 likes, 0 repeats
NOPE! int13h, AH=18 returns it in ES:DI and int 21h,AH=25h takes it in DS:DI
(DIR) Post #Ar4nkxBGaPhTUPDOYy by simonzerafa@infosec.exchange
2025-02-13T12:59:46Z
0 likes, 0 repeats
@foone No. Probably so you don't clobber the new vector I guessing.
(DIR) Post #Ar4qMZxFaXn8MqjCTo by foone@digipres.club
2025-02-13T13:29:11Z
0 likes, 0 repeats
okay I think the problem may be slightly weirder: norton disk edit told me the wrong format for this drive.it's not 8 sectors a track, it's 9.
(DIR) Post #Ar4qsxIwJGfI3JJMQa by foone@digipres.club
2025-02-13T13:34:47Z
0 likes, 0 repeats
@riley yup! it's not using that, I checked.
(DIR) Post #Ar4qw4fzMGmNmgZzeK by foone@digipres.club
2025-02-13T13:35:04Z
0 likes, 0 repeats
@riley the disk I'm talking about is a fresh disk image I created.
(DIR) Post #Ar4r9FVGPmeD80qSrQ by foone@digipres.club
2025-02-13T13:38:02Z
0 likes, 0 repeats
the one annoying thing about doing this in an accurate emulator is that it's accurately emulating how slow the floppy drive is
(DIR) Post #Ar4s7Sz7Q5c0JcWWAK by Beckydog@hydaelyn.coerthansnowstorm.online
2025-02-13T13:48:48Z
0 likes, 0 repeats
@foone itās doing the best itās allowed to! Have you forgotten from whence we came? Madam, you have been spoiled, remember thy roots. The volume balancing of cassette tapes. 2 hr+ load times, PLEASE TURN OVER TAPE!
(DIR) Post #Ar4sz8xQ65gzq5K9Ym by foone@digipres.club
2025-02-13T13:58:22Z
0 likes, 0 repeats
so my current format seems to work, but it leads to the whole track being bad, apparently.sectors 02C7h through 02CF are bad.
(DIR) Post #Ar4t3u2F0Nph0SqfWy by foone@digipres.club
2025-02-13T13:58:40Z
0 likes, 0 repeats
I think that means I'm formatting the right track, but with the wrong sectors.
(DIR) Post #Ar4t3yJP6VwEGquQq0 by foone@digipres.club
2025-02-13T13:58:53Z
0 likes, 0 repeats
BOY IT WOULD BE NICE IF I COULD OPEN THIS IN A FLUX VISUALIZER
(DIR) Post #Ar4tE2d9u0VgYox1GK by foone@digipres.club
2025-02-13T14:01:19Z
0 likes, 0 repeats
save me foxflux:https://dbalsom.github.io/fluxfox/index.htmlHEY WHO STOLE MY WHOLE TRACK? WHERE ARE THE SECTORS?
(DIR) Post #Ar4tzPv786zEP0wKVU by foone@digipres.club
2025-02-13T14:09:50Z
0 likes, 0 repeats
FUCK! I clobbered ES! my code assumed ES never got modified, but when I had to do all the set-interrupt stuff I had to clobber it myself
(DIR) Post #Ar4u303HFXQPKcSz3I by foone@digipres.club
2025-02-13T14:10:12Z
0 likes, 0 repeats
I'm trying to format the disk with some RANDOM MEMORY as the sector numbers! no wonder it doesn't fucking work
(DIR) Post #Ar4uCSplbkP3CheyzQ by foone@digipres.club
2025-02-13T14:12:13Z
0 likes, 0 repeats
I'm amazed I didn't notice that in the debugger!OH WAIT I DON'T HAVE A DEBUGGER
(DIR) Post #Ar4ukCDpsP5jWs0EJE by foone@digipres.club
2025-02-13T14:18:18Z
0 likes, 0 repeats
There we go.Track 39, side B, and the sector numbers go 1,2,3,255,5,6,7,8,9. No sector 4, so it'll fail to be found. Which is what I want.
(DIR) Post #Ar4v8MjATAEv3qBP7Y by philpem@digipres.club
2025-02-13T14:22:31Z
0 likes, 0 repeats
@foone What software are you using for this? I don't think I've seen this one before - unless it's Applesauce, which I don't use very often.
(DIR) Post #Ar4vHXkwpmkls8OMOO by foone@digipres.club
2025-02-13T14:24:15Z
0 likes, 0 repeats
@philpem FluxFox!https://github.com/dbalsom/fluxfoxI'm using the web interface:https://dbalsom.github.io/fluxfox/index.html
(DIR) Post #Ar4vNftFVPBOpvCM5Y by foone@digipres.club
2025-02-13T14:25:22Z
0 likes, 0 repeats
And tested in DOS. It passes the copy protection!
(DIR) Post #Ar4vogou9jxnXV32Mi by foone@digipres.club
2025-02-13T14:30:19Z
0 likes, 0 repeats
okay, so I've patched out the copy protection, easy.I've created the hacked disk, as 1.44mb, then created it again as the correct 720kb.BUT IT TURNS OUT THERE'S ONE MOREThat "DAT4" file? It's actually supposed to be to let you install this game to a hard drive, and it works by building signature of what your computer looks like (or as well as it can in DOS), and comparing it to a file.
(DIR) Post #Ar4vsNt4UQMdyjl69Y by foone@digipres.club
2025-02-13T14:30:22Z
0 likes, 0 repeats
It naturally encrypts the file. But it does it badly, so I can probably bypass it without too much trouble
(DIR) Post #Ar4vvqKnBFh34gNG4W by foone@digipres.club
2025-02-13T14:31:07Z
1 likes, 0 repeats
this explains why all the copies online are incorrectly cracked: They zipped up their installation, which worked fine... on their machine. as soon as you run it on a different machine, it fails
(DIR) Post #Ar4w6TnzHdc4O46NZQ by philpem@digipres.club
2025-02-13T14:33:33Z
0 likes, 0 repeats
@foone OH DAAAAMN. This is wicked cool.
(DIR) Post #Ar4wTEtQtPMOnYV9SC by foone@digipres.club
2025-02-13T14:37:30Z
0 likes, 0 repeats
@gloriouscow @philpem oh hi! Thanks, it's been very handy, as it's the only thing I've found that can visualize these .86f files.
(DIR) Post #Ar4wa0WEjYMWFEsYbo by foone@digipres.club
2025-02-13T14:38:46Z
0 likes, 0 repeats
if you install this game and then update your BIOS it will fail copy protection.if you install it and then upgrade to a VGA card, it'll fail.
(DIR) Post #Ar4wrfjClwMiyYMsLY by foone@digipres.club
2025-02-13T14:42:05Z
0 likes, 0 repeats
add more ram? another floppy drive? failed
(DIR) Post #Ar4x1uQ10ZJzQvH160 by silvermoon82@wandering.shop
2025-02-13T14:43:39Z
0 likes, 0 repeats
@foone No debugger?What are you doing up there, Blinken?
(DIR) Post #Ar4x5Sz2x83zVHM6F6 by foone@digipres.club
2025-02-13T14:44:13Z
0 likes, 0 repeats
@gloriouscow @philpem oh, cool.
(DIR) Post #Ar4x8rDVJKPFWvjbvs by foone@digipres.club
2025-02-13T14:44:30Z
0 likes, 0 repeats
I'm surprised this game didn't come with a dongle
(DIR) Post #Ar4xMJGAMK5GGhOVs0 by foone@digipres.club
2025-02-13T14:47:40Z
0 likes, 0 repeats
this game might seriously have some anti-cracking features that I just narrowly avoided?why is this game so protected?now I gotta try to trigger the anti-cracking
(DIR) Post #Ar4xhLaStv8RZGv8YC by foone@digipres.club
2025-02-13T14:51:26Z
0 likes, 0 repeats
nah, it's not an anti-crack routine, it's just more PC-fingerprinting.nice try but all your nonsense boils down to one 16bit number and I can just copy out the correct result to stuff in the file
(DIR) Post #Ar4yKtgc3SzKcOefYW by foone@digipres.club
2025-02-13T14:58:26Z
0 likes, 0 repeats
@gloriouscow Bible Builder. Scroll way up and I'll talk about how it works.Sadly I don't have any disk images, I couldn't find any. I'm having to reconstruct how it looked
(DIR) Post #Ar4yOoL3sZ8TBvROCW by foone@digipres.club
2025-02-13T14:59:11Z
0 likes, 0 repeats
DAT4 is 760 bytes, and how many are actually used?15. It only actually looks at 15 bytes of the fucking file
(DIR) Post #Ar4yhEwngfsavfseZc by foone@digipres.club
2025-02-13T15:02:32Z
0 likes, 0 repeats
@gloriouscow I've got one set as well, and I've got a copy of the CD version arriving tomorrow. I'll image the floppy if it shows up, of course
(DIR) Post #Ar4yzw3y7hGrrX9F9k by nabijaczleweli@101010.pl
2025-02-13T15:05:52Z
0 likes, 0 repeats
@foone is the rest of the file random uninitialised buffer contents, in time-honoured unix tradition?
(DIR) Post #Ar4zAhqxINm8ycCHc8 by foone@digipres.club
2025-02-13T15:07:55Z
0 likes, 0 repeats
@nabijaczleweli YUP!
(DIR) Post #Ar4zFKVxUmVi2ba4ES by foone@digipres.club
2025-02-13T15:08:22Z
0 likes, 0 repeats
okay now I have a fake DAT4 that works.next step, make a utility to make my own DAT4 for any PC configuration.
(DIR) Post #Ar4zJJoc2LC91zCx6G by foone@digipres.club
2025-02-13T15:08:47Z
0 likes, 0 repeats
then I don't have to touch the EXE to crack it: I just write out the correct DAT4 signature, so the game thinks it's okay.
(DIR) Post #Ar4zTYSaRVslLYmpQe by foone@digipres.club
2025-02-13T15:11:21Z
0 likes, 0 repeats
step1: grab the 11 bytes starting at FFFF:0005, and XOR them with 57h. Write out 11 bytesstep 2: call Get Equipment List (int 11), and OR the result with C1CD. Write out 2 bytes.step 3: a miracle happens, write out the result as 2 bytes.
(DIR) Post #Ar4zc6THsDML9DBs6S by foone@digipres.club
2025-02-13T15:12:54Z
0 likes, 0 repeats
the step 3 is FUN_1000_c43a, a function that does a lot of weird math on some local data and segment registers and such. I don't understand it and I'm not sure I want to. I think I might just cheat and yoink it out of the EXE
(DIR) Post #Ar50UzuZxqC2jJ8Db6 by foone@digipres.club
2025-02-13T15:22:46Z
0 likes, 0 repeats
hah! one of the things that changes the signature is if single step is set. So if you try to walk through the program with a traditional debugger, you'll change the signature just by debugging it
(DIR) Post #Ar51DXmbOOwcWOdqcq by foone@digipres.club
2025-02-13T15:30:43Z
0 likes, 0 repeats
yeah this thing is trying to fingerprint what processor you have in the age before CPUID.and it's doing it by abusing the cpu flags, to try and figure out what CPU you're using.
(DIR) Post #Ar52QBWJZlnDC4cBlY by foone@digipres.club
2025-02-13T15:44:10Z
0 likes, 0 repeats
okay it returns a value in AH, AL.AL will be 00 for 8086/80186AL will be 02 for 286AL will be 03 for 386AL will be 04 for 486+AH is if you have an FPU. It'll be equal to AL, unless AL is 00, then it'll be 01.
(DIR) Post #Ar52TWHwogIQTSU8bw by foone@digipres.club
2025-02-13T15:44:41Z
0 likes, 0 repeats
so, for example, a 486DX will be a 0404, a 386 with no FPU will be 0003
(DIR) Post #Ar52qrCJF8ZHyzyZDU by mathi_gwithyas@ohai.social
2025-02-13T15:49:04Z
0 likes, 0 repeats
@foone Is it bad / showing my age that I remember the use of those registers and that mechanism for IDing CPUs?
(DIR) Post #Ar563qsk1lwIdBi9ey by foone@digipres.club
2025-02-13T16:24:56Z
0 likes, 0 repeats
they definitely got this code from elsewhere, because it's partially pointless:whether or not there's an FPU in the system is ALREADY determined by the equipment list!
(DIR) Post #Ar56NpU6vrQg5aiTmi by nabijaczleweli@101010.pl
2025-02-13T16:28:41Z
0 likes, 0 repeats
@foone stackoverflow programming like its 1992
(DIR) Post #Ar57bhSfevJPDKDkcS by foone@digipres.club
2025-02-13T16:42:14Z
0 likes, 0 repeats
I think I found the source.It's based on official Intel code:INTEL RECOMMENDED CPU / MCP IDENTIFICATION CODEI found an ancient copy here: http://ftp.lanet.lv/ftp/mirror/x2ftp/msdos/programming/hardware/cpuid3.zip
(DIR) Post #Ar57uCC08kVNjmF8Nc by foone@digipres.club
2025-02-13T16:45:40Z
0 likes, 0 repeats
Found it through this code by R. Collins who fixed it to detect some systems more reliably:https://www.rcollins.org/ddj/Sep96/Sep96.html
(DIR) Post #Ar58QWMEhbQxXqRbYe by foone@digipres.club
2025-02-13T16:51:35Z
0 likes, 0 repeats
"The infinity of the coprocessor must be checked to determine the correct coprocessor id."deep!
(DIR) Post #Ar58qystGO0tY2Kq92 by hittitezombie@mastodon.me.uk
2025-02-13T16:56:20Z
0 likes, 0 repeats
@foone depends on what Friend @Computer thinks.
(DIR) Post #Ar59hTTEn0YdT4MoZE by fnord@fosstodon.org
2025-02-13T17:05:48Z
0 likes, 0 repeats
@foone you're a sorceress! In command of ancient relics and lore forgotten by those wrote it...
(DIR) Post #Ar5B27cdJgfFk2AfbM by BRicker@fosstodon.org
2025-02-13T17:20:44Z
0 likes, 0 repeats
@foone Dr Dobbs !
(DIR) Post #Ar5DW4FccAjHsjoZPc by foone@digipres.club
2025-02-13T17:48:37Z
0 likes, 0 repeats
this code can handle the situation where you have a 386 but with a 80287 FPU installed instead of the 80387 FPU. That's impressive!
(DIR) Post #Ar5FbMRqaLTXfxBWMq by kw217@mathstodon.xyz
2025-02-13T18:11:51Z
0 likes, 0 repeats
@foone feature detection ftw!
(DIR) Post #Ar5I3inPI3Mx0Dv7PE by MegaMichelle@a2mi.social
2025-02-13T18:39:27Z
0 likes, 0 repeats
@foone What is even happening in that picture??
(DIR) Post #Ar5IFC18z9oyoiod1s by MegaMichelle@a2mi.social
2025-02-13T18:41:35Z
0 likes, 0 repeats
@foone Worst copy protection ever.
(DIR) Post #Ar5JnjLdfZOhzRR0Ou by foone@digipres.club
2025-02-13T18:58:51Z
0 likes, 0 repeats
OKAY buildsig is working. I just need to write up some docs. I might leave that until tomorrow, but I'm uploading the new version now.
(DIR) Post #Ar5KUw3WIXidr2Yrb6 by foone@digipres.club
2025-02-13T19:06:48Z
0 likes, 0 repeats
And done. For the first time in the nearly TWELVE YEARS this game has been uploaded on the archive, it works properly now:https://archive.org/details/bible-builder
(DIR) Post #Ar5S41ituyQhFKb4KW by 1000millimeter@chaos.social
2025-02-13T20:31:30Z
0 likes, 0 repeats
@foone Was that a thing in reality?
(DIR) Post #Ar5SWngnAulS7PKZiy by womble@infosec.exchange
2025-02-13T20:36:46Z
0 likes, 0 repeats
@foone they decided to go active on enforcing that whole "thou shalt not steal" schtick.
(DIR) Post #Ar8P7Z3Kjslh631rhQ by foone@digipres.club
2025-02-15T06:42:42Z
0 likes, 0 repeats
ok, the CD version came in.The game calls itself Version 1.02! (The earlier floppy edition had no version number displayed)They just took out the copy protection. Boring.
(DIR) Post #Ar8PAt98UJoMHhKPLM by foone@digipres.club
2025-02-15T06:43:06Z
0 likes, 0 repeats
the only other change I've noticed is that they slightly rearranged the credits.
(DIR) Post #Ar8PUG3fWi3EqX0V3w by foone@digipres.club
2025-02-15T06:46:55Z
0 likes, 0 repeats
they may also have tweaked some command line argument parsing? I'm not sure, I haven't looked into that part of the floppy edition
(DIR) Post #ArC3JAJz5wmrVcmesC by foone@digipres.club
2025-02-17T00:57:14Z
0 likes, 0 repeats
I tested my funky-format on a real system now! It worked fine. You can see it here: This track (39, on side B) has the normal 9 sectors, but one of them has entirely the wrong sector number, it's 255 instead of 4. So when we make the DOS call to try and read sectors 0x2CA, it'll fail to find it, because that sector should be in this track, but isn't.
(DIR) Post #ArC3UDcn9ZqWwJqqn2 by foone@digipres.club
2025-02-17T00:59:17Z
0 likes, 0 repeats
I used a nine-track formatting with one clearly-wrong sector instead of just telling it to format only 8 sectors, because I wanted to make sure I was overwriting all previous sectors. This was easier (for Reasons) than hacking a flux stream to just have no sector there.
(DIR) Post #ArC3zFk5KWt4U63qHA by foone@digipres.club
2025-02-17T01:04:43Z
0 likes, 0 repeats
@gloriouscow good idea! I'm not exactly sure HOW though. DOS can't find it.I guess I could always do it at the flux-stream level, but that's not easy
(DIR) Post #ArC4FkqrQz9jbM6CMi by foone@digipres.club
2025-02-17T01:07:40Z
0 likes, 0 repeats
@gloriouscow good point, I can just bypass DOS and program the controller myself
(DIR) Post #ArC7hGZBvUoHe3e0ie by foone@digipres.club
2025-02-17T01:46:26Z
0 likes, 0 repeats
I emailed the developer to see if he can answer some questions about how/why it worked, and to ask if he can get me an original floppy disk (image?)
(DIR) Post #ArE0BCEQCJLvZRbt0y by stilescrisis@mastodon.gamedev.place
2025-02-17T23:31:38Z
0 likes, 0 repeats
@foone So all your reverse engineering was for naught? Aw :(
(DIR) Post #ArZjEbFpdrifnS0cQy by cvwillegen@mastodon.nl
2025-02-28T11:05:18Z
0 likes, 0 repeats
@fooneFLDPIFLD0FDIVFDUPFNEGFCMPI still have that code in my head. Since 1988, I think...