Ich hoffe, das passt hier rein, wenn nicht bitte verschieben.
Bumps - woher weiß die 1541 eigentlich, wo die Spuren sind? Lichtschrankentechnik soll einfach "im Hintergrund einfach nur weiteres nach hinten Fahren unterbinde(n), wenn man schon »am Anschlag« ist."
Hier möchte ich mein Schaltungs-Design dazu vorstellen.
Ausgangspunkt ist, dass die Floppy 1541 die unteren beiden Bits PB1 und PB0 des Registers $1c00 nach dem Einschalten zunächst auf Input gestellt hat (= beide high , %11) und danach auf Output programmiert und %00 ausgibt. Diese beiden Bits werden wie ein Modulo-4-Zähler der physikalischen Kopfposition behandelt. Man kann davon ausgehen, dass in diesem Zeitpunkt die mechanische Position des Kopfes identisch mit der elektromagnetischen Ansteuerung "00" ist.
Wird nun ein Formatierbefehl gegeben, setzt das DOS-ROM einen Auftragszähler auf den Wert $A4, das ist im Zweierkomplement der Wert "minus 92", d.h. die Floppymechanik soll 46 * 2 = 92 physische Halbschritte = 46 ganze logische Spuren nach aussen fahren. Der aus PB1 und PB0 bestehende Zähler wird nun (im Interrupt) heruntergezählt und der Auftragszähler in der Zeropage inkrementiert (heraufgezählt) bis auf Null.
Die Bit-Sequenz am Port:
.... 11 - 10 - 01 - 00 ..
und wieder von vorn. Dies wird zyklisch 23 mal wiederholt, da 92 ohne Rest durch 23 teilbar ist. Stößt der Kopf dabei auf den Anschlag, tritt Schlupf ein und der Kopf wird bei einem der nächsten Schritte wieder "eingefangen". Nach 23maligen Durchlaufen obiger Sequenz steht die elektrische Ansteuerung wieder auf "00" und der Kopf sollte das auch tun.
Hier setzt mein Schaltungsvorschlag an. "Normalerweise" d.h. ausserhalb von Spur Null, sollen alle Signale die an PB1 und PB0 ausgegeben werden, unbeeinflusst an die Motortreiber weitergereicht werden.
Falls aber die Lichtschranke bemerkt hat, dass der Kopf bereits auf Spur Null steht, sollen alle weiteren Signale so beeinflusst werden, dass weiterhin nur noch Spur Null angesteuert wird, der Kopf also stehenbleibt - mit Ausnahme jener Bitkombination, die statt nach aussen (Richtung Anschlag) nach innen zu höheren Spuren hin führt. Denn der Kopf soll ja aus der Parkposition jemals wieder herausfinden!
Der Multiplexer, der das Herzstück meiner Schaltung darstellt, wird nun so umgeschaltet, dass die künftige veränderten Schaltsequenz so lautet:
00 - 00 - 01 - 00
... und das permanent, solange weiter nach aussen gesteppt wird.
Sobald die Lichtschranke aufmacht, kommt die 01 wieder von der ursprünglichen Schaltsequenz und es kann ganz normal weitergesteppt werden:
... 01 - 10 - 11 ...
Der Multiplexer ist eine Art ROM oder Lookup-Tabelle, wobei S1,S2 als Adresse fungieren und die Eingänge die 2-bit-Datenworte programmieren.
Um einem Laufwerk eine Lichtschranke für Spur Null einzubauen wenn noch keine drin war, hat Björn (JMP FEC2) schon eine ausgereifte Anleitung geschrieben. Mein Vorschlag baut darauf auf, versucht aber ohne Software-Änderung auszukommen.
Spur-0 Lichtschranke jetzt auch für ALPS Drive
Ich hoffe ich konnte es einigermaßen verständlich beschreiben und hoffe auf eine rege Diskussion.