| Lösungsvorschläge zu den Praktischen Übungen |  | Anhang |

## Lösungsvorschläge zu den Selbsttestaufgaben

Hinweis: Da in HTML Überstreichungen nicht möglich sind, haben wir Namen von Signalen, die im L-Pegel aktiv sind, das Zeichen '#' vorangestellt.

Zu S3.1-1:

Die Ansteuerung der "Control"-Eingänge C3-C0 geschieht durch die Ausgänge eines 2-auf-4-Demultiplexers. Die Adreßsignale A0 und A1 dienen zur Selektion eines seiner 4 Ausgänge.

Zu S3.1-2:

(Hinweis: Zur besseren Lesbarkeit werden hier die Indizes der Adreßleitungen tiefgestellt, also z.B. hier A15 anstelle A15 wie im Schaltplan.)

1. CS = A15A14A13A12#(A11 v A10)#(A9 v A8)#(A7 v A6)
   = A15A14A13A12#A11#A10#A9#A8#A7#A6
   = A15A14A13R mit
   R = A12#A11#A10#A9#A8#A7#A6 = A12#(A11 v A10 v A9 v A8 v A7 v A6)

   CS selektiert damit den Adreßbereich $F000 - $F03F. Bild 3.1-1 können Sie entnehmen, daß in diesem Bereich die Adressen aller Peripherie-Komponenten untergebracht sind.

