mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 16:31:01 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
657 lines
25 KiB
Plaintext
657 lines
25 KiB
Plaintext
;
|
|
; File: SonyEqu.a
|
|
;
|
|
; Contains: xxx put contents here xxx
|
|
;
|
|
; Written by: xxx put writers here xxx
|
|
;
|
|
; Copyright: © 1991-1993 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <SM5> 8/3/93 BH Added drive queue flag (dqManEjBit) for manually ejectable
|
|
; device.
|
|
; <SM4> 12/7/92 rab Roll in Horror changes. Comments followÉ
|
|
; <H6> 8/4/92 SWC Increased the maximum head settling time to 100ms so
|
|
; slower-stepping drives won't try to read/write data before
|
|
; they're really ready.
|
|
; <H5> 2/25/92 CMP Added new status code to support speed check status call.
|
|
; <H4> 2/13/92 CMP Added a new control code for enabling/disabling retries and a
|
|
; global flag to indicate if retries are enabled.
|
|
; <H3> 1/21/92 CMP Added support for 32Mhz clock to SWIM2.
|
|
; <SM3> 5/17/92 kc Turn off onMac if undefined.
|
|
; <SM2> 4/16/92 JSM Roll-in change from Reality:
|
|
; <5> 4/14/92 DTY Fix up conditionals so the right offsets get generated for the
|
|
; System build. Moved extra stuff that was in the internal
|
|
; version of SonyEqu.a into this file, so we can get rid of the
|
|
; internal version.
|
|
; <4> 10/1/91 JSM DonÕt use onMvMac conditional, Modern Victorian never existed.
|
|
; <3> 1/30/91 gbm sab, #38: Change the Ôalready including this fileÕ variable to
|
|
; all uppercase (for security reasons)
|
|
;
|
|
|
|
; Version: 3.23
|
|
; Created: Friday, October 20, 1989 at 9:52:02 PM
|
|
;
|
|
; File: SonyEqu.a
|
|
;
|
|
; Assembler Interface to the Macintosh Libraries
|
|
; Copyright Apple Computer, Inc. 1984-1990
|
|
; All Rights Reserved
|
|
;
|
|
;--------------------------------------------------------------------
|
|
;
|
|
; The following information was formerly in "private" files that were
|
|
; not released to the general developer community.
|
|
;
|
|
; The information in this file is not needed for normal application
|
|
; development. These equates and macros were necessary for development
|
|
; of the Macintosh ToolBox and Operating System, and are likely to be
|
|
; dependent on their current implementation. Use of any information
|
|
; in this file is likely to cause your software to fail on future
|
|
; versions of Macintosh system software or hardware.
|
|
;
|
|
; Apple Developer Support will not support any use of the following
|
|
; information.
|
|
;
|
|
; In order to prevent any "accidental" use of this information, it has
|
|
; been disabled using the conditional-assembly variable defined below.
|
|
; If you change this to a non-zero value, you're on your own.
|
|
;--------------------------------------------------------------------
|
|
|
|
IF &TYPE('__INCLUDINGSONYEQU__') = 'UNDEFINED' THEN
|
|
__INCLUDINGSONYEQU__ SET 1
|
|
|
|
; If SonyNonPortable is defined to be non-zero, Then a machine type must be specified!
|
|
|
|
IF (&TYPE('SonyNonPortable') = 'UNDEFINED') THEN
|
|
SonyNonPortable EQU 0
|
|
ENDIF
|
|
|
|
IF (&TYPE('onMac') = 'UNDEFINED') THEN
|
|
onMac EQU 0 ; <SM3>
|
|
ENDIF
|
|
|
|
IF (&TYPE('onMacPP') = 'UNDEFINED') THEN
|
|
onMacPP EQU 0
|
|
ENDIF
|
|
|
|
IF (&TYPE('onNuMac') = 'UNDEFINED') THEN
|
|
onNuMac EQU 0
|
|
ENDIF
|
|
|
|
IF (&TYPE('onHcMac') = 'UNDEFINED') THEN
|
|
onHcMac EQU 0
|
|
ENDIF
|
|
|
|
; forDiskDup should be set to 0 for most uses
|
|
|
|
IF (&TYPE('forDiskDup') = 'UNDEFINED') THEN
|
|
forDiskDup EQU forROM ; Only significant for ROM builds.
|
|
ENDIF
|
|
|
|
; Note: supportsDCD means support for pass-thru connector as well.
|
|
; If this is 1, firstDCD and maxDCDcnt equates are needed as well.
|
|
; GetDrive must be adjusted for number of drives, as well!
|
|
|
|
IF onMac THEN
|
|
supportsPWM EQU 1 ; set to 1 if PWM supported
|
|
maxDrvNum EQU 4
|
|
supportsDCD EQU 1 ; set to 1 to include DCD code
|
|
firstDCD EQU 3
|
|
maxDCDcnt EQU 2
|
|
iwmMode EQU $1F
|
|
ENDIF
|
|
|
|
IF onMacPP THEN
|
|
supportsPWM EQU 1 ; set to 1 if PWM supported
|
|
maxDrvNum EQU 5
|
|
supportsDCD EQU 1 ; set to 1 to include DCD code
|
|
firstDCD EQU 4
|
|
maxDCDcnt EQU 2
|
|
iwmMode EQU $17 ; changed for Brian Howard to set half speed
|
|
; <?? same as Mac ??>
|
|
ENDIF
|
|
|
|
IF (&TYPE('onNuMacDCD') = 'UNDEFINED') THEN
|
|
onNuMacDCD EQU 0
|
|
ENDIF
|
|
|
|
IF onNuMac THEN
|
|
supportsPWM EQU 0 ; set to 1 if PWM supported
|
|
IF onNuMacDCD THEN
|
|
maxDrvNum EQU 4
|
|
supportsDCD EQU 1 ; set to 1 to include DCD code
|
|
firstDCD EQU 3
|
|
maxDCDcnt EQU 2
|
|
ELSE
|
|
maxDrvNum EQU 2
|
|
supportsDCD EQU 0 ; set to 1 to include DCD code
|
|
ENDIF
|
|
iwmMode EQU $17
|
|
ENDIF
|
|
|
|
IF onHcMac THEN
|
|
supportsPWM EQU 0 ; set to 1 if PWM supported
|
|
maxDrvNum EQU 5
|
|
supportsDCD EQU 1 ; set to 1 to include DCD code
|
|
firstDCD EQU 4
|
|
maxDCDcnt EQU 2
|
|
iwmMode EQU $17
|
|
ENDIF
|
|
|
|
|
|
IF SonyNonPortable THEN
|
|
|
|
IF (&TYPE('supportsMFM') = 'UNDEFINED') THEN
|
|
supportsMFM EQU 0
|
|
ENDIF
|
|
|
|
; SonyVars Data Structure (offsets):
|
|
; (1) Driver local vars.
|
|
; (2) Drive-specific vars.
|
|
; (3) More driver local vars.
|
|
; (4) Direct-connect driver locals.
|
|
;
|
|
; Drive Constants:
|
|
; (1) Floppy drive constants (tuneable).
|
|
; (2) Floppy drive sense/control constants.
|
|
; (3) Floppy drive formatting constants.
|
|
; (4) Direct-connect drive constants.
|
|
;
|
|
; Driver Constants:
|
|
; (1) Driver Control codes.
|
|
;
|
|
; Driver Vectors:
|
|
; (1) Location of disk routine vectors.
|
|
;
|
|
;_______________________________________________________________________
|
|
|
|
;_______________________________________;
|
|
; ;
|
|
; SonyVars Data Structure (offsets): ;
|
|
;_______________________________________;
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (1) Driver local vars. ; * = known to be used in a copy-
|
|
; protection scheme.
|
|
; +---------------------+ DiskUnitPtr <-----+
|
|
; | | |
|
|
; | "driver local vars" | |
|
|
; | | EjectWait |
|
|
; +---------------------+ <----+ |
|
|
; | | Track | |
|
|
; | drive1 | DrvLclLth |
|
|
; | | DriveMisc | |
|
|
; +---------------------+ <----+ |
|
|
; | | Track |
|
|
; | drive2 | Sony disk driver
|
|
; | | DriveMisc vars, plus
|
|
; +---------------------+ locals for each
|
|
; | | Track diskette drive
|
|
; | driveX | |
|
|
; | | DriveMisc |
|
|
; +---------------------+ |
|
|
; | | FloppyLclEnd |
|
|
; | "more driver vars" | |
|
|
; | | SonyVarEnd <-----+
|
|
; +---------------------+ <-----+
|
|
; | | Track |
|
|
; | driveN | |
|
|
; | | DriveMisc |
|
|
; +---------------------+
|
|
; | | DCD driver vars
|
|
; | driveN | plus locals for
|
|
; | | each DCD drive
|
|
; +---------------------+ |
|
|
; | | DCDCmd |
|
|
; | DCD driver locals | |
|
|
; | | DiskVarLth <-----+
|
|
; +---------------------+
|
|
;
|
|
;_______________________________________________________________________
|
|
;
|
|
|
|
IF supportsMFM THEN
|
|
mfmSectTime EQU 75 ;7.5msec sector time
|
|
maxMFMSectors EQU 18 ;18 MFM sectors/track side (@1440K)
|
|
ENDIF
|
|
|
|
maxGCRSectors EQU 12 ;12 GCR sectors/track side (max)
|
|
diskUnitPtr EQU 0 ; pointer to device control entry
|
|
diskQVE EQU diskUnitPtr+4 ; disk VBL task control block
|
|
drive EQU diskQVE+14 ; * 0001 = int drive, 0002 = ext drive
|
|
wait EQU drive+2 ; extra wait time for speed changes
|
|
sideTrack EQU wait+2 ; destination side/track
|
|
oneToOne EQU sideTrack+2 ; open up rupts flg (no longer used)
|
|
active EQU oneToOne+1 ; * non-zero when driver is active
|
|
timeOut EQU active+1 ; * power time out
|
|
diskBuffer EQU timeOut+2 ; pointer to track data buffer
|
|
firstSect EQU diskBuffer+4 ; low sector number needed on a track
|
|
sectMap EQU firstSect+2 ; bit map of sectors needed on a track
|
|
firstFSeq EQU sectMap+4 ; first file seq # for current r/w request
|
|
fBlksDone EQU firstFSeq+2 ; file blocks done previous to this track
|
|
readErrInit EQU fBlksDone+2 ; init value, read error countdown cntr
|
|
readErrCnt EQU readErrInit+1 ; read error countdown cntr
|
|
recalInit EQU readErrCnt+1 ; init value, recal count
|
|
recalCnt EQU recalInit+1 ; recal count
|
|
wrgSectInit EQU recalCnt+1 ; init value, wrong sector countdown cnt
|
|
wrgSectCnt EQU wrgSectInit+1 ; wrong sector countdown cnt
|
|
badSpdInit EQU wrgSectCnt+1 ; init value, bad speed
|
|
badSpdCnt EQU badSpdInit+1 ; bad speed countdown value
|
|
command EQU badSpdCnt+1 ; I/O command
|
|
headSettle EQU command+2 ; disk head settle time (@100usec)
|
|
spdChgTime EQU headSettle+2 ; motor speed change time (@100usec)
|
|
pwrOnTime EQU spdChgTime+2 ; * power-on wait time (@100usec)
|
|
pwrOffTime EQU pwrOnTime+2 ; * power down time (@1/2sec)
|
|
seekTime EQU pwrOffTime+2 ; seek wait time (@100usec)
|
|
sectTime EQU seekTime+2 ; * sector time (@100usec)
|
|
dskVBLTime EQU sectTime+2 ; VBL task time (@16ms)
|
|
ejectTime EQU dskVBLTime+2 ; Eject time (@100usec)
|
|
ckDelta EQU ejectTime+2 ; delta time before speed recheck
|
|
ejectWait EQU ckDelta+4 ; VBL times after eject to ignore DIP
|
|
|
|
; Format/Verify code reuses some of these fields as follows:
|
|
|
|
gapSync EQU sectMap ; (2) start with 7 groups of intersector sync
|
|
twoSided EQU command ; (1) set non-zero for 2-sided format
|
|
sectSave EQU firstSect ; (2) SectMpSave must follow
|
|
sectMapSave EQU sectMap ; (8) uses SectMap, FirstFSeq, FBlksDone
|
|
sectCnt EQU firstSect ; (2) loop counter . . .
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (2) Drive-specific vars.
|
|
|
|
drvLclLth EQU 66
|
|
drive1 EQU ejectWait+2 ; * internal drive variables
|
|
drive2 EQU drive1+drvLclLth ; * external drive variables
|
|
|
|
IF onMacPP | onHcMac THEN
|
|
drive3 EQU drive2+drvLclLth ; * real external for MacPP
|
|
floppyLclEnd EQU drive3+drvLclLth
|
|
ELSEIF onMac | onNuMac | onMac32 THEN
|
|
floppyLclEnd EQU drive2+drvLclLth
|
|
ENDIF
|
|
|
|
track EQU 0 ; current track location (used for spd)
|
|
writeProt EQU 2 ; * bit7=1=write-protected
|
|
diskInPlace EQU 3 ; * $FC-$FF= just ejected,
|
|
; 0=no disk in place,1=DIP,2=clamped
|
|
installed EQU 4 ; * 0=don't know, 1=inst., $FF=not inst.
|
|
sides EQU 5 ; * bit7=0=1 sided
|
|
dqel EQU 6 ; drive queue element for this drive
|
|
driveQLink EQU 6
|
|
driveQVers EQU 10
|
|
driveSize EQU 18 ; drive block size (DCD only!)
|
|
twoSideFmt EQU 18 ; * non-zero if 2-sided format
|
|
newIntf EQU 19 ; $FF if new interface, $00 for old
|
|
driveErrs EQU 20 ; drive soft errs
|
|
driveS1 EQU 20 ; drive block size (high word)
|
|
driveType EQU 22 ; old OffSpeed (no longer supported)
|
|
driveManf EQU 24
|
|
driveChar EQU 26
|
|
|
|
IF supportsMFM THEN
|
|
mfmDrive EQU 22 ;$FF=SuperDrive, $00=400K or 800K GCR
|
|
mfmDisk EQU 23 ;$FF=MFM, $00=GCR or unformatted
|
|
twoMegFmt EQU 24 ;$FF=2 meg MFM (1440K), $00=1 meg (720K)
|
|
ENDIF
|
|
|
|
driveMisc EQU 27
|
|
spdAdjCnt EQU 24 ; speed adjust count this drive
|
|
trkSpeedTbl EQU 26 ; 5-entry track speed table
|
|
tSTblCode EQU 0 ; first is speed code
|
|
tSTblDelta EQU 2 ; 2% speed code delta
|
|
tSTblTicks EQU 4 ; longword last time checked tick cnt
|
|
trkSTEnd EQU 66 ; end of drive vars
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (3) More driver local vars.
|
|
|
|
wakeTimeCnt EQU floppyLclEnd ; WakeUp remainder count
|
|
saveRegs EQU wakeTimeCnt+2 ; * wakeup routine saves D3-D7,A3-A6 here
|
|
tagBufPtr EQU saveRegs+36 ; if non-zero, pointer to separate
|
|
; buffer for file tags . . .
|
|
tagBufOS EQU tagBufPtr+4 ; temp offset into buffer
|
|
diskErrs EQU tagBufOS+2 ; global soft errors
|
|
passThru EQU diskErrs+2 ; 0 if pass thru on external port
|
|
IF supportsMFM THEN
|
|
hasSuperDrives EQU passThru+1 ; $FF if at least 1 SuperDrive connected
|
|
curSector EQU hasSuperDrives+1 ; current sector being read/written
|
|
ELSE
|
|
sonyExtra EQU passThru+1 ; extra byte
|
|
curSector EQU sonyExtra+1 ; current sector being read/written
|
|
ENDIF
|
|
|
|
tcRdEnable EQU curSector+2 ; (byte) set non-zero to activate reads into cache
|
|
tcInstalled EQU tcRdEnable+1 ; (byte) non-zero when caching is installed and on
|
|
tcDrive EQU tcInstalled+1 ; (word) drive number of cache blks (zero to inval)
|
|
tcSideTrack EQU tcDrive+2 ; (word) side/track of cache blocks
|
|
tcSectMap EQU tcSideTrack+2 ; (long) bitmap of sectors currently cached
|
|
tcBuffer EQU tcSectMap+4 ; (long) pointer to track cache buffer (512+12)*12
|
|
tcNumCached EQU tcBuffer+4 ; (word) number read into cache
|
|
tcNumUsed EQU tcNumCached+2 ; (word actual number used
|
|
lastDrive EQU tcNumUsed+2 ; (word) set at CkDrvNum to previous value of Drive
|
|
timeOutDrive EQU lastDrive+4 ; (word) set at PowerDown to value of Drive
|
|
; Above value should have been +2 since lastDrive is a word.
|
|
timeQEl EQU timeOutDrive+2 ; a time queue element
|
|
|
|
IF onMac | (onMac32 and (NOT(onMacPP | onHcMac | forROM))) THEN
|
|
nextGZProc EQU timeQEl+tmQSize-2 ; (long) saved old GZ proc
|
|
; Above had been +tmQSize, but that changed from $C to $E.
|
|
sonyVarEnd SET nextGZProc+4 ; end of sony vars excluding DCD
|
|
ELSE
|
|
nextGZProc EQU timeQEl+tmQSize ; (long) saved old GZ proc
|
|
driveXlat EQU nextGZProc + 4 ; drive translate table (GetDrive,DiskOpen)
|
|
drvTblPtr EQU driveXlat+((maxDrvNum+1)*2)
|
|
; (long) pointer to DrvTbl to use
|
|
sonyVarEnd SET drvTblPtr+4
|
|
ENDIF
|
|
|
|
IF supportsMFM THEN
|
|
isSWIM EQU sonyVarEnd ;FDC type: $FF=SWIM, $00=IWM
|
|
mfmMode EQU isSWIM+1 ;Current register set selected: $FF=SWIM, $00=IWM
|
|
sonyVarEnd SET mfmMode+1 ; end of sony vars excluding DCD
|
|
ENDIF
|
|
|
|
IF onHcMac THEN
|
|
chipState EQU sonyVarEnd ; Byte holds flag to indicate IWM on or off
|
|
sonyVarEnd SET chipState+2 ; end of sony vars excluding DCD
|
|
ENDIF
|
|
|
|
IF hasPwrControls | hasPowerMgr THEN ; <1.1>
|
|
chipState EQU sonyVarEnd ; Bit7 - saved VIA dir, 6..0 - pmgr enables <1.1>
|
|
diskSleepQEL EQU chipState+2 ; sleep/wakeup queue element
|
|
sonyVarEnd SET diskSleepQEL+SleepqRec.SleepqSize ; end of sony vars excluding DCD
|
|
ENDIF
|
|
|
|
IF forDiskDup THEN
|
|
fmtParams EQU sonyVarEnd ;pointer to parameters for special format command
|
|
gcrFmtByte EQU fmtParams+4 ; saved GCR format byte for duplicator
|
|
clock32Mhz EQU gcrFmtByte+2 ; ( 1) Clock speed: $FF=32Mhz, $00=16Mhz <H3><SM4>
|
|
DisableRetries EQU clock32Mhz+1 ; ( 1) $FF=Don't perform retries, $00=normal <H4><SM4>
|
|
sonyVarEnd SET DisableRetries+1
|
|
ENDIF
|
|
|
|
|
|
IF onMac|onNuMacDCD THEN
|
|
;_______________________________________;
|
|
;
|
|
; (4) Direct-connect driver locals.
|
|
|
|
tagSize EQU 20 ; 20 bytes tags/block
|
|
dcdLclLth EQU 28 ; (use fields through DriveMisc)
|
|
drive3 EQU sonyVarEnd ; first DCD
|
|
drive4 EQU drive3+dcdLclLth ; second DCD
|
|
drive5 EQU drive4+dcdLclLth ; third DCD
|
|
drive6 EQU drive5+dcdLclLth ; fourth DCD
|
|
|
|
ENDIF
|
|
|
|
IF onMacPP|onHcMac THEN
|
|
;_______________________________________;
|
|
;
|
|
; (4) Direct-connect driver locals.
|
|
|
|
tagSize EQU 20 ; 20 bytes tags/block
|
|
dcdLclLth EQU 28 ; (use fields through DriveMisc)
|
|
drive4 EQU sonyVarEnd ; first DCD
|
|
drive5 EQU drive4+dcdLclLth ; second DCD
|
|
drive6 EQU drive5+dcdLclLth ; third DCD
|
|
ENDIF
|
|
|
|
IF onMac|onMacPP|onHcMac|onNuMacDCD THEN
|
|
|
|
|
|
stsRtnAddr EQU drive6+dcdLclLth ; DCD status call return address
|
|
dcdCmd EQU stsRtnAddr+4 ; command byte to DCD
|
|
response EQU dcdCmd ; response byte (command+$80)
|
|
seqNum EQU response+1 ; mb sequence number (sys commands only)
|
|
status EQU seqNum+1 ; returned status bytes
|
|
startBlock EQU status ; starting block # (in commands)
|
|
driveOut EQU startBlock+3 ; we send drive number in this field
|
|
driveIn EQU status+2 ; low 6 bits
|
|
tagBytes EQU status+4 ; tag bytes get stuffed here temporarily
|
|
devType EQU tagBytes ; first 20 bytes of status are written
|
|
devManufctr EQU devType+2 ; in the 20-byte tag buffer
|
|
devChar EQU devManufctr+2
|
|
devBlks EQU devChar ; low 3 bytes of this longword
|
|
devSpares EQU devChar+4
|
|
devBadBlks EQU devSpares+2
|
|
devMisc EQU devBadBlks+2 ; 8 bytes misc
|
|
bufSize EQU tagBytes+tagSize ; number of bytes/block
|
|
lastStatus EQU bufSize+4 ; last status returned
|
|
lastResult EQU lastStatus+4 ; error type
|
|
dcdFlags EQU lastResult+1 ; flag of whether we've done a reset
|
|
chkTime EQU dcdFlags+1 ; 100usec check ready count
|
|
maxTime EQU chkTime+2 ; maximum number of checks
|
|
stsBuffer EQU maxTime+2 ; 512 bytes of status
|
|
devReserve EQU stsBuffer
|
|
devIcon EQU devReserve+44
|
|
devFiller EQU devIcon+256 ; 32 bytes for optional name
|
|
diskVarLth EQU devFiller+32
|
|
stsBufSize EQU diskVarLth-stsBuffer
|
|
|
|
ELSE ;
|
|
diskVarLth EQU sonyVarEnd ;
|
|
ENDIF ;
|
|
|
|
; device characteristics byte:
|
|
|
|
devChEject EQU 4 ; ejectable if 1
|
|
devChWP EQU 3 ; write protected if 1
|
|
devChIcon EQU 2 ; icon available if 1
|
|
|
|
|
|
;_______________________________________;
|
|
; ;
|
|
; Drive Constants: ;
|
|
;_______________________________________;
|
|
|
|
|
|
dqSides EQU -1 ; Bit 7 of this byte: 0=single-sided Sony, 1=double sided
|
|
dqInstall EQU -2 ; 0=unknown, 1=installed, FF=no disk
|
|
dqDIP EQU -3 ; $FC-$FF = disk just ejected,
|
|
; 0 = no disk in place
|
|
; 1 = disk in place
|
|
; 2 = disk has been read
|
|
; >8 = non-ejectable disk
|
|
dqWrPrt EQU -4 ; Bit 7 of this byte: 1=disk is write protected.
|
|
|
|
dqManEjBit EQU 5 ; bit 5 of the dqInstall byte is set after <SM5> <BH 03Aug93>
|
|
; installation for a manual-eject drive
|
|
;_______________________________________;
|
|
;
|
|
; (1) Floppy drive constants (tuneable).
|
|
|
|
kSeekTime EQU 120 ; 12 ms trk-to-trk
|
|
kHdSetTime EQU 100*10 ; 100 ms head settle time <H6><SM4>
|
|
kEjectTime EQU 7500 ; .75 seconds eject time
|
|
kEjectWait EQU -4 ; - number of VBL calls after eject before dip check
|
|
kSectTime EQU 100 ; minimum sector time in 100 us increments (10 ms)
|
|
kPowerOn EQU 4000 ; read/write powerup time in 100 us increments
|
|
kRWPOff EQU 5 ; read/write power off time (in 1/2 seconds)
|
|
kDskVBLTime EQU 30 ; happens every 1/2 second
|
|
kSpdChgTime EQU 1500 ; speed change wait time = 150ms
|
|
kCkDelta EQU 14400 ; speed check delta time (in 1/60 sec) (4 min)
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (2) Floppy drive sense/control constants.
|
|
; (ca1-ca0-sel-ca2).
|
|
|
|
dirLAdr EQU 0 ; dirtn low
|
|
dirHAdr EQU 1
|
|
rdDtaAdr EQU 1 ; side 0 read data
|
|
rdDta1Adr EQU 3 ; side 1 read data
|
|
stepLAdr EQU 4 ; step low and step sense address
|
|
stepHAdr EQU 5
|
|
IF supportsMFM THEN
|
|
mfmModeAdr EQU 6 ;Switch drive into MFM (constant) mode
|
|
gcrModeAdr EQU 7 ;Switch drive into GCR (variable) mode
|
|
ENDIF
|
|
mtrOnAdr EQU 8
|
|
mtrOffAdr EQU 9
|
|
ejectLAdr EQU 12
|
|
ejectHAdr EQU 13
|
|
dipAdr EQU 2 ; disk in place sense address
|
|
mfmDrvAdr EQU 5 ;1=SuperDrive, 0=400K or 800K GCR
|
|
wrProtAdr EQU 6 ; write protect sense address
|
|
sidesAdr EQU 9 ; sense for number of sides
|
|
tk0Adr EQU 10 ; track 0 sense address
|
|
readyAdr EQU 11 ; /Ready sense address
|
|
drvExstAdr EQU 13 ; sense=0 when a drive is connected
|
|
tachAdr EQU 14 ; tach feedback sense address
|
|
newIntfAdr EQU 15 ; implements ready handshake if 1
|
|
IF supportsMFM THEN
|
|
twoMegAdr EQU 15 ;0=1 meg disk, 1=2 meg disk
|
|
ENDIF
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (3) Floppy drive formatting constants.
|
|
|
|
fmtByte EQU $02 ; 2-1 interleave, single-sided
|
|
fmt2Byte EQU $22 ; 2-1 interleave, double-sided
|
|
mustFindCt EQU 1500
|
|
minSync EQU 4 ; min number of inter-sector sync groups
|
|
IF supportsMFM THEN
|
|
|
|
numSDFmts EQU 3 ; 2 GCR + 1 MFM single-density
|
|
numDDFmts EQU 1 ; 1 MFM double-density format
|
|
ELSE
|
|
numSDFmts EQU 2 ; 2 GCR single density formats
|
|
ENDIF
|
|
|
|
IF onMac|onMacPP|onHcMac|onNuMacDCD THEN
|
|
;_______________________________________;
|
|
;
|
|
; (4) Direct-connect drive constants.
|
|
|
|
blkSize EQU 512 ; 512 bytes data/block
|
|
syncByte EQU $AA ; Sync byte for start of transmission
|
|
nonZerStat EQU 1
|
|
comErr EQU 2
|
|
|
|
; New HD20 error codes
|
|
|
|
wrtHsLw EQU $10 ; HSHK low before starting
|
|
wrtHSLwTO EQU $11 ; Time out waiting for HSHK to go low
|
|
wrtHSHighTO EQU $13 ; Time out waiting for HSHK to go high
|
|
rdHsHi EQU $20 ; HSHK high before starting
|
|
rdSyncTO EQU $21 ; Time out waiting for sync ($AA) bye
|
|
rdGroupTO EQU $22 ; Time out waiting for group
|
|
rdHoffSyncTO EQU $24 ; Time out waiting for sync after holdoff
|
|
rdHsHiTO EQU $25 ; Time out waiting for HSHK high
|
|
rdChksumErr EQU $26 ; Checksum error on response packet
|
|
invalidResp EQU $30 ; First byte in response packet was wrong
|
|
sqncNumErr EQU $31 ; Sequence number in response packet was wrong
|
|
dNumberErr EQU $32 ; Drive number in response packet was wrong
|
|
noResp EQU $40 ; No response packet ever received
|
|
|
|
; LastStatus
|
|
|
|
opFailed EQU 24 ; bit to test for operation failed
|
|
bChksum EQU 30 ; bit number for checksum error
|
|
|
|
; DCDFlags
|
|
|
|
resetonce EQU 0
|
|
retryonce EQU 1
|
|
maxTries EQU 4 ; max # times to try command
|
|
tSeekChk EQU 10 ; check during a seek every 1 ms
|
|
tSeekMax EQU 10000 ; max time for seek = 10 secs
|
|
tStsChk EQU 10 ; check during a status every 1 ms
|
|
tStsMax EQU 10000 ; max time for status = 10 secs
|
|
tQuickTime EQU 100
|
|
tNextChk EQU 7 ; check for next block after 700 µsec
|
|
tNextMax EQU 10000 ; max time for next block = 7 secs
|
|
tFVChk EQU 100 ; check during fmt/vfy every 10 ms
|
|
tFVMax EQU 18000 ; max time for fmt/vfy = 3 minutes
|
|
tRstAssert EQU 1000 ; assert reset for 100 msec
|
|
tRstSettle EQU 20000 ; 2 sec wait for busy to settle
|
|
tRstChk EQU 100 ; check during reset every 10 ms
|
|
tRstMax EQU 1600 ; max time for reset = 16 seconds
|
|
|
|
; DCD sense/cntl addr (ca1-ca0-sel-ca2)
|
|
|
|
dcdExist EQU 5 ; /Exist (/Sides=/DrvIn=1 also)
|
|
dcdReset EQU 1 ; for 1ms resets DCD controller
|
|
ENDIF ;
|
|
|
|
;_______________________________________;
|
|
; ;
|
|
; Driver Constants: ;
|
|
;_______________________________________;
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (1) Driver Control codes.
|
|
|
|
verifyCC EQU 5 ; 'verify' control code
|
|
formatCC EQU 6 ; 'format' control code
|
|
tagBufCC EQU 8 ; 'set tag buffer' control code
|
|
tCacheCC EQU 9 ; 'track cache' control
|
|
iconIDCC EQU 20 ; 'get icon id' control code
|
|
iconCC EQU 21 ; 'get icon' control code
|
|
iconLogCC EQU 22 ; 'get logical icon' code
|
|
infoCC EQU 23 ; 'get drive info' code
|
|
RetriesCC EQU 17232 ; 'Enable/Disable Retries' code <H4><SM4>
|
|
IF forDiskDup THEN
|
|
FmtCopyCC EQU $5343 ;one-pass format/copy/verify for disk duplicator
|
|
ENDIF
|
|
GetRawDataCC EQU 18244 ; 'get raw track data' code <1.5>
|
|
|
|
; (2) Driver Status codes.
|
|
|
|
fmtLstCode EQU 6 ;Returns a list of disk formats
|
|
IF supportsMFM THEN
|
|
mfmStsCode EQU 10 ;'Get MFM status' status code
|
|
ENDIF
|
|
SpdChkSts EQU 17232 ; Checks disk speed at a given track <H5><SM4>
|
|
IF forDiskDup THEN
|
|
DupVerSts EQU $4456 ;disk duplicator version supported (to match features)
|
|
FmtByteSts EQU $5343 ;return address header format byte
|
|
ENDIF ; for disk duplicator
|
|
|
|
|
|
;_______________________________________;
|
|
;
|
|
; Driver Vectors: ;
|
|
;_______________________________________;
|
|
|
|
;_______________________________________;
|
|
;
|
|
; (1) Location of disk routine vectors.
|
|
|
|
jFigTrkSpd EQU DiskVars
|
|
jDiskPrime EQU jFigTrkSpd+4
|
|
jRdAddr EQU jDiskPrime+4
|
|
jRdData EQU jRdAddr+4
|
|
jWrData EQU jRdData+4
|
|
jSeek EQU jWrData+4
|
|
jSetUpPoll EQU jSeek+4
|
|
jRecal EQU jSetUpPoll+4
|
|
jControl EQU jRecal+4
|
|
jWakeUp EQU jControl+4
|
|
jReSeek EQU jWakeUp+4
|
|
jMakeSpdTbl EQU jReSeek+4
|
|
jAdrDisk EQU jMakeSpdTbl+4
|
|
jSetSpeed EQU jAdrDisk+4
|
|
niblTbl EQU jSetSpeed+4
|
|
jDiskSel EQU $B40 ; (long) vector to .Sony DiskSelect routine
|
|
jSendCmd EQU $B44 ; (long) vector to .Sony DCD SendCmd routine
|
|
jDCDReset EQU $B48 ; (long) vector to .Sony DCD DCDReset routine
|
|
|
|
IF supportsMFM THEN
|
|
jMRdAddr EQU $680 ; (long) vector to MFM MRdAddr
|
|
jMRdData EQU jMRdAddr+4 ; (long) vector to MFM MRdData
|
|
jMWrData EQU jMRdData+4 ; (long) vector to MFM MWrData
|
|
ENDIF
|
|
|
|
ENDIF ;end exclusion of private information
|
|
|
|
ENDIF ; ...already included |