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
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.
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
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".
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
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
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).
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
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:
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
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
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.
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?
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.>>
>
..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
> ..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:
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.
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.
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
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!
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.
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
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.
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.
..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
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:
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.
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
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.
(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.
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:
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).
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?
> 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
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.
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>
> 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
> 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.
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
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"
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.>
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
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
> 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.
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. :-)
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..
> 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 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
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.
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
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.
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
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 .|
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
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
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
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
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.
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
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 :-)
> 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.
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.
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
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
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.
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>
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 ;-)
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
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.
Ü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...
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.
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.
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
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.
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)
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
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.
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:
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
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.
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.
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...!
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 :-)
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.
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
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.
...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
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.
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.
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
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 :-)
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...
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.
...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
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.
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.
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.
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
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
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.
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.
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.
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.
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
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;
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;
...
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;
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...?
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.
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...
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.
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:
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...
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.
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 :-)
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.
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
> 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.
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.
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
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.
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
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
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"
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.
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?
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!
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.
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
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
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:
> 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"
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.
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...
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.:
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?
> 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.
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
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
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...
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
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
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
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
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 :-))
> 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, ... :)
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, ... :)
:-)
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
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).
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.
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
> - 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.
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.
> 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.
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
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...
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?
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.
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
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.
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.
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:-)
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. :-)
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
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.
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.
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)"]]
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 6AVR 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>
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
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.
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.....
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).
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).