Dateien zu meinem Buch
Willkommen > XS1541

XS1541

Das XS1541 ist eine Datentransfermöglichkeit PC <-> IEC/IEEE Gerät. Am PC wird dazu nuch ein Terminalprogramm benötigt (XModem für Transfers).
(115k 8N1)

Beispiele (siehe Doku):
iec - schaltet auf IEC um
$ = Directory
@ = Fehlerkanal auslesen
he = Hilfe
...

Die IEC/IEEE Kommunikation erledigt ein AVR (ATmega644P / 1284P). Außer dem AVR mit Quarzbeschaltung (14,7456 MHz) wird nur noch ein IEC/IEEE Anschlus und ein USB TTL Dongle benötigt. Daher leicht nachzubauen. Leider ist der Entwickler Thomas Winkler 'verschwunden' und der Diskttransfer auf Floppy ist noch nicht implementiert. Source ist im ZIP (und fertiges HEX) - AVR GCC.

XS1541.zip


Bildschirm:


Schaltplan:


Lochrasteraufbau:


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.


Jeder Befehl hat einen [b]Mussteil[/b] und einen [b]Kannteil[/b]. 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.


co[nfig] obj [par1] [par2] ...

Dient zur Konfiguration der Grundeinstellungen. Als <obj> kommen folgend Schlsselworte zum tragen:


config LED p1# [p2#]

Der Parameter LED steuert die Funktion der Board LED. Wird EIN numerischer Parameter angegeben, dann wird die Gundfunktion eingestellt: 0=LED aus, 1=LED ein, 2=auto

Werden zwei numerische Parameter angegeben kann man das Pulse/Pausen Verh„ltnis des Blinken der LED einstellen. Die Parameter geben hundertstel Sekunden an.

Beispiele

config led 1

LED einschalten.

co led 0

LED ausschalten.

co led 2

LED blinkt. Im IEEE Modus blinkt die LED gleichm„áig (30/30). Im IEC Modus ist die LED nur kurz hell (10/90).

co led 20 80

LED blinkt. Die erste Zahl ist die Zeit in hundertstel Sekunden fr die Hellphase. Die zweite Zahl ist die Zeit fr die Dunkelphase.


config ECHO p1#

Der Parameter ECHO steuert die Echo Funktion der Eingabeschleife. Ein numerischer Parameter 0 schaltet das Echo aus. Alle anderen Zahlen schalten das Echo ein, dann werden alle eingegebenen Zeichen zum Terminal zurck gesendet


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 # [d#]
[floppy-typ]

Damit wird die aktive Ger„tenummer und der Floppy Typ des aktiven Bus festgelegt oder abgefragt. Dem Befehl folgt ein numerischer Parameter (Ger„tenummer 8 - 12) und/oder ein Floppytyp. Der Befehl alleine ohne Parameter listet die aktuelle Einstellung. Fr beide Bus Systeme ist die voreingestellte Adresse nach einem Reset 8.

Beispiele:

#9

setzt die Ger„tenummer 9.

#1571

setzt den Floppytyp 1571.

#10 1581

setzt die Ger„tenummer 10 und den Floppytyp 1581.



@

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.

Beispiele:

@

fragt den Fehlerkanal ab und zeigt den Floppystatus an

@I1

sendet den befehl I (inquire) and die Floppy (Laufwerk 1)

@N:TESTDISK,I2

formatiert die Diskette im Laufwerk, setzt den Namen "TESTDISK" und die ID "I2".


res[et]

Wenn auf IEC gestellt ist, werden alle IEC Floppy zurckgesetzt indem die Reset Leitung fr 250ms auf low gesetzt wird.

Wenn auf IEEE gestellt ist, wird der Bus zurckgesetzt indem ein IFC gesendet wird.


loadm[c] oder lm[c] par1 [par2] ... [parn]

Laedt einen Maschinencode in den Floppy RAM. Als Parameter 1 kann ein Programmname oder eine Programm Startadresse eingegeben werden. Wird eine Startadresse angegeben folgen bis zu 32 Byte Werte die direkt per M-W Befehl in das Floppyram geschrieben werden.

Vielen Dank an das OpenCBM Team fuer den Democode Flash und Morse, es macht Spass diesen Code in die Floppy zu laden und damit rumzuspielen.

Beispiele:

lmc flash
@U3

L„dt den OpenCBM Demo Code "Flash" in die Floppy und fhrt in aus. Die LED in der Floppy 1541 oder 1571 beginnt rythmisch zu blinken, dabei wird die Helligkeit der LED sanft per PWM geregelt.

