Forum: Projekte & Code ZX81 plus38 Clone


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 chris_ (Gast)


Lesenswert?

Nachdem ich vor knapp 40 Jahren einen ZX81 hatte, wurde mir nun von 
einem Freund eine Leerplatine diese Clones zugetragen:

https://revspace.nl/ZX81plus38_simple_to_build_ZX-81_clone

Die Platine sieht sehr schön aus und an sich habe ich gar keine Zeit, 
daran herum zu basteln, aber jetzt liegt sie nun einmal da und will 
bearbeitet werden.

Das Interessante am ZX81 war sein minimalistisches Design, das mit Hilfe 
des Prozessors und einem relativ einfachen Custom-Logik-Chip das 
Bildsignal erzeugt hat. Im Clone wird dieser Chip mit diskreten 
Logikbauteilen nach gebaut.

von (prx) A. K. (prx)


Lesenswert?

Der ZX80 ist dahingehend noch interessanter, weil er ohne Custom-Chip 
auskommt.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Die Platine möchte ich Schrittweise aufbauen und die einzelnen 
Komponenten nach und nach testen.

Auf dem Bild ist der Taktgenerator, die Reset-Schaltung und der 
Prozessor bestückt.
Leider hab eich nicht alle passenden Bauteile, deshalb ist vorerst ein 
14Mhz statt ein 13Mhz Quarz drinnen und die Kondensatoren am 
Schwingquarz fehlen. Der Oszillator läuft aber trotzdem.

Die Platine zieht in dieser Konfiguration 140mA. Der Prozessor zeigt 
aber an seinen Adressleitungen erst einmal keine weitere Reaktion.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier das Bild der Platine.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

von A. K. (prx)
>Der ZX80 ist dahingehend noch interessanter, weil er ohne Custom-Chip
>auskommt.

Danke für Deinen Hinweis. Ich weiß Deine Kommentare üblicherweise zu 
schätzen.
Das schöne an dem Clone ist, dass er ebenfalls ohne ULA auskommt. 
Insofern kann man hier versuchen, die Details des Videogenerators zu 
verstehen.

von (prx) A. K. (prx)


Lesenswert?

chris_ schrieb:
> Das schöne an dem Clone ist, dass er ebenfalls ohne ULA auskommt.
> Insofern kann man hier versuchen, die Details des Videogenerators zu
> verstehen.

Will darauf raus, dass der ZX80 deshalb noch ein deutliches Stück 
minimalistischer war. Ich hatte damals die Arbeitsweise von dessen 
Videoerzeugung analysiert und fand es ziemlich clever, wie die 
Eigenheiten der Z80 CPU genutzt wurden.

von (prx) A. K. (prx)


Lesenswert?

Du solltest mindestens dafür sorgen, dass kritische Eingänge auf 
definiertem Pegel liegen. Bei Reset ist das bestückt, aber bei anderen 
wie NMI, WAIT, ... sehe ich das auf den ersten Blick nicht.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Du solltest mindestens dafür sorgen, dass kritische Eingänge auf
>definiertem Pegel liegen. Bei Reset ist das bestückt, aber bei anderen
>wie NMI, WAIT, ... sehe ich das auf den ersten Blick nicht.

Danke für die Hinweise. Ich habe auch schon daran gedacht, aber aus 
Ungeduld die Schaltung einfach mal mit Strom versorgt und gemessen.

Was mir gerade beim Überfliegen des Wikipedia Artikels

https://de.wikipedia.org/wiki/Zilog_Z80

zum Z80 auffällt: Die Schreiben dort, dass erst der Z80A für 4MHz 
ausgelegt war, wenn ich es auf meinem Foto richtig sehe, scheint der 
Prozessor aber ein nicht-A-Typ zu sein.

von chris_ (Gast)


Lesenswert?

Das Schöne an der heutigen Zeit im Vergleicht zur Zeit vor 40 Jahren 
ist, dass man im Internet so viele vorbereitete Informationen findet.

Hier eine Auflistung der Signalrichtungen des Z80:
https://wiki.pcbotaku.com/wiki/Z80

Wenn ich es richtig sehe, sollten die Eingänge

nInt
nNMI
nWait
nBUSREQ

für den Addresszählertest alle auf HIGH liegen.

von (prx) A. K. (prx)


Lesenswert?

chris_ schrieb:
> wenn ich es auf meinem Foto richtig sehe, scheint der
> Prozessor aber ein nicht-A-Typ zu sein.

Stimmt irgendwie. Die bestückte Z84C0020 ist nicht NMOS und 4MHz, 
sondern CMOS und 20 MHz.

von (prx) A. K. (prx)


Lesenswert?

chris_ schrieb:
> Die Platine zieht in dieser Konfiguration 140mA

Da ausser Oszillator und CPU nichts drauf ist, was Dauerstrom 
verbraucht, ist das angesichts der CMOS Version viel zu viel.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>Da ausser Oszillator und CPU nichts drauf ist, was Dauerstrom
>verbraucht, ist das angesichts der CMOS Version viel zu viel.

Das ist ein guter Hinweis dem man noch einmal nachgehen sollte.
Gerade eben haben wir versucht, die Platine des Freundes zu testen. 
Diese ist schon voll bestückt und braucht ähnlich viel Strom.

Wir haben einen kleinen Test gemacht und die CPU aus der oben gezeigten 
Platine eingesetzt. Mit dieser CPU sank der Stromverbrauch auf 90mA.

Die Platine ist das Mainboard meines Computers, den ich damals mit Hilfe 
des ZX81 entwickelt habe und auf der noch die original 1kx4Bit RAMS 
meines ZX81 sitzen, da ich dort statt dessen ein 2kx8Bit RAM eingebaut 
hatte.

von chris_ (Gast)


Lesenswert?

>Die Platine ist das Mainboard meines Computers, den ich damals mit Hilfe
>des ZX81 entwickelt habe

Damals heißt 1984.

von (prx) A. K. (prx)


Lesenswert?

chris_ schrieb:
> Mit dieser CPU sank der Stromverbrauch auf 90mA.

Mit NMOS Z80A wäre man damit in normalem Fahrwasser.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>Mit NMOS Z80A wäre man damit in normalem Fahrwasser.

Dann muss ich den mal auf meiner Platine probieren.

Heute morgen haben wir zu zweit an der voll bestückten Platine des 
Kollegen gemessen und experimentiert.
Dort blieb der Prozessor auch die ganze Zeit hängen, weil er nicht mehr 
durch den NMI aufgeweckt wurde.
So wie es aussieht ist die Platine falsch geroutet. Der Eingang von U19B 
( Pin4 ) muss nicht am NAND des FlipFlop U13D sondern an U13C pin8 
angeschlossen werden, sonst kommen die HSYNC Pulse nicht.
Nachdem wir das geändert hatten und mittels eines Frequenzgenerators die 
Systemfrequenz auf 12.8MHz statt der 13MHz des Quarz gestellt hatte, 
konnte auch der Fernseher synchronisieren und wir hatten ein weises 
Bild. Das ersehnte
1
K
Prompt war leider nicht sichtbar, vielleicht war es außerhalb des weißen 
Bildschirms.

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> Das Interessante am ZX81 war sein minimalistisches Design, das mit Hilfe
> des Prozessors und einem relativ einfachen Custom-Logik-Chip das
> Bildsignal erzeugt hat. Im Clone wird dieser Chip mit diskreten
> Logikbauteilen nach gebaut.

Damit ist es kein Clone, sondern ein Kompatibler. Für ein Plagiat weicht 
es zu sehr vom Original ab und es steckt auch eine Menge Gehirnschmalz 
des Erfinders, also eigene Leistung, drin.

Ein Clone wäre ein einfacher 1:1 Nachbau, wie in Fernost üblich.

: Bearbeitet durch User
von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>Damit ist es kein Clone, sondern ein Kompatibler.

Wie ich gehört habe, gab es zu jener Zeit in Südamerika ZX81 Nachbauten 
mit diskreten Logik ICs, also vermutlich dem hier gezeigten recht 
ähnlich.

Zum weiteren Verlauf:

Die Platine des Freundes ist schon weiter, aber der Bildschirm zieht 
noch Streifen.

von chris_ (Gast)


Lesenswert?

Der ZX81 gab es teilweise auch als Bausatz.
Hier gibt es die Bauanleitungen, Schaltplan und Manuals:

https://k1.spdns.de/Vintage/Sinclair/80/Sinclair%20ZX81/Service%20and%20Assembly%20Manual/

von Interessierter (Gast)


Lesenswert?

Das Projekt gefällt mir sehr gut, aber das ROM bereitet mir Probleme.

Sind die ZX81 ROM Daten frei verfügbar?

Falls ja, könnte mir jemand eines brennen, da ich keine Hardware dafür 
habe.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>Sind die ZX81 ROM Daten frei verfügbar?

>Falls ja, könnte mir jemand eines brennen, da ich keine Hardware dafür
>habe.

Mein Bastlerfreund hatte mir die Platine und das fertig programmierte 
EEPROM gegeben.
Die Images verschiedener Retro-Computer gibt es wohl hier:

http://www.8bit-wiki.de/index.php?id=3&filt=Sinclair/ZX81/rom-binary

Leider hat er aber kein EEPROM mehr.

Ansonsten müsste man sich vielleicht überlegen, ob man einen einfachen 
EEPROM Programmer mit einem Arduino Mega baut.

Ich könnte mir vorstellen, dass hier noch mehr auf den ZX81-Zug 
aufspringen wollen. Dann wäre es sinnvoll, wenn einer gleich mehrere 
Platinen bei irgend einem der Chinesischen PCB-Hersteller machen lässt.

von Interessierter (Gast)


Lesenswert?

Super, danke.
Notfalls lässt sich das bestimmt per Arduino machen, da scheint es ja 
viele Projekte zu geben.

Benutzt ihr ein EEPROM oder ein OTP EPROM?

Habt ihr das System denn schon richtig zum laufen bekommen?

von Route_66 H. (route_66)


Lesenswert?

Interessierter schrieb:
> Benutzt ihr ein EEPROM oder ein OTP EPROM?

Wo bekommt man OTP EPROM???

von Interessierter (Gast)


Lesenswert?

Zum Beispiel bei digikey:

https://www.digikey.de/products/de?keywords=AT27C256R-70PU-ND

Auszug aus dem Datenblatt:
"The Atmel® AT27C256R is a low-power, high-performance, 262,144-bit, 
one-time programmable, read-only memory (OTP EPROM) organized as 32K by 
8 bits. It requires only
one 5V power supply in normal read mode operation. Any byte can be 
accessed in less than
45ns, eliminating the need for speed reducing WAIT states on 
high-performance microprocessor systems"

von Percy N. (vox_bovi)


Lesenswert?


von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Das sind die Speicherchips, die ich bekommen habe.

von chris_ (Gast)


Lesenswert?

Lustigerweise ist auf der Seite von MicroChip zum EEPROM

https://www.microchip.com/wwwproducts/en/AT28C256

gleich ein Video mit dem Titel "Customer Driven Obsolescence" 
angehängt....

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Das EEPROM scheint sehr leicht zu programmieren:
Man kann einfach wie in ein RAM schreiben und muss dann einen Polling 
Zyklus starten.
Ich würde vermuten, wenn man einfach 10ms nach dem Schreiben einer Page 
wartet, sind die Daten auch sicher geschrieben.

von Verbesserer (Gast)


Lesenswert?

Zur PCB ganz oben: Stehender Quarz auf der Ecke ist eine blöde Idee. 
Masseflächen an PCB Rändern nicht geschlossen. Leiterbahnen unnötig 
dünn/fein. Jumper unter(?) Ram/Rom ...
Aber sonst ... :D

von chris_ (Gast)


Lesenswert?

>Zur PCB ganz oben: Stehender Quarz auf der Ecke ist eine blöde Idee.
>Masseflächen an PCB Rändern nicht geschlossen. Leiterbahnen unnötig
>dünn/fein.

Das ist wahrscheinlich ein guter Hinweis, auch wenn vermutlich keiner 
eine EMV-Messung mit dem Ding machen wird.

Man könnte einen issue im github-Directory schreiben:

https://github.com/mahjongg2/ZX81plus38

>Jumper unter(?) Ram/Rom ...
Das ist tatsächlich schlecht. Mein Kollege hat es dadurch gelöst, dass 
die Jumper unter der Platine sind, was aber Abstandsbolzen in der 
Platine erforderlich macht.

von chris_ (Gast)


Lesenswert?

Um die Spannung vorweg zu nehmen ... es gibt tatsächlich einen 
Javasscript Emulator:
http://www.zx81stuff.org.uk/zx81/jtyone.html

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Im Originalschaltplan des ZX81 haben die Widerstände in den 
Datenleitungen 470Ohm. Im Nachbau sind die mit 1K angegeben. Der 
kleinere Wert scheint mir sinnvoller, weil dann der Pegel über gegenüber 
den 10k PullUps besser nach unten gezogen wird.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Aufbau, um die Funktion des Z80 ohne Peripherie zu testen.

Der Prozessor wird mit 1MHz Takt versorgt.
Die Eingänge /NMI, /INT, /RESET, /BUSRQ, und /WAIT sind über Widerstände 
auf VCC gelegt.
Die Datenleitungen sind über 10K auf 0, sodass NOPs ausgeführt werden 
sollten.

Beobachtungen:
Der Maschinenzyklus /M1 läuft mit 250kHz, was einem Befehlszyklus von 4 
Takten entspricht. Die NOPs sollten also mit 250kHz ausgeführt werden.
Die Stromaufnahme beträgt für die gesammte Schaltung 117mA, was mir für 
eine CMOS Z80 CPU immer noch hoch erscheint.
Die Adressleitung zeigen folgendes Verhalten:
A0:125kHz
A1:62.5kHz
...
A6: 1.953kHz
A7: seltsames Verhalten, Signalpulse sind paketartig

von Ale (Gast)


Lesenswert?

Mit dem Emulator kann man schon was machen, z.B. Mazogs spielen :)
Ich hab auch einen ZX81 gebaut, meinem Fernseher kann die Signal aber 
nicht darstellen, es zieht so aus wie das Bild oben, aber es zappelt ein 
bisschen.
Ich muss mit dem AV-Receiver probieren, der kann Composite auf HDMI 
umwandeln. Einen Elgato Eye TV habe ich auch, es funktioniert in w10 
nicht mehr, und in linux habe ich keinen Erfolg mit vlc gehabt...
Einen ZX81 mit VGA Ausgang hätte ich gerne, nein ohne FPGA.

von chris_ (Gast)


Lesenswert?

Wenn den guten 38 Jahre alten NMOS Z80A aus dem obigen Bild ( 
https://www.mikrocontroller.net/attachment/472355/CH1_ComputerMainBoad.png 
) einsetze, zeigt sich das paketartige Verhalten auch, aber die 
Gesamtschaltung verbraucht nur ca. 60mA.

Die Grundfrequenz der Pakete beträgt 250kHz, also gleich wie M1.
Wahrscheinlich werden die oberen Adressleitungen ab A7 nicht statisch 
gezogen wie die unteren Adressleitungen A0-A6.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Mittlerweile tendiere ich dazu, mehr Zeit in einen soliden Laboraufbau 
zu stecken.

Jetzt ist die ZX81 Platine so weit bestückt, dass über die gezeigten 
Widerstände der NOP-Generator statisch auf den Bus geschaltet wird.
Damit verhält sich der Prozessor dann so wie auf dem BreadBoard-Aufbau.

von Mario M. (thelonging)


Lesenswert?

chris_ schrieb:
> A7: seltsames Verhalten, Signalpulse sind

chris_ schrieb:
> Wahrscheinlich werden die oberen Adressleitungen ab A7 nicht statisch
> gezogen wie die unteren Adressleitungen A0-A6.

