home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 354.lha / MSH_v1.5 / src / device.h < prev    next >
C/C++ Source or Header  |  1990-03-12  |  5KB  |  195 lines

  1. /*-
  2.  *  $Id: device.h,v 1.2 90/01/27 20:39:10 Rhialto Exp $
  3.  *
  4.  *  This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved. May
  5.  *  not be used or copied without a licence.
  6. -*/
  7.  
  8. #define MD_NUMUNITS    4
  9.  
  10. #define VERSION     34L
  11. #define REVISION    5
  12.  
  13. #asm
  14. VERSION     equ     34
  15. RTPRI        equ     0
  16. #endasm
  17.  
  18. struct MessyDevice {
  19.     struct Device   md_Dev;
  20.     struct MessyUnit *md_Unit[MD_NUMUNITS];
  21.     long        md_Seglist;
  22.     struct SignalSemaphore md_HardwareUse;
  23.     byte       *md_Rawbuffer;
  24.     byte        md_MfmDecode[128];
  25. };
  26.  
  27. #define dev_Node    md_Dev.dd_Library.lib_Node
  28. #define dev_Flags    md_Dev.dd_Library.lib_Flags
  29. #define dev_NegSize    md_Dev.dd_Library.lib_NegSize
  30. #define dev_PosSize    md_Dev.dd_Library.lib_PosSize
  31. #define dev_Version    md_Dev.dd_Library.lib_Version
  32. #define dev_Revision    md_Dev.dd_Library.lib_Revision
  33. #define dev_IdString    md_Dev.dd_Library.lib_IdString
  34. #define dev_OpenCnt    md_Dev.dd_Library.lib_OpenCnt
  35.  
  36. struct MessyUnit {
  37.     struct MsgPort  mu_Port;
  38.     short        mu_OpenCnt;
  39.     short        mu_UnitNr;
  40.     byte        mu_Flags;
  41.     char        mu_InitSectorStatus;
  42.     ulong        mu_ChangeNum;
  43.     char        mu_DiskState;
  44.     byte        mu_DmaSignal;
  45.     short        mu_SectorsPerTrack; /* The nominal #sectors/track */
  46.     short        mu_CurrentSectors;    /* The current #sectors on this track */
  47.     short        mu_CurrentTrack;    /* Position of the head, and */
  48.     short        mu_CurrentSide;    /* what's in the track buffer */
  49.     short        mu_TrackChanged;
  50.     struct DiskResourceUnit mu_DRUnit;
  51.     struct MsgPort  mu_DiskReplyPort;
  52.     struct IOExtTD *mu_DiskIOReq;
  53.     struct IOStdReq *mu_DiskChangeReq;
  54.     struct Interrupt mu_DiskChangeInt;
  55.     struct MinList  mu_ChangeIntList;
  56.     short        mu_NumCyls;
  57.     byte        mu_TrackBuffer[MS_SPT_MAX * MS_BPS];   /* Must be word aligned */
  58.     word        mu_CrcBuffer[MS_SPT_MAX];
  59.     char        mu_SectorStatus[MS_SPT_MAX];
  60. };
  61.  
  62. #define     TDERR_NoError   0
  63. #define     CRC_UNCHECKED   -1
  64. #define     CRC_CHANGED     -2
  65.  
  66. #define UNITB_ACTIVE    0
  67. #define UNITF_STOPPED    (1<<2)
  68. #define UNITF_WAKETASK    (1<<3)
  69.  
  70. #define STATEF_UNKNOWN    (1<<0)
  71. #define STATEF_PRESENT    (1<<1)
  72. #define STATEF_WRITABLE (1<<2)
  73.  
  74. /* Some constants related to #defines */
  75. #asm
  76. MS_BPS            equ 512
  77. MS_BPScode        equ 2            ; 2log(MSBPS/128)
  78. LOG2_MS_BPS        equ 9
  79. MS_SPT            equ 9
  80. MS_SPT_MAX        equ 10
  81. #endasm
  82.  
  83. typedef struct MessyDevice DEV;
  84. typedef struct MessyUnit   UNIT;
  85.  
  86.  
  87. #define TASKPRI     5L
  88. #define TASKSTACK   2048L
  89.  
  90. /*
  91.  *  Which of the device commands are real, and which are
  92.  *  routed to trackdisk.device.
  93.  */
  94.  
  95. /*  #define CMD_Invalid     /**/
  96. /*  #define CMD_Reset        /**/
  97. /*  #define CMD_Read        /**/
  98. /*  #define CMD_Write        /**/
  99. /*  #define CMD_Update        /**/
  100. /*  #define CMD_Clear        /**/
  101. /*  #define CMD_Stop        /**/
  102. /*  #define CMD_Start        /**/
  103. /*  #define CMD_Flush        /**/
  104.     #define TD_Motor        TrackdiskGateway
  105. /*  #define TD_Seek        /**/
  106. /*  #define TD_Format        /**/
  107.     #define TD_Remove        TrackdiskGateway
  108. /*  #define TD_Changenum    /**/
  109.     #define TD_Changestate  TrackdiskGateway
  110.     #define TD_Protstatus   TrackdiskGateway
  111.     #define TD_Rawread        TrackdiskGateway
  112.     #define TD_Rawwrite     TrackdiskGateway
  113.     #define TD_Getdrivetype TrackdiskGateway
  114.     #define TD_Getnumtracks TrackdiskGateway
  115. /*  #define TD_Addchangeint /**/
  116. /*  #define TD_Remchangeint /**/
  117.  
  118. #define STRIP(cmd)  ((unsigned char)cmd)
  119. #define IMMEDIATE   ((1<<CMD_INVALID)|(1<<CMD_RESET)|\
  120.              (1<<CMD_STOP)|(1<<CMD_START)|(1<<CMD_FLUSH)|\
  121.              (1L<<TD_ADDCHANGEINT))
  122. #define PerformIO(ioreq, unit) \
  123.             (funcTable[STRIP(ioreq->io_Command)])(ioreq, unit)
  124.  
  125. extern DEV *MakeLibrary();
  126. extern struct Task *FindTask();
  127. extern struct Task *CreateTask();
  128.  
  129. /*
  130.  *  Forward declarations:
  131.  */
  132.  
  133. extern char EndCode;
  134. extern void Init(), _DevOpen(), _DevClose(), _DevExpunge(), _LibNull();
  135. extern void _DevBeginIO(), _DevAbortIO();
  136.  
  137. extern char DevName[], idString[];
  138.  
  139. extern DEV *CInit();
  140. extern void DevOpen();
  141. extern long DevClose(), DevExpunge();
  142. extern void DevBeginIO(), TermIO();
  143. extern long DevAbortIO();
  144.  
  145. extern void WakePort();
  146. extern void UnitTask();
  147.  
  148. extern int DevInit();
  149. extern UNIT *UnitInit();
  150. extern void DiskChangeHandler();
  151.  
  152. extern void TrackdiskGateway();
  153. extern void CMD_Invalid();
  154. extern void CMD_Reset();
  155. extern void CMD_Read();
  156. extern void CMD_Write();
  157. extern void CMD_Update();
  158. extern void CMD_Clear();
  159. extern void CMD_Stop();
  160. extern void CMD_Start();
  161. extern void CMD_Flush();
  162. extern void TD_Seek();
  163. extern void TD_Format();
  164. extern void TD_Changenum();
  165. extern void TD_Addchangeint();
  166. extern void TD_Remchangeint();
  167.  
  168. extern struct DiskResource *OpenResource();
  169. extern struct MsgPort *DeviceProc();
  170. extern struct MsgPort *CreatePort();
  171. extern struct IOExtTD *CreateExtIO();
  172. extern void    *GetUnit(), *GetMsg();
  173. extern long    Wait();
  174. extern void    *AllocMem(), FreeMem();
  175. extern byte    *index(), *rindex();
  176.  
  177. extern int    ReadTrack();
  178. extern void    InitDecoding();
  179. extern int    TDSeek();
  180. extern int    TDMotorOn();
  181. extern int    TDMotorOff();
  182. extern int    TDGetNumCyls();
  183. extern void    *GetDrive();
  184. extern void    FreeDrive();
  185. extern int    DevOpenUp();
  186. extern int    DevCloseDown();
  187. extern int    GetTrack();
  188. extern int    CheckRequest();
  189.  
  190. #ifndef READONLY
  191. extern int    InitWrite();
  192. extern void    FreeBuffer();
  193. extern void    EncodeTrack();
  194. #endif
  195.