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 | ||