Forum: Mikrocontroller und Digitale Elektronik Z180-Stamp Modul


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 Holm T. (Gast)


Lesenswert?

Joe G. schrieb:
> holm schrieb:
>> Wie schon geschrieben, mir war von vornherein klar das das ein
>> Spielzeug ist und ich will ja spielen. Ich hatte das ja gegenüber Joe
>> auch schon mal angesprochen
>
> Hier nochmals ganz deutlich die Beweggründe für das derzeitige System.
>
[..]
>
> Mehr sollte und darf nicht in dieses System reininterpretiert werden. Es
> ist und bleibt ein einfaches Experimentalsystem für Z80. Was letztlich
> jeder damit machen möchte, bleibt den Nachnutzer überlassen.

Ja Joe, einverstanden und von vornherein klar gewesen.
Ich kritisiere nicht, ich labere herum was mir lieber wäre und versuche 
das zu begründen. Ärgere Dich bitte einfach nicht drüber.

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Holm T. schrieb:
> ...hab das überflogen...wo siehst Du da einen Fifo?
im VNC2

> Ärgere Dich bitte einfach nicht drüber.
Mache ich nicht, ich gebe nur möglichen Nachnutzern Argumente an die 
Hand.

von Holm T. (Gast)


Lesenswert?

Joe G. schrieb:
> Holm T. schrieb:
>> ...hab das überflogen...wo siehst Du da einen Fifo?
> im VNC2
>
Ok...das ist aber Bestandteil der internen Programmlogik, im 
Wesentlichen hat er das Ding parallel angebunden.


>> Ärgere Dich bitte einfach nicht drüber.
> Mache ich nicht, ich gebe nur möglichen Nachnutzern Argumente an die
> Hand.

Ok, dann bin ich beruhigt.

BTW:
Ich habe mit Ralf (Susowa) per Mail konferiert, er ist der Meinung das 
die Firmware der K1520Net Karte unverändert funktionieren müßte wenn die 
PIO schnell genug ist. Unter CPM3 hat allerdings noch Niemand die 
Software ausprobiert. Ich werde das im Laufe dieser Woche mal tun. Auch 
von Holger (der mit den PIOs) liegt indessen die Aussage vor das Andere 
die mit 16Mhz schon getestet und für gut befunden hätten..mal gucken..

Ich habe aber auch kein Problem damit wenn der WIZ810/811/812 oder was 
auch immer direkt an den Bus angebunden werden würde, ich habe nur 
keinen einzelnen Modul mehr da, nur einen W5100 der sich ein Bisschen 
blöde handhaben läßt (LQFP80) da ist selbst "dead Bug" eine 
Herausforderung.

Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Mal wieder eine ganz dumme Frage von mir: Brauchen wir überhaupt eine 
PIO?

Bei meinem NDR Computer ist die Centronics-Schnittstelle einfach mit 
einem 74245 Bustreiber oder so und einem Adress-Dekoder gelöst - also 
direkt "memory mapped".

von Leo C. (rapid)


Lesenswert?

"Wir" brauchen keine PIO. Ob Du eine brauchst, wissen "wir" nicht.

Das beim NDR Computer ist mit Sicherheit ein "oder so". Ein Bustreiber 
tuts nicht.

von Holm T. (Gast)


Lesenswert?

Marcel lies doch mal richtig, die braucht man nur wenn man die KC85 
Netzwerkplatine oder ich halt die K1520Net mehr oder weniger 
provisorisch am ECB Bus betreiben will. Leo hat sich gerade die Rute 
über den Arsch gebunden die Software für ein Netzwerkomodul-Anschluß 
ohne fragwürdige PIOs (hinsichtlich der Taktfrequenz) zu erstellen :-)

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Zum Pollin DiskOnModule hatte ich schon mal geschrieben
(Beitrag "Re: Z180-Stamp Modul"):
> Scheint auch mit 3.3V zu laufen, aber gründliche Tests stehen noch aus.

Läuft genau wie die CF-Karte wirklich mit 3.3V und 0 Wait-States.

1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.4.14-cf-card-dirty
2
Estimated CPU clock [Hz]: 18432000
3
sdio: SD Card driver
4
cfio: CompactFlash Memory Card driver
5
    Model: PQI IDE DiskOnModule, S/N: DOM1D00004532, Rev: 060729DA
6
    Size: 256000 Sectors (128000 KiB)
7
    I: CP/M partition at: 2048, size: 8192KiB
8
    J: CP/M partition at: 18432, size: 118784KiB
9
10
A>

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Läuft genau wie die CF-Karte wirklich mit 3.3V und 0 Wait-States.

Feine Sache Leo, danke. Ich bin gerade dabei deine Schaltung auf eine 
Platine zu bringen (Huckepackvariante).

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hier ist ein Update vom Schaltplan. Aber eigentlich wollte ich noch 
schauen, ob man die Gatter noch etwas optimieren kann. Hab nur gerade 
keine Zeit.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Danke, ich schau mal ob ich noch etwas an Gattern optimieren kann. Die 
Schaltung und das Layout stelle ich dann hier wieder zur Diskussion 
rein.

von Leo C. (rapid)


Lesenswert?

Statt des '126 kann man natürlich auch einen '125 nehmen, oder andere 
Buffer oder übrig gebliebene Gatter, wenn sie nicht invertieren.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Zum Thema DMA-Request
(Beitrag "Re: Z180-Stamp Modul")
> Möglicherweise reicht aber auch eine Verknüpfung mit DASP.

Das habe ich jetzt mal so umgebaut, und es funktioniert. /DREQ1 wird 
über einen Open-Drain Ausgang nur dann auf low gezogen, wenn DASP- 
(Device Active/Slave Present) low ist. Das ist nur der Fall, wenn der 
cfio-Treiber mit der Karte kommuniziert. Zu anderen Zeiten kann der 
DMA-Kanal von anderen Geräten verwendet werden.

In dem angehängten Bild ist ein Sektor-Transfer zu der 4GB CF-Karte zu 
sehen. Kanal 1 ist CS0- (I/O-Zugriff auf die Karte) und Kanal 2 ist 
/DREQ1.
Die ersten Impulse ab dem Start-Cursor zeigen die Übertragung der 
Parameter (Sektor-Nr) an die Karte. In der "Pause" wird der DMA-Kanal 
initialisiert. Der erste Impuls nach der Pause ist der 
Read-Sektor-Befehl.
Die folgenden Pulse bis zum E-Cursor sind die Polling-Schleife, in der 
die CPU auf das Ende des DMA-Transfers wartet. In dieser Zeit aktiviert 
der CF-Controller DASP- (/DREQ1), ließt die Daten aus dem Flash und 
schreibt sie in den internen Sector-Buffer. Ab dem E-Cursor bis zur 
steigenden Flanke von /DREQ1 werden die Daten per DMA ins RAM 
transferiert.

Gesamtzeit: 278µs
Bereitstellung durch Karte: 39µs (bei dem Pollin Modul ca. 68µs)
DMA-Transfer: 195µs


@Marcel: so besser?
1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.4.14-cf-card-dirty
2
Estimated CPU clock [Hz]: 18432000
3
sdio: SD Card driver
4
cfio: CompactFlash Memory Card driver: No Card
5
6
A>

von Leo C. (rapid)


Lesenswert?

Holm T. schrieb:
> das mkfs.cpm legt ja "sparse" Disks an wie Leo oben schon mal erklärt
> hat,
> d.h. wenn die disk nicht voll ist, dann ist die Filesize kleiner als die
> Diskkapazität. Das führt aber unter CP/M zu Fehlern, mit Power und dem
> Kommando test kann man eine ganze Disk probelesen und eine Checksumme
> generieren, promt hagelt das Fehler.

Der Programmierer des AVR-Monitors hat offensichtlich die fat-Routinen 
von chan nicht richtig verstanden und nicht genug getestet. Danke, daß 
Du den Test jetzt nachgeholt hast.

Normalerweise liest CP/M keine ungeschriebenen Sektoren. Wenn man neue 
Dateien auf so ein kurzes Image kopiert, wird es automatisch erweitert. 
Das funkioniert einwandfrei. Ich dachte, die Erweiterung wird auch beim 
Lesen durchgeführt, und man erhält ungeschriebene, also zufällige Daten 
zurück. Stattdessen liefert ein f_read() außerhalb der Datei aber nichts 
zurück, also Anzahl gelesene Bytes == 0 und Fehlercode 0 (== alles ok). 
Das TEST-Kommando von Power bekommt einen Fehler gemeldet ('bad 
sector'), weil mein Treiber immerhin merkt, daß die Anzahl gelesener 
Bytes != 512 ist.

Ich habe den Treiber jetzt mal so geändert, daß in so einem Fall 512 
0-Bytes zurückgeliefert werden. Scheint zu funktionieren. Allerdings ist 
es unbrauchbar, weil anscheinend bei jedem Zugriff hinter dem 
Dateiende vom Dateisystem die Cluster-Chain aufs Neue erweitert, aber 
nicht physikalisch geschrieben wird. Bei dem TEST-Kommando dauert das 
unerträglich lange:
1
## 38852107 cpm_rw:  read G: trk:1535, sec: 0, pos: 005ff000, secs:  1, addr: 1cc00
2
           short read, brw: 0
3
## 38853135 cpm_rw:  read G: trk:1535, sec: 0, pos: 005ff000, secs:  1, addr: 1cc00
4
           short read, brw: 0
5
## 38854162 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
6
           short read, brw: 0
7
## 38855189 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
8
           short read, brw: 0
9
## 38856217 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
10
           short read, brw: 0
11
## 38857244 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
12
           short read, brw: 0
13
## 38858271 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
14
           short read, brw: 0
15
## 38859299 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
16
           short read, brw: 0
17
## 38860326 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
18
           short read, brw: 0
19
## 38861353 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
20
           short read, brw: 0
21
## 38862381 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
22
           short read, brw: 0
23
## 38863408 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
24
           short read, brw: 0
25
## 38864435 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
26
           short read, brw: 0
27
## 38865463 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
28
           short read, brw: 0
29
## 38866490 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
30
           short read, brw: 0
31
## 38867517 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
32
           short read, brw: 0
33
## 38868545 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
34
           short read, brw: 0
35
## 38869572 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
36
           short read, brw: 0
37
## 38870599 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
38
           short read, brw: 0
39
## 38871627 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
40
           short read, brw: 0
41
## 38872654 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
42
           short read, brw: 0
43
## 38873681 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
44
           short read, brw: 0
45
## 38874709 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
46
           short read, brw: 0
47
## 38875736 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
48
           short read, brw: 0
49
## 38876763 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
50
           short read, brw: 0
51
## 38877791 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
52
           short read, brw: 0
53
## 38878818 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
54
           short read, brw: 0
55
## 38879845 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
56
           short read, brw: 0
57
## 38880873 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
58
           short read, brw: 0
59
## 38881900 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
60
           short read, brw: 0
61
## 38882927 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
62
           short read, brw: 0
63
## 38883955 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
64
           short read, brw: 0
65
## 38884982 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
66
           short read, brw: 0
67
## 38886009 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1, addr: 1cc00
68
           short read, brw: 0
69
## 38887037 cpm_rw:  read G: trk:1537, sec: 0, pos: 00601000, secs:  1, addr: 1cc00
70
           short read, brw: 0
71
## 38888064 cpm_rw:  read G: trk:1537, sec: 0, pos: 00601000, secs:  1, addr: 1cc00
72
           short read, brw: 0
73
## 38889091 cpm_rw:  read G: trk:1537, sec: 0, pos: 00601000, secs:  1, addr: 1cc00
74
           short read, brw: 0

Der Test läuft seit gestern Abend (seit ca. 38889091 ms) und ist gerade 
mal bei Track 1537 von 2047 angekommen. Mir fallen noch ein oder 2 
Verbesserungsmöglichkeiten ein, die ich heute mal ausprobieren werde. 
Die einfachste wäre, beim Öffnen der Image-Datei die Länge zu prüfen, 
und wenn zu kurz gleich auf die volle Größe erweitern. Wenn dann der 
Platz auf der Karte nicht reicht, gibt es die Überraschung auch gleich 
an dieser Stelle, und nicht erst, nachdem man z.B. 3 Stunden mit WS an 
einer Datei editiert hat.

Übrigens scheint Power hier auch etwas falsch zu machen. Es liest 
jeweils 32 mal von jedem Track den Sektor 0. Ein Track hat 32 
CP/M-Sektoren (128 Byte), bzw. 8 physikalische Sektroren (512 Byte). Man 
sollte hier also je Track 1 oder 4 Zugriffe auf jeden Sektor (von 0 bis 
7) sehen. Möglicherweise kommt Power mit CP/M 3 nicht zurecht.

> dieses mkfs.cpm ist wohl daher eher
> mit vorsicht zu genießen, bei mir ist das z.B. auch nicht in der Lage
> auf einer Floppy ordentlich zu arbeiten, wahrscheinlich kommt das genau
> von diesem "Feature".

Du meinst Floppies, die für CP/M formatiert sind? Dann glaube ich das 
weniger. Auf der Floppy gibts ja kein (zu kurzes) FAT-Dateisystem. 
Vielleicht sind Deine CP/M-Tools[2] ohne libdsk[3] compiliert.

[1] http://elm-chan.org/fsw/ff/en/lseek.html
[2] http://www.moria.de/~michael/cpmtools/
[3] http://www.seasip.info/Unix/LibDsk/index.html

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Holm T. schrieb:
>> das mkfs.cpm legt ja "sparse" Disks an wie Leo oben schon mal erklärt
>> hat,
>> d.h. wenn die disk nicht voll ist, dann ist die Filesize kleiner als die
>> Diskkapazität. Das führt aber unter CP/M zu Fehlern, mit Power und dem
>> Kommando test kann man eine ganze Disk probelesen und eine Checksumme
>> generieren, promt hagelt das Fehler.
>
> Der Programmierer des AVR-Monitors hat offensichtlich die fat-Routinen
> von chan nicht richtig verstanden und nicht genug getestet. Danke, daß
> Du den Test jetzt nachgeholt hast.

hybsche Beschreibung :-)

>[..]

>            short read, brw: 0
> ## 38878818 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38879845 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38880873 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38881900 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38882927 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38883955 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38884982 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38886009 cpm_rw:  read G: trk:1536, sec: 0, pos: 00600000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38887037 cpm_rw:  read G: trk:1537, sec: 0, pos: 00601000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38888064 cpm_rw:  read G: trk:1537, sec: 0, pos: 00601000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> ## 38889091 cpm_rw:  read G: trk:1537, sec: 0, pos: 00601000, secs:  1,
> addr: 1cc00
>            short read, brw: 0
> [/pre]
>
> Der Test läuft seit gestern Abend (seit ca. 38889091 ms) und ist gerade
> mal bei Track 1537 von 2047 angekommen. Mir fallen noch ein oder 2
> Verbesserungsmöglichkeiten ein, die ich heute mal ausprobieren werde.
> Die einfachste wäre, beim Öffnen der Image-Datei die Länge zu prüfen,
> und wenn zu kurz gleich auf die volle Größe erweitern. Wenn dann der
> Platz auf der Karte nicht reicht, gibt es die Überraschung auch gleich
> an dieser Stelle, und nicht erst, nachdem man z.B. 3 Stunden mit WS an
> einer Datei editiert hat.
>
> Übrigens scheint Power hier auch etwas falsch zu machen. Es liest
> jeweils 32 mal von jedem Track den Sektor 0. Ein Track hat 32
> CP/M-Sektoren (128 Byte), bzw. 8 physikalische Sektroren (512 Byte). Man
> sollte hier also je Track 1 oder 4 Zugriffe auf jeden Sektor (von 0 bis
> 7) sehen. Möglicherweise kommt Power mit CP/M 3 nicht zurecht.
>
>> dieses mkfs.cpm ist wohl daher eher
>> mit vorsicht zu genießen, bei mir ist das z.B. auch nicht in der Lage
>> auf einer Floppy ordentlich zu arbeiten, wahrscheinlich kommt das genau
>> von diesem "Feature".
>
> Du meinst Floppies, die für CP/M formatiert sind? Dann glaube ich das
> weniger.

Ich schon, weil ichs probiert habe.
Auf einem 800K langen Floppyimage funktioniert das, das DD danach auf 
das Floppy auch, aber mkfs.cpm aufs Device funktioniert nicht.

>Auf der Floppy gibts ja kein (zu kurzes) FAT-Dateisystem.
> Vielleicht sind Deine CP/M-Tools[2] ohne libdsk[3] compiliert.

Genau. Mit Libdisk zerschießt das Zeug regelmäßig die Filesysteme 
weswegen ich die Version ohne vorziehe :-)
Der Libdisk Support ist für den Zugriff auf (raw) Devices nicht 
notwendig.

>
> [1] http://elm-chan.org/fsw/ff/en/lseek.html
> [2] http://www.moria.de/~michael/cpmtools/
> [3] http://www.seasip.info/Unix/LibDsk/index.html

Ich bin nicht der Einzige bei dem die CPMTools mit Libdisk Support die 
Floppies kaputt machen, das berichtete ein Anderer bei 
Robotrontechnik.de worauf hin ich mir das genauer angesehen habe.
Da ich mit einem Anderen Problem zu tun hatte bin ich da nicht in den 
Code abgetaucht.

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Power TEST war nach gut 15 Stunden fertig. Ich hatte noch nicht die Zeit 
zum Testen (nochmal 15 Stunden), aber ich bin sicher daß bei 
Wiederholung die gleiche Prüfsumme herauskommen würde. Dabei könnte ich 
es eigentlich bewenden lassen. Da es aber wahrscheinlich ein paar Nutzer 
gibt, die von dieser etwas langsamen Lösung nicht begeistert sind, habe 
ich doch nochmal etwas umgebaut. Die Idee, das Image nur dann zu 
erweitern, wenn es unbedingt notwendig ist, gefällt mir immer noch, aber 
dieses Argument:
> Wenn dann der
> Platz auf der Karte nicht reicht, gibt es die Überraschung auch gleich
> an dieser Stelle, und nicht erst, nachdem man z.B. 3 Stunden mit WS an
> einer Datei editiert hat.
hat den Ausschlag gegeben. Die Image-Datei wird jetzt also beim 
Drive-Login auf die maximale Größe erweitert. Das ist einfacher und 
dürfte um einiges schneller sein, als die Datei immer nur bei Bedarf zu 
erweitern. Die Variante habe ich nicht mehr getestet.

Wenn das jemand dringend braucht, oder gründlich testen will, kann ich 
davon ein Hexfile machen. Sonst habe ich keine weltbewegenden 
Änderungen.
1
##  713157  login: H:
2
##  713168  open: '1:/sparse1.dsk', (env: 'dsk7'), res: 0
3
            expanding image file from 57344 to 8388608
4
##  714343 cpm_rw:  read H: trk:   6, sec: 0, pos: 00006000, secs:  1, addr: 07e00

Holm T. schrieb:
>> Du meinst Floppies, die für CP/M formatiert sind? Dann glaube ich das
>> weniger.
>
> Ich schon, weil ichs probiert habe.
> Auf einem 800K langen Floppyimage funktioniert das, das DD danach auf
> das Floppy auch, aber mkfs.cpm aufs Device funktioniert nicht.

Ich kann mir nicht vorstellen, daß das an besagtem "Feature" liegt. 
Funktionieren denn die anderen Tools (fsck.cpm, fsed.cpm) direkt auf 
Floppy? Ausprobieren kann ich es nicht weil ich keine Floppy-Laufwerke 
(mehr) habe.

Mich würde interessieren, warum der TEST-Befehl von Power immer nur 
Sektor 0 auf jedem Track liest. Hast Du zufällig den Sourcecode davon?

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Power TEST war nach gut 15 Stunden fertig. Ich hatte noch nicht die Zeit
[..]
> Wenn das jemand dringend braucht, oder gründlich testen will, kann ich
> davon ein Hexfile machen. Sonst habe ich keine weltbewegenden
> Änderungen.
>
>
1
> ##  713157  login: H:
2
> ##  713168  open: '1:/sparse1.dsk', (env: 'dsk7'), res: 0
3
>             expanding image file from 57344 to 8388608
4
> ##  714343 cpm_rw:  read H: trk:   6, sec: 0, pos: 00006000, secs:  1, 
5
> addr: 07e00
6
>
>

..viel Mühe..braucht man das wirklich?

Ich halte die sparse Files eher für ein Misfeature, auf heutigen den 
Datenträgern ist das ganz schlicht egal....

> Holm T. schrieb:
>>> Du meinst Floppies, die für CP/M formatiert sind? Dann glaube ich das
>>> weniger.
>>
>> Ich schon, weil ichs probiert habe.
>> Auf einem 800K langen Floppyimage funktioniert das, das DD danach auf
>> das Floppy auch, aber mkfs.cpm aufs Device funktioniert nicht.
>
> Ich kann mir nicht vorstellen, daß das an besagtem "Feature" liegt.
> Funktionieren denn die anderen Tools (fsck.cpm, fsed.cpm) direkt auf
> Floppy? Ausprobieren kann ich es nicht weil ich keine Floppy-Laufwerke
> (mehr) habe.

Ich bin mir nicht sicher ob die anderen Dinger funktionieren, ich 
probiere das aber aus.
Ich habe in einer Bastelbude meinen alten Rechner stehen, mit 5,25 und 
3,5er Laufwerken zum Datenaustausch.

>
> Mich würde interessieren, warum der TEST-Befehl von Power immer nur
> Sektor 0 auf jedem Track liest. Hast Du zufällig den Sourcecode davon?

Keine Ahnung und nein, habe ich nicht. Ich habe aber im Robotron-Forum 
nachgefragt.
http://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=13509

(Im CP/M Forum kann man sich das wohl kneifen, da hört man maximal ein 
Echo..).

Welche Power Version hattest Du am Wickel?= 3.03 oder 3.07 ..oder was?

Warum? Da gibts nur eine Begründung: Bug.

Ich wundere mich das das noch Keiner gemerkt haben soll, ich habe in der 
Vergangenheit haufenweise Disketten damit getestet (und 
Floppies/Floppyconroller).

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

> ..viel Mühe..braucht man das wirklich?

Nein, aber wenn das Feature zur Hälfte funktioniert sollte man schon 
entsheiden, ob man es ganz oder gar nicht haben will. Und wenn man dann 
alle Informationen für die Entscheidung hat, möchte man sie nicht 
einfach ungenutzt wegwerfen, zumal der eigentliche Fix nur wenige Zeilen 
sind:
1
@@ -325,6 +324,24 @@ void do_msg_cpm_login(uint8_t subf, int len, uint8_t * msg)
2
     debug_cpmsd("## %7lu   open: '%s', (env: '%s'), res: %d\n", get_timer(0),
3
       drv_table[drv].img_name, disk_buffer, res);
4
 
5
+  if (!res && f_size(&drv_table[drv].fd) < CONFIG_CPM_DISKSIZE) {
6
+    unsigned int bw;
7
+
8
+    debug_cpmsd("            expanding image file from %ld to %ld\n",
9
+        f_size(&drv_table[drv].fd), CONFIG_CPM_DISKSIZE);
10
+
11
+    res = f_lseek(&drv_table[drv].fd, CONFIG_CPM_DISKSIZE-CONFIG_CPM_BLOCK_SIZE);
12
+    if (!res) {
13
+      memset(disk_buffer, 0xe5, CONFIG_CPM_BLOCK_SIZE);
14
+      res = f_write(&drv_table[drv].fd, disk_buffer, CONFIG_CPM_BLOCK_SIZE, &bw);
15
+      if (res || bw < CONFIG_CPM_BLOCK_SIZE) {
16
+        debug_cpmsd("               failed! res: %d, bytes written: %u\n",  res, bw);
17
+      }
18
+      drv_table[drv].dirty = true;
19
+      bg_setstat(handle_cpm_drv_to, 1);
20
+    }
21
+  }
22
+
23
   /* send  result*/
24
   msg_cpm_result(subf, 0x00, res);
25
 }
26
@@ -359,11 +376,11 @@ void do_msg_cpm_rw(uint8_t subf, int len, uint8_t * msg)

18 um genau zu sein, davon 3 Leerzeilen und 3 nur für schließende 
Klammern und 4 Zeilen Debug-Code, die die meiste Arbeit machen, also 9 
Zeilen Netto. ;-)

1
A>d:power7c
2
3
4
        POWER 3.07 on CP/M 3.1 B Z
5
6
Copyright (c) 1981, 1982, 1983 by PAVEL BREDER
7
        CHECK faster by WD   12/06/83
8
9
A0=
> Warum? Da gibts nur eine Begründung: Bug.

Klar, ich würde aber schon gerne wissen, wo dieser Bug ist. Die 
Wahrscheinlichkeit ist zwar gering, aber er könnte ja auch in meiner 
Software sein. Bei dem CF-Karten-Treiber hatte ich so einen seltsamen 
Effekt, für den ich über 3 Wochen keine Erklärung hatte. Dann bin ich 
endlich mit dem Debugger durch, was bei einem gebankten System ja auch 
nicht ganz einfach ist. Und siehe da: Ein Seiteneffekt bei SELDSK, einer 
standardisierten Funktion in der ich gar nichts geändert hatte. Im 
cfio-Treiber war Multi-Sector-IO noch nicht realisiert, deshalb wurde 
der Sector-Count dort nicht auf 0 oder 1 zurückgesetzt. Wenn dann wieder 
auf ein SD-Karten-Laufwerk umgeschaltet wurde, wurden von dort statt 
einem gleich mehrere Sektoren gelesen, und Daten im RAM überschrieben.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier die Schaltung zum SIDE Interface. Da es relativ aufgeräumt im 
Layout zu geht, kann das Disk-Modul zwischen die Stiftleisten gelegt 
werden. Damit wird die Aufsatzplatine auf den Z180-Stamp nicht sehr 
hoch.

