Aufbau der SCSI-Kommandos der DaynaFile II (DF2) $C3 X1 [ X2 X3 ... Xn ] Das erste Byte ist immer $C3 und leitet eine DF2-Kommandosequenz ein. X1 gibt die Funktion an, alle weiteren Bytes sind Parameter, die funktionsspezifisch sind. In der dritten Spalte der folgenden Tabelle sind die jeweiligen Parameter, Daten und Ergebnisbytes angegeben. Parameterbytes werden zusammen mit dem Kommando und der Funktion in der Kommandophase an das Gerät geschickt. Daten werden in der MESSAGE_IN Phase zur DF2 übertragen, Ergebnisse in der MESSAGE_OUT Phase zum Rechner. Die vierte Spalte (Status) gibt das zu erwartende SCSI-Statusbyte nach Ausführung des Befehls an. Die Angabe "CHK" steht dabei stellvertretend für eine Prüfsumme, die z.B. über den Puffer gebildet wurde. Sie berechnet sich wie folgt: CHK = $55 - Summe(Datenbytes) Fkt. Routine Parameter:Daten(Ergebnis) Status ------------------------------------------------------------------------------ $14 Set_FDC_TestPin - $15 SCSI_Status_OK - $00 $1E SCSI_Set_DPTR DPH, DPL $C1 $20 SCSI_Status_C1 - $C1 $21 Restart - $C1 $22 Get_ROM_Version ($33, $31) CHK $23 ? $26 SCSI_Get_EvenPar $C1 $27 SCSI_Get_OddPar $C1 $32 SCSI_Write_Buffer DPH,DPL,cnt_H,cnt_L:Puffer $C1 $33 SCSI_Read_Buffer DPH,DPL,cnt_H,cnt_L(Puffer) CHK $34 SCSI_Rec_Addr_Cnt_Word (cnt_H,cnt_L) $C1 $35 SCSI_Write_Buffer_2 -:Puffer $C1 $36 SCSI_Read_Buffer_2 -(Puffer) CHK $3C FDC_Cmd_EvenPar Cmd (gerade Parität) $C1 $3D FDC_Cmd_OddPar Cmd (ungerade Parität) $C1 $3E Get_FDC_Status - Stat $40 Set_Track_Reg_EvenPar Trk (ger. Parität) $C1 $41 Set_Track_Reg_OddPar Trk (unger. Parität) $C1 $42 Get_Track_Reg - Trk $44 Set_Sector_Reg_EvenPar Sct (ger. Parität) $C1 $45 Set_Sector_Reg_OddPar Sct (unger. Parität) $C1 $46 Get_Sector_Reg - Sct $49 Write_Floppy Cmd,DPH,DPL,cnt_H,cnt_L:Puffer *1 $4A Read_Floppy Cmd,DPH,DPL,cnt_H,cnt_L *1 $4B Get_Bytes_Transferred -(cnt_H,cnt_L) CHK $4C Set_Data_Reg_EvenPar Dat (ger. Parität) $C1 $4D Set_Data_Reg_OddPar Dat (unger. Parität) $C1 $4E Get_Data_Reg - Dat $50 Set_Drv_Bits_EvenPar Bits *2 $C1 $51 Set_Drv_Bits_OddPar Bits *2 $C1 $52 Set_FDC_Bits_EvenPar Bits *3 $C1 $53 Set_FDC_Bits_OddPar Bits *3 $C1 $55 ? $56 Select_Drive_1 - $C1 $57 Select_Drive_2 - $C1 $58 Deselect_Drive_1 - $C1 $59 Deselect_Drive_2 - $C1 $5A Create_DD_Format_Buf Trk,Sid,Dat,DPH,DPL *4 $C1 $63 Create_Own_Format_Buf *5 $C1 $65 Get_DIP_Settings -(SW4,SW3) CHK $66 Restore_Drv_1 - *6 $67 Restore_Drv_2 - *6 $68 Read_With_Params *7 (Statusbytes) $00 $69 SCSI_Get_Buffer -(Puffer) CHK $6A SCSI_Put_Param_Block *7 (Statusbytes) $00 $6B Write_With_Params -:Puffer(Statusbytes) $00 ------ *1 - $C1=O.K., $D3=Fehler, $4F=Overflow *2 Bit 7 6 5 4 - SIDE 3 - MOTOR1 2 - MOTOR0 1 - DSEL1 0 - DSEL0 *3 Bit 7 - P1.7 /ENMF (0=DD, 1=HD) 6 - P1.6 /DDEN (0=MFM, 1=FM) 5 - P1.5 /5/8 (0=5,25", 1=8") 4 - P1.4 /TEST 3 - /MR 2 1 0 *4 Trk, Sid: Spur- und Seitennummer für Format-Befehl Dat: Byte, mit dem der Datenbereich gefüllt werden soll (i.d.R. $E5 oder $F6) DPH,DPL: Adresse, ab der der Puffer erstellt werden soll *5 DPH1,DPL1,Trk,Sid,Dat,DPH2,DPL2 DPH1,DPL1: Adresse, bei der die Formatbeschreibungstabelle liegt (muß vorher zur DF2 übertragen worden sein) Trk,Sid,Dat,DPH1,DPL2: wie unter *4 *6 - $00=O.K., $03=Not Ready, $01/$02=LW-Nr. nicht vorhanden *7 Es wird hier ein Parameterblock erwartet, der insg. 18 Bytes groß und der wie folgt aufgebaut ist: Offset Beschreibung ---------------------------------------------------------------------------- $00 0=1.LW, 1=2.LW $01 Bits [7,6,5]=P1.7,P1.6,P1.5; [2]: 0=HD,1=DD; [1,0]=Steprate $02 Settle delay $03 Motor on delay $04 1=Single stepping, 2=Double stepping $05-$08 (unbenutzt) $09 Spur $0A 1. Sektor Seite 0 $0B Anz. Sektoren Seite 0 $0C 1. Sektor Seite 1 $0D Anz. Sektoren Seite 1 $0E,$0F Sektorgröße in Bytes (low-byte $0F immer $00!) $10 Prüfsumme über Datenpuffer für Write_With_Params $11 Prüfsumme über Bytes $00 bis inkl. $10