mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-16 03:29:58 +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.
262 lines
8.7 KiB
Plaintext
262 lines
8.7 KiB
Plaintext
;
|
|
; File: Bass_Allocate.a
|
|
;
|
|
; Copyright: © 1989-1993 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <SM5> 9/13/93 SAM Removed an include of QDHooks.a.
|
|
; <SM4> 2/20/93 SAM Added and INCLUDE of TrapsPrivate.a.
|
|
; <SM3> 2/4/93 PN I did a global search and NewTempHandle is only called from
|
|
; CTempBuffHand. So I change the name to FontNewTempHandle to
|
|
; eliminate confusion with QD call.
|
|
; <SM2> 4/16/92 PN Change GETSTYLEBUFHAND to upper case
|
|
; <3> 7/10/91 JSM Remove obsolete SysVers conditionals.
|
|
; <2> 3/20/91 CL B3B, #84919: Fixed NewTempHandle, EndSystem mode reset the state
|
|
; from MFTempHandle. This resulted in a memory leak since we
|
|
; thought we did not get a block from MFTemp memory and continued
|
|
; to get a application block instead.
|
|
; <13> 9/23/90 CL Can not call BeginSystemMode or EndSystem mode in 6.0.x systems.
|
|
; <12> 9/13/90 CL Fixing test for MultiFinder to use the unimplemented trap
|
|
; instead of these old weird vectors.
|
|
; <11> 9/10/90 CL Added PurgeSpaceSysTotal and NewHandleSysNoInt for testing purposes.
|
|
; <10> 9/4/90 CL Added MultiFinderExist routine to call from c code.
|
|
; <9> 8/31/90 KSM Add Charlton's changes for MF existence checking.
|
|
; <8> 7/20/90 DTY Added EndProcs and End for Greggy.
|
|
; <7> 7/20/90 CL The assembler wishes to create a branch of zero. This gets
|
|
; intrepreted into a long branch and takes the next instruction as
|
|
; the offset and really messes up the code.
|
|
; <6> 7/5/90 RB Richard is checking this out for my Chazz bug. Need to BSR to
|
|
; NewTempHandle instead of calling the Macro.
|
|
; <5> 7/3/90 CL Putting back in the NewTempHandle call for the init since the
|
|
; trap does not exist on the 6.0.x world.
|
|
; <4> 6/22/90 CL Taking out newTempHandle, newTempBuffer, disposeTempBuffer.
|
|
; <3> 4/11/90 dba Chaz says we need this new version
|
|
; <2> 2/27/90 CL Supports new fast blit loopsÉ
|
|
; <1.2> 8/28/89 CEL Linker has a mean bug that leaves out some code. Moved code
|
|
; <1.1> 8/14/89 CEL Fixed up tstMFExist macro to use different base addr for MacPlus
|
|
; <1.0> 8/1/89 CEL Adding into Bass build for the first timeÉ
|
|
; <1.0> 8/1/89 CEL Adding into Bass build for the first timeÉ
|
|
;
|
|
|
|
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
; Bass_Allocate.a
|
|
;
|
|
; File: Bass_Allocate.a
|
|
; Language: 68000 assembly
|
|
;
|
|
; Author: Charlton E. Lui
|
|
; Date: August 1, 1989
|
|
; Modifications: 1.0
|
|
;
|
|
; Copyright Apple Computer, Inc. 1989
|
|
; All Rights Reserved
|
|
;
|
|
; Gets memory from Multifinder heap.
|
|
;
|
|
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
|
|
CASE OBJ
|
|
|
|
INCLUDE 'Traps.a'
|
|
INCLUDE 'SysEqu.a'
|
|
INCLUDE 'SplineDefines.a'
|
|
INCLUDE 'fontPrivate.a'
|
|
INCLUDE 'MFPrivate.a'
|
|
INCLUDE 'TrapsPrivate.a' ; <SM4>
|
|
|
|
if &type('INITVERSION') = 'UNDEFINED' then
|
|
BASS_INIT equ 0
|
|
else
|
|
BASS_INIT equ 1
|
|
asGaudi equ 1
|
|
endif
|
|
|
|
MACRO ; $$$$ Use the unimplemented Trap instead
|
|
_tstMFExists
|
|
IF 1 THEN
|
|
MOVE.L #$A89F, D0 ;Unimplemented trap
|
|
_GetTrapAddress
|
|
MOVE.L A0, D1
|
|
MOVE.L #$A88F, D0 ;MultiFinder trap
|
|
_GetTrapAddress
|
|
SUB.L A0, D1
|
|
ELSE
|
|
MOVE.L expandMem, A0 ; get low mem expand
|
|
MOVE.L ExpandMemRec.emSplineKey(A0), A0 ; Handle to splineKey
|
|
MOVE.L (A0), A0 ; Pointer to rec
|
|
MOVE.W splineKeyRec.machineType(A0), D0 ; Save away machine type
|
|
CMP.W #envMacPlus, D0 ; Is it a MacPlus
|
|
BNE.S @useCheck
|
|
move.l ($C00+$9f*4),d0 ; get address of unimplemented trap
|
|
cmp.l ($C00+$8f*4),d0 ; same as OSDispatch?
|
|
BRA.S @doneMacro
|
|
@useCheck
|
|
move.l ($E00+$9f*4),d0 ;get address of unimplemented trap
|
|
cmp.l ($E00+$8f*4),d0 ;same as OSDispatch?
|
|
@doneMacro
|
|
ENDIF
|
|
ENDM
|
|
|
|
|
|
PurgeSpaceSysTotal Proc Export ;Checks for purge space in sys heap
|
|
_PurgeSpace ,SYS
|
|
RTS
|
|
|
|
|
|
|
|
MultiFinderExist Proc Export
|
|
_tstMFExists ;is twitcher happening? (trashes d0)
|
|
MOVE.L D1, D0 ;Finder mode!
|
|
rts
|
|
|
|
|
|
FontNewTempHandle PROC
|
|
;--------------------------------------------------
|
|
;
|
|
; Function FontNewTempHandle(VAR requestSize: long) : TBuffer;
|
|
;
|
|
; This routine attempts to get a block of the requested size from
|
|
; the multiFinder temporary memory pool.
|
|
; If multiFinder is not running or memory is full, then a nil pointer
|
|
; and a size of zero are returned.
|
|
;
|
|
; entry: d0 = requested size
|
|
; exit: d0 = actual size
|
|
; a0 = handle
|
|
|
|
movem.l d1-d3,-(sp) ;save work registers
|
|
MOVEM.L A0-A1/D0-D2,-(SP) ;Save off all registers before call <13>
|
|
_BeginSystemMode ;<9>
|
|
MOVEM.L (SP)+, A0-A1/D0-D2 ;Restore all registers on return
|
|
clr.l -(sp) ;room for result
|
|
move.l d3,-(sp) ;ask for it
|
|
pea memErr ;var result code
|
|
_MFTempNewHandle
|
|
move.l (sp)+,d0
|
|
move.l d0,a0 ;return handle
|
|
beq.s @done ;leave it empty $$$ take out later
|
|
move.l d3,d0 ;return size in d0 $$$ take out later
|
|
@done ; $$$ take out later
|
|
MOVEM.L A0-A1/D0-D2,-(SP) ;Save off all registers before call
|
|
_EndSystemMode ;<9>
|
|
MOVEM.L (SP)+, A0-A1/D0-D2 ;Restore all registers on return
|
|
move.l a0, d0 ;set status
|
|
@noTry movem.l (sp)+,d1-d3 ;restore work registers
|
|
rts
|
|
|
|
|
|
NewTempBuffer PROC EXPORT ;<18Jun89> BAL
|
|
;--------------------------------------------------
|
|
;
|
|
; Function NewTempBuffer(VAR requestSize: long) : TBuffer;
|
|
;
|
|
; This routine attempts to get a block of the requested size from
|
|
; the multiFinder temporary memory pool. If the requested amount is
|
|
; not available it returns the largest contiguous block and its size.
|
|
; If multiFinder is not running or memory is full, then a nil pointer
|
|
; and a size of zero is returned.
|
|
;
|
|
; entry: d0 = requested size
|
|
; exit: d0 = actual size
|
|
; a0 = handle
|
|
|
|
movem.l d1-d3,-(sp) ;save work registers
|
|
move.l d0,d3 ;copy requested size
|
|
_tstMFExists ;is twitcher happening? (trashes d0)
|
|
bne.s @tryMultMem ;no, we're out of luck <9>
|
|
moveq #0,d0 ;zero resulting size
|
|
move.l d0,a0 ;return nil handle
|
|
bra.s @noTry
|
|
@tryMultMem
|
|
IF NOT BASS_INIT THEN
|
|
MOVEM.L A0-A1/D0-D2,-(SP) ;Save off all registers before call
|
|
_BeginSystemMode ;<9>
|
|
MOVEM.L (SP)+, A0-A1/D0-D2 ;Restore all registers on return
|
|
ENDIF
|
|
clr.l -(sp) ;room for result
|
|
move.l d3,-(sp) ;ask for it
|
|
pea memErr ;var result code
|
|
_MFTempNewHandle
|
|
move.l (sp)+,d0
|
|
beq.s @hardWay
|
|
@gotit move.l d0,-(sp) ;save a copy of the handle
|
|
move.l d0,-(sp) ;handle to lock
|
|
pea memErr ;var result code
|
|
_MFTempHLock ;lock it down
|
|
|
|
move.l (sp)+,a0 ;return handle in a0
|
|
move.l d3,d0 ;return size in d0
|
|
@done
|
|
IF NOT BASS_INIT THEN
|
|
MOVEM.L A0-A1/D0-D2,-(SP) ;Save off all registers before call
|
|
_EndSystemMode
|
|
MOVEM.L (SP)+, A0-A1/D0-D2 ;Restore all registers on return
|
|
ENDIF
|
|
@noTry movem.l (sp)+,d1-d3 ;restore work registers
|
|
rts
|
|
|
|
@hardWay
|
|
clr.l -(sp) ;room for grow amt
|
|
clr.l -(sp) ;room for result
|
|
pea 4(sp) ;push var grow
|
|
_MFMaxMem
|
|
move.l (sp)+,d3 ;get size in d3
|
|
addq #4,sp ;pop grow amt
|
|
; tst.l d3 ;<9>
|
|
ble.s @noMem ;bail if none or less
|
|
@tryAgain
|
|
clr.l -(sp) ;room for result
|
|
move.l d3,-(sp) ;ask for this much
|
|
pea memErr ;var result code
|
|
_MFTempNewHandle ;a prayer
|
|
move.l (sp)+,d0 ;did we get it?
|
|
bne.s @gotit
|
|
sub.l #$1000,d3 ;no, back off by 4K
|
|
bgt.s @tryAgain ;try again
|
|
|
|
@noMem moveq #0,d0 ;zero resulting size <9>
|
|
move.l d0,a0 ;return nil handle
|
|
bra.s @done
|
|
|
|
|
|
DisposeTempBuffer PROC EXPORT ;<18Jun89> BAL
|
|
;--------------------------------------------------
|
|
;
|
|
; Procedure DisposeTempBuffer(aBufferHandle: : TBuffer);
|
|
;
|
|
; This routine frees a block of multiFinder temporary memory.
|
|
;
|
|
; entry: a0 = handle to dispose
|
|
|
|
move.l a0,d0 ;is it nil?
|
|
beq.s @nil
|
|
move.l a0,-(sp) ;push the handle
|
|
pea memErr ;var result code
|
|
_MFTempDisposHandle ;dispose it.
|
|
@nil rts
|
|
ENDPROC
|
|
|
|
;--------------------------------------------------
|
|
; This procedure has to be underneath NewTempHandle
|
|
; and GetStyleBufHand. Otherwise the mean old linker
|
|
; bug will eliminate code that is below this routine.
|
|
;
|
|
;
|
|
;
|
|
CtempBufHand PROC EXPORT
|
|
EXPORT GETSTYLEBUFHAND
|
|
MOVE.L 4(SP), d0 ; Get size
|
|
GETSTYLEBUFHAND
|
|
MOVE.L D0, D3 ; Save request in reg
|
|
BSR FontNewTempHandle ; Try to get it from Multi Temp
|
|
BNE.S @returnVal ; Worked so go home
|
|
MOVE.L D3, d0 ; Get size
|
|
MOVE.L theZone, D2 ; Save the current zone
|
|
MOVE.L applZone, theZone ; Switch to app zone
|
|
_NewHandle ; Try App heap
|
|
MOVE.L D2, theZone ; Restore zone
|
|
@returnVal
|
|
MOVE.L A0, D0
|
|
RTS
|
|
ENDPROC
|
|
END |