mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-01 15:30:02 +00:00
1 line
3.4 KiB
Plaintext
Executable File
1 line
3.4 KiB
Plaintext
Executable File
;
|
|
; Heap.equ
|
|
;
|
|
; Heap memory managment module equates
|
|
;
|
|
; Copyright © 1989 Claris Corporation
|
|
;
|
|
; 1-25-89 Begun by Kevin A. Watts
|
|
;
|
|
;--------------------------------------------------------------
|
|
|
|
H_MAX_FREE_LIST equ 64 ; maximum data size of blocks in free lists
|
|
H_BLOCK_GRAN equ 2 ; must be a power of 2
|
|
H_N_FREE_LISTS equ (H_MAX_FREE_LIST/H_BLOCK_GRAN+1)
|
|
|
|
|
|
H_HeaderRec RECORD 0 ; Structure of a heap header block
|
|
|
|
Header DS.L 1 ; handle to the header block
|
|
Version DS.L 1 ; heap version # (at offset 4 for compatability)
|
|
HeaderPtr DS.L 1 ; pointer to the header block
|
|
NumISegments DS.W 1 ; # of index segments
|
|
NumDSegments DS.W 1 ; # of data segments
|
|
FreeIndex DS.L 1 ; index free list head
|
|
EndIndex DS.W 1 ; offset to never used portion of newest index segment
|
|
|
|
ZHEADER_SHORT_SIZE equ *
|
|
|
|
FreeListArray DS.L 1 ; = HeaderPtr + FreeLists
|
|
ISegHandleLo DS.L 1 ; = HeaderPtr + ISegHandle
|
|
ISegHandleHi DS.L 1 ; = HeaderPtr + ISegHandle+2
|
|
DSegHandleLo DS.L 1 ; = HeaderPtr + DSegHandle
|
|
DSegHandleHi DS.L 1 ; = HeaderPtr + DSegHandle+2
|
|
ISegPtrLo DS.L 1 ; = HeaderPtr + ISegPtr
|
|
ISegPtrHi DS.L 1 ; = HeaderPtr + ISegPtr+2
|
|
DSegPtrLo DS.L 1 ; = HeaderPtr + DSegPtr
|
|
DSegPtrHi DS.L 1 ; = HeaderPtr + DSegPtr+2
|
|
|
|
ZHEADER_SIZE equ *
|
|
|
|
FreeLists DS.W H_N_FREE_LISTS
|
|
; free list heads for each block size (segment #s)
|
|
HANDLE_ARRAY equ *
|
|
|
|
;Array of index segment handles DS.L H_MaxSegments
|
|
;Array of index segment pointers DS.L H_MaxSegments
|
|
;Array of data segment handles DS.L H_MaxSegments
|
|
;Array of data segment pointers DS.L H_MaxSegments
|
|
|
|
ENDR ; H_HeaderRec
|
|
|
|
;------------
|
|
H_VariablesRec RECORD H_HeaderRec.ZHEADER_SIZE ; Heap variables
|
|
|
|
; 'Globals' - maintain value across heap calls
|
|
H_ZPptr DS.L 1 ; Pointer to zero page
|
|
H_IsLocked DS.W 1 ; Flag - is current heap locked?
|
|
H_MaxSegments DS.W 1 ; Maximum number each of index & data segments
|
|
H_HeaderSize DS.W 1 ; Size of heap header
|
|
H_DSegHOffsetLo DS.W 1 ; Offset to array of handles to data segments
|
|
H_DSegHOffsetHi DS.W 1 ; " + 2
|
|
H_ISegPOffsetLo DS.W 1 ; Offset to array of pointers to index segments
|
|
H_ISegPOffsetHi DS.W 1 ; " + 2
|
|
H_DSegPOffsetLo DS.W 1 ; Offset to array of pointers to data segments
|
|
H_DSegPOffsetHi DS.W 1 ; " + 2
|
|
|
|
; 'Locals' - not assumed to maintain value across heap calls
|
|
BlockSize DS.W 1 ; = DataSize + H_BLOCK_OVERHEAD
|
|
CopyHdr DS.W 1 ; Flag to control header copying
|
|
DP DS.W 1 ; place to store save direct page value
|
|
DataSize DS.L 1 ; size of data block
|
|
EndPtr DS.L 1 ; Pointer to end of used portion of index table
|
|
ErrorFlag DS.W 1
|
|
FreeListOffset DS.W 1 ; Offset into an array of free lists
|
|
HasMoved DS.W 1 ; Flag - has heap header moved?
|
|
Index DS.L 1 ; an index
|
|
ISegPtr DS.L 1 ; pointer to an index segment
|
|
SkipLastResort DS.W 1 ; Flag - skip last resort allocation?
|
|
MaxFreeSeg DS.W 1 ; segment with most free space
|
|
MaxFreeSpace DS.W 1 ; free space in MaxFreeSeg
|
|
NewHeap DS.L 1 ; handle of heap to set
|
|
Offset DS.W 1 ; block offset within a segment
|
|
OldIndex DS.L 1 ; an index
|
|
OldPtr DS.L 1 ; a pointer
|
|
OldSize DS.L 1 ; size of data block
|
|
Ptr DS.L 1 ; generic ptr (usually to a data block)
|
|
SegHandle DS.L 1 ; handle of a data segment
|
|
Segment DS.W 1 ; a segment number
|
|
SegPtr DS.L 1 ; pointer to a data segment
|
|
SegSize DS.W 1 ; segment size
|
|
|
|
VARIABLE_SPACE equ * ; total size of variables
|
|
|
|
ENDR ; H_Globals ----------------------
|
|
|
|
;------------
|
|
H_ZPSIZE equ H_HeaderRec.ZHEADER_SIZE+H_VariablesRec.VARIABLE_SPACE-H_VariablesRec
|
|
H_ZPATTR equ attrBank+attrFixed+attrLocked+attrPage
|
|
|
|
IMPORT D_ZeroBlock
|