182 lines
5.1 KiB
OpenEdge ABL
182 lines
5.1 KiB
OpenEdge ABL
IFND DEVICES_TRACKDISK_I
|
|
DEVICES_TRACKDISK_I SET 1
|
|
**
|
|
** $Filename: devices/trackdisk.i $
|
|
** $Release: 1.3 $
|
|
**
|
|
**
|
|
**
|
|
** (C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
|
|
** All Rights Reserved
|
|
**
|
|
|
|
IFND EXEC_IO_I
|
|
INCLUDE "exec/io.i"
|
|
ENDC ; EXEC_IO_I
|
|
|
|
IFND EXEC_DEVICES_I
|
|
INCLUDE "exec/devices.i"
|
|
ENDC ; EXEC_DEVICES_I
|
|
|
|
*--------------------------------------------------------------------
|
|
*
|
|
* Physical drive constants
|
|
*
|
|
*--------------------------------------------------------------------
|
|
|
|
|
|
* OBSOLETE -- only valid for 3 1/4" drives. Use the TD_GETNUMTRACKS command!
|
|
*
|
|
*NUMCYLS EQU 80 ; normal # of cylinders
|
|
*MAXCYLS EQU NUMCYLS+20 ; max # of cyls to look for
|
|
* ; during a calibrate
|
|
*NUMHEADS EQU 2
|
|
*NUMTRACKS EQU NUMCYLS*NUMHEADS
|
|
|
|
NUMSECS EQU 11
|
|
NUMUNITS EQU 4
|
|
|
|
*--------------------------------------------------------------------
|
|
*
|
|
* Useful constants
|
|
*
|
|
*--------------------------------------------------------------------
|
|
|
|
|
|
*-- sizes before mfm encoding
|
|
TD_SECTOR EQU 512
|
|
TD_SECSHIFT EQU 9 ; log TD_SECTOR
|
|
* ; 2
|
|
|
|
|
|
*--------------------------------------------------------------------
|
|
*
|
|
* Driver Specific Commands
|
|
*
|
|
*--------------------------------------------------------------------
|
|
|
|
*-- TD_NAME is a generic macro to get the name of the driver. This
|
|
*-- way if the name is ever changed you will pick up the change
|
|
*-- automatically.
|
|
*--
|
|
*-- Normal usage would be:
|
|
*--
|
|
*-- internalName: TD_NAME
|
|
*--
|
|
|
|
TD_NAME: MACRO
|
|
DC.B 'trackdisk.device',0
|
|
DS.W 0
|
|
ENDM
|
|
|
|
BITDEF TD,EXTCOM,15
|
|
|
|
DEVINIT
|
|
DEVCMD TD_MOTOR ; control the disk's motor
|
|
DEVCMD TD_SEEK ; explicit seek (for testing)
|
|
DEVCMD TD_FORMAT ; format disk
|
|
DEVCMD TD_REMOVE ; notify when disk changes
|
|
DEVCMD TD_CHANGENUM ; number of disk changes
|
|
DEVCMD TD_CHANGESTATE ; is there a disk in the drive?
|
|
DEVCMD TD_PROTSTATUS ; is the disk write protected?
|
|
DEVCMD TD_RAWREAD ; read raw bits from the disk
|
|
DEVCMD TD_RAWWRITE ; write raw bits to the disk
|
|
DEVCMD TD_GETDRIVETYPE ; get the type of the disk drive
|
|
DEVCMD TD_GETNUMTRACKS ; get the # of tracks on this disk
|
|
DEVCMD TD_ADDCHANGEINT ; TD_REMOVE done right
|
|
DEVCMD TD_REMCHANGEINT ; removes softint set by ADDCHANGEINT
|
|
DEVCMD TD_LASTCOMM ; dummy placeholder for end of list
|
|
|
|
|
|
*
|
|
*
|
|
* The disk driver has an "extended command" facility. These commands
|
|
* take a superset of the normal IO Request block.
|
|
*
|
|
ETD_WRITE EQU (CMD_WRITE!TDF_EXTCOM)
|
|
ETD_READ EQU (CMD_READ!TDF_EXTCOM)
|
|
ETD_MOTOR EQU (TD_MOTOR!TDF_EXTCOM)
|
|
ETD_SEEK EQU (TD_SEEK!TDF_EXTCOM)
|
|
ETD_FORMAT EQU (TD_FORMAT!TDF_EXTCOM)
|
|
ETD_UPDATE EQU (CMD_UPDATE!TDF_EXTCOM)
|
|
ETD_CLEAR EQU (CMD_CLEAR!TDF_EXTCOM)
|
|
ETD_RAWREAD EQU (TD_RAWREAD!TDF_EXTCOM)
|
|
ETD_RAWWRITE EQU (TD_RAWWRITE!TDF_EXTCOM)
|
|
|
|
|
|
*
|
|
* extended IO has a larger than normal io request block.
|
|
*
|
|
|
|
STRUCTURE IOEXTTD,IOSTD_SIZE
|
|
ULONG IOTD_COUNT ; removal/insertion count
|
|
ULONG IOTD_SECLABEL ; sector label data region
|
|
LABEL IOTD_SIZE
|
|
|
|
*
|
|
* raw read and write can be synced with the index pulse. This flag
|
|
* in io request's IO_FLAGS field tells the driver that you want this.
|
|
*
|
|
BITDEF IOTD,INDEXSYNC,4
|
|
|
|
* labels are TD_LABELSIZE bytes per sector
|
|
|
|
TD_LABELSIZE EQU 16
|
|
|
|
*
|
|
* This is a bit in the FLAGS field of OpenDevice. If it is set, then
|
|
* the driver will allow you to open all the disks that the trackdisk
|
|
* driver understands. Otherwise only 3.5" disks will succeed.
|
|
*
|
|
*
|
|
BITDEF TD,ALLOW_NON_3_5,0
|
|
|
|
*
|
|
* If you set the TDB_ALLOW_NON_3_5 bit in OpenDevice, then you don't
|
|
* know what type of disk you really got. These defines are for the
|
|
* TD_GETDRIVETYPE command. In addition, you can find out how many
|
|
* tracks are supported via the TD_GETNUMTRACKS command.
|
|
*
|
|
DRIVE3_5 EQU 1
|
|
DRIVE5_25 EQU 2
|
|
|
|
*--------------------------------------------------------------------
|
|
*
|
|
* Driver error defines
|
|
*
|
|
*--------------------------------------------------------------------
|
|
|
|
TDERR_NotSpecified EQU 20 ; general catchall
|
|
TDERR_NoSecHdr EQU 21 ; couldn't even find a sector
|
|
TDERR_BadSecPreamble EQU 22 ; sector looked wrong
|
|
TDERR_BadSecID EQU 23 ; ditto
|
|
TDERR_BadHdrSum EQU 24 ; header had incorrect checksum
|
|
TDERR_BadSecSum EQU 25 ; data had incorrect checksum
|
|
TDERR_TooFewSecs EQU 26 ; couldn't find enough sectors
|
|
TDERR_BadSecHdr EQU 27 ; another "sector looked wrong"
|
|
TDERR_WriteProt EQU 28 ; can't write to a protected disk
|
|
TDERR_DiskChanged EQU 29 ; no disk in the drive
|
|
TDERR_SeekError EQU 30 ; couldn't find track 0
|
|
TDERR_NoMem EQU 31 ; ran out of memory
|
|
TDERR_BadUnitNum EQU 32 ; asked for a unit > NUMUNITS
|
|
TDERR_BadDriveType EQU 33 ; not a drive that trackdisk groks
|
|
TDERR_DriveInUse EQU 34 ; someone else allocated the drive
|
|
TDERR_PostReset EQU 35 ; user hit reset; awaiting doom
|
|
|
|
*--------------------------------------------------------------------
|
|
*
|
|
* Public portion of unit structure
|
|
*
|
|
*--------------------------------------------------------------------
|
|
|
|
STRUCTURE TDU_PUBLICUNIT,UNIT_SIZE
|
|
UWORD TDU_COMP01TRACK ; track for first precomp
|
|
UWORD TDU_COMP10TRACK ; track for second precomp
|
|
UWORD TDU_COMP11TRACK ; track for third precomp
|
|
ULONG TDU_STEPDELAY ; time to wait after stepping
|
|
ULONG TDU_SETTLEDELAY ; time to wait after seeking
|
|
UBYTE TDU_RETRYCNT ; # of times to retry
|
|
LABEL TDU_PUBLICUNITSIZE
|
|
|
|
ENDC ; DEVICES_TRACKDISK_I
|