lmc morse
@U3:SOS

L„dt den OpenCBM Demo Code "Morse" in die Floppy und fhrt in aus. Die LED in der Floppy
morst den Text "SOS" ...

lmc $500 1 2 3

Beschreibt die Speicherzellen in der Floppy an der Adresse 0x500, 0x501 und 0x502 mit den Werten 1, 2 und 3.


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.

Beispiele:

$0

listet das Directory der Diskette im Laufwerk 0.

$1:A*

listet alle Dateien der Diskette im Laufwerk 1 die mit "A" beginnen.



filec[opy] oder fc  *** noch nicht implementiert

Kopiert Dateien von Floppy zu Floppy. IEC zu IEEE oder umgekehrt ist m”glich, aber auch von einem Ger„t zum anderen am selben Bus.



listb[am] oder lb  [all|bam] [slow|burst|parallel|s1|s2|warp] [drive] [imagetyp]

Liest die BAM der Diskette und zeigt die Mappe der belegten und freien Bl”cke an. Wichtig ist hier dass der Laufwerkstyp



bac[kup] oder bu [all|bam] [slow|burst|parallel|s1|s2|warp] [drive] [imagetyp]

Damit kopiert man eine ganze Diskette zum PC. Es wird eine Image Datei erstellt von einer  Diskette (.d64, .d72, .d80, .d81, .d82). Die Image Datei wird per Y-Modem Protokoll direkt auf die Festplatte des PC gespeichert. Als Laufwerk kann "D0" oder "D1" angegeben werden. Man w„hlt ob alle Bl”cke kopiert werden sollen [all] oder nur die Belegten [bam]. Fr jedes Laufwerk gibt es eine Standard Einstellung fr den Busverkehr, man kann aber ein bestimmtes Protokoll erzwingen [burst, parallel]. Natrlich nur wenn die Floppy das auch untersttzt.

Beispiel:

bu D0 d64 all burst

Kopiert eine Diskette im Laufwerk 0. Der Imagetyp ist D64. Es werden alle Bl”cke gelesen. Die šbertragung der Daten erfolgt im schnellen burst Modus.

bu

Erstellt ein Image der Diskette im Laufwerk 0. Gelesen werden nur belegte Bl”cke. Der Imagetyp ist der Standardwert fr das eingestellte Laufwerk (d64 bei 1541, d71 bei 1571, d81 bei 1581, d80 bei 8050, d82 bei 8250 und SFD1001).


res[tore]  *** noch nicht implementiert

Schreibt eine Image Datei auf eine Diskette zurck (d64, d72, d80, d81, d82). Die Image Datei wird per Y-Modem Protokoll vom PC zum Adapter bertragen.


dumpf[ile]oder df [filenam] [drive] [slow|burst|parallel|s1|s2|warp]

Erstellt einen Hexdump von der angegebenen Datei. Als Laufwerk kann "D0" oder "D1" angegeben werden. Fr jedes Laufwerk gibt es eine Standard Einstellung fr den Busverkehr, man kann aber ein bestimmtes Protokoll erzwingen [burst, parallel]. Natrlich nur wenn die Floppy das auch untersttzt.


Beispiele:

df "DATEI1" D1

erstellt einen HEX Dump der Datei "DATEI1" am Laufwerk 1.



dumpb[lock] oder db track# sector# [anz#] [drive] [slow|burst|parallel|s1|s2|warp]

Erstellt einen Dump von einem oder mehereren Bl”cken einer Diskette. Als Laufwerk kann "D0" oder "D1" angegeben werden. Fr jedes Laufwerk gibt es eine Standard Einstellung fr den Busverkehr, man kann aber ein bestimmtes Protokoll erzwingen [burst, parallel]. Natrlich nur wenn die Floppy das auch untersttzt.


Beispiele:

db 18 0

Liest den Block auf Spur 18 Sektor 0 und zeigt die Daten als Hex Dump an.

db 18 3 3 par

Liest die Bl”cke auf Spur 18 Sektor 3, 4, und 5 und zeigt die Daten als Hex Dump an. Gelesen werden die Daten ber das parallele SpeedDos Kabel (PARALLEL WIRD ERST IMPLEMENTIERT).



dumpn[ext] oder dn [slow|burst|parallel|s1|s2|warp]

Der Befehl liest den Folgeblock ein und zeigt die Daten an. Der Befehl funktioniert nur nach einem Dumpblock Befehl, natrlich auch mehrfach bis die Blockfolge zu Ende ist. Wird der Befehl Dumpblock ausgefhrt merkt sich die Firmware den Folgeblock. Die ersten beiden Bytes eines Blocks verweisen in der Regel auf den n„chsten (Spur/Sektor).

