ZAtmel: ein minimalistisches Z80-System

OP #3913038
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
Angehängte Dateien:
Gast #3913934
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?
Persönliche Seite #3914089
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.
Gast #3983447
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.
#7831181
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.

(Firma: Starfleet) #7831195
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.

Beitrag #7831230 wurde von einem Moderator gelöscht.
#7831246
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?

Gast #7831274
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.

(Firma: Starfleet) #7831327
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:

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.

#7831507
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

(Firma: Starfleet) #7831513
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).

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren