Get part of the Figment Memory Manager building

This commit is contained in:
Elliot Nunn 2019-10-01 17:13:43 +08:00
parent d8f8def6d1
commit 72f7a9483d
3 changed files with 935 additions and 477 deletions

View File

@ -158,28 +158,18 @@ diff --git a/Make/Universal.make b/Make/Universal.make
-#include {DriverDir}Drivers.make
-
#include {ResourceDir}Resources.make
diff --git a/OS/MemoryMgr/MemoryMgr.make b/OS/MemoryMgr/MemoryMgr.make
--- a/OS/MemoryMgr/MemoryMgr.make
+++ b/OS/MemoryMgr/MemoryMgr.make
@@ -17,15 +17,15 @@
FigmentDir = {MemoryMgrDir}FigmentSources:
-#include {FigmentDir}Figment.Make
-
-
MemoryMgrObjs = "{ObjDir}MemoryMgr.a.o" ∂
"{ObjDir}MemoryMgrExtensions.a.o" ∂
"{ObjDir}MemoryMgrInternal.a.o" ∂
"{ObjDir}BlockMove.a.o"
diff --git a/OS/MemoryMgr/FigmentSources/Figment.Make b/OS/MemoryMgr/FigmentSources/Figment.Make
--- a/OS/MemoryMgr/FigmentSources/Figment.Make
+++ b/OS/MemoryMgr/FigmentSources/Figment.Make
@@ -41,7 +41,7 @@ FigMemoryMgrObjs = "{ObjDir}MemMgrGlue.a.o" ∂
"{ObjDir}"QTMemory.c.o
-"{LibDir}Figment.lib" ƒ {FigMemoryMgrObjs} {MemoryMgrObjs}
+"{LibDir}Figment.lib" ƒ {FigMemoryMgrObjs}
Lib {StdLibOpts} -o "{Targ}" {FigMemoryMgrObjs}
+#include {FigmentDir}Figment.Make
+
+
"{LibDir}MemoryMgr.lib" ƒ "{LibDir}Figment.lib" {MemoryMgrObjs}
If "{FeatureSet}" =~ /≈'hasNewHeapMgr=True'≈/
Lib {StdLibOpts} -o "{Targ}" "{LibDir}Figment.lib" {MemoryMgrObjs}
diff --git a/OS/OS.make b/OS/OS.make
--- a/OS/OS.make
+++ b/OS/OS.make

View File

@ -3436,452 +3436,402 @@ new file mode 100644
@@ -0,0 +1 @@
+OBJ MPS
\ No newline at end of file
diff --git a/AmphibianDNA/MemoryMgr.lib b/AmphibianDNA/MemoryMgr.lib
diff --git a/AmphibianDNA/MemMgr.c.o b/AmphibianDNA/MemMgr.c.o
new file mode 100644
index 0000000000000000000000000000000000000000..fbbb8a8a431b861419254d1f2549c301da7cae7d
index 0000000000000000000000000000000000000000..85ab6fd8f199d880472670fb79db5c28c3c71e34
GIT binary patch
literal 74468
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
IP_v5vAGb<#A^-pY
literal 29098
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
H)xrKBL%|a2
literal 0
HcmV?d00001
diff --git a/AmphibianDNA/MemoryMgr.lib.idump b/AmphibianDNA/MemoryMgr.lib.idump
diff --git a/AmphibianDNA/MemMgr.c.o.idump b/AmphibianDNA/MemMgr.c.o.idump
new file mode 100644
--- /dev/null
+++ b/AmphibianDNA/MemoryMgr.lib.idump
+++ b/AmphibianDNA/MemMgr.c.o.idump
@@ -0,0 +1 @@
+OBJ MPS
\ No newline at end of file
diff --git a/AmphibianDNA/MemMgrChecks.c.o b/AmphibianDNA/MemMgrChecks.c.o
new file mode 100644
index 0000000000000000000000000000000000000000..656dad14d6c6fbdb11b3c8b2b2b9365db37bd2de
GIT binary patch
literal 4100
zcmcha&u<$=6vtm|qq@aZOKB^EqA((&a=>l;tF3EA$c}d{JNQRry9ojb#r00yRh?aH
zcOA92assIb;O{`{0S>4L6$Bj8G)db#_Z&by_ka}M><_2wtS!50ywXau((KHe_xXO`
z%uG#z#|yA{y<9AmKNWbAt5!;+l*y7xjj-m$i$o|E3za%q&D2O<s0wcpLcWN{`B)@O
z;_+M}GDmy>Z^D+Z)R1Jr(f*h{j)%?5-jX7A+cZTAT1FIAs%Zt81$r0~e>pMd>`XMh
zq3Tp5VwVzKNs&^8C!(a%rY>#LFv%5)!r?cr<{Uga?HnK8_y!)q)(OBT;rGJ=Ym`?2
z^84=uFUa5z-S*tS6bOeQ{rA@o?=^iLSUdIWz3YGS-qqiEC_WEv9sFDVvfRb|<eftk
zDvK}0rZ!|E$+|*hdRr$O#%jYP8Y6PI-PVY%N*f#4-3wE(<4E(YGj%DFZ^&Ys)})P2
zo7Nkxl}1|<CH+qJCT-p_vVO%70>79UE9>?&RjMiNO<a)D)mw@rw}?vDsY>N0)l#ez
zJ|8DyB!rU7#O6|DsaEY{Z}*BOj9yn0uDzH_XJLDK*m@Y{ZHw~fNco0Mc|JfG<K+i0
zX1FFdA1MC<umqn~)_t9C*CHgKa^HOwN_T(@gD<fFzx@T+_5{-KL#w~HrvoAR;6J8?
zlR-FzssiA9t@Egl`mhj3Qp**mSa8gT6V%GGuDS{(YYIh3jwKYvjlkn~&7`=Djm#cf
z%tFX4Vl(>yiT%WQF-B*Q#~k>O$gLLpMhcc2s{;ofDb-15s+liOPcYXt+EipQBa8K$
zk}4MICT$-&GiM}Rh-Jr0_*l-2CYk4iNOGX(K7^eaOV9&iWv<(?2reK&-X@sehhPXP
zUT8!5XE)~s9{d9Vn<v&-IC$ak)qAM?mEn_*1Ucb^jEsE~WSo;!O?RRd;wIY5$5?c6
z%VB5}?nM_}ISsq#%;fe(h&*>Ko*yC4n9XxOz-YSE(C?Wak5t98NU!WV!AQ{hiXd}l
zU?S9(af@!Kcibb#bBbW@m_qXS;azoyXYPf2)59WVuH1V~6zjt#dKH++a$zDY3mO(y
z%|yAVw7MEQ@(9;V_hrZ1$;K<Jg5kc5U=>y~ghA!rJ_4CPU331_=T3BP5T3k!WM#<v
ziN!mKu1(vn&F@e7nQzTg&nI~5Y55{2*3R^Oql1gjxw|h_;2j)+7$=)uY;ox3r6ZG$
z1m9(k%}<2BCEKG>GZFBH2y(df*<j79$?)5T-FKvOZ`9-|IC;9C#hnu1?O%pD50&sf
zJPi(7C942WU#lXvdy3ez6tO&L@>dZCD(wD5bdjfxPVbnNi<&~fo3IUc6d|x0%)zsh
zy|FOc&#Y`m(0@tHkaff44F9oxQ(^Z?&bVjHsNNs%uHyZY^P=zkrtdHVvEG1vDa30g
MQP%q|yTk+k16?93QUCw|
literal 0
HcmV?d00001
diff --git a/AmphibianDNA/MemMgrChecks.c.o.idump b/AmphibianDNA/MemMgrChecks.c.o.idump
new file mode 100644
--- /dev/null
+++ b/AmphibianDNA/MemMgrChecks.c.o.idump
@@ -0,0 +1 @@
+OBJ MPS
\ No newline at end of file
diff --git a/AmphibianDNA/MemMgrInternal.c.o b/AmphibianDNA/MemMgrInternal.c.o
new file mode 100644
index 0000000000000000000000000000000000000000..414cbdcc6b7057b22f0f822868939630307af054
GIT binary patch
literal 27064
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
D`)l~`
literal 0
HcmV?d00001
diff --git a/AmphibianDNA/MemMgrInternal.c.o.idump b/AmphibianDNA/MemMgrInternal.c.o.idump
new file mode 100644
--- /dev/null
+++ b/AmphibianDNA/MemMgrInternal.c.o.idump
@@ -0,0 +1 @@
+OBJ MPS
\ No newline at end of file

View File

@ -3234,6 +3234,19 @@ diff --git a/Internal/C/CodeFragments.h.idump b/Internal/C/NameRegistryPriv.h.id
similarity index 100%
rename from Internal/C/CodeFragments.h.idump
rename to Internal/C/NameRegistryPriv.h.idump
diff --git a/Internal/C/ProcessesPriv.h b/Internal/C/ProcessesPriv.h
--- a/Internal/C/ProcessesPriv.h
+++ b/Internal/C/ProcessesPriv.h
@@ -261,9 +261,6 @@ pascal OSErr BringWindowToFrontLayer(WindowPtr window, Boolean othersToBack)
pascal OSErr MergeProcessLayers(Boolean toFront)
= {0x3F3C,0x0058,0xA88F};
-pascal WindowPtr GetNextWindow(WindowPtr window)
- = {0x3F3C,0x0059,0xA88F};
-
/*************************************************************************
* Support for application resource tracking.
*************************************************************************/
diff --git a/Internal/C/ScriptPriv.h b/Internal/C/ScriptPriv.h
--- a/Internal/C/ScriptPriv.h
+++ b/Internal/C/ScriptPriv.h
@ -3711,7 +3724,7 @@ diff --git a/Make/MainCode.Make b/Make/MainCode.Make
diff --git a/Make/RISC.make b/Make/RISC.make
--- a/Make/RISC.make
+++ b/Make/RISC.make
@@ -167,33 +167,25 @@ CLibraries = {Sources}Libs:CLibraries:
@@ -167,15 +167,14 @@ CLibraries = {Sources}Libs:CLibraries:
PLibraries = {Sources}Libs:PLibraries:
@ -3731,9 +3744,9 @@ diff --git a/Make/RISC.make b/Make/RISC.make
SupportNativeComponents ∂
Script_Char_Extra ∂
hasPenFraction ∂
hasFullKerning ∂
@@ -183,17 +182,11 @@ Features = hasRISCV0ResMgrPatches ∂
hasGlyphState ∂
- hasNewHeapMgr ∂
hasNewHeapMgr ∂
hasPDMMaceEnet ∂
- hasAppleTalkInROM ∂
hasMixedMode ∂
@ -3749,7 +3762,7 @@ diff --git a/Make/RISC.make b/Make/RISC.make
hasAsyncSCSI ∂
BadBlockSparingEnabled ∂
CubeE ∂
@@ -202,63 +194,36 @@ Features = hasRISCV0ResMgrPatches ∂
@@ -202,63 +195,36 @@ Features = hasRISCV0ResMgrPatches ∂
PwrMgrADB ∂
SystemSevenOrLater ∂
SystemSixOrLater ∂
@ -3814,7 +3827,7 @@ diff --git a/Make/RISC.make b/Make/RISC.make
hasSplineFonts ∂
hasVIAClock ∂
hasWaimeaVIA2 ∂
@@ -267,52 +232,36 @@ Features = hasRISCV0ResMgrPatches ∂
@@ -267,52 +233,36 @@ Features = hasRISCV0ResMgrPatches ∂
onHafMac ∂
onMac32 ∂
onNuMac ∂
@ -7155,30 +7168,137 @@ diff --git a/OS/DispTable.a b/OS/DispTable.a
ToolBox $3F2 ; toolbox trap $3F2 (unknown) <C146>
ToolBox $3F3 ; toolbox trap $3F3 (unknown) <C146>
ToolBox $3F4 ; toolbox trap $3F4 (unknown) <C146>
@@ -1384,14 +1359,14 @@ FirstOS
@@ -1326,28 +1301,28 @@ FirstOS
OS $16,FInitQueue ; OS trap $16
OS $17,EjectTrap ; OS trap $17
OS $18,GetFPosTrap ; OS trap $18
- OS $19,InitZoneTrap ; OS trap $19
- OS $1A,GetZone ; OS trap $1A
- OS $1B,SetZone ; OS trap $1B
- OS $1C,FreeMem ; OS trap $1C
- OS $1D,MaxMemTrap ; OS trap $1D
- OS $1E,NewPtrTrap ; OS trap $1E
- OS $1F,DisposePtr ; OS trap $1F
- OS $20,SetPtrSizeTrap ; OS trap $20
- OS $21,GetPtrSizeTrap ; OS trap $21
- OS $22,NwHandle ; OS trap $22
- OS $23,DsposeHandle ; OS trap $23
- OS $24,SetHandleSizeTrap ; OS trap $24
- OS $25,__GetHandleSize ; OS trap $25
- OS $26,HandleZoneTrap ; OS trap $26
- OS $27,ReallocHandleTrap ; OS trap $27
- OS $28,RecoverHandleTrap ; OS trap $28
- OS $29,HLock ; OS trap $29
- OS $2A,HUnlock ; OS trap $2A
- OS $2B,EmptyHandle ; OS trap $2B
- OS $2C,InitApplZone ; OS trap $2C
- OS $2D,SetApplLimit ; OS trap $2D
- OS $2E,__BlockMove ; OS trap $2E
+ OS $19,Fig_InitZoneTrap ; OS trap $19
+ OS $1A,Fig_GetZone ; OS trap $1A
+ OS $1B,Fig_SetZone ; OS trap $1B
+ OS $1C,Fig_FreeMem ; OS trap $1C
+ OS $1D,Fig_MaxMemTrap ; OS trap $1D
+ OS $1E,Fig_NewPtrTrap ; OS trap $1E
+ OS $1F,Fig_DisposePtr ; OS trap $1F
+ OS $20,Fig_SetPtrSizeTrap ; OS trap $20
+ OS $21,Fig_GetPtrSizeTrap ; OS trap $21
+ OS $22,Fig_NwHandle ; OS trap $22
+ OS $23,Fig_DsposeHandle ; OS trap $23
+ OS $24,Fig_SetHandleSizeTrap ; OS trap $24
+ OS $25,Fig___GetHandleSize ; OS trap $25
+ OS $26,Fig_HandleZoneTrap ; OS trap $26
+ OS $27,Fig_ReallocHandleTrap ; OS trap $27
+ OS $28,Fig_RecoverHandleTrap ; OS trap $28
+ OS $29,Fig_HLock ; OS trap $29
+ OS $2A,Fig_HUnlock ; OS trap $2A
+ OS $2B,Fig_EmptyHandle ; OS trap $2B
+ OS $2C,Fig_InitApplZone ; OS trap $2C
+ OS $2D,Fig_SetApplLimit ; OS trap $2D
+ OS $2E,Fig___BlockMove ; OS trap $2E
OS $2F,PostEventTrap ; OS trap $2F
OS $30,OSEventAvailTrap ; OS trap $30 <PN> <SM28> rb
OS $31,GetOSEventTrap ; OS trap $31
@@ -1355,7 +1330,7 @@ FirstOS
OS $33,VInstall ; OS trap $33
OS $34,VRemove ; OS trap $34
OS $35,OffLine ; OS trap $35
- OS $36,MoreMasters ; OS trap $36
+ OS $36,Fig_MoreMasters ; OS trap $36
OS $37,ReadParam ; OS trap $37
OS $38,WriteParamTrap ; OS trap $38
OS $39,ReadDateTimeTrap ; OS trap $39
@@ -1365,7 +1340,7 @@ FirstOS
OS $3D,DrvrInstall ; OS trap $3D
OS $3E,DrvrRemove ; OS trap $3E
OS $3F,InitUtil ; OS trap $3F
- OS $40,ResrvMem ; OS trap $40
+ OS $40,Fig_ResrvMem ; OS trap $40
OS $41,SetFilLock ; OS trap $41 new from extensionHFS
OS $42,RstFilLock ; OS trap $42 new from extensionHFS
OS $43,SetFilType ; OS trap $43
@@ -1373,42 +1348,42 @@ FirstOS
OS $45,FlushFile ; OS trap $45
OS $46,GetTrapAddressTrap ; OS trap $46
OS $47,SetTrapAddressTrap ; OS trap $47
- OS $48,PtrZoneTrap ; OS trap $48
- OS $49,HPurge ; OS trap $49
- OS $4A,HNoPurge ; OS trap $4A
- OS $4B,SetGrowZone ; OS trap $4B
- OS $4C,CompactMemTrap ; OS trap $4C
- OS $4D,PurgeMem ; OS trap $4D
+ OS $48,Fig_PtrZoneTrap ; OS trap $48
+ OS $49,Fig_HPurge ; OS trap $49
+ OS $4A,Fig_HNoPurge ; OS trap $4A
+ OS $4B,Fig_SetGrowZone ; OS trap $4B
+ OS $4C,Fig_CompactMemTrap ; OS trap $4C
+ OS $4D,Fig_PurgeMem ; OS trap $4D
OS $4E,AddDriveTrap ; OS trap $4E
OS $4F,InstallRDrivers ; OS trap $4F
OS $50,RelStringTrap ; OS trap $50
OS $51,ReadXPRam ; OS trap $51
OS $52,WriteXPRam ; OS trap $52
- OS $53,ClkNoMem ; OS trap $53
+ OS $53 ;,ClkNoMem ; OS trap $53
OS $54,UprStringTrap ; OS trap $54
OS $55,__StripAddress ; OS trap $55 (new memory mgr) <C172>
- OS $55,__StripAddress ; OS trap $55 (new memory mgr) <C172>
+ OS $55,Fig___StripAddress ; OS trap $55 (new memory mgr) <C172>
OS $56,NewLwrString ; OS trap $56 ;in-ROM script manager
OS $57,SetApplBase ; OS trap $57
- OS $57,SetApplBase ; OS trap $57
- OS $58,__InsTime ; OS trap $58
- OS $59,__RmvTime ; OS trap $59
- OS $5A,__PrimeTime ; OS trap $5A
+ OS $57,Fig_SetApplBase ; OS trap $57
+ OS $58 ;,__InsTime ; OS trap $58
+ OS $59 ;,__RmvTime ; OS trap $59
+ OS $5A ;,__PrimeTime ; OS trap $5A
OS $5B,PowerOff ; OS trap $5B (poweroff trap) <11apr86>/<C68>
OS $5C,MemoryDispatch,hasMMU ; OS trap $5C (MemoryDispatch trap) <v1.8>
OS $5D ; OS trap $5D (MMU trap, set up later) <2.7>
@@ -1408,7 +1383,7 @@ FirstOS
OS $68,HNoRSRC ; OS trap $68
OS $69,HGetFlags ; OS trap $69
OS $6A,HSetFlags ; OS trap $6A
OS $5E,__NMINSTALL ; OS trap $5E (v1.1) <SM21> tcn
OS $5F,__NMREMOVE ; OS trap $5F (v1.1) <SM21> tcn
OS $60,TFSDispatch ; OS trap $60
- OS $61,MaxBlockTrap ; OS trap $61
- OS $62,PurgeSpaceTrap ; OS trap $62
- OS $63,MaxApplZone ; OS trap $63
- OS $64,MoveHHi ; OS trap $64
- OS $65,StackSpaceTrap ; OS trap $65
- OS $66,NewEmptyHandleTrap ; OS trap $66
- OS $67,HRSRC ; OS trap $67
- OS $68,HNoRSRC ; OS trap $68
- OS $69,HGetFlags ; OS trap $69
- OS $6A,HSetFlags ; OS trap $6A
- OS $6B,TestManager ; OS trap $6B (test trap) <C17/27may86>
+ OS $61,Fig_MaxBlockTrap ; OS trap $61
+ OS $62,Fig_PurgeSpaceTrap ; OS trap $62
+ OS $63,Fig_MaxApplZone ; OS trap $63
+ OS $64,Fig_MoveHHi ; OS trap $64
+ OS $65,Fig_StackSpaceTrap ; OS trap $65
+ OS $66,Fig_NewEmptyHandleTrap ; OS trap $66
+ OS $67,Fig_HRSRC ; OS trap $67
+ OS $68,Fig_HNoRSRC ; OS trap $68
+ OS $69,Fig_HGetFlags ; OS trap $69
+ OS $6A,Fig_HSetFlags ; OS trap $6A
+ OS $6B ;,TestManager ; OS trap $6B (test trap) <C17/27may86>
OS $6C,InitFS ; OS trap $6C
OS $6D,InitEvents ; OS trap $6D
@ -7208,26 +7328,33 @@ diff --git a/OS/DispTable.a b/OS/DispTable.a
OS $94 ; os trap $94 (unknown)
OS $95 ; os trap $95 (unknown)
OS $96 ; os trap $96 (unknown)
@@ -1459,8 +1434,8 @@ FirstOS
@@ -1458,9 +1433,9 @@ FirstOS
OS $9A,ProcHelper ; os trap $9A ProcHelper <19> rb
OS $9B ; os trap $9B (unknown)
OS $9C ; os trap $9C (unknown)
OS $9D,MoveHLow ; os trap $9D MoveHLow <SM18> tcn
- OS $9D,MoveHLow ; os trap $9D MoveHLow <SM18> tcn
- OS $9E,PowerMgrDispatch,hasPwrControls ; os trap $9E (PowerMgrDispatch Trap) <SM25> <SM35>
- OS $9F,PowerDispatch,hasPwrControls ; os trap $9F (PwrControls Traps) <17> rb
+ OS $9D,Fig_MoveHLow ; os trap $9D MoveHLow <SM18> tcn
+ OS $9E ;,PowerMgrDispatch,hasPwrControls ; os trap $9E (PowerMgrDispatch Trap) <SM25> <SM35>
+ OS $9F ;,PowerDispatch,hasPwrControls ; os trap $9F (PwrControls Traps) <17> rb
OS $A0 ; os trap $A0 (unknown)
OS $A1 ; os trap $A1 (unknown)
OS $A2 ; os trap $A2 (unknown)
@@ -1493,7 +1468,7 @@ FirstOS
@@ -1493,10 +1468,10 @@ FirstOS
OS $B6,vWaitUntil ; vector $B6 (iocore) <C811>
OS $B7,vSyncWait ; vector $B7 (iocore) <C811>
- OS $B8,__SNDAPPDEAD ; vector $B8
+ OS $B8 ;,__SNDAPPDEAD ; vector $B8
OS $B9,vDisPtch ; vector $B9 (deferred task) <C811><2.2>
OS $BA,vIAZInit ; vector $BA <16jun87 CSL>
OS $BB,vIAZPostInit ; vector $BB <16jun87 CSL>
- OS $BA,vIAZInit ; vector $BA <16jun87 CSL>
- OS $BB,vIAZPostInit ; vector $BB <16jun87 CSL>
+ OS $BA,Fig_vIAZInit ; vector $BA <16jun87 CSL>
+ OS $BB,Fig_vIAZPostInit ; vector $BB <16jun87 CSL>
OS $BC,vLaunchInit ; vector $BC <16jun87 CSL>
OS $BD,vCacheFlush ; vector $BD <C668><1.2>
OS $BE,AsyncPatch ; vector $BE <A368>
@@ -1530,7 +1505,7 @@ FirstOS
OS $DA,vExtendFile ; vector $DA
OS $DB,vTruncateFile ; vector $DB
@ -21787,6 +21914,363 @@ diff --git a/Internal/C/CodeFragmentsTrap.h.idump b/OS/MPDispatchStub.a.idump
similarity index 100%
rename from Internal/C/CodeFragmentsTrap.h.idump
rename to OS/MPDispatchStub.a.idump
diff --git a/OS/MemoryMgr/FigmentSources/Figment.Make b/OS/MemoryMgr/FigmentSources/Figment.Make
--- a/OS/MemoryMgr/FigmentSources/Figment.Make
+++ b/OS/MemoryMgr/FigmentSources/Figment.Make
@@ -30,6 +30,7 @@ MMAOptions = -i "{MemoryMgrDir}" ∂
-d patchedIn=0
FigMemoryMgrObjs = "{ObjDir}MemMgrGlue.a.o" ∂
+ "{ObjDir}MemMgrChecks.c.o" ∂
"{ObjDir}MemMgr.c.o" ∂
"{ObjDir}MemMgrInternal.c.o" ∂
"{ObjDir}MemMgrHeap.c.o" ∂
diff --git a/OS/MemoryMgr/FigmentSources/MemMgr.h b/OS/MemoryMgr/FigmentSources/MemMgr.h
--- a/OS/MemoryMgr/FigmentSources/MemMgr.h
+++ b/OS/MemoryMgr/FigmentSources/MemMgr.h
@@ -200,6 +200,10 @@
*
************************************************************************************/
+typedef unsigned long ulong;
+typedef unsigned short ushort;
+typedef unsigned char uchar;
+
#include <MemoryMgrPriv.h>
/*************************** Important global constants ****************************/
@@ -711,7 +715,7 @@
#define IsBlockInROM(b) (false)
#else
/* hopefully this will work, jeff */
- #define IsBlockInROM(b) (((Ptr)b) > * (Ptr*) ROMBase)
+ #define IsBlockInROM(b) (((Ptr)b) > * (Ptr*) 0x2AE)
#endif
#define IsAddressInHeap(addr, h) ((void*)(addr) <= (h)->heapStart || (stdBlock*)(addr) > (h)->backLimit)
@@ -1071,7 +1075,7 @@
#define ClearBytes CLEARBYTES
void ClearBytes(void* destination, ulong length);
#else
- #define MoveBytes BlockMoveData /* call blockmove since its faster on PDM */
+ #define MoveBytes BlockMove
/*
* On 040 machines this may be faster, but on PDMs, its faster to call
* the _BlockMove trap. This is the interface to the old code. I keep
@@ -1082,8 +1086,7 @@
* = { 0x4EB0, 0x81E1, 0x1E00}; // ([$1E00])
*/
- void ClearBytes(void* destination, ulong length)
- = { 0x4EB0, 0x81E1, 0x1E04}; /* JSR ([$1E04]) */
+ #define ClearBytes CLEARBYTES
#endif
void FillBytes(void* destination, long length, long pattern);
diff --git a/OS/MemoryMgr/FigmentSources/MemMgrBoot.a b/OS/MemoryMgr/FigmentSources/MemMgrBoot.a
--- a/OS/MemoryMgr/FigmentSources/MemMgrBoot.a
+++ b/OS/MemoryMgr/FigmentSources/MemMgrBoot.a
@@ -97,6 +97,7 @@ MMAsmCode PROC
IMPORT ClearBytes
IMPORT InitQTMemory
IMPORT Old_AfterBootSetApplBase ; <7 BT>
+ IMPORT FlushPalettes
IF forROM THEN
IMPORT PramIO ; <MSH>
@@ -136,22 +137,7 @@ InitMemMgr MOVE.L #BCMask,Lo3Bytes
InitMemVect MOVEM.L D0-D3/A0-A3,-(SP) ; Save registers
- MOVEA.L UnivInfoPtr,a1 ; Get product info pointer
- MOVEA.L A1,A0 ; Make a copy into A1
- ADDA.L ProductInfo.DecoderInfoPtr(A1),A0 ; Get ptr to hardware bases
- MOVE.L ProductInfo.ExtValid(A1),D1 ; Get external features (0-31)
- MOVE.L #MMPRAMloc,D3 ; Read MMFlags from PRAM
- LEA MMFlags,A3 ; A3 points to MMFlags lomem
- BSR.L PramIO ; Get the current MMFlags
-
- BTST #hasNewMemMgr,UnivROMFlags ; Does this ROM support Figment?
- BEQ.S @noFigment ; -> No. Don't bother w/PRAM
-
- BTST #mmFigEnable,MMFlags ; Is Figment enabled for this boot?
- BEQ.S @noFigment ; -> Nope. Use old MemMgr
-
- BRA.S Fig_InitMemMgr ; -> Call Figment Init
-@noFigment BRA Old_InitMemMgr ; -> Call Old Mem Mgr Init
+ CLR.B MMFlags
EndWith
;----------------------------------------------------------------
@@ -162,11 +148,11 @@ InitMemVect MOVEM.L D0-D3/A0-A3,-(SP) ; Save registers
Fig_InitMemMgr
IF ForROM THEN
+ BSET #mmFigEnable,MMFlags
BSET #MMStartMode,MMFlags ; Force 32-bit mode
BSET #MMMixed,MMFlags ; Force 32-bit mode
BSET #MMSysheap,MMFlags ; Force 32-bit mode
BSET #MMROZheap,MMFlags ; Force 32-bit mode
- BCLR #mmHighSysHeap,MMFlags ; Force 32-bit mode
ELSE
Move.B #5,MMFlags ; MMStartMode & MMSysheap bits set
; note: we dont read PRAM here
@@ -180,14 +166,8 @@ Fig_InitMemMgr
MOVE.L D0,$0 ; write address for nil handle <v1.9>
MOVE.L D0,$4 ; write address for nil window pointer <v1.9>
- CMPI.B #cpu68040,CPUFlag ; Are we less than an 040? <T7><SM9>
- BLO.S @not040 ; Yes? Then use original MoveBytes. <T7><SM9>
-
; Need to set up MoveBytes and ClearBytes vectors
- LEA MoveBytes040,A0 ; get address for MoveBytes on 040
- BRA.S @3
-
-@not040 LEA MoveBytes020,A0 ; get address for MoveBytes on 020
+ LEA @PlainBlockMove,A0 ; get address for MoveBytes on any machine
@3 MOVE.L A0,vMoveBytes ; store MoveBytes address in vector
LEA ClearBytes,A0 ; get address for ClearBytes
@@ -209,6 +189,8 @@ Fig_InitMemMgr
MOVEM.L (SP)+,D0-D3/A0-A3 ; restore registers
RTS
+@PlainBlockMove _BlockMove
+ RTS
;----------------------------------------------------------------------
@@ -280,7 +262,7 @@ v32SetApplBase
; Need to call Figment instead of a32ZoneAdjustEnd
; *** BSR a32ZoneAdjustEnd ; Adjust the sysZone end. JC <v1.1>
suba.l BkLim(A6),A0 ; get size to increase in A0
- move.w #ExtSysZoneSelector, D0 ; ExtendSystemZone selector in D0
+ move.l #ExtSysZoneSelector, D0 ; ExtendSystemZone selector in D0
_HeapDispatch
BSR.S IAZ ; use historical IAZ call <C681>
@@ -314,11 +296,6 @@ v32SetApplBase
IF ForROM THEN
AfterBootSetApplBase
- BTST #mmFigEnable,MMFlags ; Is Figment enabled for this boot?
- BNE.S @hasFigment ; -> Yes. Use the wrapper.
- BRA Old_AfterBootSetApplBase
-
-@hasFigment
_InitApplZone
JSR Fig_SetApplBase
_InitApplZone
@@ -448,17 +425,10 @@ IAZ Move.L A6,-(SP) ;Save A6.
Move.L BkLim(A6),A0 ;Current Last Block in sysZone.
- TST.B Zone32Flag(A6) ;is it 32 bit zone <v1.2>
- BNE.S @1 ;branch if yes <v1.2>
-
; Ordinarily start ApplZone just after SysZone, but if GrowDown is true, <14Apr85>
; and there's room, start up offset by CacheSize. <27Apr85>
- LEA MinFree24(A0),A0 ;Points to first of cur. applZone. <v1.2>
- BRA.S @5 ; <v1.2>
-@1
LEA MinFree32(A0),A0 ;Points to first of cur. applZone. <v1.2>
-@5
; Now proceed building the zone... <14Apr85>
Move.L A0,A1 ;New Application zone base.
Add.W #AppZoneSize,A1 ;Compute new end address.
@@ -506,13 +476,8 @@ IAZ Move.L A6,-(SP) ;Save A6.
; Called by InitApplZone via jIAZInit vector.
;----------------------------------------------------------------------
Fig_VIAZINIT ;<7 BT>
- MOVE.L IAZNotify,D0 ; anyone to notify?
- BLE.S @0 ; br if not
- MOVE.L D0,A0 ; give them a call if so
- JSR (A0)
-
@0 MOVE.W #-1,WWExist ; $FF for non-existence (also sets QDExist)
- ST FMExist ; $FF for InitFonts hasnt been called
+ MOVE.B #-1,FMExist ; $FF for InitFonts hasnt been called
; BSET #7,DSWndUpdate ; cancel pending PaintBehind
CLR.L MenuList
; Clr.L LastFOND ; <06May85>
@@ -553,14 +518,14 @@ Fig_VIAZINIT ;<7 BT>
JSR (A0) ;...the application heap <C681>
ENDIF
- JSR FlushApplVbls ;kill off doomed vbl tasks <27Mar85>
+ BigJSR FlushApplVbls ;kill off doomed vbl tasks <27Mar85>
BigJSR FlushApplNM,A0 ; And bogus NM requests <V1.1><1.2>
IF ForROM THEN
BSR.S FlushFontCaches ; flush TrueType caches <sm10>stb
ENDIF
BSR.S FlushApplPorts ;kill off doomed grafPorts <C699>
- BSR.S FlushPalettes ;as well as doomed palettes <10Jun87 EHB>
+ BSR.L FlushPalettes ;as well as doomed palettes <10Jun87 EHB>
; this cleanup is needed, for instance, if an ES is done from MacsBug. <10Jun87 EHB>
@@ -611,7 +576,7 @@ FlushApplPorts
BRA.S @NEXT ;=> and dive into loop <C699>
@SEARCH MOVE.L (A1)+,D0 ;get next element from list <C699>
- JSR AppZoneAddr ;in application area (or zero)? <C699>
+ BigJSR AppZoneAddr ;in application area (or zero)? <C699>
BEQ.S @DELETE ;=>yes, delete it <C699>
@NEXT DBRA D1,@SEARCH ;=>else try next in list <C699>
BRA.S @DONE ;=>none left, continue <C699>
@@ -633,44 +598,6 @@ FlushApplPorts
@DONE RTS
-FlushPalettes ; patch rolled in <10Jun87 EHB>
-;-----------------------------------------------------------------------
-; Call DisposePalette for all palettes in the app heap.
-;
-; Registers: D0-D2/A0-A1
-; Called by vIAZInit.
-;----------------------------------------------------------------------
- MOVEM.L A2-A3/D3,-(SP) ; save work registers
- MOVE.L PMgrHandle,A2 ; get paletteMgr handle
- CMP.L MinusOne,A2 ; is it there?
- BEQ.S @DONE ; => no, just return
- MOVE.L (A2),A1 ; point to data structure
- MOVE.L PListHandle(A1),A0 ; get handle to palette list
- _HLock ; and lock it down
- MOVE.L (A0),A3 ; point to palette list
-
- Move APalettes(A1),D3 ; get number of active handles
- Beq.s @NoPals ; no friends => go home
- Add FreeSpaces(A1),D3 ; calculate total number of entries
- BRA.S @FindEnd ; => check for no entries
-
-@FindLoop Move.L PaletteRef(A3),D1 ; get first entry
- BEQ.S @FindNext ; => no palette in entry
- MOVE.L D1,D0 ; and get for routine
- JSR AppZoneAddr ; in application area (or zero)?
- BNE.S @FindNext ; => not in app heap
- MOVE.L D1,-(SP) ; push palette handle
- _DisposePalette ; and dispose it in place
-@FindNext AddQ #PLstEntrySz,A3 ; bump to the next entry
-@FindEnd DBra D3,@FindLoop ; repeat for all spaces
-
-@NoPals MOVE.L (A2),A1 ; point to palette stuff
- MOVE.L PListHandle(A1),A0 ; get handle to palette list
- _HUnlock ; and unlock it
-
-@DONE MOVEM.L (SP)+,A2-A3/D3 ; restore work registers
- RTS
-
;----------------------------------------------------------------------
; vIAZPostInit new <C681>
; - last-minute inits after ApplZone has been created.
diff --git a/OS/MemoryMgr/FigmentSources/MemMgrGlue.a b/OS/MemoryMgr/FigmentSources/MemMgrGlue.a
--- a/OS/MemoryMgr/FigmentSources/MemMgrGlue.a
+++ b/OS/MemoryMgr/FigmentSources/MemMgrGlue.a
@@ -71,6 +71,15 @@
ENDIF
+FIG___BLOCKMOVE PROC EXPORT ; slightly out of place...
+ BTST #9,D1
+ BNE.S @Data
+ DC.W $FC12
+ RTS
+@Data DC.W $FC14
+ RTS
+
+
MMGlueCode PROC
import c_InitZone
import c_SetApplLimit
@@ -1076,9 +1085,7 @@ HEAPDISPATCH
ENDIF
- tst.w D0 ; normalize selector to 0..n
- bmi.s @selectorOutOfRange ; selector is out of range...
- cmp.w #TableSize/2,d0 ; is there a table entry for this one?
+ cmp.w #TableSize/2-1,d0 ; is there a table entry for this one?
bhi.s @selectorOutOfRange ; no, selector is out of range...
lea Table,a2 ; get the address of the selected routine
add.w (a2,d0.w*2),a2
diff --git a/OS/MemoryMgr/FigmentSources/ProcessMgrHeap.c b/OS/MemoryMgr/FigmentSources/ProcessMgrHeap.c
--- a/OS/MemoryMgr/FigmentSources/ProcessMgrHeap.c
+++ b/OS/MemoryMgr/FigmentSources/ProcessMgrHeap.c
@@ -81,7 +81,7 @@
#else
#include <Types.h>
#include <Memory.h>
- #include <GestaltEqu.h>
+ #include <Gestalt.h>
#include <Errors.h>
#include <OSUtils.h>
#endif
@@ -137,7 +137,7 @@ Size GetSystemHiPurgeBytes(void);
THz c_InitProcessMgrHeap(THz oldHeap)
{
stdHeap* newHeap;
- ushort cMoreMasters;
+ long cMoreMasters;
long VMResult;
IfIntDebugMsg(LMGetTheZone() != LMGetApplZone(),"TheZone != ApplZone", LMGetTheZone());
@@ -244,6 +244,7 @@ THz c_InitProcessMgrHeap(THz oldHeap)
/* Make a good guess for the number of master pointers for the heap */
cMoreMasters = ((Ptr)newHeap->backLimit - (Ptr)newHeap->heapStart)/kZoneBytesPerMP;
+ if (cMoreMasters > 32000) cMoreMasters = 32000;
if (newHeap->MPCount < cMoreMasters)
newHeap->MPCount = cMoreMasters;
diff --git a/OS/MemoryMgr/FigmentSources/QTMemory.c b/OS/MemoryMgr/FigmentSources/QTMemory.c
--- a/OS/MemoryMgr/FigmentSources/QTMemory.c
+++ b/OS/MemoryMgr/FigmentSources/QTMemory.c
@@ -50,7 +50,7 @@
#include <Errors.h>
#include <Memory.h>
#include <Processes.h>
- #include <SysEqu.h>
+ #include <LowMem.h>
#include <ToolUtils.h>
//#ifdef FOR_POWER_PC_PEOPLE
@@ -169,14 +169,14 @@ void c_TrashProcess(ProcessSerialNumber *psn)
// Boolean processMgrExists = (GetToolTrapAddress(JugglerTrap) != GetToolTrapAddress(UnimplementedTrap));
Boolean processMgrExists = *(long *)0x103c != *(long *)0x107c; // cheaper
- if ((*(short *)SysVersion < 0x0700) || !processMgrExists) {
+ if ((*(short *)0x15A /*SysVersion*/ < 0x0700) || !processMgrExists) {
// system 6 world, or somewhere (strange) in the boot process
Ptr zoneBegin, zoneEnd;
zoneBegin = (Ptr)ApplicZone();
if (zoneBegin != (Ptr)SystemZone()) {
if (!processMgrExists)
- zoneEnd = *(Ptr *)BufPtr;
+ zoneEnd = *(Ptr *)0x10C /*BufPtr*/;
else {
unsigned long temp;
@@ -254,7 +254,7 @@ Handle c_NewHandleSystemSafe(Size handleSize)
if (!EnoughSystemHeapSlop()) {
DisposHandle(h);
h = nil;
- *(OSErr *)MemErr = memFullErr;
+ LMSetMemErr(memFullErr);
}
}
@@ -269,7 +269,7 @@ Ptr c_NewPtrSystemSafe(Size ptrSize)
if (!EnoughSystemHeapSlop()) {
DisposPtr(p);
p = nil;
- *(OSErr *)MemErr = memFullErr;
+ LMSetMemErr(memFullErr);
}
}
diff --git a/OS/OS.make b/OS/OS.make
--- a/OS/OS.make
+++ b/OS/OS.make
@ -30165,7 +30649,41 @@ diff --git a/OS/TrapDispatcher/Dispatch.a b/OS/TrapDispatcher/Dispatch.a
Title 'Dispatch - InitDispatcher'
;_______________________________________________________________________
@@ -666,18 +659,14 @@ OSLoop move.l (a2)+,d1 ; get the next entry from the ROM dispatch table
@@ -571,33 +564,6 @@ ToolLoop move.l (a2)+,d1 ; get the next entry from the ROM dispatch table
; initialize OS table
- if hasNewHeapMgr Then ; <MC2> SAM
-
- With ProductInfo
-
- BTST #hasNewMemMgr,UnivROMFlags ; Does this ROM support Figment?
- BEQ.S @noFigment ; -> No. Don't bother w/PRAM
-
- MOVEM.L A0-A3/D1/D3,-(SP) ; save regs
-
- MOVEA.L UnivInfoPtr,a1 ; Get product info pointer
- MOVEA.L A1,A0 ; Make a copy into A1
- ADDA.L ProductInfo.DecoderInfoPtr(A1),A0 ; Get ptr to hardware bases
- MOVE.L ProductInfo.ExtValid(A1),D1 ; Get external features (0-31)
- MOVE.L #MMPRAMloc,D3 ; Read MMFlags from PRAM
- LEA MMFlags,A3 ; A3 points to MMFlags lomem
- BSR.L PramIO ; Get the current MMFlags
-
- MOVEM.L (SP)+,A0-A3/D1/D3 ; restore regs
-
- BTST #mmFigEnable,MMFlags ; Is Figment enabled for this boot?
- BEQ.S @noFigment ; -> Nope. Use old MemMgr
-
- ADD.L #numOSTrap*4,A2 ; Yes, skip to second table
-
- EndWith
- endif
-
@noFigment lea OSTable,a1 ; a1 := OS dispatch table ptr
move.w #numOsTrap-1,d0 ; d0 := loop counter for toolbox trap table
@@ -666,18 +632,14 @@ OSLoop move.l (a2)+,d1 ; get the next entry from the ROM dispatch table
EndIf ; Not NewBuildSystem
; now install the trap dispatcher
@ -30190,7 +30708,7 @@ diff --git a/OS/TrapDispatcher/Dispatch.a b/OS/TrapDispatcher/Dispatch.a
move.l a0,Line1010 ; install the Line-A exception handler
IF forRomulator THEN ; register the Line-A handler with the nub <SM6>
@@ -711,60 +700,5 @@ BadTrap
@@ -711,60 +673,5 @@ BadTrap
; <SM4> rb, start from PatchProtector.a