von Leo C. (rapid)


Lesenswert?

Sieht gut aus.

Mit LV-Gattern habe ich nicht getestet, sollte aber mindestens genau so 
gut funktionieren, wie HC-Gatter.
Habe ich das richtig in Erinnerung, daß bei reinem 5V-Betrieb des 
Systems, die 5V dann auf Pin B1 der Z180-Stamp liegen? Der Test mit 5V 
steht bei mir noch aus.

Mir fällt jetzt auf, daß bei dem gewinkelten Wannenstecker die 
Aussparung für den Verpolungs-Schutz oben liegt. D.h., der 
Strom-Anschlußstecker des Pollinmoduls (den wir nicht brauchen), kommt 
nach unten und sollte dort Platz haben. Dafür kommt "das Gesicht" nach 
oben, schön.

Bei meinem Prototypen habe ich nur eine gewinkelte Stiftleiste 
eingelötet und genau andersrum belegt, also Verpolschutz nach unten. Die 
Stiftleiste sitzt so dicht an der Platine, daß ich die Verpolschutznase 
stutzen mußte.
Auf die Leiste passt aber mein CF-Adapter, dh. seine Buchsenleiste ist 
eigentlich falsch herum montiert. Jetzt sehe ich, daß auf ebay alle 
billigen Adapter unter 5€ falsch sind. Für den richtigen muß man dort 
schon über 10€ ausgeben[2]. Das nur als Hinweis, falls jemand einen 
CF-Adapter statt des Pollin-Moduls verwenden möchte.


[1] z.B. 
http://www.ebay.de/itm/1PCS-Compact-Flash-CF-to-3-5-Female-40-Pin-IDE-Bootable-Adapter-Converter-Card-/401085955462?hash=item5d6295fd86:g:nFYAAOSwZ8ZW4UXy
[2] 
http://www.ebay.de/itm/Delock-IDE-Adapter-Delock-IDE-40Pin-CF-Card-I-II-/361562029374?hash=item542ec6bd3e:g:7lsAAOSwboVXO4az

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Habe ich das richtig in Erinnerung, daß bei reinem 5V-Betrieb des
> Systems, die 5V dann auf Pin B1 der Z180-Stamp liegen?
Vielen Dank für den Hinweis. Auf B1 liegen immer nur 3.3V oder bei 5V 
Betrieb nichts :-( Auf die Schaltung muss also noch ein Jumper 3.3V/5V 
bzw. es müssen beide Pins B1 und B2 beschaltet werden. Es gibt an den 
Stamp-Steckern kein Vcc-Pin.

> Strom-Anschlußstecker des Pollinmoduls (den wir nicht brauchen), kommt
> nach unten und sollte dort Platz haben.
An dieser Stelle hat die LP ein Loch.

> Das nur als Hinweis, falls jemand einen
> CF-Adapter statt des Pollin-Moduls verwenden möchte.
Mein Bestand an 128 MB DiskOnModulen sollte für alle potentiellen 
Nachnutzer reichen.

Melde mich nun bis Sonntag ab, schönes WE!

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier die finale Version mit Vcc für 5V oder 3.3V.

von Leo C. (rapid)


Lesenswert?

Danke.
Falls es keine Mühe macht, könnte man für die LED vielleicht zusätzlich 
2 Bohrungen vorsehen? Wenn das ganze Paket in ein 19"-Gehäuse gesteckt 
wird, könnte man dann eine LED auf der Frontpatte montieren und dort 
anschließen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Falls es keine Mühe macht, könnte man für die LED vielleicht zusätzlich
> 2 Bohrungen vorsehen?

Kein Problem, sehe ich noch vor.

von Holm T. (Gast)


Lesenswert?

Joe G. schrieb:
[..]
> Mein Bestand an 128 MB DiskOnModulen sollte für alle potentiellen
> Nachnutzer reichen.
>
> Melde mich nun bis Sonntag ab, schönes WE!

Ich weiß nicht so recht wohin mit diesem Modul, da ich Huckepack nicht 
vorgesehen habe und eher auf eine Einschubmimik aus war bzw. bin (ECB).

Ich hatte aber über die Anschaffung von so ein paar DOM Modulen 
nachgedacht..hast Du Dich "zu voll" gesogen? Willst Du wieder welche los 
werden oder wie soll ich das verstehen?
Die Dinger gibts ja noch für nen Äppel und ein Obst..

Ich habe hier einige IMHO nur 8 oder 16MB "Festplatten" von Sandisk da, 
die ich mal aus irgend welchen Fujuitsu-Siemens 486er 
Pizzabox-Schachteln geborgen habe, die haben richtige 40polige IDE 
Pfostenleisten...

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Holm T. schrieb:
> Willst Du wieder welche los
> werden oder wie soll ich das verstehen?

Ich lasse wieder 10 Leiterplatten fertigen und würde die restlichen 
Bauelemente besorgen. Dann kann jeder Interessent selber entscheiden, 
Komplettbausatz incl. DOM oder nur LP.

P.S.: Die USB (VNC2) to V24 Schaltung (Steckmodul auf dem ECB) lasse ich 
gleich mit fertigen.

von Leo C. (rapid)


Lesenswert?

Oops, gerade gemerkt, daß mein Artikel gestern Abend garnicht raus ging. 
Mal wieder auf Vorschau statt Absenden geklickt. Beim Lesen unten Heute 
gegen Gestern tauschen.

Holm T. schrieb:
> Ich weiß nicht so recht wohin mit diesem Modul, da ich Huckepack nicht
> vorgesehen habe und eher auf eine Einschubmimik aus war bzw. bin (ECB).

Huckepack kann man ja nachrüsten, oder die Schaltung auf eine 
ECB-Lochrasterplatte löten.

> Ich hatte aber über die Anschaffung von so ein paar DOM Modulen
> nachgedacht..hast Du Dich "zu voll" gesogen? Willst Du wieder welche los
> werden oder wie soll ich das verstehen?

Beitrag "Re: Z180-Stamp Modul"

> Ich habe hier einige IMHO nur 8 oder 16MB "Festplatten" von Sandisk da,
> die ich mal aus irgend welchen Fujuitsu-Siemens 486er
> Pizzabox-Schachteln geborgen habe, die haben richtige 40polige IDE
> Pfostenleisten...

Die könnten auch funktionieren, wenn Du ein IDE-Kabel dazwischen 
steckst. Aber die Pollin DOM's wären die schlankere Lösung.

Was definitiv nicht an dem Interface funktioniert, sind "moderne" 
IDE-Festplatten. Heute habe ich eine 20GB WD Caviar und eine 30GB 
Seagate ausprobiert. Die verstehen den Befehl "Enable 8-bit data 
transfers" nicht.

von Harald N. (haraldn)


Lesenswert?

Hallo!

Dann möchte ich mich gerne schon mal wieder für einen Komplettsatz 
anmelden ;-) Ich weiß viel zu früh, aber nur für die Akten...

Lg Harald

von Holm T. (Gast)


Lesenswert?

..naja, ich fasse auch nach Joe..also für mich auch die Platinen als 
Satz.

Falls Jemand alte IDE Festplatten haben will, ich habe davon hunderte 
da..allerdings müßte man deren Status von Fall zu Fall überprüfen.


Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Ich bin auch wieder dabei.

Alles bis auf DOM.

von Peter Z. (flexopete)


Lesenswert?

@Joe

Melde mich auch mal für beide Platinen an.

Gruss
Peter

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Softwareupdate

Wesentliche Änderung: Statt der Environment-Variablen 'dsk0'..'dsk7' 
gibt es ein "attach" Kommando. Das ganze ist noch nicht zu Ende gedacht 
(und programmiert), und "die usability" läßt vielleicht noch etwas zu 
wünschen übrig. Deshalb wäre ich an gründlichen Tests und 
Verbesserungsvorschlägen interessiert.

Die bisherigen Variablen kann man weiterverwenden, wenn man sie jeweils 
einem attach-Befehl übergibt: "attach dsk0 ${dsk0}"
Oder für alle auf einmal eine Variable definiert:
1
setenv attach_drives 'at dsk0 ${dsk0};at dsk1 ${dsk1};at dsk2 ${dsk2};at dsk3 ${dsk3};at dsk4 ${dsk4};at dsk5 ${dsk5};at dsk6 ${dsk6};at dsk7 ${dsk7}'
Dann muß man nur noch "run attach_drives" irgendwo in seine Boot-Sequenz 
einbauen.

Es gibt jetzt aber auch die Möglichkeit, Befehlsfolgen in einer Datei 
abzulegen, und mit "source filename" zu laden und auszuführen.

Sonstiges:

- Der Befehl mw kann jetzt 16- und 32-bit Worte ins RAM schreiben
  (Optionen -w und -l)
- Kommentare in Befehlszeilen, wg. source-Befehl. Kommentarzeichen: "#"
- Der Befehl loadcpm3 initialisiert eine weitere Env-Variable: cpm3_scb
  Sie enthält nach dem Laden die physikalische Basisaddresse des CP/M 3
  System Control Blocks. Die Offsets zu den Einträgen sind unter
  http://www.seasip.info/Cpm/scb.html gelistet. Es sind nicht die aus
  der DR-Dokumentation.

Außerdem gibt es ein Update für das CP/M 3 BIOS. Es ist für die neue 
Monitor-Version nicht zwingend notwendig, aber:

- Bessere Unterstützung der neuen Features, da die neuen Fehlercodes
  (Write protected, Media change) ausgewertet werden.
- Der Treiber für die CF-Karte wurde in den master branch integriert.
  Dadurch ist der Sourcecode auch auf dem Git-Server.

von Leo C. (rapid)


Lesenswert?

Noch ein paar Anmerkungen zu dem attach-Befehl.

Erstens ist die Hilfe zu dem Befehl fehlerhaft und unvollständig. Daran 
hatte ich erst wieder dran gedacht, nachdem das Zip-File schon gepackt 
war. Hier ist eine Auflistung der derzeit möglichen Formate und 
Optionen:
1
attach [-rw] [-o options] dsk<n> diskfile
2
    Attach diskfile to dsk<n>, where n in 0..7
3
    -r      File is read only (write protected)
4
    -w      File is read/write (default)
5
    -o options  Options is a comma-separated list of
6
          ro, rw, debug, nodebug
7
8
attach [-rw] -o reattach[,other options] dsk<n>
9
    Change options for dsk<n>.
10
    Options as above.
11
    
12
attach -d -a|dsk<n>
13
detach -a|dsk<n>
14
    Detach diskfile from dsk<n>.
15
    -a      Detach all.
16
17
attach
18
    Without arguments, list current assignments

Mit 'reattach' kann man (bisher) nur die Optinen ändern und nicht die 
dem Laufwerk zugeordnete Datei. Dafür war dieses Format
1
attach [-rw] -o reattach[,other options] dsk<n> diskfile
vorgesehen, aber die ganzen Plausibilitätsprüfungen waren mir erst mal 
zu aufwendig. Zum "Diskwechsel" braucht es also 2 Befehle (detach 
alt/attach neu)

Die Option "debug" gibt beim Zugriff auf die Laufwerke einige Meldungen 
auf der AVR-Console aus, die vorher durch eine compile time option 
zuschaltbar waren. Die Meldungen wurden eigentlich eingebaut, um den 
Treiber selbst zu debuggen, waren aber z.B. vor kurzem hilfreich, einen 
Fehler in "POWER 3.07" aufzudecken. Das kann bei Bedarf noch ausgebaut 
werden.

Detach setzt im BIOS die Media change Flags ("Door open"). Eigentlich 
meine ich, alles so implementiert zu haben, wie im "System Guide, 
Appendix A, Removable Media Considerations" beschrieben. Es funktioniert 
aber nicht so, wie von mir erwartet, was an einem Fehler irgendwo, oder 
an meiner Erwartung liegen kann. Vielleicht probierts mal jemand aus.

von Siggi M. (siggim)


Lesenswert?

Hallo Joe,

Ich würde auch gerne einen Komplettbausatz bestellen.

Gruß Siggi

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

(Nichts) neues von der Festplattenfront.

Ich habe nochmal 4 alte IDE-Platten zwischen 1,2G und 8,6G ausgegraben, 
und an dem CF-Interface getestet. Aber nicht mal die Quantum Bigfoot 
(Erinnert sich noch jemand?) kann mit 8 Bit.

Gestern Abend bin ich zufällig nochmal über das hier gestolpert:
Holm T. schrieb:
> $ zxcc /usr/local/lib/cpm/bin80/slr180.com -boot/M
>
> SLR180 Copyright (C) 1985-86 by SLR Systems Rel. 1.31 #SB3028
>
>  boot/M
> VERSION.INC - Bad Dummy Param Line 00001
> defvers macro\r\n       db      '0.6.4.4-dirty'\r\n     endm\r
>                                                               DEFVERS -
> Line Too
> jjxqfkjjzwyjlzgjijijpsfgj\d]zuhj\dzuhjx~xrtwjpqhw{fHjjwuywujjnxstrrthjjn xsrh
> DEFVERS - Line Too Long Line 00002

Holm, kann es sein, daß die Datei "version.inc" mit Make auf Deinem 
FreeBSD generiert wurde? Dann liegt es wahrscheinlich am nicht portablen 
"echo" das von Make verwendet wurde. Inzwischen habe ich gelernt, daß 
das portable "echo" "printf" heißt. Du könntest das Makefile also mal 
folgendermaßen ändern:
1
version.inc: autorevision.cache
2
  @echo update $@
3
  printf "defvers  macro\r\n\
4
    db  '$(VERS)'\r\n\
5
    endm\r\n" > $@
Dabei das "\n" ganz am Ende nicht vergessen.

Natürlich kann man das System auch auf einem CP/M-Rechner generieren. 
Dafür habe ich mal alles was man braucht *) in ein Disk-Image gepackt. 
Mit "mkbcpm3.sub" (Make Banked CP/M 3) kann dann das BIOS assembliert 
und ein neues CPM3.SYS-File generiert werden.



*) und mehr. Aktuell werden nur slr180.com link80.com und gencpm.com 
genutzt. Die anderen Assembler und Linker sind nur der Vollständigkeit 
halber, und falls jemand andere Präferenzen hat, dabei.

von Holm T. (Gast)


Lesenswert?

So ganz Unrecht scheinst Du nicht zu haben Leo:
1
$ ls
2
Makefile                chario.180              move.180
3
ascip.180               conbuf.180              msgbuf.180
4
autorevision.cache      config.inc              scb.180
5
bioskrnl.180            cpm3.lib                sdio.180
6
bioskrnl.lst            cpm3slr.lib             time.180
7
bioskrnl.rel            drvtbl.180              utils.180
8
boot.180                gencpm.dat              version.inc
9
boot.com                misc.180                z180.lib
10
boot.lst                mm.180                  z180reg.inc
11
boot.rel                modebaud.inc
12
$ gmake
13
zxcc /usr/local/lib/cpm/bin80/slr180.com -bioskrnl/MFS
14
zxcc /usr/local/lib/cpm/bin80/slr180.com -chario/MFS
15
zxcc /usr/local/lib/cpm/bin80/slr180.com -drvtbl/MFS
16
zxcc /usr/local/lib/cpm/bin80/slr180.com -move/MFS
17
zxcc /usr/local/lib/cpm/bin80/slr180.com -time/MFS
18
zxcc /usr/local/lib/cpm/bin80/slr180.com -mm/MFS
19
zxcc /usr/local/lib/cpm/bin80/slr180.com -misc/MFS
20
zxcc /usr/local/lib/cpm/bin80/slr180.com -utils/MFS
21
zxcc /usr/local/lib/cpm/bin80/slr180.com -msgbuf/MFS
22
zxcc /usr/local/lib/cpm/bin80/slr180.com -conbuf/MFS
23
zxcc /usr/local/lib/cpm/bin80/slr180.com -ascip/MFS
24
zxcc /usr/local/lib/cpm/bin80/slr180.com -sdio/MFS
25
zxcc /usr/local/lib/cpm/bin80/slr180.com -scb/MFS
26
zxcc link80 -bnkbios3=bioskrnl,boot,chario,drvtbl,move,time,mm,misc,utils,msgbuf,conbuf,ascip,sdio,scb[b,q]
27
zxcc: Cannot locate link80, link80.com, link80.COM, link80.cpm _or_ link80.CPM
28
Makefile:158: die Regel für Ziel „bnkbios3.spr“ scheiterte
29
gmake: *** [bnkbios3.spr] Fehler 1
30
$

..nun muß ich mal den Linker suchen, irgendwo liegt der rum...

Danke!!

Gruß,

Holm

Edit:

Ich habe den umbenannten l80.com da hin kopiert, aber irgendwas  spinnt 
wohl immer noch:
1
$ ls
2
Makefile        boot.com        cpm3.lib        misc.180        msgbuf.180      utils.180
3
ascip.180       chario.180      cpm3slr.lib     mm.180          scb.180         z180.lib
4
bioskrnl.180    conbuf.180      drvtbl.180      modebaud.inc    sdio.180        z180reg.inc
5
boot.180        config.inc      gencpm.dat      move.180        time.180
6
$ gmake
7
zxcc /usr/local/lib/cpm/bin80/slr180.com -bioskrnl/MFS
8
update version.inc
9
zxcc /usr/local/lib/cpm/bin80/slr180.com -boot/MFS

..dort hängts dann für immer und der zxcc mach 100% Auslastung seines 
Kerns. Beim ersten Mal lief das durch... hmm..

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Der Linker ist in dem Diskimage, daß ich gestern gepostet habe. Es ist 
der Linker von DR, der zu RMAC gehört. Im Original heißt der 
wahrscheinlich link.com. Ich habe ihn bei mir zu link80.com umbenannt, 
weil ich schon einen anderen link.com hatte, und weil er in der Doku 
auch so ähnlich genannt wird (LINK-80).

von Holm T. (Gast)


Lesenswert?

Ja, seit ich dem einen umbenannten link.com unter geschoben habe gehts 
auch besser, als nächstes dann gencpm, da habe ich auch irgendwas auf 
meinem Rechner gefunden und der findet dann BNKBDOS3.SPR nicht.
Ich hatte im Web keinen link80.com gefunden, aber eine Doku die das Ding 
als Lnk-80 von Microsoft verkaufte, die Syntax in der Doku war die des 
L80..deswegen der Versuch..

Ich mache das nochmal in Ruhe und es ist logisch das die Sachen auf 
Deinem Image zu finden sind, ich muß sie nur erst mal da raus holen :-)
Probiert habe ich sowieso noch mit der 0.6.4.4-dirty Version.

Interessant bleibt das das echo in Make inkompatibel bleibt, ich hatte 
wohl version.inc schon mal editiert deswegen lief das das erste Mal, 
oder es war eine File von Dir. Ich hatte schon Gnu-Make (gmake) benutzt.
Ob ich den zxcc mit gcc48 oder mit CLANG übersetze scheint übrigens 
keinen Unterschied zu machen, nur das CLANG mehr meckert..

Ich hatte allerdings zwischenzeitlich auch die atime auf meinem zfs 
eingeschaltet, kann sein das das auch einen Unterschied gemacht hat.

Ich wollte mich heute sowieso mal damit befassen, gestern lag nämlich 
auch ein 33Mhz Z180 aus China (von janeh2100) im Briefkasten, den wollte 
ich zumindest mal mit 18Mhz testen...

Gruß,

Holm

BTW: Was haltet Ihr von einem Modul oder einer weiteren Platine mit u.A. 
einem WD37C65 oder DP8473 drauf?

von Leo C. (rapid)


Lesenswert?

> zxcc /usr/local/lib/cpm/bin80/slr180.com -boot/MFS
>
> ..dort hängts dann für immer und der zxcc mach 100% Auslastung seines

Da CP/M-Programme (und der Emulator) keine brauchbaren Fehlercodes an 
die Unix-Shell liefern, wird im Makefile die Ausgabe des Assemblers in 
eine Datei umgeleitet, und danach nach Fehlern ausgewertet. Manchmal 
verlangt slr180 aber eine Eingabe vom Benutzer, zB. wenn er eine Seite 
voll mit Fehlern produziert hat. Durch die Umleitung sieht man davon 
nichts. Um zu sehen welcher Fehler das sein könnte ist es am 
Einfachsten, die Zeile
1
zxcc /usr/local/lib/cpm/bin80/slr180.com -boot/MFS
direkt in der Shell auszuführen.


> Ich mache das nochmal in Ruhe und es ist logisch das die Sachen auf
> Deinem Image zu finden sind, ich muß sie nur erst mal da raus holen :-)

Eigentlich wars so gedacht, die Sachen da drin zu lassen und das Image 
an ein CP/M-System anzuschließen. :-)
Die anderen fehlenden Teile (gencpm.com, bnkbdos3.spr, ...) sind aber 
auch in dem Image.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
>> zxcc /usr/local/lib/cpm/bin80/slr180.com -boot/MFS
>>
>> ..dort hängts dann für immer und der zxcc mach 100% Auslastung seines
>
> Da CP/M-Programme (und der Emulator) keine brauchbaren Fehlercodes an
> die Unix-Shell liefern, wird im Makefile die Ausgabe des Assemblers in
> eine Datei umgeleitet, und danach nach Fehlern ausgewertet. Manchmal
> verlangt slr180 aber eine Eingabe vom Benutzer, zB. wenn er eine Seite
> voll mit Fehlern produziert hat. Durch die Umleitung sieht man davon
> nichts. Um zu sehen welcher Fehler das sein könnte ist es am
> Einfachsten, die Zeile
>
1
> zxcc /usr/local/lib/cpm/bin80/slr180.com -boot/MFS
2
>
> direkt in der Shell auszuführen.
>

Ja ich weiß  :-)
Im Optimalfalle ohne "FS".

>
>> Ich mache das nochmal in Ruhe und es ist logisch das die Sachen auf
>> Deinem Image zu finden sind, ich muß sie nur erst mal da raus holen :-)
>
> Eigentlich wars so gedacht, die Sachen da drin zu lassen und das Image
> an ein CP/M-System anzuschließen. :-)
> Die anderen fehlenden Teile (gencpm.com, bnkbdos3.spr, ...) sind aber
> auch in dem Image.

..auch das war mir verhältnismäßig klar :-)
Wenn Du aber auf die Idee kommst mein Crossdevelopment-System in Ordnung 
bringen zu wollen..?

BTW: Das mit den Platten wundert mich nicht.

Tilman Reh hat das GIDE Interface mit 8<>16Bit Umschaltmimik konstruiert 
als IDE Platten noch nicht wirklich Gigabytes halten konnten. Die 8-Bit 
fähigen IDE Platten stammen noch aus XT Zeiten und waren damals neu, Du 
kannst also bei 40-120MB IDE Platten fündig werden..
Die GIDE verwendet 2 74LS646 die sich mittlerweile als Engpaß erweisen, 
der Einsatz eines kleinen CPLD wäre da wohl sinnvoller, aber auch da 
werden die 5V Typen knapp.
DAS CF Karten Interface ist aus meiner sich eh ein Bisschen 
"fragwürdig", Flash Memory war mit den SD Karten ja schon abgedeckt, ich 
sehe keinen wirklich großen Zusatznutzen, es sei denn Du wolltest da 
eigentlich Festplatten anschließen.

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

> Im Optimalfalle ohne "FS".

Gelegentlich brauche ich ein gescheites Listing zum Debuggen. Und da das 
im Emulator in 0 Zeit erstellt wird...

> BTW: Das mit den Platten wundert mich nicht.

Mich auch nicht. Hatte ich ja auch schon im ersten Beitrag zum CF-IF 
(Beitrag "Re: Z180-Stamp Modul") 
geschrieben. Aber die Hoffnung stirbt ja bekanntlich zu letzt. Außerdem 
wollte ich testen, ob mein Treiber auch mit so was umgehen kann, ohne 
hängen zu bleiben oder abzustürzen. Dafür hätte ich natürlich keine 6 
Platten durchprobieren müssen.

> DAS CF Karten Interface ist aus meiner sich eh ein Bisschen
> "fragwürdig", Flash Memory war mit den SD Karten ja schon abgedeckt, ich
> sehe keinen wirklich großen Zusatznutzen, es sei denn Du wolltest da
> eigentlich Festplatten anschließen.

SD geht halt nicht so einfach. Beim Stamp-System nimmt der AVR dem Z180 
die Ansteuerung ab. Aber es soll ja Leute geben, die so etwas nicht 
mögen. Mit dem CF-IF bekommt man auf einfache Weise schnellen 
Massenspeicher an den Z180, von dem er mit einem kleinen Bootloader auch 
direkt jedes beliebige Betriebssystem booten könnte. Mit den 
Pollinmodulen wirds auch noch spottbillig.
Festplatten will ich mir nicht (mehr) wirklich antun, sonst gäbe es 
wahrscheinlich schon ein Interface ala GIDE.

> BTW: Was haltet Ihr von einem Modul oder einer weiteren Platine mit u.A.
> einem WD37C65 oder DP8473 drauf?

Nur zu.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
>
> Festplatten will ich mir nicht (mehr) wirklich antun, sonst gäbe es
> wahrscheinlich schon ein Interface ala GIDE.

Festplatte oder CF/SD ist aber auch ziemlich egal, nur das vertraute 
Geräusch fehlt bei CF :-)
Ob eine CF zuverlässiger als eine Platte ist bleibt noch fraglich.
>
>> BTW: Was haltet Ihr von einem Modul oder einer weiteren Platine mit u.A.
>> einem WD37C65 oder DP8473 drauf?
>
> Nur zu.

