Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Anwender-Interrupt-Assemblerroutine auf der OM Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 15.01.2007 8:54)
 Als Antwort auf Re: *.s19 Datei wieder aus C-Control löschen? von Eckhard - 14.01.2007 18:48
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Mini M-Unit, Open-Mini Station, sonstige
Hallo Eckhard.

> Beide Programmteile werden mit dem Befehl "UIRTofl=ON " aufgerufen. Was passiert?

Das ist eine gute Frage, die vielleicht noch nicht vollends verständlich in der OM-Dokumentation beantwortet wird. Durch Setzen eines der UIR...-Bits läßt sich eine Inline-Interrupt-Assemblerroutine (IIAR) oder eine Assemblerroutine im SYSCODE-Bereich in einen Interrupt einbinden. Die IIAR hat generell die höhere Priorität. Das heißt, die Assemblerroutine im SYSCODE-Bereich wird nur dann ausgeführt, wenn die OM keine IIAR finden konnte. Das wird auch bei IIARFND beschrieben: "Dieses Flag signalisiert dem Betriebssystem, daß eine INLINE-Interrupt-Assemblerroutine gefunden wurde und diese anstatt einer Interruptroutine im SYCODE-Bereich verwendet werden soll." Die interne Variable IIARFND sollte der Anwender nur auslesen und unverändert lassen.

Assembler-Interruptroutinen können auf der OM also entweder per SYSCODE (also S19) oder IIAR realisiert werden. Aber es ist standardmäßig nicht beides aktiv. SYSCODE wird eigentlich nur noch aus Kompatiblitätsgründen unterstützt. Es hat aber auch seine Vorteile, wenn ein Anwender einen externen Assembler auf der OM nutzen möchte.

Wenn man trotz aktiver IIAR eine im SYSCODE-Bereich stehende Interruptroutine aufrufen lassen möchte, kann man wie im folgenden Beispiel gezeigt von der IIAR in den SYSCODE-Bereich springen und dort alle noch nicht von der IIAR behandelten Interrupts auswerten. Dieses Hintereinanderlegen der Anwender-Interruptroutinen wie in einer Kette funktioniert natürlich nur, wenn die IIAR entsprechend programmiert wurde ("cbeqa #..." und "jmp" am Beginn). Bei den Systemerweiterungen ist das der Fall.

INCLUDE "omid.def"       'auf der Open-Micro: INCLUDE "om.def"

' restliche Definitionen

INCLUDE "extports.iia"   'Systemerweiterung einbinden

PROCEDURE JumpToSyscode INLASM
! jmp &hfd00
END PROCEDURE

#main

' Hauptprogramm

END

INCLUDE "om_i2c.pro"     'Hilfsroutinen
INCLUDE "om_fw.pro"

SYSCODE "meins.s19"      'Assembler im SYSCODE, auf Adresse &hfd00

Viele Grüße
Dietmar

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: