Commit Graph
69 Commits
Author SHA1 Message Date
Ryan C. Gordon 9860532454 Cleanup *INFOSEG creation. 2018-06-19 13:59:21 -04:00
cracyc 35d2162ba4 fix last few export names 2018-06-19 12:05:24 -04:00
cracyc c7f212d035 build fixes 2018-06-19 11:59:46 -04:00
cracyc 8457fc0e22 Implemented a whole bunch of 16-bit APIs. OS/2 1.0's cmd.exe sort of works!
(Most of this work was cracyc's effort, but I started tweaking it before
I thought to perform a commit.  --ryan.)
2018-06-18 15:52:58 -04:00
Ryan C. Gordon 3e83a67d48 Let OS2APIINFO optionally take key/value pairs, use it for export names.
This lets me remove my tcpip32 hack, and will let me export old symbols
as all caps for OS/2's use and something more sane for regular use
(like VioGetCurPos() in modern times is VIOGETCURPOS in viocalls.dll, etc).
2018-06-17 22:21:52 -04:00
Ryan C. Gordon a80afaa0c1 Be aggressive about saving registers in the 16-bit bridge.
Fixes a lot of stuff.  :)
2018-06-14 12:25:38 -04:00
Ryan C. Gordon cdaf533140 Fixed typo in Dos16Write's TRACE_NATIVE line. 2018-06-14 12:24:57 -04:00
Ryan C. Gordon 37c3cc5a0a Bunch more work on 16-bit entry points.
Can run testargv16.exe now. This means Watcom C startup code, and Watcom's
printf(), both work.
2018-06-07 23:48:39 -04:00
Ryan C. Gordon 085b1c7ec7 Implement some 16-bit APIs that our hello16.exe needs. 2018-06-06 17:27:37 -04:00
Ryan C. Gordon 312b87ca53 Let the libraries build as native binaries without 32-bit x86 dependencies.
Obviously, this disables lx_loader, but you can compile a C program that
uses OS/2 APIs as a native 64-bit Linux app and run them.

So now we can do 2ine and 2inelib.  :)
2018-02-27 23:42:17 -05:00
Ryan C. Gordon aa8f842232 Work to make OS/2 API available to native apps, not just OS/2 binaries.
GLoaderState is moved to a new lib2ine library, which everything links
to and sets up what it can in a DLL constructor, so your app can just
link to doscalls or whatever and it'll have what it needs without
something like lx_loader doing a lot of heavy lifting before your
main() runs.
2018-02-27 23:18:51 -05:00
Ryan C. Gordon a1af09c108 Hacked up tcpip32.h to allow including from native apps outside of 2ine. 2018-02-27 15:16:17 -05:00
Ryan C. Gordon 6821de5ed7 Automate handling of support code for OS/2 binaries.
Now a perl script parses our headers and generates glue code, export tables,
etc. This automates all the macro nonsense and bridge code, and separates
out all the stuff you need for binary compat with OS/2, so you can remove it
all from the build if you want to just build native libraries that supply
the OS/2 API to native apps (like Winelib vs Wine).

This makes upkeep details less nasty, and easier to build native binaries
when implementing and improving APIs, so you can debug directly without
a lot of drama.
2018-02-27 03:25:21 -05:00
Ryan C. Gordon dcf40e843b Added header comments to everything. 2018-02-26 12:54:16 -05:00
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 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 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 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