{File name: Extensions.dfn
Definitions for initialization, escape code configuration, and bank switching
Created: July 16, 1986 by JPM
Last Revised:
 1-Apr-88 17:51:27 -- jt -- remove kernel reserve
 November 24, 1986 -- JPM -- remove FPTEnabled (correct value in SingleBank.dfn/DualBank.dfn)
August 4, 1986 -- JPM -- add BandBLT linkage addresses
July 29, 1986 -- JPM -- add addrLinkage and FPTEnabled; reserve kernel space}

{***** db
Reserve[0F6F, 0FFF];	{Kernel}
***** db}

{Hard-wired addresses in bank 0 -- always needed}

Set[addrDISPNIonly,	0DA3],
Set[addrESCc,		0BEF],
Set[addrRefillInt,	0B1E],
Set[addrSaveRegs,	0CB6];

Set[addrLinkage,	0004];

IfEqual[thereAreTwoBanks,0,SkipTo[DoneWithBankStuff],];

{Bank constants}

Set[bank0,		0],
Set[bank1,		0C];

{Hard-wired addresses in bank 0, for conditional BandBLT code}

SetLabel[LSEPReturn, 03A8],
Set[addrTrapzReturn, Or[03A8{LSEPReturn}, 1{Type.LSEP}]];

{Hard-wired addresses in bank 1}

Set[addrBank1ESCx,	00ED{arbitrary choice; may be a better choice}];
SetLabel[tzbHowBigStack, 03B0{arbitrary choice; may be a better choice}],
Set[addrBandBLTIntEntry, Or[03B0{tzbHowBigStack}, 9{hbs.E}]];
Set[addrBandBLTNormalEntry, 03C0{arbitrary choice; may be a better choice}];

{Macros for cross-bank jumps}

MacroDef[GOTOBANK1,GOTOABS[addr#1]];
MacroDef[GOTOBANK0,GOTOABS[addr#1]];

DoneWithBankStuff!

{Escape code configuration:
 0 = implemented in bank 0 (see Misc.mc for specifics)
 1 = implemented in bank 1 when present (see Bank1Misc.mc for specifics)}

{Set[ESC0nInBank1,0],			emulator -- always in bank 0}
{Set[ESC1nInBank1,0],			emulator -- always in bank 0}
{Set[ESC2nInBank1,0],			emulator -- always in bank 0}
{Set[ESC3nInBank1,0],			emulator -- always in bank 0}
Set[ESC4nInBank1,thereAreTwoBanks],	{floating point}
Set[ESC5nInBank1,0];			{floating point -- unused}
Set[ESC6nInBank1,0],			{Cedar}
{Set[ESC7nInBank1,0],			emulator -- always in bank 0}
{Set[ESC8nInBank1,0],			processor-dependent -- always in bank 0}
{Set[ESC9nInBank1,0],			processor-dependent -- always in bank 0}
Set[ESCAnInBank1,thereAreTwoBanks],	{image processing}
Set[ESCBnInBank1,0],			{unassigned}
Set[ESCCnInBank1,0],			{unassigned}
Set[ESCDnInBank1,0],			{unassigned}
Set[ESCEnInBank1,thereAreTwoBanks],	{floating point}
Set[ESCFnInBank1,0];			{unassigned}