ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/BeOS/main_beos.cpp
Revision 1.24 - (view) (annotate) - [select for diffs]
2012-06-17T16:52:58Z (12 years, 5 months ago) by asvitkine
Branch: MAIN
CVS Tags: HEAD
Changes since 1.23: +1 -1 lines
Diff to previous 1.23
[Alexander von Gluck IV] BeOS: Fix missing ;
4fb0f92aaf065276712a36cb169081ebc41eeeb4
From: Alexander von Gluck IV <kallisti5@unixzen.com>
Date: Sun, 17 Jun 2012 03:47:26 +0000
Subject: [PATCH] Haiku: Fix missing ;

Revision 1.23 - (view) (annotate) - [select for diffs]
2009-09-21T03:34:14Z (15 years, 2 months ago) by asvitkine
Branch: MAIN
Changes since 1.22: +1 -1 lines
Diff to previous 1.22
Fix builds on platforms that may have gotten broken due to my vmdir changes.

Revision 1.22 - (view) (annotate) - [select for diffs]
2009-08-26T00:11:56Z (15 years, 3 months ago) by asvitkine
Branch: MAIN
Changes since 1.21: +1 -1 lines
Diff to previous 1.21
[Michael Schmitt]
Attached is a patch to SheepShaver, to fix a problem where the ROM file can only be found on the first boot.

When a user creates a new SheepShaver machine, there is no preference file, so there is not ROM path preference. SheepShaver has logic so that in this case, it will look for a ROM file named "ROM" or "Mac OS ROM" in the current directory.

The user starts SheepShaver in order to get to the built-in Preferences Editor, and changes various settings (such as creation of a hard disk). Then the user reboots.

If the user forgot to set the ROM path at this time, then SheepShaver can no longer boot. The only recourse is for the user to find and delete the preferences file, or use an external preferences editor to set the ROM path.

The fix is to change SheepShaver to use the default ROM names when either the rom path is null (no preference) OR an empty string (preference exists with no rom path).

Revision 1.21 - (view) (annotate) - [select for diffs]
2009-08-18T18:26:10Z (15 years, 3 months ago) by asvitkine
Branch: MAIN
Changes since 1.20: +19 -15 lines
Diff to previous 1.20
[Michael Schmitt]
Attached is a patch to SheepShaver to fix memory allocation problems when OS X 10.5 is the host. It also relaxes the 512 MB RAM limit on OS X hosts.


Problem
-------
Some users have been unable to run SheepShaver on OS X 10.5 (Leopard) hosts. The symptom is error "ERROR: Cannot map RAM: File already exists".

SheepShaver allocates RAM at fixed addresses. If it is running in "Real" addressing mode, and can't allocate at address 0, then it was hard-coded to allocate the RAM area at 0x20000000. The ROM area as allocated at 0x40800000.

The normal configuration is for SheepShaver to run under SDL, which is a Cocoa wrapper. By the time SheepShaver does its memory allocations, the Cocoa application has already started. The result is the SheepShaver memory address space already contains libraries, fonts, Input Managers, and IOKit areas.

On Leopard hosts these areas can land on the same addresses SheepShaver needs, so SheepShaver's memory allocation fails.


Solution
--------
The approach is to change SheepShaver (on Unix & OS X hosts) to allocate the RAM area anywhere it can find the space, rather than at a fixed address.

This could result in the RAM allocated higher than the ROM area, which causes a crash. To prevent this from occurring, the RAM and ROM areas are allocated contiguously.

Previously the ROM starting address was a constant ROM_BASE, which was used throughout the source files. The ROM start address is now a variable ROMBase. ROMBase is allocated and set by main_*.cpp just like RAMBase.

A side-effect of this change is that it lifts the 512 MB RAM limit for OS X hosts. The limit was because the fixed RAM and ROM addresses were such that the RAM could only be 512 MB before it overlapped the ROM area.


Impact
------
The change to make ROMBase a variable is throughout all hosts & addressing modes.

The RAM and ROM areas will only shift when run on Unix & OS X hosts, otherwise the same fixed allocation address is used as before.

This change is limited to "Real" addressing mode. Unlike Basilisk II, SheepShaver *pre-calculates* the offset for "Direct" addressing mode; the offset is compiled into the program. If the RAM address were allowed to shift, it could result in the RAM area wrapping around address 0.


Changes to main_unix.cpp
------------------------
1. Real addressing mode no longer defines a RAM_BASE constant.

2. The base address of the Mac ROM (ROMBase) is defined and exported by this program.

3. Memory management helper vm_mac_acquire is renamed to vm_mac_acquire_fixed. Added a new memory management helper vm_mac_acquire, which allocates memory at any address.

