Commit Graph
100 Commits
Author SHA1 Message Date
Ryan C. Gordon 6604f3c169 Added DosWaitThread() to LX export table. 2018-02-26 09:57:31 -05:00
Ryan C. Gordon b6795ed5f6 Add in some stub libraries.
These don't do anything but exist and export no symbols for now, but if you
have something that links against, say, SOM.DLL, you can at least start it
up and have it fail when it calls into that library instead of failing to
start at all.
2018-02-24 16:50:05 -05:00
Ryan C. Gordon cec77df5d6 Implemented DosSetFileSize().
Info-ZIP's unzip for OS/2 can now unpack .zip files!  :)
2018-01-20 02:03:35 -05:00
Ryan C. Gordon efbc04419f Commented out some debug printf()s. 2018-01-20 02:02:31 -05:00
Ryan C. Gordon 4be33b8ae0 Free process modules in correct (?) order during termination.
Fixes crash when ending FTP.EXE, where real TNLS32.DLL suddenly doesn't have
access to unloaded-too-soon doscalls module.
2018-01-19 21:41:10 -05:00
Ryan C. Gordon 84e1191db9 Don't close Unix's stdio handles when unloading doscalls library. 2018-01-19 19:12:40 -05:00
Ryan C. Gordon 644d0558bd Minor tweaks. 2018-01-19 19:12:16 -05:00
Ryan C. Gordon 2e7657aa19 DosLoadModule("x.dll") wants to find X.DLL in the libpath, like a module name.
(I think.)
2018-01-19 19:11:46 -05:00
Ryan C. Gordon 612773c635 Fixed DosExit() to work with thread termination. 2018-01-19 01:36:43 -05:00
Ryan C. Gordon c523c36f5e Moved doscalls export tables to bottom of sources, like everyone else. 2018-01-19 00:56:40 -05:00
Ryan C. Gordon 33870fc221 DosCreateThread should reserve some stack for 2ine's use.
Fixes crash in FTP.EXE's background thread.
2018-01-18 21:58:52 -05:00
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 aa06257218 Minor cleanup. 2018-01-04 00:25:04 -05:00
Ryan C. Gordon 21fcb16ae1 Fixup code that explicitly references Code Segment 0x5B.
This is the ring-3 32-bit linear address space's code segment, and it is
hardcoded on OS/2. Generally it isn't explicitly referenced, but things
like CSet/2 would generate thunks that hardcode jmps to it when returning
to 32-bit mode, so you have to patch those out (Linux also hardcodes a
code segment number, but doesn't promise the value won't change, and indeed,
it's different between x86, x86-64, and x86-on-x86-64 apps).
2018-01-04 00:24:53 -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 137ba61ecb Generate missing-function-called trampolines for 16-bit APIs.
Much better than crashing out in arbitrary 16-bit application code!
2016-10-27 11:19:24 -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 970cbbc0c2 Fixed lookups into the non-resident name table.
It uses a different base offset than the resident one.
2016-10-27 02:26:20 -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 e8c5bc119e Implemented support for "iterated" data pages.
Fixes initial load of jv12mi36.dll (Java 1.3 that ships with OS/2 Warp 4.52).
2016-10-18 01:06:31 -04:00
Ryan C. Gordon 460e454ff3 runLx* don't need to adjust the stack for the TIB space any more. 2016-10-17 21:55:20 -04:00
Ryan C. Gordon c4a784b9dc Whoops, unbroke my EMX hack. 2016-10-17 21:45:11 -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 2016af81a2 Added support for import-by-name fixup records.
Fixes Watcom C's wlink.exe not loading at all.
(...and now it actually links binaries!).
2016-10-17 20:06:52 -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 8047d55bcb Wire up loading of LX name tables. Fixes DosQueryProcAddr() with strings. 2016-10-17 15:43:08 -04:00
Ryan C. Gordon 2c2526abe1 Fixed some details of DLL loading. 2016-10-17 12:00:57 -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