|##########| |#MAGIC #|CLABLNCE |#PROJECT #|"IMPORTALL" |#PATHS #|"StdProject" |#FLAGS #|xx-x-x--x---x-x----------------- |#USERSW #|-------------------------------- |#USERMASK#|-------------------------------- |#SWITCHES#|xx---xxxxx------ |##########| (* $A- *) DEFINITION MODULE Expansion; FROM System IMPORT LONGSET, Register, SysStringPtr; FROM Dos IMPORT DeviceNodePtr, DosEnvec, DosEnvecPtr; FROM Exec IMPORT Interrupt, Library, LibraryPtr, List, Node, SignalSemaphore; TYPE ERomTypeFlags = (er_mem0,er_mem1,er_mem2,chainedConfig, diagValid,memList,er_type0,er_type1); ERomTypeFlagSet = SET OF ERomTypeFlags; ExpansionRomFlags = (erf0,erf1,erf2,erf3,zorro3,extended,noShutup, memSpace); ExpansionRomFlagSet = SET OF ExpansionRomFlags; ExpansionRom = RECORD type : ERomTypeFlagSet; product : SHORTCARD; flags : ExpansionRomFlagSet; reserved03 : SHORTCARD; manufacturer : CARDINAL; serialNumber : LONGCARD; initDiagVec : CARDINAL; reserved0c : SHORTCARD; reserved0d : SHORTCARD; reserved0e : SHORTCARD; reserved0f : SHORTCARD END; InterruptFlags = (if0,intena,if2,reset,int2pend,int6pend,int7pend, interrupting); InterruptFlagSet = SET OF InterruptFlags; ExpansionControl = RECORD interrupt : InterruptFlagSet; z3HighBase : SHORTCARD; baseAddress : SHORTCARD; shutup : SHORTCARD; reserved14 : SHORTCARD; reserved15 : SHORTCARD; reserved16 : SHORTCARD; reserved17 : SHORTCARD; reserved18 : SHORTCARD; reserved19 : SHORTCARD; reserved1a : SHORTCARD; reserved1b : SHORTCARD; reserved1c : SHORTCARD; reserved1d : SHORTCARD; reserved1e : SHORTCARD; reserved1f : SHORTCARD; END; CONST slotSize = $10000; slotMask = $FFFF; slotShift = 16; expansionBase = $00E80000; z3ExpansionBase = $FF000000; expansionSize = $00080000; expansionSlots = 8; memoryBase = $00200000; memorySize = $00800000; memorySlots = 128; z3ConfigArea = $40000000; z3ConfigAreaEnd = $7FFFFFFF; z3SizeGranularity = $00080000; TYPE ConfigFlags = (cf0,cf1,cf2,cf3,configTime,bindTime,byteWide, wordWide); ConfigFlagSet = SET OF ConfigFlags; DiagArea = RECORD config : ConfigFlagSet; flags : SHORTCARD; size : CARDINAL; diagPoint : CARDINAL; bootPoint : CARDINAL; name : CARDINAL; reserved01 : CARDINAL; reserved02 : CARDINAL END; CONST busWidth = ConfigFlagSet:{byteWide,wordWide}; nibbleWide = ConfigFlagSet:{}; bootTime = ConfigFlagSet:{configTime,bindTime}; never = ConfigFlagSet:{}; TYPE ConfigDevFlags = (shutup,configMe,badMemory,cdf3,cdf4,cdf5,cdf6, cdf7); ConfigDevFlagSet = SET OF ConfigDevFlags; ConfigDevPtr = POINTER TO ConfigDev; ConfigDev = RECORD OF Node flags : ConfigDevFlagSet; pad : SHORTCARD; rom : ExpansionRom; boardAddr : ANYPTR; boardSize : LONGCARD; slotAddr : CARDINAL; slotSize : CARDINAL; driver : ANYPTR; nextCD : ConfigDevPtr; unused : ARRAY [0..3] OF LONGINT; END; TYPE CurrentBindingPtr = POINTER TO CurrentBinding; CurrentBinding = RECORD configDev : ConfigDevPtr; fileName : SysStringPtr; productString : SysStringPtr; toolTypes : POINTER TO SysStringPtr; END; BootNodeFlags = (startProc,bnf1,bnf2,bnf3,bnf4,bnf5,bnf6,bnf7, bnf8); BootNodeFlagSet = SET OF BootNodeFlags; BootNodePtr = POINTER TO BootNode; BootNode = RECORD OF Node flags : BootNodeFlagSet; deviceNode : ANYPTR END; ExpansionBaseFlags = (clogged,shortmem,badmem,dosflag,kickback33, kickback36,silentStart); ExpansionBaseFlagSet= SET OF ExpansionBaseFlags; ExpansionBasePtr = POINTER TO ExpansionBaseType; ExpansionBaseType = RECORD OF Library flags : ExpansionBaseFlagSet; private01 : SHORTCARD; private02 : LONGCARD; private03 : LONGCARD; private04 : CurrentBinding; private05 : List; mountList : List; END; CONST errOk = 0; errLastboard = 40; errNoexpansion = 41; errNomemory = 42; errNoboard = 43; errBadmem = 44; TYPE ParameterPktPtr = POINTER TO ParameterPkt; ParameterPkt = RECORD dosName : SysStringPtr; execName : SysStringPtr; unit : LONGCARD; flags : LONGSET; env : DosEnvec; END; VAR ExpansionBase : ExpansionBasePtr; LIBRARY ExpansionBase BY -30 PROCEDURE AddConfigDev(configDev IN A0 : ConfigDevPtr); LIBRARY ExpansionBase BY -36 PROCEDURE AddBootNode(bootPri IN D0 : SHORTINT; flags IN D1 : LONGSET; deviceNode IN A0 : DeviceNodePtr; configDev IN A1 : ConfigDevPtr):BOOLEAN; LIBRARY ExpansionBase BY -42 PROCEDURE AllocBoardMem(slotSpec IN D0 : LONGINT); LIBRARY ExpansionBase BY -78 PROCEDURE FreeBoardMem(startSlot IN D0 : LONGCARD; slotSpec IN D1 : LONGCARD); LIBRARY ExpansionBase BY -54 PROCEDURE AllocExpansionMem(numSlots IN D0 : LONGINT; slotAlign IN D1 : LONGINT; slotOffset IN D2 : LONGINT):LONGINT; LIBRARY ExpansionBase BY -90 PROCEDURE FreeExpansionMem(startSlot IN D0 : LONGINT; numSlots IN D1 : LONGINT); LIBRARY ExpansionBase BY -60 PROCEDURE ConfigBoard(board IN A0 : ANYPTR; configDev IN A1 : ConfigDevPtr); LIBRARY ExpansionBase BY -66 PROCEDURE ConfigChain(baseAddr IN A0 : ANYPTR); LIBRARY ExpansionBase BY -48 PROCEDURE AllocConfigDev():ConfigDevPtr; LIBRARY ExpansionBase BY -72 PROCEDURE FindConfigDev(oldConfigDev IN A0 : ConfigDevPtr; manufacturer IN D0 : LONGINT; product IN D1 : LONGINT):ConfigDevPtr; LIBRARY ExpansionBase BY -84 PROCEDURE FreeConfigDev(configDev IN A0 : ConfigDevPtr); LIBRARY ExpansionBase BY -108 PROCEDURE RemConfigDev(configDev IN A0 : ConfigDevPtr); LIBRARY ExpansionBase BY -96 PROCEDURE ReadExpansionByte(board IN A0 : ANYPTR; offset IN D0 : LONGINT):SHORTINT; LIBRARY ExpansionBase BY -114 PROCEDURE WriteExpansionByte(board IN A0 : ANYPTR; offset IN D0 : LONGCARD; byte IN D1 : SHORTCARD); LIBRARY ExpansionBase BY -102 PROCEDURE ReadExpansionRom(board IN A0 : ANYPTR; configDev IN A1 : ConfigDevPtr); LIBRARY ExpansionBase BY -120 PROCEDURE ObtainConfigBinding; LIBRARY ExpansionBase BY -126 PROCEDURE ReleaseConfigBinding; LIBRARY ExpansionBase BY -132 PROCEDURE SetCurrentBinding(currentBinding IN A0 : CurrentBindingPtr; bindingSize IN D0 : INTEGER); LIBRARY ExpansionBase BY -138 PROCEDURE GetCurrentBinding(currentBinding IN A0 : CurrentBindingPtr; bindingSize IN D0 : INTEGER):LONGINT; LIBRARY ExpansionBase BY -144 PROCEDURE MakeDosNode(parmPacket IN A0 : ParameterPktPtr):DeviceNodePtr; LIBRARY ExpansionBase BY -150 PROCEDURE AddDosNode(bootPri IN D0 : SHORTINT; flags IN D1 : LONGSET; deviceNode IN A0 : DeviceNodePtr):BOOLEAN; END Expansion.