home *** CD-ROM | disk | FTP | other *** search
- TABLE OF CONTENTS
-
- disk.resource/AllocUnit
- disk.resource/FreeUnit
- disk.resource/GetUnit
- disk.resource/GetUnitID
- disk.resource/GiveUnit
- disk.resource/ReadUnitID
- disk.resource/AllocUnit disk.resource/AllocUnit
-
- NAME
- AllocUnit - allocate a unit of the disk
-
- SYNOPSIS
- Success = AllocUnit( unitNum ), DRResource
- D0 D0 A6
-
- BOOL AllocUnit(LONG);
-
- FUNCTION
- This routine allocates one of the units of the disk. It should
- be called before trying to use the disk (via GetUnit).
-
- In reality, it is perfectly fine to use GetUnit/GiveUnit if AllocUnit
- fails. Do NOT call FreeUnit if AllocUnit did not succeed. This
- has been the case for all revisions of disk.resource.
-
- INPUTS
- unitNum -- a legal unit number (zero through three)
-
- RESULTS
- Success -- nonzero if successful. zero on failure.
-
- EXCEPTIONS
-
- SEE ALSO
-
- BUGS
-
- disk.resource/FreeUnit disk.resource/FreeUnit
-
- NAME
- FreeUnit - deallocate the disk
-
- SYNOPSIS
- FreeUnit( unitNum ), DRResource
- D0 A6
-
- void FreeUnit(LONG);
-
- FUNCTION
- This routine deallocates one of the units of the disk. It should
- be called when done with the disk. Do not call it if you did
- no successfully allocate the disk (there is no protection -- you
- will probably crash the disk system).
-
- INPUTS
- unitNum -- a legal unit number (zero through three)
-
- RESULTS
-
- EXCEPTIONS
-
- SEE ALSO
- FreeUnit
-
- BUGS
- Doesn't check if you own the unit, or even if anyone owns it.
-
- disk.resource/GetUnit disk.resource/GetUnit
-
- NAME
- GetUnit - allocate the disk for a driver
-
- SYNOPSIS
- lastDriver = GetUnit( unitPointer ), DRResource
- D0 A1 A6
-
- struct DiscResourceUnit *GetUnit(struct DiscResourceUnit *);
-
- FUNCTION
- This routine allocates the disk to a driver. It is either
- immediately available, or the request is saved until the disk
- is available. When it is available, your unitPointer is
- sent back to you (via ReplyMsg). You may then reattempt the
- GetUnit.
-
- Allocating the disk allows you to use the disk's resources.
- Remember however that there are four units to the disk; you are
- only one of them. Please be polite to the other units (by never
- selecting them, and by not leaving interrupts enabled, etc.).
-
- When you are done, please leave the disk in the following state:
- dmacon dma bit ON
- dsklen dma bit OFF (write a #DSKDMAOFF to dsklen)
- adkcon disk bits -- any way you want
- entena:disk sync and disk block interrupts -- Both DISABLED
- CIA resource index interrupt -- DISABLED
- 8520 outputs -- doesn't matter, because all bits will be
- set to inactive by the resource.
- 8520 data direction regs -- restore to original state.
-
- NOTE: GetUnit() does NOT turn on the interrupts for you.
- You must use AbleICR (for the index interrupt) or intena
- (for the diskbyte and diskblock interrupts) to turn them
- on. You should turn them off before calling GiveUnit,
- as stated above.
-
- INPUTS
- unitPtr - a pointer you your disk resource unit structure.
- Note that the message filed of the structure MUST
- be a valid message, ready to be replied to. Make sure
- ln_Name points to a null-terminated string, preferably
- one that identifies your program.
-
- You need to set up the three interrupt structures,
- in particular the IS_DATA and IS_CODE fields. Set them
- to NULL if you don't need that interrupt. Also, set
- the ln_Type of the interrupt structure to NT_INTERRUPT.
- WARNING: don't turn on a disk resource interrupt unless
- the IS_CODE for that interrupt points to executable code!
-
- IS_CODE will be called with IS_DATA in A1 when the
- interrupt occurs. Preserve all regs but D0/D1/A0/A1.
- Do not make assumptions about A0.
-
- RESULTS
- lastDriver - if the disk is not busy, then the last unit
- to use the disk is returned. This may be used to
- see if a driver needs to reset device registers.
- (If you were the last user, then no one has changed
- any of the registers. If someone else has used it,
- then any allowable changes may have been made). If the
- disk is busy, then a null is returned.
-
- EXCEPTIONS
-
- SEE ALSO
- GiveUnit
-
- BUGS
-
- disk.resource/GetUnitID disk.resource/GetUnitID
-
- NAME
- GetUnitID - find out what type of disk is out there
-
- SYNOPSIS
- idtype = GetUnitID( unitNum ), DRResource
- D0 D0 A6
-
- LONG GetUnitID(LONG);
-
- FUNCTION
- Gets the drive ID for a given unit. Note that this value may
- change if someone calls ReadUnitID, and the drive id changes.
-
- INPUTS
- unitNum -- a legal unit number (zero through three)
-
- RESULTS
- idtype -- the type of the disk drive. Standard types are
- defined in the resource include file.
-
- EXCEPTIONS
-
- SEE ALSO
- ReadUnitID
-
- BUGS
-
- disk.resource/GiveUnit disk.resource/GiveUnit
-
- NAME
- GiveUnit - Free the disk back up
-
- SYNOPSIS
- GiveUnit(), DRResource
- A6
-
- void GiveUnit();
-
- FUNCTION
- This routine frees the disk after a driver is done with it.
- If others are waiting, it will notify them.
-
- INPUTS
-
- RESULTS
-
- EXCEPTIONS
-
- SEE ALSO
- GetUnit
-
- BUGS
- In pre-V36, GiveUnit didn't check if you owned the unit. A patch
- for this was part of 1.3.1 SetPatch. Fixed in V36.
-
- disk.resource/ReadUnitID disk.resource/ReadUnitID
-
- NAME
- ReadUnitID - reread and return the type of drive (V37)
-
- SYNOPSIS
- idtype = ReadUnitID( unitNum ), DRResource
- D0 D0 A6
-
- ULONG ReadUnitID(LONG);
-
- FUNCTION
- Rereads the drive id for a specific unit (for handling drives
- that change ID according to what sort of disk is in them. You
- MUST have done a GetUnit before calling this function!
-
- INPUTS
- unitNum -- a legal unit number (zero through three)
-
- RESULTS
- idtype -- the type of the disk drive. Standard types are
- defined in the resource include file.
-
- EXCEPTIONS
-
- SEE ALSO
- GetUnitID
-
- BUGS
-
-