Forum: Projekte & Code ZAtmel: ein minimalistisches Z80-System


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Steffen S. (bitmaster)


Angehängte Dateien:

Lesenswert?

Da heute Nikolaus ist, gibt es eine neue Version. Ich habe die 
Resetlogik entfernt, dass übernimmt jetzt der ATMega.
Jetzt sind es tatsächlich nur noch 2 Schaltkreise :)
An den TX/RX-Pins habe ich ein CP2104 USB-to-Serial Adapter 
angeschlossen (19200 Baud).
ZAtmel: ein minimalistisches Z80-System

: Bearbeitet durch User
von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jetzt nur noch RAM drauf, dann sind wir hier:
Beitrag "Z180-Stamp Modul"

von Jens (Gast)


Lesenswert?

Joe G. schrieb:
> Jetzt nur noch RAM drauf
Wenn ich das richtig sehe, übernimmt hier der ATmega RAM und ROM.
Verkehrte Welt würde ich sagen...

von tom16 (Gast)


Lesenswert?

Joe G. schrieb:
> Jetzt nur noch RAM drauf, dann sind wir hier:
> Beitrag "Z180-Stamp Modul"

oder hier:

http://www.projekte.daleske.de/cpm/06_z80hwe/cpm_z80hwe.htm

von chris_ (Gast)


Lesenswert?

Hi Steffen,

mir gefällt Dein minimalistisches System sehr gut. Vielleicht braucht es 
noch irgend eine Schnittstelle, damit man Programme vom PC herunterladen 
kann.

Wieviel MIPS hat Dein Z80 in der Konfiguration?

von Detlef K. (adenin)


Lesenswert?

Die neue Reset-Logik gefällt mir.
Man muss eben wissen, wozu man Dinge missbrauchen kann.
***thumbs up***
:)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jens schrieb:
> Wenn ich das richtig sehe, übernimmt hier der ATmega RAM und ROM.
> Verkehrte Welt würde ich sagen...

Nun, er übernimmt nicht nur RAM und ROM sondern ist auch PIO, SIO, CTC 
und was du noch so möchtest. Weiterhin spart man sich den ROM neu zu 
brennen. Der AVR bringt das Z80 Programm über eine ihm genehme 
Schnittstelle in den RAM.

von Steffen S. (bitmaster)


Lesenswert?

chris_ schrieb:

> Wieviel MIPS hat Dein Z80 in der Konfiguration?
Der Z80 hat kaum MIPS ;-), der läuft mit 2,5 Mhz.

von Steffen S. (bitmaster)


Lesenswert?

> mir gefällt Dein minimalistisches System sehr gut. Vielleicht braucht es
> noch irgend eine Schnittstelle, damit man Programme vom PC herunterladen
> kann.
Leider sind keine Ports/Pins mehr frei. Es bleibt nur die eine USART. 
Man könnte darüber sicher was hoch/runterladen.

von Steffen S. (bitmaster)


Lesenswert?

Detlef Kunz schrieb:
> Die neue Reset-Logik gefällt mir.
> Man muss eben wissen, wozu man Dinge missbrauchen kann.
> ***thumbs up***
> :)

Ich habe mich riesig gefreut als ich doch noch ein Output-Pin gefunden 
habe ;)
Aber schade, 1 Port mehr wäre wirklich schön...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Steffen S. schrieb:
> Aber schade, 1 Port mehr wäre wirklich schön...

Vielleicht ein ATMEGA1281 ?

von anonym (Gast)


Lesenswert?

Coole Sache. Habe zufaellig in etwa das gleiche vor mir auf einem 
Steckbrett auf dem Tisch stehen. Der Atmega ist bei mir auch RAM/ROM und 
IO zugleich. Software ist aber noch nicht fertig.

von anonym (Gast)


Lesenswert?

Achja: Du kannst noch zwei Pins am Adressbus entfernen da der ATmega ja 
nur 16 Kb RAM hat wirst du sicher nicht mehr simulieren.

von anonym (Gast)


Lesenswert?

Leider doch nicht. Im Wiki habe ich gerade gesehen du simulierst noch 
48k ROM.

von Steffen S. (bitmaster)


Lesenswert?

Joe G. schrieb:
> Steffen S. schrieb:
>> Aber schade, 1 Port mehr wäre wirklich schön...
>
> Vielleicht ein ATMEGA1281 ?

leider nur 16 MHz (und 8 kByte RAM)

von ffd (Gast)


Lesenswert?

Hallo,
ich habe gestern dein Projekt entdeckt und versuche den Code zu 
verstehen. Die Idee den Pinstatus als Sprungziel zu benutzen ist mir 
soweit klar. Innerhalb deiner Macros wird es aber etwas unklar.

Erste wird die entsprechende Aktion durchgefuehrt dann mit NOPs 
gewartet. Die Anzahl NOPs sollte nach meiner Rechnung einem Takt des Z80 
entsprechen!? Anschließend wird der Datenbus wieder freigegeben und 
Abhängig vom Z80-status in den nächsten Codeteil gesprungen.

