Willkommen

Hier moechte ich einige interessante Projekte vorstellen.

Disclaimer:

Alle Angaben ohne jede Gewaehr. Nutzung auf eigenes Risiko. Ich bin nicht fuer den Inhalt von verlinkten Seiten verantwortlich. Sollten auf einer verlinkten Seite fragwuerdige Inhalte sein, so bitte ich um kostenfreie Mitteilung. Ich werde diese Links dann umgehend entfernen. Sollte jemand ebendso ein Problem mit dem Inhalt meiner Seiten sehen, so bitte ich genauso um Mitteilung. Bei berechtigten Einwaenden, werde ich diese Inhalte ebenfalls sofort entfernen. Diese Website verfolgt keinerlei kommerzielle Interessen! Das ggf. Copyright liegt bei den Copyright Inhabern. Genauso liegen ggf. Markennamen bei den entsprechenden Markenrechtsinhabern. Die hier zur Verfuegung gestellten Informationen dienen nur dem Erhalt und der Verbreitung von Wissen!

Impressum:

Peter Sieg - Rabishauerstr. 9 - 37603 Holzminden - Germany
Peter (dot) Sieg2 (at) gmx (dot) de



Software

Alle Dateien zum Download sind unter: https://github.com/petersieg/Mini-Z80 zu finden:
Die beschriebenen Testprogramme sind im z80 mini software.zip

Als Assembler diente der Arnold Assembler: http://john.ccac.rwth-aachen.de:8000/as/

Batch-Datei zum assemblieren:

..\as\bin\as %1 -L

..\as\bin\p2bin %1 -r $-$

Unter Linux ist auch schön geeignet Z80-ASM:

http://wwwhomes.uni-bielefeld.de/achim/z80-asm.html

z80-asm -l test3.asm :test.z80 >test3.lst

Die Datei *.z80 enthält einen 10 Byte Header, den man vor dem Brennen in einem Eprom noch entfernen muss!

#!/bin/sh
dd if=$1.z80 of=$1.bin bs=1 skip=10

File Extensionen (.asm u. .z80) müssen angegeben werden!

Das Paket hat mit z80-mon auch einen schönen Simulator/Debugger.

b2s.c compiliert wandelt eine Binärdatei in Hex-Kommandos für den Arduino Mega EEprommer:

b2s test3.bin >test3.eep => (Waaa:dddddddd...)

Damit kann man auch ohne EEprommer.exe oder Python Script ein Eprom z.B. mittels minicom brennen. (Datei einfügen)

Z80 Tester

Nach Thomas Scherrer

Hier ist die Quelle der minimalen Schaltung um einen Z80 zu testen:
http://www.z80.info/z80test0.htm

Funktion:
Ueber CD4093 wird per Nand-Oszillator ein Takt erzeugt und an Pin 6 der Z80 CPU eingespeist. C ist hier 2,2uF und R ist 27k. Z80 wird an Pin 11 mit +5V und an Pin 29 mit GND versorgt. Pin 16+17 und 24+25 müssen ebenfalls an +5V gelegt werden. An D0 - D7 (Pin 7-10 und 12-15) liegt über hier 560 Ohm GND an. Dies entspricht dem NOP Befehl des Z80. An A0-A2 (Pin 30-32) sieht man über 560 Ohm geschaltete rote LED's gegen GND, die Adressierung. Nach Reset (an Pin 26) gegen GND (Pin 26 über 560 Ohm gegen +5V) beginnt die Z80 CPU an Adresse 0
den Befehl zu lesen. NOP = No operation = weiter mit naechster Adresse. Da immer nur NOP gelesen wird, geht es so weiter bis Adresse $FFFF und beginnt dann wieder von vorne.

Lochrasteraufbau:


Minimales Z80 System


Nach dem Z80 Tester wollte ich schon lange mal ein richtiges, minimales Z80 System (Einplatinencomputer) bauen.
Ein bestimmtes Ziel sollte das System nicht verfolgen. Hauptsache Z80, Rom, Ram und I/O.
Ideal zum reinschnuppern und um ggf. mal spaeter mit Logikanalyzer dran zu arbeiten. Trotz alle dem, kann man schon ein Menge aus so einem kleinem System
herausholen. Wuerfel; Mastermind; 4 gewinnt oder im Prinzip sogar ein Schachspiel sollten moeglich sein.

