Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

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.1z9001: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.
 +
 +<code>
 +0200 INTV: EQU # ;Interruptadresstabelle
 +0200 CTC0 DA IKACT ;Kassette schreiben
 +0202 CTC1 DA 0 ;frei für Anwender CTC Kanal 1
 +0204 CTC2 DA ICTC ;Entprellen Tastatur, Vorteiler für Systemuhr
 +0206 CTC3 DA INUHR ;Sekundentakt Systemuhr
 +0208 PIO2A DA INTP ;Tastaturinterrupt (Tastatur-PIO)
 +020A PIO1A DA IKEP ;Kassette lesen    (System-PIO)
 +020C BER 74H ;frei für Anwenderinterrupts
 +</code>
 +
 +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:module_robotron:spracheingabe|]] nutzt eine CTC und den Interruptadresstabellen-Bereich 0210h-213h.
 +
 +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, 1 (1987) 10, S. 317
 +
 +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