This page (revision-8) was last changed on 03-Feb-2023 15:21 by Carsten Strotmann 

This page was created on 27-Dec-2010 14:50 by Carsten Strotmann

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
8 03-Feb-2023 15:21 67 KB Carsten Strotmann to previous
7 27-Dec-2010 15:18 57 KB Carsten Strotmann to previous | to last
6 27-Dec-2010 15:08 48 KB Carsten Strotmann to previous | to last
5 27-Dec-2010 15:06 48 KB Carsten Strotmann to previous | to last
4 27-Dec-2010 15:04 40 KB Carsten Strotmann to previous | to last
3 27-Dec-2010 14:59 30 KB Carsten Strotmann to previous | to last
2 27-Dec-2010 14:54 20 KB Carsten Strotmann to previous | to last
1 27-Dec-2010 14:50 11 KB Carsten Strotmann to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 634 added 190 lines
!!Teil 7
aus dem SPEEDY-Anwender-Handbuch Version 1.0 vom 17.10.1986 (c) 1986 Compy-Shop
!DIE BEFEHLE DER SPEEDY 1050
So, nachdem Sie nun mehr über die Einsprungadressen wissen, und bevor wird zum ROM-Listing kommen, hier nun nochmal alle Befehle der SPEEDY 1050 und ihre Anwendung.
KOMMANDO ist der Wert, der sich vor Aufruf der SIO - Routine ($E459) in der Speicherstelle $0302 befindet.
AUX1 und AUX2 entsprechen den Werten, die sich in den Speicherstellen $030A und $030B befinden. Bei einigen Befehlen werden AUX1 und AUX2 nicht benutzt und dürfen beliebige Werte annehmen.
Die Befehle sind im übrigen nicht nach den Hexadezimalnummern geordnet, sondern nach ihrer Funktion:
{{{
KOMMANDO: $52
FUNKTION: Sektoren lesen
AUX1: Sektornummer oder ROM-Adresse LOW BYTE
AUX2: Sektornummer oder ROM-Adresse HIGH BYTE
BESCHREIBUNG: Es werden je nach DENSITY 128 oder 256 Bytes gesendet. Sektoren 1-3 sind immer 128 Bytes lang.
KOMMANDO: $50
FUNKTION: Sektoren schreiben ohne Verify
AUX1: Sektornummer oder ROM-Adresse LOW BYTE
AUX2: Sektornummer oder ROM-Adresse HIGH BYTE
BESCHREIBUNG: Das Laufwerk erwartet je nach DENSITY 128 oder 256 Bytes. Sektoren 1-3 sind immer 128 Bytes lang.
KOMMANDO: $57
FUNKTION: Sektoren schreiben mit Verify
AUX1: Sektornummer oder ROM-Adresse LOW BYTE
AUX2: Sektornummer oder ROM-Adresse HIGH BYTE
BESCHREIBUNG: Das Laufwerk erwartet je nach DENSITY 128 oder 256 Bytes. Sektoren 1-3 sind immer 128 Bytes lang.
KOMMANDO: $53
FUNKTION: Laufwerkstatus
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Das Laufwerk sendet 4 Bytes (zur Adresse $02EA-$02ED), die den Status der letzten Diskettenoperation beinhalten.
Byte 1: Drive Status
Bit 0 - COMMAND FRAME ERROR
Bit 1 - CHECKSUM ERROR
Bit 2 - OPERATION ERROR
Bit 3 - WRITE PROTECT
Bit 4 - MOTOR ON
Bit 5 - DOUBLE DENSITY
Bit 6 - unbenutzt
Bit 7 - DUAL DENSITY
Byte 2: Controller Status
Bit 0 - BUSY
Bit 1 - DRQ
Bit 2 - LOST DATA
Bit 3 - CRC ERROR
Bit 4 - RECORD NOT FOUND
Bit 5 - RECORD TYPE
Bit 6 - WRITE PROTECT
Bit 7 - NOT READY
Byte 3: Time-Out Wert für Format Disk ($E0)
Byte 4: unbenutzt (immer 0)
KOMMANDO: $21
FUNKTION: Formatiere Diskette (SINGLE/DOUBLE DENSITY)
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Dieses Kommando wird benutzt um Disketten in SINGLE- oder DOUBLE-DENSITY (720 Sektoren) zu formatieren. Das DENSITY-Format wird durch einen vorherigen $4F-Befehl (Laufwerkskonfiguration) eingestellt. Wird das Laufwerk nach dem Einschalten nicht konfiguriert, wird automatisch in SINGLE-DENSITY formatiert. Das Laufwerk sendet nach dem Formatieren je nach DENSITY 128 oder 256 Bytes an den Computer. Die ersten zwei Bytes müssen immer $FF sein.
KOMMANDO: $22
FUNKTION: Formatiere Diskette (MEDIUM DENSITY)
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Dieses Kommando wird benutzt um Disketten in DUAL-DENSITY (MEDIUM = 1040 Sektoren) zu formatieren. Es werden immer 128 Bytes zum Computer gesendet. Die ersten beiden Bytes müssen immer $FF sein.
KOMMANDO: $20
FUNKTION: Automatisches Formatieren
AUX1: Konfigurationsbyte
AUX2: nicht benutzt
BESCHREIBUNG: Dem Laufwerk wird nur der Befehl zum Formatieren gegeben. Es wird sofort ein 'Complete' zurückgesendet. Mit diesem Befehl können alle drei Formate, abhängig vom Konfigurationsbyte ($00=SINGLE, $20=DOUBLE, $80=MEDIUM) generiert werden. Ein Write-Protect wird sofort zurückgemeldet.
Fehler beim Formatieren können dem Computer nicht gemeldet werden, da keine Daten nach Befehlsausführung zurückgesendet werden. Der Formatierungsvorgang und eventuelle Formatierungsfehler können auf dem Display verfolgt werden. Abhängig vom Drive/Display-Status Befehl wird nach dem Formatieren automatisch die VTOC (DOS 2.5 kompatibel) und 3 Bootsektoren geschrieben.
KOMMANDO: $3F
FUNKTION: SIO-Geschwindigkeitsbyte ermitteln
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Es wird ein Byte zum Computer gesendet, das die HIGH SPEED Übertragungsgeschwindigkeit beinhaltet. Dieses Byte wird für die HIGH SPEED SIO-Routine benötigt und beträgt bei der SPEEDY 1050 normalerweise $09.
KOMMANDO: $4E
FUNKTION: Laufwerkskonfiguration auslesen
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Es werden 12 Bytes der Konfigurationstabelle zum Computer gesendet. Die Bedeutung der einzelnen Bytes sind:
Byte 1 - Anzahl der Tracks (immer 40)
Byte 2 - Step Rate (immer 1)
Byte 3 - Sektoren pro Track HIGH (immer 0)
Byte 4 - Sektoren pro Track LOW (18 oder 26)
Byte 5 - Anzahl der Köpfe (immer 0)
Byte 6 - Aufzeichnungsformat (0=FM/4=MFM)
Byte 7 - Bytes pro Sektor HIGH (1=256/0=128)
Byte 8 - Bytes pro Sektor LOW (0=256/128=128)
Byte 9 - Laufwerk aktiv (immer 255)
Byte 10 - unbenutzt (immer 0)
Byte 11 - unbenutzt (immer 0)
Byte 12 - unbenutzt (immer 0)
KOMMANDO: $4F
FUNKTION: Laufwerk konfigurieren
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Dieser Befehl wird benutzt um das Laufwerk für den nächsten Formatierungsbefehl einzustellen. Das Laufwerk erwartet 12 Bytes, die genau der Reihenfolge der vorherigen Bytes ($4E) entsprechen müssen.
KOMMANDO: $51
FUNKTION: Schreibvorgang beenden
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Nach jedem Schreibbefehl wartet das Laufwerk ca. 2 Sekunden bis die Daten aus dem Trackbuffer auf die Diskette geschrieben werden. Dieses wird durch den Befehl $51 beschleunigt. Alle Daten im Trackbuffer werden unverzüglich auf die Diskette geschrieben und abhängig vom Drive/Display Befehl ($44) wird der Motor nach erfolgtem Schreibvorgang sofort gestoppt.
KOMMANDO: $44
FUNKTION: Drive/Display Einstellung
AUX1: Konfigurationsbyte
AUX2: nicht benutzt
BESCHREIBUNG: Der Wert in AUX1 setzt das Drive/Display Byte im Laufwerk. Dieses Byte kann über keinen Befehl direkt ausgelesen werden, so daß immer alle Bits richtig gesetzt werden müssen.
Die einzelnen Bits beinhalten die folgenden Funktionen:
Bit 0 - BELL bei ERROR zulassen
Bit 1 - unbenutzt
Bit 2 - unbenutzt
Bit 3 - bei Kommando $51 Motor nicht ausschalten
Bit 4 - bei Kommando $20 VTOC+Boot Sektoren nicht schreiben
Bit 5 - Formatieren ohne Verify
Bit 6 - Trackanzeige in Hexadezimal
Bit 7 - ERROR-Anzeige zulassen
KOMMANDO: $4B
FUNKTION: Slow/Fast Konfiguration
AUX1: Konfigurationsbyte
AUX2: nicht benutzt
BESCHREIBUNG: Mit dem Wert in AUX1 wird das Drive-Slow-Status Byte des Laufwerkes beeinflußt. Dieses Byte kann über keinen Befehl direkt ausgelesen werden, so daß alle Bits richtig gesetzt werden müssen.
Die einzelnen Bits haben folgenden Funktionen:
Bit 0 - Read Sektor slow
Bit 1 - Write Sektor slow
Bit 2 - Kommando $57 Verify ausschalten
Bit 3 - Laufwerk vollständig im 'Slow-Mode'
Bit 4 - unbenutzt
Bit 5 - unbenutzt
Bit 6 - 1 Track slow (nach Trackwechsel 0)
Bit 7 - 1 Diskette slow (nach Diskettenwechsel 0)
KOMMANDO: $4C
FUNKTION: Direkter Sprungbefehl ohne Rückmeldung
AUX1: Sprungadresse LOW BYTE
AUX2: Sprungadresse HIGH BYTE
BESCHREIBUNG: Der Prozessor im Laufwerk wird durch diesen Befehl veranlaßt, direkt zur Speicherstelle zu springen, die sich in AUX1 und AUX2 befindet. Das Laufwerk gibt keine Rückmeldung an den Computer zurück, so daß eine Rückmeldung von dem Programm aus gegeben werden muß, zu dem der Prozessor gesprungen ist.
KOMMANDO: $4D
FUNKTION: Direkter Sprungbefehl mit Rückmeldung
AUX1: Sprungadresse LOW BYTE
AUX2: Sprungadresse HIGH BYTE
BESCHREIBUNG: Dieser Befehl gleicht dem Vorhergehenden bis auf den kleinen Unterschied, daß das Laufwerk vor ausführen des Programms eine Rückmeldung an den Computer gibt.
KOMMANDO: $41
FUNKTION: Kommandotabelle verlängern oder verkürzen
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Das Laufwerk erwartet 3 Bytes vom Computer. Das 1. Byte ist das Kommando. Das 2. und 3. Byte ist die Sprungadresse des über das neue Kommando erreichten Programmes in LOW/HIGH-Byte Format. Falls sich der neue Befehl schon in der Kommandotabelle befindet, wird dieser mit der neuen Startadresse versehen. Ist die Startadresse $0000 wird der Befehl aus der Kommandotabelle gelöscht.
KOMMANDO: $68
FUNKTION: Länge der SIO-Routine ermitteln
AUX1: nicht benutzt
AUX2: nicht benutzt
BESCHREIBUNG: Mit diesem Befehl wird die Länge der SIO-Routine ermittelt, die mit dem Befehl $69 aus dem Laufwerk in den Computer geladen wird. Das Laufwerk sendet 2 Bytes, die die Länge (LOW/HIGH) beinhalten.
KOMMANDO: $69
FUNKTION: SIO-Routine zum Computer senden
AUX1: Relokator-Adresse LOW BYTE
AUX2: Relokator-Adresse HIGH BYTE
BESCHREIBUNG: Dieser Befehl sendet die HIGH SPEED SIO-Routine zum Computer. Diese Routine wird bereits im Laufwerk zur Startadresse hin relokiert, die sich in AUX1 und AUX2 befindet.
KOMMANDO: $60
FUNKTION: Track schreiben
AUX1: Track Anfangssektor oder Anfangsadresse LOW BYTE
AUX2: Track Anfangssektor oder Anfangsadresse HIGH BYTE
BESCHREIBUNG: Die kompletten Daten für einen Track werden mit diesem Befehl auf die Diskette oder in den Trackbuffer geschrieben. Die Anzahl der zu übertragenden Bytes errechnet sich aus der Anzahl der Sektoren mal der Bytes pro Sektor. Wegen des sehr schwierigen Timings funktioniert dieser Befehl nur in normaler Übertragungsgeschwindigkeit.
KOMMANDO: $62
FUNKTION: Track lesen
AUX1: Track Anfangssektor LOW BYTE
AUX2: Track Anfangssektor HIGH BYTE
BESCHREIBUNG: Lesen eines kompletten Tracks mit einem Befehl von der Diskette oder aus dem Trackbuffer. Die Anzahl der zu erwartenden Bytes errechnet sich aus der Anzahl der Sektoren mal der Bytes pro Sektor.
}}}