206 lines
9.3 KiB
C
206 lines
9.3 KiB
C
//Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
|
|
//
|
|
//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 the Free Software Foundation; either
|
|
//version 2 of the License, or (at your option) any later
|
|
//version.
|
|
//
|
|
//This program is distributed in the hope that it will be useful,
|
|
//but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
//GNU General Public License for more details.
|
|
//
|
|
//You should have received a copy of the GNU General Public License
|
|
//along with this program; if not, write to the Free Software
|
|
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
#include "gblhdr.h"
|
|
|
|
extern void GuiAsmStart();
|
|
extern void GuiAsmEnd();
|
|
extern void SfxProcAsmStart();
|
|
extern void SfxProcAsmEnd();
|
|
extern void FxEmu2AsmStart();
|
|
extern void FxEmu2AsmEnd();
|
|
extern void Dsp1ProcAsmStart();
|
|
extern void Dsp1ProcAsmEnd();
|
|
extern void FxEmu2BAsmStart();
|
|
extern void FxEmu2BAsmEnd();
|
|
extern void FxEmu2CAsmStart();
|
|
extern void FxEmu2CAsmEnd();
|
|
extern void FxTableAsmStart();
|
|
extern void FxTableAsmEnd();
|
|
extern void ExecuteAsmStart();
|
|
extern void ExecuteAsmEnd();
|
|
extern void Sa1ProcAsmStart();
|
|
extern void Sa1ProcAsmEnd();
|
|
extern void Sa1RegsAsmStart();
|
|
extern void Sa1RegsAsmEnd();
|
|
extern void WinIntRFAsmStart();
|
|
extern void WinIntRFAsmEnd();
|
|
extern void ProcVidAsmStart();
|
|
extern void ProcVidAsmEnd();
|
|
extern void CfgLoadAsmStart();
|
|
extern void CfgLoadAsmEnd();
|
|
extern void IrqAsmStart();
|
|
extern void IrqAsmEnd();
|
|
extern void MemoryAsmStart();
|
|
extern void MemoryAsmEnd();
|
|
extern void Spc700AsmStart();
|
|
extern void Spc700AsmEnd();
|
|
extern void StableAsmStart();
|
|
extern void StableAsmEnd();
|
|
extern void DspProcAsmStart();
|
|
extern void DspProcAsmEnd();
|
|
extern void DmaAsmStart();
|
|
extern void DmaAsmEnd();
|
|
extern void DspAsmStart();
|
|
extern void DspAsmEnd();
|
|
extern void TableAsmStart();
|
|
extern void TableAsmEnd();
|
|
extern void TableBAsmStart();
|
|
extern void TableBAsmEnd();
|
|
extern void TableCAsmStart();
|
|
extern void TableCAsmEnd();
|
|
extern void CopyVWinAsmStart();
|
|
extern void CopyVWinAsmEnd();
|
|
extern void DebugAsmStart();
|
|
extern void DebugAsmEnd();
|
|
extern void JoyAsmStart();
|
|
extern void JoyAsmEnd();
|
|
extern void InitAsmStart();
|
|
extern void InitAsmEnd();
|
|
extern void UIAsmStart();
|
|
extern void UIAsmEnd();
|
|
extern void DosModemRTNAsmStart();
|
|
extern void DosModemRTNAsmEnd();
|
|
extern void Vesa2AsmStart();
|
|
extern void Vesa2AsmEnd();
|
|
extern void InitVidAsmStart();
|
|
extern void InitVidAsmEnd();
|
|
extern void SWAsmStart();
|
|
extern void SWAsmEnd();
|
|
extern void GPProAsmStart();
|
|
extern void GPProAsmEnd();
|
|
extern void Vesa12AsmStart();
|
|
extern void Vesa12AsmEnd();
|
|
extern void MenuAsmStart();
|
|
extern void MenuAsmEnd();
|
|
extern void MakeV16BAsmStart();
|
|
extern void MakeV16BAsmEnd();
|
|
extern void MakeV16TAsmStart();
|
|
extern void MakeV16TAsmEnd();
|
|
extern void MakeVidAsmStart();
|
|
extern void MakeVidAsmEnd();
|
|
extern void Mode716AsmStart();
|
|
extern void Mode716AsmEnd();
|
|
extern void Mode716BAsmStart();
|
|
extern void Mode716BAsmEnd();
|
|
extern void Mode716DAsmStart();
|
|
extern void Mode716DAsmEnd();
|
|
extern void Mode716EAsmStart();
|
|
extern void Mode716EAsmEnd();
|
|
extern void Mode716TAsmStart();
|
|
extern void Mode716TAsmEnd();
|
|
extern void Mode7AsmStart();
|
|
extern void Mode7AsmEnd();
|
|
extern void Mode7ExtAsmStart();
|
|
extern void Mode7ExtAsmEnd();
|
|
extern void M716TExtAsmStart();
|
|
extern void M716TExtAsmEnd();
|
|
extern void TwoxSaiWAsmStart();
|
|
extern void TwoxSaiWAsmEnd();
|
|
extern void EndMemAsmStart();
|
|
extern void EndMemAsmEnd();
|
|
extern void MV16TMSAsmStart();
|
|
extern void MV16TMSAsmEnd();
|
|
extern void NewG162AsmStart();
|
|
extern void NewG162AsmEnd();
|
|
extern void NewGfx16AsmStart();
|
|
extern void NewGfx16AsmEnd();
|
|
extern void NewGfx2AsmStart();
|
|
extern void NewGfx2AsmEnd();
|
|
extern void NewGfxAsmStart();
|
|
extern void NewGfxAsmEnd();
|
|
extern void VCacheAsmStart();
|
|
extern void VCacheAsmEnd();
|
|
|
|
// Thanks QuakeForge
|
|
void MakeCodeWriteable (unsigned long startaddr, unsigned long length)
|
|
{
|
|
int r;
|
|
unsigned int addr;
|
|
int psize = getpagesize();
|
|
|
|
//fprintf(stderr, "Unprotecting 0x%x to 0x%x\n", startaddr, startaddr+length);
|
|
addr = (startaddr & ~(psize -1)) - psize;
|
|
|
|
/* Using 7 is a very stupid thing to do, but I'll leave it in commented form for the non-posix compliant zealots to ph34r... */
|
|
//r = mprotect ((char *) addr, length + startaddr - addr + psize, 7);
|
|
r = mprotect ((char *) addr, length + startaddr - addr + psize, PROT_READ | PROT_WRITE | PROT_EXEC);
|
|
|
|
if (r < 0)
|
|
fprintf (stderr, "Error! Memory *NOT* unprotected. startaddr = 0x%08lx\n", startaddr);
|
|
}
|
|
|
|
|
|
void UnProtectMemory(void)
|
|
{
|
|
MakeCodeWriteable((long) SfxProcAsmStart, (long) SfxProcAsmEnd - (long) SfxProcAsmStart);
|
|
MakeCodeWriteable((long) FxEmu2AsmStart, (long) FxEmu2AsmEnd - (long) FxEmu2AsmStart);
|
|
MakeCodeWriteable((long) Dsp1ProcAsmStart, (long) Dsp1ProcAsmEnd - (long) Dsp1ProcAsmStart);
|
|
MakeCodeWriteable((long) FxEmu2BAsmStart, (long) FxEmu2BAsmEnd - (long) FxEmu2BAsmStart);
|
|
MakeCodeWriteable((long) FxEmu2CAsmStart, (long) FxEmu2CAsmEnd - (long) FxEmu2CAsmStart);
|
|
MakeCodeWriteable((long) FxTableAsmStart, (long) FxTableAsmEnd - (long) FxTableAsmStart);
|
|
MakeCodeWriteable((long) ExecuteAsmStart, (long) ExecuteAsmEnd - (long) ExecuteAsmStart);
|
|
MakeCodeWriteable((long) Sa1ProcAsmStart, (long) Sa1ProcAsmEnd - (long) Sa1ProcAsmStart);
|
|
MakeCodeWriteable((long) Sa1RegsAsmStart, (long) Sa1RegsAsmEnd - (long) Sa1RegsAsmStart);
|
|
MakeCodeWriteable((long) WinIntRFAsmStart, (long) WinIntRFAsmEnd - (long) WinIntRFAsmStart);
|
|
MakeCodeWriteable((long) GuiAsmStart, (long) GuiAsmEnd - (long) GuiAsmStart);
|
|
MakeCodeWriteable((long) ProcVidAsmStart, (long) ProcVidAsmEnd - (long) ProcVidAsmStart);
|
|
MakeCodeWriteable((long) CfgLoadAsmStart, (long) CfgLoadAsmEnd - (long) CfgLoadAsmStart);
|
|
MakeCodeWriteable((long) IrqAsmStart, (long) IrqAsmEnd - (long) IrqAsmStart);
|
|
MakeCodeWriteable((long) MemoryAsmStart, (long) MemoryAsmEnd - (long) MemoryAsmStart);
|
|
MakeCodeWriteable((long) Spc700AsmStart, (long) Spc700AsmEnd - (long) Spc700AsmStart);
|
|
MakeCodeWriteable((long) StableAsmStart, (long) StableAsmEnd - (long) StableAsmStart);
|
|
MakeCodeWriteable((long) DspProcAsmStart, (long) DspProcAsmEnd - (long) DspProcAsmStart);
|
|
MakeCodeWriteable((long) DmaAsmStart, (long) DmaAsmEnd - (long) DmaAsmStart);
|
|
MakeCodeWriteable((long) DspAsmStart, (long) DspAsmEnd - (long) DspAsmStart);
|
|
MakeCodeWriteable((long) TableAsmStart, (long) TableAsmEnd - (long) TableAsmStart);
|
|
MakeCodeWriteable((long) TableBAsmStart, (long) TableBAsmEnd - (long) TableBAsmStart);
|
|
MakeCodeWriteable((long) TableCAsmStart, (long) TableCAsmEnd - (long) TableCAsmStart);
|
|
MakeCodeWriteable((long) CopyVWinAsmStart, (long) CopyVWinAsmEnd - (long) CopyVWinAsmStart);
|
|
MakeCodeWriteable((long) DebugAsmStart, (long) DebugAsmEnd - (long) DebugAsmStart);
|
|
MakeCodeWriteable((long) JoyAsmStart, (long) JoyAsmEnd - (long) JoyAsmStart);
|
|
MakeCodeWriteable((long) InitAsmStart, (long) InitAsmEnd - (long) InitAsmStart);
|
|
MakeCodeWriteable((long) UIAsmStart, (long) UIAsmEnd - (long) UIAsmStart);
|
|
MakeCodeWriteable((long) DosModemRTNAsmStart, (long) DosModemRTNAsmEnd - (long) DosModemRTNAsmStart);
|
|
MakeCodeWriteable((long) Vesa2AsmStart, (long) Vesa2AsmEnd - (long) Vesa2AsmStart);
|
|
MakeCodeWriteable((long) InitVidAsmStart, (long) InitVidAsmEnd - (long) InitVidAsmStart);
|
|
MakeCodeWriteable((long) SWAsmStart, (long) SWAsmEnd - (long) SWAsmStart);
|
|
MakeCodeWriteable((long) GPProAsmStart, (long) GPProAsmEnd - (long) GPProAsmStart);
|
|
MakeCodeWriteable((long) Vesa12AsmStart, (long) Vesa12AsmEnd - (long) Vesa12AsmStart);
|
|
MakeCodeWriteable((long) MenuAsmStart, (long) MenuAsmEnd - (long) MenuAsmStart);
|
|
MakeCodeWriteable((long) MakeV16BAsmStart, (long) MakeV16BAsmEnd - (long) MakeV16BAsmStart);
|
|
MakeCodeWriteable((long) MakeV16TAsmStart, (long) MakeV16TAsmEnd - (long) MakeV16TAsmStart);
|
|
MakeCodeWriteable((long) MakeVidAsmStart, (long) MakeVidAsmEnd - (long) MakeVidAsmStart);
|
|
MakeCodeWriteable((long) Mode716AsmStart, (long) Mode716AsmEnd - (long) Mode716AsmStart);
|
|
|
|
MakeCodeWriteable((long) Mode716BAsmStart, (long) Mode716BAsmEnd - (long) Mode716BAsmStart);
|
|
MakeCodeWriteable((long) Mode716DAsmStart, (long) Mode716DAsmEnd - (long) Mode716DAsmStart);
|
|
MakeCodeWriteable((long) Mode716EAsmStart, (long) Mode716EAsmEnd - (long) Mode716EAsmStart);
|
|
MakeCodeWriteable((long) Mode716TAsmStart, (long) Mode716TAsmEnd - (long) Mode716TAsmStart);
|
|
MakeCodeWriteable((long) Mode7AsmStart, (long) Mode7AsmEnd - (long) Mode7AsmStart);
|
|
MakeCodeWriteable((long) Mode7ExtAsmStart, (long) Mode7ExtAsmEnd - (long) Mode7ExtAsmStart);
|
|
MakeCodeWriteable((long) M716TExtAsmStart, (long) M716TExtAsmEnd - (long) M716TExtAsmStart);
|
|
MakeCodeWriteable((long) TwoxSaiWAsmStart, (long) TwoxSaiWAsmEnd - (long) TwoxSaiWAsmStart);
|
|
MakeCodeWriteable((long) EndMemAsmStart, (long) EndMemAsmEnd - (long) EndMemAsmStart);
|
|
MakeCodeWriteable((long) MV16TMSAsmStart, (long) MV16TMSAsmEnd - (long) MV16TMSAsmStart);
|
|
MakeCodeWriteable((long) NewG162AsmStart, (long) NewG162AsmEnd - (long) NewG162AsmStart);
|
|
MakeCodeWriteable((long) NewGfx16AsmStart, (long) NewGfx16AsmEnd - (long) NewGfx16AsmStart);
|
|
MakeCodeWriteable((long) NewGfx2AsmStart, (long) NewGfx2AsmEnd - (long) NewGfx2AsmStart);
|
|
MakeCodeWriteable((long) NewGfxAsmStart, (long) NewGfxAsmEnd - (long) NewGfxAsmStart);
|
|
MakeCodeWriteable((long) VCacheAsmStart, (long) VCacheAsmEnd - (long) VCacheAsmStart);
|
|
}
|