Z80 Interrupts

Gast #2574608
Lesenswert?

Hallo Z80 Insider,
Ich habe einen Z80 Einplatinensystem in Betrieb. Mit Assembler und C 
programmiert. Klappt alles super und habe alles im griff. Ich möchte 
jetzt auch die Interrupts benutzen. Modus 0 ist kein Problem, aber der 
Modus 2 für die CTC macht mir Kopfzerbrechen. Kann mir jemand ein 
Beispiel geben,
womit ich die Vektoren bearbeiten kann. Danke
Gast #2574740
Lesenswert?

Hallo,

da müsste alles für CTC drin sein:
1
;
2
PERETI:  EI
3
PRETI:  RETI
4
PRETN:  RETN
5
;
6
.......
7
        EXTERNAL PRETI,PERETI,PRETN
8
;
9
;       POPSYS CALLS INIT,
10
;       THEN JUMPS TO 100H
11
;
12
;       LINK AT 103H FOR INT HANDLING !!
13
;
14
        ASEG
15
        ORG     104H
16
;
17
;       INTERRUPT VECTORS
18
;
19
;
20
        DEFW    NOSERV
21
        DEFW    NOSERV  ;NOT USED
22
        DEFW    NOSERV
23
        DEFW    NOSERV
24
        DEFW    NOSERV
25
        DEFW    NOSERV
26
;
27
SIOINT: DEFW    NOSERV  ;SIO NOT USED
28
        DEFW    NOSERV
29
        DEFW    NOSERV
30
        DEFW    NOSERV
31
        DEFW    NOSERV
32
        DEFW    NOSERV
33
        DEFW    NOSERV
34
        DEFW    NOSERV
35
;
36
SCCINT: DEFW    NOSERV  ;SIO NOT USED
37
        DEFW    NOSERV
38
        DEFW    NOSERV
39
        DEFW    NOSERV
40
        DEFW    NOSERV
41
        DEFW    NOSERV
42
        DEFW    NOSERV
43
        DEFW    NOSERV
44
;
45
CTCINT: DEFW    NOSERV  ;CTC TIMER 0
46
        DEFW    NOSERV  ;TIMER 1
47
        DEFW    TIMNAJ  ;TIMER 2
48
        DEFW    NOSERV  ;RTC
49
;
50
NOSERV: JP      PERETI
51
;
52
;
53
;
54
INIT:   DI
55
        LD      HL,0
56
        LD      B,0FFH
57
INITX2: XOR     A       ;DISPLAY OFF
58
        OUT     (DIG),A
59
        OUT     (SEG),A
60
.......
61
        IM      2       ;INTERRUPT 2
62
        LD      A,1
63
        LD      I,A     ;AT 100
64
;
65
        LD      HL,RAM  ;CLEAR RAM
66
        LD      DE,RAM+1
67
        LD      BC,TOPMEM-RAM-32
68
        LD      (HL),0
69
        LDIR
70
;
71
        JR      INIT10
72
;
73
TIMNAJ: JP      TIMINA
74
;
75
...
76
;
77
INITAB: DEFB    CTC0,30H        ;INT VECTOR
78
        DEFB    CTC0,07H        ;BAUD RATE SER3
79
        DEFB    CTC0,B1200
80
        DEFB    CTC1,07H        ;BAUD SER4
81
        DEFB    CTC1,B1200
82
        DEFB    CTC2,0A7H       ;SYSTEM TIMER
83
        DEFB    CTC2,TACON
84
        DEFB    CTC3,47H        ;RTC
85
        DEFB    CTC3,1
86
.....
87
INIT20: XOR     A
88
        OUT     (RTC),A
89
        EI
90
        RET
91
;
92
;
93
;
94
;       TIMER INTERRUPT 1 MS
95
;       2 MS DISPLAY SCAN
96
;       2 MS STEPPER MOTOR
97
;       1 MS V24
98
;       1 MS ADC
99
;
100
TIMINA: PUSH    AF
101
        PUSH    BC
102
        PUSH    DE
103
        PUSH    HL
104
;
105
;       TOGGLE
106
;       0 : DISPLAY AND KB
107
;       1 : STEPPER MOTOR & RTC
108
;
109
.......
110
;
111
TMNAE:  POP     HL
112
        POP     DE
113
        POP     BC
114
        POP     AF
115
        JP      NOSERV
116
;

Gruss Reinhard
Gast #2575056
Lesenswert?

Das Programm von Reinhard sieht prinzipiell gut aus,
hat aber paar "Feinheiten" die man ohne Nachlesen in Literatur kaum 
verstehen kann.

Was ist z.B. mit
        LD      A,1
        LD      I,A     ;AT 100
wenn das besagte Programm und die Vektortabelle nicht bei (ungefähr) 
100H beginnt?
Auch der Macro80 Assembler kannte schon Schlüsselwörter wie "HIGH" !
Und sogar das automatische "hinORGerln" auf gerade 4er oder 10H-er 
Adressen geht mit dem "DS" bzw. "DEFS" Operator in Verbindung mit $ .

http://www.retroarchive.org/cpm/lang/MACRO-80.PDF


Ich rate dem TE, sich gute Bücher zu beschaffen.
Das beste, das ich kenne ist hierfür
    Z-80 - Interface-Technik und Anwendung. Buch 3.
Gibt's beispielsweise bei Bücher.de (gebraucht).
Am 2. Platz wäre das Handbuch zum uPF-1, dem "Microprofessor".
Das von Zaks kommt später, das von Klein ist Murks.


Was will und der TE mit seiner Bemerkung zu "spitzfindigen Kommentare" 
sagen? Das verstehe ich nicht.

Gut wäre hingegen es, könnte er sagen welche konkrete Hardware (bzw. 
Schaltung) er nutzt.

Gruss
Gast #2575382
Lesenswert?

Hallo!
@Erich:
...und das von Reinhard Kern
>INITAB: DEFB    CTC0,30H        ;INT VECTOR
funktioniert auch nur, wenn die anderen Interruptvektoren genau so wie 
oben aufgeführt vorhanden sind und ab 0104H im Speicher stehen! So 
programmiert man nicht.
Gast #2575574
Lesenswert?

Route_66 schrieb:
> ...und das von Reinhard Kern
>>INITAB: DEFB    CTC0,30H        ;INT VECTOR
> funktioniert auch nur, wenn die anderen Interruptvektoren genau so wie
> oben aufgeführt vorhanden sind und ab 0104H im Speicher stehen! So
> programmiert man nicht.

Das ist zwar in der Theorie nicht falsch, aber so wie sie sind stehen 
die Tabellen nun konstant seit 25 Jahren, und es besteht auch wenig 
Grund, sie die nächsten 25 Jahre zu ändern. Der Aufwand für eine 
Parametrisierung hätte sich also nie gelohnt, ist allerdings auch nicht 
hoch.

Die Startadresse 100H sollte alten Hasen geläufig sein, kommt von CP/M, 
obwohl ich stattdessen das eigene kompatible Pseudo-Betriebssystem 
POPSYS verwende. Auch deshalb wurde an der Struktur bei 100H nie was 
geändert, auch Pascal- oder C-Compiler arbeiten standardmässig damit.

Gruss Reinhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren