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
Nach 10 Sekunden Suche: http://www.z80.info/1653.htm Übrigens musst nicht Du die Vektoren verarbeiten, das macht die CPU schon selbst. Wenn die Schaltung stimmt.
War das der geile Modus, wo die Peripherie selbst einen Teil der Interruptvektors liefert? Hat mich damals (>25 Jahre) schwer beindruckt und war genial.
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
Auf solche spitzfindigen Kommentare kann ich verzichten.Ich denke es ist ein ernstes Forum!
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
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.