Reverse a Big Bad function

This commit is contained in:
Elliot Nunn 2019-08-11 21:10:01 +08:00
parent b5ebad1958
commit b39f3ffead
2 changed files with 2326 additions and 2177 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3093,6 +3093,19 @@ diff --git a/Internal/C/ExpandMemPriv.h b/Internal/C/ExpandMemPriv.h
#define emCurVersion 0x0133 // version <SM21/LW3><62><SM27><SM30>
#define emItlCacheSize 16 // bytes in cache. WARNING, you cannt change this
// without distroying all fixed offsets from
@@ -424,6 +420,12 @@ struct ExpandMemRec
Ptr emExpansionBusGlobals; // ds.l 1 ; Ptr to Expansion Manager globals
ProcPtr jSWModemSoundVector; // ds.l 1 ; Vector to control routine for software modem sound
+
+ // 23C
+
+ char jank[0x2E6-0x23C];
+
+ Ptr emUSBGlobals;
};
typedef struct ExpandMemRec ExpandMemRec;
diff --git a/Internal/C/GestaltPrivateEqu.h b/Internal/C/GestaltPrivateEqu.h
--- a/Internal/C/GestaltPrivateEqu.h
+++ b/Internal/C/GestaltPrivateEqu.h
@ -3950,7 +3963,7 @@ diff --git a/Make/VectorTable.a b/Make/VectorTable.a
+MISCELLANEOUS_VEC0110 vIndirect $2010, $0110, A7
+MISCELLANEOUS_VEC0114 vIndirect $2010, $0114, A7
+MISCELLANEOUS_VEC0118 vIndirect $2010, $0118, A7
+MISCELLANEOUS_VEC011C vIndirect $2010, $011c, A7
+SetDriverClosureMemory vIndirect $2010, $011c, A7
+
;============================== End Misc. Vectors
@ -5397,33 +5410,33 @@ diff --git a/Make/VectorTable.a b/Make/VectorTable.a
+EXPANSIONBUSMGR_VEC0130 vIndirect $208c, $0130, A7 ; _ExpansionBusDispatch selector 48
+EXPANSIONBUSMGR_VEC0134 vIndirect $208c, $0134, A7 ; _ExpansionBusDispatch selector 49
+EXPANSIONBUSMGR_VEC0138 vIndirect $208c, $0138, A7 ; _ExpansionBusDispatch selector 20
+EXPANSIONBUSMGR_VEC014C vIndirect $208c, $014c, A7
+EXPANSIONBUSMGR_VEC0150 vIndirect $208c, $0150, A7
+EXPANSIONBUSMGR_VEC0154 vIndirect $208c, $0154, A7
+EXPANSIONBUSMGR_VEC0158 vIndirect $208c, $0158, A7
+EXPANSIONBUSMGR_VEC015C vIndirect $208c, $015c, A7
+EXPANSIONBUSMGR_VEC0160 vIndirect $208c, $0160, A7
+EXPANSIONBUSMGR_VEC0164 vIndirect $208c, $0164, A7
+EXPANSIONBUSMGR_VEC0168 vIndirect $208c, $0168, A7
+EXPANSIONBUSMGR_VEC016C vIndirect $208c, $016c, A7
+EXPANSIONBUSMGR_VEC0170 vIndirect $208c, $0170, A7
+EXPANSIONBUSMGR_VEC0174 vIndirect $208c, $0174, A7
+EXPANSIONBUSMGR_VEC0178 vIndirect $208c, $0178, A7
+EXPANSIONBUSMGR_VEC017C vIndirect $208c, $017c, A7
+EXPANSIONBUSMGR_VEC0180 vIndirect $208c, $0180, A7
+EXPANSIONBUSMGR_VEC0184 vIndirect $208c, $0184, A7
+EXPANSIONBUSMGR_VEC0188 vIndirect $208c, $0188, A7
+EXPANSIONBUSMGR_VEC018C vIndirect $208c, $018c, A7
+EXPANSIONBUSMGR_VEC0190 vIndirect $208c, $0190, A7
+EXPANSIONBUSMGR_VEC0194 vIndirect $208c, $0194, A7
+EXPANSIONBUSMGR_VEC0198 vIndirect $208c, $0198, A7
+EXPANSIONBUSMGR_VEC019C vIndirect $208c, $019c, A7
+EXPANSIONBUSMGR_VEC01A0 vIndirect $208c, $01a0, A7
+EXPANSIONBUSMGR_VEC01A4 vIndirect $208c, $01a4, A7
+EXPANSIONBUSMGR_VEC01A8 vIndirect $208c, $01a8, A7
+EXPANSIONBUSMGR_VEC01AC vIndirect $208c, $01ac, A7
+EXPANSIONBUSMGR_VEC01B0 vIndirect $208c, $01b0, A7
+EXPANSIONBUSMGR_VEC01B4 vIndirect $208c, $01b4, A7
+ScanDriverCandidates vIndirect $208c, $014c, A7
+HigherDriverVersion vIndirect $208c, $0150, A7
+FindDriversForDevice vIndirect $208c, $0154, A7
+GetDriverForDevice vIndirect $208c, $0158, A7
+Load_And_Install_CodeFragment_Driver vIndirect $208c, $015c, A7
+OpenInstalledDriver vIndirect $208c, $0160, A7
+CloseInstalledDriver vIndirect $208c, $0164, A7
+SwitchDriverPowerMode vIndirect $208c, $0168, A7
+FindDriverCandidates vIndirect $208c, $016c, A7
+GetDriverDescription vIndirect $208c, $0170, A7
+VerifyFragmentAsDriver vIndirect $208c, $0174, A7
+GetDriverMemoryFragment vIndirect $208c, $0178, A7
+GetDriverDiskFragment vIndirect $208c, $017c, A7
+HighestUnitNumber vIndirect $208c, $0180, A7
+LookupDrivers vIndirect $208c, $0184, A7
+InstallDriverFromFragment vIndirect $208c, $0188, A7
+ReplaceDriverWithFragment vIndirect $208c, $018c, A7
+InstallDriverFromFile vIndirect $208c, $0190, A7
+InstallDriverFromDisk vIndirect $208c, $0194, A7
+InstallDriverFromMemory vIndirect $208c, $0198, A7
+InstallDriverForDevice vIndirect $208c, $019c, A7
+GetDriverInformation vIndirect $208c, $01a0, A7
+RenameDriver vIndirect $208c, $01a4, A7
+RemoveDriver vIndirect $208c, $01a8, A7
+DriverGestaltIsOn vIndirect $208c, $01ac, A7
+DriverGestaltOff vIndirect $208c, $01b0, A7
+DriverGestaltOn vIndirect $208c, $01b4, A7
-HEAPDISPATCH vIndirect $2088, $0004, A7 ; Figment
-FIG_HSETFLAGS vIndirect $2088, $0008, A7 ; Figment
@ -22817,13 +22830,15 @@ diff --git a/OS/StartMgr/OpenFirmware.c b/OS/StartMgr/OpenFirmware.c
new file mode 100644
--- /dev/null
+++ b/OS/StartMgr/OpenFirmware.c
@@ -0,0 +1,304 @@
@@ -0,0 +1,419 @@
+#include <CodeFragments.h>
+#include <NameRegistry.h>
+#include <NameRegistryPriv.h>
+#include <ExpandMemPriv.h>
+#include <Resources.h>
+#include <Memory.h>
+#include <Devices.h>
+#include <TextUtils.h>
+
+
+struct mystruct {
@ -22840,6 +22855,7 @@ new file mode 100644
+};
+
+pascal short CFM_4(struct mystruct *, long, char *, char) = {0x3F3C, 0xFFFC, 0xAA5A};
+// cfm_fff4=FragGetClosureInfo cfm_fff3=FragGetConnectionInfo cfm_fff2=FragGetSectionInfo
+
+void
+INTERC_11E0_C2PSTRCPY(char *dest, char *src)
@ -23121,6 +23137,118 @@ new file mode 100644
+ SetZone(old_zone);
+}
+
+void
+SEARCHDRIVERS(void)
+{
+ RegEntryID entry;
+ RegEntryIter cookie;
+ RegEntryIterationOp iterOp;
+ Boolean iterDone;
+ short old_res_file;
+ Handle ndrv;
+ CFragConnectionID conn;
+ DriverEntryPointPtr code;
+ DriverRefNum refnum;
+ RuntimeOptions opts;
+ long i;
+ OSErr err;
+
+ RegistryEntryIDInit(&entry);
+ iterOp = 1;
+
+ err = RegistryEntryIterateCreate(&cookie);
+ if (err != noErr) return;
+
+ iterDone = 0;
+ do {
+ DriverDescriptionPtr desc;
+ unsigned long name_size;
+ unsigned long frag_size;
+ StringPtr compat_p;
+ StringPtr compat_prop;
+ unsigned long compat_cnt;
+ Str63 name_str;
+ Str63 name_str_p;
+
+ err = RegistryEntryIterate(&cookie, iterOp, &entry, &iterDone);
+
+ if (iterDone == 0 && err == noErr) {
+ name_size = sizeof name_str - 1;
+ for (i=0; i<name_size; i++) name_str[i] = 0;
+
+ err = RegistryPropertyGet(&entry, "name", name_str, &name_size);
+ if (err != noErr) continue;
+
+ /* Skip if an ndrv is already in the device tree */
+ frag_size = 0;
+ err = RegistryPropertyGetSize(&entry, "driver,AAPL,MacOS,PowerPC", &frag_size);
+ if (err == noErr) continue;
+
+ INTERC_11E0_C2PSTRCPY(name_str_p, name_str);
+
+ old_res_file = CurResFile(); /* Use 'goto fail' instead of 'continue' */
+ UseResFile(0);
+
+ TempInsertROMMap(1); ndrv = Get1NamedResource('ndrv', name_str_p);
+
+ if (!ndrv) {
+ compat_prop = NULL; compat_cnt = 0;
+ GetCompatibleProperty(&entry, &compat_prop, &compat_cnt);
+
+ if (compat_prop) {
+ compat_p = compat_prop;
+
+ while (!ndrv && compat_cnt--) { /* loop over packed p-strings */
+ TempInsertROMMap(1); ndrv = Get1NamedResource('ndrv', compat_p);
+ compat_p += *compat_p + 1;
+ }
+
+ DisposPtr(compat_prop);
+ }
+ }
+
+ if (!ndrv) goto skip;
+
+ err = GetDriverDescription(*ndrv, &desc);
+ if (err != noErr) goto skip;
+
+ err = RegistryPropertyCreate(&entry, "driver-descriptor", desc, GetPtrSize((Ptr)desc));
+ DisposPtr((Ptr)desc);
+ if (err != noErr) goto skip;
+
+ frag_size = GetHandleSize(ndrv);
+ err = RegistryPropertyCreate(&entry, "driver,AAPL,MacOS,PowerPC", *ndrv, frag_size);
+ if (err != noErr) goto skip;
+
+ err = RegistryPropertyCreate(&entry, "driver-ptr", ndrv, 4);
+ if (err != noErr) goto skip;
+
+ err = GetDriverDescription(*ndrv, &desc);
+ if (err != noErr) goto skip;
+
+ opts = desc->driverOSRuntimeInfo.driverRuntime;
+ DisposPtr((Ptr)desc);
+ if ((opts & kDriverIsLoadedUponDiscovery) == 0) goto skip;
+
+ err = GetDriverMemoryFragment(*ndrv, frag_size, name_str_p, &conn, &code, &desc);
+ if (err != noErr) goto skip;
+
+ err = InstallDriverFromFragment(conn, &entry, /*begin,endUnit*/ 48,1023, &refnum);
+ if (err != noErr) goto skip;
+
+ err = RegistryPropertyCreate(&entry, "driver-ref", &refnum, sizeof refnum);
+ if (err != noErr) goto skip;
+
+ skip:
+ UseResFile(old_res_file);
+ } else {
+ iterDone = 1;
+ }
+ } while (!iterDone);
+
+ RegistryEntryIterateDispose(&cookie);
+}
+
+/* This file is complete... the remaining kilobytes to 0x2BC0 are filled by Amphibian DNA */
diff --git a/OS/StartMgr/OpenFirmware.c.idump b/OS/StartMgr/OpenFirmware.c.idump
new file mode 100644
@ -26321,7 +26449,7 @@ diff --git a/OS/StartMgr/StartFail.a b/OS/StartMgr/StartFail.a
diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
--- a/OS/StartMgr/StartInit.a
+++ b/OS/StartMgr/StartInit.a
@@ -1135,6 +1135,42 @@ ioNuBusTTxlat EQU $500FC040 ; I/O space and nuBus $6-$7 with serialized wri
@@ -1135,6 +1135,41 @@ ioNuBusTTxlat EQU $500FC040 ; I/O space and nuBus $6-$7 with serialized wri
IMPORT INITSCSIBOOT
ENDIF
@ -26352,7 +26480,6 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
+ IMPORT InitStorage
+ IMPORT InitSystemExperts
+ IMPORT InitUSB
+ IMPORT LoadNDRV
+ IMPORT LoadPCCardLib
+ IMPORT MoveUnivInfoToSysHeap
+ IMPORT MoveUnivInfoToSysHeap
@ -26364,7 +26491,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
MyROM MAIN Export
@@ -1145,16 +1181,11 @@ MyROM MAIN Export
@@ -1145,16 +1180,11 @@ MyROM MAIN Export
EXPORT InitDefGamma
EXPORT InitSCC
EXPORT OpensDrvr
@ -26381,7 +26508,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
*************************************************************************************************
* *
* S T A R T O F R O M *
@@ -1216,6 +1247,9 @@ GOOFYDoEject
@@ -1216,6 +1246,9 @@ GOOFYDoEject
BRA.L DoEject ; branch island to eject code
@ -26391,7 +26518,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
*************************************************************************************************
* *
@@ -1223,56 +1257,12 @@ GOOFYDoEject
@@ -1223,56 +1256,12 @@ GOOFYDoEject
* *
*************************************************************************************************
@ -26449,7 +26576,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
; <60>, check what WakeUp does, does it return here again after changing clock ?
@@ -1287,11 +1277,12 @@ StartBoot MOVE #$2700,SR ; Disable processor interrupts.
@@ -1287,11 +1276,12 @@ StartBoot MOVE #$2700,SR ; Disable processor interrupts.
BSR6 JumpIntoROM ; init the hardware
@ -26467,7 +26594,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;-----
; here, after running the diagnostics, we have:
@@ -1367,12 +1358,7 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
@@ -1367,12 +1357,7 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
BSR WhichCPU ; get CPU type in low word of d7
bsr WhichBoard ; get logic board type in hi word of d7
@ -26481,7 +26608,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@hasMMU bsr.l InitMMU ; generate MMU tables, enable MMU <SM15>
; returns a4 -> BootGlobs
@@ -1421,7 +1407,7 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
@@ -1421,7 +1406,7 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
LEA HeapStart,A1 ; A1 <- pointer to end of system globals.
BSR FillWithOnes ; Fill system globals with ones.
@ -26490,7 +26617,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
MOVEM.L (SP)+,D0-D6/A0-A1 ; restore Universal info <SM82>
@@ -1440,7 +1426,7 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
@@ -1440,7 +1425,7 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
MOVE.B D7,CpuFlag ; save type of CPU we have
swap d7 ;
@ -26499,7 +26626,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@StoreBox move.b d7,BoxFlag ; ... and save it in lomem
@@ -1448,119 +1434,15 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
@@ -1448,119 +1433,15 @@ getHInfo move.l a6,-(sp) ; save regs <SM44>
MOVE.L A5,BufPtr ; save the top of useable memory
MOVE.L A6,MemTop ; and the top of available memory
@ -26622,7 +26749,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
bsr.l InitMMUGlobals ; set up MMU globals
@@ -1584,13 +1466,7 @@ NoROMinRAM ; <SM104> rb, end
@@ -1584,13 +1465,7 @@ NoROMinRAM ; <SM104> rb, end
IF forRomulator THEN
Moveq.l #$0,D0 ; Set up to disable the caches if were debugging.
ELSE
@ -26637,7 +26764,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
MOVE.L #(1<<CACR_EI_020_030|\ ; WA=1, DBE=1, CD=1, ED=1, IBE=1, CI=1, EI=1
1<<CACR_CI_020_030|\ ;
1<<CACR_IBE_030|\ ;
@@ -1643,7 +1519,6 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1643,7 +1518,6 @@ BootRetry MOVE #$2700,SR ; disable interrupts
MOVE.L A0,SP ; Set the stack pointer there
SUBA.W #BootStackSize,A0 ; Give ourselves some stack space
@ -26645,7 +26772,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
_SetApplLimit ; Don't let the System Heap crash our stack
BSR.L InitMemoryDispatch ; go set up the MemoryDispatch globals
@@ -1658,15 +1533,16 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1658,15 +1532,16 @@ BootRetry MOVE #$2700,SR ; disable interrupts
Move.l #emRecSize,(a0) ; size <SM40>
ENDWITH ; <SM40>
@ -26666,7 +26793,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@EInitDone
@@ -1680,17 +1556,45 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1680,17 +1555,45 @@ BootRetry MOVE #$2700,SR ; disable interrupts
*************************************************************************************************
@ -26716,7 +26843,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
BSR InitSlots ; inits slot cards, grays the screen(s)
BSR.L InitDTQueue ; initialize the Deferred Task Manager Queue
@@ -1708,7 +1612,10 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1708,7 +1611,10 @@ BootRetry MOVE #$2700,SR ; disable interrupts
; Gestalt must now be initialized before IO drivers <SM39> <SM39> RLM
;------------------------------------------------------------------------ <SM39>
@ -26728,7 +26855,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
moveq #10,D0
_NewHandle ,Sys,Clear ; Get space for a Heap utilities list
@@ -1717,52 +1624,56 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1717,52 +1623,56 @@ BootRetry MOVE #$2700,SR ; disable interrupts
move.l D0,$1E0C ; Stuff it in the magic location
@noHU
@ -26811,7 +26938,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
BSR InitCrsrMgr ; Initialize cursor variables
@@ -1770,13 +1681,9 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1770,13 +1680,9 @@ BootRetry MOVE #$2700,SR ; disable interrupts
; Initialize Reliability Manager
;----------------------------------------------------------------
@ -26827,7 +26954,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
BSR.L TEGlobalInit ; initialize TextEdit vectors
@@ -1814,11 +1721,7 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1814,11 +1720,7 @@ BootRetry MOVE #$2700,SR ; disable interrupts
BSR DrawBeepScreen ; Horst Beepmanhs patented gray screen
; On machines with Civic, check to see if we want to boot off the composite out <SM63>
@ -26840,7 +26967,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
MOVE.L #WmStConst,WarmStart ; write warm start constant to indicate warm start
@@ -1830,40 +1733,40 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1830,40 +1732,40 @@ BootRetry MOVE #$2700,SR ; disable interrupts
; Initialize the Sound Manager
;----------------------------------------------------------------
@ -26898,7 +27025,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
*************************************************************************************************
@@ -1953,58 +1856,8 @@ BootRetry MOVE #$2700,SR ; disable interrupts
@@ -1953,58 +1855,8 @@ BootRetry MOVE #$2700,SR ; disable interrupts
;________________________________________________________________________________________
WhichCPU
@ -26959,7 +27086,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
@@ -2048,61 +1901,56 @@ WhichBoard swap d7 ; get CPU type in hi word
@@ -2048,61 +1900,56 @@ WhichBoard swap d7 ; get CPU type in hi word
;________________________________________________________________________________________
SetUpTimeK
@ -27065,7 +27192,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
eieioSTP
; Load timer with number of VIA ticks per millisecond - 3. There are 3 clocks of overhead
@@ -2131,15 +1979,26 @@ SetUpTimeK
@@ -2131,15 +1978,26 @@ SetUpTimeK
andi.w #$F8FF,sr ; enable interrupts
jmp (a0) ; call the routine to time
@timedOut not.w d0 ; convert to number of loop executions.
@ -27095,7 +27222,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
rts
TimerInt nop
@@ -2156,11 +2015,8 @@ TimingTable dc.w DbraTime-*,TimeDBRA ; simple DBRA loop timing
@@ -2156,11 +2014,8 @@ TimingTable dc.w DbraTime-*,TimeDBRA ; simple DBRA loop timing
DbraTime
@ -27107,7 +27234,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@loop
dbra d0,@loop ; time an empty DBRA loop
jmp (a2) ; return if loop expires
@@ -2168,23 +2024,35 @@ DbraTime
@@ -2168,23 +2023,35 @@ DbraTime
SCCTime
movea.l SCCRd,a0 ; point to SCC base read address
@ -27150,7 +27277,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
TestFor SCSI96_1Exists ; use macro to check if we have
beq.s @loop80 ; SCSI96. Bra. if not
@loop96
@@ -2239,11 +2107,8 @@ SCSITime
@@ -2239,11 +2106,8 @@ SCSITime
VIATime
lea vIER(a1),a0 ; <40x008BC> point to a VIA register <H11>
@ -27162,7 +27289,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@loop
btst.b #0,(A0) ; <40x008CA> typical VIA access loop <H11>
dbra d0,@loop ; <40x008CE> time the VIA DBRA loop <H11>
@@ -2312,13 +2177,20 @@ FillWithOnes
@@ -2312,13 +2176,20 @@ FillWithOnes
;________________________________________________________________________________________
CompBootStack
@ -27186,7 +27313,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
rts
@@ -2406,17 +2278,6 @@ ConfigureRAM
@@ -2406,17 +2277,6 @@ ConfigureRAM
SetUpSysAppZone
lea SysHeap,a0 ; point at normal system heap template
@ -27204,7 +27331,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
_InitZone ; set up initial system heap
Move.L theZone,SysZone ; save pointer to the new zone
Move.L SysZone,RamBase ; setup RamBase to system heap
@@ -2435,189 +2296,27 @@ SetUpSysAppZone
@@ -2435,189 +2295,27 @@ SetUpSysAppZone
MOVE.L SP,A0 ; Use the current sp when its lower
@3 SUBA.W #BootStackSize,A0 ; Give ourselves some stack space
_SetApplLimit ; Don't let the System Heap crash our stack
@ -27409,7 +27536,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
@@ -2665,54 +2364,6 @@ GetPRAM _InitUtil ; seed low memory PRAM buffer
@@ -2665,54 +2363,6 @@ GetPRAM _InitUtil ; seed low memory PRAM buffer
RTS
@ -27464,7 +27591,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
*************************************************************************************************
* *
@@ -2804,18 +2455,7 @@ InitGlobalVars
@@ -2804,18 +2454,7 @@ InitGlobalVars
; jump table.
;
Move.l ROMBase,A0 ; Get ROMBase
@ -27483,7 +27610,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;--------------------------------------
LEA VBLQueue,A1
@@ -2938,6 +2578,11 @@ InitCrsrMgr MOVE.L #$000F000F,D0
@@ -2938,6 +2577,11 @@ InitCrsrMgr MOVE.L #$000F000F,D0
move.l (a1)+,(a0)+ ; move the bytes in
move.l (a1),(a0)
@ -27495,7 +27622,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
LEA GrafEnd,A1 ; end of cursor globals
BigLea CrsrDevHandleVBL,A0 ; install cursor VBL task <H9>
MOVE.L A0,-(A1) ; JCrsrTask
@@ -2962,113 +2607,6 @@ InitCrsrMgr MOVE.L #$000F000F,D0
@@ -2962,113 +2606,6 @@ InitCrsrMgr MOVE.L #$000F000F,D0
MOVE.W D0,CrsrNew ; flag cursor as changed, turn on tracking
MOVE.L D0,MouseMask ; No jerkiness with $FFFFFFFF mask
@ -27609,7 +27736,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
RTS
@@ -3181,6 +2719,11 @@ SetupMiscSCSI
@@ -3181,6 +2718,11 @@ SetupMiscSCSI
bra.s @SCSIHskDone
@80based
ENDIF
@ -27621,7 +27748,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
btst.l #SCSIDackExists,d0 ; see if we have SCSI Dack
bne.s @SCSIDackDone ; if we do, it's setup ok
move.l SCSIHsk,SCSIDMA ; if not, use hsk instead
@@ -3222,37 +2765,6 @@ InitSlots BSR.L InitSDTbl ; init slot int dispatch table
@@ -3222,37 +2764,6 @@ InitSlots BSR.L InitSDTbl ; init slot int dispatch table
BRA Critical ; Critical error
@ -27659,7 +27786,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
; Routine: InitDeviceMgr
@@ -3269,7 +2781,7 @@ InitDeviceMgr ; Compute the size of the unit table and allocate it.
@@ -3269,7 +2780,7 @@ InitDeviceMgr ; Compute the size of the unit table and allocate it.
MOVEQ #UnitEntries,D0 ; get number of entries in unit table
MOVE.W D0,UnitNtryCnt ; save for IOCore checking
@ -27668,7 +27795,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
_NewPtr ,SYS,CLEAR ; allocate it and zero out the memory
MOVE.L A0,UTableBase ; and save its address
@@ -3295,55 +2807,6 @@ LoadDrivers
@@ -3295,55 +2806,6 @@ LoadDrivers
MOVE.L SP,A0
CLR.B IOPermssn(A0) ; r/w permissions
@ -27724,7 +27851,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;
;————————— RAM Disk Driver —————————
;
@@ -3351,42 +2814,73 @@ LoadDrivers
@@ -3351,42 +2813,76 @@ LoadDrivers
; to enable the EDisk, make sure that it is included in the rom resources
IF hasEDisk THEN
@ -27758,7 +27885,10 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
+ CLR.L -(SP)
+ PEA.L BCScreenName
+ MOVE.L #-16515, -(SP)
+ BSR.L LoadNDRV ; (CDG5)
+ CASE ON
+ IMPORT InstallDriverFromResource
+ BSR.L InstallDriverFromResource ; (CDG5)
+ CASE OFF
+ DC.W $DEFC, $001A
+ ;ADDA #$1A, A7
+
@ -27823,7 +27953,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;
;————————— Serial Drivers —————————
@@ -3398,21 +2892,30 @@ LoadDrivers
@@ -3398,21 +2894,30 @@ LoadDrivers
; table, remaining closed and inactive until opened by a client.
subq #4,sp ; allocate space for return value
@ -27866,7 +27996,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@exitDrivers
rts
@@ -3420,8 +2923,6 @@ LoadDrivers
@@ -3420,8 +2925,6 @@ LoadDrivers
STRING PASCAL
@ -27875,7 +28005,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
SndName DC.W '.Sound' ; <SM83>
IF hasEDisk THEN
@@ -3439,6 +2940,12 @@ BacklightName
@@ -3439,6 +2942,12 @@ BacklightName
DC.W '.Backlight'
ENDIF
@ -27888,7 +28018,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
STRING ASIS
@@ -3480,11 +2987,34 @@ DrawBeepScreen
@@ -3480,11 +2989,34 @@ DrawBeepScreen
; of the menu bar (because the screen background is white on LCD screens vs black on CRTs)
BSR.L LCDScreenChk ; is this an LCD screen ? <SM16><SM68>
@ -27925,7 +28055,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
RTS
@DoNormalBeepScreen
ENDIF ; <SM81>
@@ -3510,11 +3040,27 @@ DrawBeepScreen
@@ -3510,11 +3042,27 @@ DrawBeepScreen
_PenNormal ; restore the pen
@ -27953,7 +28083,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
@@ -3536,8 +3082,33 @@ FROVideo MOVE.L A0,A1 ; save the param block pointer for _Open
@@ -3536,8 +3084,33 @@ FROVideo MOVE.L A0,A1 ; save the param block pointer for _Open
LINK A6,#-spBlockSize ; allocate space for a slot parameter block
MOVE.L SP,A0 ; and point to it
@ -27989,7 +28119,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
; the default video device is bad, so go search for a video sRsrc...
@@ -3553,23 +3124,26 @@ FROVideo MOVE.L A0,A1 ; save the param block pointer for _Open
@@ -3553,23 +3126,26 @@ FROVideo MOVE.L A0,A1 ; save the param block pointer for _Open
@NextVidsRsrc
_sNextTypesRsrc ; search for a video sRsrc
@ -28023,7 +28153,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
@@ -3604,12 +3178,14 @@ OpnVidDeflt MOVE.L A0,A2 ; save A0
@@ -3604,12 +3180,14 @@ OpnVidDeflt MOVE.L A0,A2 ; save A0
CMP.W #DrSwApple,spDrvrSW(A0) ; does it have an Apple driver interface (software only)?
BNE.S @Error ; -> no, keep on searching
@ -28041,7 +28171,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
BSR InitVidDeflt ; initialize the default video device
@Error RTS
@@ -3629,7 +3205,8 @@ OpnVidDeflt MOVE.L A0,A2 ; save A0
@@ -3629,7 +3207,8 @@ OpnVidDeflt MOVE.L A0,A2 ; save A0
; then saved in low memory as needed.
;________________________________________________________________________________________
@ -28051,7 +28181,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
MOVE.B spId(A0),D3 ; save the ID
CLR.B spExtDev(A0) ; no external devices
@@ -3651,6 +3228,7 @@ RdVidParam MOVEM.L A1-A2/D3,-(SP)
@@ -3651,6 +3230,7 @@ RdVidParam MOVEM.L A1-A2/D3,-(SP)
@gotBase MOVE.L spResult(A0),ScreenBytes ; save it
MOVE.B D3,spId(A0) ; restore the sRsrc ID
@ -28059,7 +28189,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
BSR GetDefVidMode ; get the default video mode
MOVE.B D0,spId(A0) ; and save it
@@ -3686,9 +3264,9 @@ RdVidParam MOVEM.L A1-A2/D3,-(SP)
@@ -3686,9 +3266,9 @@ RdVidParam MOVEM.L A1-A2/D3,-(SP)
MOVEQ #0,D0 ; no errors
@End MOVE.B D3,spId(A0) ; restore ID for caller
@ -28072,7 +28202,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@Error MOVEQ #1,D0 ; bad video card (woof)
BRA.S @End
@@ -3755,34 +3333,76 @@ OpensDrvr MOVE.L A2,-(SP)
@@ -3755,34 +3335,76 @@ OpensDrvr MOVE.L A2,-(SP)
;________________________________________________________________________________________
InitVidDeflt
@ -28170,7 +28300,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
; Routine: GetDefVidMode
@@ -3797,14 +3417,15 @@ InitVidDeflt
@@ -3797,14 +3419,15 @@ InitVidDeflt
;________________________________________________________________________________________
GetDefVidMode
@ -28190,7 +28320,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
_SReadPRAMRec ; get parameter RAM record
BNE.S @OneBit ; -> it's invalid, so default to one bit mode
@@ -3819,11 +3440,11 @@ GetDefVidMode
@@ -3819,11 +3442,11 @@ GetDefVidMode
MOVEQ #0,D0
MOVE.B 2(A1),D0 ; get the default mode
@ -28205,7 +28335,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@OneBit MOVE.B #OneBitMode,2(A1) ; Set default to OneBitMode
MOVE.L A1,spsPointer(A0) ; Pass pointer to buffer
@@ -3952,6 +3573,14 @@ InitDefGamma
@@ -3952,6 +3575,14 @@ InitDefGamma
BRA.S @SetIt ; set it
@ -28220,7 +28350,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
; Routine: InitDummyScreen
@@ -4081,6 +3710,7 @@ AddVidDevice
@@ -4081,6 +3712,7 @@ AddVidDevice
MOVE ioRefNum(A1),-(SP) ; push the device's refNum
BSR.S GetDefVidMode ; D0 <- the default video mode
@ -28228,7 +28358,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
MOVE.L D0,-(SP) ; Push it
_NewGDevice ; allocate a new GrafDevice (in system heap)
@@ -4130,6 +3760,10 @@ InitSCC
@@ -4130,6 +3762,10 @@ InitSCC
bsr.l SCCIOPHwInit ; initialize the IOP hardware registers
@NoIOP ; fall thru -- IOP boots in bypass mode
ENDIF
@ -28239,7 +28369,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
movea.l SCCWr,a0 ; point to SCC base write address (chan B)
movea.l SCCRd,a1 ; point to SCC base read address (chan B)
tst.b (a1) ; synchronize SCC accesses
@@ -4139,89 +3773,6 @@ InitSCC
@@ -4139,89 +3775,6 @@ InitSCC
rts
@ -28329,7 +28459,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
;________________________________________________________________________________________
;
; Routine: InstallDriver
@@ -4250,7 +3801,7 @@ InstallDriver
@@ -4250,7 +3803,7 @@ InstallDriver
move.l UTableBase,a0 ; point to utable array
move.l (a0,d1),a0 ; get handle to dce in a3
move.l (a0),a0 ; get pointer to dce
@ -28338,7 +28468,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
move.l (a1),a1 ; get pointer to driver
move.w drvrFlags(a1),dCtlFlags(a0) ; copy data to dce
@@ -4258,7 +3809,9 @@ InstallDriver
@@ -4258,7 +3811,9 @@ InstallDriver
move.w drvrEMask(a1),dCtlEMask(a0)
move.w drvrMenu(a1),dCtlMenu(a0)
@ -28349,7 +28479,7 @@ diff --git a/OS/StartMgr/StartInit.a b/OS/StartMgr/StartInit.a
@openDrvr move.l a2,a1 ; load pointer to driver name
bra.s OpenDRVR ; open the driver (a1/)
@@ -4391,124 +3944,105 @@ CheckForEgretOrCuda ; <T2>
@@ -4391,124 +3946,105 @@ CheckForEgretOrCuda ; <T2>
ENDIF
@ -48881,7 +49011,7 @@ diff --git a/Toolbox/ShutDownMgr/ShutDownMgr.a b/Toolbox/ShutDownMgr/ShutDownMgr
BSR CloseLCDVideo ; Otherwise, close em.
@SkipClose
@@ -1182,51 +1346,57 @@ CheckForSoftPowerOff
@@ -1182,51 +1346,59 @@ CheckForSoftPowerOff
; if the video is of type LCD. If so, then close the video driver.
;————————————————————————————————————————————————————————————————————————————————————————
@ -48936,8 +49066,10 @@ diff --git a/Toolbox/ShutDownMgr/ShutDownMgr.a b/Toolbox/ShutDownMgr/ShutDownMgr
+ Move (A2), D0
+ Ext.L D0
+ Move.L D0, -(A7)
+ IMPORT EXPANSIONBUSMGR_VEC01A8
+ Bsr.L EXPANSIONBUSMGR_VEC01A8
+ CASE ON
+ IMPORT RemoveDriver
+ Bsr.L RemoveDriver
+ CASE OFF
+ AddQ #$8, A7
+ Bra.B @L4
+@L3 Lea.L -$40(A6), A0
@ -48980,7 +49112,7 @@ diff --git a/Toolbox/ShutDownMgr/ShutDownMgr.a b/Toolbox/ShutDownMgr/ShutDownMgr
@@ -1312,7 +1482,6 @@ KillEDisk
@@ -1312,7 +1484,6 @@ KillEDisk
BNE.S @noEMMU ; IF we have an EMMU THEN
MOVE.L A2,A0 ; get ptr to start of data area
MOVE.L #BytesToKill,A1 ; get number of bytes to erase
@ -48988,7 +49120,7 @@ diff --git a/Toolbox/ShutDownMgr/ShutDownMgr.a b/Toolbox/ShutDownMgr/ShutDownMgr
BRA.S @unProtect ; ELSE
@noEMMU MOVE.L CheckSumPtr(A0),A0 ; Get Ptr to the start of the checksum area, if it exists
TST.L A0 ; Check if RAM Disk is using checksums
@@ -1320,8 +1489,8 @@ KillEDisk
@@ -1320,8 +1491,8 @@ KillEDisk
MOVE.L A2,A0 ; base address of RAM disk is same as DataStartPtr
@cksumOn ; ENDIF
SUB.L A1,A1 ; Protect flag. Zero = Unprotect
@ -48998,7 +49130,7 @@ diff --git a/Toolbox/ShutDownMgr/ShutDownMgr.a b/Toolbox/ShutDownMgr/ShutDownMgr
_HwPriv ; Write Enable the EDisk RAM
CMPI.W #paramErr,D0 ; Does not clear D0 on success, Check for failure
BEQ.S @Done ; -> enable failed. Bail out now or Bus Error!
@@ -1445,7 +1614,13 @@ ShutDownCancelButton EQU 2 ; dialog item of Cancel button
@@ -1445,7 +1616,13 @@ ShutDownCancelButton EQU 2 ; dialog item of Cancel button
_ParamText ; set dialog parameters
subq #4,sp ; room for DialogPtr
@ -49012,7 +49144,7 @@ diff --git a/Toolbox/ShutDownMgr/ShutDownMgr.a b/Toolbox/ShutDownMgr/ShutDownMgr
clr.l -(sp) ; use heap storage
move.l #-1,-(sp) ; put it in front
_GetNewDialog
@@ -1488,82 +1663,30 @@ exitFalse move.w #false,d0 ; allow shutdown to continue
@@ -1488,82 +1665,30 @@ exitFalse move.w #false,d0 ; allow shutdown to continue
justExit move.l (sp)+,a2 ; restore a2
rts