4. Changed and rearranged the allocation of RAM and ROM areas.

Before it worked like this:

  - Allocate ROM area
  - If can, attempt to allocate RAM at address zero
  - If RAM not allocated at 0, allocate at fixed address

We still want to try allocating the RAM at zero, and if using DIRECT addressing we're still going to use the fixed addresses. So we don't know where the ROM should be until after we do the RAM. The new logic is:

  - If can, attempt to allocate RAM at address zero
  - If RAM not allocated at 0
      if REAL addressing
         allocate RAM and ROM together. The ROM address is aligned to a 1 MB boundary
      else (direct addressing)
         allocate RAM at fixed address
  - If ROM hasn't been allocated yet, allocate at fixed address

5. Calculate ROMBase and ROMBaseHost based on where the ROM was loaded.

6. There is a crash if the RAM is allocated too high. To try and catch this, check if it was allocated higher than the kernel data address.

7. Change subsequent code from using constant ROM_BASE to variable ROMBase.


Changes to Other Programs
-------------------------
emul_op.cpp, main.cpp, name_registery.cpp, rom_patches.cpp, rsrc_patches.cpp, emul_ppc.cpp, sheepshaver_glue.cpp, ppc-translate-cpp:
Change from constant ROM_BASE to variable ROMBase.

ppc_asm.S: It was setting register to a hard-coded literal address: 0x40b0d000. Changed to set it to ROMBase + 0x30d000.

ppc_asm.tmpl: It defined a macro ASM_LO16 but it assumed that the macro would always be used with operands that included a register specification. This is not true. Moved the register specification from the macro to the macro invocations.

main_beos.cpp, main_windows.cpp: Since the subprograms are all expecting a variable ROMBase, all the main_*.cpp pgrams have to define and export it. The ROM_BASE constant is moved here for consistency. The mains for beos and windows just allocate the ROM at the same fixed address as before, set ROMBaseHost and ROMBase to that address, and then use ROMBase for the subsequent code.

cpu_emulation.h: removed ROM_BASE constant. This value is moved to the main_*.cpp modules, to be consistent with RAM_BASE.

user_strings_unix.cpp, user_strings_unix.h: Added new error messages related to errors that occur when the RAM and ROM are allocated anywhere.

Revision 1.20 - (view) (annotate) - [select for diffs]
2009-07-23T19:12:50Z (15 years, 4 months ago) by asvitkine
Branch: MAIN
Changes since 1.19: +1 -1 lines
Diff to previous 1.19
support for .sheepvm bundles on macosx, containing "prefs" and "nvram" files

Revision 1.19 - (view) (annotate) - [select for diffs]
2008-01-01T09:47:38Z (16 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.18: +1 -1 lines
Diff to previous 1.18
Happy New Year!

Revision 1.18 - (view) (annotate) - [select for diffs]
2005-06-30T10:17:58Z (19 years, 5 months ago) by gbeauche
Branch: MAIN
Changes since 1.17: +1 -0 lines
Diff to previous 1.17
Improve idle wait mechanism. Now, the emulator thread can be suspended
(idle_wait) until events arrived and notified through TriggerInterrupt().
i.e. we no longer sleep a fixed amount of time on platforms that support
a thread wait/signal mechanism.

Revision 1.17 - (view) (annotate) - [select for diffs]
2005-01-30T21:48:19Z (19 years, 10 months ago) by gbeauche
Branch: MAIN
Changes since 1.16: +1 -1 lines
Diff to previous 1.16
Happy New Year 2005!

Revision 1.16 - (view) (annotate) - [select for diffs]
2005-01-30T21:19:07Z (19 years, 10 months ago) by gbeauche
Branch: MAIN
Changes since 1.15: +7 -176 lines
Diff to previous 1.15
Add InitAll() which covers common initializations so that to avoid duplicate
code and possible bugs (e.g. on BeOS/PPC). Likewise for ExitAll().

Revision 1.15 - (view) (annotate) - [select for diffs]
2004-11-22T21:22:58Z (20 years ago) by gbeauche
Branch: MAIN
Changes since 1.14: +4 -3 lines
Diff to previous 1.14
new SheepShaver globals layout

Revision 1.14 - (view) (annotate) - [select for diffs]
2004-11-13T14:09:15Z (20 years ago) by gbeauche
Branch: MAIN
Changes since 1.13: +10 -7 lines
Diff to previous 1.13
Implement Direct Addressing mode similarly to Basilisk II. This is to get
SheepShaver working on OSes that don't support maipping of Low Memory globals
at 0x00000000, e.g. Windows.

Revision 1.13 - (view) (annotate) - [select for diffs]
2004-07-03T10:39:05Z (20 years, 5 months ago) by gbeauche
Branch: MAIN
Changes since 1.12: +2 -0 lines
Diff to previous 1.12
Introducce TimebaseSpeed which represents exact timebase-frequency instead
of supposing it to be (BusClockSpeed/4), which is no longer true on G5 et al.

Revision 1.12 - (view) (annotate) - [select for diffs]
2004-05-31T09:04:43Z (20 years, 6 months ago) by gbeauche
Branch: MAIN
Changes since 1.11: +23 -2 lines
Diff to previous 1.11
Enable Apple DR emulator from NewWorld ROMs only.

Revision 1.11 - (view) (annotate) - [select for diffs]
2004-02-24T11:12:52Z (20 years, 9 months ago) by gbeauche
Branch: MAIN
Changes since 1.10: +4 -0 lines
Diff to previous 1.10
Make SheepShaver work with OS 8.6 out-of-the-box with no extra patch for
the time being. i.e. ignore writes to the zero page when faking SCSIGlobals

Revision 1.10 - (view) (annotate) - [select for diffs]
2004-01-12T15:37:19Z (20 years, 10 months ago) by cebix
Branch: MAIN
Changes since 1.9: +1 -1 lines
Diff to previous 1.9
Happy New Year! :)

