[archimedes] Re: Systemaufrufe (SWI-Calls) von C aus unter RISC OS

  • From: Thomas Milius <Thomas-Milius@xxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Sat, 09 Aug 2014 20:34:47 +0200

In message <fa1f923454.Alex@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
          Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx> wrote:

> 
> Das ist natürlich gut: Im Buch von Bruce Smith wird nicht angegeben,
> dass man die Dateien
> 
> kernel.h
> swis.h
> 
> mit in den C-Code einbinden muss. Das habe ich erst dank deinem Link
> gemerkt.
> 

ACHTUNG bei swis.h. Die für den Norcroft sind die neuesten (angeblich soll
bald eine neue Version herauskommen mit neuer überarbeiteter RISC OS
Dokuemation). Aber auch hier fehlen immer mal wieder ein paar SWI-Defintionen
und müssen von Hand nachgepflegt werden.

> Die Bücher sind nicht so gut, wie ich es erwartet habe. Zu viele Lücken,
> zu unvollständig.

Ich habe nie eines außer den RISC OS PRMS gelesen.

> 
> kernel.h und swis.h werden bereits mit GCC mitgeliefert. Aber jetzt
> suche ich noch die Dokumentation dazu.

Das sind die PRMs oder die Moduldokumentation dazu, bei nicht OS intern 
Modulen.

> 
> In swis.h steht z. B.
> 
> | #define PDriver_DeclareDriver          0x080156
> 

PRM Index

Seite Index-73

PDriver_DeclareDriver -> &80156 -> 3-650

Da steht dann

                                                   PDriver_DeclareDriver
                                                           (SWI &80156)
        Registers a printer driver with the PDriver sharer module

On entry
        R0 = pointer to reason code handler for driver

usw.


> Heißt das, dass beim Aufruf von PDriver_DeclareDriver die Adresse
> 0x080156 angesprungen wird, also genau dort die Routine für den SWI
> abgelegt ist? Ich versuche es nur zu verstehen.

Bei den SWIs handelt es sich um einen ARM-Assembler Befehl, wo ein Teil eben
genau diese SWI-Nummer enthält. Tritt ein SWI-Statement auf, so wird eine OS
interne Handler Routine aufgerufen. Diese trennt dann die SWI-Nummer aus dem
Assemblerbefehl ab und reicht den Aufruf mit den entsprechenden Registern an
das Modul weiter, was sich vor bem OS dafür gemeldet hat, diesen SWI
abzuarbeiten.

Thomas Milius

Other related posts: