summaryrefslogtreecommitdiff
path: root/arm9/lib/src/CTRDG_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/src/CTRDG_common.c')
-rw-r--r--arm9/lib/src/CTRDG_common.c350
1 files changed, 0 insertions, 350 deletions
diff --git a/arm9/lib/src/CTRDG_common.c b/arm9/lib/src/CTRDG_common.c
deleted file mode 100644
index df3ec0b6..00000000
--- a/arm9/lib/src/CTRDG_common.c
+++ /dev/null
@@ -1,350 +0,0 @@
-#include "CTRDG_common.h"
-#include "function_target.h"
-#include "syscall.h"
-#include "OS_cache.h"
-#include "OS_protectionRegion.h"
-#include "OS_terminate_proc.h"
-#include "PXI_fifo.h"
-#include "MI_dma.h"
-#include "MI_memory.h"
-#include "mmap.h"
-
-CTRDGWork CTRDGi_Work;
-
-static BOOL CTRDGi_EnableFlag = FALSE;
-
-ARM_FUNC void CTRDGi_InitCommon(void)
-{
- SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32);
-
- CTRDGi_Work.lockID = (u16)OS_GetLockID();
-}
-
-ARM_FUNC BOOL CTRDG_IsAgbCartridge(void)
-{
- return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit());
-}
-
-ARM_FUNC BOOL CTRDG_IsOptionCartridge(void)
-{
- return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit());
-}
-
-ARM_FUNC BOOL CTRDGi_IsAgbCartridgeAtInit(void)
-{
- CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
-
- return cip->isAgbCartridge;
-}
-
-ARM_FUNC u32 CTRDG_GetAgbGameCode(void)
-{
- u32 ret = 0;
-
- if (CTRDG_IsExisting())
- {
- ret = CTRDGi_GetAgbGameCodeAtInit();
- }
-
- return ret;
-}
-
-ARM_FUNC u32 CTRDGi_GetAgbGameCodeAtInit(void)
-{
- CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
- u32 ret = 0;
-
- if (CTRDGi_IsAgbCartridgeAtInit())
- {
- ret = cip->gameCode;
- }
-
- return ret;
-}
-
-ARM_FUNC u16 CTRDG_GetAgbMakerCode(void)
-{
- u16 ret = 0;
-
- if (CTRDG_IsExisting())
- {
- ret = CTRDGi_GetAgbMakerCodeAtInit();
- }
-
- return ret;
-}
-
-ARM_FUNC u16 CTRDGi_GetAgbMakerCodeAtInit(void)
-{
- CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
- u16 ret = 0;
-
- if (CTRDGi_IsAgbCartridgeAtInit())
- {
- ret = cip->makerCode;
- }
-
- return ret;
-}
-
-ARM_FUNC BOOL CTRDG_IsPulledOut(void)
-{
- CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
-
- if (cip->moduleID.raw == 0xffff)
- {
- return FALSE;
- }
-
- if (!cip->detectPullOut)
- {
- (void)CTRDG_IsExisting();
- }
-
- return cip->detectPullOut;
-}
-
-ARM_FUNC BOOL CTRDG_IsExisting(void)
-{
- BOOL ret = TRUE;
- CTRDGLockByProc lockInfo;
-
- CTRDGHeader *chp = CTRDGi_GetHeaderAddr();
- CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
-
- if (cip->moduleID.raw == 0xffff)
- {
- return FALSE;
- }
-
- if (cip->detectPullOut == TRUE)
- {
- return FALSE;
- }
-
- CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo);
-
- CTRDGRomCycle rc;
-
- CTRDGi_ChangeLatestAccessCycle(&rc);
- u8 isRomCode = chp->isRomCode;
-
- if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID)
- || (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr())
- || ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge))
- {
- cip->detectPullOut = TRUE;
- ret = FALSE;
- }
-
- CTRDGi_RestoreAccessCycle(&rc);
-
- CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo);
-
- return ret;
-}
-
-ARM_FUNC void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r)
-{
- r->c1 = MI_GetCartridgeRomCycle1st();
- r->c2 = MI_GetCartridgeRomCycle2nd();
-
- MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18);
- MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6);
-}
-
-ARM_FUNC void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r)
-{
- MI_SetCartridgeRomCycle1st(r->c1);
- MI_SetCartridgeRomCycle2nd(r->c2);
-}
-
-ARM_FUNC void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info)
-{
- while (TRUE)
- {
- info->irq = OS_DisableInterrupts();
- if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0)
- || (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS))
- {
- break;
- }
- (void)OS_RestoreInterrupts(info->irq);
-
- SVC_WaitByLoop(1);
- }
-}
-
-ARM_FUNC void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info)
-{
- if (!info->locked)
- {
- (void)OS_UnLockCartridge(lockID);
- }
-
- (void)OS_RestoreInterrupts(info->irq);
-}
-
-ARM_FUNC void CTRDGi_SendtoPxi(u32 data)
-{
- while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS)
- {
- SVC_WaitByLoop(1);
- }
-}
-
-ARM_FUNC BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size)
-{
- if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END)
- {
- return CTRDGi_CopyCommon(0, (const void *)dest, (void *)src, size, CTRDGi_FORWARD_CPU8);
- }
- else
- {
- return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU8);
- }
-}
-
-ARM_FUNC BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size)
-{
- return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU16);
-}
-
-ARM_FUNC BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size)
-{
- return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU32);
-}
-
-ARM_FUNC BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType)
-{
- if (!CTRDG_IsExisting())
- {
- return FALSE;
- }
-
- CTRDG_CheckEnabled();
-
- (void)OS_LockCartridge(CTRDGi_Work.lockID);
-
- if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA)
- {
- MI_StopDma(dmaNo);
- DC_FlushRange(dest, size);
- }
-
- switch (forwardType)
- {
- case CTRDGi_FORWARD_DMA16:
- MI_DmaCopy16(dmaNo, src, dest, size);
- break;
- case CTRDGi_FORWARD_DMA32:
- MI_DmaCopy32(dmaNo, src, dest, size);
- break;
- case CTRDGi_FORWARD_CPU16:
- MI_CpuCopy16(src, dest, size);
- break;
- case CTRDGi_FORWARD_CPU32:
- MI_CpuCopy32(src, dest, size);
- break;
-
- case CTRDGi_FORWARD_CPU8:
- u8 *dest8 = (u8 *)dest;
- u8 *src8 = (u8 *)src;
- for (s32 n = 0; n < size; n++)
- {
- *dest8++ = *src8++;
- }
- break;
- }
-
- (void)OS_UnLockCartridge(CTRDGi_Work.lockID);
-
- if (!CTRDG_IsExisting())
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-ARM_FUNC BOOL CTRDG_Read32(const u32 *address, u32 *rdata)
-{
- return CTRDGi_AccessCommon((void *)address, 0, rdata, CTRDGi_ACCESS_READ32);
-}
-
-ARM_FUNC BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType)
-{
- if (!CTRDG_IsExisting())
- {
- return FALSE;
- }
-
- CTRDG_CheckEnabled();
-
- (void)OS_LockCartridge(CTRDGi_Work.lockID);
-
- switch (accessType)
- {
- case CTRDGi_ACCESS_READ8:
- if (rdata)
- {
- *(u8 *)rdata = *(u8 *)address;
- }
- break;
- case CTRDGi_ACCESS_READ16:
- if (rdata)
- {
- *(u16 *)rdata = *(u16 *)address;
- }
- break;
- case CTRDGi_ACCESS_READ32:
- if (rdata)
- {
- *(u32 *)rdata = *(u32 *)address;
- }
- break;
- case CTRDGi_ACCESS_WRITE8:
- *(u8 *)address = (u8)data;
- break;
- case CTRDGi_ACCESS_WRITE16:
- *(u16 *)address = (u16)data;
- break;
- case CTRDGi_ACCESS_WRITE32:
- *(u32 *)address = (u32)data;
- break;
- }
-
- (void)OS_UnLockCartridge(CTRDGi_Work.lockID);
-
- if (!CTRDG_IsExisting())
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-ARM_FUNC BOOL CTRDG_IsEnabled(void)
-{
- return CTRDGi_EnableFlag;
-}
-
-ARM_FUNC void CTRDG_Enable(BOOL enable)
-{
- OSIntrMode bak_cpsr = OS_DisableInterrupts();
- CTRDGi_EnableFlag = enable;
- if (!CTRDG_IsOptionCartridge())
- {
- u32 acc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO);
- (void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, acc);
- }
- (void)OS_RestoreInterrupts(bak_cpsr);
-}
-
-ARM_FUNC void CTRDG_CheckEnabled(void)
-{
- if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled())
- {
- OS_Terminate();
- }
-}