|
 |
XS1541 - universal serial adapter for CBM Floppy |
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
 |
|
| XS1541 - universal serial adapter for CBM Floppy |
 |
Falls man zuhause noch ein altes Commodore Floppy Laufwerk stehen hat, kann man mit diesem Adapter vom PC aus direkt auf die Floppy zugreifen. Dabei werden sowohl die alten Geräte mit parallelen IEEE-488 Bus als auch die neueren mit seriellen IEC Bus unterstützt. Auch Floppy mit Speed-Dos Kabel werden von dem Adapter unterstützt.
Hardware
Die Verbindung des XS1541 Adapter zum PC erfolgt entweder über einen seriellen Port (RS232) oder USB. Damit ist der Adapter einfacher an moderne PC's anzuschliessen, wo oft der Druckerport fehlt oder durch das Betriebssystem schwer zugänglich ist.
Die Kosten für den Adapter sind sehr gering und er ist einfach aufzubauen. Das Kernstück ist ein Atmel Controller Mega32. Es kann wahlweise nur der serielle IEC Bus oder nur der parallele IEEE-488 verdrahtet werden. Der Adapter kann auch gleichzeitig auf beide Bus System zugreifen, dh. der PC kann zB. gleichzeitig eine 1541 und eine 8050 ansteuern.
Software
Die 'Software' für den Adapter ist im Mega32 Controller gespeichert. Am PC benötigt man nichts als ein Terminal Programm wie zB. das Hyper Terminal, das bei jedem Windows PC dabei ist.
Aufbau
Zum Aufbau benötigt man folgende Dinge:
- Einen Mega32 Controller und Kleinteile im Wert von ein paar Euros (Quarz, Kondensatoren, Lochraster). Für die weniger ambitionierten Bastler tut es auch ein fertiges Mega32 Board um 15€.
- Optional ein paralleles IEEE-488 Kabel. Das Kabel wird in der Mitte durchschnitten und die Drähte an den Mega32 angelötet.
- Optional ein serielles IEC Kabel um 3€. Das Kabel wird in der Mitte durchschnitten und die Drähte an den Mega32 angelötet.
- Optional ein paralleles Flachbandkabel (Speed-Dos) das an den Mega32 angelötet wird.
Falls man bereits einen XA1541 Adapter hat, kann man den selbstverständlich verwenden indem man eine 25 poligen SUB-D Buchse verwendet. Der XA1541 (oder XAP1541) kann so alternativ wie bisher direkt mit einem PC verbunden werden oder am XS1541 Adapter betrieben werden.
Mit einem XAP1541 Adapter hat man gleichzeitig den seriellen IEC Bus und das Speed-Dos parallel Kabel angeschlossen. Die Bilder zeigen genau diese Lösung (XS1541 über SUB-D and XAP1541).
Der XAP-1541 Adapter ist eine Erweiterung eines Standard XA-1541 mit einem parallel Kabel Anschluss (SUB-D 15 Buchse) nach der Bauanleitung von Joe Forster: XAP-1541 cable combo
Durch die parallele Erweiterung taugt die Lösung auch als Nibble Copy. Es kann jede parallele Standardlösung verwendet werden wie SpeedDos oder DolphinDos Laufwerke.
Alternativ zu einer seriellen Verbindung zum PC kann man noch eine USB Bridge zwischen PC und XS1541 schalten. Der Vorteil von USB liegt auf der Hand, moderne PC oder Laptops haben oft nur noch USB und zudem übernimmt der USB Adapter nauch noch die Stromversorgung des Mega32 Controller.
Der Schaltplan ist auch im Quellformat beigelegt, sodass ihn jeder nach Bedarf anpassen kann. Das Dateiformat ist für den Abacom sPlan v6, für den es auch einen kostenlosen Viewer gibt.
Die Software ist in Entwicklung und steht zur Zeit nur für parallel IEEE-488 Geräte zur Verfügung.
Diddl hat diese Bilder (verkleinerte Versionen) angehängt:
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
23.06.2008 20:09 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Hier die Beschreibung der Befehls Syntax. Im Anhang befindet sich immer die aktuelle Firmware.
have fun!
Befehls Syntax
Die Befehle können direkt im Terminal Programm eingegeben werden und werden direkt vom Controller ausgeführt. Dadurch ist man komplett unabhängig von der Hardware. Das funktioniert auf jedem PC, unter Windows, Linux oder Apple OS, es muß nicht mal ein PC sein.
Optional kann natürlich auch ein Programm am PC erstellt werden, mit dem man komfortabel auf den XS1541 Adapter zugreifen kann. Dazu kann man jede beliebige Programmiersprache benutzen, die auf den seriellen Port zugreifen kann.
Einige Befehle kontrollieren direkt das Protokoll oder sogar die Portleitungen. Diese "low level" Befehle sind zum Test des Adapter bzw. für PC Programme gedacht.
Einige Befehle sind noch nicht fertig implementiert, aber die Syntax wird wie beschrieben funktionieren. Für sinnvolle Verbesserungsvorschläge habe ich ein offenes Ohr.
Jeder Befehl hat einen Mussteil und einen Kannteil. Der Kannteil kann ganz oder teilweise weggelassen werden. Der Kannteil steht in rechteckigen Klammern. Manche Befehle haben mehrere Kürzel.
h[elp]
Listet alle Befehle die in der Firmware des Controller implementiert sind. Es kann 'h', 'he', 'hel' oder 'help' eingegeben werden.
iee[e]
Der aktive Bus wird zum parallelen IEEE-488 Bus geschalten. Alle Nachfolgenden Befehle (außer IEC) beziehen sich nun auf den IEEE-488 Bus. Dieser Modus ist die Standard Einstellung nach einem Controller Reset.
iec
Der aktive Bus wird zum seriellen IEC Bus geschalten. Alle Nachfolgenden Befehle (außer IEEE) beziehen sich nun auf den IEC Bus.
dev[ice] oder #
Damit wird die aktive Gerätenummer des aktiven Bus festgelegt oder abgefragt. Wenn dem Befehl folgt ein numerischer Parameter folgt wird die Gerätenummer gesetzt. Der Befehl alleine ohne Parameter listet die aktuelle Einstellung. Für beide Bus Systeme ist die voreingestellte Adresse nach einem Reset 8.
@
Dieser Befehl sendet einen befehl an die aktive Floppy (Befehlskanal 15) oder fragt den Fehlerkanal / Status ab wenn der Befehl alleine (ohne Parameter) gesendet wird.
dir[ectory] oder ca[talog] oder $
Listet das Verzeichnis der eingelegten Diskette. Als Parameter kann optional ein String mitgegeben werden. Das Format entspricht dem des Floppy DOS (load "$....",8). Bei Doppelfloppy sollte man als Parameter zumindest das Laufwerk (0 oder 1) mitgeben, sonst wird das Verzeichnis beider Laufwerke ausgegeben, was zu einem Fehler führt wenn nicht beide Laufwerke formatierte Disketten eingelegt haben.
filec[opy] oder fc *** noch nicht implementiert
Kopiert Dateien von Floppy zu Floppy. IEC zu IEEE oder umgekehrt ist möglich.
filed[ump] oder fd *** noch nicht implementiert
Erstellt einen Hexdump von einer Datei.
bac[kup] *** noch nicht implementiert
Erstellt eine Image Datei einer ganzen Diskette (d64, d72, d80, d81, d82). Die Image Datei wird per X-Modem Protokoll direkt auf die Festplatte des PC gespeichert.
res[tore] *** noch nicht implementiert
Schreibt eine Image Datei auf eine Diskette zurück (d64, d72, d80, d81, d82). Die Image Datei wird per X-Modem Protokoll vom PC zum Adapter übertragen.
lo[ad] *** noch nicht implementiert
Ladet eine Datei zum PC (P00, T64). Die Datei wird per X-Modem Protokoll direkt auf die Festplatte des PC gespeichert.
sa[ve] *** noch nicht implementiert
Schreibt eine Datei auf eine Diskette zurück (P00, T64). Die Datei wird per X-Modem Protokoll vom PC zum Adapter übertragen.
PROTOKOLL BEFEHLE
Ein Assembler Programmiererwird sich mit folgenden Befehlen gleich zuhause fühlen. Die Befehle spiegeln das IEEE-488 / IEC Protokoll von Commodore wieder. Die Namen sind angelehnt an das Commodore Kernel API.
li[sten]
Gerät zum 'Listener' erklären.
ta[lk]
Gerät zum 'Talker' erklären.
unl[isten]
Listen Modus beenden.
unt[alk]
Talk Modus beenden.
op[en]
Datei öffnen.
cl[ose]
Datei schliessen.
ba[sin]
Ein oder mehrere Bytes vom Bus lesen (vom Talker).
bs[out]
Ein oder mehrere Bytes zum Bus schreiben (zum Listener).
st
Die alt bekannte Status Variable ST. Nach Bus Operationen werden u.U. Bits in der Variable gesetzt. Durch das Lesen des Status mit diesem Befehl wird die Variable ST auf 0 zurückgesetzt.
Bit0=Timeout beim Lesen, Bit1=Timeout beim Schreiben, Bit6=EOI: letztes Byte wurde gesendet, Bit7="device not present error".
LOW LEVEL BEFEHLE
set[pin] oder sp
Der Befehl setzt einen Ausgang auf den Pegel high. Als Parameter muß ein gültiger Pin angegeben werden. Für den IEEE-488 Bus sind folgende Namen erlaubt: a[tn], d[av], e[oi], nr[fd], nd[ac].
res[etpin] oder rp
Der Befehl setzt einen Ausgang auf den Pegel low. Als Parameter muß ein gültiger Pin angegeben werden. Für den IEEE-488 Bus sind folgende Namen erlaubt: a[tn], d[av], e[oi], nr[fd], nd[ac].
listp[in] oder lp
Der Befehl listet den Zustand des aktiven Bus. Der momentane Zustand aller Signalleitungen wird angezeigt. Signalleitungen die den Pegel "high" haben werden mit Großbuchstaben und die mit dem Pegel low durch Kleinbuchstaben dargestellt.
__________________ Final Expansion,1541 Emulation,Meine Homepage
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Diddl: 23.06.2008 20:11.
|
|
23.06.2008 20:10 |
|
|
Midnight
Routinier
 
