[uae] Re: native libraries for uae

  • From: Jochen Becher <jochen_becher@xxxxxx>
  • To: uae@xxxxxxxxxxxxx
  • Date: Sat, 07 Apr 2007 20:02:44 +0200

Am Freitag, den 06.04.2007, 01:05 -0400 schrieb Richard Drummond:

> Sounds interesting. How was it implemented in AmigaXL?

Straight forward as all native calls within uae: A handler was installed
at 0xF0FFC0. This handler got some commands. The first command the Amiga
executed was always a NATIVE_CreateContext which created a new thread
that executed all code on the host's side. This initial
NATVIE_CreateContext command was called from amigaxl.library (or
similar, cannot remember) on LibOpen (this library created a new LibBase
for each task that it opened).

After the initial communication was established AmigaOS could dlopen()
shared objects on the hosts side (NATIVE_OpenObject), find functions in
the shared object (NATIVE_GetSymbolID) and execute functions
synchronously (NATIVE_CallFunction) or asynchronously
(NATIVE_CallFunctionAsync) and wait for asynchronously called functions
(NATIVE_WaitFunction). Only one function per task could be called
asynchronously simultaneously. NATIVE_WaitFunction waits for an AmigaOS
task signal which will be set by the host thread as soon as the function
call has finished.

In general we did nothing different than e.g. filesys.c but generalized
the whole thing a little bit. We used this native library concept for
everything: AHI, access to real Amiga hard disks without having a real
SCSI emulation, joystick, cd-rom, floppy, parallel, serial, bsd socket,
printer driver. Most QNX resources with the exception of the video
driver were accessed via the native library.

I hope I have some time in May to implement it. If you want I can send
you the source.

Regards, Jochen 


> Cheers,
> Rich


Other related posts: