You are not logged in.

2 User bekommen noch Ware von Celicafreak !

Ihm sind die Mails abhanden gekommen. Wer sich angesprochen fühlt, meldet sich bitte umgehend bei ihm, alternativ vermittle ich.

C64doc

Crass Spektakel

Unregistered

1

Friday, July 7th 2006, 5:34am

OpenCBM Laufwerksadresse ändern

Ich betreibe zwei verschiedene Laufwerke an meinem C64, hänge sie aber manchmal an den PC daneben. Wie kann ich nun mit OpenCBM einigermassen elegant die Adresse eines Laufwerkes ändern?

Normalerweise geht das am C64 mit

PRINT# 15, "M-W" CHR$(119) CHR$(0) CHR$(2) CHR$(ADDRESS+32) CHR$(ADDRESS+64)

nur versucht das mal bei cbmctrl command als Parameter zu übergeben... spätestens die Nullen kann ich nicht mehr eintippen. Also müßte ich theoretisch eine Datei mit einem Hexeditor erstellen... alles sehr unkomfortabel. Oder gibts da eine andere Lösung? Falls nicht würde ich mich sehr freuen wenn cbmctrl einen parameter "change address" ab der Version 0.4.1 bekommt.

Noch ein Punkt: Auf meinem C64 daheim besitze ich ein uraltes Kopierprogramm welches bei mehreren aktiven Laufwerken mit Adresse 8 automatisch neue und einmalige Laufwerksnummern verteilt. Ich habe das mit bis zu drei Laufwerken (2x1541, 1x1581) auf einmal getestet und dabei nur gute Erfahrungen gemacht. Dabei bekam die 1541 nahe dem C64 die #10, die 1581 danach die #9 und die 1541 am Ende die #8. Interessant dabei war daß das Programm mit einer 1581 ansonsten überhauptnicht umgehen konnte, die Adresse änderte es jedoch noch ohne Murren.

strik

Floppy-Bastler

  • "strik" is male

Posts: 1,436

Date of registration: Dec 2nd 2004

Location: OEB

  • Send private message

member since 60 month member since 60 month member since 60 month member since 60 month member since 60 month

2

Friday, July 7th 2006, 10:19am

RE: OpenCBM Laufwerksadresse ändern

Hallo,

Quoted

Original von Crass Spektakel
nur versucht das mal bei cbmctrl command als Parameter zu übergeben... spätestens die Nullen kann ich nicht mehr eintippen. Also müßte ich theoretisch eine Datei mit einem Hexeditor erstellen... alles sehr unkomfortabel. Oder gibts da eine andere Lösung? Falls nicht würde ich mich sehr freuen wenn cbmctrl einen parameter "change address" ab der Version 0.4.1 bekommt.

Ist schon geplannt (http://sourceforge.net/tracker/index.php…047&atid=692222) bzw. sogar im CVS schon implementiert (seit v0.4.0.13, 7.6.2006). Wird also in der nächsten Version vorhanden sein.

Bis dahin mußt du dir tatsächlich mit einer Datei behelfen, tut mir leid.

Quoted


Noch ein Punkt: Auf meinem C64 daheim besitze ich ein uraltes Kopierprogramm welches bei mehreren aktiven Laufwerken mit Adresse 8 automatisch neue und einmalige Laufwerksnummern verteilt.

Hm... Ich habe zwar schon mal gelesen, wie so etwas gehen müßte, allerdings müßte ich für die dort vorgeschlagenen Algorithmen einen besseren physikalischen Zugriff auf die Leitung haben, scheidet beim CBM IEC-Bus also leider aus.

Wenn mir jemand einen vernünftigen Algorithmus nennen kann, wie das klappen könnte, würde ich das gerne implementieren.

Gruß,
- Spiro.

Crass Spektakel

Unregistered

3

Sunday, July 9th 2006, 7:02am

Nachdem ich eine Stunde lang erfolglos nach dem alten Kopierprogramm gesucht have mag ich nicht mehr :-) Nach fast zehn Jahren weis ich einfach nicht mehr wonach ich suchen muß oder ob ich es überhaupt noch habe.

My 2 cent:

Solange alle Laufwerke am Bus die gleichen Adressen haben müßte man mit einem M-W "eigentlich" auch immer mehrere Laufwerke mit kleinen Routinen beschicken können. Die Kommunikation Rechner zu "mehrere Laufwerke mit gleicher Adresse" klappt ja soweit. Nur "mehrere Laufwerke mit gleicher Adresse" zu Rechner geht in die Hose. Habe ich gerade kurz getestet mit drei Laufwerken auf #8 und mit open1,8,15,"n:disk,00", alle Laufwerke formatieren aber Status abfragen ist halt nicht.

