Octocontrabass wrote:kerravon wrote:Any reason to not just make this NE?
There's no point in copying a MS-DOS API if your programs aren't going to work in MS-DOS.
Ok - I wasn't expecting that!
PDOS was designed to be a 32-bit version of MSDOS. You can't run any of those 32-bit executables directly on an 8086 at all.
It was always unclear to me what "32-bit MSDOS" actually was.
But regardless of the answer to that, I produced an 8086 version regardless, more as a demo than anything else.
And that "demo" demonstrated that the OS itself (without trickery) occupied a large amount of the 640k that it was impractical to run other apps like SubC.
I need something like 2 MiB of memory.
And I can get that on an 80286.
So my "demo" can actually be "more than a demo" if I port the 32-bit version - incompatible with anything - although it does now run Win32 software - to the 80286. So a 16-bit version with room to actually do things.
And in recent days I have spent a lot of effort working on 16-bit OS/2.
And although PDOS-generic has its own API, I am expecting to be able to run limited OS/2 programs. Same limitation as with Win32 - mainly programs that use msvcrt.dll - and only a subset of that.
There doesn't appear to be an OS/2 1.x equivalent of msvcrt.dll - and indeed, even msvcrt.dll is undocumented and meant to be for internal use.
So there's no barrier to simply creating my own CRT as a DLL. And then it would be those programs that I run. (or else proper pdos-generic programs).
And without the C library, I will have more space in the lower 640k too.
So I may end up being able to even support the 8086 after all - enough to at least run SubC.
Either way - my OS/2 1.x or pdos-generic apps only execute 8086 instructions.
So they will nominally work on an 8086.
Neither the PDOS-generic nor the OS/2 1.x API (ie a DLL to replace msvcrt.dll) will be the MSDOS API anyway.
I could support INT 21H as well though. I do that on PDOS/386 already (a 32-bit version).
That way MSDOS assembler code would still be able to work. And no reason why I can't support MZ executables either - even though they (mine, anyway) only run on the 8086, not the 80286. Although even then - if the memory model is such that the MZ executable neither crosses a 64k boundary or uses huge pointers that require fixups - I can run them on PDOS/286 too.
So yeah - I don't see a reason to attempt to kludge MZ as the 80286 dos extenders do. I'll just support a clean subset of MZ plus a subset of OS/2 1.x I think. Plus pdos-generic.
Actually, the INT 21H calls may be difficult to implement. That's why I am nominally abandoning PDOS/386 and switching to PDOS-generic for the long term.
So MZ and INT 21H become irrelevant and it becomes OS/2 1.x and PDOS-generic as NE - even on the 8086. My OS/2 1.x executables are currently only dependent on a small number of functions in doscalls.dll.