Gehst du dabei davon aus das der Takt immer. Synchron ist und du somit 
Taktgenau deine Aktionen durchführen kannst? Warum brauchst du die 
speziellen M1 macros?

Grüße, ffd.

von Harald N. (Gast)


Lesenswert?

Gibt's auch einen Quellcode zum Z80-Programm?

von ffd (Gast)


Lesenswert?

Harald Nagy schrieb:
> Gibt's auch einen Quellcode zum Z80-Programm?

Noch jemand der der es genauer wissen will! Vielleicht findet er ja bald 
mal die Zeit zu antworten.

von Jens (je-go)


Lesenswert?

Ich finde dieses Projekt sehr interessant und minimalistisch. Nur leider 
schaffe ich es nicht, den Assemblercode zu compilieren. AVR-Studio und 
Microchip steigen mit Fehlermeldungen aus. Zudem bin ich in Assembler 
noch ziemlich neu und das sieht mir doch sehr speziell aus. Vielleicht 
hat ja jemand hier im Forum oder der Programmierer ein paar Tipps parat 
:-).
Würde mich sehr darüber freuen um weiter in die Welt der Microcontroller 
einzusteigen.

von Clemens S. (zoggl)


Lesenswert?

Jens schrieb:
> AVR-Studio und
> Microchip steigen mit Fehlermeldungen aus

Tipp Nr1: schreibe möglichst viele Details.

Beispiel: Poste die Fehlermeldung.

Tipp Nr2: verwende das richtige Format:

https://www.mikrocontroller.net/articles/Formatierung_im_Forum

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>> Wenn ich das richtig sehe, übernimmt hier der ATmega RAM und ROM.
>> Verkehrte Welt würde ich sagen...
>
> Nun, er übernimmt nicht nur RAM und ROM sondern ist auch PIO, SIO, CTC
> und was du noch so möchtest.

Eher nicht oder nur rudimentär, weil das Interruptsystem resp. die 
Leitungen dafür nicht gezogen sind. Ebenso IORQ.

Da mal ein Stück kleine SIO/CTC: 
https://smallcomputercentral.com/wp-content/uploads/2018/10/sc110-v1-1-sio2ctc-schematic.pdf

Also IMHO ist das Ganze unterhalb IO-fähiges-Minimalsystem und damit ein 
typisches Beispiel von "Kaputt gespart".

Und der Sinn hinter der offenen WR-Leitung ist auch nicht ersichtlich.

: Bearbeitet durch User
Beitrag #7831230 wurde vom Autor gelöscht.
von Jens (je-go)


Lesenswert?

Bradward B. schrieb:
>>> Wenn ich das richtig sehe, übernimmt hier der ATmega RAM und
> ROM.
>>> Verkehrte Welt würde ich sagen...
>>
>> Nun, er übernimmt nicht nur RAM und ROM sondern ist auch PIO, SIO, CTC
>> und was du noch so möchtest.
>
> Eher nicht oder nur rudimentär, weil das Interruptsystem resp. die
> Leitungen dafür nicht gezogen sind. Ebenso IORQ.
> Da mal ein Stück kleine SIO/CTC:
> 
https://smallcomputercentral.com/wp-content/uploads/2018/10/sc110-v1-1-sio2ctc-schematic.pdf
> Also IMHO ist das Ganze unterhalb IO-fähiges-Minimalsystem und damit ein
> typisches Beispiel von "Kaputt gespart".
> Und der Sinn hinter der offenen WR-Leitung ist auch nicht ersichtlich.

Du bist so wie ich das sehe der Meinung, das dieses System so garnicht 
lauffähig ist?

von Thomas W. (Gast)


Lesenswert?

Die Thread-Leiche funktioniert nicht so einfach, da /IOREQ und der 
/BUSREQ die so im Raum haengen, macht es schon "schwierig". Der 
nicht-vorhandene RAM macht es auch nicht einfacher (der ATMega1284 hat 
zwar 16kb RAM, aber da auch das /WAIT ignoriert wird wuesste ich nicht, 
wie man dieses Ding zum fliegen bringen kann).

Vermutlich musst Du auch eine CMOS-Z80-CPU verwenden: die NMOS haben 
eine Mindestfrequenz von ca. 100kHz (gucke ins Datenblatt der Z80).

Wenn Du wirklich Interesse an einer Z80-Maschine mit 128kB RAM, 
Massenspeicher (SD-Card) und so hast: Der 4IC-Z80-Computer 
https://hackaday.io/project/19000-a-4-4ics-z80-homemade-computer-on-breadboard. 
Ein schoenen fertigen Bausatz (mit PCB und Firmware) findest Du unter 
https://github.com/SuperFabius/Z80-MBC2