Ich würde nicht versuchen über Timing oder Hardware-Glitches eine eindeutige Adresse zu vergeben. Stattdessen würde ich stochastisch an die Sache rangehen:

1. Erstmal erwürfelt sich jedes Laufwerk eine zufällige "Platzhalter"-Adresse - hier spricht nichts gegen IEC-untypische Adressen wie z.B. 127-255.

2. Dann wartet das Laufwerk eine zufällige Zeit mit Maximum n und fragt auf dem Bus nach ob diese Adresse eindeutig ist.

3. Falls nein, zurück zu 2.

4. Wenn nach n*2 Zeit kein Einspruch erfolgt wird die Adresse offiziel als belegt verkündet

4. Wenn nach n*2 Zeit keine Anfragen mehr auf dem Bus erfolgen kann man davon ausgehen daß alle Laufwerke eindeutige Nummern haben.

5. Ermitteln wieviele Laufwerke am Bus hängen - ab jetzt macht das am Besten der Computer und nicht die Laufwerke ;-)

6. Der Reihe nach durchnummerieren auf dem "normalem" IEC-Adressraum #8 und aufwärts. Sozusagen eine Normalisierung des Adressraums mit Start 8 und Schrittweite eins basierend auf der vorherigen Verteilung mit Start 127 und Schrittweite Zufall.

Nachteil: Die Laufwerke sind dann wirklich zufällig nummeriert, d.h. die Reihenfolge kann sich nach jedem Neustart ändern. Da Floppylaufwerke am C64 keinen Unique-Identifier haben wäre alles andere ein ziemliches gestochere im Nebel.

Alternative zu 6.: Jedes identifizierte Laufwerk läßt kurz die Lampe leuchten und auf dem Client wird die gewünschte Nummer erfragt. Das sollte schneller als die meisten Alternativen gehen.

Alternative wäre wohl nur eine Laufzeitmessung des IEC-Signals und ich hab da meine Zweifel ob sowas zuverlässig meßbar wäre in einem Verbund von 1Mhz Komponenten.

Oder eine Analyse von gezieltem Fehlverhalten, ist der IEC-Bus High- oder Low-Activ? Wenn man z.B. am C64 ein Signal setzt und es gezielt in jedem Laufwerk mit einem invertiertem Gegensignal beantwortet dann müßte das weiter hinten in der Kette zu einem unterschiedlichem Signalverlauf führen und obwohl sich das Laufzeitverhalten wohl nicht messen läßt so dürften sich Pegelwechsel doch einigermassen erkennen lassen.

Oder noch einfacher, das Laufwerk wird angewiesen seine Adresse zu ändern, das Laufwerk tut dies und sendet eine zufällige Zahl an den Rechner zurück, der Rechner muß diese Zahl beantworten ansonsten ändert das Laufwerk seine Adresse zurück. Somit werden zwar mehrere Laufwerke den Befehl erhalten und ihre Adresse ändern aber nur "das lauteste" Laufwerk behält diese Änderung dann auch. Das dürfte die einfachste Lösung sein wobei ich befürchte daß das mit Störungen am Bus auch die unzuverlässigste ist.

strik

Floppy-Bastler

  • "strik" is male

Posts: 1,436

Date of registration: Dec 2nd 2004

Location: OEB

  • Send private message

member since 60 month member since 60 month member since 60 month member since 60 month member since 60 month

4

Sunday, July 9th 2006, 10:12am

Hallo,

Quoted

Original von Crass Spektakel
Ich würde nicht versuchen über Timing oder Hardware-Glitches eine eindeutige Adresse zu vergeben. Stattdessen würde ich stochastisch an die Sache rangehen:

Ich habe mir das mal aufgeschrieben, so richtig gefallen mir die Lösungen allerdings nicht; sie erscheinen mir zu unsicher.

Übrigens: 3. soll wohl heißen: Zurück zu 1.
Und: 4. kommt zweimal vor. :)

Eine andere Alternative wäre natürlich, eine Nummer zufällig auszuwürfeln und dann das "Binary Countdown Protocol" auszuführen (wie z.B. beim CAN-Bus benutzt).

Ich frage mal anderweitig nach, ob noch jemand andere Ideen dazu hat.

