ProDOS8/MLI.SRC/WRKSPACE.S

180 lines
7.0 KiB
ArmAsm

***********************************************************
* Global Data
ownersBlock DW $0000
ownersEnt DB $00
ownersLen DB $00
*-------------------------------------------------
* Part of volume dir header
h_creDate DW $0000 ;Directory creation date
DW $0000 ;Directory creation time
DB $00 ;Version under which this directory was created
DB $00 ;Earliest version that it's compatible with
h_attr DB $00 ;Attributes (protect bit, etc.)
h_entLen DB $00 ;Length of each entry in this dir
h_maxEnt DB $00 ;Maximum # of entries per block
h_fileCnt DW $0000 ;Current # of files in this dir
h_bitMap DW $0000 ;Disk Addr of first allocation bit map
h_totBlk DW $0000 ;Total number of blocks on this unit
d_dev DB $00 ;Device number of this directory entry
d_head DW $0000 ;Disk Addr of <sub> directory header
d_entBlk DW $0000 ;Disk Addr of block which contains this entry
d_entNum DB $00 ;Entry number within block
*-------------------------------------------------
* Layout of file entry
d_file EQU *
d_stor EQU *-d_file
DB $00 ;storage type * 16 + file name length
DS 15,0 ;file name
d_fileID EQU *-d_file
DB $00 ;User's identification byte
d_first EQU *-d_file
DW $0000 ;First block of file
d_usage EQU *-d_file
DW $0000 ;# of blks currently allocated to this file
d_eof EQU *-d_file
DB 0,0,0 ;Current end of file marker
d_creDate EQU *-d_file
DW $0000 ;date of file's creation
d_creTime EQU *-d_file
DW $0000 ;time of file's creation
d_sosVer EQU *-d_file
DB $00 ;SOS version that created this file
d_comp EQU *-d_file
DB $00 ;Backward version compatablity
d_attr EQU *-d_file
DB $00 ;'protect', read/write 'enable' etc.
d_auxID EQU *-d_file
DW $0000 ;User auxillary identification
d_modDate EQU *-d_file
DW $0000 ;File's last modification date
d_modTime EQU *-d_file
DW $0000 ;File's last modification time
d_dHdr EQU *-d_file
DW $0000 ;Header block address of file's directory
*-------------------------------------------------
scrtch DS 4,0 ;Scratch area for allocation address conversion
oldEOF DS 3,0 ;Temp used in w/r
oldMark DS 3,0 ;Used by 'RdPosn' and 'Write'
xvcbPtr DB $00 ;Used in 'cmpvcb' as a temp
vcbPtr DB $00 ;Offset into VCB table
fcbPtr DB $00 ;Offset into FCB table
fcbFlg DB $00 ;This is a flag to indicate a free FCB is available
reqL DB $00 ;# of free blks required
reqH DB $00
levels DB $00 ;Storage type (seedling,sapling etc)
* # of entries examined or
* used as a flag to indicate file is already open
totEnt DB $00 ;(0=open)
entCnt DW $0000 ;File count
* entries/block loop count or
* as a temp to return the refnum of a free FCB
cntEnt DB $00
* Free entry found flag (if > 0)
* # of 1st bitMap block with free bit on
* or bit for free
noFree DB $00
*-------------------------------------------------
* Variable work area
bmCnt DB $00 ;# in bitMap left to search
sapPtr DB $00
pathCnt DB $00 ;Pathname len
pathDev DB $00 ;Dev num for prefix dir header
pathBlok DW $0000 ;Block of prefix dir header
bmPtr DB $00 ;VBM byte offset in page
basVal DB $00 ;VBM page offset
half DB $00 ;VBM buf page (0 or 1)
* bit map info tables (a & b)
bmaStat DB $00 ;VBM flag (If $80, needs writing)
bmaDev DB $00 ;VBM device
bmaDskAdr DW $00 ;VBM blk number
bmaCurrMap DB $00 ;bitMap blk offset for multiblk VBM
* New mark to be positioned to for SetMark
* or new moving mark (for Read)
* or new EOF for SETEOF
tPosll DB $00
tPoslh DB $00
tPosHi DB $00
rwReqL DB $00 ;Request count (R/W etc)
rwReqH DB $00
nlChar DB $00
nlMask DB $00
ioAccess DB $00 ;Has a call been made to disk device handler?
bulkCnt EQU *
cmdTmp DB $00 ;Test refnum, time, and dskswtch for (pre)processing
bkBitFlg DB $00 ;Used for ReviseDir to set or clear back up bit
duplFlag DB $00 ;Difference between volNotFound and dupVol by synPath
vcbEntry DB $00 ;Pointer to current VCB entry
* xdos temporaries added....
namCnt DB $00 ;ONLINE: vol len - loop index
* Characters in current pathname index level or
* New pathname : index to last name
rnPtr DB $00
pnPtr EQU * ; Old pathname: index to last name or
namPtr DB $00 ;ONLINE: index to data buffer
vnPtr DB $00 ;Old PfixPtr value
prfxFlg DB $00 ;Pathname fully qualified flag (if $FF)
clsFlshErr EQU * ;Close-all err code
tempX DB $00 ;ONLINE: devcnt
* The following are used for deallocation temps.
firstBlkL DB $00
firstBlkH DB $00
storType DB $00
deBlock DW $0000 ;Count of freed blks
dTree DB $00 ;EOFblk # (MSB)
dSap DB $00 ;EOFblk # (LSB)
dSeed DW $0000 ;EOF byte offset into blk
topDest DB $00 ;EOF-master index counter
dTempX DB $00 ;ONLINE: devcnt
* Device table built by Online
* Also used by SetEOF to keep track
* of 8 blks to be freed at a time
deAlocBufL DS 8,0
deAlocBufH DS 8,0
lookList EQU deAlocBufL
cBytes DW $0000 ;Len of path, etc
DB $00 ;cbytes+2 must always be zero. See "CalcMark"
bufAddrL DB $00
bufAddrH DB $00 ;Buffer allocation, getbuffr, and release buffer temps.
goAdr DA $0000 ;Jump vector used for indirect JMP
delFlag DB $00 ;Used by DeTree to know if called from delete
DS $FEFD-*,0
dispVect EQU *
DA CallDisp ;Dispatcher/Selector
* This flag is set in the loader indicating
* whether the machine is a cortland
cortFlag DB 0 ;0=>non-cortland / 1=>cortland