Das liegt am Refresh-Zyklus, also völlig normal.

von chris_ (Gast)


Lesenswert?

>Das liegt am Refresh-Zyklus, also völlig normal.

Danke für den Hinweis. Mit dem Refresh-Zyklus habe ich mich nie 
beschäftigt, weil ich damals schon die statischen RAMs aus dem ZX81 
hatte.

Im Moment überlege ich, einen Debugger für den ZX81 zu bauen.
Hier gibt es einen Z80-Computer, bei dem ein Atmega32 als 
Debug-Interface benutzt wird:
https://hackaday.io/project/159973-z80-mbc2-a-4-ics-homebrew-z80-computer/details

Das Problem hier: es werden nur die unteren 8 Adressleitungen benutzt, 
weil der Atmega32 zu wenig Pins hat.

Einfacher wäre ein ArduinoMega2560, der hätte genügend PINs.

Das Code-Prinzip des Atmega-Debuggers findet sich hier:
https://github.com/WestfW/4chipZ80/tree/master/Firmware/Z80_test1

von bullatrulla (Gast)


Lesenswert?


von chris_ (Gast)


Lesenswert?

>ICE? Nimm den: http://www.tauntek.com/Z80-In-Circuit-Emulator.htm
Wahrscheinlich wäre es eine gute Idee, eine fertigen Debugger zu nehmen. 
Aber der Aufwand, diesen nach zu bauen, scheint mir ein eigenes Projekt.
Einen Arduino Mega habe ich hier rumliegen, kann als gleich damit 
spielen.

Im Moment versuche ich gerade heraus zu finden, wie das Tape-Signal 
erzeugt wird.

Hier gibt es das Assembler Listing des ROMS:
https://cdn.hackaday.io/files/289631239152992/ZX81_dual_2018-02-09.htm
1
...
2
; I/O locations:
3
;
4
IO_PORT_TAPE    equ  $FF  ; write
5
IO_PORT_SCREEN    equ  $FF  ; write
6
7
IO_PORT_KEYBOARD_RD  equ  $FE  ; A0 low
8
IO_PORT_NMI_GEN_ON  equ  $FE  ; A0 low
9
IO_PORT_NMI_GEN_OFF  equ  $FD  ; A1 low
10
IO_PORT_PRINTER    equ  $FB  ; A2 low
11
12
....
13
14
; THE 'OUT_BYTE' SUBROUTINE
15
16
; This subroutine outputs a byte a bit at a time to a domestic tape recorder.
17
18
mark_031E:
19
OUT_BYTE:
20
  LD  E,(HL)    ; fetch byte to be saved.
21
  SCF      ; set carry flag - as a marker.
22
23
mark_0320:
24
EACH_BIT:
25
  RL  E    ; C < 76543210 < C
26
  RET  Z    ; return when the marker bit has passed 
27
        ; right through.      >>
28
29
  SBC  A,A    ; $FF if set bit or $00 with no carry.
30
  AND  $05    ; $05 "  "   "   "  $00
31
  ADD  A,$04    ; $09 "  "   "   "  $04
32
  LD  C,A    ; transfer timer to C. a set bit has a longer
33
        ; pulse than a reset bit.
34
35
mark_0329:
36
PULSES:
37
  OUT  (IO_PORT_TAPE),A  ; pulse to cassette.
38
  LD  B,$23    ; set timing constant
39
40
mark_032D:
41
DELAY_2:
42
  DJNZ  DELAY_2    ; self-loop
43
44
  CALL  BREAK_1    ; test for BREAK key.
45
46
mark_0332:
47
BREAK_2:
48
  JR  NC,REPORT_D  ; forward with break to REPORT_D
49
50
  LD  B,$1E    ; set timing value.
51
52
mark_0336:
53
DELAY_3:
54
55
  DJNZ  DELAY_3    ; self-loop
56
57
  DEC  C    ; decrement counter
58
  JR  NZ,PULSES  ; loop back
59
60
mark_033B:
61
DELAY_4:
62
  AND  A    ; clear carry for next bit test.
63
  DJNZ  DELAY_4    ; self loop (B is zero - 256)
64
65
  JR  EACH_BIT  ; loop back

Wenn ich mir die Schaltung so ansehe, sieht es so aus, als wenn die 
Datenleitungen im IO-Bereich ignoriert werden, weil sie nicht 
angeschlossen sind.

Das setzen der Leitung sehe ich
1
  OUT  (IO_PORT_TAPE),A  ; pulse to cassette.

Die Frage ist: kann man die auch aktiv zurück setzen?

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> Im Moment versuche ich gerade heraus zu finden, wie das Tape-Signal
> erzeugt wird.

Mit dem ZX81 hast Du Dir nicht gerade den trivialsten Homecomputer 
ausgesucht. Der bei Sinclair gepflegte Minimalismus erforderte so einige 
Tricks.

Lies Dir die Artikel von Wilf Righter durch, da ist einiges gut erklärt: 
http://www.user.dccnet.com/wrigter/

Einen ZX97lite habe ich mir auch mal gebaut.


> Die Frage ist: kann man die auch aktiv zurück setzen?

OUT 0FEh startet VSync und setzt CAS low. IN 0FEh auch, aber dabei liest 
man auch noch die Tastatur ein. OUT 0FFh beendet VSync und setzt CAS 
high.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>> Die Frage ist: kann man die auch aktiv zurück setzen?

>OUT 0FEh startet VSync und setzt CAS low. IN 0FEh auch, aber dabei liest
>man auch noch die Tastatur ein. OUT 0FFh beendet VSync und setzt CAS
>high.

Danke für die Hinweise.
Für mich sieht der Schaltplan so aus, als wenn man "IN 0FEH" auf jeden 
Fall nutzen muss, um U19D (Anschluss 11) auf 0 setzen zu können, um den 
FlipFlop für VSYNC zu beeinflussen.

von chris_ (Gast)



Lesenswert?

Hier ist der aktuelle Testaufbau und die Firmware, mit der ich die 
Signale stimuliere.

Das Schreiben alleine scheint VSYNC noch nicht zu beeinflussen.
1
void loop()
2
{
3
/*
4
> Die Frage ist: kann man die auch aktiv zurück setzen?
5
6
OUT 0FEh startet VSync und setzt CAS low. IN 0FEh auch, aber dabei liest 
7
man auch noch die Tastatur ein. OUT 0FFh beendet VSync und setzt CAS 
8
high.
9
*/
10
  Z80_out(0xFE,0);// data lines are not used
11
  
12
  delay(VERZ);
13
  
14
  Z80_out(0xFF,0);// data lines are not used
15
  
16
  delay(VERZ);
17
18
}

von Soul E. (souleye) Benutzerseite


Lesenswert?

Hast recht, OUT wirkt nur auf den NMI-Generator (HSync). VSync (und 
Tastatur lesen) läuft über IN.
1
  xxFBh.R   Sinclair Printer Status
2
            xxxxx0xx   (decoding scheme, A2 only used)
3
  xxFBh.W   Sinclair Printer Output
4
            xxxxxx0x   (decoding scheme, A2 only used)
5
  xxFDh.W   Disable NMI (ZX81 only)
6
            xxxxxx0x   (decoding scheme, A1 only used)
7
  xxFEh.W   Enable NMI (ZX81 only)
8
            xxxxxxx0   (decoding scheme, A0 only used)
9
  NNFEh.R   Keyboard read, when NMI=Off: also enter VSYNC and set CAS.OUT=Low
10
            xxxxxxx0   (decoding scheme, A0 only used)
11
  xxFFh.W   Terminate Vsync and restart LINECNTR and set CAS.OUT=High
12
            xxxxxxxx   (every out performs this action)

von chris_ (Gast)



Lesenswert?

>Hast recht, OUT wirkt nur auf den NMI-Generator (HSync). VSync (und
>Tastatur lesen) läuft über IN.

Danke für die Auflistung. Das hat sehr geholfen.

Leider hatte ich  auf  Grund der schlecht leserlichen Beschriftung einen 
74HC08 für U13 gesteckt, sodass das FlipFlop nicht funktionieren konnte. 
Das hat etwas gedauert, bis ich alles mit der Arduino Signalstimulation 
durchgemessen hatte.

Jetzt funktioniert der Ausgang. Der Signalpegel scheint mir mit 200mVpp 
etwas niedrig. Den 47pF Kondenstor C8 habe ich nicht eingebaut, weil ich 
keinen hatte. Der kleine Wert dürfte meiner Meinung nach aber auch 
keinen großen Einfluss auf die Signalqualität haben.

Anbei die über Microphon der Webcam aufgenommen, geliebten Tape-Signale 
aus meinem Debugging-Aufbau.
Durch die Microphonübertragung werden die Signalformen nicht ganz so 
sauber sein, wie bei direktem Line-Recording.

von ??? (Gast)


Lesenswert?

Was machst du da so lange? Das Board ist doch in einer Stunde fertig 
bestückt. Warum nicht Fehler suchen, wenns fertig ist?

von chris_ (Gast)


Lesenswert?

>Was machst du da so lange?

Ich analysiere die Funktionsweise des Systems sehr genau.

von Alex P. (ra_p)


Lesenswert?

In einer Stunde Bestückt ? Die Zeit vergeht für jeden anders...

von Dirk S. (fusebit)


Lesenswert?

Ein Z80 Systemwunsch ist bei mir auch noch so ein Überbleibsel aus der 
Jugend ;-) Bevor sämtliche Komponenten nur noch zu Museumspreisen 
erhältlich sind, habe ich mich entschlossen den ZX81+38 zu bauen.

Die Platine habe ich jetzt erhalten und auch die meisten Bauteile habe 
ich zusammen.

Aber der RCA-Verbinder ist doch verkehrt herum platziert, oder?
Ich finde nur Print-Chinch-Buchsen mit zwei Lötpins hinten und einem 
vorne. Selbst das Farnell Teil aus der BOM ist so. Habe ich etwas 
übersehen?
Kennt jemand einen Print Chinch der passen würde?

von Dirk S. (fusebit)


Lesenswert?

Der Oszillator ist aufgebaut, er läuft aber mit den angegebenen 15p 
Kondensator nicht auf 13 MHz, sondern nur mit 1,4 MHz.
Ganz ohne Kondensator, oder mit 4.7p läuft er sauber mit 13 MHz.

von Ale (Gast)


Lesenswert?

Ich hab 10 pF für 13 MHz benutzt. Mit 20 pF waren sowas wie 30 kHz.
Ich würde sagen daß so was wie 12.8 oder 12.9 MHz besser als 13 sind, 
dann läuft der Sync ein bisschen besser, mindestens wird von meinem 
Ferns. erkannt. Ein Bild habe ich trotzdem noch nicht gekriegt.
Eine Cinch Buschse habe ich mit der Zange modifiziert, sonst passt es 
nicht in die Löcher.

von chris_ (Gast)


Lesenswert?

>Ein Z80 Systemwunsch ist bei mir auch noch so ein Überbleibsel aus der
>Jugend ;-)

Das Problem mit der Cinch-Buchse habe ich auch, die passt vom Pining her 
nicht. Ich werde sie aber vielleicht einfach irgend wie einpassen.

>Aber der RCA-Verbinder ist doch verkehrt herum platziert, oder?
>Ich finde nur Print-Chinch-Buchsen mit zwei Lötpins hinten und einem
>vorne. Selbst das Farnell Teil aus der BOM ist so. Habe ich etwas
>übersehen?
>Kennt jemand einen Print Chinch der passen würde?

Willkommen im Club ;-) Ich hätte ja nicht gedacht, dass sich hier noch 
jemand findet, der das Projekt auch nachbaut.

Das Problem mit der Cinch-Buchse habe ich auch, die passt vom Pining her 
nicht. Ich werde sie aber vielleicht einfach irgend wie einpassen.

Noch ein kleiner Tipp beim Zusammenbau: Ich habe bei meiner Platine erst 
spät gemerkt, dass die Jumper auf der Platine vorverdrahtet sind. Man 
braucht die Jumper als erst mal nicht, wenn man die eine 
Standardkonfiguration hat.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Etwas mehr als eine Stunde braucht es schon :-)

Die CPU scheint zu laufen, ich kann Signale auf den Adressleitungen 
messen, aber ich bekomme gar kein Bild.

Chris, könntest Du die Modifikation zwischen U13 und U19 bitte etwas 
genauer beschreiben?
Pin 4 von U19B ist ja laut Schaltplan mit U13C Pin 10 und U13D Pin 11 
verbunden.

Was muss ich dort auftrennen und wie verbinden?

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ist das so richtig?

Das mit den Jumpern hatte ich zum Glück auf der Homepage gelesen :-)

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Ist das so richtig?

Ja, genau so. Mit dieser Änderung hatten wir die Sync-Signale bekommen, 
aber noch kein sichtbares "K". Deshalb ist es wahrscheinlich gut, die 
Leiterbahnen erst einmal nicht aufzutrennen, sondern die entsprechenden 
Pins der ICs vom Sockel wegzubiegen und dort die Kabel anzulöten.

Die große Kunst bei dem Projekt ist vermutlich das Debugging. Deshalb 
gehe ich so langsame vor und versuche, die Schaltung mit externen 
Signalen zu stimulieren und so die korrekte Funktion der Einzelteile zu 
testen.

Der Assemblercode des Zx81 ist ziemlich schwierig zu verstehen, aus 
diesem Grund wird es auch nicht einfach werden, die richtigen Testpunkte 
im Code zu identifizieren.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Moin,

ich habe den Pin 4 hochgebogen und mit einem Draht an U13 angelötet, 
aber leider trotzdem keinerlei Videosignal.

Bis ich die Funktionsweise des Videogenerators so weit verstanden habe, 
dass ich weiss wo ich messen muss, wird wohl noch etwas Zeit vergehen.

Beim "video combiner" habe ich bei U11A Pin 3 ein vielversprechendes 
Signal, aber es kommt nicht durch. Es wird von D13 soweit runtergezogen, 
dass Q8 nicht aufsteuert. Liegt das möglicherweise an den Werten der 
Bauteile rund um Q8 (Beim Vorgänger ist eine 1N4148 und andere 
Widerstandswerte verbaut) oder bei U11B und dessen Ansteuerung?

von Ale (Gast)


Lesenswert?

Dank ein defektes '74 (kacke Kinabauteile) hatte ich am Ausgang des U18B 
(9) nichts außer High Pegel. Jetzt sieht man was.
So-wie-so habe ich mich zu früh gefreut, meinem Fernseher hacht einfach 
nicht mit.

von Dirk S. (fusebit)


Lesenswert?

Ale schrieb:
> Dank ein defektes '74 (kacke Kinabauteile) hatte ich am Ausgang des U18B
> (9) nichts außer High Pegel. Jetzt sieht man was.
> So-wie-so habe ich mich zu früh gefreut, meinem Fernseher hacht einfach
> nicht mit.

Bekommst Du das Bild mit oder ohne die Modifikation am U19B Pin 4?

von Dirk S. (fusebit)



Lesenswert?

Ich habe mal an ein paar Stellen gemessen, jeweils mit und ohne die 
Modifikation.

Vielleicht kann mir ja jemand so einen Tipp geben wo der Fehler sein 
könnte, oder wo ich messen sollte.

Ausser für RCA out hänge ich nur dann beide screenshots an, wenn sie 
sich unterscheiden.

von Soul E. (souleye) Benutzerseite


Lesenswert?

Der ZX81 macht die Bildschirmausgabe in Echtzeit. Die Videodaten stehen 
im RAM und der Prozessor führt sie als "Programm" aus. Da er naturgemäß 
mit dem Bildschirminhalt nichts anfangen kann werden seine 
Datenleitungen nach Masse kurzgeschlossen. Er führt dann 00h = NOP aus, 
inkrementiert also den Adresszähler, während die Videologik den 
RAM-Inhalt verwurstet.