..und wie?
Die Teile erfordern fast keine Außenbeschaltung, in so fern ist das 
verhältnismäßig einfach.
Die Realisierung als Stamp wie gehabt geht sicher, es wäre noch ein 
Stamp Platz auf einer weiteren Basisplatine frei.. aber auch auf der 
Basisplatine könnte man noch zusätzlichen Kram unterbringen, eben z.B. 
ein CF Interface und einen FDC ..oder Netzwerk ..keine Ahnung.

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Holm T. schrieb:
> BTW: Was haltet Ihr von einem Modul oder einer weiteren Platine mit u.A.
> einem WD37C65 oder DP8473 drauf?

Aber nur in Verbindung mit einem 8 Zoll Laufwerk [1] ;-)

[1] Beitrag "Re: Z180-Stamp Modul"

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:

> Natürlich kann man das System auch auf einem CP/M-Rechner generieren.
> Dafür habe ich mal alles was man braucht *) in ein Disk-Image gepackt.
> Mit "mkbcpm3.sub" (Make Banked CP/M 3) kann dann das BIOS assembliert
> und ein neues CPM3.SYS-File generiert werden.
>
1
[..]
2
H>era conbuf.rel
3
H>era ascip.rel
4
H>era sdio.rel
5
H>era cfio.rel
6
H>era scb.rel
7
H>gencpm AUTO
8
9
10
CP/M 3.0 System Generation
11
Copyright (C) 1982, Digital Research
12
13
14
15
*** CP/M 3.0 SYSTEM GENERATION DONE ***
16
H>

..und der Chinesenprozessor geht auch.

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

Joe G. schrieb:
> Holm T. schrieb:
>> BTW: Was haltet Ihr von einem Modul oder einer weiteren Platine mit u.A.
>> einem WD37C65 oder DP8473 drauf?
>
> Aber nur in Verbindung mit einem 8 Zoll Laufwerk [1] ;-)
>
> [1] Beitrag "Re: Z180-Stamp Modul"

Das hebt mich aber gar nicht an. Ich habe 2 NEC FD1165 da und einen 8 
Zoll Beisteller aus der DDR mit 2 MF6400 und ich habe noch mindestens 3 
Kartons mit Schachteln voller neuer Disketten... Auch den 
Gebrauchtbestand eines Forschungsinstitutes am Ort ...

Das was Du da hast sieht aus wie die Dinger die die Ungarn immer 
nachgebaut haben (MF3200 / 
http://www.robotrontechnik.de/index.htm?/html/komponenten/fs.htm)

Du must schon tiefer in die Trickkiste greifen wenn Du mich schocken 
willst :-)

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

1
### Reset reason(s): Power on, External, Brown out.
2
3
ATmega1281+Z8S180 Stamp Monitor - Version: 0.6.7.1 
4
5
### main_loop entered: bootdelay=3
6
7
### main_loop: bootcmd="pin 8 low 3 9MHz; run attach_drives;loadcpm ${cpm3_file}; go ${startaddress}"
8
Hit any key to stop autoboot:  0 
9
Loading: '0:cpm3.sys'...
10
11
 BNKBIOS3 SPR  FA00  0500
12
 BNKBIOS3 SPR  B200  3E00
13
 RESBDOS3 SPR  F400  0600
14
 BNKBDOS3 SPR  8400  2E00
15
 
16
 61K TPA
17
Loaded: Resident: 0x1E400-0x1EEFF, Banked: 0x08400-0x0EFFF
18
## Starting application at 0xb200 ...
19
=> z80_memfifo_init: 0, b65a
20
z80_memfifo_init: 1, b69e
21
z80_memfifo_init: 2, b81a
22
z80_memfifo_init: 3, b83e
23
.................................
24
25
26
CP/M Version 3.0, Z180-Stamp BIOS v0.6.7.1.2-dirty
27
Estimated CPU clock [Hz]: 18432000
28
sdio: SD Card driver
29
cfio: CompactFlash Memory Card driver: No Card
30
A>

...funzt Leo...

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

Leo was mich noch nervt sind die ASCI Treiber, jedesmal wenn ein neues 
Laufwerk eingeloggt wird verliert der Kram Character die ich 
eintippere..
(c:<cr>dir<cr>)

Ich habe reingeguckt..alles klar:
"; Simple polling drivers for ASCI0 and ASCI1 "


Kannst Du das hier evtl da reinbasteln?

http://www.tiffe.de/Robotron/LC80ex/TDL-Basic/2016021100/ctcsio.mac
..hab ich gemacht.

Das sind zumindest funktionierende serielle Treiber mit Interrupt und 
Puffer für die SIO auf einem LC80ex.
Zeitgeber und ASCI Bits wirst Du natürlich anpassen müssen..aber 
zumindest das Gerüst ist schon fertig.
Du stehst deutlich tiefer in der Materie als ich.

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

> Leo was mich noch nervt sind die ASCI Treiber, jedesmal wenn ein neues
> Laufwerk eingeloggt wird verliert der Kram Character.

Ist mir noch nie aufgefallen. Du bist der Erste, der sich (zurecht) 
beschwert. Daß beim "Pasten" mit der Maus Zeichen verloren gehen, hat 
mich auch schon genervt.

> "; Simple polling drivers for ASCI0 and ASCI1 "

Mehr oder weniger funktionierende Interrupt-Treiber gibts schon seit ca. 
einem Jahr. Beim Einbau von flow control habe ich mich dann wohl 
verzettelt, und ca. Weihnachten bin ich ganz davon abgekommen.
1
leo@cb:~/Projekte/HD64180/z180-stamp-cpm3/cbios$ git log  --format=format:"%aI  %s" asci-int-driver
2
2016-04-23T17:21:35+02:00  WIP
3
2015-11-06T19:13:42+01:00  Add TCGETA, TCSETA
4
2015-11-05T10:19:12+01:00  add ioctl data
5
2015-11-02T16:56:18+01:00  working again.
6
2015-10-30T10:02:26+01:00  asci0 int: Save intermediate state. Not working!
7
2015-10-28T14:04:06+01:00  bugfix RTS
8
2015-10-09T11:02:33+02:00  Add RTS/CTS flow control for asci0.
9
2015-06-17T07:45:20+02:00  ascii.180 interrupt driver for ASCI 0/1
10
2015-10-31T02:52:30+01:00  new chario
11
2015-10-30T09:50:28+01:00  bioskrnl.180: Remove xon/xoff handling.

> Kannst Du das hier evtl da reinbasteln?

Danke, aber nicht ganz passen. Die ASCIs sind doch um einiges anders als 
die SIO.

> ..aber zumindest das Gerüst ist schon fertig.

Ein Gerüst habe ich auch. :-)

von Holm T. (Gast)


Lesenswert?

Ich hoffe das die ASCIs besser sind :-)

Die SIO hat zwar keine Fehler soweit aber ist ein Bisschen doof bei 
async. RTS wird anders ausgewertet als heute für RTS/CTS Handshake 
üblich, man kann es nicht abschalten so lange noch gesendet wird.. 
deswegen hält oben DTR her.
Auf CTS ihres Gegenübers reagiert die Sio freilich gaanz lieb.

Die ASCIs kenne ich (noch) nicht. man müßte mal ins Datenbuch gucken 
(liegt ja herum, zumindest zum HD64180, hoffe der ist identisch) aber 
soo groß dürfte der Unerschied nun auch wieder nicht sein, von 
Int-Vektoren und Baudratengenerierung  mal abgesehen. Wenn ich das 
nochmal anfasse baue ich evtl. Makros ein..

BTW: Beim HI-Tech C 3.09 ist Mathe nicht so prall..
1
F>test
2
Test 4 * 7 = 28
3
Pi: 3.120122
4
5
F>type test.c
6
#include<stdio.h>
7
#include<float.h>
8
#include<math.h>
9
10
main()
11
{
12
int a,b;
13
double pi;
14
a=4;
15
b=7;
16
pi=4.0*atan(1.0);
17
18
printf("Test %d * %d = %d\r\n",a,b,a*b);
19
printf("Pi: %lf\r\n",pi);
20
}


Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

> Ich hoffe das die ASCIs besser sind :-)

Eher umgekehrt.
Zumindest was die Original-ASCI vom Hitachi HD64180 und den ersten Klon 
von Zilog betrifft. Beim Z8S180 hat Zilog aber nachgebessert.

von Holm T. (Gast)


Lesenswert?

Hmm. Ich werde es mir ansehen. Wie viele Seiten Errata gibts denn?

BTW: ich kann gar nicht so viel essen wie ich kotzen muß:

http://www.theregister.co.uk/2016/06/09/microsoft_freebsd/

:-|

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

> Hmm. Ich werde es mir ansehen. Wie viele Seiten Errata gibts denn?

Es sind eher fehlende und Miss-Features als harte Fehler. 
Break-Detection[1], und die Möglichkeit CTS und DCD "abzuschalten", 
wurden im Z8S180 nachgerüstet. In [2] steht ganz hinten etwas zu ASCI.

> BTW: ich kann gar nicht so viel essen wie ich kotzen muß:

Aufrichtiges Beileid[3].


[1] BREAK DETECTION ON Z80180 AND Z181
    http://www.datasheetarchive.com/dlmain/Datasheets-41/DSA-808568.pdf
[2] Z180 Family QUESTIONS AND A NSWERS
    http://www.wfms.org/sb180/z180qa.pdf

[3] https://de.wikipedia.org/wiki/Embrace,_Extend_and_Extinguish

von Holm T. (Gast)


Lesenswert?

Von dieser Art Break Detection und Generation lese ich wirklich das 
erste Mal. Da waren die Hitachisten wohl ein Bisschen schräg drauf...

Na gut, ich schrieb schon das Du da tiefer in der Materie steckst, ich 
habe zwar schon einige HD64180 oder Z180 enthaltende Kisten repariert 
aber noch nie programmiert.

Zu [3] soweit wird es wohl nicht kommen. Wenn Mickeysoft so weiter macht 
schaffen die sich eh ab.

Gruß,

Holm

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Neuer Versuch.
Laufwerks-Login sollte jetzt besser funktionieren, wenn die SD-Karte 
gezogen, und wieder gesteckt wird. Das Debug-Logging ist jetzt 
einigermaßen brauchbar.
Neues Kommando "bootcf" um von CF-Card booten zu können.

Im BIOS wurde die Console auf ASCI1 mit 115200 Baud gestellt.
ASCI1 (die 2. Serielle) war ja schon immer als Defaulteinstellung für 
die Console vorgesehen.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Neuer Versuch.
> Laufwerks-Login sollte jetzt besser funktionieren, wenn die SD-Karte
> gezogen, und wieder gesteckt wird. Das Debug-Logging ist jetzt
> einigermaßen brauchbar.
> Neues Kommando "bootcf" um von CF-Card booten zu können.

..wenig Zeit heute...
>
> Im BIOS wurde die Console auf ASCI1 mit 115200 Baud gestellt.
> ASCI1 (die 2. Serielle) war ja schon immer als Defaulteinstellung für
> die Console vorgesehen.

Warum die 2.? Üblicherweise ist 0 die Console..

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Die Erste hat mehr Steuerleitungen.
ASCI0: RTS0, CTS0, DCD0
ASCI1: CTS1, aber nur, wenn man die Clocked-Serial-I/O nicht verwenden 
will.

Fürs Consolen-Terminal reicht normalerweise eine Schnittstelle ohne 
Handshake. ASCI0 hat man dann frei für Modem, :-) Drucker, :-) 
USB-Dongle, ...

RTS0 ist übrigens nur ein simpler Output-Port, könnte man also auch für 
ASCI1 oder sonst was verwenden.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Die Erste hat mehr Steuerleitungen.
> ASCI0: RTS0, CTS0, DCD0
> ASCI1: CTS1, aber nur, wenn man die Clocked-Serial-I/O nicht verwenden
> will.
>
> Fürs Consolen-Terminal reicht normalerweise eine Schnittstelle ohne
> Handshake. ASCI0 hat man dann frei für Modem, :-) Drucker, :-)
> USB-Dongle, ...
>
> RTS0 ist übrigens nur ein simpler Output-Port, könnte man also auch für
> ASCI1 oder sonst was verwenden.

Ok..leuchtet ein.

Ich habe jetzt mal die Version 6.8 drüber gebrezelt und das cpmldr.com 
auf
und das cpm3test.dsk (drive A) kopiert. Das ulpert da noch als rel file 
herum.
Was genau ist die Funktion des Files und wieso einmal als rel und einmal 
als com file? Ich kann doch sicher das rel-file weghacken?
Ich weiß natürlich das CP/M ein Stück Programm benötigt um von 
irgendwoher in den RAM geladen und dann dort gestartet werden muß..ich 
kenne nur CP/M 3 nach wie vor nicht und bin nicht dazu gekommen mich 
wirklich mal eingehend mit der Sache zu befassen...
Ich werde mir auch wieder mal die aktuelle Version von git holen..
1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.8
2
Estimated CPU clock [Hz]: 18432000
3
sdio: SD Card driver
4
cfio: CompactFlash Memory Card driver: No Card
5
A>

CP/M bootet und kommt auch auf asci1 raus, allerdings bei mir mit 19200 
Baud.
Das hier kriege ich aber nach wie vor noch hin:
1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.8
2
Estimated CPU clock [Hz]: 18432000
3
sdio: SD Card driver
4
cfio: CompactFlash Memory Card driver: No Card
5
A>h:
6
H>ir
7
IR?
8
H>

das "d" habe ich natürlich mit eingegeben.

Gruß,
Holm

von Leo C. (rapid)


Lesenswert?

Mal ganz allgemein zum Booten (für die CP/M-Neueinsteiger unter uns)

Bei CP/M 2 ist es noch ziemlich einfach:
Auf einer bootfähigen Diskette ist im ersten Sektor ein "Cold Boot 
Loader" und in weiteren Sektoren "in einem Stück" das komplette 
CP/M-System, bestehend aus CCP, BDOS und BIOS.

Beim Booten läd nun eine minimalistische Routine im EPROM den Cold Boot 
Loader irgendwo ins RAM (Stufe 1), und dieser dann die folgenden 
Sektoren an die CCP-Adresse (Sufe 2). Anschließend springt er auf den 
Kalstartvektor im BIOS, welches den Rest an Initialisierungen besorgt, 
und den CCP startet (Stufe 3).
Sicher wird es auch Systeme gegeben haben, die vom ROM aus das komplette 
System geladen haben, also die Stufe 2 übersprangen. Der Vorteil der 
3-stufigen Version ist, daß man das ROM nicht ändern muß, wenn sich das 
System mal verändert, oder ein ganz anderes System geladen werden soll.
Man muß immer nur den Cold Boot Loader auf der Diskette anpassen.

Bei CP/M 3 wird es etwas komplizierter, weil das System nicht mehr 
zusammenhängend geladen werden kann. Von BDOS und BIOS muß je ein Teil 
in den Common-Bereich und in Bank 0. Der CCP wird (wie ein normales 
Programm) an den Anfang der TPA in Bank 1 geladen.
Deshalb hat DR bei CP/M 3 eine zusätliche Stufe eingeführt. In den 
Systemspuren ist der Cold-Boot-Loader (wie gehabt in Sektor 1) und der 
"CP/M 3 system loader" (CPMLDR). Dieser CPMLDR läd das CP/M 3 System aus 
einer ganz normalen Datei "CPM3.SYS" von der Diskette (Stufe 3). 
CPM3.SYS hat einen Header mit den Ladeadressen der residenten und 
gebankten BDOS+BIOS Teile. Der CCP wird von der Cold-Boot-Routine (Stufe 
4) im BIOS geladen.

Im Stamp-Monitor übernimmt der Befehl "loadcpm3" die ersten 3 Stufen des 
Bootvorgangs. Allerdings wird dabei CPM3.SYS direkt von der SD-Karte 
geladen und kann deshalb auch gerne einen längeren Namen mit 
Versionskennung haben.

Da es ja zetzt das CF-Interface gibt, wäre es auch denkbar, ein 
Stamp-System ohne SD-Karten zu haben. Da die CF-Karte direkt am Z180 
hängt, muß der Z180 auch alleine booten. Also ab Stufe 2, die 
"ROM-Routine" zum laden des Cold-Boot-Loaders wird vom Stamp-Monitor mit 
dem Befehl "bootcf" ins RAM geladen. Diese "ROM-Routine" kann aber auch 
mehr als einen Sektor, und deshalb z.B gleich den CPMLDR laden.

> cpmldr.com aufund das cpm3test.dsk (drive A) kopiert.

Normalerweise gehört der CPMLDR in die Systemspuren. Da er aber auf 
Adresse 100h gelinkt ist, könnte man ihn auch als normales Programm 
starten. Praktisch zum Debuggen. Das funktioniert aber mit dieser 
Version nicht, da dieser CPMLDR in Bank 0 laufen muß.

> Das ulpert da noch als rel file herum.

Das REL-File ist der früher von DR gelieferte Teil des Laders. Der 
Haußteil darin ist ein abgespecktes CP/M 3 BDOS, in dem nur 
Consolen-Ausgabe und die Funktionen für das Laden einer Datei enthalten 
sind. Dazu wird dann das eigene Loader-BIOS gelinkt, das ebenfalls nur 
diese Funktionen unterstützt. Mein Loader-BIOS hat nur Unterstützung für 
die CF-Karte. Außerdem wird die Console auf 115200 Baud initialisiert.

> Was genau ist die Funktion des Files und wieso einmal als rel und einmal
> als com file? Ich kann doch sicher das rel-file weghacken?

Du brauchst es, wenn Du einen neuen CPMLDR bauen willst ("make ldr" oder 
"MKCPMLDR.SUB").
Aber heutzutage kannst Du es Dir ja aus den Sourcen wieder 
herstellen[1].

> wirklich mal eingehend mit der Sache zu befassen...

Ausführliche Beschreibung in [2].

> Ich werde mir auch wieder mal die aktuelle Version von git holen..

Eigentlich müßten ältere Versionen auch funktionieren. Falls Make beim 
"autorevision" hängen bleibt, daß ist ein eigenständiges Programm[3].


> CP/M Version 3.0, Z180-Stamp BIOS v0.6.8
...
> CP/M bootet und kommt auch auf asci1 raus, allerdings bei mir mit 19200
> Baud.

Keine Ahnung, wie ich das hinbekommen habe. Die 0.6.8 Datei hat bei mir 
auch 19200. Offensichtlich hatte ich damit nicht getestet. Auf der 
SD-Karte ist auch nur Version 0.6.7.1.7-dirty. Und die hat 115200, 
obwohl die Änderung der Baudrate der letzte Schritt vor dem taggen mit 
0.6.8 war.

Man kann die Baudrate auch im cpm3_x.sys File patchen. Einfach in der 
Datei nach ASCI1 suchen, und mit einem Binär-Editor (oder dd) das 2. 
Byte danach (hier auf 3c0), auf den gewünschten Index setzen. 0f ist 
19200 und 04 wäre 115200.
1
000003a0  ab b4 c9 cd 64 fd b6 b4  c9 55 53 42 30 20 20 03  |....d....USB0  .|
2
000003b0  00 41 53 43 49 30 20 0f  0f 41 53 43 49 31 20 0f  |.ASCI0 ..ASCI1 .|
3
000003c0  0f 00 74 bb 97 bb ba bb  dd bb 00 bc 23 bc 46 bc  |..t.........#.F.|

> A>h:
> H>ir
> IR?
> H>

Anscheinend hatte ich noch nie so schnell nach einem Laufwerkswechsel 
"dir" eingetippt, aber jetzt habe ich das auch.
Beim Wechsel auf ein neues Laufwerk wird erst mal das ganze Directory 
eingelesen. Das dauert etwas (1024 Einträge == 64 Sektoren). Trotzdem 
sollte nichts verschluckt werden, weil die ASCI einen 4 Byte großen 
Puffer hat. Wahrscheinlich wird das Zeichen von der BDOS-Consolenroutine 
oder vom CCP verschluckt. Nicht schön, und ein Interrupt-Treiber würde 
dann auch nicht helfen.
1
A>^C
2
A>a:
3
A>ir

Nachtrag, da ich eh gerade an dem Interrupt-Treiber bin. Stimmt, hilft 
tatsächlich nicht:
1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.8.9-asci-int-driver-dirty
2
Estimated CPU clock [Hz]: 9216000
3
sdio: SD Card driver
4
cfio: CompactFlash Memory Card driver: No Card
5
6
A>^C
7
A>a:
8
A>ir



[1] http://www.cpm.z80.de/download/cpm3src_unix.zip
[2] https://archive.org/stream/CPM3-System_Guide#page/n105/mode/2up
[3] https://autorevision.github.io/

von Holm T. (Gast)


Lesenswert?

Bekommen wir den FDC37C665GT gehandelt Leo?
Die IDE Geschichte nützt uns wahrscheinlich Nichts, aber 2S mit FIFO und 
1P
sind wohl verwendbar. Die Dinger gibts in der Bucht für Kleingeld und 
auf ollen Mainboards sicher auch..aber das Gehäuse..TQFP100.

Das paßt auch bei einer 2 Lagen Platine sicher nicht mehr auf eine 
Stamp.
DRQ Signale haben wir 2, wie ist denn das mit den DMA-End Signalen?
Brauchen wie noch ne CIO als _Int-Conroller? Irgendwo gabs eine Zilog 
Applikation zur Nachbildung der ED4D Mimik...

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Holm T. schrieb:
> Bekommen wir den FDC37C665GT gehandelt Leo?

Warum unbedingt ein Floppy Disk Controller? Wenn du den FDC37C665GT und 
einen Z80182 nutzen möchtest, warum denn nicht gleich das P112-System 
[1]?
Den gibt es mit CP/M 2.2 CP/M 3.0 UZI180 und sogar mit FUZIX :-)

[1] https://en.wikipedia.org/wiki/P112

von Holm T. (Gast)


Lesenswert?

Joe G. schrieb:
> Holm T. schrieb:
>> Bekommen wir den FDC37C665GT gehandelt Leo?
>
> Warum unbedingt ein Floppy Disk Controller? Wenn du den FDC37C665GT und
> einen Z80182 nutzen möchtest, warum denn nicht gleich das P112-System
> [1]?
> Den gibt es mit CP/M 2.2 CP/M 3.0 UZI180 und sogar mit FUZIX :-)
>
> [1] https://en.wikipedia.org/wiki/P112

Ich verstehe Deine Frage nicht Joe. ..wieso "unbedingt" und wieso 
"unbedingt nicht?"
Ich habe nicht gesagt das Du routen mußt, das würde ich selber versuchen
auch wenn ich noch nie ne Platine mit einem TQFP-100 gemacht habe.
Es ist nicht nur ein FDC der mir fehlt, sondern auch GPIOs und das 
System von Dir habe ich, den P112 nicht. Was also hast Du für ein 
Problem damit das ich an den ECB-Bus Stecker ranhängen will was mir 
gefällt?

An einem CP/M Rechner gehören Floppies und ich habe Floppies da, so 
what?

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Holm T. schrieb:
> Was also hast Du für ein
> Problem damit das ich an den ECB-Bus Stecker ranhängen will was mir
> gefällt?

Oh, ich habe kein Problem damit - immer zu! Ich wollte nur eine 
Alternative anbieten.

von Holm T. (Gast)


Lesenswert?

Die Alternative zu nehmen wäre eine Mißachtung auch Deiner Arbeit und 
die Anzahl der Baustellen würde wieder um 1 incrementiert werden.

Als problematisch erweist sich allerdings der hohe SYSCLK von 18Mhz, die 
16Mhz PIOs werden gerade noch so funktionieren und auch "modernere" 
Peripherie ICs haben keine höheren Taktfrequenzen, selbst wenn man bei 
artfremden Systemen räubern will wird es da finster..

Ich hätte gerne eine Spielkiste, Console gerne seriell da mir der 
Aufwand ein Terminal selber zu bauen angesichts oller Notebooks nicht 
einleuchtend ist. Ich würde aber gerne mal an ein paar Pins eine 
Anzeige/einen ROM oder I2C oder Sonstwas anhängen "um mal an den Beinen 
zu wackeln".. und ich würde gerne Daten mit anderen CP/M Rechnern 
austauschen wollen, daher die Floppy oder auch die Netzwerkgeschichte.

Ein System ohne Peripherie kann ich auch im Emulator (cpmsim, simh) 
laufen lassen ohne mir Gedanken zu machen woher das bootet oder ob der 
Platz alle wird.

Das ist meine Intention, meinst Du ich liege falsch?

Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Holm T. schrieb:
> Ich hätte gerne eine Spielkiste,

So geht/ging es mir auch. Daher ja "mein" Projekt, da mal eine 
Bus-Anzeige mit 7-Segment dran zu hängen (komme nur zeitlich nicht dazu, 
siehe Schaltung oben).
Meine Frage, ob die BUS-Treiber den hohen Takt können, hängt da auch 
noch in der Luft. Und ich habe auch noch eine ganze Kiste "alter" 
Zilog-Techik hier, die ich eigentlich gerne an den Bus anbinden wollte - 
aber das war ja auch nicht das primäre Ziel der Entwickler - dafür gäbe 
es wahrscheinlich genug andere Kisten (ich habe ja noch den NDR 
Kleincomputer hier :-)).
Trotzdem.... Aber dass die 18MHz ein Problem sind, hätte mir klar sein 
müssen :-)

von Leo C. (rapid)


Lesenswert?

> Bekommen wir den FDC37C665GT gehandelt Leo?

Mein Interesse an Floppies ist auch sehr begrenzt, entsprechend meine 
Motivation für so ein Projekt.

> Das paßt auch bei einer 2 Lagen Platine sicher nicht mehr auf eine
> Stamp.

Das geht wohl schon wegen der vielen Stecker nicht.

> DRQ Signale haben wir 2, wie ist denn das mit den DMA-End Signalen?

Für die DMA-Kanäle des Chips wird man wohl DACK-Signale brauchen. Und 
die haben wir nicht. Bei IDE kann der Z180-DMA den Port im PIO-Mode 
lesen/schreiben und so einen ganzen Sektor auf einmal übertragen. Bei 
Floppy und Parallel-Port geht das aber nicht.