2. Für die Funktion des 3-auf-8-Demultiplexers 74138 ( IC38 im Gesamtschaltplan) gilt laut Datenblatt im Anhang für die Ausgänge Yj , j = 0,..,7:

   Yi = 0 genau dann, wenn für die Gate-Eingänge G1, G2A, G2B und für die Auswahleingänge (Select) A,B,C die folgenden Bedingungen gelten:

   G1 = 1, G2A = 0, G2B = 0, A*20 + B*21 + C*22 = i.

   Dem Gesamtschaltplan entnimmt man:

   G1 = CS, G2A = G2B = GND, A = A13, B = A14, C = A15.

   Damit folgt für die nicht - invertierten Auswahlsignale CS0 - CS :

   CS0 = #A15#A14#A13#CS = #(A15 v A14 v A13 v A15A14A13R)
   = #(A15 v A14 v A13) = #A15#A14#A13 Adreßbereich: $0000 - $1FFF
   Komponente: 8-kbyte-RAM

   CS1 = #A15#A14A13 Adreßbereich: $2000 - $3FFF
   Komponente: 1. Speichererweiterung

   CS2 = #A15A14#A13 Adreßbereich: $4000 - $5FFF
   Komponente: 2. Speichererweiterung

   CS3 = #A15A14A13 Adreßbereich: $6000 - $7FFF
   CS4 = A15#A14#A13 Adreßbereich: $8000 - $9FFF
   CS5 = A15#A14A13 Adreßbereich: $A000 - $BFFF
   CS6 = A15A14#A13 Adreßbereich: $C000 - $DFFF

   Da an der Kette von UND-Gattern des IC35 keine Brücken gesetzt sind, stimmt das Signal CS7 mit dem Ausgang Y7 des Demultiplexers 74138 überein. Also folgt:

   CS7 = A15A14A13#CS = A15A14A13#(A15A14A13R)
   = (A15A14A13 v #R)A15A14A13 = A15A14A13R
   = A15A14A13#(A12#A11#A10#A9#A8#A7#A6)
   = A15A14A13(#A12 v A12 (A11 v A10 v A9 v A8 v A7 v A6)
   = A15A14A13#A12 v A15A14A13A12(A11 v A10 v A9 v A8 v A7 v A6)

   Adreßbereich: $E000 - $EFFF und $F040 - $FFFF
   Komponente: 8-kbyte - EPROM

   Durch das Signal CS wird aus dem Bereich des EPROM-Speichers der Adreßbereich $F000 - $F03F der Peripherie ausgeblendet. CS wird nun zur Erzeugung der weiteren Auswahlsignale CS8 - CS13 herangezogen. Für das Signal am Gate-Eingang G des 2-auf-4-Demultiplexers 74139 (IC25) ergibt sich aus dem Schaltplan:

   G = A5 v A4 v #CS = #(#A5#A4CS). Damit folgt:
   CS8 = #A3#A2G = #A3#A2#A5#A4CS
   = A15A14A13A12#A11#A10#A9#A8#A7#A6#A5#A4#A3#A2

   Adreßbereich: $F000 - $F003
   Komponente: Parallel-Schnittstelle

   CS9 = #A3 A2 #G = A3 A2 #A5 #A4 CS, Adreßbereich: $F004-$F007
   CS10 = A3 #A2 #G = A3 #A2 #A5 #A4 CS , Adreßbereich: $F008-$F00B
   Komponente: V24-Schnittstelle

   CS11 = A3 A2 G = A3 A2 #A4 #A5 CS, Adreßbereich: $F00C-$F00F
   Komponente: Kassettenrecorder-Interface (wird nicht mehr unterstützt)

   CS12 = #(#A4 #CS v A5) = A4 #A5 CS, Adreßbereich: $F010-$F01F
   Komponenten: Tastatur und Timer ($F018-$F01F)

   CS13 = #(#A5 #CS v A4) = #A4 A5 CS, Adreßbereich: $F020-$F02F
   Komponente: 7-Segment-Anzeige

Zu S3.1-3:

1. Der Baustein 74541 enthält 8 nicht-invertierende Tristate-Leitungstreiber mit Schmitt-Trigger-Eingängen. Die Steuereingänge aller 8 Treiber sind miteinander verbunden. Sie werden aktiviert, wenn an beiden Gate-Eingängen G1 und G2 des Bausteins L-Potential angelegt wird. Dieser Baustein kann für unidirektionale Busleitungen benutzt werden.

   Der Baustein 74245 enthält 8 bidirektionale Tristate-Leitungstreiber mit Schmitt-Trigger-Eingängen. Für jede Leitung sind zwei Treiber antiparallel geschaltet. Von ihnen wird durch den Eingang Dir jeweils genau einer angesprochen.

   Die Aktivierung des gesamten Bausteins erfolgt durch L-Potential am Gate-Eingang G. Dieser Baustein eignet sich besonders zum Einsatz an bidirektionalen Datenbussen.

2. Externe Speichererweiterung

Zu S3.1-4:

(Beachten Sie die verschiedenen Bezeichnungen der Ein- und Ausgänge im Datenblatt und dem Gesamtschaltplan.)

1. Datenbuswort: | D7 D6.....D1 D0 = $A7 = 1010 0111
   IC29: | Dateneingänge: | DI1=DI2=DI3=1, DI4=0,
   | Steuereingänge: | ME=#S=0, WE=#W=0,
   | Adreßeingänge: | A=B=C=1, D=0 .
   IC31: | Dateneingänge: | DI1=DI3=0, DI2=DI4=1,
   | Steuereingänge: | ME=0, WE=0,
   | Adreßeingänge: | A=B=C=1, D=0 .

2. Der benutzte Speicherbaustein 74289 invertiert jedes eingeschriebene Datum. Also erhält man beim Lesen der Speicherzelle 7:
   IC29: Datenausgänge: DO1=DO2=DO3=0, DO4=1 .
   IC31: Datenausgänge: DO1=DO3=1, DO2=DO4=0,
   also das Datenbuswort: D7 D6.....D1 D0 = $58 = 0101 1000 .

3. Die Inversion der Information im Speicher wird durch den invertierenden Treiber-Baustein 74540 (IC1) auf der Anzeige-Platine (s. Gesamtschaltplan im Anhang) rückgängig gemacht.

Zu S3.1-5:

Die Rücksetztaste C wirkt direkt auf einen Eingang der CPU 6809. Sie setzt den Prozessor hardwaremäßig in den Grundzustand zurück. Da sie in jedem Prozessorzustand wirksam sein muß, darf sie nicht erst vom Prozessor in einem Programm abgefragt werden.

Ähnlich verhält es sich mit der Break-Taste F4. Diese finden Sie am Eingang 40 (CA1) des Port-Bausteins MC6821 in der Parallel-Schnittstelle. Sie bewirkt über die IRQ-Leitung eine Hardware-Unterbrechung des mPs. Voraussetzung dafür ist, daß der Port-Baustein solche Interrupts durchläßt. In KE4 wird Ihnen gezeigt, wie man durch das Setzen eines bestimmten Bits solche Interrupts verhindern kann.

Zu S3.1-6:

1. Durch die niederwertige Tetrade A3-A0 des Adreßbusses wird der Ausgang Y7 des Demultiplexers angesprochen. Dieser ist jedoch in der Ansteuerschaltung der Tastatur nach Bild 3.1-4 nicht benutzt worden, so daß die Ausgabe der Adresse $F017 keine Wirkung auf die Tastatur hat.

2. Die 3. Spalte der Tastatur von links im Bild 3.1-4 wird durch den Ausgang Y2 des Demultiplexers angewählt. Daher muß die Adresse $F012 auf den Adreßbus gegeben werden.
   Gleichzeitiges Drücken der Tasten '5' und '9' führt auf den Datenbusleitungen D1 und D2 zu einem "Kurzschluß" gegen Masse. Deshalb wird der Wert $X9 = xxxx 0110 eingelesen. (X = x = unbestimmt.)

Zu S3.2-1:

Die Routinen der Bibliothek eines Entwicklungssystems sind auf dem Zielsystem nicht verfügbar, sie könnten also nicht aufgerufen, sondern müßten in das Programm hineinkopiert werden (wie Macros in Assemblerprogrammen). Dazu müssen jedoch mehrere Voraussetzungen erfüllt sein:

1. Es müssen Anfangs- und Endadresse der Routine bekannt sein. (Die Aufrufadresse muß nicht die Anfangsadresse sein !).

2. Alle Unterroutinen, die von der Hauptroutine aufgerufen werden, müssen mitkopiert werden.

3. Sämtliche Routinen müssen lageunabhängig geschrieben sein oder angepaßt werden. Es ist also sehr fraglich, ob der Aufwand gerechtfertigt ist, oder ob es nicht günstiger ist, die Routinen vollständig (neu) zu programmieren.

Zu S3.2-2:

Nach einem Reset ist der Inhalt des 'S'-Registers nicht definiert, der Stapelzeiger zeigt also auf eine beliebige Adresse. Liegt sie im Bereich eines Anwenderprogramms, so würde dieses durch das Ablegen der Register des Prozessors durch eine Interruptroutine zerstört. Falls sie im ROM-Bereich oder in einem nicht belegten Adreßbereich liegt, könnten die Register gar nicht gesichert werden, und eine Programmfortsetzung nach Beendigung der Unterbrechung wäre unmöglich. Auf keinen Fall ist der einwandfreie Betrieb des Rechners gewährleistet.

Zu S3.2-3:

Die vom Empfänger berechnete Prüfsumme PSE über alle Bytes einer fehlerfrei übertragenen Zeile ergibt PSE = $00, denn für jede Zeile Z = (B1, B2,..., Bn) gilt:

| n | n-1 | n-1 | n-1 | n-1 | n-1
PSE = å Bi = å Bi + PSS = å Bi + ( å Bi )2k = å Bi + (28 - å Bi ) = $00.

Zu S3.2-4:

Die Verfahrensweise beim Programmabbruch ist im wesentlichen die gleiche. Bei der Beendigung der BREAKPOINT-Routine muß jedoch (neben dem Austauch des SWI-Befehls im Programm) das PC-Register um eins vermindert werden, da der PC auf die dem SWI-Befehl folgende Adresse zeigt und nicht mehr auf den ursprünglichen OpCode des Programms. Bei der TRACE-Routine muß außerdem die Interrupt-Anforderung gesperrt werden.

| Lösungsvorschläge zu den Praktischen Übungen |  | Anhang |