|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I'm just being nosy now... How do you call OS functions on Windoze?
Back in the days of the Commodore 64, the "operating system" (I use the
term loosely) was stored in a big ROM chip. To call the OS (assuming you
actually wished to do such a thing!) you simply jump to the right magic
address. Since it's in ROM, it never moves. And indeed, you could buy
big tables of addresses and the expected parameters...
In the days of the Amiga, things became a little more complex. The OS is
composed of "libraries". Some of these are burned into ROM, while others
reside in files on disk. But even the ones in ROM are in a slightly
different place depending on exactly which model of Amiga you have.
All is not lost, however. Memory address 0x00000004 contains a base
pointer to a "jump table". If you take this base address and add on what
they call a "library vector offset" (LVO), you can access any function
provided by the Exec library. And, again, for a large sum of money, you
could buy a file containing either C or assembly declarations of all the
function names and their corresponding LVOs.
The two important functions provided by Exec are of course OpenLibrary()
and CloseLibrary(). The former takes a pointer to a zero-terminated
string indicating the desired library name, and an integer indicating
the minimum acceptable library version. On return, there's a status code
indicating whether the library could be opened, and if so, what version
was actually found, and a base pointer to its jump table. Now again you
need to know the LVOs for the functions you want to call.
(If the library is on disk, Exec will load it for you. When you close
it, Exec might unload it if nobody else is using it.)
How does this stuff work with Windoze? (Or Linux, for that matter...)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Orchid XP v7 wrote:
> How does this stuff work with Windoze? (Or Linux, for that matter...)
Dynamic link libraries (DLLs) two ways to get to them, either through
the linker, or through dynamic loading through calls to LoadLibrary and
GetProcAddress. The easiest way is using the linker, of course, provided
you have the header & library files (which you should for any windows
compiler available). The DLL loader does all of the procedure address
fix-ups, if a DLL is loaded into its preferred address space (i.e. no
other DLL is occupying the address space it requests), then loading is
much quicker since all of the pointers in the function table are
correct. Alternatively, some functions, such as those in the DirectX and
Shell libraries use COM, in which instances of classes are loaded with
vtables pointed to the correct functions. DirectX (and Shell, I think)
export non-COM functions for creation of the COM class instances.
* This is simplified and largely from memory, so take it for what its
worth (not much). This is also the case for Win32, Win16 may be
different, Win64 should be similar, though.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Mike Raiford wrote:
> Orchid XP v7 wrote:
>
>> How does this stuff work with Windoze? (Or Linux, for that matter...)
>
> Dynamic link libraries (DLLs)
Oh, yeah... the answer only applies to Windows, Linux I haven't a clue.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
On Fri, 30 Nov 2007 14:41:47 -0600, Mike Raiford wrote:
> Mike Raiford wrote:
>> Orchid XP v7 wrote:
>>
>>> How does this stuff work with Windoze? (Or Linux, for that matter...)
>>
>> Dynamic link libraries (DLLs)
>
> Oh, yeah... the answer only applies to Windows, Linux I haven't a clue.
On Linux it's similar; you have a set of standardized libraries that
interface with lower level aspects of the kernel. As I understand it,
architecturally, you could call those kernel functions directly (and in
fact in many cases you would do this, for example, to do thread
management).
Jim
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Orchid XP v7 wrote:
> I'm just being nosy now... How do you call OS functions on Windoze?
>
>
> Back in the days of the Commodore 64, the "operating system" (I use the
> term loosely) was stored in a big ROM chip. To call the OS (assuming you
> actually wished to do such a thing!) you simply jump to the right magic
> address. Since it's in ROM, it never moves. And indeed, you could buy
> big tables of addresses and the expected parameters...
Commodore released a manual for the C64 that had EVERYTHING about the
machine, including schematics. It contained everything you needed to
write any application.
> In the days of the Amiga, things became a little more complex. The OS is
> composed of "libraries". Some of these are burned into ROM, while others
> reside in files on disk. But even the ones in ROM are in a slightly
> different place depending on exactly which model of Amiga you have.
>
> All is not lost, however. Memory address 0x00000004 contains a base
> pointer to a "jump table". If you take this base address and add on what
> they call a "library vector offset" (LVO), you can access any function
> provided by the Exec library. And, again, for a large sum of money, you
> could buy a file containing either C or assembly declarations of all the
> function names and their corresponding LVOs.
Addison-Wesley released a very extensive set of docs for the Amiga,
consisting of five volumes. One concerned programming at the hardware
level, another dealt with the Exec library, a third with the Intuition
library, and the last with all of the others (Graphics, Layers, Sound,
etc.). I'm pretty sure the vector table offsets for every OS call were
in these books.
> The two important functions provided by Exec are of course OpenLibrary()
> and CloseLibrary(). The former takes a pointer to a zero-terminated
> string indicating the desired library name, and an integer indicating
> the minimum acceptable library version. On return, there's a status code
> indicating whether the library could be opened, and if so, what version
> was actually found, and a base pointer to its jump table. Now again you
> need to know the LVOs for the functions you want to call.
>
> (If the library is on disk, Exec will load it for you. When you close
> it, Exec might unload it if nobody else is using it.)
>
>
> How does this stuff work with Windoze? (Or Linux, for that matter...)
For Windows, I think that the library code is mostly in DLLs, and that
your linker will add the appropriate OS calls to get any needed DLLs
into memory.
Dunno how it works in Linux.
Regards,
John
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le 30.11.2007 20:59, Orchid XP v7 nous fit lire :
> (If the library is on disk, Exec will load it for you. When you close
> it, Exec might unload it if nobody else is using it.)
>
>
> How does this stuff work with Windoze? (Or Linux, for that matter...)
Shared lib on linux/unix can be dynamically loaded too.
The classical libdl (dlopen,dlsym,dlclose) can be used on linux &
solaris.
hp-ux have shl_load...
--
The superior man understands what is right;
the inferior man understands what will sell.
-- Confucius
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Orchid XP v7 wrote:
> How does this stuff work with Windoze? (Or Linux, for that matter...)
The simple way for Linux, include the header file and tell the linker
the path to object files. In fact, that should work for Windows as well.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Orchid XP v7 <voi### [at] devnull> wrote:
> How does this stuff work with Windoze?
When you have your compiler installed, you download the Windows SDK
which contains the necessary header files. Then you call the functions
defined in these header files.
> (Or Linux, for that matter...)
Most system-specific headers are defined in /usr/include/sys, although
these are seldom needed in practice (ie. only when you really need to do
something which you can't do with standard code).
--
- Warp
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Orchid XP v7" <voi### [at] devnull> wrote
> provided by the Exec library. And, again, for a large sum of money, you
> could buy a file containing either C or assembly declarations of all the
> function names and their corresponding LVOs.
> [...]
> How does this stuff work with Windoze? (Or Linux, for that matter...)
For starters, you don't pay large sums of money. No wonder Amiga is dead.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
somebody wrote:
> "Orchid XP v7" <voi### [at] devnull> wrote
>
>> provided by the Exec library. And, again, for a large sum of money, you
>> could buy a file containing either C or assembly declarations of all the
>> function names and their corresponding LVOs.
>> [...]
>> How does this stuff work with Windoze? (Or Linux, for that matter...)
>
> For starters, you don't pay large sums of money. No wonder Amiga is dead.
This was in the days before the Internet revolution. Towards the end, it
was possible to get hold of the include files from BBS and so on. (I
think even one issue of AmigaFormat had it on a coverdisk...)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|