Wenn der Prozessor Bild macht, also als Luxus-Adresszähler fungiert, 
kann er nicht rechnen. Deshalb fällt beim ZX80 die Videoausgabe aus wenn 
ein Programm läuft. Da das nicht wirklich praktisch war wurde dem ZX81 
dann ein FAST und ein SLOW-Mode spendiert. Im FAST-Mode verhält er sich 
wie ein ZX80. Im Slow-Mode wird die Programmausführung 192x pro Halbbild 
angehalten um jeweils eine Videozeile rauszugeben. So kommt der 
NMI-Generator ins Spiel.

Am Netz /HSYNC siehst Du den HSYNC. Periode 63,7 µs, davon 4,6 µs low. 
U13C, U13D bilden ein Flipflop, darüber wird ein Freigabesignal erzeugt. 
Wenn das Low ist löst jeder /HSYNC einen /NMI aus. Ist es High schaltet 
das OR-Gatter auf High und der NMI bleibt aus.

Wir erinnern uns,
1
  xxFDh.W   Disable NMI (ZX81 only)
2
            xxxxxx0x   (decoding scheme, A1 only used)
3
  xxFEh.W   Enable NMI (ZX81 only)
4
            xxxxxxx0   (decoding scheme, A0 only used)

Also muss nach dem Ansprechen der IO-Adresse FDh der NMI inaktiv sein 
und nach dem Ansprechen von FEh aktiv. Wenn das umgekehrt ist, dann muss 
die Modifikation rein bzw raus.


Wenn wir davon ausgehen, dass das ROM ordnungsgemäß ausgeführt wird, 
dann sollte der NMI aktiv sein. U19_Pin_6_ohne.png wäre also der 
richtige Zustand. Wenn Du mit dem Oszi rauszoomst solltest Du sehen, 
dass 192 Pulse erzeugt werden und danach eine Weile High-Pegel ist. Das 
ist die vertikale Austastlücke wo /VSYNC aktiv ist.

von (prx) A. K. (prx)


Lesenswert?

Soul E. schrieb:
> Er führt dann 00h = NOP aus,
> inkrementiert also den Adresszähler, während die Videologik den
> RAM-Inhalt verwurstet.

Mit der Besonderheit, dass der Prozessor am vorzeitigen Zeilenende statt 
der NOPs den dann durchkommenden HALT Befehl ausführt, der 
zufälligerweise exakt das gleiche Timing hat wie eine Sequenz von NOPs. 
Das echte Zeilenende gibts über die eigentlich für DRAMs gedacht 
Refresh-Adresse.

von Soul E. (souleye) Benutzerseite


Lesenswert?

Richtig. Man kann da durchaus noch tiefer ins Detail einsteigen, aber im 
ersten Schritt ging es erstmal darum zu verstehen wie das NMI-Signal 
aussehen muss und wofür das gut ist.

Dem interessierten Leser empfehle ich die Artikel von Wilf Rigter, hier 
insbesondere 
http://www.user.dccnet.com/wrigter/index_files/ZX%20Video%20Tutorial.htm


Die Freunde des Türstoppers haben übrigens auch ein eigenes Forum: 
https://forum.tlienhard.com/phpBB3/viewforum.php?f=2&f=2

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die ausführliche Antwort!

Ich komme der Sache näher. Nun habe ich zumindest nicht synchronisierte 
schwarze Flecken auf weißem Grund :-)

Den Grund warum es jetzt funktioniert kann ich nicht verraten, weil es 
peinlich wäre zu erwähnen, dass ich Jumper 5 und 6 weggelassen hatte. 
Ich hatte die Angaben auf der revspace Seite so verstanden, dass alle 
Jumper eine Standardverbindung haben...

Das Bild bekomme ich in der originalen Verschaltung und mit Jumper 5 
kann ich es invertieren. Die Schaltung und die CPU scheinen zu laufen, 
nur die Synchronisation passt nicht.

Wenn ich ein leeres ROM einsetze bekomme ich ein komplett weißen 
Bildschirm.
Allerdings zeigt mein China-Composite-HDMI Wandler in beiden Fällen an 
das er ein NTSC Eingangssignal bekommt.

: Bearbeitet durch User
von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:

> Das Bild bekomme ich in der originalen Verschaltung und mit Jumper 5
> kann ich es invertieren. Die Schaltung und die CPU scheinen zu laufen,
> nur die Synchronisation passt nicht.

Was sagt denn Dein Oszi? /HSYNC da, 15,7 kHz? /VSYNC da, 60 Hz? NMI da?

Das Flachbildschirme auf Zeddies nicht gut zu sprechen sind ist bekannt, 
denen ist das Videosignal zu räudig. Am besten funktioniert immer noch 
ein möglichst primitiver Röhrenfernseher. Wobei Dein Kompatibler 
zumindest eine Austastung (Blanking) vor und nach dem HSync macht. Das 
Original springt direkt von Sync auf Weiss.

Allerdings gefällt mir Dein Bildinhalt nicht. Ausser dem "K" unten links 
sollte das Bild einfarbig sein. Wäre durchaus möglich dass die CPU in 
den Wald läuft, dann ist die Synchronisation ebenfalls dahin.

: Bearbeitet durch User
von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Die nächste Feststellung. Im Bastelkeller hat sich die Schaltung 
komplett geweigert ein Bild zu erzeugen und dann hatte ich eine Idee. Am 
anderen Monitor hatte ich, als Notlösung, die Schaltung über eine 
Powerbank versorgt. Und siehe da, wenn ich statt dem Labornetzteil die 
Powerbank nehme, dann kommt (meistens) ein Bild.

Am U8 messe ich auch ein HSYNC, aber an U13 Pin_3 liegt kein VSYNC an.


Leider geht mein Frequenzgenerator nur bis 5 MHz, daher kann ich auch 
keinen alternativen Takt einspeisen.

Ich habe die Signale etwas weiterverfolgt und Pin 20 vom Z80 ist 
beständig auf high und wenn ich es richtig sehe, dann kann somit kein 
VSYNC Signal generiert werden.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Ich komme der Sache näher. Nun habe ich zumindest nicht synchronisierte
>schwarze Flecken auf weißem Grund :-)

Das Bild sieht gar nicht schlecht aus. Es erinnert mich ein wenig an die 
Muster meines Zx81 vor 37 Jahren, als ich versucht haben, das RAM in den 
ROM Zeichensatzbereich zu legen.
Was ich in das Bild interpretiere: Deine Synchronisation funktioniert, 
die Videosignale werden korrekt ausgegeben. Das gleichmäßige Muster 
deutet darauf hin, dass der Zeichensatzadressbereich nicht stimmt. 
Vielleicht sind irgendwelche Jumper für das ROM nicht richtig gesteckt.

von chris_ (Gast)


Lesenswert?

Was mir gerade noch eingefallen ist: Vielleicht wäre es gut, wenn man 
sich ein "Inbetriebnahme-ROM" machen würde, mit dem man nach und nach 
die Peripherie testen kann. Man könnte ein Signal aus der 
Line-Out-Buchse ausgeben.

von Dirk S. (fusebit)


Lesenswert?

Nur die Jumper 4 (NTSC/PAL), 5+6 (Bildschirm invertieren) sind "aktiv".
Alle anderen habe eine vorgegebene Verbindung die erst auf der Platine 
durchtrennt werden müsste. Die sind auch alle vorhanden und damit sollte 
es für 16k RAM und ein 27C256 EPROM passen.
Ich habe auch extra die ROM Daten 4x hintereinander gebrannt, damit auch 
bei geänderten Adressjumpern immer das ZX81 ROM vorliegt.

Hier die Angaben von revspace:

The jumpers are:
JP1, select ROM size, default = 8K alternative = 16K
JP4, place to select 50Hz, open = 60Hz
JP5, Invert video, default = black text alternative = white text
JP6, first pixel fill, default = white, alternative = black
JP8, U5 pin 23, default = A11, alternative = A12
JP9, U5 pin 26, default = A13, alternative = +5V
JP10, U5 pin 20, default = nROMCS, alternative = A11
JP12, U3 PIN 1, default= GND (16K), alternative A14 (32K)

Obendrei kann ich kein VSYNC Signal bei U13 Pin_3 messen und das müsste 
ja vorhanden sein, oder?

von Soul E. (souleye) Benutzerseite


Lesenswert?

VSync kommt aus der Software. Wenn Du von Hand die entsprechenden 
I/O-Adressen ansteuerst und das Flipflop toggelt, dann läuft  die CPU 
irgendwo in den Wald.

Wird denn der NMI 60x pro Sekunde für eine Weile ausgeschaltet?

Dein Z80 bekommt ja einen vernünftigen Takt? TTL-High reicht nicht, da 
müssen echte 5 V anliegen.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

So sieht der Takt direkt an der CPU aus.

Auffällig ist auch das ich nur nach mehrmaligen Ein- und Ausschalten das 
Bild bekomme. Meistens klappt es nicht sofort...

U19 Pin_6 läuft mit 63,6 µs stabil durch.

Vielleicht von Bedeutung: Das Muster ist, soweit ich es sehe, bei jedem 
Start immer etwas anders, bleibt aber im Betrieb gleich. Es läuft halt 
immer durch.

: Bearbeitet durch User
von Soul E. (souleye) Benutzerseite


Lesenswert?

Das Muster ist der RAM-Inhalt nach dem Einschalten. Wenn der NMI stetig 
durchläuft macht die CPU irgendwas, aber keine Bildausgabe. D.h. Dein 
ROM-Code läuft nicht.

HSync kommt aus der Hardware und scheint ja in Ordnung zu sein.Kein Bild 
bekommst Du wenn nach dem Einschalten das VSync-Flipflop gesetzt ist.

D.h. jetzt müsstest Du den Logikanalyzer auf die CPU schnallen und mal 
schauen was die nach dem Reset so treibt.

von Dirk S. (fusebit)


Lesenswert?

Wo wir in der Gegend sind.
Mir ist gerade aufgefallen, dass im Schaltplan ein 8x10k 
Widerstandsnetzwerk als Pull-Up für die Datenleitung eingezeichnet ist.

In der BOM und daher auch verbaut ist aber 8x22k. Könnte das zu knapp 
sein?

von Dirk S. (fusebit)


Lesenswert?

Ich muss mir bald einen neuen Nutzernamen zulegen.

Bei Aufbau habe ich die BOM abgehakt, ich habe nun hunderte Male auf die 
Platine geschaut und nach Kurzschlüssen gesucht, aber das ich R12, R14 
und R15 an den Datenleitungen nicht bestückt hatte habe ich erst jetzt 
gemerkt.

Nun hat sich das Verhalten deutlich geändert. Es tut sich (fast) nichts 
mehr.
Nach dem Einschalten kann ich etwas 700ms Signale auf D0 messen, aber 
danach schaltet sich die CPU ab und alles ist ruhig. Der Takt liegt an, 
aber die Adress- und Datenleitungen sind 0V. Ich habe CPU und ROM mal 
getauscht, keine Änderung.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Leider habe ich keinen Logikanalyser. Ich habe mal D0 bis D3 auf das 
Oszilloskop gelegt, anbei die erwähnte Startsequenz, nach der sich 
nichts mehr tut.

Dazu ein willkürlicher Zoom in diese Sequenz. Die Signale sehen für mich 
nicht gerade sauber aus. Ist das normal beim Z80?

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ich glaube alles wird gut (irgendwann).

Mit der Modifikation U10 Pin_4 direkt auf U13 Pin_8 bekomme ich ein 
stabiles weißes Bild.

Als ich dann mit dem Oszilloskop an D0 gemessen habe, hatte ich nicht 
nur Signale, sondern nun läuft eine einzelne "Punktzeile" durch das 
Bild. Ist das vielleicht das ersehnte und nicht synchronisierte "K"

von chris_ (Gast)


Lesenswert?

>Ist das vielleicht das ersehnte und nicht synchronisierte "K"

Das könnte es sein. Ich weiß nur nicht mehr, ob das "K" am Programmstart 
oben oder unten auf dem Bildschirm steht ( Ich glaube unten ).
Vielleicht würde eine Änderung der Quarzfrequenz wie von Ale weiter oben 
vorgeschlagen, helfen.

>Leider habe ich keinen Logikanalyser.

Früher hatte ich auch keinen, aber mittlerweile gibt es ziemlich 
günstige, die sehr hilfreich sind:
Ebay-Artikel Nr. 184390574978

von Ale (Gast)


Lesenswert?

Ich werde mit dem Jumper JP4 probieren. Melde mich gleich.
Ich hab noch 3 Platinen übrig, falls jemand noch was bauen will :).

von Ale (Gast)


Lesenswert?

Jetzt ist VSYNC nicht mehr da.
NMIs sind nicht da. Ich hab alle jumpers entfernt, geht es nicht mehr, 
langsam geht es mir die Puste aus!

von Soul E. (souleye) Benutzerseite


Angehängte Dateien:

Lesenswert?

chris_ schrieb:

> Das könnte es sein. Ich weiß nur nicht mehr, ob das "K" am Programmstart
> oben oder unten auf dem Bildschirm steht ( Ich glaube unten ).

Das "K" ist unten links.


> Früher hatte ich auch keinen, aber mittlerweile gibt es ziemlich
> günstige, die sehr hilfreich sind: Ebay-Artikel Nr. 184390574978

Mit acht Kanälen? Schon Dein Z80 hat 40 Pins. Du brauchst acht 
Datenleitungen, zumindest die unteren acht Adressleitungen, und die 
CPU-Statussignale. Da sollten es schon 32 oder besser 80 Kanäle sein. 
Und externer Takt, kein USB-Clock. Üblicherweise taktet man den LA mit 
der doppelten oder vierfachen Taktrate des Zielsystems, und das Ziel 
bekommt den selben Takt dann über 1-2 Flipflops runtergeteilt. So bleibt 
die Abtastung synchron.

Im Anhang zu sehen sind einmal die ersten Befehle nach Reset (aus dem 
ZX81 ROM), und einmal ein Videobild. Man erkennt gut, dass der NMI 
teilweise dem Hsync folgt und teilweise abgeschaltet wird.


Sinclair hat die I/O-Funktionen sehr sparsam decodiert. Meist wird nur 
eine einzige Adressleitung verwendet. Um die Hardware zu testen (NMI 
an/aus, VSync an/aus) reichen bei gezogener CPU also relativ wenige 
Drähte, oder meinetwegen auch Arduino-Pins.

: Bearbeitet durch User
von Dirk S. (fusebit)


Lesenswert?

Vielen Dank für die Logikplots (oder Diagramme, oder wie nennt man die 
genau?).

Wäre ein LA1010 von Kingst vielleicht eine Option?
http://www.qdkingst.com/en/products/LA1010

Für AVR und Z80 sollte der doch ausreichen, oder?

Irgendwie will ich das Teil jetzt auch zum laufen bekommen.
Bin gerade dabei die Tastatur zu bauen :-)

von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:

> Wäre ein LA1010 von Kingst vielleicht eine Option?
> http://www.qdkingst.com/en/products/LA1010

Das ist doch auch so ein USB-Protokollanalyzer, der die Daten direkt in 
den PC schaufelt? Bei 16 Kanälen schafft der 16 MHz, was grundsätzlich 
reichen würde. Leider hängen diese 16 MHz aber am USB-Takt und kommen 
nicht von Deinem Zielsystem. 16 Kanäle sind auch reichlich knapp für ein 
8 bit-System. Da müsstest Du den Datenbus in zwei Durchgängen 
analysieren, erst bit 0..3 und dann 4..7.