In der Lektuere "Mikrocomputer selbstgebaut und programmiert" von Rolf Dieter Klein (SEHR empfehlenswert!) und verschiedenen Z80 Systemen aus dem
Internet (http://www.z80.info/z80_mp.htm), habe ich mich zu folgender Startkonfiguration entschieden.
Z80 CPU (Pin 16,17,24,25 der Z80 CPU an +5V legen - und GND + VCC ebenfalls nicht vergessen)
4093 Oszillator (R=10k; C=1nf; f=ca. 500khz)
Rom = 27C256 32k Eprom
Ram = 62256 32k SRam

4093 Oszillator:


Mit A15 kenn direkt selektiert werden, ob Rom (A15=0) oder Ram (A15=1) angesprochen werden soll. Zur Selektion habe ich /MREQ + A15 ueber 74HCT32
und einem Inverter aus 4093 wie folgt verschaltet:



Um nicht unnötige Leitungen von Z80 zu Rom UND Ram extra legen zu müssen, bin ich bei dem SRam von altem Cache SRam in schmaler Bauform ausgegangen
und konnte so das SRam innerhalb des Romsockels packen und die korrespondierenden Leitungen (D0 - D7; A0 - A13) direkt über eine Lötbrücke verbinden.
Lediglich A14, /OE, /CE, /WE, VPP müssen getrennt bleiben und separat angesteuert werden.

Bild der Daten- und Adressbusverbindungen von Lötseite betrachtet!:



Aufbaubild Top 1:


Unterseite 1 - Spannungen + Takt:


Unterseite 2 - Rom/Ram Selekt:


Unterseite 3 - Datenleitungen D0 - D7:


Unterseite 4 - Adressleitungen:


Top 2 - Fertig:


Zum ersten Test habe ich ein Eprom gebrannt mit lauter 00 (NOP) bis auf am Ende 16 x $76 (HALT). Die gruene LED zeigt +5V an. Die rote LED den /HALT Zustand.
Diese sollte bei 500khz und knapp 32760 NOP's nach ca. 1-2s leuchten (Nach Reset). Aber nichts..??
Habe mir dann ein NOP Stecker gebaut mit Blink-LED an A3 und durch Parallelschaltung des 10nF mit 1,5uF den Takt auf wenige Hz stark verlangsamt..
die Blink-LED blinkte auch brav.. alle Verbindungen mehrfach kontolliert.. kein Fehler zu finden.. erstmal zur Seite gelegt fuer ein paar Tage
(das ist immer genau das Richtige in so einem Fall!!).

Hatte ich die rote LED selbst geprueft und Masse unten dran gehalten.. LED leuchtete = alles ok.. dann spaeter hatte ich das Problem gefunden..
alles lief bestens, nur die LED hatte keine leitende Verbindung zum /HALT Pin der Z80!
Mist! War so direkt nicht zu sehen (und meine Augen sind leider auch nicht mehr die besten..).

Soweit so gut.. bis hierhin scheint es ersteinmal zu laufen..

Schritt 2 - SRam:

SRam bestücken und Ram Testprogramm im Eprom brennen.
Wenn Ram nicht ok, /HALT ansonsten immer wieder Ram testen (nur 1 Zelle)..
Als Lebenszeichen aktiviere ich /IORQ und zeige das ueber eine gelbe LED an.

Code:
       1/       0 :                         CPU Z80
       2/       0 :                         org 0
       3/       0 :                     
       4/       0 :                   start:
       5/       0 : 21 00 80                ld hl,8000h
       6/       3 :                         
       7/       3 : 3E 55                   ld a,55h
       8/       5 : 77                      ld (hl),a
       9/       6 : 7E                      ld a,(hl)
      10/       7 : FE 55                   cp 55h
      11/       9 : C2 1A 00                jp nz,fail
      12/       C :                     
      13/       C : 3E AA                   ld a,0aah
      14/       E : 77                      ld (hl),a
      15/       F : 7E                      ld a,(hl)
      16/      10 : FE AA                   cp 0aah
      17/      12 : C2 1A 00                jp nz,fail
      18/      15 :                     
      19/      15 : DB 00                   in a,(0)    ; show some heartbeat at /IORQ
      20/      17 :                     
      21/      17 : C3 00 00                jp start
      22/      1A :                     
      23/      1A : 76                fail: halt
      24/      1B :                     
      25/      1B :                         end

Schritt 3 - I/O - Output:


Output ueber 8-fach Tristate Latch 74HCT374 (74HCT373 geht auch), gesteuert ueber /IORQ + /WR. D0-D6 über 560Ohm Widerstaende an eine 7 Segment LED Anzeige
mit gemeinsamer Anode. /OE des 74LS374 fest auf GND. Selektsignal an CP/CLK Pin 11.

Selektion:



7-Segment Display:


Top 3:


Bottom 5 - Stromversorgung + Selektion:


Bottom 6 - D0-D6 und Q0-Q6:

Ramtest mit Zaehler (1x Ramtest 8000h - ffffh ca. 1,x min):

       1/       0 :                         cpu z80
       2/       0 :                         org 0
       3/       0 : 01 36 00       init:    ld bc,led0    ;bc points to ledn
       4/       3 : 16 0B                   ld d,10       ;count runs 0-9 loop
       5/       5 : 0A                      ld a,(bc)
       6/       6 :                     ;    ld a,(led0)  ;11000000b
       7/       6 : D3 00                   out (0),a
       8/       8 :                start:
       9/       8 : 21 00 F0                ld hl,08000h  ;mem start
      10/       B :                ramtst:
      11/       B : 3E 55                   ld a,55h
      12/       D : 77                      ld (hl),a
      13/       E : 7E                      ld a,(hl)
      14/       F : FE 55                   cp 55h
      15/      11 : C2 35 00                jp nz,fail
      16/      14 : 3E AA                   ld a,0aah
      17/      16 : 77                      ld (hl),a
      18/      17 : 7E                      ld a,(hl)
      19/      18 : FE AA                   cp 0aah
      20/      1A : C2 35 00                jp nz,fail
      21/      1D :                     
      22/      1D : 23                      inc hl        ;mem end ffffh -> 0
      23/      1E : 7C                      ld a,h
      24/      1F : FE 00                   cp 0
      25/      21 : C2 0B 00                jp nz,ramtst
      26/      24 : 7D                      ld a,l
      27/      25 : FE 00                   cp 0
      28/      27 : C2 0B 00                jp nz,ramtst
      29/      2A :                     
      30/      2A : 15                      dec d
      31/      2B : CA 00 00                jp z,init
      32/      2E : 03                      inc bc        ;bc points no next ledn code
      33/      2F : 0A                      ld a,(bc)
      34/      30 : D3 00                   out (0),a
      35/      32 : C3 08 00                jp start
      36/      35 :                     
      37/      35 : 76              fail:   halt
      38/      36 :                     
      39/      36 :                     
      40/      36 : C0              led0:    defb  11000000b     ; 0: c0h a, b, c, d, e, f
      41/      37 : F9              led1:    defb  11111001b     ; 1: f9h b, c
      42/      38 : A4              led2:    defb  10100100b     ; 2: a4h a, b, d, e, g
      43/      39 : B0              led3:    defb  10110000b     ; 3: b0h a, b, c, d, g
      44/      3A : 99              led4:    defb  10011001b     ; 4: 99h b, c, f, g
      45/      3B : 92              led5:    defb  10010010b     ; 5: 92h a, c, d, f, g
      46/      3C : 82              led6:    defb  10000010b     ; 6: 82h a, c, d, e, f, g
      47/      3D : F8              led7:    defb  11111000b     ; 7: f8h a, b, c
      48/      3E : 80              led8:    defb  10000000b     ; 8: 80h a, b, c, d, e, f, g
      49/      3F : 90              led9:    defb  10010000b     ; 9: 90h a, b, c, d, f, g
      50/      40 :                     
      51/      40 :                          end



Video mit Zeichenausgabe ueber 7-Segment:
http://www.youtube.com/watch?v=TbLTadpb3Zg


Schritt 4 - I/O - Input:

Ueber 1/4 7432 and /RD und /IORQ an Tristate Treiber 74LS244 Pin 1+19.


Selektion:


Bild von unten: (was fuer ein Drahtverhau)


Bild von oben (nun fertiges Mini-Z80 System mit 32k Rom, 32k Ram und 8-bit Output und 8-bit Input):



I/O-Testprogramm:

       1/       0 :                      CPU Z80
       2/       0 :                      org 0
       3/       0 :                    
       4/       0 :               start:
       5/       0 : DB 00                in a,(0)
       6/       2 : D3 00                out (0),a
       7/       4 : C3 00 00             jp start
       8/       7 :                    
       9/       7 :                      end

Eagle Dateien: Z80 mini pcb corrected.zip

Test Software: Z80 mini software.zip

Die erste Platine enthielt mehrere Fehler! Irgendwie meinte Eagle +5V und GND an der Z80 CPU vertauschen zu müssen.
Das obige ZIP enthaelt eine korrigierte Fassung

7-Segmentanzeige:
Ich habe von Conrad: Kingbright: SA36-11GWA gruen und SA36-11SRWA rot verwendet (gemeinsame Anode). Bauform ist etwas zu schmal, daher muessen die Pin's etwas nach aussen gebogen werden. Die Einzel-LED's mit der Anode zum Platinenrand.

Eagle3d Bild:


Fertige Platine von oben:



Pin-Belegungen:Z80 CPU
Pin-Belegungen:Z80 CPU

     +--()--+
 A11 | 1  40| A10
 A12 | 2  39| A9
 A13 | 3  38| A8
 A14 | 4  37| A&
 A15 | 5  36| A6
 (|) | 6  35| A5
  D4 | 7  34| A4
  D3 | 8  33| A3
  D5 | 9  32| A2
  D6 |10  31| A1
 +5V |11  30| A0
  D2 |12  29| GND
  D7 |13  28| RFSH
  D0 |14  27| M1
  D1 |15  26| RESET
 INT |16  25| BUSRQ
 NMI |17  24| WAIT
HALT |18  23| BUSAK
MREQ |19  22| WR
IORQ |20  21| RD
     +------+


4093
Quad 2-input NAND gates with schmitt-trigger inputs.
0.9V typical input hysteresis at VCC=+5V and 2.3V at VCC=+10V.

    +----------+             +----------------+          __
 1A |1  +--+ 14| VCC         | A | B | AB | Y |      Y = AB
 1B |2       13| 4B          |---+---+----+---|
 1Y |3       12| 4A          | 0 | 0 |  0 | 1 |
 2Y |4  4093 11| 4Y          | 0 | 1 |  0 | 1 |
 2A |5       10| 3Y          | 1 | 0 |  0 | 1 |
 2B |6        9| 3B          | 1 | 1 |  1 | 0 |
GND |7        8| 3A          +----------------+
    +----------+

200001/JvG, changed it to make it easier to understand.

[This information is part of the GIICM]

7432
Quad 2-input OR gates.
    +----------+             +-----------+
 1A |1  +--+ 14| VCC         | A | B | Y |       Y = A+B
 1B |2       13| 4B          |---+---+---|
 1Y |3       12| 4A          | 0 | 0 | 0 |
 2A |4  7432 11| 4Y          | 0 | 1 | 1 |
 2B |5       10| 3B          | 1 | 0 | 1 |
 2Y |6        9| 3A          | 1 | 1 | 1 |
GND |7        8| 3Y          +-----------+
    +----------+

74244
8-bit 3-state buffer.

    +---\/---+
 1 -|/OE  Vcc|- 20
 2 -|1A0 2/OE|- 19
 3 -|2Y0  1Y0|- 18
 4 -|1A1  2A0|- 17
 5 -|2Y1  1Y1|- 16
 6 -|1A2  2A1|- 15
 7 -|2Y2  1Y2|- 14
 8 -|1A3  2A2|- 13
 9 -|2Y3  1Y3|- 12
10 -|gnd  2A3|- 11
    +--------+


74374
8-bit 3-state D flip-flop.

    +----------+             +---------------+
/OE |1  +--+ 20| VCC         |/OE|CLK| D | Q |
 Q1 |2       19| Q8          |---+---+---+---|
 D1 |3       18| D8          | 1 | X | X | Z |
 D2 |4       17| D7          | 0 | / | 0 | 0 |
 Q2 |5   74  16| Q7          | 0 | / | 1 | 1 |
 Q3 |6  374  15| Q6          | 0 |!/ | X | - |
 D3 |7       14| D6          +---------------+
 D4 |8       13| D5
 Q4 |9       12| Q5
GND |10      11| CLK
    +----------+


61256/62256 32Kx8 SRAM DIP28(S)
    +--()--+
A14 | 1  28| Vcc
A12 | 2  27| /WE
 A7 | 3  26| A13
 A6 | 4  25| A8
 A5 | 5  24| A9
 A4 | 6  23| A11
 A3 | 7  22| /OE
 A2 | 8  21| A10
 A1 | 9  20| /CS
 A0 |10  19| D7
 D0 |11  18| D6
 D1 |12  17| D5
 D2 |13  16| D4
Gnd |14  15| D3
    +------+


27(C)256  32kx8  EPROM.
    +------------+
VPP |1   +--+  28| VCC
A12 |2         27| A14
 A7 |3         26| A13
 A6 |4         25| A8
 A5 |5         24| A9
 A4 |6         23| A11
 A3 |7  27256  22| /OE
 A2 |8         21| A10
 A1 |9         20| /CE
 A0 |10        19| D7
 D0 |11        18| D6
 D1 |12        17| D5
 D2 |13        16| D4
GND |14        15| D3
    +------------+

Z80 Board Recycled


Im Juli 2013 bekam ich 5 Z80 Boards aus ausgeschlachteten Geräten.
Ich dachte mir, evtl. kann man die auch analog dem minimalen Z80 System umbauen, bzw. aehnlich verwenden.

Die Boards haben:

Siehe Bild:

Bei einem 27C256 = 32k Eprom dachte ich mir, das die Adressaufteilung Rom/Ram evtl. aehnlich meinem Mini Z80 System sein könnte und an A15 festgemacht wird. Und genau so war es auch.

A15 geht an Pin4 des 7432. /MREQ an Pin5. Pin6 geht an Eprom /CE
A15 geht über 7414 Inverter an Pin1 7432. /MREQ an Pin2 des 7432. Pin3 and /CS des 6116 SRam's. Das 2k Ram wird halt 16x gespiegelt im 32k Adressbereich.

Siehe Skizze:

Ich habe dann mal den Ramtest meines Mini Z80 etwas umgebaut, sodas
ebenfalls bei einem Ramfehler /HALT angesprungen wird und ansonsten durch out (n),a das /IORQ Signal 'belebt' wird.


 	    cpu z80 
	    org 0

init:	ld d,9		;count runs 9..0 loop	
ld 	    a,d        
	    out (0),a

start:	ld hl,08000h	;mem start

ramtst:	ld a,55h	
	    ld (hl),a        
	    ld a,(hl)        
	    cp 55h        
	    jp nz,fail        
	    out (1),a	;show some heartbeat at IORQ        
	    ld a,0aah        
	    ld (hl),a        
	    ld a,(hl)        
	    cp 0aah        
	    jp nz,fail        
	    out (1),a	;show some heartbeat at IORQ        
	    inc hl		;mem end ffffh -> 0        
	    ld a,h        
	    cp 0        
	    jp nz,ramtst        
	    ld a,l        
	    cp 0        
	    jp nz,ramtst	
	    dec d	
	    jp z,init        
	    jp start

fail:   halt        

	    end


Power = gruene LED
/IORQ = gelbe LED
/HALT = rote LED

Nach anlegen der Versorgungsspannung leuchtet die gruene LED ;-)
Die gelbe leuchtet schwach (viele kurze IO Impulse).
Wenn man nun die Datenleitungen des SRam's etwas durcheinander bringt (2 Beine kurzschliessen), geht die rote LED an (=/HALT) und die gelbe ist aus.