Ich habe hier einen auf dem Schreibtisch, CP/M ist so schoen primitiv, 
das kannst Du mit dem Hirnstamm durchdringen. Wenn man alle Teile kaufen 
muss, ist man bei ca. 50EUR (z.b. ein Haendler aus Italien: 
https://shop.mcjohn.it/en/diy-kit/22-kit-z80-mbc2.html)

Gruesse

Th.

P.S.: RC2014 waere auch noch ein Kandidat: https://rc2014.co.uk/ 
Platinen kann man auf ebay finden.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>>>  auch PIO, SIO, CTC
>>> und was du noch so möchtest.
>>
>> Eher nicht oder nur rudimentär, weil das Interruptsystem resp. die
>> Leitungen dafür nicht gezogen sind. Ebenso IORQ.

>> Also IMHO ist das Ganze unterhalb IO-fähiges-Minimalsystem und damit ein
>> typisches Beispiel von "Kaputt gespart".
>> Und der Sinn hinter der offenen WR-Leitung ist auch nicht ersichtlich.
>
> Du bist so wie ich das sehe der Meinung, das dieses System so garnicht
> lauffähig ist?

Definiere "lauffähig" ?!
Ein Z80 "läuft" auch mit einer NOP-MIMIK am Datenbus hoch:
* 
https://www.makerhacks.com/wp-content/uploads/2024/01/IMG_4610-1024x631.avif
* https://www.makerhacks.com/homebrew-z80-on-breadboard/

Das wäre allerdings nur die erste und die letzte von sieben 
Grundfunktion der Z80-CPU:

1) Befehlskodelesen (ROM)
2) Speicherlesen    (RAM)
3) Speicherschreiben
4) I/O-Lesen        (PIO,)
5) I/O-Schreiben
6) Interruptbestätigung
7) CPU-Intern

Betrachtet man DMA Bus-Arbitrierung kommen noch Funktionen hinzu (siehe 
Z80-Bus-timings).

PIO, SIO, CTC werden per I/O-Befehle (IND/OUTD) angesprochen und 
signalisieren Ereignisse über Interruptreques (um der CPU das Polling zu 
ersparen). Da der ATMEGA aber die IOREQn Leitung nicht lesen kann, kann 
er nicht (oder "schwierig) zwischen IO-Port Zugriffen und 
SpeicherZugriffen unterscheiden.

https://www.zilog.com/docs/z80/um0080.pdf S.7 (21) ff, Minimalsystem: 
S.21 (35)

Deshalb bin ich "skeptisch", das man in diesem System Original Z80-Code 
für PIO, SIO, CTC abarbeiten kann.
Schaut man sich den .asm Quelltext Zeilen 239 bis 278 an, wird deutlich 
das im ATMEGA-Code lediglich Z80-M1 und Speicherbuszyklen anhand einer 
"harten" Memory-Map implementiert sind, aber keine Z80-IO-Zyklen oder 
Interrupthandling.

Bei der Unterscheidung zwischen Speicherlesen und -schreiben scheint 
sich der ATMEGA auch eines "Tricks" zu bedienen, normalerweise dient dem 
System dazu die WRn-Leitung, die hier lt. Schematic hier nicht verbunden 
ist.

Diese Sparmassnahmen sind nicht ganz unverständlich, wenn man um die 
beschränkten Bit-Einzelzugriffe weiß. Allerdings habe ich den Eindruck, 
das nicht viel Funktionalität eines (beliebigen) Z80 Systems mit dieser 
Z80-Configuration nachgestellt werden kann. Einige Grundfunktionen wie 
Befehl-Holen (ROM-lesen) ja, andere Funktion/Maschinenbefehle dagegen 
nicht.

Das ist mit hier mit "rudimentär" und "unter IO-fähiges Minimalsystem" 
gemeint.

Also vielleicht nicht "100% kaputt gespart" sonder eher "zum 'Krüppel' 
gespart". Wie ein Auto, mit dem man nur noch rückwärts im Kreis fahren 
kann weil Gangschaltung und Lenkung blockiert resp. "weg-improvisiert" 
wurden.

: Bearbeitet durch User
von Martin H. (horo)


Lesenswert?

Bradward B. schrieb:
> Allerdings habe ich den Eindruck,
> das nicht viel Funktionalität eines (beliebigen) Z80 Systems mit dieser
> Z80-Configuration nachgestellt werden kann. Einige Grundfunktionen wie
> Befehl-Holen (ROM-lesen) ja, andere Funktion/Maschinenbefehle dagegen
> nicht.

Wenn Du jeden Clock-Zyklus analysieren willst, dann solltest Du andere 
HW (wie z.B. meinen Z80-Dongle) einsetzen, ansonsten funktioniert ja 
dieses System im angestrebten Rahmen. CP/M wird darauf nicht laufen.
https://github.com/Ho-Ro/Z80_dongle

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Angehängte Dateien:

Lesenswert?

> ansonsten funktioniert ja
> dieses System im angestrebten Rahmen.

Welcher "Rahmen" würde/wird von diesem System angestrebt?

Insbesonders die Mutmassung, man könnte damit Systeme die PIO, CTC, SIO 
oder andere Z80-Zilog Peripherie voraussetzen, nachstellen,  scheint 
IMHO nicht erfüllbar.

> Wenn Du jeden Clock-Zyklus analysieren willst,

Nicht Clock-, sonder Bus- resp. Befehls-Zyklen.
Da sind nun mal bei einem Z80-System mehr nötig als lediglich 
Systemspeicher-Zugriff (siehe Anhang).

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.