First post, by SirNickity
It's quirky and weird, so I'm into it. But IBM really tripped over their own 😲 with this thing. I'm trying to get a handle on what can and cannot be done with it, and could use some clarity on things that aren't totally apparent from the research I've been doing.
Hokay! First...
Time-keeping
I can't believe this is something we even have to deal with, but there's no RTC. I know about the 1216 SmartWatch, but wow is that thing a kludge. I would really like to fashion some way of using a good old 1287-style clock, accessible via I/O to 0x70, like God intended. I know the sidecar bus can do this, but it has become a brief obsession to exhaust any internal means first.
1) Can't use the modem slot. The slot is selected on I/O to 1F8-1FF and 3F8-3FF, so we only get A9 and A2:0 to decode. No good.
2) I thought maybe the memory expansion slot could be hijacked. I haven't found a pinout to see what is even on that connector (looking for classic IBM over-documentation ATM), but as I understand it, the Jr uses bank-switching to interleave even and odd access between the onboard memory and the expanded memory. That implies A0 wouldn't be accessible, obscuring 0x70 vs 0x71. MIGHT be able to use a CS line as an A0 stand-in, since we would only be selected if it's asserted (or not -- whichever way it goes) *IF* the majority of other bus signals are there -- IO/MEM, R/W, etc.
What was the other thing I was wondering about.... OH YEAH...
Memory
So, you get 64KB for free, and 128KB with the expansion card installed. Great. Part of that (32KB) is consumed on account of video RAM. This is where I get confused. I've heard tell that video memory is relocatable?
E.g.: https://www.atarimagazines.com/compute/issue5 … cjr_memory.html
Does this work only with BIOS calls, or direct access as well? Are programs using the CGA memory space at 0xB8000 and the Jr is handling the trickery? If so, what's actually doing that substitution?
Moar memory
Next... anything >128KB needs "a device driver" for DOS to know about it. I've heard this is because of the video memory "hole" (although, that article suggests it can be placed in a reserved memory region down low, so ... what hole?) I've also heard it's because DOS is getting a report of top-of-memory from the BIOS, and that says 128K. But the BIOS can see and count memory up to 640K. Wut? Esplain, please!
What is this "driver" doing? Is it just patching the address of TOM? Windowing, ala Expanded Memory?
If there's some real black-magic going on, is it even necessary to use the 64K expansion, or can you use the base 64K and add a sidecar with 512K, and not have to do any of that crazy stuff like allocating RAM drives to intentionally consume the bottom 128K? (I still don't entirely understand what that's supposed to fix, other than ensuring the slow multiplexed memory is unavailable to applications.)