/*- * $Id: device.h,v 1.2 90/01/27 20:39:10 Rhialto Exp $ * * This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved. May * not be used or copied without a licence. -*/ #define MD_NUMUNITS 4 #define VERSION 34L #define REVISION 5 #asm VERSION equ 34 RTPRI equ 0 #endasm struct MessyDevice { struct Device md_Dev; struct MessyUnit *md_Unit[MD_NUMUNITS]; long md_Seglist; struct SignalSemaphore md_HardwareUse; byte *md_Rawbuffer; byte md_MfmDecode[128]; }; #define dev_Node md_Dev.dd_Library.lib_Node #define dev_Flags md_Dev.dd_Library.lib_Flags #define dev_NegSize md_Dev.dd_Library.lib_NegSize #define dev_PosSize md_Dev.dd_Library.lib_PosSize #define dev_Version md_Dev.dd_Library.lib_Version #define dev_Revision md_Dev.dd_Library.lib_Revision #define dev_IdString md_Dev.dd_Library.lib_IdString #define dev_OpenCnt md_Dev.dd_Library.lib_OpenCnt struct MessyUnit { struct MsgPort mu_Port; short mu_OpenCnt; short mu_UnitNr; byte mu_Flags; char mu_InitSectorStatus; ulong mu_ChangeNum; char mu_DiskState; byte mu_DmaSignal; short mu_SectorsPerTrack; /* The nominal #sectors/track */ short mu_CurrentSectors; /* The current #sectors on this track */ short mu_CurrentTrack; /* Position of the head, and */ short mu_CurrentSide; /* what's in the track buffer */ short mu_TrackChanged; struct DiskResourceUnit mu_DRUnit; struct MsgPort mu_DiskReplyPort; struct IOExtTD *mu_DiskIOReq; struct IOStdReq *mu_DiskChangeReq; struct Interrupt mu_DiskChangeInt; struct MinList mu_ChangeIntList; short mu_NumCyls; byte mu_TrackBuffer[MS_SPT_MAX * MS_BPS]; /* Must be word aligned */ word mu_CrcBuffer[MS_SPT_MAX]; char mu_SectorStatus[MS_SPT_MAX]; }; #define TDERR_NoError 0 #define CRC_UNCHECKED -1 #define CRC_CHANGED -2 #define UNITB_ACTIVE 0 #define UNITF_STOPPED (1<<2) #define UNITF_WAKETASK (1<<3) #define STATEF_UNKNOWN (1<<0) #define STATEF_PRESENT (1<<1) #define STATEF_WRITABLE (1<<2) /* Some constants related to #defines */ #asm MS_BPS equ 512 MS_BPScode equ 2 ; 2log(MSBPS/128) LOG2_MS_BPS equ 9 MS_SPT equ 9 MS_SPT_MAX equ 10 #endasm typedef struct MessyDevice DEV; typedef struct MessyUnit UNIT; #define TASKPRI 5L #define TASKSTACK 2048L /* * Which of the device commands are real, and which are * routed to trackdisk.device. */ /* #define CMD_Invalid /**/ /* #define CMD_Reset /**/ /* #define CMD_Read /**/ /* #define CMD_Write /**/ /* #define CMD_Update /**/ /* #define CMD_Clear /**/ /* #define CMD_Stop /**/ /* #define CMD_Start /**/ /* #define CMD_Flush /**/ #define TD_Motor TrackdiskGateway /* #define TD_Seek /**/ /* #define TD_Format /**/ #define TD_Remove TrackdiskGateway /* #define TD_Changenum /**/ #define TD_Changestate TrackdiskGateway #define TD_Protstatus TrackdiskGateway #define TD_Rawread TrackdiskGateway #define TD_Rawwrite TrackdiskGateway #define TD_Getdrivetype TrackdiskGateway #define TD_Getnumtracks TrackdiskGateway /* #define TD_Addchangeint /**/ /* #define TD_Remchangeint /**/ #define STRIP(cmd) ((unsigned char)cmd) #define IMMEDIATE ((1<io_Command)])(ioreq, unit) extern DEV *MakeLibrary(); extern struct Task *FindTask(); extern struct Task *CreateTask(); /* * Forward declarations: */ extern char EndCode; extern void Init(), _DevOpen(), _DevClose(), _DevExpunge(), _LibNull(); extern void _DevBeginIO(), _DevAbortIO(); extern char DevName[], idString[]; extern DEV *CInit(); extern void DevOpen(); extern long DevClose(), DevExpunge(); extern void DevBeginIO(), TermIO(); extern long DevAbortIO(); extern void WakePort(); extern void UnitTask(); extern int DevInit(); extern UNIT *UnitInit(); extern void DiskChangeHandler(); extern void TrackdiskGateway(); extern void CMD_Invalid(); extern void CMD_Reset(); extern void CMD_Read(); extern void CMD_Write(); extern void CMD_Update(); extern void CMD_Clear(); extern void CMD_Stop(); extern void CMD_Start(); extern void CMD_Flush(); extern void TD_Seek(); extern void TD_Format(); extern void TD_Changenum(); extern void TD_Addchangeint(); extern void TD_Remchangeint(); extern struct DiskResource *OpenResource(); extern struct MsgPort *DeviceProc(); extern struct MsgPort *CreatePort(); extern struct IOExtTD *CreateExtIO(); extern void *GetUnit(), *GetMsg(); extern long Wait(); extern void *AllocMem(), FreeMem(); extern byte *index(), *rindex(); extern int ReadTrack(); extern void InitDecoding(); extern int TDSeek(); extern int TDMotorOn(); extern int TDMotorOff(); extern int TDGetNumCyls(); extern void *GetDrive(); extern void FreeDrive(); extern int DevOpenUp(); extern int DevCloseDown(); extern int GetTrack(); extern int CheckRequest(); #ifndef READONLY extern int InitWrite(); extern void FreeBuffer(); extern void EncodeTrack(); #endif