--- SheepShaver/src/main.cpp 2005/01/30 21:48:19 1.2 +++ SheepShaver/src/main.cpp 2009/08/26 00:06:29 1.8 @@ -1,7 +1,7 @@ /* * main.cpp - ROM patches * - * SheepShaver (C) 1997-2005 Christian Bauer and Marc Hellwig + * SheepShaver (C) 1997-2008 Christian Bauer and Marc Hellwig * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -70,10 +70,10 @@ static void sheepshaver_write_byte(uintp * Initialize everything, returns false on error */ -bool InitAll(void) +bool InitAll(const char *vmdir) { // Load NVRAM - XPRAMInit(); + XPRAMInit(vmdir); // Load XPRAM default values if signature not found if (XPRAM[0x130c] != 0x4e || XPRAM[0x130d] != 0x75 @@ -103,6 +103,7 @@ bool InitAll(void) XPRAM[0x130b] = 0xcc; XPRAM[0x1376] = 0x00; // OSDefault = MacOS XPRAM[0x1377] = 0x01; + XPRAM[0x138a] = 0x25; // Use PPC memory manager ("Modern Memory Manager") } // Set boot volume @@ -173,11 +174,11 @@ bool InitAll(void) memset((uint8 *)kernel_data + 0xb80, 0x3d, 0x80); Mac_memset(vector_lookup_tbl, 0, 128); Mac_memset(vector_mask_tbl, 0, 64); - kernel_data->v[0xb80 >> 2] = htonl(ROM_BASE); + kernel_data->v[0xb80 >> 2] = htonl(ROMBase); kernel_data->v[0xb84 >> 2] = htonl(of_dev_tree); // OF device tree base kernel_data->v[0xb90 >> 2] = htonl(vector_lookup_tbl); kernel_data->v[0xb94 >> 2] = htonl(vector_mask_tbl); - kernel_data->v[0xb98 >> 2] = htonl(ROM_BASE); // OpenPIC base + kernel_data->v[0xb98 >> 2] = htonl(ROMBase); // OpenPIC base kernel_data->v[0xbb0 >> 2] = htonl(0); // ADB base kernel_data->v[0xc20 >> 2] = htonl(RAMSize); kernel_data->v[0xc24 >> 2] = htonl(RAMSize); @@ -232,8 +233,19 @@ bool InitAll(void) WriteMacInt16(XLM_EXEC_RETURN_OPCODE, M68K_EXEC_RETURN); // For Execute68k() (RTS from the executed 68k code will jump here and end 68k mode) WriteMacInt32(XLM_ZERO_PAGE, SheepMem::ZeroPage()); // Pointer to read-only page with all bits set to 0 #if !EMULATED_PPC - WriteMacInt32(XLM_TOC, (uint32)TOC); // TOC pointer of emulator +#ifdef SYSTEM_CLOBBERS_R2 + WriteMacInt32(XLM_TOC, (uint32)TOC); // TOC pointer of emulator #endif +#ifdef SYSTEM_CLOBBERS_R13 + WriteMacInt32(XLM_R13, (uint32)R13); // TLS register +#endif +#endif + + WriteMacInt32(XLM_ETHER_AO_GET_HWADDR, NativeFunction(NATIVE_ETHER_AO_GET_HWADDR)); // Low level ethernet driver functions + WriteMacInt32(XLM_ETHER_AO_ADD_MULTI, NativeFunction(NATIVE_ETHER_AO_ADD_MULTI)); + WriteMacInt32(XLM_ETHER_AO_DEL_MULTI, NativeFunction(NATIVE_ETHER_AO_DEL_MULTI)); + WriteMacInt32(XLM_ETHER_AO_SEND_PACKET, NativeFunction(NATIVE_ETHER_AO_SEND_PACKET)); + WriteMacInt32(XLM_ETHER_INIT, NativeFunction(NATIVE_ETHER_INIT)); // DLPI ethernet driver functions WriteMacInt32(XLM_ETHER_TERM, NativeFunction(NATIVE_ETHER_TERM)); WriteMacInt32(XLM_ETHER_OPEN, NativeFunction(NATIVE_ETHER_OPEN));