Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
z9001:software:os:interrupts [2025/01/09 10:51] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | z9001:software:os:interrupts [2025/01/09 13:29] (aktuell) – [eigene Interruptroutinen] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Interrupts ====== | ||
+ | |||
+ | ===== eigene Interruptroutinen ===== | ||
+ | |||
+ | das OS initialisiert den Interrupt-Mode IM2 und lädt das I-Register mit 02h (hi(INTV)). | ||
+ | Die Lo-Adresse des Interrupt-Vektors wird vom externen Baustein (PIO, CTC, ...) erzeugt. | ||
+ | Die Lo-Adressen 00..0C sind vom System belegt. | ||
+ | |||
+ | < | ||
+ | 0200 INTV: EQU # ; | ||
+ | 0200 CTC0 DA IKACT ;Kassette schreiben | ||
+ | 0202 CTC1 DA 0 ;frei für Anwender CTC Kanal 1 | ||
+ | 0204 CTC2 DA ICTC ; | ||
+ | 0206 CTC3 DA INUHR ; | ||
+ | 0208 PIO2A DA INTP ; | ||
+ | 020A PIO1A DA IKEP ;Kassette lesen (System-PIO) | ||
+ | 020C BER 74H ;frei für Anwenderinterrupts | ||
+ | </ | ||
+ | |||
+ | Zu beachten ist, dass der für Anwenderinterrupts freie Speicherbereich zwischen 20Ch und 027Fh von diversen Programmen genutzt wird. | ||
+ | Ich empfehle, nur den Bereich 20Ch..20Fh zu nutzen. Das sollte für eine PIO oder CTC reichen. | ||
+ | |||
+ | Es gibt nur wenige Module und Software, die von externen Interrupts Gebrauch machen. | ||
+ | Das [[z9001: | ||
+ | |||
+ | Die zugehörige Software, die auf die externe Interruptquelle reagieren soll, muss im Bereich 4000h-EFFFh liegen! | ||
+ | |||
+ | ===== Behandlung externer Interruptquellen bei KC85/1 und KC87 ===== | ||
+ | |||
+ | |||
+ | Bei der Behandlung externer Interruptquellen | ||
+ | (Interruptquelle ist über Systembus im Modulschacht | ||
+ | an den KC angeschlossen) sind | ||
+ | bei den robotron-Kleincomputern die folgenden | ||
+ | Hinweise zu beachten. | ||
+ | |||
+ | Der Modul mit der externen Interruptquelle | ||
+ | muß auf dem ersten Steckplatz (von der Tastatur | ||
+ | aus gesehen) gesteckt sein. Damit | ||
+ | wird diese Interruptquelle an die bestehende | ||
+ | Interruptprioritätenkette angeschlossen. | ||
+ | |||
+ | Die peripheren Systemelemente des Systems | ||
+ | U880 erkennen durch interne Dekodierung | ||
+ | des Befehls RETI, daß ihre Interruptbearbeitungsroutine | ||
+ | (ISR) beendet ist, und | ||
+ | können somit ihren Bearbeitungszustand zurücksetzen. | ||
+ | |||
+ | **Bei externem Interrupt muß der Befehl RETI | ||
+ | als Abschluß der ISR auf einer Speicheradresse | ||
+ | zwischen 4000H und 0EFFFH stehen, | ||
+ | da sonst das den externen Interrupt auslösende | ||
+ | Systemelement diesen RETI-Befehl | ||
+ | nicht dekodieren kann.** Das ist in der Schaltungskonzeption | ||
+ | begründet, bei der die Datenbustreiber, | ||
+ | welche den Datenbus vom | ||
+ | bzw. zum Modulschacht treiben, nur dann aktiv | ||
+ | sind, wenn eine Speicheradresse zwischen | ||
+ | 4000H und 0EFFFH angesprochen | ||
+ | wird. | ||
+ | |||
+ | Zur Erfüllung dieser Bedingung bieten sich | ||
+ | folgende Möglichkeiten an: | ||
+ | |||
+ | 1. Die gesamte ISR befindet sich im Adreßbereich | ||
+ | oberhalb des Grund-RAM, so also in | ||
+ | einem RAM- oder ROM-Erweiterungsmodul. | ||
+ | |||
+ | 2. Die ISR ist im Grund-RAM abgelegt, wobei | ||
+ | anstelle des abschließenden Befehls | ||
+ | RETI ein Sprungsbefehl auf eine Adresse im | ||
+ | Bereich zwischen 4000H und 0EFFFH stehen | ||
+ | muß. Ab dieser Adresse muß dann die | ||
+ | Kodierung für RETI im Speicher abgelegt | ||
+ | sein. | ||
+ | |||
+ | Hinweis: Soll die Interruptfreigabe des Prozessors | ||
+ | erst nach beendeter ISR erfolgen, so | ||
+ | muß der Befehl El (Interruptfreigabe) unmittelbar | ||
+ | vor dem RETI-Befehl stehen. In diesem | ||
+ | Fall muß die Befehlsfolge EI, RETI im | ||
+ | Bereich zwischen 4000H und 0EFFFH stehen. | ||
+ | |||
+ | Damit für die bei 2. benötigten 2 oder 3 Speicherplätze | ||
+ | nicht extra ein RAM-Modul notwendig | ||
+ | wird, können die freien Speicherplätze | ||
+ | im Bildwiederholspeicher (0EFF1 H | ||
+ | 0EFFFH) dafür genutzt werden. | ||
+ | |||
+ | G. Lützner | ||
+ | |||
+ | Mikroprozessortechnik, | ||
+ | |||
+ | Also z.B. bei der Variante 2 (kein externes RAM-Modul) vor der CTC-Initialisierung EI+RETI aus dem OS-ROM kopieren: | ||
+ | |||
+ | LD HL,0FFCEh | ||
+ | LD DE,0EFFDh | ||
+ | LD BC,3 | ||
+ | LDIR | ||
+ | |||
+ | und am Ende der ISR statt EI+RETI: | ||
+ | |||
+ | JP 0EFFDh | ||