Revision 1.9 - (view) (annotate) - [select for diffs]
2004-01-07T18:24:44Z (20 years, 10 months ago) by gbeauche
Branch: MAIN
Changes since 1.8: +3 -0 lines
Diff to previous 1.8
Also cache native routine descriptor instead of recreating them at each
invokation to ExecuteNative().

Revision 1.8 - (view) (annotate) - [select for diffs]
2003-12-05T12:36:10Z (20 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.7: +8 -2 lines
Diff to previous 1.7
Add XLM_ZERO_PAGE globals which points to a read-only page with all bits
set to zero.

Revision 1.7 - (view) (annotate) - [select for diffs]
2003-12-04T23:37:35Z (20 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.6: +2 -14 lines
Diff to previous 1.6
Use a unique ExecuteNative() interface in any case, i.e. native & emulated

Revision 1.6 - (view) (annotate) - [select for diffs]
2003-12-04T22:34:34Z (20 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.5: +1 -1 lines
Diff to previous 1.5
Fix ExecutePPC() with nw SheepRoutineDescriptor

Revision 1.5 - (view) (annotate) - [select for diffs]
2003-12-04T17:26:36Z (20 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.4: +52 -1 lines
Diff to previous 1.4
Add new thunking system for 64-bit fixes.

Revision 1.4 - (view) (annotate) - [select for diffs]
2003-10-26T00:32:27Z (21 years, 1 month ago) by cebix
Branch: MAIN
Changes since 1.3: +4 -3 lines
Diff to previous 1.3
- fixed compilation problems under BeOS
- boot drive wasn't set correctly

Revision 1.3 - (view) (annotate) - [select for diffs]
2003-09-29T15:46:05Z (21 years, 2 months ago) by gbeauche
Branch: MAIN
Changes since 1.2: +0 -19 lines
Diff to previous 1.2
- Share EmulatorData & KernelData struct definitions
- Introduce new SheepShaver data area for alternate stacks, thunks, etc.
- Experimental asynchronous interrupts handling. This improves performance
  by 30% but some (rare) lockups may occur. To be debugged!

Revision 1.2 - (view) (annotate) - [select for diffs]
2002-04-21T15:07:08Z (22 years, 7 months ago) by gbeauche
Branch: MAIN
Changes since 1.1: +5 -72 lines
Diff to previous 1.1
Add support to decode parcels-based ROMs
- include/rom_patches.h (DecodeROM): Declare.
- rom_patches.cpp (DecodeROM): Define.
- Unix/main_unix.cpp, BeOS/main_beos.cpp (decode_lzss): Move to...
- rom_patches.cpp (decode_lzss): ... here.
- Unix/main_unix.cpp (main): Call DecodeROM().
- BeOS/main_beos.cpp (SheepShaver::load_rom): Call DecodeROM().

Revision 1.1 - (view) (annotate) - [select for diffs]
2002-02-04T16:58:13Z (22 years, 9 months ago) by cebix
Branch: MAIN
Branch point for: cebix
Initial revision

Convenience Links

Links to HEAD: (view) (annotate) Links to MAIN: (view) (annotate)

Compare Revisions

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.

  Diffs between and
  Type of Diff should be a