> Brauchen wie noch ne CIO als _Int-Conroller?

Stilecht für den FDC37C665GT wäre ja ein 8259A, und die CPU im IM0 
betreiben.
Man könnte auch alle INT-Ausgänge des Chips verodern und auf INT1 oder 
INT2 des Z180 legen, oder auf beide verteilen...

> Irgendwo gabs eine Zilog
> Applikation zur Nachbildung der ED4D Mimik...

Ich könnte mir vorstellen, daß ein halbierter CLock für Z80-Peripherie 
am ECB einfacher zu realisieren wäre. Für die alten 4-6 MHz PIOs, SIOs 
und CTCs wäre das aber immer noch zu schnell.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> und sogar mit FUZIX :-)

Das steht auch auf meiner TODO-Liste für das Stamp-System. Aber ich bin 
ja mit dem CP/M-Kram schon ausgelastet.

Marcel A. schrieb:
> Trotzdem.... Aber dass die 18MHz ein Problem sind, hätte mir klar sein
> müssen :-)

Du weißt aber schon, daß man die Taktfrequenz beliebig runter setzten 
kann. Und für Deine geplanten Spielereien mit 7-Segment und anderem 
I/O-Kram kommts auf die MHz ja wirklich nicht an. Und für den möglichen 
Lerneffekt auch nicht.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
>> Bekommen wir den FDC37C665GT gehandelt Leo?
>
> Mein Interesse an Floppies ist auch sehr begrenzt, entsprechend meine
> Motivation für so ein Projekt.
>
>> Das paßt auch bei einer 2 Lagen Platine sicher nicht mehr auf eine
>> Stamp.
>
> Das geht wohl schon wegen der vielen Stecker nicht.

Die hätten mit auf die Stamp gemusst.. und dann gänge da nur irgend ein 
HD Kram oder Flexleiter.. nicht das Gelbe vom Ei.

>
>> DRQ Signale haben wir 2, wie ist denn das mit den DMA-End Signalen?
>
> Für die DMA-Kanäle des Chips wird man wohl DACK-Signale brauchen. Und
> die haben wir nicht. Bei IDE kann der Z180-DMA den Port im PIO-Mode
> lesen/schreiben und so einen ganzen Sektor auf einmal übertragen. Bei
> Floppy und Parallel-Port geht das aber nicht.

Ich habe indessen bei der P112 Mimik gelesen das die das wegen der 
Eigenheit des Z182 DMA das TerminalCount im Speicherschreibzyklus 
(multiplex) auszugeben dieses gar nicht verwenden können, weil sie es im 
IO Lesezyklus und nicht im Speicherschreibzyklus brauchen...und desegen 
ohne arbeiten. Der FDC generiert wohl einen Timout Error der abgefangen 
wird, das kann also nicht das Problem sein..aber halt keine DMA. Der 
Z180/Z8S180 scheint sich in dieser Hinsicht identisch zu verhalten nach 
dem was ich gelesen habe.
>
>> Brauchen wie noch ne CIO als _Int-Conroller?
>
> Stilecht für den FDC37C665GT wäre ja ein 8259A, und die CPU im IM0
> betreiben.

Ich lasse über eine PIO oder einen CIO mir mir reden, aber nicht über 
einen 8259, da dieser nur Int Controller kann, die anderen mir aber die 
GPIOs bringen die ich gerne hätte.

> Man könnte auch alle INT-Ausgänge des Chips verodern und auf INT1 oder
> INT2 des Z180 legen, oder auf beide verteilen...

Der "Super-IO-Chip" 37C665 hat wohl 4 Int Ausgänge 
(FINTR,PINTR1,IRQ3,IRQ4) für jeden Kram einzeln. Sehr wahrscheinlich ist 
ein Oder hier ein guter Ansatz, ggf. noch mit einem Latch das eingelesen 
werden kann.. oder halt eine PIO als "Konzentrator". Ich hatte ein Zilog 
PDF in der Hand in de die IM2 Mimik in einem EP610 beschrieben war (die 
Dinger hätte ich sogar und kann sie programmieren) aber ein kleines CPLD 
wäre hier wohl angebrachter..
>
>> Irgendwo gabs eine Zilog
>> Applikation zur Nachbildung der ED4D Mimik...
>
> Ich könnte mir vorstellen, daß ein halbierter CLock für Z80-Peripherie
> am ECB einfacher zu realisieren wäre. Für die alten 4-6 MHz PIOs, SIOs
> und CTCs wäre das aber immer noch zu schnell.

Die Teile gibts aber locker bis 10Mhz darüber wird es eng. PIOs habe ich 
ja bis 16Mhz und mein Kumpel hat wohl genug für uns Alle hier. Timer 
sind IMHO nicht so wichtig (intern vorhanden) und Serielle haben wir 
auch an und für sich genug. (mit dem FDC kämen noch 2 dazu..wenn man sie 
nutzen will).
Ich überschaue aber nicht aus dem Hut wo das bei Interruptbedienung etc 
überall scherbeln kann. Dazu müßte ich mir auch mal rein ziehen was der 
ZS180 maximal an Waitstates einzufügen in der Lage ist und wie das 
konkrete Timing dann aussieht.

Beim FDC könnte man sehr wahrscheinlich große Teile  des Treibers vom 
P112 Projekt übernehmen so das das nicht ganz so stressig werden würde. 
Der Hauptaufwand steckt wohl in der Anpassung der DPH usw., man muß ja 
auch nicht unbedingt von Floppies booten können...

@Marcel:

...eine Busanzeige brauche ich nicht mehr :-)
Sowas habe ich zu tiefsten DDR Zeiten gebaut (Multiplexer, Decoder, 7Seg 
und jede Menge LEDs für die Steuersignale Sowie CUL Draht auf 
Lochraster) und mich soweit satt gesehen :-)
Ich habe auch noch eine K1520 Bedieneiheit K7622 da die ich erst 
kürzlich repariert habe, die macht genau das und auch Refresh 
dynamischer Speicher im WAIT....allerdings nur mit 6(!) Bit..muß ich 
wohl erweitern..

Damit kann man auch einen ROMlosen Computer starten, hat was von 
Kernspeicher und Console Feeling..
(http://www.robotrontechnik.de/index.htm?/html/zubehoer/bde.htm)

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Joe G. schrieb:
>> und sogar mit FUZIX :-)
>
> Das steht auch auf meiner TODO-Liste für das Stamp-System. Aber ich bin
> ja mit dem CP/M-Kram schon ausgelastet.
>
..Du machst Dich zur Feile für uns :-)

Ich habe mal heute nebenbei ein Bisschen mit BDS C rumprobiert und Dabei 
ein paar Zeilen aus der Maus ins Terminalprogramm richtung Wordstar 
fallen lassen. Das ging nicht gut..das ging gar nicht und war IMHO mit 
ASCI0 schon mal besser. Da landet nur abgehakter Kauderwelsch im WS, 
egal ob 19200 oder 115200Bd.

Das ist ein Hinweis, keine Nörgelei. Wenn ich das richtig verstadnen 
habe gibts auf ASCI1 gar keine richtige Flußkontrolle mehr...

Gruß,

Holm

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
>> go 0x000
>
> Das funktioniert nur zufällig richtig. Die Parameter bei diesen Befehlen
> sind grundsätzlich Hex. 0x muß nicht und darf nicht angegeben werden.
> Die Inputroutine ist allerdings schlampig programmiert und liest nur bis
> zum ersten ungültigen Zeichen, hier 'x'. Alles davor wird als Zahl
> gnommen, hier 0.

Schon 'ne Weile her. Daran war leider! nur der Satz mit der schlampigen 
Programmierung richtig. Der Prefix '0x' wird nämlich von strtoul() 
einfach überlesen (ignoriert), wenn man Zahlen zur Basis 16 einlesen 
will.

Jedenfalls werden jetzt alle Zahleineingaben überprüft, und die Eingabe 
von z.B "0y123" generiert einen Fehler, statt stillschweigend "0" zu 
übernehmen. Als Bonus können statt einfacher Zahlen jetzt auch überall 
einfache arithmetische Ausdrücke eingegeben werden. Bisher nur die 4 
Grundrechenarten (+,-,*,/,%) und Klammern. Erweiterungen sind bei Bedarf 
leicht möglich. Ausdrücke dürfen keine Leerzeichen enthälten oder müssen 
in einfache oder doppelte Anführungszeichen gesetzt werden.

Als Konsequenz der neuen Eingaberoutine ergibt sich, daß wirklich alle 
numerischen Befehls-Argumente grundsätzlich als Hex-Zahlen interpretiert 
werden. Vorher war das bei einigen wenigen Befehlen anders (z.B. sleep). 
Dezimalzahlen kann man eingeben, indem man ein '$' voranstellt. Ich 
hätte lieber '#' genommen, aber das müßte jedesmal "gequoted" werden, da 
es bereits als Kommentarzeichen verwendet wird.

Außerdem neu: History-search für die Kommandozeile.

Unten nochmal die aktuelle und hoffentlich vollständige Liste. Sollten 
Tasten nicht so funktionieren, bitte melden. Insbesondere HOME und END 
scheinen Kandidaten zu sein, die in jeder Terminalemulation andere Codes 
schicken.
1
Taste(n)                Funktion
2
-------------------------------------------------
3
Pos1, HOME, CTL-a       beginning-of-line
4
Ende, END, CTL-e        end-of-line
5
RIGHT, CTL-f            forward-char
6
LEFT, CTL-b             backward-char
7
Entf, DC, CTL-d         delete-char
8
BS, DEL, CTL-h          backward-delete-char
9
CTL-k                   kill-line (cursor to end)
10
CTL-x, CTL-u            kill-whole-line
11
CTL-c                   discard input
12
Einfg, IC, CTL-o        toggle insert/overwrite
13
UP, CTL-p               previous-history
14
DOWN, CTL-n             next-history
15
Bild-Auf, PAGEUP        history-search-backward
16
Bild-Ab, PAGEDOWN       history-search-forward

von Holm T. (Gast)


Lesenswert?

...Streß..keine Zeit zum ausprobieren.. wollte wenigstens mal ein Ping 
von mir geben..

Gruß,
Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich habe gerade die letzte Monitorversion 
(stamp-monitor_hexrel-6.8.1.hex) sowie das BIOS (cpm3_0.6.7.1.sys) 
installiert. Nun komme ich jedoch mit der Syntax des "attach" Kommandos 
nicht klar.

setenv attach_drives 'at dsk0 ${1:/cpm3_a.dsk};at dsk1 
${1:/cpm3_b.dsk};at dsk2 ${0:/cpm3_c.dsk}'

CP/M starte zwar, findet jedoch dann kein Laufwerk. Wie muss ich die 
Laufwerke korrekt angeben?

CP/M Version 3.0, Z180-Stamp BIOS v0.6.7.1
Estimated CPU clock [Hz]: 18432000
sdio: SD Card driver
cfio: CompactFlash Memory Card driver: No Card

CP/M Error On A: Invalid Drive
BDOS Function = 15  File = CCP     .COM
A>

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Die Frage hat sich erledigt. Das System läuft :-)
Danke Leo!


setenv attach_drives 'at dsk0 1:/cpm3_a.dsk;at dsk1 1:/cpm3_b.dsk;at 
dsk2 0:/cpm3_c.dsk'

von Holm T. (Gast)


Lesenswert?

Bei mir noch die Vorgängerversion, aber drhet sich schon ein paar 
Wochen:
1
=> printenv
2
attach_drives=at dsk0 ${dsk0};at dsk1 ${dsk1};at dsk2 ${dsk2};at dsk3 ${dsk3};at dsk4 ${dsk4};at dsk5 ${dsk5};at dsk6 ${dsk6};at dsk7 ${dsk7}
3
baudrate=115200
4
bootcmd=pin 8 low 3 9MHz; run attach_drives;loadcpm ${cpm3_file}; go ${startaddress}
5
bootdelay=3
6
cpm3_commonbase=f000
7
cpm3_file=0:cpm3_0.6.8.sys
8
cpm3_scb=1e900
9
dsk0=0:/cpm3test.dsk
10
dsk1=0:/diskb.dsk
11
dsk2=0:/diskc.dsk
12
dsk3=0:/diskd.dsk
13
dsk4=0:/diske.dsk
14
dsk5=0:/diskf.dsk
15
dsk6=1:/diskg.dsk
16
dsk7=1:/diskh.dsk
17
esc_char=0x40
18
pin_alias=0:PG5,1:PG4,2:PB4,3:PB5,4:PB6,5:PB7,6:PG3,7:PG2,8:PG1,9:PG0,10:PE7
19
startaddress=b300
20
21
Environment size: 574/1597 bytes
22
=>

..nur für den Fall das Jemand mal was nachsehen möchte..

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich hatte geträumt :-( Das Geheimnis hieß „run attach_drives“.

Leo C. schrieb:
> Unten nochmal die aktuelle und hoffentlich vollständige Liste.
Bei mir gehen alle Funktionen.

> Natürlich kann man das System auch auf einem CP/M-Rechner generieren.
Erzeugt problemlos ein BIOS. Anwelcher Stelle im Quelltext finde ich 
eigentlich die Baudrate für ASCI1? Sie läuft ja noch auf 19200. Im 
Binärfile patchen ist ja nur eine Hilfslösung ;-)

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> Anwelcher Stelle im Quelltext finde ich
> eigentlich die Baudrate für ASCI1? Sie läuft ja noch auf 19200. Im

In der Datei chario.180:
1
@ctbl:
2
  db  'USB0  '    ; device 0
3
  db  mb$in$out
4
  db  baud$none
5
6
  db  'ASCI0 '    ; device 1
7
  db  mb$in$out+mb$serial+mb$soft$baud
8
  db  baud$19200
9
10
  db  'ASCI1 '    ; device 2
11
  db  mb$in$out+mb$serial+mb$soft$baud
12
  db  baud$19200
13
14
  db  0        ; table terminator

> Binärfile patchen ist ja nur eine Hilfslösung ;-)

Der neueste Monitor könnte das vielleicht zwischen Laden von cpm3.sys 
und Starten automatisiert erledigen. U.a. für so was hat er kürzlich das 
Rechnen gelernt. Mit der Zuweisung von logischen I/Os zu Geräten gehts 
im Prinzip:
1
mw -w ${cpm3_scb}+${@civec} 8000 2
Mit @civec = 0BE aus dieser [1] Tabelle.
Leider wirds anschließend aber wieder von der Kaltstartinitialisierung 
im BIOS (boot.180) überschrieben. Vielleicht ändere ich das mal bei 
Gelegenheit.

Joe G. schrieb:
> setenv attach_drives 'at dsk0 1:/cpm3_a.dsk;at dsk1 1:/cpm3_b.dsk;at
> dsk2 0:/cpm3_c.dsk'

Mein Beispiel mit der Variable "attach_drives" sollte ja eigentlich nur 
zeigen, wie man die ehemaligen Variablen "dsk0" - "dsk8" weiterverwenden 
kann. Aber so gehts natürlich auch.


Zu dem Attach-Mechanismus würden mich doch mal ein paar kritische 
Meinungen interressieren. Inzwischen finde ich die "Ergonomie" doch 
ziemlich bescheiden, und möchte das vielleicht noch mal ändern. Z.B. 
einen extra Befehl "set" um die Optionen einzustellen.

[1] http://www.seasip.info/Cpm/scb.html

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> In der Datei chario.180:

Danke, aber dann gibt es einen Compilerfehler. In der Datei 
MODEBAUD.INC, welche ja auch eingebunden wird, steht auch nur 19200 als 
größte Baudrate drin.

von Leo C. (rapid)


Lesenswert?

Dann mußt Du halt 134.5 oder so nehmen.

von Leo C. (rapid)


Lesenswert?

Übrigens ist da 
Beitrag "Re: Z180-Stamp Modul" ein 
BIOS mit 115200 für ASCI1 drin.
Ja, die nächste Monitorversion hatte ich wieder ohne BIOS 
veröffentlicht. :-(

115200 als Default ist aber auch noch nicht der Weisheit letzter Schluß. 
Bei 9,2MHz CPU-Clock gehen die nämlich nicht...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Dann mußt Du halt 134.5 oder so nehmen.

Ja sicher, es muss ja auch eine 0x04 gepatcht werden, hätte ich auch 
drauf kommen können :-(
Nun läuft auch das geänderte BIOS.

> 115200 als Default ist aber auch noch nicht der Weisheit letzter Schluß.
Dann sollte es vielleicht tatsächlich vom AVR übergeben werden. Du 
hattest es ja gerade skizziert.

von Leo C. (rapid)


Lesenswert?

Vielleicht sollte man modebaud.inc mal "modernisieren".
Aber vielleicht wird die Datei ja auch bald überflüssig, wenn der 
interruptgesteuerte Treiber endlich kommt. Da solls dann eine 
"ioctl.inc" geben.
Auszug:
1
; cflags (2)
2
M_CBAUD         equ     01Fh            ;Baud speed mask
3
 B0             equ     000h            ;hang up
4
 B50            equ     011h
5
 B75            equ     012h
6
 B110           equ     013h
7
 B134           equ     014h
8
 B150           equ     005h
9
 B300           equ     006h
10
 B600           equ     007h
11
 B1200          equ     008h
12
 B1800          equ     009h
13
 B2400          equ     00Ah
14
 B3600          equ     00Bh
15
 B4800          equ     00Ch
16
 B7200          equ     00Dh
17
 B9600          equ     00Eh
18
 B19200         equ     00Fh
19
 B28800         equ     001h
20
 B38400         equ     002h
21
 B57600         equ     003h
22
 B115200        equ     004h
23
 B144000        equ     014h
24
 B192000        equ     016h
25
 B288000        equ     017h
26
M_CSIZE         equ     020h            ;Character size mask.
27
 M_CS7          equ     000h            ;
28
 M_CS8          equ     020h            ;
29
 CS8            equ     5               ;
30
        b2m     CSTOPB, 6               ;Set two stop bits, rather than one.
31
        b2m     PARENB, 7               ;Enable parity generation on output and parity checking for input.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> B288000        equ     017h

Das wird ja richtig schnell :-)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier nun endlich der Entwurf für die USB-Schnittstelle auf dem 
ECB-Board. Die beiden Versorgungsvarianten (5V und 3.3V) machen es 
notwendig einen Spannungsregler zu integrieren. Ansonsten hätte man am 
ECB-Board zu viel umlöten müssen.

Variante 1 (ECB komplett auf 3.3V)
1. Spannungsregler IC1 wird nicht bestückt und JP3 auf 3.3V gelegt.
2. CON1 Pin 7 (5V) muss zusätzlich an Console0/USB angebracht werden.
3. /CTS0 (Pin18, IC2, auf ECB) muss an CON2, Pin1, ECB gelegt werden.

Variante 2 (ECB komplett auf 5V)
1. Spannungsregler IC1 wird bestückt und JP3 auf den Spannungsregler 
gelegt.
2. CON1 Pin 7 (5V) entfällt.
3. /CTS0 (Pin18, IC2, auf ECB) muss an CON2, Pin1, ECB gelegt werden.

CON0 – Programmer wird nicht unbedingt benötigt. Hier kann der VNC2 
programmiert und debuggt werden. Es ist auch ein reines flashen über die 
V24 möglich [1].

Vielleicht hat ja jemand noch eine bessere Idee für dieses Modul. 
Möglich ist auch wieder eine Huckepackvariante auf dem Z180 Stamp. Hier 
könnte man einen Parallelzugriff realisieren, allerdings sind wieder 
Adressdecoder und Bustreiber notwendig.

[1] 
http://www.ftdichip.com/Support/Documents/AppNotes/AN_159%20Vinculum-II%20Firmware%20Flash%20Programming.pdf

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Die LP's für das IDE-Interface sind da :-)
Derzeit stehen bei mir die folgenden Interessenten auf der Liste:

1. Harald   Bausatz
2. Holm    Bausatz
3. Marcel  Bausatz ohne DOM
4. Peter  LP
5. Siggi  Bausatz
6. LeoC         als Dank für die Programmierung :-)

Da ich 10 Platinen (+ 2 Überlieferungen) bestellt habe, können noch 
weitere 5 vergeben werden. Ich würde bis nächste Woche weitere 
Interessenten sammeln und dann Ende der Woche alles versenden. Der 
Platinenpreis beträgt übrigens 2,15 €/Stück.

von Leo C. (rapid)


Lesenswert?

> 6. LeoC         als Dank für die Programmierung :-)

Vielen Dank. Ich melde mich nochmal dazu per EMail, wenn ich wieder zu 
Hause bin.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Das Interface ist einmal aufgebaut. Das Layout scheint korrekt und mit 
18 MHz zu laufen. Jetzt bräuchte ich noch einen Hinweis, wie ich darauf 
zugreife bzw. ein Laufwerk anlegen :-)

CP/M Version 3.0, Z180-Stamp BIOS v0.6.7.1.2-dirty
Estimated CPU clock [Hz]: 18432000
sdio: SD Card driver
cfio: CompactFlash Memory Card driver
    Model: PQI IDE DiskOnModule, S/N: DOM3C00004268, Rev: 060729DA
    Size: 256000 Sectors (128000 KiB)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Sehr schön, Joe.
Jetzt wäre es ja nicht schlecht, wenn man das Partitionierprogramm 
hätte, daß ich hier schon angekündigt hatte...

> Jetzt bräuchte ich noch einen Hinweis, wie ich darauf
> zugreife bzw. ein Laufwerk anlegen :-)

Das Bios unterstützt die bekannte DOS-Partitionierung mit bis zu 4 
primären CP/M-Partitionen. (Typ 52). Da bisher nur das simhd-Format 
unterstützt wird, also maximal 4 x 8 MByte.

Man kann das Modul am PC partitionieren, wenn man eine 
Anschlußmöglichkeit hat, z.B. USB-IDE-Adapter. Ein freier IDE-Port am PC 
geht natürlich auch, ist aber etwas umständlich.

Im Anhang sind 2 Dateien die man für eine schnelle 4x8M Partitionierung 
verwenden kann:
DoM-mbr-4x8M.bin:
    Am PC mit dd auf das DoM kopieren.

DoM-mbr-4x8M.dump:
    Diese Datei kann von sfdisk unter Linux gelesen werden:
    $ sfdisk /dev/sdx < DoM-mbr-4x8M.dump
    Man kann die Datei vorher auch editieren.

Danach sollte man die ersten 112 Sektoren der Partitionen mit 0xE5 
füllen.

Das Ergebnis könnte so aussehen:
1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.8.18-int-handling-dirty
2
Estimated CPU clock [Hz]: 18432000
3
sdio: SD Card driver
4
cfio: CompactFlash Memory Card driver
5
    Model: PQI IDE DiskOnModule, S/N: DOM5D00001323, Rev: 060729DA
6
    Size: 256000 Sectors (128000 KiB)
7
    I: CP/M partition at: 2048, size: 8192KiB
8
    J: CP/M partition at: 18432, size: 8192KiB
9
    K: CP/M partition at: 34816, size: 8192KiB
10
    L: CP/M partition at: 51200, size: 8192KiB
11
12
A>

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Quick&dirty CP/M-Partitionierung:
Die Datei im Anhang im Debugger laden und ab Adresse 300h starten. Z.B:
1
A>ddtz dom-part.bin
2
DDT/Z   [8101]
3
High = 037F  Max = 037F
4
> g 300
5
6
A>

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Im Anhang sind 2 Dateien die man für eine schnelle 4x8M Partitionierung
> verwenden kann:

> Quick&dirty CP/M-Partitionierung:

Besten Dank! Ich werde mal beide Methoden ausprobieren, habe gerade 
einen USB-IDE Adapter rausgekramt.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Na wenn das nichts ist!

CP/M Version 3.0, Z180-Stamp BIOS v0.6.7.1.2-dirty
Estimated CPU clock [Hz]: 18432000
sdio: SD Card driver
cfio: CompactFlash Memory Card driver
    Model: PQI IDE DiskOnModule, S/N: DOM3C00004268, Rev: 060729DA
    Size: 256000 Sectors (128000 KiB)
    I: CP/M partition at: 2048, size: 8192KiB
    J: CP/M partition at: 18432, size: 8192KiB
    K: CP/M partition at: 34816, size: 8192KiB
    L: CP/M partition at: 51200, size: 8192KiB
A>

von Leo C. (rapid)


Lesenswert?

Und noch ein Nachtrag.
Statt die Datei dom-part.bin in ein CP/M-Image zu kopieren, kann man sie 
auch von der SD-Karte in den Debugger laden. Also im CP/M zuerst den 
Debugger starten:
1
A>ddtz
und dann im Monitor die Datei laden:
1
=> fatload 1:/dom-part.bin f100
Rest wie oben.


Edit: zu spät :-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Edit: zu spät :-)

Nicht ganz, allein der Hinweis ist es schon wert :-)
Aber es scheint noch nicht ganz korrekt formatiert zu sein. Die anderen 
Laufwerke haben das gleiche Verhalten.

J>dir
J:   :   :   :   :
J:   :   :   :   :
J:   :   :   :   :
J:   :   :   :   :
...
J:   :   :   :   :
J:   :   :   :   :
J:   :   :   :   :

Press RETURN to Continue

von Leo C. (rapid)


Lesenswert?

Wahrscheinlich wirds auch mit "era *.*" nicht besser?

Leo C. schrieb:
> Danach sollte man die ersten 112 Sektoren der Partitionen mit 0xE5
> füllen.

Oder (am PC) gleich die ganze Partition.
Z.B. so: # tr '\000' '\345' </dev/zero |dd of=/dev/sdf3 bs=1K count=8K

Irgendwo haben wir aber auch noch das makeimage Programm.

Für die RAM-Disk vom AVR-CP/M hatte ich mal ein Programm geschrieben, 
daß das komplette Directory mit E5 überschreibt (wipe.com). Leider 
funktioniert es nicht unter CP/M 3. Vielleicht ändere ich das demnächst 
mal.


Gerade habe ich versucht, eine DoM-Partition mit 0xff zu füllen, was für 
Flash-Spreicher ja naheliegender wäre. Funktioniert leider nicht. Für 
CP/M ist das Directory dann voll.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Oder (am PC) gleich die ganze Partition.
> Z.B. so: # tr '\000' '\345' </dev/zero |dd of=/dev/sdf3 bs=1K count=8K

Das führt zum Erfolg, danke! I,J,K,L lassen sich nun beschreiben und 
auch nutzen.

A>show

A: RW, Space:     7,224k
B: RW, Space:     7,868k
C: RW, Space:     7,816k
D: RW, Space:     7,656k
E: RW, Space:     7,752k
I: RW, Space:     8,124k
J: RW, Space:     8,136k
K: RW, Space:     8,136k
L: RW, Space:     8,136k

A>

Nachtrag 1:
Ich stelle nun die Bausätze zusammen um sie morgen in die Post zu geben, 
Änderungswünsche könnten also heute noch mitgeteilt werden :-)

Nachtrag 2:
Wer einen Bausatz mit DOM geordert hat bekommt das Modul gleich 
formatiert, nicht jeder hat ja einen USB-IDE-Adapter.

: Bearbeitet durch User
von Harald N. (haraldn)


Lesenswert?

Joe G. schrieb:
> Wer einen Bausatz mit DOM geordert hat bekommt das Modul gleich
> formatiert, nicht jeder hat ja einen USB-IDE-Adapter.

Spitze, hab mir schon gedanken gemacht...!

von siggim (Gast)


Lesenswert?

Hallo Joe,

falls verfügbar hätte ich gerne noch einen Satz AVR/Z180-Stamp-Platinen 
und die ECB-Platine.

Gruß  Siggi

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

siggim schrieb:
> falls verfügbar hätte ich gerne noch einen Satz AVR/Z180-Stamp-Platinen
> und die ECB-Platine.

Ja, ist möglich. Das ist der letzte Satz den ich noch habe :-)

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


Angehängte Dateien:

Lesenswert?

Hier die Unterlagen zum IDE-Interface. Der Aufbau sollte absolut 
unkompliziert möglich sein. Getestet habe ich selbst mit 3.3V und 
18.432MHz. Für eine reine 5V Versorgung muss nur der Jumper JP1 
umgesteckt werden. Das DOM-Modul wird selbst über den 40 poligen 
Steckverbinder versorgt, natürlich kann auch das zugehörige 
Stromversorgungskabel verwendet werden. Dummerweise ist der 
Stromversorgungsstecker am DOM-Modul nicht mittig zum Modul. Das ist mir 
erst bei der Probebestückung aufgefallen .-( Bei Verwendung der 
mitgelieferten Steckverbinder (Bausatz) liegt das Modul jedoch so hoch, 
dass die Buchse gerade noch so im Loch verschwindet, passt also. Die zum 
Bausatz gehörigen Module habe ich alle Formatiert. Es müssten also bei 
korrektem Aufbau sofort nach dem Bootvorgang die Laufwerke I: bis L: 
erscheinen.

von Siggi M. (siggim)


Lesenswert?

siggim schrieb:
> falls verfügbar hätte ich gerne noch einen Satz AVR/Z180-Stamp-Platinen
> und die ECB-Platine.

Ja, ist möglich. Das ist der letzte Satz den ich noch habe :-)


Dann schick den doch bitte mit dem SIDE-Bausatz mit. Danke.


Gruß  Siggi

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier der USB-Adapter. Die Größe beträgt 2cm x 5cm und wird direkt auf 
das ECB-Board gesteckt. Wenn es keine weiteren Wünsche gibt, würde ich 
das Board so in die Fertigung geben.

von Holm T. (Gast)


Lesenswert?

...wollte nur anmerken das ich gerade auch mal dazu gekommen bin die 
6.8.1 zu flashen...funzt...


...sagmal Joe, kannst Du nicht auf die kleine USB Platine gleich noch 
ein paar parallele IO-Register als GPIO häkeln? Jeweils 8 Ein- und 
Ausgänge wären schon ne feine Sache (16 besser). Einfach ein paar 
primitive 74HCT... mit IO Decoder... bei den Dingern gibts auch keine 
Probleme mit Verfügbarkeit oder Geschwindigkeit.

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Holm T. schrieb:
> ...sagmal Joe, kannst Du nicht auf die kleine USB Platine gleich noch
> ein paar parallele IO-Register als GPIO häkeln?

Die USB-Platine sitzt auf dem V24 Steckverbinder Con2/Con3. Da gibt es 
keine Bussignale.

von Holm T. (Gast)


Lesenswert?

...ach Gott, wie langweilig :-|
Dann hätte das wohl auf die CF Karte gemußt.

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Holm T. schrieb:
> ...wollte nur anmerken das ich gerade auch mal dazu gekommen bin die
> 6.8.1 zu flashen...funzt...

Funktionieren die Tasten für Befehlszeileneditierung :) bei Dir richtig? 
Insbesondere Pos1/Ende, bzw. HOME/END?

> ...sagmal Joe, kannst Du nicht auf die kleine USB Platine gleich noch
> ein paar parallele IO-Register als GPIO häkeln? Jeweils 8 Ein- und
> Ausgänge wären schon ne feine Sache (16 besser). Einfach ein paar
> primitive 74HCT... mit IO Decoder... bei den Dingern gibts auch keine
> Probleme mit Verfügbarkeit oder Geschwindigkeit.

Vielleicht wären ein paar Schieberigister an der Clocked-Serial-I/O 
(CSIO) etwas für Dich. Wenn Du auf CTS1 nicht verzichten kannst, geht 
nur Output.
Leider hat die Schnittstelle kein CS-Signal. Man könnte RTS0 
zweckentfremden, ein Monoflop nehmen, oder statt Schieberegister einen 
ATTINY oder stm8.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Holm T. schrieb:
>> ...wollte nur anmerken das ich gerade auch mal dazu gekommen bin die
>> 6.8.1 zu flashen...funzt...
>
> Funktionieren die Tasten für Befehlszeileneditierung :) bei Dir richtig?
> Insbesondere Pos1/Ende, bzw. HOME/END?


...nein, hätte ich aber auch nicht erwartet bei meinem "obskuren OS".
Zwischen PgUp und Cursor Up bzw. PgDown und Cursor Down kann ich erst 
mal keinen -Unterschied feststellen. Bei HOME oder End tauchen nur '$' 
auf.


Insert: ^[[2~
Delete: 0x7f
Home: ^[[H
End: ^[[F
PgUp: ^[[5~
PgDown: ^[[6~

>
>> ...sagmal Joe, kannst Du nicht auf die kleine USB Platine gleich noch
>> ein paar parallele IO-Register als GPIO häkeln? Jeweils 8 Ein- und
>> Ausgänge wären schon ne feine Sache (16 besser). Einfach ein paar
>> primitive 74HCT... mit IO Decoder... bei den Dingern gibts auch keine
>> Probleme mit Verfügbarkeit oder Geschwindigkeit.
>
> Vielleicht wären ein paar Schieberigister an der Clocked-Serial-I/O
> (CSIO) etwas für Dich. Wenn Du auf CTS1 nicht verzichten kannst, geht
> nur Output.
> Leider hat die Schnittstelle kein CS-Signal. Man könnte RTS0
> zweckentfremden, ein Monoflop nehmen, oder statt Schieberegister einen
> ATTINY oder stm8.

Laß nur, ich hätte es gerne gehabt, kann aber Sowas auch selber, 
notfalls auf einer Lochrasterplatte zusammen spaxen. -Ich hatte nicht 
viel Zeit und die Backplane ist immer noch leer weil bei TME indessen 
noch keine 3-reihigen DIN41612 Muttis (96p) nachgewachsen sind. Ich 
mache da noch weiter, wundere mich nur das das sonst Keinen zu 
interessieren scheint mal was an den CP/M Rechner anschließen zu können 
was nicht Tastatur oder Bildschirm oder Speicher ist.

Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Holm T. schrieb:
> mache da noch weiter, wundere mich nur das das sonst Keinen zu
> interessieren scheint mal was an den CP/M Rechner anschließen zu können
> was nicht Tastatur oder Bildschirm oder Speicher ist.

Doch - mich. Aber ich kämpfe mit Zeit :-)

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
> Für die RAM-Disk vom AVR-CP/M hatte ich mal ein Programm geschrieben,
> daß das komplette Directory mit E5 überschreibt (wipe.com). Leider
> funktioniert es nicht unter CP/M 3. Vielleicht ändere ich das demnächst
> mal.

So, das Programm geht jetzt auch unter CP/M 3, und man kann damit z.B. 
neue Partitionen auf CF-Karten oder den DoMs "formatieren".
Es sollte auf jedem beliebigen CP/M-(artigen) System ein vermurkstes 
Directory initialisieren können. Allerdings geht danach kein "Unerase" 
mehr. Vielleicht sollte man nur das 1. Byte jedes Directory-Eintrags mit 
E5 überschreiben...

von Leo C. (rapid)


Lesenswert?

Holm T. schrieb:
> ...nein, hätte ich aber auch nicht erwartet bei meinem "obskuren OS".

Mir scheint, unter Linux ist der Wildwuchs noch viel schlimmer. Je nach 
Terminalprogramm bekomme ich für HOME/END ganz unterschiedliche Codes, 
und mit tio jetzt auch die gleichen wie Du.

> Zwischen PgUp und Cursor Up bzw. PgDown und Cursor Down kann ich erst
> mal keinen -Unterschied feststellen.

Tipp mal die ersten ein oder zwei Zeichen eines weiter zurück liegenden 
Befehls ein, und probier dann noch mal PgUp.

> Bei HOME oder End tauchen nur '$' auf.

Dann senden die Tasten Sequenzen, die das Programm nicht kennt. Der '$' 
war nur als Debug-Hilfe gedacht.

> Delete: 0x7f

Wie bitte, keine ESC-Sequenz? D.h., die Taste müßte bei Dir das Zeichen 
links vom Cursor löschen?
Und was sendet dann die Backspace-Taste?

> Home: ^[[H
> End: ^[[F

Die habe ich jetzt eingebaut. Kommt dann in die nächste Version. Bis 
dahin kannst Du Ctrl-A und Ctrl-E verwenden.

> Insert: ^[[2~
> PgUp: ^[[5~
> PgDown: ^[[6~

Die sollten funktionieren wie erwartet.
Insert schaltet allerdings den Curser nicht um. Man sieht also nicht, ob 
man im Insert- oder Overwrite-Mode ist.

von Holm T. (Gast)


Lesenswert?

...das ist nicht unbedingt ein Wildwuchs sondern normal :-)

Im Endeffekt kommt  das was im X-Server als mapping definiert ist.
Du bekommst also immer Ergebnisse je nach dem welches Mapping vom 
Terminalprogramm installiert ist, oder eben das Defaultmapping vom Xterm 
durchgereicht.

Was wirklich stattfindet bekommt man mit xev (dem X Event Tester) 
heraus:

der Reihenfolge nach Insert, Delete, Home, End, PgUp, PgDown:
1
KeyPress event, serial 38, synthetic NO, window 0x7200001,
2
    root 0x256, subw 0x0, time 2526825146, (51,69), root:(59,112),
3
    state 0x10, keycode 106 (keysym 0xff63, Insert), same_screen YES,
4
    XLookupString gives 0 bytes: 
5
    XmbLookupString gives 0 bytes: 
6
    XFilterEvent returns: False
7
8
KeyRelease event, serial 38, synthetic NO, window 0x7200001,
9
    root 0x256, subw 0x0, time 2526825230, (51,69), root:(59,112),
10
    state 0x10, keycode 106 (keysym 0xff63, Insert), same_screen YES,
11
    XLookupString gives 0 bytes: 
12
    XFilterEvent returns: False
13
14
KeyPress event, serial 38, synthetic NO, window 0x7200001,
15
    root 0x256, subw 0x0, time 2526825655, (51,69), root:(59,112),
16
    state 0x10, keycode 107 (keysym 0xffff, Delete), same_screen YES,
17
    XLookupString gives 1 bytes: (7f) ""
18
    XmbLookupString gives 1 bytes: (7f) ""
19
    XFilterEvent returns: False
20
21
KeyRelease event, serial 38, synthetic NO, window 0x7200001,
22
    root 0x256, subw 0x0, time 2526825725, (51,69), root:(59,112),
23
    state 0x10, keycode 107 (keysym 0xffff, Delete), same_screen YES,
24
    XLookupString gives 1 bytes: (7f) ""
25
    XFilterEvent returns: False
26
27
KeyPress event, serial 38, synthetic NO, window 0x7200001,
28
    root 0x256, subw 0x0, time 2526826150, (51,69), root:(59,112),
29
    state 0x10, keycode 97 (keysym 0xff50, Home), same_screen YES,
30
    XLookupString gives 0 bytes: 
31
    XmbLookupString gives 0 bytes: 
32
    XFilterEvent returns: False
33
34
KeyRelease event, serial 38, synthetic NO, window 0x7200001,
35
    root 0x256, subw 0x0, time 2526826224, (51,69), root:(59,112),
36
    state 0x10, keycode 97 (keysym 0xff50, Home), same_screen YES,
37
    XLookupString gives 0 bytes: 
38
    XFilterEvent returns: False
39
40
KeyPress event, serial 38, synthetic NO, window 0x7200001,
41
    root 0x256, subw 0x0, time 2526826644, (51,69), root:(59,112),
42
    state 0x10, keycode 103 (keysym 0xff57, End), same_screen YES,
43
    XLookupString gives 0 bytes: 
44
    XmbLookupString gives 0 bytes: 
45
    XFilterEvent returns: False
46
47
KeyRelease event, serial 38, synthetic NO, window 0x7200001,
48
    root 0x256, subw 0x0, time 2526826713, (51,69), root:(59,112),
49
    state 0x10, keycode 103 (keysym 0xff57, End), same_screen YES,
50
    XLookupString gives 0 bytes: 
51
    XFilterEvent returns: False
52
53
KeyPress event, serial 38, synthetic NO, window 0x7200001,
54
    root 0x256, subw 0x0, time 2526827154, (51,69), root:(59,112),
55
    state 0x10, keycode 99 (keysym 0xff55, Prior), same_screen YES,
56
    XLookupString gives 0 bytes: 
57
    XmbLookupString gives 0 bytes: 
58
    XFilterEvent returns: False
59
60
KeyRelease event, serial 38, synthetic NO, window 0x7200001,
61
    root 0x256, subw 0x0, time 2526827228, (51,69), root:(59,112),
62
    state 0x10, keycode 99 (keysym 0xff55, Prior), same_screen YES,
63
    XLookupString gives 0 bytes: 
64
    XFilterEvent returns: False
65
66
KeyPress event, serial 38, synthetic NO, window 0x7200001,
67
    root 0x256, subw 0x0, time 2526827674, (51,69), root:(59,112),
68
    state 0x10, keycode 105 (keysym 0xff56, Next), same_screen YES,
69
    XLookupString gives 0 bytes: 
70
    XmbLookupString gives 0 bytes: 
71
    XFilterEvent returns: False
72
73
KeyRelease event, serial 38, synthetic NO, window 0x7200001,
74
    root 0x256, subw 0x0, time 2526827748, (51,69), root:(59,112),
75
    state 0x10, keycode 105 (keysym 0xff56, Next), same_screen YES,
76
    XLookupString gives 0 bytes: 
77
    XFilterEvent returns: False

Xmodmap -pke erzählt die aktuelle Belegung au der Standardausgabe:

[code]$
xmodmap -pke
keycode   8 = Mode_switch NoSymbol Mode_switch
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam onesuperior exclamdown onesuperior
keycode  11 = 2 quotedbl 2 quotedbl twosuperior oneeighth twosuperior
keycode  12 = 3 section 3 section threesuperior sterling threesuperior
keycode  13 = 4 dollar 4 dollar onequarter currency onequarter
keycode  14 = 5 percent 5 percent onehalf threeeighths onehalf
keycode  15 = 6 ampersand 6 ampersand notsign fiveeighths notsign
keycode  16 = 7 slash 7 slash braceleft seveneighths braceleft
keycode  17 = 8 parenleft 8 parenleft bracketleft trademark bracketleft
keycode  18 = 9 parenright 9 parenright bracketright plusminus 
bracketright
keycode  19 = 0 equal 0 equal braceright degree braceright
keycode  20 = ssharp question ssharp question backslash questiondown 
U1E9E
keycode  21 = acute grave acute grave cedilla cedilla cedilla
keycode  22 = BackSpace BackSpace BackSpace BackSpace NoSymbol NoSymbol 
Terminate_Server
keycode  23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
keycode  24 = q Q q Q at Greek_OMEGA at
keycode  25 = w W w W lstroke Lstroke lstroke
keycode  26 = e E e E EuroSign EuroSign EuroSign
keycode  27 = r R r R paragraph registered paragraph
keycode  28 = t T t T tslash Tslash tslash
keycode  29 = z Z z Z leftarrow yen leftarrow
keycode  30 = u U u U downarrow uparrow downarrow
keycode  31 = i I i I rightarrow idotless rightarrow
keycode  32 = o O o O oslash Oslash oslash
keycode  33 = p P p P thorn THORN thorn
keycode  34 = udiaeresis Udiaeresis udiaeresis Udiaeresis diaeresis 
diaeresis diaeresis
keycode  35 = plus asterisk plus asterisk asciitilde macron asciitilde
keycode  36 = Return NoSymbol Return
keycode  37 = Control_L NoSymbol Control_L
keycode  38 = a A a A ae AE ae
keycode  39 = s S s S U017F U1E9E U017F
keycode  40 = d D d D eth ETH eth
keycode  41 = f F f F dstroke ordfeminine dstroke
keycode  42 = g G g G eng ENG eng
keycode  43 = h H h H hstroke Hstroke hstroke
keycode  44 = j J j J dead_belowdot dead_abovedot dead_belowdot
keycode  45 = k K k K kra ampersand kra
keycode  46 = l L l L lstroke Lstroke lstroke
keycode  47 = odiaeresis Odiaeresis odiaeresis Odiaeresis doubleacute 
doubleacute doubleacute
keycode  48 = adiaeresis Adiaeresis adiaeresis Adiaeresis asciicircum 
asciicircum asciicircum
keycode  49 = asciicircum degree asciicircum degree notsign notsign 
notsign
keycode  50 = Shift_L NoSymbol Shift_L
keycode  51 = numbersign apostrophe numbersign apostrophe grave grave 
grave
keycode  52 = y Y y Y guillemotright U203A guillemotright
keycode  53 = x X x X guillemotleft U2039 guillemotleft
keycode  54 = c C c C cent copyright cent
keycode  55 = v V v V doublelowquotemark singlelowquotemark 
doublelowquotemark
keycode  56 = b B b B leftdoublequotemark leftsinglequotemark 
leftdoublequotemark
keycode  57 = n N n N rightdoublequotemark rightsinglequotemark 
rightdoublequotemark
keycode  58 = m M m M mu masculine mu
keycode  59 = comma semicolon comma semicolon periodcentered multiply 
periodcentered
keycode  60 = period colon period colon U2026 division U2026
keycode  61 = minus underscore minus underscore endash emdash endash
keycode  62 = Shift_R NoSymbol Shift_R
keycode  63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply 
KP_Multiply KP_Multiply XF86ClearGrab
keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode  65 = space NoSymbol space
keycode  66 = Caps_Lock NoSymbol Caps_Lock
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10
keycode  77 = Num_Lock NoSymbol Num_Lock
keycode  78 = Scroll_Lock NoSymbol Scroll_Lock
keycode  79 = KP_Home KP_7 KP_Home KP_7
keycode  80 = KP_Up KP_8 KP_Up KP_8
keycode  81 = KP_Prior KP_9 KP_Prior KP_9
keycode  82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract 
KP_Subtract KP_Subtract XF86Prev_VMode
keycode  83 = KP_Left KP_4 KP_Left KP_4
keycode  84 = KP_Begin KP_5 KP_Begin KP_5
keycode  85 = KP_Right KP_6 KP_Right KP_6
keycode  86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode
keycode  87 = KP_End KP_1 KP_End KP_1
keycode  88 = KP_Down KP_2 KP_Down KP_2
keycode  89 = KP_Next KP_3 KP_Next KP_3
keycode  90 = KP_Insert KP_0 KP_Insert KP_0
keycode  91 = KP_Delete KP_Separator KP_Delete KP_Separator
keycode  92 =
keycode  93 =
keycode  94 = less greater less greater bar brokenbar bar
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12
keycode  97 = Home NoSymbol Home
keycode  98 = Up NoSymbol Up
keycode  99 = Prior NoSymbol Prior
keycode 100 = Left NoSymbol Left
keycode 101 =
keycode 102 = Right NoSymbol Right
keycode 103 = End NoSymbol End
keycode 104 = Down NoSymbol Down
keycode 105 = Next NoSymbol Next
keycode 106 = Insert NoSymbol Insert
keycode 107 = Delete NoSymbol Delete
keycode 108 = KP_Enter NoSymbol KP_Enter
keycode 109 = Control_R NoSymbol Control_R
keycode 110 = Pause Break Pause Break
keycode 111 = Print Sys_Req Print Sys_Req
keycode 112 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide 
KP_Divide XF86Ungrab
keycode 113 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
keycode 114 =
keycode 115 = Super_L NoSymbol Super_L
keycode 116 = Super_R NoSymbol Super_R
keycode 117 = Menu NoSymbol Menu
keycode 118 =
keycode 119 =keycode 120 =
keycode 121 =
keycode 122 =
keycode 123 =
keycode 124 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
keycode 125 = NoSymbol Alt_L NoSymbol Alt_L
keycode 126 = KP_Equal NoSymbol KP_Equal
keycode 127 = NoSymbol Super_L NoSymbol Super_L
keycode 128 = NoSymbol Hyper_L NoSymbol Hyper_L
keycode 129 =
keycode 130 =
keycode 131 =
keycode 132 =
keycode 133 =
keycode 134 = KP_Decimal KP_Decimal KP_Decimal KP_Decimal
keycode 135 =
keycode 136 =
keycode 137 =
keycode 138 =
keycode 139 =
keycode 140 =
keycode 141 =
keycode 142 =
keycode 143 =
keycode 144 = XF86AudioPrev NoSymbol XF86AudioPrev
keycode 145 =
keycode 146 =
keycode 147 =
keycode 148 =
keycode 149 =
keycode 150 = XF86Sleep NoSymbol XF86Sleep
keycode 151 =
keycode 152 =
keycode 153 = XF86AudioNext NoSymbol XF86AudioNext
keycode 154 =
keycode 155 =
keycode 156 = NoSymbol Meta_L NoSymbol Meta_L
keycode 157 =
keycode 158 =
keycode 159 =
keycode 160 = XF86AudioMute NoSymbol XF86AudioMute
keycode 161 = XF86Calculator NoSymbol XF86Calculator
keycode 162 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
keycode 163 =
keycode 164 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject
keycode 165 =
keycode 166 =
keycode 167 =
keycode 168 =
keycode 169 =
keycode 170 = XF86Eject NoSymbol XF86Eject
keycode 171 =
keycode 172 =
keycode 173 =
keycode 174 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 175 =
keycode 176 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 177 =
keycode 178 = XF86WWW NoSymbol XF86WWW
keycode 179 =
keycode 180 =keycode 181 =
keycode 182 =
keycode 183 =
keycode 184 =
keycode 185 =
keycode 186 =
keycode 187 =
keycode 188 =
keycode 189 =
keycode 190 =
keycode 191 =
keycode 192 =
keycode 193 =
keycode 194 =
keycode 195 =
keycode 196 =
keycode 197 =
keycode 198 =
keycode 199 =
keycode 200 =
keycode 201 =
keycode 202 =
keycode 203 =
keycode 204 = XF86Eject NoSymbol XF86Eject
keycode 205 =
keycode 206 =
keycode 207 =
keycode 208 =
keycode 209 =
keycode 210 =
keycode 211 =
keycode 212 =
keycode 213 =
keycode 214 = XF86Display NoSymbol XF86Display
keycode 215 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 216 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 217 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
keycode 218 =
keycode 219 =
keycode 220 =
keycode 221 =
keycode 222 = XF86PowerOff NoSymbol XF86PowerOff
keycode 223 = XF86Standby NoSymbol XF86Standby
keycode 224 =
keycode 225 =
keycode 226 =
keycode 227 = XF86WakeUp NoSymbol XF86WakeUp
keycode 228 =
keycode 229 = XF86Search NoSymbol XF86Search
keycode 230 = XF86Favorites NoSymbol XF86Favorites
keycode 231 = XF86Reload NoSymbol XF86Reload
keycode 232 = XF86Stop NoSymbol XF86Stop
keycode 233 = XF86Forward NoSymbol XF86Forward
keycode 234 = XF86Back NoSymbol XF86Back
keycode 235 = XF86MyComputer NoSymbol XF86MyComputer
keycode 236 = XF86Mail NoSymbol XF86Mail
keycode 237 = XF86AudioMedia NoSymbol XF86AudioMedia
keycode 238 =
keycode 239 =
keycode 240 =
keycode 241 =keycode 242 =
keycode 243 =
keycode 244 = XF86Battery NoSymbol XF86Battery
keycode 245 =
keycode 246 = XF86WLAN NoSymbol XF86WLAN
keycode 247 =
keycode 248 =
keycode 249 =
keycode 250 =
keycode 251 =
keycode 252 =
keycode 253 =
keycode 254 =
keycode 255 =
[code]

..ich bin mir recht sicher das Du das Alles gar nicht wissen wolltest, 
aber ich hätte da noch eine längliche Tabelle mit den für "german" 
gültigen Modifikationen....
Du kannst Dich also nicht darauf verlassen das die Codes immer die 
selben sind, weil jedes Programm oder der User das Mapping nach seinem 
Gusto ändern kann. Mach einfach irgend ein Standard Ansi Ding, wenn ich 
das will kann ich das Mapping meines System daraufhin anpassen.

Ich habe übrigens kein Linux sondern FreeBSD 10 auf meinem Rechner, aber 
der Unterschied zu Linux sollte sehr gering sein da bei Xorg Xserver 
(xfree86) benutzen.

Backspace liefert standardmäßig ^H, Delete halt DEL (0x7f) das ist also 
bereits gemappt aud eine im Xterminal sinnvolle Funktion.
Das Andere sind VT100-ähnliche Steuersequenzen.
Wordstar und Turbo bediene ich auch mit den Control und E,S,D,X Tasten..
Der von mir meist benutze Terminalemulator ist Seyon... hornalt. Ich 
habe keine Ahnung wie der bei den Linux Distries verfügbar ist. Der 
reicht im Wesentlichen das X-Terminal durch, hat aber die Möglichkeit 
andere Emulatoren ein zu klinken (Auch Xterm mit VGA statt ISO Font 
etc..)
Ich muß da für die P8000 mit CP/M nochmal was mit ADM3A bauen.

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> So, das Programm geht jetzt auch unter CP/M 3, und man kann damit z.B.
> neue Partitionen auf CF-Karten oder den DoMs "formatieren".

Bei mir geht es :-)

Die Platinen und Bausätze sind alle in der Post, viel Spaß beim Aufbau.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Joe G. schrieb:
> Die Platinen und Bausätze sind alle in der Post, viel Spaß beim Aufbau.

Danke, schon passiert. Läuft.

Joe G. schrieb:
> Leo C. schrieb:
>> Falls es keine Mühe macht, könnte man für die LED vielleicht zusätzlich
>> 2 Bohrungen vorsehen?
>
> Kein Problem, sehe ich noch vor.

Die Bohrungen habe ich noch nicht gefunden.

von Holm T. (Gast)


Lesenswert?

Bei mir ist die Tüte heute angekommen, allerdings bin ich gerade mal zum 
reingucken gekommen...

Danke einstweilen!

Gruß,

Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Die Bohrungen habe ich noch nicht gefunden.

vergessen :-(

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Im Anhang ist "mein" aktueller DDT180.COM. Das ist ein um die 
HD64180/Z180 spezifischen Opcodes erweiterter DDT/Z. Die Erweiterung 
betrifft nur den Assembler- und Disassembler-Teil. Er läuft also 
weiterhin auch auf einem Z80 und neue Features gibt es sonst (noch) 
keine.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Leo C. schrieb:
> Im Anhang ist "mein" aktueller DDT180.COM
Sehr schön!

In meinem Anhang (Bild), die Platine für den USB-Stick an der 
RS232-Schnittstelle. Es gibt erst mal 5 Platinen incl. einem VNC2. Die 
VNC2 Firmware kann über die RS232 programmiert werden [1], allerdings 
ist das Reset-Timing dabei etwas "hakelig". Besser geht es mit dem 
zugehörigen Adapter [2] über die Debugschnittstelle. Ordentliche 
Software unter CP/M existiert noch nicht, hier ist also Mitarbeit 
gefragt.

[1] http://www.ftdichip.com/Support/Documents/AppNotes...
[2] 
http://shop.clickandbuild.com/cnb/shop/ftdichip?productID=141&op=catalogue-product_info-null&prodCategoryID=355

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anbei die der aktuelle Firmwarestand zum USB-Stamp. Die Platine 
kommuniziert über die V24. Dazu müssen die folgenden Parameter 
eingestellt sein.
Baud: 115200
Data: 8
Stop: 1
Parity: none
RTS/CTS Flowcontrol ist nicht unbedingt notwendig, jedoch sollte CTS auf 
Low liegen.

Der USB-Stamp kann zunächst mit einem üblichen Terminal Programm 
getestet werden. Nach einem Reset sollte die folgende Einschaltmeldung 
(ohne angestecktem USB-Stick) erscheinen.

Ver V2DAP CP/M:

Mit USB-Stick erscheint sofort das Laufwerk U:

Ver V2DAP CP/M:
Device Detected Port2
U:\>

Nun können per Terminal alle Monitorkommandos [1] ausgeführt werden. So 
z.B. „IDD“

USB VID = $0930
USB PID = $6532
Vendor Id =
Product Id = USB Flash Memory
Revision Level = 1.04
I/F = SCSI
FAT16
Bytes/Sector = $0200
Bytes/Cluster = $002000
Capacity = $0F4D8000 Bytes
Free Space = $ Bytes

U:\>

!Anmerkung!
Der Monitor befindet sich nach dem Reset sofort im IPA-Mode mit ECS 
(extendet command set) Die Befehle aus [1] um den Monitor in diesen Mode 
zu setzen sind also nicht mehr notwendig.

[1] 
http://www.ftdichip.com/Firmware/Precompiled/UM_VinculumFirmware_V205.pdf

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


Angehängte Dateien:

Lesenswert?

Ich bin gerade dabei USB Tools für CP/M zu schreiben. Dabei verwende ich 
exakt die gleiche Syntax der "USB Tools 1.5" vom KC85 Team [1]. Nun 
fällt mir auf, dass bei einer Baudrate von 115200 auf AUX ab dem 5. 
Zeichen der Rest verschluckt wird. Bei der halben Baudrate treten 
weniger Fehler auf.

@ Leo C. Es gab ja eine "dirty" BIOS Version mit Handshake. Könnte das 
zuküftig wieder mit rein? Für weitere Tests arbeite ich erst mal mit 
einer geringen Baudrate.

[1] 
http://susowa.homeftp.net/index.php/download-topmenu/viewdownload/8-cpm-software/202-usb-tools-15.html

von Holm T. (Gast)


Lesenswert?

@Leo: Guck mal hier gibts Power V3.08:

http://www.z80.eu/power.html

..und andere Versionen.

Willst Du mal das "test" Kommando ausprobieren?

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> @ Leo C. Es gab ja eine "dirty" BIOS Version mit Handshake. Könnte das
> zuküftig wieder mit rein? Für weitere Tests arbeite ich erst mal mit
> einer geringen Baudrate.

Das war eine Testversion des Interrupt-Treibers mit 
Hardware-Flow-Control. An dem Treiber hat sich inzwischen einiges getan, 
aber er ist leider immer noch nicht fertig. Heute Morgen habe ich das 
Teil wieder hervorgekramt, damit ich Dir einen aktuellen Zwischenstand 
schicken kann. Leider habe ich festgestellt, daß die Flußsteuerung in 
Emfangsrichtung nicht (mehr) funktioniert. Es kann also noch etwas 
dauern...

Holm T. schrieb:
> @Leo: Guck mal hier gibts Power V3.08:

Danke für den Hinweis. Inzwischen habe ich es ausprobiert. Scheint nach 
Version 3.07 deutlich überarbeitet worden zu sein. Der Fehler bei TEST 
ist auch weg.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Heute Morgen habe ich das
> Teil wieder hervorgekramt, damit ich Dir einen aktuellen Zwischenstand
> schicken kann. Leider habe ich festgestellt, daß die Flußsteuerung in
> Emfangsrichtung nicht (mehr) funktioniert. Es kann also noch etwas
> dauern...

Kein Problem. Ich teste derzeit mit geringerer Baudrate. Der VNC2 selbst 
ist auch schnell genug um vom CP/M die Daten zu holen, nur gerade in der 
CP/M Empfangsrichtung hapert es.

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hier ist mal was zum Testen.
ASCI0 und ASCI1 laufen über je 128 Byte große FIFOs für RX und TX. Auf 
ASCIO ist RTS/CTS flow control eingeschaltet. Baudrate kann wie bisher 
mit dem DEVICE-Befehl eingestellt werden. Andere Parameter (7/8 Bit, 
Parity, XON/XOFF ...) sind teilweise realisiert und einstellbar, wenn 
man das Programm dafür hat. ;-) Mehr dazu vielleicht morgen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Super Leo, danke! Ich mache mich gleich an den Test.

von Marcel (Gast)


Lesenswert?

Joe G. schrieb:
> Es gibt erst mal 5 Platinen incl. einem VNC2

Hi, bin wieder aus dem Urlaub zurück - kann ich wieder eine haben?

Gruß
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Hier ist mal was zum Testen.

Das flow control geht prima Leo. Leider ist mein Problem nicht behoben 
damit. Die Ursache liegt im Turbo Pascal Befehl "Read(AUX,Chr)" Der 
Befehl kehrt nur dann zurück wenn er ein Zeichen empfangen hat und 
verpaßt dann nach 5 Zeichen erst mal einige (viele) Zeichen. Mal sehen, 
wie ich das beheben kann.

Marcel schrieb:
> kann ich wieder eine haben?

Ja, gerne.

von Leo C. (rapid)


Lesenswert?

Joe G. schrieb:
> damit. Die Ursache liegt im Turbo Pascal Befehl "Read(AUX,Chr)" Der
> Befehl kehrt nur dann zurück wenn er ein Zeichen empfangen hat und

Die BIOS-Funktion AUXIST ist Dein Freund.
Bei Turbo Pascal auf die Zählung achten (hatten wir ja schon mal).
1
BIOS Function 18: AUXIST
2
3
Return Input Status of Auxiliary Port
4
Entry Parameters: None
5
Returned Values:
6
     A=0FFH if ready
7
     A=00H if not ready
8
9
The AUXIST routine checks the input status of the auxiliary port. 
10
This entry point allows full polled handshaking for communications 
11
support using an auxiliary port.
12
13
BIOS Function 19: AUXOST
14
Return Output Status of Auxiliary Port
15
Entry Parameters: None
16
Returned Values:
17
    A=0FFH if ready
18
    A=00H if not ready
19
20
The AUXOST routine checks the output status of the auxiliary port. 
21
This routine allows full polled handshaking for communications 
22
support using an auxiliary port.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Habe gerade die BDOS Funktionen 3 und 7 genutzt. Hier bekomme ich auch 
nur 5 Zeichen und dann ist Schluss.  Ich versuche es mal mit den BIOS 
Funktionen.

 repeat
  While B <> 255 do B := BDOS(7);
  B := BDOS(3);
  Write(Char(B));
 until  B = 65;

von Leo C. (rapid)


Lesenswert?

An die die BDOS Funktionen hatte ich gar nicht gedacht. Das sollte 
eigentlich auch funktionieren.

> repeat
>   While B <> 255 do B := BDOS(7);
>   B := BDOS(3);
>   Write(Char(B));
>  until  B = 65;

Warum nicht:?
 repeat
   While BDOS(7) <> 255 do;
   ...

oder
  While BDOS(7) =  0 do;
  ...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Warum nicht:?
War ein Stück Code in ein vorhandenes Programm geschrieben ;-)

Ich habe mal beide Versionen durch BIOS und BDOS Funktionen. Sie 
verhalten sie beide gleich.

Zunächst ist der Status $00. Werden Zeichen an AUX gesendet, get der 
Status auf $FF und die Zeichen können abgeholt werden. Das funktioniert 
von 1 bis 5 gesendeten Zeichen. Werden jedoch mehr als 5 Zeichen 
gesendet, dann ist der Status bis zum 5. Zeichen FF und ab dem 6 Zeichen 
wieder $00 und es wird nicht mehr geholt. Ich hoffe ich habe das 
Verhalten verständlich beschrieben.

  Repeat
   Writeln('Status :',Hex(BDOS(7)));
   Writeln(Chr(BDOS(3)));
  until keypressed;

  Repeat
   Writeln('Status :',Hex(BIOS(17)));
   Writeln(Chr(BIOS(6)));
  until keypressed;

von Leo C. (rapid)


Lesenswert?

Bisher habe ich nur mit pip getestet und da schien alles in beide 
Richtungen zu funktionieren. Ich vesuche es jetzt mal mit Turbo.

von Marcel (Gast)


Lesenswert?

Wo finde ist denn ein aktuelles CPM.SYS, das für die DOMs geeignet ist? 
In den Anhängen hier fand ich nur das 0.6.7.1.2-Dirty.

Auch wollte ich mal das CPM selber per "make" aus den Quellen übersetzen 
auf dem Linux-PC. Habe autorevision installiert, aber er bricht ab:

zxcc gencpm -AUTO

CP/M 3.0 System Generation
Copyright (C) 1982, Digital Research


ERROR:  Unable to open:  BNKBDOS3.SPR


Das war oben schon mal ein Problem. Muss ich die Datei noch in das 
Verzeichnis kopieren (von der CPM Diskette)? Ich dachte, im Repo wären 
alles Dateien drin...?

von Leo C. (rapid)


Lesenswert?

Marcel schrieb:
> Wo finde ist denn ein aktuelles CPM.SYS, das für die DOMs geeignet ist?
> In den Anhängen hier fand ich nur das 0.6.7.1.2-Dirty.

Ich meine, mit der Version ging es schon.
Aber in stamp-monitor_hexrel-6.8.zip ist eine aktuellere Version.
Und die aktuellste, mit dem ASCI-Interrupt-Treiber, natürlich auch.

> Auch wollte ich mal das CPM selber per "make" aus den Quellen übersetzen
> auf dem Linux-PC. Habe autorevision installiert, aber er bricht ab:

Mach nochmal einen git pull. Ich habe die fehlenden Dateien jetzt mit 
hochgeladen. Wenn ich die CP/M 3 Sourcen doch mal auf andere Art 
zugänglich mache, kann ich die Dateien ja wieder rauswerfen.

von Marcel (Gast)


Lesenswert?

Alles gut!
Bin dann noch über das neue Attach gestolpert - nun läuft es.

Ich überlege nun, wie ich das DOM mit der Platine in mein 19" Rack 
bekomme. Meine Idee wäre, eine weitere Basis-Platine zu nehmen und das 
auf einen der Sockel zu stecken. Mal überlegen, welcher der richtige 
wäre und ob man nicht ein paar Leiterbahnen entfernen müsste...

von Leo C. (rapid)


Lesenswert?

Marcel schrieb:
> Ich überlege nun, wie ich das DOM mit der Platine in mein 19" Rack
> bekomme. Meine Idee wäre, eine weitere Basis-Platine zu nehmen und das

Und warum nicht auf die Z180-Stamp?
Die Karte umrüsten, mit Stiften oder Buchsen oben drauf, wäre 
wahrscheinlich weniger Aufwand.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Marcel schrieb:
> Ich überlege nun, wie ich das DOM mit der Platine in mein 19" Rack
> bekomme.

Vielleicht so?

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Hier mal ein Update meines erweiterten DDTZ.
Der Debugger kann jetzt auch mit Symbolen umgehen. Bei der 
Implementierung habe ich mich stark an SID/ZSID von DR orientiert, aber 
versucht, deren Bugs und Schwächen zu vermeiden.

Eine zu ladende Symboltabelle wird als 2. Datei beim Starten angegeben:
1
A> DDT180 PROG.COM PROG.SYM
oder
1
A> DDT180 * PROG.SYM
wenn nur die Symboltabelle geladen werden soll.
Läuft der Debugger bereits, können die zu ladenden Dateien mit dem 
F-Befehl angegeben, und anschließend mit R geladen werden.

Beispiel:
1
A>ddt180
2
Symbolic DDTZ/180 - Version 0.4
3
> h
4
High = 0100  Max = 0100  Top = CE06
5
> fcsiorw.com
6
> r
7
High = 01FF  Max = 01FF  Top = CE06
8
> f* csiorw.sym
9
> r
10
SYMBOLS
11
High = 01FF  Max = 01FF  Top = CD5B
12
> hs
13
0005 BDOS             0103 msg_signon       0130 start
14
013C loop             0150 do_csio_16       0153 while_TE_set_1
15
0162 while_TE_set_2   0173 while_TE_set_3   0150 do_csio_16_ndis
16
0183 while_TE_set_11  0193 while_TE_set_12  01A3 while_TE_set_13
17
> l l s3
18
  0100  JP   0130       start
19
>>l.start
20
start:
21
  0130  LD   SP,(0006)  
22
  0134  LD   DE,0103    msg_signon
23
  0137  LD   C,09
24
  0139  CALL 0005       BDOS
25
loop:
26
  013C  CALL 0150       do_csio_16
27
  013F  PUSH HL
28
  0140  LD   C,06
29
  0142  LD   E,FE
30
  0144  CALL 0005       BDOS
31
  0147  POP  DE
32
  0148  OR   A
33
  0149  JR   Z,013C     loop
34
  014B  JP   0000       
35
  014E  NOP  
36
  014F  NOP  
37
do_csio_16:
38
  0150  LD   BC,000A    
39
>>d .msg_signon .start
40
0103   5A 31 38 30  20 43 53 49  2F 4F 20 74  65 73 74 65  Z180 CSI/O teste
41
0113   72 0D 0A 50  72 65 73 73  20 61 6E 79  20 6B 65 79  r..Press any key
42
0123   20 74 6F 20  71 75 69 74  3A 20 24 00  00 ED   to quit: $..m
43
>>

Das Demoprogrämmchen war übrigens der Auslöser für die 
DDTZ-Erweiterungen. Ich habe mit der CSIO-Schnittstelle herumgespielt, 
um zu sehen, ob man damit auf einfache Weise ein paar I/O-Ports bekommen 
kann. Dazu habe ich je 2 Schieberegister für Ein- und Ausgabe 
angeschlossen, und im DDTZ schrittweise einfache Routinen für die 
Ansteuerung geschrieben. Dabei habe ich dann die speziellen Z180 
I/O-Befehle (IN0, OUT0) vermisst...

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Wir haben einen kapitalen Fehler in der Z180 Reset-Schaltung.
Ursprünglich sollte /ZRESET nur vom AVR geschaltet werden. Als dann die 
ECB-Basiskarte kam, hatte ich vorgeschlagen, an diese Leitung einen 
Taster zu hängen, und übersehen, daß man damit den Ausgang des AVR 
kurzschließt. :-(
Der aktuelle Stand ist in dem ersten Bild zu sehen.

Korrekturmöglichkeiten:

1. Auf den Taster verzichten, auslöten und fertig.

Auch wenn man die /ZRESET-Leitung richtig beschaltet (s.u.), ist es 
keine gute Idee, einen Taster gegen Masse direkt daran anzuschließen. 
Der Taster sollte zumindest entprellt, und eigentlich auch mit dem Takt 
synchronisiert sein.
Daß man ohne den Taster leben kann, beweist alleine die Tatsache, daß 
sich bis vor kurzem niemand beschwert hat. ;-) Schließlich gibt ja noch 
den ARESET-Taster, der das gesamte System zurücksetzt, und den 
Monitorbefehl "restart", der die Funktion hat, die der /ZRESET-Taster 
auch haben sollte.

2. ZRESET-Taster durch einen Taster an einem AVR-Port ersetzen.

Der Monitor löst beim Drücken der Taste (nach Entprellung) den 
Z180-Reset aus. Als Port würde sich der auf der ECB-Karte mit "MON" bzw. 
"Monitor" beschriftete Port anbieten, der auf die Stiftleiste JP2 
geführt ist. Die eigentlich für diesen Port vorgesehene Funktion "EEPROM 
löschen" kann problemlos zusätzlich realisiert werden, wenn sie denn mal 
notwendig werden sollte.

3. Z180 Resetbeschaltung berichtigen. (2. Bild)

Dazu kommt an den Z180 Resetpin ein Pullup- statt Pulldown-Widerstand, 
und die AVR-Karte erhält eine Treiberstufe mit Open-Collector oder 
Open-Drain Ausgang. Dieser Treiber muß die ZRESET-Leitung auf Low 
ziehen, wenn der AVR-Port hochohmig ist, z.B. beim Einschalten, oder 
Flashen einer neuen Monitorversion.
Da auf der AVR-Stamp keine Gatter frei sind, wird man als Treiber wohl 
einen NPN-Transistor oder einen N-MOSFET nehmen. Ein MOSFET hätte den 
Vorteil, daß man beim Einschalten des Systems den Zustand des Ports ohne 
Aufwand abfragen kann. So kann man die alte und die korrigierte 
Schaltung mit der gleichen Software betreiben.

Den Umbau kann man natürlich mit 1. oder 2. kombinieren. Außerdem können 
mit Umbau auch andere Karten am ECB-Bus einen Z180-Reset auslösen.

4. Weitere Vorschläge?

Das wars von meiner Seite. Aber vielleicht gibts ja noch Möglichkeiten, 
an die ich noch gar nicht gedacht habe.

von Marcel (Gast)


Lesenswert?

Was sind denn aktuell die Konsequenzen?
- Funktioniert der /ZRESET-Schalter gar nicht? Oder nur nicht 
zuverlässig (Entprellen, Takt)? Das würde zumindest erklären, warum ein 
Druck auf den Taster meistens "nicht viel geholfen" hat und ich wie 
beschrieben meistens über ARESET gegangen bin
- Leidet der AVR darunter? Bisher ist er noch nicht kaputt gegangen :-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Leo C. schrieb:
> Korrekturmöglichkeiten:

Im Sinne einer Kompatibilität würde ich die Variante 3 bevorzugen. So 
muss die Software sich nicht nach möglichen Hardwarevarianten richten. 
Bei der Auswahl des n-Kanal Type scheint mir der BSS138 oder ein ander 
N-Channel Logic Level Gate FET besser geeignet als der IRLML2402. Beim 
3.3V Betrieb ist die Vgs(th) zu hoch um sicher zu schalten.

Marcel schrieb:
> - Funktioniert der /ZRESET-Schalter gar nicht?

Kaput gehen wird nichts. Du schließt hat den Ausgangstreiber am Pin mit 
dem Schalter kurz und es fließt dann der maximale Strom. Laut Datenblatt 
fließen bei 3.3V etwa 20 mA und dabei schnürt der Ausgangstreiber MOSFET 
auf 2V ab. Dieser Pegel reicht halt nicht für ein RESET.

von Holm T. (Gast)


Lesenswert?

Joe G. schrieb:
> Leo C. schrieb:
>> Korrekturmöglichkeiten:
>
> Im Sinne einer Kompatibilität würde ich die Variante 3 bevorzugen. So
> muss die Software sich nicht nach möglichen Hardwarevarianten richten.
> Bei der Auswahl des n-Kanal Type scheint mir der BSS138 oder ein ander
> N-Channel Logic Level Gate FET besser geeignet als der IRLML2402. Beim
> 3.3V Betrieb ist die Vgs(th) zu hoch um sicher zu schalten.
>
> Marcel schrieb:
>> - Funktioniert der /ZRESET-Schalter gar nicht?
>
> Kaput gehen wird nichts. Du schließt hat den Ausgangstreiber am Pin mit
> dem Schalter kurz und es fließt dann der maximale Strom. Laut Datenblatt
> fließen bei 3.3V etwa 20 mA und dabei schnürt der Ausgangstreiber MOSFET
> auf 2V ab. Dieser Pegel reicht halt nicht für ein RESET.

..verstehe ich nicht. Der Taster geht gegen Masse und sollte deutlich 
niederohmiger als ein Ausgangstreiber sein. Woher sollen da die 2V 
kommen?

Das mit dem BSS138 verstehe ich aber auch nicht. Das ist ein Mosfet und 
kein Sperrchicht-Fet..das Gate sollte isoliert sein (+-20V)..wie kann 
man da den Pegel am Drain zurück lesen ..oder habe ich das mit dem 
Rücklesen falsch verstanden?

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

> Im Sinne einer Kompatibilität würde ich die Variante 3 bevorzugen. So

Das ist die beste Lösung, und bei einer Neuauflage der Platinen sollten 
sie auf jeden Fall so gändert werden. Wer sich den Umbau nicht zutraut, 
kann aber auch mit 1. leben, meine ich.

> Bei der Auswahl des n-Kanal Type scheint mir der BSS138 oder ein ander
> N-Channel Logic Level Gate FET besser geeignet als der IRLML2402. Beim
> 3.3V Betrieb ist die Vgs(th) zu hoch um sicher zu schalten.

Eigentlich sollte der IRLML2402 besser als der BSS138 funktionieren, da 
sein Vgs(th) nochmal niedriger ist. Allerdings hat der bei Ugs = 0,00xV 
nicht ganz schließen wollen (2 Exemplare). Da es mit dem BSS138 
funktioniert, habe ich das nicht weiter untersucht.

> Marcel schrieb:
>> - Funktioniert der /ZRESET-Schalter gar nicht?
>
> Kaput gehen wird nichts. Du schließt hat den Ausgangstreiber am Pin mit
> dem Schalter kurz und es fließt dann der maximale Strom. Laut Datenblatt
> fließen bei 3.3V etwa 20 mA und dabei schnürt der Ausgangstreiber MOSFET
> auf 2V ab. Dieser Pegel reicht halt nicht für ein RESET.

Im Datenblatt, Figure 32-24, hört die Kurve bei 20mA auf, und die 
Ausgansspannung ist dann auf 2V abgesunken. Laut "Absolute Maximum 
Ratings" kann man einen Pin aber bis zu 40mA belasten, wobei der Pegel 
dann natürlich noch weiter runter geht. Nach den Messungen von 
Karl-Heinz Kübbeler (Transistortester) haben die Ausgangstransistoren 
einen RDS(ON) von ca. 22 Ohm. Dann würden ca. 150mA fließen.

von Leo C. (rapid)


Lesenswert?

Holm T. schrieb:
> kein Sperrchicht-Fet..das Gate sollte isoliert sein (+-20V)..wie kann
> man da den Pegel am Drain zurück lesen ..oder habe ich das mit dem
> Rücklesen falsch verstanden?

Nicht Drain, sondern Gate. Es geht darum, die alte Schaltung von der 
geplanten Schaltung mit Transistor zu unterscheiden.
Beim Einschalten des Systems ist der AVR-Port hochohmig, und /ZRESET muß 
durch externe Beschaltung auf Low gezogen werden. Bei der jetztigen 
Schaltung hat /ZRESET einen Pulldown und der AVR liest einen Low-Pegel.
Würde man bei der neuen Schaltung einen NPN-Transistor nehmen, würde die 
Basis des Transistors die Spannung am Pullup so weit runterziehen, daß 
man ohne zusätzlichen Aufwand auch nur ein Low einlesen würde.
Das Gate eines MOSFET liegt aber durch den Pullup auf 3,3V.

von Holm T. (Gast)


Lesenswert?

Achso.

Gut dann ist klar was Du willst.
Denkst Du aber nicht das die Lösung etwas overengeneered ist?
Es wird durch den Port Kurzschluß dem Atmel Nichts passieren, den 
Kurzschlußstrom könnte man auch noch mit einem R begrenzen, ggf. den 
Pulldown anpassen.

Andererseits halte ich die ganze Taste nicht für so recht notwendig, 
wenn man den Atmel als "Supervisor" betrachtet kann man den Reset auch 
da auslösen..klar ein BUS impliziert das der Reset auch von irgendwo da 
kommen kann, wenn man das will würde ich einfach den Strom begrenzen und 
gut ist...

Gruß,

Holm

von Leo C. (rapid)


Lesenswert?

Holm T. schrieb:
> Denkst Du aber nicht das die Lösung etwas overengeneered ist?

Stimmt schon.
Wobei die Softwareänderung, um auch die umgebaute Version zu erkennen, 
fast kein Aufwand war. Aber deshalb habe ich ja auch die Alternativen 
erwähnt.

Eigentlich wollte ich noch mal mehr dazu schreiben, bin aber nicht dazu 
gekommen. Und jetzt muß ich dringend weg.

von Holm T. (Gast)


Lesenswert?

Leo C. schrieb:
> Holm T. schrieb:
>> Denkst Du aber nicht das die Lösung etwas overengeneered ist?
>
> Stimmt schon.
> Wobei die Softwareänderung, um auch die umgebaute Version zu erkennen,
> fast kein Aufwand war. Aber deshalb habe ich ja auch die Alternativen
> erwähnt.

Naja ..mir geht halt nicht mal die Notwendigkeit auf da großartig was 
dran zu ändern..oder das von SW Seite her zu erkennen...weil das Problem 
halt eher marginal ist.

>
> Eigentlich wollte ich noch mal mehr dazu schreiben, bin aber nicht dazu
> gekommen. Und jetzt muß ich dringend weg.

Mache Dir keine Gedanken, wir sind hier mit diesem Thema nicht auf der 
Flucht. :-)

Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Hallo,

ich dachte schon, meine Benachrichtigung wäre defekt :-)

Wie stehts denn um das Vinculum?

Und ich wollte gerade die SIDE-Teile bei Reichelt bestellen - bin mir 
aber mit den Typen nicht sicher. Ich betreibe ein 5V-System und bin da 
schon mal wochenlang einem Fehler auf der Spur gewesen :-)
Beispiel 74245. Da gibt es:

Typ     Versorgung  Eingang
ABT     4,5 - 5,5V  2V
AC      2 - 6V      0 - 6V
LVX     2 - 3,6V    0 - 5,5V
VHCT    2 - 5,5V    0 - 5,5V


Danke und Gruß
Marcel

von Leo C. (rapid)


Lesenswert?

Die Schaltung ist dafür ausgelegt, mit der gleichen Spannung wie die 
Z180-Karte (und der Rest) betrieben zu werden. Also alles 3,3V oder 
alles 5,0V. Die Logikfamilie spielt dann keine so große Rolle, da keine 
Pegel konvertiert werden müssen, und die Geschwindigkeitsanforderungen 
nicht extrem sind. Auch wenn Du Dein System jetzt nur mit 5V betreibst, 
würde ich Dir ICs empfehlen, die auch mit 3,3V laufen. Man weiß ja 
nie...

> Typ     Versorgung  Eingang
> ABT     4,5 - 5,5V  2V
    Geht nicht mit 3,3V
> AC      2 - 6V      0 - 6V
    "Veraltet", sehr steile Schaltflanken, nicht empfehlenswert.
> LVX     2 - 3,6V    0 - 5,5V
    Geht
> VHCT    2 - 5,5V    0 - 5,5V
    Geht nicht mit 3,3V. Reichelt hat da einen "Druckfehler".
    Auch bei 5V nicht empfehlenswert, da TTL-kompatible Eingänge.

Außerdem gibts (bei Reichelt) noch:
  VHC     2 - 5,5V    0 - 5,5V
    Sollte gehen.
  HC      2 - 6V      0 - 6V
    Geht. Damit läuft meine Schaltung bei 3,3V.

Siehe auch:
Beitrag "Re: Z180-Stamp Modul"

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel A. schrieb:
> Wie stehts denn um das Vinculum?

Zur Schaltkreisfamilie ist ja schon alles gesagt. Zum Vinculum:

Es existiert eine Leiterplatte welche „prinzipiell“ funktionsfähig ist. 
Harald N. sollte auch eine haben, ich kann aber nicht sagen ob er sie 
schon aufgebaut hat. „Prinzipiell“ deshalb, weil mir das Design noch 
nicht gefällt. Die Schaltung ist eingangsseitig für 3.3V bzw. 5V 
ausgelegt. Um sie in das ECB-Board zu integrieren muss jedoch der 
zweifache RS232-Treiber deaktiviert werden. Da jedoch üblicherweise dort 
das Terminal sitzt, kann jetzt nur noch über das virtuelle Terminal am 
USB-Port gearbeitet werden. Deshalb habe ich die Schaltung nochmals 
umgebaut. Sie sitzt jetzt direkt an der RS232-Schnittstelle über einen 
9-poligen Steckverbinder. Die 5V kommen über RI. Somit kann das 
USB-Interface nun an eine beliebige RS232 angeschlossen werden. Was 
jetzt noch fehlt, ist eine ordentliche Leiterplatte. Die Software läuft 
bis auf den „Copy“ Befehl. Hier sind Files über 32kB noch eine 
Baustelle.

von Marcel A. (dl1ekm)


Lesenswert?

Leo C. schrieb:
>> AC      2 - 6V      0 - 6V
>     "Veraltet", sehr steile Schaltflanken, nicht empfehlenswert.

Leider gibt es bei Reichelt den 138er in SMD nur als AC Version. Den 
hast du als "veraltet" deklariert, außerdem erscheint mir ein Pegel von 
3,8V für "high" dann auch nicht 3,3V-kompatibel.
Für 5V sollte er aber gehen - ich probiers - und kenne dann ja eine 
mögliche Fehlerquelle :-)

Vielleicht sollte ich doch mal zu Mouser wechseln?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel A. schrieb:
> Leider gibt es bei Reichelt den 138er in SMD nur als AC Version.

Artikel-Nr.: SMD HC 138

http://www.reichelt.de/SMD-HC-138/3/index.html?ACTION=3&LA=446&ARTICLE=18638&artnr=SMD+HC+138&SEARCH=74HC138

von Marcel A. (dl1ekm)


Lesenswert?

Joe G. schrieb:
> Marcel A. schrieb:
>> Leider gibt es bei Reichelt den 138er in SMD nur als AC Version.
>
> Artikel-Nr.: SMD HC 138
>
Mist. Hat mir die Suchmaschine nicht angezeigt :-(

Danke!

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Marcel A. schrieb:
> Leider gibt es bei Reichelt den 138er in SMD nur als AC Version. Den
> hast du als "veraltet" deklariert, außerdem erscheint mir ein Pegel von
> 3,8V für "high" dann auch nicht 3,3V-kompatibel.

Auf die Angaben von Reichelt sollte man sich nicht unbedingt verlassen. 
Siehe Datenblatt.

von Marcel A. (dl1ekm)


Lesenswert?

Hui, es ist hier ja erstaunlich ruhig geworden (... an die eigene Nase 
fass...)

Mein SIDE muss ich noch aufbauen und das Frontpanel wartet immer noch 
auf Zusammenbau ...

Was ist denn eigentlich aus dem Vinculum geworden? Das war ja schon 
recht weit und würde eine (vorerst letzte?) tolle Erweiterung des 
Systems darstellen.

Mit besten Grüßen
Marcel

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel A. schrieb:
> Was ist denn eigentlich aus dem Vinculum geworden?

Die Testschaltung läuft schon einige Zeit auf dem Steckbrett. Leider bin 
ich noch nicht dazu gekommen alles auf eine ordentliche LP mit 
Beschreibung zu bringen. Derzeit drängelt mein Verlag etwas ;-)
https://www.amazon.de/dp/B01N8RPPE2/ref=sr_1_2?ie=UTF8&qid=1489736680&sr=8-2&keywords=Grabow+mechatronik

von Marcel A. (dl1ekm)


Lesenswert?

So, der letzte Eintrag ist 1 Jahr alt - sehr schade, dass es so ruhig um 
diese tolle Plattform geworden ist.
Ich habe in den letzten Monaten mit einigen Enthusiasten jede Menge 
Platinen des NDR Klein Computers neu aufgelegt und hier einen Rechner 
mit Z80 und einen mit 68000 neu aufgebaut. Darüber ist das hier etwas in 
den Hintergrund gegangen...

Wie sieht es denn mit dem Vinculum aus? Für den NKC haben wir da 
inzwischen 2 Ausführungen.

Und gibt es noch aktualisierte Firmware von Leo?

Besten Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Hi,
mal sehen, ob das Forum noch lebt.
Nachdem ich die letzten Monate mit dem NDR NKC verbracht habe, wollte 
ich den Z180-Stamp-Rechner mal wieder anwerfen.

Ich war mir sicher, dass ich ihn "lauffähig" ausgeschaltet hatte.
Nun startet aber CPM nicht mehr.

Im Monitor erscheint:
1
=========================<  (RE)START DEBUG  >=========================
2
### Reset reason(s): External.
3
4
ATmega2561+Z8S180 Stamp Monitor - Version: 0.6.8.1 
5
6
### main_loop entered: bootdelay=5
7
8
### main_loop: bootcmd="reset; pin 8 low; loadcpm3; go ${startaddress}"
9
Hit any key to stop autoboot:  0 
10
CPU now in reset state.
11
Loading: '1:/cpm3_0.6.8.sys'...
12
13
 BNKBIOS3 SPR  FA00  0500
14
 BNKBIOS3 SPR  B300  3D00
15
 RESBDOS3 SPR  F400  0600
16
 BNKBDOS3 SPR  8500  2E00
17
 
18
 61K TPA
19
Loaded: Resident: 0x1E400-0x1EEFF, Banked: 0x08500-0x0EFFF
20
## Starting application at 0xb300 ...
21
=>
Auf Console0 kommt:
1
CP/M Version 3.0, Z180-Stamp BIOS v0.6.8                                                                           
2
Estimated CPU clock [Hz]: 18432000                                                                                 
3
sdio: SD Card driver                                                                                               
4
cfio: CompactFlash Memory Card driver: No Card                                                                     
5
                                                                                                                   
6
CP/M Error On A: Invalid Drive                                                                                     
7
BDOS Function = 15  File = CCP     .COM
Die SD-Karte 1 sieht aber gut aus im Monitor:
1
=> fatls 1:
2
----A 2015/11/29 22:00   8388608  assembler.dsk
3
----A 2015/06/12 09:14     22784  cpm3_4d.sys
4
----A 2015/09/23 22:00     25600  cpm3+8drives.sys
5
----A 2016/05/11 16:40     32768  cpm3system.dsk
6
----A 2015/09/24 14:33   8388608  dbase2.dsk
7
----A 2014/12/12 19:54   8388608  disk1.dsk
8
----A 2014/12/12 19:54   8388608  disk2.dsk
9
----A 2014/12/12 19:54   8388608  disk3.dsk
10
----A 2014/12/12 19:54   8388608  disk4.dsk
11
----A 2015/08/27 15:49   8388608  editor.dsk
12
----A 2015/06/01 15:41   8388608  kermit.dsk
13
----A 2015/09/19 20:31   8388608  leer.dsk
14
----A 2015/11/27 20:07   8388608  share.dsk
15
----A 2015/09/19 19:25   8388608  tp3-hd.dsk
16
----A 2015/09/19 20:32   8388608  tp3vt100.dsk
17
----A 2015/09/20 20:24   8388608  turbo3.dsk
18
----A 2015/09/23 19:51   8388608  ws33.dsk
19
----A 2016/05/11 16:58   8388608  ddtz_d8e.dsk
20
----A 2016/05/22 15:46     30464  cpm3_0.6.4.10-cf-card-dirty.sys
21
----A 2016/06/10 17:21     30464  cpm3_0.6.8.sys
22
----A 2016/08/25 20:23     32000  cpm3_0.6.8-24-dirty.sys
23
----A 2016/08/25 20:39     32000  cpm3_0.6.8.20-int-handling-dirty.sys
24
----A 2016/08/05 14:41     10112  ddt180.com
25
  23 File(s), 126045312 bytes total
26
   0 Dir(s),    3723696K bytes free

Die Umgebung sieht auch gut aus:
1
attach_drives=at dsk0 ${dsk0};at dsk1 ${dsk1};at dsk2 ${dsk2};at dsk3 ${dsk3};at ds}
2
baudrate=115200
3
bootcmd=reset; pin 8 low; loadcpm3; go ${startaddress}
4
bootdelay=5
5
cpm3_commonbase=f000
6
cpm3_file=1:/cpm3_0.6.8.sys
7
cpm3_scb=1e900
8
dsk0=0:/cpm3system.dsk
9
dsk1=0:/turbo3.dsk
10
dsk2=0:/basic.dsk
11
dsk3=0:/assembler.dsk
12
dsk4=0:/vedit.dsk
13
dsk5=0:/ws4.dsk
14
dsk6=0:/dbase2.dsk
15
dsk7=0:/share.dsk
16
esc_char=0x1c
17
pin_alias=0:PG5,1:PG4,2:PB4,3:PB5,4:PB6,5:PB7,6:PG3,7:PG2,8:PG1,9:PG0,10:PE7
18
startaddress=b300
Wo könnte der Fehler liegen? Probleme mit der SD-Karte?

von Leo C. (rapid)


Lesenswert?

> dsk0=0:/cpm3system.dsk

> ----A 2016/05/11 16:40     32768  cpm3system.dsk

Dein Disk-Image ist zu kurz. Eigentlich sollte es aber automatisch auf 
8388608 Byte erweitert werden [1]. Der Patch ist seit Version 6.7.1 im 
Monitor.

[1] Beitrag "Re: Z180-Stamp Modul"

von Marcel A. (dl1ekm)


Lesenswert?

Danke - aber er nimmt ja das DSK von LW 0:

----A 2016/08/25 21:28   8388608  cpm3system.dsk

Und egal welche Datei ich als cpm3_file vorgebe (und dann loadcpm3 / go 
) - auf der Console wird immer Z180-BIOS v0.6.8 ausgegeben.

von Marcel A. (dl1ekm)


Lesenswert?

Total kurios.

Wenn ich ihm das 1:/cpm3system.dsk (32k) vorgebe - wird nichts 
erweitert.

Wenn ich einfach mal eine "leere" Diskette als DSK0 setze kommen genau 
die gleichen Fehler.

Weder Änderungen am cpm3_file noch bei dsk0 bewirken irgendwelche 
Änderungen...

von Leo C. (rapid)


Lesenswert?

Ich hätte jetzt vorgeschlagen, daß Du alle Dateien von einem Kartenslot 
lädst. Aber da hast Du ja schon getan.

Vom AVR-Monitor gibt es eine geringfügig neuere Version 0.6.8.2. Diese 
beiden Änderungen könnten mit Deinen Problemen zu tun haben, aber eher 
auch unwahrscheinlich:
*  avr/z180-serv.c: Workaround for GCC bug PR61443
*  cmd_attach.c: Correct workaround for GCC bug PR61443

Ich versuche gerade ein System zum Laufen zu bringen, finde aber schon 
die passenden Kabel nicht. ;-(


Nachtrag: Du könntest für das Bootlaufwerk mal das Debugging einschlten, 
z.B.:
1
=> at -o reattach,debug dsk0

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Echt zum verrückt werden ...

Loadf geht super - und ich lande dann im DDTZ.

Ich habe mal ein älteres cpm.sys probiert - damit startet das System 
nicht. Soweit ich mich erinnere, müssen ja auch BIOS und CPM.SYS 
zusammen passen.

Vielleicht passt das CPM.SYS nicht ganz?

Ich habe im Bios immer noch 8 Laufwerke definiert und hatte mir 
(eigentlich) die AVR-Files auch für 8 Laufwerke für den 2561 
übersetzt...

Per Bootloader müsste ich doch auch testweise ältere BIOSe einspielen 
können?

von Leo C. (rapid)


Lesenswert?

> Vielleicht passt das CPM.SYS nicht ganz?

Alle cpm3_0.6.8.* sollten passen. 0.6.7.* möglicherweise auch noch.

> Per Bootloader müsste ich doch auch testweise ältere BIOSe einspielen
> können?

Ja.

von Marcel A. (dl1ekm)


Lesenswert?

Du bist wie immer mein Held :-)

=>  at -o reattach,debug dsk0
Attachment of '' to dsk0 failed: Disk not attached!

Dann manuell attached - und siehe da - geht!

Wer lesen kann... - das Problem hatte Joe vor 2 Jahren auch :-) - sorry 
für die Aufregung!

-> "run attach_drives"

Schade dass es so ruhig hier geworden ist. Zumindest das USB-Interface 
hätte ich gerne noch fertig gesehen...

Schöne Ostertage und Gruß
Marcel

: Bearbeitet durch User
von Holm T. (Gast)


Lesenswert?

Ich bin auch noch da, mir fehlt die Zeit aber ich krame das mit 
Gewißheit auch wieder vor. Mir fehlt noch Peripherie an dem Ding, 
einfach ein paar GPIOs und wie schon mal angedeutet würde mich 
rudimentäres Netzwerk interessieren, von mir aus mit ESP ...

Gruß,
Holm

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Marcel A. schrieb:
> Wie sieht es denn mit dem Vinculum aus?

Mich gibt es auch noch ;-) Ich habe mal mein System wieder in Betrieb 
genommen, lief fast auf Anhieb. Die SD-Card mußte ich zwei dreimal 
stecken um richtig gelesen zu werden.
Mit der Viculum Hardware hatte ich einige Zeit experimentiert um eine 
vernüftige Variante zu finden. Auf diesem Stand ist es dann 
stehengeblieben. Experimentalaufbau + Steckbrett waren mal lauffähig, 
ich werde es mal wieder hervorkramen...

von Marcel A. (dl1ekm)


Lesenswert?

Prima!
Schaltplan und Software für CPM (ich denke angepasste U-Tools von den 
KC-Leuten) würden mir schon reichen...

Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Holm T. schrieb:
> ein paar GPIOs

Hallo Holm, ich plane so etwas einfaches wie die IOE für das System. Mit 
einem echten PIO würde eh schwierig - welcher kann schon 18MHz Takt? :-)

Habe mir mal 2 billige MFA-IO-Karten bei ebay geholt - die baue ich mir 
gemäß IOE dann in mein 19" Rack ein.

Gruß
Marcel

von Holm T. (Gast)


Lesenswert?

Marcel A. schrieb:
> Holm T. schrieb:
>> ein paar GPIOs
>
> Hallo Holm, ich plane so etwas einfaches wie die IOE für das System. Mit
> einem echten PIO würde eh schwierig - welcher kann schon 18MHz Takt? :-)
>
> Habe mir mal 2 billige MFA-IO-Karten bei ebay geholt - die baue ich mir
> gemäß IOE dann in mein 19" Rack ein.
>
> Gruß
> Marcel


IOE? -v bitte.

Ich bin mir nicht sicher ob man die PIOs mit 18Mhz betreiben müßte, 
würde das aber ggf. mit 2 16Mhz PLCC PIOs die ich liegen habe mal 
ausprobieren.
Ich übersehe aber nicht was passiert wenn man die Dinger mit halbem Takt 
und Waitstates laufen läßt (Interruptannahme und Quittung, Vector usw), 
ich habe mich da noch nicht wirklich reingekniet.
Ganz davon abgesehen wären auch schon ein paar blanke Ein- und 
Ausgaberegister hilfreich, Interruptmöglichkeiten wären aber schön..

Evtl. eine Art PIO in einem CPLD neu auflegen?

Gruß,

Holm

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

Zum Thema I/O.
Wenn man nur ein paar simple In- und/oder Out-Ports haben will, kann man 
ein paar Schieberegister an CSIO anschließen. Im Anhang ist ein Beispiel 
mit je 16 In und Out.

Die dazu passende Software könnte ungefähr so aussehen:
1
; 16 Bit Port lesen und 16 Bit Port schreiben
2
;
3
; DE: Auszugebender Wert
4
;
5
; Return:
6
; DE: Gelesener IN-Port
7
;
8
CSIO16:
9
    IN0  A,(0AH)        ; Warten bis CSIO unbeschäftigt
10
    AND  30             ;    Kann entfallen, da CSIO bei Aufruf immer bereit.
11
    JR   NZ,CSIO16
12
    DI                  ; Keine Unterbrechung zwischen den beiden Transaktionen
13
    OUT0 (0BH),E
14
    LD   A,10
15
    OUT0 (0AH),A        ; Transmitter starten
16
WL1:
17
    IN0   A,(0AH)       ;
18
    AND  10             ;
19
    JR   NZ,WL1
20
    IN0  E,(0BH)        ; Low Byte lesen
21
    OUT0 (0BH),D
22
    LD   A,10
23
    EI
24
    OUT0 (0AH),A
25
WL2:
26
    IN0   A,(0AH)
27
    AND  10
28
    JR   NZ,WL2
29
    IN0  D,(0BH)        ; High Byte lesen
30
    RET

von Holm T. (Gast)


Lesenswert?

Naja gut, ne SPI basierende Schnittstelle ist schön langsam...aber es 
gibt fertige Peripherie-Ics wie ADU etc.

Das ist allerdings nicht was ich mir vorgestellt hatte.
Mir ist klar das der ungepufferte Highspeed-Systembus wohl das größte 
Problem für Erweiterungen darstellen wird.

Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Hi,
ich nutze die Osterferien, um endlich mal in tiefer in die 
Z80-Programmierung einzusteigen.

Ich will hier ja kein Assembler-Hilfs-Forum starten - aber ich kann mir 
folgende Meldung von Z80ASM (SLR) nicht erklären:

UEB16M2.Z80 - A11AH Undefined Line 00013
        LD      DE,A11AH        ; MPD (00AB)

Ich will einen 16-Bit Wert in DE speichern. Nehme z.B. 111AH dann geht 
es...

P.S.: Was mir echt fehlt im BIOS ist ein fatcp - um images von 1: auf 0: 
zu kopieren. (Hintergrund: 1: habe ich extern im Zugriff, 0: liegt in 
den tiefen des 19" Gehäuses - da komme ich immer schlecht an die 
SD-Karte zum wechseln dran :-))

von Leo C. (rapid)


Lesenswert?

> UEB16M2.Z80 - A11AH Undefined Line 00013
>         LD      DE,A11AH        ; MPD (00AB)

'A11AH' wäre ein Label, das aber nicht definiert ist.
Aus dem Handbuch, Kapitel EXPRESSIONS:
1
NUMBERS
2
3
Numbers are by default radix 10. The default radix may be
4
overridden by using one of the following forms:
5
6
        nB      Binary
7
        nO      Octal
8
        nQ      Octal
9
        nD      Decimal
10
        nH      Hexadecimal
11
        X'n'    Hexadecimal 
12
13
where n is any number of digits valid for the given radix. Note
14
that the nB and nD forms will not be recognized if the default
15
radix has been changed to larger than 11 or 13 respectively since
16
the trailing character would be a valid digit in the default
17
radix. Also, the first digit in the nH-type must be from 0-9.
Der letzte Satz betrifft Dein Problem.

> P.S.: Was mir echt fehlt im BIOS ist ein fatcp - um images von 1: auf 0:
> zu kopieren.

Du meinst den 'Stamp Monitor', oder?
Vielleicht sollte man die bash auf den AVR portieren. :-)
Oder jemand schaut sich die Datei 'cmd_fat.c' an, und erweitert sie um 
den Befehl fatcp.
Und dann noch fatmv, fatrm, ... :)

von Marcel A. (dl1ekm)


Lesenswert?

Leo C. schrieb:

> 'A11AH' wäre ein Label, das aber nicht definiert ist.
> Aus dem Handbuch, Kapitel EXPRESSIONS:
>
1
> NUMBERS
2
>...
3
> Also, the first digit in the nH-type must be from 0-9.
4
>
> Der letzte Satz betrifft Dein Problem.
>
Danke - du wirst es nicht glauben - natürlich habe ich mir diese Stelle 
im Handbuch angesehen - aber den letzten Satz nicht mitgelesen :-(
LD      DE,0A11AH  geht

> Du meinst den 'Stamp Monitor', oder?
> Vielleicht sollte man die bash auf den AVR portieren. :-)
Gute Idee :-)
> Oder jemand schaut sich die Datei 'cmd_fat.c' an, und erweitert sie um
> den Befehl fatcp.
Hm ja ... mal sehen, ob es dazu was gibt.
> Und dann noch fatmv, fatrm, ... :)
:-)

von Holm T. (Gast)


Lesenswert?

..damit steht der SLR Asembler aber nicht alleine da, die führende 0 bei 
Hex Zahlen hat Tradition.

Gruß,

Holm

von Marcel A. (dl1ekm)


Lesenswert?

Jetzt weiß ich wenigstens warum - hatte mich das schon immer gefragt :-)

