Commit Graph

53 Commits

Author SHA1 Message Date
Seth Polsley 40e2d3d84b Removing temp ignoresegv patch 2020-09-10 17:31:21 -05:00
kanjitalk755 09429e6021 SS: Patch the sound input driver if using New World ROM and ignore SEGV is false 2020-09-04 19:06:49 +09:00
Seth Polsley 35439819d3 Best guess audio CD from data calls to allow multiple discs and testing different interface identifiers 2020-01-08 03:02:08 -06:00
Seth Polsley f7da6ba4e5 Cleaned up unused code for sound in traps 2019-11-05 01:40:53 -06:00
Seth Polsley 2ba2d12f8b Scratch work in audio.cpp to re-implement driver logic in trapped-out code, but working due to change in rscr patcher 2019-11-05 01:20:21 -06:00
Alexei Svitkine 1f211fb37b fix some warnings in Xcode8 build 2016-12-17 22:04:57 -05:00
CharlesJS ed28705ee3 Patch for copying and pasting styled text in Basilisk II / SheepShaver
Added code to parse the Classic Mac OS 'styl' resources, allowing formatted text to be copied and pasted out of SheepShaver, not just plain text. In order to do this, I made some changes to the emul_op mechanism, patching ZeroScrap() in addition to the scrap methods that were already being patched. The reason for this is that since we need to read data from multiple items that are on the clipboard at once, we cannot simply assume a zero at the beginning of each PutScrap() operation.

This patch uses RTF to store styled text on the host side; unfortunately, since the APIs to convert to and from RTF data are in Cocoa but not in CoreFoundation, I had to write the new portions in Objective-C rather than C, and changed the extension from .cpp to .mm accordingly. In the future, if we are confident that this file will only be used on Mac OS X 10.6 and up, we can rewrite the Pasteboard Manager code to use NSPasteboardReading/Writing instead. This would allow us to read and write NSAttributedString objects directly to and from the pasteboard, which would make sure we were always using the OS's preferred rich text format internally instead of hard-coding it specifically to RTF as in the current implementation.

I believe that this patch should also fix the problem Ronald reported with copying accented characters.

Since I am new to 68k assembly and the emul_op mechanism, I would appreciate if someone could double-check all my changes to make sure that I have done everything correctly.