Dabei seit: 28.10.2005
Beiträge: 373
Herkunft: Bremen
 |
|
Als alter Retro-Freak wie mich klingt das ja mal sehr interessant!!!
Bin jedenfalls über den Fortschritt schon mal gespannt!
Danke und Gruß
Simon
|
|
23.06.2008 20:14 |
|
|
Malibann
Foren Gott
 

Dabei seit: 18.09.2004
Beiträge: 4.531
 |
|
Klingt gut , meinst du damit kann man auch andere IEEE-488 ( GPIB ) Geräte ansteuern ?
__________________ Mit freundlichen Grüßen Malibann
(falls ich es mal wieder vergessen habe)
|
|
26.06.2008 10:31 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Prinzipiell müßte es problemlos möglich sein. Die Grundbefehle sind alle da. Kannst auch gerne die Sourcen haben um da was zu erweitern.
Allerdings habe ich das IEEE-488 Protokoll nach Muster der CBM-8032 Rom Listings gemacht, also eventuell ist das nicht komplett oder CBM spezifisch.
Aber vor 25 Jahren haben wir in der HTL auch IEEE-488 Messgeräte und Netzgeräte an einen PET angeschlossen um automatisierte Messungen durchzuführen. Das hat sehr gut geklappt.
Von der Hardware ist meine Lösung einfach nur billig gemacht. Normal müssen hier diese speziellen IEEE driver rein (75 ... irgendwas) oder zumindest wie im PET so 74LS06 und diese tristate driverbausteine für die Daten. Auch Pull Up Widerstände habe ich eingespart (die Atmega internen gehen hier ncht).
Der Atmega kostet aber weniger als diese Driver, darum braucht man die Driver als "Schutz" wohl nicht. Das einzige ist der Strom. Mit den 20mA kann man bis zu maximal 3 Geräte betreiben. Lt. Spezifikation kann ein IEEE-488 Verbund ja viel größer sein ...
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
26.06.2008 12:38 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Code ist nun komplett bereinigt, der RAM Bedarf ist jetzt wieder ganz unten.
Jetzt kommt der Z-Modem Datei Download. Und zuletzt noch ganze Disketten Images ...
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
27.06.2008 14:16 |
|
|
Jan_Weber
Foren Gott
 

