#ifndef DEVICES_TRACKDISK_H
#define DEVICES_TRACKDISK_H

/*
**
** $Filename: devices/trackdisk.h $
** $Release: 2.04 Includes, V37.4 $
** $Revision: 33.13 $
** $Date: 90/11/28 $
**
** trackdisk device structure and value definitions
**
** (C) Copyright 1985-1991 Commodore-Amiga, Inc.
** All Rights Reserved
**
*/

#ifndef EXEC_IO_H
#include "exec/io.h"
#endif

#ifndef EXEC_DEVICES_H
#include "exec/devices.h"
#endif




 
 



#define NUMSECS 11
#define NUMUNITS 4




#define TD_SECTOR 512
#define TD_SECSHIFT 9 





#define TD_NAME "trackdisk.device"

#define TDF_EXTCOM (1<<15) 


#define TD_MOTOR (CMD_NONSTD+0) 
#define TD_SEEK (CMD_NONSTD+1) 
#define TD_FORMAT (CMD_NONSTD+2) 
#define TD_REMOVE (CMD_NONSTD+3) 
#define TD_CHANGENUM (CMD_NONSTD+4) 
#define TD_CHANGESTATE (CMD_NONSTD+5) 
#define TD_PROTSTATUS (CMD_NONSTD+6) 
#define TD_RAWREAD (CMD_NONSTD+7) 
#define TD_RAWWRITE (CMD_NONSTD+8) 
#define TD_GETDRIVETYPE (CMD_NONSTD+9) 
#define TD_GETNUMTRACKS (CMD_NONSTD+10) 
#define TD_ADDCHANGEINT (CMD_NONSTD+11) 
#define TD_REMCHANGEINT (CMD_NONSTD+12) 
#define TD_GETGEOMETRY (CMD_NONSTD+13) 
#define TD_EJECT (CMD_NONSTD+14) 
#define TD_LASTCOMM (CMD_NONSTD+15)



#define ETD_WRITE (CMD_WRITE|TDF_EXTCOM)
#define ETD_READ (CMD_READ|TDF_EXTCOM)
#define ETD_MOTOR (TD_MOTOR|TDF_EXTCOM)
#define ETD_SEEK (TD_SEEK|TDF_EXTCOM)
#define ETD_FORMAT (TD_FORMAT|TDF_EXTCOM)
#define ETD_UPDATE (CMD_UPDATE|TDF_EXTCOM)
#define ETD_CLEAR (CMD_CLEAR|TDF_EXTCOM)
#define ETD_RAWREAD (TD_RAWREAD|TDF_EXTCOM)
#define ETD_RAWWRITE (TD_RAWWRITE|TDF_EXTCOM)



struct IOExtTD {
 struct IOStdReq iotd_Req;
 ULONG iotd_Count;
 ULONG iotd_SecLabel;
};


struct DriveGeometry {
 ULONG dg_SectorSize; 
 ULONG dg_TotalSectors; 
 ULONG dg_Cylinders; 
 ULONG dg_CylSectors; 
 ULONG dg_Heads; 
 ULONG dg_TrackSectors; 
 ULONG dg_BufMemType; 
 
 UBYTE dg_DeviceType; 
 UBYTE dg_Flags; 
 UWORD dg_Reserved;
};


#define DG_DIRECT_ACCESS 0
#define DG_SEQUENTIAL_ACCESS 1
#define DG_PRINTER 2
#define DG_PROCESSOR 3
#define DG_WORM 4
#define DG_CDROM 5
#define DG_SCANNER 6
#define DG_OPTICAL_DISK 7
#define DG_MEDIUM_CHANGER 8
#define DG_COMMUNICATION 9
#define DG_UNKNOWN 31


#define DGB_REMOVABLE 0
#define DGF_REMOVABLE 1



#define IOTDB_INDEXSYNC 4
#define IOTDF_INDEXSYNC (1<<4)

#define IOTDB_WORDSYNC 5
#define IOTDF_WORDSYNC (1<<5)




#define TD_LABELSIZE 16



#define TDB_ALLOW_NON_3_5 0
#define TDF_ALLOW_NON_3_5 (1<<0)



#define DRIVE3_5 1
#define DRIVE5_25 2
#define DRIVE3_5_150RPM 3



#define TDERR_NotSpecified 20 
#define TDERR_NoSecHdr 21 
#define TDERR_BadSecPreamble 22 
#define TDERR_BadSecID 23 
#define TDERR_BadHdrSum 24 
#define TDERR_BadSecSum 25 
#define TDERR_TooFewSecs 26 
#define TDERR_BadSecHdr 27 
#define TDERR_WriteProt 28 
#define TDERR_DiskChanged 29 
#define TDERR_SeekError 30 
#define TDERR_NoMem 31 
#define TDERR_BadUnitNum 32 
#define TDERR_BadDriveType 33 
#define TDERR_DriveInUse 34 
#define TDERR_PostReset 35 



struct TDU_PublicUnit {
 struct Unit tdu_Unit; 
 UWORD tdu_Comp01Track; 
 UWORD tdu_Comp10Track; 
 UWORD tdu_Comp11Track; 
 ULONG tdu_StepDelay; 
 ULONG tdu_SettleDelay; 
 UBYTE tdu_RetryCnt; 
 UBYTE tdu_PubFlags; 
 UWORD tdu_CurrTrk; 
 
 ULONG tdu_CalibrateDelay; 
 
 ULONG tdu_Counter; 
 
};


#define TDPB_NOCLICK 0
#define TDPF_NOCLICK (1L << 0)

#endif 