Thanks,
Charles
2012-06-30 22:20:55 -04:00
asvitkine b3b5db5456 [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.
2009-08-18 18:26:11 +00:00
gbeauche 054c37ca0c Happy New Year! 2008-01-01 09:47:39 +00:00
gbeauche d26f8ad8e2 Fix for DIRECT_ADDRESSING mode (Windows) 2006-05-14 13:48:05 +00:00
gbeauche 6da4032ab7 Add a few FE0A opcode patches. This slightly improves stability. 2006-05-06 10:30:00 +00:00
gbeauche c71bc8cc4c avoid unaligned memory accessed when patching the ROM (IRIX/mips) 2005-12-12 20:46:31 +00:00
gbeauche fb42e00b8d Don't require an instruction skipper to fake SCSI globals 2005-03-05 15:44:03 +00:00
gbeauche df0d5d2a41 Happy New Year 2005! 2005-01-30 21:48:22 +00:00
gbeauche 83f594ec16 patch the right branch instruction, it seems it doesn't much matter whether
we return success (0) or error (-1) in the previous casse.
2004-12-16 23:14:25 +00:00
gbeauche dfa16d9686 disable power management for now (opcode fe0f) 2004-12-16 22:59:38 +00:00
gbeauche 873377726b fix regression introduced in the load of OldWorld ROMs when Direct Addressing
mode was impemented
2004-12-12 18:45:44 +00:00
gbeauche 3ace37f4eb 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.
2004-11-13 14:09:16 +00:00
gbeauche a83dfd52d0 fix gc_mask2 patch for gossamer 2004-07-14 08:24:07 +00:00
gbeauche 9545f93d3d More accurate Gestalt 'cput' values (G4, 750FX) 2004-07-03 17:48:44 +00:00
gbeauche 32a6ac321c Try to recognize and handle PowerPC 970 (G5). Untested as I don't have such
platforms handy.
2004-07-01 22:55:02 +00:00
gbeauche 41035e5064 Fix Gestalt for PowerPC 745x processors. 2004-06-30 08:17:12 +00:00
gbeauche eb9961585b Handle 750FX, 7450, 7455, 7457. 2004-06-29 20:25:55 +00:00
gbeauche e0a76f9e38 Don't handle XLM_IRQ_NEST atomically in emulated mode. That's useless since
this variable is modified only within a single thread and interrupts are
not handled asynchronously.
2004-06-22 17:10:08 +00:00
gbeauche 7bc86b27ee Enable Apple DR emulator from NewWorld ROMs only. 2004-05-31 09:04:44 +00:00
gbeauche 28eb840182 "idlewait" support for Linux and NewWorld ROMs 2004-05-15 16:36:44 +00:00
gbeauche ae93ea2f16 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
2004-02-24 11:12:54 +00:00
gbeauche 546f65a365 Now that we have AltiVec emulation, we can pretend for a G4 processor
Also make sure to actually fix PVR code for 7400
2004-02-15 17:20:36 +00:00
gbeauche 8d4108dd3a Recognize 7400 & 7410 cpus 2004-01-31 11:10:49 +00:00
cebix 2d5de1af9d Happy New Year! :) 2004-01-12 15:37:24 +00:00
gbeauche f5aed53e3c clean-ups, going to beat myself tonight 2003-12-15 15:27:01 +00:00
gbeauche c3a706d354 There may be extra instructions before moving stuff to SCC registers. 2003-12-15 15:25:38 +00:00
gbeauche 24c4ae354c Fix SCC initialization code detection. Move up AddrMap patch space since
we clobber 40 bytes below it and it may intersect with GetScrap patch space.
2003-12-15 15:23:59 +00:00
gbeauche ae8c08b260 Generic ROM patches from ROMTYPE_PARCELS experiments, no apparent
regession. There is no improvement either.
2003-12-14 14:23:46 +00:00
gbeauche e517594a51 Fake reading from [HpChk]+4 (FIXME: the callchain reports some function
from DriverServicesLib). Also make fake SCSIGlobals map to zero page.
2003-12-05 12:37:14 +00:00
gbeauche 328bb9f239 Add new thunking system for 64-bit fixes. 2003-12-04 17:26:38 +00:00
gbeauche be50ff1b42 Adapt ROM patches space to Gossamer ROMs layout. Weird that it passed the
other day.
2003-10-07 19:28:09 +00:00
gbeauche ad0aea0403 fix parcels decoder 2003-10-06 21:23:53 +00:00
gbeauche 0cb51c42dd cleanups :-) 2003-10-06 21:01:22 +00:00
gbeauche 974ebd5d91 - Add checks against ROM patches space
- Make sure to also load the floppy disk driver with Gossamer ROMs so
  that exfs feature can work too
2003-10-06 21:00:48 +00:00
gbeauche c9b8dd6628 tm_task is actually correct for both nw & gossamer ROMs 2003-10-05 23:49:19 +00:00
gbeauche 84ce1f2b0d fix tm_task patch for Gossamer ROMs 2003-10-05 23:38:07 +00:00
gbeauche 3768573d35 Add support for Gossamer ROMs (DTG3) 2003-10-05 23:05:05 +00:00
gbeauche 663b536257 Little endian fixes to Serial trampolines. 2003-09-29 22:49:23 +00:00
gbeauche 3d4ed54488 first round of little endian fixes 2003-09-29 20:30:21 +00:00
gbeauche 3851071ecd Try to handle XLM_IRQ_NEST atomically in emulated PPC views. Fix placement
of fake SCSIGlobals (disabled for now). Switch back to mono core emulation
until things are debugged enough. Implement get_resource() et al.
2003-09-28 21:27:34 +00:00
gbeauche cb1dd6dac5 - Integrate new NativeOp instructions to be used as trampolines to call
native functions from ppc code.
- Little endian fixes in emul_op.cpp
- Add new 'gpch' 750 patch to workaround crash with MacOS 8.6
- Don't crash in Process Manager on reset/shutdown with MacOS 8.6
- We also have an experimental interrupt thread in emulation mode
2003-09-07 14:33:54 +00:00
gbeauche d29a00c17f Don't call FE0A opcode in Shutdown Manager: handle better NewWorld ROMs.
i.e. don't force a "bra" if there was no "beq" beforehand.
2003-05-21 19:31:57 +00:00
gbeauche f47379e887 Force installation of floppy driver with NewWorld ROMs otherwise we fail
to open it and further install ExtFS & NQD acceleration.
2003-05-21 18:57:17 +00:00
gbeauche 5843470f9f Finally enable boot on MacOS 8.6 Update CD from iMac DV
- Don't read PVR at ROM_BASE + 0x314600
- Generated code for FC1E and FE0A don't really match comments
- Move FC1E routine base to ROM_BASE + 0x36fb00
- Recognize iMacUpdate 1.1 ROM (nwrom v1.2.1)
2003-05-17 08:42:34 +00:00