Dabei seit: 01.03.2003
Beiträge: 3.093
Herkunft: Köln
 |
|
Die GPIB-Bustreiber sind so ausgelegt, dass sie eine hohe Impedanz haben, wenn sie nicht mit Strom versorgt werden. Das ist wichtig, wenn mehr als zwei Geräte an einem Bus hängen und nicht immer alle eingeschaltet sind.
Hier ist ein Interface speziell für Messautomation inkl. LabView-Treibern:
http://lpvo.fe.uni-lj.si/gpib/
Jan
PS: Echt ein tolles Projekt, Diddl.
__________________ Ein paar Kayaktouren-Fotos von mir
|
|
28.06.2008 11:51 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Endlich funktioniert das Xmodem Protokoll mit dem Hyperterminal in Richtung PC zum Download von Dateien und später mal Disk Images! Das hat mich Nerven gekostet bis das lief.
Schön wäre halt noch Ymodem, dann würde man sich am PC die Eingabe des Dateinamen sparen.
Laut der Doku die ich gefunden habe, ist der einzige Unterschied zum Xmodem-1024-CRC dieser Block 0, der Informationen über die Datei enthält (Dateiname\0Dateilänge\0mod. Datum\0Attribut\0).
Aber irgendwas ist noch faul wei das HyperTerminal bleibt beim Block1 hängen? Ist da die Prüsummenberechnung für dne ersten Block anderst oder sonst noch eine Besonderheit beim Ymodem?
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
30.06.2008 09:20 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Es ist soweit, die letzte Funktion ist implementiert: Backup
Backup kopiert eine Disk in ein Emulator verträgliches Diskimage Format. Zur Zeit gehen aber nur D80, D82, D81 und D64. D81 und D64 konnte ich in Ermangelung eines passenden Laufwerks noch nicht testen.
Die Geschwindigkeit der seriellen Schnittstelle zum PC wurde auf 115K erhöht. Die Floppy ist zwar bei weitem nicht so schnell, aber wenn man nur die belegten Blöcke überträgt und die Diskette nicht voll ist, dann müssen leider auch die leeren Blöcke übertragen werden. Das liegt daran weil das Terminalprogramm am PC dumm ist und die Image Datei natürlich die volle Größe haben muss.
Syntax:
bu (oder backup) imagefiletyp drive option
Als Imagefiletyp gehen im Moment D80, D82, D81 und D64
Als drive geht 0 oder 1. Kann auch weggelassen werden dann wird 0 genommen.
Als Option geht all oder bam. Voreingestellt ist BAM wenn die Option weggelassen wird.
Ach ja, mit listbam oder lb kann man die BAM der Diskette ansehen ...
Viel Spass, falls es jemand testen kann. Für Feedback wäre ich dankbar!
.
Diddl hat diese Bilder (verkleinerte Versionen) angehängt:
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
13.07.2008 21:59 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Es ist Zeit für einen Zwischenstand: Nun gehen ALLE Commodore Floppy (außer der 1551).
Die seriellen Floppys gehen aber erst im langsamen IEC Modus.
Ich habe vor noch das parallele (SpeedDos) Kabel zu unterstützen und evt. den burst Modus der 1571/1581. Beim Backup fehlt auch noch die Unterstützung für die D71 und D81 Images.
Unterstützte Floppys:- 1541
- 1570 / 1571
- 1581
- 2030
- 4040
- 8050
- 8250
- SFD-1001
.
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
18.07.2008 09:09 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Es ist ein Hardware Redesign notwendig geworden.
Der Burst Modus der Floppy 1571 und 1581 ist extrem schnell. Alle 2µs ein Taktwechsel, da kommt mein AVR mit 14.745.600 Hz arg ins schwitzen.
Die Pinchange Interrupts des 644 sind genial, nur leider müssen alle anderen Interrupts (Uart, Timer) deaktiviert werden, sonst gibt alle paar tausend Zeichen Probleme.
Mit deaktivierten Interrupts kann man die Daten schlecht weiterreichen, dann kann man gleich auf die PinChange ISR verzichten und alles mit deaktivierten Interrupts (cli()) machen.
Das dumme ist nur, das man die Daten irgendwann weitersenden muss und die Floppy dann leerläuft. Wenn man gezielt die Zeiten nützt wo die Floppy auf die Hardware zugreift und von Diskette liest, dann kann man diese Verluste ziemlich minimieren. Aber es ist halt dann Floppy spezifisch und ziemlich unelegant.
Die Lösung ist die Verwendung des SPI. Damit hat man eine elegante und funktionable Problembehebung. Doch leider erfordert dies ein geändertes Anschluss Schema:
.
EDIT: Habe die SPI Idee fallengelassen. In der nächsten Generation von XS1541 gibt es eine µSD Karte und die braucht den SPI notwendiger.
.
Diddl hat dieses Bild (verkleinerte Version) angehängt:
__________________ Final Expansion,1541 Emulation,Meine Homepage
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Diddl: 05.08.2008 08:59.
|
|
30.07.2008 09:35 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Nun wird auch die fehlende 1581 Floppy zu 100% unterstützt.
Man kann den Laufwerkstyp beim Device Befehl (#) mitgeben. Dann beziehen sich alle Image Befehle automatisch auf D81 Image Dateien. Oder man gibt den Imagetype eben beim Befehl selbst mit:
#8 1581 (schaltet auf Gerät 8 und setzt den Gerätetyp auf 1581)
backup
[i]
listbam d81
backup d81
Die vorliegende HEX Datei ist für einen Mega644p compiliert. Bei Bedarf poste ich Versionen für andere ATmega (32, 324, 324p ...)
.
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
05.08.2008 09:05 |
|
|
Malibann
Foren Gott
 

Dabei seit: 18.09.2004
Beiträge: 4.531
 |
|
|
05.08.2008 09:37 |
|
|
Diddl
Routinier
 

Dabei seit: 17.07.2006
Beiträge: 497
Herkunft: Tirol
Themenstarter
 |
|
Im Forum 64 habe ich es schon gepostet. Sorry für Doppelpost aber ich denke dass hier in der Regel nicht dieselben Forum Benutzer sind.
Das zweite Forum (zock.com) kenne ich nicht.
__________________ Final Expansion,1541 Emulation,Meine Homepage
|
|
05.08.2008 15:22 |
|
|
|
|
|
 |
Impressum
|