I've been bedridden for the last 6 months, unable to work as I try to get a surgeon and insurance lined up for my operation to let me work again.
If you could send a couple dollars, it'd really help. Time isn't on my side here, and waiting is very expensive.
Notices by Foone🏳️⚧️ (foone@digipres.club)
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Saturday, 10-May-2025 06:45:06 JST Foone🏳️⚧️
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 09-May-2025 01:38:37 JST Foone🏳️⚧️
Game ruined
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 09-May-2025 01:38:30 JST Foone🏳️⚧️
Ugh. The Blue Prince has computer terminals that are clearly designed to be an Apple III but the floppy disks you find are 5.25" double sided disks.
The Apple III uses a single sided floppy drive!
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 08-May-2025 08:52:11 JST Foone🏳️⚧️
disappointingly, the word for "floppy disk" in greek is δισκέτα, which is basically "diskette".
I was really hoping it was just δίσκος, so the greeks would be calling them floppy discuses.
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 08-May-2025 08:51:28 JST Foone🏳️⚧️
people often ask me; "Foone, you're an amateur physical media historian, when is it spelled disc, and when is it disk?"
Well it's simple!
Discs grow down from the ceiling, and disks grow up from the floor. -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 08-May-2025 08:51:14 JST Foone🏳️⚧️
@ned good news
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:57 JST Foone🏳️⚧️
So I'm working on implementing support for GameLink, which is an underdocumented protocol for talking to DOSBox, to let you grab frames and memory and submit input and such.
So I'm gonna write out some of how it works just so I'll (hopefully) understand it
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:56 JST Foone🏳️⚧️
The top level struct is sSharedMemoryMap_R4.
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:56 JST Foone🏳️⚧️
Code to refer to is here:
https://github.com/joncampbell123/dosbox-x/tree/master/src/gamelink
So it's a shared memory region and a mutex. The way it works is you hold the mutex to access the shared memory.
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:55 JST Foone🏳️⚧️
So, the peek interface.
https://github.com/joncampbell123/dosbox-x/blob/921acaa2915db5ea28b2ecba520a15e42e218175/src/gamelink/gamelink.h#L70C1-L77C4It's got addr_count, addr, data. The later two being arrays.
In conversation from digipres.club permalink Attachments
-
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:54 JST Foone🏳️⚧️
dosbox will fill out the data values for the requested addresses.
I'm not sure how you know dosbox has filled them out.
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:54 JST Foone🏳️⚧️
So the way it works is that you set addr_count to how many bytes you want to read, and set the appropriate addresses in addr.
then you release the mutex and waitIn conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:53 JST Foone🏳️⚧️
a dumb-but-should-work way:
set the sSharedMemoryMap_R4.version to some other value. DOSBox-x sets it every frame (and never reads it, so it doesn't care what it is set to)So if you read the value and it's 4, you know DOSBox-X has processed all your peeks. If it's not 4 yet, sleep a bit then lock the mutex and check again
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:52 JST Foone🏳️⚧️
well my first attempt at PEEKing over GameLink seems to be silently segfaulting python
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:52 JST Foone🏳️⚧️
I think (but I'm not 100% certain) that the addresses it wants are 32bit linear addresses. So if you're running at 16-bit DOS program (and who isn't?), you'll need to linearize your address
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:51 JST Foone🏳️⚧️
MapViewOfFile(shm_handle, FILE_MAP_READ, 0, 0, 0)
hey foone maybe if you want write access, you should ask for it
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:50 JST Foone🏳️⚧️
okay that was just a thinko.
but now I'm doing my version trick and it's not working. maybe I missed something
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:50 JST Foone🏳️⚧️
PermissionError: [WinError 5] Access is denied.
WHAT
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:49 JST Foone🏳️⚧️
okay the version trick isn't working (and I'm not sure why), but this process is successfully getting bytes out.
In conversation from digipres.club permalink -
Embed this notice
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 07-May-2025 15:06:48 JST Foone🏳️⚧️
so GFX_EndUpdate calls OUTPUT_GAMELINK_Transfer.
OUTPUT_GAMELINK_Transfer calls GameLink::Out, which should set the values I'm looking at, including version.
In conversation from digipres.club permalink