Commit Graph
46 Commits
Author SHA1 Message Date
Ryan C. Gordon b6c47ee91d Implemented enough of the Presentation Manager API to draw a blank window. 2018-01-15 02:33:27 -05:00
Ryan C. Gordon 40b9b9e141 Filled in enough of tcpip32 and doscalls to run OS/2's TCPIP/bin/FTP.EXE.
It crashes right after a completed download, but otherwise seems to
fully work!
2018-01-04 02:50:26 -05:00
Ryan C. Gordon c2e43984c2 Fixed calling of KbdCharIn.
It was just seven kinds of wrong before. Now it's gone from a stub to
barely-usable.  :)
2018-01-04 00:27:59 -05:00
Ryan C. Gordon 185a983b3c DosFlatToSel() needs to save off registers.
It's not syscall calling convention, and CSet/2 generates thunks that call
this function but expect %ecx to not be altered by it. Save off a bunch,
just in case.
2018-01-04 00:26:52 -05:00
Ryan C. Gordon b302f0ff38 Fixes for LDT manipulation.
- Let allocateSelector() specify number of pages to allocate.
- Let findSelector() specify if this is a code or data segment.
- Let findSelector() choose if this is a code or data segment
  if the caller doesn't know (DosFlatToSel(), etc).
2018-01-04 00:20:16 -05:00
Ryan C. Gordon 44565f529b Move the 16-bit bridge heavy-lifting to the 32-bit code segment.
Now we save off the stack pointer and immediately jmp back to 32-bit. This is
slightly easier to debug (gdb doesn't get confused by addresses, registers or
disassembly), and puts all the 32-bit registers in a 32-bit code segment, to
keep things sane.

Also: doesn't write duplicate instructions to update %ds and %es if they are
the same values in Linux land.
2018-01-04 00:15:31 -05:00
Ryan C. Gordon b72ccd6e5a Implemented just enough of tcpip32.dll and dependencies to run FINGER.EXE.
Finger (etc) also rely on MPTN\DLL\tnls32.dll, which I pulled out a copy of
OS/2 Warp 4.52, which loads and limps along enough to not be a problem.
Reimplementing that library is going to be a pain, so that's a job for another
day. Inexplicably, tnls32 references pmgpi.dll's GpiQueryTextBox(), so I put a
stub for that in, too, but we're nowhere near really implementing GPI yet.

