Bei diesem Artikel sammle ich alle Infos zu meinem MP Lernsystem vom DAG Technikum.
Es gibt mehrere ähnliche Einplatinencomputer die als Lernsystem oder Trainer verwendet wurden. Die einzelnen Systeme unterscheiden sich in ihrer Speicherorganisation und dem Umfang der Schnittstellen.
- DAG MP Lernsystem
- DAG Z80-Lernsystem
- DAG Z80-Trainer
- SEL Z80-Trainer
Hier die Hardwaredaten des DAG MP Lernsystem
- Prozessor: Z80A / 2 MHz
- ROM: 8K
- RAM: 16K
- Betriebssystem: MONI 1.5
- Versorgungsspannung: Integriertes Netzteil (+5V, +/-12V)
- Kommunikations-Interface: Seriell, Paralell,
- Kassetten-Interface für Datenrecorder
- Anzeige: 8 x 7-Segment-Anzeige und LED für HALT
- HEX-Tastatur (2 x 16 Tasten)
- ECB: 1 Pfostenstecker mit 3 x 32 Pins
Speicherbelegung
- 0000 – 0FFF Monitorprogram Version 1.5
- 1000 – 17FF RAM-1
- 1800 – 1FFF RAM-2
I/O-Belegung
- 00 … 03 Tastatur/Anzeige-Schnittstelle (IC 8279)
- 04 … 07 Parallel-Schnittstelle (IC 8255)
- 08 … 0B Einzelschritt-Zähler (IC 74LS73)
- 0C … 0F 8-Bit Parallel-Port (IC 74LS244/74LS373)
- 10 … 17 Benutzer-Anzeige (IC 74C917)
- 18 … 1C Serielle Schnittstelle (IC 8251)
- 1D … 1F Decodierte Adresse auf ECB Bus
- 20 EPROM-Daten (IC 8255)
- 21 … 22 EPROM Adressen (IC 8255)
- 23 Steuerwort (IC 8255)
- 24 Typumschaltung (IC 74LS373)
---------------------------------------------------------------------------- Adresse Objekt-Code Zeile Marke Quell-Code Kommentar ---------------------------------------------------------------------------- 1200 1 ORG 1200H Programm-Startadresse 2 Freizeile 1200 DB 0C 3 START: IN A,(0C) Daten einlesen (8xBinärschalter) 1202 D3 0C 4 OUT (0C),A Daten ausgeben (8xLED) 1204 76 5 HALT Programm anhalten ----------------------------------------------------------------------------
Binärzähler mit Pause (Startadresse 1000H)
Speicherbelegung
| Adresse | Hex | Bedeutung |
|---|---|---|
| 1000 | 3E | LD A,nn |
| 1001 | 00 | Startwert |
| 1002 | D3 | OUT |
| 1003 | 0C | LED Port |
| 1004 | 06 | LD B,nn |
| 1005 | FF | Delaywert |
| 1006 | 10 | DJNZ |
| 1007 | FE | zurück zu 1006 |
| 1008 | 3C | INC A |
| 1009 | 18 | JR |
| 100A | F7 | zurück zu 1002 |
Binärzähler mit einstellbarer Geschwindigkeit
Startadresse 1000H
Speicher
| Adresse | Hex | Bedeutung |
|---|---|---|
| 1000 | 0E | LD C,nn |
| 1001 | 00 | Startwert |
| 1002 | 79 | LD A,C |
| 1003 | D3 | OUT |
| 1004 | 0C | LED Port |
| 1005 | DB | IN |
| 1006 | 0C | Schalter lesen |
| 1007 | 47 | LD B,A |
| 1008 | 10 | DJNZ |
| 1009 | FE | Delay |
| 100A | 0C | INC C |
| 100B | 18 | JR |
| 100C | F4 | zurück zu 1002 |
Binärzähler mit doppelter Warteschleife
Startadresse 1000H
| Adresse | Hex | Bedeutung |
|---|---|---|
| 1000 | F3 | DI – Interrupts aus |
| 1001 | 0E | LD C,nn |
| 1002 | 00 | LED-Startwert |
| 1003 | DB | IN |
| 1004 | 0C | Schalter lesen |
| 1005 | 47 | LD B,A |
| 1006 | 79 | LD A,C |
| 1007 | D3 | OUT |
| 1008 | 0C | LED ausgeben |
| 1009 | 16 | LD D,nn |
| 100A | FF | innerer Delay |
| 100B | 15 | DEC D |
| 100C | 20 | JR NZ |
| 100D | FD | zurück zu 100B |
| 100E | 10 | DJNZ |
| 100F | F9 | zurück zu 1009 |
| 1010 | 0C | INC C |
| 1011 | C3 | JP |
| 1012 | 03 | Adresse |
| 1013 | 10 | 1003 |
2️⃣ Schalter → invertierte LED
Sehr gut für Logikübungen.
Speicher
| Adresse | Hex | Bedeutung |
|---|---|---|
| 1000 | DB | IN |
| 1001 | 0C | Schalter |
| 1002 | 2F | CPL |
| 1003 | D3 | OUT |
| 1004 | 0C | LED |
| 1005 | C3 | JP |
| 1006 | 00 | Adresse |
| 1007 | 10 | 1000 |
3️⃣ LED-Lauflicht
Jetzt ebenfalls ab 1000H.
Speicher
| Adresse | Hex | Bedeutung |
|---|---|---|
| 1000 | 3E | LD A |
| 1001 | 01 | Startbit |
| 1002 | D3 | OUT |
| 1003 | 0C | LED |
| 1004 | 07 | RLCA |
| 1005 | 20 | JR NZ |
| 1006 | FB | Sprung zurück |
| 1007 | C3 | JP |
| 1008 | 02 | Adresse |
| 1009 | 10 | 1002 |
Z80 Programm
Simulation der Logik-Karte „Logische Verknüpfungen 1 – System 0“
System: DAG MP-Lernsystem
Startadresse: 1100H
Funktion
Die Schalter werden logisch ausgewertet und auf bestimmte LEDs ausgegeben.
| Funktion | Schalter | LED |
|---|---|---|
| UND F=a∧b∧cF = a ∧ b ∧ c | linke 3 Schalter | 2. LED von links |
| NEGATION F=¬aF = ¬a | mittlerer Schalter | 4. LED von links |
| ODER F=a∨b∨cF = a ∨ b ∨ c | rechte 3 Schalter | 7. LED von links |
Interrupts werden abgeschaltet, damit der Monitor nicht in die LED-Anzeige eingreift.
Hex-Programm (ab Adresse 1100H)
| Adresse | Hex | Bedeutung |
|---|---|---|
| 1100 | F3 | DI – Interrupts aus |
| 1101 | DB | IN |
| 1102 | 0C | Schalter lesen |
| 1103 | 5F | LD E,A |
| 1104 | 16 | LD D,nn |
| 1105 | 00 | Ausgangsregister löschen |
| 1106 | 7B | LD A,E |
| 1107 | E6 | AND |
| 1108 | E0 | Maske Bits 7..5 (UND) |
| 1109 | FE | CP |
| 110A | E0 | alle drei =1 ? |
| 110B | 20 | JR NZ |
| 110C | 04 | Sprung |
| 110D | 7A | LD A,D |
| 110E | F6 | OR |
| 110F | 40 | LED Bit6 setzen (2. von links) |
| 1110 | 57 | LD D,A |
| 1111 | CB | BIT |
| 1112 | 63 | BIT 4,E (Negation-Schalter) |
| 1113 | 20 | JR NZ |
| 1114 | 04 | Sprung |
| 1115 | 7A | LD A,D |
| 1116 | F6 | OR |
| 1117 | 10 | LED Bit4 setzen (4. von links) |
| 1118 | 57 | LD D,A |
| 1119 | 7B | LD A,E |
| 111A | E6 | AND |
| 111B | 07 | Maske Bits 0..2 (ODER) |
| 111C | 28 | JR Z |
| 111D | 04 | Sprung |
| 111E | 7A | LD A,D |
| 111F | F6 | OR |
| 1120 | 02 | LED Bit1 setzen (7. von links) |
| 1121 | 57 | LD D,A |
| 1122 | 7A | LD A,D |
| 1123 | D3 | OUT |
| 1124 | 0C | LED anzeigen |
| 1125 | C3 | JP |
| 1126 | 01 | |
| 1127 | 11 | zurück zu 1101 |