Gruß,
- Spiro.

This post has been edited 1 times, last edit by "strik" (Jul 9th 2006, 10:32am)


mc71

Professional

Posts: 849

Date of registration: Nov 30th 2005

Location: ja...

  • Send private message

member since 48 month member since 48 month member since 48 month member since 48 month

5

Sunday, July 9th 2006, 12:46pm

Spannendes Thema, und ich würde mich nicht wundern wenn es tatsächlich irgendwie ginge- auf den ersten Blick scheintmir der Bus aber einfach zu kurz zu sein, als daß man die physikalische Position des Devices herausfinden könnte. Da müßten schon die Stecker und Buchsen so stark korrodiert sein, daß man nennensweret Widerstände oder Rauschen bekommt...

Andere Überlegung:

So ein Mechanismus macht doch vor allem in enem System Sinn, in dem ale Drives hardwaremäßig auf #8 stehen. Sonst könnte ichj ja direkt eindeutige Nummern einstellen.

- Ich lade also das Copyprogramm von Disk- damit das funktioiert, muß erstmal alles außer einem Drive ausgeschaltet sein.

- Jetzt starte ich das Programm- es stellt das einzig aktive #8 auf -sagen wir- #9 und blinkt zur Bestätigung mit der Laufwerkslampe.

- Ich schalte das zweite Drive ein- das ist wieder #8

- Mein Programm stellt es auf die nächste freie Nummer- blinkt mit der Lampe.

- Ich schalte die letzte Floppy ein, die meinethaben auf #8 bleiben kann.

Die Erkennung, wann ein neues Laufwerk eingeschaltet wurde, kann übers normale IEC-Protokoll erfolgen, ich habe als Nutzer keinen Mehraufwand, notfalls kann man sogar einen Time-Out einbauen als Erkennung, wann alle Laufwerke an sind.

strik

Floppy-Bastler

  • "strik" is male

Posts: 1,436

Date of registration: Dec 2nd 2004

Location: OEB

  • Send private message

member since 60 month member since 60 month member since 60 month member since 60 month member since 60 month

6

Sunday, July 9th 2006, 4:10pm

Quoted

Original von mc71
Spannendes Thema, und ich würde mich nicht wundern wenn es tatsächlich irgendwie ginge- auf den ersten Blick scheintmir der Bus aber einfach zu kurz zu sein, als daß man die physikalische Position des Devices herausfinden könnte. Da müßten schon die Stecker und Buchsen so stark korrodiert sein, daß man nennensweret Widerstände oder Rauschen bekommt...

Ich weiß, dass ich dazu mal ein Paper gesehen hatte (welches ich aber zur Zeit nicht finde). Hier ging es sogar gänzlich ohne Koordinator. Ich muss das Paper nochmal irgendwo herausfinden um festzustellen, ob es auf den CBM-Bus übertragbar ist. Ich denke aber nicht, weil schon minimalste Laufzeitunterschiede festgestellt werden müssen; das dürfte die 1541 mit ihrem 6502 und der Latenz beim Pollen wohl kaum schaffen können.

Deine andere Idee wäre natürlich für den Notfall auch etwas. Mir würde aber eine vollautomatische Lösung besser gefallen. :)

Gruß,
- Spiro.

strik

Floppy-Bastler

  • "strik" is male

Posts: 1,436

Date of registration: Dec 2nd 2004

Location: OEB

  • Send private message

member since 60 month member since 60 month member since 60 month member since 60 month member since 60 month

7

Monday, July 17th 2006, 9:16am

RE: OpenCBM Laufwerksadresse ändern

Quoted

Original von Crass Spektakel
Normalerweise geht das am C64 mit

PRINT# 15, "M-W" CHR$(119) CHR$(0) CHR$(2) CHR$(ADDRESS+32) CHR$(ADDRESS+64)

nur versucht das mal bei cbmctrl command als Parameter zu übergeben... spätestens die Nullen kann ich nicht mehr eintippen.

Auf Wunsch kann ich eine neue Version von cbmctrl zur Verfügung stellen, mit der die obigen Zeile so eingegeben werden kann:

cbmctrl command 8 M-W 119 0 2 41 73

oder auch

cbmctrl command 8 M-W%77%00 2 0x29 0x49

(für Laufwerk 9). Falls du das wünscht, schreib mir einfach eine e-Mail.

Gruß,
- Spiro.

This post has been edited 1 times, last edit by "strik" (Jul 17th 2006, 9:17am)