mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 16:31:01 +00:00
154 lines
3.4 KiB
C
154 lines
3.4 KiB
C
|
/*
|
|||
|
File: Glue.h
|
|||
|
|
|||
|
Contains: Assembly glue header for Process Manager.
|
|||
|
|
|||
|
Written by: Phil Goldman
|
|||
|
|
|||
|
Copyright: <EFBFBD> 1988-1991 by Apple Computer, Inc., all rights reserved.
|
|||
|
|
|||
|
This file is used in these builds: System
|
|||
|
|
|||
|
Change History (most recent first):
|
|||
|
|
|||
|
<3> 7/26/91 stb remove glue for HOpenResFile. Inline is used now when
|
|||
|
SystemSevenOrLater is defined.
|
|||
|
<0> 5/20/88 PYG New Today.
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef __GLUE__
|
|||
|
#define __GLUE__
|
|||
|
|
|||
|
#ifndef __FILES__
|
|||
|
#include "Files.h"
|
|||
|
#endif
|
|||
|
|
|||
|
/* Symbols for values of the asynch parameter of HFS calls */
|
|||
|
#define AsyncHFS true
|
|||
|
#define SyncHFS false
|
|||
|
|
|||
|
/* First come the routines that will change the a5 register to either the
|
|||
|
* Process Mgr value or the CURRENTA5 value, and back again. ProcessMgrA5Setup and
|
|||
|
* CurrentA5Setup also copy the long word that the outgoing a5 points to. This
|
|||
|
* long word is a pointer to the QuickDraw global data. This gives the incoming
|
|||
|
* a5 world some decent graphics information, and is required if we intend to use
|
|||
|
* QuickDraw or its clients while we have the new a5 set up.
|
|||
|
*/
|
|||
|
|
|||
|
/* ProcessMgrA5Setup. Set up PROCESSMGRGLOBALS and copy in the graphics global pointer */
|
|||
|
unsigned long
|
|||
|
ProcessMgrA5Setup(void)
|
|||
|
= {0x200D, 0x2215, 0x2A78, 0x0B7C, 0x2a81};
|
|||
|
/* move.l a5,d0
|
|||
|
* move.l (a5),d1
|
|||
|
* move.l PROCESSMGRGLOBALS,a5
|
|||
|
* move.l d1,(a5)
|
|||
|
*/
|
|||
|
|
|||
|
/* CurrentA5Setup. Set up CURRENTA5 and copy in the graphics global pointer.
|
|||
|
* NOTE: When is this useful, since the CURRENTA5 graphics world is
|
|||
|
* undoubtedly OK to use?
|
|||
|
*/
|
|||
|
unsigned long
|
|||
|
CurrentA5Setup(void)
|
|||
|
= {0x200D, 0x2215, 0x2A78, 0x0904, 0x2a81};
|
|||
|
/* move.l a5,d0
|
|||
|
* move.l (a5),d1
|
|||
|
* move.l $904,a5
|
|||
|
* move.l d1,(a5)
|
|||
|
*/
|
|||
|
|
|||
|
/* A5Restore. Set a5 from parameter. Does not restore the graphics global pointer. */
|
|||
|
#pragma parameter A5Restore(__D0)
|
|||
|
void
|
|||
|
A5Restore(unsigned long myA5)
|
|||
|
= {0x2A40};
|
|||
|
/* move.l d0,a5
|
|||
|
*/
|
|||
|
|
|||
|
/* ProcessMgrA5SimpleSetup. Set up PROCESSMGRGLOBALS, but don't copy the graphics global
|
|||
|
* pointer.
|
|||
|
*/
|
|||
|
unsigned long
|
|||
|
ProcessMgrA5SimpleSetup(void)
|
|||
|
= {0x200D, 0x2A78, 0x0B7C};
|
|||
|
/* move.l a5,d0
|
|||
|
* move.l PROCESSMGRGLOBALS,a5
|
|||
|
*/
|
|||
|
|
|||
|
/* CurrentA5SimpleSetup. Set up CURRENTA5, but don't copy the graphics global pointer */
|
|||
|
unsigned long
|
|||
|
CurrentA5SimpleSetup(void)
|
|||
|
= {0x200D, 0x2A78, 0x0904};
|
|||
|
/* move.l a5,d0
|
|||
|
* move.l $904,a5
|
|||
|
*/
|
|||
|
|
|||
|
/* A5SimpleRestore. Set a5 from parameter. Does not restore the graphics global pointer. */
|
|||
|
#pragma parameter A5SimpleRestore(__D0)
|
|||
|
void
|
|||
|
A5SimpleRestore(unsigned long myA5)
|
|||
|
= {0x2A40};
|
|||
|
/* move.l d0,a5
|
|||
|
*/
|
|||
|
|
|||
|
/* Access to assembler */
|
|||
|
void
|
|||
|
GetLiveFPURegs(Ptr dstPtr)
|
|||
|
= {0x2057, 0xF218, 0xBC00, 0xF210, 0xF0FF};
|
|||
|
/* move.l (sp),a0
|
|||
|
* fmovem fpcr/fpsr/fpiar,(a0)+
|
|||
|
* fmovem fp0-fp7,(a0)
|
|||
|
*/
|
|||
|
|
|||
|
void
|
|||
|
SetLiveFPURegs(Ptr srcPtr)
|
|||
|
= {0x2057, 0xF218, 0x9C00, 0xF210, 0xD0FF};
|
|||
|
/* move.l (sp),a0
|
|||
|
* fmovem (a0)+,fpcr/fpsr/fpiar
|
|||
|
* fmovem (a0),fp0-fp7
|
|||
|
*/
|
|||
|
|
|||
|
unsigned long
|
|||
|
GetVBR(void)
|
|||
|
= {0x4E7A, 0x0801};
|
|||
|
|
|||
|
/* move.l vbr,d0
|
|||
|
*/
|
|||
|
|
|||
|
/* Direct access to traps */
|
|||
|
|
|||
|
/* SysContigPurgeSpace. This "customizes" the trap by specifying SYS, and
|
|||
|
* by moving the value we care about from a0 to d0.
|
|||
|
*/
|
|||
|
#pragma parameter __D0 SysContigPurgeSpace
|
|||
|
pascal long
|
|||
|
SysContigPurgeSpace(void)
|
|||
|
= {0xA562, 0x2008};
|
|||
|
/* _PurgeSpace ,SYS
|
|||
|
* move.l a0,d0
|
|||
|
*/
|
|||
|
|
|||
|
#pragma parameter ControlImmed(__A0)
|
|||
|
void
|
|||
|
ControlImmed(CntrlParam *)
|
|||
|
= {0xA204};
|
|||
|
/* _Control ,Immed
|
|||
|
*/
|
|||
|
|
|||
|
pascal void
|
|||
|
ShutDwnUserChoice(void)
|
|||
|
= {0x3F3C,0x0005,0xA895};
|
|||
|
/* move.w #$0005,-(A7)
|
|||
|
* _ShutDown
|
|||
|
*/
|
|||
|
|
|||
|
pascal void
|
|||
|
debugger(StringPtr message)
|
|||
|
= {0xABFF};
|
|||
|
/* _Debugger
|
|||
|
*/
|
|||
|
|
|||
|
#endif __GLUE__
|