This is enough to run "finger.exe icculus@icculus.org" and see my .plan file,
which I consider a victory. A few more TCP/IP command line tools aren't far
behind.
2017-12-21 17:53:05 -05:00
Ryan C. Gordon fabd3be3e6 Some minor build fixes. 2017-12-21 17:44:50 -05:00
Ryan C. Gordon 3864bc9d61 DosAllocMem() promises that allocated memory will be zeroed out, apparently.
Fixes lots of stuff.  :)
2017-12-21 17:44:12 -05:00
Ryan C. Gordon 20d2bfa3ff Split out OS2EXPORT from OS2API.
Otherwise, "SomeObj * OS2API FunctionName()" won't work.
2017-12-20 18:31:48 -05:00
Ryan C. Gordon 93448975c2 Whoops, DosCloseMutexSem() needs to free memory we previously allocated. 2017-09-15 10:49:26 -04:00
Ryan C. Gordon ceb7900db7 Implemented DosCloseMutexSem().
This gets PhysicsFS's test_physfs.exe to run (although it's still broken in
other ways).
2017-09-14 23:51:04 -04:00
Ryan C. Gordon 4e6452445e More work on getting Java to run. Still not there. 2016-11-01 21:38:48 -04:00
Ryan C. Gordon 2ee12b66a3 16-bit bridging code now protects %es register.
Fixes crash with Info-Zip's unzip.exe blowing up calling into ncurses
via VioGetMode().
2016-11-01 21:37:57 -04:00
Ryan C. Gordon 9251abfe4f Filled in stubs for QUECALLS library. 2016-10-29 23:53:47 -04:00
Ryan C. Gordon c4d2d5ee15 Some initial VIOCALLS support via ncurses, other 16-bit updates. 2016-10-29 02:05:01 -04:00
Ryan C. Gordon d26519332f Deal more correctly with process termination politics.
Now shared libraries run their termination entry points and deallocate,
the DosExitList functions can run, we free our stack selectors, etc.
2016-10-28 02:32:05 -04:00
Ryan C. Gordon 2481f59a28 Bunch of work on getting java.exe to start up. Not there yet.
Lots of fixes, improvements, and a few more APIs implemented.
2016-10-27 03:20:02 -04:00
Ryan C. Gordon 411c204ccb Just enough to get wasm.exe to not crash prompting for the Any key.
This lets the program survive if you run it without command line arguments.
2016-10-27 03:17:23 -04:00
Ryan C. Gordon 26a52988a6 16-bit support!
This gets us everything we need (I hope!) to support 16-bit code in LX
binaries and call into 16-bit OS/2 APIs. This is just enough to call
into VioGetMode() (which isn't otherwise implemented yet) as an example.

If this is ever used Winelib-style to provide an OS/2 API to native Linux
binaries, the 16-bit system APIs are 32-bit clean and C callable, as one
might expect them to be. All the tapdancing is to support existing LX
binaries in the loader and bridge between the 32-bit clean APIs and
existing 16-bit code that expects to call 16-bit APIs.

This was a staggering amount of effort, but yay!

Other fixes and improvements probably leaked into this commit, as a
lot of code got touched and a lot of research and debugging took place.
2016-10-27 01:44:26 -04:00
Ryan C. Gordon 29696db8b3 Implemented Thread Local Storage support.
This is still rough, but the basic idea seems to work!
2016-10-19 03:21:15 -04:00
Ryan C. Gordon aa322a5409 Forgot to add DosSleep() to the DOSCALLS export table. 2016-10-19 01:54:55 -04:00
Ryan C. Gordon 60e62a1306 Moved the path conversion code to lx_loader.c, and use it.
Fixes loading "emx.dll" when the loader asked for "EMX.dll", etc.
2016-10-17 21:10:29 -04:00
Ryan C. Gordon cbffb2ff60 Initialize the PIB at startup.
Otherwise, it won't be available to DLL init code when run before the
main executable starts.

Fixes Watcom C's wlink.exe crashing because it gets a NULL command line.
2016-10-17 17:00:32 -04:00
Ryan C. Gordon 7dcce0cbd8 Removed some commented-out incorrect code. 2016-10-17 15:53:11 -04:00
Ryan C. Gordon 47f074837a Whoops, that's not what waitpid() returns. 2016-10-17 15:51:22 -04:00
Ryan C. Gordon 1c1e6de400 Implemented DosQueryAppType(). 2016-10-17 15:44:47 -04:00
Ryan C. Gordon b9a799e22e Fixes to DosQueryCurrentDir().
This API shouldn't return a drive letter or initial path separator,
and also shouldn't leak memory.
2016-10-17 15:44:20 -04:00
Ryan C. Gordon e011e5cec1 Implemented more APIs; a little further into Watcom C's wcc386.exe now... 2016-10-17 10:56:50 -04:00
Ryan C. Gordon dc00a7e998 Implemented more APIs. Watcom C's "wasm.exe" works now. 2016-10-17 02:35:39 -04:00
Ryan C. Gordon b2e32aeb37 Separate TIB from OS/2 stack. 2016-10-16 12:24:38 -04:00
Ryan C. Gordon 544033f2ae Some APIs that Watcom's wasm.exe needs to start up. 2016-10-15 22:08:00 -04:00
Ryan C. Gordon 68aa18c5a1 Consolidate and turn off all the debug logging for now. 2016-10-14 02:51:37 -04:00
Ryan C. Gordon 0349122bd7 Bunch More Work: more APIs, subprocesses, multithreading.
EMX's GCC compiler can now build hello.c when run from lx_loader!
2016-10-14 02:39:17 -04:00
Ryan C. Gordon b4d0e571e7 Implemented some file i/o APIs and stubbed some threading primitives.
Now EMX's build of cpp.exe (GNU's C preprocessor) runs on Linux...granted,
it picks up the Linux /usr/include headers, but this is still a triumph!
2016-10-09 13:45:58 -04:00
Ryan C. Gordon 086e05dd0c DosFlatToSel() is called like any other OS/2 API.
I must have been reading docs for device drivers, or something...?

Now it returns the top word of the linear pointer, in hopes that this will
just get mushed back together later, knock on wood.
2016-10-09 13:44:10 -04:00
Ryan C. Gordon ccad3a0dbb Hooked up the FS register and TIB support. 2016-10-08 16:34:59 -04:00
Ryan C. Gordon 262b428f51 Implemented DosGetDateTime() and DosOpen(). 2016-10-06 15:56:20 -04:00
Ryan C. Gordon fae99dc048 Turn off some debug output. I'm sure I'll regret this soon. :) 2016-10-05 15:45:23 -04:00
Ryan C. Gordon 88ca89f160 Implemented some HFILE-related code better. tests/helloc.exe now works! 2016-10-05 15:44:29 -04:00
Ryan C. Gordon 71653286cd Implemented some more APIs.
This is enough to survive emx.dll intialization and a printf("hello world")
mainline, but note that we need to properly implement DosQueryHType()
before EMX's printf() will work, though (as it currently thinks stdout isn't
open), so we're not quite through a proper C Hello World test yet.
2016-10-02 18:26:27 -04:00
Ryan C. Gordon 8a6c7fef87 Initialize the DosExitList() items' function pointers. 2016-10-02 18:23:28 -04:00
Ryan C. Gordon f681be1b1f Reworked the native module loading code. 2016-10-02 18:18:31 -04:00
Ryan C. Gordon bee2afe62b Bunch More Work, mostly cleanup and organization.
Wanted to do this now before it gets out of hand.

Ideally, this can be used for a Winelib-like option eventually, too, where you
don't load OS/2 binaries at all but rather compile and link your OS/2-based
source code against this API reimplementation.
2016-09-30 15:58:48 -04:00
Ryan C. Gordon 6220544d06 Bunch More Work on getting an EMX-based "hello world" to run.
It looks like most of the remaining work for that is filling in dozens of
OS/2 APIs that EMX uses at startup just so we can get to our single
printf() call.  :)
2016-09-30 10:36:33 -04:00
Ryan C. Gordon 443bcf2178 Huge reworking to get shared libraries (and native replacements) working.
Not there yet, but the framework is pretty close to what I want.
2016-09-21 03:38:20 -04:00