Ich habe sowas: 
https://www.mikrocontroller.net/articles/Minila_Version_MockUp . Der hat 
32 Kanäle, speichert 256k Datensätze, und das mit externem Takt bis 100 
MHz. Ein HP 16700 wäre natürlich noch schöner, braucht aber ordentlich 
Platz im Labor.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Natürlich ist ein LA mit 32 Kanälen eine feine Sache. Doch wir haben vor 
35 Jahren die Z80 Systeme, dabei auch diverse ZX-Spektrum Nachbauten, 
auch ohne LA in Betrieb genommen. Das Mittel der Wahl war ein 
TTL-Prüfstift und eine einfache Single-Step-Logik [1]. Mit dieser Logik 
kann mindestens die korrekte Arbeitsweise des Bussystems und der 
Programmabarbeitung getestet werden. Funktioniert dieser Teil, lassen 
sich die restlichen Fehler auch finden. Heutzutage machen kleine 
Testroutinen auch keine großen Umstände mehr wie EPROM mit UV Löschen, 
wieder Brennen und erneut testen.

[1] 
http://zed80.com/Z80-RETRO/Resources/Schematics/CPU%20Single-Step%20Clock.jpg

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ich vermute das wir mit der Änderung zwischen U19 und U13 auf dem 
falschen Weg sind. Damit entsteht dann zwar ein Videosignal, aber es 
kommt nichts Sinnvolles von der CPU. Bis mein LA1010 ankommt muss ich 
mit 4 Kanälen auskommen. Ich habe mal nHALT, Hsync, nNMI und U16 Pin 11 
gemessen.

Wenn ich die Signal richtig verstehe, dann sieht man das die CPU etwa 
600 ms läuft, dann kommt ein HALT aus dem die CPU mit einem NMI geweckt 
wird. Nach einem Puls auf U16 Pin_11 (notwendig für VSYNC) kommt wieder 
ein HALT, aber es kommt kein NMI zum wecken mehr und es ist Schluss...

Ich habe jetzt mein altes Buch "Mikrocomputer selbstgebaut und 
programmiert" rausgesucht und werde mich mal in den Z80 einlesen. Das 
Buch war damals alles was ich mir rund um einen Z80 leisten konnte :-)

von chris_ (Gast)


Lesenswert?

Joe G.
>Natürlich ist ein LA mit 32 Kanälen eine feine Sache. Doch wir haben vor
>35 Jahren die Z80 Systeme, dabei auch diverse ZX-Spektrum Nachbauten,
>auch ohne LA in Betrieb genommen. Das Mittel der Wahl war ein
>TTL-Prüfstift und eine einfache Single-Step-Logik [1]. Mit dieser Logik
>kann mindestens die korrekte Arbeitsweise des Bussystems und der
>Programmabarbeitung getestet werden. Funktioniert dieser Teil, lassen
>sich die restlichen Fehler auch finden. Heutzutage machen kleine
>Testroutinen auch keine großen Umstände mehr wie EPROM mit UV Löschen,
>wieder Brennen und erneut testen.
Genau so sehe ich das auch. Das mit den Testroutinen habe ich weiter 
oben schon mal vorgeschlagen. Im Moment kann ich leider noch kein EEPROM 
programmieren, das kommt aber demnächst.
Gibt es rigendwo einen Z80 Online Assembler oder einen für Linux? Früher 
hatte ich das von Hand übersetzt.

von sulla80 (Gast)


Lesenswert?

1 Sekunde googeln bringt:

https://www.asm80.com/

von Ale (Gast)


Lesenswert?

Ich hab einen LA mit 34 Kanäle, ein Intronix LogicProbe. Ich muss nur 
einen Adaptor für den Z80 so es kann auf alle Adress/Data Pins greifen.

Wegen der Änderung des NMI Flipflops: es soll fukntionieren wie 
gezeichnet. Die Änderung soll nicht nötig sein. Verstehe noch nicht 
warum es nicht geht.
@Dirk: wenn ich mich richtig errinere, haben wir gedacht daß das NMI 
Flipflop irgendwie falsh verdrahtet ist.

von Dirk S. (fusebit)


Lesenswert?

Ale schrieb:
> Ich werde mit dem Jumper JP4 probieren. Melde mich gleich.
> Ich hab noch 3 Platinen übrig, falls jemand noch was bauen will :).

Vielleicht kannst Du ja dem Konstrukteur eine zur Verfügung stellen.
So wie ich es auf der revspace Seite lese hat er selber den ZX81+38 noch 
nicht aufgebaut.

https://revspace.nl/ZX81PLUS34_ZX81_clone
Unter Punkt 51 ist seine E-Mail-Adresse.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Gerade versuche ich mit dem ArduinoMega zu debuggen.

Es sieht stark danach aus, dass die Addressleitungen A13/A14 gegenüber 
dem Original vertauscht sind.

von Dirk S. (fusebit)


Lesenswert?

Da hast Du Recht, damit ist der Port ohne bodge wire nicht richtig 
nutzbar.
Allerdings ist das Problem ja erst relevant, wenn der ZX81+38 läuft :-D

von chris_ (Gast)


Lesenswert?

>Allerdings ist das Problem ja erst relevant, wenn der ZX81+38 läuft :-D

Hast Du überprüft, ob die Addressleitungen von der CPU zu den Speichern 
eventuell auch vertauscht ist?

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> Es sieht stark danach aus, dass die Addressleitungen A13/A14 gegenüber
> dem Original vertauscht sind.

Wenn die Vertauschung nur den Erweiterungsstecker betrifft, dürfte sie 
für Euer jetziges Problem nicht relevant sein.

Wenn Du Deinen Arduino anstelle der Z80-CPU anschliesst, kannst Du 
zumindest die Adressdecodierung durchtesten.

* geht der /CS-Pin am RAM auf low zumindest im Bereich 0x4000 - 07FF? 
Mit 32k RAM sollten 0x4000 - 0xBFFF aktiv sein.

* geht der /CS-Pin am EPROM auf Low im Bereich 0x0000 - 0x1FFF?

* wenn /M1 low ist, wird im Bereich 0xC000 - 0xFFFF RAM angesprochen, 
und zwar das bei 0x4000 liegende.


Und dann I/O:

* schreiben auf 0xFD schaltet den NMI aus

* schreiben auf 0xFE schaltet den NMI ein

* lesen von 0xFE während der NMI aus ist selektiert den Tastaturport 
(bei Euch U22) und schaltet VSync ein

* schreiben auf 0xFF schaltet VSync aus und setzt den Videozeilenzähler 
zurück.

Das lässt sich alles statisch und ohne Logikanalyzer testen. 
Drahtbrücken am CPU-Sockel reichen, mit Arduino als Signalgenerator ist 
es natürlich komfortabler.

von Dirk S. (fusebit)


Lesenswert?

Ich habe mal MREQ, IORQ, RD und WR beim starten gemessen und mir ist 
aufgefallen, dass die so früh aktiv werden, dass die Versorgungsspannung 
noch nicht voll da ist. Dadurch erreichen sie anfangs nur etwa 2,5V bei 
high.

Ich habe dann das alte Fenster-EPROM (das vermutlich nicht so glücklich 
über so geringe Pegel ist) durch ein aktuelles OTP-EPROM (was vielleicht 
etwas toleranter ist) getauscht und nun läuft das System über die 600ms 
hinaus und ich bekomme einen weißen Bildschirm.

Die Adressleitungen zum RAM und ROM habe ich gemessen, die scheinen 
richtig verdrahtet.

von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:
> Ich habe mal MREQ, IORQ, RD und WR beim starten gemessen und mir ist
> aufgefallen, dass die so früh aktiv werden, dass die Versorgungsspannung
> noch nicht voll da ist. Dadurch erreichen sie anfangs nur etwa 2,5V bei
> high.

Dann halte den Reset-Taster so lange fest bis die Betriebsspannung 
komplett hochgelaufen ist. Alternativ, vergrößer C5 auf 10 oder 22 µF. 
Clock muss sauber da sein bevor /Reset loslässt.

> Ich habe dann das alte Fenster-EPROM (das vermutlich nicht so glücklich
> über so geringe Pegel ist) durch ein aktuelles OTP-EPROM (was vielleicht
> etwas toleranter ist) getauscht und nun läuft das System über die 600ms
> hinaus und ich bekomme einen weißen Bildschirm.

Nun, 2,5 V High-Pegel sind grundsätzlich in Ordnung für TTL. Auch für 
EPROMs. CMOS erwartet grundsätzlich höhere High-Pegel, da sollten es 
schon 80% der Betriebsspannung sein. Es gibt aber CMOS-Serien, wie die 
hier verwendeten 74HCT, die mit TTL-Pegeln zufrieden sind, also >2,4 V 
als High akzeptieren.

74HC ohne T funktioniert nicht an einem NMOS-Z80. Alles was der Z80 
treibt muss 74HCT oder 74LS sein.


> Die Adressleitungen zum RAM und ROM habe ich gemessen, die scheinen
> richtig verdrahtet.

Werden die Chipselect für RAM und ROM in den richtigen Adressbereichen 
erzeugt? Schalten alle IO-Funktionen, also NMI-Freigabe, VSync und 
H-Counter-Reset wie sie sollen?

von Dirk S. (fusebit)


Lesenswert?

Das mit dem Reset hatte ich mir auch gedacht und habe ihn mit einer 
Drahtbrücke auf Masse gezogen, eingeschaltet und dann wieder geöffnet.
Aber dann passiert auf den Leitungen nichts.

Ich werde mir mal einen Taster anlöten und es noch einmal in Ruhe 
durchtesten...

Der Z80 ist ein aktueller CMOS Chip Z84C0010PEG

von chris_ (Gast)



Lesenswert?

Eigentlich wollte ich den ArduinoMega über Jumperkabel verbinden.
Aber die Steckleiste ist so eng, dass ich die Kabel nicht nebeneinander 
einstecken konnte. Deshalb habe ich jetzt eine Adapterplatine gelötet 
und die schöne Optik ist dahin ...
Man kann sich das Flachbandkabel eigentlich sparen und die 
Adapterplatine direkt als Verbinder nehmen.

Das Testprogramm für die RAM und ROM CS-Leitungen sieht folgendermaßen 
aus und die CS-Leitungen reagieren wie sie sollen.

Am Dekoder wäre auch noch nM1 und nRFSH angeschlossen. Die müsste man 
noch mal gesondert testen.
1
void testMemoryCsLines()
2
{
3
  set_nRFSH(HIGH);
4
  set_nMREQ(HIGH);
5
  set_nM1(HIGH);
6
7
  setDebugBusActive();
8
  setAddressbusActive();
9
10
  while (1)
11
  {
12
    Z80_writeAddrBus(ROM_ADR);
13
    set_nMREQ(LOW);
14
    delay(VERZ);
15
    delay(VERZ); // double delay to distinguish ROM from RAM on Oszi
16
    set_nMREQ(HIGH);
17
    delay(VERZ);
18
19
    Z80_writeAddrBus(RAM_ADR);
20
    set_nMREQ(LOW);
21
    delay(VERZ);
22
    set_nMREQ(HIGH);
23
    delay(VERZ);
24
  }
25
26
}

Heute morgen hatte ich den Sound Output Test noch mal laufen lassen, 
aber er ging nicht mehr.
Grund: Man muss den NMI-FlipFlop erst definiert mit
1
  Z80_out(0xFD, 0); // turn NMI off
zurücksetzen, sonst ist der Zustand undefiniert und der Sound Output 
funktioniert eventuell nicht.
So was könnte auch ein Unterschied zum echten Zx81 sein: Dass die ULA 
den FlipFlop am Anfang auf einen definierten Zustand setzt.

von Ale (Gast)


Lesenswert?

Meinem Z80 gibt so um die 3,3 V für Signalen die auf "1" stehen (Es ist 
angeblich eine CMOS Variante, aber frisst um die 100 mA). Und ich habe 
wie im Stromlaufplan HC Bauteilen genommen. Das Könnte auch so ein 
Problem sein. Mit einem NMOS Z80 ist auch nichts passiert. Ich frage 
mich auch warum HC bauteile anstatt HCT, die HCT sind genau so schnell 
and stromsparend.
Ich hab den Author kontaktiert und auf diese Seite aufmerksam gemacht, 
und gefragt wegen NMI Flipflop und HC Bauteile. Vielleicht kriegen wir 
eine Antwork und ein paar Ratschläge :)

von Dirk S. (fusebit)


Lesenswert?

So etwas in der Art werde ich wohl auch bauen müssen :-/

Ich kann jetzt drei Startverhalten immer reproduzieren.
Zur Kontrolle habe ich die Adressleitung A0, A1 und A2 auf dem Oszi.

1) Strom einfach an. Ich bekomme ein weißes Bild und permanente 
Aktivität auf den Adressleitungen.

2) Strom an, mit Resetschalter gedrückt. Sobald ich loslasse habe ich 
wieder für 600ms Aktivität auf den Adressleitungen und dann ist es 
vorbei. Dazu kein Signal am RCA.

3) Ausgehend von 1 oder 2 drücke ich Reset und lasse los. Nun würde ich 
erwarten das die CPU wieder startet, aber die Adressleitungen bleiben 
still. Dafür bekomme ich das Weisssignal auf dem RCA.

Jetzt muss ich wohl oder übel entweder auf den Logikanalysator warten, 
oder mir mit DIP-Schaltern und einer 40er IC-Fassung einen 
"Signalgenerator" basteln...

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> Am Dekoder wäre auch noch nM1 und nRFSH angeschlossen. Die müsste man
> noch mal gesondert testen.

Die sind wichtig wenn es dann an die Videoausgabe geht. Über /M1 = Low 
wird ja das RAM mit DFILE von 0x4000 nach 0xC000 gespiegelt.


> So was könnte auch ein Unterschied zum echten Zx81 sein: Dass die ULA
> den FlipFlop am Anfang auf einen definierten Zustand setzt.

Genau deshalb lautet der allererste Befehl im ZX81-ROM "OUT ($FD),A ".


Ale schrieb:

> (...) Ich frage
> mich auch warum HC bauteile anstatt HCT, die HCT sind genau so schnell
> and stromsparend.

Statt HCT kannst Du auch HC nehmen, wenn die gerade herumliegen. Aber 
nur an Stellen wo die Eingänge von HC oder HCT getrieben werden. 
HC-Eingänge funktionieren nicht an NMOS-Ausgängen (Z80, EPROM ohne "C" 
im Namen) und theoretisch nicht (praktisch aber oft) an TTL-Ausgängen 
(74, 74LS).

HC braucht >3,3 V als High und <1,6 V als Low. LS und HCT brauchen >2,4 
V als High und <0,8V als Low.



Dirk S. schrieb:

> Jetzt muss ich wohl oder übel entweder auf den Logikanalysator warten,
> oder mir mit DIP-Schaltern und einer 40er IC-Fassung einen
> "Signalgenerator" basteln...

Oder mit dem Arduino, die Idee ist gar nicht so schlecht.

Euren ZX-Kompatiblen gibt es auch als ZX81+35 in SMD. In dieser Form 
funktioniert er, im ZX-Forum haben das Ding einige Leute. Du könntest 
also mal Deinen Schaltplan mit der SMD-Variante vergleichen, ob da ggf 
Fehler beim Übertragen passiert sind. Leiterplatte und Schaltplan 
sollten ja CAD sei Dank konsistent sein.

von chris_ (Gast)


Lesenswert?

>Jetzt muss ich wohl oder übel entweder auf den Logikanalysator warten,
>oder mir mit DIP-Schaltern und einer 40er IC-Fassung einen
>"Signalgenerator" basteln...

Oder einen Arduino Due bestellen

