1 |
|
/* |
2 |
|
* rom_patches.cpp - ROM patches |
3 |
|
* |
4 |
< |
* Basilisk II (C) 1997-2001 Christian Bauer |
4 |
> |
* Basilisk II (C) 1997-2008 Christian Bauer |
5 |
|
* |
6 |
|
* This program is free software; you can redistribute it and/or modify |
7 |
|
* it under the terms of the GNU General Public License as published by |
40 |
|
|
41 |
|
// Global variables |
42 |
|
uint32 UniversalInfo; // ROM offset of UniversalInfo |
43 |
< |
uint32 PutScrapPatch; // Mac address of PutScrap() patch |
43 |
> |
uint32 PutScrapPatch = 0; // Mac address of PutScrap() patch |
44 |
> |
uint32 GetScrapPatch = 0; // Mac address of GetScrap() patch |
45 |
|
uint32 ROMBreakpoint = 0; // ROM offset of breakpoint (0 = disabled, 0x2310 = CritError) |
46 |
|
bool PrintROMInfo = false; // Flag: print ROM information in PatchROM() |
47 |
|
bool PatchHWBases = true; // Flag: patch hardware base addresses |
999 |
|
*wp++ = htons(M68K_NOP); |
1000 |
|
*wp = htons(M68K_NOP); |
1001 |
|
|
1002 |
< |
wp = (uint16 *)(ROMBaseHost + 0x2be8); // 60Hz handler (handles everything) |
1002 |
> |
wp = (uint16 *)(ROMBaseHost + 0x2be4); // 60Hz handler (handles everything) |
1003 |
> |
*wp++ = htons(M68K_NOP); |
1004 |
> |
*wp++ = htons(M68K_NOP); |
1005 |
|
*wp++ = htons(M68K_EMUL_OP_IRQ); |
1006 |
|
*wp++ = htons(0x4a80); // tst.l d0 |
1007 |
|
*wp = htons(0x67f4); // beq 0x402be2 |
1626 |
|
*wp++ = htons(base >> 16); |
1627 |
|
*wp = htons(base & 0xffff); |
1628 |
|
|
1629 |
+ |
// Install GetScrap() patch for clipboard data exchange (the patch is activated by EMUL_OP_INSTALL_DRIVERS) |
1630 |
+ |
GetScrapPatch = ROMBaseMac + sony_offset + 0xd00; |
1631 |
+ |
base = ROMBaseMac + find_rom_trap(0xa9fd); |
1632 |
+ |
wp = (uint16 *)(ROMBaseHost + sony_offset + 0xd00); |
1633 |
+ |
*wp++ = htons(M68K_EMUL_OP_GET_SCRAP); |
1634 |
+ |
*wp++ = htons(M68K_JMP); |
1635 |
+ |
*wp++ = htons(base >> 16); |
1636 |
+ |
*wp = htons(base & 0xffff); |
1637 |
+ |
|
1638 |
|
// Look for double PACK 4 resources |
1639 |
|
if ((base = find_rom_resource(FOURCC('P','A','C','K'), 4)) == 0) return false; |
1640 |
|
if ((base = find_rom_resource(FOURCC('P','A','C','K'), 4, true)) == 0 && FPUType == 0) |
1648 |
|
*wp++ = htons(M68K_NOP); |
1649 |
|
*wp = htons(M68K_NOP); |
1650 |
|
|
1651 |
< |
wp = (uint16 *)(ROMBaseHost + 0xa29a); // 60Hz handler (handles everything) |
1651 |
> |
wp = (uint16 *)(ROMBaseHost + 0xa296); // 60Hz handler (handles everything) |
1652 |
> |
*wp++ = htons(M68K_NOP); |
1653 |
> |
*wp++ = htons(M68K_NOP); |
1654 |
|
*wp++ = htons(M68K_EMUL_OP_IRQ); |
1655 |
|
*wp++ = htons(0x4a80); // tst.l d0 |
1656 |
|
*wp = htons(0x67f4); // beq 0x4080a294 |