Beispiele:

db 18 1
dn
dn
dn



dumpt[rack] oder dt track# [interleave#] [drive] [slow|burst|parallel|s1|s2|warp]

Erstellt einen Dump von einer ganzen Spur einer Diskette. Man kann einen Soft Interleave erzwingen, es gibt aber Standard EInstellungen pro Floppytyp/Bustyp. Als Laufwerk kann "D0" oder "D1" angegeben werden. Fr jedes Laufwerk gibt es eine Standard Einstellung fr den Busverkehr, man kann aber ein bestimmtes Protokoll erzwingen [burst, parallel]. Natrlich nur wenn die Floppy das auch untersttzt. (DIESER BEFEHL WIRD GERADE IMPLEMENTIERT)


Beispiele:

dt 18

Liest alle Sektoren der Spur 18 Sektor 0 und zeigt die Daten als Hex Dump an.

dt 18 3 par

Liest die Spur 18 mit interleave 3 im parallelen Bus Modus. Weil der Mega 644 nur 4 KB RAM hat sind nur 13 Buffer vorhanden. Deshalb ist nicht jeder Interleave Blockaufsteigend zu machen. Wenn die Buffer ausgehen dann werden die Bl”cke in der falschen Reihenfolge gesendet (die Bl”cke kommen nicht mehr in strickt aufsteigender Reihe nach).



dumpm[em] oder dm

Erstellt einen Dump vom Floppyspeicher. Als Laufwerk kann "D0" oder "D1" angegeben werden. Fr jedes Laufwerk gibt es eine Standard Einstellung fr den Busverkehr, man kann aber ein bestimmtes Protokoll erzwingen [burst, parallel]. Natrlich nur wenn die Floppy das auch untersttzt.


Beispiel:

dm $a000 200

Erstellt einen HEX Dump des Floppy Speicher ab Adresse 0xa000 (40960) mit der L„nge von 200 Bytes.


[b]dow[nload][/b], [b]load[/b] oder [b]dl[/b] [filenam] [drive] [filetyp] [slow|burst|parallel|s1|s2|warp]

Erstellt einen Hexdump von der angegebenen Datei. Als Laufwerk kann "D0" oder "D1" angegeben werden. Die Datei wird per Y-Modem Protokoll zum PC bertragen und direkt auf die Festplatte gespeichert. Als Dateityp kann man PRG, T64 oder P00 angeben. Fr jedes Laufwerk gibt es eine Standard Einstellung fr den Busverkehr, man kann aber ein bestimmtes Protokoll erzwingen [burst, parallel]. Natrlich nur wenn die Floppy das auch untersttzt.


Beispiele:

dl "DATEI2" D0 P00 burst

Laedt die Datei "DATEI2" am Laufwerk 0 im P00 Format zum PC. Es wird der schnelle Burst Mode erzwungen.


upl[oad], sa[ve] oder ul [filenam] [drive] [filetyp] [slow|burst|parallel|s1|s2|warp]  *** noch nicht implementiert

Schreibt eine Datei auf eine Diskette zurueck (PRG, P00, T64). Die Datei wird per X-Modem Protokoll vom PC zum Adapter bertragen.


listf[iletypes] oder lft

Zeigt alle Dateitypen an (Image Dateien und Programmdateien.)



[b]PROTOKOLL BEFEHLE[/b]

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.


[b]li[sten][/b]

Geraet zum 'Listener' erklaeren.


[b]ta[lk][/b]

Geraet zum 'Talker' erkaeren.


[b]unl[isten][/b]

Listen Modus beenden.


[b]unt[alk][/b]

Talk Modus beenden.


[b]op[en][/b]

Datei oeffnen.


[b]cl[ose][/b]

Datei schliessen.


[b]ba[sin][/b]

Ein oder mehrere Bytes vom Bus lesen (vom Talker).


[b]bs[out][/b]

Ein oder mehrere Bytes zum Bus schreiben (zum Listener).


[b]st[/b]

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".




[b]LOW LEVEL BEFEHLE[/b]

[b]set[pin][/b] oder [b]sp[/b]

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].


[b]resetp[in][/b] oder [b]rp[/b]

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].


[b]listp[in][/b] oder [b]lp[/b]

Der Befehl listet den Zustand des aktiven Bus. Der momentane Zustand aller Signalleitungen wird  angezeigt. Signalleitungen die den Pegel "high" haben werden mit Grossbuchstaben und die mit dem Pegel low durch Kleinbuchstaben dargestellt.