https://www.amazon.de/SunFounder-ATmega2560-16AU-Board-compatible-Arduino/dp/B00D9NA4CY/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=arduino+mega&qid=1601124028&quartzVehicle=1480-1518&replacementKeywords=arduino&sr=8-3
und am Montag eine Adapterplatine dazu löten ...

von Dirk S. (fusebit)


Lesenswert?

Ich klingel gerade alle möglichen Signale durch und da ist mir etwas 
aufgefallen:

Sollte ich nicht zwischen den Data-Pins der CPU und den Data-Pins von 
ROM und RAM 1k messen? Da ist gar keine Verbindung!
Soweit ich es im Schaltplan mit den ganzen Bussen lesen kann ist da aber 
doch nichts ausser der 1k dazwischen?

von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:

> Sollte ich nicht zwischen den Data-Pins der CPU und den Data-Pins von
> ROM und RAM 1k messen? Da ist gar keine Verbindung!
> Soweit ich es im Schaltplan mit den ganzen Bussen lesen kann ist da aber
> doch nichts ausser der 1k dazwischen?

Das Video-Tutorial hast Du gelesen?

Der Z80 wird als Adresszähler für den Videospeicher missbraucht. Dazu 
führt er quasi den Bildschirmspeicher als "Programm" aus. Weil er damit 
natürlich nichts anfangen kann, wird sein Datenbus nach Masse 
kurzgeschlossen. Er sieht dann 0x00, also NOP, und inkrementiert seinen 
Adresszähler. Die 1k entkoppeln die Daten vom RAM (die ja für das 
Videobild gebraucht werden) von eben diesem NOP an der CPU.

Also ja, Du solltest von jedem CPU-Datenpin 10k nach VDD messen und 
zwischen CPU und RAM 1k.

von Dirk S. (fusebit)


Lesenswert?

Tutorial habe ich noch nicht gelesen, aber die 1k Verbindung ist 
vorhanden.
Mir war bisher nicht bewusst, dass mein Multimeter beim Einschalten des 
Piepser den Messbereich auf 600R feststellt :-D

Langsam macht mich das Teil Wahnsinnig.

von Soul E. (souleye) Benutzerseite


Lesenswert?

Ok, Fehlalarm. Die PNGs von der Leiterplatte sahen dahingehend auch 
unverdächtig aus.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hurra, ein Mini-Erfolg: Ich kann mit dem Mega das RAM lesen und 
schreiben ;-)

Wer einen besseren RAM-Test hat, kann ihn gerne zeigen.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ich habe ja ein 28C256 zur Verfügung, damit sollte ich ja einfache 
Testroutinen schreiben können. Eigentlich wollte ich mich mit Assembler 
vertraut machen, wenn das System funktioniert, aber nun brauche ich es 
wohl vorher. Im Buch von Klein sind ja einige Testroutinen für den 
Selbstbau und die versuche ich jetzt anzupassen.

In der normalen Bestückung des ZX81+38 sind ja dies die 
Speicherbereiche:
0x0000 - 0x3FF für das ROM
0x4000 - 0x7FF für das RAM

Hier das leicht angepasste Listing von Seite 103
ld a,(1000h)   Lese ROM
ld a,0         Lade 0
ld (4000h),a   0 ins RAM
ld a,(4000h)   Lade RAM
ld a,0ffh      Lade FF
ld (4000h),a   FF ins RAM
ld a,(4000h)   Lade RAM
jp start       Wiederhole

Anbei der hex-Code, stimmt der so?

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ich glaube ich freue mich :-)

Anbei vier Signale:
- gelb         CLK
- hellbau      CS ROM
- pink         CS RAM
- dunkelblau   nWR

Damit scheint die Adresslogik und die Speicheranbindung zu 
funktionieren, oder übersehe ich mal wieder etwas?

von Dirk S. (fusebit)


Lesenswert?

Wie aufwändig wäre ein Assemblerprogramm, welches auf dieser Hardware 
zum Beispiel schwarze und weiße Streifen oder ein anderes Testmuster 
ausgibt?
Dann könnte man sich auf die Problemlösung beim Videogenerator 
konzentrieren.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Wie aufwändig wäre ein Assemblerprogramm, welches auf dieser Hardware
>zum Beispiel schwarze und weiße Streifen oder ein anderes Testmuster
>ausgibt?

Ich denke, das sollte möglich sein.
Ich habe gerade versucht, deinen Assemblercode oben hier zu compilieren

https://www.asm80.com/?nfname=test&nftype=a80#

aber irgendwie bringt er einen Fehler

"Unrecognized ASM type"

von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:
> Wie aufwändig wäre ein Assemblerprogramm, welches auf dieser Hardware
> zum Beispiel schwarze und weiße Streifen oder ein anderes Testmuster
> ausgibt?

Sehr. Wie Du im Video-Tutorial gelesen hast wird das Videobild von der 
CPU erzeugt. Diese muss also exakt das passende Programm ausführen. Die 
Hardware, also Line Counter, HALT und NMI-Generator, unterstützen nur 
beim Timing. Das ist ein ziemlich abgefahrenes Konzept, was Mr Sinclair 
sich da ausgedacht hat, und um da richtig durchzusteigen braucht es eine 
Weile.

Daher muss als erstes sichergestellt sein dass die Peripherie arbeitet. 
NMI an/aus, VSync an/aus, RAM-Shadow bei /M1 low, etc. Den Ansatz, mit 
einem Arduino Testvektoren zu generieren, finde ich gar nich so 
verkehrt.

von chris_ (Gast)


Lesenswert?

Ein kleines Stück bin ich weiter.

https://www.asm80.com/

Im Emulator muss man das File mit der Endung *.z80 abspeichern.
Die Syntax ist ähnlich der hier
Vor allen Dingen muss man das File erst im Browser speichern, erst dann 
wird der Compilierknopf freigegeben. Will man den Debugger nutzen, muss 
immer zuerst compiliert werden.

https://github.com/skx/z80-examples/blob/master/ram-increment.z80

Dieser Code compiliert, bis auf den Befehl
1
 xor a,a

Doof, dass es so viele unterschiedliche Syntaxe für den Z80 zu geben 
scheint.

von (prx) A. K. (prx)


Lesenswert?

Verschiedene Hirne denken verschieden. Einer meint, weil es
  sbc a,e
gibt, müsse es auch
  xor a,e
geben, Andere wenden ein, dass es sbc nur deshalb mit 2 anzugebenden 
Operanden gibt, weil es auch
  sbc hl,bc
gibt. Was bei xor nicht der Fall ist. Also hat xor nur einen 
anzugebenden Operand.

von chris_ (Gast)


Lesenswert?

>Was bei xor nicht der Fall ist. Also hat xor nur einen
>anzugebenden Operand.

Naja, das mag ja schon sein. Es muss aber mindestens einen Assembler 
geben, der das Konstruct xor a,a versteht, was auch immer daraus gemacht 
wird. Oder der Code von hier hat nie compiliert:

https://github.com/skx/z80-examples/blob/master/ram-increment.z80

Wie auch immer, es wäre sehr nützlich, wenn man für den Online-Assembler 
eine Befehlsreferenz finden könnte.

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> Wie auch immer, es wäre sehr nützlich, wenn man für den Online-Assembler
> eine Befehlsreferenz finden könnte.

Sonst nimm doch einen Offline-Assembler: 
http://john.ccac.rwth-aachen.de:8000/as/

von chris_ (Gast)


Lesenswert?

>Sonst nimm doch einen Offline-Assembler:

Danke für den Link.
Mittlerweile schaffe ich es, einfach Dinke im Online-Compiler zu 
kompilieren.

Hier der Test für den Line-Out-Ausgang:
1
; Zx81plus38
2
; toogle the line out with maximum speed
3
4
    out ($FC),a     ; NMI off
5
loop:
6
    in a,($FE)      
7
    out ($FF),a     
8
    jp loop

Dirk, vielleicht kannst Du das mal in Dein EEPROM brennen und laufen 
lassen. Ich kann leider das EEPROM noch nicht schreiben.

von (prx) A. K. (prx)


Lesenswert?

Eigentlich sollte man bei solchen Boards das EEPROM durch RAM und einen 
AVR als Bootloader und Debugger ersetzen. ;-)

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

>Eigentlich sollte man bei solchen Boards das EEPROM durch RAM und einen
>AVR als Bootloader und Debugger ersetzen. ;-)

Witzigerweise machen das sogar einige. Ja, mit der Sinnhaftigkeit ist es 
so eine Sache ...
Eigentlich interssierte mich der Zx81 vor ein paar Jahren, heute ist er 
obsolet. Was ich beim Basteln am Projekt aber feststelle: Es macht 
tatsächlich Spaß wie früher. Man kommt immer ein kleines Stückchen 
weiter.

Ich kann dem Projekt aber vielleicht doch noch etwas mehr abgewinnen: 
Dieser Z80 ist wahrscheinlich mehr als 20 mal langsamer als ein AVR mit 
16MHz ( den Multiplier noch nicht mitbetrachtet ).
Die Frage ist aber: Die Hardware ist heute rasant schneller und die Zx81 
Hardware kann da nicht mithalten. Was ist aber mit den veränderten 
Softwaremethoden? Kann man mit dem heutigen Wissen etwas mehr machen, 
als die Ideen, die man vor 40 Jahren hatte? Das wäre dann der Anspruch: 
Etwas Neues auf alter Hardware, was es bis jetzt noch nicht gab.

Ahh ... jetzt kommen meine Erinnerungen wieder ...
1
; Zx81plus38
2
; toogle the line out 
3
4
    out ($FC),a     ; NMI off
5
loop:
6
    in a,($FE) 
7
    call delay
8
    out ($FF),a
9
    call delay
10
    jp loop
11
12
delay:
13
    ld b,$2         ; time constant for deley loop
14
delayLoop:
15
    djnz delayLoop
16
    ret

Das wird wahrscheinlich nicht laufen ... was machen wir mit dem 
Stackpointer?

von chris_ (Gast)


Lesenswert?

>von A. K. (prx)
>Eigentlich sollte man bei solchen Boards das EEPROM durch RAM und einen
>AVR als Bootloader und Debugger ersetzen. ;-)

Hier ist so ein Beispiel, bei dem genau das gemacht wird:

https://gitlab.com/8bitforce/retroshield-hw

von Dirk S. (fusebit)


Lesenswert?

Nächster Versuch dem Problem näher zu kommen :-)

Ich habe das ROM am Anfang um D3 FD ergänzt, damit sollte ja der NMI 
Generator abgeschaltet werden. Wird er aber nicht.

chris_ warum hast Du $FC? Das original ROM beginnt doch auch mit D3 FD

: Bearbeitet durch User
von Dirk S. (fusebit)


Lesenswert?

Wieder zu früh gefreut :-(

Auch wenn das Muster zu dem passt, was ich bei dem einfachen 
Speichertest erwartet hätte. Ich bekomme die gleichen Signale auch ohne 
eingesetztes ROM und/oder RAM.

Ohne CPU ist es aber weg.

von chris_ (Gast)


Lesenswert?

>chris_ warum hast Du $FC? Das original ROM beginnt doch auch mit D3 FD

Du hast recht, es muss FD sein. Tja, so spät Abends macht man viele 
Fehler.
Hast Du den Code mal ausprobiert und das Signal am Line-Out angeschaut?

von Dirk S. (fusebit)


Lesenswert?

Ich habe das gerade mal getestet, aber ohne Erfolg. Gleiches Ergebnis 
wie ohne ROM, oder mit meinem RAM-Test.

Den teste ich gleich nochmal, weil der Maschinencode falsch war. Ich mus 
ja low-byte und dann high byte setzen.

Da ich das händisch übersetze hier mal der Maschinencode zum 
gegenprüfen:

D3 FD DB FE D3 FF C3 02 00

Am Pin 1 des Cassette Output ist low.

von Dirk S. (fusebit)


Lesenswert?

Ich mache nichts mehr ohne meinen Logikanalysator.
Der soll morgen ankommen.

Irgendwie scheint es als würde gar nicht, oder zumindest nicht richtig 
auf das ROM zugegriffen. Egal ob ich keines, ein leeres oder eines mit 
einem der Testroutinen einsetze, das Verhalten ist, soweit ich es mit 
dem Oszi erkennen kann immer gleich.

Nur beim ZX81 ROM sieht es anders aus. Da habe ich aber auch 4-mal das 
gleiche Abbild gebrannt. Daher ist es komplett voll.


Jetzt habe ich das EEPROM mal mit Zufallszahlen gefüllt und siehe da, es 
passieren andere Dinge. Ist vielleicht doch etwas an der Adresslogik 
und/oder Verdrahtung faul?

: Bearbeitet durch User
von chris_ (Gast)



Lesenswert?

Bei mir klappen mittlerweile die ersten Schritte.
Ich habe den Adressdecoder überbrückt und die nMREQ Leitung wie im Bild 
direct als RAM-CS verwendet.

Mit diesem Code
1
; Zx81plus38
2
; toogle the line out 
3
4
    out ($FD),a     ; NMI off
5
loop:
6
    in a,($FE)   
7
8
    ld b,$ff         ; time constant for deley loop
9
l1:
10
    djnz l1
11
    out ($FF),a     
12
13
    ld b,$ff         ; time constant for deley loop
14
l2:
15
    djnz l2
16
17
    jp loop

kann ich einen Rechteckton am angeschlossenen Lautsprecher mit ~500Hz 
erzeugen.

Der AtmegaDebugger hat mittlerweile ein kleines Menue. Ich kann den 
Inhalt des RAMs editieren. Das geschieht, indem ich nBUSREQ auf 0 ziehe, 
10ms warte und dann einfach mit dem Atmega direkt in das RAM schreibe. 
Danach kann ich nBUSREQ und die anderen Leitungen freigeben und dann 
direkt einen Reset auslösen, um das Programm zu starten.

Den ArduinoMega muss ich mit einem externen Netzteil versorgen, damit 
der Z80 echte 5V bekommt und nicht die reduzierten 4.3V durch USB.
Auf den Spannungsregler des ArduinoMega habe ich einen kleine Kühlkörper 
eines Schrittmotortreibers geklebt, da die ganze Schaltung 460mA zieht 
und der Spannungsregler bei 8V Versorgung ziemlich heiß wird.

von chris_ (Gast)


Lesenswert?

Im anderen Thread wird gezeigt, wie man eine Tastatur für den Zx81 baut:

Beitrag "Re: STECCY - ZX-Spectrum-Emulator mit STM32"

Bilder zu einem Keyboardbau gibt es auch schon beim Zx81plus34:

https://revspace.nl/ZX81PLUS34_ZX81_clone

Allerdings ist dort nicht so schön, dass die Tasten aus der Folie heraus 
schauen.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Die Tastatur ist schon fertig und wartet auf den ZX81 :-)

Die Platine ist gefräst, Layout kann ich bei Bedarf hier reinstellen.
Für die Tastenbezeichnung habe ich einen Ausdruck unter 25g/m² 
Glasgewebe auf Sperrholz laminiert und anschließend gefräst. Mit 
Distanzbolzen schauen die Tasten nur 1 mm oben raus und die 
GfK-Beschichtung ist wiederstandsfähig.

von Soul E. (souleye) Benutzerseite


Lesenswert?

Gute Idee mit den Microtastern.

Sowas ist dann richtig schick, mit Cherry MX und individuell bedruckten 
Tastenkappen: 
https://forum.tlienhard.com/phpBB3/viewtopic.php?p=36449#p36449

von Dirk S. (fusebit)


Lesenswert?