von Marcel A. (dl1ekm)


Lesenswert?

Hi,

kennt hier jemand ein gutes (online) Tutorial für Z80-Programmierung 
unter CP/M? Der Zaks geht darauf ja nicht ein. Mit dem CPM ProgGuide 
habe ich es zwar geschafft, Text auszugeben - aber gibt es 
Code-Sammlungen, wie man z.B. effektiv Benutzereingaben realisiert, 
Daten ausgibt usw.?

Die Z80-Heaven-Seite ist ja sehr TI83-lastig...

Gruß
Marcel

von S. R. (svenska)


Lesenswert?

Ich fürchte, da bist du ein bisschen spät dran, und CP/M zu früh. Die 
Betriebssystemaufrufe (d.h. die BDOS-Funktionen) sind alle dokumentiert, 
daraus kannst du das "wie mache ich das" selbst herleiten. Es gibt auch 
Unmengen an fertigen Programmen, wo du Code abkupfern könntest.

Allerdings gab es im Gegensatz zu heute keinen Standard, wie sich 
Programme üblicherweise verhalten. Jedes Programm hat sich z.B. sein 
eigenes Parameterformat definiert. Manche Programme reagieren auf 
Tastendrücke sofort, andere möchten noch ein Enter sehen.

Alles, was CP/M nicht anbietet, muss jedes Programm selbst 
implementieren. Systemweite Bibliotheken (wie DLLs oder .so heute) gab 
es nicht, hätte auch nicht in den Speicher gepasst. Es gab nur das, was 
auch gebraucht wurde.