Hieraus kann man direkt einen 6116 Ram und einen Z80 Tester bauen, indem
man beide Bausteine sockelt. Den SIO kann man entfernen und sockeln, um dort z.B Signale abzugreifen.

Auch die Erweiterung um ein 8-bit Latch (74374) und 7-Segment Anzeige, um z.B Nachrichten auszugeben sollte relativ einfach möglich sein.


Meine Buecher

Dieses und mein 2tes Buch wurde im Januar 2016 unter CC-BY-SA freigebene im ODT+PDF Format und sind zu beziehen unter:


Retro-Computing

Simulation-Emulation

und


aminet.net/package/docs/hard/Retro-Computing

aminet.net/package/docs/hard/Simulation-Emulation


Commodore-Hardware-Retrocomputing. 25 Jahre nach C64 & Co.: C64 und A500 reparieren, warten und erweitern


3. A. DIN A5. Paperback. 164 Seiten. Mehr als 150 Fotos und Abbildungen. Autor: Peter Sieg. ISBN 978-3-938199-13-8. 14,80 ?


Vor 25 Jahren hatten viele Teenager ihre erste Beruehrung mit einem Computer meist in Form eines C64. Einige der damaligen Teenies halten ihm und seinem Nachfolger, dem Amiga, auch heute noch die Treue. Peter Sieg ist einer von ihnen. In diesem Buch zeigt er auf, wie man defekte C64 repariert, wie man die Rechner fachgerecht saeubert und von Gilb befreit, ROMs sinnvoll durch EPROMs ersetzt, SID-Karten an den C64 anschliesst und gibt viele weitere Tipps, damit die Computer laenger leben.. Ein besonderes Bonbon sind die Tipps, wie man TFT-Monitore und PC-Maeuse an einen Amiga 500 anschliesst. Tipps und Anregungen, was man mit dem Minimig und dem C64DTV alles anstellen kann, runden das Buch ab. Die dritte Auflage wurde stark erweitert und enthaelt jetzt noch mehr Informationen, Tipps und Bastelanregungen rund um die Commodore-Rechner.

http://www.skriptorium-vd.de/