Ziemlich schick die Cherry, aber wohl ganz ein kleines bisschen (zu) 
teuer :-D
Obendrein ja absolut nicht stilecht, im Vergleich zur recht bescheidenen 
original Tastatur.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ich habe noch ein paar Änderungen gemacht und rumgespielt.
C5 hat jetzt 10 µF und so startet der Z80 auch erst wenn die Versorgung 
wirklich gut ist. Damit startet das System nun immer exakt gleich (mit 
der nach 600 ms ist Schluss-Sequenz). R42 und 43 habe ich mal testweise 
deutlich verkleinert um saubere CS-Signale zu bekommen. Wenn ich es 
richtig verstehe sind sie ja ohnehin nur dazu vorhanden, das der 
Erweiterungsport CS überschreiben kann und das liegt wohl noch in weiter 
Ferne.

Anbei nochmal die 600ms Sequenz, diesmal mit NMI, VSYNC, sowie RAM und 
ROM CS. Die CPU scheint NMI doch zu deaktivieren, dann erfolgen 
Speicherzugriffe und kurz vorm Ende gibt es tatsächlich einen VSYNC 
Impuls und dann ist es vorbei...

von chris_ (Gast)


Lesenswert?

>Die Tastatur ist schon fertig und wartet auf den ZX81 :-)

Die sieht ja sehr interessant aus. Kannst Du auch Bilder vom Innenleben 
posten? Mit Glasgewebe habe ich noch nie gearbeitet und weiß leider 
nicht, wo man das passende her bekommt.

Gibt es jemand, der schon mal ein passende Gehäuse gemacht hat? 
Vielleicht könnte man eines mit dem 3D-Drucker erstellen und mit der 
Methode etwas verfeinern:
https://hackaday.com/2020/09/23/reforming-3d-prints-with-salt-and-heat/

von chris_ (Gast)


Lesenswert?

Der Grund, warum ich so langsam mit dem Debugger voran gehe, ist, dass 
ich so die Fehler viel besser finde.

Bis jetzt ist mir zum Zx81plus38 folgendes aufgefallen:

1. Die Addressleitungen A13 und A14 am Anschlussstecker sind vertauscht

2. Die Spannungsversorgungspins beim Original Zx81 sind 5V und 9V. Beim 
Zx81plus38 sind sie hinten kurzgeschlossen.

3. Der Wait Anschluss des Z80 ist hart an ein FlipFlop angeschlossen, so 
dass man mit einem externen Debugger kein Single-Step machen kann.

Meiner Meinung nach sollten die Punkte alle bei einem Redesign besser 
gelöst werden.

von Jesus (Gast)


Lesenswert?

Meine Güte mit diesen Fehlern ist die PCB Schrott. Eine Unverschämtheit 
sowas anzubieten.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

chris_ schrieb:
>
> Die sieht ja sehr interessant aus. Kannst Du auch Bilder vom Innenleben
> posten?

Da gibt es nicht viel Innenleben. Das sind einfach 6x6mm Taster mit 10mm 
Höhe.

von chris_ (Gast)


Lesenswert?

>Da gibt es nicht viel Innenleben. Das sind einfach 6x6mm Taster mit 10mm
>Höhe.

Danke für das Bild :-)

>Meine Güte mit diesen Fehlern ist die PCB Schrott. Eine Unverschämtheit
>sowas anzubieten.

Nein, sie nicht. Die Platine ist ganz nett und für die erste Version so 
schlecht nicht. Wenn wir den letzten Fehler gefunden haben, wird sie mit 
einem Patch auch funktionieren.
Außerdem wird sie nicht angeboten, sondern man muss sie selber bei einem 
PCB-Hersteller machen lassen. Man kann aber die Layoutdaten 
herunterladen.

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> 3. Der Wait Anschluss des Z80 ist hart an ein FlipFlop angeschlossen, so
> dass man mit einem externen Debugger kein Single-Step machen kann.

"The WAIT line is used to finely synchronize the Z80 with NMI timing 
twice during each video frame with the NMI_CONT service routine at ROM 
address 02A9." Im originalen ZX81 wird Wait über einen Transistor 
angesteuert. Da kann man einen externen Low-Pegel drüberlegen.

Du könntest den Flipflop-Ausgang mit einem Serienwiderstand entkoppeln.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Der LA1010 ist da und ich musste ihn gleich einmal ausprobieren. Mein 
RAM/ROM-Test hat irgendwie keine sinnvollen Werte ergeben, daher habe 
ich ein noch einfacheres "Programm" geschrieben und auf der 
vollbestückten Platine getestet.

D3 FD      Out (FD),a
D3 23      Out (23),a
C3 00 00   wiederhole

Und siehe da, die CPU macht wie ihr befohlen!

Solange ich nur das ROM anspreche scheint es also zu funktionieren. Die 
nächsten Tage habe ich leider kaum Zeit um weiter zu machen, auch wenn 
es natürlich sehr reizt :-)


PS: 32 Kanäle wären echt super praktisch ;-D

: Bearbeitet durch User
von Ale (Gast)


Lesenswert?

Ich hab HCT chips bestellt für die die ich mit HC besückt habe, wenn die 
kommen werde ich weiter testen. Mir ist noch was eingefallen: Wenn ich 
ein Powerbank zur Versorgung nutze, nach dem ersten HALT Befehl der 
Processor macht nichts weiter weil WAIT = 0. Und wenn ich ein Netzteil 
als Versorgung anschliesse geht es. Aber ohne vernünftige Bauteile (HC) 
wird wenig...

von olibert (Gast)


Lesenswert?

Dirk S. schrieb:
> Jetzt habe ich das EEPROM mal mit Zufallszahlen gefüllt und siehe da, es
> passieren andere Dinge. Ist vielleicht doch etwas an der Adresslogik
> und/oder Verdrahtung faul?

Ich hatte ein aehnliches Problem vor 2 Jahren mit einem einfachen 
Z80-Einplatinenrechner auf Lochraster mit Faedeldraht (laueft mit 
modifizierten MS Basic von 1979 und UART-Ausgabe): Zwei der oberen 
Addressleitungen waren vertauscht mit lustigen Effekten.

von chris_ (Gast)


Lesenswert?

>Solange ich nur das ROM anspreche scheint es also zu funktionieren. Die
>nächsten Tage habe ich leider kaum Zeit um weiter zu machen, auch wenn
>es natürlich sehr reizt :-)

So geht's mir auch, es ist eher ein Wochenendprojekt.

Wenn das ROM funktioniert, könntest Du das Rechtecktonprogramm ( 
Beitrag "Re: ZX81 plus38 Clone" ) ins ROM flashen 
und die Signale mit dem LA ansehen.

Weil ich mein EEPROM nicht programmieren kann, habe ich das RAM 
verwendet, das ROM sollte aber genauso funktionieren, falls nicht die 
zusätzliche Peripherie ( ich hatte ja nur ein Teil gesteckt ) 
irgendwelche Interrupts oder Waits verursacht.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Moin,

der Rechteckgenerator funktioniert auch.

von Erich (Gast)


Lesenswert?

Dirk S. schrieb:
> PS: 32 Kanäle wären echt super praktisch ;-D

Ja,
und ein Disassembler dazu.
So hat das früher ausgesehen:
http://lc64.blogspot.com/2018/03/gould-k115d-watch-z80-working-live.html

Gruss

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Langsam kommen wir der Sache näher, glaube ich (mal wieder).
Das Rechteckprogramm läuft, der ROM-Test auch. Dann habe ich einen RAM 
Test gemacht. Der läuft auch, solange ich Zeile 9 und 10 nicht einbaue, 
wo ich zusätzlich wieder Line Out toggle.

Wenn OUT ($FD),a gesendet wird, kommt eigentlich immer noch ein NMI 
Signal durch und das verursacht dann totales Chaos und die CPU hängt 
sich auf. (Bisher habe ich noch nicht getestet einen Rücksprung in 
0x0066 zu schreiben.)

Die Bedeutung des Timings habe ich aber geprüft. Nachdem ich einige 
zusätzliche "NMI aus" eingefügt habe, erreicht die CPU den PIN toggle 
Bereich erst nach dem letzten NMI und alles funktioniert (Ich sehe das 
0xAA auf dem halben Adressbus und ein hochfrequentes Signal auf dem Line 
Out).

von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:

> PS: 32 Kanäle wären echt super praktisch ;-D

Auch da wirst Du irgendwann das Bedürfnis nach einem word recognizer 
haben, um auf Adresse $4711 triggern zu können und troztdem nur vier 
Kanäle für die Adressbits zu vergeuden :-)

Merk Dir schonmal den 74HCT688 vor.


Erich schrieb:

> So hat das früher ausgesehen:
> http://lc64.blogspot.com/2018/03/gould-k115d-watch-z80-working-live.html

Ja, mit so einer Kiste bist Du ganz vorne dabei. Auch HP 16xxx, ab und 
zu werden die recht günstig angeboten. Wenn nur der Platzbedarf nicht 
wäre...

Und nein, ein USB-Protokollanalyzer ist kein Ersatz für einen echten LA 
mit internem Speicher und externem Takteingang. Saleae & Co sind genial 
zum Debuggen von SW auf bekannt funktionierender HW und zum Analysieren 
von SPI, CAN, I2C etc. Aber nicht für Anwendungen, wo die Abtastung mit 
einem externen Systemtakt synchronisiert sein muss, wie bei diesen alten 
TTL-Gräbern. Wer nicht synchronisieren kann, der muss ordentlich 
überabtasten, und dann bist Du schnell bei >100 MHz Samplerate.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

:-)

von Dirk S. (fusebit)


Lesenswert?

Was habe ich gemacht?
Den Pin_06 von U19 hochgebogen, damit ist der NMI Ausgang nicht mehr 
verbunden. Nun gibt es ein, logischerweise unsauberes Bild. Es bleibt 
aber synchron, wenn ich es als NTSC ausgebe. Meine Konverterkiste von 
e... kann zum Glück beides.

Die Tastatur funktioniert auch zum Teil. Allerdings reagiert sie als 
wäre immer "shift" gedrückt.

Könnte es sinnvoll sein die 74LS32 und 74HC00 gegen HCT Typen zu 
tauschen?
Die müsste ich aber erst bestellen...

: Bearbeitet durch User
von Martin D. (mahjongg)


Lesenswert?

chris_ schrieb:

>>Jumper unter(?) Ram/Rom ...
> Das ist tatsächlich schlecht. Mein Kollege hat es dadurch gelöst, dass
> die Jumper unter der Platine sind, was aber Abstandsbolzen in der
> Platine erforderlich macht.

Forgive me for writing this in English, as you might know I'm Dutch, and 
my english is much better than my german, although I can perfectly read 
german, so I will write in English and use a translator to convert it to 
german. see below.

By the way, I'm indeed the designer of the ZX-81+38, and was invited to 
come here to help out builders of my clone.

chris_ schrieb:

>>Jumper unter(?) Ram/Rom ...
> Das ist tatsächlich schlecht. Mein Kollege hat es dadurch gelöst, dass
> die Jumper unter der Platine sind, was aber Abstandsbolzen in der
> Platine erforderlich macht.

these are not really meant to be jumpers, but wire links, with the 
default link already present as copper traces, so if you use the default 
configuration you don't have to place anything, if you need to change 
the configuration you just scratch the default copper trace though and 
use a thin wire (cut from a resistor, for example) to bridge the two 
holes.

Due to corona, and me consequently being fired from my old job, I have 
been in total self quarantine since the start of the COVID-19 crisis.
And have not been able to build my own copy of the ZX-81plus38 yet.
I would be grateful if someone could donate me a PCB, so I can built a 
prototype.
My makerspace is also in (partial) quarantaine, it can accept just ten 
persons, they have to wear a mask, and can stay just four hours.
So I took my laptop I used to design the ZX-81plus38 home, and I used it 
to create the bill of materials with. It contains two errors, firstly 
the RCA-jack I listed is of the wrong type, the PSG01546 it doesn't fit 
the PCB, you should instead use the much simpler FC68391.
A second discrepancy is the Pullup resistor pack, the schematic says it 
contains 4K7 resistors, but the BOM lists 10K resistors, either value 
would work, but originally the value should be 10K, same as the previous 
clone that was designed with SMT (surface mount components).

As for the question whether there are design errors in the ZX-81plus38, 
I'm quite sure there should not be, but I'm not a super-human, and the 
ZX-81plus38 was a complete redesign, using a new OS (Linux instead of 
windows) and a new CAD system (KiCad instead of Orcad), so it has been a 
manual conversion, not an automatic (copy-paste) conversion. And many 
footprints were hand made.
But unless I made a mistake in the conversion, the clone SHOULD work, as 
the old clone definitely DID work. If you doubt if I made a mistake in 
the schematic, please compare the part you are doubting with the older 
schematic of the ZX-81plus35.

now the translation for those who cannot read english:

-----------------------------------------------------

Verzeihen Sie mir, dass ich dies auf Englisch schreibe, da Sie 
vielleicht wissen, dass ich Niederländisch bin und mein Englisch viel 
besser ist als mein Deutsch, obwohl ich Deutsch perfekt lesen kann. 
Deshalb werde ich auf Englisch schreiben und einen Übersetzer verwenden, 
um es in Deutsch umzuwandeln.

Übrigens bin ich in der Tat der Designer des ZX-81 + 38 und wurde 
eingeladen, hierher zu kommen, um den Bauherren meines Klons zu helfen.

chris_ schrieb im Beitrag # 6408709:

>> Jumper unter (?) Ram / Rom ...
> Das ist schlecht. Mein Kollege hat es organisiert, dass
> die Jumper unter der Platine sind, war aber Abstandsbolzen in der
> Platine macht macht.

Dies sind eigentlich keine Jumper, sondern Drahtverbindungen, wobei die 
Standardverbindung bereits als Kupferspuren vorhanden ist. Wenn Sie also 
die Standardkonfiguration verwenden, müssen Sie nichts platzieren. Wenn 
Sie die Konfiguration ändern müssen, kratzen Sie einfach die 
Standard-Kupferspur und verwenden Sie einen dünnen Draht (z. B. von 
einem Widerstand abgeschnitten), um die beiden Löcher zu überbrücken.

Aufgrund der Korona und der Tatsache, dass ich von meinem alten Job 
entlassen wurde, befand ich mich seit Beginn der COVID-19-Krise in 
völliger Selbstquarantäne. und mein Gesundheit hat sich verschlechtert 
(aber ich habe keine Covid!).
Und konnte noch keine eigene Kopie des ZX-81plus38 erstellen.
Ich wäre dankbar, wenn mir jemand eine Leiterplatte spenden könnte, 
damit ich einen Prototyp bauen kann.
Mein Makerspace befindet sich ebenfalls in (Teil-) Quarantäne, er kann 
nur zehn Personen aufnehmen, sie müssen eine Maske tragen und kann nur 
vier Stunden bleiben.
Also nahm ich meinen Laptop mit, mit dem ich den ZX-81plus38 entworfen 
hatte, und erstellte damit die Stückliste. Es enthält zwei Fehler: 
Erstens ist die von mir aufgeführte Cinch-Buchse vom falschen Typ, die 
PSG01546 passt nicht auf die Platine, stattdessen sollten Sie den viel 
einfacheren FC68391 verwenden.
Eine zweite Diskrepanz ist das Pullup-Widerstandspaket, das laut 
Schaltplan 4K7-Widerstände enthält. In der Stückliste sind jedoch 
10K-Widerstände aufgeführt. Beide Werte würden funktionieren, aber 
ursprünglich sollte der Wert 10K betragen, genau wie beim vorherigen 
Klon, der mit SMT (Surface Mount) entworfen wurde Komponenten).