Andere Funktionen, wie z.B. Baudrate oder Terminaltyp sind 
systemspezifisch, da hatte jedes Programm, was sowas brauchte, seine 
eigene Abstraktion für. Der Nutzer durfte dann die systemspezifischen 
Sequenzen selbst in die Binärdateien patchen.

Schau dir vorhandene Programme an, wenn du den Stil nachempfinden 
möchtest, oder halte dich an heutige Gepflogenheiten (die du allerdings 
auch implementieren musst).

von Tom (Gast)


Lesenswert?

Wie svenska schon schreibt: Die Dokus zu BDOS und BIOS sind Dein Freund.
Einen ASM-Grundlagenkurs gibt es. z.B. hier:
http://www.mpm-kc85.de/dokupack/KCC_ASM_Kurs.pdf

Wem die ASM-Progammierung zu 'langsam' geht, der kann auch mit C 
arbeiten: BDS-C bringt eine bios.h und bdos.h mit.
Damit kann man die Systemfunktionen bequem aufrufen.

von Marcel A. (dl1ekm)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen,
ich habe eine MFA 8-Bit Ausgabe-Karte (8085 System) einmal auf die 
ECB-Basisboard-Anschlüsse umgelötet.

Dabei habe ich noch ein paar "Sicherheitsfragen", bevor ich die Karte 
nun in das Rack stecke:

- Der BUS hat ja 5V/TTL, soweit ich mich erinnern kann?
- Ich würde die Karte z.B. auf Adresse CC einstellen und kann sie dann 
mit OUT ansprechen? Bis 7F waren ja "interne" Adressen.
- Mit dem Signal /IOW bin ich mir nicht ganz sicher. Dieses Signal wird 
künstlich aus den Signalen IO/M, /RD und /WR des 8085 hergestellt (siehe 
Anhang) und auf den BUS des MFA gelegt. Da es sich bei der Karte nur um 
eine beschreibbare Karte handelt, meine ich, dass ich RD/WR nicht 
ausdekodieren muss und /IOW einfach mit /IORQ verbinden kann.
- Falls das nicht reicht - dann müsste ich doch einfach "nur" /IORQ und 
/WR mit einem Oder-Gatter verbinden, um /IOW zu erhalten?

Besten Gruß
Marcel

von Leo C. (rapid)


Angehängte Dateien:

Lesenswert?

> - Der BUS hat ja 5V/TTL, soweit ich mich erinnern kann?

Wenn Du das System mit 5V betreibst, schon.

> - Ich würde die Karte z.B. auf Adresse CC einstellen und kann sie dann
> mit OUT ansprechen? Bis 7F waren ja "interne" Adressen.

00 - 4F  CPU-Intern
40 - 5F  Auf AVR-Stamp verbraten
60 - 6F  CF-IF

Der Rest müßte frei sein.

> - Mit dem Signal /IOW bin ich mir nicht ganz sicher. Dieses Signal wird
> künstlich aus den Signalen IO/M, /RD und /WR des 8085 hergestellt (siehe
> Anhang) und auf den BUS des MFA gelegt.

Künstlich würde ich das nicht nennen.

> Da es sich bei der Karte nur um
> eine beschreibbare Karte handelt, meine ich, dass ich RD/WR nicht
> ausdekodieren muss und /IOW einfach mit /IORQ verbinden kann.

Das wäre ok, wenn /IORQ  nicht noch eine 2. Funktion hätte. Es wird 
zusammen mit /M1 für den "Interrupt Acknowledge Cycle" verwendet.

> - Falls das nicht reicht - dann müsste ich doch einfach "nur" /IORQ und
> /WR mit einem Oder-Gatter verbinden, um /IOW zu erhalten?

Wäre besser, da Du Dir sonst die Möglichkeit verbaust, /INT0 zu 
benutzen.

: Bearbeitet durch User
von Marcel A. (dl1ekm)


Lesenswert?

Ok, danke.

Ich werde dann /IORQ0 (müsste mal schauen, was /IORQ1 beim Z180 ist...) 
und /WR über ein 7432 Oder-Gatter verbinden und dann an den als /IOW 
bezeichneten Eingang der Karte legen.

Für die 8-Bit Eingabekarte würde ich das dann mit /IORQ0 und /RD machen 
und auf /IOR verbinden.

von Leo C. (rapid)


Lesenswert?

> Ich werde dann /IORQ0 (müsste mal schauen, was /IORQ1 beim Z180 ist...)

Da ist was durcheinander geraten. /IORQ0 und /IORQ1 gibt es nicht.
Es gibt /IORQ und /INT0 bis /INT2.

/INTx sind Interrupteingänge. Nur Interrupts an /INT0 kommen  mit 
I/O-Schreib/Lesezyklen in Konflikt. Interessant wird das alles aber 
erst, wenn Du interruptfähige I/O-Hardware anschließen möchtest.

> Für die 8-Bit Eingabekarte würde ich das dann mit /IORQ0 und /RD machen
> und auf /IOR verbinden.

Sicher meinst Du hier /IORQ, dann ist das richtig.

von Marcel A. (dl1ekm)


Lesenswert?

So - funktioniert einwandfrei (nachdem ich einen Verdrahtungsfehler 
korrigiert hatte).
Jetzt scheitere ich daran, dass keiner der "Delay-Samples" funktioniert 
(für eine Lauflicht-Demo). Nach dem Aufruf des delay-Unterprogramms 
(verschachtelte Schleifen) stürzt das Com-File ab.
Aber heute nimmer :-)

Gruß
Marcel

von Marcel A. (dl1ekm)


Lesenswert?

Das mit dem Absturz war auch wieder menschliches Versagen... Ich hatte 
nach dem letzten RET im Unterprogramm kein Enter gedrückt - und prompt 
hat SLR diese letzte Zeile nicht übersetzt und das Programm ging ins 
Speichernirvana...

Zum Thema Z80 Toolbox:
Das hier ist ganz nett: "Doctor Dobb's Z80 Toolbook". Ist aber 
überwiegend 8080 Code - zusammen mit dem "Übersetzer" 8080->Z80, den mir 
Werner vom NKC-Forum empfohlen hat (http://www.prof80.de/i2zkurz.html) 
ist das eine ganz gute Basis.

Zum Thema Delay:
Die Schleifen, die ich bisher als Samples gefunden habe, sind alle noch 
viel zu kurz. Sie gehen meist von 2 MHz aus - die Stamp rast ja fast 10x 
so schnell. Ich werde heute Abend mal die 24Bit-Schleife von Zaks 
testen.

Zum Thema Uhr:
Da unter CP/M3 ja die Uhr zur Verfügung steht dachte ich mir, die 
Sekunden als "Timer" zu nutzen (z.B. jede Sekunde eine LED an und wieder 
aus).
Und jetzt gehts los... Soweit ich das oben und mit den CP/M Handbüchern 
verstanden habe muss ich hier an den SCB ran - dort sollte immer die 
richtige Uhrzeit an einer speziellen Speicherstelle stehen?

Bei der erwähnten Stelle http://www.seasip.info/Cpm/scb.html habe ich 
folgendes gefunden:
1
F4H    word    Date (days since Jan 0, 1978).
2
F6H    byte    Hour (BCD).
3
F7H    byte    Minute (BCD).
4
F8H    byte    Second (BCD).
Das ist der Offset zur SCB base. Diese soll cpm3_scb=1e900 sein. Oder 
man fragt sie ab:
1
  LXI  D,SCBPB
2
  MVI  C,49
3
  CALL  BDOS  ;page address of SCB in reg H
4
...
5
SCBPB:  DB  3AH  ;this is where SCB address is
6
  DB  0  ;get operation
Stimmen die Offsets? (Man soll ja nicht die orignal CPM nehmen, die 
fangen bei 58 an).
Stimmt das Sample? Oder wie greife ich im Assembler auf 1E900 + F4H zu? 
Das liegt ja in der (falschen) Bank :-)

Oder in Pascal - warum auch immer dafür DPB (49D/31H) genutzt wird
1
Function SCB_Adr : Integer;           { Adresse des SCB im RAM bestimmen }
2
Begin
3
 New(SCBPB);                                { Pointer erzeugen }
4
 SCBPB^.Offset := $3A;                      { Adresse des SCB }
5
 SCBPB^.Flag := $00;                        { Flag = Lesen }
6
 SCBPB^.Wert := 0;                          { ohne Funktion }
7
 HL := BDOSHL($31,ORD(SCBPB));              { BDOS Aufruf 31H }
8
(* Writeln('HL-Register: ', Hex(HL));       { Adressausgabe des SCB }
9
*)
10
 SCB_ADR := HL;
11
End;

Oder wie kann ich diese BIOS-Funktion nutzen:
1
TIME (function 26)
2
Get the current date and time into the SCB (at BOOT-0Ch). HL and DE must be preserved. If C=0FFh, then set the time from the SCB instead.
3
The format of the 5-byte buffer is:
4
  DW  day  ;Day 1 is 1 Jan 1978
5
  DB  hour  ;packed BCD
6
  DB  minute  ;packed BCD
7
  DB  second  ;packed BCD
Dazu passende BDOS-Funktionen (48,105,155) gibt es ja erst in höheren 
CPM-Versionen (86, etc.)

Ich blick noch nicht durch, wie ich nun an die Uhrzeit komme...

von Marcel A. (dl1ekm)


Lesenswert?

Selbst die 24bit-Schleife mit jeder Menge taktlastiger Befehle 
dazwischen kommt gerade in Größenordnung von 1/4 Sekunde...

Da werde ich wohl mal mit dem CTC arbeiten. Beispiele für externe CTCs 
gibt es ja - sind die denn (bis auf die Portadressen) kompatibel zu den 
eingebauten Timern?

von S. R. (svenska)


Lesenswert?

So wie ich die Doku verstehe, liegt der SCB im residenten Teil des BDOS, 
der immer gemappt ist. Außerdem sollst du den nicht per Hand 
beschreiben, sondern das BDOS dafür benutzen. Siehe 
https://www.seasip.info/Cpm/bdos.html für die BDOS-Funktionen.

Konkret (ungetestet, ohne jede Erfahrung mit CP/M 3):
1
  LD C, 49      ; function 49/31h: access SCB
2
  LD DE, SCBPB  ; function parameters
3
  CALL BDOS
4
  ; die sekunde sollte jetzt in A stehen
5
6
SCBPB:
7
  DB 0F8h ; field "second" ...
8
  DB 0    ; ... read

Die BIOS-Funktion klingt eher nach "schreibe die Uhrzeit in den SCB bzw. 
setze dir Uhrzeit vom SCB", ist also für dich ungeeignet. Unter CP/M 3 
soll man das BIOS zudem nicht direkt, sondern nur über die BDOS-Funktion 
50 (32h) aufrufen.

Spontan scheint mir so, als ob "MP/M II and later" auch CP/M 3 
einschließt, d.h. du solltest für die aktuelle Zeit auch BDOS 105/69h 
benutzen können. Probier's aus.

von Marcel A. (dl1ekm)


Lesenswert?

Danke dir!

Mein Verständnis war, dass mit BDOS 31H nur die Basisadresse des SCB 
liefert und ich zu dieser dann den Offset F8H ergänzen muss für das Feld 
der Sekunden?
So wie hier (allerdings hat er andere Offsets...)
https://www.seasip.info/Cpm/scb.html

von S. R. (svenska)


Lesenswert?

Lies dir mal die Doku genau durch (und probiere es im Zweifelsfall 
einfach aus, das schafft Klarheit).

Die Funktion 49 heißt "Access the System Control Block" und nimmst in DE 
einen Zeiger auf einen Parameterblock, der wiederum einen Offset und 
einen Befehl enthält. Der Befehl ist "read" oder "write" (byte bzw. 
word), also wird logischerweise der Offset innerhalb des SCB gemeint 
sein. Damit kannst du also portabel auf die einzelnen Felder des SCB 
zugreifen.

Der Code, den du meinst, erlaubt dir, die Basisadresse des SCB zu 
finden, weil du dort von Offset 0x3A liest. Offiziell läuft der Offset 
aber nur von 0x68 bis 0xFF.

Wir driften aber vom Thema des Threads ab.

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

Zu den Timern.
CTC hat 4 mal 8-bit Zähler.
Z180 hat 2 mal 16-bit Zähler.

Alle diese Zähler können nur abwärts zählen, ggf einen Interrupt 
auslösen, und ggf. einen Presetwert nachladen, für den nächsten Zyklus.
CTC hat für jeden Kanal auch einen Eingang, der statt des Systemtaktes 
heruntergezählt werden kann. Die Z180 Timer nicht.
3 CTC Kanäle haben einen Ausgang, der beim "Nulldurchgang" gepulst wird, 
Z180 hat nur für einen Timer einen Ausgang, der bei "Nulldurchgang" auf 
High oder Low gesetzt, oder getoggelt werden kann. Dummerweise ist der 
Timerausgang mit Adressleitung A18 gemultiplext (Pinmangel), so daß man 
bei seiner Verwendung nur 256K RAM nutzen kann.

Der interne Timer T0 wird im CP/M3-Bios für Timeouts verwendet. T1 ist 
frei.

Interrupt ist mit den internen Timern auf jeden Fall einfacher. Wenn 
Interrupts unter CP/M3 genutzt werden sollen, muß die Interruptroutine 
in die Common Area. Diese beginnt bei F000. Das BDOS liegt auf F300. 
Dazwischen ist also noch etwas Platz. Außerdem ist noch was zwischen 
FE00 und FFBF frei. Auf FFC0 liegt  die Vector-Tabelle.

von Marcel A. (dl1ekm)


Lesenswert?

Danke euch!

Versuch macht klug.

Aber stimmt, ich werde hier nur Fragen zur HW oder speziell zum System 
stellen. Leider findet man echte Profis wie euch ja nicht an jeder 
Straßenecke:-)

von S. R. (svenska)


Lesenswert?

Marcel A. schrieb:
> Aber stimmt, ich werde hier nur Fragen zur HW oder speziell zum System
> stellen.

Du darfst aber auch einen neuen Thread aufmachen und hier verlinken. :-)

von Harald N. (haraldn)


Lesenswert?

Hallo!
Endlich hatte ich Zeit, die Platinen zu bestücken. Nun habe ich das 
Problem, dasss der Thread mittlerweile sehr unübersichtlich geworden 
ist. Ich habe am Wochenende etwas Zeit das System zu testen. Ich habe 
die ECB zusammen mit der AVR- und Z180-Stamp und zusätzlich noch die 
SIDE-Stamp. Dies möchte ich zusammen auf Funktionalität testen. Geflasht 
habe ich die Firmware Version 6.3.

Meine Fragen, die ihr sicher aus dem Kopf beantworten könnt:
1) Wie muss ich die Jumper auf den einzelnen Platinen setzen damit ich 
das ganze System via USB-Port betreiben kann?
2) Enthält das System noch Hardware-Fehler, die ich vor dem Test beheben 
MUSS.
3) Welche Dateien/Images muss ich auf die MicroSD der AVR-Stamp bzw die 
Flash-Karte des ECB aufspielen? Das SIDE-Modul wurde ja schon fertig 
vorbereitet?
4) Falls ich noch wichtige Punkte vergessen habe...

Vielen Dank für eure Hilfe! Bald ist Urlaub, da habe ich hoffentlich 
Zeit mal den Thread durchzuarbeiten....
Harald

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Harald N. schrieb:
> Meine Fragen, die ihr sicher aus dem Kopf beantworten könnt:

Die Antworten auf deine Fragen findest du in der zugehörigen Doku. Hier 
sind alle Schritte für eine Inbetriebnahme beschrieben. Versuche mal 
bitte ganz nach Anleitung zu arbeiten. So kann ich dann mögliche 
Ergänzungen oder Erweiterungen in die Doku mit aufnehmen, wenn 
Unklarheiten entstanden sein sollten.

von Harald N. (haraldn)


Lesenswert?

Ok, danke erstmal. Das habe ich am Wochenende versucht. Nicht erwähnt 
wird die Kombination mit der ECB und dem SIDE-Interface (Jumper). Und 
ich habe nicht gefunden welche Daten wohin gespielt werden müssen, damit 
ich das CPM zum Laufen bringe. Ich habe zwar etwas herumgespielt - aber 
nichts sinnvolles erreicht.

Mein Interesse ist zwar sehr groß, aber ich gehöre leider nicht zur Z80- 
bzw. CPM-Generation, sodass ich mir die ganzen Zusammenhänge hart 
erarbeiten muss :-)

Mir ist eben wichtig, einen Quick-and-Dirty Test durchzuführen, damit 
ich Lötfehler meinerseits ausschließen kann. Ich habe dann schon vor, 
den Thread durchzuarbeiten.

von Marcel A. (dl1ekm)


Lesenswert?

Hallo Harald,

auf meine HP (die ich aber erst einmal DSGVO-kompatibel machen muss und 
daher offline ist) habe ich einige Stolpersteine aus meiner Sicht als 
blutiger Anfänger beschrieben...
Ich verstehe beileibe nicht alles, aber das System ist definitiv genial.

Ich habe übrigens einen Thread zu meinem Timer-Thema aufgemacht. Es kann 
doch nicht so schwer sein, 8 LEDs als Lauflicht zu nutzen :-) Ich komm 
aber nicht weiter...

[[Beitrag "Z180 Programmierung (Timer)"]]

von Harald N (Gast)


Lesenswert?

Ja, ich kenne deine Homepage. Aber wie du sagst, zur Zeit leider offline 
;-)

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Harald,

es ist gar nicht so kompliziert. Ich habe mal kurz die Schritte 
skizziert welche bei korrekt funktionierender Hardware durchzuführen 
sind. Sollte ein Fehler auftreten, hast Du mit dem Monitor ein sehr 
gutes Tool diesen zu identifizieren. Hinweise findest du dazu in der 
Doku oder im HELP des Monitors. Über den Aufbau der Dsk Images von CP/M 
schreibe ich noch etwas. Du kannst für den ersten Test gerne meine 
verwenden. Alle hier in der kurzen Beschreibung erwähnten Dateien im 
Anhang.

Schritt 1
Bootloader auf den AVR bringen
Datei: bootload.hex

Schritt 2
Monitor mittels Bootloader auf den AVR bringen
Tools: AVRFlash oder UpdateLoader
Datei: stamp-monitor_hexrel-6.8.1.hex
Anmerkung: Zu jedem Monitor gehört ein passendes BIOS. Dieses ist auf 
die SD-Card zu kopieren.

Schritt 3
BIOS auf die SD-Card kopieren
Datei: cpm3_0.6.8-23.sys

Schritt 4
CP/M Laufwerke als Image auf die SD-Card kopieren
Datei:   cpm3_a.dsk
cpm3_b.dsk
cpm3_c.dsk

Schritt 5
Environmentvariable im Monitor setzen (Beispiel)

attach_drives=at dsk0 1:/cpm3_a.dsk;at dsk1 1:/cpm3_b.dsk;at dsk2 
0:/cpm3_c.dsk;at dsk3 1:/z180-stamp-cpm3-bios.dsk;at dsk4 1:/z180.dsk
baudrate=115200
bootcmd=reset; loadc; run attach_drives; go ${startaddress}
bootdelay=3
cpm3_commonbase=f000
cpm3_file=1:/cpm3_0.6.8-23.sys
cpm3_scb=1e800
esc_char=0x40
pin_alias=0:PG5,1:PG4,2:PB4,3:PB5,4:PB6,5:PB7,6:PG3,7:PG2,8:PG1,9:PG0,10 
:PE7
singlestep=1
startaddress=ad00
test_fat=fatstat 0:; fatls 0:
test_sd=sd status 0; sd init 0; sd info 0

Schritt 6
AVR neu booten

=========================<  (RE)START DEBUG  >=========================
### Reset reason(s): External.

ATmega1281+Z8S180 Stamp Monitor - Version: 0.6.8

### main_loop entered: bootdelay=3

### main_loop: bootcmd="reset; loadc; run attach_drives; go 
${startaddress}"
Hit any key to stop autoboot:  0
CPU now in reset state.
Loading: '1:/cpm3_0.6.8-23.sys'...

 BNKBIOS3 SPR  F900  0500
 BNKBIOS3 SPR  AD00  4300
 RESBDOS3 SPR  F300  0600
 BNKBDOS3 SPR  7F00  2E00

 60K TPA
Loaded: Resident: 0x1E300-0x1EDFF, Banked: 0x07F00-0x0EFFF
## Starting application at 0xad00 ...
=>

Schritt 7
Ausgabe am CP/M – Terminal

CP/M Version 3.0, Z180-Stamp BIOS v0.6.8-23
Estimated CPU clock [Hz]: 18432000
sdio: SD Card driver
cfio: CompactFlash Memory Card driver
    Model: PQI IDE DiskOnModule, S/N: DOM3C00004268, Rev: 060729DA
    Size: 256000 Sectors (128000 KiB)
    I: CP/M partition at: 2048, size: 8192KiB
    J: CP/M partition at: 18432, size: 8192KiB
    K: CP/M partition at: 34816, size: 8192KiB
    L: CP/M partition at: 51200, size: 8192KiB
A>

: Bearbeitet durch User
von Harald N. (haraldn)


Lesenswert?

Vielen Dank!
Dann kann ich am Wochenende meine Hardware testen!

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Das Fileformat für die einzelnen CP/M Image Dateien entspricht dem 
Disk-DH Format des SIM Altair Z80 Simulators [1]. Somit kann dieser als 
Tool zum Erstellen und auch Testen der Image Dateien verwendet werden. 
Natürlich sind auch die beliebten CP/M-Tools [2] oder unter Windows der 
Total Commander [3] möglich. Hier ist jedoch noch ein Plugin [4] für die 
Behandlung von CP/M Dateien notwendig.

[1] https://schorn.ch/altair.html
[2] http://www.moria.de/~michael/cpmtools/
[3] https://www.ghisler.com/deutsch.htm
[4] http://hc-ddr.hucki.net/wiki/doku.php/cpm/disketten_xp2


Fileformat

# SIMH AltairZ80 Harddisk
diskdef simhd
  seclen 128
  tracks 2048
  sectrk 32
  blocksize 4096
  maxdir 1024
  skew 0
  boottrk 6
  os 2.2

von Harald N. (haraldn)


Lesenswert?

Vielen Dank!
Beim Betrachten deiner Fotos ist mir gerade aufgefallen, dass ich die 
Module falsch herum auf das ECB gesteckt habe - intuitiv mit Schrift 
unten ohne nachzudenken. Ich hoffe ich habe da nichts abgeschossen....
Kanns kaum erwarten endlich die Stamps in Betrieb zu nehmen.

von Harald N. (haraldn)


Lesenswert?

Hallo!
Das Board läuft zumindest mal.
Bootet von SD, memtest war ok
Es funktioniert aber nur wenn ich den ISP programmer auch anstecke??????
Auf welcher Konsole sollte sich cpm melden? Muss ich da noch 
irgendwelche jumper setzen. Mit gnd, TX, rx auf con0 geht zumindest mal 
nichts.....

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Super, Glückwunsch!

Ein angesteckter ISP deutet auf fehlerhafte Stromversorgung. Wird dein 
Bord korrekt über USB oder eine externe Versorgung mit 5V/3.3V versorgt?

Auf dem ECB-Board sind nochmals zwei serielle Schnittstellen CON0 und 
CON1.   Damit der Schnittstellentreiber (MAX3241) aktiv ist, darf JP5 
nicht geschlossen sein. CON0 ist eine voll ausgebaute RS232 
(Handshakeleitungen) CON1 reduziert. In dem BIOS, welches ich dir zur 
Verfügung gestellt habe ist für die CP/M Konsole CON1 mit 115 kBaud 
eingestellt (kann später alles geändert werden).

von Harald N. (haraldn)


Lesenswert?

Ich will das Board über USB versorgen. Allerdings läuft es dann nicht 
an. Als ich den Programmer angesteckt habe, hat alles funktioniert 
(flashen, Firmware updaten, etc). Ich dachte mir, dass vlt der Strom 
eines USB Ports nicht reicht....
Auf CON1 kommt jetzt was. Allerdings nur Kauderwelsch (die Baudrate 
stimmt).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.