Was die Frage betrifft, ob es Designfehler im ZX-81plus38 gibt, bin ich 
mir ziemlich sicher, dass dies nicht der Fall sein sollte, aber ich bin 
kein Übermensch, und der ZX-81plus38 war ein komplettes Redesign unter 
Verwendung eines neuen Betriebssystems ( Linux anstelle von Windows) und 
ein neues CAD-System (KiCad anstelle von Orcad). Es handelt sich also um 
eine manuelle Konvertierung, nicht um eine automatische Konvertierung 
(Kopieren und Einfügen). Und viele Fußabdrücke wurden von Hand gemacht.
Aber wenn ich bei der Konvertierung keinen Fehler gemacht habe, SOLLTE 
der Klon funktionieren, da der alte Klon definitiv funktioniert hat. 
Wenn Sie Zweifel haben, ob ich im Schaltplan einen Fehler gemacht habe, 
vergleichen Sie bitte den Teil, an dem Sie zweifeln, mit dem älteren 
Schaltplan des ZX-81plus35.

von Dirk S. (fusebit)


Lesenswert?

Hi Martin,

great to have you here!
As you can see from my previous post the ZX81+38 is mostly working.
But there is something wrong with the NMI Generator and/or the NMI 
deactivation mechanism. The system only runs with U19 Pin 6 bended away 
to disconnect the NMI. But then the picture can't be right...

My keyboard now works, there was a solder bridge activating the "shift" 
all the time.

von Alex P. (ra_p)


Lesenswert?

Hello Martin, great hat you could join. Let me know where should I send 
a board, you also have my email address.

I got some LS chips, I'll try this evening.

von Martin D. (mahjongg)


Lesenswert?

Dirk S. schrieb:
> The system only runs with U19 Pin 6 bended away
> to disconnect the NMI. But then the picture can't be right...

Did you try to run basic in fast mode? Just like a Z80?

von Dirk S. (fusebit)



Lesenswert?

No difference between FAST and SLOW mode.

I've attached some more logic diagramms. I tried two things.
1) NMI bended away, connected to the LA and the NMI line pulled to GND. 
This way the system operates, but the picture is nearly impossible to 
read. There are no NMI generated at all. So it not the presence of the 
NMI causing issues, it's the absence!

2) Normal configuration. As before after 600 ms the system halts.

With NMI bended away I can use the ZX81, the lowest row of the screen is 
barely readable and it executes commands.


Just let me know if I should measure a specific signal and/or time. I'm 
just trying, as I'm not familiar with the ZX81 yet.

: Bearbeitet durch User
von Dirk S. (fusebit)


Lesenswert?

I had a closer look into the diagramms and got confused, but figured it 
out.
The Signal labelled as nHSYNY is in fact HSYNC. I probed the wrong pin!

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ich bekomme nun ein recht gutes Bild hin.
Dazu muss ich den Pin_6 von U19 hochbiegen und die nNMI Leitung am 
Erweiterungsport über einen langen Draht und 100k auf Masse ziehen.
Wenn ich dann die Pinleiste anfasse ist das Bild fast perfekt :-D

Scheinbar koppeln da 50 Hz ein, allerdings synchronisiert das Display 
nur NTSC Modus.

von chris_ (Gast)


Lesenswert?

>Ich bekomme nun ein recht gutes Bild hin.

Gratulation zu Deinem Erfolg :-)
Jetzt wird die Suche nach der elektrischen Ursache interessant.

@alle
Ich finde, man müsste mal ein Blockschaltbild des Systems zeichnen, bei 
dem die wichtigsten Signale beschrieben sind. Was meint Ihr?

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Das Problem liegt beim nNMI Geberator.
Er lässt nach dem Start genau einen nHSYNC durch und danach kommen nWR 
und nIORQ nicht mehr zeitgleich, dadurch gibt es kein nNMI mehr.
Und dort wo sie zeitgleich auftreten, da blocken A0/A1 das der nHSYNC 
durchkommt.

: Bearbeitet durch User
von Martin D. (mahjongg)


Angehängte Dateien:

Lesenswert?

Ich würde das Schema des ZX-81plus35 mit dem Schema des ZX-81plus38 
vergleichen. Wenn es einen Fehler in der NMI-Behandlung gibt, muss es 
einen Unterschied zwischen den beiden Schemata geben, leider habe ich zu 
Hause keine Papierdiagramme zum Vergleich, und ich habe keinen Drucker. 
Deshalb muss ich auf dem Bildschirm meines Computers nach dem 
Unterschied suchen, aber das ist fast unmöglich. Ich könnte meinen 
Laptop neben den Bildschirm meines Desktop-Computers halten, aber auf 
den Fotos sehe ich, dass Dirk einen Zeitplan für Papier hat. Ich schlage 
daher vor, dass Dirk auch den Schaltplan des ZX-81plus35 druckt und die 
DMA-Schaltung beider Computer vergleicht.
Natürlich werde ich diesen Unterschied auch selbst suchen, aber wie 
gesagt bin ich heute nich 100% geistig klar.

Aber Ich sage noch einmal, der ZX-81plus35 funktioniert zu 100%, sehe 
oben, wo ich mit ein kleines program die Zeichensatz zeige.

Viel Glück.

: Bearbeitet durch User
von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Hello,

so far I can see there comes a 0xFF on the lower address byte instead of 
the 0xFE to enable the nNMI. Now I saw that in the column counter area 
the 74LS125 U6 (Pin 1 + 2) can force the A0´to high.

I checked this with the LA, but it seems to be okay.

I also compared the NMI generator and column counter with the ZX97 
schematic and they are identical.

If I'm right there is no other possibility to force A0 high, beside the 
CPU and the U6.

The second picture is the correct one.

: Bearbeitet durch User
von Dirk S. (fusebit)


Lesenswert?

Da ich ja etwas erkennen kann und einfache Befehle wir PRINT ausgeführt 
werden, habe ich mal getestet ob das System, abgesehen von der Anzeige, 
funktioniert.
Tut es leider nicht.

Dieser Speichertest endet mit 1/20:

10 FOR N=16640 TO 65536 STEP 256
20 POKE N,0
30 IF PEEK N<>0 THEN GOTO 50
40 NEXT N
50 PRINT "MEMORY SIZE ";(N/1024)-16;"K"

Im Emulator http://www.zx81stuff.org.uk/zx81/jtyone.html läuft er.

Und das hier, aus dem Druckerhandbuch, führt zum Absturz. Im Emulator 
funktioniert es aber auch.

10 FOR J=1 to 10
20 FOR I=0 to J*12
30 PLOT 32+J*2*SIN(I/(J*6)*PI), 22+J*2*COS(I/(J*6)*PI)
40 NEST I
50 NEXT J

Ich komme nicht mehr wirklich weiter, da ich nicht mehr weiß wo ich 
suchen soll :-(

Edit: Es kann sein das er beim zweiten Programm gar nicht abstürzt. Die 
Synchronisation zum Bildschirm geht verloren. Das passiert aber auch bei
10 PRINT RND
20 GOTO 10

Da geht das Bild weg und kommt nach einiger Zeit mit dem richtigen 
Ergebnis wieder.

: Bearbeitet durch User
von Dirk S. (fusebit)


Lesenswert?

Das der Bildschirm weggeht und das untere Adressbyte auf 0xFF geht ist 
ja vermutlich genau richtig.
Die CPU arbeitet die ganze Zeit im FAST-Mode. Für den SLOW-Mode braucht 
sie ja den nNMI und daher stoppt sie mit komplett verdrahtetem U19 wohl 
auch nach 600ms. Sie wartet auf nNMI, nur warum kommt er nicht?

Beitrag #6423524 wurde vom Autor gelöscht.
Beitrag #6423535 wurde vom Autor gelöscht.
von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

So, erstmal eine gute Nacht :-)

Man beachte das grüne, dünne, lange Laborkabel zwischen dem 100k an GND 
und dem nNMI-Pin. Nur so und im NTSC-Mode gibt es ein Bild. Wenn ich den 
kurzen grauen Draht direkt an den Widerstand löte, dann geht es nicht.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Dirk S. schrieb:
> Dieser Speichertest endet mit 1/20:
>
> 10 FOR N=16640 TO 65536 STEP 256
> 20 POKE N,0
> 30 IF PEEK N<>0 THEN GOTO 50
> 40 NEXT N
> 50 PRINT "MEMORY SIZE ";(N/1024)-16;"K"

Fragen:

1. Wieviel RAM hast Du, bei welcher Adresse beginnt es, wo endet es?
2. In welchem Adressbereich im RAM liegt das Basic-Programm selbst?

Ich habe zwar wenig Ahnung vom ZX81 (mehr vom ZX-Spectrum), könnte mir 
aber gut vorstellen, dass die POKEs das Basic-Programm selbst 
kaputthauen. Oder liegt das unterhalb von 16640? Wo liegt der 
Z80-Stackpointer?

> Im Emulator http://www.zx81stuff.org.uk/zx81/jtyone.html läuft er.

Vielleicht, weil der Emulator mehr RAM besitzt?

von Ale (Gast)


Lesenswert?

One difference is that the nWAIT signal is in the +34 not connected to 
the Q output of the '74. When NMIs are disabled after the memory test, 
as the traces show see above, the Flip-Flop U18A never gets set because 
NMIs are disabled. If one pulls nWAIT high, I did with a 6k8 resistor, 
then the code runs, I get VSYNC, I have to see it in the TV...

von Ale (Gast)


Lesenswert?

We only have 16 kBytes, from 16384 to 32767.

von Ale (Gast)


Angehängte Dateien:

Lesenswert?

So, it works, kind of. The shifted lines at the top are much more 
pronounced that they where with the TK-85 I had as a kid, and the 
jumpers are in some arbitrary position. I wonder about the black line on 
every char.

What I did: I pulled nWAIT high and disconnected it from the flip-flop. 
I can try to pull the NMI low to see the difference.

Somehow not all power banks I used to supply the board seem to give 200 
mA reliably.

@Martin: I'm shipping you today a board together with some chips.

Now for the next logical step: I want VGA output !

von Dirk S. (fusebit)


Lesenswert?

You found the root cause!!!!!

I just bended U18 Pin_05 away, without pull-up, just to try it.
And now it works with the nNMI connected, the circle drawing program 
from above is currently drawing :-)

But it only works in NTSC, because the relative frequency deviation is 
less for the 60 HZ then for the 50 Hz. So a PAL system most probably 
won't synchronise.

But there is still an issue. The picture is still disorted. The lower 
lines are very clear but line 1 to 2 are unreadable.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Funktioniert :-)

Mal sehen ob es auch funktioniert ein Video hochzuladen.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Ob ein 12,75 MHz Quarz das Problem mit dem Bild beheben könnte?

von Ale (Gast)


Lesenswert?

Something related to shifting the bits is wrong, because one white or 
black line, jumper dependent, is always there at the end of the char and 
the first line is always missing :/
Dirk's picture shows the same effect.

von Ale (Gast)


Lesenswert?

Yes a 12.75 MHz could help, I think Chris mentioned using a Function 
Generator with a lower frequency for better sync.
Regarding the first lines: My TK-85 (also a ZX81 clone but without an 
ULA) had the same effect, but I don't remember it being that pronounced.

von Soul E. (souleye) Benutzerseite


Lesenswert?

Dirk S. schrieb:

> But there is still an issue. The picture is still disorted. The lower
> lines are very clear but line 1 to 2 are unreadable.

Same applies to the original ZX81. Use an old CRT television, not a 
flatscreen with digital signal processing.

HSync and VSync are ORed together, therefore the HSync pulses during 
VSync are missing. This makes it difficult for the DSP to syncronize on 
the first lines after start of frame. For a redesign, XOR HSync into 
VSync.

von Dirk S. (fusebit)


Lesenswert?

Wenn ich jetzt noch einen alten Röhrenfernseher bei e... besorge, dann 
schmeisst meine Frau mich raus :-D

von Soul E. (souleye) Benutzerseite


Lesenswert?

Die HSync-Pulse im VSync machen den TFTs das Leben deutlich leichter. Es 
gibt von TI so schöne kleine Single-Gates. Da könnte man ein 74ACT1G86 
nehmen und unter U11B verstecken. Dann sieht's keiner...

Einen der größten Böcke von Sinclair hat Mahjongg ja schon abgestellt: 
dem originalen ZX81 fehlt der back porch hinter dem Sync. Keine Ahnung 
wie das auf Deutsch heisst, aber nach HSync (0,0 V) kommt erstmal ein 
bisschen Schwarz (0,3 V) bevor die eigentliche Zeile losgeht. Bei Farbe 
sitzt hier der Color Burst. Mit diesem Schwarzpegel stellt der Fernseher 
seine Verstärkung ein. Der ZX81 geht hier direkt von HSync (0,0 V) auf 
Weisspegel (0,7 V), was viele AGCs ziemlich durcheinanderbringt. Da hast 
Du dann ein in der Helligkeit waberndes Bild, was besser wird wenn die 
oberen Zeilen mehr Schwarz enthalten. Erst die letzten Versionen der ZX 
ULA hatten das Problem nicht mehr. Und der ZX81+35/38 hat es auch nicht.


BTW: Euer Problem scheint ja die nicht funktionierende WAIT-Schaltung zu 
sein. Die hat aber durchaus einen Sinn, d.h. Debuggen lohnt sich: 
http://www.user.dccnet.com/wrigter/index_files/ZX81WAIT.htm

von Sinus T. (micha_micha)


Lesenswert?

Soul E. schrieb:
> fehlt der back porch hinter dem Sync. Keine Ahnung
> wie das auf Deutsch heisst,

Schwarzschulter nannte man es "damals"

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Hi souleye,

Du meinst ich sollte U11B deaktivieren und dessen Signale auf so ein 
Einzelgate XOR legen?
Mit ein bischen biegen, abknipsen und zusammenlöten, müsste sich ja 
eigentlich ein XOR DIP so auf das U11 AND DIP löten lassen, dass ich nur 
Pin 4,5 und 6 am XOR habe (und natürlich VCC+GND).

EDIT: U11 ist kein ODER, sondern ein UND. Die Signale sind also 
gekoppelt.


Für die WAIT-Schaltung bastel ich mal die Schaltung von Wilf Ritger.

: Bearbeitet durch User
von Martin D. (mahjongg)


Lesenswert?

Ale schrieb:
> Something related to shifting the bits is wrong, because one white or
> black line, jumper dependent, is always there at the end of the char and
> the first line is always missing :/
> Dirk's picture shows the same effect.

That could be just a wrong setting of J6, which determines if the first 
pixel is either black, or white, and J5 which determines if the whole 
visible field is either black or white.

also, if you have not installed the logic for the cassette input logic, 
the signal CAS_IN could be wrong, and this would invert the picture. 
This logic is there so that if you input a cassette signal, the signal 
will invert the video, so you will see the same "loading bars" as an 
original ZX-81. On a real ZX-81 those bars are just a consequence of the 
fact that the cassette signal simply uses the same pin as the video 
output pin of the ULA. in my clone the same effect is tricked by 
inverting the video when there is an audio signal, but for that to work 
all of the cassette logic must be present.

As for my clone generating NTSC timings, that is because the NTSC (60 
Hz) jumper is set, for 50HZ (PAL) just pull the jumper (JP4)

For the wait generator the D-flip/flop U18A was used, instead of some 
transistor circuit. The ZX-81plus35 had both circuits, but the 
D-Flip/Flop was not used. Both circuits should work though.

------ translation ---------------
Das könnte nur eine falsche Einstellung von J6 sein, die bestimmt, ob 
die erste Pixel entweder schwarz oder weiß ist. Und J5, bestimmt, ob das 
Ganze das sichtbare Feld ist entweder schwarz oder weiß ist.

Wenn Sie die Logik für die Kassetteneingangslogik nicht installiert 
haben, kann das Signal CAS_IN falsch sein, und dies würde das Bild 
invertieren.
Diese Logik ist vorhanden, damit bei Eingabe eines Kassettensignals das 
Signal wird das Video invertieren, so dass Sie die gleichen 
"Ladeleisten" wie im orginal sehen

Bei einem echten ZX-81 sind diese Balken nur eine Folge der
Tatsache, dass das Kassettensignal einfach den gleichen Pin des ULA wie 
das Video verwendet. In meinem Klon wird der gleiche Effekt ausgetrickst 
durch Invertieren des Videos, wenn ein Audiosignal vorhanden ist, aber 
damit dies funktioniert muss Die gesamte Kassettenlogik vorhanden sein.

Dass mein Klon, NTSC-Timings generiert, liegt daran, dass der NTSC 
(60Hz) Jumper ist gesetzt, für 50 Hz (PAL) ziehen Sie einfach den Jumper 
(JP4).

Für den Wartegenerator wurde der D-Flip / Flop U18A verwendet anstelle 
die Transistorschaltung. Der ZX-81plus35 hatte beide Schaltkreise, aber 
die D-Flip / Flop wurde nicht verwendet. Beide Schaltungen sollten 
jedoch funktionieren.

: Bearbeitet durch User
von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Funktioniert mit dem WAIT Fix!

von Martin D. (mahjongg)


Lesenswert?

Genial!
Ich gebe zu, dass sich die Wartelogik mit dem Flip-Flop von der 
Transistorlogik des ZX-81plus35 unterscheidet, der (alternativ) auch ein 
Flip-Flop hatte, aber ich habe es nie getestet.
Aufgrund des Platzmangels auf der Leiterplatte habe ich mich für die 
Flip-Flop-Lösung für den ZX-81 + 38 entschieden. Natürlich hätte ich 
testen sollen, ob sie zuerst funktioniert.

Möglicherweise habe ich auch selbst einen Fehler gefunden (oder 
tatsächlich zwei), da ich beim Betrachten des Datenblattes des SPC21348 
(3,5-mm-Buchse) den Schluss ziehen kann, dass ich mich geirrt habe und 
die Audio-Ein- und Ausgangssignale falsch sind. Pin aus. Aber ich muss 
das sorgfältig herausfinden, das ist der Grund, zuerst einen Prototyp zu 
bauen.

von Dirk S. (fusebit)


Lesenswert?

Notfalls zwei SOT-23 Transistoren, die lassen sich doch noch gut mit der 
Hand löten.

von Martin D. (mahjongg)


Lesenswert?

Sie haben Recht, aber SOT92-Transistoren haben einen relativ geringen 
Platzbedarf, und ich habe mich bewusst dafür entschieden, SMT nicht zu 
verwenden, da dies die Bauherren abschreckt. Ich werde diese Schaltung 
mit PTH-Komponenten hinzufügen können. Ich werde das Unmögliche 
innerhalb von 24 Stunden tun , Wunder dauern nur wenig länger ... :-)

von Alex P. (ra_p)


Lesenswert?

Dirk S. schrieb:
> Funktioniert mit dem WAIT Fix!

Super ! I'll build tomorrow the 2 transistor circuit, too, and the 
keyboard. I have to send a new board to manufacturing, I want to use 
Cherry keys in my keyboard.

von chris_ (Gast)


Lesenswert?

Dirk, woher hast Du das kleine Display mit Video Eingang? Es scheint mir 
sehr praktisch, für den Zx81 ein eigenes Display zu haben und ich hätte 
auch gerne eines.

von chris_ (Gast)


Lesenswert?

Weiß jemand, wo man eine Platinenstecker für das Board des Zx81 bekommen 
kann?
Ich haben einen 44pol gefunden, aber durch die Lücke am Anschluss des 
Zx81 braucht man wahrscheinlich eher 45pol doppelreihig.

https://picclick.de/2x-Amphenol-225-22231-101-Kontakt-Leiste-f-Platinen-Stecker-44-polig-vergoldet-322931436964.html

von Ale (Gast)


Lesenswert?

Der Link führt doch zur Bucht: Ebay-Artikel Nr. 322931436964, es 
kostet auch 15 Teuronen, es kommt aus Hamburg. Wahrscheinlich bei Ali 
gibt es auch...
Aber mit 2x23 Pins ? nööö. 2x22 oder 2x28, 3 Stück kosten ~3 €.
Das Problem ist das man den Stecker nicht befestigen kann weil die 
Schrauben, Mutter usw. fehlen von ZX81 Seite... Man Könnte ein DB-50 
nutzen aber dann, muss man die Platine neu machen, würde ich so-wie-so, 
ein bisschen mehr Fläche für VSup, einen anderen Stecker dafür.... ein 
paar Sachen :)

von Ale (Gast)


Lesenswert?

Ich werde die 2 Gatterschaltung des ZX97 bauen, ich hab keine PNP 
Transistoren.
Ich hab noch einen Composite->VGA Wandler gekauft, soll Heute 
auftauchen...

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

chris_ schrieb:
> Dirk, woher hast Du das kleine Display mit Video Eingang? Es scheint mir
> sehr praktisch, für den Zx81 ein eigenes Display zu haben und ich hätte
> auch gerne eines.

Das Display ist von Ama...
"7 Zoll IPS Touchscreen kapazitiver 1024x600 HDMI Display Game Monitor 
für Raspberry Pi 4"

Dazu habe ich diesen Wandler von eb..

1080P 3 RCA CVBS Composite AV to HDMI Converter Konverter Mini Video 
Adapter DE

Über Nacht ist der kleine fast fertig geworden :-)
Die Grafik hat allerdings noch diese zusätzlichen Striche.

von Soul E. (souleye) Benutzerseite


Lesenswert?

chris_ schrieb:

> Weiß jemand, wo man eine Platinenstecker für das Board des Zx81 bekommen
> kann?

Ich habe immer ISA-Slots aus alten Mainboards auf die passende Breite 
zugeschnitten. Die sind ja bei Sinclair seitlich offen.

von Ale (Gast)


Lesenswert?

Mit den 2 Gatter wie im ZX97 kriege ich ein stabilen Bild so wie Dirk.

von Dirk S. (fusebit)


Lesenswert?

Dann sollte sich das doch auch mit den verbliebenen U6C und U12C lösen 
lassen. Den LS125 kann man ja auch als Inverter beschalten wie beim 
Kassetteneingang.

Da braucht man dann "nur" einen Weg für die Leiterbahnen finden ;-)

von Martin D. (mahjongg)


Lesenswert?

Thanks for the tip!

Danke vielmals.

von Martin D. (mahjongg)


Lesenswert?

If I understand correctly the wait circuit you are talking about 
consists of the two gates in this picture:

http://www.user.dccnet.com/wrigter/index_files/ZX97lite_files/image004.jpg

specifically the OR gate and inverter in the top left.

By the way, a Dutch hobbyist who is also building my ZX-81plus38 was 
kind enough to donate to me two PCB's, and a 13MHz crystal, so I can 
also start building my own prototype.
But first I will design PCB revision 1.5 with the corrections we have 
found. so far.

------

Wenn ich das richtig verstehe, besteht die Warteschaltung, von der Sie 
sprechen, aus den beiden Logikgattern in diesem Bild:

http://www.user.dccnet.com/wrigter/index_files/ZX97lite_files/image004.jpg

speziell das ODER-Gatter und der logische Inverter oben links.

Übrigens war ein niederländischer Bastler, der auch meinen ZX-81plus38 
baut, so freundlich, mir zwei Leiterplatten und einen 13-MHz-Kristall zu 
spenden, damit ich auch mit dem Bau meines eigenen Prototyps beginnen 
kann.
Aber zuerst werde ich PCB Revision 1.5 mit den bisher gefunden 
Korrekturen entwerfen.

: Bearbeitet durch User
von Martin D. (mahjongg)


Lesenswert?

chris_ schrieb:
> Weiß jemand, wo man eine Platinenstecker für das Board des Zx81 bekommen
> kann?
> Ich haben einen 44pol gefunden, aber durch die Lücke am Anschluss des
> Zx81 braucht man wahrscheinlich eher 45pol doppelreihig.
>
> 
https://picclick.de/2x-Amphenol-225-22231-101-Kontakt-Leiste-f-Platinen-Stecker-44-polig-vergoldet-322931436964.html

Eigentlich wollte ich das "Wobble" -Problem nicht auf diese Weise lösen.
Ich wollte nur den Kantenverbinder durch einen um 90 Grad gebogenen 
Stiftkopf ersetzen, dann können Sie neue Designs mit einer um 90 Grad 
gebogenen Buchse ausstatten und eine Verbindung mit vergoldeten 
Kontakten herstellen. Sie können ältere Geräte weiterhin an den 
Edge-Anschluss anschließen.

Anstelle eines Buchsensteckers ist es besser, einen Stecker mit 
vergoldeten Kontakten zu verwenden, wenn Sie diesen entfernen.
Bitte beachten Sie, dass zwischen der oberen und unteren Kontaktreihe 
kein Austausch stattfindet.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

>If I understand correctly the wait circuit you are talking about
>consists of the two gates in this picture:
>http://www.user.dccnet.com/wrigter/index_files/ZX97lite_files/image004.jpg
>specifically the OR gate and inverter in the top left.

You mean this part of the circuit ( picture )?

>Aber zuerst werde ich PCB Revision 1.5 mit den bisher gefunden
>Korrekturen entwerfen.

The original circuit of the Zx81 is done with transistors and the 
ability to pull down the pin externally. I strongly recommend to have 
the same feature because than it is possible to attach a single step 
debugger ( which needs to pull down nWait ).

von Ale (Gast)


Lesenswert?

Another improvement to the board could be to make the distance between 
J2 and J3 (Keyboard connectors) a multiple of 2.54 mm. The mounting hole 
above the legend "ZX81+38" is a bit smaller than the other holes, there 
is a bit of clearance around.

von Dirk S. (fusebit)


Lesenswert?

Das stimmt! Beide Pinreihen auf das richtige Raster zu bringen ist eine 
gute Idee.

Ich habe nun erfolgreich ein Listing auf einen MP3-Player exportiert und 
wieder geladen. Aber ich bekomme keine Spiele geladen :-(
Ich habe mir ein paar p-files bei zx81stuff.org heruntergeladen, in WAV 
knvertiert und dann in MP3 (Mein MP3 Spieler mag kein WAV).

Ich sehe beim LOAD "" ganz saubere Signale bei U6 Pin_11 und der 
Bildschirm verhält sich auch so wie bei meinem einfachen Listing, aber 
am Ende des Ladevorgangs springt der ZX81 direkt zum "K" zurück, ohne 
0/0.

Woran könnte das liegen?

von Sinus T. (micha_micha)


Lesenswert?

MP3 ist wahrscheinlich nicht das beste Format für in Töne verwandelte 
digitale Daten. Es ist ja eine verlustbehaftete Komprimierung, wobei das 
Verfahren auf die Eigenheiten des menschlichen Ohr-Gehirn-Systems 
abgestimmt ist. Da können durchaus entscheidende Informationen im 
Nirvana verschwinden.

von Dirk S. (fusebit)


Angehängte Dateien:

Lesenswert?

Das stimmt vermutlich :-/

Allerdings funktioniert es mit dem Listing, wenn ich es mit dem MP3 
Player aufzeichne und wiedergebe.

Ich habe gerade ein p-file mit dem "Tape Converter" am PC abgespielt und 
dann funktioniert es...

: Bearbeitet durch User
von Ale (Gast)


Lesenswert?

Aber das Problem mit der fehlenden Linie am Ende jedes Char hast du 
immer noch, ich frage mich woher es kommt. Das mit dem p Dateien will 
ich auch probieren, ich will endlich Mazogs spielen ! :)

von chris_ (Gast)



Lesenswert?

Heute habe ich die Platine auch mal voll bestückt.
Für nWait habe ich die Transistor Schaltung von Wrigter ( 
Beitrag "Re: ZX81 plus38 Clone" ) als 
Huckepackplatine auf U18 gesetzt.

Ich vermute in dem Bild ein "K", nur leider ist es ziemlich 
verschwommen.
Ich habe als Diode eine 1N5819 und als Transistor einen BC547 genommen. 
Könnte es daran liegen?

Mit dem ArduinoMegaDebugger kann ich jetzt per mcurses die Speicherdaten 
direkt im VT100 Terminal anschauen.

So wie es aussieht, sind die Daten im RAM korrekt initialisiert.

von chris_ (Gast)


Lesenswert?

Nachtrag: Ich habe das Widerstandnetzwerk auf den Datenleitungen RN1 
nicht eingelötet, weil ich davon ausging, dass es nur für den Drucker 
gebraucht wird. Ist das vielleicht ein Fehler?

von Martin D. (mahjongg)


Lesenswert?

chris_ schrieb:
> Nachtrag: Ich habe das Widerstandnetzwerk auf den Datenleitungen RN1
> nicht eingelötet, weil ich davon ausging, dass es nur für den Drucker
> gebraucht wird. Ist das vielleicht ein Fehler?

Ja, ein BC547 ist für Niederfrequenzanwendungen gedacht. Deshalb 
verwende ich einen 2N3905. Ein 1N5819 ist eine Diode, die 1A verarbeiten 
kann. Sie ist also etwas zu groß, aber an sich ist das kein großes 
Problem.

und nein, das Nichteinsetzen der Pullups-Widerstände verhindert nicht 
den normalen Betrieb, nur wenn Sie versuchen, den ZX-81plus38 zu 
drucken, wird möglicherweise nicht erkannt, dass kein Drucker 
angeschlossen ist.

In der Tat können verlustfreie Audiokompressoren zu Fehlfunktionen des 
ZX-81 führen. Es ist also besser, mit WAV-Dateien zu arbeiten. Oder mit 
einem Player, der .P-Dateien in Audio konvertieren kann, gibt es mehrere 
solcher Programme.
Ich habe mich bemüht, die Zuverlässigkeit beim Laden von Kassetten oder 
Audio, die über einen Laptop abgespielt werden, zu verbessern. Daher 
sollte das Laden von Bändern im Vergleich zu einem "echten" ZX-81 viel 
einfacher sein, und mein Klon kann auch weichere Signale verarbeiten . 
Die alten Kassettenrekorder erzeugten ein viel lauteres Signal, und der 
ZX-81 war ziemlich unempfindlich und erforderte ein sehr lautes Signal.

Ich frage mich, ob Sie beim Laden auch schwarze "Ladesignalbalken" auf 
Ihrem Bildschirm sehen. Die meisten Klone können diese Balken nicht 
anzeigen, aber ich habe mir einen Trick ausgedacht, um sie anzuzeigen.
Ich frage mich, ob das funktioniert und wie naturgetreu es aussieht.

: Bearbeitet durch User
von Martin D. (mahjongg)


Lesenswert?

chris_ schrieb:
>>If I understand correctly the wait circuit you are talking about
>>consists of the two gates in this picture:
>>http://www.user.dccnet.com/wrigter/index_files/ZX97lite_files/image004.jpg
>>specifically the OR gate and inverter in the top left.
>
> You mean this part of the circuit ( picture )?
>
>>Aber zuerst werde ich PCB Revision 1.5 mit den bisher gefunden
>>Korrekturen entwerfen.
>
> The original circuit of the Zx81 is done with transistors and the
> ability to pull down the pin externally. I strongly recommend to have
> the same feature because than it is possible to attach a single step
> debugger ( which needs to pull down nWait ).
Ich möchte lieber nicht zwei Transistoren, drei Widerstände und einen 
Kondensator hinzufügen, wenn dies nicht wirklich notwendig ist.
Ich habe eine andere Idee: Wenn ich einen 470-Ohm-Vorwiderstand in den 
Ausgang des ODER-Gatters stecke, können Sie immer noch eine externe 
Wartezeit für Ihren Debugger erzeugen. Dann werden nur zwei Widerstände 
im Design hinzugefügt (einer für den Wechselrichter, und eine für das 
ODER-Gatter)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.