From b4d63fc9c4488767a90642a79bdf4e989ee121d0 Mon Sep 17 00:00:00 2001 From: nakasima Date: Fri, 24 Apr 2009 01:22:59 +0000 Subject: [PATCH] git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-09%20-%20platinum.7z%20+%20generic.7z%20+%20from_nintendo.rar/platinum/ntr_bootrom@2 75ba2c1e-421a-9847-b97b-53b085e6d9b8 --- trunk/AGBモニタ履歴.txt | 221 ++ trunk/IrisMainp/IrisMon/Cp15InitArm.s | 74 + trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt | 146 + trunk/IrisMainp/IrisMon/IrisMon.c | 158 + trunk/IrisMainp/IrisMon/IrisMon.h | 18 + trunk/IrisMainp/IrisMon/IrisMon.mcp | Bin 0 -> 407139 bytes trunk/IrisMainp/IrisMon/IrisMon.ses | 241 ++ trunk/IrisMainp/IrisMon/IrisMonCard.c | 298 ++ trunk/IrisMainp/IrisMon/IrisMonDefine.h | 40 + trunk/IrisMainp/IrisMon/IrisMonDefineArm.s | 36 + trunk/IrisMainp/IrisMon/IrisMonMacro.h | 80 + trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h | 82 + trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s | 76 + trunk/IrisMainp/IrisMon/IrisMonSub.c | 300 ++ trunk/IrisMainp/IrisMon/IrisMonSub.h | 79 + trunk/IrisMainp/IrisMon/IrisMonTarget.h | 32 + trunk/IrisMainp/IrisMon/IrisMonTargetArm.s | 24 + trunk/IrisMainp/IrisMon/IrisTegOnlySub.c | 220 ++ .../IrisMon/NitroAgbMonTS1_040304.bin | Bin 0 -> 16384 bytes .../IrisMon/NitroMainpMonTS1_040304.bin | Bin 0 -> 8192 bytes trunk/IrisMainp/IrisMon/crt0Arm.s | 424 +++ trunk/IrisMainp/IrisMon/crt0subArmCommon.s | 566 ++++ trunk/IrisMainp/include/Iris.h | 39 + trunk/IrisMainp/include/Iris2D.h | 89 + trunk/IrisMainp/include/Iris2D_Arm.s | 34 + trunk/IrisMainp/include/Iris2D_Mw.s | 28 + trunk/IrisMainp/include/IrisDefine.h | 1625 ++++++++++ trunk/IrisMainp/include/IrisDefineArm.s | 1607 ++++++++++ trunk/IrisMainp/include/IrisGX.h | 2609 +++++++++++++++++ trunk/IrisMainp/include/IrisGXB.h | 2320 +++++++++++++++ trunk/IrisMainp/include/IrisGXB_Primitive.h | 262 ++ trunk/IrisMainp/include/IrisGXC.h | 2430 +++++++++++++++ trunk/IrisMainp/include/IrisGX_Primitive.h | 232 ++ trunk/IrisMainp/include/IrisMTX.h | 673 +++++ trunk/IrisMainp/include/IrisMacro.h | 701 +++++ trunk/IrisMainp/include/IrisMacroArm.s | 32 + trunk/IrisMainp/include/IrisMacroMw.s | 28 + trunk/IrisMainp/include/IrisMemoryMap.h | 704 +++++ trunk/IrisMainp/include/IrisMemoryMapArm.s | 704 +++++ trunk/IrisMainp/include/IrisOS.h | 1221 ++++++++ trunk/IrisMainp/include/IrisOS_Arm.s | 478 +++ trunk/IrisMainp/include/IrisOS_Mw.s | 477 +++ trunk/IrisMainp/include/IrisQUAT.h | 199 ++ trunk/IrisMainp/include/IrisSinTable.h | 128 + trunk/IrisMainp/include/IrisSystemCall.h | 235 ++ trunk/IrisMainp/include/IrisSystemCallArm.s | 51 + .../IrisMainp/include/IrisSystemCallDefine.h | 31 + .../include/IrisSystemCallDefineArm.s | 30 + trunk/IrisMainp/include/IrisSystemCallMw.s | 47 + trunk/IrisMainp/include/IrisTarget.h | 38 + trunk/IrisMainp/include/IrisTargetArm.s | 39 + trunk/IrisMainp/include/IrisTypes.h | 851 ++++++ trunk/IrisMainp/include/IrisUTL.h | 357 +++ trunk/IrisMainp/include/IrisUTL_Arm.s | 112 + trunk/IrisMainp/include/IrisUTL_Mw.s | 105 + trunk/IrisMainp/include/IrisVEC.h | 241 ++ .../include/private/IrisCardDefine.h | 424 +++ .../include/private/IrisCardDefineArm.s | 190 ++ .../include/private/IrisMainMemeoryDefine.h | 55 + .../include/private/IrisMainMemoryDefineArm.s | 49 + trunk/IrisSubp/IrisSubpMon/Blowfish.c | 158 + trunk/IrisSubp/IrisSubpMon/Blowfish.h | 44 + .../IrisSubp/IrisSubpMon/BlowfishInitTable.s | 277 ++ .../IrisSubp/IrisSubpMon/BlowfishTestTable.s | 277 ++ .../IrisSubpMon/IRIS-SUBPモニタ履歴.txt | 239 ++ .../IrisSubp/IrisSubpMon/IrisMonSharedArea.h | 240 ++ trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c | 624 ++++ trunk/IrisSubp/IrisSubpMon/IrisSubpMon.h | 20 + trunk/IrisSubp/IrisSubpMon/IrisSubpMon.mcp | Bin 0 -> 394605 bytes trunk/IrisSubp/IrisSubpMon/IrisSubpMon.ses | 288 ++ trunk/IrisSubp/IrisSubpMon/IrisSubpMonCard.c | 1137 +++++++ .../IrisSubp/IrisSubpMon/IrisSubpMonDefine.h | 47 + .../IrisSubpMon/IrisSubpMonDefineArm.s | 37 + trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h | 97 + .../IrisSubpMon/IrisSubpMonMemeoryMap.h | 73 + .../IrisSubpMon/IrisSubpMonMemoryMapArm.s | 74 + trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c | 180 ++ trunk/IrisSubp/IrisSubpMon/IrisSubpMonSpi.c | 450 +++ trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c | 723 +++++ trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.h | 172 ++ .../IrisSubp/IrisSubpMon/IrisSubpMonTarget.h | 53 + .../IrisSubpMon/IrisSubpMonTargetArm.s | 36 + trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s | 25 + trunk/IrisSubp/IrisSubpMon/SndDataArm.s | 35 + trunk/IrisSubp/IrisSubpMon/crt0Arm.s | 370 +++ trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s | 725 +++++ .../IrisSubp/IrisSubpMon/crt0subExceptions.s | 336 +++ trunk/IrisSubp/IrisSubpMon/snd_ptable.bin | Bin 0 -> 1536 bytes trunk/IrisSubp/IrisSubpMon/snd_sinetable.bin | Bin 0 -> 128 bytes trunk/IrisSubp/IrisSubpMon/snd_vtable.bin | Bin 0 -> 724 bytes trunk/IrisSubp/include/IrisSubp.h | 28 + trunk/IrisSubp/include/IrisSubpDefine.h | 522 ++++ trunk/IrisSubp/include/IrisSubpDefineArm.s | 513 ++++ trunk/IrisSubp/include/IrisSubpMacro.h | 410 +++ trunk/IrisSubp/include/IrisSubpMacroArm.s | 42 + trunk/IrisSubp/include/IrisSubpMacroMw.s | 28 + trunk/IrisSubp/include/IrisSubpMemoryMap.h | 530 ++++ trunk/IrisSubp/include/IrisSubpMemoryMapArm.s | 529 ++++ trunk/IrisSubp/include/IrisSubpOS.h | 455 +++ trunk/IrisSubp/include/IrisSubpOS_Arm.s | 165 ++ trunk/IrisSubp/include/IrisSubpOS_Mw.s | 159 + trunk/IrisSubp/include/IrisSubpSystemCall.h | 449 +++ .../IrisSubp/include/IrisSubpSystemCallArm.s | 203 ++ .../include/IrisSubpSystemCallDefine.h | 34 + .../include/IrisSubpSystemCallDefineArm.s | 30 + trunk/IrisSubp/include/IrisSubpSystemCallMw.s | 54 + trunk/IrisSubp/include/IrisSubpTarget.h | 33 + trunk/IrisSubp/include/IrisSubpTargetArm.s | 31 + trunk/IrisSubp/include/IrisSubpTypes.h | 361 +++ trunk/IrisSubp/include/IrisSubpUTL.h | 49 + trunk/IrisSubp/include/IrisSubpUTL_Arm.s | 29 + trunk/IrisSubp/include/IrisSubpUTL_Mw.s | 23 + .../IrisSubp/include/private/IrisCardDefine.h | 424 +++ .../include/private/IrisCardDefineArm.s | 190 ++ .../include/private/IrisMainMemeoryDefine.h | 57 + .../include/private/IrisMainMemoryDefineArm.s | 51 + .../IrisSubp/include/private/IrisRtcDefine.h | 104 + .../IrisSubp/include/private/IrisSioDefine.h | 132 + .../IrisSubp/include/private/IrisSpiDefine.h | 77 + trunk/NitroAgbMonTS1_040304.bin | Bin 0 -> 16384 bytes trunk/NitroMainpMonTS1_040304.bin | Bin 0 -> 8192 bytes trunk/NitroMainpMonTS1_040304.map | 356 +++ trunk/NitroMonCheckSumTS1_040304.txt | 33 + trunk/NitroSubpMonTS1_040304.bin | Bin 0 -> 16384 bytes trunk/NitroSubpMonTS1_040304.map | 1218 ++++++++ 125 files changed, 36646 insertions(+) create mode 100644 trunk/AGBモニタ履歴.txt create mode 100644 trunk/IrisMainp/IrisMon/Cp15InitArm.s create mode 100644 trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt create mode 100644 trunk/IrisMainp/IrisMon/IrisMon.c create mode 100644 trunk/IrisMainp/IrisMon/IrisMon.h create mode 100644 trunk/IrisMainp/IrisMon/IrisMon.mcp create mode 100644 trunk/IrisMainp/IrisMon/IrisMon.ses create mode 100644 trunk/IrisMainp/IrisMon/IrisMonCard.c create mode 100644 trunk/IrisMainp/IrisMon/IrisMonDefine.h create mode 100644 trunk/IrisMainp/IrisMon/IrisMonDefineArm.s create mode 100644 trunk/IrisMainp/IrisMon/IrisMonMacro.h create mode 100644 trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h create mode 100644 trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s create mode 100644 trunk/IrisMainp/IrisMon/IrisMonSub.c create mode 100644 trunk/IrisMainp/IrisMon/IrisMonSub.h create mode 100644 trunk/IrisMainp/IrisMon/IrisMonTarget.h create mode 100644 trunk/IrisMainp/IrisMon/IrisMonTargetArm.s create mode 100644 trunk/IrisMainp/IrisMon/IrisTegOnlySub.c create mode 100644 trunk/IrisMainp/IrisMon/NitroAgbMonTS1_040304.bin create mode 100644 trunk/IrisMainp/IrisMon/NitroMainpMonTS1_040304.bin create mode 100644 trunk/IrisMainp/IrisMon/crt0Arm.s create mode 100644 trunk/IrisMainp/IrisMon/crt0subArmCommon.s create mode 100644 trunk/IrisMainp/include/Iris.h create mode 100644 trunk/IrisMainp/include/Iris2D.h create mode 100644 trunk/IrisMainp/include/Iris2D_Arm.s create mode 100644 trunk/IrisMainp/include/Iris2D_Mw.s create mode 100644 trunk/IrisMainp/include/IrisDefine.h create mode 100644 trunk/IrisMainp/include/IrisDefineArm.s create mode 100644 trunk/IrisMainp/include/IrisGX.h create mode 100644 trunk/IrisMainp/include/IrisGXB.h create mode 100644 trunk/IrisMainp/include/IrisGXB_Primitive.h create mode 100644 trunk/IrisMainp/include/IrisGXC.h create mode 100644 trunk/IrisMainp/include/IrisGX_Primitive.h create mode 100644 trunk/IrisMainp/include/IrisMTX.h create mode 100644 trunk/IrisMainp/include/IrisMacro.h create mode 100644 trunk/IrisMainp/include/IrisMacroArm.s create mode 100644 trunk/IrisMainp/include/IrisMacroMw.s create mode 100644 trunk/IrisMainp/include/IrisMemoryMap.h create mode 100644 trunk/IrisMainp/include/IrisMemoryMapArm.s create mode 100644 trunk/IrisMainp/include/IrisOS.h create mode 100644 trunk/IrisMainp/include/IrisOS_Arm.s create mode 100644 trunk/IrisMainp/include/IrisOS_Mw.s create mode 100644 trunk/IrisMainp/include/IrisQUAT.h create mode 100644 trunk/IrisMainp/include/IrisSinTable.h create mode 100644 trunk/IrisMainp/include/IrisSystemCall.h create mode 100644 trunk/IrisMainp/include/IrisSystemCallArm.s create mode 100644 trunk/IrisMainp/include/IrisSystemCallDefine.h create mode 100644 trunk/IrisMainp/include/IrisSystemCallDefineArm.s create mode 100644 trunk/IrisMainp/include/IrisSystemCallMw.s create mode 100644 trunk/IrisMainp/include/IrisTarget.h create mode 100644 trunk/IrisMainp/include/IrisTargetArm.s create mode 100644 trunk/IrisMainp/include/IrisTypes.h create mode 100644 trunk/IrisMainp/include/IrisUTL.h create mode 100644 trunk/IrisMainp/include/IrisUTL_Arm.s create mode 100644 trunk/IrisMainp/include/IrisUTL_Mw.s create mode 100644 trunk/IrisMainp/include/IrisVEC.h create mode 100644 trunk/IrisMainp/include/private/IrisCardDefine.h create mode 100644 trunk/IrisMainp/include/private/IrisCardDefineArm.s create mode 100644 trunk/IrisMainp/include/private/IrisMainMemeoryDefine.h create mode 100644 trunk/IrisMainp/include/private/IrisMainMemoryDefineArm.s create mode 100644 trunk/IrisSubp/IrisSubpMon/Blowfish.c create mode 100644 trunk/IrisSubp/IrisSubpMon/Blowfish.h create mode 100644 trunk/IrisSubp/IrisSubpMon/BlowfishInitTable.s create mode 100644 trunk/IrisSubp/IrisSubpMon/BlowfishTestTable.s create mode 100644 trunk/IrisSubp/IrisSubpMon/IRIS-SUBPモニタ履歴.txt create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMon.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMon.mcp create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMon.ses create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonCard.c create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefine.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefineArm.s create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemeoryMap.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemoryMapArm.s create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonSpi.c create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonTarget.h create mode 100644 trunk/IrisSubp/IrisSubpMon/IrisSubpMonTargetArm.s create mode 100644 trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s create mode 100644 trunk/IrisSubp/IrisSubpMon/SndDataArm.s create mode 100644 trunk/IrisSubp/IrisSubpMon/crt0Arm.s create mode 100644 trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s create mode 100644 trunk/IrisSubp/IrisSubpMon/crt0subExceptions.s create mode 100644 trunk/IrisSubp/IrisSubpMon/snd_ptable.bin create mode 100644 trunk/IrisSubp/IrisSubpMon/snd_sinetable.bin create mode 100644 trunk/IrisSubp/IrisSubpMon/snd_vtable.bin create mode 100644 trunk/IrisSubp/include/IrisSubp.h create mode 100644 trunk/IrisSubp/include/IrisSubpDefine.h create mode 100644 trunk/IrisSubp/include/IrisSubpDefineArm.s create mode 100644 trunk/IrisSubp/include/IrisSubpMacro.h create mode 100644 trunk/IrisSubp/include/IrisSubpMacroArm.s create mode 100644 trunk/IrisSubp/include/IrisSubpMacroMw.s create mode 100644 trunk/IrisSubp/include/IrisSubpMemoryMap.h create mode 100644 trunk/IrisSubp/include/IrisSubpMemoryMapArm.s create mode 100644 trunk/IrisSubp/include/IrisSubpOS.h create mode 100644 trunk/IrisSubp/include/IrisSubpOS_Arm.s create mode 100644 trunk/IrisSubp/include/IrisSubpOS_Mw.s create mode 100644 trunk/IrisSubp/include/IrisSubpSystemCall.h create mode 100644 trunk/IrisSubp/include/IrisSubpSystemCallArm.s create mode 100644 trunk/IrisSubp/include/IrisSubpSystemCallDefine.h create mode 100644 trunk/IrisSubp/include/IrisSubpSystemCallDefineArm.s create mode 100644 trunk/IrisSubp/include/IrisSubpSystemCallMw.s create mode 100644 trunk/IrisSubp/include/IrisSubpTarget.h create mode 100644 trunk/IrisSubp/include/IrisSubpTargetArm.s create mode 100644 trunk/IrisSubp/include/IrisSubpTypes.h create mode 100644 trunk/IrisSubp/include/IrisSubpUTL.h create mode 100644 trunk/IrisSubp/include/IrisSubpUTL_Arm.s create mode 100644 trunk/IrisSubp/include/IrisSubpUTL_Mw.s create mode 100644 trunk/IrisSubp/include/private/IrisCardDefine.h create mode 100644 trunk/IrisSubp/include/private/IrisCardDefineArm.s create mode 100644 trunk/IrisSubp/include/private/IrisMainMemeoryDefine.h create mode 100644 trunk/IrisSubp/include/private/IrisMainMemoryDefineArm.s create mode 100644 trunk/IrisSubp/include/private/IrisRtcDefine.h create mode 100644 trunk/IrisSubp/include/private/IrisSioDefine.h create mode 100644 trunk/IrisSubp/include/private/IrisSpiDefine.h create mode 100644 trunk/NitroAgbMonTS1_040304.bin create mode 100644 trunk/NitroMainpMonTS1_040304.bin create mode 100644 trunk/NitroMainpMonTS1_040304.map create mode 100644 trunk/NitroMonCheckSumTS1_040304.txt create mode 100644 trunk/NitroSubpMonTS1_040304.bin create mode 100644 trunk/NitroSubpMonTS1_040304.map diff --git a/trunk/AGBモニタ履歴.txt b/trunk/AGBモニタ履歴.txt new file mode 100644 index 0000000..daab873 --- /dev/null +++ b/trunk/AGBモニタ履歴.txt @@ -0,0 +1,221 @@ +AGB/AGB2j^vOύX + + +NITRO-V0.01(V3.01f[^o[W / CRC16 0xcc3fj +EMonCheckSum() ̖߂lς邽߁A3f0chԒn 00000000h 00000001h ύX + (߂lF baae187fh baae1880h) + +V5.11(V[v]p) +ENɃJ[gbWփWv + +V5.10iTS5.1o[Wj +EV3.01֖߂ + +V5.01 +EFIQX[v@\̒lj + +V5.00iAGB2-TS1o[Wj +EK}␳@\̒ljifύXj +EPAUSEWX^ CHKtOZbg^C~OJ[gbWJnOֈړ +ENfpRs[[`̕ύX +Epbg擪f[^폜ɔe[`̒ +EnCCgpbgERs[[`̏k +EfaSpbg쐬[`̒lj + + +V3.01(V2.12) +ETS3o[W +V3.00(V2.11) +ETS3o[W(TEhoO) + + +V2.12 +ESoundVSync()荞݌Ăяo֕ύX +V2.11 +ETEhE^CC +V2.10 +EfobKѐ̕ύX + 1M-DACS9fe2000h^8M-DACS9ffc000h^DACS9ffc000h + +V2.05 +ETEhhCõGR[EoOC +EL[AhXwtO(80000b4h:d7)] +V2.04 +ESIOu[g̃SZbg3[`ɕ +ESIOu[g̃SZbgƔʃt[ɕU +V2.03 +EJZbg} ꎞ~ +E8M-DACSpɃfobK̈ړtOΉ +EIN35[qb`̒lj +ETEhhCoXV +EVXeR[ɂAGBj^NłROMRs[֎~ +ELogoCopyCommon()œROMC[W̃Rs[֎~ +EIntr_Wait()SoundBiasChange16()̃x[XAhX𖈃[vݒ +V2.02 +EIntrWait()oOC +EJZbg} +ESIOu[g@\ lj +ESIOu[gE[h L[Œ蒆~ +EROM`FbNT VXeR[lj +Ef̂yWp~ +V2.01 +ETS2.1o[W +E}JZbgʃtO̍Ĕ]iAGB=0^CGB=1j +V2.00 +ETS2o[W + + + +V1.59 +EPlttLinerSet()LinerParamL͈0`80`32 +V1.58 +ETEhhCo000303a +ESIOX[u000304a +ENintendoSZbg C +V1.57 +ESPSR_fiq0x3007FE0/CPSR_fiq0x3007FE4 +V1.56 +E݊SIOX[u@\ lj +V1.55 +ESP_svc=3007FE0h^SP_fiq=3007FF0h +EIRQ/FIQ̃Wvldr߂ɂčsȂAbx߂폜č + 32bit[hŒ +EJZbg/CPUORAMWvpWX^r7lr +E\tgZbg VXeR[lj +EVXeR[ ftHg FIQ +EZLeB`FbN ON +ETEhhCo f[^x +E}`vCSIOX[u@\ lj +V1.54 +ECGB݊[hU6bitݒ +EWX^RAMZbg VXeR[lj +V1.53S +EtbVł2WAITs +V1.53 +EPROM_000221Ή +V1.52 +EVXeR[ڌĂяo +ETEhGARAM +V1.51 +EZLeB`FbNU~ +ETEhGAORAM +V1.50 +EPROM_991216Ή +EVXeR[Vtg~ +EspVXeR[폜 + +V1.46 +EDACS[`Ef[^ +EDACSpb` +E[U32bit߂0Ԓnɔŗꍇ̑Ώ +ERAMłNON WAITs +V1.45 +EPROM_000131Ή +EROMANZX 8-8iNintendoSh~j +EtbVł2WAITs + +V1.43 +EJOY[`26-5o[W +EDACSL[NoZof[^̈̕ύX +EPauseRegReadVXeR[oOC +V1.42 +EJOY[`26-3o[W +EnCCg̏lANZgt +V1.41 +EJOY[`26-2o[W +V1.40 +EJOY[`26o[W +V1.39 +EJZbgN͔ėpoSIO[h + CPUORAMNJOYoXSIO[h +V1.38 +ENX^bN̈NA +V1.37 +EJOY[`24o[W +V1.36 +EJOY[`23o[W +V1.35 +E[vTEhDMA~ +V1.34 +Ej^pϐ̈CPURAMi3000000hjֈړ +EJOY[`22o[W +V1.33 +EJOY[`21o[W +V1.32 +EJOY[`14o[W +ETEhg`f[^k +V1.31 +EIF҂VXeR[폜 +EJOY[`12o[W +ETEhhCo000105o[W +V1.30 +E}JZbgʃtO̔]iCGB=0^AGB=1j +EROMo^f[^̃Rs[ +//EOROMo^f[^FIQtOώ݂̂Ɍ +// ʏ펞͂̂܂܃^[ +EIF҂^荞ݑ҂^Sqrt^ArcTanVXeR[lj +EDivVXeR[ꊷ + +V1.22 +ESO̕0x9fe2000ɁA̕A߂"subs pc, lr, #4"ɌŒ +V1.21 +EVXeR[gpRs[ւ̑΍ +EIMEWX^ZbgȂ +V1.20 +EZLeBEL[ǂݍݒljƃL[[`̏C +ETEhDMA̐VdlΉ +Ej^pϐ̈CPUORAMi2000000hĵ܂ +EX^bN̈EVXëCPURAMi3000000hjֈړ +ESP_usr=3007F00h^SP_irq=3007FA0h^SP_svc=3007FE8h^SP_fiq=3007FFCh +EOBJ]Sʒüړݒ +ENvOItÕZbg +EIMEWX^̃Zbg +ERAMłNON WAITs + +V1.11 +ERAMłNON WAITs +V1.10iTS1.1o[Wj +EHaltU~ +EROMł̎s +EBG^OBJAtBϊVXeR[EoOC + +V1.02 +Eubh{[hł̒xDMACPUő +V1.01 +EOxN^EoOC +ERAMłNON WAITs +V1.00iTS1o[Wj +EfTEhbł̒lj +ETEhhCobł̒lj +EOX^bNύX +EVXeR[̃AZu +EVXeR[RAMn烌WX^n֕ύX +EOxN^EoO + +V0.30 +E^Cgfbł̒lj +ETEhBIASZbgorZbg̃VXeR[̒lj +E"bx lr"ł̗O̕AɑΉ + +V0.23 +AGB-CPUdlpW-AVXeR[S̍폜 +k֌WVXeR[S̒lji32bit߁j +V0.22 +EFIQ^SVC[hFIQ +V0.21 +EFIQ^SVC[hFIQs +EIRQ[hsp̏ +EN̓[U[hɂĊOvOփWv +ESOɂ͂̂܂܂CPU[hɂĊOvOփWv +EOpX^bN 6 Word (200BFC0 ` ) (200BFD8 ` ) +@VXeR[̈ 2 Word (200BFD8 ` ) (200BFF0 ` ) ֈړ +EAGBj^ÕfobOpɊe[hcpsr,pcƃ[U[hspޔ +V0.20 +ENSOIRQ[hɂĊOvOփWv +EIRQpX^bN͔p~ă[UŊǗ + +V0.11 +E^C}[~ +V0.10 +EIMẼZbg +Ej^ROM쒆FIQ diff --git a/trunk/IrisMainp/IrisMon/Cp15InitArm.s b/trunk/IrisMainp/IrisMon/Cp15InitArm.s new file mode 100644 index 0000000..406c837 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/Cp15InitArm.s @@ -0,0 +1,74 @@ +;======================================================================= +; crt0_arm.s +; X^[gAbv[`iARMASMpj +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + + AREA Init, CODE, READONLY + INCLUDE IrisDefineArm.s + INCLUDE IrisMemoryMapArm.s + INCLUDE IrisSystemCallArm.s + INCLUDE IrisMacroArm.s + + INCLUDE IrisMonDefineArm.s + INCLUDE IrisMonMempryMapArm.s + + +;----------------------------------------------------------------------- +; VXeRvZbT Zbgir0=p[^j +;----------------------------------------------------------------------- + GLOBAL reset_cp15 + ALIGN + CODE32 +reset_cp15 + +; veNVjbg^LbV^sbl Zbg + + mcr p15, 0, r0, c1, c0, 0 + +; LbV + + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 ; ߃LbV + mcr p15, 0, r0, c7, c6, 0 ; f[^LbV + +; Cgobt@ GveB҂ + + mcr p15, 0, r0, c7, c10, 4 + + bx lr + +;----------------------------------------------------------------------- +; VXeRvZbT +;----------------------------------------------------------------------- + GLOBAL init_cp15 + ALIGN + CODE32 +init_cp15 + mov r12, lr + +; veNVjbg^LbV^sbl fBZ[u + + ldr r0, =C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET + + bl reset_cp15 + + +; f[^sbl ݒ + + ldr r0, =MON_DTCM :OR: C9_TCMR_16KB + mcr p15, 0, r0, c9, c1, 0 + +; VXeRvZbT }X^[ݒ + + mrc p15, 0, r0, c1, c0, 0 + + ldr r0, =C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET + mcr p15, 0, r0, c1, c0, 0 + + bx r12 + + + END + diff --git a/trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt b/trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt new file mode 100644 index 0000000..700fcaf --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt @@ -0,0 +1,146 @@ +IRISj^vOύX + +V0.76 +EIPL2J[gbWu[gEo[W +V0.75 +EJ[hoX؂芷o[W +V0.74 +EfobK4MBo[W +V0.73 +EJ[gbWu[gdl +V0.72 +E3D[Ή +V0.71 +EIPL2u[g +V0.70iTS040304oo[W / CRC16 0x6cf8j +EIPL2u[gΉ +EV[PXœK +EkVXeR[EG[Terminate lj + +V0.62 +E3D[Ή +V0.61 +EIPL2u[g +E؂̂ JTAGCl[u +V0.60iTSoo[W / CRC16 0x0690j +EIPL2u[gΉ +EDTCMSNA + +V0.59 +EIPL2u[gΉ +V0.58 +EIPL2u[g +Eo[W\ 폜 +V0.57 +EIPL2u[gΉ +V0.56 +EIPL2u[g +ESVC_Div()/SVC_DivRem()/SVC_Sqrt()/UnDiffByte2Byte()/UnDiffShort2Short lj +EUC_*StreamFuncp() ύX +V0.52 +EIPL2u[gΉ +V0.51 +EIPL2u[g +ENINTENDOSf[^܂߂ +EVXeR[̐ +EJTAGCl[ûݗL +V0.50 +E3D[Ή +V0.45 +ENEC[SRAMo[Xg[hC +V0.41 +EIPL2u[gΉ +V0.40 +EIPL2u[g +V0.36 +EIPL2pɃveNVjbgfBZ[u +V0.32 +EUsrSwi() 폜 +V0.31 +ETEh`[oo[W +V0.30 +EVXë 4KB 16KB gΉ +EIPL2Ńu[gꍇɖ[vɓĂ̂C +EDISP_READY_CARD_4_IPL2 `lj +V0.30 +ENEC[SRAM̐Vdl֑Ή +EJ[hoXEZbgMAINPֈړ +V0.29 +EJ[hiJ[gbWjwb_`FbNɂ̂݃fobKj^N +EAGB[h̕\ԑ҂MAINPֈړ +EDISABLE_AGB_MODE DISP_AGB_HEADER_ERROR ύX +V0.28 +EfobKX^bNAhXړiDTCM_END-0x40 0x027F_FD80j +EIsMmem8MB() lj +EMMEM_CHK_SIZE_[WRITE|READ]_BUF SUBPƕ +EO FIQ sƒoȌC +V0.27 +EfobKj^u[gGÄړi0x170 0160j +V0.26 +EfobKj^u[gGÄړi0x70 0170j +EAGB[hꎞr +V0.25 +EO FIQ s‘Ή +EAGB[hbΉ +V0.24 +ESUBPƂ̒ʐM̕ύX +EJ[h̃ZbgR[hlj +V0.23 +EXbhΉɖ߂ +ELbVoOC +EveNVjbgfBZ[uɂăAvP[VNiDTCM̂ݗLj +V0.22a +EVXeR[ɂČĂяõX^bNgp悤ɕύXiXbhΉj +V0.22 +EfobKC^tF[XύX +V0.21a +EfobKC^tF[XȀC +V0.21 +EfobKC^tF[X + +V0.20iTEG{[hzzo[Wj +ESVC_UsrSwi() VXeR[lj + +V0.17 +EVXeR[Q̐ +V0.16 +EVXeR[Ɗ荞ݏĂяo̍ +EX^bN|C^̈ړ +E*CpuSet*() ̓]TCYL͈͂̊g +V0.15 +ESVC_WaitByLoop() lj +ESVC_WaitIntr() +ESVC_CpuSetFast() oOC +V0.14 +EC̃VXë揉 +ESVC_AccessCard() TEG{[hbł̒lj +ESVC_CpuSetFast() 32ByteTCỶ +ESVC_WaitIntr() փz[g̒lj +V0.13 +EVXeR[NoQƎ̃oCgANZXC +V0.12 +EXgRAM 0xffffffffNA +V0.11 +ETEG łADoXE_E[h֑Ή +ETEG ŃTEho͂Lɂ邽 LCDCl[utOZbg +V0.10 +ETEG œ삷悤ɑΉ + +V0.06 +EVXëDTCM̈ֈړiTEGΉj +ERegisterRamReset() ύX +V0.05iAD16BUSo[WV0.01j +EIOP_E[hs +V0.04 +EHalt()AStop() C +V0.03 +EArcTan2() ArcTan3() +V0.02 +EIntrWait() Halt ~ +V0.01 +EtbVs +EAGBɂTEhƒʐMȊÕVXeR[̎ +EBB ̎dlɍ킹ē[NRAMC[W𖢎gp +EvORs[p CpuFastSet() ̃\[X`FbN +EŌɖ[vŒ~i[UvÕ[h + fobK PC ύXĂ邽߁j diff --git a/trunk/IrisMainp/IrisMon/IrisMon.c b/trunk/IrisMainp/IrisMon/IrisMon.c new file mode 100644 index 0000000..9e918c1 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMon.c @@ -0,0 +1,158 @@ +//******************************************************************* +// IRISj^vO +//******************************************************************* +#include "IrisMon.h" + + +//---------------------------------------------------------------------- +// C[` +//---------------------------------------------------------------------- +extern void intr_main(void); + +extern void RegisterRamReset32(u32 resetFlags); +extern void CpuSet32(const void *srcp, void *destp, u32 dmaCntData); +extern void CpuFastSet32(const void *srcp, void *destp, u32 dmaCntData); + + +void IrisMonMain() +{ + NotifySubpIntf(0); // u[gEnhVFCN + WaitSubpIntf(0); + +#ifdef NDEBUG + + NotifySubpIntf(1); + WaitSubpIntf(1); + +#endif // NDEBUG + + InitReg(); // WX^ + InitRam(); // + +#ifdef DISP_BIOS_VERSION + if ((*(vu8 *)REG_KEYINPUT ^ 0xff) & (START_BUTTON|SELECT_BUTTON)) { + DispTegCheck(" 070", ""); // TEGpo[W`FbN\ + while(1) ; + } +#endif + + *(vu16 *)REG_EXMEMCNT = CARD_ACCESS_SUBP // 10-6ANZX + | CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC + | MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT; + *(vu32 *)REG_CARDCNT = CARD_RESET_HI; // [UJ[hoX؂芷̈Ŝ + + NotifySubpIntf(2); // ̒ʒm + +#ifndef NDEBUG + + WaitSubpIntf(2); // ARM7 ҂ + NotifySubpIntf(15); // fobOʐM + +#endif // NDEBUG + + // ARM7ɂROMwb_ƎsC[W̃_E[h + + while (1) { + u32 subpIntfData = RecvSubpIntf(); + + if (subpIntfData == 3) break; + +#ifdef TEST_AGB_MODE + + else if (subpIntfData == 7) Iris2Agb(); // AGB[hJ + +#endif // TEST_AGB_MODE + +#ifdef DISP_AGB_HEADER_ERROR + + else if (subpIntfData == 8) { + DispTegCheck("CARTRIDGE ERROR", " PUSH A BUTTON"); // AGBwb_G[ `FbN\ + while (!((*(vu8 *)REG_KEYINPUT ^ 0xff) & A_BUTTON)) ; + NotifySubpIntf(8); // AGBwb_G[̉ + reset_cp15(C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET); + Iris2Agb(); // AGB[hJ + } + +#endif // DISP_AGB_HEADER_ERROR + +#ifdef DISP_READY_CARD_4_IPL2 + + else if (subpIntfData == 9) { + DispTegCheck(" READY", ""); + reset_cp15(C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET); + *(u8 *)REG_PAUSE = 2; // JTAGCl[u + WaitSubpIntf(3); + break; + } + +#endif // DISP_READY_CARD_4_IPL2 + + } + + *(vu32 *)REG_IME = 0; // IME NA + *(vu32 *)REG_IE = 0; // IE NA + *(vu32 *)REG_IF = -1; // IF NA + + WaitSubpIntf(3); + NotifySubpIntf(3); + + // ʏ͂ŏI + + +#ifdef TEST_CARD_BY_MAINP + // J[hoX؂芷 + WaitSubpIntf(5); + + *(vu16 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP // MAINPJ[hANZX + | CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC + | MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT; + + ReadCard4Game((void *)MROM_GAME_AREA, (void *)0x027ff400,// GAME[hǂݍ + MROM_PAGE_SIZE, 0xa1586000); + + *(vu16 *)REG_EXMEMCNT = CARD_ACCESS_SUBP // SUBPJ[hANZX + | CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC + | MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT; + + NotifySubpIntf(5); + + WaitSubpIntf(6); + + *(vu16 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP // MAINPJ[hANZX + | CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC + | MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT; + + ReadCard4Game((void *)(MROM_GAME_AREA+0x200), (void *)0x027ff600,// GAME[hǂݍ + MROM_PAGE_SIZE, 0xa1586000); + ReadCardID4Game(); // IDǂݍ + + *(vu16 *)REG_EXMEMCNT = CARD_ACCESS_SUBP // SUBPJ[hANZX + | CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC + | MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT; + + NotifySubpIntf(6); + +#endif // TEST_CARD_BY_MAINP + +} + + +//---------------------------------------------------------------------- +// TuvZbTEC^tF[Xʒm +//---------------------------------------------------------------------- + +void NotifySubpIntf(u32 param) +{ + *(vu16 *)REG_SUBPINTF = param < +#include +#include +#include "IrisMonDefine.h" +#include "IrisMonMemoryMap.h" +#include "IrisMonMacro.h" +#include "IrisMonSub.h" + + + +#endif /* _IRIS_MON_H */ diff --git a/trunk/IrisMainp/IrisMon/IrisMon.mcp b/trunk/IrisMainp/IrisMon/IrisMon.mcp new file mode 100644 index 0000000000000000000000000000000000000000..0f602b8035b2971048d7e3cbde37c033540a91a5 GIT binary patch literal 407139 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 // J[h]I҂ + + *(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM // }X^[Cl[u + | CARDMST_ENABLE | CARDMST_IF_ENABLE; + + for (i=0; i<2; i++) { // R}hݒ + u32 opTmp = paramp->op[1 - i]; + vu8 *opDestBasep = (vu8 *)(REG_CARD_CMD + i*4); + + opDestBasep[0] = opTmp >>24; + opDestBasep[1] = opTmp >>16; + opDestBasep[2] = opTmp >>8; + opDestBasep[3] = opTmp >>0; + } +} + + +//---------------------------------------------------------------------- +// J[h҂ DMA~ +//---------------------------------------------------------------------- + +void WaitCardDma(u32 dmaNo) +{ + WaitCard(); + + if (dmaNo <= 3) StopDma(dmaNo); +} + + +//---------------------------------------------------------------------- +// J[hy[Wǂݍ݁iGAME[h^j +//---------------------------------------------------------------------- + +void ReadCard4Game(void *romp, void *ramp, s32 size, u32 cntParam) +{ + CardCtrlParam param; + s32 restSize = size; + s32 blockSize = MROM_PAGE_SIZE; + + param.cardCnt = cntParam // Rg[ݒ + | CARD_READ_MODE | CARD_1_PAGE + | CARD_START | CARD_RESET_HI; + param.dmaNo = 3; // DMAԍw + + while (restSize > 0) { // ubNǂݍ + ReadCardAsync4Game(romp, ramp, blockSize, ¶m); + + (u8 *)romp += blockSize; + (u8 *)ramp += blockSize; + restSize -= blockSize; + } + + WaitCardDma(param.dmaNo); +} + + +//---------------------------------------------------------------------- +// J[hǂݍ݁iDMA񓯊j +//---------------------------------------------------------------------- + +void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp) +{ + SetCardOp(paramp); // R}hݒ + + if (paramp->dmaNo <= 3) { + DmaReadCard(paramp->dmaNo, ramp); // DMAݒiőݒ DMA0-2: 64KB / DMA3: 256KBj + *(vu32 *)REG_CARDCNT = paramp->cardCnt; // Rg[ݒ & DMAX^[g + } else { + void *ramEndp; + u32 cardCntTmp; + + *(vu32 *)REG_CARDCNT = paramp->cardCnt; // Rg[ݒ + + ramEndp = (u8 *)ramp + size; // i[IAhXZo + + do { // CPUǂݍ + cardCntTmp = *(vu32 *)REG_CARDCNT; + + if (cardCntTmp & CARD_DATA_READY) { + u32 dataTmp = *(vu32 *)REG_CARD_DATA; + + if (ramp < ramEndp) + *((vu32 *)ramp) = dataTmp; // wTCY܂Ŋi[i㑱f[^͓ǂݎ̂āj + ((vu32 *)ramp)++; + } + } while (cardCntTmp & CARD_START); + } +} + +//---------------------------------------------------------------------- +// J[h]ubNTCY l +//---------------------------------------------------------------------- + +s32 GetBlockSizeFromCardCnt(CardCnt *paramp) +{ + s32 blockSize = 0; + s32 pages = paramp->pages; + + if (pages == ST_CARD_STATUS) blockSize = 4; + else if (pages >= ST_CARD_1_PAGE) blockSize = 512 <<(pages - 1); + + return blockSize; +} + + +//---------------------------------------------------------------------- +// J[hIDǂݍ݁ij +//---------------------------------------------------------------------- + +u32 ReadCardID(CardCtrlParam *paramp) +{ + paramp->dmaNo = -1; // DMAsgpw + + SetCardOp(paramp); // R}hݒ + + *(vu32 *)REG_CARDCNT = paramp->cardCnt // Rg[ݒ + | CARD_READ_MODE | CARD_STATUS + | CARD_START | CARD_RESET_HI; + WaitCardData(); + + return *(vu32 *)REG_CARD_DATA; +} + +//---------------------------------------------------------------------- +// J[hIDǂݍ݁iNORMAL[hj +//---------------------------------------------------------------------- + +u32 ReadCardID4Normal(void) +{ + CardCtrlParam param; + + param.cardCnt = GetCardCnt4Normal(); // Rg[ݒiXNuݒNAj + param.op[0] = 0; // R}hݒ + param.op[1] = MROMOP_N_READ_ID; + + return ReadCardID(¶m); +} + +//---------------------------------------------------------------------- +// J[hIDǂݍ݁iNORMAL[hj +//---------------------------------------------------------------------- + +u32 ReadCardID4Game(void) +{ + CardCtrlParam param; + + param.cardCnt = GetCardCnt4Game(); // Rg[ݒiXNuݒNAj + param.op[0] = 0; // R}hݒ + param.op[1] = MROMOP_G_READ_ID; + + return ReadCardID(¶m); +} + + +//---------------------------------------------------------------------- +// J[hf[^ǂݍ݁iGAME[h^񓯊j +//---------------------------------------------------------------------- + +void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp) +{ + paramp->op[0] = (u32 )romp <<24; // R}hݒ + paramp->op[1] = MROMOP_G_READ_PAGE | (u32 )romp >>8; + + ReadCardAsync(romp, ramp, size, paramp); +} + + +//---------------------------------------------------------------------- +// J[h荞 ݒ +//---------------------------------------------------------------------- + +void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp) +{ + ciwp->romp = romp; + ciwp->ramp = ramp; + ciwp->restSize = size; + ciwp->blockSize = GetBlockSizeFromCardCnt((CardCnt *)&ciwp->param.cardCnt); + ciwp->param.dmaNo = 3; + + WaitCardDma(ciwp->param.dmaNo); + + *(vu32 *)REG_IME = 0; +// *(vu32 *)INTR_CHECK_BUF &= (-1 ^ CARD_DATA_INTR_FLAG); // J[h`FbÑNA + + *(vu32 *)REG_IF = CARD_DATA_INTR_FLAG; + *(vu32 *)REG_IE |= CARD_DATA_INTR_FLAG; // J[h荞݋ + *(vu32 *)REG_IME = 1; + + ciwp->AsyncFuncp(ciwp->romp, ciwp->ramp, ciwp->blockSize, &ciwp->param); +} + +//---------------------------------------------------------------------- +// J[h荞 I҂ +//---------------------------------------------------------------------- + +void WaitCardIntr(void) +{ + WaitIntr(0, CARD_DATA_INTR_FLAG); + + { CardIntrWork *ciwp = &cardIntrWork; + + WaitCardDma(ciwp->param.dmaNo); + } + + *(vu32 *)REG_IME = 0; + *(vu32 *)REG_IE &= (-1 ^ CARD_DATA_INTR_FLAG); // J[h荞݋֎~ + *(vu32 *)REG_IME = 1; +} + + +//---------------------------------------------------------------------- +// J[h荞 ݒiGAME[hj +//---------------------------------------------------------------------- + +void SetCardIntr4Game(void *romp, void *ramp, s32 size) +{ + CardIntrWork *ciwp = &cardIntrWork; + + ciwp->param.cardCnt = GetCardCnt4Game() // Rg[ݒ + | CARD_READ_MODE | CARD_1_PAGE + | CARD_START | CARD_RESET_HI; + + ciwp->AsyncFuncp = ReadCardAsync4Game; // f[^ǂݍ݊֐ Zbg + + SetCardIntr(romp, ramp, size, ciwp); +} + + +//---------------------------------------------------------------------- +// J[h荞 +//---------------------------------------------------------------------- + +void CardIntr(void) +{ + CardIntrWork *ciwp = &cardIntrWork; + s32 blockSize = ciwp->blockSize; + + // ubNǂݍ + + (u8 *)ciwp->romp += blockSize; + (u8 *)ciwp->ramp += blockSize; + ciwp->restSize -= blockSize; + + if (ciwp->restSize > 0) { + cardIntrWork.AsyncFuncp(ciwp->romp, ciwp->ramp, blockSize, &ciwp->param); + } else { + *(vu32 *)INTR_CHECK_BUF |= CARD_DATA_INTR_FLAG; // J[h`FbÑZbg + } +} + + +#endif // TEST_CARD_BY_MAINP + + +//---------------------------------------------------------------------- +// J[hANZX +//---------------------------------------------------------------------- + +#ifndef TS_MON + +void AccessCard(u32 dmaNo, s32 *srcp, s32 *destp, s32 size) +{ + int i; + +// *(vu8 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC; // 10-6ANZX + + CpuCopy16_32(srcp, destp, size, 32); // J[gbW̓] +} + +#endif // TS_MON + + diff --git a/trunk/IrisMainp/IrisMon/IrisMonDefine.h b/trunk/IrisMainp/IrisMon/IrisMonDefine.h new file mode 100644 index 0000000..8ace2d9 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonDefine.h @@ -0,0 +1,40 @@ +//====================================================================== +// hqhrj^vOp` +//====================================================================== +#ifndef _IRIS_MON_DEFINE_H +#define _IRIS_MON_DEFINE_H + + +#include "IrisMonTarget.h" + + +//---------------------------------------------------------------------- +// cl`蓖 +//---------------------------------------------------------------------- + +#define V_DMA_NO 2 +#define M_DMA_NO 3 + +//---------------------------------------------------------------------- +// WX^q`l Zbg VXeR[ +//---------------------------------------------------------------------- + +#define RESET_ALL_FLAGS 0xff // SZbg + +#define RESET_ALL_REG_FLAGS 0xe0 // SWX^ Zbg + +#define RESET_REG_FLAG 0x80 // WX^iLȊOjZbg +#define RESET_REG_SOUND_FLAG 0x40 // TEhWX^ Zbg +#define RESET_REG_SIO_FLAG 0x20 // rhnWX^ Zbg + +#define RESET_ALL_RAM_FLAGS 0x1f // Sq`l NA + +#define RESET_MMEM_FLAG 0x01 // C NA +#define RESET_CPU_WRAM_FLAG 0x02 // botq`l NA +#define RESET_PLTT_FLAG 0x04 // pbg NA +#define RESET_VRAM_FLAG 0x08 // uq`l NA +#define RESET_OAM_FLAG 0x10 // n`l NA + + + +#endif // _IRIS_MON_DEFINE_H diff --git a/trunk/IrisMainp/IrisMon/IrisMonDefineArm.s b/trunk/IrisMainp/IrisMon/IrisMonDefineArm.s new file mode 100644 index 0000000..12fb7ef --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonDefineArm.s @@ -0,0 +1,36 @@ +;********************************************************************/ +;* hqhrj^vOp` */ +;********************************************************************/ + IF :DEF: _IRIS_MON_DEFINE_H + ELSE +_IRIS_MON_DEFINE_H * 1 + + + INCLUDE IrisMonTargetArm.s + + +;----------------------------------------------------------------------- +; WX^q`l Zbg VXeR[ +;----------------------------------------------------------------------- + +RESET_ALL_FLAGS * 0xff ; SZbg + +RESET_ALL_REG_FLAGS * 0xe0 ; SWX^ Zbg + +RESET_REG_FLAG * 0x80 ; WX^iLȊOjZbg +RESET_REG_SOUND_FLAG * 0x40 ; TEhWX^ Zbg +RESET_REG_SIO_FLAG * 0x20 ; rhnWX^ Zbg + +RESET_ALL_RAM_FLAGS * 0x1f ; Sq`l NA + +RESET_MMEM_FLAG * 0x01 ; C NA +RESET_CPU_WRAM_FLAG * 0x02 ; botq`l NA +RESET_PLTT_FLAG * 0x04 ; pbg NA +RESET_VRAM_FLAG * 0x08 ; uq`l NA +RESET_OAM_FLAG * 0x10 ; n`l NA + + + + ENDIF ; _IRIS_MON_DEFINE_H + + END diff --git a/trunk/IrisMainp/IrisMon/IrisMonMacro.h b/trunk/IrisMainp/IrisMon/IrisMonMacro.h new file mode 100644 index 0000000..1a5f31c --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonMacro.h @@ -0,0 +1,80 @@ +//******************************************************************* +// IRISj^vO }N֐ +//******************************************************************* +#ifndef _IRIS_MON_MACRO_H +#define _IRIS_MON_MACRO_H + + +#include +#include "IrisMonTarget.h" + + +//---------------------------------------------------------------------- +// TuvZbTEC^tF[XM +//---------------------------------------------------------------------- + +#define RecvSubpIntf() \ + \ + ((*(vSubpIntf *)REG_SUBPINTF).recvStatus) + + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define CpuClear16_32(data, destp, size, bit) \ +{ \ + u##bit tmp = (vu##bit )(data); \ + CpuSet16_32((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | \ + DMA_##bit##BIT_BUS | (size)/((bit)/8))); \ +} + +#define CpuArrayClear16_32( data, destp, bit) \ + CpuClear16_32( data, destp, sizeof(destp), bit) + + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define CpuCopy16_32(srcp, destp, size, bit) \ + \ + CpuSet16_32((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | \ + DMA_##bit##BIT_BUS | (size)/((bit)/8))) + +#define CpuArrayCopy16_32( srcp, destp, bit) \ + CpuCopy16_32( srcp, destp, sizeof(srcp), bit) + + +//---------------------------------------------------------------------- +// bot NA(32ByteP) +//---------------------------------------------------------------------- + +#define CpuClearFast32(data, destp, size) \ +{ \ + u32 tmp = (vu32 )(data); \ + CpuSetFast32((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | (size)/(32/8))); \ +} + +#define CpuClearArrayFast32( data, destp) \ + CpuClearFast32( data, destp, sizeof(destp)) + + +//---------------------------------------------------------------------- +// bot Rs[(32ByteP) +//---------------------------------------------------------------------- + +#define CpuCopyFast32(srcp, destp, size) \ + \ + CpuSetFast32((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | (size)/(32/8))) + +#define CpuCopyArrayFast32( srcp, destp) \ + CpuCopyFast32( srcp, destp, sizeof(srcp)) + + + +#endif // _IRIS_MON_MACRO_H diff --git a/trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h b/trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h new file mode 100644 index 0000000..f8ab9bd --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h @@ -0,0 +1,82 @@ +//====================================================================== +// hqhrj^vOp` +//====================================================================== +#ifndef _IRIS_MON_MEMORY_MAP_H +#define _IRIS_MON_MEMORY_MAP_H + + +#include "IrisMonTarget.h" + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define MON_DTCM 0x00800000 // j^pf[^sbl +#define MON_DTCM_END (MON_DTCM + 0x4000) +#undef DTCM +#define DTCM MON_DTCM // f[^sbl + +#define MMEM_CHK_SIZE_READ_BUF (MAIN_MEM_END - 0x8) // CETCY`FbN݃obt@ +#define MMEM_CHK_SIZE_WRITE_BUF (MAIN_MEM_EX_END - 0x8) // ǂݍ݃obt@ + +#define MON_PNA_DEFAULT 0x02000ec7 // PNAftHgl +#define MON_PNB_DEFAULT 0x02000f75 // PNB + +#define MON_CPU_WRAM 0x03000000 // bot[Nq`l +#define MON_CPU_WRAM_END (MON_CPU_WRAM + 0x01000000) +#define MON_WRAM EX_WRAM // [Nq`lS +#define MON_WRAM_END MON_CPU_WRAM_END +#define MON_USR_BUF EX_WRAM // [Ü +#define MON_USR_BUF_END (MON_CPU_WRAM_END - 4*32) +#define MON_SYS_BUF (MON_CPU_WRAM_END - 4*32) //VXë +#define MON_SYS_BUF_END MON_CPU_WRAM_END +#define MON_FIQ_VECTOR_BUF (MON_CPU_WRAM_END - 4*6 ) // FIQ荞ݕAhX +#define MON_INTR_VECTOR_BUF (MON_CPU_WRAM_END - 4*1 ) // 荞ݕAhX + +#define ROM_HEADER 0x08000004 // ROMo^f[^ + +#define MON_NINLOGO (ROM_HEADER + 0x0 ) // NINTENDOSEf[^ +#define MON_FIQ_FLAG (ROM_HEADER + 0x9c - 4) // ehptO +#define MON_KEY_GROUP_NO (ROM_HEADER + 0x9e - 4) // L[O[vm +#define MON_SOFT_NAME (ROM_HEADER + 0xa0 - 4) // \tg +#define MON_COMPLEMENT (ROM_HEADER + 0xbd - 4) // ␔`FbNEf[^ + +#define ICE_ROM0 0x09fe2000 // hbd qnl +#define ICE_ROM0_END 0x09fe4000 +#define ICE_ROM1 0x09ffc000 +#define ICE_ROM1_END 0x09ffe000 + +#define DACS_KEY_REG0 0x0bfe2000 - 32 // c`brL[WX^ +#define DACS_KEY_REG1 0x0c000000 - 32 + +#define REG_PAUSE (REG_BASE + 0x300) // o`trd +#define REG_OBJ_CENTER (REG_BASE + 0x410) // naiSʒu + + +//---------------------------------------------------------------------- +// ETCY +//---------------------------------------------------------------------- + +#define ROM_HEADER_SIZE (0xc0 - 4 + OFFSET_MON_NINLOGO) // ROMo^f[^ +#define MON_NINLOGO_SIZE (MON_SOFT_NAME - MON_NINLOGO) // NINTENDOSEf[^ + +#define ICE_ROM_SIZE 0x2000 // hbd qnl + + +//---------------------------------------------------------------------- +// o^f[^EItZbg +//---------------------------------------------------------------------- + +#define OFFSET_MON_NINLOGO (MON_NINLOGO - MON_NINLOGO) // NINTENDOSEf[^ +#define OFFSET_MON_FIQ_FLAG (MON_FIQ_FLAG - MON_NINLOGO) // ehptO +#define OFFSET_MON_KEY_GROUP_NO (MON_KEY_GROUP_NO - MON_NINLOGO) // L[O[vm +#define OFFSET_MON_SOFT_NAME (MON_SOFT_NAME - MON_NINLOGO) // \tg +#define OFFSET_MON_COMPLEMENT (MON_COMPLEMENT - MON_NINLOGO) // ␔`FbNEf[^ + +#define OFFSET_REG_PAUSE 0x300 // o`trd +#define OFFSET_REG_OBJ_CENTER 0x410 // naiSʒu + + + +#endif // _IRIS_MON_MEMORY_MAP_H diff --git a/trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s b/trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s new file mode 100644 index 0000000..3fc3e5c --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s @@ -0,0 +1,76 @@ +;********************************************************************/ +;* hqhrj^vOp` */ +;********************************************************************/ + IF :DEF: _IRIS_MON_MEMORY_MAP_H + ELSE +_IRIS_MON_MEMORY_MAP_H * 1 + + + INCLUDE IrisMonTargetArm.s + INCLUDE IrisMainMemoryDefineArm.s + + +;*------------------------------------------------------------------*/ +;* E}bv */ +;*------------------------------------------------------------------*/ + +MON_DTCM * 0x00800000 ; j^pf[^sbl +MON_DTCM_END * (MON_DTCM + 0x4000) + +IMG_CPU_WRAM * 0x03000000 ; bot[Nq`l +IMG_CPU_WRAM_END * (IMG_CPU_WRAM + 0x00800000) +IMG_WRAM * MAIN_MEM ; [Nq`lS +IMG_WRAM_END * IMG_CPU_WRAM_END + +;IMG_USR_BUF * MAIN_MEM ; [Ü +;IMG_USR_BUF_END * (IMG_CPU_WRAM_END - 4*32) +;IMG_SYS_BUF * (IMG_CPU_WRAM_END - 4*32) ;VXë +;IMG_SYS_BUF_END * IMG_CPU_WRAM_END +;IMG_FIQ_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*5 ) ; FIQ荞ݕAhX +;IMG_INTR_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*1 ) ; 荞ݕAhX + +ROM_HEADER * 0x08000004 ; ROMo^f[^ + +MON_NINLOGO * (ROM_HEADER + 0x0 ) ; NINTENDOSEf[^ +MON_FIQ_FLAG * (ROM_HEADER + 0x9c - 4) ; ehptO +MON_KEY_GROUP_NO * (ROM_HEADER + 0x9e - 4) ; L[O[vm +MON_SOFT_NAME * (ROM_HEADER + 0xa0 - 4) ; \tg +MON_COMPLEMENT * (ROM_HEADER + 0xbd - 4) ; ␔`FbNEf[^ + +ICE_ROM0 * 0x09fe2000 ; hbd qnl +ICE_ROM0_END * 0x09fe4000 +ICE_ROM1 * 0x09ffc000 +ICE_ROM1_END * 0x09ffe000 + +DACS_KEY_REG0 * 0x0bfe2000 - 32 ; c`brL[WX^ +DACS_KEY_REG1 * 0x0c000000 - 32 + +REG_PAUSE * (REG_BASE + 0x300) ; o`trd +REG_OBJ_CENTER * (REG_BASE + 0x410) ; naiSʒu + +;*------------------------------------------------------------------*/ +;* o^f[^EItZbg */ +;*------------------------------------------------------------------*/ + +OFFSET_MON_NINLOGO * (MON_NINLOGO - MON_NINLOGO) ; NINTENDOSEf[^ +OFFSET_MON_FIQ_FLAG * (MON_FIQ_FLAG - MON_NINLOGO) ; ehptO +OFFSET_MON_KEY_GROUP_NO * (MON_KEY_GROUP_NO - MON_NINLOGO) ; L[O[vm +OFFSET_MON_SOFT_NAME * (MON_SOFT_NAME - MON_NINLOGO) ; \tg +OFFSET_MON_COMPLEMENT * (MON_COMPLEMENT - MON_NINLOGO) ; ␔`FbNEf[^ + +OFFSET_REG_PAUSE * 0x300 ; o`trd + +;*------------------------------------------------------------------*/ +;* ETCY */ +;*------------------------------------------------------------------*/ + +ROM_HEADER_SIZE * (0xc0 - 4 + OFFSET_MON_NINLOGO) ; ROMo^f[^ +MON_NINLOGO_SIZE * (MON_SOFT_NAME - MON_NINLOGO) ; NINTENDOSEf[^ + +ICE_ROM_SIZE * 0x2000 ; hbd qnl + + + + ENDIF ; _IRIS_SUBP_MON_MEMORY_MAP_H + + END diff --git a/trunk/IrisMainp/IrisMon/IrisMonSub.c b/trunk/IrisMainp/IrisMon/IrisMonSub.c new file mode 100644 index 0000000..1865ec2 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonSub.c @@ -0,0 +1,300 @@ +//******************************************************************* +// IRISj^vO Tu[` +//******************************************************************* +#include "IrisMon.h" + + + + +//--------------------- O[o ϐ ------------------------------- + + + +//---------------------------------------------------------------------- +// WX^ +//---------------------------------------------------------------------- + +void InitReg(void) +{ + *(vu32 *)REG_IME = 0; // IME NA + *(vu32 *)REG_IE = 0; // IE NA + *(vu32 *)REG_IF = -1; // IF NA + + *(vu8 *)REG_WRAMCNT = WRAM_SUBP_ALL; // L[NRAM蓖 + +#ifdef TS_MON + *(vu16 *)REG_POWCNT = 0; // LCD OFF +#else + *(vu16 *)REG_POWCNT = POW_LCDC_ON; // LCD ONiTEG{[hɂăTEho͂Lɂ邽߁j +#endif + +#ifdef TEST_ENABLE_JTAG + + *(u8 *)REG_PAUSE = 3; // JTAGCl[u & `FbNtO Zbg + +#endif // TEST_ENABLE_JTAG + +} + +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- + +void InitRam(void) +{ +#ifdef TEG_MON + CpuClearFast32(0xffffffff, 0x01000000, 0xf000); // XgRAM NA +#endif + + CpuClearFast32(0, MON_DTCM, DTCM_SIZE - 512); // DTCM NA + CpuClearFast32(0, MAIN_MEM_EX_END - 0x8000, 0x8000); // CEVXe32KB̈ NA +} + + +//---------------------------------------------------------------------- +// CRC16bit Zo +//---------------------------------------------------------------------- + +const u16 crc16_table[16] = { + 0x0000, 0xCC01, 0xD801, 0x1400, + 0xF001, 0x3C00, 0x2800, 0xE401, + 0xA001, 0x6C00, 0x7800, 0xB401, + 0x5000, 0x9C01, 0x8801, 0x4400 +}; + +u16 GetCRC16(u32 start, u16 *datap, u32 size) +{ + u16 *dataEndp = datap + size/2; + u16 data16; + u32 shift = 0; + u16 r1, total = start; + + while(datap < dataEndp) { + if (!shift) data16 = *datap; + + // 4bitP + r1 = crc16_table[total & 0xf]; + total = (total >>4); + total = total ^ r1 ^ crc16_table[(data16 >>shift) & 0xf]; + + shift += 4; + if (shift >= 0x10) { + shift = 0; + datap++; + } + } + + return total; +} + + +//---------------------------------------------------------------------- +// C g`FbN +//---------------------------------------------------------------------- + +const u16 mmemSizeCheckTable[] = {0x56a9, 0x695a, 0xa695, 0x96a5}; + +s32 IsMmem8MB(void) +{ + u32 mmemExFlag = 0; + int i; + + for (i=0; i<4; i++) { + *(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = mmemSizeCheckTable[i]; + if (*(vu16 *)MMEM_CHK_SIZE_READ_BUF != mmemSizeCheckTable[i]) mmemExFlag++; + } + *(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = 0; + + return (mmemExFlag >= 3); +} + + +//---------------------------------------------------------------------- +// nt}f[^WJi32Bit32Bitj +//---------------------------------------------------------------------- + +#define TREE_END 0x80 + +s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp) +{ + u8 *treep;// = (u8 *)srcp + 4; + s32 treeSize;// = (*treep + 1) * 2; + u32 treeCheck; + u32 treeShift; + u32 srcTmp; + u32 destTmp = 0; + u32 destTmpCount = 0; + s32 srcCount; + s32 error; + int i; + + s32 header = ifp->InitFuncp(srcp, destp, tableBufp); // iAhXMj + s32 size = header >>8; + s32 destCount = size; + s32 dataBit = header & 0x0f; + u32 destTmpDataNum = 4 + (dataBit & 0x7); + u32 destTopShift = 32 - dataBit; + + if (header < 0) { size = header; + goto terminate; + } + + srcp += 3; + tableBufp[0] = ifp->ByteStreamFuncp(++srcp); + treeSize = (tableBufp[0] + 1) * 2; + + for (i=1; iByteStreamFuncp(++srcp); + srcp++; + + treep = tableBufp + 1; + while (destCount > 0) { + srcCount = 32; + srcTmp = ifp->WordStreamFuncp(srcp); + srcp += 4; + while (--srcCount >= 0) { + treeShift = (srcTmp >> 31) & 0x1; + treeCheck = *treep; + treeCheck <<= treeShift; + treep = (u8 *)((((u32 )treep>>1) <<1) + (((*treep & 0x3f)+1) <<1) + treeShift); + if (treeCheck & TREE_END) { + destTmp >>= dataBit; + destTmp |= *treep << destTopShift; + treep = tableBufp + 1; + if (++destTmpCount == destTmpDataNum) { + *destp++ = destTmp; + destCount -= 4; + destTmpCount = 0; + } + } + if (destCount <= 0) break; + srcTmp <<= 1; + } + } + +terminate: + if (ifp->TerminateFuncp) { // I_~[ǂݍ + if ((error = ifp->TerminateFuncp(srcp)) < 0) return error; + } + + return size; +} + + +//---------------------------------------------------------------------- +// LZoCgf[^WJi8Bit16Bitj +//---------------------------------------------------------------------- + +s32 UnCompLZ77Short(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp) +{ + u32 destTmp = 0; + u32 flags; + s32 offset; + s32 offset0_8; + s32 length; + u32 shift = 0; + u8 src; + s32 error; + int i; + + s32 header = ifp->InitFuncp(srcp, destp, paramp); // iAhXMj + s32 size = header >>8; + s32 destCount = size; + + if (header < 0) { size = header; + goto terminate; + } + + srcp += 3; + while (destCount > 0) { + flags = ifp->ByteStreamFuncp(++srcp); + for (i=8; --i>=0; ) { + if (!(flags & 0x80)){ destTmp |= ifp->ByteStreamFuncp(++srcp) <ByteStreamFuncp(++srcp)) >>4) + 3; + offset = ( src & 0x0f) << 8; + offset = (offset | ifp->ByteStreamFuncp(++srcp)) + 1; + offset0_8 = (8 - shift) ^ ((offset & 1) <<3); + destCount -= length; + while (--length >= 0) { offset0_8 ^= 8; + destTmp |= (destp[-((offset + ((8 - shift) >>3)) >>1)] + & (0xff <>offset0_8 <TerminateFuncp) { // I_~[ǂݍ + if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error; + } + + return size; +} + + +//---------------------------------------------------------------------- +// OXf[^WJi8Bit16Bitj +//---------------------------------------------------------------------- + +s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp) +{ + s32 srcTmp; + s32 destTmp = 0; + u32 flags; + s32 offset; + s32 length; + u32 shift = 0; + s32 error; + + s32 header = ifp->InitFuncp(srcp, destp, paramp); // iAhXMj + s32 size = header >>8; + s32 destCount = size; + + if (header < 0) { size = header; + goto terminate; + } + + srcp += 3; + while (destCount > 0) { + flags = ifp->ByteStreamFuncp(++srcp); + length = flags & 0x7f; + if (!(flags & 0x80)) { length++; + destCount -= length; + while (--length >= 0){ destTmp |= ifp->ByteStreamFuncp(++srcp) << shift; + if (!(shift ^= 8)){ *destp++ = destTmp; + destTmp = 0; + } + } + } else { length += 3; + destCount -= length; + srcTmp = ifp->ByteStreamFuncp(++srcp); + while (--length >= 0){ destTmp |= srcTmp << shift; + if (!(shift ^= 8)){ *destp++ = destTmp; + destTmp = 0; + } + } + } + } + +terminate: + if (ifp->TerminateFuncp) { // I_~[ǂݍ + if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error; + } + + return size; +} + + diff --git a/trunk/IrisMainp/IrisMon/IrisMonSub.h b/trunk/IrisMainp/IrisMon/IrisMonSub.h new file mode 100644 index 0000000..0450ccf --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonSub.h @@ -0,0 +1,79 @@ +/********************************************************************/ +/* IRISj^vO Tu[` */ +/********************************************************************/ +#ifndef _IRIS_MON_SUB_H +#define _IRIS_MON_SUB_H + +#include +#include "IrisMonTarget.h" +#include "IrisMonMacro.h" + + +// kWJ֐^錾 +typedef s32 (* UC_InitFuncp)(const u8 *devicep, void *ramp, const void *paramp); +typedef s32 (* UC_TerminateFuncp)(const u8 *devicep); +typedef u8 (* UC_ByteStreamFuncp)(const u8 *devicep); +typedef u16 (* UC_ShortStreamFuncp)(const u8 *devicep); +typedef u32 (* UC_WordStreamFuncp)(const u8 *devicep); + +// kWJ֐w +typedef struct { + UC_InitFuncp InitFuncp; // ֐ + UC_TerminateFuncp TerminateFuncp; // I֐ + UC_ByteStreamFuncp ByteStreamFuncp; // oCgXg[ǂݍ݊֐ + UC_ShortStreamFuncp ShortStreamFuncp; // n[t[hXg[ǂݍ݊֐ + UC_WordStreamFuncp WordStreamFuncp; // [hXg[ǂݍ݊֐ +} UC_InternalFuncp; + + +//--------------------- ėpTu[` ------------------------------- + +void NotifySubpIntf(u32 param); +void WaitSubpIntf(u32 param); + +void InitCard(void); +void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); +void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); +void ReadCard4Game(void *romp, void *ramp, s32 size, u32 cntParam); + +void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp); +void SetCardIntr4Game(void *romp, void *ramp, s32 size); +void CardIntr(void); +void WaitCardIntr(void); + +u32 ReadCardID4Normal(void); +u32 ReadCardID4Game(void); +void ChangeCardMode4Normal(void); + +s32 GetBlockSizeFromCardCnt(CardCnt *paramp); +void WaitCardDma(u32 dmaNo); + + +void InitRam(void); +void InitReg(void); + +void DispTegCheck(char *str0, char *str1); +void Iris2Agb(void); + +void reset_cp15(u32 param); + + + +void WaitIntr(u32 InitIfClear, u32 IfFlags); +void WaitVBlankIntr(void); + +void CpuSet16_32(const void *srcp, void *destp, u32 dmaCntData); +void CpuSetFast32(const void *srcp, void *destp, u32 dmaCntData); + +void UnPackBits32( u8 *srcp, u32 *destp, UnPackBitsParam *UnPackBitsParamp); +void UnCompRLByte( u8 *srcp, u8 *destp); +s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp); +void UnCompLZ77Byte( u8 *srcp, u8 *sestp); +s32 UnCompLZ77Short(const u8 *srcp, u16 *ramp, const void *paramp, const UC_InternalFuncp *ifp); +s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp); +void UnDiffByte2Byte( u8 *Srcp, u8 *Destp); +void UnDiffShort2Short(u16 *Srcp, u16 *Destp); + + + +#endif // _IRIS_MON_SUB_H diff --git a/trunk/IrisMainp/IrisMon/IrisMonTarget.h b/trunk/IrisMainp/IrisMon/IrisMonTarget.h new file mode 100644 index 0000000..b023753 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonTarget.h @@ -0,0 +1,32 @@ +//====================================================================== +// hqhrTuvZbTEj^vOp` +//====================================================================== +#ifndef _IRIS_SUBP_MON_TARGET_H +#define _IRIS_SUBP_MON_TARGET_H + + +#include + + +//#define BB_MON // ubh{[hp`ւ̐؂芷 +//#define TEG_MON // TEG{[hp`ւ̐؂芷 +#define TS_MON // TSp`ւ̐؂芷 + + +#define NDEBUG + + +//#define DISP_BIOS_VERSION // BIOSo[W\ + +//#define DISP_READY_CARD_4_IPL2 // IPL2J[hǂݍݏ\ + +//#define TEST_AGB_MODE // AGB[hEeXg + +//#define DISP_AGB_HEADER_ERROR // AGBwb_G[\ + +//#define TEST_ENABLE_JTAG // JTAGCl[ueXg + +//#define TEST_CARD_BY_MAINP // CvZbTł̃J[hANZXEeXg + + +#endif // _IRIS_SUBP_MON_TARGET_H diff --git a/trunk/IrisMainp/IrisMon/IrisMonTargetArm.s b/trunk/IrisMainp/IrisMon/IrisMonTargetArm.s new file mode 100644 index 0000000..10dab6c --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisMonTargetArm.s @@ -0,0 +1,24 @@ +;======================================================================= +; IrisMonTargetArm.s +; IRIS^[QbgIiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_MON_TARGET_H + ELSE +_IRIS_MON_TARGET_H * 1 + + +; BB_MON * 1 ; ubh{[hp`ւ̐؂芷 +; TEG_MON * 1 ; TEG{[hp`ւ̐؂芷 +TS_MON * 1 ; TSp`ւ̐؂芷 + + +; DISABLE_BOOT_IPL2 * 1 ; IPL2u[g + +; DISABLE_ENTRY_OF_ROM_HEADER * 1 ; ROMwb_̃Gg񖳌iTEGpj + + + ENDIF ; _IRIS_MON_TARGET_H + + END diff --git a/trunk/IrisMainp/IrisMon/IrisTegOnlySub.c b/trunk/IrisMainp/IrisMon/IrisTegOnlySub.c new file mode 100644 index 0000000..1c6cbad --- /dev/null +++ b/trunk/IrisMainp/IrisMon/IrisTegOnlySub.c @@ -0,0 +1,220 @@ +//******************************************************************* +// TEG胋[` +//******************************************************************* +#include "IrisMon.h" + + +#if defined(DISP_BIOS_VERSION) || defined(DISP_READY_CARD_4_IPL2) + +//---------------------- pbgf[^ ------------------------------- + +const u16 samplePlttData[16][16] = { + {RGB555(31,31,31), RGB555(0, 0, 0 ), RGB555(0, 0, 0 ), RGB555(0, 0, 0 ),}, // Black + {RGB555(31,31,31), RGB555(31,0, 0 ), RGB555(31,0, 0 ), RGB555(31,0, 0 ),}, // Red + {RGB555(31,31,31), RGB555(0, 31,0 ), RGB555(0, 31,0 ), RGB555(0, 31,0 ),}, // Green + {RGB555(31,31,31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue + {RGB555(31,31,31), RGB555(31,31,0 ), RGB555(31,31,0 ), RGB555(31,31,0 ),}, // Yellow + {RGB555(31,31,31), RGB555(0, 31,31), RGB555(0, 31,31), RGB555(0, 31,31),}, // Cyan + {RGB555(31,31,31), RGB555(31,0, 31), RGB555(31,0, 31), RGB555(31,0, 31),}, // Purple +}; + + +//---------------------- LN^f[^ ----------------------------- + +const u32 sampleCharData[8*0x30] = { + 0x00011100,0x00110010,0x01100011,0x01100011, //0030 0 + 0x01100011,0x00100110,0x00011100,0x00000000, + 0x00011000,0x00011100,0x00011110,0x00011000, //0031 1 + 0x00011000,0x00011000,0x00011000,0x00000000, + 0x00111110,0x01100011,0x01100011,0x00111000, //0032 2 + 0x00001110,0x00000011,0x01111111,0x00000000, + 0x01111110,0x00110000,0x00011000,0x00111100, //0033 3 + 0x01100000,0x01100011,0x00111110,0x00000000, + 0x00110000,0x00111000,0x00111100,0x00110110, //0034 4 + 0x00110011,0x01111111,0x00110000,0x00000000, + 0x00111111,0x00000011,0x00000011,0x00111111, //0035 5 + 0x01100000,0x01100011,0x00111110,0x00000000, + 0x00111100,0x00000110,0x00000011,0x00111111, //0036 6 + 0x01100011,0x01100011,0x00111110,0x00000000, + 0x01111111,0x01110000,0x00111000,0x00011100, //0037 7 + 0x00001100,0x00001100,0x00001100,0x00000000, + 0x00111110,0x01100011,0x01100011,0x00111110, //0038 8 + 0x01100011,0x01100011,0x00111110,0x00000000, + 0x00111110,0x01100011,0x01100011,0x01111110, //0039 9 + 0x01100000,0x00110000,0x00011110,0x00000000, + 0x00000000,0x00011000,0x00011000,0x00000000, //003A : + 0x00000000,0x00011000,0x00011000,0x00000000, + 0x00000000,0x00011000,0x00011000,0x00000000, //003B ; + 0x00000000,0x00011000,0x00011000,0x00010000, + 0x01100000,0x00111000,0x00001110,0x00000011, //003C < + 0x00001110,0x00111000,0x01100000,0x00000000, + 0x00000000,0x00000000,0x00111110,0x00000000, //003D = + 0x00000000,0x00111110,0x00000000,0x00000000, + 0x00000011,0x00001110,0x00111000,0x01100000, //003E > + 0x00111000,0x00001110,0x00000011,0x00000000, + 0x01111110,0x11000011,0x11000011,0x01111000, //003F ? + 0x00011000,0x00000000,0x00011000,0x00000000, + 0x00111110,0x01100011,0x01011001,0x01010101, //0040 @ + 0x01011101,0x01110011,0x00011110,0x00000000, + 0x00111110,0x01100011,0x01100011,0x01111111, //0041 A + 0x01100011,0x01100011,0x01100011,0x00000000, + 0x00111111,0x01100011,0x01100011,0x00111111, //0042 B + 0x01100011,0x01100011,0x00111111,0x00000000, + 0x00111110,0x01100011,0x01100011,0x00000011, //0043 C + 0x01100011,0x01100011,0x00111110,0x00000000, + 0x00111111,0x01100011,0x01100011,0x01100011, //0044 D + 0x01100011,0x01100011,0x00111111,0x00000000, + 0x01111111,0x00000011,0x00000011,0x00111111, //0045 E + 0x00000011,0x00000011,0x01111111,0x00000000, + 0x01111111,0x00000011,0x00000011,0x00111111, //0046 F + 0x00000011,0x00000011,0x00000011,0x00000000, + 0x00111110,0x01100011,0x00000011,0x01111011, //0047 G + 0x01100011,0x01100011,0x00111110,0x00000000, + 0x01100011,0x01100011,0x01100011,0x01111111, //0048 H + 0x01100011,0x01100011,0x01100011,0x00000000, + 0x00011000,0x00011000,0x00011000,0x00011000, //0049 I + 0x00011000,0x00011000,0x00011000,0x00000000, + 0x01100000,0x01100000,0x01100000,0x01100000, //004A J + 0x01100000,0x01100011,0x00111110,0x00000000, + 0x01100011,0x01110011,0x00111011,0x00011111, //004B K + 0x00111011,0x01110011,0x01100011,0x00000000, + 0x00000011,0x00000011,0x00000011,0x00000011, //004C L + 0x00000011,0x00000011,0x01111111,0x00000000, + 0x01100011,0x01100011,0x01110111,0x01110111, //004D M + 0x01111111,0x01101011,0x01101011,0x00000000, + 0x01100011,0x01100111,0x01101111,0x01111111, //004E N + 0x01111011,0x01110011,0x01100011,0x00000000, + 0x00111110,0x01100011,0x01100011,0x01100011, //004F O + 0x01100011,0x01100011,0x00111110,0x00000000, + 0x00111111,0x01100011,0x01100011,0x00111111, //0050 P + 0x00000011,0x00000011,0x00000011,0x00000000, + 0x00111110,0x01100011,0x01100011,0x01100011, //0051 Q + 0x01100011,0x00111110,0x01110000,0x00000000, + 0x00111111,0x01100011,0x01100011,0x00111111, //0052 R + 0x01100011,0x01100011,0x01100011,0x00000000, + 0x00111110,0x01100011,0x00000011,0x00111110, //0053 S + 0x01100000,0x01100011,0x00111110,0x00000000, + 0x11111111,0x00011000,0x00011000,0x00011000, //0054 T + 0x00011000,0x00011000,0x00011000,0x00000000, + 0x01100011,0x01100011,0x01100011,0x01100011, //0055 U + 0x01100011,0x01100011,0x00111110,0x00000000, + 0x01100011,0x01100011,0x00110110,0x00110110, //0056 V + 0x00011100,0x00011100,0x00001000,0x00000000, + 0x11011011,0x11011011,0x11011011,0x11011011, //0057 W + 0x11011011,0x01111110,0x01100110,0x00000000, + 0x01000001,0x01100011,0x00110110,0x00011100, //0058 X + 0x00011100,0x00110110,0x01100011,0x00000000, + 0x11000011,0x11000011,0x11100111,0x01111110, //0059 Y + 0x00011000,0x00011000,0x00011000,0x00000000, + 0x01111111,0x00110000,0x00011000,0x00001100, //005A Z + 0x00000110,0x00000011,0x01111111,0x00000000, + 0x00001111,0x00000011,0x00000011,0x00000011, //005B [ + 0x00000011,0x00000011,0x00001111,0x00000000, + 0x01100110,0x01100110,0x11111111,0x00011000, //005C \. + 0x11111111,0x00011000,0x00011000,0x00000000, + 0x01111000,0x01100000,0x01100000,0x01100000, //005D ] + 0x01100000,0x01100000,0x01111000,0x00000000, + 0x00011100,0x00110110,0x00100010,0x00000000, //005E ^ + 0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000, //005F _ + 0x00000000,0x00000000,0x01111111,0x00000000, +}; + + +//---------------------------------------------------------------------- +// TEGpo[W`FbN\ +//---------------------------------------------------------------------- +void BG_SetScreen(const char *srcp, u16 *destp, u32 plttNo); + +void DispTegCheck(char *str0, char *str1) +{ + s32 i; + + *(vu16 *)REG_POWCNT = POW_LCDC_ON | POW_2D_ON; // eWbN p[ON + // OAMƃpbgRAMփANZXꍇ + // 2DGWONɂĉ + + *(vu32 *)REG_DISPCNT = DISP_GFX_MODE | DISP_LCDC_OFF; // LCDC OFF + // VRAMݒ + *(vu32 *)REG_VRAM_ABCD_CNT = (VRAM_LCDC_MODE | VRAM_DISABLE) <blankingV == 1) ; + while (((vDispStat *)REG_DISPSTAT)->blankingV != 1) ; // \ԑ҂ + + *(vu16 *)REG_POWCNT = POW_LCDC_ON | POW_2D_ON; + + // {LCD؂芷 + + *(vu32 *)REG_VRAM_ABCD_CNT = (VRAM_LCDC_MODE | VRAM_ENABLE) <wzL(CdnoQ}0m{w5c&vU3joGLXjX58w)a8kbYFyAqzLsBBXk?!G_()(gfRe} z0A5}QU6moU4(R#`=*fXT=K(eaLj}>rM`oHY_lA5IO|yf7xSW0ix!mAkTqOOI2#^>D z7wZ$}(u7fB3MdXlo9+FvZ;;*4mQR>5Q=XgJl!`pfIF;%eKR`R6&}CAp(8K#fBg;;- zu?el7(AW76Futxor^1V`4Z-(GwX?ODW`~w#_iRI2v=ZH->AOqlXtbKycd}oMa*7?L!M;zC6PG;zF6d?COA7! zIzWa+u)oayFnh%te5t8|m|??_JB5e!4M4*P z93|RV;kzgtkpzYY+jbHrcfjd`U@Qx8tTUI{m~jjaW*!k@&N$$Q^QJIa6l5Ed_9yZ_*p&q^3r5 zB823=bx7t`SE%IHVG^-~ZW&0^EgR@yN(A}-kY7uO`}kAqlyBd)_l3GVS|Rp=8Tj=- zDPPqyJw2dyA^p}n+=ox?Rla%G*9mGfY1&&Mwjbji6UQ3Ld2lkm?RUUi=jSU$_9YHs z&^Xlq!&axQZs7sbRJ+CeJp;W_5FtVKWe!#-w~immu9X*RP=tzCctDaaaSpXx4ac{} z2G2j{KIyaL?k@)4UfvwK=cD89qL|$u6(`J_SrD=zAw$%);G8_l;HvcfNMYFPv2^U= zPhSN;{~$2;W$>BI;n6>Oxy(D8Ica3jC$*!;_S5vK8~s3^HNPd?f3o6JzsX5H+1^X1 z-$>AV_aA$4LF(vr9u@NsgdLvWnO>STV$x^*pU?YMF>;dMhr5<(QdbYn^<6czeewNI zH_mAK^umC3s?P^4Px-_1--8ZM*!j6#@oo0B*irtsGN#9FNlG6az2v#3BX#C#PizQ~R(JlPAsN54c!wdA~iu)pOhlcMh2tfA8Hqmi? z`CAPNrh`fbA?uQ$Quyr%+BS$=yW*p@9|e#LC8bKcg->}0t@voSc%kITptd@Ki&+tY zD2&h_e;CgTSVoY_l0?y9Lr6Q^2V{Ab-?wOriVWQ9^Rde8Ck|ApeDSwFuG+8=r+S~@ zDJu1dDJoqc)QJm~j^?%JEtj6hqO>_$sYkSm?`epL z%9D5J5+ic*>@bS6jk_K7N5Q7ar1+3zv$Cx&-Fvy@JCGHo74QG&1QqfX*LiP6zTO|{ z{N@mW(|s~k397B$Gx+|&k(@wsyWn>`ketpRpc+C-R5jioqeJnp#1i9jKdRP#9GCL( zbuquk`xO2bzkyTa0+)tm=6HVXMhQ+KIp@wsKOZA6Ala|;`lDuj?0(Jg01s@R+Ku`_ z6BMvl?MyjI`P{^SAJkl^fs;WTJigat-lpCj?`x>zBkMNxMh&xDGg|4ERb53IXUWfzV#8(`$Fe!DrVo1) zdoQvlK-+P;P`ycm?EBj{s8>Pi(}DU|AXagHoB}tBzlcAKpBLl%k)3Q`F5!i}sB`Vl z3Mz~@Amoj3vv^f}?etagQmjZ^gq;@~VZNZ&biZe{C;gt(W~q@~;z0H=fFTYd0Nc1! zgEp`O*#WtlTs7UIpgFMGb1I$@5p>IH8iU^gIIBx(PMQ7qi}Lvs2tD00mqsP?GzoyY z#qqIP2NeFR{ZsYlakzFG3#fSxJpR83YKvOjBMN}nWTOu+jO>F0LE?Gz)^<{``d zTIyN-kK(h`X7Mb|c`+8?fg?M=b-CZ`dR>f@R;}T6*W@@}05|i>oFp?QGPfuSM4OCK zsnHlbM%mXgQ^@z`0Uc=$BFdst8>LKnzO*k>H`T%S7eV?jN12rGErwj8Ly&3`5(UI6 zs(@NW1Z!XpWFPNn5UeqZBAfyQdSoBtAOW+t#Ry}RYF;)!o2TU!897E5UY;n5uO}jy zF#{ZAl;B;yp92Ljy#?7=@J!xL0mETlFcOF8o;??#7O<@f z0oMu(Lg%2}9E7+efw)MAaiQ}{5r)77a4j_YgUwZb4Nr#^20HvKs9%k%u*SuEvMalW zcW$53tCm;U-n>ug-hB?*n$vlcT{$(Z!aYh}ZT#c|lD6hOa7I+qnS5(=c(>licI}RV zn;-sWG_nv9be+1?C^Q=>SGK6pl`ZMT++jCg8-Qm=$|5Ybz#%5v_^az1NMn8jZR9l+0=|y25?el#noDdQ#THwa$zt2e z=TU07-?uSoETjTRKQ!64GU=ya2lOs}D6BBq;sGX{gR(KRVN;2m`f8hu;u-UrnDW?nHxw*T4<~Qt@-|k9^Na2KcS@Zze_u zd>L39+4$NW5c z%;?jjl%o!fBu1_nQ5zK!m96+?c+)VCVZ(+_9`b4A{J}X93&S(RrVWZ7C=G23xh&rz z`=q~raBa|+fujSOiM9R%{LV-|@_p{TRLtwM-m91AS03)}>)bf5xxyEMbpCax@!WED zAZsIr(7(Ixbi}tGZ5`m)_SWr9!K?Nc^X<={W&QQnlkCTihxyI!4|d%j(Rkgqfbzaq zb!TpUaGmY;j$5DJjJ(0Uey`?a_4n4VEo-i>zOwG}mP-dNUbyh=yzlv>bL-FEI1_wk z*=g!j+^G{)Bdh-WGx^V_mFp`~!#%8)w#^O*-d${@M8p7YJ!9yQ3w$Su`P8pvX31=Un z6c#XDz%JX~!nHu+eC!i4UqW2t=ZKug(TLXZ~ zs+-1w|BRKbZCGnsL-C05g!y63=wll@Jde#b zPr!jTP-Qb3S0l;u8;WPH63 zy6H6{KSmGxU|P$4Oj~&$Ba{s;pf6FPrHQ3AHI5&=ielQ_61fc=-~*EvCa$t!=9LXB zLP-e|lbW$a7#BXd0rctxW}Yu8Q{@B5+kig(JKvGf=L~<@#^U?3-LPK5)F=S@a)G`< z-Skas3}xs8{5(C-2lB!2li?9uNT&v>Hu~ zn&d)?>E~wTH}J;w$Q0XH1ioHj1J9V+fEBYFifl59V~V4A)S&LVy?F)HUZcsz==q9b zcN-0O#9#8MlrK#-G0gY=Tv+128tmO`oYuHXYpMjDe8B>1{Lfud&O7HX7zIAix(;s( z3hQ%+Z6GD7++^240k1k)a?*!oaMpu$FG==mt$)^B4K*C-;i6}1+UuK|du#%Gd43t{ z&pX#w5DK_vcMPzgAT&^Rhh@MvkrHg{G{A^`8!2!FoCkckhVRMYDpJA=oI&DNH)D|m z^-uPD1=y;)Tk*}L1pk)l^WQyQ*I#R9y|Y3@<)U*z0=gx=Ny!-QFxT(N!QFGcvI-b#0-nEH*Wa^r zw!%_#qwgy$~`465+?~35?m(=MR!C&3h)FU)19gA>QQqI zT12p^nSMfUkgH6eI246C>V+EN1b(JKw^Qk2#Rdzsf(#VGvK&c^%VWEIn~3HjFT=QaaZv7MCgis&{(V z>jxS^FQ%2Le_c-*FacJB>7hlKP^NV6ro^CoF3$Hnx z+m<_OS&}M_kA>pa-hr)C)`&gfSA)C)+oyoP(_Py>WvbX1cw33pPF3R6ayh!QTzau@ zPUK{jufUh<>q-wmx9Px<^Opxs^+{6k1$-{wm6k)DG-v)Jo}|VVFt#m8QWYU#VB3_9 zs7Ne;)B`UPJHJa8FDVj_SO&5JG(ZcMBo=s#n42?~8y6+<$gIw!TmI-$7&w6?DuupB zb{M%S1bLBY5OL0^Ug4`=AF#sc8>ciX7jNWlbR}WULj!#=<=i&$pJ~0-y#nhnp4K5Q z)OxDD;?8M%sh!dgfr@o8QE@- zM5LHdnAfIB`50TGn2FgPv}0~>b?QZ<&aK(bQa*?2#|rf22;;oT$%~7ew{o|-daIJ=x&;NX*(BS7?86-d@OLRaTKmtw zb)N;`nZ4XY?UCS=snC@vec+TSw2r<)sU{o+;CixKT3hQo=b(Yk7A%P1BG=Xoy5(Re zHiR6?4t;wE1%&9wXnUj{p}+M=VY!>yEuO(yqV%l6B1@F+w;0TbaMlbBWF$qA?TfXF znVolvqg#?%6*^4u_s;%<#|-p|VLzu!akU1oG)Aw`$1-(5GuKJ-n;g627WbRfO|6(+0fAi zk%H$Cx5lJJ+;e#!5P0!I0xR|+jCf(%NP@)Ar9IU=QS)YYwOr}~Icj|jk%rk_kKmW? zdZc-z<_6F$uAL9x<@lXbY)<|5Qd~mmTa1iiUU-F4xRG7o5Wf#iOTh+DOQgDU_u}Oc z-*}3+8=N+NsdIvenDbZn#c0r{wG~RN9v}9lR>nr2+$~)#rCpwcPIXNaEf#FxZ{U`6 zwe0KCVb*vopi;~);ROoAF?&ImHt?=;%pF2ki*VIg!mPq1tCRs+td>2{zcwD)Bz0&| zuUeuI3#?;_RfN&G;@h@xbLVU~koE>^sRD^)1)VyuL{!KlEB1+eq$)p;7;%<)uK*w{OG z2@6_zB@p+rVh}0B30B~aEMI(!%IIWtLpV>hLIbBTa4Xv^ULIef;;BsOsNX}l`zrh9 zM6d!}C0#8|ba){va4VidVng`@!;R1DxI~l$vsZN@Ip50O!YYB=N5Lv)u(3C!YSb(A zYOO|{_qiHTpQ{;};u-N0gfqFqGz@a*(nMjLI%I$C5QSmZPc=BTGmK@Ot@#inDxkyR zKSD7{=3dQE?P^U`V}WGGEhXQgRU^YI8OQpGW)k#s?Z60Lu_Dan4%1IyL0bqpUW>Ni z5om*d0GB`@H|9=cUrdkGK+inP{&}Y;j9>dd=^Y02V#BM$Q2p))aq6y?QJpB*NrGhR ziMW-)Jivkx59dD1hBy?>?A6}60aj%H#(~*mJ5ksx>%$x*vs)i7MlxrM0w^@AUImKD zW=oW&A5eL;{n=bwGundWPIu52{{Xl*H*jGu=XKs_j?nZ`V>4rBBIyP6Lkh#;?^IX> zU;abl+d9;rRf8%+kFne( zMpGjx#6oO{FR?!vi$o;on9z|>Blrr14u?Bs7-CI`LM$ObI>e%k0CoU)?s8({Pc)6X zpbz@QABp;pg)mhKfCz$6QJ~8J(jkr&4tjqZ1gao@#RA)zC5HUTu_8pnnuJ|0@9a;6 z&`wcou{57TD8GS;0o_$2-Q75ru2hLE`q=3bmeyV#9TOKbIc7$T|G|}ItPC`OWg#<= zy{MH_k`L)hNLh1AVk##N6ti@PC<+*2W+U~w2WZGSt1-_ zfgUy^q@ETMe!Z=%;9$L2A__O9-qM+7qJFdHHqERxmCnNQq9x;hPLP6%v@{Qr#&vS44!9 z>|!SiL+KVBDP|Sl(vd#wVto6~IlD4269O9(8NX-}n65QBmtBLm=xa?p;3t>`KtK(( z*%_n4x!0Sb*+xiDH*FSRAO}6=ZeBxtjsrfRh}ho5_?N=)?Oqs^5pk*s#OyKSdq0J} z7y@~T{;MW}`l^YKeP{!}5#H&N8^NEgWrJVKhPN_)b}YrTIcPeh2z_W{LmwRaKw67K zABZh96zQQ4v@vl;CN}s#=Z3gL_uM|r+zifl{UJ^nVnH=FtEdLv0i&r6PF!lU5acJ* z_<67BM>Ej?+~NT1_&g1^ zg$&gSZEImJV~hf9u3N2!by4d`@os9w;?4{#5CzE$MkxmJy_VV#QyL>t?TQJ_K%u=X zQjmKd=xQPt-ViOMA2FY6B?(L=)#DWN_SfM^&qSe5tOE=rAy$sG$e^y-VFXVKCmzlt ziHGxh6S{>Mv9E98qEIR%%iUmlJ?)jZ0+D(BUZG5MK1$yG&^Bn0UD zobFAP$=z=AB)=*u=Bi?*XBy$f$ydktb99TAmKl&N(!!>usEtwZ_G8fLbx?B^=+o)v zEJN~smWNA`EWjdLj$}C0$`(ney~{}P-i4TiR6wNtx`6A^8>5Vb(&ypQMAZuSy-O2G z#N}J|FOV7JfC00DeM_;VJe5q}qt%lASa%YMf#T^%*Zgq|8pHx?8gUI;EwxN*ShrbW zDA+7RHB*`yj`naf!Quuyjkjz7o-=eOwK6;%^Ny!1E5pATjz~&ta0=#<0}L$SpsQs^ zt}IurGP|4fy6%+H!(0~aatvtEE)qf?AB%J`kC06fh|zTvfCdRIWDG0QU6Qdl9A>e0 z5vkhccz16O#nfuSHvYAZNM&})Y?T@8QXa{yD%lV3UeOQrT<~T7kx%RxinW9z^tYVt zjzLnG2c*Q$-19FzMju-R8s6Cwor!0n5X_R4hA8h;Bu5qjc;=O<`dEFri$rcPg7kP< zn032bP%r_zB(T7G;YMX!R>u44>VP&wSFrv;H+9dfp{e>~%>3_5^U5-`!Ar7O!`ERO zax`FJ8D!Z5vcv|X%(YsVJzc`&c-4E~L#lHr_P1dWi7Af3w(Wu&r>DPPcYlrrg>bCNk_WlX8Lkuxaj{al zWlFr7D{0Q)Qrufq23Xg(!NQ?XjVXp4GTrZ9{kRwunrvabt56zArD+2)($dfXWRawW zrZ%NMTqavosKhM$7VcYsN*KvxJ9Ii?CcA{1kCza0nU!eui*%o+mg%(GhigrF|GP}~ zNT4$#fq|@V(I7WVLQI*#w5W$`$ZA`ZvDjMzmgH7n&_Sy^*%VV|bWc_*k!plHP;Rgj zj2v>_(~Qi{_sAV1f1+|hRxg8b0INDaJ6R$~M^tRfo`1$~68 z1fY*JnGnOUin`?|9HfttI^nz123nw7YcV|8*~OfMm+;aq(}#EWejO7e6~y%dAB^kZ znLYYy{2cY#*j@(gV4^F>%2KaTVl~Ci$btefh{!PhyC7?_#5ui};jd-{R9XxO-((Q0 z5I(v4mu|7qVihl)S&qvOM}uOJ8G1maNe?HXmqSV}PBtB>Sz=Gp*CI z1nCg%>0UGFZrE`_y0!VDVY=j^ep?LPa)#bE9#x-fMu8Xg$$bUgxL-s45juX6HkQei z)6-FY{-0}^*bA$mr|w63?ObPrFrb&pS%EXYv(%~SpOMMx2&Mak%-sKlwP!snc(bNkhS4loBSKoZ zBZ*+SB#Hctr{STR@nkY@q2F70$NivuUCfeMOR^4Up7$vd^|@07@v0(eu5R?Ys97^( zCaBUSKDtzLsxpqu`7DlPS1m1|TWaa3&oq9|tfLEZwI3Wu<;echfgk%aCZdQh=&07m zww2!tytotDA2^&ObWm5z$F1Wnqg);a29m@8(u#sGIm?2}N7kR4AXMe9R%9q<=4J%> znByg6hqkLFwsnx@!~|_o!y1t)b)87n@P$Z)ghACu5-OG>C(T zs@>YD+shlGh?=AEZq@G8X#6^@bW16nU6_;oYvIenCF{`u%tA})fWz5s*?7?In2~d$ zGJr$8iuHY}eRPiXqu0|dQ|QsFqjWZPv`Qn1(u#FzGAd)5&kIemI7vAoD~VK-xbVp8 zbqUPZ2vHeZlw!;GF*AI2`{k@>ZiU@`&6;%ah{Z!C$w1wl!kHwW9c?`zX=(1T&W}kQ z&wTeX0=%Pf4(7~mmGq3-Dq*6Gt-3ABL)KYDx}T*P3!+<;^oYfgfQMf*wQzx)ZJ8yL zSm(=qfY)0kuK?d{_Pk`AuMZ@=D)f$M3`CHWc8W4ewAJHYTirf@S&G5ZY$92U5BQKBZ!Ac^}_feDnQj9#J zOT)UA7G^lV(}_B(VZjXTRuZsD^ZvCHm$uGZoVJX@2f}w&6!TpiYanhx zvIUj}AW;h)icHdve;vU}rR&23+`;lNHe-WUT8o+$5WyAa8NjxkVMT-F*0E|NbZCO( z>6XWxOVV32*D5E&&ZdxwR=&TWaLKw&N>3|Kdsz22&Yj$#bhRE{JYsQ?crifR;vydn zmt(aJ_xfqtA+6*4c&6Mvs5Xxw#}hi_H~Xf zXjHSMCzcfXg3$$IZPxb8CFx$^Wi6>fsLvjR!ompE=jpT3iPRh-e&(W?^Jb-g4qhA1 zB3N2BVVLij2eW}+frtz7VvtjeXluS0kEFNf>0>M7+zZdemn^|#Y^$iq%>TSPC3AHQ zE^D{AuX8VOA~5o8vl(#Z6O}vK!MA`H_ydfhi@;d%iOvp63qt_;@Ri&r=Ebaio&;a2jKsOCWseQcU#&1@Q*J^~f?)7HMS> zx8|kH+Z|V$249exc+ggw>2BO8DNQTQO7=rmmZ>z|1ID?l)^v|c15VIH$--L;x6Jik z$WVh@Z!Jw($e|JoQx+B%mMpXs-db2PCq+BWP`dy(%>$pwU6n-{D4rlqcHfdNn`iZ2 zRBB*GvaHh<0j@>27Gb8x%^w4Prj}y?Op5^1BEYn$2%U>qq~?*)Eorwh3zfsIm}v;K&ytU^PR**#+yHjfd}%1PK#G}U-Sw@O z+469!_d3i(Kv}%5P${==S%S%hR^MD-r|E9fdF+~`!a^l(-3Z#c!}@W&xAoSXsmn;8 zEdaLx+`(gUv(nP3^A*7Jgt(-u}SvW{Bk^@YtyQc` z(T>-s$;32fmqb!zil^A}$M1FlGsOTsxV*tC%4ELC!^rdesGZ4TchKx5T1>DUP71`H zYK##`C?d~em}+dqc@zfRDO7SSC7}IC*OIwK5M>sIhimv^?{osz?9+|2!YW!Xl17uF zO!w7WGO@}YUhTF9X_$42vu>q*+Z>>d)*+o*l?eU>mBc% zjma@f#nO~)QQyv%sqN@Ef^=0!1-yb`)=@-7K|)hS?jn$g&X(d17PSy+J6kq(w>yE) zS5XiJdk&{g)73(?>L4<~=ov=m{O9~YT+IwDa9|K&gOrhbBm6@mD~KW5@;MhIX8 zfcv}xB4iEdAyQ&$=#BHBKZ5u=&yUGqIE&5UI`Q}dXQ7L$o5&qLw(;uSM=bFpf@C3~ z;X{TgMv=;K>In&nAEZp1p@kuot)cOL(}U)Rj~+j8r0de^auhbgMCMMSj7` zRjUh&)~wZM&z(1a!NNs`oW)DDGgH&jXU+apHzy-AF)4ZS2mhM#Van8L)5&P1YTWpk zShXfDK0IP@4-{fvv?RVp+^~v_( zC71e)-=XH!?;rAtU4C@cxsxGp!Y*Fy7ra2u>7N^P4IwuY24HzBR^+?o3#(Z9SU$Uo=ZgR7@~4wCSHR&1(LX26 zDcva@U9dt>aG!s`J!ox-8NQO;m3+c`6aNY!iiwMJ^pAL&a`s{5ipDD^SH8aY)s=XD zXg8(idBVI@txUDJg$q-6|p{0;6jPI$~#Y=M*D_|bNe;S7L(`2+@DM0nN^C~sp-?JB{p@cKgYjjZr(FIGKxjjGU@ z6@I<7mZKR&8Yf7wr+t9pgKvF{zbT%!{BE%#f5l)yS-FRiol{lPn5wXR@=?saD!Kpd zPnvdoFbAnG?0VWei#t^K`yX!(yq(UiwVSsd`|RgA@$n&UtEJO-3q`fRh-SU4Up2kT z*IJRZxa7ft&4+H?i2}#0Zuph?SFXx#)z40htE)YJKlEp$nY=rZ+m&^ z*x6?}2k}ti>Xix8tJ97y{-Uimou%*E()!(gV!@#PpXVnhzKL3v^4q@;|LbL`OD$*3 zk2z&WfR1Hb)<1Zt-uP_M2i_~icW0=16Q=3rEqxGOkgvXG|6};EVHtBrH2wVTmSTZ7 zD`@`8pY1~roPK&weQf6X)VQ&iXAItS;L`6~LWHxvOw{Z@dQtva_^$5~KKX2Z#>A8y-!r-x5?wu*n?^MjkJ=UBW0F73XYdt!<6kz7&2k0JEn4NiH9 zduAo~4xjhy_}T0O(|(-3qPjr+*T-Uc`rwO?<5P})g3qXXKCO1qXFu1SdNOJD{G^2` z7eDhF`}*UrliPOA^R`V;5AnY2UlQeMH7&osXn34Y)7y~Gq^qAs>_NfbH48*IXGR_` zuY?FFEF;IQ%=6;t#ucioPbq_@ZRniVYw*JW(KzF|fI?ngp{G~OPp72&rTb5RGqaFa zoL-oD>frRiQ{(f)3g@KU{C3Y)FX_6aYW@CCAK}wd1HUhKDLy@BFLGD@ShB)3WoF4? z@5Fs!^(VGOvkS*Lqj5ny3X4Cwh7#oSK}#Sa_`si}0AWP%=2PqVB$St*G4h#u-MLGk z^@-rb3+C=L>XNWK4Y-0Jot-}1OipLgMdn0EbpiA9is4r2>Vp4lL?fDcV8<{F$3gr3 zUFu2U|3t+iwBsfHm`O|DrT(va%AN1ZbKcO8X9dImZvuD@!0(SxUjU}=eTav;e*w$^ zSOTyQ;3&XVfJT5f02~?UL;!z)zsC-LFVED)zbnfj?+o88GzY@}wSo@f!G< zug%ZPU%UDH!&jS;Hy}Yr!BIc)FJ{jF%mSq~|4;y>mH*Y&-2~|2o#79L1})632UrHM z4ghe*9mh@>PLj>h+7f0NJq5M?pTdgf30eP?3YsUqS6bCP`MuJb<|%-L3oK*iItciy z04xA^0iFW10l=JTu#S(Jb)*~K@eWFBuBX0NT6tajUg`QLiT`x`>iX>Wno9EOJ~gcS z6~Ut?`i+@a2K%J|hynNjU?#xl0NrcF8U7X2WEoa6i|sDeX!Qj!oH3TV={7;%G647^ zQ>KJhe7|yBk z^KT=@jr6^?=cn_mp+f^-{r>aW7ekVw`#(Bz>Yi89jETW@Wk>IL$BYku`|Hk%rr^0htXBWF(^()P!`D`>=&QNkcN-JN=;sqg5`=f9$AcMa~!_Z2tYoE6E3$BV6nDoP6m$ zd19{@f0SN$6Ev~k+Z($Nz3dY|xo`XBA8Q3e=1i8fAN`SH4WBMYb>IE^fIDUk>&b~- zwVZ(|L%B~6oow?-oE_#&?LYgbPtrK&H^)uYZ-`jmH+T0Rb9j!6_v*a%tIatqRnxnp z>fn7mGKoO8eMcU#hesm&nV%?5{|TWS`-!ui-kKDd;QpbjZ@gj^0>_yHH{be3dA8m! zKkaaj8tp;XooEt-CXe>&yjpo54~_1NH&^`mkR8$=e`7sjV-q9#@m^iFwuwin`}3ci zuX*h`bdYP?_2W0*dIa~PAD_MS#!VL18#P^dzz-fXtWVdyD-Adi=FfR{`RoI%x5T;i z-i3R(SHB=(%iY^8y$1}J3EtFQf9WRe@739KvE~iOvk&`4ZS@O&F9>M7xO<=LDyxe zas$4O@+Ej(PnwWWJkU>o8t*xfS3eQ!x#jM&*S&nW9gX!b-@-$LQ^$knI8PeV+qvb= z!xo$%TyR@;<3rld%jxZ%#=qWr1$y#cHNWn1?H|B-&4Z(M^Vu8y16@BSr{dUBrD z+a6&=KrigsqZddV64a}+@y^38U%7<$q}qC~(=X7yxq%lsA)x)nKJ)9|Dy8Vfm7{k!11Ak-KRR9Y+-qzC;jsRAu0yIG&A(r9 zpq?KQAJSTT^6cxr<22s(Yv!9yVF{zS_l_KF@{EcLvY$Ip=?GAfF4Xyxb*@7v4C$!5 zaQNO<2fuw{@3NIa}K$3yccCXU+=Dn8_`vL^7vEf=oqQ( zC6dBlf_2ylth%uvtH!fXyAdVa% z|LgSWi!Y@Sk)m4{t#_RVM22?Utg|`%!iV}jxqj2e?iUuyxp}4fflE+`R4g?IC$ literal 0 HcmV?d00001 diff --git a/trunk/IrisMainp/IrisMon/NitroMainpMonTS1_040304.bin b/trunk/IrisMainp/IrisMon/NitroMainpMonTS1_040304.bin new file mode 100644 index 0000000000000000000000000000000000000000..e89abeddf1d20e2b60344295f06d92b2f3c3f044 GIT binary patch literal 8192 zcmeHJ|8o=95#M)rl1{RaP7sRiC~!9BTN)3tAp{bV9CBh|14WoXXvlz^(2g_HnJDQ@ z$DL-%8Jt9k`63e_k|E;*LJ6czubp_p5S*L|Qw$Bn-$)x{hC7|FwxLy(Nn5^#>z*wV ze#{>r&3xwV+xK?g?q}bLt5Cj2;U5FWo67z!6ynN_ZYvZzC z9yrrdyXNf!Gj7p|UroL5R4vVXu=>;ajUXKId~4R+reE9@`1LdS>AtznnJMG~f06my7zYIaYsxk#>1CrE9A` zE;Cyz>1j1c*VYt-OGiLmu5n-Z(w0n=&vot#k|xSoom2K20MF_R&DlN(w+~x-Pv%9< zl9|l96u>&2Q6*aVi=@M60|tSGIw)SEC|hWEW;Ri}TW$X^O_xxK>mcbOC+Y8!Mq{6^ z(YSz)jr?G%A>JqHGIw%Rw;OeAd8@&WM-(GYv>Gz>YBGE_1`bEwk_WVb zMXg4}KW6)D0#~f_*x*T{0N_d=X*B}oY|VqRbV||(G`}I9Tbepf4QK#i{kCZq^4UC5 zcKLBHeb-)4Bz>}FuSnXIY|M@5^QU+Y*8hs>y=TO->CLWncC{LyO1i~UPgW=2rCXoX zB~a&EUXU)Slr#n*ENx5?*q-9h7w}7}B4MWN)`e)ui#73i3(~w@(f}d2#T2O9Q%r_4 zym#ubrgY@b$~w(d+^Mj~A$GX(N-4cO8VQO-+Ek(=~9SH2OR1FwFr(A3{Og(a&Ya z*<<(X>8Y`P3Q z#Oo?Mt2?V8^U7tmJ=#{o*1+m~C*cKA~iE#*{|{ z?tan>#Z=j!f|q-vX#LT$qf4O(_>Y#bj|Sn$GliR{H|-8W7bznFX6An{0H42^@boO` z0Y2Jpw!JR9l8z&Jbua^_JI*9Rlw-Vig`>*Ll#yn>sHxC4p56sB;Vo(h>8Il>R7b*< zWCD)(8+EaeGs#8;paQlyDPc!f$oDI&$Xr{ZG5E~|N5Z+61jt)suB7t? zM%RceJ|6^CYeXY4z?MlL#h3u08ElBV4A-=52a@ZT*<0Bm_>J4XJG6X=tQ2J8O_z> z$87yD4NCIr%KV8C8BaBnW|&F(sd%kQKlH5XO4j?|sB`#ZA$y$V>G*Qho&Y=7_r3l- zfh3sJn1>iTW{3W`z?RABwNf@(0(%KE4+i@ zdlw6PE15kcdAg7^k5^aRdz!6%qKd78mkOP+uwYKzEEEVG!ePN(u}Yw_r;KGee4Zp> zmh+-LA%HzjC&+v{{{E=0^}F2b@kA?kDx3Re+3U9_?b+NHjOLD+kLFI|kE!&$1*$z6 z#oX;^xyWAS0egPmVm}q9l8_JzA@06w{XK!HVEHF8u7x7?5R_0D0~Jr7pQO@dkf55a z{oi|IiybQQ-^nCvf%T%Azc~*Hn0aEro~>9k8#PHduwsDUw)OprULg3L5D+&~JMleG z&BrMfzj@9}(pLYN=yjxjglIwBd6V;@)%c%jUbzQHpVyh@yuP#>Wy{8Tm+N@|7l<(W zPN0u?)|SlwcEEb)205 z4H)N}Zro1<>=OZ8F`#4!+V1<^(co_5%fU$g|ZGF@R7fkE*xO>MHtn@Iw zZ0F(N#D2Ep=Fs7wub=H?J8leZU{`u#qgknLZxl6vsQ(7_wJaq^d(eN6!Ad{J zUMlH~yu)~ZJN985n`B9Q9|7`KgXVjTQ7)rTrzQd%Gi6C%`wVg%?-~RFYYb26S55PX zO?Ik}oV4n+h9=f^lixA&lr5@X-=Pg@^dyQwRi|rxhpBB>fc~N}z%W5WHA4m_; zsIlRWaZyWibHEtNjMkrP3w+3RmbfTfbK%;C$+nAheM|n>>}vLwe77q`1zaLk_O7)n z){;LqyR$1l#D&<<;nmN)uLo%=s-}gZx!7remd*$3TvO90NH9at!1c$T9E(82CS5__ja* literal 0 HcmV?d00001 diff --git a/trunk/IrisMainp/IrisMon/crt0Arm.s b/trunk/IrisMainp/IrisMon/crt0Arm.s new file mode 100644 index 0000000..a1e5bb5 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/crt0Arm.s @@ -0,0 +1,424 @@ +;******************************************************************** +; IRISj^vO X^[gAbv[` +;******************************************************************** + + AREA Init, CODE, READONLY + INCLUDE IrisDefineArm.s + INCLUDE IrisMemoryMapArm.s + INCLUDE IrisCardDefineArm.s + + INCLUDE IrisMonDefineArm.s + INCLUDE IrisMonMempryMapArm.s + + + ENTRY +;==================================================================== +; 荞ݗ̈ +;==================================================================== + CODE32 +start_v b start_handler +undef_v b fiq_v +swi_v b swi_handler +code_abort_v b fiq_v +data_abort_v b fiq_v +reserve_v b fiq_v +irq_v b irq_handler +fiq_v b fiq_handler + +;==================================================================== +; NINTENDOSf[^ +;==================================================================== + ALIGN + GLOBAL Nin_Char_Diff_Huff +Nin_Char_Diff_Huff + + DCB 0x24,0xff,0xae,0x51,0x69,0x9a,0xa2,0x21,0x3d,0x84,0x82,0x0a,0x84,0xe4,0x09,0xad + DCB 0x11,0x24,0x8b,0x98,0xc0,0x81,0x7f,0x21,0xa3,0x52,0xbe,0x19,0x93,0x09,0xce,0x20 + DCB 0x10,0x46,0x4a,0x4a,0xf8,0x27,0x31,0xec,0x58,0xc7,0xe8,0x33,0x82,0xe3,0xce,0xbf + DCB 0x85,0xf4,0xdf,0x94,0xce,0x4b,0x09,0xc1,0x94,0x56,0x8a,0xc0,0x13,0x72,0xa7,0xfc + DCB 0x9f,0x84,0x4d,0x73,0xa3,0xca,0x9a,0x61,0x58,0x97,0xa3,0x27,0xfc,0x03,0x98,0x76 + DCB 0x23,0x1d,0xc7,0x61,0x03,0x04,0xae,0x56,0xbf,0x38,0x84,0x00,0x40,0xa7,0x0e,0xfd + DCB 0xff,0x52,0xfe,0x03,0x6f,0x95,0x30,0xf1,0x97,0xfb,0xc0,0x85,0x60,0xd6,0x80,0x25 + DCB 0xa9,0x63,0xbe,0x03,0x01,0x4e,0x38,0xe2,0xf9,0xa2,0x34,0xff,0xbb,0x3e,0x03,0x44 + DCB 0x78,0x00,0x90,0xcb,0x88,0x11,0x3a,0x94,0x65,0xc0,0x7c,0x63,0x87,0xf0,0x3c,0xaf + DCB 0xd6,0x25,0xe4,0x8b,0x38,0x0a,0xac,0x72,0x21,0xd4,0xf8,0x07,0x56,0xcf,0x00,0x00 + + ALIGN +;==================================================================== +; Tu[`Q +;==================================================================== + +;-------------------------------------------------------------------- +; fobKj^փWv +;-------------------------------------------------------------------- + CODE32 +fiq_handler + mrs sp, cpsr ; IRQ/FIQs + orr sp, sp, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE + msr cpsr_cxsf, sp + + ldr sp, fiq_sp ; SP ̾ + add sp, sp, #1 + +fiq_m stmfd sp!, {r12, lr} ; ڼ޽ ̑ޔiv4ܰށj + mrs lr, spsr + mrc p15, 0, r12, c1, c0, 0 ; ۾Ͻ ޔ + stmfd sp!, {r12, lr} + + bic r12, r12, #C1_PROTECT_UNIT_ENABLE ; øƯ ި + mcr p15, 0, r12, c1, c0, 0 + + bic r12, sp, #1 ; ޯޏּެ + ldr r12, [r12, #16] + cmp r12, #0 + blxne r12 +;-------------------------------------------------------------------- +; fobKj^̕A +;-------------------------------------------------------------------- + CODE32 +fiq_return + ldmfd sp!, {r12, lr} ; ڼ޽ ̕A + mcr p15, 0, r12, c1, c0, 0 ; ۾Ͻ A + msr spsr_sxcf, lr + ldmfd sp!, {r12, lr} + subs pc, lr, #4 + + +;-------------------------------------------------------------------- +; +;-------------------------------------------------------------------- + EXTERN init_cp15 + EXTERN reset_cp15 + EXTERN IrisMonMain + EXTERN intr_main + CODE32 +start_handler + cmp lr, #0 ; fiq_return => pc = -4 ΍ + moveq lr, #4 + + mov r12, #REG_BASE ; /հ + ldrb r12, [r12, #OFFSET_REG_PAUSE] + teq r12, #1 + + mrseq r12, cpsr ; IRQ/FIQs + orreq r12, r12, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE + msreq cpsr_cxsf,r12 + ldreq sp, fiq_sp ; SP ̾ + beq fiq_m ; ޯּެ + + + mov r4, #REG_BASE ; J[hZbgLowM 1usȏo + mov r0, #CARD_RESET_LO + mov r1, #CARDMST_SEL_ROM | CARDMST_ENABLE + str r0, [r4, #REG_CARDCNT - REG_BASE] + str r1, [r4, #REG_CARD_MASTER_CNT - REG_BASE] ; f[^WX^ɃNA + ; iۂ̓[hI[tO֏ł܂Ă + ; V[v񂩂̎wEj + +restart_v mov r0, #0xc0 | PSR_SYS_MODE ; Ӱނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + + mov r0, #0x8000/4 ; CLow 0.97ms + bl WaitByLoop + +mainmem_change_burst ; C o[Xg[hJ + ldr r4, =0x04000204 ; REG_EXMEMCNT + mov r1, #MMEM_CE2_OUT + strh r1, [r4] + + mov r0, #0x8000/4 ; CHigh 0.97ms + bl WaitByLoop + + ldr r3, =MAIN_MEM_EX_END - 2 + ldr r1, =MMEMD4_BURST_MODE | MMEMD4_BURST_CONTINUOUS \ + | MMEMD4_PARTIAL_REFRESH_NONE | MMEMD4_SB1 + ldr r2, =MMEMD5_1ST_R4_W3 | MMEMD5_BURST_WRITE | MMEMD5_BURST_LINER \ + | MMEMD5_CLOCK_TRIGGER_UP | MMEMD5_SB1 + ldr r12, =MAIN_MEM | MMEMP_CLOCK_TRIGGER_UP \ + | MMEMP_BURST_MODE | MMEMP_BURST_CONTINUOUS \ + | MMEMP_1ST_R4_W3 | MMEMP_BURST_WRITE | MMEMP_BURST_LINER \ + | MMEMP_PARTIAL_REFRESH_NONE | MMEMP_SB1 + ldrh r0, [r3] + strh r0, [r3] + strh r0, [r3] + strh r1, [r3] + strh r2, [r3] + ldrh r0, [r12] + + ldr r4, =0x04000204 ; REG_EXMEMCNT + mov r1, #MMEM_INTF_SYNC | MMEM_CE2_OUT + strh r1, [r4] + + + bl init_cp15 ; VXeRvZbT + + mov r4, #REG_BASE ; IME ؾ + strb r4, [r4, #OFFSET_REG_IME] + + bl bankreg_init_stack_clear ; ݸڼ޽ ؾ & ̈ ر +; adr r0, intr_main ; 荞ݱڽ̾ +; str r0, [sp, #0x100-4] + + ldr r0, =IrisMonMain ; Cٰݏ + blx r0 + +main_return + bl terminate_mon ; I + + ldr r12, =MAIN_MEM_EX_END ; հޥ߲ l + + IF :DEF: DISABLE_ENTRY_OF_ROM_HEADER + ldr lr, [r12, #-(0x200 - 0x28)] ; rmhp->arm9->ramAddr + ELSE + ldr lr, [r12, #-(0x200 - 0x24)] ; rmhp->arm9->entryAddr + ENDIF + + IF :DEF: DISABLE_BOOT_IPL2 + + ldrh r0, [r12, #-4] ; ROMͯ + cmp r0, #1 +0 beq %b0 ; ROMͯޕs + sub r12, r12, #0x800 + ldrh r0, [r12, #0x14] ; ޯ + add r12, r12, #0x800 + cmp r0, #1 ; if (!shwp->isOnDebugger) + mov r0, #0 + ldreq r12, [r12, #-(0x200 - 0x168)]; ޯ޴߲ l +; cmpeq r12, #0 ; rmhp->dbgArm9RamAddr +; cmpeq r12, #-1 + bxeq r12 + + IF :DEF: BB_MON +0 b %b0 ; گްފJp + ENDIF + mov r0, #0 + bx lr + + ELSE + sub r12, r12, #0x800 + ldrh r0, [r12, #0x2c] ; IPL2CRC`FbN + cmp r0, #0 ; if (!shwp->flashCrcError) +0 bne %b0 + + ldr r12, [r12, #0x20] ; IPL2߲ l + cmp r12, #0 ; shwp->flashArm9RamAddr +0 beq %b0 + bx r12 + + ENDIF + + +;-------------------------------------------------------------------- +; \tgZbg +;-------------------------------------------------------------------- + CODE32 +soft_reset + bl terminate_mon ; I + + ldr r12, =MAIN_MEM_EX_END ; հޥ߲ l + ldr lr, [r12, #-(0x200 - 0x24)] + mov r12, #0 + bx lr + + +;-------------------------------------------------------------------- +; j^vOI +;-------------------------------------------------------------------- + CODE32 +terminate_mon + mov r12, lr + + mov r0, #PSR_SYS_MODE ; IRQ/FIQ + msr cpsr_cxsf, r0 + + ldr r0, =C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER \ + | C1_SB1_BITSET + bl reset_cp15 ; veNVjbgfBZ[u + + bl bankreg_init_stack_clear ; ݸڼ޽ ؾ & ̈ ر + + ldmea r4, {r0-r11} ; ėpڼ޽ ر + bx r12 + + + +;-------------------------------------------------------------------- +; oNWX^ Zbg X^bN̈ NA +;-------------------------------------------------------------------- + CODE32 +bankreg_init_stack_clear + mov r0, #0xc0 | PSR_SVC_MODE ; SVCӰނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + ldr sp, svc_sp ; SP ̾ + mov lr, #0 + msr spsr_csxf, lr + mov r0, #0xc0 | PSR_IRQ_MODE ; IRQӰނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + ldr sp, irq_sp ; SP ̾ + mov lr, #0 + msr spsr_cxsf, lr + mov r0, #0x40 | PSR_SYS_MODE ; Ӱނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + ldr sp, usr_sp ; SP ̾ + +stack_clear + IF :DEF: BB_MON + ldr r4, =CPU_WRAM_END + ELSE + mrc p15, 0, r4, c9, c1, 0 ; DTCMڽl +; bic r4, r4, lsr #0xff + mov r4, r4, lsr #C9_TCMR_BASE_SHIFT + mov r4, r4, lsl #C9_TCMR_BASE_SHIFT + add r4, r4, #DTCM_SIZE + ENDIF ; BB_MON + + adr r0, stack_clear_10 + 1 + bx r0 + CODE16 +stack_clear_10 mov r0, #0 + ldr r1, =-4*128 +1 str r0, [r4, r1] + add r1, #4 + blt %b1 + bx lr + + +;-------------------------------------------------------------------- +; hqpփWv +;-------------------------------------------------------------------- + ALIGN + CODE32 +irq_handler + stmfd sp!, {r0-r3,r12,lr} ; ڼ޽ ̑ޔi6ܰށj + mrc p15, 0, r0, c9, c1, 0 ; DTCMڽl +; bic r0, r0, lsr #0xff + mov r0, r0, lsr #C9_TCMR_BASE_SHIFT + mov r0, r0, lsl #C9_TCMR_BASE_SHIFT + add r0, r0, #DTCM_SIZE + + adr lr, irq_return + ldr pc, [r0, #-4] ; 32bitނżެ +;-------------------------------------------------------------------- +; hqp̕A +;-------------------------------------------------------------------- + CODE32 +irq_return ldmfd sp!, {r0-r3,r12,lr} ; ڼ޽ ̕A + subs pc, lr, #4 + + +;-------------------------------------------------------------------- +; VXeR[փWv +;-------------------------------------------------------------------- + CODE32 +swi_handler + stmfd sp!, {r11, r12, lr} ; SVCӰ ڼ޽ޔ + ldrh r12, [lr, #-2] ; ѺNo 擾iʰܰޱΉj + and r12, r12, #0xff + adr r11, sys_table ; Ѻ٥ڽ 擾 + ldr r12, [r11, r12, lsl #2] + mrs r11, spsr ; SVCӰ SPSRޔiv4ܰށj + stmfd sp!, {r11} + and r11, r11, #PSR_IRQ_DISABLE ; IRQ ߰ + orr r11, r11, #PSR_SYS_MODE ; Ӱނ֐؂芷 & FIQ + msr cpsr_cxsf,r11 + + stmfd sp!, {r2, lr} ; Ӱ ڼ޽ޔi2ܰށj + blx r12 ; ނ̐؊Ƽެ +;-------------------------------------------------------------------- +; VXeR[̕A +;-------------------------------------------------------------------- + GLOBAL swi_return + CODE32 +swi_return ldmfd sp!, {r2, lr} ; Ӱ ڼ޽A + mov r12, #0xc0 | PSR_SVC_MODE ; SVCӰނ֐؂芷 + msr cpsr_cxsf, r12 ; & IRQ/FIQs + + ldmfd sp!, {r11} ; SVCӰ ڼ޽A + msr spsr_cxsf, r11 + ldmfd sp!, {r11, r12, lr} + movs pc, lr + + +;-------------------------------------------------------------------- +; PAUSEWX^ Zbg +;-------------------------------------------------------------------- + GLOBAL SetPauseReg + CODE16 +SetPauseReg + ldr r2, =REG_PAUSE + str r0, [r2, #0] + bx lr + + +;==================================================================== +; AhXe[u +;==================================================================== + ALIGN +usr_sp DCD MON_DTCM_END - 0x140 +irq_sp DCD MON_DTCM_END - 0x60 +svc_sp DCD MON_DTCM_END - 0x40 +fiq_sp DCD ROM_HEADER_BUF - 0x64 +;fiq_sp DCD MON_DTCM_END - 0x24 + + + EXTERN AccessCard + + EXTERN WaitByLoop + EXTERN WaitIntr + EXTERN WaitVBlankIntr + EXTERN Halt + + EXTERN IsMmem8MB + EXTERN GetCRC16 + + EXTERN DivS32 + EXTERN SqrtU32 + + EXTERN CpuSet16_32 + EXTERN CpuSetFast32 + EXTERN UnPackBits32 + EXTERN UnCompLZ77Byte + EXTERN UnCompLZ77Short + EXTERN UnCompHuffman32 + EXTERN UnCompRLByte + EXTERN UnCompRLShort + EXTERN UnDiffByte2Byte + EXTERN UnDiffShort2Short +sys_table + DCD soft_reset ; 0 + DCD 0 ; 1 + + DCD 0 ; 2 + DCD WaitByLoop ; 3 + DCD WaitIntr ; 4 + DCD WaitVBlankIntr ; 5 + DCD Halt ; 6 + DCD 0 ; 7 + DCD 0 ; 8 + DCD DivS32 ; 9 + DCD 0 ; 10 + DCD CpuSet16_32 ; 11 + DCD CpuSetFast32 ; 12 + DCD SqrtU32 ; 13 + DCD GetCRC16 ; 14 + DCD IsMmem8MB ; 15 + DCD UnPackBits32 ; 16 + DCD UnCompLZ77Byte ; 17 + DCD UnCompLZ77Short ; 18 + DCD UnCompHuffman32 ; 19 + DCD UnCompRLByte ; 20 + DCD UnCompRLShort ; 21 + DCD UnDiffByte2Byte ; 22 + DCD 0 ; 23 + DCD UnDiffShort2Short ; 24 + DCD 0 ; 25 + DCD 0 ; 26 + DCD 0 ; 27 + DCD 0 ; 28 + DCD 0 ; 29 + DCD 0 ; 30 + DCD SetPauseReg ; 31 + + END + + diff --git a/trunk/IrisMainp/IrisMon/crt0subArmCommon.s b/trunk/IrisMainp/IrisMon/crt0subArmCommon.s new file mode 100644 index 0000000..b3490f4 --- /dev/null +++ b/trunk/IrisMainp/IrisMon/crt0subArmCommon.s @@ -0,0 +1,566 @@ +;******************************************************************** +; hqhrj^vO Tu[`Q +;******************************************************************** + + AREA IrisCrt0Sub, CODE, READONLY + INCLUDE IrisDefineArm.s + INCLUDE IrisMemoryMapArm.s + INCLUDE IrisSystemCallDefineArm.s + + INCLUDE IrisMonDefineArm.s + INCLUDE IrisMonMempryMapArm.s + +MON_ONLY +NDEBUG2 + + +;----------------------------------------------------------------------- +; g`ks +;----------------------------------------------------------------------- + GLOBAL Halt + CODE32 +Halt + mov r0, #0 + mcr p15, 0, r0, c7, c0, 4 + bx lr + + +;----------------------------------------------------------------------- +; [v҂ir0=loopCountj +;----------------------------------------------------------------------- + GLOBAL WaitByLoop + ALIGN + CODE16 +WaitByLoop + sub r0, #1 + bgt WaitByLoop + + bx lr + +;-------------------------------------------------------------------- +; uuN荞݃EFCg +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL WaitVBlankIntr + ALIGN + CODE32 +WaitVBlankIntr mov r0, #1 + mov r1, #V_BLANK_INTR_FLAG +;-------------------------------------------------------------------- +; 荞݃EFCgir0=InitCheckClear, r1=IntrFlagj +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL WaitIntr + CODE32 +WaitIntr stmfd sp!, {r4, lr} ; r4 ̓ACgp + + cmp r0, #0 + blne WaitIntr_sub ; IfCheck ر + +0 + mov lr, #0 + mcr p15, 0, lr, c7, c0, 4 ; OS_Halt() + bl WaitIntr_sub + beq %b0 ; while (!(IfCheck & IfFlags)) + + ldmfd sp!, {r4, lr} + bx lr + +WaitIntr_sub mov r12,#REG_BASE ; r12: #REG_BASEistopTvˑ̂ߏȂƁIj + str r12,[r12,#REG_IME - REG_BASE] ; IME = 0 + + mrc p15, 0, r3, c9, c1, 0 ; DTCMڽl +; bic r3, r3, lsr #0xff + mov r3, r3, lsr #C9_TCMR_BASE_SHIFT + mov r3, r3, lsl #C9_TCMR_BASE_SHIFT + add r3, r3, #DTCM_SIZE + + ldr r2, [r3, #INTR_CHECK_BUF - DTCM_END] + ands r0, r1, r2 ; IfCheck + eorne r2, r2, r0 ; IfCheck ر + strne r2, [r3, #INTR_CHECK_BUF - DTCM_END] + + mov r0, #1 + str r0, [r12,#REG_IME - REG_BASE] ; IME = 1 + + bx lr + +; ENDIF + + +;-------------------------------------------------------------------- +; ėptZir0/r1r0',r0%r1r1',|r0'|r3'j +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL DivS32 + ALIGN + CODE32 +DivS32 ands r3, r1, #0x80000000 ; r1: ̐Βl + rsbmi r1, r1, #0 + eors r12,r3, r0, asr #32 ; r12: d31=ʂ̕,d30=폜̕ + rsbcs r0, r0, #0 ; r0: 폜̐Βl + movs r2, r1 ; r2: Rg[Erbg +; beq devide_by_zero + +divide_just_l cmp r2, r0, lsr #1 + movls r2, r2, lsl #1 + blo divide_just_l + +divide_div_l cmp r0, r2 ; Zł邩`FbN + adc r3, r3, r3 ; r3*2 + L[ + subcs r0, r0, r2 ; Z”\Ȃ猸Z + teq r2, r1 ; I`FbN + movne r2, r2, lsr #1 ; IłȂ΂QŊă`FbN + bne divide_div_l + mov r1, r0 + mov r0, r3 + + movs r12,r12,lsl #1 + rsbcs r0, r0, #0 + rsbmi r1, r1, #0 + + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; Zoir0=paramj +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL SqrtU32 + ALIGN + CODE32 +SqrtU32 stmfd sp!, {r4, r5} ; r5 ̓ACgp + + mov r12,r0 ; r12: ParamBak + mov r1, #1 + +1 cmp r0, r1 + movhi r0, r0, lsr #1 + movhi r1, r1, lsl #1 + bhi %b1 + +2 mov r0, r12 ; r0: 폜 + mov r4, r1 ; r1: + mov r3, #0 ; r3: + mov r2, r1 ; r2: Rg[Erbg + +3 cmp r2, r0, lsr #1 + movls r2, r2, lsl #1 + blo %b3 + +4 cmp r0, r2 ; Zł邩`FbN + adc r3, r3, r3 ; r3*2 + L[ + subcs r0, r0, r2 ; Z”\Ȃ猸Z + teq r2, r1 ; I`FbN + movne r2, r2, lsr #1 ; IłȂ΂QŊă`FbN + bne %b4 + + add r1, r1, r3 + movs r1, r1, lsr #1 + cmp r1, r4 + bcc %b2 + + mov r0, r4 + ldmfd sp!, {r4, r5} + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; bot Zbg (r0=srcp, r1=destp, r2=dmaCntData) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL CpuSet16_32 + CODE16 +CpuSet16_32 push {r4-r6, lr} ; r6 ̓ACgp + + lsl r4, r2, #11 ; r4: size = (dmaCntData & 0x1fffff)*4 + lsr r4, #11-2 + +; bl CheckSrcp16_32 ; ڽ +; beq %f6 + +0 mov r5, #0 ; r5: i = 0 + + lsr r3, r2, #27 ; if ((dmaCntData) & DMA_32BIT_BUS) + bcc %f3 + + add r5, r1, r4 ; r5: destEndp = destp + size + + lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX) + bcc %f2 + + ldmia r0!, {r3} +1 cmp r1, r5 ; while (destp < destEndp) + bge %f6 + stmia r1!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp)) + b %b1 + +2 cmp r1, r5 ; while (destp < destEndp) + bge %f6 + ldmia r0!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))++ + stmia r1!, {r3} + b %b2 + +3 lsr r4, #1 + + lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX) + bcc %f5 + + ldrh r3, [r0, #0] +4 cmp r5, r4 ; for ( ; isrcNum + +; movs r12, r7 ; r12: srcCount +; bl CheckSrcp ; ڽ +; beq %f6 + +0 ldrb r6, [r2, #2] ; r6: srcBitNum = unPackBitsParamp->srcBitNum + rsb r10, r6, #8 ; r10: srcBitNumInv = 8 - srcBitNum + mov r14, #0 ; r14: destBak = 0 + ldr r11, [r2, #4] ; r8: destOffset0_On + mov r8, r11, lsr #31 ; = unPackBitsParamp->destOffset0_On + ldr r11,[r2, #4] ; destOffset = unPackBitsParamp->destOffset + mov r11,r11, lsl #1 + mov r11,r11, lsr #1 + str r11,[sp, #0] + ldrb r2, [r2, #3] ; r2: destBitNum = unPackBitsParamp->destBitNum + mov r3, #0 ; r3: destBitCount = 0 + +1 subs r7, r7, #1 ; while (--srcNum >= 0) + blt %f6 + + mov r11, #0xff ; r5: srcMask = 0xff >> srcBitNumInv + mov r5, r11, asr r10 + ldrb r9, [r0], #1 ; r9: srcTmp = *srcp++ + mov r4, #0 ; r4: srcBitCount = 0 + +2 cmp r4, #8 ; while (srcBitCount < 8) + bge %b1 + + and r11, r9, r5 ; r12: destTmp = ((srcTmp&srcMask) >>srcBitCount) + movs r12, r11, lsr r4 + cmpeq r8, #0 + beq %f4 + +3 ldr r11, [sp, #0] ; destTmp += destOffset + add r12, r12, r11 +4 orr r14, r14, r12, lsl r3 ; destBak |= destTmp << destBitCount + add r3, r3, r2 ; destBitCount += destBitNum + + cmp r3, #0x20 ; if (destBitCount >= 32) + blt %f5 + + str r14, [r1], #4 ; *destp++ = destBak + mov r14, #0 ; destBak = 0 + mov r3, #0 ; destBitCount = 0 + +5 mov r5, r5, lsl r6 ; srcMask <<= srcBitNum + add r4, r4, r6 ; srcBitCount += srcBitNum + b %b2 + +6 add sp, sp, #8 + ldmfd sp!, {r4-r12, lr} + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; kyVVf[^WJi8Bit8Bitj(r0=srcp, r1=destp) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL UnCompLZ77Byte + ALIGN + CODE32 +UnCompLZ77Byte + stmfd sp!, {r4-r6, lr} + + ldr r5, [r0], #4 ; r2: destCount = *(u32 *)srcp >> 8 + mov r2, r5, lsr #8 ; r0: srcp += 4 + +; movs r12, r2 ; r12: srcCount +; bl CheckSrcp ; ڽ +; beq %f6 + +1 cmp r2, #0 ; while (destCount > 0) + ble %f6 + + ldrb r14, [r0], #1 ; r14: flags = *srcp++ + mov r4, #8 ; for (i=8; --i>=0; ) +2 subs r4, r4, #1 + blt %b1 + + tst r14, #0x80 ; if (!(flags & 0x80)) + bne %f3 + + ldrb r6, [r0], #1 ; *srcp++ + swpb r6, r6, [r1] ; r1: *destp++ioCgݑ΍j + add r1, r1, #1 + sub r2, r2, #1 ; destCount-- + b %f5 + +3 ldrb r5, [r0, #0] ; r3: length = (*srcp >> 4) + 3 + mov r6, #3 + add r3, r6, r5, asr #4 + ldrb r6, [r0], #1 ; r12: offset = (*srcp++ & 0x0f) << 8 + and r5, r6, #0xf + mov r12,r5, lsl #8 + ldrb r6, [r0], #1 ; offset = (offset | *srcp++) + 1 + orr r5, r6, r12 + add r12, r5, #1 + sub r2, r2, r3 ; destCount -= length + +4 ldrb r5, [r1, -r12] ; *destp++ = destp[-offset] + swpb r5, r5, [r1] ; ioCgݑ΍j + add r1, r1, #1 + subs r3, r3, #1 ; while (--length > 0) + bgt %b4 + +5 cmp r2, #0 ; if (destCount <= 0) break; + movgt r14, r14, lsl #1 ; flags <<= 1 + bgt %b2 + b %b1 + +6 ldmfd sp!, {r4-r6, lr} + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; OXf[^WJi8Bit8Bitj(r0=srcp, r1=destp) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL UnCompRLByte + CODE16 +UnCompRLByte + push {r7, lr} ; r7 ̓ACgp + push {r4-r7} + + ldmia r0!, {r3} ; r7: destCount = *(u32 *)srcp >> 8 + lsr r7, r3, #8 ; r0: srcp += 4 + +; mov r4, r7 ; r4: count +; bl CheckSrcp16_32 ; ڽ +; beq %f5 + +1 cmp r7, #0 ; while (destCount > 0) + ble %f5 + + ldrb r4, [r0, #0] ; r4: flags = *srcp++ + add r0, #1 + lsl r2, r4, #25 ; r2: length = flags & 0x7f + lsr r2, #25 + lsr r3, r4, #8 ; if (!(flags & 0x80)) + bcs %f3 + + add r2, #1 ; length++ + sub r7, r2 ; destCount -= length +2 ldrb r3, [r0, #0] ; *destp++ = *srcp++ + strb r3, [r1, #0] + add r0, #1 + add r1, #1 + sub r2, r2, #1 ; while (--length > 0) + bgt %b2 + b %b1 + +3 add r2, #3 ; length += 3 + sub r7, r2 ; destCount -= length + ldrb r5, [r0, #0] ; srcTmp = *srcp++ + add r0, #1 +4 strb r5, [r1, #0] ; *destp++ = srcTmp + add r1, #1 + sub r2, r2, #1 ; while (--length > 0) + bgt %b4 + b %b1 + +5 pop {r4-r7} + pop {r2, r3} + bx r3 +; ENDIF + + +;-------------------------------------------------------------------- +; tB^WJi8Bit8Bitj (r0=srcp, r1=destp) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL UnDiffByte2Byte + CODE16 +UnDiffByte2Byte + push {r4, lr} + push {r4, r5} ; ACgp + + ldmia r0!, {r4} ; r4: destCount = *(u32 *)srcp >> 8 + lsr r4, r4, #8 ; r0: srcp += 4 + +; bl CheckSrcp16_32 ; ڽ +; beq %f2 + + ldrb r2, [r0, #0] ; r2: destTmp = *srcp++ + add r0, #1 + strb r2, [r1, #0] ; r1: *destp++ = destTmp + add r1, #1 + +1 sub r4, r4, #1 ; while (--destCount > 0) + ble %f2 + ldrb r3, [r0, #0] ; destTmp += *srcp++ + add r2, r3, r2 + add r0, #1 + strb r2, [r1, #0] ; *destp++ = destTmp + add r1, #1 + b %b1 + +2 pop {r4, r5} + pop {r2, r3} + bx r3 +; ENDIF + + +;-------------------------------------------------------------------- +; tB^WJi16Bit16Bitj (r0=srcp, r1=destp) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL UnDiffShort2Short + CODE16 +UnDiffShort2Short + push {r4, lr} + push {r4, r5} ; ACgp + + ldmia r0!, {r4} ; r4: destCount = *(u32 *)srcp >> 8 + lsr r4, r4, #8 ; r0: srcp += 2 + +; bl CheckSrcp16_32 ; ڽ +; beq %f2 + + ldrh r2, [r0, #0] ; r2: destTmp = *srcp++ + add r0, #2 + strh r2, [r1, #0] ; r1: *destp++ = destTmp + add r1, #2 + +1 sub r4, r4, #2 ; while ((destCount-=2) > 0) + ble %f2 + + ldrh r3, [r0, #0] ; destTmp += *srcp++ + add r2, r3, r2 + add r0, #2 + strh r2, [r1, #0] ; *destp++ = destTmp + add r1, #2 + b %b1 + +2 pop {r4, r5} + pop {r2, r3} + bx r3 +; ENDIF + + +;-------------------------------------------------------------------- +; r3WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r3 + CODE16 +__call_via_r3 bx r3 + + +;-------------------------------------------------------------------- +; r2WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r2 + CODE16 +__call_via_r2 bx r2 + +;-------------------------------------------------------------------- +; r1WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r1 + CODE16 +__call_via_r1 bx r1 + + + + END + diff --git a/trunk/IrisMainp/include/Iris.h b/trunk/IrisMainp/include/Iris.h new file mode 100644 index 0000000..00499eb --- /dev/null +++ b/trunk/IrisMainp/include/Iris.h @@ -0,0 +1,39 @@ +//====================================================================== +// Iris.h +// IRIS Wwb_t@CQ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_H +#define _IRIS_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_H diff --git a/trunk/IrisMainp/include/Iris2D.h b/trunk/IrisMainp/include/Iris2D.h new file mode 100644 index 0000000..ed68fc4 --- /dev/null +++ b/trunk/IrisMainp/include/Iris2D.h @@ -0,0 +1,89 @@ +//==================================================================== +// Iris2D.h +// 2DAtBϊCu +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_2D_H +#define _IRIS_2D_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include + + + +//---------------------------------------------------------------------- +// afAtBϊ Zbg +// +//EBG̃AtBp[^ZoAZbg܂B +// +//EF +// BgAffineSrcData *srcp \[XAhX +// BgAffineDestData *destp fXeBl[VAhX +// s32 num vZ +// +//EBgAffineSrcData\ +// s32 srcCenterX f[^SWi_ȉ8bitj +// s32 srcCenterY +// s16 dispCenterX \SW +// s16 dispCenterY +// s16 ratioX gkit^_ȉ8bitj +// s16 ratioY +// s16 theta ]pi_ȉ8bitj +// +//EBgAffineDestData\ +// s16 h_diffX CwW +// s16 v_diffX wW +// s16 h_diffY CxW +// s16 v_diffY xW +// s32 startX X^[gwW +// s32 startY X^[gxW +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void BG_SetAffine(const BgAffineSrcData *srcp, BgAffineDestData *destp, s32 num); + + +//---------------------------------------------------------------------- +// naiAtBϊ Zbg +// +//EOBJ̃AtBp[^ZoAZbg܂B +// +//EF +// ObjAffineSrcData *srcp \[XAhX +// void *destp fXeBl[VAhX +// s32 num vZ +// s32 offset p[^AhX̃ItZbgEoCgiʏ 2|8j +// OAMɒڃZbgꍇ"8"w +// +//EObjAffineSrcData\ +// s16 ratioX gkit^_ȉ8bitj +// s16 ratioY +// s16 theta ]pi_ȉ8bitj +// +//EObjAffineDestData\ +// s16 h_diffX CwW +// s16 v_diffX wW +// s16 h_diffY CxW +// s16 v_diffY xW +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void OBJ_SetAffine(const ObjAffineSrcData *srcp, void *destp, s32 num, s32 offset); + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_2D_H + diff --git a/trunk/IrisMainp/include/Iris2D_Arm.s b/trunk/IrisMainp/include/Iris2D_Arm.s new file mode 100644 index 0000000..9c1ed6e --- /dev/null +++ b/trunk/IrisMainp/include/Iris2D_Arm.s @@ -0,0 +1,34 @@ +;===================================================================== +; Iris2D_Arm.s +; 2DAtBϊCuiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;===================================================================== + IF :DEF: _IRIS_2D_H + ELSE +_IRIS_2D_H * 1 + + + INCLUDE IrisTargetArm.s + + +;----------------------------------------------------------------------- +; afAtBϊp[^ Zbg +;----------------------------------------------------------------------- + + EXTERN BG_SetAffine + +;----------------------------------------------------------------------- +; naiAtBϊ Zbg +;----------------------------------------------------------------------- + + EXTERN OBJ_SetAffine + + + + ENDIF ; _IRIS_2D_H + + + + END + diff --git a/trunk/IrisMainp/include/Iris2D_Mw.s b/trunk/IrisMainp/include/Iris2D_Mw.s new file mode 100644 index 0000000..f4f5a6f --- /dev/null +++ b/trunk/IrisMainp/include/Iris2D_Mw.s @@ -0,0 +1,28 @@ +;===================================================================== +; Iris2D_Mw.s +; 2DAtBϊCuiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;===================================================================== +#ifndef _IRIS_2D_H +#define _IRIS_2D_H + + + .INCLUDE IrisTarget.h + + +;----------------------------------------------------------------------- +; afAtBϊp[^ Zbg +;----------------------------------------------------------------------- + + .EXTERN BG_SetAffine + +;----------------------------------------------------------------------- +; naiAtBϊ Zbg +;----------------------------------------------------------------------- + + .EXTERN OBJ_SetAffine + + + +#endif // _IRIS_2D_H diff --git a/trunk/IrisMainp/include/IrisDefine.h b/trunk/IrisMainp/include/IrisDefine.h new file mode 100644 index 0000000..54c7815 --- /dev/null +++ b/trunk/IrisMainp/include/IrisDefine.h @@ -0,0 +1,1625 @@ +//====================================================================== +// IrisDefine.h +// IRIS W萔 +// +// Copyright (C) 2002-2004 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_DEFINE_H +#define _IRIS_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// eŒ菬_ʒu +//---------------------------------------------------------------------- + +#define G_SFT 12 // WIgGWiύXsj +#define GS_SFT 6 // VertexShortpi V j + +// V_SFTASIN_SFTAACOS_SFT 12`14 ͈̔͂ŕύX”\ +//iAASIN_SFT >= V_SFTj + +#define V_SFT 12 // WxNg̕ϐ +#define M_SFT V_SFT // s + +#define N_SFT 9 // @xNg iύXsj +#define L_SFT 9 // CgxNgi V j + +#define T_SFT 4 // eNX`WiύXsj +#define TEXMTX_SFT (T_SFT + M_SFT) // eNX`s + +#define SIN_SFT 12 // Sine[uiV_SFT ȏɐݒj +#define ACOS_SFT 15 // ArcCose[u + + +#define VG_SFT_DF (V_SFT - G_SFT) // xNg_ʒu | WIgGW_ʒu +#define MG_SFT_DF (M_SFT - G_SFT) // s񏬐_ʒu | WIgGW_ʒu + +#define GN_SFT_DF (G_SFT - N_SFT) // WIgGW_ʒu | @xNg_ʒu +#define GL_SFT_DF (G_SFT - L_SFT) // WIgGW_ʒu | CgxNg_ʒu + +#define SIN_SFT_CT (SIN_SFT_MAX - SIN_SFT) // Sine[u_ʒu␳ +#define ACOS_SFT_CT (ACOS_SFT_MAX - ACOS_SFT)// ArcCose[u_ʒu␳ + + +// ݒ͈̓G[o + +#define V_SFT_MAX 14 // V_SFT őliύXsj +#define V_SFT_MIN 12 // ŏli V j + +#if (V_SFT < V_SFT_MIN) || (V_SFT > V_SFT_MAX) + #error V_SFT is out of range. +#endif + +#define SIN_SFT_MAX 14 // SIN_SFT őliύXsj +#define SIN_SFT_MIN 12 // ŏli V j +#define ACOS_SFT_MAX 15 // ACOS_SFT őli V j +#define ACOS_SFT_MIN 12 // ŏli V j + +#if (SIN_SFT < SIN_SFT_MIN) || (SIN_SFT > SIN_SFT_MAX) || (SIN_SFT < V_SFT) + #error SIN_SFT is out of range. +#endif + +#if (ACOS_SFT < ACOS_SFT_MIN) || (ACOS_SFT > ACOS_SFT_MAX) + #error ACOS_SFT is out of range. +#endif + + +// 1 + +#define G_ONE (1<= V_SFTj + +V_SFT * 12 ; WxNg̕ϐ +M_SFT * V_SFT ; s + +N_SFT * 9 ; @xNg iύXsj +L_SFT * 9 ; CgxNgi V j + +T_SFT * 4 ; eNX`WiύXsj +TEXMTX_SFT * (T_SFT + M_SFT) ; eNX`s + +SIN_SFT * 12 ; Sine[uiV_SFT ȏɐݒj +ACOS_SFT * 15 ; ArcCose[u + + +VG_SFT_DF * (V_SFT - G_SFT) ; xNg_ʒu | WIgGW_ʒu +MG_SFT_DF * (M_SFT - G_SFT) ; s񏬐_ʒu | WIgGW_ʒu + +GN_SFT_DF * (G_SFT - N_SFT) ; WIgGW_ʒu | @xNg_ʒu +GL_SFT_DF * (G_SFT - L_SFT) ; WIgGW_ʒu | CgxNg_ʒu + +SIN_SFT_CT * (SIN_SFT_MAX - SIN_SFT) ; Sine[u_ʒu␳ +ACOS_SFT_CT * (ACOS_SFT_MAX - ACOS_SFT); ArcCose[u_ʒu␳ + + +V_SFT_MAX * 14 ; V_SFT őliύXsj +V_SFT_MIN * 12 ; ŏli V j + +SIN_SFT_MAX * 14 ; SIN_SFT őliύXsj +SIN_SFT_MIN * 12 ; ŏli V j +ACOS_SFT_MAX * 15 ; ACOS_SFT őli V j +ACOS_SFT_MIN * 12 ; ŏli V j + + +; 1 + +G_ONE * (1 :SHL: G_SFT) +GS_ONE * (1 :SHL: GS_SFT) +V_ONE * (1 :SHL: V_SFT) +M_ONE * (1 :SHL: M_SFT) + +N_ONE * (1 :SHL: N_SFT) +L_ONE * (1 :SHL: L_SFT) + +SIN_ONE * (1 :SHL: SIN_SFT) +ACOS_ONE * (1 :SHL: ACOS_SFT) + +T_ONE * (1 :SHL: T_SFT) +TEXMTX_ONE * (1 :SHL: TEXMTX_SFT) + + +; ő召 + +G_DECI_MAX * (G_ONE - 1) +GS_DECI_MAX * (GS_ONE - 1) +V_DECI_MAX * (V_ONE - 1) +M_DECI_MAX * (M_ONE - 1) + +N_DECI_MAX * (N_ONE - 1) +L_DECI_MAX * (L_ONE - 1) + +SIN_DECI_MAX * (SIN_ONE - 1) +ACOS_DECI_MAX * (ACOS_ONE - 1) + +T_DECI_MAX * (T_ONE - 1) +TEXMTX_DECI_MAX * (TEXMTX_ONE - 1) + + +;----------------------------------------------------------------------- +; 萔 +;----------------------------------------------------------------------- + +SYSTEM_CLOCK * 33513982 ; VXeNbN + +MAINP * 0 ; CvZbT +SUBP * 1 ; TuvZbT + + +ON * 1 +OFF * 0 +ENABLE * 1 +DISABLE * 0 +TRUE * 1 +FALSE * 0 + + +LCD_WIDTH * 256 ; ʕ +LCD_HEIGHT * 192 ; ʍ + + +POLYGON_ID_MAX * 63 ; |Shcől + + +;----------------------------------------------------------------------- +; J[f[^ +;----------------------------------------------------------------------- + +RED5_MASK * 0x001f ; +GREEN5_MASK * 0x03e0 ; +BLUE5_MASK * 0x7c00 ; +ALPHA1_MASK * 0x8000 ; sx +ALPHA5_MASK * 0x001f0000 + +RED5_SHIFT * 0 +GREEN5_SHIFT * 5 +BLUE5_SHIFT * 10 +ALPHA1_SHIFT * 15 +ALPHA5_SHIFT * 16 + + +RED8_MASK * 0x000000ff ; +GREEN8_MASK * 0x0000ff00 ; +BLUE8_MASK * 0x00ff0000 ; +ALPHA8_MASK * 0xff000000 ; sx + +RED8_SHIFT * 0 +GREEN8_SHIFT * 8 +BLUE8_SHIFT * 16 +ALPHA8_SHIFT * 24 + + +;----------------------------------------------------------------------- +; W +;----------------------------------------------------------------------- + +X16_MASK * 0x0000ffff ; w +Y16_MASK * 0xffff0000 ; x +Z16_MASK * 0x0000ffff ; y + +X16_SHIFT * 0 +Y16_SHIFT * 16 +Z16_SHIFT * 0 + + +X10_MASK * 0x000003ff ; w +Y10_MASK * 0x000ffc00 ; x +Z10_MASK * 0x3ff00000 ; y + +X10_SHIFT * 0 +Y10_SHIFT * 10 +Z10_SHIFT * 20 + +;----------------------------------------------------------------------- +; eNX`W +;----------------------------------------------------------------------- + +TEX_S_MASK * 0x0000ffff ; r +TEX_T_MASK * 0xffff0000 ; s + +TEX_S_SHIFT * 0 +TEX_T_SHIFT * 16 + + +;----------------------------------------------------------------------- +; AtBϊ +;----------------------------------------------------------------------- + +AFFINE_REG_SHIFT * 8 + + +;----------------------------------------------------------------------- +; afXN[f[^ +;----------------------------------------------------------------------- + +BG_SC_CHAR_NO_MASK * 0x03ff ; LN^m +BG_SC_FLIP_MASK * 0x0c00 ; tbv +BG_SC_PLTT_MASK * 0xf000 ; J[pbgm + +BG_SC_CHAR_NO_SHIFT * 0 +BG_SC_FLIP_SHIFT * 10 +BG_SC_PLTT_SHIFT * 12 + +BG_SC_H_FLIP * 0x0400 ; gtbv +BG_SC_V_FLIP * 0x0800 ; utbv + +;----------------------------------------------------------------------- +; n`lf[^ +;----------------------------------------------------------------------- + +OAM_V_POS_MASK * 0x000000ff ; nai xW +OAM_H_POS_MASK * 0x01ff0000 ; nai wW +OAM_SHAPE_MASK * 0x0000c000 ; nai` +OAM_SIZE_MASK * 0xc0000000 ; naiTCY +OAM_OBJ_MODE_MASK * 0x00000c00 ; nai[h +OAM_AFFINE_MODE_MASK * 0x00000300 ; AtB[h +OAM_AFFINE_NO_MASK * 0x3e000000 ; AtB p[^m +OAM_FLIP_MASK * 0x30000000 ; tbv +OAM_CHAR_NO_MASK * 0x000003ff ; LN^m +OAM_PRIORITY_MASK * 0x00000c00 ; afΗD揇 +OAM_PLTT_MASK * 0x0000f000 ; J[pbgm +OAM_ALPHA_MASK * 0x0000f000 ; naiAt@l +OAM_AFFINE_PARAM_MASK * 0xffff0000 ; AtB p[^ + +OAM_V_POS_SHIFT * 0 +OAM_H_POS_SHIFT * 16 +OAM_SHAPE_SHIFT * 14 +OAM_SIZE_SHIFT * 30 +OAM_AFFINE_MODE_SHIFT * 8 +OAM_OBJ_MODE_SHIFT * 10 +OAM_AFFINE_NO_SHIFT * 25 +OAM_FLIP_SHIFT * 28 +OAM_CHAR_NO_SHIFT * 0 +OAM_PRIORITY_SHIFT * 10 +OAM_PLTT_SHIFT * 12 +OAM_ALPHA_SHIFT * 12 +OAM_AFFINE_PARAM_SHIFT * 16 + +OAM_OBJ_ON * 0x00000000 ; nai nm +OAM_OBJ_OFF * 0x00000200 ; nai nee +OAM_OBJ_NORMAL * 0x00000000 ; naim[}[h +OAM_OBJ_BLEND * 0x00000400 ; nai[h +OAM_OBJ_WINDOW * 0x00000800 ; naiEChE[h +OAM_OBJ_BMP * 0x00000c00 ; nairbg}bv[h +OAM_AFFINE_NONE * 0x00000000 ; AtB[h +OAM_AFFINE_NORMAL * 0x00000100 ; AtBm[}[h +OAM_AFFINE_TWICE * 0x00000300 ; AtBQ{p[h +OAM_AFFINE_ERASE * 0x00000200 ; AtB\[h +OAM_MOS_ON * 0x00001000 ; UCN nm +OAM_MOS_OFF * 0x00000000 ; UCN nee +OAM_COLOR_16 * 0x00000000 ; PU I +OAM_COLOR_256 * 0x00002000 ; QTUF I +OAM_H_FLIP * 0x10000000 ; gtbv +OAM_V_FLIP * 0x20000000 ; utbv +OAM_SQUARE * 0x00000000 ; `nai +OAM_H_RECTANGLE * 0x00004000 ; `nai +OAM_V_RECTANGLE * 0x00008000 ; c`nai +OAM_SIZE_NO_0 * 0x00000000 ; nai TCYm O +OAM_SIZE_NO_1 * 0x40000000 ; nai TCYm P +OAM_SIZE_NO_2 * 0x80000000 ; nai TCYm Q +OAM_SIZE_NO_3 * 0xc0000000 ; nai TCYm R +OAM_SIZE_8x8 * 0x00000000 ; nai W Whbg +OAM_SIZE_16x16 * 0x40000000 ; nai PUPUhbg +OAM_SIZE_32x32 * 0x80000000 ; nai RQRQhbg +OAM_SIZE_64x64 * 0xc0000000 ; nai USUShbg +OAM_SIZE_16x8 * 0x00004000 ; nai PU Whbg +OAM_SIZE_32x8 * 0x40004000 ; nai RQ Whbg +OAM_SIZE_32x16 * 0x80004000 ; nai RQPUhbg +OAM_SIZE_64x32 * 0xc0004000 ; nai USRQhbg +OAM_SIZE_8x16 * 0x00008000 ; nai WPUhbg +OAM_SIZE_8x32 * 0x40008000 ; nai WRQhbg +OAM_SIZE_16x32 * 0x80008000 ; nai PURQhbg +OAM_SIZE_32x64 * 0xc0008000 ; nai RQUShbg + +; \̃op萔 + +ST_OAM_OBJ_NORMAL * 0 ; naim[}[h +ST_OAM_OBJ_BLEND * 1 ; nai[h +ST_OAM_OBJ_WINDOW * 2 ; naiEChE[h +ST_OAM_AFFINE_NONE * 0 ; AtB[h +ST_OAM_AFFINE_NORMAL * 1 ; AtBm[}[h +ST_OAM_AFFINE_TWICE * 3 ; AtBQ{p[h +ST_OAM_AFFINE_ERASE * 2 ; AtB\[h +ST_OAM_COLOR_16 * 0 ; PU I +ST_OAM_COLOR_256 * 1 ; QTUF I +ST_OAM_SQUARE * 0 ; `nai +ST_OAM_H_RECTANGLE * 1 ; `nai +ST_OAM_V_RECTANGLE * 2 ; c`nai + + + +;*********************************************************************** +; hqhrWX^ERg[rbg +;*********************************************************************** + +;----------------------------------------------------------------------- +; vOXe[^XWX^ +;----------------------------------------------------------------------- + +PSR_CPU_MODE_MASK * 0x1f ; bot[h + +PSR_USER_MODE * 0x10 ; [U +PSR_FIQ_MODE * 0x11 ; ehp +PSR_IRQ_MODE * 0x12 ; hqp +PSR_SVC_MODE * 0x13 ; X[poCU +PSR_ABORT_MODE * 0x17 ; A{[givtFb`^f[^j +PSR_UNDEF_MODE * 0x1b ; ` +PSR_SYS_MODE * 0x1f ; VXe + +PSR_THUMB_STATE * 0x20 ; sgtlaXe[g +PSR_FIQ_DISABLE * 0x40 ; ehps +PSR_IRQ_DISABLE * 0x80 ; hqps +PSR_IRQ_FIQ_DISABLE * 0xc0 ; hqpehps + +PSR_Q_FLAG * 0x08000000 ; XeBbL[I[o[t[ +PSR_V_FLAG * 0x10000000 ; I[o[t[ +PSR_C_FLAG * 0x20000000 ; L[^{[^g +PSR_Z_FLAG * 0x40000000 ; [ +PSR_N_FLAG * 0x80000000 ; ^ + +; \̃op萔 + +ST_PSR_USER_MODE * 0x10 ; [U +ST_PSR_FIQ_MODE * 0x11 ; ehp +ST_PSR_IRQ_MODE * 0x12 ; hqp +ST_PSR_SVC_MODE * 0x13 ; X[poCU +ST_PSR_ABORT_MODE * 0x17 ; A{[givtFb`^f[^j +ST_PSR_UNDEF_MODE * 0x1b ; ` +ST_PSR_SYS_MODE * 0x1f ; VXe + + +;----------------------------------------------------------------------- +; VXeRg[RvZbT +;----------------------------------------------------------------------- + +; WX^Pi}X^Rg[j + +C1_SB1_BITSET * 0x00000078 ; WX^PpPŒrbg + +C1_ITCM_LOAD_MODE * 0x00080000 ; ߂sbl [h[h +C1_DTCM_LOAD_MODE * 0x00020000 ; f[^sbl [h[h +C1_ITCM_ENABLE * 0x00040000 ; ߂sbl Cl[u +C1_DTCM_ENABLE * 0x00010000 ; f[^sbl Cl[u +C1_LD_INTERWORK_DISABLE * 0x00008000 ; [h߂ɂC^[[LO fBZ[u +C1_CACHE_ROUND_ROBIN * 0x00004000 ; LbVuASY Ehriň̃qbgj +C1_CACHE_PSEUDO_RANDOM * 0x00000000 ; [_ +C1_EXCEPT_VEC_UPPER * 0x00002000 ; OxN^ ʃAhXiɐݒ肵ĉj +C1_EXCEPT_VEC_LOWER * 0x00000000 ; ʃAhX +C1_ICACHE_ENABLE * 0x00001000 ; ߃LbV Cl[u +C1_DCACHE_ENABLE * 0x00000004 ; f[^LbV Cl[u +C1_LITTLE_ENDIAN * 0x00000000 ; gGfBA +C1_BIG_ENDIAN * 0x00000080 ; rbOGfBA +C1_PROTECT_UNIT_ENABLE * 0x00000001 ; veNVjbg Cl[u + + +; WX^QiveNV[WELbVݒj + +C2_PR0_SFT * 0 ; veNV[WO +C2_PR1_SFT * 1 ; P +C2_PR2_SFT * 2 ; Q +C2_PR3_SFT * 3 ; R +C2_PR4_SFT * 4 ; S +C2_PR5_SFT * 5 ; T +C2_PR6_SFT * 6 ; U +C2_PR7_SFT * 7 ; V + + +; WX^RiveNV[WECgobt@ݒj + +C3_PR0_SFT * 0 ; veNV[WO +C3_PR1_SFT * 1 ; P +C3_PR2_SFT * 2 ; Q +C3_PR3_SFT * 3 ; R +C3_PR4_SFT * 4 ; S +C3_PR5_SFT * 5 ; T +C3_PR6_SFT * 6 ; U +C3_PR7_SFT * 7 ; V + + +; WX^TiveNV[WEANZXj + +C5_PERMIT_MASK * 0xf ; veNV[W ANZXƒ}XN + +C5_PERMIT_NA * 0 ; ANZXs +C5_PERMIT_RW * 1 ; [hCg +C5_PERMIT_RO * 5 ; [hI[ + +C5_PR0_SFT * 0 ; veNV[WO +C5_PR1_SFT * 4 ; P +C5_PR2_SFT * 8 ; Q +C5_PR3_SFT * 12 ; R +C5_PR4_SFT * 16 ; S +C5_PR5_SFT * 20 ; T +C5_PR6_SFT * 24 ; U +C5_PR7_SFT * 28 ; V + + +; WX^UiveNV[WEx[XAhX^TCYj + +C6_PR_SIZE_MASK * 0x0000003e ; veNV[W TCY +C6_PR_BASE_MASK * 0xfffff000 ; x[XAhX + +C6_PR_SIZE_SHIFT * 1 +C6_PR_BASE_SHIFT * 12 + +C6_PR_ENABLE * 1 ; veNV[W Cl[u +C6_PR_DISABLE * 0 ; fBZ[u + +C6_PR_4KB * 0x16 ; [WTCY Sja +C6_PR_8KB * 0x18 ; Wja +C6_PR_16KB * 0x1a ; PUja +C6_PR_32KB * 0x1c ; RQja +C6_PR_64KB * 0x1e ; USja +C6_PR_128KB * 0x20 ; PQWja +C6_PR_256KB * 0x22 ; QTUja +C6_PR_512KB * 0x24 ; TPQja +C6_PR_1MB * 0x26 ; Pla +C6_PR_2MB * 0x28 ; Qla +C6_PR_4MB * 0x2a ; Sla +C6_PR_8MB * 0x2c ; Wla +C6_PR_16MB * 0x2e ; PUla +C6_PR_32MB * 0x30 ; RQla +C6_PR_64MB * 0x32 ; USla +C6_PR_128MB * 0x34 ; PQWla +C6_PR_256MB * 0x36 ; QTUla +C6_PR_512MB * 0x38 ; TPQla +C6_PR_1GB * 0x3a ; Pfa +C6_PR_2GB * 0x3c ; Qfa +C6_PR_4GB * 0x3e ; Sfa + + +; WX^V.PRi߃LbVEvtFb`j + +C7_ICACHE_PREFCHP_MASK * 0xffffffe0 ; ߃LbV vtFb`AhX + + +; WX^V.POAV.PSiLbVCfbNXj + +C7_ICACHE_INDEX_MASK * 0x00000fe0 ; ߃LbV CfbNX +C7_DCACHE_INDEX_MASK * 0x000003e0 ; f[^LbV CfbNX +C7_CACHE_SET_NO_MASK * 0xc0000000 ; LbV ZOg + +C7_CACHE_INDEX_SHIFT * 5 +C7_CACHE_SET_NO_SHIFT * 30 + + +; WX^X.OiLbVbN_Ej + +C9_LOCKDOWN_SET_NO_MASK * 0x00000003 ; LbVbN_E ZOg + +C9_LOCKDOWN_SET_NO_SHIFT * 0 + +C9_LOCKDOWN_LOAD_MODE * 0x80000000 ; LbVbN_E [h[h + + +; WX^X.Pisblx[XAhX^TCYj + +C9_TCMR_SIZE_MASK * 0x0000003e ; sbl[W TCY +C9_TCMR_BASE_MASK * 0xfffff000 ; x[XAhX + +C9_TCMR_SIZE_SHIFT * 1 +C9_TCMR_BASE_SHIFT * 12 + +C9_TCMR_4KB * 0x06 ; [WTCY Sja +C9_TCMR_8KB * 0x08 ; Wja +C9_TCMR_16KB * 0x0a ; PUja +C9_TCMR_32KB * 0x0c ; RQja +C9_TCMR_64KB * 0x0e ; USja +C9_TCMR_128KB * 0x10 ; PQWja +C9_TCMR_256KB * 0x12 ; QTUja +C9_TCMR_512KB * 0x14 ; TPQja +C9_TCMR_1MB * 0x16 ; Pla +C9_TCMR_2MB * 0x18 ; Qla +C9_TCMR_4MB * 0x1a ; Sla +C9_TCMR_8MB * 0x1c ; Wla +C9_TCMR_16MB * 0x1e ; PUla +C9_TCMR_32MB * 0x20 ; RQla +C9_TCMR_64MB * 0x22 ; USla +C9_TCMR_128MB * 0x24 ; PQWla +C9_TCMR_256MB * 0x26 ; QTUla +C9_TCMR_512MB * 0x28 ; TPQla +C9_TCMR_1GB * 0x2a ; Pfa +C9_TCMR_2GB * 0x2c ; Qfa +C9_TCMR_4GB * 0x2e ; Sfa + + + +;----------------------------------------------------------------------- +; 荞ݗv^ƒtO +;----------------------------------------------------------------------- + +V_BLANK_INTR_FLAG * 0x00000001 ; uuN荞 +H_BLANK_INTR_FLAG * 0x00000002 ; guN荞 +V_COUNT_INTR_FLAG * 0x00000004 ; uJE^v荞 +TIMER0_INTR_FLAG * 0x00000008 ; ^C}[O荞 +TIMER1_INTR_FLAG * 0x00000010 ; ^C}[P荞 +TIMER2_INTR_FLAG * 0x00000020 ; ^C}[Q荞 +TIMER3_INTR_FLAG * 0x00000040 ; ^C}[R荞 +SIO_INTR_FLAG * 0x00000080 ; VAʐM荞 +DMA0_INTR_FLAG * 0x00000100 ; cl`O荞 +DMA1_INTR_FLAG * 0x00000200 ; cl`P荞 +DMA2_INTR_FLAG * 0x00000400 ; cl`Q荞 +DMA3_INTR_FLAG * 0x00000800 ; cl`R荞 +KEY_INTR_FLAG * 0x00001000 ; L[荞 +CARTRIDGE_INTR_FLAG * 0x00002000 ; J[gbW荞 + +SUBP_INTR_FLAG * 0x00010000 ; TuvZbT荞 +SPFIFO_SEND_INTR_FLAG * 0x00020000 ; TuvZbTԑMehenGveB荞 +SPFIFO_RECV_INTR_FLAG * 0x00040000 ; TuvZbTԎMehenmbgGveB荞 +CARD_DATA_INTR_FLAG * 0x00080000 ; J[hf[^]I荞 +CARD_IREQ_INTR_FLAG * 0x00100000 ; J[hhqdp荞 +GXFIFO_INTR_FLAG * 0x00200000 ; WIgR}hehen荞 + + +;----------------------------------------------------------------------- +; TuvZbT C^tF[X +;----------------------------------------------------------------------- + +SUBP_RECV_STATUS_MASK * 0x000f ; MXe[^X +SUBP_SEND_STATUS_MASK * 0x0f00 ; MXe[^X + +SUBP_RECV_STATUS_SHIFT * 0 +SUBP_SEND_STATUS_SHIFT * 8 + +SUBP_SEND_IF * 0x2000 ; 荞ݗvM +SUBP_RECV_IF_ENABLE * 0x4000 ; 荞ݗvM +SUBP_ENABLE * 0x8000 ; TuvZbT Cl[ui폜\j + +;----------------------------------------------------------------------- +; TuvZbTʐMehen Rg[ +;----------------------------------------------------------------------- + +SPFIFO_SEND_EMPTY * 0x0001 ; Mehen GveB +SPFIFO_SEND_FULL * 0x0002 ; t +SPFIFO_SEND_IF_ENABLE * 0x0004 ; 荞ݗv +SPFIFO_SEND_CLEAR * 0x0008 ; NA +SPFIFO_RECV_EMPTY * 0x0100 ; Mehen GveB +SPFIFO_RECV_FULL * 0x0200 ; t +SPFIFO_RECV_IF_ENABLE * 0x0400 ; 荞ݗv +SPFIFO_ENABLE * 0x8000 ; ehenCl[u + + + +;----------------------------------------------------------------------- +; p[Rg[ +;----------------------------------------------------------------------- + +POW_LCDC_ON * 0x0001 ; kbcRg[ nm + IF :DEF: IRIS_TS +POW_2D_ON * 0x0202 ; QcGW`a nm +POW_2D_A_ON * 0x0002 ; QcGW` nm +POW_2D_B_ON * 0x0200 ; QcGWa nm +POW_EXCHANGE_LCD * 0x8000 ; \ť + ELSE +POW_2D_ON * 0x0002 ; QcGW nm + ENDIF +POW_RENDER_ON * 0x0004 ; _OGW nm +POW_GEOMETRY_ON * 0x0008 ; WIgGW nm +POW_ALL_ON * 0x000f ; S nm + + +;----------------------------------------------------------------------- +; Z +;----------------------------------------------------------------------- + +DIV_MODE_MASK * 0x0003 ; Z[h + +DIV_MODE_SHIFT * 0 + +DIV_32_32BIT_MODE * 0x0000 ; RQ^RQ [h +DIV_64_32BIT_MODE * 0x0001 ; US^RQ [h +DIV_64_64BIT_MODE * 0x0002 ; US^US [h +DIV_ERROR * 0x4000 ; OG[ +DIV_BUSY * 0x8000 ; rW[ + +;----------------------------------------------------------------------- +; +;----------------------------------------------------------------------- + +SQRT_32BIT_MODE * 0x0000 ; RQ [h +SQRT_64BIT_MODE * 0x0001 ; US [h +SQRT_BUSY * 0x8000 ; rW[ + + + +;----------------------------------------------------------------------- +; uq`l[Nq`l Rg[ +;----------------------------------------------------------------------- + +VRAM_MODE_MASK * 0x07 ; uq`l[h +VRAM_OFFSET_MASK * 0x18 ; ItZbg + +VRAM_MODE_SHIFT * 0 +VRAM_OFFSET_SHIFT * 3 + +VRAM_LCDC_MODE * 0x00 ; kbcb [h +VRAM_BG_MODE * 0x01 ; af [h +VRAM_OBJ_MODE * 0x02 ; nai [hi`CaCd`f̂݉j +VRAM_SUBP_MODE * 0x02 ; TuvZbT [hibCĉ݉j +VRAM_TEX_MODE * 0x03 ; eNX` [hi``ĉ݉j +VRAM_TEXPLTT_MODE * 0x03 ; eNX`pbg [hid`f̂݉j +VRAM_BGPLTT_MODE * 0x04 ; afpbg [hid`f̂݉j +VRAM_OBJPLTT_MODE * 0x05 ; naipbg [hieCf̂݉j + +VRAM_TEX_SLOT_0 * 0x00 ; eNX` XbgO +VRAM_TEX_SLOT_1 * 0x08 ; P +VRAM_TEX_SLOT_2 * 0x10 ; Q +VRAM_TEX_SLOT_3 * 0x18 ; R +VRAM_TEXPLTT_SLOT_0_3 * 0x00 ; eNX`pbg XbgO|R +VRAM_TEXPLTT_SLOT_0 * 0x00 ; O +VRAM_TEXPLTT_SLOT_1 * 0x08 ; P +VRAM_TEXPLTT_SLOT_4 * 0x10 ; S +VRAM_TEXPLTT_SLOT_5 * 0x18 ; T +VRAM_BGPLTT_SLOT_0_3 * 0x00 ; afpbg XbgO|R +VRAM_BGPLTT_SLOT_0_1 * 0x00 ; O|P +VRAM_BGPLTT_SLOT_2_3 * 0x08 ; Q|R + +VRAM_DISABLE * 0x00 ; uq`lfBZ[u +VRAM_ENABLE * 0x80 ; Cl[u + + +WRAM_MAINP_ALL * 0x00 ; L[Nq`lubNOEP CvZbT +WRAM_MAINP_B1_SUBP_B0 * 0x01 ; ubNP CvZbT + ; ubNO TuvZbT +WRAM_MAINP_B0_SUBP_B1 * 0x02 ; ubNO CvZbT + ; ubNP TuvZbT +WRAM_SUBP_ALL * 0x03 ; ubNOEP TuvZbT + + +VRAM_A_CNT_SHIFT * 0 ; uq`l ` Rg[ +VRAM_B_CNT_SHIFT * 8 ; a +VRAM_C_CNT_SHIFT * 16 ; b +VRAM_D_CNT_SHIFT * 24 ; c +VRAM_E_CNT_SHIFT * 0 ; d +VRAM_F_CNT_SHIFT * 8 ; e +VRAM_G_CNT_SHIFT * 16 ; f +VRAM_H_CNT_SHIFT * 0 ; g +VRAM_I_CNT_SHIFT * 8 ; h +WRAM_CNT_SHIFT * 24 ; [Nq`l +VRAM_AB_CNT_SHIFT * 0 ; uq`l `a +VRAM_CD_CNT_SHIFT * 16 ; bc +VRAM_EF_CNT_SHIFT * 0 ; de +VRAM_G_W_CNT_SHIFT * 16 ; f { [Nq`l +VRAM_HI_CNT_SHIFT * 0 ; gh + + +; \̃op萔 + +ST_VRAM_LCDC_MODE * 0 ; kbcb [h +ST_VRAM_BG_MODE * 1 ; af [h +ST_VRAM_OBJ_MODE * 2 ; nai [hi`CaCd`f̂݉j +ST_VRAM_SUBP_MODE * 2 ; TuvZbT [hibCĉ݉j +ST_VRAM_TEX_MODE * 3 ; eNX` [hi``ĉ݉j +ST_VRAM_TEXPLTT_MODE * 3 ; eNX`pbg [hid`f̂݉j +ST_VRAM_BGPLTT_MODE * 4 ; afpbg [hid`f̂݉j +ST_VRAM_OBJPLTT_MODE * 5 ; naipbg [hieCf̂݉j + +ST_VRAM_TEX_SLOT_0 * 0 ; eNX` XbgO +ST_VRAM_TEX_SLOT_1 * 1 ; P +ST_VRAM_TEX_SLOT_2 * 2 ; Q +ST_VRAM_TEX_SLOT_3 * 3 ; R +ST_VRAM_TEXPLTT_SLOT_0_3 * 0 ; eNX`pbg XbgO|R +ST_VRAM_TEXPLTT_SLOT_0 * 0 ; O +ST_VRAM_TEXPLTT_SLOT_1 * 1 ; P +ST_VRAM_TEXPLTT_SLOT_4 * 2 ; S +ST_VRAM_TEXPLTT_SLOT_5 * 3 ; T +ST_VRAM_BGPLTT_SLOT_0_3 * 0 ; afpbg XbgO|R +ST_VRAM_BGPLTT_SLOT_0_1 * 0 ; O|P +ST_VRAM_BGPLTT_SLOT_2_3 * 1 ; Q|R + + +ST_WRAM_MAINP_ALL * 0 ; L[Nq`lubNOEP CvZbT +ST_WRAM_MAINP_B1_SUBP_B0 * 1 ; ubNP CvZbT + ; ubNO TuvZbT +ST_WRAM_MAINP_B0_SUBP_B1 * 2 ; ubNO CvZbT + ; ubNP TuvZbT +ST_WRAM_SUBP_ALL * 3 ; ubNOEP TuvZbT + + +;----------------------------------------------------------------------- +; \Rg[ +;----------------------------------------------------------------------- + +DISP_BG_MODE_MASK * 0x00000007 ; af[h +DISP_ON_MASK * 0x00001f00 ; naiEaf nm +DISP_WIN_MASK * 0x00006000 ; EChE nm +DISP_OBJ_BMP_MAP_MASK * 0x00000060 ; nairbg}bvf[^ }bsO^Cv +DISP_MODE_MASK * 0x00030000 ; \[h +DISP_VRAM_MASK * 0x000c0000 ; \uq`lI +DISP_OBJ_VRAM_SIZE_MASK * 0x00700000 ; naipuq`lTCY +DISP_BGCHBASE_OFS_MASK * 0x07000000 ; afLN^f[^x[XAhXEItZbg +DISP_BGSCBASE_OFS_MASK * 0x38000000 ; afXN[f[^x[XAhXEItZbg + +DISP_BG_MODE_SHIFT * 0 +DISP_ON_SHIFT * 8 +DISP_WIN_SHIFT * 13 +DISP_MODE_SHIFT * 16 +DISP_OBJ_BMP_MAP_SHIFT * 5 +DISP_VRAM_SHIFT * 18 +DISP_OBJ_VRAM_SIZE_SHIFT * 20 +DISP_BGCHBASE_OFS_SHIFT * 24 +DISP_BGSCBASE_OFS_SHIFT * 27 + +DISP_BG_MODE_0 * 0x00000000 ; af[hOim[}Sj +DISP_BG_MODE_N4 * 0x00000000 +DISP_BG_MODE_1 * 0x00000001 ; af[hPim[}RAAtBPj +DISP_BG_MODE_N3A1 * 0x00000001 +DISP_BG_MODE_2 * 0x00000002 ; af[hQim[}QAAtBQj +DISP_BG_MODE_N2A2 * 0x00000002 +DISP_BG_MODE_3 * 0x00000003 ; af[hRim[}RAAtBgPj +DISP_BG_MODE_N3E1 * 0x00000003 +DISP_BG_MODE_4 * 0x00000004 ; af[hSim[}QAAtBPAAtBgPj +DISP_BG_MODE_N2A1E1 * 0x00000004 +DISP_BG_MODE_5 * 0x00000005 ; af[hTim[}QAAtBgQj +DISP_BG_MODE_N2E2 * 0x00000005 +DISP_BG_MODE_6 * 0x00000006 ; af[hUiRcŒ肘PAʃrbg}bvPj +DISP_BG_MODE_3D1W1 * 0x00000006 +DISP_BG0_3D_ON * 0x00000008 ; afOւRc\ +DISP_OBJ_CHAR_2D_MAP * 0x00000000 ; naiLN^f[^ Qc}bsO +DISP_OBJ_CHAR_1D_MAP * 0x00000010 ; naiLN^f[^ Pc}bsO +DISP_OBJ_BMP_H128_MAP * 0x00000000 ; nairbg}bvf[^ PQWhbgQc}bsO +DISP_OBJ_BMP_H256_MAP * 0x00000020 ; nairbg}bvf[^ QTUhbgQc}bsO +DISP_OBJ_BMP_1D_MAP * 0x00000040 ; nairbg}bvf[^ Pc}bsO +DISP_OBJ_BMP_VRAM_128KB * 0x00000000 ; nairbg}bvf[^uq`lPQWja +DISP_OBJ_BMP_VRAM_256KB * 0x00400000 ; QTUja +DISP_OBJ_HOFF * 0x00800000 ; guNnai nee +DISP_LCDC_OFF * 0x00000080 ; kbcb nee +DISP_BG0_ON * 0x00000100 ; afO nm +DISP_BG1_ON * 0x00000200 ; afP nm +DISP_BG2_ON * 0x00000400 ; afQ nm +DISP_BG3_ON * 0x00000800 ; afR nm +DISP_BG_ALL_ON * 0x00000f00 ; afS nm +DISP_OBJ_ON * 0x00001000 ; nai nm +DISP_OBJ_BG_ALL_ON * 0x00001f00 ; naiEafS nm +DISP_WIN0_ON * 0x00002000 ; EChEO nm +DISP_WIN1_ON * 0x00004000 ; EChEP nm +DISP_WIN01_ON * 0x00006000 ; EChEOEP nm +DISP_OBJWIN_ON * 0x00008000 ; naiEChE nm +DISP_WIN_ALL_ON * 0x0000e000 ; EChES nm +DISP_ALL_ON * 0x00007f00 ; S nm + +DISP_OFF_MODE * 0x00000000 ; \nee +DISP_GFX_MODE * 0x00010000 ; OtBbNX\[h +DISP_VRAM_MODE * 0x00020000 ; uq`l\[h +DISP_MMEM_MODE * 0x00030000 ; C\[h +DISP_VRAM_A * 0x00000000 ; uq`l|`\ +DISP_VRAM_B * 0x00040000 ; uq`l|a\ +DISP_VRAM_C * 0x00080000 ; uq`l|b\ +DISP_VRAM_D * 0x000c0000 ; uq`l|c\ +DISP_OBJ_CHAR_VRAM_32KB * 0x00000000 ; naipuq`lRQja +DISP_OBJ_CHAR_VRAM_64KB * 0x00100000 ; USja +DISP_OBJ_CHAR_VRAM_128KB * 0x00200000 ; PQWja +DISP_OBJ_CHAR_VRAM_256KB * 0x00300000 ; QTUja +DISP_BGPLTT_EX * 0x40000000 ; afpbgg +DISP_OBJPLTT_EX * 0x80000000 ; naipbgg + +; \̃op萔 + +ST_DISP_OBJ_CHAR_2D_MAP * 0 ; naiLN^f[^ Qc}bsO +ST_DISP_OBJ_CHAR_1D_MAP * 1 ; naiLN^f[^ Pc}bsO +ST_DISP_OBJ_BMP_H128_MAP * 0 ; nairbg}bvf[^ PQWhbgQc}bsO +ST_DISP_OBJ_BMP_H256_MAP * 1 ; nairbg}bvf[^ QTUhbgQc}bsO +ST_DISP_OBJ_BMP_1D_MAP * 2 ; nairbg}bvf[^ Pc}bsO + +ST_DISP_OFF_MODE * 0 ; \nee +ST_DISP_GFX_MODE * 1 ; OtBbNX\[h +ST_DISP_VRAM_MODE * 2 ; uq`l\[h +ST_DISP_MMEM_MODE * 3 ; C\[h + +ST_DISP_VRAM_A * 0 ; uq`l|`\ +ST_DISP_VRAM_B * 1 ; uq`l|a\ +ST_DISP_VRAM_C * 2 ; uq`l|b\ +ST_DISP_VRAM_D * 3 ; uq`l|c\ + + +;----------------------------------------------------------------------- +; \Xe[^X +;----------------------------------------------------------------------- + +DPSTAT_V_SET_LO_MASK * 0xff00 ; uJE^rlݒ +DPSTAT_V_SET_D8 * 0x0080 ; uJE^rlݒWrbg + +DPSTAT_V_SET_LO_SHIFT * 8 + +DPSTAT_V_BLANK * 0x0001 ; uuNԒ +DPSTAT_H_BLANK * 0x0002 ; guNԒ +DPSTAT_V_COUNT * 0x0004 ; uJE^v +DPSTAT_V_BLANK_IF_ENABLE * 0x0008 ; uuN荞ݗv +DPSTAT_H_BLANK_IF_ENABLE * 0x0010 ; guN荞ݗv +DPSTAT_V_COUNT_IF_ENABLE * 0x0020 ; uJE^v荞ݗv + + +;----------------------------------------------------------------------- +; Rc\Rg[ +;----------------------------------------------------------------------- + +DISP3D_FOG_INDEX_MASK * 0x00000f00 ; tHO CfbNX͈ + +DISP3D_FOG_INDEX_SHIFT * 8 + +DISP3D_TEX_MASTER_ON * 0x00000001 ; eNX`}X^ nm +DISP3D_SHADING_EX * 0x00000002 ; gVF[fBO[hݒ +DISP3D_TOON_MODE * 0x00000000 ; gD[VF[fBO[h +DISP3D_HIGHLIGHT_MODE * 0x00000002 ; nCCgVF[fBO[h +DISP3D_ALPHA_TEST_ON * 0x00000004 ; At@eXg nm +DISP3D_ALPHA_BLEND_ON * 0x00000008 ; At@uh nm +DISP3D_ANTI_ALIASING_ON * 0x00000010 ; A`GAVO nm +DISP3D_EDGE_MARKING_ON * 0x00000020 ; GbW}[LO nm +DISP3D_FOG_MODE * 0x00000040 ; tHO[h +DISP3D_RGBA_FOG_MODE * 0x00000000 ; qfa`tHO[h +DISP3D_ALPHA_FOG_MODE * 0x00000040 ; tHO[h +DISP3D_FOG_MASTER_ON * 0x00000080 ; tHO}X^ nm +DISP3D_CLEAR_IMAGE_ON * 0x00004000 ; NAC[W nm + +DISP3D_RENDER_OVER * 0x00001000 ; _O I[o[t[ +DISP3D_GEOMETRY_OVER * 0x00002000 ; WIg I[o[t[ + +; \̃op萔 + +ST_DISP3D_TOON_MODE * 0 ; gD[VF[fBO[h +ST_DISP3D_HIGHLIGHT_MODE * 1 ; nCCgVF[fBO[h + +ST_DISP3D_RGBA_FOG_MODE * 0 ; qfa`tHO[h +ST_DISP3D_ALPHA_FOG_MODE * 1 ; tHO[h + + +;----------------------------------------------------------------------- +; \Lv` +;----------------------------------------------------------------------- + +DPCAP_GFX_WEIGHT_MASK * 0x0000001f ; OtBbNX̃uhW +DPCAP_RAM_WEIGHT_MASK * 0x00001f00 ; q`l̃uhW +DPCAP_DEST_OFFSET_MASK * 0x000c0000 ; ݂uq`lAhXEItZbg +DPCAP_SIZE_MASK * 0x00300000 ; Lv`TCY +DPCAP_SRC_OFFSET_MASK * 0x0c000000 ; ǂݍ݂uq`lAhXEItZbg +DPCAP_BLEND_MODE_MASK * 0x60000000 ; uh[h + +DPCAP_GFX_WEIGHT_SHIFT * 0 +DPCAP_RAM_WEIGHT_SHIFT * 8 +DPCAP_DEST_OFFSET_SHIFT * 18 +DPCAP_SIZE_SHIFT * 20 +DPCAP_SRC_OFFSET_SHIFT * 26 +DPCAP_BLEND_MODE_SHIFT * 29 + +DPCAP_DEST_VRAM_MASK * 0x00030000 ; Lv`f[^݂uq`lI + +DPCAP_DEST_VRAM_SHIFT * 16 + +DPCAP_DEST_VRAM_A * 0x00000000 ; uq`l|` +DPCAP_DEST_VRAM_B * 0x00010000 ; uq`l|a +DPCAP_DEST_VRAM_C * 0x00020000 ; uq`l|b +DPCAP_DEST_VRAM_D * 0x00030000 ; uq`l|c +DPCAP_SIZE_128x128 * 0x00000000 ; PQWPQWhbg +DPCAP_SIZE_256x64 * 0x00100000 ; QTU UShbg +DPCAP_SIZE_256x128 * 0x00200000 ; QTUPQWhbg +DPCAP_SIZE_256x192 * 0x00300000 ; QTUQTUhbg +DPCAP_GFXSRC_FULL * 0x00000000 ; QcRcOtBbNXǂݍ +DPCAP_GFXSRC_3D * 0x01000000 ; RcOtBbNX̂ݓǂݍ +DPCAP_RAMSRC_VRAM * 0x00000000 ; uq`lǂݍ +DPCAP_RAMSRC_MMEM * 0x02000000 ; Cǂݍ +DPCAP_BLEND_GFX * 0x00000000 ; OtBbNX̂݃Lv` +DPCAP_BLEND_RAM * 0x20000000 ; q`l̂݃Lv` +DPCAP_BLEND_GFX_RAM * 0x40000000 ; OtBbNXƂq`lufBOăLv` +DPCAP_ENABLE * 0x80000000 ; \Lv` Cl[u + + +;----------------------------------------------------------------------- +; }X^[Px Rg[ +;----------------------------------------------------------------------- + +MSBRT_VALUE_MASK * 0x001f ; PxW +MSBRT_MODE_MASK * 0xc000 ; Px[h + +MSBRT_VALUE_SHIFT * 0 +MSBRT_MODE_SHIFT * 14 + +MSBRT_NORMAL_MODE * 0x0000 ; m[}[h +MSBRT_UP_MODE * 0x4000 ; Pxto[h +MSBRT_DOWN_MODE * 0x8000 ; Pxcnvm[h + + +;----------------------------------------------------------------------- +; uh Rg[ +;----------------------------------------------------------------------- + +BLD_PIXEL_MASK * 0x003f ; sNZI +BLD_1ST_PIXEL_MASK * 0x003f ; PsNZI +BLD_MODE_MASK * 0x00c0 ; uh[h +BLD_2ND_PIXEL_MASK * 0x3f00 ; QsNZI + +BLD_1ST_PIXEL_SHIFT * 0 +BLD_MODE_SHIFT * 6 +BLD_2ND_PIXEL_SHIFT * 8 + +BLD_BG0 * 0x0001 ; afO sNZI +BLD_BG1 * 0x0002 ; afP sNZI +BLD_BG2 * 0x0004 ; afQ sNZI +BLD_BG3 * 0x0008 ; afR sNZI +BLD_OBJ * 0x0010 ; nai sNZI +BLD_BD * 0x0020 ; wiF sNZI +BLD_ALL * 0x003f ; sNZSI +BLD_BG0_1ST * 0x0001 ; afO PsNZI +BLD_BG1_1ST * 0x0002 ; afP PsNZI +BLD_BG2_1ST * 0x0004 ; afQ PsNZI +BLD_BG3_1ST * 0x0008 ; afR PsNZI +BLD_OBJ_1ST * 0x0010 ; nai PsNZI +BLD_BD_1ST * 0x0020 ; wiF PsNZI +BLD_1ST_ALL * 0x003f ; PsNZSI +BLD_NORMAL_MODE * 0x0000 ; m[}[h +BLD_A_BLEND_MODE * 0x0040 ; [h +BLD_UP_MODE * 0x0080 ; Pxto[h +BLD_DOWN_MODE * 0x00c0 ; Pxcnvm[h +BLD_BG0_2ND * 0x0100 ; afO QsNZI +BLD_BG1_2ND * 0x0200 ; afP QsNZI +BLD_BG2_2ND * 0x0400 ; afQ QsNZI +BLD_BG3_2ND * 0x0800 ; afR QsNZI +BLD_OBJ_2ND * 0x1000 ; nai QsNZI +BLD_BD_2ND * 0x2000 ; wiF QsNZI +BLD_2ND_ALL * 0x3f00 ; QsNZSI + + +BLD_A_MASK * 0x001f ; uhW ` +BLD_B_MASK * 0x1f00 ; uhW a +BLD_Y_MASK * 0x001f ; uhW x + +BLD_A_SHIFT * 16 +BLD_B_SHIFT * 24 +BLD_Y_SHIFT * 0 + +; \̃op萔 + +ST_BLD_NORMAL_MODE * 0 ; m[}[h +ST_BLD_A_BLEND_MODE * 1 ; [h +ST_BLD_UP_MODE * 2 ; Pxto[h +ST_BLD_DOWN_MODE * 3 ; Pxcnvm[h + + +;----------------------------------------------------------------------- +; EChE Rg[ +;----------------------------------------------------------------------- + +WIN_END_POS_MASK * 0x00ff ; EChEI_ +WIN_START_POS_MASK * 0xff00 ; EChEJn_ + +WIN_END_POS_SHIFT * 0 +WIN_START_POS_SHIFT * 8 + +WIN_BG0_ON * 0x0001 ; afO nm +WIN_BG1_ON * 0x0002 ; afP nm +WIN_BG2_ON * 0x0004 ; afQ nm +WIN_BG3_ON * 0x0008 ; afR nm +WIN_OBJ_ON * 0x0010 ; nai nm +WIN_BLEND_ON * 0x0020 ; uh nm +WIN_ALL_ON * 0x003f ; S nm + +;----------------------------------------------------------------------- +; UCN Rg[ +;----------------------------------------------------------------------- + +MOS_H_SIZE_MASK * 0x000f ; UCN +MOS_V_SIZE_MASK * 0x00f0 ; UCN +MOS_BG_H_SIZE_MASK * 0x000f ; afUCN +MOS_BG_V_SIZE_MASK * 0x00f0 ; afUCN +MOS_OBJ_H_SIZE_MASK * 0x000f ; naiUCN +MOS_OBJ_V_SIZE_MASK * 0x00f0 ; naiUCN + +MOS_H_SIZE_SHIFT * 0 +MOS_V_SIZE_SHIFT * 4 +MOS_BG_H_SIZE_SHIFT * 0 +MOS_BG_V_SIZE_SHIFT * 4 +MOS_OBJ_H_SIZE_SHIFT * 8 +MOS_OBJ_V_SIZE_SHIFT * 12 + + + +;----------------------------------------------------------------------- +; afRg[ +;----------------------------------------------------------------------- + +BG_PRIORITY_MASK * 0x0003 ; afԗD揇 +BG_CHAR_BASE_MASK * 0x003c ; LN^ x[XAhX +BG_SCREEN_BASE_MASK * 0x1f00 ; XN[ x[XAhX +BG_SCREEN_SIZE_MASK * 0xc000 ; XN[TCYiQTU^TPQj + +BG_PRIORITY_SHIFT * 0 +BG_CHAR_BASE_SHIFT * 2 +BG_SCREEN_BASE_SHIFT * 8 +BG_SCREEN_SIZE_SHIFT * 14 + +BG_PRIORITY_0 * 0x0000 ; afOD +BG_PRIORITY_1 * 0x0001 ; afPD +BG_PRIORITY_2 * 0x0002 ; afQD +BG_PRIORITY_3 * 0x0003 ; afRD +BG_MOS_ON * 0x0040 ; UCN nm +BG_MOS_OFF * 0x0000 ; UCN nee +BG_COLOR_16 * 0x0000 ; PUF I +BG_COLOR_256 * 0x0080 ; QTUF I +BG_CHAR_16 * 0x0000 ; PUFLN^af +BG_CHAR_256 * 0x0080 ; QTUFLN^af +BGE_CHAR_256x16 * 0x0000 ; QTUFPUpbgLN^af +BGE_BMP_256 * 0x0080 ; QTUFrbg}bvaf +BGE_BMP_DIRECT * 0x0084 ; _CNgJ[rbg}bvaf +BG_LOOP_ON * 0x2000 ; [v nm +BG_LOOP_OFF * 0x0000 ; [v nee +BG_EXPLTT_SLOT_0 * 0x0000 ; gpbgXbgO֊蓖 +BG_EXPLTT_SLOT_1 * 0x0000 ; XbgP +BG_EXPLTT_SLOT_2 * 0x2000 ; XbgQ +BG_EXPLTT_SLOT_3 * 0x2000 ; XbgR +BG_SCREEN_SIZE_0 * 0x0000 ; XN[TCYiQTUQTUj +BG_SCREEN_SIZE_1 * 0x4000 ; XN[TCYiTPQQTUj +BG_SCREEN_SIZE_2 * 0x8000 ; XN[TCYiQTUTPQj +BG_SCREEN_SIZE_3 * 0xc000 ; XN[TCYiTPQTPQj + +; \̃op萔 + +ST_BG_COLOR_16 * 0 ; PUF I +ST_BG_COLOR_256 * 1 ; QTUF I + + + +;----------------------------------------------------------------------- +; r[|[g +;----------------------------------------------------------------------- + +VIEWPORT_START_X_MASK * 0x000000ff ; X^[g wW +VIEWPORT_START_Y_MASK * 0x0000ff00 ; xW +VIEWPORT_END_X_MASK * 0x00ff0000 ; Gh wW +VIEWPORT_END_Y_MASK * 0xff000000 ; xW + +VIEWPORT_START_X_SHIFT * 0 +VIEWPORT_START_Y_SHIFT * 8 +VIEWPORT_END_X_SHIFT * 16 +VIEWPORT_END_Y_SHIFT * 24 + + +;----------------------------------------------------------------------- +; Cobt@ NA +;----------------------------------------------------------------------- + +CLR_ID_MASK * 0x3f000000 ; hc + +CLR_ID_SHIFT * 24 + +CLR_FOG_ON * 0x00008000 ; tHOtO nm +CLR_FOG_OFF * 0x00000000 ; tHOtO nee + + +;----------------------------------------------------------------------- +; WIgR}h +;----------------------------------------------------------------------- + +GXOP_NOP * 0x00 ; mno + +GXOP_MTX_MODE * 0x10 ; s񃂁[h +GXOP_MTX_PUSH * 0x11 ; svbV +GXOP_MTX_POP * 0x12 ; s|bv +GXOP_MTX_STORE * 0x13 ; sXgA +GXOP_MTX_RESTORE * 0x14 ; s񃊃XgA +GXOP_MTX_IDENTITY * 0x15 ; Pʍs +GXOP_MTX_LOAD_4x4 * 0x16 ; s񃍁[hiSSj +GXOP_MTX_LOAD_4x3 * 0x17 ; iSRj +GXOP_MTX_MULT_4x4 * 0x18 ; sZ iSSj +GXOP_MTX_MULT_4x3 * 0x19 ; iSRj +GXOP_MTX_MULT_3x3 * 0x1a ; iRRj +GXOP_MTX_SCALE * 0x1b ; XP[sZiPRj +GXOP_MTX_TRANS * 0x1c ; ړsZiPRj + +GXOP_POLYGON_ATTR * 0x29 ; |S + +GXOP_COLOR * 0x20 ; _J[ +GXOP_NORMAL * 0x21 ; _@ +GXOP_TEXCOORD * 0x22 ; _eNX`W +GXOP_VTX_16 * 0x23 ; _16bitW +GXOP_VTX_10 * 0x24 ; _10bitW +GXOP_VTX_XY * 0x25 ; _16bitXYW +GXOP_VTX_XZ * 0x26 ; _16bitXZW +GXOP_VTX_YZ * 0x27 ; _16bitYZW +GXOP_VTX_DIFF * 0x28 ; _16bitWl +GXOP_TEX_PARAM * 0x2a ; eNX`p[^ +GXOP_TEXIMAGE_PARAM * 0x2a +GXOP_TEXPLTT_BASE * 0x2b + +GXOP_BOX_TEST * 0x70 ; {bNXeXg +GXOP_POS_TEST * 0x71 ; ʒueXg +GXOP_VEC_TEST * 0x72 ; xNgeXg + +GXOP_MATERIAL_COLOR_0 * 0x30 ; }eAJ[ +GXOP_MATERIAL_COLOR_1 * 0x31 +GXOP_DIF_AMB * 0x30 ; gU ‹ +GXOP_SPE_EMI * 0x31 ; ˌ ˌ +GXOP_LIGHT_VECTOR * 0x32 ; CgxNg +GXOP_LIGHT_COLOR * 0x33 ; CgJ[ +GXOP_SHININESS * 0x34 ; ʔˋPx + +GXOP_BEGIN * 0x40 ; WIg X^[g +GXOP_END * 0x41 ; WIg Gh + +GXOP_SWAP_BUFFERS * 0x50 ; _OGWQƃf[^Q̃Xbv + +GXOP_VIEWPORT * 0x60 ; r[|[g + + +;----------------------------------------------------------------------- +; WIgR}h p[^ +;----------------------------------------------------------------------- + +GXOP_NPARAMS_MAX * 32 ; ő吔 + +GXOP_NOP_NPARAMS * 0 ; mno + +GXOP_MTX_MODE_NPARAMS * 1 ; s񃂁[h +GXOP_MTX_PUSH_NPARAMS * 0 ; svbV +GXOP_MTX_POP_NPARAMS * 1 ; s|bv +GXOP_MTX_STORE_NPARAMS * 1 ; sXgA +GXOP_MTX_RESTORE_NPARAMS * 1 ; s񃊃XgA +GXOP_MTX_IDENTITY_NPARAMS * 0 ; Pʍs +GXOP_MTX_LOAD_4x4_NPARAMS * 16 ; s񃍁[hiSSj +GXOP_MTX_LOAD_4x3_NPARAMS * 12 ; iSRj +GXOP_MTX_MULT_4x4_NPARAMS * 16 ; sZ iSSj +GXOP_MTX_MULT_4x3_NPARAMS * 12 ; iSRj +GXOP_MTX_MULT_3x3_NPARAMS * 9 ; iRRj +GXOP_MTX_SCALE_NPARAMS * 3 ; XP[sZiPRj +GXOP_MTX_TRANS_NPARAMS * 3 ; ړsZiPRj + +GXOP_POLYGON_ATTR_NPARAMS * 1 ; |S + +GXOP_COLOR_NPARAMS * 1 ; _J[ +GXOP_NORMAL_NPARAMS * 1 ; _@ +GXOP_TEXCOORD_NPARAMS * 1 ; _eNX`W +GXOP_VTX_16_NPARAMS * 2 ; _16bitW +GXOP_VTX_10_NPARAMS * 1 ; _10bitW +GXOP_VTX_XY_NPARAMS * 1 ; _16bitXYW +GXOP_VTX_XZ_NPARAMS * 1 ; _16bitXZW +GXOP_VTX_YZ_NPARAMS * 1 ; _16bitYZW +GXOP_VTX_DIFF_NPARAMS * 1 ; _16bitWl + +GXOP_TEX_PARAM_NPARAMS * 1 ; eNX`p[^ +GXOP_TEXIMAGE_PARAM_NPARAMS * 1 +GXOP_TEXPLTT_BASE_NPARAMS * 1 + +GXOP_BOX_TEST_NPARAMS * 3 ; {bNXeXg +GXOP_POS_TEST_NPARAMS * 2 ; ʒueXg +GXOP_VEC_TEST_NPARAMS * 1 ; xNgeXg + +GXOP_MATERIAL_COLOR_0_NPARAMS * 1 ; }eAJ[ +GXOP_MATERIAL_COLOR_1_NPARAMS * 1 +GXOP_DIF_AMB_NPARAMS * 1 ; gU ‹ +GXOP_SPE_EMI_NPARAMS * 1 ; ˌ ˌ +GXOP_LIGHT_VECTOR_NPARAMS * 1 ; CgxNg +GXOP_LIGHT_COLOR_NPARAMS * 1 ; CgJ[ +GXOP_SHININESS_NPARAMS * 32 ; ʔˋPx + +GXOP_BEGIN_NPARAMS * 1 ; WIg X^[g +GXOP_END_NPARAMS * 0 ; WIg Gh + +GXOP_SWAP_BUFFERS_NPARAMS * 1 ; _OGWQƃf[^Q̃Xbv + +GXOP_VIEWPORT_NPARAMS * 1 ; r[|[g + + +;----------------------------------------------------------------------- +; WIgXe[^X Rg[ +;----------------------------------------------------------------------- + +GXSTAT_POSVEC_STACK_MASK * 0x00001f00 ; ʒuxNg}gbNX X^bNx +GXSTAT_FIFO_COUNT_MASK * 0x00ff0000 ; R}hehen c +GXSTAT_FIFO_INTR_MASK * 0xc0000000 ; 荞݃^Cv + +GXSTAT_POSVEC_STACK_SHIFT * 8 +GXSTAT_FIFO_COUNT_SHIFT * 16 +GXSTAT_FIFO_INTR_SHIFT * 30 + +GXSTAT_TEST_BUSY * 0x00000001 ; anw^_^xN^eXg rW[ +GXSTAT_BOX_IN_VIEW * 0x00000002 ; anẅꕔ̐ϓ +GXSTAT_PROJ_STACK_LEVEL * 0x00002000 ; vWFNV}gbNX X^bNx +GXSTAT_MTX_STACK_BUSY * 0x00004000 ; }gbNXX^bN rW[ +GXSTAT_MTX_STACK_ERROR * 0x00008000 ; }gbNXX^bN G[ + +GXSTAT_GEOMETRY_BUSY * 0x08000000 ; WIgGW rW[ +GXSTAT_FIFO_FULL * 0x01000000 ; R}hehen t +GXSTAT_FIFO_UNDER_HALF * 0x02000000 ; n[tȉ +GXSTAT_FIFO_EMPTY * 0x04000000 ; GveB +GXSTAT_FIFO_FULL_INTR * 0x00000000 ; tŊ荞 +GXSTAT_FIFO_HALF_INTR * 0x40000000 ; n[tȉŊ荞 +GXSTAT_FIFO_EMPTY_INTR * 0x80000000 ; GveBŊ荞 + + +;----------------------------------------------------------------------- +; WIgq`lXbv Rg[ +;----------------------------------------------------------------------- + +SWPBF_XLU_AUTO_YSORT * 0x00000000 ; |S I[gx\[g +SWPBF_XLU_MANUAL_SORT * 0x00000001 ; }jA\[g +SWPBF_Z_BUFFERING * 0x00000000 ; yobt@O +SWPBF_W_BUFFERING * 0x00000002 ; vobt@O + + +;----------------------------------------------------------------------- +; s񃂁[h Rg[ +;----------------------------------------------------------------------- + +MTX_MODE_MASK * 0x00000003 ; s񃂁[h + +MTX_MODE_SHIFT * 0 + +MTX_PROJECTION_MODE * 0x00000000 ; vWFNVs +MTX_POSITION_MODE * 0x00000001 ; ʒuWs +MTX_POSITION_VECTOR_MODE * 0x00000002 ; ʒuWxNgs ݒ +MTX_TEXTURE_MODE * 0x00000003 ; eNX`s + +; \̃op萔 + +ST_MTX_PROJECTION_MODE * 0 ; vWFNVs +ST_MTX_POSITION_MODE * 1 ; ʒuWs +ST_MTX_POSITION_VECTOR_MODE * 2 ; ʒuWxNgs ݒ +ST_MTX_TEXTURE_MODE * 3 ; eNX`s + + +;----------------------------------------------------------------------- +; Cg +;----------------------------------------------------------------------- + +LIGHT_ID_MASK * 0xc0000000 ; hc + +LIGHT_ID_SHIFT * 30 + +;----------------------------------------------------------------------- +; }eAJ[ +;----------------------------------------------------------------------- + +DIFFUSE_SET_COLOR_OFF * 0x0000 ; fBt[YJ[̒_J[ւ̃Zbg nee +DIFFUSE_SET_COLOR_ON * 0x8000 ; nm + +DIFFUSE_SET_COLOR_SHIFT * 15 + +SHININESS_TABLE_OFF * 0x0000 ; ʔˋPxe[u nee +SHININESS_TABLE_ON * 0x8000 ; nm + +SHININESS_TABLE_SHIFT * 15 + + +;----------------------------------------------------------------------- +; |S +;----------------------------------------------------------------------- + +POLYATTR_LIGHT_ON_MASK * 0x0000000f ; Cgnm +POLYATTR_RD_MODE_MASK * 0x00000030 ; _O[h +POLYATTR_ALPHA_MASK * 0x001f0000 ; l +POLYATTR_ID_MASK * 0x3f000000 ; hc + +POLYATTR_LIGHT_ON_SHIFT * 0 +POLYATTR_RD_MODE_SHIFT * 4 +POLYATTR_ALPHA_SHIFT * 16 +POLYATTR_ID_SHIFT * 24 + +POLYATTR_LIGHT0_ON * 0x00000001 ; CgO nm +POLYATTR_LIGHT1_ON * 0x00000002 ; CgP nm +POLYATTR_LIGHT2_ON * 0x00000004 ; CgQ nm +POLYATTR_LIGHT3_ON * 0x00000008 ; CgR nm +POLYATTR_LIGHT_ALL_ON * 0x0000000f ; SCg nm + +POLYATTR_MODULATE * 0x00000000 ; W[V[h +POLYATTR_DECAL * 0x00000010 ; fJ[[h +POLYATTR_TOON * 0x00000020 ; gD[^nCCgVF[fBO[h +POLYATTR_HIGHLIGHT * 0x00000020 +POLYATTR_SHADOW * 0x00000030 ; VhE|S[h + +POLYATTR_BACK_OFF * 0x00000000 ; nee +POLYATTR_BACK_ON * 0x00000040 ; nm +POLYATTR_FRONT_OFF * 0x00000000 ; \ nee +POLYATTR_FRONT_ON * 0x00000080 ; nm +POLYATTR_XLU_DEPTH_OFF * 0x00000000 ; |S̃fvXobt@XV nee +POLYATTR_XLU_DEPTH_ON * 0x00000800 ; nm +POLYATTR_FAR_REJECT * 0x00000000 ; e`qWFNg +POLYATTR_FAR_CLIPPING * 0x00001000 ; e`qNbsO +POLYATTR_DISP_1DOT * 0x00002000 ; Phbg\ +POLYATTR_DEPTH_LESS * 0x00000000 ; fvXobt@l菬` +POLYATTR_DEPTH_EQUAL * 0x00004000 ; fvXobt@lƓ` +POLYATTR_FOG_OFF * 0x00000000 ; tHO nee +POLYATTR_FOG_ON * 0x00008000 ; nm + +; \̃op萔 + +ST_POLYATTR_MODULATE * 0 ; W[V[h +ST_POLYATTR_DECAL * 1 ; fJ[[h +ST_POLYATTR_TOON * 2 ; gD[^nCCg[h +ST_POLYATTR_HIGHLIGHT * 2 +ST_POLYATTR_SHADOW * 3 ; VhE|S[h + +ST_POLYATTR_DEPTH_LESS * 0 ; fvXobt@l菬` +ST_POLYATTR_DEPTH_EQUAL * 1 ; fvXobt@lƓ` + + +;----------------------------------------------------------------------- +; adfhm Rg[ +;----------------------------------------------------------------------- + +BEGIN_PRIM_TYPE_MASK * 0x00000003 ; v~eBu^Cv + +BEGIN_PRIM_TYPE_SHIFT * 0 + +BEGIN_TRIANGLES * 0x00000000 ; Op`|S +BEGIN_QUADS * 0x00000001 ; lp`|S +BEGIN_TRIANGLE_STRIP * 0x00000002 ; AOp`|S +BEGIN_QUAD_STRIP * 0x00000003 ; Alp`|S + +; \̃op萔 + +ST_BEGIN_TRIANGLES * 0 ; Op`|S +ST_BEGIN_QUADS * 1 ; lp`|S +ST_BEGIN_TRIANGLE_STRIP * 2 ; AOp`|S +ST_BEGIN_QUAD_STRIP * 3 ; Alp`|S + + +;----------------------------------------------------------------------- +; eNX` p[^ +;----------------------------------------------------------------------- + +TEX_IMAGE_BASE_MASK * 0x0000ffff ; C[Wx[XAhX +TEX_S_SIZE_MASK * 0x00700000 ; rTCY +TEX_T_SIZE_MASK * 0x03800000 ; sTCY +TEX_FORMAT_MASK * 0x1c000000 ; tH[}bg +TEX_GEN_MODE_MASK * 0xc0000000 ; eNX`Wϊ[h + +TEX_ADDR_SHIFT * 0 +TEX_S_SIZE_SHIFT * 20 +TEX_T_SIZE_SHIFT * 23 +TEX_FORMAT_SHIFT * 26 +TEX_GEN_MODE_SHIFT * 30 + +TEX_IMAGE_BASE_SHIFT * 3 + +TEX_ST_REPEAT_ON * 0x00030000 ; rss[g nm +TEX_ST_REPEAT_OFF * 0x00000000 ; nee +TEX_S_REPEAT_ON * 0x00010000 ; rs[g nm +TEX_S_REPEAT_OFF * 0x00000000 ; nee +TEX_T_REPEAT_ON * 0x00020000 ; ss[g nm +TEX_T_REPEAT_OFF * 0x00000000 ; nee +TEX_ST_FLIP_ON * 0x000c0000 ; rstbv nm +TEX_ST_FLIP_OFF * 0x00000000 ; nee +TEX_S_FLIP_ON * 0x00040000 ; rtbv nm +TEX_S_FLIP_OFF * 0x00000000 ; nee +TEX_T_FLIP_ON * 0x00080000 ; stbv nm +TEX_T_FLIP_OFF * 0x00000000 ; nee +TEX_S_SIZE_8 * 0x00000000 ; rTCY WeNZ +TEX_S_SIZE_16 * 0x00100000 ; PUeNZ +TEX_S_SIZE_32 * 0x00200000 ; RQeNZ +TEX_S_SIZE_64 * 0x00300000 ; USeNZ +TEX_S_SIZE_128 * 0x00400000 ; PQWeNZ +TEX_S_SIZE_256 * 0x00500000 ; QTUeNZ +TEX_S_SIZE_512 * 0x00600000 ; TPQeNZ +TEX_S_SIZE_1024 * 0x00700000 ; POQSeNZ +TEX_T_SIZE_8 * 0x00000000 ; sTCY WeNZ +TEX_T_SIZE_16 * 0x00800000 ; PUeNZ +TEX_T_SIZE_32 * 0x01000000 ; RQeNZ +TEX_T_SIZE_64 * 0x01800000 ; USeNZ +TEX_T_SIZE_128 * 0x02000000 ; PQWeNZ +TEX_T_SIZE_256 * 0x02800000 ; QTUeNZ +TEX_T_SIZE_512 * 0x03000000 ; TPQeNZ +TEX_T_SIZE_1024 * 0x03800000 ; POQSeNZ + +TEX_FORMAT_NONE * 0x00000000 ; eNX` +TEX_FORMAT_4PLTT * 0x08000000 ; SFpbgeNX` +TEX_FORMAT_16PLTT * 0x0c000000 ; PUFpbgeNX` +TEX_FORMAT_256PLTT * 0x10000000 ; QTUFpbgeNX` +TEX_FORMAT_4x4COMP * 0x14000000 ; SSkeNX` + IF :DEF: IRIS_TS +TEX_FORMAT_ALPHA3 * 0x04000000 ; ReNX` + ENDIF +TEX_FORMAT_ALPHA5 * 0x18000000 ; TeNX` +TEX_FORMAT_DIRECT * 0x1c000000 ; J[_CNgeNX` + +TEX_PLTT0_OFF * 0x20000000 ; J[pbgO nee +TEX_PLTT0_ON * 0x00000000 ; nm +TEX_PLTT0_XLU * 0x20000000 ; iOj + +TEX_GEN_DIRECT * 0x00000000 ; Wϊ +TEX_GENSRC_TEXCOORD * 0x40000000 ; Wϊ\[X sb +TEX_GENSRC_NORMAL * 0x80000000 ; m +TEX_GENSRC_VERTEX * 0xc0000000 ; u + + +; \̃op萔 + +ST_TEX_SIZE_8 * 0 ; eNX`TCY WeNZ +ST_TEX_SIZE_16 * 1 ; PUeNZ +ST_TEX_SIZE_32 * 2 ; RQeNZ +ST_TEX_SIZE_64 * 3 ; USeNZ +ST_TEX_SIZE_128 * 4 ; PQWeNZ +ST_TEX_SIZE_256 * 5 ; QTUeNZ +ST_TEX_SIZE_512 * 6 ; TPQeNZ +ST_TEX_SIZE_1024 * 7 ; POQSeNZ + +ST_TEX_FORMAT_NONE * 0 ; eNX` +ST_TEX_FORMAT_4PLTT * 2 ; SFpbgeNX` +ST_TEX_FORMAT_16PLTT * 3 ; PUFpbgeNX` +ST_TEX_FORMAT_256PLTT * 4 ; QTUFpbgeNX` +ST_TEX_FORMAT_4x4COMP * 5 ; SSkeNX` + IF :DEF: IRIS_TS +ST_TEX_FORMAT_ALPHA3 * 1 ; ReNX` + ENDIF +ST_TEX_FORMAT_ALPHA5 * 6 ; TeNX` +ST_TEX_FORMAT_DIRECT * 7 ; J[_CNgeNX` + +ST_TEX_GEN_DIRECT * 0 ; Wϊ +ST_TEX_GENSRC_TEXCOORD * 1 ; Wϊ\[X sb +ST_TEX_GENSRC_NORMAL * 2 ; m +ST_TEX_GENSRC_VERTEX * 3 ; u + + +;----------------------------------------------------------------------- +; eNX`pbgx[X +;----------------------------------------------------------------------- + +TEX_PLTT_BASE_MASK * 0x00001fff ; pbgx[XAhX +TEXPLT_BASE_MASK * TEX_PLTT_BASE_MASK + +TEXPLT_FORMAT_NONE * 0 ; eNX`pbg +TEXPLT_FORMAT_4PLTT * 2 ; SFpbgeNX` +TEXPLT_FORMAT_16PLTT * 3 ; PUFpbgeNX` +TEXPLT_FORMAT_256PLTT * 4 ; QTUFpbgeNX` +TEXPLT_FORMAT_4x4COMP * 5 ; SSkeNX` + IF :DEF: IRIS_TS +TEXPLT_FORMAT_ALPHA3 * 1 ; ReNX` + ENDIF +TEXPLT_FORMAT_ALPHA5 * 6 ; TeNX` + +TEXPLT_FORMAT_NONE_SHIFT * 0 +TEXPLT_FORMAT_4PLTT_SHIFT * 3 +TEXPLT_FORMAT_16PLTT_SHIFT * 4 +TEXPLT_FORMAT_256PLTT_SHIFT * 4 +TEXPLT_FORMAT_4x4COMP_SHIFT * 4 + IF :DEF: IRIS_TS +TEXPLT_FORMAT_ALPHA3_SHIFT * 4 + ENDIF +TEXPLT_FORMAT_ALPHA5_SHIFT * 4 + +;----------------------------------------------------------------------- +; keNX` pbgCfbNX +;----------------------------------------------------------------------- + +TEX4X4_PLTT_INDEX_MASK * 0x00003fff ; pbgCfbNX + +TEX4X4_PLTT_INDEX_SHIFT * 0 + +TEX4X4_DIRECT_PLTT * 0x00000000 ; Spbg +TEX4X4_LINER_PLTT * 0x00008000 ; QpbgSԃpbg +TEX4X4_INDEX_3 * 0x00000000 ; RCfbNX{ +TEX4X4_INDEX_4 * 0x00004000 ; SCfbNX + + + +;----------------------------------------------------------------------- +; cl`Rg[ +;----------------------------------------------------------------------- + +DMA_ENABLE * 0x80000000 ; cl` +DMA_IF_ENABLE * 0x40000000 ; 荞ݗv + +DMA_TIMMING_MASK * 0x38000000 ; Jn^C~O +DMA_COUNT_MASK * 0x001fffff ; ] + +DMA_TIMMING_SHIFT * 27 +DMA_COUNT_SHIFT * 0 + +DMA_TIMMING_IMM * 0x00000000 ; ɋN +DMA_TIMMING_V_BLANK * 0x08000000 ; uuNN +DMA_TIMMING_H_BLANK * 0x10000000 ; guNN +DMA_TIMMING_DISP * 0x18000000 ; \ +DMA_TIMMING_DISP_MMEM * 0x20000000 ; C\ +DMA_TIMMING_CARD * 0x28000000 ; J[h +DMA_TIMMING_CARTRIDGE * 0x30000000 ; J[gbW +DMA_TIMMING_GXFIFO * 0x38000000 ; WIgehen +DMA_16BIT_BUS * 0x00000000 ; oXTCYPUaI +DMA_32BIT_BUS * 0x04000000 ; oXTCYRQaI +DMA_CONTINUOUS_ON * 0x02000000 ; ReBjAX[h nm +DMA_SRC_INC * 0x00000000 ; ] CNg I +DMA_SRC_DEC * 0x00800000 ; ] fNg I +DMA_SRC_FIX * 0x01000000 ; ] Œ I +DMA_DEST_INC * 0x00000000 ; ] CNg I +DMA_DEST_DEC * 0x00200000 ; ] fNg I +DMA_DEST_FIX * 0x00400000 ; ] Œ I +DMA_DEST_RELOAD * 0x00600000 ; ] CNg/[h I + +; \̃op萔 + +ST_DMA_TIMMING_IMM * 0 ; ɋN +ST_DMA_TIMMING_V_BLANK * 1 ; uuNN +ST_DMA_TIMMING_H_BLANK * 2 ; guNN +ST_DMA_TIMMING_DISP * 3 ; \N +ST_DMA_TIMMING_DISP_MMEM * 4 ; C\ +ST_DMA_TIMMING_CARD * 5 ; J[h +ST_DMA_TIMMING_CARTRIDGE * 6 ; J[gbW +ST_DMA_TIMMING_GXFIFO * 7 ; WIgehen +ST_DMA_16BIT_BUS * 0 ; oXTCYPUaI +ST_DMA_32BIT_BUS * 1 ; oXTCYRQaI +ST_DMA_INC * 0 ; AhXECNg I +ST_DMA_DEC * 1 ; AhXEfNg I +ST_DMA_FIX * 2 ; AhXŒ I +ST_DMA_RELOAD * 3 ; AhXECNg/[h I + + +;----------------------------------------------------------------------- +; ^C}[ Rg[ +;----------------------------------------------------------------------- + +TMR_PRESCALER_MASK * 0x00030000 ; vXP[ NbN + +TMR_PRESCALER_SHIFT * 16 + +TMR_PRESCALER_1CK * 0x00000000 ; vXP[ P +TMR_PRESCALER_64CK * 0x00010000 ; US +TMR_PRESCALER_256CK * 0x00020000 ; QTU +TMR_PRESCALER_1024CK * 0x00030000 ; POQS +TMR_CONNECT * 0x00040000 ; ʃ^C}[ڑ +TMR_IF_ENABLE * 0x00400000 ; 荞ݗv +TMR_ENABLE * 0x00800000 ; ^C}[N + +; \̃op萔 + +ST_TMR_PRESCALER_1CK * 0 ; vXP[ P +ST_TMR_PRESCALER_64CK * 1 ; US +ST_TMR_PRESCALER_256CK * 2 ; QTU +ST_TMR_PRESCALER_1024CK * 3 ; POQS + + +;----------------------------------------------------------------------- +; L[ +;----------------------------------------------------------------------- + +BUTTON_MASK * 0x030f ; {^ +PLUS_KEY_MASK * 0x00f0 ; \L[ +ALL_KEY_MASK * 0x03ff ; SẴL[ + +A_BUTTON * 0x0001 ; `{^ +B_BUTTON * 0x0002 ; a{^ +SELECT_BUTTON * 0x0004 ; ZNg{^ +START_BUTTON * 0x0008 ; X^[g{^ +R_KEY * 0x0010 ; E{^ +L_KEY * 0x0020 ; {^ +U_KEY * 0x0040 ; {^ +D_KEY * 0x0080 ; {^ +R_BUTTON * 0x0100 ; q{^ +L_BUTTON * 0x0200 ; k{^ +KEY_IF_ENABLE * 0x4000 ; 荞ݗv +KEY_OR_INTR * 0x0000 ; ʏL[荞 +KEY_AND_INTR * 0x8000 ; `mcL[荞 + +; \̃op萔 + +ST_KEY_OR_INTR * 0 ; ʏL[荞 +ST_KEY_AND_INTR * 1 ; `mcL[荞 + + +;----------------------------------------------------------------------- +; O Rg[ +;----------------------------------------------------------------------- + +CTRDG_DT8_10CYC * 0x0000 ; J[gbW Wf[^oX POTCN +CTRDG_DT8_8CYC * 0x0001 ; WTCN +CTRDG_DT8_6CYC * 0x0002 ; UTCN +CTRDG_DT8_18CYC * 0x0003 ; PWTCN +CTRDG_AD16_1ST_10CYC * 0x0000 ; J[gbW `cPUoX P POTCN +CTRDG_AD16_1ST_8CYC * 0x0004 ; WTCN +CTRDG_AD16_1ST_6CYC * 0x0008 ; UTCN +CTRDG_AD16_1ST_18CYC * 0x000c ; PWTCN +CTRDG_AD16_2ND_6CYC * 0x0000 ; Q UTCN +CTRDG_AD16_2ND_4CYC * 0x0010 ; STCN + +CTRDG_PHI_OUT_NONE * 0x0000 ; Ӓ[qo̓NbN kŒ +CTRDG_PHI_OUT_4MCK * 0x0020 ; Slg +CTRDG_PHI_OUT_8MCK * 0x0040 ; Wlg +CTRDG_PHI_OUT_16MCK * 0x0060 ; PUlg + +CTRDG_ACCESS * 0x0080 ; J[gbWANZXI +CTRDG_ACCESS_MAINP * 0x0000 ; CvZbT +CTRDG_ACCESS_SUBP * 0x0080 ; TuvZbT + +CARD_ACCESS * 0x0800 ; J[hANZXI +CARD_ACCESS_MAINP * 0x0000 ; CvZbT +CARD_ACCESS_SUBP * 0x0800 ; TuvZbT + +MMEM_CE2_OUT * 0x2000 ; bdQMo + +MMEM_INTF * 0x4000 ; CC^tF[Xisdfł͏ɃZbgē[hɂj +MMEM_INTF_ASYNC * 0x0000 ; 񓯊[h +MMEM_INTF_SYNC * 0x4000 ; [h + +MMEM_PRIORITY * 0x8000 ; CD挠I +MMEM_PRIORITY_MAINP * 0x0000 ; CvZbT +MMEM_PRIORITY_SUBP * 0x8000 ; TuvZbT + +; \̃op萔 + +ST_CTRDG_DT8_10CYC * 0 ; J[gbW Wf[^oX POTCN +ST_CTRDG_DT8_8CYC * 1 ; WTCN +ST_CTRDG_DT8_6CYC * 2 ; UTCN +ST_CTRDG_DT8_18CYC * 3 ; PWTCN +ST_CTRDG_AD16_1ST_10CYC * 0 ; J[gbW `cPUoX P POTCN +ST_CTRDG_AD16_1ST_8CYC * 1 ; WTCN +ST_CTRDG_AD16_1ST_6CYC * 2 ; UTCN +ST_CTRDG_AD16_1ST_18CYC * 3 ; PWTCN +ST_CTRDG_AD16_2ND_6CYC * 0 ; Q UTCN +ST_CTRDG_AD16_2ND_4CYC * 1 ; STCN + +ST_CTRDG_PHI_OUT_NONE * 0 ; Ӓ[qo̓NbN kŒ +ST_CTRDG_PHI_OUT_4MCK * 1 ; Slg +ST_CTRDG_PHI_OUT_8MCK * 2 ; Wlg +ST_CTRDG_PHI_OUT_16MCK * 3 ; PUlg + + + + ENDIF ; _IRIS_DEFINE_H + + END + diff --git a/trunk/IrisMainp/include/IrisGX.h b/trunk/IrisMainp/include/IrisGX.h new file mode 100644 index 0000000..6f9aacf --- /dev/null +++ b/trunk/IrisMainp/include/IrisGX.h @@ -0,0 +1,2609 @@ +//====================================================================== +// IrisGX.h +// IRIS 3DOtBbNXGWCu +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_GX_H +#define _IRIS_GX_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include +#include + + +//---------------------------------------------------------------------- +// fBXvCXgcl`] +// +//EWIgR}hFIFO̗vMɂDMA]s܂B +//EDMÃCl[utO|[OďI܂ő҂܂B +// +//EF +// dmaNo DMAԍ +// listp fBXvCXg̃|C^ +// length fBXvCXg̒i[hPʁj +// +//E߂lFȂ +// +//TCM̃fBXvCXgDMA]ł܂B +//---------------------------------------------------------------------- + +#define GX_DmaList(dmaNo, listp, length) \ +{ \ + GX_Dma(dmaNo, listp, length); \ + WaitDma(dmaNo); \ +} + +//---------------------------------------------------------------------- +// fBXvCXgcl`] +// +//EI܂ŃVXeoXCPURA֊JȂƂɂ +// DMA]s܂B +// +//EF +// dmaNo DMAԍ +// listp fBXvCXg̃|C^ +// length fBXvCXg̒i[hPʁj +// +//E߂lFȂ +// +//TCM̃fBXvCXgDMA]ł܂B +//---------------------------------------------------------------------- + +#define GX_DmaListFast(dmaNo, listp, length) \ + \ + GX_DmaFast(dmaNo, listp, length) + + +//---------------------------------------------------------------------- +// fBXvCXgcl`񓯊] +// +//EWIgR}hFIFO̗vMɂDMA]s܂B +//EDMȀI`FbN͍s܂BDMA]̑O GX_WaitDma() +// ŏI`FbNĉB +// +//EF +// dmaNo DMAԍ +// listp fBXvCXg̃|C^ +// length fBXvCXg̒i[hPʁj +// +//E߂lFȂ +// +//TCM̃fBXvCXgDMA]ł܂B +//---------------------------------------------------------------------- + +#define GX_DmaListAsync(dmaNo, listp, length) \ + \ + GX_Dma(dmaNo, listp, length) + + +//---------------------------------------------------------------------- +// fBXvCXgcl`]I҂ +// +//EDMÃCl[utO|[OďÎ҂܂B +// +//EF +// dmaNo DMAԍ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GX_WaitDma(dmaNo) WaitDma(dmaNo) + + + +//---------------------------------------------------------------------- +// WIg_OGW̃I[o[t[Ă邩H +// +//E_OGW̓_OGW̃I[o[t[ +// Ă邩ǂԂ܂B +// +//EF Ȃ +// +//E߂lF +// 0 I[o[t[ +// 0 I[o[t[ +//---------------------------------------------------------------------- + +#define GX_IsOverflows() (((vu8 *)REG_DISP3DCNT)[1] & ((DISP3D_GEOMETRY_OVER | DISP3D_RENDER_OVER)>>8)) +#define GX_IsGeometryOverflow() (((vu8 *)REG_DISP3DCNT)[1] & (DISP3D_GEOMETRY_OVER>>8)) +#define GX_IsRenderingOverflow() (((vu8 *)REG_DISP3DCNT)[1] & (DISP3D_RENDER_OVER>>8)) + + +//---------------------------------------------------------------------- +// WIg_OGW̃I[o[t[tÕNA +// +//E_OGW̓_OGW̃I[o[t[tO +// NA܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GX_ClearOverflows() (((vu8 *)REG_DISP3DCNT)[1] |=((DISP3D_GEOMETRY_OVER | DISP3D_RENDER_OVER)>>8)) +#define GX_ClearGeometryOverflow() (((vu8 *)REG_DISP3DCNT)[1] |= (DISP3D_GEOMETRY_OVER>>8)) +#define GX_ClearRenderingOverflow() (((vu8 *)REG_DISP3DCNT)[1] |= (DISP3D_RENDER_OVER>>8)) + + +//---------------------------------------------------------------------- +// WIgGWEXe[^Xǂݍ +// +//EWIgGWEXe[^XWX^̒lԂ܂B +// +//EF Ȃ +// +//E߂lFWIgGWEXe[^X +//---------------------------------------------------------------------- + +#define GX_GetGeometryStatus() (*(vu32 *)REG_GXSTAT)) + + +//---------------------------------------------------------------------- +// WIgGW͓쒆H +// +//EWIgGW쒆ǂԂ܂B +// +//EF Ȃ +// +//E߂lF +// 0 쒆 +// 0 ~ +//---------------------------------------------------------------------- + +#define GX_IsGeometryBusy() (((vu8 *)REG_GXSTAT)[3] & (GXSTAT_GEOMETRY_BUSY>>24)) + +//---------------------------------------------------------------------- +// WIgGW~҂ +// +//EWIgGW~̂҂܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GX_WaitGeometry() \ +{ while (GX_IsGeometryBusy()) ; \ +} + +//---------------------------------------------------------------------- +// WIgeheñNA +// +//EWIgR}hFIFONA܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void GX_ClearFifo(void); + +//---------------------------------------------------------------------- +// WIgehenJE^ǂݍ +// +//EWIgR}hFIFOJE^lԂ܂B +// +//EF Ȃ +// +//E߂lFJE^l +//---------------------------------------------------------------------- + +#define GX_GetFifoCount() (((vGxStat *)REG_GXSTAT)->fifoCount) + +//---------------------------------------------------------------------- +// WIgehen`FbNit^ȉ^j +// +//EWIgR}hFIFȌ[Ux`FbN܂B +// +//EF Ȃ +// +//E߂lF +// 0 e𖞂Ă +// 0 e𖞂ĂȂ +//---------------------------------------------------------------------- + +#define GX_IsFifoFull() (((vu8 *)REG_GXSTAT)[3] & (GXSTAT_FIFO_FULL>>24)) +#define GX_IsFifoUnderHalf() (((vu8 *)REG_GXSTAT)[3] & (GXSTAT_FIFO_UNDER_HALF>>24)) +#define GX_IsFifoEmpty() (((vu8 *)REG_GXSTAT)[3] & (GXSTAT_FIFO_EMPTY>>24)) +#define GX_WaitFifoNotFull() \ +{ while (GX_IsFifoFull()) ; \ +} +#define GX_WaitFifoUnderHalf() \ +{ while (!GX_IsFifoUnderHalf()) ; \ +} +#define GX_WaitFifoEmpty() \ +{ while (!GX_IsFifoEmpty()) ; \ +} + + +//---------------------------------------------------------------------- +// r[|[gݒ +// +//EBG0ʏɂr[|[g̍WƉEWݒ肵܂B +// +//EF +// startX XWi8bitj +// startY YWi V j +// endX EXWi V j +// endY EYWi V j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Viewport(startX, startY, endX, endY) \ +{ \ + *(vu32 *)REG_VIEWPORT = (u32 )(startX) << VIEWPORT_START_X_SHIFT \ + | (u32 )(startY) << VIEWPORT_START_Y_SHIFT \ + | (u32 )(endX) << VIEWPORT_END_X_SHIFT \ + | (u32 )(endY) << VIEWPORT_END_Y_SHIFT; \ +} + + +//====================================================================== +// sR}hQ +//====================================================================== + +//---------------------------------------------------------------------- +// s񃂁[hݒ +// +//EsR}hő삷Jgsw肵܂B +// +//EF +// mode s񃂁[h +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_MtxMode(mode) (*(vu32 *)REG_MTX_MODE = (mode)) + +//---------------------------------------------------------------------- +// Jgs̃vbV +// +//EJgssX^bN֑ޔ܂B +//EsX^bN|C^͂Pi݂܂B +// +//EF Ȃ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_PushMtx() (*(vs32 *)REG_MTX_PUSH = 0) + +//---------------------------------------------------------------------- +// Jgs̃|bv +// +//EJgssX^bN畜܂B +//EsX^bN|C^͎w肵Έʒuֈړ܂B +// +//EF +// relPos Έʒui-30 ` 31j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_PopMtx(relPos) (*(vs32 *)REG_MTX_POP = (relPos)) + +//---------------------------------------------------------------------- +// Jgs̃XgA +// +//EJgssX^bN̎wʒu֊i[܂B +//EsX^bN|C^͈ړ܂B +// +//EF +// index CfbNXi0 ` 30j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_StoreMtx(index) (*(vs32 *)REG_MTX_STORE = (index)) + +//---------------------------------------------------------------------- +// Jgs̃XgA +// +//EJgssX^bN̎wʒuo܂B +//EsX^bN|C^͈ړ܂B +// +//EF +// index CfbNXi0 ` 30j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_RestoreMtx(index) (*(vs32 *)REG_MTX_RESTORE = (index)) + + +//---------------------------------------------------------------------- +// sX^bN|C^̃NA +// +//EsX^bN|C^NA܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void GX_ClearMtxStackPtr(void); + + +//---------------------------------------------------------------------- +// sX^bNR}h҂ +// +//EsX^bNR}h̊҂܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GX_WaitMtxStackCmd() \ +{ while (GX_IsMtxStackCmdBusy()) ; \ +} + +//---------------------------------------------------------------------- +// sX^bÑI[o[t[^A_[t[Ă邩H +// +//EsX^bÑI[o[t[^A_[t[Ă邩ǂԂ܂B +// +//EF Ȃ +// +//E߂lF +// 0 I[o[t[^A_[t[ +// 0 I[o[t[^A_[t[ +//---------------------------------------------------------------------- + +#define GX_IsMtxStackError() (((vu8 *)REG_GXSTAT)[1] & (GXSTAT_MTX_STACK_ERROR>>8)) + + +//---------------------------------------------------------------------- +// sX^bNR}hWIgehen֎cĂ邩H +// +//EsX^bNR}hWIgehen֎cĂ邩ǂԂ܂B +// +//EF Ȃ +// +//E߂lF +// 0 ssX^bNR}h +// 0 ssX^bNR}hȂ +//---------------------------------------------------------------------- + +#define GX_IsMtxStackCmdBusy() (((vu8 *)REG_GXSTAT)[1] & (GXSTAT_MTX_STACK_BUSY>>8)) + + +//---------------------------------------------------------------------- +// sX^bNxǂݍ +// +//EsX^bNxԂ܂B +//EsX^bNR}h̊҂Ăǂݍ݂܂B +// +//EF Ȃ +// +//E߂lFsX^bNx +//---------------------------------------------------------------------- + +__inline static u8 GX_GetProjStackLevel(void) +{ + GX_WaitMtxStackCmd(); return ((vGxStat *)REG_GXSTAT)->projStackLevel; +} +__inline static u8 GX_GetPosVecStackLevel(void) +{ + GX_WaitMtxStackCmd(); return ((vGxStat *)REG_GXSTAT)->posvecStackLevel; +} + + +//---------------------------------------------------------------------- +// Pʍsւ̏ +// +//EJgsPʍsɏ܂B +// +//EF Ȃ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Identity() (*(vu32 *)REG_MTX_IDENTITY = 0) + +//---------------------------------------------------------------------- +// sړs̓Kp +// +//EJgsɕsړsZ܂B +// +//EF +// x X +// y Y +// z Z +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate(x, y, z) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_TRANS; \ + \ + *mp = (x); \ + *mp = (y); \ + *mp = (z); \ +} + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define _GX_TranslateBefore(mp, x, y, z) \ +{ \ + *mp = (x); \ + *mp = (y); \ + *mp = (z); \ +} + +//---------------------------------------------------------------------- +// Jgsւ̃[h +// +//EJgsɎw肵sݒ肵܂B +// +//EF +// srcp [hs̃|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_LoadMtx(srcp) _GX_SetMtx( (vs32 *)REG_MTX_LOAD_4x3, srcp) +#define GX_LoadMtx44(srcp) _GX_SetMtx44((vs32 *)REG_MTX_LOAD_4x4, srcp) +#define GX_LoadMtx33(x, y, z, srcp) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_LOAD_4x3; \ + \ + _GX_SetMtx33(mp, srcp); \ + *mp = 0; \ + *mp = 0; \ + *mp = 0; \ +} + +void _GX_SetMtx( vs32 *mp, const Mtx *srcp); +void _GX_SetMtx33(vs32 *mp, const Mtx33 *srcp); +void _GX_SetMtx44(vs32 *mp, const Mtx44 *srcp); + +//---------------------------------------------------------------------- +// ʍsƃJgs̏Z +// +//EJgsɎw肵sZ܂B +// +//EF +// srcp Kps̃|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_MultMtx(srcp) _GX_SetMtx( (vs32 *)REG_MTX_MULT_4x3, srcp) +#define GX_MultMtx33(srcp) _GX_SetMtx33((vs32 *)REG_MTX_MULT_3x3, srcp) +#define GX_MultMtx44(srcp) _GX_SetMtx44((vs32 *)REG_MTX_MULT_4x4, srcp) + +//---------------------------------------------------------------------- +// sړsKpɈʍsZ +// +//EJgs֕sړsƈʍšsZ܂B +// +//EGX_Translate(){GX_MultMtx33() WIgGWׂ̕点܂B +// +//EF +// x X +// y Y +// z Z +// srcp Kp3x3s̃|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2MultMtx33(x, y, z, srcp) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_SetMtx33(mp, srcp); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// ]us̓Kp +// +//EJgsɎw肵s̓]usZ܂B +// +//EF +// srcp ]uO̍s̃|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_TransposeMtx( const Mtx *srcp); +void GX_TransposeMtx44(const Mtx44 *srcp); +#define GX_TransposeMtx33(srcp) _GX_TransposeMtx33((vs32 *)REG_MTX_MULT_3x3, srcp) + +void _GX_TransposeMtx33(vs32 *mp, const Mtx33 *srcp); + +//---------------------------------------------------------------------- +// sړsKpɓ]usKp +// +//EJgs֕sړsƓ]ušsZ܂B +// +//EGX_Translate(){GX_TransposeMtx33() WIgGWׂ̕点܂B +// +//EF +// x sړX +// y sړY +// z sړZ +// srcp ]uO3x3s̃|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2TransposeMtx33(x, y, z, srcp) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_TransposeMtx33(mp, srcp); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// XP[s̓KpiʒuWŝ݁j +// +//EJgsɃXP[sZ܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇł +// ʒuWŝ݂ɓKp܂B +// +//EF +// x X +// y Y +// z Z +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Scale(x, y, z) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_SCALE; \ + \ + *mp = (x) >>VG_SFT_DF; \ + *mp = (y) >>VG_SFT_DF; \ + *mp = (z) >>VG_SFT_DF; \ +} + +//---------------------------------------------------------------------- +// XP[s̓KpiʒuWs񁕕xNgsj +// +//EJgsɃXP[sZ܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇɂ +// ʒuWsƕxNgs̗ɓKp܂B +// +//EF +// x X +// y Y +// z Z +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_ScaleWithVector(x, y, z) _GX_ScaleWithVector((vs32 *)REG_MTX_MULT_3x3, x, y, z) + +void _GX_ScaleWithVector(vs32 *mp, s32 x, s32 y, s32 z); + +//---------------------------------------------------------------------- +// sړsKp +// XP[sKpiʒuWs񁕕xNgsj +// +//EJgs֕sړsƃXP[šsZ܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇɂ +// ʒuWsƕxNgs̗ɓKp܂B +// +//EGX_Translate(){GX_ScaleWithVector() WIgGWׂ̕点܂B +// +//EF +// xT sړX +// yT sړY +// zT sړZ +// xS XP[X +// yS XP[Y +// zS XP[Z +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2ScaleWithVector(xT, yT, zT, xS, yS, zS) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_ScaleWithVector(mp, xS, yS, zS); \ + _GX_TranslateBefore(mp, xT, yT, zT) \ +} + + +//---------------------------------------------------------------------- +// 厲]s̓Kp +// +//EJgsɊe厲ɉ]sZ܂B +// +//EF +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_RotateX(theta) GX_RotatePriv(X, SIN_NDIV_DEFAULT, theta) +#define GX_RotateY(theta) GX_RotatePriv(Y, SIN_NDIV_DEFAULT, theta) +#define GX_RotateZ(theta) GX_RotatePriv(Z, SIN_NDIV_DEFAULT, theta) + +#define GX_RotateX256(theta) GX_RotatePriv(X, 256, theta) +#define GX_RotateY256(theta) GX_RotatePriv(Y, 256, theta) +#define GX_RotateZ256(theta) GX_RotatePriv(Z, 256, theta) +#define GX_RotateX1024(theta) GX_RotatePriv(X, 1024, theta) +#define GX_RotateY1024(theta) GX_RotatePriv(Y, 1024, theta) +#define GX_RotateZ1024(theta) GX_RotatePriv(Z, 1024, theta) +#define GX_RotateX4096(theta) GX_RotatePriv(X, 4096, theta) +#define GX_RotateY4096(theta) GX_RotatePriv(Y, 4096, theta) +#define GX_RotateZ4096(theta) GX_RotatePriv(Z, 4096, theta) + +void _GX_RotateX256(vs32 *mp, u32 theta); +void _GX_RotateY256(vs32 *mp, u32 theta); +void _GX_RotateZ256(vs32 *mp, u32 theta); +void _GX_RotateX1024(vs32 *mp, u32 theta); +void _GX_RotateY1024(vs32 *mp, u32 theta); +void _GX_RotateZ1024(vs32 *mp, u32 theta); +void _GX_RotateX4096(vs32 *mp, u32 theta); +void _GX_RotateY4096(vs32 *mp, u32 theta); +void _GX_RotateZ4096(vs32 *mp, u32 theta); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_RotatePriv(axis, ndiv, theta) GX_RotateNDiv(axis, ndiv, theta) +#define GX_RotateNDiv(axis, ndiv, theta) _GX_Rotate##axis##ndiv((vs32 *)REG_MTX_MULT_3x3, theta) + +//---------------------------------------------------------------------- +// sړsKpɎ厲]sKp +// +//EJgs֕sړsƎ厲]šsZ܂B +// +//EGX_Translate(){GX_Rotate[X|Y|Z][256|1024|4096]() +// WIgGWׂ̕点܂B +// +//EF +// x sړX +// y sړY +// z sړZ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2RotateX(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, X, SIN_NDIV_DEFAULT, theta) +#define GX_Translate2RotateY(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Y, SIN_NDIV_DEFAULT, theta) +#define GX_Translate2RotateZ(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Z, SIN_NDIV_DEFAULT, theta) + +#define GX_Translate2RotateX256(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, X, 256, theta) +#define GX_Translate2RotateY256(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Y, 256, theta) +#define GX_Translate2RotateZ256(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Z, 256, theta) +#define GX_Translate2RotateX1024(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, X, 1024, theta) +#define GX_Translate2RotateY1024(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Y, 1024, theta) +#define GX_Translate2RotateZ1024(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Z, 1024, theta) +#define GX_Translate2RotateX4096(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, X, 4096, theta) +#define GX_Translate2RotateY4096(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Y, 4096, theta) +#define GX_Translate2RotateZ4096(x, y, z, theta) GX_Translate2RotatePriv(x, y, z, Z, 4096, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_Translate2RotatePriv(x, y, z, axis, ndiv, theta) \ + GX_Translate2RotateNDiv(x, y, z, axis, ndiv, theta) +#define GX_Translate2RotateNDiv(x, y, z, axis, ndiv, theta) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_Rotate##axis##ndiv(mp, theta); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// 厲]siOp֐ɂ]pwj̓Kp +// +//EJgsɊe厲ɉ]sZ܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EF +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_RotateXSinCos(sinA, cosA) _GX_RotateXSinCos((vs32 *)REG_MTX_MULT_3x3, sinA, cosA) +#define GX_RotateYSinCos(sinA, cosA) _GX_RotateYSinCos((vs32 *)REG_MTX_MULT_3x3, sinA, cosA) +#define GX_RotateZSinCos(sinA, cosA) _GX_RotateZSinCos((vs32 *)REG_MTX_MULT_3x3, sinA, cosA) + +void _GX_RotateXSinCos(vs32 *mp, s32 sinA, s32 cosA); +void _GX_RotateYSinCos(vs32 *mp, s32 sinA, s32 cosA); +void _GX_RotateZSinCos(vs32 *mp, s32 sinA, s32 cosA); + +//---------------------------------------------------------------------- +// sړsKp +// 厲]siOp֐ɂ]pwjKp +// +//EJgs֕sړsƎ厲]šsZ܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EGX_Translate(){GX_Rotate[X|Y|Z]SinCos() +// WIgGWׂ̕点܂B +// +//EF +// x sړX +// y sړY +// z sړZ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2RotateXSinCos(x, y, z, sinA, cosA) GX_Translate2RotateSinCosPriv(x, y, z, X, sinA, cosA) +#define GX_Translate2RotateYSinCos(x, y, z, sinA, cosA) GX_Translate2RotateSinCosPriv(x, y, z, Y, sinA, cosA) +#define GX_Translate2RotateZSinCos(x, y, z, sinA, cosA) GX_Translate2RotateSinCosPriv(x, y, z, Z, sinA, cosA) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_Translate2RotateSinCosPriv(x, y, z, axis, sinA, cosA) \ + GX_Translate2RotateSinCosNDiv(x, y, z, axis, sinA, cosA) +#define GX_Translate2RotateSinCosNDiv(x, y, z, axis, sinA, cosA) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_Rotate##axis##SinCos(mp, theta); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// Cӎ]s̓Kp +// +//EJgsɔCӂ̃xNgƂĉ]sZ܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_RotateAxis( axisp, theta) GX_RotateAxisPriv( SIN_NDIV_DEFAULT, axisp, theta) +#define GX_RotateAxisFast(axisp, theta) GX_RotateAxisPrivFast(SIN_NDIV_DEFAULT, axisp, theta) + +#define GX_RotateAxis256( axisp, theta) GXB_RotateAxisPriv( 256, axisp, theta) +#define GX_RotateAxis256Fast(axisp, theta) GXB_RotateAxisPrivFast(256, axisp, theta) +#define GX_RotateAxis1024( axisp, theta) GXB_RotateAxisPriv( 1024, axisp, theta) +#define GX_RotateAxis1024Fast(axisp, theta) GXB_RotateAxisPrivFast(1024, axisp, theta) +#define GX_RotateAxis4096( axisp, theta) GXB_RotateAxisPriv( 4096, axisp, theta) +#define GX_RotateAxis4096Fast(axisp, theta) GXB_RotateAxisPrivFast(4096, axisp, theta) + +void _GX_RotateAxis256( vs32 *mp, const Vec *axisp, u32 theta); +void _GX_RotateAxis256Fast(vs32 *mp, const Vec *axisp, u32 theta); +void _GX_RotateAxis1024( vs32 *mp, const Vec *axisp, u32 theta); +void _GX_RotateAxis1024Fast(vs32 *mp, const Vec *axisp, u32 theta); +void _GX_RotateAxis4096( vs32 *mp, const Vec *axisp, u32 theta); +void _GX_RotateAxis4096Fast(vs32 *mp, const Vec *axisp, u32 theta); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_RotateAxisPriv( ndiv, axisp, theta) GX_RotateAxisNDiv( ndiv, axisp, theta) +#define GX_RotateAxisPrivFast(ndiv, axisp, theta) GX_RotateAxisNDivFast(ndiv, axisp, theta) +#define GX_RotateAxisNDiv( ndiv, axisp, theta) _GX_RotateAxis##ndiv( (vs32 *)REG_MTX_MULT_3x3, axisp, theta) +#define GX_RotateAxisNDivFast(ndiv, axisp, theta) _GX_RotateAxis##ndiv##Fast((vs32 *)REG_MTX_MULT_3x3, axisp, theta) + +//---------------------------------------------------------------------- +// sړsKpɔCӎ]sKp +// +//EJgs֕sړsƔCӎ]šsZ܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +//EGX_Translate(){GX_RotateAxis[256|1024|4096][Fast]() +// WIgGWׂ̕点܂B +// +//EF +// x sړX +// y sړY +// z sړZ +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2RotateAxis( x, y, z, axisp, theta) GX_Translate2RotateAxisPriv( x, y, z, SIN_NDIV_DEFAULT, axisp, theta) +#define GX_Translate2RotateAxisFast(x, y, z, axisp, theta) GX_Translate2RotateAxisPrivFast(x, y, z, SIN_NDIV_DEFAULT, axisp, theta) + +#define GX_Translate2RotateAxis256( x, y, z, axisp, theta) GX_Translate2RotateAxisPriv( x, y, z, 256, axisp, theta) +#define GX_Translate2RotateAxis256Fast(x, y, z, axisp, theta) GX_Translate2RotateAxisPrivFast(x, y, z, 256, axisp, theta) +#define GX_Translate2RotateAxis1024( x, y, z, axisp, theta) GX_Translate2RotateAxisPriv( x, y, z, 1024, axisp, theta) +#define GX_Translate2RotateAxis1024Fast(x, y, z, axisp, theta) GX_Translate2RotateAxisPrivFast(x, y, z, 1024, axisp, theta) +#define GX_Translate2RotateAxis4096( x, y, z, axisp, theta) GX_Translate2RotateAxisPriv( x, y, z, 4096, axisp, theta) +#define GX_Translate2RotateAxis4096Fast(x, y, z, axisp, theta) GX_Translate2RotateAxisPrivFast(x, y, z, 4096, axisp, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_Translate2RotateAxisPriv( x, y, z, ndiv, axisp, theta) \ + GX_Translate2RotateAxisNDiv( x, y, z, ndiv, axisp, theta) +#define GX_Translate2RotateAxisNDiv(x, y, z, ndiv, axisp, theta) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_RotateAxis##ndiv(mp, axisp, theta); \ + _GX_TranslateBefore(mp, x, y, z) \ +} +#define GX_Translate2RotateAxisPrivFast(x, y, z, ndiv, axisp, theta) \ + GX_Translate2RotateAxisNDivFast(x, y, z, ndiv, axisp, theta) +#define GX_Translate2RotateAxisNDivFast(x, y, z, ndiv, axisp, theta) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_RotateAxis##ndiv##Fast(mp, axisp, theta); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// Cӎ]siOp֐ɂ]pwj̓Kp +// +//EJgsɔCӂ̃xNgƂĉ]sZ܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_RotateAxisSinCos( axisp, sinA, cosA) _GX_RotateAxisSinCos( (vs32 *)REG_MTX_MULT_3x3, axisp, sinA, cosA) +#define GX_RotateAxisSinCosFast(axisp, sinA, cosA) _GX_RotateAxisSinCosFast((vs32 *)REG_MTX_MULT_3x3, axisp, sinA, cosA) + +void _GX_RotateAxisSinCos( vs32 *mp, const Vec *axisp, s32 sinA, s32 cosA); +void _GX_RotateAxisSinCosFast(vs32 *mp, const Vec *axisp, s32 sinA, s32 cosA); + +//---------------------------------------------------------------------- +// sړsKp +// Cӎ]siOp֐ɂ]pwjKp +// +//EJgs֕sړsƔCӎ]šsZ܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +//EGX_Translate(){GX_RotateAxisSinCos[Fast]() +// WIgGWׂ̕点܂B +// +//EF +// x sړX +// y sړY +// z sړZ +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + + +#define GX_Translate2RotateAxisSinCos( x, y, z, axisp, sinA, cosA) GX_Translate2RotateAxisSinCosPriv( x, y, z, axisp, sinA, cosA) +#define GX_Translate2RotateAxisSinCosFast(x, y, z, axisp, sinA, cosA) GX_Translate2RotateAxisSinCosPrivFast(x, y, z, axisp, sinA, cosA) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_Translate2RotateAxisSinCosPriv( x, y, z, axisp, sinA, cosA) \ + GX_Translate2RotateAxisSinCosNDiv( x, y, z, axisp, sinA, cosA) +#define GX_Translate2RotateAxisSinCosNDiv( x, y, z, axisp, sinA, cosA) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_RotateAxisSinCos(mp, axisp, sinA, cosA); \ + _GX_TranslateBefore(mp, x, y, z) \ +} +#define GX_Translate2RotateAxisSinCosPrivFast(x, y, z, axisp, sinA, cosA) \ + GX_Translate2RotateAxisSinCosNDivFast(x, y, z, axisp, sinA, cosA) +#define GX_Translate2RotateAxisSinCosNDivFast(x, y, z, axisp, sinA, cosA) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_RotateAxisSinCosFast(mp, axisp, sinA, cosA); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// yɃACg]s̓Kp +// +//EJgsɔCӎZ̐ƈv]ssZ܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +// +//EF +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_AlignZ(vLookInvp) _GX_AlignZ((vs32 *)REG_MTX_MULT_3x3, vLookInvp) + +void _GX_AlignZ(vs32 *mp, const Vec *vLookInvp); + +//---------------------------------------------------------------------- +// sړsKp +// yɃACg]sKp +// +//EJgs֕sړsƔCӎZ̐ƈv]ss +// Ƃ̌sZ܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +//EGX_Translate(){GX_AlignZ() WIgGWׂ̕点܂B +// +//EF +// x sړX +// y sړY +// z sړZ +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2AlignZ(x, y, z, vLookInvp) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_AlignZ(mp, vLookInvp); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// NH[^jIϊ]s̓Kp +// +//EJgsփNH[^jIϊ]sKp܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +// +//EF +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_QuatMtx(quatp) _GX_QuatMtx( (vs32 *)REG_MTX_MULT_3x3, quatp) +#define GX_QuatMtxFast(quatp) _GX_QuatMtxFast((vs32 *)REG_MTX_MULT_3x3, quatp) + +void _GX_QuatMtx(vs32 *mp, const Quat *quatp); +void _GX_QuatMtxFast(vs32 *mp, const Quat *quatp); + +//---------------------------------------------------------------------- +// sړsKp +// NH[^jIϊ]sKp +// +//EJgs֕sړsƃNH[^jIϊ]s +// ̌sZ܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +//EGX_Translate(){GX_QuatMtx[Fast]() WIgGWׂ̕点܂B +// +//EF +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Translate2QuatMtx( x, y, z, quatp) GX_Translate2QuatMtxPriv( x, y, z, quatp) +#define GX_Translate2QuatMtxFast(x, y, z, quatp) GX_Translate2QuatMtxPrivFast(x, y, z, quatp) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_Translate2QuatMtxPriv( x, y, z, quatp) \ + GX_Translate2QuatMtxNDiv( x, y, z, quatp) +#define GX_Translate2QuatMtxNDiv( x, y, z, quatp) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_QuatMtx(mp, quatp); \ + _GX_TranslateBefore(mp, x, y, z) \ +} +#define GX_Translate2QuatMtxPrivFast(x, y, z, quatp) \ + GX_Translate2QuatMtxNDivFast(x, y, z, quatp) +#define GX_Translate2QuatMtxNDivFast(x, y, z, quatp) \ +{ \ + vs32 *mp = (vs32 *)REG_MTX_MULT_4x3; \ + \ + _GX_QuatMtxFast(mp, quatp); \ + _GX_TranslateBefore(mp, x, y, z) \ +} + + +//---------------------------------------------------------------------- +// EΏ̂̓ˉes̓Kp +// +//EEΏ̂̓@̍s쐬AJgs֏Z܂B +// +//E֐ŏZgp܂B +// +//EF +// fovy c̎pxm256b1024b4096iKn +// aspect ̎m肷ci /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_Perspective(fovy, aspect, near, far, scaleW) GX_PerspectivePriv(SIN_NDIV_DEFAULT, fovy, aspect, near, far, scaleW) + +void GX_Perspective256( u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); +void GX_Perspective1024(u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); +void GX_Perspective4096(u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GX_PerspectivePriv(ndiv, fovy, aspect, near, far, scaleW) \ + GX_PerspectiveNDiv(ndiv, fovy, aspect, near, far, scaleW) +#define GX_PerspectiveNDiv(ndiv, fovy, aspect, near, far, scaleW) \ + GX_Perspective##ndiv( fovy, aspect, near, far, scaleW) + +//---------------------------------------------------------------------- +// EΏ̂̓ˉesiOp֐ɂ鎋pwj̓Kp +// +//EEΏ̂̓@̍s쐬AJgs֏Z܂B +//Epx̓TCƃRTCɂĎw肵܂B +// +//E֐ŏZgp܂B +// +//EF +// sinA c̎px̃TC +// cosA c̎px̃RTCiʊ֐̌ĂяôߍŌɓnj +// aspect ̎Em肷ci /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_PerspectiveSinCos(s32 sinA, s32 aspect, s32 near, s32 far, s32 scaleW, s32 cosA); + +//---------------------------------------------------------------------- +// ˉes̓Kp +// +//E@̍s쐬AJgs֏Z܂B +// +//E֐ŏZgp܂B +// +//EF +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iɐj +// f _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_Frustum(s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW); + +//---------------------------------------------------------------------- +// ˉes̓Kp +// +//Eˉe̕s̐ς̍s쐬AJgs֏Z܂B +// +//E֐ŏZgp܂B +// +//EF +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iǂłj +// f _farNbvʂ܂ł̋ iǂłj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_Ortho(s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW); + +//---------------------------------------------------------------------- +// Es̓Kp +// +//EEs쐬AJgs֏Z܂B +// +//E֐ŃxNg̐K̂߂ɕZƏZgp܂B +// +//EF +// eye _ +// at _ +// vUp xNg +// vDst 0iNULL|C^jȊOnƁAtxNgԂ܂ +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_LookAt( const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst); +void GX_LookAtFast(const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst); + + + +//---------------------------------------------------------------------- +// JgNbvWs̎擾 +// +//EJg̃NbvWs̎擾܂B +// +//E֐ŃWIgGW~̂҂Ăǂݍ݂܂B +// +//EF +// dstp si[obt@̃|C^ +// +//E߂lFJgNbvWs +//---------------------------------------------------------------------- + +void GX_GetClipMtx( Mtx *dstp); +void GX_GetClipMtx33(Mtx33 *dstp); +void GX_GetClipMtx44(Mtx44 *dstp); + + +//---------------------------------------------------------------------- +// JgxNgs̎擾 +// +//EJg̕xNgs̎擾܂B +// +//E֐ŃWIgGW~̂҂Ăǂݍ݂܂B +// +//EF +// dstp si[obt@̃|C^ +// +//E߂lFJgxNgs +//---------------------------------------------------------------------- + +void GX_GetVectorMtx33(Mtx33 *dstp); + + +//---------------------------------------------------------------------- +// {bNXeXg +// +//Ê̐ςɓ邩ǂeXg߂̍\̂ݒ肵܂B +// +//EF +// box eXg{bNXiXYZWHD161616161616j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_BoxTest1(box) \ +{ *(vs32 *)REG_BOX_TEST = *(vs32 *)&((box).x); \ + *(vs32 *)REG_BOX_TEST = *(vs32 *)&((box).z); \ + *(vs32 *)REG_BOX_TEST = *(vs32 *)&((box).h); \ +} + +//---------------------------------------------------------------------- +// {bNXeXg +// +//Ê̐ςɓ邩ǂeXg߂Ɋep[^ݒ肵܂B +// +//EF +// x eXg{bNXXWi16bitj +// y eXg{bNXYWi V j +// z eXg{bNXZWi V j +// w eXg{bNX i V j +// h eXg{bNX i V j +// d eXg{bNXs i V j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_BoxTest6(x, y, z, w, h, d) \ +{ *(vs32 *)REG_BOX_TEST = XY1616(x, y); \ + *(vs32 *)REG_BOX_TEST = ZW1616(z, w); \ + *(vs32 *)REG_BOX_TEST = HD1616(h, d); \ +} + +//---------------------------------------------------------------------- +// ʒuWeXg +// +//EeXgp̈ʒuW̍\̂ݒ肵܂B +// +//EF +// pos ʒuWiXYZ161616j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_PositionTest1(pos) \ +{ *(vs32 *)REG_POS_TEST = *(vs32 *)&((pos).x); \ + *(vs32 *)REG_POS_TEST = *(vs16 *)&((pos).z); \ +} + +//---------------------------------------------------------------------- +// ʒuWeXg +// +//EeXgp̈ʒuW̊evfݒ肵܂B +// +//EF +// x ʒuWXi16bitj +// y Yi V j +// z Zi V j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_PositionTest3(x, y, z) \ +{ *(vs32 *)REG_POS_TEST = XY1616(x, y); \ + *(vs32 *)REG_POS_TEST = (z); \ +} + +//---------------------------------------------------------------------- +// xNgeXg +// +//EeXgp̕xNg\̂ݒ肵܂B +// +//EF +// vector xNgiXYZ101010j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_VectorTest1(vector) (*(vVec10 *)REG_VEC_TEST = (vector)) + + +//---------------------------------------------------------------------- +// xNgeXg +// +//EeXgp̕xNg̊evfݒ肵܂B +// +//EF +// x xNgXi10bitj +// y Yi V j +// z Zi V j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_VectorTest3(x, y, z) (*(vu32 *)REG_VEC_TEST = XYZ101010(x, y, z)) + + + +//---------------------------------------------------------------------- +// WIgeXgErW[`FbN +// +//EWIgeXgǂԂ܂B +// +//EF Ȃ +// +//E߂lF +// 0 rW[ +// 0 fB +//---------------------------------------------------------------------- + +// MWsΉ + +#define GX_IsTestBusy() ((vu8 )*(vu8 *)REG_GXSTAT & GXSTAT_TEST_BUSY) + +//---------------------------------------------------------------------- +// WIgeXgI҂ +// +//EWIgeXg̏I҂܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GX_WaitTest() \ +{ while (GX_IsTestBusy()) ; \ +} + +//---------------------------------------------------------------------- +// WIgeXg +// +//EWIgeXgʂ擾܂B +//Eʏł̓eXgR}h̊҂Ă猋ʂԂ܂A +// Immł͊`FbNs܂B +// +//EF Ȃ +// +//E߂lFeXg +//---------------------------------------------------------------------- + +// MWsΉ + +#define GX_BoxResultImm() ((vu8 )*(vu8 *)REG_GXSTAT & GXSTAT_BOX_IN_VIEW) +#define GX_PositionResultImm() (*(vPos32 *)REG_POS_RESULT) +#define GX_VectorResultImm() (*(vVec16 *)REG_VEC_RESULT) +__inline static u8 GX_BoxResult(void) +{ + GX_WaitTest(); return GX_BoxResultImm(); +} + +__inline static Pos32 GX_PositionResult(void) +{ + GX_WaitTest(); return GX_PositionResultImm(); +} + +__inline static Vec16 GX_VectorResult(void) +{ + GX_WaitTest(); return GX_VectorResultImm(); +} + + +//---------------------------------------------------------------------- +// CgxNgݒ +// +//ECgxNgփCgxNg\̂ݒ肵܂B +// +//EF +// lightVector CgxNgiXYZ101010j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_LightVector1(lightVector) (*(vLightVector *)REG_LIGHT_VECTOR = (lightVector)) + + +//---------------------------------------------------------------------- +// CgJ[ݒ +// +//ECgJ[փCgJ[\̂ݒ肵܂B +// +//EF +// lightColor CgJ[iRGB555j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_LightColor1(lightColor) (*(vLightColor *)REG_LIGHT_COLOR = (lightColor)) + + +//---------------------------------------------------------------------- +// CgxNgݒ +// +//ECgxNgփCgԍƕxNgݒ肵܂B +// +//EF +// no Cgԍ +// vector xNgiXYZ101010j +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +#define GX_LightVector2(no, vector) (*(vu32 *)REG_LIGHT_VECTOR = ((no)< +#include +#include + + +//---------------------------------------------------------------------- +// fBXvCXgbot] +// +//EfBXvCXgCPUɂăWIgR}hFIFO֓]܂B +// +//EF +// startp fBXvCXgobt@̐擪|C^ +// endp fBXvCXgobt@̏I|C^ +// +//E߂lFȂ +// +//TCM̃fBXvCXgDMA]ł܂B +//---------------------------------------------------------------------- + +void GXB_CallList(u32 *startp, u32 *endp); + + +//---------------------------------------------------------------------- +// r[|[gݒ +// +//EBG0ʏɂr[|[g̍WƉEWݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// startX XWi8bitj +// startY YWi V j +// endX EXWi V j +// endY EYWi V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Viewport(bufp, startX, startY, endX, endY) \ +{ \ + (bufp)[0] = GXOP_VIEWPORT; \ + (bufp)[1] = (u32 )(startX) << VIEWPORT_START_X_SHIFT \ + | (u32 )(startY) << VIEWPORT_START_Y_SHIFT \ + | (u32 )(endX) << VIEWPORT_END_X_SHIFT \ + | (u32 )(endY) << VIEWPORT_END_Y_SHIFT; \ + \ + (bufp) += (1 + GXOP_VIEWPORT_NPARAMS); \ +} + + +//====================================================================== +// sR}hQ +//====================================================================== + +//---------------------------------------------------------------------- +// s񃂁[hݒ +// +//EsR}hő삷Jgsw肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// mode s񃂁[h +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_MtxMode(bufp, mode) \ +{ \ + (bufp)[0] = GXOP_MTX_MODE; \ + (bufp)[1] = (mode); \ + \ + (bufp) += (1 + GXOP_MTX_MODE_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃vbV +// +//EJgssX^bN֑ޔ +// fBXvCXg𐶐܂B +//EsX^bN|C^͂Pi݂܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_PushMtx(bufp) \ +{ \ + (bufp)[0] = GXOP_MTX_PUSH; \ + \ + (bufp) += (1 + GXOP_MTX_PUSH_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃|bv +// +//EJgssX^bN畜 +// fBXvCXg𐶐܂B +//EsX^bN|C^͎w肵Έʒuֈړ܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// relPos Έʒui-30 ` 31j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_PopMtx(bufp, relPos) \ +{ \ + (bufp)[0] = GXOP_MTX_POP; \ + (bufp)[1] = (relPos); \ + \ + (bufp) += (1 + GXOP_MTX_POP_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃XgA +// +//EJgssX^bN̎wʒu֊i[ +// fBXvCXg𐶐܂B +//EsX^bN|C^͈ړ܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// index CfbNXi0 ` 30j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_StoreMtx(bufp, index) \ +{ \ + (bufp)[0] = GXOP_MTX_STORE; \ + (bufp)[1] = (index); \ + \ + (bufp) += (1 + GXOP_MTX_STORE_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃XgA +// +//EJgssX^bN̎wʒuo +// fBXvCXg𐶐܂B +//EsX^bN|C^͈ړ܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// index CfbNXi0 ` 30j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_RestoreMtx(bufp, index) \ +{ \ + (bufp)[0] = GXOP_MTX_RESTORE; \ + (bufp)[1] = (index); \ + \ + (bufp) += (1 + GXOP_MTX_RESTORE_NPARAMS); \ +} + + +//---------------------------------------------------------------------- +// Pʍsւ̏ +// +//EJgsPʍsɏ +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Identity(bufp) \ +{ \ + (bufp)[0] = GXOP_MTX_IDENTITY; \ + \ + (bufp) += (1 + GXOP_MTX_IDENTITY_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// sړs̓Kp +// +//EJgsɕsړsZ +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Translate(bufp, x, y, z) \ +{ \ + (bufp)[0] = GXOP_MTX_TRANS; \ + \ + (bufp)[1] = (x); \ + (bufp)[2] = (y); \ + (bufp)[3] = (z); \ + \ + (bufp) += (1 + GXOP_MTX_TRANS_NPARAMS); \ +} + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define _GXB_TranslateBefore(bufp, x, y, z) \ +{ \ + (bufp)[0] = (x); \ + (bufp)[1] = (y); \ + (bufp)[2] = (z); \ + \ + (bufp) += GXOP_MTX_TRANS_NPARAMS; \ +} + + +//---------------------------------------------------------------------- +// Jgsւ̃[h +// +//EJgsɎw肵sݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// srcp [hs̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_LoadMtx(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_LOAD_4x3; \ + \ + (bufp) = _GXB_SetMtx(&(bufp)[1], srcp); \ +} +#define GXB_LoadMtx33(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_LOAD_4x3; \ + \ + (bufp) = _GXB_SetMtx33(&(bufp)[1], srcp); \ + *(bufp)++ = 0; \ + *(bufp)++ = 0; \ + *(bufp)++ = 0; \ +} +#define GXB_LoadMtx44(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_LOAD_4x4; \ + \ + (bufp) = _GXB_SetMtx44(&(bufp)[1], srcp); \ +} + +u32 *_GXB_SetMtx( u32 *bufp, const Mtx *srcp); +u32 *_GXB_SetMtx33(u32 *bufp, const Mtx33 *srcp); +u32 *_GXB_SetMtx44(u32 *bufp, const Mtx44 *srcp); + +//---------------------------------------------------------------------- +// ʍsƃJgs̏Z +// +//EJgsɎw肵sZ +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// srcp Kps̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_MultMtx(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_SetMtx(&(bufp)[1], srcp); \ +} +#define GXB_MultMtx33(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_SetMtx33(&(bufp)[1], srcp); \ +} +#define GXB_MultMtx44(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x4; \ + \ + (bufp) = _GXB_SetMtx44(&(bufp)[1], srcp); \ +} + +//---------------------------------------------------------------------- +// sړsKpɈʍsZ +// +//EJgs֕sړsƈʍšsZ +// fBXvCXg𐶐܂B +// +//EGXB_Translate(){GXB_MultMtx33() WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x X +// y Y +// z Z +// srcp Kp3x3s̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Translate2MultMtx33(bufp, x, y, z, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_SetMtx33(&(bufp)[1], srcp); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// ]us̓Kp +// +//EJgsɎw肵s̓]usZ +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// srcp ]uO̍s̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_TransposeMtx(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_TransposeMtx(&(bufp)[1], srcp); \ +} +#define GXB_TransposeMtx33(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_TransposeMtx33(&(bufp)[1], srcp); \ +} +#define GXB_TransposeMtx44(bufp, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x4; \ + \ + (bufp) = _GXB_TransposeMtx44(&(bufp)[1], srcp); \ +} + +u32 *_GXB_TransposeMtx( u32 *bufp, const Mtx *srcp); +u32 *_GXB_TransposeMtx33(u32 *bufp, const Mtx33 *srcp); +u32 *_GXB_TransposeMtx44(u32 *bufp, const Mtx44 *srcp); + +//---------------------------------------------------------------------- +// sړsKpɓ]usKp +// +//EJgs֕sړsƓ]ušsZ +// fBXvCXg𐶐܂B +// +//EGXB_Translate(){GXB_TransposeMtx33() WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x sړX +// y sړY +// z sړZ +// srcp ]uO3x3s̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Translate2TransposeMtx33(bufp, x, y, z, srcp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_TransposeMtx33(&(bufp)[1], srcp); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// XP[s̓KpiʒuWŝ݁j +// +//EJgsɃXP[sZ +// fBXvCXg𐶐܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇł +// ʒuWŝ݂ɓKp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Scale(bufp, x, y, z) \ +{ \ + (bufp)[0] = GXOP_MTX_SCALE; \ + \ + (bufp)[1] = (x) >>VG_SFT_DF; \ + (bufp)[2] = (y) >>VG_SFT_DF; \ + (bufp)[3] = (z) >>VG_SFT_DF; \ + \ + (bufp) += (1 + GXOP_MTX_SCALE_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// XP[s̓KpiʒuWs񁕕xNgsj +// +//EJgsɃXP[sZ +// fBXvCXg𐶐܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇɂ +// ʒuWsƕxNgs̗ɓKp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_ScaleWithVector(bufp, x, y, z) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_ScaleWithVector(&(bufp)[1], x, y, z); \ +} + +u32 *_GXB_ScaleWithVector(u32 *bufp, s32 x, s32 y, s32 z); + +//---------------------------------------------------------------------- +// sړsKp +// XP[sKpiʒuWs񁕕xNgsj +// +//EJgs֕sړsƃXP[šsZ +// fBXvCXg𐶐܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇɂ +// ʒuWsƕxNgs̗ɓKp܂B +// +//EGXB_Translate(){GXB_ScaleWithVector() WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// xT sړX +// yT sړY +// zT sړZ +// xS XP[X +// yS XP[Y +// zS XP[Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Translate2ScaleWithVector(bufp, xT, yT, zT, xS, yS, zS) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_ScaleWithVector(&(bufp)[1], xS, yS, zS); \ + _GXB_TranslateBefore(bufp, xT, yT, zT); \ +} + + +//---------------------------------------------------------------------- +// 厲]s̓Kp +// +//EJgsɊe厲ɉ]sZ +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_RotateX(bufp, theta) GXB_RotatePriv(bufp, X, SIN_NDIV_DEFAULT, theta) +#define GXB_RotateY(bufp, theta) GXB_RotatePriv(bufp, Y, SIN_NDIV_DEFAULT, theta) +#define GXB_RotateZ(bufp, theta) GXB_RotatePriv(bufp, Z, SIN_NDIV_DEFAULT, theta) + +#define GXB_RotateX256(bufp, theta) GXB_RotatePriv(bufp, X, 256, theta) +#define GXB_RotateY256(bufp, theta) GXB_RotatePriv(bufp, Y, 256, theta) +#define GXB_RotateZ256(bufp, theta) GXB_RotatePriv(bufp, Z, 256, theta) +#define GXB_RotateX1024(bufp, theta) GXB_RotatePriv(bufp, X, 1024, theta) +#define GXB_RotateY1024(bufp, theta) GXB_RotatePriv(bufp, Y, 1024, theta) +#define GXB_RotateZ1024(bufp, theta) GXB_RotatePriv(bufp, Z, 1024, theta) +#define GXB_RotateX4096(bufp, theta) GXB_RotatePriv(bufp, X, 4096, theta) +#define GXB_RotateY4096(bufp, theta) GXB_RotatePriv(bufp, Y, 4096, theta) +#define GXB_RotateZ4096(bufp, theta) GXB_RotatePriv(bufp, Z, 4096, theta) + +u32 *_GXB_RotateX256(u32 *bufp, u32 theta); +u32 *_GXB_RotateY256(u32 *bufp, u32 theta); +u32 *_GXB_RotateZ256(u32 *bufp, u32 theta); +u32 *_GXB_RotateX1024(u32 *bufp, u32 theta); +u32 *_GXB_RotateY1024(u32 *bufp, u32 theta); +u32 *_GXB_RotateZ1024(u32 *bufp, u32 theta); +u32 *_GXB_RotateX4096(u32 *bufp, u32 theta); +u32 *_GXB_RotateY4096(u32 *bufp, u32 theta); +u32 *_GXB_RotateZ4096(u32 *bufp, u32 theta); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_RotatePriv(bufp, axis, ndiv, theta) \ + GXB_RotateNDiv(bufp, axis, ndiv, theta) +#define GXB_RotateNDiv(bufp, axis, ndiv, theta) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_Rotate##axis##ndiv(&(bufp)[1], theta); \ +} + +//---------------------------------------------------------------------- +// sړsKpɎ厲]sKp +// +//EJgs֕sړsƎ厲]šsZ +// fBXvCXg𐶐܂B +// +//EGXB_Translate(){GXB_Rotate[X|Y|Z][256|1024|4096]() +// WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x sړX +// y sړY +// z sړZ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Translate2RotateX(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, X, SIN_NDIV_DEFAULT, theta) +#define GXB_Translate2RotateY(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Y, SIN_NDIV_DEFAULT, theta) +#define GXB_Translate2RotateZ(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Z, SIN_NDIV_DEFAULT, theta) + +#define GXB_Translate2RotateX256(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, X, 256, theta) +#define GXB_Translate2RotateY256(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Y, 256, theta) +#define GXB_Translate2RotateZ256(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Z, 256, theta) +#define GXB_Translate2RotateX1024(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, X, 1024, theta) +#define GXB_Translate2RotateY1024(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Y, 1024, theta) +#define GXB_Translate2RotateZ1024(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Z, 1024, theta) +#define GXB_Translate2RotateX4096(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, X, 4096, theta) +#define GXB_Translate2RotateY4096(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Y, 4096, theta) +#define GXB_Translate2RotateZ4096(bufp, x, y, z, theta) GXB_Translate2RotatePriv(bufp, x, y, z, Z, 4096, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_Translate2RotatePriv(bufp, x, y, z, axis, ndiv, theta) \ + GXB_Translate2RotateNDiv(bufp, x, y, z, axis, ndiv, theta) +#define GXB_Translate2RotateNDiv(bufp, x, y, z, axis, ndiv, theta) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_Rotate##axis##ndiv(&(bufp)[1], theta); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + +//---------------------------------------------------------------------- +// 厲]siOp֐ɂ]pwj̓Kp +// +//EJgsɊe厲ɉ]sZ +// fBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_RotateXSinCos(bufp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateXSinCos(&(bufp)[1], sinA, cosA); \ +} +#define GXB_RotateYSinCos(bufp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateYSinCos(&(bufp)[1], sinA, cosA); \ +} +#define GXB_RotateZSinCos(bufp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateZSinCos(&(bufp)[1], sinA, cosA); \ +} + +u32 *_GXB_RotateXSinCos(u32 *bufp, s32 sinA, s32 cosA); +u32 *_GXB_RotateYSinCos(u32 *bufp, s32 sinA, s32 cosA); +u32 *_GXB_RotateZSinCos(u32 *bufp, s32 sinA, s32 cosA); + +//---------------------------------------------------------------------- +// sړsKp +// 厲]siOp֐ɂ]pwjKp +// +//EJgs֕sړsƎ厲]šsZ +// fBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EGXB_Translate(){GXB_Rotate[X|Y|Z]SinCos() +// WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x sړX +// y sړY +// z sړZ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_Translate2RotateXSinCos(bufp, x, y, z, sinA, cosA) GXB_Translate2RotateSinCosPriv(bufp, x, y, z, X, sinA, cosA) +#define GXB_Translate2RotateYSinCos(bufp, x, y, z, sinA, cosA) GXB_Translate2RotateSinCosPriv(bufp, x, y, z, Y, sinA, cosA) +#define GXB_Translate2RotateZSinCos(bufp, x, y, z, sinA, cosA) GXB_Translate2RotateSinCosPriv(bufp, x, y, z, Z, sinA, cosA) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_Translate2RotateSinCosPriv(bufp, x, y, z, axis, sinA, cosA) \ + GXB_Translate2RotateSinCosNDiv(bufp, x, y, z, axis, sinA, cosA) +#define GXB_Translate2RotateSinCosNDiv(bufp, x, y, z, axis, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_RotateZSinCos(&(bufp)[1], sinA, cosA); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// Cӎ]s̓Kp +// +//EJgsɔCӂ̃xNgƂĉ]sZ +// fBXvCXg𐶐܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// bufp fBXvCXgobt@̃|C^ +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_RotateAxis( bufp, axisp, theta) GXB_RotateAxisPriv( bufp, SIN_NDIV_DEFAULT, axisp, theta) +#define GXB_RotateAxisFast(bufp, axisp, theta) GXB_RotateAxisPrivFast(bufp, SIN_NDIV_DEFAULT, axisp, theta) + +#define GXB_RotateAxis256( bufp, axisp, theta) GXB_RotateAxisPriv( bufp, 256, axisp, theta) +#define GXB_RotateAxis256Fast(bufp, axisp, theta) GXB_RotateAxisPrivFast(bufp, 256, axisp, theta) +#define GXB_RotateAxis1024( bufp, axisp, theta) GXB_RotateAxisPriv( bufp, 1024, axisp, theta) +#define GXB_RotateAxis1024Fast(bufp, axisp, theta) GXB_RotateAxisPrivFast(bufp, 1024, axisp, theta) +#define GXB_RotateAxis4096( bufp, axisp, theta) GXB_RotateAxisPriv( bufp, 4096, axisp, theta) +#define GXB_RotateAxis4096Fast(bufp, axisp, theta) GXB_RotateAxisPrivFast(bufp, 4096, axisp, theta) + +u32 *_GXB_RotateAxis256( u32 *bufp, const Vec *axisp, u32 theta); +u32 *_GXB_RotateAxis256Fast(u32 *bufp, const Vec *axisp, u32 theta); +u32 *_GXB_RotateAxis1024( u32 *bufp, const Vec *axisp, u32 theta); +u32 *_GXB_RotateAxis1024Fast(u32 *bufp, const Vec *axisp, u32 theta); +u32 *_GXB_RotateAxis4096( u32 *bufp, const Vec *axisp, u32 theta); +u32 *_GXB_RotateAxis4096Fast(u32 *bufp, const Vec *axisp, u32 theta); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_RotateAxisPriv( bufp, ndiv, axisp, theta) \ + GXB_RotateAxisNDiv( bufp, ndiv, axisp, theta) +#define GXB_RotateAxisNDiv( bufp, ndiv, axisp, theta) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateAxis##ndiv(&(bufp)[1], axisp, theta); \ +} +#define GXB_RotateAxisPrivFast(bufp, ndiv, axisp, theta) \ + GXB_RotateAxisNDivFast(bufp, ndiv, axisp, theta) +#define GXB_RotateAxisNDivFast(bufp, ndiv, axisp, theta) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateAxis##ndiv##Fast(&(bufp)[1], axisp, theta); \ +} + +//---------------------------------------------------------------------- +// sړsKpɔCӎ]sKp +// +//EJgs֕sړsƔCӎ]šsZ +// fBXvCXg𐶐܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +//EGXB_Translate(){GXB_RotateAxis[256|1024|4096][Fast]() +// WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x sړX +// y sړY +// z sړZ +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Translate2RotateAxis( bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPriv( bufp, x, y, z, SIN_NDIV_DEFAULT, axisp, theta) +#define GXB_Translate2RotateAxisFast(bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPrivFast(bufp, x, y, z, SIN_NDIV_DEFAULT, axisp, theta) + +#define GXB_Translate2RotateAxis256( bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPriv( bufp, x, y, z, 256, axisp, theta) +#define GXB_Translate2RotateAxis256Fast(bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPrivFast(bufp, x, y, z, 256, axisp, theta) +#define GXB_Translate2RotateAxis1024( bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPriv( bufp, x, y, z, 1024, axisp, theta) +#define GXB_Translate2RotateAxis1024Fast(bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPrivFast(bufp, x, y, z, 1024, axisp, theta) +#define GXB_Translate2RotateAxis4096( bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPriv( bufp, x, y, z, 4096, axisp, theta) +#define GXB_Translate2RotateAxis4096Fast(bufp, x, y, z, axisp, theta) GXB_Translate2RotateAxisPrivFast(bufp, x, y, z, 4096, axisp, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_Translate2RotateAxisPriv( bufp, x, y, z, ndiv, axisp, theta) \ + GXB_Translate2RotateAxisNDiv( bufp, x, y, z, ndiv, axisp, theta) +#define GXB_Translate2RotateAxisNDiv( bufp, x, y, z, ndiv, axisp, theta) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_RotateAxis##ndiv(&(bufp)[1], axisp, theta); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} +#define GXB_Translate2RotateAxisPrivFast(bufp, x, y, z, ndiv, axisp, theta) \ + GXB_Translate2RotateAxisNDivFast(bufp, x, y, z, ndiv, axisp, theta) +#define GXB_Translate2RotateAxisNDivFast(bufp, x, y, z, ndiv, axisp, theta) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_RotateAxis##ndiv##Fast(&(bufp)[1], axisp, theta); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// Cӎ]siOp֐ɂ]pwj̓Kp +// +//EJgsɔCӂ̃xNgƂĉ]sZ +// fBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// bufp fBXvCXgobt@̃|C^ +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_RotateAxisSinCos(bufp, axisp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateAxisSinCos(&(bufp)[1], axisp, sinA, cosA); \ +} +#define GXB_RotateAxisSinCosFast(bufp, axisp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_RotateAxisSinCosFast(&(bufp)[1], axisp, sinA, cosA); \ +} + +u32 *_GXB_RotateAxisSinCos(u32 *bufp, const Vec *axisp, s32 sinA, s32 cosA); +u32 *_GXB_RotateAxisSinCosFast(u32 *bufp, const Vec *axisp, s32 sinA, s32 cosA); + +//---------------------------------------------------------------------- +// sړsKp +// Cӎ]siOp֐ɂ]pwjKp +// +//EJgs֕sړsƔCӎ]šsZ +// fBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +//EGXB_Translate(){GXB_RotateAxisSinCos[Fast]() +// WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x sړX +// y sړY +// z sړZ +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Translate2RotateAxisSinCos( bufp, x, y, z, axisp, sinA, cosA) GXB_Translate2RotateAxisSinCosPriv( bufp, x, y, z, axisp, sinA, cosA) +#define GXB_Translate2RotateAxisSinCosFast(bufp, x, y, z, axisp, sinA, cosA) GXB_Translate2RotateAxisSinCosPrivFast(bufp, x, y, z, axisp, sinA, cosA) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_Translate2RotateAxisSinCosPriv( bufp, x, y, z, axisp, sinA, cosA) \ + GXB_Translate2RotateAxisSinCosNDiv( bufp, x, y, z, axisp, sinA, cosA) +#define GXB_Translate2RotateAxisSinCosNDiv( bufp, x, y, z, axisp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_RotateAxisSinCos(&(bufp)[1], axisp, sinA, cosA); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} +#define GXB_Translate2RotateAxisSinCosPrivFast(bufp, x, y, z, axisp, sinA, cosA) \ + GXB_Translate2RotateAxisSinCosNDivFast(bufp, x, y, z, axisp, sinA, cosA) +#define GXB_Translate2RotateAxisSinCosNDivFast(bufp, x, y, z, axisp, sinA, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_RotateAxisSinCosFast(&(bufp)[1], axisp, sinA, cosA); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// yɃACg]s̓Kp +// +//EJgsɔCӎZ̐ƈv]ssZ +// fBXvCXg𐶐܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_AlignZ(bufp, vLookInvp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_AlignZ(&(bufp)[1], vLookInvp); \ +} + +u32 *_GXB_AlignZ(u32 *bufp, const Vec *vLookInvp); + +//---------------------------------------------------------------------- +// sړsKp +// yɃACg]sKp +// +//EJgs֕sړsƔCӎZ̐ƈv]ss +// Ƃ̌sZAfBXvCXg𐶐܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +//EGXB_Translate(){GXB_AlignZ() WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x sړX +// y sړY +// z sړZ +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Translate2AlignZ(bufp, x, y, z, vLookInvp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_AlignZ(&(bufp)[1], vLookInvp); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// NH[^jIϊ]s̓Kp +// +//EJgsփNH[^jIϊ]sKp +// fBXvCXg𐶐܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +// +//EF +// bufp fBXvCXgobt@̃|C^ +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//ʏł͏Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_QuatMtx(bufp, quatp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_QuatMtx(&(bufp)[1], quatp); \ +} +#define GXB_QuatMtxFast(bufp, quatp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_3x3; \ + \ + (bufp) = _GXB_QuatMtxFast(&(bufp)[1], quatp); \ +} + +u32 *_GXB_QuatMtx(u32 *bufp, const Quat *quatp); +u32 *_GXB_QuatMtxFast(u32 *bufp, const Quat *quatp); + +//---------------------------------------------------------------------- +// sړsKp +// NH[^jIϊ]sKp +// +//EJgs֕sړsƃNH[^jIϊ]s +// ̌sZAfBXvCXg𐶐܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +//EGXB_Translate(){GXB_QuatMtx[Fast]() WIgGWׂ̕点܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//ʏł͏Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Translate2QuatMtx( bufp, x, y, z, quatp) GXB_Translate2QuatMtxPriv( bufp, x, y, z, quatp) +#define GXB_Translate2QuatMtxFast(bufp, x, y, z, quatp) GXB_Translate2QuatMtxPrivFast(bufp, x, y, z, quatp) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_Translate2QuatMtxPriv( bufp, x, y, z, quatp) \ + GXB_Translate2QuatMtxNDiv( bufp, x, y, z, quatp) +#define GXB_Translate2QuatMtxNDiv( bufp, x, y, z, quatp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_QuatMtx(&(bufp)[1], quatp); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} +#define GXB_Translate2QuatMtxPrivFast(bufp, x, y, z, quatp) \ + GXB_Translate2QuatMtxNDivFast(bufp, x, y, z, quatp) +#define GXB_Translate2QuatMtxNDivFast(bufp, x, y, z, quatp) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_QuatMtxFast(&(bufp)[1], quatp); \ + _GXB_TranslateBefore(bufp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// EΏ̂̓ˉes̓Kp +// +//EEΏ̂̓@̍s쐬AJgs֏Z +// fBXvCXg𐶐܂B +// +//E֐ŏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// fovy c̎pxm256b1024b4096iKn +// aspect ̎m肷ciEł /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Perspective(bufp, fovy, aspect, near, far, scaleW) GXB_PerspectivePriv(SIN_NDIV_DEFAULT, bufp, fovy, aspect, near, far, scaleW) + +#define GXB_Perspective256( bufp, fovy, aspect, near, far, scaleW) GXB_PerspectivePriv(256, bufp, fovy, aspect, near, far, scaleW) +#define GXB_Perspective1024(bufp, fovy, aspect, near, far, scaleW) GXB_PerspectivePriv(1024, bufp, fovy, aspect, near, far, scaleW) +#define GXB_Perspective4096(bufp, fovy, aspect, near, far, scaleW) GXB_PerspectivePriv(4096, bufp, fovy, aspect, near, far, scaleW) + +u32 *_GXB_Perspective256(u32 *bufp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); +u32 *_GXB_Perspective1024(u32 *bufp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); +u32 *_GXB_Perspective4096(u32 *bufp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXB_PerspectivePriv(ndiv, bufp, fovy, aspect, near, far, scaleW) \ + GXB_PerspectiveNDiv(ndiv, bufp, fovy, aspect, near, far, scaleW) +#define GXB_PerspectiveNDiv(ndiv, bufp, fovy, aspect, near, far, scaleW) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x4; \ + \ + (bufp) = _GXB_Perspective##ndiv(&(bufp)[1], fovy, aspect, near, far, scaleW); \ +} + +//---------------------------------------------------------------------- +// EΏ̂̓ˉesiOp֐ɂ鎋pwj̓Kp +// +//EEΏ̂̓@̍s쐬AJgs֏Z +// fBXvCXg𐶐܂B +//Epx̓TCƃRTCɂĎw肵܂B +// +//E֐ŏZgp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// sinA c̎px̃TC +// cosA c̎px̃RTCiʊ֐̌ĂяôߍŌɓnj +// aspect ̎m肷ci /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_PerspectiveSinCos(bufp, sinA, fovy, aspect, near, far, scaleW, cosA) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x4; \ + \ + (bufp) = _GXB_PerspectiveSinCos(&(bufp)[1], sinA, fovy, aspect, near, far, scaleW, cosA); \ +} + +u32 *_GXB_PerspectiveSinCos(u32 *bufp, s32 sinA, s32 aspect, s32 near, s32 far, s32 scaleW, s32 cosA); + +//---------------------------------------------------------------------- +// ˉes̓Kp +// +//E@̍s쐬AJgs֏Z +// fBXvCXg𐶐܂B +// +//E֐ŏZgp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iɐj +// f _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Frustum(bufp, t, b, l, r, n, f, scaleW) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x4; \ + \ + (bufp) = _GXB_Frustum(&(bufp)[1], t, b, l, r, n, f, scaleW); \ +} + +u32 *_GXB_Frustum(u32 *bufp, s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW); + +//---------------------------------------------------------------------- +// ˉes̓Kp +// +//Eˉe̕s̐ς̍s쐬AJgs֏Z +// fBXvCXg𐶐܂B +// +//E֐ŏZgp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iǂłj +// f _farNbvʂ܂ł̋ iǂłj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Ortho(bufp, t, b, l, r, n, f, scaleW) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x4; \ + \ + (bufp) = _GXB_Ortho(&(bufp)[1], t, b, l, r, n, f, scaleW); \ +} + +u32 *_GXB_Ortho(u32 *bufp, s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW); + +//---------------------------------------------------------------------- +// Es̓Kp +// +//EEs쐬AJgs֏Z +// fBXvCXg𐶐܂B +// +//E֐ŃxNg̐K̂߂ɕZƏZgp܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// eye _ +// at _ +// vUp xNg +// vDst 0iNULL|C^jȊOnƁAtxNgԂ܂ +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_LookAt( bufp, eye, at, vUp, vDst) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_LookAt(&(bufp)[1], eye, at, vUp, vDst); \ +} +#define GXB_LookAtFast(bufp, eye, at, vUp, vDst) \ +{ \ + (bufp)[0] = GXOP_MTX_MULT_4x3; \ + \ + (bufp) = _GXB_LookAtFast(&(bufp)[1], eye, at, vUp, vDst); \ +} + +u32 *_GXB_LookAt( u32 *bufp, const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst); +u32 *_GXB_LookAtFast(u32 *bufp, const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst); + + +//---------------------------------------------------------------------- +// {bNXeXg +// +//Ê̐ςɓ邩ǂeXg߂̍\̂ݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// box eXg{bNXiXYZWHD161616161616j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_BoxTest1(bufp, box) \ +{ \ + (bufp)[0] = GXOP_BOX_TEST; \ + *(TestBox *)&(bufp)[1] = (box); \ + \ + (bufp) += (1 + GXOP_BOX_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// {bNXeXg +// +//Ê̐ςɓ邩ǂeXg߂Ɋep[^ݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x eXg{bNXXWi16bitj +// y eXg{bNXYWi V j +// z eXg{bNXZWi V j +// w eXg{bNX i V j +// h eXg{bNX i V j +// d eXg{bNXs i V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_BoxTest6(bufp, x, y, z, w, h, d) \ +{ \ + (bufp)[0] = GXOP_BOX_TEST; \ + (bufp)[1] = XY1616(x, y); \ + (bufp)[2] = ZW1616(z, w); \ + (bufp)[3] = HD1616(h, d); \ + \ + (bufp) += (1 + GXOP_BOX_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// ʒuWeXg +// +//EeXgp̈ʒuW̍\̂ݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// pos ʒuWiXYZ161616j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_PositionTest1(bufp, pos) \ +{ \ + (bufp)[0] = GXOP_POS_TEST; \ + *(Pos16 *)&(bufp)[1] = (pos); \ + \ + (bufp) += (1 + GXOP_POS_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// ʒuWeXg +// +//EeXgp̈ʒuW̊evfݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x ʒuWXi16bitj +// y Yi V j +// z Zi V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_PositionTest3(bufp, x, y, z) \ +{ \ + (bufp)[0] = GXOP_POS_TEST; \ + (bufp)[1] = XY1616(x, y); \ + (bufp)[2] = (z); \ + \ + (bufp) += (1 + GXOP_POS_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// xNgeXg +// +//EeXgp̕xNg\̂ݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// vector xNgiXYZ101010j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_VectorTest1(bufp, vector) \ +{ \ + (bufp)[0] = GXOP_VEC_TEST; \ + *(Vec10 *)&(bufp)[1] = (vector); \ + \ + (bufp) += (1 + GXOP_VEC_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// xNgeXg +// +//EeXgp̕xNg̊evfݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// x xNgXi10bitj +// y Yi V j +// z Zi V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_VectorTest3(bufp, x, y, z) \ +{ \ + (bufp)[0] = GXOP_VEC_TEST; \ + (bufp)[1] = XYZ101010(x, y, z); \ + \ + (bufp) += (1 + GXOP_VEC_TEST_NPARAMS); \ +} + + +//---------------------------------------------------------------------- +// CgxNgݒ +// +//ECgxNgփCgxNg\̂ݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// lightVector CgxNgiXYZ101010j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_LightVector1(bufp, lightVector) \ +{ \ + (bufp)[0] = GXOP_LIGHT_VECTOR; \ + *(LightVector *)&(bufp)[1] = (lightVector); \ + \ + (bufp) += (1 + GXOP_LIGHT_VECTOR_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// CgJ[ݒ +// +//ECgJ[փCgJ[\̂ݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// lightColor CgJ[iRGB555j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_LightColor1(bufp, lightColor) \ +{ \ + (bufp)[0] = GXOP_LIGHT_COLOR; \ + *(LightColor *)&(bufp)[1] = (lightColor); \ + \ + (bufp) += (1 + GXOP_LIGHT_COLOR_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// CgxNgݒ +// +//ECgxNgփCgԍƕxNgݒ肷 +// fBXvCXg𐶐܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// no Cgԍ +// vector xNgiXYZ101010j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_LightVector2(bufp, no, vector) \ +{ \ + (bufp)[0] = GXOP_LIGHT_VECTOR; \ + (bufp)[1] = ((no)< +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + + +//---------------------------------------------------------------------- +// ̂̕` +// +//Ê`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// width ӂ̒ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +//---------------------------------------------------------------------- + +#define GXB_DrawCube(bufp, width, texParamp) \ + \ + ((bufp) = _GXB_DrawCube(bufp, width, texParamp)) + +u32 *_GXB_DrawCube(u32 *bufp, u16 width, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ̂̕` +// +//Ê`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// width +// height +// depth s +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +//---------------------------------------------------------------------- + +#define GXB_DrawBox(bufp, width, height, depth, texParamp) \ + \ + ((bufp) = _GXB_DrawBox(bufp, width, height, depth, texParamp)) + +u32 *_GXB_DrawBox(u32 *bufp, u16 width, u16 height, u16 depth, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ̕` +// +//E`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius a +// numMajor ܓx(latitude)̕ +// numMinor ox(longitude)̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +//---------------------------------------------------------------------- + +#define GXB_DrawSphere(bufp, radius, numMajor, numMinor, texParamp) \ + \ + ((bufp) = _GXB_DrawSphere(bufp, radius, numMajor, numMinor, texParamp)) + +u32 *_GXB_DrawSphere(u32 *bufp, s16 radius, s16 numMajor, s16 numMinor, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// \ʑ̂ċAIɕ̕` +// +//E\ʑ̂ċAIɕ`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius a +// numLevel ו̃x +// +//E߂lF Ȃ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// DMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_DrawSphereHedron(bufp, radius, numLevel) \ + \ + ((bufp) = _GXB_DrawSphereHedron(bufp, radius, numLevel)) + +u32 *_GXB_DrawSphereHedron(u32 *bufp, s16 radius, s16 numLevel); + + +//---------------------------------------------------------------------- +// ~̕` +// +//E~`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius a +// height +// numEdges ~̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +//---------------------------------------------------------------------- + +#define GXB_DrawCylinder(bufp, radius, height, numEdges, texParamp) \ + \ + ((bufp) = _GXB_DrawCylinder(bufp, radius, height, numEdges, texParamp)) + +u32 *_GXB_DrawCylinder(u32 *bufp, s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ~̕` +// +//E~`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius ʂ̔a +// height +// numEdges ~̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// DMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_DrawCone(bufp, radius, height, numEdges, texParamp) \ + \ + ((bufp) = _GXB_DrawCone(bufp, radius, height, numEdges, texParamp)) + +u32 *_GXB_DrawCone(u32 *bufp, s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// g[Xi~j̕` +// +//Eg[Xi~j`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// size g[X̒S]~̒S܂ł̋ +// rc sizeƉ]~̔a̔䗦 +// numc ]~̕ +// numt ]ɂ~̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXB_DrawTorus(bufp, size, rc, numc, numt, texParamp) \ + \ + ((bufp) = _GXB_DrawTorus(bufp, size, rc, numc, numt, texParamp)) + +u32 *_GXB_DrawTorus(u32 *bufp, s16 size, s16 rc, s16 numc, s16 numt, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ʑ̂̕` +// +//Eʑ̂`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius a +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// DMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Draw8Hedron(bufp, radius) \ + \ + ((bufp) = _GXB_Draw8Hedron(bufp, radius)) + +u32 *_GXB_Draw8Hedron(u32 *bufp, s16 radius); + + +//---------------------------------------------------------------------- +// \ʑ̂̕` +// +//E\ʑ̂`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius a +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// DMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Draw12Hedron(bufp, radius) \ + \ + ((bufp) = _GXB_Draw12Hedron(bufp, radius)) + +u32 *_GXB_Draw12Hedron(u32 *bufp, s16 radius); + + +//---------------------------------------------------------------------- +// \ʑ̂̕` +// +//E\ʑ̂`悵܂B +// +//EF +// bufp fBXvCXgobt@̃|C^ +// radius a +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// DMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXB_Draw20Hedron(bufp, radius) \ + \ + ((bufp) = _GXB_Draw20Hedron(bufp, radius)) + +u32 *_GXB_Draw20Hedron(u32 *bufp, s16 radius); + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_GXB_PRIMITIVE_H + diff --git a/trunk/IrisMainp/include/IrisGXC.h b/trunk/IrisMainp/include/IrisGXC.h new file mode 100644 index 0000000..3e21e8f --- /dev/null +++ b/trunk/IrisMainp/include/IrisGXC.h @@ -0,0 +1,2430 @@ +//====================================================================== +// IrisGXC.h +// IRISkfBXvCXgobt@(f[^TCM)֐ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_GXC_H +#define _IRIS_GXC_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include + + +//---------------------------------------------------------------------- +// kfBXvCXgbot] +// +//Eobt@Ɋi[ꂽkfBXvCXg +// CPUɂăWIgR}hFIFO֓]܂B +//E]OɃR}h[h̃pbḧ悪NA܂B +// +//EF +// startp fBXvCXgobt@̐擪|C^ +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// +//E߂lFȂ +// +//TCM̃fBXvCXgDMA]ł܂B +//---------------------------------------------------------------------- + +#define GXC_CallList(startp, opp, prmp) \ +{ \ + GXC_ClearListPad(opp); \ + GXB_CallList(startp, prmp); \ +} + + +//---------------------------------------------------------------------- +// kfBXvCXg̃R}h[hEpbḧ̃NA +// +//EkfBXvCXg̃R}h[h̃pbḧNA܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void GXC_ClearListPad(void *opp); + + +//---------------------------------------------------------------------- +// WIgR}h̃Zbg +// +//EkfBXvCXgɃWIgR}hZbg܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// op ZbgWIgR}h +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_SetOp(opp, op) \ +{ \ + ((u8 *)(opp))[0] = op; \ +} + + +//---------------------------------------------------------------------- +// obt@|C^␳Z +// +//EkfBXvCXg̃obt@|C^̕␳Zs܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// prms p[^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_AddBufp(opp, prmp, prms) \ +{ \ + (prmp) += (prms); \ + if ((++(u32 )(opp) & 0x3) == 0) (opp) = (prmp)++; \ +} + + +//---------------------------------------------------------------------- +// r[|[gݒ +// +//EBG0ʏɂr[|[g̍WƉEWݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// startX XWi8bitj +// startY YWi V j +// endX EXWi V j +// endY EYWi V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Viewport(opp, prmp, startX, startY, endX, endY) \ +{ \ + GXC_SetOp(opp, GXOP_VIEWPORT); \ + \ + (prmp)[0] = (u32 )(startX) << VIEWPORT_START_X_SHIFT \ + | (u32 )(startY) << VIEWPORT_START_Y_SHIFT \ + | (u32 )(endX) << VIEWPORT_END_X_SHIFT \ + | (u32 )(endY) << VIEWPORT_END_Y_SHIFT; \ + GXC_AddBufp(opp, prmp, GXOP_VIEWPORT_NPARAMS); \ +} + + +//====================================================================== +// sR}hQ +//====================================================================== + +//---------------------------------------------------------------------- +// s񃂁[hݒ +// +//EsR}hő삷Jgsw肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// mode s񃂁[h +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_MtxMode(opp, prmp, mode) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MODE); \ + \ + (prmp)[0] = (mode); \ + GXC_AddBufp(opp, prmp, GXOP_MTX_MODE_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃vbV +// +//EJgssX^bN֑ޔ +// kfBXvCXg𐶐܂B +//EsX^bN|C^͂Pi݂܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_PushMtx(opp, prmp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_PUSH); \ + \ + GXC_AddBufp(opp, prmp, GXOP_MTX_PUSH_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃|bv +// +//EJgssX^bN畜 +// kfBXvCXg𐶐܂B +//EsX^bN|C^͎w肵Έʒuֈړ܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// relPos Έʒui-30 ` 31j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_PopMtx(opp, prmp, relPos) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_POP); \ + \ + (prmp)[0] = (relPos); \ + GXC_AddBufp(opp, prmp, GXOP_MTX_POP_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃XgA +// +//EJgssX^bN̎wʒu֊i[ +// kfBXvCXg𐶐܂B +//EsX^bN|C^͈ړ܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// index CfbNXi0 ` 30j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_StoreMtx(opp, prmp, index) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_STORE); \ + \ + (prmp)[0] = (index); \ + GXC_AddBufp(opp, prmp, GXOP_MTX_STORE_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// Jgs̃XgA +// +//EJgssX^bN̎wʒuo +// kfBXvCXg𐶐܂B +//EsX^bN|C^͈ړ܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// index CfbNXi0 ` 30j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_RestoreMtx(opp, prmp, index) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_RESTORE); \ + \ + GXC_AddBufp(opp, prmp, GXOP_MTX_RESTORE_NPARAMS); \ +} + + +//---------------------------------------------------------------------- +// Pʍsւ̏ +// +//EJgsPʍsɏ +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Identity(opp, prmp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_IDENTITY); \ + \ + GXC_AddBufp(opp, prmp, GXOP_MTX_IDENTITY_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// sړs̓Kp +// +//EJgsɕsړsZ +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Translate(opp, prmp, x, y, z) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_TRANS); \ + \ + (prmp)[0] = (x); \ + (prmp)[1] = (y); \ + (prmp)[2] = (z); \ + GXC_AddBufp(opp, prmp, GXOP_MTX_TRANS_NPARAMS); \ +} + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define _GXC_TranslateBefore(opp, prmp, x, y, z) \ +{ \ + (prmp)[0] = (x); \ + (prmp)[1] = (y); \ + (prmp)[2] = (z); \ + GXC_AddBufp(opp, prmp, GXOP_MTX_TRANS_NPARAMS); \ +} + + +//---------------------------------------------------------------------- +// Jgsւ̃[h +// +//EJgsɎw肵sݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// srcp [hs̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_LoadMtx( opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_LOAD_4x3); \ + \ + (prmp) = _GXB_SetMtx(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_LoadMtx33(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_LOAD_4x3); \ + \ + (prmp) = _GXB_SetMtx33(prmp, srcp); \ + *(prmp)++ = 0; \ + *(prmp)++ = 0; \ + *(prmp)++ = 0; \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_LoadMtx44(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_LOAD_4x4); \ + \ + (prmp) = _GXB_SetMtx44(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} + + +//---------------------------------------------------------------------- +// ʍsƃJgs̏Z +// +//EJgsɎw肵sZ +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// srcp Kps̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_MultMtx(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_SetMtx(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_MultMtx33(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_SetMtx33(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_MultMtx44(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x4); \ + \ + (prmp) = _GXB_SetMtx44(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKpɈʍsZ +// +//EJgs֕sړsƈʍšsZ +// kfBXvCXg𐶐܂B +// +//EGXC_Translate(){GXC_MultMtx33() WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x X +// y Y +// z Z +// srcp Kp3x3s̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Translate2MultMtx33(opp, prmp, x, y, z, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_SetMtx33(prmp, srcp); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// ]us̓Kp +// +//EJgsɎw肵s̓]usZ +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// srcp ]uO̍s̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_TransposeMtx(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_TransposeMtx(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_TransposeMtx33(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_TransposeMtx33(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_TransposeMtx44(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x4); \ + \ + (prmp) = _GXB_TransposeMtx44(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKpɓ]usKp +// +//EJgs֕sړsƓ]ušsZ +// kfBXvCXg𐶐܂B +// +//EGXC_Translate(){GXC_TransposeMtx33() WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x sړX +// y sړY +// z sړZ +// srcp ]uO3x3s̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Translate2TransposeMtx33(prmp, x, y, z, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_TransposeMtx33(prmp, srcp); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// XP[s̓KpiʒuWŝ݁j +// +//EJgsɃXP[sZ +// kfBXvCXg𐶐܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇł +// ʒuWŝ݂ɓKp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Scale(opp, prmp, x, y, z) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_SCALE); \ + \ + (prmp)[0] = (x) >>VG_SFT_DF; \ + (prmp)[1] = (y) >>VG_SFT_DF; \ + (prmp)[2] = (z) >>VG_SFT_DF; \ + GXC_AddBufp(opp, prmp, GXOP_MTX_SCALE_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// XP[s̓KpiʒuWs񁕕xNgsj +// +//EJgsɃXP[sZ +// kfBXvCXg𐶐܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇɂ +// ʒuWsƕxNgs̗ɓKp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_ScaleWithVector(opp, prmp, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_ScaleWithVector(prmp, srcp); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKp +// XP[sKpiʒuWs񁕕xNgsj +// +//EJgs֕sړsƃXP[šsZ +// kfBXvCXg𐶐܂B +//Es񃂁[h PositionEVector ݒ胂[h̏ꍇɂ +// ʒuWsƕxNgs̗ɓKp܂B +// +//EGXC_Translate(){GXC_ScaleWithVector() WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// xT sړX +// yT sړY +// zT sړZ +// xS XP[X +// yS XP[Y +// zS XP[Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Translate2ScaleWithVector(opp, prmp, x, y, z, srcp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_ScaleWithVector(prmp, srcp); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// 厲]s̓Kp +// +//EJgsɊe厲ɉ]sZ +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_RotateX(opp, prmp, theta) GXC_RotatePriv(opp, prmp, X, SIN_NDIV_DEFAULT, theta) +#define GXC_RotateY(opp, prmp, theta) GXC_RotatePriv(opp, prmp, Y, SIN_NDIV_DEFAULT, theta) +#define GXC_RotateZ(opp, prmp, theta) GXC_RotatePriv(opp, prmp, Z, SIN_NDIV_DEFAULT, theta) + +#define GXC_RotateX256( opp, prmp, theta) GXC_RotatePriv(opp, prmp, X, 256, theta) +#define GXC_RotateY256( opp, prmp, theta) GXC_RotatePriv(opp, prmp, Y, 256, theta) +#define GXC_RotateZ256( opp, prmp, theta) GXC_RotatePriv(opp, prmp, Z, 256, theta) +#define GXC_RotateX1024(opp, prmp, theta) GXC_RotatePriv(opp, prmp, X, 1024, theta) +#define GXC_RotateY1024(opp, prmp, theta) GXC_RotatePriv(opp, prmp, Y, 1024, theta) +#define GXC_RotateZ1024(opp, prmp, theta) GXC_RotatePriv(opp, prmp, Z, 1024, theta) +#define GXC_RotateX4096(opp, prmp, theta) GXC_RotatePriv(opp, prmp, X, 4096, theta) +#define GXC_RotateY4096(opp, prmp, theta) GXC_RotatePriv(opp, prmp, Y, 4096, theta) +#define GXC_RotateZ4096(opp, prmp, theta) GXC_RotatePriv(opp, prmp, Z, 4096, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_RotatePriv(opp, prmp, axis, ndiv, theta) \ + GXC_RotateNDiv(opp, prmp, axis, ndiv, theta) +#define GXC_RotateNDiv(opp, prmp, axis, ndiv, theta) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_Rotate##axis##ndiv(prmp, theta); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKpɎ厲]sKp +// +//EJgs֕sړsƎ厲]šsZ +// kfBXvCXg𐶐܂B +// +//EGXC_Translate(){GXC_Rotate[X|Y|Z][256|1024|4096]() +// WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x sړX +// y sړY +// z sړZ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Translate2RotateX(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, X, SIN_NDIV_DEFAULT, theta) +#define GXC_Translate2RotateY(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Y, SIN_NDIV_DEFAULT, theta) +#define GXC_Translate2RotateZ(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Z, SIN_NDIV_DEFAULT, theta) + +#define GXC_Translate2RotateX256(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, X, 256, theta) +#define GXC_Translate2RotateY256(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Y, 256, theta) +#define GXC_Translate2RotateZ256(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Z, 256, theta) +#define GXC_Translate2RotateX1024(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, X, 1024, theta) +#define GXC_Translate2RotateY1024(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Y, 1024, theta) +#define GXC_Translate2RotateZ1024(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Z, 1024, theta) +#define GXC_Translate2RotateX4096(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, X, 4096, theta) +#define GXC_Translate2RotateY4096(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Y, 4096, theta) +#define GXC_Translate2RotateZ4096(opp, prmp, x, y, z, theta) GXC_Translate2RotatePriv(opp, prmp, x, y, z, Z, 4096, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_Translate2RotatePriv(opp, prmp, x, y, z, axis, ndiv, theta) \ + GXC_Translate2RotateNDiv(opp, prmp, x, y, z, axis, ndiv, theta) +#define GXC_Translate2RotateNDiv(opp, prmp, x, y, z, axis, ndiv, theta) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_Rotate##axis##ndiv(prmp, theta); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// 厲]siOp֐ɂ]pwj̓Kp +// +//EJgsɊe厲ɉ]sZ +// kfBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_RotateXSinCos(opp, prmp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateXSinCos(prmp, sinA, cosA); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_RotateYSinCos(opp, prmp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateYSinCos(prmp, sinA, cosA); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_RotateZSinCos(opp, prmp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateZSinCos(prmp, sinA, cosA); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKp +// 厲]siOp֐ɂ]pwjKp +// +//EJgs֕sړsƎ厲]šsZ +// kfBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EGXC_Translate(){GXC_Rotate[X|Y|Z]SinCos() +// WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x sړX +// y sړY +// z sړZ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_Translate2RotateXSinCos(opp, prmp, x, y, z, sinA, cosA) GXC_Translate2RotateSinCosPriv(opp, prmp, x, y, z, X, sinA, cosA) +#define GXC_Translate2RotateYSinCos(opp, prmp, x, y, z, sinA, cosA) GXC_Translate2RotateSinCosPriv(opp, prmp, x, y, z, Y, sinA, cosA) +#define GXC_Translate2RotateZSinCos(opp, prmp, x, y, z, sinA, cosA) GXC_Translate2RotateSinCosPriv(opp, prmp, x, y, z, Z, sinA, cosA) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_Translate2RotateSinCosPriv(opp, prmp, x, y, z, axis, sinA, cosA) \ + GXC_Translate2RotateSinCosNDiv(opp, prmp, x, y, z, axis, sinA, cosA) +#define GXC_Translate2RotateSinCosNDiv(opp, prmp, x, y, z, axis, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_RotateYSinCos(prmp, sinA, cosA); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// Cӎ]s̓Kp +// +//EJgsɔCӂ̃xNgƂĉ]sZ +// kfBXvCXg𐶐܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_RotateAxis( opp, prmp, axisp, theta) GXC_RotateAxisPriv( SIN_NDIV_DEFAULT, opp, prmp, axisp, theta) +#define GXC_RotateAxisFast(opp, prmp, axisp, theta) GXC_RotateAxisPrivFast(SIN_NDIV_DEFAULT, opp, prmp, axisp, theta) + +#define GXC_RotateAxis256( opp, prmp, axisp, theta) GXC_RotateAxisPriv( 256, opp, prmp, axisp, theta) +#define GXC_RotateAxis256Fast( opp, prmp, axisp, theta) GXC_RotateAxisPrivFast(256, opp, prmp, axisp, theta) +#define GXC_RotateAxis1024( opp, prmp, axisp, theta) GXC_RotateAxisPriv( 1024, opp, prmp, axisp, theta) +#define GXC_RotateAxis1024Fast(opp, prmp, axisp, theta) GXC_RotateAxisPrivFast(1024, opp, prmp, axisp, theta) +#define GXC_RotateAxis4096( opp, prmp, axisp, theta) GXC_RotateAxisPriv( 4096, opp, prmp, axisp, theta) +#define GXC_RotateAxis4096Fast(opp, prmp, axisp, theta) GXC_RotateAxisPrivFast(4096, opp, prmp, axisp, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_RotateAxisPriv( ndiv, opp, prmp, axisp, theta) \ + GXC_RotateAxisNDiv( ndiv, opp, prmp, axisp, theta) +#define GXC_RotateAxisNDiv( ndiv, opp, prmp, axisp, theta) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateAxis##ndiv(prmp, axisp, theta); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_RotateAxisPrivFast(ndiv, opp, prmp, axisp, theta) \ + GXC_RotateAxisNDivFast(ndiv, opp, prmp, axisp, theta) +#define GXC_RotateAxisNDivFast(ndiv, opp, prmp, axisp, theta) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateAxis##ndiv##Fast(prmp, axisp, theta); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKpɔCӎ]sKp +// +//EJgs֕sړsƔCӎ]šsZ +// kfBXvCXg𐶐܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +//EGXC_Translate(){GXC_RotateAxis[256|1024|4096][Fast]() +// WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x sړX +// y sړY +// z sړZ +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Translate2RotateAxis( opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPriv( opp, prmp, x, y, z, SIN_NDIV_DEFAULT, axisp, theta) +#define GXC_Translate2RotateAxisFast(opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPrivFast(opp, prmp, x, y, z, SIN_NDIV_DEFAULT, axisp, theta) + +#define GXC_Translate2RotateAxis256( opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPriv( opp, prmp, x, y, z, 256, axisp, theta) +#define GXC_Translate2RotateAxis256Fast(opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPrivFast(opp, prmp, x, y, z, 256, axisp, theta) +#define GXC_Translate2RotateAxis1024( opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPriv( opp, prmp, x, y, z, 1024, axisp, theta) +#define GXC_Translate2RotateAxis1024Fast(opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPrivFast(opp, prmp, x, y, z, 1024, axisp, theta) +#define GXC_Translate2RotateAxis4096( opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPriv( opp, prmp, x, y, z, 4096, axisp, theta) +#define GXC_Translate2RotateAxis4096Fast(opp, prmp, x, y, z, axisp, theta) GXC_Translate2RotateAxisPrivFast(opp, prmp, x, y, z, 4096, axisp, theta) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_Translate2RotateAxisPriv( opp, prmp, x, y, z, ndiv, axisp, theta) \ + GXC_Translate2RotateAxisNDiv( opp, prmp, x, y, z, ndiv, axisp, theta) +#define GXC_Translate2RotateAxisNDiv( opp, prmp, x, y, z, ndiv, axisp, theta) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_RotateAxis##ndiv(prmp, axisp, theta); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} +#define GXC_Translate2RotateAxisPrivFast(opp, prmp, x, y, z, ndiv, axisp, theta) \ + GXC_Translate2RotateAxisNDivFast(opp, prmp, x, y, z, ndiv, axisp, theta) +#define GXC_Translate2RotateAxisNDivFast(opp, prmp, x, y, z, ndiv, axisp, theta) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_RotateAxis##ndiv##Fast(prmp, axisp, theta); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// Cӎ]siOp֐ɂ]pwj̓Kp +// +//EJgsɔCӂ̃xNgƂĉ]sZ +// kfBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_RotateAxisSinCos(opp, prmp, axisp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateAxisSinCos(prmp, axisp, sinA, cosA); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +#define GXC_RotateAxisSinCosFast(opp, prmp, axisp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_RotateAxisSinCosFast(prmp, axisp, sinA, cosA); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKp +// Cӎ]siOp֐ɂ]pwjKp +// +//EJgs֕sړsƔCӎ]šsZ +// kfBXvCXg𐶐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͊֐ŕZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +//EGXC_Translate(){GXC_RotateAxisSinCos[Fast]() +// WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x sړX +// y sړY +// z sړZ +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Translate2RotateAxisSinCos( opp, prmp, x, y, z, axisp, sinA, cosA) GXC_Translate2RotateAxisSinCosPriv( opp, prmp, x, y, z, axisp, sinA, cosA) +#define GXC_Translate2RotateAxisSinCosFast(opp, prmp, x, y, z, axisp, sinA, cosA) GXC_Translate2RotateAxisSinCosPrivFast(opp, prmp, x, y, z, axisp, sinA, cosA) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_Translate2RotateAxisSinCosPriv( opp, prmp, x, y, z, axisp, sinA, cosA) \ + GXC_Translate2RotateAxisSinCosNDiv( opp, prmp, x, y, z, axisp, sinA, cosA) +#define GXC_Translate2RotateAxisSinCosNDiv( opp, prmp, x, y, z, axisp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_RotateAxisSinCos(prmp, axisp, sinA, cosA); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} +#define GXC_Translate2RotateAxisSinCosPrivFast(opp, prmp, x, y, z, axisp, sinA, cosA) \ + GXC_Translate2RotateAxisSinCosNDivFast(opp, prmp, x, y, z, axisp, sinA, cosA) +#define GXC_Translate2RotateAxisSinCosNDivFast(opp, prmp, x, y, z, axisp, sinA, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_RotateAxisSinCosFast(prmp, axisp, sinA, cosA); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// yɃACg]s̓Kp +// +//EJgsɔCӎZ̐ƈv]ssZ +// kfBXvCXg𐶐܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_AlignZ(opp, prmp, vLookInvp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_AlignZ(prmp, vLookInvp); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKp +// yɃACg]sKp +// +//EJgs֕sړsƔCӎZ̐ƈv]ss +// Ƃ̌sZAkfBXvCXg𐶐܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +//EGXC_Translate(){GXC_AlignZ() WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x sړX +// y sړY +// z sړZ +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Translate2AlignZ(opp, prmp, x, y, z, vLookInvp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_AlignZ(prmp, vLookInvp); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// NH[^jIϊ]s̓Kp +// +//EJgsփNH[^jIϊ]sKp +// kfBXvCXg𐶐܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//ʏł͏Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_QuatMtx(opp, prmp, quatp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_QuatMtx(prmp, quatp); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_QuatMtxFast(opp, prmp, quatp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_3x3); \ + \ + (prmp) = _GXB_QuatMtxFast(prmp, quatp); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// sړsKp +// NH[^jIϊ]sKp +// +//EJgs֕sړsƃNH[^jIϊ]s +// ̌sZAkfBXvCXg𐶐܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +//EGXC_Translate(){GXC_QuatMtx[Fast]() WIgGWׂ̕点܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//ʏł͏Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Translate2QuatMtx( opp, prmp, x, y, z, quatp) GXC_Translate2QuatMtxPriv( opp, prmp, x, y, z, quatp) +#define GXC_Translate2QuatMtxFast(opp, prmp, x, y, z, quatp) GXC_Translate2QuatMtxPrivFast(opp, prmp, x, y, z, quatp) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_Translate2QuatMtxPriv( opp, prmp, x, y, z, quatp) \ + GXC_Translate2QuatMtxNDiv( opp, prmp, x, y, z, quatp) +#define GXC_Translate2QuatMtxPrivFast(opp, prmp, x, y, z, quatp) \ + GXC_Translate2QuatMtxNDivFast(opp, prmp, x, y, z, quatp) +#define GXC_Translate2QuatMtxNDiv( opp, prmp, x, y, z, quatp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_QuatMtx(prmp, quatp); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} +#define GXC_Translate2QuatMtxNDivFast(opp, prmp, x, y, z, quatp) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_QuatMtxFast(prmp, quatp); \ + _GXC_TranslateBefore(opp, prmp, x, y, z); \ +} + + +//---------------------------------------------------------------------- +// EΏ̂̓ˉes̓Kp +// +//EEΏ̂̓@̍s쐬AJgs֏Z +// kfBXvCXg𐶐܂B +// +//E֐ŏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// fovy c̎pxm256b1024b4096iKn +// aspect ̎m肷ciEł /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Perspective(opp, prmp, fovy, aspect, near, far, scaleW) GXC_PerspectivePriv(SIN_NDIV_DEFAULT, opp, prmp, fovy, aspect, near, far, scaleW) + +#define GXC_Perspective256(opp, prmp, fovy, aspect, near, far, scaleW) GXC_PerspectivePriv(256, opp, prmp, fovy, aspect, near, far, scaleW) +#define GXC_Perspective1024(opp, prmp, fovy, aspect, near, far, scaleW) GXC_PerspectivePriv(1024, opp, prmp, fovy, aspect, near, far, scaleW) +#define GXC_Perspective4096(opp, prmp, fovy, aspect, near, far, scaleW) GXC_PerspectivePriv(4096, opp, prmp, fovy, aspect, near, far, scaleW) + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define GXC_PerspectivePriv(ndiv, opp, prmp, fovy, aspect, near, far, scaleW) \ + GXC_PerspectiveNDiv(ndiv, opp, prmp, fovy, aspect, near, far, scaleW) +#define GXC_PerspectiveNDiv(ndiv, opp, prmp, fovy, aspect, near, far, scaleW) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x4); \ + \ + (prmp) = _GXB_Perspective##ndiv(prmp, fovy, aspect, near, far, scaleW); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// EΏ̂̓ˉesiOp֐ɂ鎋pwj̓Kp +// +//EEΏ̂̓@̍s쐬AJgs֏Z +// kfBXvCXg𐶐܂B +//Epx̓TCƃRTCɂĎw肵܂B +// +//E֐ŏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// sinA c̎px̃TC +// cosA c̎px̃RTCiʊ֐̌ĂяôߍŌɓnj +// aspect ̎m肷ciEł /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_PerspectiveSinCos(opp, prmp, sinA, aspect, near, far, scaleW, cosA) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x4); \ + \ + (prmp) = _GXB_PerspectiveSinCos(prmp, sinA, aspect, near, far, scaleW, cosA); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// ˉes̓Kp +// +//E@̍s쐬AJgs֏Z +// kfBXvCXg𐶐܂B +// +//E֐ŏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iɐj +// f _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Frustum(opp, prmp, t, b, l, r, n, f, scaleW) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x4); \ + \ + (prmp) = _GXB_Frustum(prmp, t, b, l, r, n, f, scaleW); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// ˉes̓Kp +// +//Eˉe̕s̐ς̍s쐬AJgs֏Z +// kfBXvCXg𐶐܂B +// +//E֐ŏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iǂłj +// f _farNbvʂ܂ł̋ iǂłj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_Ortho(opp, prmp, t, b, l, r, n, f, scaleW) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x4); \ + \ + (prmp) = _GXB_Ortho(prmp, t, b, l, r, n, f, scaleW); \ + GXC_AddBufp(opp, prmp, 0); \ +} + +//---------------------------------------------------------------------- +// Es̓Kp +// +//EEs쐬AJgs֏Z +// kfBXvCXg𐶐܂B +// +//E֐ŃxNg̐K̂߂ɕZƏZgp܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// eye _ +// at _ +// vUp xNg +// vDst 0iNULL|C^jȊOnƁAtxNgԂ܂ +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// CPŨXg[Ă܂܂B +//---------------------------------------------------------------------- + +#define GXC_LookAt(opp, prmp, eye, at, vUp, vDst) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_LookAt(prmp, eye, at, vUp, vDst); \ + GXC_AddBufp(opp, prmp, 0); \ +} +#define GXC_LookAtFast(opp, prmp, eye, at, vUp, vDst) \ +{ \ + GXC_SetOp(opp, GXOP_MTX_MULT_4x3); \ + \ + (prmp) = _GXB_LookAtFast(prmp, eye, at, vUp, vDst); \ + GXC_AddBufp(opp, prmp, 0); \ +} + + +//---------------------------------------------------------------------- +// {bNXeXg +// +//Ê̐ςɓ邩ǂeXg߂̍\̂ݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// box eXg{bNXiXYZWHD161616161616j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_BoxTest1(opp, prmp, box) \ +{ \ + GXC_SetOp(opp, GXOP_BOX_TEST); \ + \ + *(TestBox *)&(prmp)[0] = (box); \ + GXC_AddBufp(opp, prmp, GXOP_BOX_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// {bNXeXg +// +//Ê̐ςɓ邩ǂeXg߂Ɋep[^ݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x eXg{bNXXWi16bitj +// y eXg{bNXYWi V j +// z eXg{bNXZWi V j +// w eXg{bNX i V j +// h eXg{bNX i V j +// d eXg{bNXs i V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_BoxTest6(opp, prmp, x, y, z, w, h, d) \ +{ \ + GXC_SetOp(opp, GXOP_BOX_TEST); \ + \ + (prmp)[0] = XY1616(x, y); \ + (prmp)[1] = ZW1616(z, w); \ + (prmp)[2] = HD1616(h, d); \ + GXC_AddBufp(opp, prmp, GXOP_BOX_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// ʒuWeXg +// +//EeXgp̈ʒuW̍\̂ݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// pos ʒuWiXYZ161616j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_PositionTest1(opp, prmp, pos) \ +{ \ + GXC_SetOp(opp, GXOP_POS_TEST); \ + \ + *(Pos16 *)&(prmp)[0] = (pos); \ + GXC_AddBufp(opp, prmp, GXOP_POS_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// ʒuWeXg +// +//EeXgp̈ʒuW̊evfݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x ʒuWXi16bitj +// y Yi V j +// z Zi V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_PositionTest3(opp, prmp, x, y, z) \ +{ \ + GXC_SetOp(opp, GXOP_POS_TEST); \ + \ + (prmp)[0] = XY1616(x, y); \ + (prmp)[1] = (z); \ + GXC_AddBufp(opp, prmp, GXOP_POS_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// xNgeXg +// +//EeXgp̕xNg\̂ݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// vector xNgiXYZ101010j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_VectorTest1(opp, prmp, vector) \ +{ \ + GXC_SetOp(opp, GXOP_VEC_TEST); \ + \ + *(Vec10 *)&(prmp)[0] = (vector); \ + GXC_AddBufp(opp, prmp, GXOP_VEC_TEST_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// xNgeXg +// +//EeXgp̕xNg̊evfݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// x xNgXi10bitj +// y Yi V j +// z Zi V j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_VectorTest3(opp, prmp, x, y, z) \ +{ \ + GXC_SetOp(opp, GXOP_VEC_TEST); \ + \ + (prmp)[0] = XYZ101010(x, y, z); \ + GXC_AddBufp(opp, prmp, GXOP_VEC_TEST_NPARAMS); \ +} + + +//---------------------------------------------------------------------- +// CgxNgݒ +// +//ECgxNgփCgxNg\̂ݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// lightVector CgxNgiXYZ101010j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_LightVector1(opp, prmp, lightVector) \ +{ \ + GXC_SetOp(opp, GXOP_LIGHT_VECTOR); \ + \ + *(LightVector *)&(prmp)[0] = (lightVector); \ + GXC_AddBufp(opp, prmp, GXOP_LIGHT_VECTOR_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// CgJ[ݒ +// +//ECgJ[փCgJ[\̂ݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// lightColor CgJ[iRGB555j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_LightColor1(opp, prmp, lightColor) \ +{ \ + GXC_SetOp(opp, GXOP_LIGHT_COLOR); \ + \ + *(LightColor *)&(prmp)[0] = (lightColor); \ + GXC_AddBufp(opp, prmp, GXOP_LIGHT_COLOR_NPARAMS); \ +} + +//---------------------------------------------------------------------- +// CgxNgݒ +// +//ECgxNgփCgԍƕxNgݒ肷 +// kfBXvCXg𐶐܂B +// +//EF +// opp fBXvCXgobt@̃R}ḧ̃|C^ +// prmp fBXvCXgobt@̃p[^̈̃|C^ +// no Cgԍ +// vector xNgiXYZ101010j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define GXC_LightVector2(opp, prmp, no, vector) \ +{ \ + GXC_SetOp(opp, GXOP_LIGHT_VECTOR); \ + \ + (prmp)[0] = ((no)< +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// v~eBu`֐peNX`p[^\ +typedef struct { + TexImageParamCnt img; // eNX`C[WR}h̃p[^ + TexPlttBaseCnt plt; // eNX`pbgx[XR}h̃p[^ + + TexCoord texStart; // eNX`X^[gW + TexCoord texEnd; // eNX`GhW +} PrimTexParam; + + + +//---------------------------------------------------------------------- +// ̂̕` +// +//Ê`悵܂B +// +//EF +// width ӂ̒ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawCube(u16 width, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ̂̕` +// +//Ê`悵܂B +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//EF +// width +// height +// depth s +// +//E߂lF Ȃ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawBox(u16 width, u16 height, u16 depth, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ̕` +// +//E`悵܂B +// +//EF +// radius a +// numMajor ܓx(latitude)̕ +// numMinor ox(longitude)̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawSphere(s16 radius, s16 numMajor, s16 numMinor, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// \ʑ̂ċAIɕ̕` +// +//E\ʑ̂ċAIɕ`悵܂B +// +//EF +// radius a +// numLevel ו̃x +// +//E߂lF Ȃ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawSphereHedron(s16 radius, s16 numLevel); + + +//---------------------------------------------------------------------- +// ~̕` +// +//E~`悵܂B +// +//EF +// radius a +// height +// numEdges ~̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawCylinder(s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ~̕` +// +//E~`悵܂B +// +//EF +// radius ʂ̔a +// height +// numEdges ~̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lF Ȃ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawCone(s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// g[Xi~j̕` +// +//Eg[Xi~j`悵܂B +// +//EF +// size g[X̒S]~̒S܂ł̋ +// rc sizeƉ]~̔a̔䗦 +// numc ]~̕ +// numt ]ɂ~̕ +// texParamp eNX`p[^ւ̃|C^ +// itH[}bgPrimTexParam\̂QƂĉj +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_DrawTorus(s16 size, s16 rc, s16 numc, s16 numt, const u32 (* texParamp)[4]); + + +//---------------------------------------------------------------------- +// ʑ̂̕` +// +//Eʑ̂`悵܂B +// +//EF +// radius a +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_Draw8Hedron(s16 radius); + + +//---------------------------------------------------------------------- +// \ʑ̂̕` +// +//E\ʑ̂`悵܂B +// +//EF +// radius a +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_Draw12Hedron(s16 radius); + + +//---------------------------------------------------------------------- +// \ʑ̂̕` +// +//E\ʑ̂`悵܂B +// +//EF +// radius a +// +//E߂lFȂ +// +//I/OWX^oRŃWIgFIFO֒ڏނ߁A +// fBXvCXg]ɂ͎sȂʼnB +//---------------------------------------------------------------------- + +void GX_Draw20Hedron(s16 radius); + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_GX_PRIMITIVE_H + diff --git a/trunk/IrisMainp/include/IrisMTX.h b/trunk/IrisMainp/include/IrisMTX.h new file mode 100644 index 0000000..8c33201 --- /dev/null +++ b/trunk/IrisMainp/include/IrisMTX.h @@ -0,0 +1,673 @@ +//====================================================================== +// IrisMTX.h +// s񃉃Cu +// +// MTX֐64bit̏Z𑽗p܂̂ŁAł邾 +// GX֐gpAׂy悤ɂĉB +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_MTX_H +#define _IRIS_MTX_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + +//====================================================================== +// ėps +//====================================================================== + +//---------------------------------------------------------------------- +// Pʍs̐ +// +//Edstpws֒Pʍs𐶐܂B +// +//EF +// dstp si[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_Identity(Mtx *dstp); +void MTX33_Identity(Mtx33 *dstp); +void MTX44_Identity(Mtx44 *dstp); + +//---------------------------------------------------------------------- +// s̃Rs[ +// +//EsrcpwsdstpwsփRs[܂B +// +//EF +// srcp ]s̃|C^ +// dstp ]sobt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +// 4x3swsփRs[ + +void MTX_Copy( const Mtx *srcp, Mtx *dstp); +void MTX_Copy2Mtx33(const Mtx *srcp, Mtx33 *dstp); +void MTX_Copy2Mtx44(const Mtx *srcp, Mtx44 *dstp); + +// 3x3swsփRs[ + +void MTX33_Copy( const Mtx33 *srcp, Mtx33 *dstp); +void MTX33_Copy2Mtx( const Mtx33 *srcp, Mtx *dstp); +void MTX33_Copy2Mtx44(const Mtx33 *srcp, Mtx44 *dstp); + +// 4x4swsփRs[ + +void MTX44_Copy( const Mtx44 *srcp, Mtx44 *dstp); +void MTX44_Copy2Mtx( const Mtx44 *srcp, Mtx *dstp); +void MTX44_Copy2Mtx33(const Mtx44 *srcp, Mtx33 *dstp); + +//---------------------------------------------------------------------- +// s̘A +// +//Esrc0psrc1pws̓]sdstp֐܂B +// +//EF +// src0p ]s̃|C^ +// src1p ]s̃|C^ +// dstp Asobt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_Concat(Mtx *src0p, Mtx *src1p, Mtx *dstp); +void MTX33_Concat(Mtx33 *src0p, Mtx33 *src1p, Mtx33 *dstp); +void MTX44_Concat(Mtx44 *src0p, Mtx44 *src1p, Mtx44 *dstp); + +//---------------------------------------------------------------------- +// ]us̐ +// +//Esrcpws̓]usdstpws֐܂B +// +//EF +// srcp ]uOs̃|C^ +// dstp sobt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_Transpose( Mtx *srcp, Mtx *dstp); +void MTX33_Transpose( Mtx33 *srcp, Mtx33 *dstp); +void MTX44_Transpose( Mtx44 *srcp, Mtx44 *dstp); + + +//====================================================================== +// fs +//====================================================================== + +//---------------------------------------------------------------------- +// sړs̐ +// +//Esړsdstpws֐܂B +// +//EF +// dstp sobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_Translate(Mtx *dstp, s32 x, s32 y, s32 z); +void MTX44_Translate(Mtx44 *dstp, s32 x, s32 y, s32 z); + +//---------------------------------------------------------------------- +// sړsOKp +// +//EsrcpwsɕsړsOKps +// dstpws֐܂B +// +//EF +// srcp Kps̃|C^ +// dstp sobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_TranslateBefore(Mtx *srcp, Mtx *dstp, s32 x, s32 y, s32 z); +void MTX44_TranslateBefore(Mtx44 *srcp, Mtx44 *dstp, s32 x, s32 y, s32 z); + +//---------------------------------------------------------------------- +// sړsKp +// +//EsrcpwsɕsړsKps +// dstpws֐܂B +// +//EF +// srcp Kps̃|C^ +// dstp sobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_TranslateAfter(Mtx *srcp, Mtx *dstp, s32 x, s32 y, s32 z); +void MTX44_TranslateAfter(Mtx44 *srcp, Mtx44 *dstp, s32 x, s32 y, s32 z); + +//---------------------------------------------------------------------- +// XP[s̐ +// +//EXP[sdstpws֐܂B +// +//EF +// dstp sobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_Scale(Mtx *dstp, s32 xS, s32 yS, s32 zS); +void MTX33_Scale(Mtx33 *dstp, s32 xS, s32 yS, s32 zS); +void MTX44_Scale(Mtx44 *dstp, s32 xS, s32 yS, s32 zS); + +//---------------------------------------------------------------------- +// XP[sOKp +// +//EsrcpwsɃXP[sOKps +// dstpws֐܂B +// +//EF +// srcp Kps̃|C^ +// dstp sobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_ScaleBefore(Mtx *srcp, Mtx *dstp, s32 xS, s32 yS, s32 zS); +void MTX33_ScaleBefore(Mtx33 *srcp, Mtx33 *dstp, s32 xS, s32 yS, s32 zS); +void MTX44_ScaleBefore(Mtx44 *srcp, Mtx44 *dstp, s32 xS, s32 yS, s32 zS); + +//---------------------------------------------------------------------- +// XP[sKp +// +//EsrcpwsɃXP[sKps +// dstpws֐܂B +// +//EF +// srcp Kps̃|C^ +// dstp sobt@̃|C^ +// x X +// y Y +// z Z +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_ScaleAfter(Mtx *srcp, Mtx *dstp, s32 xS, s32 yS, s32 zS); +void MTX33_ScaleAfter(Mtx33 *srcp, Mtx33 *dstp, s32 xS, s32 yS, s32 zS); +void MTX44_ScaleAfter(Mtx44 *srcp, Mtx44 *dstp, s32 xS, s32 yS, s32 zS); + +//---------------------------------------------------------------------- +// +// 厲]s̐ +// +//E厲]sdstpws֐܂B +// +//EF +// dstp sobt@̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define MTX_RotateX(dstp, theta) MTXxx_RotatePriv(_, X, SIN_NDIV_DEFAULT, dstp, theta) +#define MTX_RotateY(dstp, theta) MTXxx_RotatePriv(_, Y, SIN_NDIV_DEFAULT, dstp, theta) +#define MTX_RotateZ(dstp, theta) MTXxx_RotatePriv(_, Z, SIN_NDIV_DEFAULT, dstp, theta) + +#define MTX33_RotateX(dstp, theta) MTXxx_RotatePriv(33_, X, SIN_NDIV_DEFAULT, dstp, theta) +#define MTX33_RotateY(dstp, theta) MTXxx_RotatePriv(33_, Y, SIN_NDIV_DEFAULT, dstp, theta) +#define MTX33_RotateZ(dstp, theta) MTXxx_RotatePriv(33_, Z, SIN_NDIV_DEFAULT, dstp, theta) + +#define MTX44_RotateX(dstp, theta) MTXxx_RotatePriv(44_, X, SIN_NDIV_DEFAULT, dstp, theta) +#define MTX44_RotateY(dstp, theta) MTXxx_RotatePriv(44_, Y, SIN_NDIV_DEFAULT, dstp, theta) +#define MTX44_RotateZ(dstp, theta) MTXxx_RotatePriv(44_, Z, SIN_NDIV_DEFAULT, dstp, theta) + +void MTX_RotateX256(Mtx *dstp, u32 theta); +void MTX_RotateY256(Mtx *dstp, u32 theta); +void MTX_RotateZ256(Mtx *dstp, u32 theta); +void MTX_RotateX1024(Mtx *dstp, u32 theta); +void MTX_RotateY1024(Mtx *dstp, u32 theta); +void MTX_RotateZ1024(Mtx *dstp, u32 theta); +void MTX_RotateX4096(Mtx *dstp, u32 theta); +void MTX_RotateY4096(Mtx *dstp, u32 theta); +void MTX_RotateZ4096(Mtx *dstp, u32 theta); + +void MTX33_RotateX256(Mtx33 *dstp, u32 theta); +void MTX33_RotateY256(Mtx33 *dstp, u32 theta); +void MTX33_RotateZ256(Mtx33 *dstp, u32 theta); +void MTX33_RotateX1024(Mtx33 *dstp, u32 theta); +void MTX33_RotateY1024(Mtx33 *dstp, u32 theta); +void MTX33_RotateZ1024(Mtx33 *dstp, u32 theta); +void MTX33_RotateX4096(Mtx33 *dstp, u32 theta); +void MTX33_RotateY4096(Mtx33 *dstp, u32 theta); +void MTX33_RotateZ4096(Mtx33 *dstp, u32 theta); + +void MTX44_RotateX256(Mtx44 *dstp, u32 theta); +void MTX44_RotateY256(Mtx44 *dstp, u32 theta); +void MTX44_RotateZ256(Mtx44 *dstp, u32 theta); +void MTX44_RotateX1024(Mtx44 *dstp, u32 theta); +void MTX44_RotateY1024(Mtx44 *dstp, u32 theta); +void MTX44_RotateZ1024(Mtx44 *dstp, u32 theta); +void MTX44_RotateX4096(Mtx44 *dstp, u32 theta); +void MTX44_RotateY4096(Mtx44 *dstp, u32 theta); +void MTX44_RotateZ4096(Mtx44 *dstp, u32 theta); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define MTXxx_RotatePriv(xx_, axis, ndiv, dstp, theta) MTXxx_RotateNDiv(xx_, axis, ndiv, dstp, theta) +#define MTXxx_RotateNDiv(xx_, axis, ndiv, dstp, theta) MTX##xx_##Rotate##axis##ndiv( dstp, theta) + +//---------------------------------------------------------------------- +// 厲]siOp֐ɂ]pwj̐ +// +//E厲]sdstpws֐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EF +// dstp sobt@̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_RotateXSinCos(Mtx *dstp, s32 sinA, s32 cosA); +void MTX_RotateYSinCos(Mtx *dstp, s32 sinA, s32 cosA); +void MTX_RotateZSinCos(Mtx *dstp, s32 sinA, s32 cosA); + +void MTX33_RotateXSinCos(Mtx33 *dstp, s32 sinA, s32 cosA); +void MTX33_RotateYSinCos(Mtx33 *dstp, s32 sinA, s32 cosA); +void MTX33_RotateZSinCos(Mtx33 *dstp, s32 sinA, s32 cosA); + +void MTX44_RotateXSinCos(Mtx44 *dstp, s32 sinA, s32 cosA); +void MTX44_RotateYSinCos(Mtx44 *dstp, s32 sinA, s32 cosA); +void MTX44_RotateZSinCos(Mtx44 *dstp, s32 sinA, s32 cosA); + +//---------------------------------------------------------------------- +// Cӎ]s̐ +// +//ECӎ]sdstpws֐܂B +// +//Eʏł͕ZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// dstp sobt@̃|C^ +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +#define MTX_RotateAxis( dstp, axisp, heta) MTXxx_RotateAxisPriv( _, SIN_NDIV_DEFAULT, dstp, axisp, theta) +#define MTX_RotateAxisFast(dstp, axisp, theta) MTXxx_RotateAxisPrivFast(_, SIN_NDIV_DEFAULT, dstp, axisp, theta) + +#define MTX33_RotateAxis( dstp, axisp, heta) MTXxx_RotateAxisPriv( 33_, SIN_NDIV_DEFAULT, dstp, axisp, theta) +#define MTX33_RotateAxisFast(dstp, axisp, theta) MTXxx_RotateAxisPrivFast(33_, SIN_NDIV_DEFAULT, dstp, axisp, theta) + +#define MTX44_RotateAxis( dstp, axisp, heta) MTXxx_RotateAxisPriv( 44_, SIN_NDIV_DEFAULT, dstp, axisp, theta) +#define MTX44_RotateAxisFast(dstp, axisp, theta) MTXxx_RotateAxisPrivFast(44_, SIN_NDIV_DEFAULT, dstp, axisp, theta) + +void MTX_RotateAxis256(Mtx *dstp, const Vec *axisp, u32 theta); +void MTX_RotateAxis256Fast(Mtx *dstp, const Vec *axisp, u32 theta); +void MTX_RotateAxis1024(Mtx *dstp, const Vec *axisp, u32 theta); +void MTX_RotateAxis1024Fast(Mtx *dstp, const Vec *axisp, u32 theta); +void MTX_RotateAxis4096(Mtx *dstp, const Vec *axisp, u32 theta); +void MTX_RotateAxis4096Fast(Mtx *dstp, const Vec *axisp, u32 theta); + +void MTX33_RotateAxis256(Mtx33 *dstp, const Vec *axisp, u32 theta); +void MTX33_RotateAxis256Fast(Mtx33 *dstp, const Vec *axisp, u32 theta); +void MTX33_RotateAxis1024(Mtx33 *dstp, const Vec *axisp, u32 theta); +void MTX33_RotateAxis1024Fast(Mtx33 *dstp, const Vec *axisp, u32 theta); +void MTX33_RotateAxis4096(Mtx33 *dstp, const Vec *axisp, u32 theta); +void MTX33_RotateAxis4096Fast(Mtx33 *dstp, const Vec *axisp, u32 theta); + +void MTX44_RotateAxis256(Mtx44 *dstp, const Vec *axisp, u32 theta); +void MTX44_RotateAxis256Fast(Mtx44 *dstp, const Vec *axisp, u32 theta); +void MTX44_RotateAxis1024(Mtx44 *dstp, const Vec *axisp, u32 theta); +void MTX44_RotateAxis1024Fast(Mtx44 *dstp, const Vec *axisp, u32 theta); +void MTX44_RotateAxis4096(Mtx44 *dstp, const Vec *axisp, u32 theta); +void MTX44_RotateAxis4096Fast(Mtx44 *dstp, const Vec *axisp, u32 theta); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define MTXxx_RotateAxisPriv( xx_, ndiv, dstp, axisp, theta) MTXxx_RotateAxisNDiv( xx_, ndiv, dstp, axisp, theta) +#define MTXxx_RotateAxisPrivFast(xx_, ndiv, dstp, axisp, theta) MTXxx_RotateAxisNDivFast(xx_, ndiv, dstp, axisp, theta) +#define MTXxx_RotateAxisNDiv( xx_, ndiv, dstp, axisp, theta) MTX##xx_##RotateAxis##ndiv( dstp, axisp, theta) +#define MTXxx_RotateAxisNDivFast(xx_, ndiv, dstp, axisp, theta) MTX##xx_##RotateAxis##ndiv##Fast( dstp, axisp, theta) + +//---------------------------------------------------------------------- +// Cӎ]siOp֐ɂ]pwj̐ +// +//ECӎ]sdstpws֐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//Eʏł͕ZƏZgp܂Ał͎gp܂ +// iłɂ͒PʃxNgnĉjB +// +//EF +// dstp sobt@̃|C^ +// axisp ]xNg̃|C^ +// sinA ]px̃TC +// cosA ]px̃RTC +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void MTX_RotateAxisSinCos(Mtx *dstp, const Vec *axisp, s32 sinA, s32 cosA); +void MTX_RotateAxisSinCosFast(Mtx *dstp, const Vec *axisp, s32 sinA, s32 cosA); + +void MTX33_RotateAxisSinCos(Mtx33 *dstp, const Vec *axisp, s32 sinA, s32 cosA); +void MTX33_RotateAxisSinCosFast(Mtx33 *dstp, const Vec *axisp, s32 sinA, s32 cosA); + +void MTX44_RotateAxisSinCos(Mtx44 *dstp, const Vec *axisp, s32 sinA, s32 cosA); +void MTX44_RotateAxisSinCosFast(Mtx44 *dstp, const Vec *axisp, s32 sinA, s32 cosA); + +//---------------------------------------------------------------------- +// yɃACg]s̐ +// +//ECӎZ̐ƈv]ss +// dstpws֐܂B +// +// H = sqrt (X*X + Z*Z) +// +// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ] +// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ] +// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ] +// +//E֐ŕZƏZgp܂B +// +//EF +// dstp sobt@̃|C^ +// vLookInvp Ƌt̒PʃxNgi*_LookAt*() œ܂j +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void MTX_AlignZ(Mtx *dstp, const Vec *vLookInvp); +void MTX33_AlignZ(Mtx33 *dstp, const Vec *vLookInvp); +void MTX44_AlignZ(Mtx44 *dstp, const Vec *vLookInvp); + + +//---------------------------------------------------------------------- +// NH[^jIϊ]s̐ +// +//ENH[^jIϊ]sdstpws֐܂B +// +//Eʏł͏Zgp܂Ał͎gp܂ +// iłɂ͐KNH[^jInĉjB +// +//EF +// dstp si[obt@̃|C^ +// quatp NH[^jĨ|C^ +// +//E߂lFȂ +// +//ʏł͏Zgp邽߁AfBXvCXgDMA] +// 񂵂ĎsƃXg[”\܂B +//---------------------------------------------------------------------- + +void MTX_QuatMtx(Mtx *dstp, const Quat *quatp); +void MTX_QuatMtxFast(Mtx *dstp, const Quat *quatp); + +void MTX33_QuatMtx(Mtx33 *dstp, const Quat *quatp); +void MTX33_QuatMtxFast(Mtx33 *dstp, const Quat *quatp); + +void MTX44_QuatMtx(Mtx44 *dstp, const Quat *quatp); +void MTX44_QuatMtxFast(Mtx44 *dstp, const Quat *quatp); + + +//====================================================================== +// r[s +//====================================================================== + +//---------------------------------------------------------------------- +// Es̐ +// +//EEsdstpws֐܂B +// +//E֐ŃxNg̐K̂߂ɕZƏZgp܂B +// +//EF +// dstp sobt@̃|C^ +// eye _ +// at _ +// vUp xNg +// vDst 0iNULL|C^jȊOnƁAtxNgԂ܂ +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void MTX_LookAt( Mtx *dstp, const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst); +void MTX_LookAtFast(Mtx *dstp, const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst); + + +//====================================================================== +// ˉes +//====================================================================== + +//---------------------------------------------------------------------- +// EΏ̂̓ˉes̐ +// +//EEΏ̂̓@̍sdstpws֐܂B +// +//EF +// dstp sobt@̃|C^ +// fovy c̎pxm256b1024b4096iKn +// aspect ̎m肷ci /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +#define MTX44_Perspective(dstp, fovy, aspect, near, far, scaleW) MTX44_PerspectivePriv(SIN_NDIV_DEFAULT, dstp, fovy, aspect, near, far, scaleW) + +void MTX44_Perspective256(Mtx44 *dstp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); +void MTX44_Perspective1024(Mtx44 *dstp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); +void MTX44_Perspective4096(Mtx44 *dstp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define MTX44_PerspectivePriv(ndiv, dstp, fovy, aspect, near, far, scaleW) MTX44_PerspectiveNDiv(ndiv, dstp, fovy, aspect, near, far, scaleW) +#define MTX44_PerspectiveNDiv(ndiv, dstp, fovy, aspect, near, far, scaleW) MTX44_Perspective##ndiv( dstp, fovy, aspect, near, far, scaleW) + +//---------------------------------------------------------------------- +// EΏ̂̓ˉesiOp֐ɂ鎋pwj̐ +// +//EEΏ̂̓@̍sdstpws֐܂B +//E]px̓TCƃRTCɂĎw肵܂B +// +//EF +// dstp sobt@̃|C^ +// sinA c̎px̃TC +// cosA c̎px̃RTCiʊ֐̌ĂяôߍŌɓnj +// aspect ̎m肷ci /j +// near _nearNbvʂ܂ł̋iɐj +// far _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void MTX44_PerspectiveSinCos(Mtx44 *dstp, s32 sinA, s32 aspect, s32 near, s32 far, s32 scaleW, s32 cosA); + +//---------------------------------------------------------------------- +// ˉes̐ +// +//E@̍sdstpws֐܂B +// +//EF +// dstp sobt@̃|C^ +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iɐj +// f _farNbvʂ܂ł̋ iɐj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void MTX44_Frustum(Mtx44 *dstp, s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW); + +//---------------------------------------------------------------------- +// ˉes̐ +// +//Eˉe̕s̐ς̍sdstpws֐܂B +// +//EF +// dstp sobt@̃|C^ +// t nearNbvʏӂyW +// b nearNbvʉӂyW +// l nearNbvʍӂxW +// r nearNbvʉEӂxW +// n _nearNbvʂ܂ł̋iǂłj +// f _farNbvʂ܂ł̋ iǂłj +// scaleW NbvWWl̃XP[p[^iWϊ̐xj +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void MTX44_Ortho( Mtx44 *dstp, s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW); + + +//====================================================================== +// sExNgZ +//====================================================================== + +//---------------------------------------------------------------------- +// 3DxNgƍs̏Z +// +//Esrcpw3DxNgmultwsōWϊʂ +// dstpw3DxNg֊i[܂B +// +//EF +// mult Zs +// srcp ZÕxNg +// dstp Z̃xNg +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_MultVec( const Mtx *mult, Vec *srcp, Vec *dstp); +void MTX33_MultVec(const Mtx33 *mult, Vec *srcp, Vec *dstp); +void MTX44_MultVec(const Mtx44 *mult, Vec *srcp, Vec *dstp); + +//---------------------------------------------------------------------- +// 3DxNgƍs̏Z +// +//EsrcBasepw3DxNgQmultwsōWϊʂ +// dstBasepw3DxNgQ֊i[܂B +// +//EF +// mult Zs +// srcBasep ZÕxNg +// dstBasep Z̃xNg +// count +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_MultVecArray( const Mtx *mult, Vec *srcBasep, Vec *dstBasep, u32 count); +void MTX33_MultVecArray(const Mtx33 *mult, Vec *srcBasep, Vec *dstBasep, u32 count); +void MTX44_MultVecArray(const Mtx44 *mult, Vec *srcBasep, Vec *dstBasep, u32 count); + + +//---------------------------------------------------------------------- +// 3DxNgƍs̃XP[]Ƃ̏Z +// +//Esrcpw3DxNgmultws̃XP[]ōWϊʂ +// dstpw3DxNg֊i[܂B +// +//EF +// mult Zs̃XP[] +// srcp ZÕxNg +// dstp Z̃xNg +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_MultVecSR( const Mtx *mult, Vec *srcp, Vec *dstp); +void MTX44_MultVecSR(const Mtx44 *mult, Vec *srcp, Vec *dstp); + +//---------------------------------------------------------------------- +// 3DxNgƍs̃XP[]Ƃ̏Z +// +//EsrcBasepw3DxNgQmultws̃XP[]ōWϊʂ +// dstBasepw3DxNgQ֊i[܂B +// +//EF +// mult Zs̃XP[] +// srcBasep ZÕxNg +// dstBasep Z̃xNg +// count +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void MTX_MultVecArraySR( const Mtx *mult, Vec *srcBasep, Vec *dstBasep, u32 count); +void MTX44_MultVecArraySR(const Mtx44 *mult, Vec *srcBasep, Vec *dstBasep, u32 count); + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_MTX_H diff --git a/trunk/IrisMainp/include/IrisMacro.h b/trunk/IrisMainp/include/IrisMacro.h new file mode 100644 index 0000000..c72baaf --- /dev/null +++ b/trunk/IrisMainp/include/IrisMacro.h @@ -0,0 +1,701 @@ +//====================================================================== +// IrisMacro.h +// IRIS W}N֐ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_MACRO_H +#define _IRIS_MACRO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include + + +//---------------------------------------------------------------------- +// J[ +//---------------------------------------------------------------------- + +#define RGB555(r, g, b) \ + \ + ((r) << RED5_SHIFT | (g) << GREEN5_SHIFT | (b) << BLUE5_SHIFT) + +#define RGBA5551(r, g, b, a) \ + \ + ((r) << RED5_SHIFT | (g) << GREEN5_SHIFT | (b) << BLUE5_SHIFT | (a) << ALPHA1_SHIFT) + +#define RGBF5551(r, g, b, flag) \ + \ + ((r) << RED5_SHIFT | (g) << GREEN5_SHIFT | (b) << BLUE5_SHIFT | (flag) << 15) + + +#define RGB888(r, g, b) \ + \ + ((r) << RED8_SHIFT | (g) << GREEN8_SHIFT | (b) << BLUE8_SHIFT) + +#define RGBA8888(r, g, b, a) \ + \ + ((r) << RED8_SHIFT | (g) << GREEN8_SHIFT | (b) << BLUE8_SHIFT | (a) << ALPHA8_SHIFT) + + +//---------------------------------------------------------------------- +// W +//---------------------------------------------------------------------- + +#define XYZ101010(x, y, z) (((x) & X10_MASK) << X10_SHIFT \ + | ((y) & X10_MASK) << Y10_SHIFT \ + | ((z) & X10_MASK) << Z10_SHIFT) + +#define XY1616(x, y) (((x) & X16_MASK) | (y) << Y16_SHIFT) +#define Z16(z) ((z) & X16_MASK) + +#define ZW1616(z, w) (((z) & X16_MASK) | (w) << Y16_SHIFT) +#define HD1616(h, d) (((h) & X16_MASK) | (d) << Y16_SHIFT) + +#define ST1616(s, t) (((s) & TEX_S_MASK ) | (t) << TEX_T_SHIFT) + + +//---------------------------------------------------------------------- +// Cg +//---------------------------------------------------------------------- + +#define LIGHT_VECTOR(no, x, y, z) ((no)<> TEX_IMAGE_BASE_SHIFT) & TEX_IMAGE_BASE_MASK) +#define ADDR_TO_TEXPLTT_BASE(basep, mode) (((basep) >> mode##_SHIFT) & TEX_PLTT_BASE_MASK) + +// A^Cp +#define Addr2TexImageBase(basep) (((u32 )(basep) >> TEX_IMAGE_BASE_SHIFT) & TEX_IMAGE_BASE_MASK) +#define Addr2TexPlttBase(basep, mode) ( (u32 )(basep) >> "\0\4\3\4\4\4\4"[mode]) + + +//---------------------------------------------------------------------- +// Z +//---------------------------------------------------------------------- + +// p[^ݒiʏŁj + +#define SetDiv(numer, denom, numBits, denBits) \ +{ \ + *(vu32 *)REG_DIVCNT = DIV_##numBits##_##denBits##BIT_MODE; \ + SetDivImm(numer, denom, numBits, denBits); \ +} + +// p[^ݒi[hݒȗŁj + +#define SetDivImm(numer, denom, numBits, denBits) \ +{ \ + *(vs##numBits *)REG_DIV_NUMER = (numer); \ + *(vs##denBits *)REG_DIV_DENOM = (denom); \ +} + +// ZI҂ + +#define IsDivBusy() (((vu8 *)REG_DIVCNT)[1] & (DIV_BUSY>>8)) +#define WaitDiv() \ +{ \ + while (IsDivBusy()) ; \ +} + +// ʓǂݏoiZImFŁj + +#define DivResultImm(bits) (*(vs##bits *)REG_DIV_RESULT) +#define DivRemResultImm(bits) (*(vs##bits *)REG_DIVREM_RESULT) + +// ʓǂݏoiʏŁj + +#define DivResult(bits) DivResult##bits##() +#define DivRemResult(bits) DivRemResult##bits##() + +__inline static s64 DivResult64(void) +{ + WaitDiv(); + + return DivResultImm(64); +} +__inline static s64 DivRemResult64(void) +{ + WaitDiv(); + + return DivRemResultImm(64); +} + +__inline static s32 DivResult32(void) +{ + WaitDiv(); + + return DivResultImm(32); +} +__inline static s32 DivRemResult32(void) +{ + WaitDiv(); + + return DivRemResultImm(32); +} + +__inline static s16 DivResult16(void) +{ + WaitDiv(); + + return DivResultImm(16); +} +__inline static s16 DivRemResult16(void) +{ + WaitDiv(); + + return DivRemResultImm(16); +} + +__inline static s8 DivResult8(void) +{ + WaitDiv(); + + return DivResultImm(8); +} +__inline static s8 DivRemResult8(void) +{ + WaitDiv(); + + return DivRemResultImm(8); +} + +//---------------------------------------------------------------------- +// Z +//---------------------------------------------------------------------- + +// p[^ݒiʏŁj + +#define SetSqrt(param, bits) \ +{ \ + *(vu32 *)REG_SQRTCNT = SQRT_##bits##BIT_MODE; \ + SetSqrtImm(param, bits); \ +} + +// p[^ݒi[hݒȗŁj + +#define SetSqrtImm(param, bits) \ +{ \ + *(vu##bits *)REG_SQRT_PARAM = (param); \ +} + +// ZI҂ + +#define IsSqrtBusy() (((vu8 *)REG_SQRTCNT)[1] & (SQRT_BUSY>>8)) +#define WaitSqrt() \ +{ \ + while (IsSqrtBusy()) ; \ +} + +// ʓǂݏoiZImFŁj + +#define SqrtResultImm(bits) (*(vu##bits *)REG_SQRT_RESULT) + +// ʓǂݏoiʏŁj + +#define SqrtResult(bits) SqrtResult##bits##() + +__inline static u32 SqrtResult32(void) +{ + WaitSqrt(); + + return SqrtResultImm(32); +} +__inline static u16 SqrtResult16(void) +{ + WaitSqrt(); + + return SqrtResultImm(16); +} +__inline static u8 SqrtResult8(void) +{ + WaitSqrt(); + + return SqrtResultImm(8); +} + + +//---------------------------------------------------------------------- +// f[^ǂݍ +//---------------------------------------------------------------------- + +#define ReadData(readp, bit) (*(vu##bit *)(readp)) + +//---------------------------------------------------------------------- +// f[^ +//---------------------------------------------------------------------- + +#define WriteData(writep, data, bit) \ + \ + (*(vu##bit *)(writep) = (data)) + +//---------------------------------------------------------------------- +// f[^ Rs[ +//---------------------------------------------------------------------- + +#define CopyData(readp, writep, bit) \ + \ + (*(vu##bit *)(writep) = *(vu##bit *)(readp)) + + +//---------------------------------------------------------------------- +// AhXEobt@̗L +//---------------------------------------------------------------------- + +#ifdef __CC_ARM +#define EnableAlignBuf(alignBuf) \ +{ \ + vu16 alignBufTmp = *(vu16 *)alignBuf; \ +} +#else +#define EnableAlignBuf(alignBuf) ((void) 0) +#endif + +//---------------------------------------------------------------------- +// 荞݃AhX Zbg +//---------------------------------------------------------------------- + +#define SetIntrAddr(intrp) \ + \ + (*(vu32 *)INTR_VECTOR_BUF = (vu32 )intrp) + +//E荞ݏ̃AhXZbg܂B + + +//---------------------------------------------------------------------- +// cl` Zbg +//---------------------------------------------------------------------- + +//#define SIMULATOR +#ifndef SIMULATOR +#define DmaSet(dmaNo, srcp, destp, dmaCntData) \ +{ \ + vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \ + dmaCntp[0] = (vu32 )(srcp); \ + dmaCntp[1] = (vu32 )(destp); \ + dmaCntp[2] = (vu32 )(dmaCntData); \ + {u32 dummy = dmaCntp[2];} \ + {u32 dummy = dmaCntp[2];} \ +} +#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \ +{ \ + vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \ + dmaCntp[0] = (vu32 )(srcp); \ + dmaCntp[1] = (vu32 )(destp); \ + dmaCntp[2] = (vu32 )(dmaCntData); \ +} +#else +#define DmaSet(dmaNo, srcp, destp, dmaCntData) \ +{ \ + int i; \ + for (i=0; i<(dmaCntData & 0x1ffff); i++) \ + if ((dmaCntData) & DMA_SRC_FIX) { \ + if ((dmaCntData) & DMA_32BIT_BUS) \ + ((vu32 *)(destp))[i] = ((vu32 *)(srcp))[0]; \ + else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[0]; \ + } else { \ + if ((dmaCntData) & DMA_32BIT_BUS) \ + ((vu32 *)(destp))[i] = ((vu32 *)(srcp))[i]; \ + else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[i]; \ + } \ +} +#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \ + DmaSet( dmaNo, srcp, destp, dmaCntData) +#endif + +//EDMARg[Ƀp[^Zbg܂B +//ESIMULATER`CPUŃV~[g܂B +// GDBŃfobOꍇȂǂɗLłB +//EŌDMAN҂̂߂"LDR"߂}܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// dmaCntData p[^f[^ +// +//CPURAM̃vOɂDMAN +// ̖̎߂Ɏs܂B +// āADMAɓ]CPUɂĕύX悤ƂꍇA +// ǂݍ݁^߂̊ԂDMANĂ܂܂̂ŁA +// DMA̓]̃f[^Ӑ}ĂȂlɂȂꍇ܂B +// ̏ꍇɂWaitDma()𒼌ɑ}āADMAI +// ǂ`FbNƑR[hւ̉emɉł܂B + + +//---------------------------------------------------------------------- +// cl` NA +//---------------------------------------------------------------------- + +#define DmaClear(dmaNo, data, destp, size, bit) \ +{ \ + vu32 *srcp = &((vu32 *)REG_DMA0_CLR_DATA)[dmaNo]; \ + *srcp = (data); \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_SRC_FIX | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \ +} + +#define DmaClearIf(dmaNo, data, destp, size, bit) \ +{ \ + vu32 *srcp = &((vu32 *)REG_DMA0_CLR_DATA)[dmaNo]; \ + *srcp = (data); \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_IF_ENABLE | \ + DMA_SRC_FIX | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \ +} + +#define DmaClearArray( dmaNo, data, destp, bit) \ + DmaClear( dmaNo, data, destp, sizeof(destp), bit) + +#define DmaClearArrayIf(dmaNo, data, destp, bit) \ + DmaClearIf( dmaNo, data, destp, sizeof(destp), bit) + +//EDMARAMNA܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//EDmaClearIf^DmaClearArrayIf͏IɊ荞ݗv𔭐܂B +//EDmaClearArray^DmaClearArrayIf̓fXeBl[VzŜNA܂B +// +//EF +// dmaNo DMAԍ +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg +// bit ]rbgi16|32j +// +// +//CPURAM̃vOɂDMAN +// ̖̎߂Ɏs܂B +// āADMAɓ]CPUɂĕύX悤ƂꍇA +// ǂݍ݁^߂̊ԂDMANĂ܂܂̂ŁA +// DMA̓]̃f[^Ӑ}ĂȂlɂȂꍇ܂B +// ̏ꍇɂWaitDma()𒼌ɑ}āADMAI +// ǂ`FbNƑR[hւ̉emɉł܂B + +//---------------------------------------------------------------------- +// cl` Rs[ +//---------------------------------------------------------------------- + +#define DmaCopy(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/((bit)/8)))) + +#define DmaCopyIf(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define DmaCopyArray( dmaNo, srcp, destp, bit) \ + DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define DmaCopyArrayIf(dmaNo, srcp, destp, bit) \ + DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit) + +//EDMAŃRs[܂B +//EDmaCopyIf^DmaCopyArrayIf͏IɊ荞ݗv𔭐܂B +//EDmaCopyArray^DmaCopyArrayIf̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j +// +// +//CPURAM̃vOɂDMAN +// ̖̎߂Ɏs܂B +// āADMAɓ]CPUɂĕύX悤ƂꍇA +// ǂݍ݁^߂̊ԂDMANĂ܂܂̂ŁA +// DMA̓]̃f[^Ӑ}ĂȂlɂȂꍇ܂B +// ̏ꍇɂWaitDma()𒼌ɑ}āADMAI +// ǂ`FbNƑR[hւ̉emɉł܂B + +//---------------------------------------------------------------------- +// guNcl` Rs[ +//---------------------------------------------------------------------- + +#define H_DmaCopy(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_H_BLANK | \ + DMA_SRC_INC | DMA_DEST_RELOAD | \ + DMA_CONTINUOUS_ON | \ + DMA_##bit##BIT_BUS | ((size)/((bit)/8)))) + +#define H_DmaCopyIf(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_H_BLANK | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_RELOAD | \ + DMA_CONTINUOUS_ON | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define H_DmaCopyArray( dmaNo, srcp, destp, bit) \ + H_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define H_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \ + H_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit) + +//EHuNɓDMAŃRs[܂B +//EH_DmaCopyIf^H_DmaCopyArrayIf͏IɊ荞ݗv𔭐܂B +//EH_DmaCopyArray^H_DmaCopyArrayIf̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// uuNcl` Rs[ +//---------------------------------------------------------------------- + +#define V_DmaCopy(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_V_BLANK | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define V_DmaCopyIf(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_V_BLANK | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define V_DmaCopyArray( dmaNo, srcp, destp, bit) \ + V_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define V_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \ + V_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit) + +//EVuNɓDMAŃRs[܂B +//EV_DmaCopyIf^V_DmaCopyArrayIf͏IɊ荞ݗv𔭐܂B +//EV_DmaCopyArray^V_DmaCopyArrayIf̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// C\cl` +//---------------------------------------------------------------------- + +#define DmaDispMainmem(dmaNo, srcp) \ + \ + DmaSet(dmaNo, srcp, REG_DISP_WRAM_FIFO, ( \ + DMA_ENABLE | DMA_TIMMING_DISP_MMEM | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_CONTINUOUS_ON | \ + DMA_32BIT_BUS | (4))) + +//EC̃C[W\DMA]s܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX + +//---------------------------------------------------------------------- +// WIgehen|cl` +//---------------------------------------------------------------------- + +#define GX_Dma(dmaNo, srcp, length) \ + \ + DmaSetAsync(dmaNo, srcp, REG_GXFIFO, ( \ + DMA_ENABLE | DMA_TIMMING_GXFIFO | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_32BIT_BUS | (length))) + +#define GX_DmaIf(dmaNo, srcp, length) \ + \ + DmaSetAsync(dmaNo, srcp, REG_GXFIFO, ( \ + DMA_ENABLE | DMA_TIMMING_GXFIFO | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_32BIT_BUS | (length))) + +#define GX_DmaFast(dmaNo, srcp, length) \ + \ + DmaSet(dmaNo, srcp, REG_GXFIFO, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_32BIT_BUS | (length))) + +#define GX_DmaFastIf(dmaNo, srcp, length) \ + \ + DmaSet(dmaNo, srcp, REG_GXFIFO, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_32BIT_BUS | (length))) + +#define GX_DmaArray( dmaNo, srcp, destp, bit) \ + GX_Dma( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define GX_DmaArrayIf(dmaNo, srcp, destp, bit) \ + GX_DmaIf(dmaNo, srcp, destp, sizeof(srcp), bit) + +#define GX_DmaArrayFast( dmaNo, srcp, destp, bit) \ + GX_DmaFast( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define GX_DmaArrayFastIf(dmaNo, srcp, destp, bit) \ + GX_DmaFastIf(dmaNo, srcp, destp, sizeof(srcp), bit) + +//EWIgFIFO̗vɂDMAŃRs[܂B +//EGX_DmaIf^GX_DmaArrayIf^GX_DmaFastIf^GX_DmaArrayFastIf +// ͏IɊ荞ݗv𔭐܂B +//EGX_DmaArray^GX_DmaArrayIf^GX_DmaArrayFast^GX_DmaArrayFastIf +// ̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// size ]oCg + + +//---------------------------------------------------------------------- +// cl` I҂ +//---------------------------------------------------------------------- + +#define WaitDma(dmaNo) \ +{ \ + vu32 *(dmaCntp) = &((vu32 *)REG_DMA0)[dmaNo * 3]; \ + while (dmaCntp[2] & DMA_ENABLE) ; \ +} + +//EDMȀI҂܂B +// +//EF +// dmaNo DMAԍ + + +//---------------------------------------------------------------------- +// cl` Xgbv +//---------------------------------------------------------------------- + +#define StopDma(dmaNo) \ +{ \ + vu16 *(dmaCntp) = &((vu16 *)REG_DMA0)[dmaNo * 6]; \ + dmaCntp[5] &= ~((DMA_TIMMING_MASK | DMA_CONTINUOUS_ON) \ + >> 16); \ + dmaCntp[5] &= ~( DMA_ENABLE >> 16); \ + {u32 dummy = dmaCntp[5];} \ + {u32 dummy = dmaCntp[5];} \ +} + +//EDMA~܂B +//EAADMA̎N|ꍇ͈xDMAs܂B +// +//EF +// dmaNo DMAԍ + + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define CpuClear(data, destp, size, bit) UTL_CpuClear##bit(data, (void *)(destp), size) + +#define CpuClearArray(data, destp, bit) \ + CpuClear( data, destp, sizeof(destp), bit) + +//ECPURAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//ECpuClearArray̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define CpuCopy(srcp, destp, size, bit) UTL_CpuCopy##bit((void *)(srcp), (void *)(destp), size) + +#define CpuCopyArray(srcp, destp, bit) \ + CpuCopy( srcp, destp, sizeof(srcp), bit) + +//ECPUŃRs[VXeR[Ăяo܂B +//ECpuCopyArray̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define CpuClearFast(data, destp, size) UTL_CpuClearFast(data, (void *)(destp), size) + +#define CpuClearArrayFast(data, destp) \ + CpuClearFast( data, destp, sizeof(destp)) + +//ECPUōRAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//ECpuClearArrayFast̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define CpuCopyFast(srcp, destp, size) UTL_CpuCopyFast((void *)(srcp), (void *)(destp), size) + +#define CpuCopyArrayFast(srcp, destp) \ + CpuCopyFast( srcp, destp, sizeof(srcp)) + +//ECPUōɃRs[VXeR[Ăяo܂B +//ECpuCopyArrayFast̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_MACRO_H diff --git a/trunk/IrisMainp/include/IrisMacroArm.s b/trunk/IrisMainp/include/IrisMacroArm.s new file mode 100644 index 0000000..df0430f --- /dev/null +++ b/trunk/IrisMainp/include/IrisMacroArm.s @@ -0,0 +1,32 @@ +;======================================================================= +; IrisMacroArm.s +; IRIS W}N֐iARMASMpj +; +; Copyright (C) 2002-2004 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_MACRO_H + ELSE +_IRIS_MACRO_H * 1 + + + INCLUDE IrisTargetArm.s + + +;----------------------------------------------------------------------- +; VXeR[ +;----------------------------------------------------------------------- + + MACRO + SystemCall16 $No + swi $No + MEND + MACRO + SystemCall32 $No + swi $No << 16 + MEND + + + ENDIF ; _IRIS_MACRO_H + + END + diff --git a/trunk/IrisMainp/include/IrisMacroMw.s b/trunk/IrisMainp/include/IrisMacroMw.s new file mode 100644 index 0000000..0c58da6 --- /dev/null +++ b/trunk/IrisMainp/include/IrisMacroMw.s @@ -0,0 +1,28 @@ +;======================================================================= +; IrisMacroMw.s +; IRIS W}N֐iMWASMARMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= +#ifndef _IRIS_MACRO_H +#define _IRIS_MACRO_H + + + .INCLUDE IrisTarget.h + + +;----------------------------------------------------------------------- +; VXeR[ +;----------------------------------------------------------------------- + +SystemCall16: .MACRO No + swi No + .ENDM + +SystemCall32: .MACRO No + swi No << 16 + .ENDM + + + +#endif // _IRIS_MACRO_H diff --git a/trunk/IrisMainp/include/IrisMemoryMap.h b/trunk/IrisMainp/include/IrisMemoryMap.h new file mode 100644 index 0000000..48688b7 --- /dev/null +++ b/trunk/IrisMainp/include/IrisMemoryMap.h @@ -0,0 +1,704 @@ +//====================================================================== +// IrisMemoryMap.h +// IRIS }bv萔 +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_MEMORY_MAP_H +#define _IRIS_MEMORY_MAP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define SHARED_WORK 0x027ff000 // botԋL[N̈ +#define SHARED_WORK_END 0x02800000 + +#if defined(NDEBUG) +#define SUBP_PRV 0x02380000 // TuvZbTL̈i[Xo[Wj +#elif defined(MMEM_4M) +#define SUBP_PRV 0x02300000 // ifobOo[WCSl{́j +#else +#define SUBP_PRV 0x02600000 // ifobOo[WCWl{́j +#endif +#define SUBP_PRV_END SHARED_WORK + + +#if defined(IRIS_TEG) | defined(IRIS_TS) +#define ITCM 0x01ff8000 // ߂sbl +#define ITCM_END (ITCM + 0x8000) +#define DTCM SUBP_PRV // f[^sblisdf{[hȍ~j +#else +#define DTCM 0x8000 // iubh{[hpj +#endif +#define DTCM_END (DTCM + 0x4000) + +#define INTR_VECTOR_BUF (DTCM_END - 0x4) // 荞ݕAhX +#define INTR_CHECK_BUF (DTCM_END - 0x8) // 荞݃`FbN + +#define SEND_FIFO_LOCK_BUF (DTCM_END - 0x10) // botԑMehenEbNobt@ +#define TIMER3_LOCK_BUF (DTCM_END - 0x12) // ^C}[REbNobt@ +#define TIMER2_LOCK_BUF (DTCM_END - 0x14) // ^C}[Q +#define TIMER1_LOCK_BUF (DTCM_END - 0x16) // ^C}[P +#define TIMER0_LOCK_BUF (DTCM_END - 0x18) // ^C}[O +#define DMA3_LOCK_BUF (DTCM_END - 0x1a) // cl`REbNobt@ +#define DMA2_LOCK_BUF (DTCM_END - 0x1c) // cl`Q +#define DMA1_LOCK_BUF (DTCM_END - 0x1e) // cl`P +#define DMA0_LOCK_BUF (DTCM_END - 0x20) // cl`O + + +#define MAIN_MEM 0x02000000 // C +#define MAIN_MEM_END (MAIN_MEM + 0x400000) +#define MAIN_MEM_EX_END (MAIN_MEM + 0x800000) //ig̍ŏIAhXj + +#define MAIN_MEM_CMD_AREA (MAIN_MEM_EX_END - 0x2) // CR}hsGAigp֎~GAj + +#define SHARED_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // L\[XEbNobt@ +#define SHARED_LOCK_BUF_END (MAIN_MEM_EX_END - 0x10) + +#define INIT_LOCK_BUF (MAIN_MEM_EX_END - 0x10) // bNobt@ +#define CARTRIDGE_LOCK_BUF (MAIN_MEM_EX_END - 0x18) // J[gbWEbNobt@ +#define CARD_LOCK_BUF (MAIN_MEM_EX_END - 0x20) // J[hEbNobt@ +#define WRAM_BLOCK1_LOCK_BUF (MAIN_MEM_EX_END - 0x28) // bot[Nq`lEubNPEbNobt@ +#define WRAM_BLOCK0_LOCK_BUF (MAIN_MEM_EX_END - 0x30) // ubNOEbNobt@ +#define VRAM_D_LOCK_BUF (MAIN_MEM_EX_END - 0x38) // uq`l|cEbNobt@ +#define VRAM_C_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // bEbNobt@ + +#define FROM_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x50) // TuCvZbT荞ݗvtOiQa~Wj +#define WM_FROM_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x50) // CX}l[W\ +#define TO_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x60) // CTuvZbT荞ݗvtOiQa~Wj +#define WM_TO_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x60) // CX}l[W\ + +#define ROM_HEADER_BUF (MAIN_MEM_EX_END - 0x200)// qnlo^GAf[^Eobt@ + +#define DMA_CLEAR_DATA_BUF (MAIN_MEM_EX_END - 0x210)// cl`NAf[^Eobt@ibΉAp~\j + + +#define CPU_WRAM 0x037f8000 // bot[Nq`l +#define CPU_WRAM_END (CPU_WRAM + 0x8000) +#define CPU_WRAM_BLOCK0 0x037f8000 // ubNO +#define CPU_WRAM_BLOCK0_END (CPU_WRAM_BLOCK0 + 0x4000) +#define CPU_WRAM_BLOCK1 0x037fc000 // ubNP +#define CPU_WRAM_BLOCK1_END (CPU_WRAM_BLOCK1 + 0x4000) + + +#define REG_BASE 0x04000000 // WX^Q +#define PLTT 0x05000000 // pbgq`l +#define PLTT_END (PLTT + 0x400) +#define BG_PLTT (PLTT + 0x0) // afpbgq`l +#define BG_PLTT_END (PLTT + 0x200) +#define OBJ_PLTT (PLTT + 0x200) // naipbgq`l +#define OBJ_PLTT_END (PLTT + 0x400) +#define VRAM 0x06000000 // uq`l +#define BG_VRAM (VRAM + 0x0) // afLN^/XN[q`l +#define BG_VRAM_END (VRAM + 0x80000) +#define OBJ_VRAM (VRAM + 0x400000) // naiLN^q`l +#define OBJ_VRAM_END (VRAM + 0x440000) +#define LCDC_VRAM (VRAM + 0x800000) // kbcb|uq`l +#define LCDC_VRAM_A (VRAM + 0x800000) +#define LCDC_VRAM_B (VRAM + 0x820000) +#define LCDC_VRAM_C (VRAM + 0x840000) +#define LCDC_VRAM_D (VRAM + 0x860000) +#define LCDC_VRAM_E (VRAM + 0x880000) +#define LCDC_VRAM_F (VRAM + 0x890000) +#define LCDC_VRAM_G (VRAM + 0x894000) +#define LCDC_VRAM_END (VRAM + 0x898000) +#define OAM 0x07000000 // n`l +#define OAM_END (OAM + 0x400) + +#define CARTRIDGE 0x08000000 // J[gbW +#define CTRDG_AD16_BANK0 0x08000000 // J[gbW `cPUoX oNO +#define CTRDG_AD16_BANK0_END 0x0a000000 +#define CTRDG_AD16_BANK1 0x0a000000 // oNP +#define CTRDG_AD16_BANK1_END 0x0c000000 +#define CTRDG_AD16_BANK2 0x0c000000 // oNQ +#define CTRDG_AD16_BANK2_END 0x0e000000 +#define CTRDG_DT8 0x0e000000 // J[gbW Wf[^oX +#define CTRDG_DT8_END 0x10000000 + +#define BIOS 0xffff0000 // ahnr +#define BIOS_END (BIOS + 0x8000) + + +//---------------------------------------------------------------------- +// ETCY +//---------------------------------------------------------------------- + +#define SHARED_WORK_SIZE (SHARED_WORK_END - SHARED_WORK) // botԋL[N̈iSjaȏAQׂ̂TCYj +#define SUBP_PRV_SIZE (SUBP_PRV_END - SUBP_PRV) // TuvZbTL̈iRQjaȏAQׂ̂TCYj + +#define SHARED_LOCK_BUF_SIZE (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) // L\[XEbNobt@ + + +#define ITCM_SIZE 0x8000 // ߂sbl +#define DTCM_SIZE 0x4000 // f[^sbl +#define ICACHE_SIZE 0x2000 // ߃LbV +#define DCACHE_SIZE 0x1000 // f[^LbV + +#define CACHE_LINE_SIZE 32 // LbVC + +#define MAIN_MEM_SIZE 0x400000 // C +#define MAIN_MEM_EX_SIZE 0x800000 // igj + +#define CPU_WRAM_SIZE 0x8000 // bot[Nq`l v +#define CPU_WRAM_BLOCK0_SIZE 0x4000 // ubNO +#define CPU_WRAM_BLOCK1_SIZE 0x4000 // ubNP + +#define MROM_PAGE_SIZE 512 // }XNqnlEy[W + +#define PLTT_SIZE (2*256*2) // pbgq`l +#define BG_PLTT_SIZE (2*256) // afpbgq`l +#define OBJ_PLTT_SIZE (2*256) // naipbgq`l +#define BG_VRAM_SIZE 0x80000 // af|uq`l +#define OBJ_VRAM_SIZE 0x40000 // nai|uq`l +#define LCDC_VRAM_SIZE 0x98000 // kbcb|uq`l +#define VRAM_A_SIZE 0x20000 // uq`l|` +#define VRAM_B_SIZE 0x20000 // a +#define VRAM_C_SIZE 0x20000 // b +#define VRAM_D_SIZE 0x20000 // c +#define VRAM_E_SIZE 0x10000 // d +#define VRAM_F_SIZE 0x4000 // e +#define VRAM_G_SIZE 0x4000 // f +#define OAM_SIZE (8*128) // n`l + +#define CARTRIDGE_SIZE 0x02000000 // J[gbW +#define CTRDG_AD16_BANK_SIZE 0x02000000 // J[gbW `cPUoX oN +#define CTRDG_AD16_BANK0_SIZE 0x02000000 // oNO +#define CTRDG_AD16_BANK1_SIZE 0x02000000 // oNP +#define CTRDG_AD16_BANK2_SIZE 0x02000000 // oNQ +#define CTRDG_DT8_SIZE 0x02000000 // J[gbW Wf[^oX + +#define BIOS_SIZE 0x8000 // ahnr + + +//---------------------------------------------------------------------- +// WX^EAhX +//---------------------------------------------------------------------- + +#define REG_IME (REG_BASE + 0x208) // 荞݃}X^Cl[u +#define REG_IE (REG_BASE + 0x210) // 荞݋ +#define REG_IF (REG_BASE + 0x214) // 荞ݗv + + +#define REG_SUBPINTF (REG_BASE + 0x180) // TuvZbTC^tF[X +#define REG_SUBP_FIFO_CNT (REG_BASE + 0x184) // botԂehenRg[ +#define REG_SEND_FIFO (REG_BASE + 0x188) // Mehen +#define REG_RECV_FIFO (REG_BASE + 0x100000) // Mehen + +#define REG_EXMEMCNT (REG_BASE + 0x204) // ORg[ + +#define REG_POWCNT (REG_BASE + 0x304) // p[Rg[ + + +#define REG_DIVCNT (REG_BASE + 0x280) // Z Rg[ +#define REG_DIV_NUMER (REG_BASE + 0x290) // 폜 +#define REG_DIV_DENOM (REG_BASE + 0x298) // +#define REG_DIV_RESULT (REG_BASE + 0x2a0) // +#define REG_DIVREM_RESULT (REG_BASE + 0x2a8) // ] + +#define REG_SQRTCNT (REG_BASE + 0x2b0) // Z Rg[ +#define REG_SQRT_RESULT (REG_BASE + 0x2b4) // +#define REG_SQRT_PARAM (REG_BASE + 0x2b8) // p[^ + + +#define REG_DISPCNT (REG_BASE + 0x0) // \Rg[ +#define REG_DISPCNT_L (REG_BASE + 0x0) +#define REG_DISPCNT_H (REG_BASE + 0x2) +#define REG_DISP2DCNT (REG_BASE + 0x0) // Qc\Rg[ +#define REG_DISP3DCNT (REG_BASE + 0x60) // Rc\Rg[ + +#define REG_DISPSTAT (REG_BASE + 0x4) // \Xe[^X +#define REG_VCOUNT (REG_BASE + 0x6) // uJE^ +#define REG_GXSTAT (REG_BASE + 0x600) // WIgGWXe[^X + + +#define REG_VRAMCNT (REG_BASE + 0x240) // uq`lRg[ +#define REG_WRAMCNT (REG_BASE + 0x247) // [Nq`lRg[ +#define REG_WVRAMCNT (REG_BASE + 0x244) // uq`l d`f { [Nq`l Rg[ +#define REG_VRAM_A_CNT (REG_BASE + 0x240) // uq`l ` +#define REG_VRAM_B_CNT (REG_BASE + 0x241) // uq`l a +#define REG_VRAM_C_CNT (REG_BASE + 0x242) // uq`l b +#define REG_VRAM_D_CNT (REG_BASE + 0x243) // uq`l c +#define REG_VRAM_E_CNT (REG_BASE + 0x244) // uq`l d +#define REG_VRAM_F_CNT (REG_BASE + 0x245) // uq`l e +#define REG_VRAM_G_CNT (REG_BASE + 0x246) // uq`l f +#define REG_VRAM_H_CNT (REG_BASE + 0x248) // uq`l g +#define REG_VRAM_I_CNT (REG_BASE + 0x249) // uq`l h +#define REG_VRAM_AB_CNT (REG_BASE + 0x240) // uq`l `a +#define REG_VRAM_CD_CNT (REG_BASE + 0x242) // uq`l bc +#define REG_VRAM_EF_CNT (REG_BASE + 0x244) // uq`l de +#define REG_VRAM_G_W_CNT (REG_BASE + 0x246) // uq`l f { [Nq`l +#define REG_VRAM_ABCD_CNT (REG_BASE + 0x240) // uq`l ``c +#define REG_VRAM_EFG_W_CNT (REG_BASE + 0x244) // uq`l d`f { [Nq`l +#define REG_VRAM_HI_CNT (REG_BASE + 0x248) // uq`l gh + + + +#define REG_MASTER_BRIGHT (REG_BASE + 0x6c) // }X^[Px Rg[ +#define REG_DISPCAPCNT (REG_BASE + 0x64) // \Lv` Rg[ +#define REG_DISP_MMEM_FIFO (REG_BASE + 0x68) // C\ehen + + +#define REG_MOSAIC (REG_BASE + 0x4c) // UCN TCY + +#define REG_BLDCNT (REG_BASE + 0x50) // uh[h Rg[ +#define REG_BLDALPHA (REG_BASE + 0x52) // p[^ +#define REG_BLDY (REG_BASE + 0x54) // PxύX p[^ + +#define REG_WINCNT (REG_BASE + 0x40) // EChE Rg[ +#define REG_WIN0H (REG_BASE + 0x40) // EChEÖ +#define REG_WIN1H (REG_BASE + 0x42) // EChEP̈ +#define REG_WIN0V (REG_BASE + 0x44) // EChEÖ +#define REG_WIN1V (REG_BASE + 0x46) // EChEP̈ +#define REG_WININ (REG_BASE + 0x48) // EChERg[ +#define REG_WIN0 (REG_BASE + 0x48) // EChEORg[ +#define REG_WIN1 (REG_BASE + 0x49) // EChEPRg[ +#define REG_WIN01 (REG_BASE + 0x48) // EChEOEPRg[ +#define REG_WINOUT (REG_BASE + 0x4a) // EChEORg[ +#define REG_OBJWIN (REG_BASE + 0x4b) // naiEChERg[ +#define REG_WINOUTOBJ (REG_BASE + 0x4a) // EChEOEnaiEChERg[ + + +#define REG_BGCNT (REG_BASE + 0x8) // afRg[ +#define REG_BG0CNT (REG_BASE + 0x8) // afORg[ +#define REG_BG1CNT (REG_BASE + 0xa) // afPRg[ +#define REG_BG2CNT (REG_BASE + 0xc) // afQRg[ +#define REG_BG3CNT (REG_BASE + 0xe) // afRRg[ +#define REG_BGOFS (REG_BASE + 0x10) // afItZbg +#define REG_BG0HOFS (REG_BASE + 0x10) // afOgItZbg +#define REG_BG0VOFS (REG_BASE + 0x12) // afOuItZbg +#define REG_BG1HOFS (REG_BASE + 0x14) // afPgItZbg +#define REG_BG1VOFS (REG_BASE + 0x16) // afPuItZbg +#define REG_BG2HOFS (REG_BASE + 0x18) // afQgItZbg +#define REG_BG2VOFS (REG_BASE + 0x1a) // afQuItZbg +#define REG_BG3HOFS (REG_BASE + 0x1c) // afRgItZbg +#define REG_BG3VOFS (REG_BASE + 0x1e) // afRuItZbg +#define REG_BG2AFFINE (REG_BASE + 0x20) // afQAtBϊp[^Q +#define REG_BG2PA (REG_BASE + 0x20) // afQCwW +#define REG_BG2PB (REG_BASE + 0x22) // afQ wW +#define REG_BG2PC (REG_BASE + 0x24) // afQCxW +#define REG_BG2PD (REG_BASE + 0x26) // afQ xW +#define REG_BG2X (REG_BASE + 0x28) // afQX^[gwW +#define REG_BG2Y (REG_BASE + 0x2c) // afQX^[gxW +#define REG_BG3AFFINE (REG_BASE + 0x30) // afRAtBϊp[^Q +#define REG_BG3PA (REG_BASE + 0x30) // afRCwW +#define REG_BG3PB (REG_BASE + 0x32) // afR wW +#define REG_BG3PC (REG_BASE + 0x34) // afRCxW +#define REG_BG3PD (REG_BASE + 0x36) // afR xW +#define REG_BG3X (REG_BASE + 0x38) // afRX^[gwW +#define REG_BG3Y (REG_BASE + 0x3c) // afRX^[gxW + + + +#define REG_GXFIFO (REG_BASE + 0x400) // WIgehen + +#define REG_LISTRAM_COUNT (REG_BASE + 0x604) // |SXgq`lJE^ +#define REG_VTXRAM_COUNT (REG_BASE + 0x606) // _q`lJE^ +#define REG_RDLINES_COUNT (REG_BASE + 0x320) // _Oς݃CJE^ + + +#define REG_SWAP_BUFFERS (REG_BASE + 0x540) // _OGWQƃf[^Q̃Xbv + +#define REG_VIEWPORT (REG_BASE + 0x580) // E + +#define REG_MTX_MODE (REG_BASE + 0x440) // s񃂁[h + +#define REG_MTX_PUSH (REG_BASE + 0x444) // svbV +#define REG_MTX_POP (REG_BASE + 0x448) // s|bv +#define REG_MTX_STORE (REG_BASE + 0x44c) // sXgA +#define REG_MTX_RESTORE (REG_BASE + 0x450) // s񃊃XgA + +#define REG_MTX_IDENTITY (REG_BASE + 0x454) // Pʍs +#define REG_MTX_LOAD_4x4 (REG_BASE + 0x458) // s񃍁[hiSSj +#define REG_MTX_LOAD_4x3 (REG_BASE + 0x45c) // iSRj +#define REG_MTX_MULT_4x4 (REG_BASE + 0x460) // sZ iSSj +#define REG_MTX_MULT_4x3 (REG_BASE + 0x464) // iSRj +#define REG_MTX_MULT_3x3 (REG_BASE + 0x468) // iRRj +#define REG_MTX_SCALE (REG_BASE + 0x46c) // XP[sZiPRj +#define REG_MTX_TRANS (REG_BASE + 0x470) // ړsZiPRj + +#define REG_CLIPMTX_RESULT (REG_BASE + 0x640) // JgNbvWs ǂݍ +#define REG_VECMTX_RESULT (REG_BASE + 0x680) // JgxNgs ǂݍ + + +#define REG_LIGHT_VECTOR (REG_BASE + 0x4c8) // CgxNg +#define REG_LIGHT_COLOR (REG_BASE + 0x4cc) // CgJ[ + +#define REG_MATERIAL_COLOR (REG_BASE + 0x4c0) // }eAJ[ +#define REG_DIF_AMB (REG_BASE + 0x4c0) // gU ‹ +#define REG_SPE_EMI (REG_BASE + 0x4c4) // ˌ ˌ +#define REG_SHININESS (REG_BASE + 0x4d0) // ʔˋPx + + +#define REG_POLYGON_ATTR (REG_BASE + 0x4a4) // |S + +#define REG_TEX_PARAM (REG_BASE + 0x4a8) // eNX`p[^ +#define REG_TEXIMAGE_PARAM (REG_BASE + 0x4a8) +#define REG_TEXPLTT_BASE (REG_BASE + 0x4ac) + +#define REG_BEGIN_VTXS (REG_BASE + 0x500) // _Xg X^[g +#define REG_END_VTXS (REG_BASE + 0x504) // _Xg Gh + +#define REG_COLOR (REG_BASE + 0x480) // _J[ +#define REG_NORMAL (REG_BASE + 0x484) // _@ +#define REG_TEXCOORD (REG_BASE + 0x488) // _eNX`W +#define REG_VTX_16 (REG_BASE + 0x48c) // _16bitW +#define REG_VTX_10 (REG_BASE + 0x490) // _10bitW +#define REG_VTX_XY (REG_BASE + 0x494) // _16bitXYW +#define REG_VTX_XZ (REG_BASE + 0x498) // _16bitXZW +#define REG_VTX_YZ (REG_BASE + 0x49c) // _16bitYZW +#define REG_VTX_DIFF (REG_BASE + 0x4a0) // _16bitWl + +#define REG_BOX_TEST (REG_BASE + 0x5c0) // {bNXeXg +#define REG_POS_TEST (REG_BASE + 0x5c4) // ʒueXg +#define REG_VEC_TEST (REG_BASE + 0x5c8) // xNgeXg + +#define REG_POS_RESULT (REG_BASE + 0x620) // ʒueXg +#define REG_VEC_RESULT (REG_BASE + 0x630) // xNgeXg + + +#define REG_CLEAR_COLOR_ATTR (REG_BASE +0x350) // J[obt@ NAl +#define REG_CLEAR_DEPTH (REG_BASE + 0x354) // yobt@ NAl +#define REG_CLRIMAGE_OFFSET (REG_BASE + 0x356) // NAC[W ItZbg + +#define REG_EDGE_COLOR (REG_BASE + 0x330) // GbWJ[ + +#define REG_FOG_COLOR (REG_BASE + 0x358) // tHO J[ +#define REG_FOG_OFFSET (REG_BASE + 0x35c) // tHO ItZbg +#define REG_FOG_TABLE (REG_BASE + 0x360) // tHOZxe[u + +#define REG_TOON_TABLE (REG_BASE + 0x380) // gD[VF[fBOEe[u + +#define REG_ALPHA_TEST_REF (REG_BASE + 0x340) // At@eXgQƒl + +#define REG_DISP_1DOT_DEPTH (REG_BASE + 0x610) // Phbg|S`Jnyl + + + +#define REG_DMA0 (REG_BASE + 0xb0) // cl`O +#define REG_DMA0SAD (REG_BASE + 0xb0) +#define REG_DMA0DAD (REG_BASE + 0xb4) +#define REG_DMA0CNT (REG_BASE + 0xb8) +#define REG_DMA0CNT_L (REG_BASE + 0xb8) +#define REG_DMA0CNT_H (REG_BASE + 0xba) +#define REG_DMA1 (REG_BASE + 0xbc) // cl`P +#define REG_DMA1SAD (REG_BASE + 0xbc) +#define REG_DMA1DAD (REG_BASE + 0xc0) +#define REG_DMA1CNT (REG_BASE + 0xc4) +#define REG_DMA1CNT_L (REG_BASE + 0xc4) +#define REG_DMA1CNT_H (REG_BASE + 0xc6) +#define REG_DMA2 (REG_BASE + 0xc8) // cl`Q +#define REG_DMA2SAD (REG_BASE + 0xc8) +#define REG_DMA2DAD (REG_BASE + 0xcc) +#define REG_DMA2CNT (REG_BASE + 0xd0) +#define REG_DMA2CNT_L (REG_BASE + 0xd0) +#define REG_DMA2CNT_H (REG_BASE + 0xd2) +#define REG_DMA3 (REG_BASE + 0xd4) // cl`R +#define REG_DMA3SAD (REG_BASE + 0xd4) +#define REG_DMA3DAD (REG_BASE + 0xd8) +#define REG_DMA3CNT (REG_BASE + 0xdc) +#define REG_DMA3CNT_L (REG_BASE + 0xdc) +#define REG_DMA3CNT_H (REG_BASE + 0xde) +#define REG_DMA3CNT_L (REG_BASE + 0xdc) +#ifdef IRIS_TS +#define REG_DMA0_CLR_DATA (REG_BASE + 0xe0) // cl` NAf[^ +#define REG_DMA1_CLR_DATA (REG_BASE + 0xe4) +#define REG_DMA2_CLR_DATA (REG_BASE + 0xe8) +#define REG_DMA3_CLR_DATA (REG_BASE + 0xec) +#else +#define REG_DMA0_CLR_DATA (DMA_CLEAR_DATA_BUF + 0x0) +#define REG_DMA1_CLR_DATA (DMA_CLEAR_DATA_BUF + 0x4) +#define REG_DMA2_CLR_DATA (DMA_CLEAR_DATA_BUF + 0x8) +#define REG_DMA3_CLR_DATA (DMA_CLEAR_DATA_BUF + 0xc) +#endif + + +#define REG_TM0CNT (REG_BASE + 0x100) // ^C}[O +#define REG_TM0CNT_L (REG_BASE + 0x100) +#define REG_TM0CNT_H (REG_BASE + 0x102) +#define REG_TM1CNT (REG_BASE + 0x104) // ^C}[P +#define REG_TM1CNT_L (REG_BASE + 0x104) +#define REG_TM1CNT_H (REG_BASE + 0x106) +#define REG_TM2CNT (REG_BASE + 0x108) // ^C}[Q +#define REG_TM2CNT_L (REG_BASE + 0x108) +#define REG_TM2CNT_H (REG_BASE + 0x10a) +#define REG_TM3CNT (REG_BASE + 0x10c) // ^C}[R +#define REG_TM3CNT_L (REG_BASE + 0x10c) +#define REG_TM3CNT_H (REG_BASE + 0x10e) + + +#define REG_KEYINPUT (REG_BASE + 0x130) // L[ +#define REG_KEYCNT (REG_BASE + 0x132) // L[Rg[ + +#define REG_R0CNT (REG_BASE + 0x134) // ėp|[gO +#define REG_R1CNT (REG_BASE + 0x138) // P + + +//---------------------------------------------------------------------- +// WX^EItZbg +//---------------------------------------------------------------------- + +#define OFFSET_REG_IME 0x208 // 荞݃}X^Cl[u +#define OFFSET_REG_IE 0x210 // 荞݋ +#define OFFSET_REG_IF 0x214 // 荞ݗv + +#define OFFSET_REG_SUBPINTF 0x180 // TuvZbTC^tF[X +#define OFFSET_REG_SUBP_FIFO_CNT 0x184 // botԂehenRg[ +#define OFFSET_REG_SEND_FIFO 0x188 // Mehen +#define OFFSET_REG_RECV_FIFO 0x100000 // Mehen + +#define OFFSET_REG_EXMEMCNT 0x204 // ORg[ + +#define OFFSET_REG_POWCNT 0x304 // p[Rg[ + + +#define OFFSET_REG_DIVCNT 0x280 // Z Rg[ +#define OFFSET_REG_DIV_NUMER 0x290 // 폜 +#define OFFSET_REG_DIV_DENOM 0x298 // +#define OFFSET_REG_DIV_RESULT 0x2a0 // +#define OFFSET_REG_DIVREM_RESULT 0x2a8 // ] + +#define OFFSET_REG_SQRTCNT 0x2b0 // Z Rg[ +#define OFFSET_REG_SQRT_RESULT 0x2b4 // +#define OFFSET_REG_SQRT_PARAM 0x2b8 // p[^ + + +#define OFFSET_REG_DISPCNT 0x0 // \Rg[ +#define OFFSET_REG_DISPCNT_L 0x0 +#define OFFSET_REG_DISPCNT_H 0x2 +#define OFFSET_REG_DISP2DCNT 0x0 // Qc\Rg[ +#define OFFSET_REG_DISP3DCNT 0x60 // Rc\Rg[ + +#define OFFSET_REG_DISPSTAT 0x4 // \Xe[^X +#define OFFSET_REG_VCOUNT 0x6 // uJE^ +#define OFFSET_REG_GXSTAT 0x600 // WIgGWXe[^X + + +#define OFFSET_REG_VRAMCNT 0x240 // uq`lRg[ +#define OFFSET_REG_WRAMCNT 0x247 // [Nq`lRg[ +#define OFFSET_REG_WVRAMCNT 0x244 // uq`l d`f { [Nq`l Rg[ +#define OFFSET_REG_VRAM_A_CNT 0x240 // uq`l ` +#define OFFSET_REG_VRAM_B_CNT 0x241 // uq`l a +#define OFFSET_REG_VRAM_C_CNT 0x242 // uq`l b +#define OFFSET_REG_VRAM_D_CNT 0x243 // uq`l c +#define OFFSET_REG_VRAM_E_CNT 0x244 // uq`l d +#define OFFSET_REG_VRAM_F_CNT 0x245 // uq`l e +#define OFFSET_REG_VRAM_G_CNT 0x246 // uq`l f +#define OFFSET_REG_VRAM_H_CNT 0x248 // uq`l g +#define OFFSET_REG_VRAM_I_CNT 0x249 // uq`l h +#define OFFSET_REG_VRAM_AB_CNT 0x240 // uq`l `a +#define OFFSET_REG_VRAM_CD_CNT 0x242 // uq`l bc +#define OFFSET_REG_VRAM_EF_CNT 0x244 // uq`l de +#define OFFSET_REG_VRAM_G_W_CNT 0x246 // uq`l f { [Nq`l +#define OFFSET_REG_VRAM_ABCD_CNT 0x240 // uq`l ``c +#define OFFSET_REG_VRAM_EFG_W_CNT 0x244 // uq`l d`f { [Nq`l +#define OFFSET_REG_VRAM_HI_CNT 0x248 // uq`l gh + + +#define OFFSET_REG_MASTER_BRIGHT 0x6c // }X^[Px Rg[ +#define OFFSET_REG_DISPCAPCNT 0x64 // \Lv` Rg[ +#define OFFSET_REG_DISP_MMEM_FIFO 0x68 // C\ehen +#define OFFSET_REG_TVOUTCNT 0x70 // ero̓Rg[ + + +#define OFFSET_REG_MOSAIC 0x4c // UCN TCY + +#define OFFSET_REG_BLDCNT 0x50 // uh[h Rg[ +#define OFFSET_REG_BLDALPHA 0x52 // p[^ +#define OFFSET_REG_BLDY 0x54 // PxύX p[^ + +#define OFFSET_REG_WINCNT 0x40 // EChE Rg[ +#define OFFSET_REG_WIN0H 0x40 // EChEÖ +#define OFFSET_REG_WIN1H 0x42 // EChEP̈ +#define OFFSET_REG_WIN0V 0x44 // EChEÖ +#define OFFSET_REG_WIN1V 0x46 // EChEP̈ +#define OFFSET_REG_WININ 0x48 // EChERg[ +#define OFFSET_REG_WIN0 0x48 // EChEORg[ +#define OFFSET_REG_WIN1 0x49 // EChEPRg[ +#define OFFSET_REG_WIN01 0x48 // EChEOEPRg[ +#define OFFSET_REG_WINOUT 0x4a // EChEORg[ +#define OFFSET_REG_OBJWIN 0x4b // naiEChERg[ +#define OFFSET_REG_WINOUTOBJ 0x4a // EChEOEnaiEChERg[ + + +#define OFFSET_REG_BGCNT 0x8 // afRg[ +#define OFFSET_REG_BG0CNT 0x8 // afORg[ +#define OFFSET_REG_BG1CNT 0xa // afPRg[ +#define OFFSET_REG_BG2CNT 0xc // afQRg[ +#define OFFSET_REG_BG3CNT 0xe // afRRg[ +#define OFFSET_REG_BGOFS 0x10 // afItZbg +#define OFFSET_REG_BG0HOFS 0x10 // afOgItZbg +#define OFFSET_REG_BG0VOFS 0x12 // afOuItZbg +#define OFFSET_REG_BG1HOFS 0x14 // afPgItZbg +#define OFFSET_REG_BG1VOFS 0x16 // afPuItZbg +#define OFFSET_REG_BG2HOFS 0x18 // afQgItZbg +#define OFFSET_REG_BG2VOFS 0x1a // afQuItZbg +#define OFFSET_REG_BG3HOFS 0x1c // afRgItZbg +#define OFFSET_REG_BG3VOFS 0x1e // afRuItZbg +#define OFFSET_REG_BG2AFFINE 0x20 // afQAtBϊp[^Q +#define OFFSET_REG_BG2PA 0x20 // afQCwW +#define OFFSET_REG_BG2PB 0x22 // afQ wW +#define OFFSET_REG_BG2PC 0x24 // afQCxW +#define OFFSET_REG_BG2PD 0x26 // afQ xW +#define OFFSET_REG_BG2X 0x28 // afQX^[gwW +#define OFFSET_REG_BG2Y 0x2c // afQX^[gxW +#define OFFSET_REG_BG3AFFINE 0x30 // afRAtBϊp[^Q +#define OFFSET_REG_BG3PA 0x30 // afRCwW +#define OFFSET_REG_BG3PB 0x32 // afR wW +#define OFFSET_REG_BG3PC 0x34 // afRCxW +#define OFFSET_REG_BG3PD 0x36 // afR xW +#define OFFSET_REG_BG3X 0x38 // afRX^[gwW +#define OFFSET_REG_BG3Y 0x3c // afRX^[gxW + + + +#define OFFSET_REG_GXFIFO 0x400 // WIgehen + +#define OFFSET_REG_LISTRAM_COUNT 0x604 // |SXgq`lJE^ +#define OFFSET_REG_VTXRAM_COUNT 0x606 // _q`lJE^ +#define OFFSET_REG_RDLINES_COUNT 0x320 // _Oς݃CJE^ + + +#define OFFSET_REG_SWAP_BUFFERS 0x540 // _OGWQƃf[^Q̃Xbv + +#define OFFSET_REG_VIEWPORT 0x580 // E + +#define OFFSET_REG_MTX_MODE 0x440 // s񃂁[h + +#define OFFSET_REG_MTX_PUSH 0x444 // svbV +#define OFFSET_REG_MTX_POP 0x448 // s|bv +#define OFFSET_REG_MTX_STORE 0x44c // sXgA +#define OFFSET_REG_MTX_RESTORE 0x450 // s񃊃XgA + +#define OFFSET_REG_MTX_IDENTITY 0x454 // Pʍs +#define OFFSET_REG_MTX_LOAD_4x4 0x458 // s񃍁[hiSSj +#define OFFSET_REG_MTX_LOAD_4x3 0x45c // iSRj +#define OFFSET_REG_MTX_MULT_4x4 0x460 // sZ iSSj +#define OFFSET_REG_MTX_MULT_4x3 0x464 // iSRj +#define OFFSET_REG_MTX_MULT_3x3 0x468 // iRRj +#define OFFSET_REG_MTX_SCALE 0x46c // XP[sZiPRj +#define OFFSET_REG_MTX_TRANS 0x470 // ړsZiPRj + +#define OFFSET_REG_CLIPMTX_RESULT 0x640 // JgNbvWs ǂݍ +#define OFFSET_REG_VECMTX_RESULT 0x680 // JgxNgs ǂݍ + + +#define OFFSET_REG_LIGHT_VECTOR 0x4c8 // CgxNg +#define OFFSET_REG_LIGHT_COLOR 0x4cc // CgJ[ + +#define OFFSET_REG_MATERIAL_COLOR 0x4c0 // }eAJ[ +#define OFFSET_REG_DIF_AMB 0x4c0 // gU ‹ +#define OFFSET_REG_SPE_EMI 0x4c4 // ˌ ˌ +#define OFFSET_REG_SHININESS 0x4d0 // ʔˋPx + + +#define OFFSET_REG_POLYGON_ATTR 0x4a4 // |S + +#define OFFSET_REG_TEX_PARAM 0x4a8 // eNX`p[^ +#define OFFSET_REG_TEXIMAGE_PARAM 0x4a8 +#define OFFSET_REG_TEXPLTT_BASE 0x4ac + +#define OFFSET_REG_BEGIN_VTXS 0x500 // _Xg X^[g +#define OFFSET_REG_END_VTXS 0x504 // _Xg Gh + +#define OFFSET_REG_COLOR 0x480 // _J[ +#define OFFSET_REG_NORMAL 0x484 // _@ +#define OFFSET_REG_TEXCOORD 0x488 // _eNX`W +#define OFFSET_REG_VTX_16 0x48c // _16bitW +#define OFFSET_REG_VTX_10 0x490 // _10bitW +#define OFFSET_REG_VTX_XY 0x494 // _16bitXYW +#define OFFSET_REG_VTX_XZ 0x498 // _16bitXZW +#define OFFSET_REG_VTX_YZ 0x49c // _16bitYZW +#define OFFSET_REG_VTX_DIFF 0x4a0 // _16bitWl + +#define OFFSET_REG_BOX_TEST 0x5c0 // {bNXeXg +#define OFFSET_REG_POS_TEST 0x5c4 // ʒueXg +#define OFFSET_REG_VEC_TEST 0x5c8 // xNgeXg + +#define OFFSET_REG_POS_RESULT 0x620 // ʒueXg +#define OFFSET_REG_VEC_RESULT 0x630 // xNgeXg + + +#define OFFSET_REG_CLEAR_COLOR_ATTR 0x350 // J[obt@ NAl +#define OFFSET_REG_CLEAR_DEPTH 0x354 // yobt@ NAl +#define OFFSET_REG_CLRIMAGE_OFFSET 0x356 // NAC[W ItZbg + +#define OFFSET_REG_EDGE_COLOR 0x330 // GbWJ[ + +#define OFFSET_REG_FOG_COLOR 0x358 // tHO J[ +#define OFFSET_REG_FOG_OFFSET 0x35c // tHO ItZbg +#define OFFSET_REG_FOG_TABLE 0x360 // tHOZxe[u + +#define OFFSET_REG_TOON_TABLE 0x380 // gD[VF[fBOEe[u + +#define OFFSET_REG_ALPHA_TEST_REF 0x340 // At@eXgQƒl + +#define OFFSET_REG_DISP_1DOT_DEPTH 0x610 // Phbg|S`Jnyl + + + +#define OFFSET_REG_DMA0 0xb0 // cl`O +#define OFFSET_REG_DMA0SAD 0xb0 +#define OFFSET_REG_DMA0DAD 0xb4 +#define OFFSET_REG_DMA0CNT 0xb8 +#define OFFSET_REG_DMA0CNT_L 0xb8 +#define OFFSET_REG_DMA0CNT_H 0xba +#define OFFSET_REG_DMA1 0xbc // cl`P +#define OFFSET_REG_DMA1SAD 0xbc +#define OFFSET_REG_DMA1DAD 0xc0 +#define OFFSET_REG_DMA1CNT 0xc4 +#define OFFSET_REG_DMA1CNT_L 0xc4 +#define OFFSET_REG_DMA1CNT_H 0xc6 +#define OFFSET_REG_DMA2 0xc8 // cl`Q +#define OFFSET_REG_DMA2SAD 0xc8 +#define OFFSET_REG_DMA2DAD 0xcc +#define OFFSET_REG_DMA2CNT 0xd0 +#define OFFSET_REG_DMA2CNT_L 0xd0 +#define OFFSET_REG_DMA2CNT_H 0xd2 +#define OFFSET_REG_DMA3 0xd4 // cl`R +#define OFFSET_REG_DMA3SAD 0xd4 +#define OFFSET_REG_DMA3DAD 0xd8 +#define OFFSET_REG_DMA3CNT 0xdc +#define OFFSET_REG_DMA3CNT_L 0xdc +#ifdef IRIS_TS +#define OFFSET_REG_DMA0_CLR_DATA 0xe0 // cl` NAf[^ +#define OFFSET_REG_DMA1_CLR_DATA 0xe4 +#define OFFSET_REG_DMA2_CLR_DATA 0xe8 +#define OFFSET_REG_DMA3_CLR_DATA 0xec +#endif + + +#define OFFSET_REG_TM0CNT 0x100 // ^C}[O +#define OFFSET_REG_TM0CNT_L 0x100 +#define OFFSET_REG_TM0CNT_H 0x102 +#define OFFSET_REG_TM1CNT 0x104 // ^C}[P +#define OFFSET_REG_TM1CNT_L 0x104 +#define OFFSET_REG_TM1CNT_H 0x106 +#define OFFSET_REG_TM2CNT 0x108 // ^C}[Q +#define OFFSET_REG_TM2CNT_L 0x108 +#define OFFSET_REG_TM2CNT_H 0x10a +#define OFFSET_REG_TM3CNT 0x10c // ^C}[R +#define OFFSET_REG_TM3CNT_L 0x10c +#define OFFSET_REG_TM3CNT_H 0x10e + + +#define OFFSET_REG_KEYINPUT 0x130 // L[ +#define OFFSET_REG_KEYCNT 0x132 // L[Rg[ + +#define OFFSET_REG_R0CNT 0x134 // ėp|[gO +#define OFFSET_REG_R1CNT 0x138 // P + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_MEMORY_MAP_H diff --git a/trunk/IrisMainp/include/IrisMemoryMapArm.s b/trunk/IrisMainp/include/IrisMemoryMapArm.s new file mode 100644 index 0000000..ee1495a --- /dev/null +++ b/trunk/IrisMainp/include/IrisMemoryMapArm.s @@ -0,0 +1,704 @@ +;======================================================================= +; IrisMemoryMapArm.s +; IRIS }bv萔iARMASMpj +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_MEMORY_MAP_H + ELSE +_IRIS_MEMORY_MAP_H * 1 + + + INCLUDE IrisTargetArm.s + INCLUDE IrisDefineArm.s + + +;----------------------------------------------------------------------- +; E}bv +;----------------------------------------------------------------------- + +SHARED_WORK * 0x027ff000 ; botԋL[N̈ +SHARED_WORK_END * 0x02800000 + + IF :DEF: NDEBUG +SUBP_PRV * 0x02380000 ; TuvZbTL̈i[Xo[Wj + ELSE + IF :DEF: MMEM_4M +SUBP_PRV * 0x02300000 ; ifobOo[WCSl{́j + ELSE +SUBP_PRV * 0x02600000 ; ifobOo[WCWl{́j + ENDIF + ENDIF +SUBP_PRV_END * SHARED_WORK + + + IF :DEF: IRIS_TEG :LOR: :DEF: IRIS_TS +ITCM * 0x01ff8000 ; ߂sbl +ITCM_END * (ITCM + 0x8000) +DTCM * SUBP_PRV ; f[^sblisdf{[hȍ~j + ELSE +DTCM * 0x8000 ; iubh{[hpj + ENDIF +DTCM_END * (DTCM + 0x4000) + +INTR_VECTOR_BUF * (DTCM_END - 0x4) ; 荞ݕAhX +INTR_CHECK_BUF * (DTCM_END - 0x8) ; 荞݃`FbN + +SEND_FIFO_LOCK_BUF * (DTCM_END - 0x10) ; botԑMehenEbNobt@ +TIMER3_LOCK_BUF * (DTCM_END - 0x12) ; ^C}[REbNobt@ +TIMER2_LOCK_BUF * (DTCM_END - 0x14) ; ^C}[Q +TIMER1_LOCK_BUF * (DTCM_END - 0x16) ; ^C}[P +TIMER0_LOCK_BUF * (DTCM_END - 0x18) ; ^C}[O +DMA3_LOCK_BUF * (DTCM_END - 0x1a) ; cl`REbNobt@ +DMA2_LOCK_BUF * (DTCM_END - 0x1c) ; cl`Q +DMA1_LOCK_BUF * (DTCM_END - 0x1e) ; cl`P +DMA0_LOCK_BUF * (DTCM_END - 0x20) ; cl`O + + +MAIN_MEM * 0x02000000 ; C +MAIN_MEM_END * (MAIN_MEM + 0x400000) +MAIN_MEM_EX_END * (MAIN_MEM + 0x800000) ;ig̍ŏIAhXj + +MAIN_MEM_CMD_AREA * (MAIN_MEM_EX_END - 0x2) ; CR}hsGAigp֎~GAj + +SHARED_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; L\[XEbNobt@ +SHARED_LOCK_BUF_END * (MAIN_MEM_EX_END - 0x10) + +INIT_LOCK_BUF * (MAIN_MEM_EX_END - 0x10) ; bNobt@ +CARTRIDGE_LOCK_BUF * (MAIN_MEM_EX_END - 0x18) ; J[gbWEbNobt@ +CARD_LOCK_BUF * (MAIN_MEM_EX_END - 0x20) ; J[hEbNobt@ +WRAM_BLOCK1_LOCK_BUF * (MAIN_MEM_EX_END - 0x28) ; bot[Nq`lEubNPEbNobt@ +WRAM_BLOCK0_LOCK_BUF * (MAIN_MEM_EX_END - 0x30) ; ubNOEbNobt@ +VRAM_D_LOCK_BUF * (MAIN_MEM_EX_END - 0x38) ; uq`l|cEbNobt@ +VRAM_C_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; bEbNobt@ + +FROM_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; TuCvZbT荞ݗvtOiQa~Wj +WM_FROM_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; CX}l[W\ +TO_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; CTuvZbT荞ݗvtOiQa~Wj +WM_TO_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; CX}l[W\ + +ROM_HEADER_BUF * (MAIN_MEM_EX_END - 0x200); qnlo^GAf[^Eobt@ + +DMA_CLEAR_DATA_BUF * (MAIN_MEM_EX_END - 0x210); cl`NAf[^Eobt@ibΉAp~\j + + +CPU_WRAM * 0x037f8000 ; bot[Nq`l +CPU_WRAM_END * (CPU_WRAM + 0x8000) +CPU_WRAM_BLOCK0 * 0x037f8000 ; ubNO +CPU_WRAM_BLOCK0_END * (CPU_WRAM_BLOCK0 + 0x4000) +CPU_WRAM_BLOCK1 * 0x037fc000 ; ubNP +CPU_WRAM_BLOCK1_END * (CPU_WRAM_BLOCK1 + 0x4000) + + +REG_BASE * 0x04000000 ; WX^Q +PLTT * 0x05000000 ; pbgq`l +PLTT_END * (PLTT + 0x400) +BG_PLTT * (PLTT + 0x0) ; afpbgq`l +BG_PLTT_END * (PLTT + 0x200) +OBJ_PLTT * (PLTT + 0x200) ; naipbgq`l +OBJ_PLTT_END * (PLTT + 0x400) +VRAM * 0x06000000 ; uq`l +BG_VRAM * (VRAM + 0x0) ; afLN^/XN[q`l +BG_VRAM_END * (VRAM + 0x80000) +OBJ_VRAM * (VRAM + 0x400000) ; naiLN^q`l +OBJ_VRAM_END * (VRAM + 0x440000) +LCDC_VRAM * (VRAM + 0x800000) ; kbcb|uq`l +LCDC_VRAM_A * (VRAM + 0x800000) +LCDC_VRAM_B * (VRAM + 0x820000) +LCDC_VRAM_C * (VRAM + 0x840000) +LCDC_VRAM_D * (VRAM + 0x860000) +LCDC_VRAM_E * (VRAM + 0x880000) +LCDC_VRAM_F * (VRAM + 0x890000) +LCDC_VRAM_G * (VRAM + 0x894000) +LCDC_VRAM_END * (VRAM + 0x898000) +OAM * 0x07000000 ; n`l +OAM_END * (OAM + 0x400) + +CARTRIDGE * 0x08000000 ; J[gbW +CTRDG_AD16_BANK0 * 0x08000000 ; J[gbW `cPUoX oNO +CTRDG_AD16_BANK0_END * 0x0a000000 +CTRDG_AD16_BANK1 * 0x0a000000 ; oNP +CTRDG_AD16_BANK1_END * 0x0c000000 +CTRDG_AD16_BANK2 * 0x0c000000 ; oNQ +CTRDG_AD16_BANK2_END * 0x0e000000 +CTRDG_DT8 * 0x0e000000 ; J[gbW Wf[^oX +CTRDG_DT8_END * 0x10000000 + +BIOS * 0xffff0000 ; ahnr +BIOS_END * (BIOS + 0x8000) + + +;----------------------------------------------------------------------- +; ETCY +;----------------------------------------------------------------------- + +SHARED_WORK_SIZE * (SHARED_WORK_END - SHARED_WORK) ; botԋL[N̈iSjaȏAQׂ̂TCYj +SUBP_PRV_SIZE * (SUBP_PRV_END - SUBP_PRV) ; TuvZbTL̈iRQjaȏAQׂ̂TCYj + +SHARED_LOCK_BUF_SIZE * (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) ; L\[XEbNobt@ + + +ITCM_SIZE * 0x8000 ; ߂sbl +DTCM_SIZE * 0x4000 ; f[^sbl +ICACHE_SIZE * 0x2000 ; ߃LbV +DCACHE_SIZE * 0x1000 ; f[^LbV + +CACHE_LINE_SIZE * 32 ; LbVC + +MAIN_MEM_SIZE * 0x400000 ; C +MAIN_MEM_EX_SIZE * 0x800000 ; igj + +CPU_WRAM_SIZE * 0x8000 ; bot[Nq`l v +CPU_WRAM_BLOCK0_SIZE * 0x4000 ; ubNO +CPU_WRAM_BLOCK1_SIZE * 0x4000 ; ubNP + +MROM_PAGE_SIZE * 512 ; }XNqnlEy[W + +PLTT_SIZE * (2*256*2) ; pbgq`l +BG_PLTT_SIZE * (2*256) ; afpbgq`l +OBJ_PLTT_SIZE * (2*256) ; naipbgq`l +BG_VRAM_SIZE * 0x80000 ; af|uq`l +OBJ_VRAM_SIZE * 0x40000 ; nai|uq`l +LCDC_VRAM_SIZE * 0x98000 ; kbcb|uq`l +VRAM_A_SIZE * 0x20000 ; uq`l|` +VRAM_B_SIZE * 0x20000 ; a +VRAM_C_SIZE * 0x20000 ; b +VRAM_D_SIZE * 0x20000 ; c +VRAM_E_SIZE * 0x10000 ; d +VRAM_F_SIZE * 0x4000 ; e +VRAM_G_SIZE * 0x4000 ; f +OAM_SIZE * (8*128) ; n`l + +CARTRIDGE_SIZE * 0x02000000 ; J[gbW +CTRDG_AD16_BANK_SIZE * 0x02000000 ; J[gbW `cPUoX oN +CTRDG_AD16_BANK0_SIZE * 0x02000000 ; oNO +CTRDG_AD16_BANK1_SIZE * 0x02000000 ; oNP +CTRDG_AD16_BANK2_SIZE * 0x02000000 ; oNQ +CTRDG_DT8_SIZE * 0x02000000 ; J[gbW Wf[^oX + +BIOS_SIZE * 0x8000 ; ahnr + + +;----------------------------------------------------------------------- +; WX^EAhX +;----------------------------------------------------------------------- + +REG_IME * (REG_BASE + 0x208) ; 荞݃}X^Cl[u +REG_IE * (REG_BASE + 0x210) ; 荞݋ +REG_IF * (REG_BASE + 0x214) ; 荞ݗv + + +REG_SUBPINTF * (REG_BASE + 0x180) ; TuvZbTC^tF[X +REG_SUBP_FIFO_CNT * (REG_BASE + 0x184) ; botԂehenRg[ +REG_SEND_FIFO * (REG_BASE + 0x188) ; Mehen +REG_RECV_FIFO * (REG_BASE + 0x100000) ; Mehen + +REG_EXMEMCNT * (REG_BASE + 0x204) ; ORg[ + +REG_POWCNT * (REG_BASE + 0x304) ; p[Rg[ + + +REG_DIVCNT * (REG_BASE + 0x280) ; Z Rg[ +REG_DIV_NUMER * (REG_BASE + 0x290) ; 폜 +REG_DIV_DENOM * (REG_BASE + 0x298) ; +REG_DIV_RESULT * (REG_BASE + 0x2a0) ; +REG_DIVREM_RESULT * (REG_BASE + 0x2a8) ; ] + +REG_SQRTCNT * (REG_BASE + 0x2b0) ; Z Rg[ +REG_SQRT_RESULT * (REG_BASE + 0x2b4) ; +REG_SQRT_PARAM * (REG_BASE + 0x2b8) ; p[^ + + +REG_DISPCNT * (REG_BASE + 0x0) ; \Rg[ +REG_DISPCNT_L * (REG_BASE + 0x0) +REG_DISPCNT_H * (REG_BASE + 0x2) +REG_DISP2DCNT * (REG_BASE + 0x0) ; Qc\Rg[ +REG_DISP3DCNT * (REG_BASE + 0x60) ; Rc\Rg[ + +REG_DISPSTAT * (REG_BASE + 0x4) ; \Xe[^X +REG_VCOUNT * (REG_BASE + 0x6) ; uJE^ +REG_GXSTAT * (REG_BASE + 0x600) ; WIgGWXe[^X + + +REG_VRAMCNT * (REG_BASE + 0x240) ; uq`lRg[ +REG_WRAMCNT * (REG_BASE + 0x247) ; [Nq`lRg[ +REG_WVRAMCNT * (REG_BASE + 0x244) ; uq`l d`f { [Nq`l Rg[ +REG_VRAM_A_CNT * (REG_BASE + 0x240) ; uq`l ` +REG_VRAM_B_CNT * (REG_BASE + 0x241) ; uq`l a +REG_VRAM_C_CNT * (REG_BASE + 0x242) ; uq`l b +REG_VRAM_D_CNT * (REG_BASE + 0x243) ; uq`l c +REG_VRAM_E_CNT * (REG_BASE + 0x244) ; uq`l d +REG_VRAM_F_CNT * (REG_BASE + 0x245) ; uq`l e +REG_VRAM_G_CNT * (REG_BASE + 0x246) ; uq`l f +REG_VRAM_H_CNT * (REG_BASE + 0x248) ; uq`l g +REG_VRAM_I_CNT * (REG_BASE + 0x249) ; uq`l h +REG_VRAM_AB_CNT * (REG_BASE + 0x240) ; uq`l `a +REG_VRAM_CD_CNT * (REG_BASE + 0x242) ; uq`l bc +REG_VRAM_EF_CNT * (REG_BASE + 0x244) ; uq`l de +REG_VRAM_G_W_CNT * (REG_BASE + 0x246) ; uq`l f { [Nq`l +REG_VRAM_ABCD_CNT * (REG_BASE + 0x240) ; uq`l ``c +REG_VRAM_EFG_W_CNT * (REG_BASE + 0x244) ; uq`l d`f { [Nq`l +REG_VRAM_HI_CNT * (REG_BASE + 0x248) ; uq`l gh + + + +REG_MASTER_BRIGHT * (REG_BASE + 0x6c) ; }X^[Px Rg[ +REG_DISPCAPCNT * (REG_BASE + 0x64) ; \Lv` Rg[ +REG_DISP_MMEM_FIFO * (REG_BASE + 0x68) ; C\ehen + + +REG_MOSAIC * (REG_BASE + 0x4c) ; UCN TCY + +REG_BLDCNT * (REG_BASE + 0x50) ; uh[h Rg[ +REG_BLDALPHA * (REG_BASE + 0x52) ; p[^ +REG_BLDY * (REG_BASE + 0x54) ; PxύX p[^ + +REG_WINCNT * (REG_BASE + 0x40) ; EChE Rg[ +REG_WIN0H * (REG_BASE + 0x40) ; EChEÖ +REG_WIN1H * (REG_BASE + 0x42) ; EChEP̈ +REG_WIN0V * (REG_BASE + 0x44) ; EChEÖ +REG_WIN1V * (REG_BASE + 0x46) ; EChEP̈ +REG_WININ * (REG_BASE + 0x48) ; EChERg[ +REG_WIN0 * (REG_BASE + 0x48) ; EChEORg[ +REG_WIN1 * (REG_BASE + 0x49) ; EChEPRg[ +REG_WIN01 * (REG_BASE + 0x48) ; EChEOEPRg[ +REG_WINOUT * (REG_BASE + 0x4a) ; EChEORg[ +REG_OBJWIN * (REG_BASE + 0x4b) ; naiEChERg[ +REG_WINOUTOBJ * (REG_BASE + 0x4a) ; EChEOEnaiEChERg[ + + +REG_BGCNT * (REG_BASE + 0x8) ; afRg[ +REG_BG0CNT * (REG_BASE + 0x8) ; afORg[ +REG_BG1CNT * (REG_BASE + 0xa) ; afPRg[ +REG_BG2CNT * (REG_BASE + 0xc) ; afQRg[ +REG_BG3CNT * (REG_BASE + 0xe) ; afRRg[ +REG_BGOFS * (REG_BASE + 0x10) ; afItZbg +REG_BG0HOFS * (REG_BASE + 0x10) ; afOgItZbg +REG_BG0VOFS * (REG_BASE + 0x12) ; afOuItZbg +REG_BG1HOFS * (REG_BASE + 0x14) ; afPgItZbg +REG_BG1VOFS * (REG_BASE + 0x16) ; afPuItZbg +REG_BG2HOFS * (REG_BASE + 0x18) ; afQgItZbg +REG_BG2VOFS * (REG_BASE + 0x1a) ; afQuItZbg +REG_BG3HOFS * (REG_BASE + 0x1c) ; afRgItZbg +REG_BG3VOFS * (REG_BASE + 0x1e) ; afRuItZbg +REG_BG2AFFINE * (REG_BASE + 0x20) ; afQAtBϊp[^Q +REG_BG2PA * (REG_BASE + 0x20) ; afQCwW +REG_BG2PB * (REG_BASE + 0x22) ; afQ wW +REG_BG2PC * (REG_BASE + 0x24) ; afQCxW +REG_BG2PD * (REG_BASE + 0x26) ; afQ xW +REG_BG2X * (REG_BASE + 0x28) ; afQX^[gwW +REG_BG2Y * (REG_BASE + 0x2c) ; afQX^[gxW +REG_BG3AFFINE * (REG_BASE + 0x30) ; afRAtBϊp[^Q +REG_BG3PA * (REG_BASE + 0x30) ; afRCwW +REG_BG3PB * (REG_BASE + 0x32) ; afR wW +REG_BG3PC * (REG_BASE + 0x34) ; afRCxW +REG_BG3PD * (REG_BASE + 0x36) ; afR xW +REG_BG3X * (REG_BASE + 0x38) ; afRX^[gwW +REG_BG3Y * (REG_BASE + 0x3c) ; afRX^[gxW + + + +REG_GXFIFO * (REG_BASE + 0x400) ; WIgehen + +REG_LISTRAM_COUNT * (REG_BASE + 0x604) ; |SXgq`lJE^ +REG_VTXRAM_COUNT * (REG_BASE + 0x606) ; _q`lJE^ +REG_RDLINES_COUNT * (REG_BASE + 0x320) ; _Oς݃CJE^ + + +REG_SWAP_BUFFERS * (REG_BASE + 0x540) ; _OGWQƃf[^Q̃Xbv + +REG_VIEWPORT * (REG_BASE + 0x580) ; E + +REG_MTX_MODE * (REG_BASE + 0x440) ; s񃂁[h + +REG_MTX_PUSH * (REG_BASE + 0x444) ; svbV +REG_MTX_POP * (REG_BASE + 0x448) ; s|bv +REG_MTX_STORE * (REG_BASE + 0x44c) ; sXgA +REG_MTX_RESTORE * (REG_BASE + 0x450) ; s񃊃XgA + +REG_MTX_IDENTITY * (REG_BASE + 0x454) ; Pʍs +REG_MTX_LOAD_4x4 * (REG_BASE + 0x458) ; s񃍁[hiSSj +REG_MTX_LOAD_4x3 * (REG_BASE + 0x45c) ; iSRj +REG_MTX_MULT_4x4 * (REG_BASE + 0x460) ; sZ iSSj +REG_MTX_MULT_4x3 * (REG_BASE + 0x464) ; iSRj +REG_MTX_MULT_3x3 * (REG_BASE + 0x468) ; iRRj +REG_MTX_SCALE * (REG_BASE + 0x46c) ; XP[sZiPRj +REG_MTX_TRANS * (REG_BASE + 0x470) ; ړsZiPRj + +REG_CLIPMTX_RESULT * (REG_BASE + 0x640) ; JgNbvWs ǂݍ +REG_VECMTX_RESULT * (REG_BASE + 0x680) ; JgxNgs ǂݍ + + +REG_LIGHT_VECTOR * (REG_BASE + 0x4c8) ; CgxNg +REG_LIGHT_COLOR * (REG_BASE + 0x4cc) ; CgJ[ + +REG_MATERIAL_COLOR * (REG_BASE + 0x4c0) ; }eAJ[ +REG_DIF_AMB * (REG_BASE + 0x4c0) ; gU ‹ +REG_SPE_EMI * (REG_BASE + 0x4c4) ; ˌ ˌ +REG_SHININESS * (REG_BASE + 0x4d0) ; ʔˋPx + + +REG_POLYGON_ATTR * (REG_BASE + 0x4a4) ; |S + +REG_TEX_PARAM * (REG_BASE + 0x4a8) ; eNX`p[^ +REG_TEXIMAGE_PARAM * (REG_BASE + 0x4a8) +REG_TEXPLTT_BASE * (REG_BASE + 0x4ac) + +REG_BEGIN_VTXS * (REG_BASE + 0x500) ; _Xg X^[g +REG_END_VTXS * (REG_BASE + 0x504) ; _Xg Gh + +REG_COLOR * (REG_BASE + 0x480) ; _J[ +REG_NORMAL * (REG_BASE + 0x484) ; _@ +REG_TEXCOORD * (REG_BASE + 0x488) ; _eNX`W +REG_VTX_16 * (REG_BASE + 0x48c) ; _16bitW +REG_VTX_10 * (REG_BASE + 0x490) ; _10bitW +REG_VTX_XY * (REG_BASE + 0x494) ; _16bitXYW +REG_VTX_XZ * (REG_BASE + 0x498) ; _16bitXZW +REG_VTX_YZ * (REG_BASE + 0x49c) ; _16bitYZW +REG_VTX_DIFF * (REG_BASE + 0x4a0) ; _16bitWl + +REG_BOX_TEST * (REG_BASE + 0x5c0) ; {bNXeXg +REG_POS_TEST * (REG_BASE + 0x5c4) ; ʒueXg +REG_VEC_TEST * (REG_BASE + 0x5c8) ; xNgeXg + +REG_POS_RESULT * (REG_BASE + 0x620) ; ʒueXg +REG_VEC_RESULT * (REG_BASE + 0x630) ; xNgeXg + + +REG_CLEAR_COLOR_ATTR * (REG_BASE + 0x350) ; J[obt@ NAl +REG_CLEAR_DEPTH * (REG_BASE + 0x354) ; yobt@ NAl +REG_CLRIMAGE_OFFSET * (REG_BASE + 0x356) ; NAC[W ItZbg + +REG_EDGE_COLOR * (REG_BASE + 0x330) ; GbWJ[ + +REG_FOG_COLOR * (REG_BASE + 0x358) ; tHO J[ +REG_FOG_OFFSET * (REG_BASE + 0x35c) ; tHO ItZbg +REG_FOG_TABLE * (REG_BASE + 0x360) ; tHOZxe[u + +REG_TOON_TABLE * (REG_BASE + 0x380) ; gD[VF[fBOEe[u + +REG_ALPHA_TEST_REF * (REG_BASE + 0x340) ; At@eXgQƒl + +REG_DISP_1DOT_DEPTH * (REG_BASE + 0x610) ; Phbg|S`Jnyl + + + +REG_DMA0 * (REG_BASE + 0xb0) ; cl`O +REG_DMA0SAD * (REG_BASE + 0xb0) +REG_DMA0DAD * (REG_BASE + 0xb4) +REG_DMA0CNT * (REG_BASE + 0xb8) +REG_DMA0CNT_L * (REG_BASE + 0xb8) +REG_DMA0CNT_H * (REG_BASE + 0xba) +REG_DMA1 * (REG_BASE + 0xbc) ; cl`P +REG_DMA1SAD * (REG_BASE + 0xbc) +REG_DMA1DAD * (REG_BASE + 0xc0) +REG_DMA1CNT * (REG_BASE + 0xc4) +REG_DMA1CNT_L * (REG_BASE + 0xc4) +REG_DMA1CNT_H * (REG_BASE + 0xc6) +REG_DMA2 * (REG_BASE + 0xc8) ; cl`Q +REG_DMA2SAD * (REG_BASE + 0xc8) +REG_DMA2DAD * (REG_BASE + 0xcc) +REG_DMA2CNT * (REG_BASE + 0xd0) +REG_DMA2CNT_L * (REG_BASE + 0xd0) +REG_DMA2CNT_H * (REG_BASE + 0xd2) +REG_DMA3 * (REG_BASE + 0xd4) ; cl`R +REG_DMA3SAD * (REG_BASE + 0xd4) +REG_DMA3DAD * (REG_BASE + 0xd8) +REG_DMA3CNT * (REG_BASE + 0xdc) +REG_DMA3CNT_L * (REG_BASE + 0xdc) +REG_DMA3CNT_H * (REG_BASE + 0xde) + IF :DEF: IRIS_TS +REG_DMA0_CLR_DATA * (REG_BASE + 0xe0) ; cl` NAf[^ +REG_DMA1_CLR_DATA * (REG_BASE + 0xe4) +REG_DMA2_CLR_DATA * (REG_BASE + 0xe8) +REG_DMA3_CLR_DATA * (REG_BASE + 0xec) + ELSE +REG_DMA0_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0x0) +REG_DMA1_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0x4) +REG_DMA2_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0x8) +REG_DMA3_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0xc) + ENDIF + + +REG_TM0CNT * (REG_BASE + 0x100) ; ^C}[O +REG_TM0CNT_L * (REG_BASE + 0x100) +REG_TM0CNT_H * (REG_BASE + 0x102) +REG_TM1CNT * (REG_BASE + 0x104) ; ^C}[P +REG_TM1CNT_L * (REG_BASE + 0x104) +REG_TM1CNT_H * (REG_BASE + 0x106) +REG_TM2CNT * (REG_BASE + 0x108) ; ^C}[Q +REG_TM2CNT_L * (REG_BASE + 0x108) +REG_TM2CNT_H * (REG_BASE + 0x10a) +REG_TM3CNT * (REG_BASE + 0x10c) ; ^C}[R +REG_TM3CNT_L * (REG_BASE + 0x10c) +REG_TM3CNT_H * (REG_BASE + 0x10e) + + +REG_KEYINPUT * (REG_BASE + 0x130) ; L[ +REG_KEYCNT * (REG_BASE + 0x132) ; L[Rg[ + +REG_R0CNT * (REG_BASE + 0x134) ; ėp|[gO +REG_R1CNT * (REG_BASE + 0x138) ; P + + +;----------------------------------------------------------------------- +; WX^EItZbg +;----------------------------------------------------------------------- + +OFFSET_REG_IME * 0x208 ; 荞݃}X^Cl[u +OFFSET_REG_IE * 0x210 ; 荞݋ +OFFSET_REG_IF * 0x214 ; 荞ݗv + +OFFSET_REG_SUBPINTF * 0x180 ; TuvZbTC^tF[X +OFFSET_REG_SUBP_FIFO_CNT * 0x184 ; botԂehenRg[ +OFFSET_REG_SEND_FIFO * 0x188 ; Mehen +OFFSET_REG_RECV_FIFO * 0x100000 ; Mehen + +OFFSET_REG_EXMEMCNT * 0x204 ; ORg[ + +OFFSET_REG_POWCNT * 0x304 ; p[Rg[ + + +OFFSET_REG_DIVCNT * 0x280 ; Z Rg[ +OFFSET_REG_DIV_NUMER * 0x290 ; 폜 +OFFSET_REG_DIV_DENOM * 0x298 ; +OFFSET_REG_DIV_RESULT * 0x2a0 ; +OFFSET_REG_DIVREM_RESULT * 0x2a8 ; ] + +OFFSET_REG_SQRTCNT * 0x2b0 ; Z Rg[ +OFFSET_REG_SQRT_RESULT * 0x2b4 ; +OFFSET_REG_SQRT_PARAM * 0x2b8 ; p[^ + + +OFFSET_REG_DISPCNT * 0x0 ; \Rg[ +OFFSET_REG_DISPCNT_L * 0x0 +OFFSET_REG_DISPCNT_H * 0x2 +OFFSET_REG_DISP2DCNT * 0x0 ; Qc\Rg[ +OFFSET_REG_DISP3DCNT * 0x60 ; Rc\Rg[ + +OFFSET_REG_DISPSTAT * 0x4 ; \Xe[^X +OFFSET_REG_VCOUNT * 0x6 ; uJE^ +OFFSET_REG_GXSTAT * 0x600 ; WIgGWXe[^X + + +OFFSET_REG_VRAMCNT * 0x240 ; uq`lRg[ +OFFSET_REG_WRAMCNT * 0x247 ; [Nq`lRg[ +OFFSET_REG_WVRAMCNT * 0x244 ; uq`l d`f { [Nq`l Rg[ +OFFSET_REG_VRAM_A_CNT * 0x240 ; uq`l ` +OFFSET_REG_VRAM_B_CNT * 0x241 ; uq`l a +OFFSET_REG_VRAM_C_CNT * 0x242 ; uq`l b +OFFSET_REG_VRAM_D_CNT * 0x243 ; uq`l c +OFFSET_REG_VRAM_E_CNT * 0x244 ; uq`l d +OFFSET_REG_VRAM_F_CNT * 0x245 ; uq`l e +OFFSET_REG_VRAM_G_CNT * 0x246 ; uq`l f +OFFSET_REG_VRAM_H_CNT * 0x248 ; uq`l g +OFFSET_REG_VRAM_I_CNT * 0x249 ; uq`l h +OFFSET_REG_VRAM_AB_CNT * 0x240 ; uq`l `a +OFFSET_REG_VRAM_CD_CNT * 0x242 ; uq`l bc +OFFSET_REG_VRAM_EF_CNT * 0x244 ; uq`l de +OFFSET_REG_VRAM_G_W_CNT * 0x246 ; uq`l f { [Nq`l +OFFSET_REG_VRAM_ABCD_CNT * 0x240 ; uq`l ``c +OFFSET_REG_VRAM_EFG_W_CNT * 0x244 ; uq`l d`f { [Nq`l +OFFSET_REG_VRAM_HI_CNT * 0x248 ; uq`l gh + + +OFFSET_REG_MASTER_BRIGHT * 0x6c ; }X^[Px Rg[ +OFFSET_REG_DISPCAPCNT * 0x64 ; \Lv` Rg[ +OFFSET_REG_DISP_MMEM_FIFO * 0x68 ; C\ehen +OFFSET_REG_TVOUTCNT * 0x70 ; ero̓Rg[ + + +OFFSET_REG_MOSAIC * 0x4c ; UCN TCY + +OFFSET_REG_BLDCNT * 0x50 ; uh[h Rg[ +OFFSET_REG_BLDALPHA * 0x52 ; p[^ +OFFSET_REG_BLDY * 0x54 ; PxύX p[^ + +OFFSET_REG_WINCNT * 0x40 ; EChE Rg[ +OFFSET_REG_WIN0H * 0x40 ; EChEÖ +OFFSET_REG_WIN1H * 0x42 ; EChEP̈ +OFFSET_REG_WIN0V * 0x44 ; EChEÖ +OFFSET_REG_WIN1V * 0x46 ; EChEP̈ +OFFSET_REG_WININ * 0x48 ; EChERg[ +OFFSET_REG_WIN0 * 0x48 ; EChEORg[ +OFFSET_REG_WIN1 * 0x49 ; EChEPRg[ +OFFSET_REG_WIN01 * 0x48 ; EChEOEPRg[ +OFFSET_REG_WINOUT * 0x4a ; EChEORg[ +OFFSET_REG_OBJWIN * 0x4b ; naiEChERg[ +OFFSET_REG_WINOUTOBJ * 0x4a ; EChEOEnaiEChERg[ + + +OFFSET_REG_BGCNT * 0x8 ; afRg[ +OFFSET_REG_BG0CNT * 0x8 ; afORg[ +OFFSET_REG_BG1CNT * 0xa ; afPRg[ +OFFSET_REG_BG2CNT * 0xc ; afQRg[ +OFFSET_REG_BG3CNT * 0xe ; afRRg[ +OFFSET_REG_BGOFS * 0x10 ; afItZbg +OFFSET_REG_BG0HOFS * 0x10 ; afOgItZbg +OFFSET_REG_BG0VOFS * 0x12 ; afOuItZbg +OFFSET_REG_BG1HOFS * 0x14 ; afPgItZbg +OFFSET_REG_BG1VOFS * 0x16 ; afPuItZbg +OFFSET_REG_BG2HOFS * 0x18 ; afQgItZbg +OFFSET_REG_BG2VOFS * 0x1a ; afQuItZbg +OFFSET_REG_BG3HOFS * 0x1c ; afRgItZbg +OFFSET_REG_BG3VOFS * 0x1e ; afRuItZbg +OFFSET_REG_BG2AFFINE * 0x20 ; afQAtBϊp[^Q +OFFSET_REG_BG2PA * 0x20 ; afQCwW +OFFSET_REG_BG2PB * 0x22 ; afQ wW +OFFSET_REG_BG2PC * 0x24 ; afQCxW +OFFSET_REG_BG2PD * 0x26 ; afQ xW +OFFSET_REG_BG2X * 0x28 ; afQX^[gwW +OFFSET_REG_BG2Y * 0x2c ; afQX^[gxW +OFFSET_REG_BG3AFFINE * 0x30 ; afRAtBϊp[^Q +OFFSET_REG_BG3PA * 0x30 ; afRCwW +OFFSET_REG_BG3PB * 0x32 ; afR wW +OFFSET_REG_BG3PC * 0x34 ; afRCxW +OFFSET_REG_BG3PD * 0x36 ; afR xW +OFFSET_REG_BG3X * 0x38 ; afRX^[gwW +OFFSET_REG_BG3Y * 0x3c ; afRX^[gxW + + + +OFFSET_REG_GXFIFO * 0x400 ; WIgehen + +OFFSET_REG_LISTRAM_COUNT * 0x604 ; |SXgq`lJE^ +OFFSET_REG_VTXRAM_COUNT * 0x606 ; _q`lJE^ +OFFSET_REG_RDLINES_COUNT * 0x320 ; _Oς݃CJE^ + + +OFFSET_REG_SWAP_BUFFERS * 0x540 ; _OGWQƃf[^Q̃Xbv + +OFFSET_REG_VIEWPORT * 0x580 ; E + +OFFSET_REG_MTX_MODE * 0x440 ; s񃂁[h + +OFFSET_REG_MTX_PUSH * 0x444 ; svbV +OFFSET_REG_MTX_POP * 0x448 ; s|bv +OFFSET_REG_MTX_STORE * 0x44c ; sXgA +OFFSET_REG_MTX_RESTORE * 0x450 ; s񃊃XgA + +OFFSET_REG_MTX_IDENTITY * 0x454 ; Pʍs +OFFSET_REG_MTX_LOAD_4x4 * 0x458 ; s񃍁[hiSSj +OFFSET_REG_MTX_LOAD_4x3 * 0x45c ; iSRj +OFFSET_REG_MTX_MULT_4x4 * 0x460 ; sZ iSSj +OFFSET_REG_MTX_MULT_4x3 * 0x464 ; iSRj +OFFSET_REG_MTX_MULT_3x3 * 0x468 ; iRRj +OFFSET_REG_MTX_SCALE * 0x46c ; XP[sZiPRj +OFFSET_REG_MTX_TRANS * 0x470 ; ړsZiPRj + +OFFSET_REG_CLIPMTX_RESULT * 0x640 ; JgNbvWs ǂݍ +OFFSET_REG_VECMTX_RESULT * 0x680 ; JgxNgs ǂݍ + + +OFFSET_REG_LIGHT_VECTOR * 0x4c8 ; CgxNg +OFFSET_REG_LIGHT_COLOR * 0x4cc ; CgJ[ + +OFFSET_REG_MATERIAL_COLOR * 0x4c0 ; }eAJ[ +OFFSET_REG_DIF_AMB * 0x4c0 ; gU ‹ +OFFSET_REG_SPE_EMI * 0x4c4 ; ˌ ˌ +OFFSET_REG_SHININESS * 0x4d0 ; ʔˋPx + + +OFFSET_REG_POLYGON_ATTR * 0x4a4 ; |S + +OFFSET_REG_TEX_PARAM * 0x4a8 ; eNX`p[^ +OFFSET_REG_TEXIMAGE_PARAM * 0x4a8 +OFFSET_REG_TEXPLTT_BASE * 0x4ac + +OFFSET_REG_BEGIN_VTXS * 0x500 ; _Xg X^[g +OFFSET_REG_END_VTXS * 0x504 ; _Xg Gh + +OFFSET_REG_COLOR * 0x480 ; _J[ +OFFSET_REG_NORMAL * 0x484 ; _@ +OFFSET_REG_TEXCOORD * 0x488 ; _eNX`W +OFFSET_REG_VTX_16 * 0x48c ; _16bitW +OFFSET_REG_VTX_10 * 0x490 ; _10bitW +OFFSET_REG_VTX_XY * 0x494 ; _16bitXYW +OFFSET_REG_VTX_XZ * 0x498 ; _16bitXZW +OFFSET_REG_VTX_YZ * 0x49c ; _16bitYZW +OFFSET_REG_VTX_DIFF * 0x4a0 ; _16bitWl + +OFFSET_REG_BOX_TEST * 0x5c0 ; {bNXeXg +OFFSET_REG_POS_TEST * 0x5c4 ; ʒueXg +OFFSET_REG_VEC_TEST * 0x5c8 ; xNgeXg + +OFFSET_REG_POS_RESULT * 0x620 ; ʒueXg +OFFSET_REG_VEC_RESULT * 0x630 ; xNgeXg + + +OFFSET_REG_CLEAR_COLOR_ATTR * 0x350 ; J[obt@ NAl +OFFSET_REG_CLEAR_DEPTH * 0x354 ; yobt@ NAl +OFFSET_REG_CLRIMAGE_OFFSET * 0x356 ; NAC[W ItZbg + +OFFSET_REG_EDGE_COLOR * 0x330 ; GbWJ[ + +OFFSET_REG_FOG_COLOR * 0x358 ; tHO J[ +OFFSET_REG_FOG_OFFSET * 0x35c ; tHO ItZbg +OFFSET_REG_FOG_TABLE * 0x360 ; tHOZxe[u + +OFFSET_REG_TOON_TABLE * 0x380 ; gD[VF[fBOEe[u + +OFFSET_REG_ALPHA_TEST_REF * 0x340 ; At@eXgQƒl + +OFFSET_REG_DISP_1DOT_DEPTH * 0x610 ; Phbg|S`Jnyl + + + +OFFSET_REG_DMA0 * 0xb0 ; cl`O +OFFSET_REG_DMA0SAD * 0xb0 +OFFSET_REG_DMA0DAD * 0xb4 +OFFSET_REG_DMA0CNT * 0xb8 +OFFSET_REG_DMA0CNT_L * 0xb8 +OFFSET_REG_DMA0CNT_H * 0xba +OFFSET_REG_DMA1 * 0xbc ; cl`P +OFFSET_REG_DMA1SAD * 0xbc +OFFSET_REG_DMA1DAD * 0xc0 +OFFSET_REG_DMA1CNT * 0xc4 +OFFSET_REG_DMA1CNT_L * 0xc4 +OFFSET_REG_DMA1CNT_H * 0xc6 +OFFSET_REG_DMA2 * 0xc8 ; cl`Q +OFFSET_REG_DMA2SAD * 0xc8 +OFFSET_REG_DMA2DAD * 0xcc +OFFSET_REG_DMA2CNT * 0xd0 +OFFSET_REG_DMA2CNT_L * 0xd0 +OFFSET_REG_DMA2CNT_H * 0xd2 +OFFSET_REG_DMA3 * 0xd4 ; cl`R +OFFSET_REG_DMA3SAD * 0xd4 +OFFSET_REG_DMA3DAD * 0xd8 +OFFSET_REG_DMA3CNT * 0xdc +OFFSET_REG_DMA3CNT_L * 0xdc +OFFSET_REG_DMA3CNT_H * 0xde + IF :DEF: IRIS_TS +OFFSET_REG_DMA0_CLR_DATA * 0xe0 ; cl` NAf[^ +OFFSET_REG_DMA1_CLR_DATA * 0xe4 +OFFSET_REG_DMA2_CLR_DATA * 0xe8 +OFFSET_REG_DMA3_CLR_DATA * 0xec + ENDIF + + +OFFSET_REG_TM0CNT * 0x100 ; ^C}[O +OFFSET_REG_TM0CNT_L * 0x100 +OFFSET_REG_TM0CNT_H * 0x102 +OFFSET_REG_TM1CNT * 0x104 ; ^C}[P +OFFSET_REG_TM1CNT_L * 0x104 +OFFSET_REG_TM1CNT_H * 0x106 +OFFSET_REG_TM2CNT * 0x108 ; ^C}[Q +OFFSET_REG_TM2CNT_L * 0x108 +OFFSET_REG_TM2CNT_H * 0x10a +OFFSET_REG_TM3CNT * 0x10c ; ^C}[R +OFFSET_REG_TM3CNT_L * 0x10c +OFFSET_REG_TM3CNT_H * 0x10e + + +OFFSET_REG_KEYINPUT * 0x130 ; L[ +OFFSET_REG_KEYCNT * 0x132 ; L[Rg[ + +OFFSET_REG_R0CNT * 0x134 ; ėp|[gO +OFFSET_REG_R1CNT * 0x138 ; P + + + + ENDIF ; _IRIS_MEMORY_MAP_H + + END + diff --git a/trunk/IrisMainp/include/IrisOS.h b/trunk/IrisMainp/include/IrisOS.h new file mode 100644 index 0000000..ea937d7 --- /dev/null +++ b/trunk/IrisMainp/include/IrisOS.h @@ -0,0 +1,1221 @@ +//==================================================================== +// IrisOS.h +// OSCu +// +// Copyright (C) 2003-2004 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_OS_H +#define _IRIS_OS_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + + +//====================================================================== +// bNϐ +// +//EJ[h^J[gbW^botԋL[Nq`l^uq`l|b^c +// Ȃǂ̂botԂł̋LX[XAbotԑMehen ̐L\[X +// ̔r䂽߂ɂ̊֐gpB +//====================================================================== + +// bNhc + +#define OS_UNLOCK_ID 0 // bNϐbNĂȂꍇ̂hc +#define OS_MAINP_LOCKED_FLAG 0x40 // CvZbTɂ郍bNmFtO +#define OS_MAINP_LOCK_ID_START 0x40 // CvZbTpbNhc̊蓖ĊJnԍ +#define OS_MAINP_LOCK_ID_END 0x6f // 蓖ďIԍ +#define OS_MAINP_DBG_LOCK_ID 0x70 // fobK\ԍ +#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // VXe\ԍ +#define OS_SUBP_LOCKED_FLAG 0x80 // TuvZbTɂ郍bNmFtO +#define OS_SUBP_LOCK_ID_START 0x80 // TuvZbTpbNhc̊蓖ĊJnԍ +#define OS_SUBP_LOCK_ID_END 0xaf // 蓖ďIԍ +#define OS_SUBP_DBG_LOCK_ID 0xb0 // fobK\ԍ +#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // VXe\ԍ + +#define OS_LOCK_SUCCESS 0 // bN +#define OS_LOCK_ERROR -1 // bNG[ + +#define OS_UNLOCK_SUCCESS 0 // bN +#define OS_UNLOCK_ERROR -2 // bNG[ + +#define OS_LOCK_FREE 0 // bN + +#define OS_LOCK_ID_ERROR -3 // bNhcG[ + + +// bNϐ\ + +typedef struct { + u32 lockFlag; // bNtOisW[IDi[j + u16 ownerID; // 擾W[ID + u16 extension; // g +} LockWord; +typedef vl LockWord vLockWord; + +typedef struct { + u8 lockFlag; // bNtOisW[IDi[j + u8 ownerID; // 擾W[ID +} LockByte; +typedef vl LockByte vLockByte; + + +//---------------------------------------------------------------------- +// VXebNϐƋL\[XEANZX̏ +// +//EVXebNϐAL\[X̃ftHg̃ANZX +// TuvZbTɓn܂B +// +//EF Ȃ +// +//E߂lFȂ +// +//J[gbWr̈̓fobKgp邽߃NA܂B +//---------------------------------------------------------------------- + +void OS_InitLock(void); + +//---------------------------------------------------------------------- +// bNID̊l +// +//EbNϐ֐ݒ肷IDl܂B +// +//EF Ȃ +// +//E߂lF +// 0x40 ` 0x6f bNID +// OS_LOCK_ID_ERROR bNIDls +// +//ID48ނ܂ł蓖Ă邱Ƃł܂B +// W[ɂĕ̃bNϐ𐧌䂷ꍇ +// ł邾1‚IDgp悤ɂĉB +//---------------------------------------------------------------------- + +s32 OS_GetLockID(void); + + +//---------------------------------------------------------------------- +// XsbNi[h^oCgj +// +//EvZbTԂ⃂W[ԂŋL\[Xr䂷邽߂ +// bNϐ̃XsbNs܂B +//EbN܂Ŏs܂B +//EvZbTԂ̋L\[X͕KbNɎgpĉB +//EvZbTL̃\[X̓^C~OIɒł̂ł +// bNȂĂ\܂B +// L\[X̓fobOɌ肵ăbN邱Ƃł܂B +// +//EF +// lockID bNID +// lockp bNϐ̃|C^ +// CtrlFuncp \[X֐̃|C^ +// +//E߂lF +// OS_LOCK_SUCCESS bN +// OS_LOCK_ID_ERROR bNIDG[ +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_LockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_LockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void)); +s32 OS_LockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void)); + + +s32 OS_LockCard(u32 lockID); // J[h +s32 OS_LockCartridge(u32 lockID); // J[gbW +s32 OS_LockWramBlock0(u32 lockID); // bot[Nq`lEubNO +s32 OS_LockWramBlock1(u32 lockID); // bot[Nq`lEubNP +s32 OS_LockVramC(u32 lockID); // uq`l|b +s32 OS_LockVramD(u32 lockID); // uq`l|c + +s32 OS_LockSendFifo(u32 lockID); // botԑMehen +s32 OS_LockDma0(u32 lockID); // cl`O +s32 OS_LockDma1(u32 lockID); // cl`P +s32 OS_LockDma2(u32 lockID); // cl`Q +s32 OS_LockDma3(u32 lockID); // cl`R +s32 OS_LockTimer0(u32 lockID); // ^C}[O +s32 OS_LockTimer1(u32 lockID); // ^C}[P +s32 OS_LockTimer2(u32 lockID); // ^C}[Q +s32 OS_LockTimer3(u32 lockID); // ^C}[R + + +//---------------------------------------------------------------------- +// bN̉i[h^oCgj +// +//EbNAL\[X̃ANZXTuvZbTɓn܂B +//EbNĂȂW[sꍇɂ͉ꂸA +// OS_UNLOCK_ERROR Ԃ܂B +// +//EF +// lockID bNID +// lockp bNϐ̃|C^ +// CtrlFuncp \[X֐̃|C^ +// +//E߂lF +// bNiOɊi[ĂIDj +// OS_UNLOCK_ERROR bNG[ +// OS_LOCK_ID_ERROR bNIDG[ +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_UnLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_UnLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void)); +s32 OS_UnLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void)); + + +s32 OS_UnLockCard(u32 lockID); // J[h +s32 OS_UnLockCartridge(u32 lockID); // J[gbW +s32 OS_UnLockWramBlock0(u32 lockID); // bot[Nq`lEubNO +s32 OS_UnLockWramBlock1(u32 lockID); // bot[Nq`lEubNP +s32 OS_UnLockVramC(u32 lockID); // uq`l|b +s32 OS_UnLockVramD(u32 lockID); // uq`l|c + +s32 OS_UnLockSendFifo(u32 lockID); // botԑMehen +s32 OS_UnLockDma0(u32 lockID); // cl`O +s32 OS_UnLockDma1(u32 lockID); // cl`P +s32 OS_UnLockDma2(u32 lockID); // cl`Q +s32 OS_UnLockDma3(u32 lockID); // cl`R +s32 OS_UnLockTimer0(u32 lockID); // ^C}[O +s32 OS_UnLockTimer1(u32 lockID); // ^C}[P +s32 OS_UnLockTimer2(u32 lockID); // ^C}[Q +s32 OS_UnLockTimer3(u32 lockID); // ^C}[R + + +//---------------------------------------------------------------------- +// bN̎si[h^oCgj +// +//EP񂾂XsbNs܂B +//EvZbTԂ̋L\[X͕KbNɎgpĉB +//EvZbTL̃\[X̓^C~OIɒł̂ł +// bNȂĂ\܂B +// L\[X̓fobOɌ肵ăbN邱Ƃł܂B +// +//EF +// lockID bNID +// lockp bNϐ̃|C^ +// CtrlFuncp \[X֐̃|C^ +// +//E߂lF +// bNiOɊi[ĂIDj +// OS_LOCK_SUCCESS bN +// OS_LOCK_ID_ERROR bNIDG[ +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_TryLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_TryLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void)); +s32 OS_TryLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void)); + + +s32 OS_TryLockCard(u32 lockID); // J[h +s32 OS_TryLockCartridge(u32 lockID); // J[gbW +s32 OS_TryLockWramBlock0(u32 lockID); // bot[Nq`lEubNO +s32 OS_TryLockWramBlock1(u32 lockID); // bot[Nq`lEubNP +s32 OS_TryLockVramC(u32 lockID); // uq`l|b +s32 OS_TryLockVramD(u32 lockID); // uq`l|c + +s32 OS_TryLockSendFifo(u32 lockID); // botԑMehen +s32 OS_TryLockDma0(u32 lockID); // cl`O +s32 OS_TryLockDma1(u32 lockID); // cl`P +s32 OS_TryLockDma2(u32 lockID); // cl`Q +s32 OS_TryLockDma3(u32 lockID); // cl`R +s32 OS_TryLockTimer0(u32 lockID); // ^C}[O +s32 OS_TryLockTimer1(u32 lockID); // ^C}[P +s32 OS_TryLockTimer2(u32 lockID); // ^C}[Q +s32 OS_TryLockTimer3(u32 lockID); // ^C}[R + + +//---------------------------------------------------------------------- +// bNtO̓ǂݍ݁i[h^oCgj +// +//EbNtOǂݍ݂܂B +//EbNϐĂ邩ǂmF邱Ƃł܂B +// +//EF +// lockp bNϐ̃|C^ +// +//E߂lF +// 0 bNiOɊi[ĂIDj +// OS_LOCK_FREE bN +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_ReadLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_ReadLockWord(volatile LockWord *lockp); +s32 OS_ReadLockByte(volatile LockByte *lockp); + + +// J[h +#ifdef IRIS_TS +#define OS_ReadLockCard() OS_ReadLockWord((LockWord *)(CARD_LOCK_BUF)) +#else +#define OS_ReadLockCard() OS_ReadLockCartridge() // J[gbWőp +#endif + +// J[gbW +#define OS_ReadLockCartridge() OS_ReadLockWord((LockWord *)(CARTRIDGE_LOCK_BUF)) + +// bot[Nq`lEubNO +#define OS_ReadLockWramBlock0() OS_ReadLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF)) + +// bot[Nq`lEubNP +#define OS_ReadLockWramBlock1() OS_ReadLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF)) + +// uq`l|b +#define OS_ReadLockVramC() OS_ReadLockWord((LockWord *)(VRAM_C_LOCK_BUF)) + +// uq`l|c +#define OS_ReadLockVramD() OS_ReadLockWord((LockWord *)(VRAM_D_LOCK_BUF)) + + +// botԑMehen +#define OS_ReadLockSendFifo() OS_ReadLockByte((LockByte *)(SEND_FIFO_LOCK_BUF)) + +// cl`O +#define OS_ReadLockDma0() OS_ReadLockByte((LockByte *)(DMA0_LOCK_BUF)) + +// cl`P +#define OS_ReadLockDma1() OS_ReadLockByte((LockByte *)(DMA1_LOCK_BUF)) + +// cl`Q +#define OS_ReadLockDma2() OS_ReadLockByte((LockByte *)(DMA2_LOCK_BUF)) + +// cl`R +#define OS_ReadLockDma3() OS_ReadLockByte((LockByte *)(DMA3_LOCK_BUF)) + +// ^C}[O +#define OS_ReadLockTimer0() OS_ReadLockByte((LockByte *)(TIMER0_LOCK_BUF)) + +// ^C}[P +#define OS_ReadLockTimer1() OS_ReadLockByte((LockByte *)(TIMER1_LOCK_BUF)) + +// ^C}[Q +#define OS_ReadLockTimer2() OS_ReadLockByte((LockByte *)(TIMER2_LOCK_BUF)) + +// ^C}[R +#define OS_ReadLockTimer3() OS_ReadLockByte((LockByte *)(TIMER3_LOCK_BUF)) + + +//---------------------------------------------------------------------- +// bNϐ̏LW[ID̓ǂݍ݁i[h^oCgj +// +//EbNϐ̏LW[ID ǂݍ݂܂B +//EW[ID 0 ̏ꍇ͂̎_łǂ̃vZbT +// LĂ̂mFł܂B +//EL\[X̏ꍇ́uCvZbTLĂԁv +// ݂̂荞݂֎~邱ƂɂĈێ邱Ƃł܂B +// ̑̏Ԃ̓TuvZbTωĂ܂”\܂B +//ELW[ID 0 łĂbNϐĂƂ͌܂B +// +//EF +// lockp bNϐ̃|C^ +// +//E߂lF LW[ID +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_ReadOwnerOfLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_ReadOwnerOfLockWord(volatile LockWord *lockp); +s32 OS_ReadOwnerOfLockByte(volatile LockByte *lockp); + + +// J[h +#ifdef IRIS_TS +#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockWord((LockWord *)(CARD_LOCK_BUF)) +#else +#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockCartridge() // J[gbWőp +#endif + +// J[gbW +#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord((LockWord *)(CARTRIDGE_LOCK_BUF)) + +// bot[Nq`lEubNO +#define OS_ReadOwnerOfLockWramBlock0() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF)) + +// bot[Nq`lEubNP +#define OS_ReadOwnerOfLockWramBlock1() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF)) + +// uq`l|b +#define OS_ReadOwnerOfLockVramC() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_C_LOCK_BUF)) + +// uq`l|c +#define OS_ReadOwnerOfLockVramD() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_D_LOCK_BUF)) + + +// botԑMehen +#define OS_ReadOwnerOfLockSendFifo() OS_ReadOwnerOfLockByte((LockByte *)(SEND_FIFO_LOCK_BUF)) + +// cl`O +#define OS_ReadOwnerOfLockDma0() OS_ReadOwnerOfLockByte((LockByte *)(DMA0_LOCK_BUF)) + +// cl`P +#define OS_ReadOwnerOfLockDma1() OS_ReadOwnerOfLockByte((LockByte *)(DMA1_LOCK_BUF)) + +// cl`Q +#define OS_ReadOwnerOfLockDma2() OS_ReadOwnerOfLockByte((LockByte *)(DMA2_LOCK_BUF)) + +// cl`R +#define OS_ReadOwnerOfLockDma3() OS_ReadOwnerOfLockByte((LockByte *)(DMA3_LOCK_BUF)) + +// ^C}[O +#define OS_ReadOwnerOfLockTimer0() OS_ReadOwnerOfLockByte((LockByte *)(TIMER0_LOCK_BUF)) + +// ^C}[P +#define OS_ReadOwnerOfLockTimer1() OS_ReadOwnerOfLockByte((LockByte *)(TIMER1_LOCK_BUF)) + +// ^C}[Q +#define OS_ReadOwnerOfLockTimer2() OS_ReadOwnerOfLockByte((LockByte *)(TIMER2_LOCK_BUF)) + +// ^C}[R +#define OS_ReadOwnerOfLockTimer3() OS_ReadOwnerOfLockByte((LockByte *)(TIMER3_LOCK_BUF)) + + +//---------------------------------------------------------------------- +// z[g +// +//EARM946E-SRÂݒ~܂B +//EY銄荞݂iIEɃZbgjĂ +// 荞ݗviIFZbgjɂĕA܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_Halt() ((void) 0) +#else +void OS_Halt(void); +#endif + + +//====================================================================== +// vOXe[^XWX^ +//====================================================================== + +//---------------------------------------------------------------------- +// JgEvOXe[^XWX^ Zbg +// +//EJgEvOXe[^XWX^ɒlZbg܂B +// +//EF ZbgJgEvOXe[^XWX^̒l +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void OS_SetCpsr(u32 param); + +//---------------------------------------------------------------------- +// JgEvOXe[^XWX^l l +// +//EJgEvOXe[^XWX^̒ll܂B +// +//EF Ȃ +// +//E߂lFJgEvOXe[^XWX^̒l +//---------------------------------------------------------------------- + +u32 OS_GetCpsr(void); + +//---------------------------------------------------------------------- +// hqp Cl[u^fBZ[u +// +//EJgEvOXe[^XWX^̂hqp +// Cl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFύXÕJgEvOXe[^XWX^̒l +//---------------------------------------------------------------------- + +u32 OS_EnableCpsrIRQ(void); +u32 OS_DisableCpsrIRQ(void); + +//---------------------------------------------------------------------- +// ehphqp Cl[u^fBZ[u +// +//EJgEvOXe[^XWX^̂ehphqp +// Cl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFύXÕJgEvOXe[^XWX^̒l +//---------------------------------------------------------------------- + +u32 OS_EnableCpsrFIQ_IRQ(void); +u32 OS_DisableCpsrFIQ_IRQ(void); + +//====================================================================== +// OxN^ +//====================================================================== + +//---------------------------------------------------------------------- +// OxN^ʁ^ʃAhXֈړ +// +//EOxN^ʃAhX܂͉ʃAhXֈړ܂B +//EʃAhẌɂ̓VXeROMAʃAhẌɂ͖TCM +// }bsOĂ܂B +//EftHgł̓VXeROMɐݒ肳Ă܂ATCMֈړ +// ƂɂāADMAƂ̏Փ˂邱Ƃł܂B +//ETCMֈړꍇ͂炩ߓK؂ȃvO]Ă +// Kv܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_UpperExceptionVector() ((void) 0) +#define OS_LowerExceptionVector() ((void) 0) +#else +void OS_UpperExceptionVector(void); +void OS_LowerExceptionVector(void); +#endif + +//====================================================================== +// veNVjbg +//====================================================================== + +//---------------------------------------------------------------------- +// veNVjbg Cl[u^fBZ[u +// +//EveNVjbgCl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableProtectUnit() ((void) 0) +#define OS_DisableProtectUnit() ((void) 0) +#else +void OS_EnableProtectUnit(void); +void OS_DisableProtectUnit(void); +#endif + +//====================================================================== +// ߃LbV +//====================================================================== + +//---------------------------------------------------------------------- +// ߃LbV Cl[u^fBZ[u +// +//E߃LbVCl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableICache() ((void) 0) +#define OS_DisableICache() ((void) 0) +#else +void OS_EnableICache(void); +void OS_DisableICache(void); +#endif + +//---------------------------------------------------------------------- +// ߃LbV +// +//E߃LbV𖳌܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_InvalidateICache() ((void) 0) +#else +void OS_InvalidateICache(void); +#endif + +//---------------------------------------------------------------------- +// ߃LbVC̃AhXɂ閳 +// +//EwAhX͈͂߃LbVɑ݂ꍇ +// ̃C𖳌܂B +// +//EF +// addr wAhX +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_InvalidateICacheAddr(addr) ((void) 0) +#define OS_InvalidateICacheAddrs(startp, size) ((void) 0) +#else +void OS_InvalidateICacheAddr(void *addr); +void OS_InvalidateICacheAddrs(void *startp, u32 size); +#endif + +//---------------------------------------------------------------------- +// ߃LbVC̃AhXɂvtFb` +// +//EwAhX͈͂߃LbVɑ݂Ȃꍇ +// ̃C̃vtFb`s܂B +// +//EF +// addr wAhX +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_PrefetchICacheAddr(addr) ((void) 0) +#define OS_PrefetchICacheAddrs(startp, size) ((void) 0) +#else +void OS_PrefetchICacheAddr(void *addr); +void OS_PrefetchICacheAddrs(void *startp, u32 size); +#endif + +//---------------------------------------------------------------------- +// ߃LbV bN_E +// +//EwAhX͈͂𖽗߃LbVɃbN_E܂B +// +//EF +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_LockdownICache(addr) ((void) 0) +#else +void OS_LockdownICache(void *startp, u32 size); +#endif + + +//====================================================================== +// f[^LbV +//====================================================================== + +//---------------------------------------------------------------------- +// f[^LbV Cl[u^fBZ[u +// +//Ef[^LbVCl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + + +#ifdef IRIS_BB +#define OS_EnableDCache() ((void) 0) +#define OS_DisableDCache() ((void) 0) +#else +void OS_EnableDCache(void); +void OS_DisableDCache(void); +#endif + +//---------------------------------------------------------------------- +// f[^LbV +// +//Ef[^LbV𖳌܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_InvalidateDCache() ((void) 0) +#else +void OS_InvalidateDCache(void); +#endif + +//---------------------------------------------------------------------- +// f[^LbVC̃AhXɂ閳 +// +//EwAhX͈͂f[^LbVɑ݂ꍇ +// ̃C𖳌܂B +// +//EF +// addr wAhX +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_InvalidateDCacheAddr(addr) ((void) 0) +#define OS_InvalidateDCacheAddrs(startp, size) ((void) 0) +#else +void OS_InvalidateDCacheAddr(void *addr); +void OS_InvalidateDCacheAddrs(void *startp, u32 size); +#endif + +//---------------------------------------------------------------------- +// f[^LbV N[ +// +//Ef[^LbṼf[^֏o͂ăN[ɂ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_CleanDCache() ((void) 0) +#else +void OS_CleanDCache(void); +#endif + +//---------------------------------------------------------------------- +// f[^LbVC̃AhXɂN[ +// +//EwAhX͈͂̃f[^LbṼf[^֏o͂ +// ̃CN[ɂ܂B +// +//EF +// addr wAhX +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_CleanDCacheAddr(addr) ((void) 0) +#define OS_CleanDCacheAddrs(startp, size) ((void) 0) +#else +void OS_CleanDCacheAddr(void *addr); +void OS_CleanDCacheAddrs(void *startp, u32 size); +#endif + +//---------------------------------------------------------------------- +// f[^LbVC̃CfbNXɂN[ +// +//EwCfbNX͈͂̃f[^LbṼf[^֏o͂ +// ̃CN[ɂ܂B +// +//EF +// param p[^ +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_CleanDCacheIndex(param) ((void) 0) +#define OS_CleanDCacheIndices(param, size) ((void) 0) +#else +void OS_CleanDCacheIndex(u32 param); +void OS_CleanDCacheIndices(u32 param, u32 size); +#endif + +//---------------------------------------------------------------------- +// f[^LbV N[ +// +//Ef[^LbṼf[^֏o͂ăN[ +// ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_Clean2InvalidateDCache() ((void) 0) +#else +void OS_Clean2InvalidateDCache(void); +#endif + +//---------------------------------------------------------------------- +// f[^LbVC̃AhXɂN[ +// +//EwAhX͈͂̃f[^LbṼf[^֏o͂ +// ̃CN[ɂɖ܂B +// +//EF +// addr wAhX +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_Clean2InvalidateDCacheAddr(addr) ((void) 0) +#define OS_Clean2InvalidateDCacheAddrs(startp, size) ((void) 0) +#else +void OS_Clean2InvalidateDCacheAddr(void *addr); +void OS_Clean2InvalidateDCacheAddrs(void *startp, u32 size); +#endif + +//---------------------------------------------------------------------- +// f[^LbVC̃CfbNXɂN[ +// +//EwCfbNX͈͂̃f[^LbṼf[^֏o͂ +// ̃CN[ɂɖ܂B +// +//EF +// param p[^ +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_Clean2InvalidateDCacheIndex(param) ((void) 0) +#define OS_Clean2InvalidateDCacheIndices(param, size) ((void) 0) +#else +void OS_Clean2InvalidateDCacheIndex(u32 param); +void OS_Clean2InvalidateDCacheIndices(u32 param, u32 size); +#endif + +//---------------------------------------------------------------------- +// f[^LbVC̃AhXɂv[h +// +//EwAhX͈͂f[^LbVɑ݂Ȃꍇ +// ̃C̃v[hs܂B +// +//EF +// addr wAhX +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_PreloadDCacheAddr(addr) ((void) 0) +#define OS_PreloadDCacheAddrs(startp, size) ((void) 0) +#else +void OS_PreloadDCacheAddr(void *addr); +void OS_PreloadDCacheAddrs(void *startp, u32 size); +#endif + +//---------------------------------------------------------------------- +// f[^LbV bN_E +// +//EwAhX͈͂f[^LbVɃbN_E܂B +// +//EF +// startp X^[gAhX +// size TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_LockdownDCache(startp, size) ((void) 0) +#else +void OS_LockdownDCache(void *startp, u32 size); +#endif + + +//====================================================================== +// Cgobt@ +//====================================================================== + +//---------------------------------------------------------------------- +// Cgobt@ GveB҂ +// +//ECgobt@GveBɂȂ܂ő҂܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_WaitWriteBufferEmpty() ((void) 0) +#else +void OS_WaitWriteBufferEmpty(void); +#endif + + +//====================================================================== +// ߂sbl +//====================================================================== + +//---------------------------------------------------------------------- +// ߂sbl Cl[u^fBZ[u +// +//E߂sblCl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableITCM() ((void) 0) +#define OS_DisableITCM() ((void) 0) +#else +void OS_EnableITCM(void); +void OS_DisableITCM(void); +#endif + +//---------------------------------------------------------------------- +// ߂sblp[^ Zbg +// +//E߂sbl̗LGATCYZbg܂B +// +//EF +// param LGATCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_SetParamITCM(param) ((void) 0) +#else +void OS_SetParamITCM(u32 param); +#endif + +//---------------------------------------------------------------------- +// ߂sblp[^ l +// +//E߂sbl̗LGATCYl܂B +// +//EF Ȃ +// +//E߂lFLGATCY +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u32 OS_GetParamITCM(void); +#endif + + +//====================================================================== +// f[^sbl +//====================================================================== + +//---------------------------------------------------------------------- +// f[^sbl Cl[u^fBZ[u +// +//Ef[^sblCl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableDTCM() ((void) 0) +#define OS_DisableDTCM() ((void) 0) +#else +void OS_EnableDTCM(void); +void OS_DisableDTCM(void); +#endif + +//---------------------------------------------------------------------- +// f[^sblp[^ Zbg +// +//Ef[^sbl̃x[XAhXƗLGATCYZbg܂B +// +//EF +// param x[XAhXLGATCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_SetParamDTCM() ((void) 0) +#else +void OS_SetParamDTCM(u32 param); +#endif + +//---------------------------------------------------------------------- +// f[^sblp[^ l +// +//Ef[^sbl̃x[XAhXƗLGATCYl܂B +// +//EF Ȃ +// +//E߂lFx[XAhXLGATCY +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u32 OS_GetParamDTCM(void); +#endif + + +//====================================================================== +// veNV[W +//====================================================================== + +//---------------------------------------------------------------------- +// veNV[W̖߃LbV Cl[u^fBZ[u +// +//EveNV[Wɖ߃LbVCl[u^fBZ[uɂ܂B +// +//EF +// flags tO +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableICache4PR() ((void) 0) +#define OS_DisableICache4PR() ((void) 0) +#else +void OS_EnableICache4PR(u32 flags); +void OS_DisableICache4PR(u32 flags); +#endif + +//---------------------------------------------------------------------- +// veNV[W̃f[^LbV Cl[u^fBZ[u +// +//EveNV[WɃf[^LbVCl[u^fBZ[uɂ܂B +// +//EF +// flags tO +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableDCache4PR() ((void) 0) +#define OS_DisableDCache4PR() ((void) 0) +#else +void OS_EnableDCache4PR(u32 flags); +void OS_DisableDCache4PR(u32 flags); +#endif + +//---------------------------------------------------------------------- +// veNV[W̃Cgobt@ Cl[u^fBZ[u +// +//EveNV[WɃCgobt@Cl[u^fBZ[uɂ܂B +// +//EF +// flags tO +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_EnableWriteBuffer4PR(flags) ((void) 0) +#define OS_DisableWriteBuffer4PR(flags) ((void) 0) +#else +void OS_EnableWriteBuffer4PR(u32 flags); +void OS_DisableWriteBuffer4PR(u32 flags); +#endif + +//---------------------------------------------------------------------- +// veNV[W̖߃LbV Cl[utOl +// +//EveNV[Wɖ߃LbVCl[uǂԂ܂B +// +//EF Ȃ +// +//E߂lFieveNV[WɑΉrbgɑ΂āj +// 1 Cl[u +// 0 fBZ[u +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u8 OS_GetICacheEnableFlags4PR(void); +#endif + +//---------------------------------------------------------------------- +// veNV[W̃f[^LbV Cl[utOl +// +//EveNV[WɃf[^LbVCl[uǂԂ܂B +// +//EF Ȃ +// +//E߂lFieveNV[WɑΉrbgɑ΂āj +// 1 Cl[u +// 0 fBZ[u +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u8 OS_GetDCacheEnableFlags4PR(void); +#endif + +//---------------------------------------------------------------------- +// veNV[W̃Cgobt@ECl[utO l +// +//EveNV[WɃCgobt@Cl[uǂԂ܂B +// +//EF Ȃ +// +//E߂lFieveNV[WɑΉrbgɑ΂āj +// 1 Cl[u +// 0 fBZ[u +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u8 OS_GetWriteBufferEnableFlags4PR(void); +#endif + +//---------------------------------------------------------------------- +// veNV[W̖߃ANZX Zbg +// +//EveNV[W̖߃ANZXZbg܂B +// +//EF +// setMask Zbg}XN +// flags tO +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_SetIPermissions4PR(setMask, flags) ((void) 0) +#else +void OS_SetIPermissions4PR(u32 setMask, u32 flags); +#endif + +//---------------------------------------------------------------------- +// veNV[W̃f[^ANZX Zbg +// +//EveNV[W̃f[^ANZXZbg܂B +// +//EF +// setMask Zbg}XN +// flags tO +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_SetDPermissions4PR(setMask, flags) ((void) 0) +#else +void OS_SetDPermissions4PR(u32 setMask, u32 flags); +#endif + +//---------------------------------------------------------------------- +// veNV[W̖߃ANZX l +// +//EveNV[W̖߃ANZXl܂B +// +//EF Ȃ +// +//E߂lFieveNV[WɑΉrbgɑ΂āj +// C5_PERMIT_NA ANZXs +// C5_PERMIT_RW [hCg +// C5_PERMIT_RO [hI[ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u32 OS_GetIPermissions4PR(void); +#endif + +//---------------------------------------------------------------------- +// veNV[W̃f[^ANZX l +// +//EveNV[W̃f[^ANZXl܂B +// +//EF Ȃ +// +//E߂lFieveNV[WɑΉrbgɑ΂āj +// C5_PERMIT_NA ANZXs +// C5_PERMIT_RW [hCg +// C5_PERMIT_RO [hI[ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +u32 OS_GetDPermissions4PR(void); +#endif + + +//---------------------------------------------------------------------- +// eveNV[W̃p[^ Zbg +// +//EveNV[W̃x[XAhXƃTCYZbg܂B +// +//EF +// regionNo [Wm +// param x[XAhXTCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#define OS_SetProtectRegion(regionNo, param) ((void) 0) +#else +#define OS_SetProtectRegion(regionNo, param) OS_SetProtectRegionPriv(regionNo, param) + +void OS_SetProtectRegion0(u32 param); +void OS_SetProtectRegion1(u32 param); +void OS_SetProtectRegion2(u32 param); +void OS_SetProtectRegion3(u32 param); +void OS_SetProtectRegion4(u32 param); +void OS_SetProtectRegion5(u32 param); +void OS_SetProtectRegion6(u32 param); +void OS_SetProtectRegion7(u32 param); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define OS_SetProtectRegionPriv(regionNo, param) OS_SetProtectRegion##regionNo##(param) +#endif + +//---------------------------------------------------------------------- +// eveNV[W̃p[^ l +// +//EveNV[W̃x[XAhXƃTCYl܂B +// +//EF +// regionNo [Wm +// +//E߂lFeveNV[W̃x[XAhXTCY +//---------------------------------------------------------------------- + +#ifdef IRIS_BB +#else +#define OS_GetProtectRegion(regionNo) OS_GetProtectRegionPriv(regionNo) + +u32 OS_GetProtectRegion0(void); +u32 OS_GetProtectRegion1(void); +u32 OS_GetProtectRegion2(void); +u32 OS_GetProtectRegion3(void); +u32 OS_GetProtectRegion4(void); +u32 OS_GetProtectRegion5(void); +u32 OS_GetProtectRegion6(void); +u32 OS_GetProtectRegion7(void); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define OS_GetProtectRegionPriv(regionNo, param) OS_GetProtectRegion##regionNo##() +#endif + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_OS_H + diff --git a/trunk/IrisMainp/include/IrisOS_Arm.s b/trunk/IrisMainp/include/IrisOS_Arm.s new file mode 100644 index 0000000..d33e155 --- /dev/null +++ b/trunk/IrisMainp/include/IrisOS_Arm.s @@ -0,0 +1,478 @@ +;===================================================================== +; IrisOS_Arm.s +; OSCuiARMASMpj +; +; Copyright (C) 2003-2004 NINTENDO Co.,Ltd. +;===================================================================== + IF :DEF: _IRIS_OS_H + ELSE +_IRIS_OS_H * 1 + + + INCLUDE IrisTargetArm.s + INCLUDE IrisDefineArm.s + + + +;======================================================================= +; bNϐ +;======================================================================= + +; bNhc + +OS_UNLOCK_ID * 0 ; bNϐbNĂȂꍇ̂hc +OS_MAINP_LOCKED_FLAG * 0x40 ; CvZbTɂ郍bNmFtO +OS_MAINP_LOCK_ID_START * 0x40 ; CvZbTpbNhc̊蓖ĊJnԍ +OS_MAINP_LOCK_ID_END * 0x6f ; 蓖ďIԍ +OS_MAINP_DBG_LOCK_ID * 0x70 ; fobK\ԍ +OS_MAINP_SYSTEM_LOCK_ID * 0x7f ; VXe\ԍ +OS_SUBP_LOCKED_FLAG * 0x80 ; TuvZbTɂ郍bNmFtO +OS_SUBP_LOCK_ID_START * 0x80 ; TuvZbTpbNhc̊蓖ĊJnԍ +OS_SUBP_LOCK_ID_END * 0xaf ; 蓖ďIԍ +OS_SUBP_DBG_LOCK_ID * 0xb0 ; fobK\ԍ +OS_SUBP_SYSTEM_LOCK_ID * 0xbf ; VXe\ԍ + +OS_LOCK_SUCCESS * 0 ; bN +OS_LOCK_ERROR * -1 ; bNG[ + +OS_UNLOCK_SUCCESS * 0 ; bN +OS_UNLOCK_ERROR * -2 ; bNG[ + +OS_LOCK_FREE * 0 ; bN + +OS_LOCK_ID_ERROR * -3 ; bNhcG[ + + + +;----------------------------------------------------------------------- +; bN֐̏ +;----------------------------------------------------------------------- + + EXTERN OS_InitLock + +;----------------------------------------------------------------------- +; bNID̊l +;----------------------------------------------------------------------- + + EXTERN OS_GetLockID + + +;----------------------------------------------------------------------- +; XsbNi[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_LockWord + EXTERN OS_LockByte + + EXTERN OS_LockCard + EXTERN OS_LockCartridge + EXTERN OS_LockWramBlock0 + EXTERN OS_LockWramBlock1 + EXTERN OS_LockVramC + EXTERN OS_LockVramD + + EXTERN OS_LockSendFifo + + +;----------------------------------------------------------------------- +; bN̉i[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_UnLockWord + EXTERN OS_UnLockByte + + EXTERN OS_UnLockCard + EXTERN OS_UnLockCartridge + EXTERN OS_UnLockWramBlock0 + EXTERN OS_UnLockWramBlock1 + EXTERN OS_UnLockVramC + EXTERN OS_UnLockVramD + + EXTERN OS_UnLockSendFifo + + +;----------------------------------------------------------------------- +; bN̎si[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_TryLockWord + EXTERN OS_TryLockByte + + EXTERN OS_TryLockCard + EXTERN OS_TryLockCartridge + EXTERN OS_TryLockWramBlock0 + EXTERN OS_TryLockWramBlock1 + EXTERN OS_TryLockVramC + EXTERN OS_TryLockVramD + + EXTERN OS_TryLockSendFifo + + +;----------------------------------------------------------------------- +; bNtO̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_ReadLockWord + EXTERN OS_ReadLockByte + + +;----------------------------------------------------------------------- +; bNϐ̏LW[ID̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_ReadOwnerOfLockWord + EXTERN OS_ReadOwnerOfLockByte + + + +;----------------------------------------------------------------------- +; z[g +;----------------------------------------------------------------------- + + IF :DEF: IRIS_BB + ELSE + + EXTERN OS_Halt + + ENDIF ; IRIS_BB + + + + IF :DEF: IRIS_BB + ELSE + +;======================================================================= +; vOXe[^XWX^ +;======================================================================= + +;----------------------------------------------------------------------- +; vOXe[^XWX^ Zbgir0=p[^j +;----------------------------------------------------------------------- + + EXTERN OS_SetCpsr + +;----------------------------------------------------------------------- +; JgEvOXe[^XWX^l l +;----------------------------------------------------------------------- + + EXTERN OS_GetCpsr + +;----------------------------------------------------------------------- +; hqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableCpsrIRQ + EXTERN OS_DisableCpsrIRQ + +;----------------------------------------------------------------------- +; ehphqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableCpsrFIQ_IRQ + EXTERN OS_DisableCpsrFIQ_IRQ + + +;======================================================================= +; OxN^ +;======================================================================= + +;----------------------------------------------------------------------- +; OxN^ʁ^ʃAhXֈړ +;----------------------------------------------------------------------- + + EXTERN OS_UpperExceptionVector + EXTERN OS_LowerExceptionVector + + +;======================================================================= +; veNVjbg +;======================================================================= + +;----------------------------------------------------------------------- +; veNVjbg Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableProtectUnit + EXTERN OS_DisableProtectUnit + + +;======================================================================= +; ߃LbV +;======================================================================= + +;----------------------------------------------------------------------- +; ߃LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableICache + EXTERN OS_DisableICache + + +;----------------------------------------------------------------------- +; ߃LbV +;----------------------------------------------------------------------- + + EXTERN OS_InvalidateICache + +;----------------------------------------------------------------------- +; ߃LbVC̃AhXɂ閳 +;----------------------------------------------------------------------- + + EXTERN OS_InvalidateICacheAddr + EXTERN OS_InvalidateICacheAddrs + +;----------------------------------------------------------------------- +; ߃LbVC̃AhXɂvtFb` +;----------------------------------------------------------------------- + + EXTERN OS_PrefetchICacheAddr + EXTERN OS_PrefetchICacheAddrs + +;----------------------------------------------------------------------- +; ߃LbV bN_E +;----------------------------------------------------------------------- + + EXTERN OS_LockdownICache + + +;======================================================================= +; f[^LbV +;======================================================================= + +;----------------------------------------------------------------------- +; f[^LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableDCache + EXTERN OS_DisableDCache + +;----------------------------------------------------------------------- +; f[^LbV +;----------------------------------------------------------------------- + + EXTERN OS_InvalidateDCache + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂ閳 +;----------------------------------------------------------------------- + + EXTERN OS_InvalidateDCacheAddr + EXTERN OS_InvalidateDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbV N[ +;----------------------------------------------------------------------- + + EXTERN OS_CleanDCache + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂN[ +;----------------------------------------------------------------------- + + EXTERN OS_CleanDCacheAddr + EXTERN OS_CleanDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbVC̃CfbNXɂN[ +;----------------------------------------------------------------------- + + EXTERN OS_CleanDCacheIndex + EXTERN OS_CleanDCacheIndices + +;----------------------------------------------------------------------- +; f[^LbV N[ +;----------------------------------------------------------------------- + + EXTERN OS_Clean2InvalidateDCache + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂN[ +;----------------------------------------------------------------------- + + EXTERN OS_Clean2InvalidateDCacheAddr + EXTERN OS_Clean2InvalidateDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbVC̃CfbNXɂN[ +;----------------------------------------------------------------------- + + EXTERN OS_Clean2InvalidateDCacheIndex + EXTERN OS_Clean2InvalidateDCacheIndices + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂv[h +;----------------------------------------------------------------------- + + EXTERN OS_PreloadDCacheAddr + EXTERN OS_PreloadDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbV bN_E +;----------------------------------------------------------------------- + + EXTERN OS_LockdownDCache + + +;======================================================================= +; Cgobt@ +;======================================================================= + +;----------------------------------------------------------------------- +; Cgobt@ GveB҂ +;----------------------------------------------------------------------- + + EXTERN OS_WaitWriteBufferEmpty + + +;======================================================================= +; ߂sbl +;======================================================================= + +;----------------------------------------------------------------------- +; ߂sbl Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableITCM + EXTERN OS_DisableITCM + +;----------------------------------------------------------------------- +; ߂sblp[^ Zbg +;----------------------------------------------------------------------- + + EXTERN OS_SetParamITCM + +;----------------------------------------------------------------------- +; ߂sblp[^ l +;----------------------------------------------------------------------- + + EXTERN OS_GetParamITCM + + +;======================================================================= +; f[^sbl +;======================================================================= + +;----------------------------------------------------------------------- +; f[^sbl Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableICache + EXTERN OS_EnableICache + +;----------------------------------------------------------------------- +; f[^sblp[^ Zbg +;----------------------------------------------------------------------- + + EXTERN OS_SetParamDTCM + +;----------------------------------------------------------------------- +; f[^sblp[^ l +;----------------------------------------------------------------------- + + EXTERN OS_GetParamDTCM + + +;======================================================================= +; veNV[W +;======================================================================= + +;----------------------------------------------------------------------- +; veNV[W̖߃LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableICache4PR + EXTERN OS_DisableICache4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableDCache4PR + EXTERN OS_DisableDCache4PR + +;----------------------------------------------------------------------- +; veNV[W̃Cgobt@ Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableWriteBuffer4PR + EXTERN OS_DisableWriteBuffer4PR + +;----------------------------------------------------------------------- +; veNV[W̖߃LbV Cl[utOl +;----------------------------------------------------------------------- + + EXTERN OS_GetICacheEnableFlags4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^LbV Cl[utOl +;----------------------------------------------------------------------- + + EXTERN OS_GetDCacheEnableFlags4PR + +;----------------------------------------------------------------------- +; veNV[W̃Cgobt@ECl[utO l +;----------------------------------------------------------------------- + + EXTERN OS_GetWriteBufferEnableFlags4PR + +;----------------------------------------------------------------------- +; veNV[W̖߃ANZX Zbg +;----------------------------------------------------------------------- + + EXTERN OS_SetIPermissions4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^ANZX Zbg +;----------------------------------------------------------------------- + + EXTERN OS_SetDPermissions4PR + +;----------------------------------------------------------------------- +; veNV[W̖߃ANZX l +;----------------------------------------------------------------------- + + EXTERN OS_GetIPermissions4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^ANZX l +;----------------------------------------------------------------------- + + EXTERN OS_GetDPermissions4PR + + +;----------------------------------------------------------------------- +; eveNV[W̃p[^ Zbg +;----------------------------------------------------------------------- + + EXTERN OS_SetProtectRegion0 + EXTERN OS_SetProtectRegion1 + EXTERN OS_SetProtectRegion2 + EXTERN OS_SetProtectRegion3 + EXTERN OS_SetProtectRegion4 + EXTERN OS_SetProtectRegion5 + EXTERN OS_SetProtectRegion6 + EXTERN OS_SetProtectRegion7 + +;----------------------------------------------------------------------- +; eveNV[W̃p[^ l +;----------------------------------------------------------------------- + + EXTERN OS_GetProtectRegion0 + EXTERN OS_GetProtectRegion1 + EXTERN OS_GetProtectRegion2 + EXTERN OS_GetProtectRegion3 + EXTERN OS_GetProtectRegion4 + EXTERN OS_GetProtectRegion5 + EXTERN OS_GetProtectRegion6 + EXTERN OS_GetProtectRegion7 + + + ENDIF ; IRIS_BB + + + ENDIF ; _IRIS_OS_H + + + + END + diff --git a/trunk/IrisMainp/include/IrisOS_Mw.s b/trunk/IrisMainp/include/IrisOS_Mw.s new file mode 100644 index 0000000..e888460 --- /dev/null +++ b/trunk/IrisMainp/include/IrisOS_Mw.s @@ -0,0 +1,477 @@ +;===================================================================== +; IrisOS_Mw.s +; OSCuiMWASMARMpj +; +; Copyright (C) 2003-2004 NINTENDO Co.,Ltd. +;===================================================================== +#ifndef _IRIS_OS_H +#define _IRIS_OS_H + + + .INCLUDE IrisTarget.h + .INCLUDE IrisDefine.h + + + +;======================================================================= +; bNϐ +;======================================================================= + +// bNhc + +#define OS_UNLOCK_ID 0 // bNϐbNĂȂꍇ̂hc +#define OS_MAINP_LOCKED_FLAG 0x40 // CvZbTɂ郍bNmFtO +#define OS_MAINP_LOCK_ID_START 0x40 // CvZbTpbNhc̊蓖ĊJnԍ +#define OS_MAINP_LOCK_ID_END 0x6f // 蓖ďIԍ +#define OS_MAINP_DBG_LOCK_ID 0x70 // fobK\ԍ +#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // VXe\ԍ +#define OS_SUBP_LOCKED_FLAG 0x80 // TuvZbTɂ郍bNmFtO +#define OS_SUBP_LOCK_ID_START 0x80 // TuvZbTpbNhc̊蓖ĊJnԍ +#define OS_SUBP_LOCK_ID_END 0xaf // 蓖ďIԍ +#define OS_SUBP_DBG_LOCK_ID 0xb0 // fobK\ԍ +#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // VXe\ԍ + +#define OS_LOCK_SUCCESS 0 // bN +#define OS_LOCK_ERROR -1 // bNG[ + +#define OS_UNLOCK_SUCCESS 0 // bN +#define OS_UNLOCK_ERROR -2 // bNG[ + +#define OS_LOCK_FREE 0 // bN + +#define OS_LOCK_ID_ERROR -3 // bNhcG[ + + + +;----------------------------------------------------------------------- +; bN֐̏ +;----------------------------------------------------------------------- + + .EXTERN OS_InitLock + +;----------------------------------------------------------------------- +; bNID̊l +;----------------------------------------------------------------------- + + .EXTERN OS_GetLockID + + +;----------------------------------------------------------------------- +; XsbNi[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_LockWord + .EXTERN OS_LockByte + + .EXTERN OS_LockCard + .EXTERN OS_LockCartridge + .EXTERN OS_LockWramBlock0 + .EXTERN OS_LockWramBlock1 + .EXTERN OS_LockVramC + .EXTERN OS_LockVramD + + .EXTERN OS_LockSendFifo + + +;----------------------------------------------------------------------- +; bN̉i[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_UnLockWord + .EXTERN OS_UnLockByte + + .EXTERN OS_UnLockCard + .EXTERN OS_UnLockCartridge + .EXTERN OS_UnLockWramBlock0 + .EXTERN OS_UnLockWramBlock1 + .EXTERN OS_UnLockVramC + .EXTERN OS_UnLockVramD + + .EXTERN OS_UnLockSendFifo + + +;----------------------------------------------------------------------- +; bN̎si[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_TryLockWord + .EXTERN OS_TryLockByte + + .EXTERN OS_TryLockCard + .EXTERN OS_TryLockCartridge + .EXTERN OS_TryLockWramBlock0 + .EXTERN OS_TryLockWramBlock1 + .EXTERN OS_TryLockVramC + .EXTERN OS_TryLockVramD + + .EXTERN OS_TryLockSendFifo + + +;----------------------------------------------------------------------- +; bNtO̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_ReadLockWord + .EXTERN OS_ReadLockByte + + +;----------------------------------------------------------------------- +; bNϐ̏LW[ID̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_ReadOwnerOfLockWord + .EXTERN OS_ReadOwnerOfLockByte + + + +;----------------------------------------------------------------------- +; z[g +;----------------------------------------------------------------------- + +#ifdef IRIS_BB +#else + + .EXTERN OS_Halt + +#endif // IRIS_BB + + + +#ifdef IRIS_BB +#else + +;======================================================================= +; vOXe[^XWX^ +;======================================================================= + +;----------------------------------------------------------------------- +; vOXe[^XWX^ Zbgir0=p[^j +;----------------------------------------------------------------------- + + .EXTERN OS_SetCpsr + +;----------------------------------------------------------------------- +; JgEvOXe[^XWX^l l +;----------------------------------------------------------------------- + + .EXTERN OS_GetCpsr + +;----------------------------------------------------------------------- +; hqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableCpsrIRQ + .EXTERN OS_DisableCpsrIRQ + +;----------------------------------------------------------------------- +; ehphqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableCpsrFIQ_IRQ + .EXTERN OS_DisableCpsrFIQ_IRQ + + +;======================================================================= +; OxN^ +;======================================================================= + +;----------------------------------------------------------------------- +; OxN^ʁ^ʃAhXֈړ +;----------------------------------------------------------------------- + + .EXTERN OS_UpperExceptionVector + .EXTERN OS_LowerExceptionVector + + +;======================================================================= +; veNVjbg +;======================================================================= + +;----------------------------------------------------------------------- +; veNVjbg Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableProtectUnit + .EXTERN OS_DisableProtectUnit + + +;======================================================================= +; ߃LbV +;======================================================================= + +;----------------------------------------------------------------------- +; ߃LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableICache + .EXTERN OS_DisableICache + +;----------------------------------------------------------------------- +; ߃LbV +;----------------------------------------------------------------------- + + .EXTERN OS_InvalidateICache + +;----------------------------------------------------------------------- +; ߃LbVC̃AhXɂ閳 +;----------------------------------------------------------------------- + + .EXTERN OS_InvalidateICacheAddr + .EXTERN OS_InvalidateICacheAddrs + +;----------------------------------------------------------------------- +; ߃LbVC̃AhXɂvtFb` +;----------------------------------------------------------------------- + + .EXTERN OS_PrefetchICacheAddr + .EXTERN OS_PrefetchICacheAddrs + +;----------------------------------------------------------------------- +; ߃LbV bN_E +;----------------------------------------------------------------------- + + .EXTERN OS_LockdownICache + + +;======================================================================= +; f[^LbV +;======================================================================= + +;----------------------------------------------------------------------- +; f[^LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableDCache + .EXTERN OS_DisableDCache + +;----------------------------------------------------------------------- +; f[^LbV +;----------------------------------------------------------------------- + + .EXTERN OS_InvalidateDCache + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂ閳 +;----------------------------------------------------------------------- + + .EXTERN OS_InvalidateDCacheAddr + .EXTERN OS_InvalidateDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbV N[ +;----------------------------------------------------------------------- + + .EXTERN OS_CleanDCache + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂN[ +;----------------------------------------------------------------------- + + .EXTERN OS_CleanDCacheAddr + .EXTERN OS_CleanDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbVC̃CfbNXɂN[ +;----------------------------------------------------------------------- + + .EXTERN OS_CleanDCacheIndex + .EXTERN OS_CleanDCacheIndices + +;----------------------------------------------------------------------- +; f[^LbV N[ +;----------------------------------------------------------------------- + + .EXTERN OS_Clean2InvalidateDCache + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂN[ +;----------------------------------------------------------------------- + + .EXTERN OS_Clean2InvalidateDCacheAddr + .EXTERN OS_Clean2InvalidateDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbVC̃CfbNXɂN[ +;----------------------------------------------------------------------- + + .EXTERN OS_Clean2InvalidateDCacheIndex + .EXTERN OS_Clean2InvalidateDCacheIndices + +;----------------------------------------------------------------------- +; f[^LbVC̃AhXɂv[h +;----------------------------------------------------------------------- + + .EXTERN OS_PreloadDCacheAddr + .EXTERN OS_PreloadDCacheAddrs + +;----------------------------------------------------------------------- +; f[^LbV bN_E +;----------------------------------------------------------------------- + + .EXTERN OS_LockdownDCache + + +;======================================================================= +; Cgobt@ +;======================================================================= + +;----------------------------------------------------------------------- +; Cgobt@ GveB҂ +;----------------------------------------------------------------------- + + .EXTERN OS_WaitWriteBufferEmpty + + +;======================================================================= +; ߂sbl +;======================================================================= + +;----------------------------------------------------------------------- +; ߂sbl Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableITCM + .EXTERN OS_DisableITCM + +;----------------------------------------------------------------------- +; ߂sblp[^ Zbg +;----------------------------------------------------------------------- + + .EXTERN OS_SetParamITCM + +;----------------------------------------------------------------------- +; ߂sblp[^ l +;----------------------------------------------------------------------- + + .EXTERN OS_GetParamITCM + + +;======================================================================= +; f[^sbl +;======================================================================= + +;----------------------------------------------------------------------- +; f[^sbl Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableICache + .EXTERN OS_EnableICache + +;----------------------------------------------------------------------- +; f[^sbl̓Cl[uH +;----------------------------------------------------------------------- + + .EXTERN OS_IsEnableDTCM + +;----------------------------------------------------------------------- +; f[^sblp[^ Zbg +;----------------------------------------------------------------------- + + .EXTERN OS_SetParamDTCM + +;----------------------------------------------------------------------- +; f[^sblp[^ l +;----------------------------------------------------------------------- + + .EXTERN OS_GetParamDTCM + + +;======================================================================= +; veNV[W +;======================================================================= + +;----------------------------------------------------------------------- +; veNV[W̖߃LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableICache4PR + .EXTERN OS_DisableICache4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^LbV Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableDCache4PR + .EXTERN OS_DisableDCache4PR + +;----------------------------------------------------------------------- +; veNV[W̃Cgobt@ Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableWriteBuffer4PR + .EXTERN OS_DisableWriteBuffer4PR + +;----------------------------------------------------------------------- +; veNV[W̖߃LbV Cl[utOl +;----------------------------------------------------------------------- + + .EXTERN OS_GetICacheEnableFlags4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^LbV Cl[utOl +;----------------------------------------------------------------------- + + .EXTERN OS_GetDCacheEnableFlags4PR + +;----------------------------------------------------------------------- +; veNV[W̃Cgobt@ECl[utO l +;----------------------------------------------------------------------- + + .EXTERN OS_GetWriteBufferEnableFlags4PR + +;----------------------------------------------------------------------- +; veNV[W̖߃ANZX Zbg +;----------------------------------------------------------------------- + + .EXTERN OS_SetIPermissions4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^ANZX Zbg +;----------------------------------------------------------------------- + + .EXTERN OS_SetDPermissions4PR + +;----------------------------------------------------------------------- +; veNV[W̖߃ANZX l +;----------------------------------------------------------------------- + + .EXTERN OS_GetIPermissions4PR + +;----------------------------------------------------------------------- +; veNV[W̃f[^ANZX l +;----------------------------------------------------------------------- + + .EXTERN OS_GetDPermissions4PR + + +;----------------------------------------------------------------------- +; eveNV[W̃p[^ Zbg +;----------------------------------------------------------------------- + + .EXTERN OS_SetProtectRegion0 + .EXTERN OS_SetProtectRegion1 + .EXTERN OS_SetProtectRegion2 + .EXTERN OS_SetProtectRegion3 + .EXTERN OS_SetProtectRegion4 + .EXTERN OS_SetProtectRegion5 + .EXTERN OS_SetProtectRegion6 + .EXTERN OS_SetProtectRegion7 + +;----------------------------------------------------------------------- +; eveNV[W̃p[^ l +;----------------------------------------------------------------------- + + .EXTERN OS_GetProtectRegion0 + .EXTERN OS_GetProtectRegion1 + .EXTERN OS_GetProtectRegion2 + .EXTERN OS_GetProtectRegion3 + .EXTERN OS_GetProtectRegion4 + .EXTERN OS_GetProtectRegion5 + .EXTERN OS_GetProtectRegion6 + .EXTERN OS_GetProtectRegion7 + + +#endif // IRIS_BB + + +#endif // _IRIS_OS_H diff --git a/trunk/IrisMainp/include/IrisQUAT.h b/trunk/IrisMainp/include/IrisQUAT.h new file mode 100644 index 0000000..0284e2f --- /dev/null +++ b/trunk/IrisMainp/include/IrisQUAT.h @@ -0,0 +1,199 @@ +//====================================================================== +// IrisQUAT.h +// NH[^jICu +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_QUAT_H +#define _IRIS_QUAT_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + +#define QM_S_SFT 14 // NH[^jIsւ̕ϊ̐x萔 + + +//---------------------------------------------------------------------- +// xNgƉ]pNH[^jIւ̕ϊ +// +//ExNgƉ]p狁߂NH[^jIdstpwNH[^jI֊i[܂B +// +//EF +// axisp ]xNg̃|C^ +// theta ]pxm256b1024b4096iKn +// dstp NH[^jIi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +#define VEC_Conv2Quat(axisp, theta, dstp) VEC_Conv2QuatPriv(SIN_NDIV_DEFAULT, axisp, theta, dstp) + +void VEC_Conv2Quat256(const Vec *axisp, u32 theta, Quat *dstp); +void VEC_Conv2Quat1024(const Vec *axisp, u32 theta, Quat *dstp); +void VEC_Conv2Quat4096(const Vec *axisp, u32 theta, Quat *dstp); + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define VEC_Conv2QuatPriv(ndiv, axisp, theta, dstp) VEC_Conv2QuatNDiv(ndiv, axisp, theta, dstp) +#define VEC_Conv2QuatNDiv(ndiv, axisp, theta, dstp) VEC_Conv2Quat##ndiv( axisp, theta, dstp) + +//---------------------------------------------------------------------- +// NH[^jI̓ +// +//EQ‚̃NH[^jI̓ς߂܂B +// +//EF +// a PNH[^jĨ|C^ +// b QNH[^jĨ|C^ +// +//E߂lF +//---------------------------------------------------------------------- + +s32 QUAT_DotProduct(const Quat *a, const Quat *b); + +//---------------------------------------------------------------------- +// NH[^jI̐K +// +//EsrcpwNH[^jI𐳋KdstpwNH[^jI֊i[܂B +// +//EF +// srcp KNH[^jĨ|C^ +// dstp KNH[^jIi[obt@̃|C^ +// +//E߂lFȂ +// +//ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void QUAT_Normalize(Quat *srcp, Quat *dstp); + +//---------------------------------------------------------------------- +// NH[^jI̋tit]j +// +//EsrcpwNH[^jI̋t߁AdstpwNH[^jI֊i[܂B +// +//EF +// srcp ̃NH[^jĨ|C^ +// dstp tNH[^jIi[obt@̃|C^ +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void QUAT_Inverse(Quat *srcp, Quat *dstp); + +//---------------------------------------------------------------------- +// NH[^jȈZ +// +//EQ‚̃NH[^jIZaxbwNH[^jI֊i[܂B +// +//EF +// a PNH[^jĨ|C^ +// b QNH[^jĨ|C^ +// axb ZNH[^jIi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void QUAT_Multiply(Quat *a, Quat *b, Quat *axb); + +//---------------------------------------------------------------------- +// NH[^jỈZ +// +//EQ‚̃NH[^jIZʂa_bwNH[^jI֊i[܂B +// +//EF +// a PNH[^jĨ|C^ +// b QNH[^jĨ|C^ +// a_b Z̃NH[^jIi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void QUAT_Add(Quat *a, Quat *b, Quat *a_b); + +//---------------------------------------------------------------------- +// NH[^jǏZ +// +//EsrcpwNH[^jIXP[OʂdstpwNH[^jI֊i[܂B +// +//EF +// a PNH[^jĨ|C^ +// b QNH[^jĨ|C^ +// a_b Z̃NH[^jIi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void QUAT_Sub(Quat *a, Quat *b, Quat *a_b); + +//---------------------------------------------------------------------- +// NH[^jĨXP[O +// +//EQ‚̃NH[^jIXP[Oʂa_bwNH[^jI֊i[܂B +// +//EF +// srcp XP[OÕNH[^jĨ|C^ +// dstp XP[ÕNH[^jIi[obt@̃|C^ +// scale XP[Op[^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void QUAT_Scale(Quat *srcp, Quat *dstp, s32 scale); + +//---------------------------------------------------------------------- +// NH[^jI̐` +// +//EQ‚̃NH[^jI`ԂʂdwNH[^jI֊i[܂B +// +//EF +// a PNH[^jĨ|C^ +// b QNH[^jĨ|C^ +// d ԃNH[^jIi[obt@̃|C^ +// t ԃp[^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void QUAT_Lerp( Quat *p, Quat *q, Quat *d, s32 t); + +//---------------------------------------------------------------------- +// NH[^jI̋ʐ` +// +//EQ‚̃NH[^jIʐ`ԂʂdwNH[^jI֊i[܂B +// +//EF +// a PNH[^jĨ|C^ +// b QNH[^jĨ|C^ +// d ԃNH[^jIi[obt@̃|C^ +// t ԃp[^ +// +//E߂lFȂ +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void QUAT_Slerp(Quat *p, Quat *q, Quat *d, s32 t); + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_QUAT_H diff --git a/trunk/IrisMainp/include/IrisSinTable.h b/trunk/IrisMainp/include/IrisSinTable.h new file mode 100644 index 0000000..74d40ac --- /dev/null +++ b/trunk/IrisMainp/include/IrisSinTable.h @@ -0,0 +1,128 @@ +//====================================================================== +// IrisSinTable.h +// Sine[u֘A +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SIN_TABLE_H +#define _IRIS_SIN_TABLE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + + +#define SIN_NDIV_DEFAULT 256 // ftHgSine[u̕ + +#define SINCOS256TBL_ON_TCM // TCMɔzûɓK256iKSinCose[uI +#define SINCOS1024TBL_ON_TCM // TCMɔzûɓK1024iKSinCose[uI +#define SINCOS4096TBL_ON_TCM // TCMɔzûɓK4096iKSinCose[uI + + +// ftHgSine[uiVtgLj + +#define SinTbl(theta) TrigonTblPriv(Sin, SIN_NDIV_DEFAULT, theta) +#define CosTbl(theta) TrigonTblPriv(Cos, SIN_NDIV_DEFAULT, theta) + + +// ]pxSine[uiVtgLj + +#ifdef SINCOS256TBL_ON_TCM +#define Sin256Tbl(theta) (sin256_tbl[ ((u16 )((theta) )) >>8]) +#define Cos256Tbl(theta) (sin256_tbl[ ((u16 )((theta)+0x10000/4)) >>8]) +#else +#define Sin256Tbl(theta) (sincos256_tbl[ (((u16 )((theta) )) >>8) * 2 ]) +#define Cos256Tbl(theta) (sincos256_tbl[ (((u16 )((theta) )) >>8) * 2 + 1]) +#endif + +#ifdef SINCOS1024TBL_ON_TCM +#define Sin1024Tbl(theta) (sin1024_tbl[ ((u16 )((theta) )) >>6]) +#define Cos1024Tbl(theta) (sin1024_tbl[ ((u16 )((theta)+0x10000/4)) >>6]) +#else +#define Sin1024Tbl(theta) (sincos1024_tbl[(((u16 )((theta) )) >>6) * 2 ]) +#define Cos1024Tbl(theta) (sincos1024_tbl[(((u16 )((theta) )) >>6) * 2 + 1]) +#endif + +#ifdef SINCOS4096TBL_ON_TCM +#define Sin4096Tbl(theta) (sin4096_tbl[ ((u16 )((theta) )) >>4]) +#define Cos4096Tbl(theta) (sin4096_tbl[ ((u16 )((theta)+0x10000/4)) >>4]) +#else +#define Sin4096Tbl(theta) (sincos4096_tbl[(((u16 )((theta) )) >>4) * 2 ]) +#define Cos4096Tbl(theta) (sincos4096_tbl[(((u16 )((theta) )) >>4) * 2 + 1]) +#endif + + +// ftHgSine[uiVtgj + +#define SinTblImm(theta) TrigonTblImmPriv(Sin, SIN_NDIV_DEFAULT, theta) +#define CosTblImm(theta) TrigonTblImmPriv(Cos, SIN_NDIV_DEFAULT, theta) + + +// ]pxSine[uiVtgj + +#ifdef SINCOS256TBL_ON_TCM +#define Sin256TblImm(theta) (sin256_tbl[ (u8 )((theta) )]) +#define Cos256TblImm(theta) (sin256_tbl[ (u8 )((theta)+0x100/4 )]) +#else +#define Sin256TblImm(theta) (sincos256_tbl[ (u8 )((theta) ) * 2 ]) +#define Cos256TblImm(theta) (sincos256_tbl[ (u8 )((theta) ) * 2 + 1]) +#endif + +#ifdef SINCOS1024TBL_ON_TCM +#define Sin1024TblImm(theta) (sin1024_tbl[ (u16 )((theta) )]) +#define Cos1024TblImm(theta) (sin1024_tbl[ (u16 )((theta)+0x400/4 )]) +#else +#define Sin1024TblImm(theta) (sincos1024_tbl[(u16 )(theta) )) * 2 ]) +#define Cos1024TblImm(theta) (sincos1024_tbl[(u16 )(theta) )) * 2 + 1]) +#endif + +#ifdef SINCOS4096TBL_ON_TCM +#define Sin4096TblImm(theta) (sin4096_tbl[ (u16 )((theta) )]) +#define Cos4096TblImm(theta) (sin4096_tbl[ (u16 )((theta)+0x1000/4)]) +#else +#define Sin4096TblImm(theta) (sincos4096_tbl[(u16 )((theta) ) * 2 ]) +#define Cos4096TblImm(theta) (sincos4096_tbl[(u16 )((theta) ) * 2 + 1]) +#endif + + +// ArcCose[u + +#define ArcCosTbl(cos) ((cos) >= V_ONE ? 0 \ + : arcCos256_tbl[-(cos) >= V_ONE ? 0 \ + : ((cos)>>(V_SFT - 8)) + 0]) + + +// ԃ}NiL̃}N͒ڎgpȂʼnj + +#define TrigonTblPriv( trigon, ndiv, theta) TrigonNDivTbl( trigon, ndiv, theta) +#define TrigonNDivTbl( trigon, ndiv, theta) trigon##ndiv##Tbl( theta) + +#define TrigonTblImmPriv(trigon, ndiv, theta) TrigonNDivTblImm(trigon, ndiv, theta) +#define TrigonNDivTblImm(trigon, ndiv, theta) trigon##ndiv##TblImm( theta) + +extern const s16 sin256_tbl[]; +extern const s16 sin1024_tbl[]; +extern const s16 sin4096_tbl[]; +extern const s16 sincos256_tbl[]; +extern const s16 sincos1024_tbl[]; +extern const s16 sincos4096_tbl[]; + +extern const u16 arcCos256_tbl[]; + +#define ArcTanTbl(tan) (arcTan256_tbl[((tan)>>(9-7)) + 128]) + +extern const s16 arcTan256_tbl[]; + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SIN_TABLE_H diff --git a/trunk/IrisMainp/include/IrisSystemCall.h b/trunk/IrisMainp/include/IrisSystemCall.h new file mode 100644 index 0000000..45c35e2 --- /dev/null +++ b/trunk/IrisMainp/include/IrisSystemCall.h @@ -0,0 +1,235 @@ +//====================================================================== +// IrisSystemCall.h +// IRIS VXeR[ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SYSTEM_CALL_H +#define _IRIS_SYSTEM_CALL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + + +#ifdef __MWERKS__ +#ifndef CODE32 +#define SystemCall(No) asm { SWI No } +#else +#define SystemCall(No) asm { SWI No << 16 } +#endif +#elif defined( __GNUC__ ) +#ifndef CODE32 +#define SystemCall(No) asm ("SWI "#No) +#else +#define SystemCall(No) asm ("SWI "#No" << 16") +#endif +#elif defined( __CC_ARM ) +#ifndef CODE32 +#define SystemCall(No) __asm { SWI No } +#else +#define SystemCall(No) __asm { SWI No << 16 } +#endif +#endif + + +//---------------------------------------------------------------------- +// J[hǂݍ +//---------------------------------------------------------------------- + +#if defined(IRIS_TS) +#define SVC_ReadCard(dmaNo, srcp, destp, size) _SVC_ReadCard(dmaNo, (void *)(srcp), (void *)(destp), size) + +void _SVC_ReadCard(s32 dmaNo, void *srcp, void *destp, s32 size); + +#elif defined(IRIS_TEG) +#define SVC_ReadCard(dmaNo, srcp, destp, size) _SVC_TEG_ReadCard(dmaNo, (void *)(srcp), (void *)(destp), size) + +void _SVC_TEG_ReadCard(s32 dmaNo, void *srcp, void *destp, s32 size); + +#else +#define SVC_ReadCard(dmaNo, srcp, destp, size) ((void) 0) +#endif + +//EJ[hf[^ǂݍ݂܂B +//EJ[h̃AhX512ByteEA{̑̃AhX4ByteE +// 킹Kv܂B +// +//EF +// s32 dmaNo DMAԍi0`3 ȊO̒lnꂽCPUœǂݍ݂܂j +// iTEG{[hł͖ACPUɂē]܂j +// void *srcp J[h̃\[XAhX +// void *destp {̑̃fXeBl[VAhX +// s32 size ]TCY + +//---------------------------------------------------------------------- +// 荞݃EFCg +//---------------------------------------------------------------------- + +void SVC_WaitIntr(u32 clearEnable, u32 intrFlags); + +//EIntrFlagsŎw肵荞݂܂HaltԂő҂܂B +//E荞ݏɂINTR_CHECK_BUF (DTCM_END - 0x8) ֊YtOZbgĉB +//E̊荞݂𕹗pAOS_Halt()JԂĂяoꍇƔׂ +// VXeR[ĂяõI[o[wbhy邱Ƃł܂B +// +//EF +// u32 clearEnable ɊYtOZbgĂꍇɃNA邩ǂ̎w +// u32 intrFlags EFCg銄荞݂̎wiIrisSystemCallDefine.hQƁj + +//---------------------------------------------------------------------- +// uuN荞݃EFCg +//---------------------------------------------------------------------- + +void SVC_WaitVBlankIntr(void); + +//EuuN荞݂܂HaltԂő҂܂B +//E荞ݏɂINTR_CHECK_BUF (DTCM_END - 0x8) ֊YtOZbgĉB +//E̊荞݂𕹗pAOS_Halt()JԂĂяoꍇƔׂ +// VXeR[ĂяõI[o[wbhy邱Ƃł܂B +//ESVC_WaitIntr(1, V_BLANK_INTR_FLAG)ƓłB + +//---------------------------------------------------------------------- +// botZbg +//---------------------------------------------------------------------- + +void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData); + +//EDmaSet}N݊̃p[^RAMNA܂̓Rs[܂B +//E32bit]ł͋I4ByteEɂăANZX܂A +// 16bit]ł͈2ByteE֍킹ēnKv܂B +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// u32 dmaCntData DMA_SRC_FIX^DMA_32BIT_BUS^DMA_COUNT_MASK̂ݗL +// DMA_SRC_FIX( 0, 1) = (\[XAhXECNg, \[XAhXŒ) +// DMA_32BIT_BUS(0, 1) = (16bit], 32bit]) +// DMA_COUNT_MASK & dmaCntData = ] +// +//Eʃ}NF +// SVC_CpuClear, SVC_CpuClearArray, SVC_CpuCopy, SVC_CpuCopyArray + +//---------------------------------------------------------------------- +// botZbg +//---------------------------------------------------------------------- + +void SVC_CpuSetFast(const void *srcp, void *destp, u32 dmaCntData); + +//EDmaSet}N݊̃p[^ōRAMNA܂̓Rs[܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕[h^XgA߂gp܂B +//E4ByteEȊOň^ĂI4ByteEɂăANZX܂B +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// u32 dmaCntData DMA_SRC_FIX^DMA_COUNT_MASK̂ݗL +// DMA_SRC_FIX(0, 1) = (\[XAhXECNg, \[XAhXŒ) +// DMA_COUNT_MASK & dmaCntData = ] +// +//Eʃ}NF +// SVC_CpuClearFast, SVC_CpuClearArrayFast, SVC_CpuCopyFast, SVC_CpuCopyArrayFast + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define SVC_CpuClear(data, destp, size, bit) \ +{ \ + vu##bit tmp = (vu##bit )(data); \ + SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8) & 0x1fffff))); \ +} + +#define SVC_CpuClearArray(data, destp, bit) \ + SVC_CpuClear( data, destp, sizeof(destp), bit) + +//ECPURAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//ESVC_CpuClearArray̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define SVC_CpuCopy(srcp, destp, size, bit) \ + \ + SVC_CpuSet((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8) & 0x1fffff))) + +#define SVC_CpuCopyArray(srcp, destp, bit) \ + SVC_CpuCopy( srcp, destp, sizeof(srcp), bit) + +//ECPUŃRs[VXeR[Ăяo܂B +//ESVC_CpuCopyArray̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define SVC_CpuClearFast(data, destp, size) \ +{ \ + vu32 tmp = (vu32 )(data); \ + SVC_CpuSetFast((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | ((size)/(32/8) & 0x1fffff))); \ +} + +#define SVC_CpuClearArrayFast(data, destp) \ + SVC_CpuClearFast( data, destp, sizeof(destp)) + +//ECPUōRAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕XgA߂gp܂B +//ESVC_CpuClearArrayFast̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define SVC_CpuCopyFast(srcp, destp, size) \ + \ + SVC_CpuSetFast((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | ((size)/(32/8) & 0x1fffff))) + +#define SVC_CpuCopyArrayFast(srcp, destp) \ + SVC_CpuCopyFast( srcp, destp, sizeof(srcp)) + +//ECPUōɃRs[VXeR[Ăяo܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕[h^XgA߂gp܂B +//ESVC_CpuCopyArrayFast̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SYSTEM_CALL_H diff --git a/trunk/IrisMainp/include/IrisSystemCallArm.s b/trunk/IrisMainp/include/IrisSystemCallArm.s new file mode 100644 index 0000000..33d6ff6 --- /dev/null +++ b/trunk/IrisMainp/include/IrisSystemCallArm.s @@ -0,0 +1,51 @@ +;======================================================================= +; IrisSystemCallArm.s +; IRIS VXeR[iARMASMpj +; +; eVXeR[̎dl IrisSystemCall.h +; QƂĉB +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SYSTEM_CALL_H + ELSE +_IRIS_SYSTEM_CALL_H * 1 + + + INCLUDE IrisTargetArm.s + INCLUDE IrisSystemCallDefineArm.s + + +;----------------------------------------------------------------------- +; 荞݃EFCg +;----------------------------------------------------------------------- + + EXTERN SVC_WaitIntr + + +;----------------------------------------------------------------------- +; uuN荞݃EFCg +;----------------------------------------------------------------------- + + EXTERN SVC_WaitVBlankIntr + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + EXTERN SVC_CpuSet + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + EXTERN SVC_CpuSetFast + + + + ENDIF ; _IRIS_SYSTEM_CALL_H + + END + diff --git a/trunk/IrisMainp/include/IrisSystemCallDefine.h b/trunk/IrisMainp/include/IrisSystemCallDefine.h new file mode 100644 index 0000000..6ffaa7f --- /dev/null +++ b/trunk/IrisMainp/include/IrisSystemCallDefine.h @@ -0,0 +1,31 @@ +//====================================================================== +// IrisSystemCallDefine.h +// IRIS VXeR[p萔 +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SYSTEM_CALL_DEFINE_H +#define _IRIS_SYSTEM_CALL_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// VXeR[m +//---------------------------------------------------------------------- + +#define SWI_NO_WAIT_INTR 4 // SVC_WaitIntr() +#define SWI_NO_WAIT_VBLANK_INTR 5 // SVC_WaitVBlankIntr() + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SYSTEM_CALL_DEFINE_H diff --git a/trunk/IrisMainp/include/IrisSystemCallDefineArm.s b/trunk/IrisMainp/include/IrisSystemCallDefineArm.s new file mode 100644 index 0000000..fcb992f --- /dev/null +++ b/trunk/IrisMainp/include/IrisSystemCallDefineArm.s @@ -0,0 +1,30 @@ +;======================================================================= +; IrisSystemCallDefineArm.s +; IRIS VXeR[p萔iARMASMpj +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SYSTEM_CALL_DEFINE_H + ELSE +_IRIS_SYSTEM_CALL_DEFINE_H * 1 + + + INCLUDE IrisTargetArm.s + + +;----------------------------------------------------------------------- +; VXeR[m +;----------------------------------------------------------------------- + +SWI_NO_WAIT_INTR * 4 ; SVC_WaitIntr() +SWI_NO_WAIT_VBLANK_INTR * 5 ; SVC_WaitVBlankIntr() + +SWI_NO_CPU_SET * 11 ; SVC_CpuSet() +SWI_NO_CPU_SET_FAST * 12 ; SVC_CpuSetFast() + + + + ENDIF ; _IRIS_SYSTEM_CALL_DEFINE_H + + END + diff --git a/trunk/IrisMainp/include/IrisSystemCallMw.s b/trunk/IrisMainp/include/IrisSystemCallMw.s new file mode 100644 index 0000000..17fe794 --- /dev/null +++ b/trunk/IrisMainp/include/IrisSystemCallMw.s @@ -0,0 +1,47 @@ +;======================================================================= +; IrisSystemCallMw.s +; IRIS VXeR[iMWASMARMpj +; +; eVXeR[̎dl IrisSystemCall.h +; QƂĉB +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= +#ifndef _IRIS_SYSTEM_CALL_H +#define _IRIS_SYSTEM_CALL_H + + + .INCLUDE IrisTarget.h + .INCLUDE IrisSystemCallDefine.h + + +;----------------------------------------------------------------------- +; 荞݃EFCg +;----------------------------------------------------------------------- + + .EXTERN SVC_WaitIntr + + +;----------------------------------------------------------------------- +; uuN荞݃EFCg +;----------------------------------------------------------------------- + + .EXTERN SVC_WaitVBlankIntr + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + .EXTERN SVC_CpuSet + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + .EXTERN SVC_CpuSetFast + + + +#endif // _IRIS_SYSTEM_CALL_H diff --git a/trunk/IrisMainp/include/IrisTarget.h b/trunk/IrisMainp/include/IrisTarget.h new file mode 100644 index 0000000..881f211 --- /dev/null +++ b/trunk/IrisMainp/include/IrisTarget.h @@ -0,0 +1,38 @@ +//====================================================================== +// IrisTarget.h +// IRIS^[QbgI +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_TARGET_H +#define _IRIS_TARGET_H + +#ifdef __cplusplus +extern "C" { +#endif + + +//#define IRIS_BB // ubh{[hp`ւ̐؂芷 +//#define IRIS_TEG // TEG{[hp`ւ̐؂芷 +#define IRIS_TS // TSp`ւ̐؂芷 + +#define MMEM_4M // C4M{̗p`ւ̐؂芷 + +#ifdef NDEBUG +#else +//#define ENABLE_DBGLIB // fobOCugp܂ +#endif + +//#define NSYNC_SUBP // TuvZbTƓȂꍇ + +#ifdef IRIS_BB +#else +#define EXCEPT_VEC_TO_ITCM // OxN^𖽗TCMֈړꍇ +#endif + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_TARGET_H diff --git a/trunk/IrisMainp/include/IrisTargetArm.s b/trunk/IrisMainp/include/IrisTargetArm.s new file mode 100644 index 0000000..103ee2c --- /dev/null +++ b/trunk/IrisMainp/include/IrisTargetArm.s @@ -0,0 +1,39 @@ +;======================================================================= +; IrisTargetArm.s +; IRIS^[QbgIiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_TARGET_H + ELSE +_IRIS_TARGET_H * 1 + + +; IRIS_BB * 1 ; ubh{[hp`ւ̐؂芷 +IRIS_TEG * 1 ; TEG{[hp`ւ̐؂芷 +; IRIS_TS * 1 ; TSp`ւ̐؂芷 + +MMEM_4M * 1 ; C4M{̗p`ւ̐؂芷 + + IF :DEF: NDEBUG + ELSE + +; ENABLE_DBGLIB ; fobOCugp܂ + + ENDIF + +; NSYNC_SUBP * 1 ; TuvZbTƓȂꍇ + + + IF :DEF: IRIS_BB + ELSE + +EXCEPT_VEC_TO_ITCM * 1 ; OxN^𖽗TCMֈړꍇ + + ENDIF + + + ENDIF ; _IRIS_TARGET_H + + END + diff --git a/trunk/IrisMainp/include/IrisTypes.h b/trunk/IrisMainp/include/IrisTypes.h new file mode 100644 index 0000000..6b5df86 --- /dev/null +++ b/trunk/IrisMainp/include/IrisTypes.h @@ -0,0 +1,851 @@ +//====================================================================== +// IrisTypes.h +// IRIS W^錾 +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_TYPES_H +#define _IRIS_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// f[^^CvĒ` +//---------------------------------------------------------------------- + +typedef unsigned char u8; +typedef unsigned short int u16; +typedef unsigned int u32; +typedef unsigned long long int u64; + +typedef signed char s8; +typedef signed short int s16; +typedef signed int s32; +typedef signed long long int s64; + +typedef float f32; +typedef double f64; + + +#define vl volatile + +typedef vl u8 vu8; +typedef vl u16 vu16; +typedef vl u32 vu32; +typedef vl u64 vu64; + +typedef vl s8 vs8; +typedef vl s16 vs16; +typedef vl s32 vs32; +typedef vl s64 vs64; + +typedef vl f32 vf32; +typedef vl f64 vf64; + + + +// fBXvCXg +typedef u32 Gxl; +typedef vl Gxl vGxl; + + +// CgxNg +typedef struct { + s32 x:10; + s32 y:10; + s32 z:10; + u32 no:2; +} LightVector; +typedef vl LightVector vLightVector; + +// CgJ[ +typedef struct { + u16 r:5; + u16 g:5; + u16 b:5; + u16 :0; + + u16 :14; + u16 no:2; +} LightColor; +typedef vl LightColor vLightColor; + + +// 10bit 3DxNgieXgxNgj +typedef struct { + s32 x:10; + s32 y:10; + s32 z:10; +} Vec10, Pos10, TestVec; +typedef vl Pos10 vPos10; +typedef vl Vec10 vVec10; +typedef vl TestVec vTestVec; + +// 16bit 3DxNgiWxNgAeXgʒuWj +typedef struct { + s16 x; + s16 y; + s16 z; + s16 w; // pbḧiR[h̍̂߂ɒljj +} Vec16, Vec, Pos16, TestPos; +typedef vl Pos16 vPos16; +typedef vl Vec16 vVec16; +typedef vl Vec vVec; +typedef vl TestPos vTestPos; + +// 32bit 3DxNgiWʒuWj +typedef struct { + s32 x; + s32 y; + s32 z; +} Vec32, Pos32, Pos; +typedef vl Vec32 vVec32; +typedef vl Pos32 vPos32; +typedef vl Pos vPos; + +// 16bit NH[^jIiWNH[^jIj +typedef struct { + s16 x; + s16 y; + s16 z; + s16 w; +} Quat16, Quat; +typedef vl Quat16 vQuat16; +typedef vl Quat vQuat; + +// 32bit NH[^jI +typedef struct { + s32 x; + s32 y; + s32 z; + s32 w; +} Quat32; +typedef vl Quat32 vQuat32; + + +// 16bit 2DxNgiW2DxNgj +typedef struct { + s16 x; + s16 y; +} Vec2D16, Pos2D16, Vec2D; +typedef vl Vec2D16 vVec2D16; +typedef vl Pos2D16 vPos2D16; +typedef vl Vec2D vVec2D; + +// 32bit 2DxNgiW2DʒuWj +typedef struct { + s32 x; + s32 y; +} Vec2D32, Pos2D32, Pos2D; +typedef vl Vec2D32 vVec2D32; +typedef vl Pos2D32 vPos2D32; +typedef vl Pos2D vPos2D; + + +// eNX`W + +typedef struct { + s16 s; + s16 t; +} TexCoord, ST1616_t; +typedef vl TexCoord vTexCoord; +typedef vl ST1616_t vST1616_t; + + +// eXg{bNX +typedef struct { + s16 x; + s16 y; + s16 z; + s16 w; + s16 h; + s16 d; +} TestBox, Box16_t; +typedef vl TestBox vTestBox; +typedef vl Box16_t vBox16_t; + + +// 5bitJ[ +typedef struct { + u16 r:5; + u16 g:5; + u16 b:5; + u16 a:1; +} Color5, RGBA5551_t; +typedef vl Color5 vColor5; +typedef vl RGBA5551_t vRGBA5551_t; + +// 8bitJ[ +typedef struct { + u8 r; + u8 g; + u8 b; + u8 a; +} Color8, RGBA8888_t; +typedef vl Color8 vColor8; +typedef vl RGBA8888_t vRGBA8888_t; + + + +// 3vf̍s +typedef s32 MtxRow3_t[3]; +typedef struct { + MtxRow3_t r; +} MtxRow3; + +typedef MtxRow3 MtxRow; +typedef MtxRow3 Mtx33Row; + +typedef vl MtxRow vMtxRow; +typedef vl MtxRow3 vMtxRow3; +typedef vl Mtx33Row vMtx33Row; + +// 4vf̍s +typedef s32 MtxRow4_t[4]; +typedef struct { + MtxRow4_t r; +} MtxRow4; + +typedef MtxRow4 Mtx44Row; + +typedef vl MtxRow4 vMtxRow4; +typedef vl Mtx44Row vMtx44Row; + +// 4x3s +typedef s32 Mtx_t[4][3]; +typedef union { + Mtx_t m; +} Mtx; +typedef vl Mtx vMtx; + +// 3x3s +typedef s32 Mtx33_t[3][3]; +typedef union { + Mtx33_t m; +} Mtx33; +typedef vl Mtx33 vMtx33; + +// 4x4s +// used for projection matrix +typedef s32 Mtx44_t[4][4]; +typedef union { + Mtx44_t m; +} Mtx44; +typedef vl Mtx44 vMtx44; + + + +//---------------------------------------------------------------------- +// \ +//---------------------------------------------------------------------- + +// vOXe[^XWX^\ +typedef struct { + u32 cpuMode:5; // bot[h + u32 thumbState:1; // sgtlaXe[g + u32 fiq_disable:1; // ehps + u32 irq_disable:1; // hqps + u32 :19; + u32 q:1; // XeBbL[I[o[t[ + u32 v:1; // I[o[t[ + u32 c:1; // L[^{[^g + u32 z:1; // [ + u32 n:1; // ^ +} PsrData; +typedef vl PsrData vPsrData; + + +// 荞ݗv^ƒtO\ +typedef struct { + u16 blankV:1; // uuN + u16 blankH:1; // guN + u16 countV:1; // uJE^v + u16 timer0:1; // ^C}[O + u16 timer1:1; // ^C}[P + u16 timer2:1; // ^C}[Q + u16 timer3:1; // ^C}[R + u16 sio:1; // VAʐM + u16 dma0:1; // cl`O + u16 dma1:1; // cl`P + u16 dma2:1; // cl`Q + u16 dma3:1; // cl`R + u16 key:1; // L[ + u16 cartridge:1; // J[gbW + u16 :2; + + u16 subp:1; // TuvZbT + u16 subpSendFifoEmpty:1; // TuvZbTԑMehenGveB + u16 subpRecvFifoNotEmpty:1; // TuvZbTԎMehenmbgGveB + u16 cardData:1; // J[hf[^ + u16 cardIreq:1; // J[hhqdp + u16 gxfifo:1; // WIgR}hehen +} IntrFlags; +typedef vl IntrFlags vIntrFlags; + + +// TuvZbTC^tF[X\ +typedef struct { + u16 recvStatus:4; // MXe[^X + u16 :4; + u16 sendStatus:4; // MXe[^X + u16 :1; + u16 sendIf:1; // 荞ݗvM + u16 recvIf_enable:1; // 荞ݗvM + u16 subp_enable:1; // TuvZbT Cl[ui폜\j +} SubpIntf; +typedef vl SubpIntf vSubpIntf; + + +// TuvZbTʐMehenRg[\ +typedef struct { + u16 sendEmpty:1; // Mehen GveB + u16 sendFull:1; // t + u16 sendIf_enable:1; // 荞ݗv + u16 sendClear:1; // NA + u16 :4; + u16 recvEmpty:1; // Mehen GveB + u16 recvFull:1; // t + u16 recvIf_enable:1; // 荞ݗv + u16 :4; + u16 enable:1; // ehenCl[u +} SubpFifoCnt; +typedef vl SubpFifoCnt vSubpFifoCnt; + + + +// uq`lRg[\ +typedef struct +{ + u8 mode:3; + u8 offset:2; + u8 :2; + u8 enable:1; +} VramCnt; +typedef vl VramCnt vVramCnt; + + +// [Nq`lRg[\ +typedef struct +{ + u8 block0:1; + u8 block1:1; +} WramCnt; +typedef vl WramCnt vWramCnt; + + + +// \Rg[\ +typedef struct { + u16 bgMode:3; // af[hI + u16 bg0_3D_on:1; // afOւRc\ + u16 objCharMapType:1; // naiLN^f[^ }bsO^Cv + u16 objBmpMapType:2; // nairbg}bvf[^ }bsO^Cv + u16 lcdc_off:1; // kbcb nee + u16 bg0_on:1; // afO nm + u16 bg1_on:1; // afP nm + u16 bg2_on:1; // afQ nm + u16 bg3_on:1; // afR nm + u16 obj_on:1; // nai nm + u16 win0_on:1; // EChEO nm + u16 win1_on:1; // EChEP nm + u16 objwin_on:1; // naiEChE nm + + u16 dispMode:2; // \[h + u16 dispVram:2; // \uq`lI + u16 objCharVramEx:2; // naiLN^f[^uq`lg + u16 objBmpVramEx:1; // nairbg}bvf[^uq`lg + u16 blankH_objOff:1; // guNnai nee + + u16 bgCharBaseOffset:3; // afLN^f[^x[XAhXEItZbg + u16 bgScBaseOffset:3; // afXN[f[^x[XAhXEItZbg + u16 bgPlttEx:1; // afpbgg + u16 objPlttEx:1; // naipbgg +} DispCnt; +typedef vl DispCnt vDispCnt; + + +// Rc\Rg[\ +typedef struct { + u16 texMaster_on:1; // eNX`}X^ nm + u16 shadingEx:1; // gVF[fBO[h + u16 alphaTest_on:1; // At@eXg nm + u16 alphaBlend_on:1; // At@uh nm + u16 antiAliasing_on:1; // A`GAVO nm + u16 edgeMarking_on:1; // GbW}[LO nm + u16 fogMode:1; // tHO[h + u16 fogMaster_on:1; // tHO}X^ nm + + u16 fogIndex:4; // tHO CfbNX͈ + u16 render_over:1; // _O I[o[t[ + u16 geometry_over:1; // WIg I[o[t[ + u16 clearImage_on:1; // v_OC[W nm +} Disp3DCnt; +typedef vl Disp3DCnt vDisp3DCnt; + + +// \Xe[^X\ +typedef struct { + u16 blankingV:1; // uuNԒ + u16 blankingH:1; // guNԒ + u16 countV:1; // uJE^v + u16 blankV_if_enable:1; // uuN荞ݗv + u16 blankH_if_enable:1; // guN荞ݗv + u16 countV_if_enable:1; // uJE^v荞ݗv + u16 :1; + u16 setV_d8:1; // uJE^rlݒicWj + u16 setV:8; // icV|Oj + + u16 readV:9; // uJE^ݒl + u16 :0; +} DispStat; +typedef vl DispStat vDispStat; + + +// \Lv`Rg[\ +typedef struct { + u16 gfxBlendWeight:8; // OtBbNX̃uhW + u16 ramBlendWeight:8; // q`l̃uhW + + u16 destVram:2; // ݂uq`lw + u16 destVramOffset:2; // ݂uq`lAhXEItZbg + u16 size:2; // Lv`TCY + u16 :2; + u16 dispSrc:1; // \ǂݍݎw + u16 ramSrc:1; // q`lǂݍݎw + u16 srcVramOffset:2; // ǂݍ݂uq`lAhXEItZbg + u16 :1; + u16 blendMode:2; // uh[h + u16 enable:1; // Lv`Cl[u +} DispCapCnt; +typedef vl DispCapCnt vDispCapCnt; + + + +// UCNRg[\ +typedef struct { + u16 sizeBgH:4; // afUCN gTCY + u16 sizeBgV:4; // afUCN uTCY + u16 sizeObjH:4; // naiUCN gTCY + u16 sizeObjV:4; // naiUCN uTCY +} MosCnt; +typedef vl MosCnt vMosCnt; + + +// uhRg[\ +typedef struct { + u16 nearPixel_bg0_on:1; // PsNZ + u16 nearPixel_bg1_on:1; + u16 nearPixel_bg2_on:1; + u16 nearPixel_bg3_on:1; + u16 nearPixel_obj_on:1; + u16 nearPixel_bd_on:1; + u16 blendMode:2; // uh[h + u16 farPixel_bg0_on:1; // QsNZ + u16 farPixel_bg1_on:1; + u16 farPixel_bg2_on:1; + u16 farPixel_bg3_on:1; + u16 farPixel_obj_on:1; + u16 farPixel_bd_on:1; + u16 :2; + u16 a:5; // p[^ ` + u16 :3; + u16 b:5; // p[^ a + u16 :3; + u16 y:5; // p[^ x + u16 :3; +} BlendCnt; +typedef vl BlendCnt vBlendCnt; + + +// EChERg[\ +typedef struct { + u8 bg0_on:1; // afO nm + u8 bg1_on:1; // afP nm + u8 bg2_on:1; // afQ nm + u8 bg3_on:1; // afR nm + u8 obj_on:1; // nai nm + u8 blend_on:1; // J[ nm + u8 :2; +} WindCnt; +typedef vl WindCnt vWindCnt; + + + +// afRg[\ +typedef struct { + u16 priority:2; // \D + u16 charBasep:2; // LN^ x[XAhX + u16 :2; + u16 mosaic:1; // UCN + u16 colorMode:1; // PUF^QTUF I + u16 scBasep:5; // XN[ x[XAhX + u16 loop:1; // [v + u16 size:2; // XN[TCY +} BgCnt; +typedef vl BgCnt vBgCnt; + +// pbggafRg[\ +typedef struct { + u16 priority:2; // \D + u16 charBasep:2; // LN^ x[XAhX + u16 :2; + u16 mosaic:1; // UCN + u16 colorMode:1; // PUF^QTUF I + u16 scBasep:5; // XN[ x[XAhX + u16 exPlttSlot:1; // gpbg̃Xbg蓖 + u16 size:2; // XN[TCY +} ExPlttBgCnt; +typedef vl ExPlttBgCnt vExPlttBgCnt; + + +// afItZbgRg[\ +typedef struct { + u16 h; + u16 v; +} BgOffsetCnt; +typedef vl BgOffsetCnt vBgOffsetCnt; + + +// afXN[\ +typedef struct { + u16 charNo:10; // LN^m + u16 flipH:1; // gtbv + u16 flipV:1; // utbv + u16 pltt:4; // pbgm +} BgScData; +typedef vl BgScData vBgScData; + + +// afAtBϊ\[Xf[^\ +typedef struct { + s32 srcCenterX; // f[^SW << 8 + s32 srcCenterY; + s16 dispCenterX; // \SW + s16 dispCenterY; + s16 ratioX; // gk << 8 + s16 ratioY; + s16 theta; // ]pi-128 ` 127j<< 8 +} BgAffineSrcData; +typedef vl BgAffineSrcData vBgAffineSrcData; + +// afAtBϊfXeBl[Vf[^\ +typedef struct { + s16 h_diffX; // CwW + s16 v_diffX; // wW + s16 h_diffY; // CxW + s16 v_diffY; // xW + s32 startX; // X^[gwW + s32 startY; // X^[gxW +} BgAffineDestData; +typedef vl BgAffineDestData vBgAffineDestData; + + +// n`l\ +typedef struct { + u16 posV:8; // xW + u16 affineMode:2; // AtB[h + u16 objMode:2; // nai[h + u16 mosaic:1; // UCN + u16 colorMode:1; // PUF/QTUF I + u16 shape:2; // nai` + + u16 posH:9; // wW + u16 affineParamNo_lo:3; // AtBϊp[^m ʂRrbg + u16 flipH:1; // gtbv + u16 flipV:1; // utbv + u16 size:2; // naiTCY + + u16 charNo:10; // LN^m + u16 priority:2; // \D + u16 pltt:4; // pbgm + u16 affineParam; // AtBϊp[^ +} OamData; +typedef vl OamData vOamData; + +// rbg}bvnaipn`l\ +typedef struct { + u16 posV:8; // xW + u16 affineMode:2; // AtB[h + u16 objMode:2; // nai[h + u16 mosaic:1; // UCN + u16 colorMode:1; // PUF/QTUF I + u16 shape:2; // nai` + + u16 posH:9; // wW + u16 affineParamNo_lo:3; // AtBϊp[^m ʂRrbg + u16 flipH:1; // gtbv + u16 flipV:1; // utbv + u16 size:2; // naiTCY + + u16 charNo:10; // LN^m + u16 priority:2; // \D + u16 alpha:4; // At@l + u16 affineParam; // AtBϊp[^ +} BmpObjOamData; +typedef vl BmpObjOamData vBmpObjOamData; + + +// naiAtBϊ\[Xf[^\ +typedef struct { + s16 ratioX; // gk + s16 ratioY; + s16 theta; // ]pi-128 ` 127j<< 8 +} ObjAffineSrcData; +typedef vl ObjAffineSrcData vObjAffineSrcData; + +// naiAtBϊfXeBl[Vf[^\ +typedef struct { + s16 h_diffX; // CwW + s16 v_diffX; // wW + s16 h_diffY; // CxW + s16 v_diffY; // xW +} ObjAffineDestData; +typedef vl ObjAffineDestData vObjAffineDestData; + + +// J[pbg\ +typedef struct { + u16 red:5; // + u16 green:5; // + u16 blue:5; // + u16 :1; +} PlttData; +typedef vl PlttData vPlttData; + + + +// C[WItZbgRg[\ +typedef struct +{ + u16 x:8; + u16 y:8; +} ClearImageOffsetCnt; +typedef vl ClearImageOffsetCnt vClearImageOffsetCnt; + + +// r[|[g\ +typedef struct +{ + u16 x1:8; + u16 y1:8; + u16 x2:8; + u16 y2:8; +} ViewPortCnt; +typedef vl ViewPortCnt vViewPortCnt; + + +// WIgGWXe[^X\ +typedef struct { + u16 testBusy:1; // eXg + u16 boxInView:1; // {bNẌꕔ̐ϓɂ邩 + u16 :6; + u16 posvecStackLevel:5; // ʒuxNg}gNX X^bNx + u16 projStackLevel:1; // vWFNV}gNX X^bNx + u16 mtxStackBusy:1; // }gNXX^bN rW[ + u16 mtxStackError:1; // I[o[t[ or A_[t[ + + u16 fifoCount:8; // WIgehen i[ + u16 fifoFull:1; // t + u16 fifoUnderHalf:1; // n[tȉ + u16 fifoEmpty:1; // GveB + u16 geometryBusy:1; // WIgGW rW[ + u16 :2; + u16 fifoIntrType:2; // WIgehen 荞݃^Cv +} GxStat; +typedef vl GxStat vGxStat; + + +// s񃂁[h Rg[\ +typedef struct { + u16 mode; // s񃂁[h + + u16 pad; // pbḧ +} MtxModeCnt; +typedef vl MtxModeCnt vMtxModeCnt; + + +// |S Rg[\ +typedef struct { + u16 light0_on:1; // CgO nm + u16 light1_on:1; // CgP nm + u16 light2_on:1; // CgQ nm + u16 light3_on:1; // CgR nm + u16 renderMode:2; // _O[h + u16 backFace_on:1; // nm + u16 frontFace_on:1; // \ nm + + u16 :3; + u16 xlu_depth_on:1; // |S̃fvXobt@XV nm + u16 farClipping_on:1; // e`qNbsO nm + u16 disp1Dot:1; // Phbg\ + u16 depthTestMode:1; // fvXeXg[h + u16 fog_on:1; // tHO nm + + u16 alpha:8; // sx + u16 id:8; // hc +} PolygonAttrCnt; +typedef vl PolygonAttrCnt vPolygonAttrCnt; + + +/// adfhm Rg[\ +typedef struct { + u16 primitiveType; // v~eBu^Cv + + u16 pad; // pbḧ +} BeginCnt; +typedef vl BeginCnt vBeginCnt; + + +// eNX`p[^ Rg[\ +typedef struct { + u16 imageBasep; // C[Wx[XAhX + + u16 repeatS:1; // rs[g + u16 repeatT:1; // s + u16 flipS:1; // rtbv + u16 flipT:1; // s + u16 sizeS:3; // rTCY + u16 sizeT:3; // s + u16 format:3; // eNX`tH[}bg + u16 pltt0_off:1; // J[pbgO nee + u16 coordGenSrc:2; // Wϊ\[X + + u16 plttBasep; // pbgx[XAhX + + u16 pad; // pbḧ +} TexParamCnt; +typedef vl TexParamCnt vTexParamCnt; + +// eNX`C[Wp[^ Rg[\ +typedef struct { + u16 imageBasep; // C[Wx[XAhX + + u16 repeatS:1; // rs[g + u16 repeatT:1; // s + u16 flipS:1; // rtbv + u16 flipT:1; // s + u16 sizeS:3; // rTCY + u16 sizeT:3; // s + u16 format:3; // eNX`tH[}bg + u16 pltt0_off:1; // J[pbgO nee + u16 coordGenSrc:2; // Wϊ\[X +} TexImageParamCnt; +typedef vl TexImageParamCnt vTexImageParamCnt; + +// eNX`pbgx[XAhX Rg[\ +typedef struct { + u16 plttBasep; // pbgx[XAhX + + u16 pad; // pbḧ +} TexPlttBaseCnt; +typedef vl TexPlttBaseCnt vTexPlttBaseCnt; + + + +// cl`Rg[\ +typedef struct { + u16 count; // ] + u16 :5; + u16 destpCnt:2; // ]AhX Rg[ + u16 srcpCnt:2; // ]AhX Rg[ + u16 continuous:1; // ReBjAX[h + u16 busSize:1; // oXTCY PU/RQaI + u16 timming:3; // ^C~OI + u16 if_enable:1; // 荞ݗv + u16 enable:1; // cl` +} DmaCnt; +typedef vl DmaCnt vDmaCnt; + + +// ^C}[Rg[\ +typedef struct { + u16 count; // JEg + u16 prescaler:2; // vXP[I + u16 connect:1; // ʃ^C}[ڑ + u16 :3; + u16 if_enable:1; // 荞ݗv + u16 enable:1; // ^C}[ + + u16 pad:8; // pbḧ +} TimerCnt; +typedef vl TimerCnt vTimerCnt; + + +// L[f[^\ +typedef struct { + u16 a:1; // ` + u16 b:1; // a + u16 select:1; // ZNg + u16 start:1; // X^[g + u16 plusR:1; // E + u16 plusL:1; // + u16 plusU:1; // + u16 plusD:1; // + u16 r:1; // q + u16 l:1; // k + u16 :6; +} KeyData; +typedef vl KeyData vKeyData; + +// L[Rg[\ +typedef struct { + u16 sel_a:1; // `{^ I + u16 sel_b:1; // a{^ I + u16 sel_select:1; // ZNg{^ I + u16 sel_start:1; // X^[g{^ I + u16 sel_plusR:1; // EL[ I + u16 sel_plusL:1; // L[ I + u16 sel_plusU:1; // L[ I + u16 sel_plusD:1; // L[ I + u16 sel_r:1; // q{^ I + u16 sel_l:1; // k{^ I + u16 :4; + u16 if_enable:1; // 荞ݗv + u16 intrType:1; // 荞݃^Cv I +} KeyCnt; +typedef vl KeyCnt vKeyCnt; + + +// ORg[\ +typedef struct { + u16 ctrdgDt8_cycles:2; // J[gbW Wf[^oX ANZXTCN + u16 ctrdgtAd16_1stCycles:2; // `cPUoX PANZXTCN + u16 ctrdgAd16_2ndCycles:1; // QANZXTCN + u16 ctrdgPhiClock:2; // Ӓ[qo̓NbN I + u16 ctrdgAccess:1; // ANZXI + u16 :3; + u16 cardAccess:1; // J[hANZXI +#ifdef IRIS_TS + u16 mainmemByteAccess:1; // CoCgANZXo + u16 mainmemCE2:1; // bdQMo +#else + u16 :2; +#endif + u16 mainmemInterface:1; // C^tF[X + u16 mainmemPriority:1; // D挠 +} ExMemCnt; +typedef vl ExMemCnt vExMemCnt; + + +// Bitkf[^WJpp[^ +typedef struct { + u16 srcNum; // \[Xf[^EoCg + u16 srcBitNum:8; // P\[Xf[^Erbg + u16 destBitNum:8; // PfXeBl[Vf[^Erbg + u32 destOffset:31; // \[Xf[^ɉZ鐔 + u32 destOffset0_on:1; // Õf[^ɃItZbgZ邩ۂ̃tO +} UnPackBitsParam; +typedef vl UnPackBitsParam vUnPackBitsParam; + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_TYPES_H diff --git a/trunk/IrisMainp/include/IrisUTL.h b/trunk/IrisMainp/include/IrisUTL.h new file mode 100644 index 0000000..eaf6d8d --- /dev/null +++ b/trunk/IrisMainp/include/IrisUTL.h @@ -0,0 +1,357 @@ +//==================================================================== +// IrisUTL.h +// [eBeBCu +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_UTL_H +#define _IRIS_UTL_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include + + + +//====================================================================== +// NA Rs[ +//====================================================================== + +//---------------------------------------------------------------------- +// bot PUNA +// +//ECPUɂ16bitf[^ŃNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NATCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_CpuClear16(u32 data, void *destp, s32 size); + +//---------------------------------------------------------------------- +// bot PURs[ +// +//ECPUɂ16bitŃRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_CpuCopy16(const void *srcp, void *destp, s32 size); + +//---------------------------------------------------------------------- +// bot RQNA +// +//ECPUɂ32bitf[^ŃNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NATCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_CpuClear32(u32 data, void *destp, s32 size); + +//---------------------------------------------------------------------- +// bot RQRs[ +// +//ECPUɂ32bitŃRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_CpuCopy32(const void *srcp, void *destp, s32 size); + +//---------------------------------------------------------------------- +// bot NA +// +//ECPUɂ32bitf[^ōɃNA܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕XgA߂gp܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NATCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_CpuClearFast(u32 data, void *destp, s32 size); + +//---------------------------------------------------------------------- +// bot Rs[ +// +//ECPUɂ32bitōɃRs[܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕[h^XgA߂gp܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]TCY +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_CpuCopyFast(const void *srcp, void *destp, s32 size); + + +//---------------------------------------------------------------------- +// f[^̃Xbvi[h^oCgj +// +//EsetDatadestpw̃f[^Xbv܂B +//EvZbTԂ⃂W[ԂŋL\[Xr䂷邽߂ +// XsbN邱Ƃł܂B +// +//EF +// setData Zbgf[^ +// destp Xbṽ|C^ +// +//E߂lFXbv֒OɊi[Ăl +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I UTL_SwapWord() gpĉB +//---------------------------------------------------------------------- + +s32 UTL_SwapWord(u32 setData, volatile u32 *destp); +u8 UTL_SwapByte(u32 setData, volatile u8 *destp); + + +//====================================================================== +// kf[^WJ +//====================================================================== + +//---------------------------------------------------------------------- +// akf[^WJ +// +//E0Œ̃rbgl߂f[^WJ܂B +//E\[XAhXɃCw肷ꍇ +// f[^LbVLɂKv܂B +//EfXeBl[VAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// UnPackBitsParam *paramp UnPackBitsParam\̃f[^̃AhX +// +//EUnPackBitsParam\ +// u16 srcNum \[Xf[^EoCg +// u8 srcBitNum P\[Xf[^Erbg +// u8 destBitNum PfXeBl[Vf[^Erbg +// u32 destOffset:31 \[Xf[^ɉZItZbg +// destOffset0_On:1 Õf[^ɃItZbgZ邩ۂ̃tO +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_UnPackBits(const void *srcp, void *destp, UnPackBitsParam *paramp); + + +//---------------------------------------------------------------------- +// kyVVkf[^WWJ +// +//ELZ77kf[^WJA8bitPʂŏ݂܂B +//E\[XAhXAfXeBl[VAhXƂɁAC +// w肷ꍇ̓f[^LbVLɂKv܂B +//EVRAMɒړWJ邱Ƃ͂ł܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 1j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 flags k^ktO +// i0, 1j = ikf[^, kf[^j +//ER[hf[^tH[}bgiBig Endianj +// u16 length:4 WJf[^ - 3iv3Byteȏ㎞݈̂kj +// offset:12 vf[^ItZbg - 1 +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_UnCompLZ77Byte(const void *srcp, void *destp); + + +//---------------------------------------------------------------------- +// kyVVkf[^PUWJ +// +//ELZ77kf[^WJA16bitPʂŏ݂܂B +//Ef[^TCM⃁CɂWJł܂AUTL_UnCompLZ77Byte() +// ᑬłB +//E\[XAhXɃCw肷ꍇ +// f[^LbVLɂKv܂B +//Ekf[^͈v2ByteȑO茟̂ɂĉB +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 1j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 flags k^ktO +// i0, 1j = ikf[^, kf[^j +//ER[hf[^tH[}bgiBig Endianj +// u16 length:4 WJf[^ - 3iv3Byteȏ㎞݈̂kj +// offset:12 vf[^ItZbgi >= 2j - 1 +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_UnCompLZ77Short(const void *srcp, void *destp); + + +//---------------------------------------------------------------------- +// nt}kf[^WJ +// +//Ent}kf[^WJA32bitPʂŏ݂܂B +//E\[XAhXɃCw肷ꍇ +// f[^LbVLɂKv܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 bitSize:4 Pf[^ErbgTCYiʏ 4|8j +// compType:4 k^Cvi = 2j +// destSize:24 WJ̃f[^TCY +// +//Ec[e[u +// u8 treeSize c[e[uTCY/2 - 1 +// TreeNodeData nodeRoot [gm[h +// +// TreeNodeData nodeLeft [gm[h +// TreeNodeData nodeRight [gEm[h +// +// TreeNodeData nodeLeftLeft m[h +// TreeNodeData nodeLeftRight Em[h +// +// TreeNodeData nodeRightLeft Em[h +// TreeNodeData nodeRightRight EEm[h +// +// E +// E +// +// ̌Ɉkf[^{ +// +//ETreeNodeData\ +// u8 nodeNextOffset:6 m[hf[^ւ̃ItZbg - 1i2BytePʁj +// rightEndFlag:1 Em[hItO +// leftEndzflag:1 m[hItO +// ItOZbgĂꍇ +// m[hɃf[^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_UnCompHuffman(const void *srcp, void *destp); + + +//---------------------------------------------------------------------- +// OXkf[^WWJ +// +//EOXkf[^WJA8bitPʂŏ݂܂B +//E\[XAhXAfXeBl[VAhXƂɁAC +// w肷ꍇ̓f[^LbVLɂKv܂B +//EVRAMɒړWJ邱Ƃ͂ł܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 3j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 length:7 WJf[^ - 1ikj +// WJf[^ - 3iA3Byteȏ㎞݈̂kj +// flag:1 i0, 1j = ikf[^, kf[^j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_UnCompRLByte(const void *srcp, void *destp); + + +//---------------------------------------------------------------------- +// OXkf[^PUWJ +// +//EOXkf[^WJA16bitPʂŏ݂܂B +//Ef[^TCM⃁CɂWJł܂AUTL_UnCompRLByte() +// ᑬłB +//E\[XAhXɃCw肷ꍇ +// f[^LbVLɂKv܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 3j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 length:7 WJf[^ - 1ikj +// WJf[^ - 3iA3Byteȏ㎞݈̂kj +// flag:1 i0, 1j = ikf[^, kf[^j +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void UTL_UnCompRLShort(const void *srcp, void *destp); + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_UTL_H + diff --git a/trunk/IrisMainp/include/IrisUTL_Arm.s b/trunk/IrisMainp/include/IrisUTL_Arm.s new file mode 100644 index 0000000..12342be --- /dev/null +++ b/trunk/IrisMainp/include/IrisUTL_Arm.s @@ -0,0 +1,112 @@ +;===================================================================== +; IrisUTL_Arm.s +; [eBeBCuiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;===================================================================== + IF :DEF: _IRIS_UTL_H + ELSE +_IRIS_UTL_H * 1 + + + INCLUDE IrisTargetArm.s + + + +;======================================================================= +; NA Rs[ +;======================================================================= + +;----------------------------------------------------------------------- +; bot PUNA +;----------------------------------------------------------------------- + + EXTERN UTL_CpuClear16 + +;----------------------------------------------------------------------- +; bot PURs[ +;----------------------------------------------------------------------- + + EXTERN UTL_CpuCopy16 + +;----------------------------------------------------------------------- +; bot RQNA +;----------------------------------------------------------------------- + + EXTERN UTL_CpuClear32 + +;----------------------------------------------------------------------- +; bot RQRs[ +;----------------------------------------------------------------------- + + EXTERN UTL_CpuCopy32 + +;----------------------------------------------------------------------- +; bot NA +;----------------------------------------------------------------------- + + EXTERN UTL_CpuClearFast + +;----------------------------------------------------------------------- +; bot Rs[ +;----------------------------------------------------------------------- + + EXTERN UTL_CpuCopyFast + + +;----------------------------------------------------------------------- +; f[^̃Xbvi[h^oCgj +;----------------------------------------------------------------------- + + EXTERN UTL_SwapWord + EXTERN UTL_SwapByte + + +;======================================================================= +; kf[^WJ +;======================================================================= + +;----------------------------------------------------------------------- +; akf[^WJ +;----------------------------------------------------------------------- + + EXTERN UTL_UnPackBits + +;----------------------------------------------------------------------- +; kyVVkf[^WWJ +;----------------------------------------------------------------------- + + EXTERN UTL_UnCompLZ77Byte + +;----------------------------------------------------------------------- +; kyVVkf[^PUWJ +;----------------------------------------------------------------------- + + EXTERN UTL_UnCompLZ77Short + +;----------------------------------------------------------------------- +; nt}kf[^WJ +;----------------------------------------------------------------------- + + EXTERN UTL_UnCompHuffman + +;----------------------------------------------------------------------- +; OXkf[^WWJ +;----------------------------------------------------------------------- + + EXTERN UTL_UnCompRLByte + +;----------------------------------------------------------------------- +; OXkf[^PUWJ +;----------------------------------------------------------------------- + + EXTERN UTL_UnCompRLShort + + + + ENDIF ; _IRIS_UTL_H + + + + END + diff --git a/trunk/IrisMainp/include/IrisUTL_Mw.s b/trunk/IrisMainp/include/IrisUTL_Mw.s new file mode 100644 index 0000000..9883799 --- /dev/null +++ b/trunk/IrisMainp/include/IrisUTL_Mw.s @@ -0,0 +1,105 @@ +;===================================================================== +; IrisUTL_Mw.s +; [eBeBCuiMWASMARMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;===================================================================== +#ifndef _IRIS_UTL_H +#define _IRIS_UTL_H + + + .INCLUDE IrisTarget.h + + +;======================================================================= +; NA Rs[ +;======================================================================= + +;----------------------------------------------------------------------- +; bot PUNA +;----------------------------------------------------------------------- + + .EXTERN UTL_CpuClear16 + +;----------------------------------------------------------------------- +; bot PURs[ +;----------------------------------------------------------------------- + + .EXTERN UTL_CpuCopy16 + +;----------------------------------------------------------------------- +; bot RQNA +;----------------------------------------------------------------------- + + .EXTERN UTL_CpuClear32 + +;----------------------------------------------------------------------- +; bot RQRs[ +;----------------------------------------------------------------------- + + .EXTERN UTL_CpuCopy32 + +;----------------------------------------------------------------------- +; bot NA +;----------------------------------------------------------------------- + + .EXTERN UTL_CpuClearFast + +;----------------------------------------------------------------------- +; bot Rs[ +;----------------------------------------------------------------------- + + .EXTERN UTL_CpuCopyFast + + +;----------------------------------------------------------------------- +; f[^̃Xbvi[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN UTL_SwapWord + .EXTERN UTL_SwapByte + + +;======================================================================= +; kf[^WJ +;======================================================================= + +;----------------------------------------------------------------------- +; akf[^WJ +;----------------------------------------------------------------------- + + .EXTERN UTL_UnPackBits + +;----------------------------------------------------------------------- +; kyVVkf[^WWJ +;----------------------------------------------------------------------- + + .EXTERN UTL_UnCompLZ77Byte + +;----------------------------------------------------------------------- +; kyVVkf[^PUWJ +;----------------------------------------------------------------------- + + .EXTERN UTL_UnCompLZ77Short + +;----------------------------------------------------------------------- +; nt}kf[^WJ +;----------------------------------------------------------------------- + + .EXTERN UTL_UnCompHuffman + +;----------------------------------------------------------------------- +; OXkf[^WWJ +;----------------------------------------------------------------------- + + .EXTERN UTL_UnCompRLByte + +;----------------------------------------------------------------------- +; OXkf[^PUWJ +;----------------------------------------------------------------------- + + .EXTERN UTL_UnCompRLShort + + + +#endif // _IRIS_UTL_H diff --git a/trunk/IrisMainp/include/IrisVEC.h b/trunk/IrisMainp/include/IrisVEC.h new file mode 100644 index 0000000..23a8b13 --- /dev/null +++ b/trunk/IrisMainp/include/IrisVEC.h @@ -0,0 +1,241 @@ +//====================================================================== +// IrisVEC.h +// xNgCu +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_VEC_H +#define _IRIS_VEC_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include + + +//---------------------------------------------------------------------- +// xNg̃Rs[ +// +//EexNgԂŃTCYɍ킹ăRs[܂B +//EVEC_AlignPoint2Vec10() / VEC10_AlignPoint2Vec() 16bitxNg +// 10bitxNgԂł̌Œ菬_ʒu̒s܂B +// +//EF +// srcp ]xNg̃|C^ +// dstp ]xNgobt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_Copy2Vec10(const Vec *srcp, Vec10 *dstp); +void VEC_Copy2Vec32(const Vec *srcp, Vec32 *dstp); +void VEC32_Copy2Vec(const Vec32 *srcp, Vec *dstp); + +void VEC_AlignPoint2Vec10(const Vec *srcp, Vec10 *dstp); +void VEC10_AlignPoint2Vec(const Vec10 *srcp, Vec *dstp); + +//---------------------------------------------------------------------- +// xNg̓ +// +//EQ‚̃xNg̓ς߂܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// +//E߂lF +//---------------------------------------------------------------------- + +s32 VEC_DotProduct( const Vec *a, const Vec *b); +s32 VEC32_DotProduct( const Vec32 *a, const Vec32 *b); +s32 VEC32_DotProductFast(const Vec32 *a, const Vec32 *b); +s32 VEC32VEC_DotProduct( const Vec32 *a, const Vec *b); +#define VEC2D_DotProduct(ax, ay, bx, by) (((ax) * (bx) + (ay) * (by)) >>V_SFT) + +//---------------------------------------------------------------------- +// xNg̊O +// +//EQ‚̃xNg̊OσxNg߁AaxbwxNg֊i[܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// axb OσxNgi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_CrossProduct( Vec *a, Vec *b, Vec *axb); +void VEC32_CrossProduct( Vec32 *a, Vec32 *b, Vec32 *axb); +void VEC32_CrossProductFast(Vec32 *a, Vec32 *b, Vec32 *axb); +#define VEC2D_CrossProduct(ax, ay, bx, by) (((ax) * (by) - (ay) * (bx)) >>V_SFT) + +//---------------------------------------------------------------------- +// xNg̐K +// +//EsrcpwxNg𐳋KdstpwxNg֊i[܂B +// +//EF +// srcp KxNg̃|C^ +// dstp KxNgi[obt@̃|C^ +// +//E߂lFȂ +// +//ʏł͕ZƏZgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +void VEC_Normalize( Vec *srcp, Vec *dstp); +void VEC32_Normalize( Vec32 *srcp, Vec32 *dstp); +void VEC32_Normalize2Vec(Vec32 *srcp, Vec *dstp); + +//---------------------------------------------------------------------- +// xNg̉Z +// +//EQ‚̃xNgZʂa_bwxNg֊i[܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// a_b Z̃xNgi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_Add(Vec *a, Vec *b, Vec *ab); + +//---------------------------------------------------------------------- +// xNǧZ +// +//EQ‚̃xNgZʂa_bwxNg֊i[܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// a_b Z̃xNgi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_Sub(Vec *a, Vec *b, Vec *a_b); + +//---------------------------------------------------------------------- +// xNg̃XP[O +// +//EsrcpwxNgXP[OʂdstpwxNg֊i[܂B +// +//EF +// srcp XP[OÕxNg̃|C^ +// dstp XP[ÕxNgi[obt@̃|C^ +// scale XP[Op[^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_Scale(Vec *srcp, Vec *dstp, s32 scale); + +//---------------------------------------------------------------------- +// xNg̔] +// +//EsrcpwxNg𔽓]ʂdstpwxNg֊i[܂B +// +//EF +// srcp ]ÕxNg̃|C^ +// dstp ]̃xNgi[obt@̃|C^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_Reverse(const Vec *srcp, Vec *dstp); + +//---------------------------------------------------------------------- +// xNg̑傫 +// +//ExNg̑傫߂܂B +// +//EF +// v ̓xNg̃|C^ +// +//E߂lF傫 +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +u32 VEC_Magnitude(const Vec *v); + +//---------------------------------------------------------------------- +// xNg̑傫̂Q +// +//ExNg̑傫̂Q߂܂B +// +//EF +// v ̓xNg̃|C^ +// +//E߂lF傫̂Q +//---------------------------------------------------------------------- + +u32 VEC_SquareMagnitude(const Vec *v); + +//---------------------------------------------------------------------- +// xNgԂ̋ +// +//ExNgԂ̋߂܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// +//E߂lF +// +//Zgp邽߁ATCMŎsƂĂ +// fBXvCXgDMA]ƃVXeoXŏՓ˂ꍇɂ +// Xg[Ă܂܂B +//---------------------------------------------------------------------- + +u32 VEC_Distance(const Vec *a, const Vec *b); + +//---------------------------------------------------------------------- +// xNgԂ̋̂Q +// +//ExNgԂ̋̂Q߂܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// +//E߂lF̂Q +//---------------------------------------------------------------------- + +u32 VEC_SquareDistance(const Vec *a, const Vec *b); + +//---------------------------------------------------------------------- +// xNg̐` +// +//EQ‚̃xNg`ԂʂdwxNg֊i[܂B +// +//EF +// a PxNg̃|C^ +// b QxNg̃|C^ +// d ԃxNgi[obt@̃|C^ +// t ԃp[^ +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void VEC_Lerp(Vec *a, Vec *b, Vec *d, s32 t); +void VEC32_Lerp(Vec32 *a, Vec32 *b, Vec32 *d, s32 t); +void VEC32_LerpFast(Vec32 *a, Vec32 *b, Vec32 *d, s32 t); + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_VEC_H diff --git a/trunk/IrisMainp/include/private/IrisCardDefine.h b/trunk/IrisMainp/include/private/IrisCardDefine.h new file mode 100644 index 0000000..ac71e78 --- /dev/null +++ b/trunk/IrisMainp/include/private/IrisCardDefine.h @@ -0,0 +1,424 @@ +//==================================================================== +// IrisCardDefine.h +// IRIS J[h萔 +// +// Copyright (C) 2003,2004 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_CARD_DEFINE_H +#define _IRIS_CARD_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + + +// J[hANZXERg[WX^\ +typedef struct { + u16 latency1:13; // CeVP̃TCN + u16 dataScramble_on:1; // f[^XNu nm + u16 scrambleUnit_on:1; // XNuH nm + u16 initScramblePN:1; // XNuomf[^ + + u16 latency2:6; // CeVQ̃TCN + u16 cmdScramble_on:1; // R}hXNu nm + u16 dataReady:1; // f[^ fB + + u16 pages:3; // y[W + u16 clockType:1; // NbN^CviPTO^QSOj + u16 clockInLatency:1; // CeVԂɃNbN + u16 reset:1; // ZbgM + u16 accessMode:1; // ANZX[h + u16 start:1; // X^[g +} CardCnt; + + +// J[hRg[Ep[^\ +typedef struct { + u32 dmaNo; // DMAԍ + u32 cardCnt; // J[hRg[ + u32 op[2]; // R}h +} CardCtrlParam; + + +// J[h񓯊ǂݍ݊֐^錾 +typedef void (* ReadCardAsyncFuncp)(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); + +// J[h荞݊֐^錾 +typedef void (* CardIntrFuncp)(void); + +// J[h荞݃[N\ +typedef struct { + u8 *romp; // ROMAhX + u8 *ramp; // RAMAhX + s32 restSize; // cTCY + s32 blockSize; // ubNTCY + CardCtrlParam param; // J[hANZXEp[^\ + ReadCardAsyncFuncp AsyncFuncp; // J[hǂݍ݊֐ +// u32 pad; // \ +} CardIntrWork; + + + +//---------------------------------------------------------------------- +// J[hcl` +//---------------------------------------------------------------------- + +#define DmaReadCard(dmaNo, destp) \ + \ + DmaSet(dmaNo, REG_CARD_DATA, destp, ( \ + DMA_ENABLE | DMA_TIMMING_CARD | \ + DMA_SRC_FIX | DMA_DEST_INC | \ + DMA_CONTINUOUS_ON | \ + DMA_32BIT_BUS | (1))) + +#define DmaWriteCard(dmaNo, srcp) \ + \ + DmaSet(dmaNo, srcp, REG_CARD_DATA, ( \ + DMA_ENABLE | DMA_TIMMING_CARD | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_CONTINUOUS_ON | \ + DMA_32BIT_BUS | (1))) + +//EJ[h|ԂDMA]s܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX + + +//---------------------------------------------------------------------- +// J[h̃f[^]̓fBH +//---------------------------------------------------------------------- + +#define IsCardDataReady() \ + \ + (*(vu32 *)REG_CARDCNT & CARD_DATA_READY) + +//EJ[h̃f[^]̓fBǂԂ܂B + +//---------------------------------------------------------------------- +// J[hf[^҂ +//---------------------------------------------------------------------- + +#define WaitCardData() \ +{ \ + while (!IsCardDataReady()) ; \ +} + +//EJ[hf[^]̏I҂܂B + + +//---------------------------------------------------------------------- +// J[h̓rW[H +//---------------------------------------------------------------------- + +#define IsCardBusy() \ + \ + (*(vu32 *)REG_CARDCNT & CARD_START) + +//EJ[hrW[ǂԂ܂B + +//---------------------------------------------------------------------- +// J[h҂ +//---------------------------------------------------------------------- + +#define WaitCard() \ +{ \ + while (IsCardBusy()) ; \ +} + +//EJ[h̏I҂܂B + + +//---------------------------------------------------------------------- +// Rg[p[^liNORMAL[hj +//---------------------------------------------------------------------- + +#define GetCardCnt4Normal() \ + \ + (GetCardCnt4Game() & CARD_SCRAMBLE_CLEAR_MASK) + +//ENORMAL[h̃Rg[p[^l܂B +//EXNu̐ݒ̓NA܂B + +//---------------------------------------------------------------------- +// Rg[p[^liSECURE[hj +//---------------------------------------------------------------------- + +#define GetCardCnt4Secure() \ + \ + (*(vu32 *)MROMCNT_SECURE_BUF & (CARD_CLOCK_TYPE | CARD_LATENCY_MASK)) + +//ESECURE[h̃Rg[p[^l܂B + +//---------------------------------------------------------------------- +// Rg[p[^liGAME[hj +//---------------------------------------------------------------------- + +#define GetCardCnt4Game() \ + \ + (*(vu32 *)MROMCNT_GAME_BUF) + +//EGAME[h̃Rg[p[^l܂B + + +//---------------------------------------------------------------------- +// Rg[p[^ ZbgiNORMAL[hj +//---------------------------------------------------------------------- + +#define SetCardCnt4Normal(param) \ + \ + (*(vu32 *)MROMCNT_GAME_BUF = param) + +//EGAME[h̃Rg[p[^Zbg܂B + + +//---------------------------------------------------------------------- +// Rg[p[^ ZbgiSECURE[hj +//---------------------------------------------------------------------- + +#define SetCardCnt4Secure(param) \ + \ + (*(vu32 *)MROMCNT_SECURE_BUF = param) + +//ESECURE[h̃Rg[p[^Zbg܂B + +//---------------------------------------------------------------------- +// Rg[p[^ ZbgiGAME[hj +//---------------------------------------------------------------------- + +#define SetCardCnt4Game(param) \ + \ + (*(vu32 *)MROMCNT_GAME_BUF = param) + +//EGAME[h̃Rg[p[^Zbg܂B + + +//---------------------------------------------------------------------- +// CeVQCeVP։Z +//---------------------------------------------------------------------- + +#define AddLatency2ToLatency1(param) \ + \ + ( (((param) & CARD_LATENCY2_CYCLES_MASK) \ + >> CARD_LATENCY2_CYCLES_SHIFT) \ + + ((param) & ~CARD_LATENCY2_CYCLES_MASK) \ + ) + +//EJ[h̏I҂܂B + + +//---------------------------------------------------------------------- +// qnlGAE}bv +//---------------------------------------------------------------------- + +#define MROM_SECURE_AREA 0x4000 // SECUREGA +#define MROM_GAME_AREA 0x8000 // GAMEGA + +//---------------------------------------------------------------------- +// qnlGAETCY +//---------------------------------------------------------------------- + +#define MROM_SEGMENT_SIZE 0x1000 // ZOgTCY +#define MROM_SECURE_SIZE 0x4000 // SECUREGATCY + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define MROMCNT_GAME_BUF (ROM_HEADER_BUF + 0x60) // GAME[hERg[f[^ +#define MROMCNT_SECURE_BUF (ROM_HEADER_BUF + 0x64) // SECURE[hERg[f[^ + + +//---------------------------------------------------------------------- +// WX^EAhX +//---------------------------------------------------------------------- + +#define REG_CARDMST_SPI_CNT (REG_BASE + 0x1a0) // J[h}X^[rohRg[ + +#define REG_CARD_MASTER_CNT (REG_BASE + 0x1a1) // J[h}X^[Rg[ + +#define REG_CARD_SPI_CNT (REG_BASE + 0x1a0) // J[hrohRg[ +#define REG_CARD_SPI_DATA (REG_BASE + 0x1a2) // f[^ + +#define REG_CARDCNT (REG_BASE + 0x1a4) // J[hRg[ +#define REG_CARD_CMD (REG_BASE + 0x1a8) // R}hݒ +#define REG_CARD_DATA (REG_BASE + 0x100010) // f[^ + +#define REG_CARD_PN_INIT (REG_BASE + 0x1b0) // J[homf[^l +#define REG_CARD_PNA_INIT_L (REG_BASE + 0x1b0) +#define REG_CARD_PNB_INIT_L (REG_BASE + 0x1b4) +#define REG_CARD_PNA_INIT_H (REG_BASE + 0x1b8) +#define REG_CARD_PNB_INIT_H (REG_BASE + 0x1ba) + + +//---------------------------------------------------------------------- +// J[h }X^[Rg[ +//---------------------------------------------------------------------- + +#define CARDMST_SEL_DEVICE 0x20 // foCXI +#define CARDMST_SEL_ROM 0x00 // }XNqnl^RcI +#define CARDMST_SEL_SPI 0x20 // rohI + +#define CARDMST_IF_ENABLE 0x40 // 荞ݗv +#define CARDMST_ENABLE 0x80 // J[hCl[u + + +//---------------------------------------------------------------------- +// J[hroh Rg[ +//---------------------------------------------------------------------- + +#define CARDSPI_SCK_MASK 0x03 // VtgNbN + +#define CARDSPI_SCK_SHIFT 0 + +#define CARDSPI_SCK_4M 0x00 // VtgNbN SlgI +#define CARDSPI_SCK_2M 0x01 // QlgI +#define CARDSPI_SCK_1M 0x02 // PlgI +#define CARDSPI_SCK_524K 0x03 // TQSjgI + +#define CARDSPI_INV_CS 0x40 // ʐMIɁ^br_Eێ +#define CARDSPI_BUSY 0x80 // rW[ + + +//---------------------------------------------------------------------- +// J[hANZX Rg[ +//---------------------------------------------------------------------- + +#define CARD_LATENCY1_CYCLES_MASK 0x00001fff // CeVP̃TCN +#define CARD_LATENCY2_CYCLES_MASK 0x003f0000 // CeVQ̃TCN +#define CARD_LATENCY_MASK 0x003f1fff // L킹}XN +#define CARD_PAGE_COUNT_MASK 0x07000000 // y[W + +#define CARD_LATENCY1_CYCLES_SHIFT 0 +#define CARD_LATENCY2_CYCLES_SHIFT 16 +#define CARD_PAGE_COUNT_SHIFT 24 + + // XNutOQ̃Zbg +#define CARD_SCRAMBLE_SET_MASK ( CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON \ + | CARD_CMD_SCRAMBLE_ON) + // XNutOQ̃NA +#define CARD_SCRAMBLE_CLEAR_MASK ( ~(CARD_INIT_SCRAMBLE_PN \ + | CARD_SCRAMBLE_SET_MASK \ + | CARD_CLOCK_IN_LATENCY \ + | CARD_WRITE_MODE)) + +#define CARD_DATA_SCRAMBLE_ON 0x00002000 // f[^XNu nm +#define CARD_SCRAMBLE_UNIT_ON 0x00004000 // XNuH nm +#define CARD_INIT_SCRAMBLE_PN 0x00008000 // XNuomf[^ +#define CARD_CMD_SCRAMBLE_ON 0x00400000 // R}hXNu nm + +#define CARD_DATA_READY 0x00800000 // f[^ fB + +#define CARD_0_PAGE 0x00000000 // Oy[W +#define CARD_1_PAGE 0x01000000 // Py[W +#define CARD_2_PAGES 0x02000000 // Qy[W +#define CARD_4_PAGES 0x03000000 // Sy[W +#define CARD_8_PAGES 0x04000000 // Wy[W +#define CARD_16_PAGES 0x05000000 // PUy[W +#define CARD_32_PAGES 0x06000000 // RQy[W +#define CARD_STATUS 0x07000000 // Xe[^X[h + +#define CARD_CLOCK_TYPE 0x08000000 // NbN ^Cv +#define CARD_CLOCK_150NS 0x00000000 // NbNTCN PTO +#define CARD_CLOCK_240NS 0x08000000 // QSO +#define CARD_CLOCK_IN_LATENCY 0x10000000 // CeVԂɃNbN +#define CARD_RESET_LO 0x00000000 // ZbgMx k +#define CARD_RESET_HI 0x20000000 // g +#define CARD_ACCESS_MODE 0x40000000 // ANZX [h +#define CARD_READ_MODE 0x00000000 // [h[h +#define CARD_WRITE_MODE 0x40000000 // Cg[h +#define CARD_START 0x80000000 // X^[g + +// \̃op萔 + +#define ST_CARD_0_PAGE 0 // Oy[W +#define ST_CARD_1_PAGE 1 // Py[W +#define ST_CARD_2_PAGES 2 // Qy[W +#define ST_CARD_4_PAGES 3 // Sy[W +#define ST_CARD_8_PAGES 4 // Wy[W +#define ST_CARD_16_PAGES 5 // PUy[W +#define ST_CARD_32_PAGES 6 // RQy[W +#define ST_CARD_STATUS 7 // Xe[^X[h + +#define ST_CARD_CLOCK_150NS 0 // NbNTCN PTO +#define ST_CARD_CLOCK_240NS 1 // QSO + +#define ST_CARD_READ_MODE 0 // [h[h +#define ST_CARD_WRITE_MODE 1 // Cg[h + + +//---------------------------------------------------------------------- +// }XNqnlR}h +//---------------------------------------------------------------------- + +// NORMAL[h + +#define MROMOP_N_OP_MASK 0xff000000 // R}h}XN + +#define MROMOP_N_READ_ID 0x90000000 // hcǂݍ +#define MROMOP_N_READ_PAGES 0x00000000 // y[WQǂݍ +#define MROMOP_N_LOAD_TABLE 0x9f000000 // tbVEe[uݒ +#define MROMOP_N_CHANGE_MODE 0x3c000000 // SECURE[h֑J + +#define MROMOP_N_READ_ID_PAD_L 0xffffffff +#define MROMOP_N_READ_ID_PAD_H 0x00ffffff +#define MROMOP_N_READ_PAGES_PAD_L 0xffffffff +#define MROMOP_N_READ_PAGES_PAD_H 0x00ffffff +#define MROMOP_N_READ_PAGES_ADDR_MASK 0x000ffffe +#define MROMOP_N_CHANGE_SECURE_PAD_L 0xf00000ff +#define MROMOP_N_CHANGE_SECURE_PAD_H 0x00000000 + +#define MROMOP_N_VAE_MASK_H 0x00ffffff + +#define MROMOP_N_VBI_SHIFT_L 8 + +// SECURE[h + +#define MROM_S_LATENCY1_CYCLES_MIN 0x00008f8 // CeVP̍ŏTCN +#define MROM_S_LATENCY2_CYCLES_MIN 0x0000018 // CeVQ̍ŏTCN + +#define MROMOP_S_OP_MASK 0xf0000000 // R}h}XN + +#define MROMOP_S_READ_ID 0x10000000 // hcǂݍ +#define MROMOP_S_READ_SEGMENT 0x20000000 // ÍZOgǂݍ +#define MROMOP_S_PNG_ON 0x40000000 // omWFl[^ nm +#define MROMOP_S_PNG_OFF 0x60000000 // omWFl[^ nee +#define MROMOP_S_CHANGE_MODE 0xa0000000 // GAME[h֑J + +#define MROMOP_S_VA_MASK_L 0xfff00000 +#define MROMOP_S_VA_MASK_H 0x00000fff +#define MROMOP_S_VB_MASK_L 0x000fffff +#define MROMOP_S_VC_MASK_H 0x0ffff000 +#define MROMOP_S_VD_MASK_L 0xfff00000 +#define MROMOP_S_VD_MASK_H 0x00000fff + +#define MROMOP_S_VA_SHIFT_L 20 +#define MROMOP_S_VA_SHIFT_H 12 +#define MROMOP_S_VC_SHIFT_H 12 +#define MROMOP_S_VD_SHIFT_L 20 +#define MROMOP_S_VD_SHIFT_H 12 + +// GAME[h + +#define MROMOP_G_OP_MASK 0xff000000 // R}h}XN + +#define MROMOP_G_READ_ID 0xb8000000 // hcǂݍ +#define MROMOP_G_READ_PAGE 0xb7000000 // y[Wǂݍ + +#define MROMOP_G_READ_PAGE_PAD_L 0x00ffffff +#define MROMOP_G_READ_PAGE_PAD_H 0x00f00000 +#define MROMOP_G_READ_PAGE_MASK_L 0x00ffffff +#define MROMOP_G_READ_PAGE_MASK_H 0xfffffffe +#define MROMOP_G_READ_PAGE_ADDR_MASK 0x000ffffe + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_CARD_DEFINE_H diff --git a/trunk/IrisMainp/include/private/IrisCardDefineArm.s b/trunk/IrisMainp/include/private/IrisCardDefineArm.s new file mode 100644 index 0000000..0b39ddb --- /dev/null +++ b/trunk/IrisMainp/include/private/IrisCardDefineArm.s @@ -0,0 +1,190 @@ +;======================================================================= +; IrisCardDefineArm.s +; IRIS J[h萔iARMASMpj +; +; Copyright (C) 2003,2004 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_CARD_DEFINE_H + ELSE +_IRIS_CARD_DEFINE_H * 1 + + +;----------------------------------------------------------------------- +; E}bv +;----------------------------------------------------------------------- + +REG_CARDMST_SPI_CNT * (REG_BASE + 0x1a0) ; J[h}X^[rohRg[ + +REG_CARD_MASTER_CNT * (REG_BASE + 0x1a1) ; J[h}X^[Rg[ + +REG_CARD_SPI_CNT * (REG_BASE + 0x1a0) ; J[hrohRg[ +REG_CARD_SPI_DATA * (REG_BASE + 0x1a2) ; f[^ + +REG_CARDCNT * (REG_BASE + 0x1a4) ; J[hRg[ +REG_CARD_CMD * (REG_BASE + 0x1a8) ; R}hݒ +REG_CARD_DATA * (REG_BASE + 0x100010) ; f[^ + +REG_CARD_PN_INIT * (REG_BASE + 0x1b0) ; J[homf[^l +REG_CARD_PNA_INIT_L * (REG_BASE + 0x1b0) +REG_CARD_PNB_INIT_L * (REG_BASE + 0x1b4) +REG_CARD_PNA_INIT_H * (REG_BASE + 0x1b8) +REG_CARD_PNB_INIT_H * (REG_BASE + 0x1ba) + + +;----------------------------------------------------------------------- +; J[h }X^[Rg[ +;----------------------------------------------------------------------- + +CARDMST_SEL_DEVICE * 0x20 ; foCXI +CARDMST_SEL_ROM * 0x00 ; }XNqnl^RcI +CARDMST_SEL_SPI * 0x20 ; rohI + +CARDMST_IF_ENABLE * 0x40 ; 荞ݗv +CARDMST_ENABLE * 0x80 ; J[hCl[u + + +;----------------------------------------------------------------------- +; J[hroh Rg[ +;----------------------------------------------------------------------- + +CARD_SPI_SCK_MASK * 0x03 ; VtgNbN + +CARD_SPI_SCK_SHIFT * 0 + +CARD_SPI_SCK_4M * 0x00 ; VtgNbN SlgI +CARD_SPI_SCK_2M * 0x01 ; QlgI +CARD_SPI_SCK_1M * 0x02 ; PlgI +CARD_SPI_SCK_524K * 0x03 ; TQSjgI + +CARD_SPI_INV_CS * 0x40 ; ʐMIɁ^br_Eێ +CARD_SPI_BUSY * 0x80 ; rW[ + + +;----------------------------------------------------------------------- +; J[h Rg[ +;----------------------------------------------------------------------- + +CARD_LATENCY1_CYCLES_MASK * 0x00001fff ; CeVP̃TCN +CARD_LATENCY2_CYCLES_MASK * 0x003f0000 ; CeVQ̃TCN +CARD_PAGE_COUNT_MASK * 0x07000000 ; y[W + +CARD_LATENCY1_CYCLES_SHIFT * 0 +CARD_LATENCY2_CYCLES_SHIFT * 16 +CARD_PAGE_COUNT_SHIFT * 24 + +CARD_DATA_SCRAMBLE_ON * 0x00002000 ; f[^XNu nm +CARD_SCRAMBLE_UNIT_ON * 0x00004000 ; XNuH nm +CARD_INIT_SCRAMBLE_PN * 0x00008000 ; XNuomf[^ + +CARD_CMD_SCRAMBLE_ON * 0x00400000 ; R}hXNu nm +CARD_DATA_READY * 0x00800000 ; f[^ fB + +CARD_0_PAGE * 0x00000000 ; Oy[W +CARD_1_PAGE * 0x01000000 ; Py[W +CARD_2_PAGES * 0x02000000 ; Qy[W +CARD_4_PAGES * 0x03000000 ; Sy[W +CARD_8_PAGES * 0x04000000 ; Wy[W +CARD_16_PAGES * 0x05000000 ; PUy[W +CARD_32_PAGES * 0x06000000 ; RQy[W +CARD_STATUS * 0x07000000 ; Xe[^X[h + +CARD_CLOCK_TYPE * 0x08000000 ; NbN ^Cv +CARD_CLOCK_150NS * 0x00000000 ; NbNTCN PTO +CARD_CLOCK_240NS * 0x08000000 ; QSO +CARD_CLOCK_IN_LATENCY * 0x10000000 ; CeVԂɃNbN +CARD_RESET_LO * 0x00000000 ; ZbgMx k +CARD_RESET_HI * 0x20000000 ; g +CARD_ACCESS_MODE * 0x40000000 ; ANZX [h +CARD_READ_MODE * 0x00000000 ; [h[h +CARD_WRITE_MODE * 0x40000000 ; Cg[h +CARD_START * 0x80000000 ; X^[g + +; \̃op萔 + +ST_CARD_0_PAGE * 0 ; Oy[W +ST_CARD_1_PAGE * 1 ; Py[W +ST_CARD_2_PAGES * 2 ; Qy[W +ST_CARD_4_PAGES * 3 ; Sy[W +ST_CARD_8_PAGES * 4 ; Wy[W +ST_CARD_16_PAGES * 5 ; PUy[W +ST_CARD_32_PAGES * 6 ; RQy[W +ST_CARD_STATUS * 7 ; Xe[^X[h + +ST_CARD_CLOCK_150NS * 0 ; NbNTCN PTO +ST_CARD_CLOCK_240NS * 1 ; QSO + +ST_CARD_READ_MODE * 0 ; [h[h +ST_CARD_WRITE_MODE * 1 ; Cg[h + + +;----------------------------------------------------------------------- +; }XNqnlR}h +;----------------------------------------------------------------------- + +; NORMAL[h + +MROMOP_N_READ_ID * 0x90000000 ; hcǂݍ +MROMOP_N_READ_HEADER * 0x00000000 ; wb_ZOgǂݍ +MROMOP_N_CHANGE_SECURE * 0x3c000000 ; SECURE[h֑J + +MROMOP_N_READ_ID_PAD_L * 0xffffffff +MROMOP_N_READ_ID_PAD_H * 0x00ffffff +MROMOP_N_READ_HEADER_PAD_L * 0xffffffff +MROMOP_N_READ_HEADER_PAD_H * 0x00ffffff +MROMOP_N_CHANGE_SECURE_PAD_L * 0xf00000ff +MROMOP_N_CHANGE_SECURE_PAD_H * 0x00000000 + +; SECURE[h + +MROMOP_S_READ_ID * 0x10000000 ; hcǂݍ +MROMOP_S_READ_SEGMENT * 0x20000000 ; ÍZOgǂݍ +MROMOP_S_PNG_ON * 0x40000000 ; omWFl[^ nm +MROMOP_S_CHANGE_GAME * 0xa0000000 ; GAME[h֑J + +MROMOP_S_READ_ID_PAD_L * 0x00000000 +MROMOP_S_READ_ID_PAD_H * 0x0ffff000 +MROMOP_S_PNG_ON_PAD_L * 0x00000000 +MROMOP_S_PNG_ON_PAD_H * 0x0ffff000 +MROMOP_S_CHANGE_GAME_PAD_L * 0xffffffff +MROMOP_S_CHANGE_GAME_PAD_H * 0x0fffffff + +; GAME[h + +MROMOP_G_READ_PAGE * 0xb7000000 ; y[Wǂݍ + +MROMOP_G_READ_PAGE_PAD_L * 0x00ffffff +MROMOP_G_READ_PAGE_PAD_H * 0x00f00000 +MROMOP_G_READ_PAGE_MASK_L * 0x00ffffff +MROMOP_G_READ_PAGE_MASK_H * 0xfffffffe +MROMOP_G_READ_PAGE_ADDR_MASK * 0x000ffffe + + +;----------------------------------------------------------------------- +; }XNqnlR}h +;----------------------------------------------------------------------- + +; NORMAL[h + +MEM3DOP_N_READ_ID * 0x90000000 ; hcǂݍ +MEM3DOP_N_READ_PAGE * 0x00000000 ; y[Wǂݍ +MEM3DOP_N_WRITE_PAGE * 0x10000000 ; y[W +MEM3DOP_N_INPUT_SERIAL * 0x80000000 ; VAf[^ +MEM3DOP_N_READ_STAT * 0x70000000 ; Xe[^Xǂݍ + +MEM3DOP_N_READ_ID_PAD_L * 0xffffffff +MEM3DOP_N_READ_ID_PAD_H * 0x00ffffff +MEM3DOP_N_READ_PAGE_PAD_L * 0x00000000 +MEM3DOP_N_READ_PAGE_PAD_H * 0x00ffffff +MEM3DOP_N_WRITE_PAGE_PAD_L * 0xffffffff +MEM3DOP_N_WRITE_PAGE_PAD_H * 0x00ffffff +MEM3DOP_N_INPUT_SERIAL_PAD_L * 0x00000000 +MEM3DOP_N_INPUT_SERIAL_PAD_H * 0x00ffffff +MEM3DOP_N_READ_STAT_PAD_L * 0xffffffff +MEM3DOP_N_READ_STAT_PAD_H * 0x00ffffff + + + + ENDIF ; _IRIS_CARD_DEFINE_H + + END + diff --git a/trunk/IrisMainp/include/private/IrisMainMemeoryDefine.h b/trunk/IrisMainp/include/private/IrisMainMemeoryDefine.h new file mode 100644 index 0000000..66f2201 --- /dev/null +++ b/trunk/IrisMainp/include/private/IrisMainMemeoryDefine.h @@ -0,0 +1,55 @@ +//==================================================================== +// IrisMainMemeoryDefine.h +// IRIS C萔 +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_MMEM_DEFINE_H +#define _IRIS_MMEM_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + + +//---------------------------------------------------------------------- +// C R}h +//---------------------------------------------------------------------- + +// STCNڂ̃f[^ + +#define MMEMD4_PARTIAL_REFRESH_NONE 0x0003 // p[VtbV +#define MMEMD4_BURST_CONTINUOUS 0x001c // Ao[XgiQQSoCgj +#define MMEMD4_BURST_MODE 0x0000 // o[Xg[h +#define MMEMD4_PAGE_MODE 0x0020 // y[W[h +#define MMEMD4_SB1 0xffc0 // PŒ + +// TTCNڂ̃f[^ + +#define MMEMD5_1ST_R4_W3 0x0002 // Pq^v S^R +#define MMEMD5_BURST_WRITE 0x0000 // o[XgCg +#define MMEMD5_CLOCK_TRIGGER_UP 0x0100 // NbN +#define MMEMD5_BURST_LINER 0x0200 // o[XgjAEV[PX +#define MMEMD5_SB1 0xe430 // PŒ + +// UTCNڂ̃AhX + +#define MMEMP_SB1 0x004003fe // PŒ +#define MMEMP_CLOCK_TRIGGER_UP 0x00000400 // NbN +#define MMEMP_BURST_WRITE 0x00000000 // o[XgCg +#define MMEMP_BURST_LINER 0x00001000 // o[XgjAEV[PX +#define MMEMP_1ST_R4_W3 0x00004000 // Pq^v S^R +#define MMEMP_BURST_MODE 0x00000000 // o[Xg[h +#define MMEMP_PAGE_MODE 0x00010000 // y[W[h +#define MMEMP_BURST_CONTINUOUS 0x000e0000 // Ao[XgiQQSoCgj +#define MMEMP_PARTIAL_REFRESH_NONE 0x00300000 // p[VtbV + + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_MMEM_DEFINE_H diff --git a/trunk/IrisMainp/include/private/IrisMainMemoryDefineArm.s b/trunk/IrisMainp/include/private/IrisMainMemoryDefineArm.s new file mode 100644 index 0000000..200eb17 --- /dev/null +++ b/trunk/IrisMainp/include/private/IrisMainMemoryDefineArm.s @@ -0,0 +1,49 @@ +;======================================================================= +; IrisMainMemoryDefineArm.s +; IRIS C萔iARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_MMEM_DEFINE_H + ELSE +_IRIS_MMEM_DEFINE_H * 1 + + +;----------------------------------------------------------------------- +; C R}h +;----------------------------------------------------------------------- + +; STCNڂ̃f[^ + +MMEMD4_PARTIAL_REFRESH_NONE * 0x0003 ; p[VtbV +MMEMD4_BURST_CONTINUOUS * 0x001c ; Ao[XgiQQSoCgj +MMEMD4_BURST_MODE * 0x0000 ; o[Xg[h +MMEMD4_PAGE_MODE * 0x0020 ; y[W[h +MMEMD4_SB1 * 0xffc0 ; PŒ + +; TTCNڂ̃f[^ + +MMEMD5_1ST_R4_W3 * 0x0002 ; Pq^v S^R +MMEMD5_BURST_WRITE * 0x0000 ; o[XgCg +MMEMD5_CLOCK_TRIGGER_UP * 0x0100 ; NbN +MMEMD5_BURST_LINER * 0x0200 ; o[XgjAEV[PX +MMEMD5_SB1 * 0xe430 ; PŒ + +; UTCNڂ̃AhX + +MMEMP_SB1 * 0x004003fe ; PŒ +MMEMP_CLOCK_TRIGGER_UP * 0x00000400 ; NbN +MMEMP_BURST_WRITE * 0x00000000 ; o[XgCg +MMEMP_BURST_LINER * 0x00001000 ; o[XgjAEV[PX +MMEMP_1ST_R4_W3 * 0x00004000 ; Pq^v S^R +MMEMP_BURST_MODE * 0x00000000 ; o[Xg[h +MMEMP_PAGE_MODE * 0x00010000 ; y[W[h +MMEMP_BURST_CONTINUOUS * 0x000e0000 ; Ao[XgiQQSoCgj +MMEMP_PARTIAL_REFRESH_NONE * 0x00300000 ; p[VtbV + + + + ENDIF ; _IRIS_MMEM_DEFINE_H + + END + diff --git a/trunk/IrisSubp/IrisSubpMon/Blowfish.c b/trunk/IrisSubp/IrisSubpMon/Blowfish.c new file mode 100644 index 0000000..a9f2220 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/Blowfish.c @@ -0,0 +1,158 @@ +//******************************************************************* +// IRIS-SUBPj^vO Blowfish֐ +//******************************************************************* +#include "Blowfish.h" + +#define MAXKEYBYTES 56 /* 448 bits */ +#define N 16 + + +//BLOWFISH_CTX blowfishCardTable; +//BLOWFISH_CTX blowfishEepromTable; + + +static unsigned int F(const BLOWFISH_CTX *ctx, unsigned int x); + + +void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen) +{ + int i, j, k; + unsigned int data, datal, datar; + +#ifndef DISABLE_SECURE_CODE + + j = 0; + for (i = 0; i < N + 2; ++i) { + data = 0x00000000; + for (k = 0; k < 4; ++k) { + data = (data << 8) | key[j]; + j = j + 1; + if (j >= keyLen) + j = 0; + } + ctx->P[i] = ctx->P[i] ^ data; + } + + datal = 0x00000000; + datar = 0x00000000; + + for (i = 0; i < N + 2; i += 2) { + EncryptByBlowfish(ctx, &datal, &datar); + ctx->P[i] = datal; + ctx->P[i + 1] = datar; + } + + for (i = 0; i < 4; ++i) { + for (j = 0; j < 256; j += 2) { + EncryptByBlowfish(ctx, &datal, &datar); + ctx->S[i][j] = datal; + ctx->S[i][j + 1] = datar; + } + } + +#endif // DISABLE_SECURE_CODE + +} + + +void EncryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr) +{ + unsigned int Xl; + unsigned int Xr; + unsigned int temp; + int i; + +#if !defined(DISABLE_SECURE_CODE) & !defined(DISABLE_ENCRYPT) + + Xl = *xl; + Xr = *xr; + + for (i = 0; i < N; ++i) { + Xl = Xl ^ ctx->P[i]; + Xr = F(ctx, Xl) ^ Xr; + + temp = Xl; + + Xl = Xr; + Xr = temp; + } + + temp = Xl; + Xl = Xr; + Xr = temp; + + Xr = Xr ^ ctx->P[N]; + Xl = Xl ^ ctx->P[N + 1]; + + *xl = Xl; + *xr = Xr; + +#endif // DISABLE_SECURE_CODE + +} + +void DecryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr) +{ + unsigned int Xl; + unsigned int Xr; + unsigned int temp; + int i; + +#ifndef DISABLE_SECURE_CODE + + Xl = *xl; + Xr = *xr; + + for (i = N + 1; i > 1; --i) { + Xl = Xl ^ ctx->P[i]; + Xr = F(ctx, Xl) ^ Xr; + + /* Exchange Xl and Xr */ + temp = Xl; + Xl = Xr; + Xr = temp; + } + + /* Exchange Xl and Xr */ + temp = Xl; + Xl = Xr; + Xr = temp; + + Xr = Xr ^ ctx->P[1]; + Xl = Xl ^ ctx->P[0]; + + *xl = Xl; + *xr = Xr; + +#endif // DISABLE_SECURE_CODE + +} + + +unsigned int F(const BLOWFISH_CTX *ctx, unsigned int x) { + unsigned int a, b, c, d; + int y; + +#ifndef DISABLE_SECURE_CODE + + d = x & 0x00FF; + x >>= 8; + + c = x & 0x00FF; + x >>= 8; + + b = x & 0x00FF; + x >>= 8; + + a = x & 0x00FF; + + y = ctx->S[0][a] + ctx->S[1][b]; + + y = y ^ ctx->S[2][c]; + y = y + ctx->S[3][d]; + + return y; + +#endif // DISABLE_SECURE_CODE + +} diff --git a/trunk/IrisSubp/IrisSubpMon/Blowfish.h b/trunk/IrisSubp/IrisSubpMon/Blowfish.h new file mode 100644 index 0000000..214436f --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/Blowfish.h @@ -0,0 +1,44 @@ +//====================================================================== +// IRIS-SUBPj^vO Blowfish֐ +//====================================================================== +#ifndef _IRIS_SUBP_BLOWFISH_H +#define _IRIS_SUBP_BLOWFISH_H + +#include "IrisSubpMonTarget.h" + + +typedef struct { + unsigned int P[16 + 2]; + unsigned int S[4][256]; +} BLOWFISH_CTX; + + +void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen); +void EncryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr); +void DecryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr); +#ifndef DISABLE_SECURE_CODE +void InitBlowfishFook(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen); +void EncryptByBlowfishFook0(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr); +void EncryptByBlowfishFook1(const BLOWFISH_CTX *ctx, unsigned int *x); +void EncryptByBlowfishFook2(const BLOWFISH_CTX *ctx, unsigned int *x); +void DecryptByBlowfishFook(const BLOWFISH_CTX *ctx, unsigned int *x); +#else +#define InitBlowfishFook() InitBlowfish() +#define EncryptByBlowfishFook0(ctx, xl, xr) EncryptByBlowfish(ctx, xl, xr) +#define EncryptByBlowfishFook1(ctx, x) EncryptByBlowfish(ctx, &(x)[1], &(x)[0]) +#define EncryptByBlowfishFook2(ctx, x) EncryptByBlowfish(ctx, &(x)[2], &(x)[1]) +#define DecryptByBlowfishFook(ctx, x) DecryptByBlowfish(ctx, &(x)[1], &(x)[0]) +#endif // DISABLE_SECURE_CODE + + +#ifndef ENABLE_TEST_BLOWFISH + +extern const BLOWFISH_CTX blowfishInitTable; // e[u +#else +extern const BLOWFISH_CTX blowfishTestTable; // ieXgŁj + +#endif // ENABLE_TEST_BLOWFISH + + + +#endif // _IRIS_SUBP_BLOWFISH_H diff --git a/trunk/IrisSubp/IrisSubpMon/BlowfishInitTable.s b/trunk/IrisSubp/IrisSubpMon/BlowfishInitTable.s new file mode 100644 index 0000000..d9ef160 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/BlowfishInitTable.s @@ -0,0 +1,277 @@ +;******************************************************************** +; BlowfishCjVL[e[u +;******************************************************************** + ALIGN + GLOBAL blowfishInitTable +blowfishInitTable + + DCD 0x5f20d599, 0xb9f54457, 0xd9a4196e, 0x945a6a9e + DCD 0xebf1aed8, 0x3ae27541, 0x32d08293, 0xd531ee33 + DCD 0x9a6157cc, 0x1ba20637, 0xf5723979, 0xbef6ae55 + DCD 0xfb691b5f, 0xe9f19de5, 0xa1d92cce, 0xe605325e + DCD 0xcffed3fe, 0x0d0462d4 + + DCD 0xb7ecf58b, 0xbb79602b, 0x0d319512, 0x2bda3f6e + DCD 0xf1f08488, 0x257e123d, 0xbbf12245, 0x061a0624 + DCD 0x28dfad11, 0x3481648b, 0x2933eb2b, 0xbdf2aa99 + DCD 0x9d95149c, 0x8cf5f79f, 0x29a19772, 0xcf5fd19d + DCD 0x1a074d66, 0x4b4ad3de, 0xa3a7c985, 0x3a059517 + DCD 0xbf0a493d, 0xa28b890a, 0xdd49824a, 0x0bf19027 + DCD 0x6a1cebe9, 0x05457683, 0x617081ba, 0xde4b3f17 + DCD 0x39abcfae, 0x563af257, 0x8aad1148, 0x3f45e140 + DCD 0x54029bfa, 0xfb93a6ca, 0x6ffe4def, 0x9c87d8a3 + DCD 0x48d5ba08, 0xfd2d8d6a, 0x74f8156e, 0x8b52bebd + DCD 0x9e8a2218, 0x073774fb, 0x4a6c361b, 0x6242ba19 + DCD 0x109179b9, 0x9665677b, 0xe82302fe, 0x778c99ee + DCD 0x64865c3e, 0x86786d4d, 0xe2654fa5, 0x5adfb21e + DCD 0x087ed00a, 0xac71b014, 0x1c83dbbd, 0x62a1d7b9 + DCD 0x7c63c6cd, 0xe6c36952, 0x12ce75bf, 0x04215d44 + DCD 0x3cd3fbfa, 0xd4631138, 0x49418595, 0x08f20946 + DCD 0x1fdc1143, 0x6d15c076, 0x70633c1f, 0x6c8087ea + DCD 0x8b63bdc3, 0x372137c2, 0x2309eedc, 0x4d6a372e + DCD 0x50f79073, 0x921cac30, 0x91231004, 0xaa07d24f + DCD 0x9a4f3e68, 0x6a6064c9, 0xf32114c8, 0x124122d6 + DCD 0xe6cf2444, 0x0ddd568a, 0x85e14d53, 0x5a528c1e + DCD 0xc284199c, 0x6ff15703, 0x58be00e3, 0xd5ed4cf6 + DCD 0x1f9c6421, 0x3c0355be, 0xaaffdc4a, 0x5de0dac9 + DCD 0xdee6bf5e, 0xf8b1d8f5, 0xb9b336ff, 0xdb956762 + DCD 0xed375f31, 0x9967704c, 0x3118b590, 0x99993d6c + DCD 0xd3da42e4, 0xa0134225, 0x6c70d7ae, 0xc7cf55b1 + DCD 0x43d546d7, 0x443d1761, 0x8533e928, 0x93a2d0d5 + DCD 0x1f1225aa, 0x460bc5fb, 0x567697f5, 0x87bea645 + DCD 0xe86b94b1, 0x9933feb1, 0x6c3e1fae, 0x091d7139 + DCD 0xe4379000, 0x74753e10, 0x3b838cff, 0xf9b0f1b0 + DCD 0x42470501, 0xacd6f195, 0x9ee6387e, 0x3f267495 + DCD 0x185068b4, 0xb43043d0, 0x68e34b4c, 0xb64de5bf + DCD 0xa00a8b95, 0x77322574, 0x2cf7a1cf, 0x5a1371d8 + DCD 0x51c9eaab, 0xefee0de8, 0x197e93e9, 0x38431ea7 + DCD 0xa12c1681, 0xcc73e348, 0xd36c2129, 0xd9a0ce5d + DCD 0xa0437161, 0x64b51315, 0x192acf92, 0xa5b7addc + DCD 0xf865869f, 0xfbe79f1a, 0x13b8fdf7, 0x6fdb276c + DCD 0xf71c35df, 0x9b5b2c8d, 0x6438ab12, 0x31decc06 + DCD 0x11754ee8, 0xeafae364, 0xc25434eb, 0xeb343fad + DCD 0x267d2c93, 0xf3569d36, 0xb3f6e15a, 0x9e4a6398 + DCD 0x9ae48332, 0x907d6084, 0xee0e132e, 0xa2364b93 + DCD 0x3816ec85, 0x020688e8, 0x3aa0f0bf, 0x9a6ad7ed + DCD 0xcf57e173, 0xdcb844f8, 0xd159232e, 0x715295df + DCD 0x4ba06199, 0x786e7fd5, 0x30c5a9ba, 0x328640d3 + DCD 0x9c0c329d, 0x2f02b737, 0xa99854ba, 0xc90413c4 + DCD 0xe7c8be8d, 0x2e50975d, 0x5922d693, 0x22bc270c + DCD 0x20a7e092, 0x7f6f930f, 0xb5d39f4c, 0x740b2aa6 + DCD 0x107d4967, 0xc5d1cb26, 0x8ce77186, 0x5be99ca0 + DCD 0x01f61ab2, 0x5e9e8cee, 0xdb1af283, 0x84eae5e6 + DCD 0x7cd27659, 0x49a58df6, 0x16c24836, 0xa383bb52 + DCD 0x0c07b974, 0x2861ff3b, 0xe4e961e1, 0xaa156eef + DCD 0x5de8ba4e, 0x32bb9605, 0x72fbb056, 0xc80e0f52 + DCD 0x76652542, 0xdef2af89, 0x01f02710, 0x97a7744b + DCD 0x5426d507, 0x821f0954, 0x307d860a, 0x26b30e39 + DCD 0xbb570b9b, 0xaf310636, 0xd9fc79fd, 0x0c2b1030 + DCD 0xd79be1b3, 0xef5fdc7b, 0x4513f8d2, 0xbd75474d + DCD 0x7e3c9646, 0xb53ef375, 0x3b9ac567, 0x6b295bb0 + DCD 0xc85b80de, 0x31b10515, 0xdd49ceb6, 0xaeb584ad + DCD 0x3167dc60, 0x4efe3034, 0xa62f80bd, 0x213963bf + DCD 0x7f35d986, 0x05226816, 0x2690e954, 0x516c078c + DCD 0xd75531a4, 0x3ea80709, 0xc166532e, 0xc47bf2f8 + DCD 0xf1cf58f2, 0xe7a2c587, 0x87308f27, 0x6264a058 + DCD 0x88b91823, 0xc4cefa7c, 0x17adae98, 0xf35b4acc + DCD 0x56d548e9, 0xc8f20dd3, 0xdb8c7392, 0xac562fd7 + + DCD 0x6992f981, 0xf632c64d, 0x218dc0e6, 0x618076e2 + DCD 0x6cdcbc11, 0x6919af93, 0xb9bfd09b, 0x67029f31 + DCD 0x83ee51a3, 0x0c7b2206, 0x404249ab, 0x7d01d5b8 + DCD 0x55f75ece, 0x99c53953, 0x9f87d846, 0xb464f7ba + DCD 0xa1fa9ae3, 0x1068906d, 0x548aca30, 0xc3609fa7 + DCD 0x0d6bf519, 0xe698517a, 0xb4514398, 0x4fe935d6 + DCD 0x7b0fdfc3, 0xbd5c2fd6, 0x1961153a, 0xaacb4bf1 + DCD 0xc9646ddc, 0x561ec6d3, 0x504c38ef, 0xcc758671 + DCD 0xe94e0d0d, 0x5d06f628, 0xd3aa1b70, 0x39a8cf45 + DCD 0x2ea695ac, 0xd422e4b4, 0x5f37a874, 0xcc047a48 + DCD 0xd8404ca5, 0x0828b428, 0x52721c0d, 0x477df041 + DCD 0x4e533a19, 0x6b628458, 0x818ab593, 0xdc0d4e21 + DCD 0xc6a23fb4, 0x402bc9fc, 0xe90438da, 0x6b865a5e + DCD 0x8525220c, 0x7c8d1168, 0x55951d92, 0xbb8eab4d + DCD 0xb7e6a6da, 0x5a32b651, 0x05dd4105, 0x50560a2a + DCD 0xcc471791, 0xb57ee6c9, 0x73db4a61, 0x33c85167 + DCD 0x746edaf5, 0x37c3542e, 0x08af6d0d, 0x5f8a15e8 + DCD 0xcd2159e2, 0x060cdea8, 0x5f6b775a, 0x3e6518db + DCD 0x78de50c8, 0xb382b8e0, 0x32724e5d, 0x34c14f07 + DCD 0xb796ba23, 0x28a44e67, 0xeb62341e, 0xe9706a2d + DCD 0x70c4422f, 0x9c315a4e, 0x28475bf9, 0x6f71daaa + DCD 0x78b31f38, 0x1c6b92c4, 0x9a35f69e, 0xbf0e4db7 + DCD 0x412918cc, 0x5d354803, 0xc62bd055, 0x605caf29 + DCD 0x5e8e6974, 0xbdd47c9b, 0x7d64447b, 0x695d923f + DCD 0x4b001fb6, 0xcf3583d4, 0x174e647e, 0x2ed58dae + DCD 0x4e12289a, 0x08492b2e, 0x46c6ae5c, 0x6141ae85 + DCD 0xd2826f1e, 0x1f163751, 0xa459f60b, 0xaf5aca9a + DCD 0x8b33d40d, 0x84f16320, 0xcfcb5c80, 0xd3b9b408 + DCD 0x62bd0516, 0x569b3183, 0xba9f9851, 0xb2aa5bb2 + DCD 0xb52c6b22, 0x63fa48d4, 0xfa585f2b, 0x0964fa61 + DCD 0xb8e038bb, 0xa860929d, 0x0e6f670d, 0x010df537 + DCD 0xd477c29f, 0x73f1ecfe, 0x7de03930, 0xe49861f5 + DCD 0x0455282c, 0x2fdb5556, 0x58e5ec6b, 0x8064b606 + DCD 0x4e1a2a6a, 0xc4d80f5b, 0x19522e0a, 0x30f562d9 + DCD 0x7b8cbe48, 0xa29b384f, 0xd3c9afc3, 0x4162c1c7 + DCD 0x2161b986, 0x4f996f57, 0x7bcebac1, 0x5e4d3bb5 + DCD 0x57448b8a, 0x705f135f, 0x47295b6d, 0xece238dc + DCD 0x12655504, 0x4317e82a, 0x2add8ee1, 0xf794e2b3 + DCD 0xe65c6e09, 0x6df88aeb, 0x48544989, 0xbfad2ff5 + DCD 0xca4b94ea, 0x828739fc, 0xf2018a5f, 0x71e6f275 + DCD 0xde42d8d6, 0x281d2df1, 0xa37e88a6, 0x301d47a0 + DCD 0xdf71a3d9, 0x01cb1c49, 0xf2b136f8, 0x5d5822f0 + DCD 0xa0bd6b45, 0x4288b2bb, 0xce288cc7, 0x6390e893 + DCD 0x897c9008, 0xb77df53c, 0x554f2d04, 0x7efd1651 + DCD 0xc1bee879, 0xf8d412f2, 0x230584b4, 0x2bd2cca0 + DCD 0xadabe1fd, 0x6c55d10d, 0x4d944123, 0x054f3777 + DCD 0x17bf0c28, 0x6c6712b3, 0xf75ac38c, 0x6d2a8441 + DCD 0x271294d0, 0x9cedb42c, 0x8247ec4d, 0xb967d597 + DCD 0x55c09d1b, 0x8ee57e07, 0x3ee7a8e2, 0x3a0ee412 + DCD 0x3455452a, 0x5a2df9a2, 0x7c52ab1b, 0x555f1083 + DCD 0x435af1d2, 0xa4a7c62b, 0xe8951589, 0xf89d4bb4 + DCD 0x609fe375, 0xe6d65b78, 0x21e6440d, 0x2247bd06 + DCD 0xad00a453, 0x8513438d, 0xfcaaf739, 0xed7baf38 + DCD 0x542be4fc, 0xfc4c9850, 0xdff78085, 0xe122803c + DCD 0x24deda94, 0x397ab0c6, 0xa10fdc38, 0x6ff9f4a7 + DCD 0x8b571863, 0x2e2a4184, 0xd9f253d4, 0xddd00f00 + DCD 0xa6196e99, 0x5becd00a, 0xc0ab2458, 0xec6506cb + DCD 0x9438131a, 0x2f03670a, 0x77e3f73f, 0xc6337744 + DCD 0xe3d03914, 0x7908a2c0, 0x579940bb, 0x90010b41 + DCD 0x48cce1cd, 0xafb3db67, 0x4cf37488, 0xb1728f82 + DCD 0xc42923b5, 0xfc196c12, 0x9ca4468e, 0x876525c4 + DCD 0x8abe6dd3, 0x38031193, 0xf32b83ed, 0xea93a446 + DCD 0x1d85533b, 0x08f1d4ce, 0xfced2783, 0xbc181a9b + DCD 0xdcae8bf9, 0x3850ab24, 0x104b72e9, 0x467b1722 + + DCD 0x6459ab5d, 0xf8ae40f3, 0xf9c8e5bb, 0x554e0326 + DCD 0xfeebeb7d, 0xe0e639f7, 0x2ebe110a, 0xed98ff28 + DCD 0x5642c9c0, 0x00fdc342, 0xa287aff6, 0x323f015b + DCD 0x9a954792, 0x3d32a572, 0x9bd06bae, 0x9249d207 + DCD 0xfa4a78e3, 0xf27d06a1, 0x7477cf41, 0x0cb21404 + DCD 0x16648486, 0xa151bbd5, 0xd1f16fe5, 0x5ff7e2f2 + DCD 0xb84d2058, 0xddcfc757, 0x76bed8c5, 0x7e5ff63d + DCD 0x888b2ae7, 0x3f381b24, 0x7723410e, 0xd44bf0f5 + DCD 0xa4fa1f0c, 0xcf5f800b, 0xdae0f645, 0x5359342f + DCD 0x523c20fb, 0xb5355e62, 0x608bfe62, 0x5a86e363 + DCD 0xd16e1a15, 0x32bc4547, 0x3867ebb4, 0x336ee4ab + DCD 0xa3edb53a, 0x4ee067ad, 0x62ee9541, 0x1d267162 + DCD 0x3062ef31, 0xac82d7af, 0x0405dcc2, 0xbf0797f5 + DCD 0x07235911, 0xe80264c0, 0xaf3ee597, 0xa659ac18 + DCD 0x90334a8b, 0x9c7c6e1c, 0x3c4c7e20, 0xbb64613e + DCD 0x7e7c6bc5, 0x4cc59f3e, 0xf573ea9f, 0x4cc089d7 + DCD 0x2df4fbf4, 0x511b14ec, 0xc812c1d5, 0x4a0bdf10 + DCD 0x93bc9c8b, 0x3e3e6a45, 0xbaa9c17d, 0x07b4c1cd + DCD 0x8668e1e4, 0x386db243, 0x5c0cfbf3, 0xde713766 + DCD 0xa06eef56, 0xa7654010, 0xbed0f798, 0x3637c80e + DCD 0x7cca10ec, 0x1e84ab9c, 0x02761705, 0xaa524f1c + DCD 0xa0c6c15f, 0x04d8b956, 0xa74d4484, 0x60ded859 + DCD 0x050e38e6, 0x3be1038f, 0x3304816d, 0xce0b306f + DCD 0x33210569, 0x89bb26fb, 0x87aeb67d, 0xe007517e + DCD 0x0a96f7ac, 0x5cc4f96b, 0x4744e41d, 0xe3fa5eb8 + DCD 0x42558478, 0xf75e484b, 0x8635477d, 0x05432b1d + DCD 0xb88aec03, 0x763c061e, 0x431a480c, 0xed8ab7a7 + DCD 0x43c6131e, 0xdbef10ee, 0x833cfbec, 0xef4495b2 + DCD 0x4e5154d8, 0x1d44112d, 0x1e5936fb, 0xc3c1347a + DCD 0x610057ca, 0x16a567ea, 0x55d0559b, 0x36d97fe1 + DCD 0xae7640d2, 0xb0ce01dc, 0xcbd5837a, 0x6bec9820 + DCD 0x349272c1, 0x375782f3, 0x36328a62, 0xae43900c + DCD 0x789b5cae, 0x0265138e, 0xc17168fd, 0xa031b0fe + DCD 0xc3b08224, 0xa76979b1, 0xd0ebd2f5, 0xdc32c082 + DCD 0x3c26c79e, 0xc1988d6d, 0xd0d422bb, 0x3eec330f + DCD 0xdce1ccb9, 0x36774c6a, 0xbff91c14, 0x5f289f81 + DCD 0x29328571, 0xc4487590, 0xd8ce4ab3, 0x2f148f44 + DCD 0xef5740fd, 0xd97508aa, 0x6ed6d146, 0xc31f5532 + DCD 0x1f84fe18, 0xffd584fc, 0x481b5e71, 0x0e9586c3 + DCD 0xd3270828, 0x7b718338, 0x5463804c, 0xacb0569a + DCD 0x31ca80cf, 0xf3feef09, 0x7e24afbe, 0x3f53fea6 + DCD 0x334a8dc2, 0xa622d168, 0xea7bad66, 0xb043b6de + DCD 0x009525a1, 0x46753fa3, 0xec441114, 0x92bc95d7 + DCD 0x16a94ff0, 0x60976253, 0xf1410f2a, 0xeebe2471 + DCD 0xcd087f94, 0x85b39360, 0x3f00075b, 0x83280fd8 + DCD 0x9f69d19a, 0xc32edad1, 0xb9a20190, 0x662a4e6b + DCD 0xa6aeda9d, 0x68d32aea, 0x9c0c0c2f, 0xed4a8cd2 + DCD 0x65579ee2, 0xa387099d, 0x5d32c4b4, 0x2b32d4c9 + DCD 0x1e71e0b1, 0x90e64d64, 0x401ee371, 0x84f37ded + DCD 0x78c8ed0e, 0x71c0ae76, 0x05bb7227, 0xfb6402ea + DCD 0xb56b48f3, 0xed3f9342, 0xd253139f, 0xec2afef7 + DCD 0xdb25471d, 0xc686913c, 0xfd11f08e, 0xf7367423 + DCD 0x7a9ef5a4, 0x4450537e, 0xd3ca47d4, 0xe66d38eb + DCD 0x7f9471d9, 0x4b69c64a, 0xea52f411, 0xb08afe22 + DCD 0x598b6736, 0x2a80e6e8, 0x130465eb, 0x9edcecee + DCD 0x05ecb15f, 0x9fe6596a, 0x896b595e, 0xca1af7bf + DCD 0x6a5bf944, 0xe4038571, 0x70e06229, 0xcfc4416f + DCD 0xe3ccb1b2, 0xa807a67e, 0x847fe787, 0x4b52db93 + DCD 0xdd7eec6c, 0x104824d4, 0x60049f69, 0x1848e674 + DCD 0xb92ce4f3, 0x7a502e4f, 0x6954d4df, 0xf3a78b2b + DCD 0xf31fffce, 0x3901263e, 0x89849517, 0x4b4cf0b0 + DCD 0xc49f9182, 0xa59dac4b, 0x2517af74, 0xd332cac9 + DCD 0x848a89bc, 0xae0dcc89, 0x9cdba27c, 0xee91786a + DCD 0x4e5d76ea, 0x69f56087, 0x02d46715, 0x3648afcf + + DCD 0x6fbfea07, 0x8f062d66, 0xf9fe9ac4, 0x758790f6 + DCD 0x0fadf7b8, 0x3d5a1076, 0xb32eb059, 0xcc2c35c7 + DCD 0xcb2b5670, 0xc59637e3, 0x8a1b462f, 0x88c74622 + DCD 0x983226a7, 0x2286df61, 0x2f1cf48a, 0xaa09a187 + DCD 0xd3aea9cc, 0x1c4500bd, 0x8687549a, 0xffef8752 + DCD 0x8fa18f1e, 0x355c89c1, 0x3a2dda1b, 0xc2b2162c + DCD 0x78e256f1, 0x97636bc1, 0xc98f56c5, 0xaa2c7f32 + DCD 0xaca8a6af, 0x88229120, 0x8b60e4de, 0x25424bf9 + DCD 0x9c7fe31a, 0x3a89192c, 0x36d4057e, 0xc25869cc + DCD 0x2f8b32c1, 0x7aeb8590, 0xa1a55039, 0x66c59227 + DCD 0x584f20b0, 0x4383557e, 0x9ce2452b, 0x9012d8e4 + DCD 0x5683162c, 0xb3037916, 0x18612dad, 0x371f131a + DCD 0x739ce1e2, 0xfdd5807b, 0xfc87512d, 0x1fd7aa7b + DCD 0xaf8e7a2c, 0xcdbb8df4, 0x727c1195, 0xe26fee0b + DCD 0x37deafb9, 0x8d8cde83, 0xb7670562, 0x568dc696 + DCD 0x62d70db6, 0x3646d6ba, 0xe6c88ebd, 0x106c2aea + DCD 0x5b6bff14, 0x463c82fa, 0x464330b1, 0x9b7d8a51 + DCD 0x79833e92, 0xb25d555b, 0x90ce5e6c, 0x98538e62 + DCD 0xe56d0dc9, 0xc5cd572d, 0xe1ba5781, 0x728fb8e8 + DCD 0xdc134fe5, 0x15719dea, 0x8811b210, 0x7fd409d5 + DCD 0x2c7f655b, 0x114c383b, 0xfb8d5068, 0xbf59b09e + DCD 0x4a898094, 0x12181ac5, 0x4ad15389, 0x8ce82910 + DCD 0xeab6ec1c, 0x8b17c746, 0xa8311525, 0xb1436ba2 + DCD 0x0bdbe29d, 0x11b09b87, 0xd2710e04, 0x82897729 + DCD 0x7f41660a, 0xff480b1d, 0xfd24bb72, 0x9ba148c2 + DCD 0xce7f7bfe, 0xd986db88, 0xb01c3b85, 0x0733a8dc + DCD 0xe32e51bf, 0x97009a0e, 0x97c0061e, 0xb6d89d43 + DCD 0x6786c445, 0x88f8005f, 0x9e52a49a, 0x838aaac7 + DCD 0x18c5ec75, 0x2fc3ceae, 0x18f92b1a, 0xf51aaeff + DCD 0x33b50b53, 0xe8fda751, 0x64a2e1a8, 0x431722b6 + DCD 0xd80acc80, 0x40ba3bae, 0x4a92d9d7, 0x1004df89 + DCD 0x2b189bee, 0x8a69776a, 0xb9f9f468, 0x6e1521a2 + DCD 0x033b1ee6, 0x609b3062, 0x9b257e41, 0x52c58f9e + DCD 0xc2f80810, 0x1121a169, 0x795e3788, 0x10ff6635 + DCD 0xed6e1842, 0x1c6bb697, 0x6de5364e, 0xbfe4b47d + DCD 0x05e0b920, 0xb8d5693a, 0xe0dcd5e3, 0x3e53acb9 + DCD 0xad57a407, 0x1848ff77, 0x49ac2a76, 0x75478e2a + DCD 0x63679f6d, 0x398c3530, 0x6fd53905, 0xad5b3a64 + DCD 0x82bb0bca, 0xb1459952, 0x99363693, 0x442013af + DCD 0x4402d836, 0x85923909, 0x974a4aff, 0xd763a687 + DCD 0x24b5b5c7, 0x6fb40fed, 0x1452580c, 0xd37ba6d9 + DCD 0x5838bc79, 0x843bbda1, 0x061ad806, 0xeaa86bfd + DCD 0x0428694b, 0x9982ad37, 0x851b0efb, 0x735da8bd + DCD 0x7558dccd, 0x6c63be0a, 0xe44ce748, 0x60042b30 + DCD 0xdad815b9, 0x8f758186, 0x1c8dd496, 0x7c85705d + DCD 0xd57b671c, 0xcea66708, 0x70660a4b, 0xd463e5b7 + DCD 0xea828a5b, 0xe2ca6710, 0x8517eff4, 0x8a5f2a2f + DCD 0x6af88297, 0xea1034d6, 0x3c5cc9eb, 0x46f849e1 + DCD 0xf6bddeeb, 0xaaf192a9, 0xb018a0a6, 0x1f0fd33a + DCD 0x31ff6ff3, 0xd3444345, 0x88f79a50, 0xcec19609 + DCD 0x2cf2cc76, 0x82adba2c, 0x84188f77, 0x9c07d2c0 + DCD 0x4e839036, 0x434fa50b, 0x78ab043e, 0x09fbd64f + DCD 0xda902401, 0x613a3c6f, 0x4a697f0d, 0x02302beb + DCD 0x84e0dbb4, 0x35d7eca9, 0x857d37bf, 0x4ea9ce58 + DCD 0xa8c780e4, 0x486730d3, 0x2faf29eb, 0xa7b46a74 + DCD 0x923f0f3f, 0xaccaf3af, 0x94d94baf, 0x81ca43c0 + DCD 0xa1482f0d, 0xd2d527b0, 0x85054bef, 0x934ddea3 + DCD 0xbbf03c30, 0x27308f4a, 0x3ee3eb4c, 0x2f9aed64 + DCD 0xf082f13b, 0x7fcff4ba, 0xe1b0cb40, 0x57aabc7f + DCD 0xf274c9d3, 0x220d43fa, 0x4e77f4d0, 0x7085d793 + DCD 0xb6bf991f, 0x30f135de, 0xf0715ea7, 0x7b2d016b + DCD 0x5333f064, 0xf388390a, 0x6ba63a6b, 0x432fd235 + DCD 0xb5fd02cd, 0xaa5bbce9, 0x7e19a4d8, 0x81945d0e + DCD 0xad776f9e, 0x93740ed6, 0x18c4e796, 0x19f5ad5f + + + END + + diff --git a/trunk/IrisSubp/IrisSubpMon/BlowfishTestTable.s b/trunk/IrisSubp/IrisSubpMon/BlowfishTestTable.s new file mode 100644 index 0000000..a9974d4 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/BlowfishTestTable.s @@ -0,0 +1,277 @@ +;******************************************************************** +; BlowfishCjVL[e[uieXgŁj +;******************************************************************** + ALIGN + GLOBAL blowfishTestTable +blowfishTestTable + + DCD 0x4a46f6a1, 0xf887db81, 0xf4376b4f, 0x0b9eec26 + DCD 0xb9df846e, 0x8ca411c1, 0x2c5a135c, 0xa06b7bcb + DCD 0xcd61fedf, 0x2728b095, 0xbe22b311, 0x44d1e898 + DCD 0x5b703b54, 0x97114577, 0x67d8960a, 0x929b96b9 + DCD 0x2c7f8c34, 0x4b04fa76 + + DCD 0xcd70865b, 0x26359533, 0xd19a41fa, 0x9e597e8c + DCD 0xf25b08ce, 0x60707b7f, 0x815c245a, 0x6eceba71 + DCD 0xc0094824, 0x100efe30, 0x40c1dc72, 0x05edd815 + DCD 0xac17dade, 0x60a21e58, 0xc55d4536, 0x04b0b435 + DCD 0xc9c03c65, 0xe2e9f11c, 0x93138f3c, 0xe2e96c96 + DCD 0xd6b44360, 0x19a848df, 0xd5440bb1, 0x876e76cc + DCD 0x23b378fb, 0xff73b479, 0x460612a3, 0x723d8f73 + DCD 0x0dfc89a4, 0xc89ab0a0, 0x463daaed, 0xed802868 + DCD 0x2b88b026, 0x0ee4f376, 0xa2f569a7, 0xd02df1f9 + DCD 0x67613e5d, 0xdde56443, 0x8178f731, 0xb35a8e3d + DCD 0xeb680e97, 0x1e32a8d0, 0x16f5b8bb, 0xd9046a54 + DCD 0x30ba0b86, 0x20174d9a, 0x5b290549, 0x84c41a0e + DCD 0xd4096d8c, 0x704a3aa1, 0xe145c9d1, 0xa557a14b + DCD 0xbadd2621, 0xb4755e78, 0xa6c57d89, 0x82ccbd36 + DCD 0x7527df4d, 0x0474cbe9, 0x8ccd8a8e, 0xe5f4ab84 + DCD 0xc0eca098, 0xbb97e24b, 0x49380d6b, 0xae9d53e1 + DCD 0x20d2a135, 0x2a4f2089, 0x959e535e, 0xc7150f35 + DCD 0x0008ddae, 0x1abab9e0, 0x05562aba, 0x8f1d9865 + DCD 0x62aecea4, 0x1ab41a12, 0x15ad25e3, 0xbeafc96e + DCD 0x7d803c6a, 0x6de25cb8, 0xe64ad0a0, 0x9c5f8879 + DCD 0x42711a43, 0x2cc470f3, 0xf6addba3, 0xaac39e41 + DCD 0xf8e91246, 0x90980bb6, 0xb33de41c, 0x24d79b08 + DCD 0x6cd084e9, 0x080eb68c, 0x84136558, 0x77d4244c + DCD 0x5d201fd9, 0xb2e5682d, 0x1880302d, 0xd5f3fa99 + DCD 0x71a11d92, 0xc9e2af1a, 0xe1c804df, 0x2d9ebee7 + DCD 0x2da9625e, 0x94deb7fd, 0xeded6198, 0x4dd61935 + DCD 0xe67443b1, 0x5213e1e7, 0x6dfdf6fd, 0x6ad71b6c + DCD 0x37adc8cd, 0x41c84096, 0xc884ceec, 0xa30f33a8 + DCD 0x7b900d16, 0x48b35ad1, 0x505d9f32, 0x412dc939 + DCD 0xb95d16fb, 0x3b28e381, 0xc1857465, 0x5c0470dd + DCD 0x7fb288d0, 0x6bd0408a, 0x22c39383, 0xe4aed9f3 + DCD 0x238879e3, 0xf26e0a21, 0x09a95ff2, 0x0252fd6f + DCD 0x8c289f17, 0x2253bda4, 0xe79513ad, 0x3cdd8b4c + DCD 0xaa950b46, 0x50fd411f, 0x63c15e69, 0x9ec1ae90 + DCD 0xf863ef11, 0x6f1a151f, 0xcdbe12cf, 0xaa3d8581 + DCD 0xe48181f3, 0xa52210bd, 0x93cbc5e0, 0xe61ebf37 + DCD 0x3eaea1f8, 0x2c606c99, 0xeef82ba8, 0xc17805ec + DCD 0x8784bc41, 0x390bf39f, 0x585375a4, 0x70775e27 + DCD 0x55fbe67f, 0xf9af439a, 0x79ab3c2d, 0xa1e1e581 + DCD 0x68d87ed9, 0x184a0883, 0x9d88d137, 0xc629bf0f + DCD 0xee2c4d1e, 0x0f6fe232, 0xc8f6889a, 0xa4495c00 + DCD 0x2e3f71c6, 0x57a072a1, 0x1ef48739, 0x17447c8e + DCD 0x6848f422, 0xb49fe027, 0x4499dbd5, 0x1fdf5795 + DCD 0xf58b1677, 0x1ba20506, 0xfb7fddd1, 0x62410693 + DCD 0x9ebb6e66, 0x9f0daa55, 0xe693a20b, 0x0ada8b21 + DCD 0x4f17b80b, 0xdd7868b3, 0x5164e1d8, 0x9cd2f619 + DCD 0xd7811039, 0x82086954, 0xdf5cc03b, 0x1a99e593 + DCD 0x791ddf2a, 0x7dd4d3ea, 0x6f162c9d, 0x8be468fc + DCD 0x9f6e7e0e, 0x07feb9d2, 0xa8c95922, 0x116d0ddb + DCD 0x219a6a8a, 0x300e9420, 0xc0cd3072, 0xef4d9f56 + DCD 0x3c7695a5, 0x211f7b11, 0x3e40fd95, 0x21b15d2f + DCD 0xdaa08678, 0xd76e836a, 0x3e3f0411, 0x67dc241b + DCD 0xdf591603, 0x1d0cd5cf, 0x8719d73a, 0xff55f428 + DCD 0x31ba5a0a, 0x69086166, 0x34ef91f8, 0xb3bd5965 + DCD 0x862c239e, 0xa526a80f, 0x92ede2e0, 0x049b5692 + DCD 0xca83d0a0, 0x7de4b866, 0x3bc1e5a0, 0xf47004be + DCD 0x70fb397c, 0x57bf0226, 0x6c9323eb, 0x651ae032 + DCD 0xece995af, 0x612a9926, 0x33ae9b95, 0xc92956e2 + DCD 0xd34d588b, 0x8ee12ef1, 0xa8de650f, 0x90ca4a5e + DCD 0xec40eee8, 0x83ad7c85, 0x19eacbe7, 0x500cc9fd + DCD 0xb7a08ab5, 0xedb22f62, 0xafdeabf1, 0x3d146b41 + DCD 0xb1db523e, 0xf2c0e966, 0x06ab4d5f, 0x505ee648 + DCD 0x1f71c0a1, 0x43c12324, 0x730091ce, 0xddf551c5 + DCD 0x474a1a43, 0x422ea2c0, 0x5ee96481, 0x35e08c56 + + DCD 0x1d3820aa, 0xd6726c1f, 0x45b00ccc, 0xa85491ca + DCD 0xa3fd6ed3, 0xa89695fe, 0xc12beb97, 0x7eff99cd + DCD 0x5db0dc5b, 0xb26abce6, 0x036a4401, 0x5a8840c8 + DCD 0xdbce41a7, 0x343cb974, 0x9cc9afc2, 0x2d4e2c30 + DCD 0x0e8269f7, 0x8bff82ce, 0x9e518bd9, 0xf397ebef + DCD 0xefd46c83, 0x22a93aad, 0x84c2b0a0, 0x28a26694 + DCD 0x3324e6f6, 0x40f4539c, 0xda3609d1, 0xa9483f55 + DCD 0xdf704dda, 0x1f735c0b, 0x45102ec9, 0x71543b90 + DCD 0x4884b455, 0x229cd00d, 0x87cafe2b, 0x46d87ac7 + DCD 0xa0ab6c3f, 0x2be31c52, 0xfd24f2f5, 0xede7b0e3 + DCD 0x55fbf4a3, 0x49c8da6f, 0xc2a0ea0a, 0x0d5a115c + DCD 0x2053dc30, 0x19cd3500, 0xb0f0ec60, 0x05a77b19 + DCD 0xb2db158b, 0xa570bd7c, 0x2413b797, 0x05bed629 + DCD 0x0e1df7ac, 0x0958aa4d, 0x0e3817ea, 0x83bd43e5 + DCD 0x5fcb3f51, 0xb8f8f0bd, 0x7ebd6452, 0xe1ced5a8 + DCD 0xf812dee6, 0x3ba09c46, 0xa01890d7, 0x8eed8e02 + DCD 0x53c73145, 0x7db33d18, 0x661a69e8, 0x3ef4f086 + DCD 0x519b2c50, 0xbace6f68, 0xf20ff75a, 0x3c251f2f + DCD 0x229282a9, 0x5b135571, 0x481a0a45, 0x92d30aeb + DCD 0xc32c7cf0, 0xcf6f3df5, 0x8be85f42, 0x6336e724 + DCD 0xaa6596f5, 0x33314ef7, 0x9ac02115, 0xe26f0c5e + DCD 0x0cbcc701, 0xcafa791d, 0xa727a01e, 0x21bd128e + DCD 0x1f350c49, 0xd3571b57, 0xd249a9e8, 0xbd85c611 + DCD 0x0ba903d1, 0x8302bcca, 0xdc89ba64, 0x08369ad7 + DCD 0x4fe6ebb0, 0x288ba46a, 0xa5cf9b04, 0x2609f604 + DCD 0x5f3698d8, 0xe40fc850, 0x49091ccb, 0x669895a7 + DCD 0xb35e6e4f, 0x3bed2be9, 0x4f841603, 0x5bf6c70e + DCD 0x331bc24d, 0x11d138cb, 0xc1ae0a88, 0xfb985b54 + DCD 0x54828ebb, 0x2c96da55, 0x0af13542, 0x0774b6c6 + DCD 0x95f451ee, 0xaf4b3b77, 0x2a201b3e, 0xb822dc0d + DCD 0x337f018d, 0x9eb8c10b, 0x1b3e3a19, 0xbfe9d57f + DCD 0x8ffc736f, 0xeae418cf, 0xddf160f2, 0x037f811f + DCD 0xee569e70, 0x7f6b3748, 0xfac6caff, 0xe540f41f + DCD 0x42bfe95a, 0x8a2f723a, 0xc90f3a17, 0xe2acbbdd + DCD 0x84930a13, 0xd627355e, 0x880c18c3, 0x91571ba0 + DCD 0x175d17a1, 0xf9c3023f, 0xfe710233, 0x30d9d488 + DCD 0x5e8ff406, 0xb1bc7144, 0x040a57d3, 0x3f5f702b + DCD 0xf1182cf2, 0xa48be70e, 0x2710b09c, 0x2a761426 + DCD 0xe6b53260, 0x739a5ff9, 0x44573814, 0x00028530 + DCD 0x6883b926, 0x73fbd408, 0xa9e78906, 0x3cc79185 + DCD 0x8d4d1263, 0xf7227cf9, 0x87a62ad2, 0xdc799673 + DCD 0xe79c8caa, 0x34fa9369, 0xe4153f43, 0x4bb9f688 + DCD 0xc05b5600, 0xa3de2e7f, 0xa775b317, 0x585e21c2 + DCD 0x02a74643, 0x23f530ad, 0x3df9978d, 0xafb60023 + DCD 0x8cecde2e, 0x3344866e, 0x1ad981dd, 0x4918b9f6 + DCD 0xf5d24a8d, 0xdcd691cc, 0x0d81647d, 0x1859de1c + DCD 0x7dc54442, 0x8303fc99, 0xd91ae065, 0x52b2c9c0 + DCD 0x0522a188, 0xee129947, 0x322fde74, 0xd33da79f + DCD 0x9b0b41ac, 0xd1f0e908, 0x382101b3, 0xee60afb3 + DCD 0xf294ea92, 0xfdf4e422, 0x4e2dd429, 0x53d4ca12 + DCD 0xf83d4d69, 0x7ca99fc0, 0xdc80b12c, 0x92ae95c2 + DCD 0x5b962ed7, 0x1e4c8e02, 0x9d2baf33, 0xbda48e6e + DCD 0x1d966a9f, 0x9b154721, 0x14447bb2, 0x2584e6fa + DCD 0x15a0e697, 0xe2df5c32, 0xef43dc6a, 0x09aa7d7d + DCD 0x7c037cab, 0x2edbef6b, 0x276f3965, 0x9615325f + DCD 0x95634ad3, 0x7d14b74c, 0xcece5e78, 0x41c4b17b + DCD 0x5b8931b8, 0xa960ca71, 0xbf1bc3af, 0x2ef5cbcc + DCD 0xee25cbca, 0xefd9e40b, 0x2d2af1f8, 0x2b504f79 + DCD 0x23950771, 0xc459a9b3, 0xeaff71c1, 0x07b920bb + DCD 0x7597cc0a, 0xc6e5244c, 0x3c513083, 0x3601005f + DCD 0x662b9a2c, 0xcd8cc1c1, 0x305dfcb2, 0xf3f6a575 + DCD 0x57776b82, 0xedf78348, 0x8b3ba524, 0xe0475039 + DCD 0x7417a999, 0x0169b153, 0x65f20fef, 0xfe102fe4 + DCD 0xfdd7b23c, 0x7b201dcf, 0x2d59863d, 0xd24178eb + + DCD 0x7a760f23, 0x8241f550, 0xc64beabf, 0x3380cb8a + DCD 0x114d08d8, 0x18f76bde, 0x6e5f6e2b, 0x3121c61c + DCD 0x8fd633f4, 0xe7afdfbd, 0x0333db83, 0x84e70127 + DCD 0x48f3634d, 0x83d709dd, 0x79987ff7, 0x063b2c27 + DCD 0x843e416d, 0x65a378bb, 0x8ef8439a, 0xf789c3cc + DCD 0x2e4b4121, 0xc245e44c, 0xff193556, 0x34a0be4e + DCD 0x620dd47f, 0x586c3a17, 0xd20012da, 0x718cf285 + DCD 0xa7f8533a, 0xf6f5cf6c, 0x0be9b734, 0xd1935d5b + DCD 0x2506bd64, 0x2bf60d6e, 0x15c804bf, 0x13a69ce5 + DCD 0x071ed428, 0x24e7b02a, 0xeb3db5e8, 0x82421988 + DCD 0x9a453028, 0x5d174bf1, 0x2da5c77e, 0x9c2e2e8f + DCD 0x63f0f8fc, 0x2be1ed90, 0x77c1b78c, 0x6c578857 + DCD 0x4076ce06, 0xf81a6cb8, 0x5db92f12, 0x15ab7171 + DCD 0x6d4b870d, 0x99193327, 0x42073d13, 0xb70a19b6 + DCD 0x43851600, 0xb522889b, 0xe52278cf, 0x722ac563 + DCD 0xa624a83c, 0x41703498, 0x2d585fa1, 0xba4a5b3c + DCD 0x2bfe1197, 0xff05182c, 0x8408bee2, 0x9f48121f + DCD 0x7922b4d1, 0x6664bf5e, 0x2bd9f7f4, 0x51ea46eb + DCD 0x7bc520da, 0xad8580f8, 0x51b13918, 0xa05cf186 + DCD 0x96a463af, 0x242f6690, 0xc4e30e72, 0x550a4738 + DCD 0x57cabf8b, 0x2f302a46, 0x03a705bc, 0x7eb63047 + DCD 0x62bf270e, 0x44fe74b7, 0x3ae4201b, 0x67e2b944 + DCD 0xadcdb554, 0x71462dea, 0x3f8181a8, 0xd6b5b988 + DCD 0x26bff131, 0xa0e01570, 0x5545ae12, 0x93f74add + DCD 0xf8cb7682, 0x794f3bb2, 0xff80da2d, 0x49899941 + DCD 0x39d5801f, 0x07619fff, 0x15cdd0db, 0x1ffaa2ce + DCD 0x42854b62, 0x7b9eaeba, 0x0255fce0, 0x5e021626 + DCD 0x94ba16b6, 0x23b8eabc, 0x60edf8a4, 0x722334f2 + DCD 0xe0e03074, 0xf24c6abe, 0x1ff5738b, 0x4b714d54 + DCD 0x124d3ed3, 0xcf61bdb0, 0xa3e510ea, 0xf0e89b3b + DCD 0x7c0c4086, 0xb80a8f06, 0x5e7a1fcc, 0x0c944a7b + DCD 0x834ca2f0, 0x0535d835, 0x2cb51685, 0xb0a1a73b + DCD 0x650067f7, 0x8c0fe4f3, 0xb8f5cb4b, 0x1c56dacc + DCD 0xd9f52c39, 0xa410e041, 0x577f4797, 0x062b486b + DCD 0x53e8378d, 0x5fd38d55, 0x38918478, 0xfccb7ee7 + DCD 0xf09bfbb6, 0x65148bdd, 0xbbab0c9d, 0xf454c0e2 + DCD 0x4ff63ec2, 0x42a29ea1, 0xa0b28b20, 0x57ed9d13 + DCD 0x48450cd1, 0x299cb22e, 0x46ce322b, 0xa1de4d20 + DCD 0x23f03d35, 0xd769ebc3, 0x161343e6, 0x1d7de909 + DCD 0x721db01c, 0x6cdcfa43, 0x707d3751, 0xed0a30ee + DCD 0xef6e149e, 0xdf4e330c, 0xbcc7f6a0, 0xf62e3ca5 + DCD 0x5056cbe9, 0xc2f1616f, 0x62499137, 0x95706c54 + DCD 0x5a7e91dc, 0xec659c3f, 0x5d7f4e62, 0x3d865b1e + DCD 0x2f172b51, 0x109f5710, 0xbd80cafd, 0x9a5ce374 + DCD 0x7d967f96, 0x0918958c, 0x917b4c42, 0x79321830 + DCD 0x5b53f509, 0x8ced3e11, 0xa85e80ea, 0x83aa1888 + DCD 0x94706df1, 0x0e7ee640, 0xdc8dfa43, 0x839349da + DCD 0xdf1086a1, 0x008ad8e7, 0x80e8aac0, 0x1463d245 + DCD 0x3f0a4a0b, 0x750054d3, 0x80cb5e28, 0x2410b552 + DCD 0x57137422, 0x26b9af08, 0x514ffdab, 0xc57564b4 + DCD 0x88ae77b9, 0x65a04a8d, 0xb754becd, 0x6fcd10dc + DCD 0x3d8e1857, 0xa90d1232, 0xf34bd8f7, 0x13448440 + DCD 0x922e6998, 0x19cf7e25, 0xaa2918e1, 0x890b60b0 + DCD 0x7030ab18, 0x22417447, 0xe42da9a5, 0x86515844 + DCD 0x73087c5b, 0x6f4c50e9, 0x84cdfe3f, 0x0e9942f5 + DCD 0x398a2c77, 0xfc986c58, 0x9a9dec00, 0xd5ca4c52 + DCD 0x33394f6e, 0x1b71fd37, 0xeaa2f109, 0x1954de63 + DCD 0x4200de8e, 0x7d046b7c, 0x16d107fc, 0x1a8fcff2 + DCD 0x4b55ae3c, 0xbab53607, 0xb7cbb780, 0xe043c98e + DCD 0xf87098e5, 0xe138e25d, 0x40ff8057, 0x86940083 + DCD 0x3ce76995, 0x4cb9d05f, 0x0f581907, 0x5e3dac5d + DCD 0x83a2c1b9, 0xd4f1a3ce, 0x71cf27ea, 0xd997f122 + DCD 0xa655447e, 0x1b59d11f, 0xf458295c, 0x7f72b78c + DCD 0xd496a483, 0x5ea9055c, 0xc0189738, 0x3db25255 + + DCD 0x2d111ffb, 0xa706e838, 0x251b91d9, 0x304c40ec + DCD 0x4b3525be, 0x15f10969, 0x35fc8d6f, 0xcf87942c + DCD 0xee977ca8, 0x3194a850, 0x54fee439, 0xe528af54 + DCD 0x25698e1e, 0x361b8f99, 0x7bbf7a35, 0xcf0ee45d + DCD 0xe46f6833, 0x333e00c7, 0xe5c63a77, 0x72d7d30b + DCD 0x0aa86fdc, 0x0375daba, 0x3a84ee54, 0x8d23cf64 + DCD 0xeb5ebdfa, 0x20f636d2, 0xd8991ab0, 0x16734342 + DCD 0x0980bb8b, 0x2341def2, 0xddee4deb, 0x618ea347 + DCD 0xe46bbeb0, 0x2ce56bc1, 0xd101ae6c, 0x935228ad + DCD 0x56792ec0, 0x6d79fbc3, 0xaa98039a, 0xd5a8b85e + DCD 0xac30ac15, 0xc8fca8ca, 0xf4e13bc5, 0xbcac4bcf + DCD 0xb8027c04, 0x2deefacb, 0x75fcfebc, 0xe0b203b9 + DCD 0x7052e4c0, 0x232ab7f3, 0x190fac4b, 0xd1174bc3 + DCD 0xc54423fd, 0x8ec85ec4, 0x60c1f887, 0x6a67736a + DCD 0xb4a4c3f1, 0x7d435e1e, 0x2598d0c9, 0x27092040 + DCD 0xaf74052a, 0xa289d174, 0x1e9101b2, 0x6d290e1b + DCD 0xd8c66be8, 0x70b54fc4, 0x6a0d981d, 0x1649da16 + DCD 0xd8ab187f, 0x112dc8b9, 0x517c8ef2, 0xa0feaaa8 + DCD 0x01a95519, 0x5145c21e, 0x51628a1b, 0x3b13f266 + DCD 0x4ed13baa, 0xe34e1bf7, 0xe8e4c670, 0xa37acadc + DCD 0xb21013d8, 0xbf469fee, 0xb149f1d2, 0x35eec167 + DCD 0xa5315b49, 0x724bcacb, 0xfc8bac25, 0x20b70168 + DCD 0xdb829cff, 0xa0c8d14a, 0x647a9274, 0x7e6449e0 + DCD 0xf3073316, 0xb3b91ab0, 0x1a712fb5, 0xaf92ca1e + DCD 0xcfd46fbd, 0x74dabdf6, 0x1e8c192a, 0xabb6369d + DCD 0x61bd95c7, 0x3346b2c2, 0x112ed78c, 0x734299cb + DCD 0xadf16e9f, 0x90d9c452, 0x229e47ea, 0x07340abf + DCD 0x7358eb8f, 0xb1ae7ea5, 0x41562eeb, 0xe0d58f71 + DCD 0x99be2884, 0x8a86e155, 0xa9da6d22, 0x73e0587e + DCD 0xd4357f4a, 0xf704c44f, 0x23381b31, 0xc48a1dd5 + DCD 0x4ebe8b98, 0xa187266a, 0x45f66098, 0x13e71b79 + DCD 0x22f58514, 0x37386d82, 0xc8da6692, 0x133fce69 + DCD 0x1dd81184, 0x413479fe, 0xd5f19d9e, 0xc98a4fe7 + DCD 0x8e11080b, 0xe503d16b, 0xe418ad10, 0x0bd0a216 + DCD 0x10699750, 0x78381ca1, 0xfa59a938, 0xeaf9c653 + DCD 0xfb57fa86, 0x118a69c0, 0x71a8d96c, 0xfa90d4e6 + DCD 0x8f71c373, 0x219cd448, 0xdef7378b, 0x1091c20b + DCD 0xf5c45ac2, 0xf6f453dc, 0x23f57355, 0x3ce4af40 + DCD 0x88728468, 0x394e5b9f, 0x8ccd2a2b, 0xb34c3c46 + DCD 0x1649945b, 0x1e26db73, 0xa28a1a19, 0x00299280 + DCD 0x5bc3153c, 0x5e57cbbc, 0x724e0efe, 0x33547d75 + DCD 0x975e83bf, 0x4007bccc, 0x5d618dd1, 0x4a736824 + DCD 0x04f8c27b, 0x0e85b5f5, 0xe1a2c7f3, 0x02ed2fb0 + DCD 0x8dbe2bef, 0xeddd7222, 0x36ec5780, 0xd5d28d5c + DCD 0x725a076e, 0xea2026f0, 0xa2ddac96, 0x1a33a523 + DCD 0x02ea4733, 0xcb7dafc8, 0x4f48395b, 0xbb556441 + DCD 0x35ffdeb6, 0x10a3d7ae, 0x8bd12776, 0x05f1954e + DCD 0x71eb73dd, 0x9d5fce77, 0x4fcb38c3, 0x2214fa74 + DCD 0xd5cbd35c, 0x22fa10c1, 0x9a093b77, 0xe77d9bec + DCD 0xce1b6f8a, 0x7de7b617, 0xf628c408, 0x8075c24f + DCD 0x8dc66e84, 0x0acabccf, 0x508e1667, 0x60860869 + DCD 0xe9124705, 0xb078f70f, 0xfa3a5d40, 0x4d879462 + DCD 0x92b0ceaf, 0xc43888af, 0x46788685, 0xee4a3f9f + DCD 0xb349a574, 0x2ec7130f, 0x9474228e, 0x4e792129 + DCD 0x29dd3e46, 0x05cc67fa, 0x2adda55d, 0x86657225 + DCD 0x2e615073, 0x00bde29b, 0x724621fd, 0x93566aeb + DCD 0x963a885e, 0xb54b452b, 0x888f81b4, 0x13482851 + DCD 0x18892eaa, 0xe005315d, 0xdec4faa1, 0xef014fe7 + DCD 0x7d4f14c6, 0x6932aee5, 0x4cfc1292, 0xeceac113 + DCD 0xa70c4070, 0x78f22a86, 0x34838e27, 0xa672b6cd + DCD 0x185191c2, 0xcb5ce063, 0xe05e1497, 0x314cce8f + DCD 0xbf0aeb87, 0x7636aee5, 0xf6793f41, 0x2d5416a6 + DCD 0xfb85d95f, 0x6b9394f8, 0xccb7bb64, 0x49573004 + DCD 0x7c00df3c, 0xb7b9e311, 0xb597eaad, 0x8234af78 + + + END + + diff --git a/trunk/IrisSubp/IrisSubpMon/IRIS-SUBPモニタ履歴.txt b/trunk/IrisSubp/IrisSubpMon/IRIS-SUBPモニタ履歴.txt new file mode 100644 index 0000000..5c32d47 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IRIS-SUBPモニタ履歴.txt @@ -0,0 +1,239 @@ +IRIS-SUBPj^vOύX + +V0.76 +EIPL2J[gbWu[gEo[W +V0.75 +EJ[hoX؂芷o[W +V0.74 +EfobK4MBo[W +V0.73 +EJ[gbWu[gdl +V0.72 +E3D[Ή +V0.71 +EIPL2u[g +V0.70iTS040304oo[W / CRC16 0x5835j +EIPL2u[gΉ +EARM7Cւu[gł悤Ɋg +EV[PXœK +ERTCǂݍ݂ֈړ +EIPL2֓n^C}[RTCǂݍݒɊJnAZLAɒ~iIPL2RTCmF̃}[W҂߁j +EC擪64KB +EIPL2 ̃Cւ̃[h”\̈32oCgʂֈړ +EIPL2 ̓[NRAM ւ̃[h”\̈32oCgʂֈړ +EIPL2 ̓[NRAM ւ̃[h”\̈扺ZLA[N0x2200oCgʂֈړ +EJ[hSECURER}hCeVŏTCN`iKGAME[h֑Jڂ邽߁j +EXNuZoSPQƂ vc_dummy vd ֈړ +EenableReadSecure ̏ !enableCardNormalOnly lj +EIPL2CRCsvC擪64KBNA flashCrcError ݂̂֕ύX +EkVXeR[EG[Terminate lj +ETCe[uk + +V0.62 +E3D[Ή +V0.61 +EIPL2u[g +V0.60iTSoo[W / CRC16 0x4809j +EIPL2u[gΉ + +V0.59 +EIPL2u[gΉ +V0.58 +EIPL2u[g +ERTCύXiEFCgύX 30us 6usj +EIsMmem8MB() ύX +EtbVARM7[hg +EInitReadFlash() C +ESIOnhVFCNf[^ZLAHÏ։B +EIԍ 4 3 ύX +V0.57 +EIPL2u[gΉ +V0.56 +EIPL2u[g +ESVC_Div()/SVC_DivRem()/SVC_Sqrt() lj +EUC_*StreamFuncp() ύX +EInitVA_VB_VD() vc_dummy vZύXiSecureWork ړ̂߁j +EenableReadSecure ̏ !rtcResetError ܂߂ +EenableCardNormal ̃fobKNΉ +ESharedWork \̂ cardHeaderError olj +EChangeObjectTableFook() ChangeObjectTable() ւ̈^ +ERTC oOC +V0.55 +EIPL2u[gΉ +V0.54 +EIPL2u[g +ETerminateFuncp NULL|C^`FbN +EDecryptObjectFileFook()/ChangeObjectTableFook() + /CopyBiosAreaFook()/CpuSetFast32Fook() lj +EtbV CRC G[ASECURËNA +V0.53 +EJ[gbWu[gdl +ETCe[ulj +V0.52 +EIPL2u[gΉ +V0.51 +EIPL2u[g +EUnCompLZ77Short()/UnCompHuffman32() ̓֐ւ̑3ύX +EVXeR[̐ +EÍ֐̃tbN֐Q ljiB̂߁j +EARM7[Uő働[hTCY 32KB 64KB +ETEhSINe[ulj +ETEh{[e[uXV +V0.50 +E3D[Ή +V0.49 +EfobKʐMŁitbVݖj +V0.48 +EfobKʐMŁitbVݗLj +EfobKE[h`FbN +ESIO ʐMf[^NA̕ύX +V0.47 +EIPL2u[gΉ +V0.46 +EIPL2u[g +EÍe[uXV +EJ[hE[hp[^`FbN +ESPI荞ݗvp~ +V0.45 +EtbVwb_̃tH[}bgύX +EZLeBLfobKʐM +V0.44 +EfobKʐMŁitbVݖj +ESIO "ID" `FbNlj +V0.43 +EfobKʐMŁitbVݗLj +ECRCl 0 0xffff +V0.42 +EfobKʐMŁiZLeBj +EXNűݒʒuSECUREGAǂݍ݃V[PXֈړ +ESECURËCRCvZRTCZbgG[`FbN +V0.41 +EIPL2u[gΉ +V0.40 +EIPL2u[g +EIPL2TCY폜 +EIPL2k^Cv`FbN 4bit 8bit +EÍIuWFNgΉ +EfobKj^ADoXu[g폜 +EfobKj^̗L͈͂g̈֐ +EfobKƂSIOnhVFCNbΉ +ESECURE[hERg[ݒ}NC +V0.39 +E2ʃubh{[hł̃J[gbWoXu[gdl +V0.38 +EIPL2u[gΉ +V0.37 +EIPL2u[gł̉ +ENORMAL[ĥݓ싖ƒL[Ή +EPNG-OFFLL[Ή +V0.36 +EIPL2pJ[hoXE_E[h +V0.35 +ESECURER}hƃtbVǂݍ݂̊S񏈗i3DECeV΍j +EJ[hoXEt_E[h +V0.34 +E3DE50msCeVoOC +V0.33 +E3DSECURE[hΉ +EROMwb_tH[}bgύX +EtbVwb_tH[}bgύX +EJ[hu[g NINTENDO S`FbN CRCf[^`FbN ύX +EJ[h[hEoOC +V0.32 +EJ[hu[g NINTENDO `FbN S`FbN ύX +EUsrSwi() 폜 +V0.31 +ETEh`[oo[W +V0.30 +EJ[hoXSECURER}hs菇̃_ +EIPL2p֐|C^擾VXeR[̒lj +EIPL2pu[gVXeR[JԂĂԎdl֕ύX +EDISP_READY_CARD_4_IPL2 `lj +EJ[hoXEZbgMAINPֈړ +EIPL2pu[gVXeR[lj +V0.29 +EJ[hiJ[gbWjwb_`FbNɂ̂݃fobKj^N +EPNAle[uC +EL[N 4KB 16KB g +ESPIVtgNbN 4Mbps ύX +ECTRDG_PHI_OUT_* C +EAGB[h̕\ԑ҂MAINPֈړ +EDISABLE_AGB_MODE DISP_AGB_HEADER_ERROR ύX +V0.28ifobKpj +EMMEM_CHK_SIZE_[WRITE|READ]_BUF ړ MAINPƕ +E3MbZLeBdlΉ +EfobKj^EJ[gbWu[g̓ǂݍ݃TCYCi0x180 0170j +EO FIQ sƒoȌC +EJ[gbWoXAGBƓM̏o +EAGB[hROMwb_`FbN`̒lj +EAGB[hΉ̖[v +V0.27ifobKpj +EfobKj^u[gGÄړi0x170 0160j +EBIOSveNVAhX Zbg +EJTAGCl[u Zbg +V0.26ifobKpj +EfobKj^u[gGÄړi0x70 0170j +EfobKj^EJ[hu[gΉ +EJ[h֌WZLAR[hꎞr +EAGB[hꎞr +V0.25 +E}XNROMu[gΉi{ RTC j +EO FIQ s‘Ή +EAGB[hbΉ +V0.24 +EMAINPƂ̒ʐM̕ύX +EJ[hZbg lj +V0.23 +EXbhΉɖ߂ +EfobKj^u[gGÄړi0x10 0x70j +V0.22a +EVXeR[ɂČĂяõX^bNgp悤ɕύXiXbhΉj +V0.21 +EfobKC^tF[X +ESVC_UnPackBits() oCgANZX + +V0.20iTEG{[hzzo[Wj +E荞ݏAVXeR[œK +ESVC_UsrSwi() VXeR[lj + +V0.17 +EVXeR[Q̐ +V0.16 +EVXeR[Ɗ荞ݏĂяo̍ +EX^bN|C^̈ړ +#E*CpuSet*() ̓]TCYL͈͂̊g +V0.15 +ESVC_WaitByLoop() lj +ESVC_WaitIntr() +ESVC_WaitIntr() Halt lj +ESVC_CpuSetFast() oOC +ESVC_ChangeSoundBias() 2Xebv 1Xebv ύX +Eɖ̃NbNo͂؂Ȃ悤ɏC +ERs[֐\[XAhX`FbN +EROMwb_̈Rs[ +V0.14 +EJ[gbWANZX^C~O 10-6 ύX +ESVC_AccessCard() TEG{[hbł̒lj +ESVC_CpuSetFast() 32ByteTCỶ +V0.13 +EVXeR[NoQƎ̃oCgANZXC +V0.12 +EUICANZXx lj +V0.11 +ETEG łADoXE_E[h֑Ή +EADoXւ̃ANZX^C~OJ[hSECURE[hɍ킹 +ESUBP-DMA ł256KByte܂ł]łȂ CPU 8MB ܂œ]ł悤ɕύX +ETEhoCAXݒ +V0.10 +ETEG œ삷悤ɑΉ + +V0.05iAD16BUSo[WV0.01j +EMAINP_E[hs + +V0.02iCBBΉj +EHalt() CAStop() 폜 +V0.01iTEhBBΉj +EAGBɂTEhƒʐMȊÕVXeR[̎ +EBB ̎dlɍ킹ē[NRAMC[W𖢎gp +ERAMsvORs[p CpuFastSet() ̃\[X`FbN +EL[͂܂Ń[UvÕ[h҂̊ԃubNAEg\ diff --git a/trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h b/trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h new file mode 100644 index 0000000..a2518bb --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h @@ -0,0 +1,240 @@ +//====================================================================== +// hqhrj^vOL̈` +//====================================================================== +#ifndef _IRIS_MON_SHARED_AREA_H +#define _IRIS_MON_SHARED_AREA_H + + +#include "IrisSubpMonTarget.h" +#include + + +typedef void (*IntrFuncp)(void); + + +// ROMwb_Eu[gp[^\ +typedef struct { + u8 *romAddr; // ROMAhX + u8 *entryAddr; // GgAhX + u8 *ramAddr; // RAMAhX + s32 romSize; // ROMTCY +} BootUsrParam; + +// ROMwb_\ +typedef struct { + s8 titleName[12]; // \tg^Cg + u32 initialCode; // CjVR[h + + u16 makerCode; // [J[R[h + u8 machineCode; // {̃R[h + u8 deviceType; // foCX^Cv + + u8 nonVerReserved[4]; // \i4oCgj + u8 verDepReserved[4]; // \io[WˑA4oCgj + u16 wirelessSerialNo; // VANo + u16 softVersion:8; // \tgo[W + + u16 compArm9BootArea:1; // ARM9u[gGAktO + u16 compArm7BootArea:1; // ARM7u[gGAktO + u16 :0; + + BootUsrParam arm9; // ARM9u[gp[^ + BootUsrParam arm7; // ARM7u[gp[^ + + u32 fileSysReserved[8]; // t@CVXe\i32oCgj + + CardCnt romCtrl4Game; // ROMRg[iNORMAL & GAME[hj + CardCnt romCtrl4Secure; // iSECURE[hj + u8 romCtrlReserved_l[4]; // \ + u16 secureCRC16; // ZLÄCRC16bit + u16 romTimerLatency; // ^C}[CeVi(TCN/256) - 2A3Dpj + u8 romReserved_h[8]; // \ + u32 romNormalModeKey[2]; // NORMAL[hL[ + + u8 reserved[64]; // \̈i64oCgj + + u16 nintendoLogo[0x9c/2]; // NINTENDOSi156oCgj + u16 ninLogoCRC16; // NINTENDOSCRC16 + u16 headerCRC16; // wb_CRC16 + + u8 *dbgRomAddr; // fobKj^ROMAhX + s32 dbgRomSize; // fobKj^ROMTCY + u8 *dbgArm9RamAddr; // fobKj^ARM9-RAMAhX + u8 *dbgArm7RamAddr; // fobKj^ARM7-RAMAhX +} RomHeader; + + +// tbVwb_\ +typedef struct { + u32 macAddr_l; // MACAhX Low + u16 macAddr_h; // High + u16 crc16; // CRC16bit + u32 blowfishKey; // BLOWFISHL[ + u16 arm9RomOffset; // ARM9-tbVItZbg + u16 arm9RamInvOffset; // ARM9-RAMItZbg + + u16 arm7RomOffset; // ARM7-tbVItZbg + u16 arm7RamInvOffset; // ARM7-RAMItZbg + + u16 arm9RomAlign:3; // ARM9-tbVItZbgE + u16 arm9RamAlign:3; // ARM9-RAMItZbgE + u16 arm7RomAlign:3; // ARM7-tbVItZbgE + u16 arm7RamAlign:3; // ARM7-RAMItZbgE + u16 arm7PlaceMmem:1; // ARM7-RAMCzutO + u16 :0; // \3bit + + u16 rsv2Byte; // \ + + u32 unScrambleKey[2]; // XNuL[i8oCgj +} FlashHeader; + + +// ZLA[N\ +typedef struct { + u8 recvRtcBuf[8]; // RTCf[^Mobt@iv4oCgEj + + u16 flashCrc16; // tbVCRC16 + u16 flashCount; // tbV 8oCgJEg + u32 flashBuf[2]; // tbVMobt@iv4oCgEj + u32 flashKeyBuf[3]; // tbVL[Ee|obt@ + u32 unScrambleKey[2]; // XNuL[i8oCgAMakeBlowfishTable() ŎZoj + s16 isGenUnScrambleKey; // XNuL[iMakeBlowfishTable() Őݒj + + u32 va; // 24biti24bitMj + u32 vb; // 20biti+`4bitAVBI: 32bitMj + u32 vc_dummy; // 16biti16bitMj + u32 vd; // 24biti24bitMj + + CardCnt cardCntBak4Secure; // SECURER}hp[^EobNAbv + s16 enableReadSecure; // SECURË惊[hECl[uiLoadSecure4Card() Őݒj + u32 cardNormalModeKey[2]; // NORMAL[hL[iMakeBlowfishTable() ŎZoj + u32 cardKeyBuf[3]; // J[hL[Ee|obt@ + s32 secureSize; // SECURËTCY + s16 sequenceNo4Secure; // V[PXԍiSECUREpj + s16 segmentTblShift; // ZOgԍe[uVtgliSECUREpj + u8 *segmentTblp; // ZOge[u|C^iSECUREpj + s16 numSecureSegment; // SECUREZOgiSECUREpj + s16 segmentOffset; // ZOgItZbgiSECUREpj + s16 blockOffset; // ubNItZbgiSECUREpj + + CardCtrlParam paramBak; // J[hp[^ ÍOobNAbviSECUREpj + +#ifdef TEST_HUFFMAN + + u8 huffTableBuf[512]; // nt}e[uobt@ + +#endif + +#ifdef TRACE_SECURE_OP + + s16 traceSecureOp; // SECURER}h̃g[X + s16 traceOpCount; + // J[hp[^ g[XiSECUREpj + CardCtrlParam paramTrace[64]; + +#endif + + BLOWFISH_CTX blowfishCardTable; // J[hpBlowfishe[u + BLOWFISH_CTX blowfishFlashTable; // tbVpBlowfishe[u + + u8 bufEnd[4]; // ZLA[NŏIf[^ +} SecureWork; + + +// L[N\ +typedef struct { + u32 nCardID; // NORMALJ[hIDiLoadCardHeader() Ŏ擾j + u32 sCardID; // SECUREJ[hIDiCardTimerIntr4Secure() Ŏ擾j + u16 cardHeaderCrc16; // J[hwb_CRC16iLoadCardHeader() ŎZoj + u16 cardSecureCrc16; // J[hSECURËCRC16iLoadSecure4Card() ŎZoj + s16 cardHeaderError; // J[hwb_G[iCheckCardHeader() Őݒj + s16 disableEncryptedCardData;// J[hSECURËÍf[^iDecryptObjectFile() Őݒj + + s16 cardSequenceNo; // J[hǂݍ݃V[PXԍ + s16 enableCardNormalOnly; // J[hNORMAL[ĥݗLiLoadFlashDemo() Őݒj + + s16 isOnDebugger; // fobKœ쒆 + s16 rtcError; // RTCG[ + + u32 recvRtc[2]; // RTCXe[^X1^C}[f[^iv4oCgEj + + u8 *flashArm9RamAddr; // tbVARM9-RAMAhX + u8 *flashArm7RamAddr; // tbVARM7-RAMAhX + s16 flashArm9HeaderError; // tbVEARM9wb_G[ + s16 flashArm7HeaderError; // ARM7wb_G[ + s16 flashCrcError; // tbVCRCG[ + s16 flashReserved; // tbV\̈ + FlashHeader flashHeader; // tbVwb_ + + u16 sysromCrc16; // VXeROMCRC16 +} SharedWork; + + +//---------------------------------------------------------------------- +// L[N̈̃AhXl +//---------------------------------------------------------------------- + +#define GetSharedWorkAddr() \ + \ + ((SharedWork *)0x027ff800) + +//EL[N̈̃AhXl܂B +//E 2KB + +//---------------------------------------------------------------------- +// ZLA[N̈̃AhXl +//---------------------------------------------------------------------- + +#if !defined(MOVE_TRACE_SECURE_BUF) && !defined(TEST_AGB_MODE) + +#define GetSecureWorkAddr() \ + \ + ((SecureWork *)0x037f8000) +#else + +#define GetSecureWorkAddr() \ + \ + ((SecureWork *)0x0380d000) +// ((SecureWork *)0x027fc000) + +#endif + +//EZLA[N̈̃AhXl܂B +//E 9KB + +//---------------------------------------------------------------------- +// J[h荞݃[N̈̃AhXl +//---------------------------------------------------------------------- + +#define GetCardIntrWorkAddr() \ + \ + ((CardIntrWork *)0x0380fc00) +// ((CardIntrWork *)0x027ff880) +// ((CardIntrWork *)((u32 )GetSecureWorkAddr() + sizeof(SecureWork))) +// (&GetSharedWorkAddr()->cardIntrWork) + +//EJ[h荞݃[N̈̃AhXl܂B + +//---------------------------------------------------------------------- +// tbVwb_AhXl +//---------------------------------------------------------------------- + +#define GetFlashHeaderAddr() \ + \ + (&GetSharedWorkAddr()->flashHeader) + +//EtbVwb_̃AhXl܂B + +//---------------------------------------------------------------------- +// }XNROMwb_AhXl +//---------------------------------------------------------------------- + +#define GetRomHeaderAddr() \ + \ + ((RomHeader *)ROM_HEADER_BUF) + +//E}XNROM̃wb_AhXl܂B + + + +#endif // _IRIS_MON_SHARED_AREA_H diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c b/trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c new file mode 100644 index 0000000..bb8b7c0 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c @@ -0,0 +1,624 @@ +//******************************************************************* +// IRIS-SUBPj^vO +//******************************************************************* +#include "IrisSubpMon.h" + + + +//---------------------------------------------------------------------- +// C[` +//---------------------------------------------------------------------- + +extern u8 SecureAreaEndp[]; + +CardIntrWork *cardIntrWorkp; +RomHeader *romHeaderp; + +void Iris2Agb(void); + +s32 CalledFormIPL2(void); + +s32 CheckCardHeader(void); +s32 CheckCartridgeHeader(void); +void LoadCardHeader(void); +void LoadSecure4Card(void); + + +#define CARD_DMA_NO 3 + + +void IrisSubpMonMain() +{ + SharedWork *shwp = GetSharedWorkAddr(); + + NotifyMainpIntf(0); // u[gEnhVFCN + +#ifdef NDEBUG + + WaitMainpIntf(1); + NotifyMainpIntf(1); + +#endif // NDEBUG + + InitReg(); // WX^ + PreInitRam(); // + + WaitMainpIntf(2); // ARM9 ҂ǐŏLWX^ݒ肪LɂȂj + + *(vu32 *)REG_CARDCNT = CARD_RESET_HI; // J[h X^[giZbgMAINPōsĂAOݒj + *(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM | CARDMST_ENABLE; // J[h}X^[Cl[u + + PostInitRam(); // ip[NRAMNAA + // J[hZbgHIԂɊ܂܂j + InitRtc(); // RTC & [hip[NRAMgpA + // J[hZbgHIԂɊ܂܂j + + *(u32 *)REG_TM0CNT = TMR_PRESCALER_256CK | TMR_ENABLE; // ^C}[ X^[g + *(u32 *)REG_TM1CNT = TMR_CONNECT | TMR_ENABLE; + + sharedWorkp = GetSharedWorkAddr(); // L[N̈fobOp + secureWorkp = GetSecureWorkAddr(); // ZLA[N̈fobOp + cardIntrWorkp = GetCardIntrWorkAddr(); // J[h荞݃[N̈ + romHeaderp = GetRomHeaderAddr(); // ROMwb_̈ + + shwp->sysromCrc16 = GetInvCRC16(NULL, BIOS_SIZE); // VXeROMCRCZoiCNAA + // J[hZbgHIԂɊ܂܂j + NotifyMainpIntf(2); // ̒ʒm + + intrTable[0] = CardIntr; // J[h荞݊֐ Zbg + + LoadCardHeader(); // J[hwb_̈̃[h + + LoadFlashHeader(); // tbVwb_̃[h + +#ifndef NDEBUG + + WaitMainpIntf(15); // fobOʐM + +#endif // NDEBUG + + LoadSecure4Card(); // J[hZLÄi+FLASHfj̃[h + + *(vu16 *)REG_TM0CNT_H = 0; // ^C}[~ + *(vu16 *)REG_TM1CNT_H = 0; + +#ifdef DISP_READY_CARD_4_IPL2 + + NotifyMainpIntf(9); // IPL2J[hǂݍݏʒm + while(1) ; + +#endif // DISP_READY_CARD_4_IPL2 + +#ifdef DISABLE_BOOT_IPL2 + + intrTable[0] = CardIntr; // J[h荞݊֐ ăZbg + + while (CalledFormIPL2() != -1) { // IPL2Ăяo + WaitVBlank(1); + } + +#endif // DISABLE_BOOT_IPL2 + + *(vu32 *)REG_IME = 0; // IME NA + *(vu32 *)REG_IE = 0; // IE NA + *(vu32 *)REG_IF = -1; // IF NA + + NotifyMainpIntf(3); // _E[h̒ʒm + WaitMainpIntf(3); +} + + +//---------------------------------------------------------------------- +// ROMwb_̈̃[h +//---------------------------------------------------------------------- + +void LoadCardHeader(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + + *(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM // J[h}X^[Cl[u + | CARDMST_ENABLE | CARDMST_IF_ENABLE; + + LoadCardTable(); // tbVEe[uݒ + + ReadCardHeader(); // ROMwb_ǂݍ + + shwp->cardHeaderCrc16 = GetInvCRC16((u16 *)rmhp, 0x15e); // ROMwb_CRCZo + + // NbN^CvƃCeVݒȊO NA + SetCardCnt4Normal(GetCardCnt4Normal() & (CARD_CLOCK_TYPE | CARD_LATENCY_MASK)); + + shwp->nCardID = ReadCardID4Normal(); // J[hIDi[ +} + + +#ifdef BOOT_FROM_CARTRIDGE + +void LoadHeader4Cartridge(void) +{ + *(vu32 *)REG_EXMEMCNT = CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC; // 10-6ANZXiC/J[h֌W̓[hI[j + + CpuCopy16_32(CTRDG_AD16_BANK0, ROM_HEADER_BUF, 0x170, 32); // ROMwb_ǂݍ +} + +#endif // BOOT_FROM_CARTRIDGE + + +//---------------------------------------------------------------------- +// J[hwb_̃`FbN +//---------------------------------------------------------------------- + +#define IS_EXIST_CARD_WORD 0xcf56 // 0x2e03 + +s32 CheckCardHeader(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + u32 retval; + + *(vu16 *)(MAIN_MEM_EX_END - 0x4) = 1; // wb_ǂݍݎstO + shwp->cardHeaderError = 1; + + if (shwp->cardHeaderCrc16 != rmhp->headerCRC16) return 1; // ROMwb_CRC`FbN + + if (rmhp->ninLogoCRC16 != IS_EXIST_CARD_WORD) return 1; + + *(vu16 *)(MAIN_MEM_EX_END - 0x4) = 0; // wb_ǂݍݐtO Zbg + shwp->cardHeaderError = 0; + + return 0; +} + + +//---------------------------------------------------------------------- +// J[gbWwb_̃`FbN +//---------------------------------------------------------------------- + +#ifdef BOOT_FROM_CARTRIDGE + +s32 CheckCartridgeHeader(void) +{ + if ((*(u32 *)(ROM_HEADER_BUF + 0) != *(vu32 *)"NINT") + || (*(u32 *)(ROM_HEADER_BUF + 4) != *(vu32 *)"ENDO")) { + return 1; + } + + *(vu16 *)(MAIN_MEM_EX_END - 0x4) = 0; // wb_ǂݍݐtO Zbg + + return 0; +} + +#endif // BOOT_FROM_CARTRIDGE + + +//---------------------------------------------------------------------- +// ROMZLÄ̃[h +//---------------------------------------------------------------------- +extern u32 png_off_key[]; + +void LoadSecure4Card(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + FlashHeader *fhp = GetFlashHeaderAddr(); + u8 *loadStartp = (void *)((u32 )rmhp->arm9.romAddr & ~(MROM_SEGMENT_SIZE - 1)); + u8 *loadDestp = rmhp->arm9.ramAddr; + s32 loadSize = rmhp->arm9.romSize; + s32 secureSize = MROM_GAME_AREA - (s32 )loadStartp; + + if (secureSize < 0) secureSize = 0; // SECURËTCY␳ + scwp->secureSize = secureSize; + + ClearMmemSecureArea(); // ZLeB̂߃C擪64KBONA + + InitSecureParamFook(); // SECURE[hp[^ + + if (!CheckCardHeader() // J[hEwb_̃`FbN + && !shwp->enableCardNormalOnly // NORMALJ[hE`FbN + && !shwp->rtcError // RTCG[`FbN + && (secureSize > 0) // AhX̃`FbN + && ((loadStartp >= (u8 *)MROM_SECURE_AREA) && (loadStartp < (u8 *)MROM_GAME_AREA)) + && ((loadDestp >= (u8 *)MAIN_MEM) && (loadDestp < (u8 *)MON_MMEM_LOAD_LIMIT))) + scwp->enableReadSecure = 1; // SECURË惊[hECl[u + + CheckDebugger(); // fobKN`FbN + + // ARM9擪16KBGA] +#ifndef DISABLE_SECURE_CODE + + if (shwp->enableCardNormalOnly) { // NORMALJ[hgpiSECURË͓ǂ܂Ȃj + + LoadFlashDemo(); // FLASHfvOǂݍ + + } else + +#endif // DISABLE_SECURE_CODE + + if ((shwp->isOnDebugger == 1) && IsMmem8MB()) { // fobKN + + if (scwp->enableReadSecure) + SetCardIntr4Normal(loadStartp, loadDestp, secureSize); // NORMAL[hǂݍ + + LoadFlashDemo(); // FLASHfvOǂݍ + + if (scwp->enableReadSecure) + WaitCardIntr(); // NORMAL[hǂݍݏI҂ + + ChangeCardMode4Normal(); // GAME[hJ + +#ifndef DISABLE_SECURE_CODE + + } else { // SECUREJ[hgp + + ChangeCardMode4Normal(); // SECURE[hJ + + intrTable[0] = CardIntr4Secure; // J[h荞݊֐ Zbg + intrTable[1] = CardTimerIntr4Secure; // J[h^C}[荞݊֐ Zbg + + InitCardParam4Secure(); // SECURER}hp[^ + SetCardIntr4Secure(loadStartp, loadDestp, secureSize); // SECURE[hǂݍ + + LoadFlashDemo(); // FLASHfvOǂݍ + + WaitCardIntr(); // SECURE[hǂݍݏI҂ + TerminateCardParam4Secure(); // SECURER}hp[^ + + if ((scwp->unScrambleKey[0] != png_off_key[0]) // XNuL[ + || (scwp->unScrambleKey[1] != png_off_key[1])) { + SetCardCnt4Game(GetCardCnt4Game() | CARD_SCRAMBLE_SET_MASK);// XNuݒ + } + +#endif // DISABLE_SECURE_CODE + + } + + if (scwp->enableReadSecure) // SECURËCRCZo + shwp->cardSecureCrc16 = GetInvCRC16((u16 *)loadDestp, secureSize); + + DecryptObjectFileFook(); // ÍIuWFNg̕ + +#ifndef DISABLE_SECURE_CODE + + *(vu32 *)REG_BIOS_PROTECT_ADDR = (u32 )&SecureAreaEndp; // BIOSZLeBAhX Zbg + +#endif // DISABLE_SECURE_CODE + +#ifndef TRACE_SECURE_OP + + CpuClearFast32(0, GetSecureWorkAddr(), sizeof(SecureWork)); // ZLA[N NA + +#endif // TRACE_SECURE_OP + + if (shwp->flashCrcError) // IPL2CRCsvASECURË NA + ClearMmemSecureArea(); +} + + +#ifdef BOOT_FROM_CARTRIDGE + +void LoadSecure4Cartridge(void) +{ + LoadFlashDemo(); // FLASHfvOǂݍ + + { u32 loadStartp = *(u32 *)(ROM_HEADER_BUF + 0x20) | CTRDG_AD16_BANK0; + u32 loadSize = *(u32 *)(ROM_HEADER_BUF + 0x2c) & (MAIN_MEM_SIZE - 1); + u32 loadDestp = *(u32 *)(ROM_HEADER_BUF + 0x28); + + while (!loadStartp || !loadDestp) ; + + CpuCopy16_32(loadStartp, loadDestp, loadSize, 32); // ARM9sC[Wǂݍ + } +} + +#endif // BOOT_FROM_CARTRIDGE + + +//---------------------------------------------------------------------- +// IPL2Ăяo +//---------------------------------------------------------------------- +void LoadGame4Card(void); +void LoadHeader4Cartridge(void); +void LoadSecure4Cartridge(void); +void LoadGame4Cartridge(void); +void LoadDebugger(void); + +#ifndef DISABLE_READ_CARD_4_IPL2 + +s32 CalledFormIPL2(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + s16 *sequenceNop = &shwp->cardSequenceNo; + + if (*(vu8 *)REG_PAUSE & 1) return -2; + + switch (*sequenceNop) { + case 0: if (!shwp->cardHeaderError) { // J[hEwb_̃`FbN + u8 *arm9LoadStartp = rmhp->arm9.romAddr; + u8 *arm9LoadDestp = rmhp->arm9.ramAddr; + u8 *arm9LoadDestEndp; + s32 arm9LoadSize = rmhp->arm9.romSize; + s32 arm9SecureSize = (u8 *)MROM_GAME_AREA - arm9LoadStartp; // ZLeB ČvZ + + if (arm9SecureSize < 0) arm9SecureSize = 0; + arm9LoadStartp += arm9SecureSize; + arm9LoadDestp += arm9SecureSize; + arm9LoadSize -= arm9SecureSize; + + if ((arm9LoadDestp >= (u8 *)MAIN_MEM) && (arm9LoadDestp < (u8 *)MON_MMEM_LOAD_LIMIT)) { + arm9LoadDestEndp = arm9LoadDestp + arm9LoadSize; + if (arm9LoadDestEndp > (u8 *)MON_MMEM_LOAD_LIMIT) + arm9LoadSize -= (arm9LoadDestEndp - (u8 *)MON_MMEM_LOAD_LIMIT); + + if (arm9LoadSize > 0) { // GAME[hǂݍ + SetCardIntr4Game(arm9LoadStartp, arm9LoadDestp, arm9LoadSize); + *sequenceNop = 1; + } else { + *sequenceNop = 2; + } + } else { + *sequenceNop = 2; + } + } else { + *sequenceNop = 6; + } + break; + case 1: if (*(vu32 *)INTR_CHECK_BUF & CARD_DATA_INTR_FLAG) { + TerminateCardIntr(); + *sequenceNop = 2; + } + break; + case 2: + +#ifdef TEST_CARD_BY_MAINP + NotifyMainpIntf(5); // J[hoX؂芷؂̒ʒm + WaitMainpIntf(5); +#endif // TEST_CARD_BY_MAINP + + { u8 *arm7LoadStartp = rmhp->arm7.romAddr; + u8 *arm7LoadDestp = rmhp->arm7.ramAddr; + u8 *arm7LoadDestEndp = NULL; + s32 arm7LoadSize = rmhp->arm7.romSize; + // [NRAM [hTCY + if ((arm7LoadDestp >= (u8 *)CPU_WRAM) && (arm7LoadDestp < (u8 *)MON_WRAM_LOAD_LIMIT)) { + arm7LoadDestEndp = arm7LoadDestp + arm7LoadSize; + if (arm7LoadDestEndp > (u8 *)MON_WRAM_LOAD_LIMIT) + arm7LoadSize -= (arm7LoadDestEndp - (u8 *)MON_WRAM_LOAD_LIMIT); + } + // C [hTCY + if ((arm7LoadDestp >= (u8 *)MAIN_MEM) && (arm7LoadDestp < (u8 *)MON_MMEM_LOAD_LIMIT)) { + arm7LoadDestEndp = arm7LoadDestp + arm7LoadSize; + if (arm7LoadDestEndp > (u8 *)MON_MMEM_LOAD_LIMIT) + arm7LoadSize -= (arm7LoadDestEndp - (u8 *)MON_MMEM_LOAD_LIMIT); + } + + if (arm7LoadDestEndp) { + if (arm7LoadSize > 0) { // ARM7sC[Wǂݍ + SetCardIntr4Game(arm7LoadStartp, arm7LoadDestp, arm7LoadSize); + *sequenceNop = 3; + } else { + *sequenceNop = 4; + } + } else { + *sequenceNop = 4; + } + } + break; + case 3: if (*(vu32 *)INTR_CHECK_BUF & CARD_DATA_INTR_FLAG) { + TerminateCardIntr(); + *sequenceNop = 4; + } + break; + case 4: + +#ifdef TEST_CARD_BY_MAINP + NotifyMainpIntf(6); // J[hoX؂芷؂̒ʒm + WaitMainpIntf(6); +#endif // TEST_CARD_BY_MAINP + + if ((shwp->isOnDebugger == 1) && IsMmem8MB()) { + u8 *dbgLoadStartp = rmhp->dbgRomAddr; + u8 *dbgLoadDestp = rmhp->dbgArm9RamAddr; + u8 *dbgLoadDestEndp; + s32 dbgLoadSize = rmhp->dbgRomSize; + + if ((dbgLoadDestp >= (u8 *)MAIN_MEM_END) && (dbgLoadDestp < (u8 *)MON_DBG_LOAD_LIMIT)) { + dbgLoadDestEndp = dbgLoadDestp + dbgLoadSize; + if (dbgLoadDestEndp > (u8 *)MON_DBG_LOAD_LIMIT) + dbgLoadSize -= (dbgLoadDestEndp - (u8 *)MON_DBG_LOAD_LIMIT); + + if (dbgLoadSize > 0) { // fobKj^ǂݍ + (u32 )dbgLoadStartp &= 0x7fffffff; // AhXC + SetCardIntr4Game(dbgLoadStartp, dbgLoadDestp, dbgLoadSize); + *sequenceNop = 5; + } else { + *sequenceNop = 6; + } + } else { + *sequenceNop = 6; + } + } else { + *sequenceNop = 6; + } + break; + case 5: if (*(vu32 *)INTR_CHECK_BUF & CARD_DATA_INTR_FLAG) { + TerminateCardIntr(); + *sequenceNop = 6; + } + break; + case 6: SetPauseCheckFlag(); // `FbNtO Zbg + *sequenceNop = -1; + break; + } + + return *sequenceNop; +} + + +#else // DISABLE_READ_CARD_4_IPL2 + + +s32 CalledFormIPL2(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + s16 *sequenceNop = &shwp->cardSequenceNo; + + if (!shwp->cardHeaderError) { // J[hEwb_̃`FbN + LoadGame4Card(); // J[hQ[̈ + } else { + +#ifdef BOOT_FROM_CARTRIDGE + + WaitVBlank(20); // UICANZXx + + LoadHeader4Cartridge(); // J[gbWEwb_̈̃[h + if (!CheckCartridgeHeader()) { // J[gbWEwb_̃`FbN + LoadSecure4Cartridge(); // J[gbWEZLÄ̃[h + LoadGame4Cartridge(); // J[gbWEQ[̈ + } else { + +#endif // BOOT_FROM_CARTRIDGE + +#ifdef TEST_AGB_MODE + + ReadNintendoLogo4AGB(); // AGBJ[gbW̃Sǂݍ + if (!CheckNintendoLogo(&NinLogoBak[36/2])) { //(u16 *)(CARTRIDGE + 4))) + Iris2Agb(); // AGB[hJ +#ifdef DISP_AGB_HEADER_ERROR + } else { + NotifyMainpIntf(8); // AGBwb_G[ʒm + WaitMainpIntf(8); // AGBwb_G[\҂ + Iris2Agb(); // AGB[hJ +#endif // DISP_AGB_HEADER_ERROR + } +#else + while(1) ; // AGB[hΉ [v + +#endif // TEST_AGB_MODE + +#ifdef BOOT_FROM_CARTRIDGE + + } + +#endif // BOOT_FROM_CARTRIDGE + + } + +// ReadNintendoLogo4AGB(); // AGBJ[gbW̃Sǂݍ + //iIRIS[hAGBJ[gbWANZXł悤ɂ邽߁j + +// LoadDebugger(); // fobK̈ + + TerminateIntr(CARD_DATA_INTR_FLAG); + + *sequenceNop = -1; + + return *sequenceNop; +} + +#endif // DISABLE_READ_CARD_4_IPL2 + + + +//---------------------------------------------------------------------- +// ROMC[W㔼̃[h +//---------------------------------------------------------------------- + +#ifdef DISABLE_READ_CARD_4_IPL2 + +void LoadGame4Card(void) +{ + { u8 *Arm9LoadStartp = *(u8 **)(ROM_HEADER_BUF + 0x20); + u8 *Arm9LoadDestp = *(u8 **)(ROM_HEADER_BUF + 0x28); + s32 Arm9LoadSize = *(s32 * )(ROM_HEADER_BUF + 0x2c) & (MAIN_MEM_SIZE - 1); + s32 Arm9SecureSize = (u8 *)MROM_GAME_AREA - Arm9LoadStartp; + + if (Arm9SecureSize < 0) Arm9SecureSize = 0; + + SetCardIntr4Game(Arm9LoadStartp + Arm9SecureSize, // GAME[hǂݍ + Arm9LoadDestp + Arm9SecureSize, + Arm9LoadSize - Arm9SecureSize); + WaitCardIntr(); + } + + { u8 *Arm7LoadStartp = *(u8 **)(ROM_HEADER_BUF + 0x30); + u8 *Arm7LoadDestp = *(u8 **)(ROM_HEADER_BUF + 0x38); + s32 Arm7LoadSize = *(s32 * )(ROM_HEADER_BUF + 0x3c) & (CPU_WRAM_SIZE - 1); + + while (!Arm7LoadSize) ; + + SetCardIntr4Game(Arm7LoadStartp, Arm7LoadDestp, Arm7LoadSize);// ARM7sC[Wǂݍ + WaitCardIntr(); + } +} + + +#ifdef BOOT_FROM_CARTRIDGE + +void LoadGame4Cartridge(void) +{ + { u32 Arm7LoadStartp = *(u32 *)(ROM_HEADER_BUF + 0x30) | CTRDG_AD16_BANK0; + u32 Arm7LoadSize = *(u32 *)(ROM_HEADER_BUF + 0x3c) & (MAIN_MEM_SIZE - 1); + u32 Arm7LoadDestp = *(u32 *)(ROM_HEADER_BUF + 0x38); + + while (!Arm7LoadStartp || !Arm7LoadDestp) ; + + CpuCopy16_32(Arm7LoadStartp, Arm7LoadDestp, Arm7LoadSize, 32); // ARM7sC[Wǂݍ + } +} + +#endif // BOOT_FROM_CARTRIDGE + +#endif // DISABLE_READ_CARD_4_IPL2 + + +//---------------------------------------------------------------------- +// fobKj^̃[h +//---------------------------------------------------------------------- + +#ifdef DISABLE_READ_CARD_4_IPL2 + +void LoadDebugger(void) +{ + if (IsMmem8MB()) { + u8 *DbgLoadStartp = *(u8 **)(ROM_HEADER_BUF + 0x160); + u8 *DbgLoadDestp = *(u8 **)(ROM_HEADER_BUF + 0x168); + s32 DbgLoadSize = *(u32 * )(ROM_HEADER_BUF + 0x164) & (MAIN_MEM_SIZE - 1); + + if (DbgLoadSize > 0 && DbgLoadSize < (MAIN_MEM_SIZE - 512)) { + + if ((s32 )DbgLoadStartp < 0) { // fobKj^ǂݍ + (u32 )DbgLoadStartp &= 0x7fffffff; // AhXC + SetCardIntr4Game(DbgLoadStartp, DbgLoadDestp, DbgLoadSize); + WaitCardIntr(); + } else { + CpuCopy16_32(DbgLoadStartp, DbgLoadDestp, DbgLoadSize, 32); + } + } + } +} + +#endif // DISABLE_READ_CARD_4_IPL2 + + +//---------------------------------------------------------------------- +// CvZbTEC^tF[Xʒm +//---------------------------------------------------------------------- + +void NotifyMainpIntf(u32 param) +{ + *(vu16 *)REG_MAINPINTF = param < +#include +#include +#include +#include +#include +#include "IrisSubpMonDefine.h" +#include "IrisSubpMonMemeoryMap.h" +#include "IrisSubpMonMacro.h" +#include "IrisSubpMonSub.h" + + +#endif /* _IRIS_SUBP_MON_H */ diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMon.mcp b/trunk/IrisSubp/IrisSubpMon/IrisSubpMon.mcp new file mode 100644 index 0000000000000000000000000000000000000000..8db9051570fda6a06fa0c50e90651f179db3dbef GIT binary patch literal 394605 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

KD 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 b#?AJrVzp(xZq+QMWKipUyyr1w7^$&EO*91br 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 + + scwp->cardCntBak4Secure = hdCntTmp; + + if (hdCntTmp.latency1 < MROM_S_LATENCY1_CYCLES_MIN) hdCntTmp.latency1 = MROM_S_LATENCY1_CYCLES_MIN; + if (hdCntTmp.latency2 < MROM_S_LATENCY2_CYCLES_MIN) hdCntTmp.latency2 = MROM_S_LATENCY2_CYCLES_MIN; + + rmhp->romCtrl4Secure = hdCntTmp; + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// SECURER}hp[^ +//---------------------------------------------------------------------- + +void TerminateCardParam4Secure(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + + rmhp->romCtrl4Secure = scwp->cardCntBak4Secure; + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// R}hݒ +//---------------------------------------------------------------------- + +void SetCardOp(const CardCtrlParam *paramp) +{ + int i; + + WaitCardDma(paramp->dmaNo); // J[h]I҂ + + *(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM // }X^[Cl[u + | CARDMST_ENABLE | CARDMST_IF_ENABLE; +#ifdef TRACE_SECURE_OP + + { SecureWork *scwp = GetSecureWorkAddr(); + + if (scwp->traceSecureOp) { + scwp->paramTrace[scwp->traceOpCount] = *paramp; // ÍÕg[X + DecryptByBlowfish(&scwp->blowfishCardTable, &scwp->paramTrace[scwp->traceOpCount].op[1], &scwp->paramTrace[scwp->traceOpCount].op[0]); + scwp->traceOpCount++; + } + } + +#endif // TRACE_SECURE_OP + + for (i=0; i<2; i++) { // R}hݒ + u32 opTmp = paramp->op[1 - i]; + vu8 *opDestBasep = (vu8 *)(REG_CARD_CMD + i*4); + + opDestBasep[0] = opTmp >>24; + opDestBasep[1] = opTmp >>16; + opDestBasep[2] = opTmp >>8; + opDestBasep[3] = opTmp >>0; + } +} + + +//---------------------------------------------------------------------- +// J[h҂ DMA~ +//---------------------------------------------------------------------- + +void WaitCardDma(u32 dmaNo) +{ + WaitCard(); + + if (dmaNo <= 3) StopDma(dmaNo); +} + + +//---------------------------------------------------------------------- +// J[hǂݍ݁iDMA񓯊j +//---------------------------------------------------------------------- + +void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp) +{ + SetCardOp(paramp); // R}hݒ + + if (paramp->dmaNo <= 3) { + DmaReadCard(paramp->dmaNo, ramp); // DMAݒiőݒ DMA0-2: 64KB / DMA3: 256KBj + *(vu32 *)REG_CARDCNT = paramp->cardCnt; // Rg[ݒ & DMAX^[g + } else { + void *ramEndp; + u32 cardCntTmp; + + *(vu32 *)REG_CARDCNT = paramp->cardCnt; // Rg[ݒ + + ramEndp = (u8 *)ramp + size; // i[IAhXZo + + do { // CPUǂݍ + cardCntTmp = *(vu32 *)REG_CARDCNT; + + if (cardCntTmp & CARD_DATA_READY) { + u32 dataTmp = *(vu32 *)REG_CARD_DATA; + + if (ramp < ramEndp) + *((vu32 *)ramp) = dataTmp; // wTCY܂Ŋi[i㑱f[^͓ǂݎ̂āj + ((vu32 *)ramp)++; + } + } while (cardCntTmp & CARD_START); + } +} + +//---------------------------------------------------------------------- +// J[h]ubNTCY l +//---------------------------------------------------------------------- + +s32 GetBlockSizeFromCardCnt(CardCnt *paramp) +{ + s32 blockSize = 0; + s32 pages = paramp->pages; + + if (pages == ST_CARD_STATUS) blockSize = 4; + else if (pages >= ST_CARD_1_PAGE) blockSize = 512 <<(pages - 1); + + return blockSize; +} + + +//---------------------------------------------------------------------- +// J[hR}hM̂݁ij +//---------------------------------------------------------------------- + +void SendOnlyCardOp(CardCtrlParam *paramp) +{ + u32 cardCnt; + paramp->dmaNo = -1; // DMAsgpw + + SetCardOp(paramp); // R}hݒ + + cardCnt = paramp->cardCnt & ~CARD_PAGE_COUNT_MASK // Rg[ݒ + | CARD_READ_MODE | CARD_0_PAGE + | CARD_START | CARD_RESET_HI; + + *(vu32 *)REG_CARDCNT = cardCnt; + +#ifdef TRACE_SECURE_OP + + TraceCardCnt(cardCnt); // Rg[ݒ̃g[X + +#endif // TRACE_SECURE_OP + + WaitCard(); +} + +//---------------------------------------------------------------------- +// Rg[ݒ g[X +//---------------------------------------------------------------------- + +#ifdef TRACE_SECURE_OP + +void TraceCardCnt(u32 cardCnt) +{ + { SecureWork *scwp = GetSecureWorkAddr(); + + if (scwp->traceSecureOp) { + scwp->paramTrace[scwp->traceOpCount - 1].cardCnt = cardCnt; // Rg[ݒ̃obvAbv + } + } + +} + +#endif // TRACE_SECURE_OP + + +//---------------------------------------------------------------------- +// J[hR}hM̂݁iSECURE[hp^j +//---------------------------------------------------------------------- + +void SendOnlyCardOp4Secure(CardCtrlParam *paramp, u32 scrambleON) +{ + +#ifndef DISABLE_SECURE_CODE + + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + + paramp->dmaNo = -1; // DMAsgpw + paramp->cardCnt = AddLatency2ToLatency1(GetCardCnt4Secure())// CeVQCeVP։Z + | CARD_READ_MODE | CARD_0_PAGE + | CARD_START | CARD_RESET_HI; + if (scrambleON) + paramp->cardCnt |= CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON;// f[^XNuݒ + + if (!(shwp->nCardID & 0x80000000)) + paramp->cardCnt |= CARD_CLOCK_IN_LATENCY; // }XNROMpݒF CeVԂɃNbN + + SetDummyVC(paramp); // _~[VC Zbg + + Encrypt2SetTimer4Secure(paramp); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// J[hIDǂݍ݁ij +//---------------------------------------------------------------------- + +u32 ReadCardID(CardCtrlParam *paramp) +{ + u32 cardCnt; + paramp->dmaNo = -1; // DMAsgpw + + SetCardOp(paramp); // R}hݒ + + + cardCnt = paramp->cardCnt & ~CARD_PAGE_COUNT_MASK // Rg[ݒ + | CARD_READ_MODE | CARD_STATUS + | CARD_START | CARD_RESET_HI; + + *(vu32 *)REG_CARDCNT = cardCnt; + +#ifdef TRACE_SECURE_OP + + TraceCardCnt(cardCnt); // Rg[ݒ̃g[X + +#endif // TRACE_SECURE_OP + + WaitCardData(); + + return *(vu32 *)REG_CARD_DATA; +} + + +//---------------------------------------------------------------------- +// tbVEe[uݒ +//---------------------------------------------------------------------- + +void LoadCardTable(void) +{ + CardCtrlParam param; + CardCtrlParam *paramp = ¶m; + + paramp->cardCnt = CARD_READ_MODE | CARD_16_PAGES // Rg[ݒ + | 0 <dmaNo = -1; // DMAsgpw + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_N_LOAD_TABLE; + + ReadCardAsync(NULL, NULL, 0, paramp); // CPUɂǂ +} + + +//---------------------------------------------------------------------- +// ROMwb_ǂݍ݁iNORMAL[hj +//---------------------------------------------------------------------- + +void ReadCardHeader(void) +{ + CardCtrlParam param; + CardCtrlParam *paramp = ¶m; + + paramp->cardCnt = CARD_READ_MODE | CARD_1_PAGE // Rg[ݒ + | CARD_LATENCY1_CYCLES_MASK | CARD_LATENCY2_CYCLES_MASK + | CARD_CLOCK_240NS + | CARD_START | CARD_RESET_HI; + paramp->dmaNo = -1; // DMAsgpw + + ReadCardAsync4Normal(NULL, (void *)ROM_HEADER_BUF, 0x170, paramp); + WaitCardDma(paramp->dmaNo); +} + + +//---------------------------------------------------------------------- +// J[hIDǂݍ݁iNORMAL[hj +//---------------------------------------------------------------------- + +u32 ReadCardID4Normal(void) +{ + CardCtrlParam param; + CardCtrlParam *paramp = ¶m; + + paramp->cardCnt = GetCardCnt4Normal(); // Rg[ݒiXNuݒNAj + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_N_READ_ID; + + return ReadCardID(paramp); +} + +//---------------------------------------------------------------------- +// J[h[hJځiNORMAL[hj +//---------------------------------------------------------------------- + +void ChangeCardMode4Normal(void) +{ + CardCtrlParam param; + CardCtrlParam *paramp = ¶m; + + paramp->cardCnt = GetCardCnt4Normal(); // Rg[ݒiXNuݒNAj + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_N_CHANGE_MODE; + + SetVAE(paramp); // VAE Zbg + SetVBI(paramp); // VBI Zbg + + SendOnlyCardOp(paramp); +} + +//---------------------------------------------------------------------- +// J[hIDǂݍ݁iSECURE[hj +//---------------------------------------------------------------------- + +void ReadCardID4Secure(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + CardCtrlParam *paramp = &ciwp->param; + + paramp->dmaNo = -1; // DMAsgpw + + paramp->cardCnt = AddLatency2ToLatency1(GetCardCnt4Secure())// CeVQCeVP։Z + | CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON// f[^XNuݒ + | CARD_READ_MODE | CARD_0_PAGE + | CARD_START | CARD_RESET_HI; + if (!(shwp->nCardID & 0x80000000)) + paramp->cardCnt |= CARD_CLOCK_IN_LATENCY; // }XNROMpݒF CeVԂɃNbN + + + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_S_READ_ID; + SetVA(paramp); // VA Zbg + SetDummyVC(paramp); // _~[VC Zbg + + Encrypt2SetTimer4Secure(paramp); + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// J[hւPNG_ONMiVDMjiSECURE[hj +//---------------------------------------------------------------------- + +void SendCardPNG_ON(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + CardCtrlParam *paramp = &ciwp->param; + + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_S_PNG_ON; + + SetVD(paramp); // VD Zbg + +#ifdef TRACE_SECURE_OP + + scwp->traceSecureOp = 1; + +#endif // TRACE_SECURE_OP + + SendOnlyCardOp4Secure(paramp, 0); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// J[hւPNG_OFFMiSECURE[hj +//---------------------------------------------------------------------- + +void SendCardPNG_OFF(void) +{ + +#ifndef DISABLE_SECURE_CODE + + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + CardCtrlParam *paramp = &ciwp->param; + + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_S_PNG_OFF; + + SetVA(paramp); // VA Zbg + + SendOnlyCardOp4Secure(paramp, 1); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// J[h[hJځiSECURE[hj +//---------------------------------------------------------------------- + +void ChangeCardMode4Secure(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + CardCtrlParam *paramp = &ciwp->param; + + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_S_CHANGE_MODE; + + SetVA(paramp); // VA Zbgi_~[j + + SendOnlyCardOp4Secure(paramp, 1); + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// J[hf[^ǂݍ݁iNORMAL[h^񓯊j +//---------------------------------------------------------------------- + +void ReadCardAsync4Normal(void *romp, void *ramp, s32 size, CardCtrlParam *paramp) +{ + paramp->op[0] = (u32 )romp <<24; // R}hݒ + paramp->op[1] = MROMOP_N_READ_PAGES | (u32 )romp >>8; + + ReadCardAsync(romp, ramp, size, paramp); +} + +//---------------------------------------------------------------------- +// J[hf[^ǂݍ݁iGAME[h^񓯊j +//---------------------------------------------------------------------- + +void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp) +{ + paramp->op[0] = (u32 )romp <<24; // R}hݒ + paramp->op[1] = MROMOP_G_READ_PAGE | (u32 )romp >>8; + + *(vu32 *)REG_CARDCNT = CARD_RESET_HI; + + ReadCardAsync(romp, ramp, size, paramp); +} + + +//---------------------------------------------------------------------- +// J[hZOgǂݍ݁iSECURE[h^񓯊^荞݌j +//---------------------------------------------------------------------- + +void ReadCardSegmentAsync4Secure(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + SharedWork *shwp = GetSharedWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + s16 *blockOffsetp = &scwp->blockOffset; + s16 *segmentOffsetp = &scwp->segmentOffset; + s16 *tblShiftp = &scwp->segmentTblShift; + s32 diffSegmentNo; + s32 readID_enable; + + // SECURË𒴂Ȃ悤ɒ + while ((diffSegmentNo = ((*scwp->segmentTblp) >>*tblShiftp) & 0x3) >= scwp->numSecureSegment) + *tblShiftp += 2; + + *segmentOffsetp = MROM_SEGMENT_SIZE * diffSegmentNo; // ZOgItZbg Zbg + *blockOffsetp = 0; // ubNItZbg NA + + { s32 offset = *segmentOffsetp + *blockOffsetp; + + ReadCardAsync4Secure(ciwp->romp + offset, &ciwp->param); + + *tblShiftp += 2; + *tblShiftp &= 0x7; + } + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// J[hf[^ǂݍ݁iSECURE[h^񓯊j +//---------------------------------------------------------------------- + +void ReadCardAsync4Secure(void *romp, CardCtrlParam *paramp) +{ + +#ifndef DISABLE_SECURE_CODE + + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + + if (!(shwp->nCardID & 0x80000000)) // }XNROMpݒF CeVԂɃNbN + paramp->cardCnt = CARD_8_PAGES | CARD_CLOCK_IN_LATENCY; + else paramp->cardCnt = CARD_1_PAGE; // 3Dpݒilj + + paramp->cardCnt |= GetCardCnt4Secure() // Rg[ݒ + | CARD_READ_MODE + | CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON + | CARD_START | CARD_RESET_HI; + paramp->dmaNo = 3; + + paramp->op[0] = 0; // R}hݒ + paramp->op[1] = MROMOP_S_READ_SEGMENT | ((u32 )romp & MROMOP_S_VC_MASK_H); + + ciwp->blockSize = GetBlockSizeFromCardCnt((CardCnt *)&ciwp->param.cardCnt); + + SetVA(paramp); // VA Zbg + + Encrypt2SetTimer4Secure(paramp); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// 3DpCeV^C}[NiSECURE[hp^j +//---------------------------------------------------------------------- + +void Encrypt2SetTimer4Secure(CardCtrlParam *paramp) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + SharedWork *shwp = GetSharedWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + s32 timerCount; + + SetVB(paramp); // VB Zbg + + scwp->paramBak = *paramp; // ÍÕobvAbv + // R}hÍ + EncryptByBlowfish(&scwp->blowfishCardTable, ¶mp->op[1], ¶mp->op[0]); + + { u32 lastIme = *(vu32 *)REG_IME; + + *(vu32 *)REG_IME = 0; // NeBJZNV + + if (shwp->nCardID & 0x80000000) // 3DpvR}hs + SendOnlyCardOp(paramp); + + *(vu32 *)REG_IE |= TIMER3_INTR_FLAG; // J[h^C}[荞݋ + *(vu32 *)REG_IE &= ~CARD_DATA_INTR_FLAG; // J[h荞ݕs + *(vu32 *)REG_IF = CARD_DATA_INTR_FLAG | TIMER3_INTR_FLAG; + // J[h`FbN NA + *(vu32 *)INTR_CHECK_BUF &= (CARD_DATA_INTR_FLAG ^ TIMER3_INTR_FLAG ^ -1); + + *(vu32 *)REG_IME = lastIme; + } + + timerCount = rmhp->romTimerLatency; // J[h^C}[ X^[g + if (shwp->cardHeaderError) timerCount &= 0x1fff; + else timerCount &= 0x3fff; + + *(u16 *)REG_TM3CNT_L = (0x10000 - (timerCount + 2)); + *(u16 *)REG_TM3CNT_H = (TMR_PRESCALER_256CK | TMR_IF_ENABLE | TMR_ENABLE) >>16; + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// J[h荞 ݒ +//---------------------------------------------------------------------- + +void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp) +{ + ciwp->restSize = size; + ciwp->blockSize = GetBlockSizeFromCardCnt((CardCnt *)&ciwp->param.cardCnt); + + WaitCardDma(ciwp->param.dmaNo); + + EnableCardIntr(); +} + +//---------------------------------------------------------------------- +// J[h荞 ݒiNORMAL[hj +//---------------------------------------------------------------------- + +void SetCardIntr4Normal(void *romp, void *ramp, s32 size) +{ + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + + ciwp->param.cardCnt = GetCardCnt4Normal() // Rg[ݒiXNuݒNAj + | CARD_READ_MODE | CARD_1_PAGE + | CARD_START | CARD_RESET_HI; + ciwp->param.dmaNo = 3; + + ciwp->AsyncFuncp = ReadCardAsync4Normal; // f[^ǂݍ݊֐ Zbg + + ciwp->romp = romp; + ciwp->ramp = ramp; + + SetCardIntr(romp, ramp, size, ciwp); + + ciwp->AsyncFuncp(ciwp->romp, ciwp->ramp, ciwp->blockSize, &ciwp->param); +} + +//---------------------------------------------------------------------- +// J[h荞 ݒiGAME[hj +//---------------------------------------------------------------------- + +void SetCardIntr4Game(void *romp, void *ramp, s32 size) +{ + SharedWork *shwp = GetSharedWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + + ciwp->param.cardCnt = GetCardCnt4Game() // Rg[ݒ + | CARD_READ_MODE | CARD_1_PAGE + | CARD_START | CARD_RESET_HI; + ciwp->param.dmaNo = 3; + + ciwp->AsyncFuncp = ReadCardAsync4Game; // f[^ǂݍ݊֐ Zbg + + ciwp->romp = romp; + ciwp->ramp = ramp; + + SetCardIntr(romp, ramp, size, ciwp); + + ciwp->AsyncFuncp(ciwp->romp, ciwp->ramp, ciwp->blockSize, &ciwp->param); +} + + +//---------------------------------------------------------------------- +// J[h荞 ݒiSECURE[hj +//---------------------------------------------------------------------- +extern u8 segmentIndexTable4Secure[]; + +void SetCardIntr4Secure(void *romp, void *ramp, s32 size) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + SharedWork *shwp = GetSharedWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + s32 secureSize = (u8 *)MROM_GAME_AREA - (u8 *)romp; + + scwp->segmentTblp = &segmentIndexTable4Secure[scwp->vd >>28]; // ZOge[uݒ + scwp->numSecureSegment = secureSize/MROM_SEGMENT_SIZE; // SECUREZOg + + (void *)ciwp->AsyncFuncp = (void *)ReadCardSegmentAsync4Secure; // f[^ǂݍ݊֐ Zbg + + ciwp->romp = romp; + ciwp->ramp = ramp; + + SetCardIntr(romp, ramp, size, ciwp); + + SendCardPNG_ON(); // PNG_ONM + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// J[h^C}[荞݁iSECURE[hj +//---------------------------------------------------------------------- + +void CardTimerIntr4Secure(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + SharedWork *shwp = GetSharedWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + CardCtrlParam *paramp = &ciwp->param; + + *(u16 *)REG_TM3CNT_H = 0; // J[h^C}[ ~ + + *(vu32 *)REG_IE &= ~TIMER3_INTR_FLAG; // J[h^C}[荞ݕs + *(vu32 *)REG_IE |= CARD_DATA_INTR_FLAG; // J[h荞݋ + *(vu32 *)REG_IF = CARD_DATA_INTR_FLAG | TIMER3_INTR_FLAG; + + switch (scwp->paramBak.op[1] & MROMOP_S_OP_MASK) { + + case MROMOP_S_PNG_ON: SendOnlyCardOp(paramp); + InitCardPN_Intf(); // J[hPNC^tF[X + break; + case MROMOP_S_PNG_OFF: + case MROMOP_S_CHANGE_MODE: SendOnlyCardOp(paramp); + break; + case MROMOP_S_READ_ID: shwp->sCardID = ReadCardID(paramp); + break; + case MROMOP_S_READ_SEGMENT: { s32 blockSize = ciwp->blockSize; + s32 offset = scwp->segmentOffset + scwp->blockOffset; + + // ZOgEɂ + ReadCardAsync(NULL, ciwp->ramp + offset, blockSize, paramp); + + ciwp->restSize -= blockSize; + scwp->blockOffset += blockSize; + + if (!(ciwp->restSize & (MROM_SEGMENT_SIZE - 1))) { // J[h荞ݐ؂芷 + intrTable[0] = CardIntr4Secure; + } else{ + intrTable[0] = CardTimerIntr4Secure; +#ifdef TRACE_SECURE_OP + OverWriteTestVB(paramp); // VBeXgXV + +#endif // TRACE_SECURE_OP + } + } + break; + + } + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// J[h荞݁iSECURE[hj +//---------------------------------------------------------------------- +extern u32 png_off_key[]; + +void CardIntr4Secure(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + SharedWork *shwp = GetSharedWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + s16 *sequenceNop = &scwp->sequenceNo4Secure; + + if (*(vu8 *)REG_PAUSE & 1) return; + + switch (*sequenceNop) { + case 0: + *sequenceNop = 1; + if (shwp->cardHeaderError) goto changeCardMode; // ROMwb_G[ + + ReadCardID4Secure(); // J[hIDmF + break; + case 1: + *sequenceNop = 2; + if (shwp->sCardID != shwp->nCardID) goto changeCardMode; // J[hID`FbN + + if (scwp->vd >>31) // J[hID_s + ReadCardID4Secure(); + else goto readCard; + break; + case 2: +readCard: if (shwp->sCardID != shwp->nCardID) goto changeCardMode; // J[hID`FbN + if (!scwp->enableReadSecure) goto isPngOFF; // [hEfBZ[u + + if (ciwp->restSize > 0) { + ReadCardSegmentAsync4Secure(); + } else { + goto isPngOFF; + } + break; + case 3: +isPngOFF: *sequenceNop = 4; + if (!scwp->isGenUnScrambleKey) goto changeCardMode; // XNuL[Zo`FbNivCeVݒj + + if ((scwp->unScrambleKey[0] == png_off_key[0]) // XNuL[L + && (scwp->unScrambleKey[1] == png_off_key[1])) { + SendCardPNG_OFF(); // PNG_OFFM + } else { + goto changeCardMode; + } + + break; + case 4: +changeCardMode: *sequenceNop = 5; + ChangeCardMode4Secure(); + break; + case 5: + +#ifdef TRACE_SECURE_OP + + scwp->traceSecureOp = 0; + +#endif // TRACE_SECURE_OP + + *(vu32 *)INTR_CHECK_BUF |= CARD_DATA_INTR_FLAG; // J[h`FbÑZbg + break; + } + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// J[h荞݁iNORMAL & GAME[hj +//---------------------------------------------------------------------- + +void CardIntr(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + s32 blockSize = ciwp->blockSize; + + if (*(vu8 *)REG_PAUSE & 1) return; + + // ubNǂݍ + + ciwp->restSize -= blockSize; + ciwp->romp += blockSize; + ciwp->ramp += blockSize; + + if (ciwp->restSize > 0) { + ciwp->AsyncFuncp(ciwp->romp, ciwp->ramp, blockSize, &ciwp->param); + } else { + *(vu32 *)INTR_CHECK_BUF |= CARD_DATA_INTR_FLAG; // J[h`FbÑZbg + } +} + + +//---------------------------------------------------------------------- +// J[h荞 +//---------------------------------------------------------------------- + +void EnableCardIntr(void) +{ + *(vu32 *)REG_IME = 0; + *(vu32 *)INTR_CHECK_BUF &= ~CARD_DATA_INTR_FLAG; // J[h`FbÑNA + + *(vu32 *)REG_IF = CARD_DATA_INTR_FLAG; + *(vu32 *)REG_IE |= CARD_DATA_INTR_FLAG; // J[h荞݋ + *(vu32 *)REG_IME = 1; +} + + +//---------------------------------------------------------------------- +// J[h荞 I +//---------------------------------------------------------------------- + +void TerminateCardIntr(void) +{ + { CardIntrWork *ciwp = GetCardIntrWorkAddr(); + + WaitCardDma(ciwp->param.dmaNo); + } + + TerminateIntr(CARD_DATA_INTR_FLAG | CARD_IREQ_INTR_FLAG); // J[h荞݋֎~ +} + + +//---------------------------------------------------------------------- +// J[h荞 I҂ +//---------------------------------------------------------------------- + +void WaitCardIntr(void) +{ + + WaitIntr(0, CARD_DATA_INTR_FLAG); + + TerminateCardIntr(); +} + + +//---------------------------------------------------------------------- +// J[hANZX +//---------------------------------------------------------------------- + +#ifndef TS_MON + +void AccessCard(u32 dmaNo, s32 *srcp, s32 *destp, s32 size) +{ + int i; + +// *(vu8 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC; // 10-6ANZX + + CpuCopy16_32(srcp, destp, size, 32); // J[gbW̓] +} + +#endif // TS_MON + + +//---------------------------------------------------------------------- +// SECURE[hp[^ +//---------------------------------------------------------------------- +extern u32 normal_mode_key[]; + +void InitSecureParam(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + + InitCardOpBlowfish(); // J[hR}hÍ + InitVA_VB_VD(); // VA & VB & VD + +#ifndef DISABLE_SECURE_CODE + // NORMAL[ĥ݂ł̓삪‚Ă邩H + if ((scwp->cardNormalModeKey[0] == normal_mode_key[0]) + && (scwp->cardNormalModeKey[1] == normal_mode_key[1])) + shwp->enableCardNormalOnly = 1; + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// J[hR}hÍ +//---------------------------------------------------------------------- + +void InitCardOpBlowfish(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + + MakeBlowfishCardTable(&scwp->blowfishCardTable, &rmhp->initialCode, scwp->cardKeyBuf); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// VA & VB & VD +//---------------------------------------------------------------------- + +void InitVA_VB_VD(void) +{ + +#ifndef DISABLE_SECURE_CODE + + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + u8 getSP[4]; + + EncryptByBlowfishFook1(&scwp->blowfishCardTable, (u32 *)scwp->recvRtcBuf); + + scwp->va = *(u32 *)&scwp->recvRtcBuf[4] ^ (u32 )&scwp->bufEnd[2]; + scwp->vb = *(u32 *)&scwp->recvRtcBuf[4] ^ *(u32 *)&scwp->recvRtcBuf[0]; + scwp->vd = *(u32 *)&scwp->recvRtcBuf[4] ^ (u32 )&getSP[2]; + scwp->vc_dummy = *(u16 *)&scwp->recvRtcBuf[0] ^ *(u16 *)&scwp->recvRtcBuf[2] + ^ *(u16 *)&scwp->recvRtcBuf[4] ^ *(u16 *)&scwp->recvRtcBuf[6] + ^ (u32 )InitVA_VB_VD; + + EncryptByBlowfishFook0(&scwp->blowfishCardTable, &scwp->vd, &scwp->vb); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// PNXNuH +//---------------------------------------------------------------------- +extern u8 default_pnA_l_0_table[8]; +extern u8 default_pnA_l_1; +extern u32 default_pnB_l; +extern u8 default_pnB_h; + +void InitCardPN_Intf(void) +{ + u32 pnA_l, pnA_h; + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + + pnA_l = scwp->vd <<15 | default_pnA_l_0_table[(*(vu16 *)PNA_INDEX & 0x0700) >>8] | default_pnA_l_1 <<8; + pnA_h = (scwp->vd >>(32-15)) & 0x7f; + + WaitCard(); // J[h~҂ + + *(vu32 *)REG_CARD_PNA_INIT_L = pnA_l; + *(vu16 *)REG_CARD_PNA_INIT_H = pnA_h; + + *(vu32 *)REG_CARD_PNB_INIT_L = default_pnB_l; + *(vu16 *)REG_CARD_PNB_INIT_H = default_pnB_h; + + *(vu32 *)REG_CARDCNT = CARD_INIT_SCRAMBLE_PN // omlݒ + | CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON + | CARD_RESET_HI; + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// VAE ZbgiNORMAL[hj +//---------------------------------------------------------------------- + +void SetVAE(CardCtrlParam *paramp) +{ + SecureWork *scwp = GetSecureWorkAddr(); + + paramp->op[1] |= scwp->va & MROMOP_N_VAE_MASK_H; +} + +//---------------------------------------------------------------------- +// VBI ZbgiNORMAL[hj +//---------------------------------------------------------------------- + +void SetVBI(CardCtrlParam *paramp) +{ + SecureWork *scwp = GetSecureWorkAddr(); + + paramp->op[0] |= scwp->vb; + scwp->vb >>= MROMOP_N_VBI_SHIFT_L; +} + + +//---------------------------------------------------------------------- +// VA ZbgiSECURE[hj +//---------------------------------------------------------------------- + +void SetVA(CardCtrlParam *paramp) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + + paramp->op[0] |= (scwp->va <op[1] |= (scwp->va >>MROMOP_S_VA_SHIFT_H) & MROMOP_S_VA_MASK_H; + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// VB ZbgiSECURE[hj +//---------------------------------------------------------------------- + +void SetVB(CardCtrlParam *paramp) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + + paramp->op[0] |= scwp->vb & MROMOP_S_VB_MASK_L; + scwp->vb++; + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// VB eXgZbgiSECURE[hj +//---------------------------------------------------------------------- + +#ifdef TRACE_SECURE_OP + +void OverWriteTestVB(CardCtrlParam *paramp) +{ + SecureWork *scwp = GetSecureWorkAddr(); + CardIntrWork *ciwp = GetCardIntrWorkAddr(); + + *(u64 *)¶mp->op = *(u64 *)&scwp->paramBak.op; // R}h + + paramp->op[0] &= (MROMOP_S_VB_MASK_L ^ -1); + SetVB(paramp); + + scwp->paramBak = *paramp; // R}hobvAbv + // R}hÍ + EncryptByBlowfish(&scwp->blowfishCardTable, ¶mp->op[1], ¶mp->op[0]); +} + +#endif // TRACE_SECURE_OP + + +//---------------------------------------------------------------------- +// VCiZOgAhXj ZbgiSECURE[hj +//---------------------------------------------------------------------- + +void SetDummyVC(CardCtrlParam *paramp) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + + paramp->op[1] |= (scwp->vc_dummy <op[0] |= (scwp->vd <op[1] |= (scwp->vd >>MROMOP_S_VD_SHIFT_H) & MROMOP_S_VD_MASK_H; + +#endif // DISABLE_SECURE_CODE + +} + + diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefine.h b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefine.h new file mode 100644 index 0000000..79e84da --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefine.h @@ -0,0 +1,47 @@ +//====================================================================== +// hqhrTuvZbTEj^vOp` +//====================================================================== +#ifndef _IRIS_SUBP_MON_DEFINE_H +#define _IRIS_SUBP_MON_DEFINE_H + + +#include "IrisSubpMonTarget.h" + + +//---------------------------------------------------------------------- +// cl`蓖 +//---------------------------------------------------------------------- + +#define V_DMA_NO 2 +#define M_DMA_NO 3 + +//---------------------------------------------------------------------- +// j^prohRg[` +//---------------------------------------------------------------------- + +#define MON_SPI_CONTINUOUS_ON 0x1800 // ReBjAX[h nm +#define MON_SPI_TARGET_FLASH 0x2100 // tbVI + +//---------------------------------------------------------------------- +// WX^q`l Zbg VXeR[ +//---------------------------------------------------------------------- + +#define RESET_ALL_FLAGS 0xff // SZbg + +#define RESET_ALL_REG_FLAGS 0xe0 // SWX^ Zbg + +#define RESET_REG_FLAG 0x80 // WX^iLȊOjZbg +#define RESET_REG_SOUND_FLAG 0x40 // TEhWX^ Zbg +#define RESET_REG_SIO_FLAG 0x20 // rhnWX^ Zbg + +#define RESET_ALL_RAM_FLAGS 0x1f // Sq`l NA + +#define RESET_MMEM_FLAG 0x01 // C NA +#define RESET_CPU_WRAM_FLAG 0x02 // botq`l NA +#define RESET_PLTT_FLAG 0x04 // pbg NA +#define RESET_VRAM_FLAG 0x08 // uq`l NA +#define RESET_OAM_FLAG 0x10 // n`l NA + + + +#endif // _IRIS_SUBP_MON_DEFINE_H diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefineArm.s b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefineArm.s new file mode 100644 index 0000000..ddac35e --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefineArm.s @@ -0,0 +1,37 @@ +;******************************************************************** +; IRIS-SUBPj^vOp` +;******************************************************************** + + IF :DEF: _IRIS_SUBP_MON_DEFINE_H + ELSE +_IRIS_SUBP_MON_DEFINE_H * 1 + + + INCLUDE IrisSubpMonTargetArm.s + + +;----------------------------------------------------------------------- +; WX^q`l Zbg VXeR[ +;----------------------------------------------------------------------- + +RESET_ALL_FLAGS * 0xff ; SZbg + +RESET_ALL_REG_FLAGS * 0xe0 ; SWX^ Zbg + +RESET_REG_FLAG * 0x80 ; WX^iLȊOjZbg +RESET_REG_SOUND_FLAG * 0x40 ; TEhWX^ Zbg +RESET_REG_SIO_FLAG * 0x20 ; rhnWX^ Zbg + +RESET_ALL_RAM_FLAGS * 0x1f ; Sq`l NA + +RESET_MMEM_FLAG * 0x01 ; C NA +RESET_CPU_WRAM_FLAG * 0x02 ; botq`l NA +RESET_PLTT_FLAG * 0x04 ; pbg NA +RESET_VRAM_FLAG * 0x08 ; uq`l NA +RESET_OAM_FLAG * 0x10 ; n`l NA + + + + ENDIF ; _IRIS_SUBP_MON_DEFINE_H + + END diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h new file mode 100644 index 0000000..d5c1efe --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h @@ -0,0 +1,97 @@ +//====================================================================== +// IRISTuvZbT }N֐ +//====================================================================== +#ifndef _IRIS_SUBP_MON_MACRO_H +#define _IRIS_SUBP_MON_MACRO_H + + +#include +#include "IrisSubpMonTarget.h" + + +//---------------------------------------------------------------------- +// CRC16bitil 0xffffj Zo +//---------------------------------------------------------------------- + +#define GetInvCRC16(datap, size) \ + \ + GetCRC16(0xffff, datap, size) + + +//---------------------------------------------------------------------- +// CvZbTEC^tF[XM +//---------------------------------------------------------------------- + +#define RecvMainpIntf() \ + \ + ((*(vMainpIntf *)REG_MAINPINTF).recvStatus) + + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define CpuClear16_32(data, destp, size, bit) \ +{ \ + u##bit tmp = (vu##bit )(data); \ + CpuSet16_32((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | \ + DMA_##bit##BIT_BUS | (size)/((bit)/8))); \ +} + +#define CpuArrayClear16_32( data, destp, bit) \ + CpuClear16_32( data, destp, sizeof(destp), bit) + + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define CpuCopy16_32(srcp, destp, size, bit) \ + \ + CpuSet16_32((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | \ + DMA_##bit##BIT_BUS | (size)/((bit)/8))) + +#define CpuArrayCopy16_32( srcp, destp, bit) \ + CpuCopy16_32( srcp, destp, sizeof(srcp), bit) + + +//---------------------------------------------------------------------- +// bot NA(32ByteP) +//---------------------------------------------------------------------- + +#define CpuClearFast32(data, destp, size) \ +{ \ + u32 tmp = (vu32 )(data); \ + CpuSetFast32((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | (size)/(32/8))); \ +} + +#define CpuArrayFastClear32( data, destp) \ + CpuFastClear32( data, destp, sizeof(destp)) + + +//---------------------------------------------------------------------- +// bot Rs[(32ByteP) +//---------------------------------------------------------------------- + +#define CpuCopyFast32(srcp, destp, size) \ + \ + CpuSetFast32((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | (size)/(32/8))) + +#define CpuCopyFast32Fook(srcp, destp, size) \ + \ + CpuSetFast32Fook((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | (size)/(32/8))) + +#define CpuArrayFastCopy32( srcp, destp) \ + CpuFastCopy32( srcp, destp, sizeof(srcp)) + +#define CpuArrayFastCopy32Fook( srcp, destp) \ + CpuFastCopy32Fook( srcp, destp, sizeof(srcp)) + + + +#endif /* _IRIS_SUBP_MON_MACRO_H */ diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemeoryMap.h b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemeoryMap.h new file mode 100644 index 0000000..140f12f --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemeoryMap.h @@ -0,0 +1,73 @@ +//====================================================================== +// IRIS-SUBP}bv` +//====================================================================== +#ifndef _IRIS_SUBP_MON_MEMORY_MAP_H +#define _IRIS_SUBP_MON_MEMORY_MAP_H + + +#include "IrisSubpMonTarget.h" + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define MON_CPU_WRAM CPU_WRAM // bot[Nq`l +#define MON_CPU_WRAM_END (MON_CPU_WRAM + 0x18000) + +#ifdef ENABLE_DEBUGGER_ON_4MB +#define MON_MMEM_LOAD_LIMIT (MAIN_MEM_END - (0x100000 + MROM_PAGE_SIZE - 1)) +#else +#define MON_MMEM_LOAD_LIMIT (MAIN_MEM_END - (0x40000 + MROM_PAGE_SIZE - 1)) +#endif +#define MON_WRAM_LOAD_LIMIT (MON_CPU_WRAM_END - (0x8000 + MROM_PAGE_SIZE - 1)) +#define MON_DBG_LOAD_LIMIT (MAIN_MEM_EX_END - (0x40000 + MROM_PAGE_SIZE - 1)) + +#define FLH_MMEM_LOAD_LIMIT (MAIN_MEM_EX_END - (0x1000 + 0x20)) // LZ17oCg]ɓWJꍇւ̑Ή +#define FLH_WRAM_LOAD_BASE (MON_CPU_WRAM + 0x2200) // ZLA[N̈̕ی +#define FLH_WRAM_LOAD_LIMIT (MON_CPU_WRAM_END - (0x400 + 0x20)) // LZ17oCg]ɓWJꍇւ̑Ή + +#define PNA_INDEX (ROM_HEADER_BUF + 0x12) // PNAe[uECfbNX + +#define MMEM_CHK_SIZE_READ_BUF (MAIN_MEM_END - 0x6) // CETCY`FbN݃obt@ +#define MMEM_CHK_SIZE_WRITE_BUF (MAIN_MEM_EX_END - 0x6) // ǂݍ݃obt@ + +#define AGB_ROM_HEADER 0x08000004 // AGB-ROMo^f[^ + +#define MON_NINLOGO (AGB_ROM_HEADER + 0x0 ) // NINTENDOSEf[^ +#define MON_FIQ_FLAG (AGB_ROM_HEADER + 0x9c - 4) // ehptO +#define MON_KEY_GROUP_NO (AGB_ROM_HEADER + 0x9e - 4) // L[O[vm +#define MON_SOFT_NAME (AGB_ROM_HEADER + 0xa0 - 4) // \tg +#define MON_COMPLEMENT (AGB_ROM_HEADER + 0xbd - 4) // ␔`FbNEf[^ + +#define AGB_DACS_KEY_REG0 0x09fe2000 - 32 // c`brL[WX^ +#define AGB_DACS_KEY_REG1 0x0a000000 - 32 + +#define REG_PAUSE (REG_BASE + 0x300) // o`trd +#define REG_BIOS_PROTECT_ADDR (REG_BASE + 0x308) // ahnrveNgAhX + + +//---------------------------------------------------------------------- +// ETCY +//---------------------------------------------------------------------- + +#define BIOS_SIZE 0x4000 // VXeROM + +#define ROM_HEADER_SIZE (0xc0 - 4 + OFFSET_MON_NINLOGO) // ROMo^f[^ +#define MON_NINLOGO_SIZE (MON_SOFT_NAME - MON_NINLOGO) // NINTENDOSEf[^ + + +//---------------------------------------------------------------------- +// o^f[^EItZbg +//---------------------------------------------------------------------- + +#define OFFSET_MON_NINLOGO (MON_NINLOGO - MON_NINLOGO) // NINTENDOSEf[^ +#define OFFSET_MON_FIQ_FLAG (MON_FIQ_FLAG - MON_NINLOGO) // ehptO +#define OFFSET_MON_KEY_GROUP_NO (MON_KEY_GROUP_NO - MON_NINLOGO) // L[O[vm +#define OFFSET_MON_SOFT_NAME (MON_SOFT_NAME - MON_NINLOGO) // \tg +#define OFFSET_MON_COMPLEMENT (MON_COMPLEMENT - MON_NINLOGO) // ␔`FbNEf[^ + +#define OFFSET_REG_PAUSE 0x300 // o`trd + + +#endif // _IRIS_SUBP_MON_MEMORY_MAP_H diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemoryMapArm.s b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemoryMapArm.s new file mode 100644 index 0000000..e6df67f --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemoryMapArm.s @@ -0,0 +1,74 @@ +;******************************************************************** +; IRIS-SUBPj^vOp` +;******************************************************************** + + IF :DEF: _IRIS_SUBP_MON_MEMORY_MAP_H + ELSE +_IRIS_SUBP_MON_MEMORY_MAP_H * 1 + + + INCLUDE IrisSubpMonTargetArm.s + INCLUDE IrisMainMemoryDefineArm.s + + +;-------------------------------------------------------------------- +; E}bv +;-------------------------------------------------------------------- + +IMG_CPU_WRAM * 0x03000000 ; bot[Nq`l +IMG_CPU_WRAM_END * (IMG_CPU_WRAM + 0x01000000) +IMG_WRAM * MAIN_MEM ; [Nq`lS +IMG_WRAM_END * IMG_CPU_WRAM_END +IMG_USR_BUF * MAIN_MEM ; [Ü +IMG_USR_BUF_END * (IMG_CPU_WRAM_END - 4*32) +IMG_SYS_BUF * (IMG_CPU_WRAM_END - 4*32) ;VXë +IMG_SYS_BUF_END * IMG_CPU_WRAM_END +IMG_FIQ_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*5 ) ; FIQ荞ݕAhX +IMG_INTR_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*1 ) ; 荞ݕAhX + +ROM_HEADER * 0x08000004 ; ROMo^f[^ + +MON_NINLOGO * (ROM_HEADER + 0x0 ) ; NINTENDOSEf[^ +MON_FIQ_FLAG * (ROM_HEADER + 0x9c - 4) ; ehptO +MON_KEY_GROUP_NO * (ROM_HEADER + 0x9e - 4) ; L[O[vm +MON_SOFT_NAME * (ROM_HEADER + 0xa0 - 4) ; \tg +MON_COMPLEMENT * (ROM_HEADER + 0xbd - 4) ; ␔`FbNEf[^ + +ICE_ROM0 * 0x09fe2000 ; hbd qnl +ICE_ROM0_END * 0x09fe4000 +ICE_ROM1 * 0x09ffc000 +ICE_ROM1_END * 0x09ffe000 + +DACS_KEY_REG0 * 0x09fe2000 - 32 ; c`brL[WX^ +DACS_KEY_REG1 * 0x0a000000 - 32 + +REG_PAUSE * (REG_BASE + 0x300) ; o`trd +REG_OBJ_CENTER * (REG_BASE + 0x410) ; naiSʒu + + +;-------------------------------------------------------------------- +; ETCY +;-------------------------------------------------------------------- + +ROM_HEADER_SIZE * (0xc0 - 4 + OFFSET_MON_NINLOGO) ; ROMo^f[^ +MON_NINLOGO_SIZE * (MON_SOFT_NAME - MON_NINLOGO) ; NINTENDOSEf[^ + +ICE_ROM_SIZE * 0x2000 ; hbd qnl + + +;-------------------------------------------------------------------- +; o^f[^EItZbg +;-------------------------------------------------------------------- + +OFFSET_MON_NINLOGO * (MON_NINLOGO - MON_NINLOGO) ; NINTENDOSEf[^ +OFFSET_MON_FIQ_FLAG * (MON_FIQ_FLAG - MON_NINLOGO) ; ehptO +OFFSET_MON_KEY_GROUP_NO * (MON_KEY_GROUP_NO - MON_NINLOGO) ; L[O[vm +OFFSET_MON_SOFT_NAME * (MON_SOFT_NAME - MON_NINLOGO) ; \tg +OFFSET_MON_COMPLEMENT * (MON_COMPLEMENT - MON_NINLOGO) ; ␔`FbNEf[^ + +OFFSET_REG_PAUSE * 0x300 ; o`trd + + + ENDIF ; _IRIS_SUBP_MON_MEMORY_MAP_H + + END diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c new file mode 100644 index 0000000..26da83b --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c @@ -0,0 +1,180 @@ +//******************************************************************* +// IRIS-SUBPj^vO RTC֐ +//******************************************************************* +#include "IrisSubpMon.h" + + + + +//--------------------- O[o ϐ ------------------------------- + + + + +//====================================================================== +// RTC & [hip[NRAMgpj +//====================================================================== + +void InitRtc(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + u8 rtcInitBuf[8]; + u8 rtcSendIPL2Buf[8]; + + rtcInitBuf[0] = ReadRtcStatus1(); // RTCXe[^X1 `FbN + SendRtcOp(RTCOP_READ | RTCOP_YEAR | RTCOP_FIX_BITS); // RTCiNFFFjFFFbjǂݍ + RecvRtcDataBuf(&rtcInitBuf[1], 7); + + if (rtcInitBuf[0] & (RTCSTAT1_RESET_REQUEST | RTCSTAT1_BATTERY_DOWN)) { + rtcInitBuf[0] |= RTCSTAT1_RESET; // RTCZbgvp[_EΉ + + SendRtcOp(RTCOP_WRITE | RTCOP_STAT1 | RTCOP_FIX_BITS); + SendRtcDataBuf(&rtcInitBuf[0], 1); + } + + rtcSendIPL2Buf[0] = rtcInitBuf[0]; // RTCXe[^X1 Rs[ + SendRtcOp(RTCOP_READ | RTCOP_YEAR | RTCOP_FIX_BITS); // RTCiNFFFjFFFbjǂݍ + RecvRtcDataBuf(&rtcSendIPL2Buf[1], 7); + // RTCG[`FbNiXe[^X1 & f[^j + if ((ReadRtcStatus1() & (RTCSTAT1_RESET_REQUEST | RTCSTAT1_RESET)) + || !rtcSendIPL2Buf[2]) + shwp->rtcError = 1; + // RTC[hf[^ IPL2 ֒ʒm + CpuCopyFast32(&rtcSendIPL2Buf, &shwp->recvRtc, sizeof(rtcSendIPL2Buf)); + + // RTCf[^ ZLA[NփRs[ + CpuCopyFast32(&rtcInitBuf, &scwp->recvRtcBuf, sizeof(rtcInitBuf)); +} + + +//---------------------------------------------------------------------- +// R1WX^EANZXEFCg +//---------------------------------------------------------------------- + +__inline void WaitRtcFor5us(void) +{ + WaitByLoop(200/4); +} + + +//---------------------------------------------------------------------- +// R}hM +//---------------------------------------------------------------------- +void SendRtcData(u32 data); +u8 RecvRtcData(void); + +void SendRtcOp(u32 op) +{ + int i; + + *(vu8 *)REG_R1_CNT = 1 // NbNHI + | R1_RTC_DATA_DIR_OUT + | R1_RTC_SCK; + + WaitRtcFor5us(); + + *(vu8 *)REG_R1_CNT = 1 // `bvCl[u + | R1_RTC_DATA_DIR_OUT + | R1_RTC_CS | R1_RTC_SCK; + + WaitRtcFor5us(); + + SendRtcData(op); +} + + +//---------------------------------------------------------------------- +// f[^Mi1Bytej +//---------------------------------------------------------------------- + +void SendRtcData(u32 data) +{ + int i; + + for (i=0; i<8; i++) { + u32 dataBit = (data >>7) & R1_RTC_DATA_BIT; + + *(vu8 *)REG_R1_CNT = dataBit + | R1_RTC_DATA_DIR_OUT + | R1_RTC_CS; + WaitRtcFor5us(); + + *(vu8 *)REG_R1_CNT = dataBit + | R1_RTC_DATA_DIR_OUT + | R1_RTC_CS | R1_RTC_SCK; + WaitRtcFor5us(); + + data <<= 1; + } +} + +//---------------------------------------------------------------------- +// f[^obt@M +//---------------------------------------------------------------------- + +void SendRtcDataBuf(u8 *srcp, s32 count) +{ + u8 *srcEndp = srcp + count; + + while (srcp < srcEndp) { + SendRtcData(*srcp++); + } + + *(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN // `bvfBZ[u + | R1_RTC_SCK; + WaitRtcFor5us(); +} + +//---------------------------------------------------------------------- +// f[^obt@M +//---------------------------------------------------------------------- + +void RecvRtcDataBuf(u8 *destp, s32 count) +{ + u8 *destEndp = destp + count; + + while (destp < destEndp) { + u8 data = 0; + int i; + + for (i=0; i<8; i++) { + *(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN + | R1_RTC_CS; + + WaitRtcFor5us(); + + *(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN + | R1_RTC_CS | R1_RTC_SCK; + WaitRtcFor5us(); + + data |= (*(vu8 *)REG_R1_CNT & R1_RTC_DATA_BIT) <blowfishFlashTable, &fhp->blowfishKey, scwp->flashKeyBuf); + + // fǂݍ + + { u8 *srcp = (void *) ( fhp->arm9RomOffset * (4 << fhp->arm9RomAlign)); + u8 *destp = (void *)((-fhp->arm9RamInvOffset * (4 << fhp->arm9RamAlign)) + MAIN_MEM_EX_END); + s32 size; + u16 crc16; + static const UC_InternalFuncp ucif = {InitReadFlash, TerminateReadFlash, + +#ifndef TEST_HUFFMAN + ReadByte4SucureFlash, NULL, NULL}; +#else + ReadByte4SucureFlash, NULL, ReadWord4SucureFlash}; +#endif // TEST_HUFFMAN + +#ifdef ENABLE_WRITE_FLASH + + WriteFlash((void *)arm9ipl2, (u32 *)srcp, arm9ipl2_end - arm9ipl2); + +#endif // ENABLE_WRITE_FLASH + + shwp->flashArm9RamAddr = destp; + + size = UnCompLZ77Short((u8 *)srcp, (u16 *)destp, &ucif, &ucif); + if (size > 0) + scwp->flashCrc16 = GetInvCRC16((u16 *)destp, size); + else shwp->flashArm9HeaderError = size; + + + srcp = (void *)( fhp->arm7RomOffset * (4 << fhp->arm7RomAlign)); + destp = (void *)(-fhp->arm7RamInvOffset * (4 << fhp->arm7RamAlign)); + if (!fhp->arm7PlaceMmem) (u8 *)destp += MON_CPU_WRAM_END; + else (u8 *)destp += MAIN_MEM_EX_END; + shwp->flashArm7RamAddr = destp; + +#ifdef ENABLE_WRITE_FLASH + + WriteFlash((void *)arm7ipl2, (u32 *)srcp, arm7ipl2_end - arm7ipl2); + +#endif // ENABLE_WRITE_FLASH + +#ifndef TEST_HUFFMAN + + size = UnCompLZ77Short((u8 *)srcp, (u16 *)destp, &ucif, &ucif); +// size = UnCompRLShort((u8 *)srcp, (u16 *)destp, &ucif, &ucif); +#else + size = UnCompHuffman32((u8 *)srcp, (u32 *)destp, scwp->huffTableBuf, &ucif); + +#endif // TEST_HUFFMAN + + if (size > 0) + scwp->flashCrc16 = GetCRC16(scwp->flashCrc16, (u16 *)destp, size); + else shwp->flashArm7HeaderError = size; + + if (fhp->crc16 != scwp->flashCrc16) shwp->flashCrcError = 1; + } + +#endif // DISABLE_FLASH + +} + + + +//====================================================================== +// Tu[`Q +//====================================================================== + +//---------------------------------------------------------------------- +// FLASHANZXEFCg +//---------------------------------------------------------------------- + +__inline void WaitFlashFor300ns(void) +{ + WaitByLoop(12/4); +} + + +//---------------------------------------------------------------------- +// f[^Mi1Bytej +//---------------------------------------------------------------------- + +void SendSpiData(u32 target, u32 data, u32 continueFlag) +{ + u16 spiCntData = target + | (MON_SPI_CONTINUOUS_ON * continueFlag) + | SPI_ENABLE; + + WaitSpi(); + + *(vu16 *)REG_SPICNT = spiCntData; + *(vu8 *)REG_SPIDATA = data; +} + +__inline void SendFlashData(u32 data, u32 continueFlag) +{ + SendSpiData(MON_SPI_TARGET_FLASH | SPI_SCK_4M, data, continueFlag); + + if (!continueFlag) WaitFlashFor300ns(); +} + +//---------------------------------------------------------------------- +// f[^Mi1Bytej +//---------------------------------------------------------------------- + +u8 RecvSpiData(u32 target, u32 continueFlag) +{ + u16 spiCntData = target + | (MON_SPI_CONTINUOUS_ON * continueFlag) + | SPI_ENABLE; + + WaitSpi(); + + *(vu16 *)REG_SPICNT = spiCntData; + *(vu16 *)REG_SPIDATA = spiCntData; // _~[f[^ + + WaitSpi(); + + return *(vu8 *)REG_SPIDATA; +} + +u8 RecvFlashData(u32 continueFlag) +{ + u8 data; + + data = RecvSpiData(MON_SPI_TARGET_FLASH | SPI_SCK_4M, continueFlag); + + if (!continueFlag) WaitFlashFor300ns(); + + return data; +} + + +//---------------------------------------------------------------------- +// f[^Mi4BytePʁj +//---------------------------------------------------------------------- + +void SendSpiDataBuf(u32 target, u32 *ramp, s32 size) +{ + u32 *ramEndp = ramp + size/4; + int i, ii; + + WaitSpi(); + + while (ramp < ramEndp) { + u32 dataTmp = *ramp++; + u32 continueFlag = 1; + + for (i=0; i<4; i++) { + if ((ramp >= ramEndp) && (i == 3)) // ŏIAhXΉ + continueFlag = 0; + + SendSpiData(target, dataTmp, continueFlag); + dataTmp >>= 8; + } + } +} + +__inline void SendFlashDataBuf(u32 *ramp, s32 size) +{ + SendSpiDataBuf(MON_SPI_TARGET_FLASH | SPI_SCK_4M, ramp, size); + + WaitFlashFor300ns(); +} + +//---------------------------------------------------------------------- +// f[^Mi4BytePʁj +//---------------------------------------------------------------------- + +void RecvSpiDataBuf(u32 target, u32 *ramp, s32 size, u32 nEndFlag) +{ + u32 *ramEndp = ramp + size/4; + int i, ii; + + WaitSpi(); + + while (ramp < ramEndp) { + u32 dataTmp = 0; + u32 continueFlag = 1; + + for (i=0; i<4; i++) { + if ((ramp >= ramEndp - 1) && (i == 3)) // ŏIAhXΉ + continueFlag = nEndFlag; + + dataTmp |= RecvSpiData(target, continueFlag) <<(i*8); + } + *ramp++ = dataTmp; + } + +} + +__inline void RecvFlashDataBuf(u32 *ramp, s32 size, u32 nEndFlag) +{ + RecvSpiDataBuf(MON_SPI_TARGET_FLASH | SPI_SCK_4M, ramp, size, nEndFlag); + + WaitFlashFor300ns(); +} + + +//====================================================================== +// FLASHXe[^Xǂݍ +//====================================================================== + +u8 ReadFlashStatus(void) +{ + SendFlashData(FLHOP_STAT, 1); + + return RecvFlashData(0); +} + +//====================================================================== +// FLASHf[^ǂݍ +//====================================================================== + +void ReadFlash(const u8 *flashp, u32 *ramp, s32 size) +{ + u32 *ramEndp = ramp + size/4; + + InitReadFlash(flashp, NULL, NULL); // iAhXMj + + RecvFlashDataBuf(ramp, size, 1); + + TerminateReadFlash(NULL); // I_~[ǂݍ +} + +s32 InitReadFlash(const u8 *flashp, void *ramp, const void *paramp) +{ + SecureWork *scwp = GetSecureWorkAddr(); + s32 retval = 0; + int i; + + scwp->flashCount = 0; // 8oCgǂݍ݃JE^ NA + + +#ifdef ENABLE_WRITE_FLASH + + while (ReadFlashStatus() & FLHSTAT_WRITING) ; // ݊҂ + +#endif // ENABLE_WRITE_FLASH + + SendFlashData(FLHOP_READ, 1); + + for (i=3; --i>=0; ) + SendFlashData(((u32 )flashp) >>(i*8), 1); + + if (paramp) { + u8 *ramEndp; + s32 size; + + for (i=0; i<8*4; i+=8) { + retval |= ReadByte4SucureFlash(NULL) <>8; + if (size < 0) return -2; + + if (!((ramp >= (void *)MAIN_MEM) && (ramp < (void *)FLH_MMEM_LOAD_LIMIT)) + && !((ramp >= (void *)CPU_WRAM) && (ramp < (void *)FLH_WRAM_LOAD_LIMIT))) + return -3; + + ramEndp = (u8 *)ramp + size; + // C [hTCY + if ((ramp >= (void *)MAIN_MEM) && (ramp < (void *)FLH_MMEM_LOAD_LIMIT)) { + if (ramEndp > (u8 *)FLH_MMEM_LOAD_LIMIT) + size -= (ramEndp - (u8 *)FLH_MMEM_LOAD_LIMIT); + } + // [NRAM [hTCY + if ((ramp >= (void *)FLH_WRAM_LOAD_BASE) && (ramp < (void *)FLH_WRAM_LOAD_LIMIT)) { + if (ramEndp > (u8 *)FLH_WRAM_LOAD_LIMIT) + size -= (ramEndp - (u8 *)FLH_WRAM_LOAD_LIMIT); + } + retval = (size <<8) | (retval & 0xff); + } + + return retval; +} + +s32 TerminateReadFlash(const u8 *flashp) +{ + RecvFlashData(0); // I_~[ǂݍ + + return 0; +} + +u8 ReadByte4SucureFlash(const u8 *flashp) +{ + SecureWork *scwp = GetSecureWorkAddr(); + u8 retval; + + if (!scwp->flashCount) { RecvFlashDataBuf(scwp->flashBuf, 8, 1); + +#ifndef DISABLE_SECURE_CODE + + DecryptByBlowfishFook(&scwp->blowfishFlashTable, scwp->flashBuf); + +#endif // DISABLE_SECURE_CODE + + } + + retval = ((u8 *)(scwp->flashBuf))[scwp->flashCount++]; + scwp->flashCount &= 0x7; + + return retval; +} + +#ifdef TEST_HUFFMAN + +u32 ReadWord4SucureFlash(const u8 *flashp) +{ + SecureWork *scwp = GetSecureWorkAddr(); + u32 retval; + + if (!scwp->flashCount) { RecvFlashDataBuf(scwp->flashBuf, 8, 1); + +#ifndef DISABLE_SECURE_CODE + + DecryptByBlowfishFook(&scwp->blowfishFlashTable, scwp->flashBuf); + +#endif // DISABLE_SECURE_CODE + + } + + retval = ((u32 *)(scwp->flashBuf))[scwp->flashCount/4]; + scwp->flashCount += 4; + scwp->flashCount &= 0x7; + + return retval; +} + +#endif // TRACE_SECURE_OP + + +//====================================================================== +// FLASHf[^ +//====================================================================== + +#if defined(ENABLE_WRITE_FLASH) || defined(ENABLE_WRITE_YOSHIOKA) + +void WriteFlashPage(u32 *ramp, u32 *flashp, s32 size) +{ + int i; + + while (ReadFlashStatus() & FLHSTAT_WRITING) ; // ݊҂ + + SendFlashData(FLHOP_WRITE_ENABLE, 0); // ݃Cl[u + + + SendFlashData(FLHOP_WRITE_PAGE, 1); + + for (i=3; --i>=0; ) + SendFlashData(((u32 )flashp) >>(i*8), 1); + + SendFlashDataBuf(ramp, size); + + + while (ReadFlashStatus() & FLHSTAT_WRITING) ; // ݊҂ + + SendFlashData(FLHOP_WRITE_DISABLE, 0); // ݃fBZ[u +} + +void WriteFlash(u32 *ramp, u32 *flashp, s32 size) +{ + u32 *ramEndp = ramp + size/4; + s32 restSize; + int i; + + while (ramp < ramEndp) { + WriteFlashPage(ramp, flashp, FLH_PAGE_SIZE); + ramp += FLH_PAGE_SIZE/4; + flashp += FLH_PAGE_SIZE/4; + } +} + +#endif // ENABLE_WRITE_FLASH || ENABLE_WRITE_YOSHIOKA + + + diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c new file mode 100644 index 0000000..3d69110 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c @@ -0,0 +1,723 @@ +//******************************************************************* +// IRIS-SUBPj^vO Tu[` +//******************************************************************* +#include "IrisSubpMon.h" + + + + +//--------------------- O[o ϐ ------------------------------- + +SharedWork *sharedWorkp; // L[N|C^ +SecureWork *secureWorkp; // ZLA񃏁[N|C^ + +IntrFuncp intrTable[4]; // 荞݃e[u + +u32 CharTmpBuf[0x200/4]; +u16 NinLogoBak[256/2]; + + +//---------------------------------------------------------------------- +// WX^ +//---------------------------------------------------------------------- + +void InitReg(void) +{ + *(vu32 *)REG_IME = 0; // IME NA + *(vu32 *)REG_IE = 0; // IE NA + *(vu32 *)REG_IF = -1; // IF NA + +#ifdef BOOT_FROM_CARTRIDGE + + *(vu16 *)REG_POWCNT = POW_SOUND_ON; // TEhON + ChangeSoundBias16(1, 8) ; // TEhoCAX Zbg + +#endif // BOOT_FROM_CARTRIDGE + +} + +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- + +void PreInitRam(void) +{ + CpuClearFast32(0, CPU_WRAM_END - 0x4000, 0x4000 - 512); // ARM7p[N̈ 㔼16KBNA +} + +void PostInitRam(void) +{ + CpuClearFast32(0, CPU_WRAM, 0x4000); // ARM7p[N̈ O16KBNA +} + +//---------------------------------------------------------------------- +// CSECURËi擪64KBj NA +//---------------------------------------------------------------------- + +void ClearMmemSecureArea(void) +{ + CpuClearFast32(0, MAIN_MEM, MROM_SECURE_SIZE * 4); +} + + +//---------------------------------------------------------------------- +// CRC16bit Zo +//---------------------------------------------------------------------- + +const u16 crc16_table[16] = { + 0x0000, 0xCC01, 0xD801, 0x1400, + 0xF001, 0x3C00, 0x2800, 0xE401, + 0xA001, 0x6C00, 0x7800, 0xB401, + 0x5000, 0x9C01, 0x8801, 0x4400 +}; + +u16 GetCRC16(u32 start, u16 *datap, u32 size) +{ + u16 *dataEndp = datap + size/2; + u16 data16; + u32 shift = 0; + u16 r1, total = start; + + while(datap < dataEndp) { + if (!shift) data16 = *datap; + + // 4bitP + r1 = crc16_table[total & 0xf]; + total = (total >>4); + total = total ^ r1 ^ crc16_table[(data16 >>shift) & 0xf]; + + shift += 4; + if (shift >= 0x10) { + shift = 0; + datap++; + } + } + + return total; +} + + +//---------------------------------------------------------------------- +// C g`FbN +//---------------------------------------------------------------------- + +const u16 mmemSizeCheckTable[] = {0x56a9, 0x695a, 0xa695, 0x96a5}; + +s32 IsMmem8MB(void) +{ + u32 mmemExFlag = 0; + int i; + +#ifdef ENABLE_DEBUGGER_ON_4MB + + return 1; + +#endif // ENABLE_DEBUGGER_ON_4MB + + for (i=0; i<4; i++) { + *(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = mmemSizeCheckTable[i]; + if (*(vu16 *)MMEM_CHK_SIZE_READ_BUF != mmemSizeCheckTable[i]) mmemExFlag++; + } + *(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = 0; + + return (mmemExFlag >= 3); +} + + +//---------------------------------------------------------------------- +// fobKォH +//---------------------------------------------------------------------- +extern u16 sio_handshake_data[]; +extern u16 sio_send_code; +extern u16 sio_recv_code; +extern u16 sio_add_code; + +#define SIO_SEND_CODE 0x4e54 +#define SIO_RECV_CODE 0x4944 +#define SIO_ADD_CODE 0x524f +#define SYSROM_VERSION 0x0100 + +void SendSioData(u32 data) // SIOf[^M +{ + *(vu32 *)REG_SIODATA32 = data; + + StartSio(); + WaitSio(); + + WaitByLoop(0x8000/4); // 0.97ms҂ + while (!IsSioSendEnable()) ; +} + +s32 CheckSioData(u32 data, u32 checkMask) // SIO߂l`FbN +{ + +#ifndef DISABLE_SECURE_CODE + + if ((*(vu32 *)REG_SIODATA32 & checkMask) + != ((((data + sio_add_code) & 0xffff) | (~data & 0xffff0000)) & checkMask)) + return 0; + +#endif // DISABLE_SECURE_CODE + + return 1; +} + +void CheckDebugger(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + u32 sioData[2]; + int i; + + shwp->isOnDebugger = 0; + + if (!IsMmem8MB()) return; // C 4MB ȂfobKł͂Ȃ + +#ifndef DISABLE_SECURE_CODE + + sioData[0] = shwp->recvRtc[0] | 0x80000000; + sioData[1] = shwp->recvRtc[1] | 0x80000000; + + *(vu16 *)REG_RCNT = R_SIO_MASTER_MODE; // SIOnhVFCN + *(vu16 *)REG_SIOCNT = SIO_32BIT_MODE | SIO_IN_SCK_256K; + + if (!IsSioSendEnable()) { + return; // ߂ SI Low Ŗ΃fobKł͂Ȃ + } else { + *(vu16 *)REG_SIOCNT |= SIO_SCK_IN; // Ȃ΃fobKł͂Ȃ + + SendSioData((sio_send_code <<16) | SYSROM_VERSION); + if (!CheckSioData((~sio_recv_code <<16), 0xffff0000)) return; + SendSioData(sioData[1]); + SendSioData(sioData[0]); + if (!CheckSioData(sioData[1], -1)) return; + SendSioData(sioData[1]); + if (!CheckSioData(sioData[0], -1)) return; + } + + *(vu32 *)REG_SIODATA32 = 0; + *(vu32 *)REG_SIOCNT = 0; + + shwp->isOnDebugger = 1; + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// Blowfishe[u +//---------------------------------------------------------------------- +void InitBlowfishKeyAnaTableFook(BLOWFISH_CTX *tableBufp, u32 *keyBufp, u32 keyLen); +u32 ChangeEncryptKey1(u32 key); +u32 ChangeEncryptKey2(u32 key); +u32 ChangeEncryptKey3(u32 key); +u32 ChangeEncryptKey4(u32 key); + +void MakeBlowfishTable(BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp, u32 keyLen) +{ + +#ifndef DISABLE_SECURE_CODE + +#ifndef ENABLE_TEST_BLOWFISH + + const BLOWFISH_CTX *blowfishInitTablep = &blowfishInitTable; +#else + const BLOWFISH_CTX *blowfishInitTablep = &blowfishTestTable; + +#endif // ENABLE_TEST_BLOWFISH + + u32 keyBuf[3]; + +#ifndef NDEBUG + + *(u32 *)REG_TM2CNT = TMR_PRESCALER_256CK | TMR_ENABLE; // ^C}[ X^[g + +#endif // NDEBUG + + CopyBiosAreaFook(blowfishInitTablep, tableBufp, sizeof(BLOWFISH_CTX)); + + keyBufp[0] = *keyp; + keyBufp[1] = ChangeEncryptKey1(*keyp); + keyBufp[2] = ChangeEncryptKey2(*keyp); + + InitBlowfishKeyAnaTableFook(tableBufp, keyBufp, keyLen); + + { SecureWork *scwp = GetSecureWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + FlashHeader *fhp = GetFlashHeaderAddr(); + u32 *blowfishedKeyp; + + + if (keyLen == 8) { + *(u64 *)scwp->cardNormalModeKey = *(u64 *)rmhp->romNormalModeKey; + + blowfishedKeyp = scwp->cardNormalModeKey; + } else { + *(u64 *)scwp->unScrambleKey = *(u64 *)fhp->unScrambleKey; + + blowfishedKeyp = scwp->unScrambleKey; + } + + DecryptByBlowfishFook(tableBufp, blowfishedKeyp); + if (keyLen > 8) + scwp->isGenUnScrambleKey = 1; + } + +#ifndef NDEBUG + + *(u16 *)REG_TM2CNT_H = 0; + +#endif // NDEBUG + + InitBlowfishKeyAnaTableFook(tableBufp, keyBufp, keyLen); + +#endif // DISABLE_SECURE_CODE + +} + +//---------------------------------------------------------------------- +// BlowfishL[e[uPʏ +//---------------------------------------------------------------------- + +void InitBlowfishKeyAnaTable(BLOWFISH_CTX *tableBufp, u32 *keyBufp, u32 keyLen) +{ + +#ifndef DISABLE_SECURE_CODE + + EncryptByBlowfishFook2(tableBufp, keyBufp); // EncryptByBlowfish(tableBufp, &keyBufp[2], &keyBufp[1]); + EncryptByBlowfishFook1(tableBufp, keyBufp); // EncryptByBlowfish(tableBufp, &keyBufp[1], &keyBufp[0]); + InitBlowfishFook(tableBufp, (u8 *)keyBufp, keyLen); + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// ÍIuWFNg̕ +//---------------------------------------------------------------------- + +#ifndef DISABLE_SECURE_CODE + +extern const u32 encrypt_object_key[]; +#else +const u32 encrypt_object_key[2] = {0x01234567, 0x89abcdef}; + +#endif // DISABLE_SECURE_CODE + + +#define UNDEF_CODE 0xe7ffdeff +#define ENCRYPT_DEF_SIZE 0x800 + +void DecryptObjectFile(void) +{ + SharedWork *shwp = GetSharedWorkAddr(); + SecureWork *scwp = GetSecureWorkAddr(); + RomHeader *rmhp = GetRomHeaderAddr(); + BLOWFISH_CTX *tableBufp = &scwp->blowfishCardTable; + u32 *encBufp = (u32 *)&scwp->blowfishFlashTable; + u32 *encDestp = (u32 *)rmhp->arm9.ramAddr; + s32 size = scwp->secureSize; + s32 restSize; + + if (size > ENCRYPT_DEF_SIZE) size = ENCRYPT_DEF_SIZE; + restSize = size; + + if (scwp->enableReadSecure) { + CpuCopyFast32Fook(encDestp, encBufp, size); // ÍIuWFNg ޔ + DecryptByBlowfishFook(tableBufp, encBufp); // ÍIuWFNgwb_ v + } + + ChangeObjectTableFook(); // Blowfishe[uϊ + + if (scwp->enableReadSecure) { + DecryptByBlowfishFook(tableBufp, encBufp); // ÍIuWFNgwb_ |Xg + +#ifndef DISABLE_SECURE_CODE + + if ((encBufp[0] == encrypt_object_key[0]) // ÍIuWFNgL + && (encBufp[1] == encrypt_object_key[1])) { + u32 *bufp = encBufp; + + bufp[0] = UNDEF_CODE; + bufp[1] = UNDEF_CODE; + while ((restSize -= 8) > 0) { + bufp += 2; // + DecryptByBlowfishFook(tableBufp, bufp); + } + } else +#endif // DISABLE_SECURE_CODE + { + CpuClearFast32(UNDEF_CODE, encBufp, size); // `R[hŃNA + shwp->disableEncryptedCardData = 1; // ÍIuWFNg ʒm + } + + CpuCopyFast32Fook(encBufp, encDestp, size); // ÍIuWFNg A + } +} + +//---------------------------------------------------------------------- +// ÍIuWFNgpBlowfishe[uϊ +//---------------------------------------------------------------------- + +void ChangeObjectTable(u32 keyLen) +{ + +#ifndef DISABLE_SECURE_CODE + + SecureWork *scwp = GetSecureWorkAddr(); + BLOWFISH_CTX *tableBufp = &scwp->blowfishCardTable; + u32 *keyBufp = scwp->cardKeyBuf; + + keyBufp[1] = ChangeEncryptKey3(keyBufp[1]); + keyBufp[2] = ChangeEncryptKey4(keyBufp[2]); + + InitBlowfishKeyAnaTableFook(tableBufp, keyBufp, keyLen); + +#endif // DISABLE_SECURE_CODE + +} + + +//---------------------------------------------------------------------- +// nt}f[^WJi32Bit32Bitj +//---------------------------------------------------------------------- + +#define TREE_END 0x80 + +s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp) +{ + u8 *treep;// = (u8 *)srcp + 4; + s32 treeSize;// = (*treep + 1) * 2; + u32 treeCheck; + u32 treeShift; + u32 srcTmp; + u32 destTmp = 0; + u32 destTmpCount = 0; + s32 srcCount; + s32 error; + int i; + + s32 header = ifp->InitFuncp(srcp, destp, tableBufp); // iAhXMj + s32 size = header >>8; + s32 destCount = size; + s32 dataBit = header & 0x0f; + u32 destTmpDataNum = 4 + (dataBit & 0x7); + u32 destTopShift = 32 - dataBit; + + if (header < 0) { size = header; + goto terminate; + } + + srcp += 3; + tableBufp[0] = ifp->ByteStreamFuncp(++srcp); + treeSize = (tableBufp[0] + 1) * 2; + + for (i=1; iByteStreamFuncp(++srcp); + srcp++; + + treep = tableBufp + 1; + while (destCount > 0) { + srcCount = 32; + srcTmp = ifp->WordStreamFuncp(srcp); + srcp += 4; + while (--srcCount >= 0) { + treeShift = (srcTmp >> 31) & 0x1; + treeCheck = *treep; + treeCheck <<= treeShift; + treep = (u8 *)((((u32 )treep>>1) <<1) + (((*treep & 0x3f)+1) <<1) + treeShift); + if (treeCheck & TREE_END) { + destTmp >>= dataBit; + destTmp |= *treep << destTopShift; + treep = tableBufp + 1; + if (++destTmpCount == destTmpDataNum) { + *destp++ = destTmp; + destCount -= 4; + destTmpCount = 0; + } + } + if (destCount <= 0) break; + srcTmp <<= 1; + } + } + +terminate: + if (ifp->TerminateFuncp) { // I_~[ǂݍ + if ((error = ifp->TerminateFuncp(srcp)) < 0) return error; + } + + return size; +} + + +//---------------------------------------------------------------------- +// LZoCgf[^WJi8Bit16Bitj +//---------------------------------------------------------------------- + +s32 UnCompLZ77Short(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp) +{ + u32 destTmp = 0; + u32 flags; + s32 offset; + s32 offset0_8; + s32 length; + u32 shift = 0; + u8 src; + s32 error; + int i; + + s32 header = ifp->InitFuncp(srcp, destp, paramp); // iAhXMj + s32 size = header >>8; + s32 destCount = size; + + if (header < 0) { size = header; + goto terminate; + } + + srcp += 3; + while (destCount > 0) { + flags = ifp->ByteStreamFuncp(++srcp); + for (i=8; --i>=0; ) { + if (!(flags & 0x80)){ destTmp |= ifp->ByteStreamFuncp(++srcp) <ByteStreamFuncp(++srcp)) >>4) + 3; + offset = ( src & 0x0f) << 8; + offset = (offset | ifp->ByteStreamFuncp(++srcp)) + 1; + offset0_8 = (8 - shift) ^ ((offset & 1) <<3); + destCount -= length; + while (--length >= 0) { offset0_8 ^= 8; + destTmp |= (destp[-((offset + ((8 - shift) >>3)) >>1)] + & (0xff <>offset0_8 <TerminateFuncp) { // I_~[ǂݍ + if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error; + } + + return size; +} + + +//---------------------------------------------------------------------- +// OXf[^WJi8Bit16Bitj +//---------------------------------------------------------------------- + +s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp) +{ + s32 srcTmp; + s32 destTmp = 0; + u32 flags; + s32 offset; + s32 length; + u32 shift = 0; + s32 error; + + s32 header = ifp->InitFuncp(srcp, destp, paramp); // iAhXMj + s32 size = header >>8; + s32 destCount = size; + + if (header < 0) { size = header; + goto terminate; + } + + srcp += 3; + while (destCount > 0) { + flags = ifp->ByteStreamFuncp(++srcp); + length = flags & 0x7f; + if (!(flags & 0x80)) { length++; + destCount -= length; + while (--length >= 0){ destTmp |= ifp->ByteStreamFuncp(++srcp) << shift; + if (!(shift ^= 8)){ *destp++ = destTmp; + destTmp = 0; + } + } + } else { length += 3; + destCount -= length; + srcTmp = ifp->ByteStreamFuncp(++srcp); + while (--length >= 0){ destTmp |= srcTmp << shift; + if (!(shift ^= 8)){ *destp++ = destTmp; + destTmp = 0; + } + } + } + } + +terminate: + if (ifp->TerminateFuncp) { // I_~[ǂݍ + if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error; + } + + return size; +} + + +//---------------------------------------------------------------------- +// TEhe[uf[^擾 +//---------------------------------------------------------------------- + +extern s16 snd_sin_table[]; +extern u16 snd_ptable[]; +extern u8 snd_vtable[]; +extern u8 snd_data_start[]; +extern u8 snd_data_end[]; + +static s32 CheckSoundTablep(void *tablep) +{ + if ((tablep < (void *)snd_data_start) || (tablep >= (void *)snd_data_end)) + return -1; + + return 0; +} + +u32 GetSoundSinTable(s32 index) +{ + s16 *tablep = &snd_sin_table[index]; + s32 retval; + + if ((retval = CheckSoundTablep(tablep)) != 0) return retval; + + return *tablep; +} + +u32 GetSoundPitchTable(s32 index) +{ + u16 *tablep = &snd_ptable[index]; + s32 retval; + + if ((retval = CheckSoundTablep(tablep)) != 0) return retval; + + return *tablep; +} + +u32 GetSoundVolumeTable(s32 index) +{ + u8 *tablep = &snd_vtable[index]; + s32 retval; + + if ((retval = CheckSoundTablep(tablep)) != 0) return retval; + + return *tablep; +} + + +//---------------------------------------------------------------------- +// 荞ݏI +//---------------------------------------------------------------------- + +void TerminateIntr(u32 inrtFlags) +{ + u32 bakIE = *(vu32 *)REG_IME; + + *(vu32 *)REG_IME = 0; + *(vu32 *)REG_IE &= ~inrtFlags; + *(vu32 *)REG_IF = inrtFlags; + *(vu32 *)REG_IME = bakIE; +} + + +//---------------------------------------------------------------------- +// VuN҂ +//---------------------------------------------------------------------- + +#ifdef BOOT_FROM_CARTRIDGE + +void WaitVBlank(s32 count) +{ + int i; + + for (i=0; iblankingV == 1) ; + while (((vDispStat *)REG_DISPSTAT)->blankingV != 1) ; + } +} + +#endif // BOOT_FROM_CARTRIDGE + + +//---------------------------------------------------------------------- +// NINTENDOS`FbN +//---------------------------------------------------------------------- +extern const u16 Nin_Char_Diff_Huff[]; + +#ifdef TEST_AGB_MODE + +u8 CheckNintendoLogo(u16 *datap) +{ + int i; + + for (i=0; i +#include "Blowfish.h" +#include "IrisSubpMonMacro.h" +#include "IrisMonSharedArea.h" + + +//--------------------- O[o ϐ ------------------------------- + +extern SharedWork *sharedWorkp; // L[N|C^ +extern SecureWork *secureWorkp; // ZLA񃏁[N|C^ + +extern IntrFuncp intrTable[4]; + +extern u32 CharTmpBuf[0x200/4]; +extern u16 NinLogoBak[256/2]; + + +//--------------------- ėpTu[` ------------------------------- + + +void NotifyMainpIntf(u32 param); +void WaitMainpIntf(u32 param); +void WaitVBlank(s32 count); +s32 IsMmem8MB(void); +s32 IsOnDebugger(void); +void CheckDebugger(void); + +void InitRtc(void); +u8 ReadRtcStatus1(void); +u8 ReadRtcStatus2(void); +void SendRtcOp(u32 op); +void SendRtcDataBuf(u8 *srcp, s32 count); +void RecvRtcDataBuf(u8 *datap, s32 count); + +void LoadFlashHeader(void); +void LoadFlashDemo(void); + +u8 ReadFlashStatus(void); +void ReadFlash(const u8 *eepromp, u32 *ramp, s32 size); +void WriteFlash(u32 *ramp, u32 *eepromp, s32 size); + +// kWJ֐^錾 +typedef s32 (* UC_InitFuncp)(const u8 *devicep, void *ramp, const void *paramp); +typedef s32 (* UC_TerminateFuncp)(const u8 *devicep); +typedef u8 (* UC_ByteStreamFuncp)(const u8 *devicep); +typedef u16 (* UC_ShortStreamFuncp)(const u8 *devicep); +typedef u32 (* UC_WordStreamFuncp)(const u8 *devicep); + +// kWJ֐w +typedef struct { + UC_InitFuncp InitFuncp; // ֐ + UC_TerminateFuncp TerminateFuncp; // I֐ + UC_ByteStreamFuncp ByteStreamFuncp; // oCgXg[ǂݍ݊֐ + UC_ShortStreamFuncp ShortStreamFuncp; // n[t[hXg[ǂݍ݊֐ + UC_WordStreamFuncp WordStreamFuncp; // [hXg[ǂݍ݊֐ +} UC_InternalFuncp; + +s32 InitReadFlash(const u8 *flashp, void *ramp, const void *paramp); +s32 TerminateReadFlash(const u8 *flashp); +u8 ReadByte4SucureFlash(const u8 *flashp); +u32 ReadWord4SucureFlash(const u8 *flashp); + + +#ifndef DISABLE_SECURE_CODE +void InitSecureParamFook(void); +void MakeBlowfishCardTable( BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp); +void MakeBlowfishFlashTable(BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp); +void DecryptObjectFileFook(void); +void ChangeObjectTableFook(void); +void CopyBiosAreaFook(const void *srcp, void *destp, s32 size); +void CpuSetFast32Fook(const void *srcp, void *destp, u32 dmaCntData); +#else +void InitSecureParam(void); +void MakeBlowfishTable(BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp, u32 keyLen); +void DecryptObjectFile(void); +void ChangeObjectTable(u32 keyLen); +void CopyBiosArea(const void *srcp, void *destp, s32 size); +void CpuSetFast32(const void *srcp, void *destp, u32 dmaCntData); +#define InitSecureParamFook() InitSecureParam() +#define MakeBlowfishCardTable( tableBufp, keyp, keyBufp) MakeBlowfishTable( tableBufp, keyp, keyBufp, 8) +#define MakeBlowfishFlashTable(tableBufp, keyp, keyBufp) MakeBlowfishTable( tableBufp, keyp, keyBufp, 12) +#define DecryptObjectFileFook() DecryptObjectFile() +#define ChangeObjectTableFook() ChangeObjectTable(8) +#define CopyBiosAreaFook(srcp, destp, size) CopyBiosArea(srcp, destp, size) +#define CpuSetFast32Fook(srcp, destp, dmaCntData) CpuSetFast32(srcp, destp, dmaCntData) +#endif // DISABLE_SECURE_CODE + + +void InitCardParam4Secure(void); +void TerminateCardParam4Secure(void); +void InitCardOpBlowfish(void); +void InitCardPN_Intf(void); +void InitVA_VB_VD(void); +void LoadCardTable(void); +void ReadCardHeader(void); +void Encrypt2SetTimer4Secure(CardCtrlParam *paramp); +void TraceCardCnt(u32 cardCnt); +void SendCardPNG_ON(void); +void SendCardPNG_OFF(void); +void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); +void ReadCardAsync4Normal(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); +void ReadCardAsync4Secure(void *romp, CardCtrlParam *paramp); +void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); +void ReadCard4Game(void *romp, void *ramp, s32 size, u32 cntParam); + +void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp); +void SetCardIntr4Normal(void *romp, void *ramp, s32 size); +void SetCardIntr4Secure(void *romp, void *ramp, s32 size); +void SetCardIntr4Game(void *romp, void *ramp, s32 size); +void CardTimerIntr4Secure(void); +void CardIntr(void); +void CardIntr4Secure(void); +void EnableCardIntr(void); +void TerminateCardIntr(void); +void WaitCardIntr(void); + +u32 ReadCardID4Normal(void); +void ReadCardID4Secure(void); +void ChangeCardMode4Normal(void); +void ChangeCardMode4Secure(void); + +s32 GetBlockSizeFromCardCnt(CardCnt *paramp); +void WaitCardDma(u32 dmaNo); +void SetVAE(CardCtrlParam *paramp); +void SetVBI(CardCtrlParam *paramp); +void SetVA(CardCtrlParam *paramp); +void SetVB(CardCtrlParam *paramp); +void OverWriteTestVB(CardCtrlParam *paramp); +void SetDummyVC(CardCtrlParam *paramp); +void SetVD(CardCtrlParam *paramp); + + +void PreInitRam(void); +void PostInitRam(void); +void ClearMmemSecureArea(void); +void InitReg(void); +void CopyBiosArea(const void *srcp, void *destp, s32 size); +u8 CheckAgbRomHeader(void *datap); +void ReadNintendoLogo4AGB(void); +u8 CheckNintendoLogo(u16 *datap); + + +void SetPauseCheckFlag(void); +u16 GetCRC16(u32 start, u16 *datap, u32 length); + +void WaitIntr(u32 InitIfClear, u32 IfFlags); +void WaitVBlankIntr(void); +void TerminateIntr(u32 inrtFlags); +void WaitByLoop(s32 count); + +void CpuSet16_32(const void *srcp, void *destp, u32 dmaCntData); +void CpuSetFast32(const void *srcp, void *destp, u32 dmaCntData); + +void UnPackBits32(const u8 *srcp, u32 *destp, const UnPackBitsParam *UnPackBitsParamp); +void UnCompRLByte( u8 *srcp, u8 *destp); +s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp); +void UnCompLZ77Byte( u8 *Srcp, u8 *Destp); +s32 UnCompLZ77Short(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp); +s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp); + +void ChangeSoundBias16(u32 UpDown, u32 stepLoops); + + + +#endif // _IRIS_SUBP_MON_SUB_H diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonTarget.h b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonTarget.h new file mode 100644 index 0000000..d765c91 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonTarget.h @@ -0,0 +1,53 @@ +//====================================================================== +// hqhrTuvZbTEj^vOp` +//====================================================================== +#ifndef _IRIS_SUBP_MON_TARGET_H +#define _IRIS_SUBP_MON_TARGET_H + + +#include + + +//#define BB_MON // ubh{[hp`ւ̐؂芷 +//#define TEG_MON // TEG{[hp`ւ̐؂芷 +#define TS_MON // TSp`ւ̐؂芷 + + +#define NDEBUG + + +//#define DISABLE_SECURE_CODE // ZLAR[h + +//#define BOOT_FROM_CARTRIDGE // J[gbWEu[g + +//#define DISABLE_ENCRYPT // Í + +//#define DISABLE_BOOT_IPL2 // IPL2u[g + +//#define DISP_READY_CARD_4_IPL2 // IPL2J[hǂݍݏ\ + +//#define DISABLE_READ_CARD_4_IPL2 // IPL2J[hǂݍݖ + +//#define ENABLE_DEBUGGER_ON_4MB // fobK BB2mF + +//#define TEST_HUFFMAN // nt}R[hEeXg + +//#define TEST_AGB_MODE // AGB[hEeXg + +//#define DISP_AGB_HEADER_ERROR // AGBwb_G[\ + +//#define ENABLE_WRITE_FLASH // FLASHf[^ + +//#define DISABLE_FLASH // FLASH + +//#define TRACE_SECURE_OP // SECURER}h̃g[X + +//#define MOVE_TRACE_SECURE_BUF // SECURER}h̃g[Ẍ̈ړ + +//#define ENABLE_TEST_BLOWFISH // Blowfish eXg + +//#define TEST_CARD_BY_MAINP // CvZbTł̃J[hANZXEeXg + + + +#endif // _IRIS_SUBP_MON_TARGET_H diff --git a/trunk/IrisSubp/IrisSubpMon/IrisSubpMonTargetArm.s b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonTargetArm.s new file mode 100644 index 0000000..38c45ba --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/IrisSubpMonTargetArm.s @@ -0,0 +1,36 @@ +;======================================================================= +; IrisSubpMonTargetArm.s +; IRIS^[QbgIiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_MON_TARGET_H + ELSE +_IRIS_SUBP_MON_TARGET_H * 1 + + INCLUDE IrisSubpTargetArm.s + + +; BB_MON * 1 ; ubh{[hp`ւ̐؂芷 +; TEG_MON * 1 ; TEG{[hp`ւ̐؂芷 +TS_MON * 1 ; TSp`ւ̐؂芷 + + +; DISABLE_SECURE_CODE * 1 ; ZLAR[h + +; CHECK_PROT_ADDR * 1 ; veNVAhXWX^̃`FbN + +; DISABLE_BOOT_IPL2 * 1 ; IPL2u[g + +; TEST_AGB_MODE ; AGB[hEeXg + +; ENABLE_WRITE_FLASH * 1 ; FLASHf[^ + +; ENABLE_TEST_BLOWFISH * 1 ; Blowfish eXg + +; DISABLE_ENTRY_OF_ROM_HEADER * 1 ; ROMwb_̃Gg񖳌iTEGpj + + + ENDIF ; _IRIS_SUBP_MON_TARGET_H + + END diff --git a/trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s b/trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s new file mode 100644 index 0000000..e5ae2fe --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s @@ -0,0 +1,25 @@ +;******************************************************************** +; NINTENDOSf[^ +;******************************************************************** + + AREA Init, CODE, READONLY + + ALIGN + GLOBAL Nin_Char_Diff_Huff +Nin_Char_Diff_Huff + + DCB 0x24,0xff,0xae,0x51,0x69,0x9a,0xa2,0x21,0x3d,0x84,0x82,0x0a,0x84,0xe4,0x09,0xad + DCB 0x11,0x24,0x8b,0x98,0xc0,0x81,0x7f,0x21,0xa3,0x52,0xbe,0x19,0x93,0x09,0xce,0x20 + DCB 0x10,0x46,0x4a,0x4a,0xf8,0x27,0x31,0xec,0x58,0xc7,0xe8,0x33,0x82,0xe3,0xce,0xbf + DCB 0x85,0xf4,0xdf,0x94,0xce,0x4b,0x09,0xc1,0x94,0x56,0x8a,0xc0,0x13,0x72,0xa7,0xfc + DCB 0x9f,0x84,0x4d,0x73,0xa3,0xca,0x9a,0x61,0x58,0x97,0xa3,0x27,0xfc,0x03,0x98,0x76 + DCB 0x23,0x1d,0xc7,0x61,0x03,0x04,0xae,0x56,0xbf,0x38,0x84,0x00,0x40,0xa7,0x0e,0xfd + DCB 0xff,0x52,0xfe,0x03,0x6f,0x95,0x30,0xf1,0x97,0xfb,0xc0,0x85,0x60,0xd6,0x80,0x25 + DCB 0xa9,0x63,0xbe,0x03,0x01,0x4e,0x38,0xe2,0xf9,0xa2,0x34,0xff,0xbb,0x3e,0x03,0x44 + DCB 0x78,0x00,0x90,0xcb,0x88,0x11,0x3a,0x94,0x65,0xc0,0x7c,0x63,0x87,0xf0,0x3c,0xaf + DCB 0xd6,0x25,0xe4,0x8b,0x38,0x0a,0xac,0x72,0x21,0xd4,0xf8,0x07,0x56,0xcf,0x00,0x00 + + + END + + diff --git a/trunk/IrisSubp/IrisSubpMon/SndDataArm.s b/trunk/IrisSubp/IrisSubpMon/SndDataArm.s new file mode 100644 index 0000000..c67fe80 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/SndDataArm.s @@ -0,0 +1,35 @@ +;******************************************************************** +; IRIS-SUBPj^vO TEhe[uf[^ +;******************************************************************** + + AREA SoundData, DATA, READONLY + + INCLUDE IrisSubpDefineArm.s + INCLUDE IrisSubpMemoryMapArm.s + + INCLUDE IrisSubpMonDefineArm.s + INCLUDE IrisSubpMonMemoryMapArm.s + + +;==================================================================== +; TEhe[uf[^ +;==================================================================== + GLOBAL snd_sin_table + GLOBAL snd_ptable + GLOBAL snd_vtable + GLOBAL snd_data_start + GLOBAL snd_data_end + +snd_data_start +snd_ptable + INCBIN snd_ptable.bin +snd_vtable + INCBIN snd_vtable.bin +snd_sin_table + INCBIN snd_sinetable.bin +snd_data_end + + + END + + diff --git a/trunk/IrisSubp/IrisSubpMon/crt0Arm.s b/trunk/IrisSubp/IrisSubpMon/crt0Arm.s new file mode 100644 index 0000000..7e8af51 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/crt0Arm.s @@ -0,0 +1,370 @@ +;******************************************************************** +; IRIS-SUBPj^vO X^[gAbv[` +;******************************************************************** + + AREA Init, CODE, READONLY + + INCLUDE IrisSubpDefineArm.s + INCLUDE IrisSubpMemoryMapArm.s + + INCLUDE IrisSubpMonDefineArm.s + INCLUDE IrisSubpMonMemoryMapArm.s + + + ENTRY +;==================================================================== +; 荞ݗ̈ +;==================================================================== + EXTERN start_handler + EXTERN swi_handler + EXTERN irq_handler + EXTERN fiq_handler + CODE32 +start_v b start_m ; NULL|C^ʒũR[hsςɂ邽 +undef_v b fiq_handler +swi_v b swi_handler +code_abort_v b fiq_handler +data_abort_v b fiq_handler +reserve_v b fiq_handler +irq_v b irq_handler +fiq_v b fiq_handler + +start_m b start_handler + + + IF :DEF: DISABLE_SECURE_CODE + ELSE + +; PNf[^ + + GLOBAL default_pnB_l + GLOBAL default_pnB_h + GLOBAL default_pnA_l_0_table + GLOBAL default_pnA_l_1 +default_pnB_l + DCD 0x879b9b05 +default_pnB_h + DCB 0x5c +default_pnA_l_1 + DCB 0x60 +default_pnA_l_0_table + DCB 0xe8, 0x4d, 0x5a, 0xb1, 0x17, 0x8f + + +; Blowfishf[^ + + IF :DEF: ENABLE_TEST_BLOWFISH + + INCLUDE BlowfishTestTable.s + ELSE + INCLUDE BlowfishInitTable.s + + ENDIF ; ENABLE_TEST_BLOWFISH + + + GLOBAL segmentIndexTable4Secure +segmentIndexTable4Secure + DCB 4_0132, 4_0213, 4_0231, 4_0312 ; - 4_0123, 4_0321 + DCB 4_1023, 4_1203, 4_1302, 4_1320 ; - 4_1032, 4_1230 + DCB 4_2103, 4_2130, 4_2301, 4_2310 ; - 4_2013, 4_2031 + DCB 4_3012, 4_3021, 4_3120, 4_3201 ; - 4_3102, 4_3210 + + GLOBAL normal_mode_key +normal_mode_key + DCB "NmMdOnly" + + GLOBAL png_off_key +png_off_key + DCB "enPngOFF" + + GLOBAL encrypt_object_key +encrypt_object_key + DCB "encryObj" + + +; SIOnhVFCNf[^ + + ALIGN + GLOBAL sio_send_code + GLOBAL sio_recv_code + GLOBAL sio_add_code +sio_send_code + DCW 0x4e54 +sio_recv_code + DCW 0x4944 +sio_add_code + DCW 0x524f + + + ENDIF ; DISABLE_SECURE_CODE + + +;-------------------------------------------------------------------- +; ÍL[ϊir0=ÍL[j +;-------------------------------------------------------------------- + + IF :DEF: DISABLE_SECURE_CODE + ELSE + + GLOBAL ChangeEncryptKey1 + GLOBAL ChangeEncryptKey2 + GLOBAL ChangeEncryptKey3 + GLOBAL ChangeEncryptKey4 + ALIGN + CODE32 +ChangeEncryptKey1 + mov r0, r0, lsr #1 + b CheckLR2Return + +ChangeEncryptKey2 + mov r0, r0, lsl #1 + b CheckLR2Return + +ChangeEncryptKey3 + mov r0, r0, lsl #1 + b CheckLR2Return + +ChangeEncryptKey4 + mov r0, r0, lsr #1 + b CheckLR2Return + +CheckLR2Return + tst lr, #0xff000000 + + movne r0, #0 + movne lr, #4 + bx lr + + ENDIF ; DISABLE_SECURE_CODE + +;-------------------------------------------------------------------- +; ÍtbN֐Q +;-------------------------------------------------------------------- + + IF :DEF: DISABLE_SECURE_CODE + ELSE + + EXTERN InitSecureParam + EXTERN MakeBlowfishTable + EXTERN InitBlowfishKeyAnaTable + EXTERN InitBlowfish + EXTERN EncryptByBlowfish + EXTERN DecryptByBlowfish + EXTERN DecryptObjectFile + EXTERN ChangeObjectTable + EXTERN CopyBiosArea + EXTERN CpuSetFast32 + GLOBAL InitSecureParamFook + GLOBAL MakeBlowfishCardTable + GLOBAL MakeBlowfishFlashTable + GLOBAL InitBlowfishKeyAnaTableFook + GLOBAL InitBlowfishFook + GLOBAL EncryptByBlowfishFook0 + GLOBAL EncryptByBlowfishFook1 + GLOBAL EncryptByBlowfishFook2 + GLOBAL DecryptByBlowfishFook + GLOBAL DecryptObjectFileFook + GLOBAL ChangeObjectTableFook + GLOBAL CopyBiosAreaFook + GLOBAL CpuSetFast32Fook + ALIGN + CODE32 +InitSecureParamFook + ldr r12, =InitSecureParam + b CheckLR2CallR12 + +MakeBlowfishCardTable + mov r3, #8 + ldr r12, =MakeBlowfishTable + b CheckLR2CallR12 + +MakeBlowfishFlashTable + mov r3, #12 + ldr r12, =MakeBlowfishTable + b CheckLR2CallR12 + +InitBlowfishKeyAnaTableFook + ldr r12, =InitBlowfishKeyAnaTable + b CheckLR2CallR12 + +InitBlowfishFook + ldr r12, =InitBlowfish + b CheckLR2CallR12 + +EncryptByBlowfishFook0 + ldr r12, =EncryptByBlowfish + b CheckLR2CallR12 + +EncryptByBlowfishFook1 + mov r2, r1 + add r1, r1, #4 + ldr r12, =EncryptByBlowfish + b CheckLR2CallR12 + +EncryptByBlowfishFook2 + add r2, r1, #4 + add r1, r1, #8 + ldr r12, =EncryptByBlowfish + b CheckLR2CallR12 + +DecryptByBlowfishFook + mov r2, r1 + add r1, r1, #4 + ldr r12, =DecryptByBlowfish + b CheckLR2CallR12 + +DecryptObjectFileFook + ldr r12, =DecryptObjectFile + b CheckLR2CallR12 + +ChangeObjectTableFook + mov r0, #8 + ldr r12, =ChangeObjectTable + b CheckLR2CallR12 + +CopyBiosAreaFook + ldr r12, =CopyBiosArea + b CheckLR2CallR12 + +CpuSetFast32Fook + ldr r12, =CpuSetFast32 + b CheckLR2CallR12 + +CheckLR2CallR12 + tst lr, #0xff000000 + bxeq r12 + + mov r12,#0 + mov r3, #0 + mov r2, #0 + mov r1, #0 + mov r0, #0 + mov lr, #4 + bx lr + + + ENDIF ; DISABLE_SECURE_CODE + + +;-------------------------------------------------------------------- +; IPL2Ăяo֐|C^l +;-------------------------------------------------------------------- + EXTERN CalledFormIPL2 + EXTERN CardIntr + GLOBAL GetFuncp4IPL2 + CODE16 +GetFuncp4IPL2 + ldr r2, eor_code + ldr r0, =CalledFormIPL2 + ldr r1, =CardIntr + ldr r3, =SetPause2Agb + eor r3, r3, r0 + eor r0, r0, r1 + eor r1, r1, r2 + bx lr + + ALIGN +eor_code + DCB "I2\0\0" ; EORR[h + + + +;-------------------------------------------------------------------- +; `FbNtO Zbg +;-------------------------------------------------------------------- + GLOBAL SetPauseCheckFlag + CODE16 +SetPauseCheckFlag + mov r1, #1 + ldr r2, =REG_PAUSE + strb r1, [r2, #0] + bx lr + +;-------------------------------------------------------------------- +; `fa[hJ +;-------------------------------------------------------------------- + GLOBAL SetPause2Agb + ALIGN + CODE32 +SetPause2Agb mov r2, #0x40 + b SetPauseHi +;-------------------------------------------------------------------- +; g`ks +;-------------------------------------------------------------------- + GLOBAL Halt + CODE32 +Halt mov r2, #0x80 + b SetPauseHi +;-------------------------------------------------------------------- +; rsno +;-------------------------------------------------------------------- + GLOBAL Stop + GLOBAL SetPauseHi + CODE32 +Stop mov r2, #0xc0 +SetPauseHi mov r12, #REG_BASE + strb r2, [r12, #OFFSET_REG_PAUSE + 1] + nop + nop + bx lr + + LTORG ; L̃ev[B + + + GLOBAL SecureAreaEndp +SecureAreaEndp + + + IF :DEF: ENABLE_WRITE_FLASH + + GLOBAL flashTestHeader +flashTestHeader + DCD 0 ; MACAhX Low + DCW 0 ; High + DCW 0xc401 ; CRC16bit + DCB "MACP" ; BlowfishL[f[^ + DCW 0x100/8 ; ARM9-FLASHItZbg + DCW 0x20000/8 ; ARM9-RAMItZbg + + DCW 0x10000/8 ; ARM7-FLASHItZbg + DCW 0x8000/8 ; ARM7-RAMItZbg + DCW 8_01111 ; E2bit x 4 & ARM7-ARMzutO & \7bit + DCW 0 ; \2Byte + + DCD 0 ; 0x9e0d35bd ; XNuL[i8oCgj + DCD 0 ; 0x2560ac91 + + + GLOBAL arm9ipl2 + GLOBAL arm9ipl2_end + ALIGN +arm9ipl2 + + IF :DEF: DISABLE_SECURE_CODE + + INCBIN ipl2_test.lz + ELSE + INCBIN ipl2_test.ipl2 + + ENDIF ; DISABLE_SECURE_CODE + +arm9ipl2_end + GLOBAL arm7ipl2 + GLOBAL arm7ipl2_end + ALIGN +arm7ipl2 + IF :DEF: DISABLE_SECURE_CODE + + INCBIN subp_ipl2_test.lz + ELSE + INCBIN subp_ipl2_test.ipl2 + + ENDIF ; DISABLE_SECURE_CODE +arm7ipl2_end + + ENDIF ; ENABLE_WRITE_FLASH + + + END + + diff --git a/trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s b/trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s new file mode 100644 index 0000000..bff303c --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s @@ -0,0 +1,725 @@ +;******************************************************************** +; IRIS-SUBPj^vO Tu[`Q +;******************************************************************** + + AREA IrisSubpCrt0Sub, CODE, READONLY + + INCLUDE IrisSubpDefineArm.s + INCLUDE IrisSubpMemoryMapArm.s + + INCLUDE IrisSubpMonDefineArm.s + INCLUDE IrisSubpMonMemoryMapArm.s + +MON_ONLY +NDEBUG2 + +;-------------------------------------------------------------------- +; 荞ݕ򏈗 +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL intr_main + EXTERN intrTable + ALIGN + CODE32 +intr_main + mov r12, #REG_BASE ; IE/IF `FbN + add r3, r12, #OFFSET_REG_IE ; r3: REG_IE + ldmia r3, {r1-r2} + and r1, r1, r2 ; r1: IE & IF + mov r2, #0 + ands r0, r1, #CARD_DATA_INTR_FLAG ; J[hf[^]I 荞 + bne jump_intr + add r2, r2, #4 + ands r0, r1, #TIMER3_INTR_FLAG ; J[h^C}[ 荞 + bne jump_intr + add r2, r2, #4 + ands r0, r1, #V_BLANK_INTR_FLAG ; VuN 荞 +jump_intr + str r0, [r3, #REG_IF - REG_IE] ; IF NA + ldr r1, =intrTable ; [UIRQփWv + add r1, r1, r2 + ldr r0, [r1] + bx r0 + + +;----------------------------------------------------------------------- +; [v҂ir0=loopCountj +;----------------------------------------------------------------------- + GLOBAL WaitByLoop + ALIGN + CODE16 +WaitByLoop + sub r0, #1 + bgt WaitByLoop + + bx lr + +;-------------------------------------------------------------------- +;- uuN荞݃EFCg - +;-------------------------------------------------------------------- + GLOBAL WaitVBlankIntr + ALIGN + CODE32 +WaitVBlankIntr mov r0, #1 + mov r1, #V_BLANK_INTR_FLAG +;-------------------------------------------------------------------- +; 荞݃EFCgir0=initCheckClear, r1=intrFlagj +;-------------------------------------------------------------------- + GLOBAL WaitIntr + CODE32 +WaitIntr stmfd sp!, {lr} + + cmp r0, #0 + blne WaitIntr_sub ; IfCheck ر + +0 + mov lr, #0x80 + strb lr, [r12,#REG_PAUSE+1 - REG_BASE] ; SVC_Halt() REG_PAUSE = 0x80 + nop + nop + bl WaitIntr_sub + beq %b0 ; while (!(IfCheck & IfFlags)) + + ldmfd sp!, {lr} + bx lr + +WaitIntr_sub + IF :DEF: BB_MON + ldr r12,=CPU_WRAM_END + ELSE + mov r12,#REG_BASE ; r12: #REG_BASE + ENDIF + str r12,[r12,#REG_IME - REG_BASE] ; IME = 0 + + ldr r2, [r12, #INTR_CHECK_BUF - CPU_WRAM_END] + ands r0, r1, r2 ; IfCheck + eorne r2, r2, r0 ; IfCheck ر + strne r2, [r12, #INTR_CHECK_BUF - CPU_WRAM_END] + + mov r0, #1 + str r0, [r12,#REG_IME - REG_BASE] ; IME = 1 + + bx lr + + +;-------------------------------------------------------------------- +; TEhah`r ύX (r0=up_down, r1=stepLoops) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL ChangeSoundBias16 + CODE16 +ChangeSoundBias16 + +1 mov r2, #2 ; r12: 0x200 + lsl r2, #8 + mov r12, r2 + + ldr r3, =REG_SOUNDBIAS ; r3: soundBiasp = REG_SOUNDBIAS + ldrh r2, [r3, #0] ; r2: *soundBiasp + ldr r3, =REG_SOUNDBIAS + cmp r0, #0 ; if (up_down) + beq %f2 + + cmp r2, r12 ; if (*soundBiasp >= 0x200) break; + bge %f5 + + add r2, #1 ; *soundBiasp += 1 + b %f3 + +2 cmp r2, #0 ; if (*soundBiasp <= 0) break; + ble %f5 + + sub r2, #1 ; *soundBiasp -= 1 + +3 strh r2, [r3, #0] + + mov r2, r1 ; for (i=stepLoops; --i>=0; ) ; + +4 sub r2,#1 + bpl %b4 + b %b1 + +5 bx lr + +; ENDIF + + +;-------------------------------------------------------------------- +; BIOS̈pRs[ (r0=srcp, r1=destp, r2=size) +;-------------------------------------------------------------------- + EXTERN SecureAreaEndp + GLOBAL CopyBiosArea + +CopyBiosArea + add r2, r1 +1 + ldr r3, =SecureAreaEndp + cmp r0, r3 + bge %b2 + + ldmia r0!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))++ + stmia r1!, {r3} + cmp r1, r2 + blt %b1 + +2 mov pc, lr + + +;-------------------------------------------------------------------- +; ZLeBEL[@@NintendoS Rs[ +;-------------------------------------------------------------------- + IF :DEF: TEST_AGB_MODE +KEY_START_BLOCK_NO * 3 ; ۯNo + EXTERN NinLogoBak +; EXTERN NinLogoCopy + EXTERN DacsCheck + GLOBAL key_unlock__nin_logo_copy + CODE16 +key_unlock__nin_logo_copy + push {r3, r4-r6, lr} + mov r6, #0x8 ; r6: ROM_BANK0 + lsl r6, #24 + mov r5, #MON_KEY_GROUP_NO - CARTRIDGE + add r5, r6 ; r5: MON_KEY_GROUP_NO + sub r0, r5, #1 ; r4: No ̾ Zo + mov r1, #27 ; Srcp=MON_KEY_GROUP_NO-1,Count=27 + bl GetKeyNo +; mov r0, #2 ; а No + mov r4, #2*6 + mul r4, r0 + ldrb r3, [r5] ; r3: ٰ No(0-3) * 48 +; lsl r3, #32-2 ;(r2: ٰ ̾ČŒ аǂݍ) +; lsr r3, #32-2 +; mov r2, #2*6*4 +; mul r2, r3 +; add r4, r2 ; r4: No Zo (ٰ ̾ĉZ) + adr r5, key_addr ; r5: ڽ + add r5, r4 + mov r4, #0 +nin_copy mov r0, r4 + bl NinLogoCopy ; Nintendoۺ ߰ (20*10Byte) + cmp r4, #KEY_START_BLOCK_NO + blt key_unlock_end + cmp r4, #KEY_START_BLOCK_NO + 6 + bge key_unlock_end +key_unlock ldrh r1, [r5] ; r1: ڽ ǂݍ + lsl r1, #1 + orr r1, r6 + ldrh r0, [r1] + add r5, #2 +key_unlock_end add r4, #1 + cmp r4, #11 + bne nin_copy + + pop {r3, r4-r6, pc} + + INCLUDE crt0KeyAddr.s + + ENDIF + +;-------------------------------------------------------------------- +; L[m Zo (r0=Srcp, r1=Count r0=KeyNo:2) +;-------------------------------------------------------------------- + IF :DEF: TEST_AGB_MODE + GLOBAL GetKeyNo + CODE16 +GetKeyNo push {r4, r5, lr} + mov r4, #3 ; r4: Ror + mov r3, #0 ; r3: KeyNo +GetKeyNo_10 ldrb r2, [r0, #0] ; r2: *Srcp + ror r3, r4 + mov r5, #4 ; r5: RorCount +GetKeyNo_20 eor r3, r2 + lsl r2, #8 + sub r5, #1 ; while (--RorCount > 0) + bgt GetKeyNo_20 + add r0, #1 + sub r1, #1 ; while (--Count > 0) + bgt GetKeyNo_10 + mov r0, r3 + lsl r0, #32-5 + lsr r0, #32-2 + pop {r4, r5, pc} + ENDIF + +;-------------------------------------------------------------------- +; mhmsdmcnS Rs[ (r0=BlockNo) +;-------------------------------------------------------------------- + IF :DEF: TEST_AGB_MODE + GLOBAL NinLogoCopy + CODE16 +NinLogoCopy push {r4, lr} + mov r4, #20 ; r4: BlockOffset = BlockNo * 20 + mul r4, r0 + mov r3, #0x8 ; r3: ROM_BANK0 + lsl r3, #24 + + add r0, r3, #4 ; r0: &((u8 *)ROM_BANK0)[BlockOffset + OFFSET_MON_NINLOGO] + add r0, r4 + ldr r1, =NinLogoBak+36 ; r1: &NinLogoBak[BlockOffset + 36] + add r1, r4 + mov r2, #10 ; r2: 0x0000000A (16bit]10) + bl CpuSet16_32 ; CpuCopy16_32() + pop {r4, pc} + ENDIF + + + LTORG + + +;-------------------------------------------------------------------- +; ėptZir0/r1r0',r0%r1r1',|r0'|r3'j +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL DivS32 + ALIGN + CODE32 +DivS32 ands r3, r1, #0x80000000 ; r1: ̐Βl + rsbmi r1, r1, #0 + eors r12,r3, r0, asr #32 ; r12: d31=ʂ̕,d30=폜̕ + rsbcs r0, r0, #0 ; r0: 폜̐Βl + movs r2, r1 ; r2: Rg[Erbg +; beq devide_by_zero + +divide_just_l cmp r2, r0, lsr #1 + movls r2, r2, lsl #1 + blo divide_just_l + +divide_div_l cmp r0, r2 ; Zł邩`FbN + adc r3, r3, r3 ; r3*2 + L[ + subcs r0, r0, r2 ; Z”\Ȃ猸Z + teq r2, r1 ; I`FbN + movne r2, r2, lsr #1 ; IłȂ΂QŊă`FbN + bne divide_div_l + mov r1, r0 + mov r0, r3 + + movs r12,r12,lsl #1 + rsbcs r0, r0, #0 + rsbmi r1, r1, #0 + + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; Zoir0=paramj +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL SqrtU32 + ALIGN + CODE32 +SqrtU32 stmfd sp!, {r4} + + mov r12,r0 ; r12: ParamBak + mov r1, #1 + +1 cmp r0, r1 + movhi r0, r0, lsr #1 + movhi r1, r1, lsl #1 + bhi %b1 + +2 mov r0, r12 ; r0: 폜 + mov r4, r1 ; r1: + mov r3, #0 ; r3: + mov r2, r1 ; r2: Rg[Erbg + +3 cmp r2, r0, lsr #1 + movls r2, r2, lsl #1 + blo %b3 + +4 cmp r0, r2 ; Zł邩`FbN + adc r3, r3, r3 ; r3*2 + L[ + subcs r0, r0, r2 ; Z”\Ȃ猸Z + teq r2, r1 ; I`FbN + movne r2, r2, lsr #1 ; IłȂ΂QŊă`FbN + bne %b4 + + add r1, r1, r3 + movs r1, r1, lsr #1 + cmp r1, r4 + bcc %b2 + + mov r0, r4 + ldmfd sp!, {r4} + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; bot Zbg (r0=srcp, r1=destp, r2=dmaCntData) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL CpuSet16_32 + CODE16 +CpuSet16_32 push {r4, r5, lr} + + lsl r4, r2, #11 ; r4: size = (dmaCntData & 0x1fffff)*4 + lsr r4, #11-2 + + bl CheckSrcp16_32 ; ڽ + IF :DEF: CHECK_PROT_ADDR + ELSE + beq %f6 + ENDIF + +0 mov r5, #0 ; r5: i = 0 + + lsr r3, r2, #27 ; if ((dmaCntData) & DMA_32BIT_BUS) + bcc %f3 + + add r5, r1, r4 ; r5: destEndp = destp + size + + lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX) + bcc %f2 + + ldmia r0!, {r3} +1 cmp r1, r5 ; while (destp < destEndp) + bge %f6 + stmia r1!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp)) + b %b1 + +2 cmp r1, r5 ; while (destp < destEndp) + bge %f6 + ldmia r0!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))++ + stmia r1!, {r3} + b %b2 + +3 lsr r4, #1 + + lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX) + bcc %f5 + + ldrh r3, [r0, #0] +4 cmp r5, r4 ; for ( ; isrcNum + + movs r12, r7 ; r12: srcCount + bl CheckSrcp ; ڽ + beq %f6 + +0 ldrb r6, [r2, #2] ; r6: srcBitNum = unPackBitsParamp->srcBitNum + rsb r10, r6, #8 ; r10: srcBitNumInv = 8 - srcBitNum + mov r14, #0 ; r14: destBak = 0 + ldr r11, [r2, #4] ; r8: destOffset0_On + mov r8, r11, lsr #31 ; = unPackBitsParamp->destOffset0_On + ldr r11,[r2, #4] ; destOffset = unPackBitsParamp->destOffset + mov r11,r11, lsl #1 + mov r11,r11, lsr #1 + str r11,[sp, #0] + ldrb r2, [r2, #3] ; r2: destBitNum = unPackBitsParamp->destBitNum + mov r3, #0 ; r3: destBitCount = 0 + +1 subs r7, r7, #1 ; while (--srcNum >= 0) + blt %f6 + + mov r11, #0xff ; r5: srcMask = 0xff >> srcBitNumInv + mov r5, r11, asr r10 + ldrb r9, [r0], #1 ; r9: srcTmp = *srcp++ + mov r4, #0 ; r4: srcBitCount = 0 + +2 cmp r4, #8 ; while (srcBitCount < 8) + bge %b1 + + and r11, r9, r5 ; r12: destTmp = ((srcTmp&srcMask) >>srcBitCount) + movs r12, r11, lsr r4 + cmpeq r8, #0 + beq %f4 + +3 ldr r11, [sp, #0] ; destTmp += destOffset + add r12, r12, r11 +4 orr r14, r14, r12, lsl r3 ; destBak |= destTmp << destBitCount + add r3, r3, r2 ; destBitCount += destBitNum + + cmp r3, #0x20 ; if (destBitCount >= 32) + blt %f5 + + str r14, [r1], #4 ; *destp++ = destBak + mov r14, #0 ; destBak = 0 + mov r3, #0 ; destBitCount = 0 + +5 mov r5, r5, lsl r6 ; srcMask <<= srcBitNum + add r4, r4, r6 ; srcBitCount += srcBitNum + b %b2 + +6 add sp, sp, #4 + ldmfd sp!, {r4-r11, lr} + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; kyVVf[^WJi8Bit8Bitj(r0=srcp, r1=destp) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL UnCompLZ77Byte + ALIGN + CODE32 +UnCompLZ77Byte + stmfd sp!, {r4-r6, lr} + + ldr r5, [r0], #4 ; r2: destCount = *(u32 *)srcp >> 8 + mov r2, r5, lsr #8 ; r0: srcp += 4 + + movs r12, r2 ; r12: srcCount + bl CheckSrcp ; ڽ + beq %f6 + +1 cmp r2, #0 ; while (destCount > 0) + ble %f6 + + ldrb r14, [r0], #1 ; r14: flags = *srcp++ + mov r4, #8 ; for (i=8; --i>=0; ) +2 subs r4, r4, #1 + blt %b1 + + tst r14, #0x80 ; if (!(flags & 0x80)) + bne %f3 + + ldrb r6, [r0], #1 ; *srcp++ + strb r6, [r1], #1 ; r1: *destp++ + sub r2, r2, #1 ; destCount-- + b %f5 + +3 ldrb r5, [r0, #0] ; r3: length = (*srcp >> 4) + 3 + mov r6, #3 + add r3, r6, r5, asr #4 + ldrb r6, [r0], #1 ; r12: offset = (*srcp++ & 0x0f) << 8 + and r5, r6, #0xf + mov r12,r5, lsl #8 + ldrb r6, [r0], #1 ; offset = (offset | *srcp++) + 1 + orr r5, r6, r12 + add r12, r5, #1 + sub r2, r2, r3 ; destCount -= length + +4 ldrb r5, [r1, -r12] ; *destp++ = destp[-offset] + strb r5, [r1], #1 + subs r3, r3, #1 ; while (--length > 0) + bgt %b4 + +5 cmp r2, #0 ; if (destCount <= 0) break; + movgt r14, r14, lsl #1 ; flags <<= 1 + bgt %b2 + b %b1 + +6 ldmfd sp!, {r4-r6, lr} + bx lr +; ENDIF + + +;-------------------------------------------------------------------- +; OXf[^WJi8Bit8Bitj(r0=srcp, r1=destp) +;-------------------------------------------------------------------- +; IF :DEF: SYSCALL_ASM + GLOBAL UnCompRLByte + CODE16 +UnCompRLByte + push {r4-r7, lr} + + ldmia r0!, {r3} ; r7: destCount = *(u32 *)srcp >> 8 + lsr r7, r3, #8 ; r0: srcp += 4 + + mov r4, r7 ; r4: count + bl CheckSrcp16_32 ; ڽ + beq %f5 + +1 cmp r7, #0 ; while (destCount > 0) + ble %f5 + + ldrb r4, [r0, #0] ; r4: flags = *srcp++ + add r0, #1 + lsl r2, r4, #25 ; r2: length = flags & 0x7f + lsr r2, #25 + lsr r3, r4, #8 ; if (!(flags & 0x80)) + bcs %f3 + + add r2, #1 ; length++ + sub r7, r2 ; destCount -= length +2 ldrb r3, [r0, #0] ; *destp++ = *srcp++ + strb r3, [r1, #0] + add r0, #1 + add r1, #1 + sub r2, r2, #1 ; while (--length > 0) + bgt %b2 + b %b1 + +3 add r2, #3 ; length += 3 + sub r7, r2 ; destCount -= length + ldrb r5, [r0, #0] ; srcTmp = *srcp++ + add r0, #1 +4 strb r5, [r1, #0] ; *destp++ = srcTmp + add r1, #1 + sub r2, r2, #1 ; while (--length > 0) + bgt %b4 + b %b1 + +5 pop {r4-r7} + pop {r0} +; ENDIF +;-------------------------------------------------------------------- +; r0WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r0 + CODE16 +__call_via_r0 bx r0 + + +;-------------------------------------------------------------------- +; r1WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r1 + CODE16 +__call_via_r1 bx r1 + + +;-------------------------------------------------------------------- +; r2WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r2 + CODE16 +__call_via_r2 bx r2 + + +;-------------------------------------------------------------------- +; r3WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r3 + CODE16 +__call_via_r3 bx r3 + +;-------------------------------------------------------------------- +; r4WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r4 + CODE16 +__call_via_r4 bx r4 + +;-------------------------------------------------------------------- +; r5WX^ɂ郋[`Ăяo +;-------------------------------------------------------------------- + GLOBAL __call_via_r5 + CODE16 +__call_via_r5 bx r5 + + + + END + diff --git a/trunk/IrisSubp/IrisSubpMon/crt0subExceptions.s b/trunk/IrisSubp/IrisSubpMon/crt0subExceptions.s new file mode 100644 index 0000000..8d11f45 --- /dev/null +++ b/trunk/IrisSubp/IrisSubpMon/crt0subExceptions.s @@ -0,0 +1,336 @@ +;******************************************************************** +; IRIS-SUBPj^Onh +;******************************************************************** + + AREA Init, CODE, READONLY + INCLUDE IrisSubpDefineArm.s + INCLUDE IrisSubpMemoryMapArm.s + + INCLUDE IrisSubpMonDefineArm.s + INCLUDE IrisSubpMonMemoryMapArm.s + + +;==================================================================== +; OnhQ +;==================================================================== + +;-------------------------------------------------------------------- +; fobKj^փWv +;-------------------------------------------------------------------- + GLOBAL fiq_handler + CODE32 +fiq_handler + mrs sp, cpsr ; IRQ/FIQs + orr sp, sp, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE + msr cpsr_cxsf, sp + + ldr sp, fiq_sp ; SP ̾ + add sp, sp, #1 + +fiq_m stmfd sp!, {r12, lr} ; ڼ޽ ̑ޔiv3ܰށj + mrs lr, spsr + stmfd sp!, {lr} + + bic r12, sp, #1 ; ޯޏּެ + ldr r12, [r12, #12] + adr lr, fiq_return + cmp r12, #0 + bxne r12 +;-------------------------------------------------------------------- +; fobKj^̕A +;-------------------------------------------------------------------- + CODE32 +fiq_return + ldmfd sp!, {lr} ; ڼ޽ ̕A + msr spsr_sxcf, lr + ldmfd sp!, {r12, lr} + subs pc, lr, #4 + + +;-------------------------------------------------------------------- +; +;-------------------------------------------------------------------- + EXTERN IrisSubpMonMain + EXTERN intr_main + GLOBAL start_handler + CODE32 +start_handler + cmp lr, #0 ; fiq_return => pc = -4 ΍ + moveq lr, #4 + + mov r12, #REG_BASE ; /հ + ldrb r12, [r12, #OFFSET_REG_PAUSE] + teq r12, #1 + + mrseq r12, cpsr ; IRQ/FIQs + orreq r12, r12, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE + msreq cpsr_cxsf, r12 + ldreq sp, fiq_sp ; SP ̾ + beq fiq_m ; ޯּެ + +restart_v mov r0, #0xc0 | PSR_SYS_MODE ; Ӱނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + + mov r4, #REG_BASE ; IME ؾ + strb r4, [r4, #OFFSET_REG_IME] + + bl bankreg_init_stack_clear ; ݸڼ޽ ؾ & ̈ ر + ldr r0, =intr_main ; 荞ݱڽ̾ + str r0, [r4, #INTR_VECTOR_BUF - CPU_WRAM_END] +; str r0, [sp, #0x100-4] + + ldr r0, =IrisSubpMonMain ; Cٰݏ + adr lr, main_return + bx r0 + +main_return + bl terminate_mon ; I + + ldr r12, =MAIN_MEM_EX_END ; հޥ߲ l + + IF :DEF: DISABLE_ENTRY_OF_ROM_HEADER + ldr lr, [r12, #-(0x200 - 0x38)] ; rmhp->arm7->ramAddr + ELSE + ldr lr, [r12, #-(0x200 - 0x34)] ; rmhp->arm7->entryAddr + ENDIF + + IF :DEF: DISABLE_BOOT_IPL2 + + ldrh r0, [r12, #-4] ; ROMͯ + cmp r0, #1 +0 beq %b0 ; ROMͯޕs + sub r12, r12, #0x800 + ldrh r0, [r12, #0x14] ; ޯ + add r12, r12, #0x800 + cmp r0, #1 ; if (!shwp->isOnDebugger) + mov r0, #0 + ldreq r12, [r12, #-(0x200 - 0x16c)]; ޯ޴߲ l +; cmpeq r12, #0 ; rmhp->dbgArm7RamAddr +; cmpeq r12, #-1 + bxeq r12 + + IF :DEF: IRIS_BB +0 b %b0 ; گްފJp + ENDIF + mov r0, #0 + bx lr + + ELSE + sub r12, r12, #0x800 + ldrh r0, [r12, #0x2c] ; IPL2CRC`FbN + cmp r0, #0 ; if (!shwp->flashCrcError) +0 bne %b0 + + ldr r12, [r12, #0x24] ; IPL2߲ l + cmp r12, #0 ; shwp->flashArm7RamAddr +0 beq %b0 + bx r12 + + ENDIF + + +;-------------------------------------------------------------------- +; \tgZbg +;-------------------------------------------------------------------- + CODE32 +soft_reset + bl terminate_mon ; I + + ldr r12, =MAIN_MEM_EX_END ; հޥ߲ l + ldr lr, [r12, #-(0x200 - 0x34)] + mov r12, #0 + bx lr + + +;-------------------------------------------------------------------- +; j^vOI +;-------------------------------------------------------------------- + CODE32 +terminate_mon + mov r12, lr + + mov r0, #PSR_SYS_MODE ; IRQ/FIQ + msr cpsr_cxsf, r0 + + bl bankreg_init_stack_clear ; ݸڼ޽ ؾ & ̈ ر + + ldmea r4, {r0-r11} ; ėpڼ޽ ر + + bx r12 + + +;-------------------------------------------------------------------- +; oNWX^ Zbg X^bN̈ NA +;-------------------------------------------------------------------- + GLOBAL bankreg_init_stack_clear + CODE32 +bankreg_init_stack_clear + mov r0, #0xc0 | PSR_SVC_MODE ; SVCӰނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + ldr sp, svc_sp ; SP ̾ + mov lr, #0 + msr spsr_csxf, lr + mov r0, #0xc0 | PSR_IRQ_MODE ; IRQӰނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + ldr sp, irq_sp ; SP ̾ + mov lr, #0 + msr spsr_cxsf, lr + mov r0, #0x40 | PSR_SYS_MODE ; Ӱނ֐؂芷 & IRQ/FIQs + msr cpsr_cxsf, r0 + ldr sp, usr_sp ; SP ̾ + +stack_clear + IF :DEF: BB_MON + ldr r4, =CPU_WRAM_END + ELSE + mov r4, #REG_BASE ; r4: REG_BASE + ENDIF ; BB_MON + adr r0, stack_clear_10 + 1 + bx r0 + CODE16 +stack_clear_10 mov r0, #0 + ldr r1, =-4*128 +1 str r0, [r4, r1] + add r1, #4 + blt %b1 + bx lr + + +;-------------------------------------------------------------------- +; hqpփWv +;-------------------------------------------------------------------- + GLOBAL irq_handler + ALIGN + CODE32 +irq_handler + stmfd sp!, {r0-r3,r12,lr} ; ڼ޽ ̑ޔi6ܰށj +; ldr r0, =CPU_WRAM_END + mov r0, #REG_BASE + adr lr, irq_return + ldr pc, [r0, #-4] ; 32bitނżެ +; ldr r1, [r0, #-4] ; 32bitނżެ +; bx r1 +;-------------------------------------------------------------------- +; hqp̕A +;-------------------------------------------------------------------- + CODE32 +irq_return ldmfd sp!, {r0-r3,r12,lr} ; ڼ޽ ̕A + subs pc, lr, #4 + + +;-------------------------------------------------------------------- +; VXeR[փWv +;-------------------------------------------------------------------- + GLOBAL swi_handler + CODE32 +swi_handler + stmfd sp!, {r11, r12, lr} ; SVCӰ ڼ޽ޔ + ldrh r12, [lr, #-2] ; ѺNo 擾iʰܰޱΉ^BBj + and r12, r12, #0xff + adr r11, sys_table ; Ѻ٥ڽ 擾 + ldr r12, [r11, r12, lsl #2] + mrs r11, spsr ; SVCӰ SPSRޔiv4ܰށj + stmfd sp!, {r11} + and r11, r11, #PSR_IRQ_DISABLE ; IRQ ߰ + orr r11, r11, #PSR_SYS_MODE ; Ӱނ֐؂芷 & FIQ + msr cpsr_cxsf,r11 + + stmfd sp!, {r2, lr} ; Ӱ ڼ޽ޔi2ܰށj + adr lr, swi_return + bx r12 ; ނ̐؊Ƽެ +;-------------------------------------------------------------------- +;- VXeR[̕A 18c - +;-------------------------------------------------------------------- + GLOBAL swi_return + CODE32 +swi_return ldmfd sp!, {r2, lr} ; Ӱ ڼ޽A + mov r12, #0xc0 | PSR_SVC_MODE ; SVCӰނ֐؂芷 + msr cpsr_cxsf, r12 ; & IRQ/FIQs + + ldmfd sp!, {r11} ; SVCӰ ڼ޽A + msr spsr_cxsf, r11 + ldmfd sp!, {r11, r12, lr} + movs pc, lr + + + +;==================================================================== +; AhXe[u +;==================================================================== + ALIGN +usr_sp DCD CPU_WRAM_END - 0x100 +irq_sp DCD CPU_WRAM_END - 0x50 +svc_sp +fiq_sp DCD CPU_WRAM_END - 0x24 + + EXTERN AccessCard + + EXTERN WaitByLoop + EXTERN WaitIntr + EXTERN WaitVBlankIntr + EXTERN Halt + EXTERN Stop + EXTERN SetPauseHi + + EXTERN ChangeSoundBias16 + EXTERN IsMmem8MB + EXTERN GetCRC16 + + EXTERN DivS32 + EXTERN SqrtU32 + + EXTERN CpuSet16_32 + EXTERN CpuSetFast32 + EXTERN UnPackBits32 + EXTERN UnCompLZ77Byte + EXTERN UnCompLZ77Short + EXTERN UnCompHuffman32 + EXTERN UnCompRLByte + EXTERN UnCompRLShort + + EXTERN GetSoundSinTable + EXTERN GetSoundPitchTable + EXTERN GetSoundVolumeTable + + EXTERN GetFuncp4IPL2 +sys_table + DCD soft_reset ; 0 + DCD 0 ; 1 + + DCD 0 ; 2 + DCD WaitByLoop ; 3 + DCD WaitIntr ; 4 + DCD WaitVBlankIntr ; 5 + DCD Halt ; 6 + DCD Stop ; 7 + DCD ChangeSoundBias16 ; 8 + + DCD DivS32 ; 9 + DCD 0 ; 10 + DCD CpuSet16_32 ; 11 + DCD CpuSetFast32 ; 12 + DCD SqrtU32 ; 13 + DCD GetCRC16 ; 14 + DCD IsMmem8MB ; 15 + DCD UnPackBits32 ; 16 + DCD UnCompLZ77Byte ; 17 + DCD UnCompLZ77Short ; 18 + DCD UnCompHuffman32 ; 19 + DCD UnCompRLByte ; 20 + DCD UnCompRLShort ; 21 + DCD 0 ; 22 + DCD 0 ; 23 + DCD 0 ; 24 + + DCD 0 ; 25 + DCD GetSoundSinTable ; 26 + DCD GetSoundPitchTable ; 27 + DCD GetSoundVolumeTable ; 28 + + DCD GetFuncp4IPL2 ; 29 + DCD 0 ; 30 + DCD SetPauseHi ; 31 + + END + + diff --git a/trunk/IrisSubp/IrisSubpMon/snd_ptable.bin b/trunk/IrisSubp/IrisSubpMon/snd_ptable.bin new file mode 100644 index 0000000000000000000000000000000000000000..43475283ce318cca384711af88e33e488e8a4115 GIT binary patch literal 1536 zcmV+b2LJg006PG70I~q>04M=u0iOZe0T%*N0*(U80tEv>1APOz1N8$j1a1VX1m*-H z1z!c51=s}?22lo$2FeBp2SW#d2fYXS2R8_G2(bw72rLO{38x9<2_Xt!3Y-es3K$Dk z3zG}c3l9uU42ulO354t);14*Cu`4|or@5A_c;5OWZ+5b+Q&5pNN$ z5$+K!5^NHz66+Ex6KfNy6Y3Kx6lxTy6zLQx6=@Z!73vi#7HSr&7V8!)7i<@;7ws1= z7;hM`81NV|8FCr38TA=98h0AF8u}VL8+{wT8vqy9S$B*9+Mu` z9v2^4ADkcGA0Z%QAf_PcAS@woA+jO$Avhv?BEBL4BSa&JBg-QWBvK@nB-tb#C1E9` zCFmtACU7RSCio^jCxIu$CkiM|D3U1GC>$wZDWxguDK9E?D!D5DDnl!XE6pntELbd^ zEaNOFEp9EeE%_}!E`=`3E)g$RFP$&rFDfu_Ft#xLFhenlG0-s=GF~#JGVC%kGkG(? zGYB+KG?p~oG$l1`HMBMRHA6OwHq$m5H)1!cH}W?+IDtH= zJ6JoRJL)?#JbXOGJPtirJ)u47Jv2UjKF2;0KUzPeKkh#`K!QNbKo&t^L90RaK|n%^ zLe)YaLux~{LjXieM3qG0L@Y&jMZ!f5Mp;IrM({>EM~6q#M;=IONVZ44O@2+wO&CsQPP0w`PfkypPw7uKP=rv@P#{rmQM^$K zQdm-^QuIm9R;5<-Rzz2mSK?PPSb|v5SRq+)S;1Kl zT3}kRS^-;8TcKO=TS8otT;p6cU4&iLT_#?4UdUb=eb;?2eu#eHemH-Tf9iiifSZ8yfK7p>f&YP7g0g}OgJpxhgBXNzgv*2_ zg@1+Fg)@eZhUkVuhn(MvmcEu8mwK1j zmo}J{nDdxYnXs7;nr@oSnk<`(o9dfMoT!`#ooAiLohF`!p5~rLpQfJ%pk|=PpeLb+ zq3EGVqN$<^qidtgqb;P4r0=9qrLv_Hrgf&)rZ}gXr~Id0sKBTqsf4NLsY$A=st&7h ztJJGEteUL-tYEFfttYOEuI;W-ueGlkuzaxKutl+{u?@0uvevRXv!AmAv}m-=v@*4q zwfwbWw#T+Cx01K_w_UiyxGA}hx%IhQy1}|AyNl#6-od#TLeY#^}aT$GgWQ$c@PN$Y9CJ$u!EI z$_UGH%iPOH%(2WH&4$hK&0EgK&N0uN&j`?S(B9BW(Y4Vb(v8yi(qz-n(>>Iw)D_i& z)$Y|>*2mT~*P+)A*n8ON*jCxY*)iIl+6>!z+vwX?+{D~6-JsnM-hJNe-do?v-#Fl> z;1=PA;q~EU;?&|pDuW_>b&YM>!0fp z?1Sv}>}KuR?Mv>x?l146?-cNd@cQs=@!;`O^2YKx^R4qB^px}m^?UX2^<(ze_DuJ{ m_cZva_#XL^`3L%Z`tkZ^``r6c{Kxz}{j&Wi{+|96|BC;SrP71| literal 0 HcmV?d00001 diff --git a/trunk/IrisSubp/IrisSubpMon/snd_sinetable.bin b/trunk/IrisSubp/IrisSubpMon/snd_sinetable.bin new file mode 100644 index 0000000000000000000000000000000000000000..e97840ad366db2d72e135fc0f16423cfec8a5325 GIT binary patch literal 128 zcmV-`0Du1g03-uQ25Je6466^w65*@clU5aLB|;{eD1$_cYAvOSKnXs z|7PGvgWZNY4SzB6X|!#OGESMGOp>NrrqK*(7R{k~uz(i95}?s&%U}i2>2wBz!DKR7 zEEb#1=5RP%E|Ch9BWRO%f0ULcsG1Le_(Sf7z}Oi?C$L!gu{nN$0w&}=NFgPH@A0@XzczWo=B#i z(wQugFOT9juXhIjl0t{mp!r!_WhOPm-W{cHov)iHTbh#nyg|I(>Vd%EP?d}zZ zvHKW@?sGbuBMQY*<)vDCYc#sH)X|;WNEEk;By2M|B3~?(aa+eNKI|tS4t+e_y^WFE L6l~iM!?yVjr+9ah literal 0 HcmV?d00001 diff --git a/trunk/IrisSubp/include/IrisSubp.h b/trunk/IrisSubp/include/IrisSubp.h new file mode 100644 index 0000000..02adfdc --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubp.h @@ -0,0 +1,28 @@ +//====================================================================== +// IrisSubp.h +// IRISTuvZbT Wwb_t@CQ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_H +#define _IRIS_SUBP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include +#include +#include +#include +#include + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_H diff --git a/trunk/IrisSubp/include/IrisSubpDefine.h b/trunk/IrisSubp/include/IrisSubpDefine.h new file mode 100644 index 0000000..1686b35 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpDefine.h @@ -0,0 +1,522 @@ +//====================================================================== +// IrisSubpDefine.h +// IRISTuvZbT W萔 +// +// Copyright (C) 2002-2004 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_DEFINE_H +#define _IRIS_SUBP_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// 萔 +//---------------------------------------------------------------------- + +#define SYSTEM_CLOCK 33513982 // VXeNbN + +#define MAINP 0 // CvZbT +#define SUBP 1 // TuvZbT + + +#define ON 1 +#define OFF 0 +#define ENABLE 1 +#define DISABLE 0 +#define TRUE 1 +#define FALSE 0 + + + +//********************************************************************** +// hqhrTuvZbTWX^ERg[rbg +//********************************************************************** + +//---------------------------------------------------------------------- +// vOXe[^XWX^ +//---------------------------------------------------------------------- + +#define PSR_CPU_MODE_MASK 0x1f // bot[h + +#define PSR_USER_MODE 0x10 // [U +#define PSR_FIQ_MODE 0x11 // ehp +#define PSR_IRQ_MODE 0x12 // hqp +#define PSR_SVC_MODE 0x13 // X[poCU +#define PSR_ABORT_MODE 0x17 // A{[givtFb`^f[^j +#define PSR_UNDEF_MODE 0x1b // ` +#define PSR_SYS_MODE 0x1f // VXe + +#define PSR_THUMB_STATE 0x20 // sgtlaXe[g +#define PSR_FIQ_DISABLE 0x40 // ehps +#define PSR_IRQ_DISABLE 0x80 // hqps +#define PSR_IRQ_FIQ_DISABLE 0xc0 // hqpehps + +#define PSR_V_FLAG 0x10000000 // I[o[t[ +#define PSR_C_FLAG 0x20000000 // L[^{[^g +#define PSR_Z_FLAG 0x40000000 // [ +#define PSR_N_FLAG 0x80000000 // ^ + +// \̃op萔 + +#define ST_PSR_USER_MODE 0x10 // [U +#define ST_PSR_FIQ_MODE 0x11 // ehp +#define ST_PSR_IRQ_MODE 0x12 // hqp +#define ST_PSR_SVC_MODE 0x13 // X[poCU +#define ST_PSR_ABORT_MODE 0x17 // A{[givtFb`^f[^j +#define ST_PSR_UNDEF_MODE 0x1b // ` +#define ST_PSR_SYS_MODE 0x1f // VXe + + +//---------------------------------------------------------------------- +// 荞ݗv^ƒtO +//---------------------------------------------------------------------- + +#define V_BLANK_INTR_FLAG 0x00000001 // uuN荞 +#define H_BLANK_INTR_FLAG 0x00000002 // guN荞 +#define V_COUNT_INTR_FLAG 0x00000004 // uJE^v荞 +#define TIMER0_INTR_FLAG 0x00000008 // ^C}[O荞 +#define TIMER1_INTR_FLAG 0x00000010 // ^C}[P荞 +#define TIMER2_INTR_FLAG 0x00000020 // ^C}[Q荞 +#define TIMER3_INTR_FLAG 0x00000040 // ^C}[R荞 +#define SIO_INTR_FLAG 0x00000080 // VAʐM荞 +#define DMA0_INTR_FLAG 0x00000100 // cl`O荞 +#define DMA1_INTR_FLAG 0x00000200 // cl`P荞 +#define DMA2_INTR_FLAG 0x00000400 // cl`Q荞 +#define DMA3_INTR_FLAG 0x00000800 // cl`R荞 +#define KEY_INTR_FLAG 0x00001000 // L[荞 +#define CARTRIDGE_INTR_FLAG 0x00002000 // J[gbW荞 + +#define MAINP_INTR_FLAG 0x00010000 // CvZbT荞 +#define MPFIFO_SEND_INTR_FLAG 0x00020000 // CvZbTԑMehenGveB荞 +#define MPFIFO_RECV_INTR_FLAG 0x00040000 // CvZbTԎMehenmbgGveB荞 +#define CARD_DATA_INTR_FLAG 0x00080000 // J[hf[^]I荞 +#define CARD_IREQ_INTR_FLAG 0x00100000 // J[hhqdp荞 +#define PMIC_RTC_INTR_FLAG 0x00400000 // p[}l[Wghb荞 qsb荞 +#define SPI_INTR_FLAG 0x00800000 // roh荞 +#define WIRELESS_INTR_FLAG 0x01000000 // ʐM荞 + + +//---------------------------------------------------------------------- +// CvZbT C^tF[X +//---------------------------------------------------------------------- + +#define MAINP_RECV_STATUS_MASK 0x000f // MXe[^X +#define MAINP_SEND_STATUS_MASK 0x0f00 // MXe[^X + +#define MAINP_RECV_STATUS_SHIFT 0 +#define MAINP_SEND_STATUS_SHIFT 8 + +#define MAINP_SEND_IF 0x2000 // 荞ݗvM +#define MAINP_RECV_IF_ENABLE 0x4000 // 荞ݗvM + +//---------------------------------------------------------------------- +// CʐMvZbTehen Rg[ +//---------------------------------------------------------------------- + +#define MPFIFO_SEND_EMPTY 0x0001 // Mehen GveB +#define MPFIFO_SEND_FULL 0x0002 // t +#define MPFIFO_SEND_IF_ENABLE 0x0004 // 荞ݗv +#define MPFIFO_SEND_CLEAR 0x0008 // NA +#define MPFIFO_RECV_EMPTY 0x0100 // Mehen GveB +#define MPFIFO_RECV_FULL 0x0200 // t +#define MPFIFO_RECV_IF_ENABLE 0x0400 // 荞ݗv +#define MPFIFO_ENABLE 0x8000 // h^nvZbTehen Cl[u + + +//---------------------------------------------------------------------- +// p[Rg[ +//---------------------------------------------------------------------- + +#define POW_SOUND_ON 0x0001 // TEh nm +#define POW_WIRELESS_ON 0x0002 // ʐM nm +#define POW_ALL_ON 0x0003 // S nm + + +//---------------------------------------------------------------------- +// uq`l Xe[^X +//---------------------------------------------------------------------- + +#define VRAM_MAINP_ALL 0x00 // uq`l|bEc CvZbT +#define VRAM_MAINP_D_SUBP_C 0x01 // c CvZbT + // b TuvZbT +#define VRAM_MAINP_C_SUBP_D 0x02 // b CvZbT + // c TuvZbT +#define VRAM_SUBP_ALL 0x03 // bEc TuvZbT + +//---------------------------------------------------------------------- +// [Nq`l Xe[^X +//---------------------------------------------------------------------- + +#define WRAM_MAINP_ALL 0x00 // L[Nq`lubNOEP CvZbT +#define WRAM_MAINP_B1_SUBP_B0 0x01 // ubNP CvZbT + // ubNO TuvZbT +#define WRAM_MAINP_B0_SUBP_B1 0x02 // ubNO CvZbT + // ubNP TuvZbT +#define WRAM_SUBP_ALL 0x03 // ubNOEP TuvZbT + + +//---------------------------------------------------------------------- +// \Xe[^X +//---------------------------------------------------------------------- + +#define DPSTAT_V_SET_LO_MASK 0xff00 // uJE^rlݒ +#define DPSTAT_V_SET_D8 0x0080 // uJE^rlݒWrbg + +#define DPSTAT_V_SET_LO_SHIFT 8 + +#define DPSTAT_V_BLANK 0x0001 // uuNԒ +#define DPSTAT_H_BLANK 0x0002 // guNԒ +#define DPSTAT_V_COUNT 0x0004 // uJE^v +#define DPSTAT_V_BLANK_IF_ENABLE 0x0008 // uuN荞ݗv +#define DPSTAT_H_BLANK_IF_ENABLE 0x0010 // guN荞ݗv +#define DPSTAT_V_COUNT_IF_ENABLE 0x0020 // uJE^v荞ݗv + + +//---------------------------------------------------------------------- +// TEh}X^ Rg[ +//---------------------------------------------------------------------- + +#define SOUND_VOLUME_MASK 0x007f // }X^o̓x + +#define SOUND_VOLUME_SHIFT 0 + +#define SOUND_LOUT_MIXER 0x0000 // kŏIio ~LT[ +#define SOUND_LOUT_CH1 0x0100 // `lP +#define SOUND_LOUT_CH3 0x0200 // `lR +#define SOUND_LOUT_CH1_CH3 0x0300 // `lP{R +#define SOUND_ROUT_MIXER 0x0000 // qŏIio ~LT[ +#define SOUND_ROUT_CH1 0x0400 // `lP +#define SOUND_ROUT_CH3 0x0800 // `lR +#define SOUND_ROUT_CH1_CH3 0x0C00 // `lP{R +#define SOUND_CH1_MIXOFF 0x1000 // `lPE~bNX nee +#define SOUND_CH1_MIX 0x0000 // nm +#define SOUND_CH3_MIXOFF 0x2000 // `lRE~bNX nee +#define SOUND_CH3_MIX 0x0000 // nm +#define SOUND_MIC_MIXOFF 0x0000 // }CNE~bNX nee +#define SOUND_MIC_MIX 0x4000 // nm +#define SOUND_ENABLE 0x8000 // Cl[u + + +//---------------------------------------------------------------------- +// TEh`l Rg[ +//---------------------------------------------------------------------- + +#define SOUND_CHAN_VOLUME_MASK 0x000000ff // o̓x +#define SOUND_SHIFT_MASK 0x00000300 // f[^Vtg +#define SOUND_PANPOT_MASK 0x00ff0000 // p|bg +#define SOUND_DUTY_MASK 0x07000000 // f[eB +#define SOUND_PEPEAT_TYPE_MASK 0x18000000 // s[g@ +#define SOUND_FORMAT_MASK 0x60000000 // tH[}bg + +#define SOUND_CHAN_VOLUME_SHIFT 0 +#define SOUND_SHIFT_SHIFT 8 +#define SOUND_PANPOT_SHIFT 16 +#define SOUND_DUTY_SHIFT 24 +#define SOUND_PEPEAT_TYPE_SHIFT 27 +#define SOUND_FORMAT_SHIFT 29 + +#define SOUND_OUTPUT_HOLD 0x00008000 // fBZ[ȕo͕ێ + +#define SOUND_DUTY_1_8 0x00000000 // f[eB P^W +#define SOUND_DUTY_2_8 0x01000000 // Q^W +#define SOUND_DUTY_3_8 0x02000000 // R^W +#define SOUND_DUTY_4_8 0x03000000 // S^W +#define SOUND_DUTY_5_8 0x04000000 // T^W +#define SOUND_DUTY_6_8 0x05000000 // U^W +#define SOUND_DUTY_7_8 0x06000000 // V^W +#define SOUND_DUTY_XX 0x07000000 // ݒ֎~ + +#define SOUND_LINEAR 0x00000000 // jAĐ +#define SOUND_REPEAT 0x08000000 // s[gĐ +#define SOUND_1SHOT 0x10000000 // PVbgĐ + +#define SOUND_PCM8 0x00000000 // oblW +#define SOUND_PCM16 0x20000000 // oblPU +#define SOUND_ADPCM 0x40000000 // `cobl +#define SOUND_PSG_NOISE 0x60000000 // orfiW`PRj܂ mCYiPS`PTj + +#define SOUND_CHAN_ENABLE 0x80000000 // Cl[u + +// \̃op萔 + +#define ST_SOUND_PCM8 0 // oblW +#define ST_SOUND_PCM16 1 // oblPU +#define ST_SOUND_ADPCM 2 // `cobl +#define ST_SOUND_PSG_NOISE 3 // orfiW`PRj܂ mCYiPS`PTj + +#define ST_SOUND_DUTY_1_8 0 // f[eB P^W +#define ST_SOUND_DUTY_2_8 1 // Q^W +#define ST_SOUND_DUTY_3_8 2 // R^W +#define ST_SOUND_DUTY_4_8 3 // S^W +#define ST_SOUND_DUTY_5_8 4 // T^W +#define ST_SOUND_DUTY_6_8 5 // U^W +#define ST_SOUND_DUTY_7_8 6 // V^W +#define ST_SOUND_DUTY_XX 7 // ݒ֎~ + + +//---------------------------------------------------------------------- +// TEhLv` Rg[ +//---------------------------------------------------------------------- + +#define SNDCAP_PREMIXING_ON 0x01 // ~LT[O nm +#define SNDCAP_SRC 0x02 // Lv`I +#define SNDCAP_MIXER 0x00 // ~LT[o̓f[^Lv` +#define SNDCAP_CHAN 0x02 // P`lLv` +#define SNDCAP_REPEAT_OFF 0x04 // s[g nee +#define SNDCAP_FORMAT 0x08 // Lv`tH[}bg +#define SNDCAP_PCM16 0x00 // PUobl +#define SNDCAP_PCM8 0x08 // Wobl +#define SNDCAP_ENABLE 0x80 // Cl[u + + +//---------------------------------------------------------------------- +// rohRg[ +//---------------------------------------------------------------------- + +#define SPI_SCK_MASK 0x0003 // VtgNbN +#ifdef IRIS_TS +#define SPI_TARGET_MASK 0x0300 // ʐM^[Qbgw +#else +#define SPI_TARGET_MASK 0x2000 +#endif + +#define SPI_SCK_SHIFT 0 + +#define SPI_SCK_4M 0x0000 // VtgNbN SlgI +#define SPI_SCK_2M 0x0001 // Qlg +#define SPI_SCK_1M 0x0002 // Plg +#define SPI_SCK_524K 0x0003 // TQSjg + +#define SPI_BUSY 0x0080 // rW[ +#define SPI_8BIT_MODE 0x0000 // Wrbg[h +#ifdef IRIS_TS +#define SPI_16BIT_MODE 0x0400 // PUrbg[h +#define SPI_CONTINUOUS_ON 0x0800 // ReBjAX[h nm +#define SPI_TARGET_PMIC 0x0000 // olhbI +#define SPI_TARGET_FLASH 0x0100 // tbVI +#define SPI_TARGET_TOUCHPANEL 0x0200 // ^b`plI +#else +#define SPI_CONTINUOUS_ON 0x1000 // ReBjAX[h nm +#define SPI_TARGET_PMIC 0x0000 // olhbI +#define SPI_TARGET_FLASH 0x2000 // tbVI +#endif +#define SPI_IF_ENABLE 0x4000 // 荞ݗv +#define SPI_ENABLE 0x8000 // roh + +// \̃op萔 + +#define ST_SPI_SCK_4M 0 // VtgNbN SlgI +#define ST_SPI_SCK_2M 1 // Qlg +#define ST_SPI_SCK_1M 2 // Plg +#define ST_SPI_SCK_524K 3 // TQSjg + +#ifdef IRIS_TS +#define ST_SPI_TARGET_PMIC 0 // olhbI +#define ST_SPI_TARGET_FLASH 1 // tbVI +#define ST_SPI_TARGET_TOUCHPANEL 2 // ^b`plI +#else +#define ST_SPI_TARGET_PMIC 0 // olhbI +#define ST_SPI_TARGET_FLASH 1 // tbVI +#endif + + +//---------------------------------------------------------------------- +// ėpo̓Rg[ +//---------------------------------------------------------------------- + +#define R_SIO_MODE_MASTER_MASK 0xc000 // rhn[hE}X^ + +#define R_SIO_MODE_MASTER_SHIFT 14 + +#define R_SIO_MASTER_MODE 0x0000 // rhn}X^E[h +#define R_DIRECT_MODE 0x8000 // ėpo͒ʐM[h + +#define R_SC 0x0001 // f[^ +#define R_SD 0x0002 +#define R_SI 0x0004 +#define R_SO 0x0008 +#define R_SC_I_O 0x0010 // h/nI +#define R_SD_I_O 0x0020 +#define R_SI_I_O 0x0040 +#define R_SO_I_O 0x0080 +#define R_SC_IN 0x0000 // ͐ݒ +#define R_SD_IN 0x0000 +#define R_SI_IN 0x0000 +#define R_SO_IN 0x0000 +#define R_SC_OUT 0x0010 // o͐ݒ +#define R_SD_OUT 0x0020 +#define R_SI_OUT 0x0040 +#define R_SO_OUT 0x0080 +#define R_IF_ENABLE 0x0100 // 荞ݗv + +// \̃op萔 + +#define ST_R_SIO_MASTER_MODE 0 // rhn}X^E[h +#define ST_R_DIRECT_MODE 2 // ėpo͒ʐM[h + +#define ST_R_IN 0 // ͑I +#define ST_R_OUT 1 // o͑I + + +//---------------------------------------------------------------------- +// cl`Rg[ +//---------------------------------------------------------------------- + +#define DMA_TIMMING_MASK 0x30000000 // Jn^C~O +#define DMA_COUNT_MASK 0x0000ffff // ] + +#define DMA_TIMMING_SHIFT 30 +#define DMA_COUNT_SHIFT 0 + +#define DMA_ENABLE 0x80000000 // cl` +#define DMA_IF_ENABLE 0x40000000 // 荞ݗv +#define DMA_TIMMING_IMM 0x00000000 // ɋN +#define DMA_TIMMING_V_BLANK 0x10000000 // uuNN +#define DMA_TIMMING_CARD 0x20000000 // J[h +#define DMA_TIMMING_WIRELESS 0x30000000 // ʐM +#define DMA_TIMMING_CARTRIDGE 0x30000000 // J[gbW +#define DMA_16BIT_BUS 0x00000000 // oXTCYPUaI +#define DMA_32BIT_BUS 0x04000000 // oXTCYRQaI +#define DMA_CONTINUOUS_ON 0x02000000 // ReBjAX[h nm +#define DMA_SRC_INC 0x00000000 // ] CNg I +#define DMA_SRC_DEC 0x00800000 // ] fNg I +#define DMA_SRC_FIX 0x01000000 // ] Œ I +#define DMA_DEST_INC 0x00000000 // ] CNg I +#define DMA_DEST_DEC 0x00200000 // ] fNg I +#define DMA_DEST_FIX 0x00400000 // ] Œ I +#define DMA_DEST_RELOAD 0x00600000 // ] CNg/[h I + +// \̃op萔 + +#define ST_DMA_TIMMING_IMM 0 // ɋN +#define ST_DMA_TIMMING_V_BLANK 1 // uuNN +#define ST_DMA_TIMMING_CARD 2 // J[h +#define ST_DMA_TIMMING_CARTRIDGE 3 // J[gbW +#define ST_DMA_16BIT_BUS 0 // oXTCYPUI +#define ST_DMA_32BIT_BUS 1 // oXTCYRQI +#define ST_DMA_INC 0 // AhXECNg I +#define ST_DMA_DEC 1 // AhXEfNg I +#define ST_DMA_FIX 2 // AhXŒ I +#define ST_DMA_RELOAD 3 // AhXECNg/[h I + + +//---------------------------------------------------------------------- +// ^C}[ Rg[ +//---------------------------------------------------------------------- + +#define TMR_PRESCALER_MASK 0x00030000 // vXP[ NbN + +#define TMR_PRESCALER_SHIFT 16 + +#define TMR_PRESCALER_1CK 0x00000000 // vXP[ P +#define TMR_PRESCALER_64CK 0x00010000 // US +#define TMR_PRESCALER_256CK 0x00020000 // QTU +#define TMR_PRESCALER_1024CK 0x00030000 // POQS +#define TMR_CONNECT 0x00040000 // ʃ^C}[ڑ +#define TMR_IF_ENABLE 0x00400000 // 荞ݗv +#define TMR_ENABLE 0x00800000 // ^C}[N + +// \̃op萔 + +#define ST_TMR_PRESCALER_1CK 0 // vXP[ P +#define ST_TMR_PRESCALER_64CK 1 // US +#define ST_TMR_PRESCALER_256CK 2 // QTU +#define ST_TMR_PRESCALER_1024CK 3 // POQS + + +//---------------------------------------------------------------------- +// L[ +//---------------------------------------------------------------------- + +#define BUTTON_MASK 0x030f // {^ +#define PLUS_KEY_MASK 0x00f0 // \L[ +#define ALL_KEY_MASK 0x03ff // SẴL[ + +#define A_BUTTON 0x0001 // `{^ +#define B_BUTTON 0x0002 // a{^ +#define SELECT_BUTTON 0x0004 // ZNg{^ +#define START_BUTTON 0x0008 // X^[g{^ +#define R_KEY 0x0010 // E{^ +#define L_KEY 0x0020 // {^ +#define U_KEY 0x0040 // {^ +#define D_KEY 0x0080 // {^ +#define R_BUTTON 0x0100 // q{^ +#define L_BUTTON 0x0200 // k{^ +#define KEY_IF_ENABLE 0x4000 // 荞ݗv +#define KEY_OR_INTR 0x0000 // ʏL[荞 +#define KEY_AND_INTR 0x8000 // `mcL[荞 + +// \̃op萔 + +#define ST_KEY_OR_INTR 0 // ʏL[荞 +#define ST_KEY_AND_INTR 1 // `mcL[荞 + + +//---------------------------------------------------------------------- +// O Rg[ +//---------------------------------------------------------------------- + +#define CTRDG_DT8_10CYC 0x0000 // J[gbW Wf[^oX POTCN +#define CTRDG_DT8_8CYC 0x0001 // WTCN +#define CTRDG_DT8_6CYC 0x0002 // UTCN +#define CTRDG_DT8_18CYC 0x0003 // PWTCN +#define CTRDG_AD16_1ST_10CYC 0x0000 // J[gbW `cPUoX P POTCN +#define CTRDG_AD16_1ST_8CYC 0x0004 // WTCN +#define CTRDG_AD16_1ST_6CYC 0x0008 // UTCN +#define CTRDG_AD16_1ST_18CYC 0x000c // PWTCN +#define CTRDG_AD16_2ND_6CYC 0x0000 // Q UTCN +#define CTRDG_AD16_2ND_4CYC 0x0010 // STCN + +#define CTRDG_PHI_OUT_NONE 0x0000 // Ӓ[qo̓NbN kŒ +#define CTRDG_PHI_OUT_4MCK 0x0020 // Slg +#define CTRDG_PHI_OUT_8MCK 0x0040 // Wlg +#define CTRDG_PHI_OUT_16MCK 0x0060 // PUlg + +#define CTRDG_ACCESS 0x0080 // J[gbWANZX +#define CTRDG_ACCESS_MAINP 0x0000 // CvZbT +#define CTRDG_ACCESS_SUBP 0x0080 // TuvZbT + +#define CARD_ACCESS 0x0800 // J[hANZX +#define CARD_ACCESS_MAINP 0x0000 // CvZbT +#define CARD_ACCESS_SUBP 0x0800 // TuvZbT + +#define MMEM_CE2_OUT 0x2000 // bdQMmF + +#define MMEM_INTF 0x4000 // CC^tF[Xisdfł͏ɃZbgē[hɂj +#define MMEM_INTF_ASYNC 0x0000 // 񓯊[h +#define MMEM_INTF_SYNC 0x4000 // [h + +#define MMEM_PRIORITY 0x8000 // CD挠 +#define MMEM_PRIORITY_MAINP 0x0000 // CvZbT +#define MMEM_PRIORITY_SUBP 0x8000 // TuvZbT + +// \̃op萔 + +#define ST_CTRDG_DT8_10CYC 0 // J[gbW Wf[^oX POTCN +#define ST_CTRDG_DT8_8CYC 1 // WTCN +#define ST_CTRDG_DT8_6CYC 2 // UTCN +#define ST_CTRDG_DT8_18CYC 3 // PWTCN +#define ST_CTRDG_AD16_1ST_10CYC 0 // J[gbW `cPUoX P POTCN +#define ST_CTRDG_AD16_1ST_8CYC 1 // WTCN +#define ST_CTRDG_AD16_1ST_6CYC 2 // UTCN +#define ST_CTRDG_AD16_1ST_18CYC 3 // PWTCN +#define ST_CTRDG_AD16_2ND_6CYC 0 // Q UTCN +#define ST_CTRDG_AD16_2ND_4CYC 1 // STCN + +#define ST_CTRDG_PHI_OUT_NONE 0 // Ӓ[qo̓NbN kŒ +#define ST_CTRDG_PHI_OUT_4MCK 1 // Slg +#define ST_CTRDG_PHI_OUT_8MCK 2 // Wlg +#define ST_CTRDG_PHI_OUT_16MCK 3 // PUlg + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_DEFINE_H diff --git a/trunk/IrisSubp/include/IrisSubpDefineArm.s b/trunk/IrisSubp/include/IrisSubpDefineArm.s new file mode 100644 index 0000000..d747fa5 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpDefineArm.s @@ -0,0 +1,513 @@ +;======================================================================= +; IrisSubpDefineArm.s +; IRISTuvZbT W萔iARMASMpj +; +; Copyright (C) 2002-2004 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_DEFINE_H + ELSE +_IRIS_SUBP_DEFINE_H * 1 + + + INCLUDE IrisSubpTargetArm.s + + +;----------------------------------------------------------------------- +; 萔 +;----------------------------------------------------------------------- + +SYSTEM_CLOCK * 33513982 ; VXeNbN + +MAINP * 0 ; CvZbT +SUBP * 1 ; TuvZbT + + +ON * 1 +OFF * 0 +ENABLE * 1 +DISABLE * 0 +TRUE * 1 +FALSE * 0 + + +;*********************************************************************** +; hqhr|hnoWX^ERg[rbg +;*********************************************************************** + +;----------------------------------------------------------------------- +; vOXe[^XWX^ +;----------------------------------------------------------------------- + +PSR_CPU_MODE_MASK * 0x1f ; bot[h + +PSR_USER_MODE * 0x10 ; [U +PSR_FIQ_MODE * 0x11 ; ehp +PSR_IRQ_MODE * 0x12 ; hqp +PSR_SVC_MODE * 0x13 ; X[poCU +PSR_ABORT_MODE * 0x17 ; A{[givtFb`^f[^j +PSR_UNDEF_MODE * 0x1b ; ` +PSR_SYS_MODE * 0x1f ; VXe + +PSR_THUMB_STATE * 0x20 ; sgtlaXe[g +PSR_FIQ_DISABLE * 0x40 ; ehps +PSR_IRQ_DISABLE * 0x80 ; hqps +PSR_IRQ_FIQ_DISABLE * 0xc0 ; hqpehps + +PSR_V_FLAG * 0x10000000 ; I[o[t[ +PSR_C_FLAG * 0x20000000 ; L[^{[^g +PSR_Z_FLAG * 0x40000000 ; [ +PSR_N_FLAG * 0x80000000 ; ^ + +; \̃op萔 + +ST_PSR_USER_MODE * 0x10 ; [U +ST_PSR_FIQ_MODE * 0x11 ; ehp +ST_PSR_IRQ_MODE * 0x12 ; hqp +ST_PSR_SVC_MODE * 0x13 ; X[poCU +ST_PSR_ABORT_MODE * 0x17 ; A{[givtFb`^f[^j +ST_PSR_UNDEF_MODE * 0x1b ; ` +ST_PSR_SYS_MODE * 0x1f ; VXe + + +;----------------------------------------------------------------------- +; 荞ݗv^ƒtO +;----------------------------------------------------------------------- + +V_BLANK_INTR_FLAG * 0x00000001 ; uuN荞 +H_BLANK_INTR_FLAG * 0x00000002 ; guN荞 +V_COUNT_INTR_FLAG * 0x00000004 ; uJE^v荞 +TIMER0_INTR_FLAG * 0x00000008 ; ^C}[O荞 +TIMER1_INTR_FLAG * 0x00000010 ; ^C}[P荞 +TIMER2_INTR_FLAG * 0x00000020 ; ^C}[Q荞 +TIMER3_INTR_FLAG * 0x00000040 ; ^C}[R荞 +SIO_INTR_FLAG * 0x00000080 ; VAʐM荞 +DMA0_INTR_FLAG * 0x00000100 ; cl`O荞 +DMA1_INTR_FLAG * 0x00000200 ; cl`P荞 +DMA2_INTR_FLAG * 0x00000400 ; cl`Q荞 +DMA3_INTR_FLAG * 0x00000800 ; cl`R荞 +KEY_INTR_FLAG * 0x00001000 ; L[荞 +CARTRIDGE_INTR_FLAG * 0x00002000 ; J[gbW荞 + +MAINP_INTR_FLAG * 0x00010000 ; CvZbT荞 +MPFIFO_SEND_INTR_FLAG * 0x00020000 ; CvZbTԑMehenGveB荞 +MPFIFO_RECV_INTR_FLAG * 0x00040000 ; CvZbTԎMehenmbgGveB荞 +CARD_DATA_INTR_FLAG * 0x00080000 ; J[hf[^]I荞 +CARD_IREQ_INTR_FLAG * 0x00100000 ; J[hhqdp荞 +PMIC_RTC_INTR_FLAG * 0x00400000 ; p[}l[Wghb荞 qsb荞 +SPI_INTR_FLAG * 0x00800000 ; roh荞 +WIRELESS_INTR_FLAG * 0x01000000 ; ʐM荞 + + +;----------------------------------------------------------------------- +; CvZbT C^tF[X +;----------------------------------------------------------------------- + +MAINP_RECV_STATUS_MASK * 0x000f ; MXe[^X +MAINP_SEND_STATUS_MASK * 0x0f00 ; MXe[^X + +MAINP_RECV_STATUS_SHIFT * 0 +MAINP_SEND_STATUS_SHIFT * 8 + +MAINP_SEND_IF * 0x2000 ; 荞ݗvM +MAINP_RECV_IF_ENABLE * 0x4000 ; 荞ݗvM + +;----------------------------------------------------------------------- +; CvZbTʐMehen Rg[ +;----------------------------------------------------------------------- + +MPFIFO_SEND_EMPTY * 0x0001 ; Mehen GveB +MPFIFO_SEND_FULL * 0x0002 ; t +MPFIFO_SEND_IF_ENABLE * 0x0004 ; 荞ݗv +MPFIFO_SEND_CLEAR * 0x0008 ; NA +MPFIFO_RECV_EMPTY * 0x0100 ; Mehen GveB +MPFIFO_RECV_FULL * 0x0200 ; t +MPFIFO_RECV_IF_ENABLE * 0x0400 ; 荞ݗv +MPFIFO_ENABLE * 0x8000 ; h^nvZbTehen Cl[u + + +;----------------------------------------------------------------------- +; p[Rg[ +;----------------------------------------------------------------------- + +POW_SOUND_ON * 0x0001 ; TEh nm + + +;----------------------------------------------------------------------- +; uq`l Xe[^X +;----------------------------------------------------------------------- + +VRAM_MAINP_ALL * 0x00 ; uq`l|bEc CvZbT +VRAM_MAINP_D_SUBP_C * 0x01 ; c CvZbT + ; b TuvZbT +VRAM_MAINP_C_SUBP_D * 0x02 ; b CvZbT + ; c TuvZbT +VRAM_SUBP_ALL * 0x03 ; bEc TuvZbT + +;----------------------------------------------------------------------- +; [Nq`l Xe[^X +;----------------------------------------------------------------------- + +WRAM_MAINP_ALL * 0x00 ; L[Nq`lubNOEP CvZbT +WRAM_MAINP_B1_SUBP_B0 * 0x01 ; ubNP CvZbT + ; ubNO TuvZbT +WRAM_MAINP_B0_SUBP_B1 * 0x02 ; ubNO CvZbT + ; ubNP TuvZbT +WRAM_SUBP_ALL * 0x03 ; ubNOEP TuvZbT + + +;----------------------------------------------------------------------- +; \Xe[^X +;----------------------------------------------------------------------- + +DPSTAT_V_SET_LO_MASK * 0xff00 ; uJE^rlݒ +DPSTAT_V_SET_D8 * 0x0080 ; uJE^rlݒWrbg + +DPSTAT_V_SET_LO_SHIFT * 8 + +DPSTAT_V_BLANK * 0x0001 ; uuNԒ +DPSTAT_H_BLANK * 0x0002 ; guNԒ +DPSTAT_V_COUNT * 0x0004 ; uJE^v +DPSTAT_V_BLANK_IF_ENABLE * 0x0008 ; uuN荞ݗv +DPSTAT_H_BLANK_IF_ENABLE * 0x0010 ; guN荞ݗv +DPSTAT_V_COUNT_IF_ENABLE * 0x0020 ; uJE^v荞ݗv + + +;----------------------------------------------------------------------- +; TEh}X^ Rg[ +;----------------------------------------------------------------------- + +SOUND_VOLUME_MASK * 0x007f ; }X^o̓x + +SOUND_VOLUME_SHIFT * 0 + +SOUND_LOUT_MIXER * 0x0000 ; kŏIio ~LT[ +SOUND_LOUT_CH1 * 0x0100 ; `lP +SOUND_LOUT_CH3 * 0x0200 ; `lR +SOUND_LOUT_CH1_CH3 * 0x0300 ; `lP{R +SOUND_ROUT_MIXER * 0x0000 ; qŏIio ~LT[ +SOUND_ROUT_CH1 * 0x0400 ; `lP +SOUND_ROUT_CH3 * 0x0800 ; `lR +SOUND_ROUT_CH1_CH3 * 0x0C00 ; `lP{R +SOUND_CH1_MIXOFF * 0x1000 ; `lPE~bNX nee +SOUND_CH1_MIX * 0x0000 ; nm +SOUND_CH3_MIXOFF * 0x2000 ; `lRE~bNX nee +SOUND_CH3_MIX * 0x0000 ; nm +SOUND_ENABLE * 0x8000 ; Cl[u + + +;----------------------------------------------------------------------- +; TEh`l Rg[ +;----------------------------------------------------------------------- + +SOUND_CHAN_VOLUME_MASK * 0x000000ff ; o̓x +SOUND_SHIFT_MASK * 0x00000300 ; f[^Vtg +SOUND_PANPOT_MASK * 0x00ff0000 ; p|bg +SOUND_DUTY_MASK * 0x07000000 ; f[eB +SOUND_PEPEAT_TYPE_MASK * 0x18000000 ; s[g@ +SOUND_FORMAT_MASK * 0x60000000 ; tH[}bg + +SOUND_CHAN_VOLUME_SHIFT * 0 +SOUND_SHIFT_SHIFT * 8 +SOUND_PANPOT_SHIFT * 16 +SOUND_DUTY_SHIFT * 24 +SOUND_PEPEAT_TYPE_SHIFT * 27 +SOUND_FORMAT_SHIFT * 29 + +SOUND_OUTPUT_HOLD * 0x00008000 ; fBZ[ȕo͕ێ + +SOUND_DUTY_1_8 * 0x00000000 ; f[eB P^W +SOUND_DUTY_2_8 * 0x01000000 ; Q^W +SOUND_DUTY_3_8 * 0x02000000 ; R^W +SOUND_DUTY_4_8 * 0x03000000 ; S^W +SOUND_DUTY_5_8 * 0x04000000 ; T^W +SOUND_DUTY_6_8 * 0x05000000 ; U^W +SOUND_DUTY_7_8 * 0x06000000 ; V^W +SOUND_DUTY_XX * 0x07000000 ; ݒ֎~ + +SOUND_LINEAR * 0x00000000 ; jAĐ +SOUND_REPEAT * 0x08000000 ; s[gĐ +SOUND_1SHOT * 0x10000000 ; PVbgĐ + +SOUND_PCM8 * 0x00000000 ; oblW +SOUND_PCM16 * 0x20000000 ; oblPU +SOUND_ADPCM * 0x40000000 ; `cobl +SOUND_PSG_NOISE * 0x60000000 ; orfiW`PRj܂ mCYiPS`PTj + +SOUND_CHAN_ENABLE * 0x80000000 ; Cl[u + +; \̃op萔 + +ST_SOUND_PCM8 * 0 ; oblW +ST_SOUND_PCM16 * 1 ; oblPU +ST_SOUND_ADPCM * 2 ; `cobl +ST_SOUND_PSG_NOISE * 3 ; orfiW`PRj܂ mCYiPS`PTj + +ST_SOUND_DUTY_1_8 * 0 ; f[eB P^W +ST_SOUND_DUTY_2_8 * 1 ; Q^W +ST_SOUND_DUTY_3_8 * 2 ; R^W +ST_SOUND_DUTY_4_8 * 3 ; S^W +ST_SOUND_DUTY_5_8 * 4 ; T^W +ST_SOUND_DUTY_6_8 * 5 ; U^W +ST_SOUND_DUTY_7_8 * 6 ; V^W +ST_SOUND_DUTY_XX * 7 ; ݒ֎~ + + +;----------------------------------------------------------------------- +; TEhLv` Rg[ +;----------------------------------------------------------------------- + +SNDCAP_PREMIXING_ON * 0x01 ; ~LT[O nm +SNDCAP_SRC * 0x02 ; Lv`I +SNDCAP_MIXER * 0x00 ; ~LT[o̓f[^Lv` +SNDCAP_CHAN * 0x02 ; P`lLv` +SNDCAP_REPEAT_OFF * 0x04 ; s[g nee +SNDCAP_FORMAT * 0x08 ; Lv`tH[}bg +SNDCAP_PCM16 * 0x00 ; PUobl +SNDCAP_PCM8 * 0x08 ; Wobl +SNDCAP_ENABLE * 0x80 ; Cl[u + + +;----------------------------------------------------------------------- +; rohRg[ +;----------------------------------------------------------------------- + +SPI_SCK_MASK * 0x0003 ; VtgNbN + IF :DEF: IRIS_TS +SPI_TARGET_MASK * 0x0300 ; ʐM^[Qbgw + ELSE +SPI_TARGET_MASK * 0x2000 + ENDIF + +SPI_SCK_SHIFT * 0 + +SPI_SCK_4M * 0x0000 ; VtgNbN SlgI +SPI_SCK_2M * 0x0001 ; Qlg +SPI_SCK_1M * 0x0002 ; Plg +SPI_SCK_524K * 0x0003 ; TQSjg + +SPI_BUSY * 0x0080 ; rW[ +SPI_8BIT_MODE * 0x0000 ; Wrbg[h + IF :DEF: IRIS_TS +SPI_16BIT_MODE * 0x0400 ; PUrbg[h +SPI_CONTINUOUS_ON * 0x1000 ; ReBjAX[h nm +SPI_TARGET_PMIC * 0x0000 ; olhbI +SPI_TARGET_FLASH * 0x1000 ; tbVI +SPI_TARGET_TOUCHPANEL * 0x2000 ; ^b`plI + ELSE +SPI_CONTINUOUS_ON * 0x1000 ; ReBjAX[h nm +SPI_TARGET_PMIC * 0x0000 ; olhbI +SPI_TARGET_FLASH * 0x2000 ; tbVI + ENDIF +SPI_IF_ENABLE * 0x4000 ; 荞ݗv +SPI_ENABLE * 0x8000 ; roh + +; \̃op萔 + +ST_SPI_SCK_4M * 0 ; VtgNbN SlgI +ST_SPI_SCK_2M * 1 ; Qlg +ST_SPI_SCK_1M * 2 ; Plg +ST_SPI_SCK_524K * 3 ; TQSjg + + IF :DEF: IRIS_TS +ST_SPI_TARGET_PMIC * 0 ; olhbI +ST_SPI_TARGET_FLASH * 1 ; tbVI + ELSE +ST_SPI_TARGET_PMIC * 0 ; olhbI +ST_SPI_TARGET_FLASH * 1 ; tbVI + ENDIF + + +;----------------------------------------------------------------------- +; ėpo̓Rg[ +;----------------------------------------------------------------------- + +R_SIO_MODE_MASTER_MASK * 0xc000 ; rhn[hE}X^ + +R_SIO_MODE_MASTER_SHIFT * 14 + +R_SIO_MASTER_MODE * 0x0000 ; rhn}X^E[h +R_DIRECT_MODE * 0x8000 ; ėpo͒ʐM[h + +R_SC * 0x0001 ; f[^ +R_SD * 0x0002 +R_SI * 0x0004 +R_SO * 0x0008 +R_SC_I_O * 0x0010 ; h/nI +R_SD_I_O * 0x0020 +R_SI_I_O * 0x0040 +R_SO_I_O * 0x0080 +R_SC_IN * 0x0000 ; ͐ݒ +R_SD_IN * 0x0000 +R_SI_IN * 0x0000 +R_SO_IN * 0x0000 +R_SC_OUT * 0x0010 ; o͐ݒ +R_SD_OUT * 0x0020 +R_SI_OUT * 0x0040 +R_SO_OUT * 0x0080 +R_IF_ENABLE * 0x0100 ; 荞ݗv + +; \̃op萔 + +ST_R_SIO_MASTER_MODE * 0 ; rhn}X^E[h +ST_R_DIRECT_MODE * 2 ; ėpo͒ʐM[h + +ST_R_IN * 0 ; ͑I +ST_R_OUT * 1 ; o͑I + + +;----------------------------------------------------------------------- +; cl`Rg[ +;----------------------------------------------------------------------- + +DMA_TIMMING_MASK * 0x30000000 ; Jn^C~O +DMA_COUNT_MASK * 0x0000ffff ; ] + +DMA_TIMMING_SHIFT * 30 +DMA_COUNT_SHIFT * 0 + +DMA_ENABLE * 0x80000000 ; cl` +DMA_IF_ENABLE * 0x40000000 ; 荞ݗv +DMA_TIMMING_IMM * 0x00000000 ; ɋN +DMA_TIMMING_V_BLANK * 0x10000000 ; uuNN +DMA_TIMMING_CARD * 0x20000000 ; J[h +DMA_TIMMING_WIRELESS * 0x30000000 ; ʐM +DMA_TIMMING_CARTRIDGE * 0x30000000 ; J[gbW +DMA_16BIT_BUS * 0x00000000 ; oXTCYPUaI +DMA_32BIT_BUS * 0x04000000 ; oXTCYRQaI +DMA_CONTINUOUS_ON * 0x02000000 ; ReBjAX[h nm +DMA_SRC_INC * 0x00000000 ; ] CNg I +DMA_SRC_DEC * 0x00800000 ; ] fNg I +DMA_SRC_FIX * 0x01000000 ; ] Œ I +DMA_DEST_INC * 0x00000000 ; ] CNg I +DMA_DEST_DEC * 0x00200000 ; ] fNg I +DMA_DEST_FIX * 0x00400000 ; ] Œ I +DMA_DEST_RELOAD * 0x00600000 ; ] CNg/[h I + +; \̃op萔 + +ST_DMA_TIMMING_IMM * 0 ; ɋN +ST_DMA_TIMMING_V_BLANK * 1 ; uuNN +ST_DMA_TIMMING_CARD * 2 ; J[h +ST_DMA_TIMMING_CARTRIDGE * 3 ; J[gbW +ST_DMA_16BIT_BUS * 0 ; oXTCYPUI +ST_DMA_32BIT_BUS * 1 ; oXTCYRQI +ST_DMA_INC * 0 ; AhXECNg I +ST_DMA_DEC * 1 ; AhXEfNg I +ST_DMA_FIX * 2 ; AhXŒ I +ST_DMA_RELOAD * 3 ; AhXECNg/[h I + + +;----------------------------------------------------------------------- +; ^C}[ Rg[ +;----------------------------------------------------------------------- + +TMR_PRESCALER_MASK * 0x00030000 ; vXP[ NbN + +TMR_PRESCALER_SHIFT * 16 + +TMR_PRESCALER_1CK * 0x00000000 ; vXP[ P +TMR_PRESCALER_64CK * 0x00010000 ; US +TMR_PRESCALER_256CK * 0x00020000 ; QTU +TMR_PRESCALER_1024CK * 0x00030000 ; POQS +TMR_CONNECT * 0x00040000 ; ʃ^C}[ڑ +TMR_IF_ENABLE * 0x00400000 ; 荞ݗv +TMR_ENABLE * 0x00800000 ; ^C}[N + +; \̃op萔 + +ST_TMR_PRESCALER_1CK * 0 ; vXP[ P +ST_TMR_PRESCALER_64CK * 1 ; US +ST_TMR_PRESCALER_256CK * 2 ; QTU +ST_TMR_PRESCALER_1024CK * 3 ; POQS + + +;----------------------------------------------------------------------- +; L[ +;----------------------------------------------------------------------- + +BUTTON_MASK * 0x030f ; {^ +PLUS_KEY_MASK * 0x00f0 ; \L[ +ALL_KEY_MASK * 0x03ff ; SẴL[ + +A_BUTTON * 0x0001 ; `{^ +B_BUTTON * 0x0002 ; a{^ +SELECT_BUTTON * 0x0004 ; ZNg{^ +START_BUTTON * 0x0008 ; X^[g{^ +R_KEY * 0x0010 ; E{^ +L_KEY * 0x0020 ; {^ +U_KEY * 0x0040 ; {^ +D_KEY * 0x0080 ; {^ +R_BUTTON * 0x0100 ; q{^ +L_BUTTON * 0x0200 ; k{^ +KEY_IF_ENABLE * 0x4000 ; 荞ݗv +KEY_OR_INTR * 0x0000 ; ʏL[荞 +KEY_AND_INTR * 0x8000 ; `mcL[荞 + +; \̃op萔 + +ST_KEY_OR_INTR * 0 ; ʏL[荞 +ST_KEY_AND_INTR * 1 ; `mcL[荞 + + +;----------------------------------------------------------------------- +; O Rg[ +;----------------------------------------------------------------------- + +CTRDG_DT8_10CYC * 0x0000 ; J[gbW Wf[^oX POTCN +CTRDG_DT8_8CYC * 0x0001 ; WTCN +CTRDG_DT8_6CYC * 0x0002 ; UTCN +CTRDG_DT8_18CYC * 0x0003 ; PWTCN +CTRDG_AD16_1ST_10CYC * 0x0000 ; J[gbW `cPUoX P POTCN +CTRDG_AD16_1ST_8CYC * 0x0004 ; WTCN +CTRDG_AD16_1ST_6CYC * 0x0008 ; UTCN +CTRDG_AD16_1ST_18CYC * 0x000c ; PWTCN +CTRDG_AD16_2ND_6CYC * 0x0000 ; Q UTCN +CTRDG_AD16_2ND_4CYC * 0x0010 ; STCN + +CTRDG_PHI_OUT_NONE * 0x0000 ; Ӓ[qo̓NbN kŒ +CTRDG_PHI_OUT_4MCK * 0x0020 ; Slg +CTRDG_PHI_OUT_8MCK * 0x0040 ; Wlg +CTRDG_PHI_OUT_16MCK * 0x0060 ; PUlg + +CTRDG_ACCESS * 0x0080 ; J[gbWANZX +CTRDG_ACCESS_MAINP * 0x0000 ; CvZbT +CTRDG_ACCESS_SUBP * 0x0080 ; TuvZbT + +CARD_ACCESS * 0x0800 ; J[hANZX +CARD_ACCESS_MAINP * 0x0000 ; CvZbT +CARD_ACCESS_SUBP * 0x0800 ; TuvZbT + +MMEM_CE2_OUT * 0x2000 ; bdQMmF + +MMEM_INTF * 0x4000 ; CC^tF[Xisdfł͏ɃZbgē[hɂj +MMEM_INTF_ASYNC * 0x0000 ; 񓯊[h +MMEM_INTF_SYNC * 0x4000 ; [h + +MMEM_PRIORITY * 0x8000 ; CD挠 +MMEM_PRIORITY_MAINP * 0x0000 ; CvZbT +MMEM_PRIORITY_SUBP * 0x8000 ; TuvZbT + +; \̃op萔 + +ST_CTRDG_DT8_10CYC * 0 ; J[gbW Wf[^oX POTCN +ST_CTRDG_DT8_8CYC * 1 ; WTCN +ST_CTRDG_DT8_6CYC * 2 ; UTCN +ST_CTRDG_DT8_18CYC * 3 ; PWTCN +ST_CTRDG_AD16_1ST_10CYC * 0 ; J[gbW `cPUoX P POTCN +ST_CTRDG_AD16_1ST_8CYC * 1 ; WTCN +ST_CTRDG_AD16_1ST_6CYC * 2 ; UTCN +ST_CTRDG_AD16_1ST_18CYC * 3 ; PWTCN +ST_CTRDG_AD16_2ND_6CYC * 0 ; Q UTCN +ST_CTRDG_AD16_2ND_4CYC * 1 ; STCN + +ST_CTRDG_PHI_OUT_NONE * 0 ; Ӓ[qo̓NbN kŒ +ST_CTRDG_PHI_OUT_4MCK * 1 ; Slg +ST_CTRDG_PHI_OUT_8MCK * 2 ; Wlg +ST_CTRDG_PHI_OUT_16MCK * 3 ; PUlg + + + + ENDIF ; _IRIS_SUBP_DEFINE_H + + END + diff --git a/trunk/IrisSubp/include/IrisSubpMacro.h b/trunk/IrisSubp/include/IrisSubpMacro.h new file mode 100644 index 0000000..1cbb500 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpMacro.h @@ -0,0 +1,410 @@ +//====================================================================== +// IrisSubpMacro.h +// IRISTuvZbT W}N֐ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_MACRO_H +#define _IRIS_SUBP_MACRO_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + +//---------------------------------------------------------------------- +// f[^ǂݍ +//---------------------------------------------------------------------- + +#define ReadData(readp, bit) (*(vu##bit *)(readp)) + +//---------------------------------------------------------------------- +// f[^ +//---------------------------------------------------------------------- + +#define WriteData(writep, data, bit) \ + \ + (*(vu##bit *)(writep) = (data)) + +//---------------------------------------------------------------------- +// f[^ Rs[ +//---------------------------------------------------------------------- + +#define CopyData(readp, writep, bit) \ + \ + (*(vu##bit *)(writep) = *(vu##bit *)(readp)) + + +//---------------------------------------------------------------------- +// AhXEobt@̗L +//---------------------------------------------------------------------- + +#ifdef __CC_ARM +#define EnableAlignBuf(alignBuf) \ +{ \ + vu16 alignBufTmp = *(vu16 *)alignBuf; \ +} +#else +#define EnableAlignBuf(alignBuf) ((void) 0) +#endif + + +//---------------------------------------------------------------------- +// 荞݃AhX Zbg +//---------------------------------------------------------------------- + +#define SetIntrAddr(intrp) \ + \ + (*(vu32 *)INTR_VECTOR_BUF = (vu32 )intrp) + +//E荞ݏ̃AhXZbg܂B + + +//---------------------------------------------------------------------- +// cl` Zbg +//---------------------------------------------------------------------- + +//#define SIMULATOR +#ifndef SIMULATOR +#define DmaSet(dmaNo, srcp, destp, dmaCntData) \ +{ \ + vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \ + dmaCntp[0] = (vu32 )(srcp); \ + dmaCntp[1] = (vu32 )(destp); \ + dmaCntp[2] = (vu32 )(dmaCntData); \ + {u32 dummy = dmaCntp[2];} \ +} +#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \ +{ \ + vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \ + dmaCntp[0] = (vu32 )(srcp); \ + dmaCntp[1] = (vu32 )(destp); \ + dmaCntp[2] = (vu32 )(dmaCntData); \ +} +#else +#define DmaSet(dmaNo, srcp, destp, dmaCntData) \ +{ \ + int i; \ + for (i=0; i<(dmaCntData & 0x1ffff); i++) \ + if ((dmaCntData) & DMA_SRC_FIX) { \ + if ((dmaCntData) & DMA_32BIT_BUS) \ + ((vu32 *)(destp))[i] = ((vu32 *)(srcp))[0]; \ + else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[0]; \ + } else { \ + if ((dmaCntData) & DMA_32BIT_BUS) \ + ((vu32 *)(destp))[i] = ((vu32 *)(srcp))[i]; \ + else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[i]; \ + } \ +} +#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \ + DmaSet( dmaNo, srcp, destp, dmaCntData) +#endif + +//EDMARg[Ƀp[^Zbg܂B +//ESIMULATER`CPUŃV~[g܂B +// GDBŃfobOꍇȂǂɗLłB +//EŌDMAN҂̂߂"LDR"߂}܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// dmaCntData p[^f[^ +// +//CPURAM̃vOɂDMAN +// ̖̎߂Ɏs܂B +// āADMAɓ]CPUɂĕύX悤ƂꍇA +// ǂݍ݁^߂̊ԂDMANĂ܂܂̂ŁA +// DMA̓]̃f[^Ӑ}ĂȂlɂȂꍇ܂B +// ̏ꍇɂWaitDma()𒼌ɑ}āADMAI +// ǂ`FbNƑR[hւ̉emɉł܂B + + +//---------------------------------------------------------------------- +// cl` NA +//---------------------------------------------------------------------- + +#define DmaClear(dmaNo, data, destp, size, bit) \ +{ \ + vu##bit tmp = (data); \ + DmaSet(dmaNo, &tmp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_SRC_FIX | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \ +} + +#define DmaClearIf(dmaNo, data, destp, size, bit) \ +{ \ + vu##bit tmp = (data); \ + DmaSet(dmaNo, &tmp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_IF_ENABLE | \ + DMA_SRC_FIX | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \ +} + +#define DmaClearArray( dmaNo, data, destp, bit) \ + DmaClear( dmaNo, data, destp, sizeof(destp), bit) + +#define DmaClearArrayIf(dmaNo, data, destp, bit) \ + DmaClearIf( dmaNo, data, destp, sizeof(destp), bit) + +//EDMARAMNA܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//EDmaClearIf^DmaClearArrayIf͏IɊ荞ݗv𔭐܂B +//EDmaClearArray^DmaClearArrayIf̓fXeBl[VzŜNA܂B +// +//EF +// dmaNo DMAԍ +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg +// bit ]rbgi16|32j +// +// +//CPURAM̃vOɂDMAN +// ̖̎߂Ɏs܂B +// āADMAɓ]CPUɂĕύX悤ƂꍇA +// ǂݍ݁^߂̊ԂDMANĂ܂܂̂ŁA +// DMA̓]̃f[^Ӑ}ĂȂlɂȂꍇ܂B +// ̏ꍇɂWaitDma()𒼌ɑ}āADMAI +// ǂ`FbNƑR[hւ̉emɉł܂B + +//---------------------------------------------------------------------- +// cl` Rs[ +//---------------------------------------------------------------------- + +#define DmaCopy(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/((bit)/8)))) + +#define DmaCopyIf(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_IMM | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define DmaCopyArray( dmaNo, srcp, destp, bit) \ + DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define DmaCopyArrayIf(dmaNo, srcp, destp, bit) \ + DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit) + +//EDMAŃRs[܂B +//EDmaCopyIf^DmaCopyArrayIf͏IɊ荞ݗv𔭐܂B +//EDmaCopyArray^DmaCopyArrayIf̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j +// +// +//CPURAM̃vOɂDMAN +// ̖̎߂Ɏs܂B +// āADMAɓ]CPUɂĕύX悤ƂꍇA +// ǂݍ݁^߂̊ԂDMANĂ܂܂̂ŁA +// DMA̓]̃f[^Ӑ}ĂȂlɂȂꍇ܂B +// ̏ꍇɂWaitDma()𒼌ɑ}āADMAI +// ǂ`FbNƑR[hւ̉emɉł܂B + +//---------------------------------------------------------------------- +// guNcl` Rs[ +//---------------------------------------------------------------------- + +#define H_DmaCopy(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_H_BLANK | \ + DMA_SRC_INC | DMA_DEST_RELOAD | \ + DMA_CONTINUOUS_ON | \ + DMA_##bit##BIT_BUS | ((size)/((bit)/8)))) + +#define H_DmaCopyIf(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_H_BLANK | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_RELOAD | \ + DMA_CONTINUOUS_ON | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define H_DmaCopyArray( dmaNo, srcp, destp, bit) \ + H_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define H_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \ + H_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit) + +//EHuNɓDMAŃRs[܂B +//EH_DmaCopyIf^H_DmaCopyArrayIf͏IɊ荞ݗv𔭐܂B +//EH_DmaCopyArray^H_DmaCopyArrayIf̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// uuNcl` Rs[ +//---------------------------------------------------------------------- + +#define V_DmaCopy(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_V_BLANK | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define V_DmaCopyIf(dmaNo, srcp, destp, size, bit) \ + \ + DmaSet(dmaNo, srcp, destp, ( \ + DMA_ENABLE | DMA_TIMMING_V_BLANK | \ + DMA_IF_ENABLE | \ + DMA_SRC_INC | DMA_DEST_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8)))) + +#define V_DmaCopyArray( dmaNo, srcp, destp, bit) \ + V_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit) + +#define V_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \ + V_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit) + +//EVuNɓDMAŃRs[܂B +//EV_DmaCopyIf^V_DmaCopyArrayIf͏IɊ荞ݗv𔭐܂B +//EV_DmaCopyArray^V_DmaCopyArrayIf̓\[XzŜRs[܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// cl` I҂ +//---------------------------------------------------------------------- + +#define WaitDma(dmaNo) \ +{ \ + vu32 *(dmaCntp) = (vu32 *)REG_DMA##dmaNo; \ + while (dmaCntp[2] & DMA_ENABLE) ; \ +} + +//EDMȀI҂܂B +// +//EF +// dmaNo DMAԍ + + +//---------------------------------------------------------------------- +// cl` Xgbv +//---------------------------------------------------------------------- + +#define StopDma(dmaNo) \ +{ \ + vu16 *(dmaCntp) = &((vu16 *)REG_DMA0)[dmaNo * 6]; \ + dmaCntp[5] &= ~((DMA_TIMMING_MASK | DMA_CONTINUOUS_ON) \ + >> 16); \ + dmaCntp[5] &= ~( DMA_ENABLE >> 16); \ + {u32 dummy = dmaCntp[5];} \ +} + +//EDMA~܂B +//EAADMA̎N|ꍇ͈xDMAs܂B +// +//EF +// dmaNo DMAԍ + + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define CpuClear(data, destp, size, bit) SVC_CpuClear(data, (void *)(destp), size, bit) + +#define CpuClearArray(data, destp, bit) \ + CpuClear( data, destp, sizeof(destp), bit) + +//ECPURAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//ECpuClearArray̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define CpuCopy(srcp, destp, size, bit) SVC_CpuCopy((void *)(srcp), (void *)(destp), size, bit) + +#define CpuCopyArray(srcp, destp, bit) \ + CpuCopy( srcp, destp, sizeof(srcp), bit) + +//ECPUŃRs[VXeR[Ăяo܂B +//ECpuCopyArray̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define CpuClearFast(data, destp, size) SVC_CpuClearFast(data, (void *)(destp), size) + +#define CpuClearArrayFast(data, destp) \ + CpuClearFast( data, destp, sizeof(destp)) + +//ECPUōRAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//ECpuClearArrayFast̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define CpuCopyFast(srcp, destp, size) SVC_CpuCopyFast((void *)(srcp), (void *)(destp), size) + +#define CpuCopyArrayFast(srcp, destp) \ + CpuCopyFast( srcp, destp, sizeof(srcp)) + +//ECPUōɃRs[VXeR[Ăяo܂B +//ECpuCopyArrayFast̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_MACRO_H diff --git a/trunk/IrisSubp/include/IrisSubpMacroArm.s b/trunk/IrisSubp/include/IrisSubpMacroArm.s new file mode 100644 index 0000000..2350f31 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpMacroArm.s @@ -0,0 +1,42 @@ +;======================================================================= +; IrisSubpMacroArm.s +; IRISTuvZbT W}N֐iARMASMpj +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_MACRO_H + ELSE +_IRIS_SUBP_MACRO_H * 1 + + + INCLUDE IrisSubpTargetArm.s + + +;----------------------------------------------------------------------- +; VXeR[ +;----------------------------------------------------------------------- + + MACRO + SystemCall16 $No + swi $No + MEND + MACRO + SystemCall32 $No + swi $No << 16 + MEND + + MACRO + Halt $Bits ; g`ks + SystemCall$Bits 2 + MEND + MACRO + Stop $Bits ; rsno + SystemCall$Bits 3 + MEND + + + + ENDIF ; _IRIS_SUBP_MACRO_H + + END + diff --git a/trunk/IrisSubp/include/IrisSubpMacroMw.s b/trunk/IrisSubp/include/IrisSubpMacroMw.s new file mode 100644 index 0000000..8bda32b --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpMacroMw.s @@ -0,0 +1,28 @@ +;======================================================================= +; IrisSubpMacroMw.s +; IRIS W}N֐iMWASMARMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= +#ifndef _IRIS_SUBP_MACRO_H +#define _IRIS_SUBP_MACRO_H + + + .INCLUDE IrisSubpTarget.h + + +;----------------------------------------------------------------------- +; VXeR[ +;----------------------------------------------------------------------- + +SystemCall16: .MACRO No + swi No + .ENDM + +SystemCall32: .MACRO No + swi No << 16 + .ENDM + + + +#endif // _IRIS_SUBP_MACRO_H diff --git a/trunk/IrisSubp/include/IrisSubpMemoryMap.h b/trunk/IrisSubp/include/IrisSubpMemoryMap.h new file mode 100644 index 0000000..c88d20c --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpMemoryMap.h @@ -0,0 +1,530 @@ +//====================================================================== +// IrisSubpMemoryMap.h +// IRISTuvZbT }bv萔 +// +// Copyright (C) 2002-2004 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_MEMORY_MAP_H +#define _IRIS_SUBP_MEMORY_MAP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define SHARED_WORK 0x027ff000 // botԋL[N̈ +#define SHARED_WORK_END 0x02800000 + +#if defined(NDEBUG) +#define SUBP_PRV 0x02380000 // TuvZbTL̈i[Xo[Wj +#elif defined(MMEM_4M) +#define SUBP_PRV 0x02300000 // ifobOo[WCSl{́j +#else +#define SUBP_PRV 0x02600000 // ifobOo[WCWl{́j +#endif +#define SUBP_PRV_END SHARED_WORK + + +#define MAIN_MEM 0x02000000 // C +#define MAIN_MEM_END (MAIN_MEM + 0x400000) +#define MAIN_MEM_EX_END (MAIN_MEM + 0x800000) //ig̍ŏIAhXj + +#define MAIN_MEM_CMD_AREA (MAIN_MEM_EX_END - 0x2) // CR}hsGAigp֎~GAj + +#define SHARED_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // L\[XEbNobt@ +#define SHARED_LOCK_BUF_END (MAIN_MEM_EX_END - 0x10) + +#define INIT_LOCK_BUF (MAIN_MEM_EX_END - 0x10) // bNobt@ +#define CARTRIDGE_LOCK_BUF (MAIN_MEM_EX_END - 0x18) // J[gbWEbNobt@ +#define CARD_LOCK_BUF (MAIN_MEM_EX_END - 0x20) // J[hEbNobt@ +#define WRAM_BLOCK1_LOCK_BUF (MAIN_MEM_EX_END - 0x28) // bot[Nq`lEubNPEbNobt@ +#define WRAM_BLOCK0_LOCK_BUF (MAIN_MEM_EX_END - 0x30) // ubNOEbNobt@ +#define VRAM_D_LOCK_BUF (MAIN_MEM_EX_END - 0x38) // uq`l|cEbNobt@ +#define VRAM_C_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // bEbNobt@ + +#define TO_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x50) // TuCvZbT荞ݗvtOiQa~Wj +#define WM_TO_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x50) // CX}l[W\ +#define FROM_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x60) // CTuvZbT荞ݗvtOiQa~Wj +#define WM_FROM_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x60) // CX}l[W\ + +#define ROM_HEADER_BUF (MAIN_MEM_EX_END - 0x200)// qnlo^GAf[^Eobt@ + + +#ifdef IRIS_TS +#define PRV_WRAM_DF_SIZE 0x8000 // botL[Nq`l sr|sdfTCY +#else +#define PRV_WRAM_DF_SIZE 0 +#endif + +#define CPU_WRAM 0x037f8000 // bot[Nq`l RubN\iftHgj +#define CPU_WRAM_END (CPU_WRAM + PRV_WRAM_DF_SIZE + 0x10000) +#define CPU_WRAM_2B 0x037fc000 // QubN\ +#define CPU_WRAM_2B_END (CPU_WRAM_2B + PRV_WRAM_DF_SIZE + 0xc000) +#define CPU_WRAM_BLOCK0 0x037f8000 // ubNO +#define CPU_WRAM_BLOCK0_END (CPU_WRAM_BLOCK0 + 0x4000) +#define CPU_WRAM_BLOCK1 0x037fc000 // ubNP +#define CPU_WRAM_BLOCK1_END (CPU_WRAM_BLOCK1 + 0x4000) +#define PRV_WRAM 0x03800000 // botL[Nq`l +#define PRV_WRAM_END (PRV_WRAM + PRV_WRAM_DF_SIZE + 0x8000) +#define CPU_XWRAM 0x06000000 // botg[Nq`l +#define CPU_XWRAM_END (CPU_XWRAM +0x40000) + +#define INTR_VECTOR_BUF (CPU_WRAM_END - 0x4)// 荞ݕAhX +#define INTR_CHECK_BUF (CPU_WRAM_END - 0x8)// 荞݃`FbN + +#define SEND_FIFO_LOCK_BUF (CPU_WRAM_END - 0x10)// botԑMehenEbNobt@ +#define TIMER3_LOCK_BUF (CPU_WRAM_END - 0x12)// ^C}[REbNobt@ +#define TIMER2_LOCK_BUF (CPU_WRAM_END - 0x14)// ^C}[Q +#define TIMER1_LOCK_BUF (CPU_WRAM_END - 0x16)// ^C}[P +#define TIMER0_LOCK_BUF (CPU_WRAM_END - 0x18)// ^C}[O +#define DMA3_LOCK_BUF (CPU_WRAM_END - 0x1a)// cl`REbNobt@ +#define DMA2_LOCK_BUF (CPU_WRAM_END - 0x1c)// cl`Q +#define DMA1_LOCK_BUF (CPU_WRAM_END - 0x1e)// cl`P +#define DMA0_LOCK_BUF (CPU_WRAM_END - 0x20)// cl`O + + +#define REG_BASE 0x04000000 // WX^Q +#define WIRELESS_INTF 0x04800000 // ʐMC^tF[X +#define WIRELESS_INTF0 0x04800000 // C^tF[XO +#define WIRELESS_INTF1 0x04808000 // C^tF[XP +#define WIRELESS_INTF0_END (WIRELESS_INTF0 + 0x8000) +#define WIRELESS_INTF1_END (WIRELESS_INTF1 + 0x8000) +#define WIRELESS_INTF_END (WIRELESS_INTF + 0x10000) + +#define CARTRIDGE 0x08000000 // J[gbW +#define CTRDG_AD16_BANK0 0x08000000 // J[gbW `cPUoX oNO +#define CTRDG_AD16_BANK0_END 0x0a000000 +#define CTRDG_AD16_BANK1 0x0a000000 // oNP +#define CTRDG_AD16_BANK1_END 0x0c000000 +#define CTRDG_AD16_BANK2 0x0c000000 // oNQ +#define CTRDG_AD16_BANK2_END 0x0e000000 +#define CTRDG_DT8 0x0e000000 // J[gbW Wf[^oX +#define CTRDG_DT8_END 0x10000000 + + +//---------------------------------------------------------------------- +// ETCY +//---------------------------------------------------------------------- + +#define SHARED_WORK_SIZE (SHARED_WORK_END - SHARED_WORK) // botԋL[N̈iSjaȏAQׂ̂TCYj +#define SUBP_PRV_SIZE (SUBP_PRV_END - SUBP_PRV) // TuvZbTL̈iRQjaȏAQׂ̂TCYj + +#define SHARED_LOCK_BUF_SIZE (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) // L\[XEbNobt@ + + +#define MAIN_MEM_SIZE 0x400000 // C +#define MAIN_MEM_EX_SIZE 0x800000 // igj + +#define CPU_WRAM_SIZE (0x10000 + PRV_WRAM_DF_SIZE) // bot[Nq`l RubN\iftHgj +#define CPU_WRAM_2B_SIZE (0xc000 + PRV_WRAM_DF_SIZE) // QubN\ +#define CPU_WRAM_BLOCK0_SIZE 0x4000 // ubNO +#define CPU_WRAM_BLOCK1_SIZE 0x4000 // ubNP +#define PRV_WRAM_SIZE (0x8000 + PRV_WRAM_DF_SIZE) // botL[Nq`l +#define CPU_XWRAM_SIZE 0x40000 // botg[Nq`l + +#define MROM_PAGE_SIZE 512 // }XNqnlEy[W + +#define CARTRIDGE_SIZE 0x02000000 // J[gbW +#define CTRDG_AD16_BANK_SIZE 0x02000000 // J[gbW `cPUoX oN +#define CTRDG_AD16_BANK0_SIZE 0x02000000 // oNO +#define CTRDG_AD16_BANK1_SIZE 0x02000000 // oNP +#define CTRDG_AD16_BANK2_SIZE 0x02000000 // oNQ +#define CTRDG_DT8_SIZE 0x02000000 // J[gbW Wf[^oX + + +//---------------------------------------------------------------------- +// WX^EAhX +//---------------------------------------------------------------------- + +#define REG_IME (REG_BASE + 0x208) // 荞݃}X^Cl[u +#define REG_IE (REG_BASE + 0x210) // 荞݋ +#define REG_IF (REG_BASE + 0x214) // 荞ݗv + +#define REG_MAINPINTF (REG_BASE + 0x180) // CvZbTC^tF[X +#define REG_MAINP_FIFO_CNT (REG_BASE + 0x184) // botԂehenRg[ +#define REG_SEND_FIFO (REG_BASE + 0x188) // Mehen +#define REG_RECV_FIFO (REG_BASE + 0x100000) // Mehen + + +#define REG_POWCNT (REG_BASE + 0x304) // p[Rg[ + +#define REG_EXMEMCNT (REG_BASE + 0x204) // ORg[ + +#define REG_VRAMSTAT (REG_BASE + 0x240) // uq`lXe[^X +#define REG_WRAMSTAT (REG_BASE + 0x241) // [Nq`lXe[^X +#define REG_WVRAMSTAT (REG_BASE + 0x240) // uq`l bEc { [Nq`l Xe[^X + + +#define REG_DISPSTAT (REG_BASE + 0x4) // \Xe[^X +#define REG_VCOUNT (REG_BASE + 0x6) // uJE^ + + +#define REG_SPICNT (REG_BASE + 0x1c0) // SPIRg[ +#define REG_SPIDATA (REG_BASE + 0x1c2) // SPIf[^ + +#define REG_RCNT (REG_BASE + 0x134) // ėpo̓Rg[ + +#define REG_KEYINPUT (REG_BASE + 0x130) // L[ +#define REG_KEYCNT (REG_BASE + 0x132) // L[Rg[ + + +#define REG_DMA0 (REG_BASE + 0xb0) // cl`O +#define REG_DMA0SAD (REG_BASE + 0xb0) +#define REG_DMA0DAD (REG_BASE + 0xb4) +#define REG_DMA0CNT (REG_BASE + 0xb8) +#define REG_DMA0CNT_L (REG_BASE + 0xb8) +#define REG_DMA0CNT_H (REG_BASE + 0xba) +#define REG_DMA1 (REG_BASE + 0xbc) // cl`P +#define REG_DMA1SAD (REG_BASE + 0xbc) +#define REG_DMA1DAD (REG_BASE + 0xc0) +#define REG_DMA1CNT (REG_BASE + 0xc4) +#define REG_DMA1CNT_L (REG_BASE + 0xc4) +#define REG_DMA1CNT_H (REG_BASE + 0xc6) +#define REG_DMA2 (REG_BASE + 0xc8) // cl`Q +#define REG_DMA2SAD (REG_BASE + 0xc8) +#define REG_DMA2DAD (REG_BASE + 0xcc) +#define REG_DMA2CNT (REG_BASE + 0xd0) +#define REG_DMA2CNT_L (REG_BASE + 0xd0) +#define REG_DMA2CNT_H (REG_BASE + 0xd2) +#define REG_DMA3 (REG_BASE + 0xd4) // cl`R +#define REG_DMA3SAD (REG_BASE + 0xd4) +#define REG_DMA3DAD (REG_BASE + 0xd8) +#define REG_DMA3CNT (REG_BASE + 0xdc) +#define REG_DMA3CNT_L (REG_BASE + 0xdc) +#define REG_DMA3CNT_H (REG_BASE + 0xde) + + +#define REG_TM0CNT (REG_BASE + 0x100) // ^C}[O +#define REG_TM0CNT_L (REG_BASE + 0x100) +#define REG_TM0CNT_H (REG_BASE + 0x102) +#define REG_TM1CNT (REG_BASE + 0x104) // ^C}[P +#define REG_TM1CNT_L (REG_BASE + 0x104) +#define REG_TM1CNT_H (REG_BASE + 0x106) +#define REG_TM2CNT (REG_BASE + 0x108) // ^C}[Q +#define REG_TM2CNT_L (REG_BASE + 0x108) +#define REG_TM2CNT_H (REG_BASE + 0x10a) +#define REG_TM3CNT (REG_BASE + 0x10c) // ^C}[R +#define REG_TM3CNT_L (REG_BASE + 0x10c) +#define REG_TM3CNT_H (REG_BASE + 0x10e) + + +#define REG_SOUNDCNT (REG_BASE + 0x500) // TEhE}X^Rg[ + +#define REG_SOUNDBIAS (REG_BASE + 0x504) // TEhah`r + +#define REG_SNDCAPCNT (REG_BASE + 0x508) // TEhLv`Rg[ +#define REG_SNDCAP0DAD (REG_BASE + 0x510) // TEhLv`Op[^ +#define REG_SNDCAP0LEN (REG_BASE + 0x514) +#define REG_SNDCAP1DAD (REG_BASE + 0x518) // TEhLv`Pp[^ +#define REG_SNDCAP1LEN (REG_BASE + 0x51c) + +#define REG_SOUND0CNT (REG_BASE + 0x400) // TEhORg[ +#define REG_SOUND0CNT_L (REG_BASE + 0x400) +#define REG_SOUND0CNT_H (REG_BASE + 0x402) +#define REG_SOUND0SAD (REG_BASE + 0x404) +#define REG_SOUND0TMR (REG_BASE + 0x408) +#define REG_SOUND0RPT_PT (REG_BASE + 0x40a) +#define REG_SOUND0RPT_LEN (REG_BASE + 0x40c) +#define REG_SOUND1CNT (REG_BASE + 0x410) // TEhPRg[ +#define REG_SOUND1CNT_L (REG_BASE + 0x410) +#define REG_SOUND1CNT_H (REG_BASE + 0x412) +#define REG_SOUND1SAD (REG_BASE + 0x414) +#define REG_SOUND1TMR (REG_BASE + 0x418) +#define REG_SOUND1RPT_PT (REG_BASE + 0x41a) +#define REG_SOUND1RPT_LEN (REG_BASE + 0x41c) +#define REG_SOUND2CNT (REG_BASE + 0x420) // TEhQRg[ +#define REG_SOUND2CNT_L (REG_BASE + 0x420) +#define REG_SOUND2CNT_H (REG_BASE + 0x422) +#define REG_SOUND2SAD (REG_BASE + 0x424) +#define REG_SOUND2TMR (REG_BASE + 0x428) +#define REG_SOUND2RPT_PT (REG_BASE + 0x42a) +#define REG_SOUND2RPT_LEN (REG_BASE + 0x42c) +#define REG_SOUND3CNT (REG_BASE + 0x430) // TEhRRg[ +#define REG_SOUND3CNT_L (REG_BASE + 0x430) +#define REG_SOUND3CNT_H (REG_BASE + 0x432) +#define REG_SOUND3SAD (REG_BASE + 0x434) +#define REG_SOUND3TMR (REG_BASE + 0x438) +#define REG_SOUND3RPT_PT (REG_BASE + 0x43a) +#define REG_SOUND3RPT_LEN (REG_BASE + 0x43c) +#define REG_SOUND4CNT (REG_BASE + 0x440) // TEhSRg[ +#define REG_SOUND4CNT_L (REG_BASE + 0x440) +#define REG_SOUND4CNT_H (REG_BASE + 0x442) +#define REG_SOUND4SAD (REG_BASE + 0x444) +#define REG_SOUND4TMR (REG_BASE + 0x448) +#define REG_SOUND4RPT_PT (REG_BASE + 0x44a) +#define REG_SOUND4RPT_LEN (REG_BASE + 0x44c) +#define REG_SOUND5CNT (REG_BASE + 0x450) // TEhTRg[ +#define REG_SOUND5CNT_L (REG_BASE + 0x450) +#define REG_SOUND5CNT_H (REG_BASE + 0x452) +#define REG_SOUND5SAD (REG_BASE + 0x454) +#define REG_SOUND5TMR (REG_BASE + 0x458) +#define REG_SOUND5RPT_PT (REG_BASE + 0x45a) +#define REG_SOUND5RPT_LEN (REG_BASE + 0x45c) +#define REG_SOUND6CNT (REG_BASE + 0x460) // TEhURg[ +#define REG_SOUND6CNT_L (REG_BASE + 0x460) +#define REG_SOUND6CNT_H (REG_BASE + 0x462) +#define REG_SOUND6SAD (REG_BASE + 0x464) +#define REG_SOUND6TMR (REG_BASE + 0x468) +#define REG_SOUND6RPT_PT (REG_BASE + 0x46a) +#define REG_SOUND6RPT_LEN (REG_BASE + 0x46c) +#define REG_SOUND7CNT (REG_BASE + 0x470) // TEhVRg[ +#define REG_SOUND7CNT_L (REG_BASE + 0x470) +#define REG_SOUND7CNT_H (REG_BASE + 0x472) +#define REG_SOUND7SAD (REG_BASE + 0x474) +#define REG_SOUND7TMR (REG_BASE + 0x478) +#define REG_SOUND7RPT_PT (REG_BASE + 0x47a) +#define REG_SOUND7RPT_LEN (REG_BASE + 0x47c) +#define REG_SOUND8CNT (REG_BASE + 0x480) // TEhWRg[ +#define REG_SOUND8CNT_L (REG_BASE + 0x480) +#define REG_SOUND8CNT_H (REG_BASE + 0x482) +#define REG_SOUND8SAD (REG_BASE + 0x484) +#define REG_SOUND8TMR (REG_BASE + 0x488) +#define REG_SOUND8RPT_PT (REG_BASE + 0x48a) +#define REG_SOUND8RPT_LEN (REG_BASE + 0x48c) +#define REG_SOUND9CNT (REG_BASE + 0x490) // TEhXRg[ +#define REG_SOUND9CNT_L (REG_BASE + 0x490) +#define REG_SOUND9CNT_H (REG_BASE + 0x492) +#define REG_SOUND9SAD (REG_BASE + 0x494) +#define REG_SOUND9TMR (REG_BASE + 0x498) +#define REG_SOUND9RPT_PT (REG_BASE + 0x49a) +#define REG_SOUND9RPT_LEN (REG_BASE + 0x49c) +#define REG_SOUND10CNT (REG_BASE + 0x4a0) // TEhPORg[ +#define REG_SOUND10CNT_L (REG_BASE + 0x4a0) +#define REG_SOUND10CNT_H (REG_BASE + 0x4a2) +#define REG_SOUND10SAD (REG_BASE + 0x4a4) +#define REG_SOUND10TMR (REG_BASE + 0x4a8) +#define REG_SOUND10RPT_PT (REG_BASE + 0x4aa) +#define REG_SOUND10RPT_LEN (REG_BASE + 0x4ac) +#define REG_SOUND11CNT (REG_BASE + 0x4b0) // TEhPPRg[ +#define REG_SOUND11CNT_L (REG_BASE + 0x4b0) +#define REG_SOUND11CNT_H (REG_BASE + 0x4b2) +#define REG_SOUND11SAD (REG_BASE + 0x4b4) +#define REG_SOUND11TMR (REG_BASE + 0x4b8) +#define REG_SOUND11RPT_PT (REG_BASE + 0x4ba) +#define REG_SOUND11RPT_LEN (REG_BASE + 0x4bc) +#define REG_SOUND12CNT (REG_BASE + 0x4c0) // TEhPQRg[ +#define REG_SOUND12CNT_L (REG_BASE + 0x4c0) +#define REG_SOUND12CNT_H (REG_BASE + 0x4c2) +#define REG_SOUND12SAD (REG_BASE + 0x4c4) +#define REG_SOUND12TMR (REG_BASE + 0x4c8) +#define REG_SOUND12RPT_PT (REG_BASE + 0x4ca) +#define REG_SOUND12RPT_LEN (REG_BASE + 0x4cc) +#define REG_SOUND13CNT (REG_BASE + 0x4d0) // TEhPRRg[ +#define REG_SOUND13CNT_L (REG_BASE + 0x4d0) +#define REG_SOUND13CNT_H (REG_BASE + 0x4d2) +#define REG_SOUND13SAD (REG_BASE + 0x4d4) +#define REG_SOUND13TMR (REG_BASE + 0x4d8) +#define REG_SOUND13RPT_PT (REG_BASE + 0x4da) +#define REG_SOUND13RPT_LEN (REG_BASE + 0x4dc) +#define REG_SOUND14CNT (REG_BASE + 0x4e0) // TEhPSRg[ +#define REG_SOUND14CNT_L (REG_BASE + 0x4e0) +#define REG_SOUND14CNT_H (REG_BASE + 0x4e2) +#define REG_SOUND14SAD (REG_BASE + 0x4e4) +#define REG_SOUND14TMR (REG_BASE + 0x4e8) +#define REG_SOUND14RPT_PT (REG_BASE + 0x4ea) +#define REG_SOUND14RPT_LEN (REG_BASE + 0x4ec) +#define REG_SOUND15CNT (REG_BASE + 0x4f0) // TEhPTRg[ +#define REG_SOUND15CNT_L (REG_BASE + 0x4f0) +#define REG_SOUND15CNT_H (REG_BASE + 0x4f2) +#define REG_SOUND15SAD (REG_BASE + 0x4f4) +#define REG_SOUND15TMR (REG_BASE + 0x4f8) +#define REG_SOUND15RPT_PT (REG_BASE + 0x4fa) +#define REG_SOUND15RPT_LEN (REG_BASE + 0x4fc) + + +//---------------------------------------------------------------------- +// WX^EItZbg +//---------------------------------------------------------------------- + +#define OFFSET_REG_IME 0x208 // 荞݃}X^Cl[u +#define OFFSET_REG_IE 0x210 // 荞݋ +#define OFFSET_REG_IF 0x214 // 荞ݗv + +#define OFFSET_REG_MAINPINTF 0x180 // CvZbTC^tF[X +#define OFFSET_REG_MAINP_FIFO_CNT 0x184 // botԂehenRg[ +#define OFFSET_REG_SEND_FIFO 0x188 // Mehen +#define OFFSET_REG_RECV_FIFO 0x100000 // Mehen + + +#define OFFSET_REG_POWCNT 0x304 // p[Rg[ + +#define OFFSET_REG_EXMEMCNT 0x204 // ORg[ + +#define OFFSET_REG_VRAMSTAT 0x240 // uq`lXe[^X +#define OFFSET_REG_WRAMSTAT 0x241 // [Nq`lXe[^X +#define OFFSET_REG_WVRAMSTAT 0x240 // uq`l bEc { [Nq`l Xe[^X + + +#define OFFSET_REG_DISPSTAT 0x4 // Xe[^X +#define OFFSET_REG_VCOUNT 0x6 // uJE^ + + +#define OFFSET_REG_SPICNT 0x1c0 // SPIRg[ +#define OFFSET_REG_SPIDATA 0x1c2 // SPIf[^ + +#define OFFSET_REG_RCNT 0x134 // ėpo̓Rg[ + +#define OFFSET_REG_KEYINPUT 0x130 // L[ +#define OFFSET_REG_KEYCNT 0x132 // L[Rg[ + + +#define OFFSET_REG_DMA0 0xb0 // cl`O +#define OFFSET_REG_DMA0SAD 0xb0 +#define OFFSET_REG_DMA0DAD 0xb4 +#define OFFSET_REG_DMA0CNT 0xb8 +#define OFFSET_REG_DMA0CNT_L 0xb8 +#define OFFSET_REG_DMA0CNT_H 0xba +#define OFFSET_REG_DMA1 0xbc // cl`P +#define OFFSET_REG_DMA1SAD 0xbc +#define OFFSET_REG_DMA1DAD 0xc0 +#define OFFSET_REG_DMA1CNT 0xc4 +#define OFFSET_REG_DMA1CNT_L 0xc4 +#define OFFSET_REG_DMA1CNT_H 0xc6 +#define OFFSET_REG_DMA2 0xc8 // cl`Q +#define OFFSET_REG_DMA2SAD 0xc8 +#define OFFSET_REG_DMA2DAD 0xcc +#define OFFSET_REG_DMA2CNT 0xd0 +#define OFFSET_REG_DMA2CNT_L 0xd0 +#define OFFSET_REG_DMA2CNT_H 0xd2 +#define OFFSET_REG_DMA3 0xd4 // cl`R +#define OFFSET_REG_DMA3SAD 0xd4 +#define OFFSET_REG_DMA3DAD 0xd8 +#define OFFSET_REG_DMA3CNT 0xdc +#define OFFSET_REG_DMA3CNT_L 0xdc +#define OFFSET_REG_DMA3CNT_H 0xde + + +#define OFFSET_REG_TM0CNT 0x100 // ^C}[O +#define OFFSET_REG_TM0CNT_L 0x100 +#define OFFSET_REG_TM0CNT_H 0x102 +#define OFFSET_REG_TM1CNT 0x104 // ^C}[P +#define OFFSET_REG_TM1CNT_L 0x104 +#define OFFSET_REG_TM1CNT_H 0x106 +#define OFFSET_REG_TM2CNT 0x108 // ^C}[Q +#define OFFSET_REG_TM2CNT_L 0x108 +#define OFFSET_REG_TM2CNT_H 0x10a +#define OFFSET_REG_TM3CNT 0x10c // ^C}[R +#define OFFSET_REG_TM3CNT_L 0x10c +#define OFFSET_REG_TM3CNT_H 0x10e + + +#define OFFSET_REG_SOUNDCNT 0x500 // TEhE}X^Rg[ + +#define OFFSET_REG_SOUNDBIAS 0x504 // TEhah`r + +#define OFFSET_REG_SNDCAPCNT 0x508 // TEhLv`Rg[ +#define OFFSET_REG_SNDCAP0DAD 0x510 // TEhLv`Op[^ +#define OFFSET_REG_SNDCAP0LEN 0x514 +#define OFFSET_REG_SNDCAP1DAD 0x518 // TEhLv`Pp[^ +#define OFFSET_REG_SNDCAP1LEN 0x51c + +#define OFFSET_REG_SOUND0CNT 0x400 // TEhORg[ +#define OFFSET_REG_SOUND0CNT_L 0x400 +#define OFFSET_REG_SOUND0CNT_H 0x402 +#define OFFSET_REG_SOUND0SAD 0x404 +#define OFFSET_REG_SOUND0TMR 0x408 +#define OFFSET_REG_SOUND0REPLEN 0x40c +#define OFFSET_REG_SOUND1CNT 0x410 // TEhPRg[ +#define OFFSET_REG_SOUND1CNT_L 0x410 +#define OFFSET_REG_SOUND1CNT_H 0x412 +#define OFFSET_REG_SOUND1SAD 0x414 +#define OFFSET_REG_SOUND1TMR 0x418 +#define OFFSET_REG_SOUND1REPLEN 0x41c +#define OFFSET_REG_SOUND2CNT 0x420 // TEhQRg[ +#define OFFSET_REG_SOUND2CNT_L 0x420 +#define OFFSET_REG_SOUND2CNT_H 0x422 +#define OFFSET_REG_SOUND2SAD 0x424 +#define OFFSET_REG_SOUND2TMR 0x428 +#define OFFSET_REG_SOUND2REPLEN 0x42c +#define OFFSET_REG_SOUND3CNT 0x430 // TEhRRg[ +#define OFFSET_REG_SOUND3CNT_L 0x430 +#define OFFSET_REG_SOUND3CNT_H 0x432 +#define OFFSET_REG_SOUND3SAD 0x434 +#define OFFSET_REG_SOUND3TMR 0x438 +#define OFFSET_REG_SOUND3REPLEN 0x43c +#define OFFSET_REG_SOUND4CNT 0x440 // TEhSRg[ +#define OFFSET_REG_SOUND4CNT_L 0x440 +#define OFFSET_REG_SOUND4CNT_H 0x442 +#define OFFSET_REG_SOUND4SAD 0x444 +#define OFFSET_REG_SOUND4TMR 0x448 +#define OFFSET_REG_SOUND4REPLEN 0x44c +#define OFFSET_REG_SOUND5CNT 0x450 // TEhTRg[ +#define OFFSET_REG_SOUND5CNT_L 0x450 +#define OFFSET_REG_SOUND5CNT_H 0x452 +#define OFFSET_REG_SOUND5SAD 0x454 +#define OFFSET_REG_SOUND5TMR 0x458 +#define OFFSET_REG_SOUND5REPLEN 0x45c +#define OFFSET_REG_SOUND6CNT 0x460 // TEhURg[ +#define OFFSET_REG_SOUND6CNT_L 0x460 +#define OFFSET_REG_SOUND6CNT_H 0x462 +#define OFFSET_REG_SOUND6SAD 0x464 +#define OFFSET_REG_SOUND6TMR 0x468 +#define OFFSET_REG_SOUND6REPLEN 0x46c +#define OFFSET_REG_SOUND7CNT 0x470 // TEhVRg[ +#define OFFSET_REG_SOUND7CNT_L 0x470 +#define OFFSET_REG_SOUND7CNT_H 0x472 +#define OFFSET_REG_SOUND7SAD 0x474 +#define OFFSET_REG_SOUND7TMR 0x478 +#define OFFSET_REG_SOUND7REPLEN 0x47c +#define OFFSET_REG_SOUND8CNT 0x480 // TEhWRg[ +#define OFFSET_REG_SOUND8CNT_L 0x480 +#define OFFSET_REG_SOUND8CNT_H 0x482 +#define OFFSET_REG_SOUND8SAD 0x484 +#define OFFSET_REG_SOUND8TMR 0x488 +#define OFFSET_REG_SOUND8REPLEN 0x48c +#define OFFSET_REG_SOUND9CNT 0x490 // TEhXRg[ +#define OFFSET_REG_SOUND9CNT_L 0x490 +#define OFFSET_REG_SOUND9CNT_H 0x492 +#define OFFSET_REG_SOUND9SAD 0x494 +#define OFFSET_REG_SOUND9TMR 0x498 +#define OFFSET_REG_SOUND9REPLEN 0x49c +#define OFFSET_REG_SOUND10CNT 0x4a0 // TEhPORg[ +#define OFFSET_REG_SOUND10CNT_L 0x4a0 +#define OFFSET_REG_SOUND10CNT_H 0x4a2 +#define OFFSET_REG_SOUND10SAD 0x4a4 +#define OFFSET_REG_SOUND10TMR 0x4a8 +#define OFFSET_REG_SOUND10REPLEN 0x4ac +#define OFFSET_REG_SOUND11CNT 0x4b0 // TEhPPRg[ +#define OFFSET_REG_SOUND11CNT_L 0x4b0 +#define OFFSET_REG_SOUND11CNT_H 0x4b2 +#define OFFSET_REG_SOUND11SAD 0x4b4 +#define OFFSET_REG_SOUND11TMR 0x4b8 +#define OFFSET_REG_SOUND11REPLEN 0x4bc +#define OFFSET_REG_SOUND12CNT 0x4c0 // TEhPQRg[ +#define OFFSET_REG_SOUND12CNT_L 0x4c0 +#define OFFSET_REG_SOUND12CNT_H 0x4c2 +#define OFFSET_REG_SOUND12SAD 0x4c4 +#define OFFSET_REG_SOUND12TMR 0x4c8 +#define OFFSET_REG_SOUND12REPLEN 0x4cc +#define OFFSET_REG_SOUND13CNT 0x4d0 // TEhPRRg[ +#define OFFSET_REG_SOUND13CNT_L 0x4d0 +#define OFFSET_REG_SOUND13CNT_H 0x4d2 +#define OFFSET_REG_SOUND13SAD 0x4d4 +#define OFFSET_REG_SOUND13TMR 0x4d8 +#define OFFSET_REG_SOUND13REPLEN 0x4dc +#define OFFSET_REG_SOUND14CNT 0x4e0 // TEhPSRg[ +#define OFFSET_REG_SOUND14CNT_L 0x4e0 +#define OFFSET_REG_SOUND14CNT_H 0x4e2 +#define OFFSET_REG_SOUND14SAD 0x4e4 +#define OFFSET_REG_SOUND14TMR 0x4e8 +#define OFFSET_REG_SOUND14REPLEN 0x4ec +#define OFFSET_REG_SOUND15CNT 0x4f0 // TEhPTRg[ +#define OFFSET_REG_SOUND15CNT_L 0x4f0 +#define OFFSET_REG_SOUND15CNT_H 0x4f2 +#define OFFSET_REG_SOUND15SAD 0x4f4 +#define OFFSET_REG_SOUND15TMR 0x4f8 +#define OFFSET_REG_SOUND15REPLEN 0x4fc + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_MEMORY_MAP_H diff --git a/trunk/IrisSubp/include/IrisSubpMemoryMapArm.s b/trunk/IrisSubp/include/IrisSubpMemoryMapArm.s new file mode 100644 index 0000000..10007d6 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpMemoryMapArm.s @@ -0,0 +1,529 @@ +;======================================================================= +; IrisSubpMemoryMapArm.s +; IRISTuvZbT }bv萔iARMASMpj +; +; Copyright (C) 2002-2004 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_MEMORY_MAP_H + ELSE +_IRIS_SUBP_MEMORY_MAP_H * 1 + + + INCLUDE IrisSubpTargetArm.s + + +;----------------------------------------------------------------------- +; E}bv +;----------------------------------------------------------------------- + +SHARE_WORK * 0x027ff000 ; botԋL[N̈ +SHARE_WORK_END * 0x02800000 + + IF :DEF: NDEBUG +SUBP_PRV * 0x02380000 ; TuvZbTL̈i[Xo[Wj + ELSE + IF :DEF: MMEM_4M +SUBP_PRV * 0x02300000 ; ifobOo[WCSl{́j + ELSE +SUBP_PRV * 0x02600000 ; ifobOo[WCWl{́j + ENDIF + ENDIF +SUBP_PRV_END * SHARED_WORK + + +MAIN_MEM * 0x02000000 ; C +MAIN_MEM_END * (MAIN_MEM + 0x400000) +MAIN_MEM_EX_END * (MAIN_MEM + 0x800000) ;ig̍ŏIAhXj + +MAIN_MEM_CMD_AREA * (MAIN_MEM_EX_END - 0x2) ; CR}hsGAigp֎~GAj + +SHARED_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; L\[XEbNobt@ +SHARED_LOCK_BUF_END * (MAIN_MEM_EX_END - 0x10) + +INIT_LOCK_BUF * (MAIN_MEM_EX_END - 0x10) ; bNobt@ +CARTRIDGE_LOCK_BUF * (MAIN_MEM_EX_END - 0x18) ; J[gbWEbNobt@ +CARD_LOCK_BUF * (MAIN_MEM_EX_END - 0x20) ; J[hEbNobt@ +WRAM_BLOCK1_LOCK_BUF * (MAIN_MEM_EX_END - 0x28) ; bot[Nq`lEubNPEbNobt@ +WRAM_BLOCK0_LOCK_BUF * (MAIN_MEM_EX_END - 0x30) ; ubNOEbNobt@ +VRAM_D_LOCK_BUF * (MAIN_MEM_EX_END - 0x38) ; uq`l|cEbNobt@ +VRAM_C_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; bEbNobt@ + +TO_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; TuCvZbT荞ݗvtOiQa~Wj +WM_TO_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; CX}l[W\ +FROM_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; CTuvZbT荞ݗvtOiQa~Wj +WM_FROM_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; CX}l[W\ + +ROM_HEADER_BUF * (MAIN_MEM_EX_END - 0x200); qnlo^GAf[^Eobt@ + + + IF :DEF: IRIS_TS +PRV_WRAM_DF_SIZE * 0x8000 ; botL[Nq`l sr|sdfTCY + ELSE +PRV_WRAM_DF_SIZE * 0 + ENDIF + +CPU_WRAM * 0x037f8000 ; bot[Nq`l RubN\iftHgj +CPU_WRAM_END * (CPU_WRAM + PRV_WRAM_DF_SIZE + 0x10000) +CPU_WRAM_2B * 0x037fc000 ; QubN\ +CPU_WRAM_2B_END * (CPU_WRAM_2B + PRV_WRAM_DF_SIZE + 0xc000) +CPU_WRAM_BLOCK0 * 0x037f8000 ; ubNO +CPU_WRAM_BLOCK0_END * (CPU_WRAM_BLOCK0 + 0x4000) +CPU_WRAM_BLOCK1 * 0x037fc000 ; ubNP +CPU_WRAM_BLOCK1_END * (CPU_WRAM_BLOCK1 + 0x4000) +PRV_WRAM * 0x03800000 ; botL[Nq`l +PRV_WRAM_END * (PRV_WRAM + PRV_WRAM_DF_SIZE + 0x8000) +CPU_XWRAM * 0x06000000 ; botg[Nq`l +CPU_XWRAM_END * (CPU_XWRAM +0x40000) + +INTR_VECTOR_BUF * (CPU_WRAM_END - 0x4); 荞ݕAhX +INTR_CHECK_BUF * (CPU_WRAM_END - 0x8); 荞݃`FbN + +SEND_FIFO_LOCK_BUF * (CPU_WRAM_END - 0x10); botԑMehenEbNobt@ +TIMER3_LOCK_BUF * (CPU_WRAM_END - 0x12); ^C}[REbNobt@ +TIMER2_LOCK_BUF * (CPU_WRAM_END - 0x14); ^C}[Q +TIMER1_LOCK_BUF * (CPU_WRAM_END - 0x16); ^C}[P +TIMER0_LOCK_BUF * (CPU_WRAM_END - 0x18); ^C}[O +DMA3_LOCK_BUF * (CPU_WRAM_END - 0x1a); cl`REbNobt@ +DMA2_LOCK_BUF * (CPU_WRAM_END - 0x1c); cl`Q +DMA1_LOCK_BUF * (CPU_WRAM_END - 0x1e); cl`P +DMA0_LOCK_BUF * (CPU_WRAM_END - 0x20); cl`O + + +REG_BASE * 0x04000000 ; WX^Q +WIRELESS_INTF * 0x04800000 ; ʐMC^tF[X +WIRELESS_INTF0 * 0x04800000 ; C^tF[XO +WIRELESS_INTF1 * 0x04808000 ; C^tF[XP +WIRELESS_INTF0_END * (WIRELESS_INTF0 + 0x8000) +WIRELESS_INTF1_END * (WIRELESS_INTF1 + 0x8000) +WIRELESS_INTF_END * (WIRELESS_INTF + 0x10000) + +CARTRIDGE * 0x08000000 ; J[gbW +CTRDG_AD16_BANK0 * 0x08000000 ; J[gbW `cPUoX oNO +CTRDG_AD16_BANK0_END * 0x0a000000 +CTRDG_AD16_BANK1 * 0x0a000000 ; oNP +CTRDG_AD16_BANK1_END * 0x0c000000 +CTRDG_AD16_BANK2 * 0x0c000000 ; oNQ +CTRDG_AD16_BANK2_END * 0x0e000000 +CTRDG_DT8 * 0x0e000000 ; J[gbW Wf[^oX +CTRDG_DT8_END * 0x10000000 + + +;----------------------------------------------------------------------- +; ETCY +;----------------------------------------------------------------------- + +SHARED_WORK_SIZE * (SHARED_WORK_END - SHARED_WORK) ; botԋL[N̈iSjaȏAQׂ̂TCYj +SUBP_PRV_SIZE * (SUBP_PRV_END - SUBP_PRV) ; TuvZbTL̈iRQjaȏAQׂ̂TCYj + +SHARED_LOCK_BUF_SIZE * (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) ; L\[XEbNobt@ + + +MAIN_MEM_SIZE * 0x400000 ; C +MAIN_MEM_EX_SIZE * 0x800000 ; igj + +CPU_WRAM_SIZE * (0x10000 + PRV_WRAM_DF_SIZE) ; bot[Nq`l RubN\iftHgj +CPU_WRAM_2B_SIZE * (0xc000 + PRV_WRAM_DF_SIZE) ; QubN\ +CPU_WRAM_BLOCK0_SIZE * 0x4000 ; ubNO +CPU_WRAM_BLOCK1_SIZE * 0x4000 ; ubNP +PRV_WRAM_SIZE * (0x8000 + PRV_WRAM_DF_SIZE) ; botL[Nq`l +CPU_XWRAM_SIZE * 0x40000 ; botg[Nq`l + +MROM_PAGE_SIZE * 512 ; }XNqnlEy[W + +CARTRIDGE_SIZE * 0x02000000 ; J[gbW +CTRDG_AD16_BANK_SIZE * 0x02000000 ; J[gbW `cPUoX oN +CTRDG_AD16_BANK0_SIZE * 0x02000000 ; oNO +CTRDG_AD16_BANK1_SIZE * 0x02000000 ; oNP +CTRDG_AD16_BANK2_SIZE * 0x02000000 ; oNQ +CTRDG_DT8_SIZE * 0x02000000 ; J[gbW Wf[^oX + + +;----------------------------------------------------------------------- +; WX^EAhX +;----------------------------------------------------------------------- + +REG_IME * (REG_BASE + 0x208) ; 荞݃}X^Cl[u +REG_IE * (REG_BASE + 0x210) ; 荞݋ +REG_IF * (REG_BASE + 0x214) ; 荞ݗv + +REG_MAINPINTF * (REG_BASE + 0x180) ; CvZbTC^tF[X +REG_MAINP_FIFO_CNT * (REG_BASE + 0x184) ; botԂehenRg[ +REG_SEND_FIFO * (REG_BASE + 0x188) ; Mehen +REG_RECV_FIFO * (REG_BASE + 0x100000) ; Mehen + + +REG_POWCNT * (REG_BASE + 0x304) ; p[Rg[ + +REG_EXMEMCNT * (REG_BASE + 0x204) ; ORg[ + +REG_VRAMSTAT * (REG_BASE + 0x240) ; uq`lXe[^X +REG_WRAMSTAT * (REG_BASE + 0x241) ; [Nq`lXe[^X +REG_WVRAMSTAT * (REG_BASE + 0x240) ; uq`l bEc { [Nq`l Xe[^X + + +REG_DISPSTAT * (REG_BASE + 0x4) ; \Xe[^X +REG_VCOUNT * (REG_BASE + 0x6) ; uJE^ + + +REG_SPICNT * (REG_BASE + 0x1c0) ; SPIRg[ +REG_SPIDATA * (REG_BASE + 0x1c2) ; SPIf[^ + +REG_RCNT * (REG_BASE + 0x134) ; ėpo̓Rg[ + +REG_KEYINPUT * (REG_BASE + 0x130) ; L[ +REG_KEYCNT * (REG_BASE + 0x132) ; L[Rg[ + + +REG_DMA0 * (REG_BASE + 0xb0) ; cl`O +REG_DMA0SAD * (REG_BASE + 0xb0) +REG_DMA0DAD * (REG_BASE + 0xb4) +REG_DMA0CNT * (REG_BASE + 0xb8) +REG_DMA0CNT_L * (REG_BASE + 0xb8) +REG_DMA0CNT_H * (REG_BASE + 0xba) +REG_DMA1 * (REG_BASE + 0xbc) ; cl`P +REG_DMA1SAD * (REG_BASE + 0xbc) +REG_DMA1DAD * (REG_BASE + 0xc0) +REG_DMA1CNT * (REG_BASE + 0xc4) +REG_DMA1CNT_L * (REG_BASE + 0xc4) +REG_DMA1CNT_H * (REG_BASE + 0xc6) +REG_DMA2 * (REG_BASE + 0xc8) ; cl`Q +REG_DMA2SAD * (REG_BASE + 0xc8) +REG_DMA2DAD * (REG_BASE + 0xcc) +REG_DMA2CNT * (REG_BASE + 0xd0) +REG_DMA2CNT_L * (REG_BASE + 0xd0) +REG_DMA2CNT_H * (REG_BASE + 0xd2) +REG_DMA3 * (REG_BASE + 0xd4) ; cl`R +REG_DMA3SAD * (REG_BASE + 0xd4) +REG_DMA3DAD * (REG_BASE + 0xd8) +REG_DMA3CNT * (REG_BASE + 0xdc) +REG_DMA3CNT_L * (REG_BASE + 0xdc) +REG_DMA3CNT_H * (REG_BASE + 0xde) + + +REG_TM0CNT * (REG_BASE + 0x100) ; ^C}[O +REG_TM0CNT_L * (REG_BASE + 0x100) +REG_TM0CNT_H * (REG_BASE + 0x102) +REG_TM1CNT * (REG_BASE + 0x104) ; ^C}[P +REG_TM1CNT_L * (REG_BASE + 0x104) +REG_TM1CNT_H * (REG_BASE + 0x106) +REG_TM2CNT * (REG_BASE + 0x108) ; ^C}[Q +REG_TM2CNT_L * (REG_BASE + 0x108) +REG_TM2CNT_H * (REG_BASE + 0x10a) +REG_TM3CNT * (REG_BASE + 0x10c) ; ^C}[R +REG_TM3CNT_L * (REG_BASE + 0x10c) +REG_TM3CNT_H * (REG_BASE + 0x10e) + + +REG_SOUNDCNT * (REG_BASE + 0x500) ; TEhE}X^Rg[ + +REG_SOUNDBIAS * (REG_BASE + 0x504) ; TEhah`r + +REG_SNDCAPCNT * (REG_BASE + 0x508) ; TEhLv`Rg[ +REG_SNDCAP0DAD * (REG_BASE + 0x510) ; TEhLv`Op[^ +REG_SNDCAP0LEN * (REG_BASE + 0x514) +REG_SNDCAP1DAD * (REG_BASE + 0x518) ; TEhLv`Pp[^ +REG_SNDCAP1LEN * (REG_BASE + 0x51c) + +REG_SOUND0CNT * (REG_BASE + 0x400) ; TEhORg[ +REG_SOUND0CNT_L * (REG_BASE + 0x400) +REG_SOUND0CNT_H * (REG_BASE + 0x402) +REG_SOUND0SAD * (REG_BASE + 0x404) +REG_SOUND0TMR * (REG_BASE + 0x408) +REG_SOUND0RPT_PT * (REG_BASE + 0x40a) +REG_SOUND0RPT_LEN * (REG_BASE + 0x40c) +REG_SOUND1CNT * (REG_BASE + 0x410) ; TEhPRg[ +REG_SOUND1CNT_L * (REG_BASE + 0x410) +REG_SOUND1CNT_H * (REG_BASE + 0x412) +REG_SOUND1SAD * (REG_BASE + 0x414) +REG_SOUND1TMR * (REG_BASE + 0x418) +REG_SOUND1RPT_PT * (REG_BASE + 0x41a) +REG_SOUND1RPT_LEN * (REG_BASE + 0x41c) +REG_SOUND2CNT * (REG_BASE + 0x420) ; TEhQRg[ +REG_SOUND2CNT_L * (REG_BASE + 0x420) +REG_SOUND2CNT_H * (REG_BASE + 0x422) +REG_SOUND2SAD * (REG_BASE + 0x424) +REG_SOUND2TMR * (REG_BASE + 0x428) +REG_SOUND2RPT_PT * (REG_BASE + 0x42a) +REG_SOUND2RPT_LEN * (REG_BASE + 0x42c) +REG_SOUND3CNT * (REG_BASE + 0x430) ; TEhRRg[ +REG_SOUND3CNT_L * (REG_BASE + 0x430) +REG_SOUND3CNT_H * (REG_BASE + 0x432) +REG_SOUND3SAD * (REG_BASE + 0x434) +REG_SOUND3TMR * (REG_BASE + 0x438) +REG_SOUND3RPT_PT * (REG_BASE + 0x43a) +REG_SOUND3RPT_LEN * (REG_BASE + 0x43c) +REG_SOUND4CNT * (REG_BASE + 0x440) ; TEhSRg[ +REG_SOUND4CNT_L * (REG_BASE + 0x440) +REG_SOUND4CNT_H * (REG_BASE + 0x442) +REG_SOUND4SAD * (REG_BASE + 0x444) +REG_SOUND4TMR * (REG_BASE + 0x448) +REG_SOUND4RPT_PT * (REG_BASE + 0x44a) +REG_SOUND4RPT_LEN * (REG_BASE + 0x44c) +REG_SOUND5CNT * (REG_BASE + 0x450) ; TEhTRg[ +REG_SOUND5CNT_L * (REG_BASE + 0x450) +REG_SOUND5CNT_H * (REG_BASE + 0x452) +REG_SOUND5SAD * (REG_BASE + 0x454) +REG_SOUND5TMR * (REG_BASE + 0x458) +REG_SOUND5RPT_PT * (REG_BASE + 0x45a) +REG_SOUND5RPT_LEN * (REG_BASE + 0x45c) +REG_SOUND6CNT * (REG_BASE + 0x460) ; TEhURg[ +REG_SOUND6CNT_L * (REG_BASE + 0x460) +REG_SOUND6CNT_H * (REG_BASE + 0x462) +REG_SOUND6SAD * (REG_BASE + 0x464) +REG_SOUND6TMR * (REG_BASE + 0x468) +REG_SOUND6RPT_PT * (REG_BASE + 0x46a) +REG_SOUND6RPT_LEN * (REG_BASE + 0x46c) +REG_SOUND7CNT * (REG_BASE + 0x470) ; TEhVRg[ +REG_SOUND7CNT_L * (REG_BASE + 0x470) +REG_SOUND7CNT_H * (REG_BASE + 0x472) +REG_SOUND7SAD * (REG_BASE + 0x474) +REG_SOUND7TMR * (REG_BASE + 0x478) +REG_SOUND7RPT_PT * (REG_BASE + 0x47a) +REG_SOUND7RPT_LEN * (REG_BASE + 0x47c) +REG_SOUND8CNT * (REG_BASE + 0x480) ; TEhWRg[ +REG_SOUND8CNT_L * (REG_BASE + 0x480) +REG_SOUND8CNT_H * (REG_BASE + 0x482) +REG_SOUND8SAD * (REG_BASE + 0x484) +REG_SOUND8TMR * (REG_BASE + 0x488) +REG_SOUND8RPT_PT * (REG_BASE + 0x48a) +REG_SOUND8RPT_LEN * (REG_BASE + 0x48c) +REG_SOUND9CNT * (REG_BASE + 0x490) ; TEhXRg[ +REG_SOUND9CNT_L * (REG_BASE + 0x490) +REG_SOUND9CNT_H * (REG_BASE + 0x492) +REG_SOUND9SAD * (REG_BASE + 0x494) +REG_SOUND9TMR * (REG_BASE + 0x498) +REG_SOUND9RPT_PT * (REG_BASE + 0x49a) +REG_SOUND9RPT_LEN * (REG_BASE + 0x49c) +REG_SOUND10CNT * (REG_BASE + 0x4a0) ; TEhPORg[ +REG_SOUND10CNT_L * (REG_BASE + 0x4a0) +REG_SOUND10CNT_H * (REG_BASE + 0x4a2) +REG_SOUND10SAD * (REG_BASE + 0x4a4) +REG_SOUND10TMR * (REG_BASE + 0x4a8) +REG_SOUND10RPT_PT * (REG_BASE + 0x4aa) +REG_SOUND10RPT_LEN * (REG_BASE + 0x4ac) +REG_SOUND11CNT * (REG_BASE + 0x4b0) ; TEhPPRg[ +REG_SOUND11CNT_L * (REG_BASE + 0x4b0) +REG_SOUND11CNT_H * (REG_BASE + 0x4b2) +REG_SOUND11SAD * (REG_BASE + 0x4b4) +REG_SOUND11TMR * (REG_BASE + 0x4b8) +REG_SOUND11RPT_PT * (REG_BASE + 0x4ba) +REG_SOUND11RPT_LEN * (REG_BASE + 0x4bc) +REG_SOUND12CNT * (REG_BASE + 0x4c0) ; TEhPQRg[ +REG_SOUND12CNT_L * (REG_BASE + 0x4c0) +REG_SOUND12CNT_H * (REG_BASE + 0x4c2) +REG_SOUND12SAD * (REG_BASE + 0x4c4) +REG_SOUND12TMR * (REG_BASE + 0x4c8) +REG_SOUND12RPT_PT * (REG_BASE + 0x4ca) +REG_SOUND12RPT_LEN * (REG_BASE + 0x4cc) +REG_SOUND13CNT * (REG_BASE + 0x4d0) ; TEhPRRg[ +REG_SOUND13CNT_L * (REG_BASE + 0x4d0) +REG_SOUND13CNT_H * (REG_BASE + 0x4d2) +REG_SOUND13SAD * (REG_BASE + 0x4d4) +REG_SOUND13TMR * (REG_BASE + 0x4d8) +REG_SOUND13RPT_PT * (REG_BASE + 0x4da) +REG_SOUND13RPT_LEN * (REG_BASE + 0x4dc) +REG_SOUND14CNT * (REG_BASE + 0x4e0) ; TEhPSRg[ +REG_SOUND14CNT_L * (REG_BASE + 0x4e0) +REG_SOUND14CNT_H * (REG_BASE + 0x4e2) +REG_SOUND14SAD * (REG_BASE + 0x4e4) +REG_SOUND14TMR * (REG_BASE + 0x4e8) +REG_SOUND14RPT_PT * (REG_BASE + 0x4ea) +REG_SOUND14RPT_LEN * (REG_BASE + 0x4ec) +REG_SOUND15CNT * (REG_BASE + 0x4f0) ; TEhPTRg[ +REG_SOUND15CNT_L * (REG_BASE + 0x4f0) +REG_SOUND15CNT_H * (REG_BASE + 0x4f2) +REG_SOUND15SAD * (REG_BASE + 0x4f4) +REG_SOUND15TMR * (REG_BASE + 0x4f8) +REG_SOUND15RPT_PT * (REG_BASE + 0x4fa) +REG_SOUND15RPT_LEN * (REG_BASE + 0x4fc) + + +;----------------------------------------------------------------------- +; WX^EItZbg +;----------------------------------------------------------------------- + +OFFSET_REG_IME * 0x208 ; 荞݃}X^Cl[u +OFFSET_REG_IE * 0x210 ; 荞݋ +OFFSET_REG_IF * 0x214 ; 荞ݗv + +OFFSET_REG_MAINPINTF * 0x180 ; CvZbTC^tF[X +OFFSET_REG_MAINP_FIFO_CNT * 0x184 ; botԂehenRg[ +OFFSET_REG_SEND_FIFO * 0x188 ; Mehen +OFFSET_REG_RECV_FIFO * 0x100000 ; Mehen + + +OFFSET_REG_POWCNT * 0x304 ; p[Rg[ + +OFFSET_REG_EXMEMCNT * 0x204 ; ORg[ + +OFFSET_REG_VRAMSTAT * 0x240 ; uq`lXe[^X +OFFSET_REG_WRAMSTAT * 0x241 ; [Nq`lXe[^X +OFFSET_REG_WVRAMSTAT * 0x240 ; uq`l bEc { [Nq`l Xe[^X + + +OFFSET_REG_DISPSTAT * 0x4 ; Xe[^X +OFFSET_REG_VCOUNT * 0x6 ; uJE^ + + +OFFSET_REG_SPICNT * 0x1c0 ; SPIRg[ +OFFSET_REG_SPIDATA * 0x1c2 ; SPIf[^ + +OFFSET_REG_RCNT * 0x134 ; ėpo̓Rg[ + +OFFSET_REG_KEYINPUT * 0x130 ; L[ +OFFSET_REG_KEYCNT * 0x132 ; L[Rg[ + + +OFFSET_REG_DMA0 * 0xb0 ; cl`O +OFFSET_REG_DMA0SAD * 0xb0 +OFFSET_REG_DMA0DAD * 0xb4 +OFFSET_REG_DMA0CNT * 0xb8 +OFFSET_REG_DMA0CNT_L * 0xb8 +OFFSET_REG_DMA0CNT_H * 0xba +OFFSET_REG_DMA1 * 0xbc ; cl`P +OFFSET_REG_DMA1SAD * 0xbc +OFFSET_REG_DMA1DAD * 0xc0 +OFFSET_REG_DMA1CNT * 0xc4 +OFFSET_REG_DMA1CNT_L * 0xc4 +OFFSET_REG_DMA1CNT_H * 0xc6 +OFFSET_REG_DMA2 * 0xc8 ; cl`Q +OFFSET_REG_DMA2SAD * 0xc8 +OFFSET_REG_DMA2DAD * 0xcc +OFFSET_REG_DMA2CNT * 0xd0 +OFFSET_REG_DMA2CNT_L * 0xd0 +OFFSET_REG_DMA2CNT_H * 0xd2 +OFFSET_REG_DMA3 * 0xd4 ; cl`R +OFFSET_REG_DMA3SAD * 0xd4 +OFFSET_REG_DMA3DAD * 0xd8 +OFFSET_REG_DMA3CNT * 0xdc +OFFSET_REG_DMA3CNT_L * 0xdc +OFFSET_REG_DMA3CNT_H * 0xde + + +OFFSET_REG_TM0CNT * 0x100 ; ^C}[O +OFFSET_REG_TM0CNT_L * 0x100 +OFFSET_REG_TM0CNT_H * 0x102 +OFFSET_REG_TM1CNT * 0x104 ; ^C}[P +OFFSET_REG_TM1CNT_L * 0x104 +OFFSET_REG_TM1CNT_H * 0x106 +OFFSET_REG_TM2CNT * 0x108 ; ^C}[Q +OFFSET_REG_TM2CNT_L * 0x108 +OFFSET_REG_TM2CNT_H * 0x10a +OFFSET_REG_TM3CNT * 0x10c ; ^C}[R +OFFSET_REG_TM3CNT_L * 0x10c +OFFSET_REG_TM3CNT_H * 0x10e + + +OFFSET_REG_SOUNDCNT * 0x500 ; TEh}X^Rg[ + +OFFSET_REG_SOUNDBIAS * 0x504 ; TEhah`r + +OFFSET_REG_SNDCAPCNT * 0x508 ; TEhLv`Rg[ +OFFSET_REG_SNDCAP0DAD * 0x510 ; TEhLv`Op[^ +OFFSET_REG_SNDCAP0LEN * 0x514 +OFFSET_REG_SNDCAP1DAD * 0x518 ; TEhLv`Pp[^ +OFFSET_REG_SNDCAP1LEN * 0x51c + +OFFSET_REG_SOUND0CNT * 0x400 ; TEhORg[ +OFFSET_REG_SOUND0CNT_L * 0x400 +OFFSET_REG_SOUND0CNT_H * 0x402 +OFFSET_REG_SOUND0SAD * 0x404 +OFFSET_REG_SOUND0TMR * 0x408 +OFFSET_REG_SOUND0REPLEN * 0x40c +OFFSET_REG_SOUND1CNT * 0x410 ; TEhPRg[ +OFFSET_REG_SOUND1CNT_L * 0x410 +OFFSET_REG_SOUND1CNT_H * 0x412 +OFFSET_REG_SOUND1SAD * 0x414 +OFFSET_REG_SOUND1TMR * 0x418 +OFFSET_REG_SOUND1REPLEN * 0x41c +OFFSET_REG_SOUND2CNT * 0x420 ; TEhQRg[ +OFFSET_REG_SOUND2CNT_L * 0x420 +OFFSET_REG_SOUND2CNT_H * 0x422 +OFFSET_REG_SOUND2SAD * 0x424 +OFFSET_REG_SOUND2TMR * 0x428 +OFFSET_REG_SOUND2REPLEN * 0x42c +OFFSET_REG_SOUND3CNT * 0x430 ; TEhRRg[ +OFFSET_REG_SOUND3CNT_L * 0x430 +OFFSET_REG_SOUND3CNT_H * 0x432 +OFFSET_REG_SOUND3SAD * 0x434 +OFFSET_REG_SOUND3TMR * 0x438 +OFFSET_REG_SOUND3REPLEN * 0x43c +OFFSET_REG_SOUND4CNT * 0x440 ; TEhSRg[ +OFFSET_REG_SOUND4CNT_L * 0x440 +OFFSET_REG_SOUND4CNT_H * 0x442 +OFFSET_REG_SOUND4SAD * 0x444 +OFFSET_REG_SOUND4TMR * 0x448 +OFFSET_REG_SOUND4REPLEN * 0x44c +OFFSET_REG_SOUND5CNT * 0x450 ; TEhTRg[ +OFFSET_REG_SOUND5CNT_L * 0x450 +OFFSET_REG_SOUND5CNT_H * 0x452 +OFFSET_REG_SOUND5SAD * 0x454 +OFFSET_REG_SOUND5TMR * 0x458 +OFFSET_REG_SOUND5REPLEN * 0x45c +OFFSET_REG_SOUND6CNT * 0x460 ; TEhURg[ +OFFSET_REG_SOUND6CNT_L * 0x460 +OFFSET_REG_SOUND6CNT_H * 0x462 +OFFSET_REG_SOUND6SAD * 0x464 +OFFSET_REG_SOUND6TMR * 0x468 +OFFSET_REG_SOUND6REPLEN * 0x46c +OFFSET_REG_SOUND7CNT * 0x470 ; TEhVRg[ +OFFSET_REG_SOUND7CNT_L * 0x470 +OFFSET_REG_SOUND7CNT_H * 0x472 +OFFSET_REG_SOUND7SAD * 0x474 +OFFSET_REG_SOUND7TMR * 0x478 +OFFSET_REG_SOUND7REPLEN * 0x47c +OFFSET_REG_SOUND8CNT * 0x480 ; TEhWRg[ +OFFSET_REG_SOUND8CNT_L * 0x480 +OFFSET_REG_SOUND8CNT_H * 0x482 +OFFSET_REG_SOUND8SAD * 0x484 +OFFSET_REG_SOUND8TMR * 0x488 +OFFSET_REG_SOUND8REPLEN * 0x48c +OFFSET_REG_SOUND9CNT * 0x490 ; TEhXRg[ +OFFSET_REG_SOUND9CNT_L * 0x490 +OFFSET_REG_SOUND9CNT_H * 0x492 +OFFSET_REG_SOUND9SAD * 0x494 +OFFSET_REG_SOUND9TMR * 0x498 +OFFSET_REG_SOUND9REPLEN * 0x49c +OFFSET_REG_SOUND10CNT * 0x4a0 ; TEhPORg[ +OFFSET_REG_SOUND10CNT_L * 0x4a0 +OFFSET_REG_SOUND10CNT_H * 0x4a2 +OFFSET_REG_SOUND10SAD * 0x4a4 +OFFSET_REG_SOUND10TMR * 0x4a8 +OFFSET_REG_SOUND10REPLEN * 0x4ac +OFFSET_REG_SOUND11CNT * 0x4b0 ; TEhPPRg[ +OFFSET_REG_SOUND11CNT_L * 0x4b0 +OFFSET_REG_SOUND11CNT_H * 0x4b2 +OFFSET_REG_SOUND11SAD * 0x4b4 +OFFSET_REG_SOUND11TMR * 0x4b8 +OFFSET_REG_SOUND11REPLEN * 0x4bc +OFFSET_REG_SOUND12CNT * 0x4c0 ; TEhPQRg[ +OFFSET_REG_SOUND12CNT_L * 0x4c0 +OFFSET_REG_SOUND12CNT_H * 0x4c2 +OFFSET_REG_SOUND12SAD * 0x4c4 +OFFSET_REG_SOUND12TMR * 0x4c8 +OFFSET_REG_SOUND12REPLEN * 0x4cc +OFFSET_REG_SOUND13CNT * 0x4d0 ; TEhPRRg[ +OFFSET_REG_SOUND13CNT_L * 0x4d0 +OFFSET_REG_SOUND13CNT_H * 0x4d2 +OFFSET_REG_SOUND13SAD * 0x4d4 +OFFSET_REG_SOUND13TMR * 0x4d8 +OFFSET_REG_SOUND13REPLEN * 0x4dc +OFFSET_REG_SOUND14CNT * 0x4e0 ; TEhPSRg[ +OFFSET_REG_SOUND14CNT_L * 0x4e0 +OFFSET_REG_SOUND14CNT_H * 0x4e2 +OFFSET_REG_SOUND14SAD * 0x4e4 +OFFSET_REG_SOUND14TMR * 0x4e8 +OFFSET_REG_SOUND14REPLEN * 0x4ec +OFFSET_REG_SOUND15CNT * 0x4f0 ; TEhPTRg[ +OFFSET_REG_SOUND15CNT_L * 0x4f0 +OFFSET_REG_SOUND15CNT_H * 0x4f2 +OFFSET_REG_SOUND15SAD * 0x4f4 +OFFSET_REG_SOUND15TMR * 0x4f8 +OFFSET_REG_SOUND15REPLEN * 0x4fc + + + + ENDIF ; _IRIS_SUBP_MEMORY_MAP_H + + END + diff --git a/trunk/IrisSubp/include/IrisSubpOS.h b/trunk/IrisSubp/include/IrisSubpOS.h new file mode 100644 index 0000000..2c2ca72 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpOS.h @@ -0,0 +1,455 @@ +//==================================================================== +// IrisSubpOS.h +// OSCu +// +// Copyright (C) 2003-2004 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_SUBP_OS_H +#define _IRIS_SUBP_OS_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + + +//====================================================================== +// bNϐ +// +//EJ[h^J[gbW^botԋL[Nq`l^uq`l|b^c +// Ȃǂ̂botԂł̋LX[XAbotԑMehen ̐L\[X +// ̔r䂽߂ɂ̊֐gpB +//====================================================================== + +// bNhc + +#define OS_UNLOCK_ID 0 // bNϐbNĂȂꍇ̂hc +#define OS_MAINP_LOCKED_FLAG 0x40 // CvZbTɂ郍bNmFtO +#define OS_MAINP_LOCK_ID_START 0x40 // CvZbTpbNhc̊蓖ĊJnԍ +#define OS_MAINP_LOCK_ID_END 0x6f // 蓖ďIԍ +#define OS_MAINP_DBG_LOCK_ID 0x70 // fobK\ԍ +#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // VXe\ԍ +#define OS_SUBP_LOCKED_FLAG 0x80 // TuvZbTɂ郍bNmFtO +#define OS_SUBP_LOCK_ID_START 0x80 // TuvZbTpbNhc̊蓖ĊJnԍ +#define OS_SUBP_LOCK_ID_END 0xaf // 蓖ďIԍ +#define OS_SUBP_DBG_LOCK_ID 0xb0 // fobK\ԍ +#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // VXe\ԍ + +#define OS_LOCK_SUCCESS 0 // bN +#define OS_LOCK_ERROR -1 // bNG[ + +#define OS_UNLOCK_SUCCESS 0 // bN +#define OS_UNLOCK_ERROR -2 // bNG[ + +#define OS_LOCK_FREE 0 // bN + +#define OS_LOCK_ID_ERROR -3 // bNhcG[ + + +// bNϐ\ + +typedef struct { + u32 lockFlag; // bNtOisW[IDi[j + u16 ownerID; // 擾W[ID + u16 extension; // g +} LockWord; +typedef vl LockWord vLockWord; + +typedef struct { + u8 lockFlag; // bNtOisW[IDi[j + u8 ownerID; // 擾W[ID +} LockByte; +typedef vl LockByte vLockByte; + + +//---------------------------------------------------------------------- +// VXebNϐ̏ +// +//EVXebNϐ܂B +// +//EF Ȃ +// +//E߂lFȂ +// +//NSYNC_MAINP`łĂAJ[gbWr̈ +// fobKgp邽߃NA܂B +//---------------------------------------------------------------------- + +void OS_InitLock(void); + +//---------------------------------------------------------------------- +// bNID̊l +// +//EbNϐ֐ݒ肷IDl܂B +// +//EF Ȃ +// +//E߂lF +// 0x80 ` 0xaf bNID +// OS_LOCK_ID_ERROR bNIDls +// +//ID48ނ܂ł蓖Ă邱Ƃł܂B +// W[ɂĕ̃bNϐ𐧌䂷ꍇ +// ł邾1‚IDgp悤ɂĉB +//---------------------------------------------------------------------- + +s32 OS_GetLockID(void); + + +//---------------------------------------------------------------------- +// XsbNi[h^oCgj +// +//EvZbTԂ⃂W[ԂŋL\[Xr䂷邽߂ +// bNϐ̃XsbNs܂B +//EbN܂Ŏs܂B +//EvZbTԂ̋L\[X͕KbNɎgpĉB +//EvZbTL̃\[X̓^C~OIɒł̂ł +// bNȂĂ\܂B +// L\[X̓fobOɌ肵ăbN邱Ƃł܂B +// +//EF +// lockID bNID +// lockp bNϐ̃|C^ +// CtrlFuncp \[X֐̃|C^ +// +//E߂lF +// OS_LOCK_SUCCESS bN +// OS_LOCK_ID_ERROR bNIDG[ +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_LockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_LockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void)); +s32 OS_LockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void)); + + +s32 OS_LockCard(u32 lockID); // J[h +s32 OS_LockCartridge(u32 lockID); // J[gbW +s32 OS_LockWramBlock0(u32 lockID); // bot[Nq`lEubNO +s32 OS_LockWramBlock1(u32 lockID); // bot[Nq`lEubNP +s32 OS_LockVramC(u32 lockID); // uq`l|b +s32 OS_LockVramD(u32 lockID); // uq`l|c + +s32 OS_LockSendFifo(u32 lockID); // botԑMehen +s32 OS_LockDma0(u32 lockID); // cl`O +s32 OS_LockDma1(u32 lockID); // cl`P +s32 OS_LockDma2(u32 lockID); // cl`Q +s32 OS_LockDma3(u32 lockID); // cl`R +s32 OS_LockTimer0(u32 lockID); // ^C}[O +s32 OS_LockTimer1(u32 lockID); // ^C}[P +s32 OS_LockTimer2(u32 lockID); // ^C}[Q +s32 OS_LockTimer3(u32 lockID); // ^C}[R + + +//---------------------------------------------------------------------- +// bN̉i[h^oCgj +// +//EbN܂B +//EbNĂȂW[sꍇɂ͉ꂸA +// OS_UNLOCK_ERROR Ԃ܂B +// +//EF +// lockID bNID +// lockp bNϐ̃|C^ +// CtrlFuncp \[X֐̃|C^ +// +//E߂lF +// bNiOɊi[ĂIDj +// OS_UNLOCK_ERROR bNG[ +// OS_LOCK_ID_ERROR bNIDG[ +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_UnLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_UnLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void)); +s32 OS_UnLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void)); + + +s32 OS_UnLockCard(u32 lockID); // J[h +s32 OS_UnLockCartridge(u32 lockID); // J[gbW +s32 OS_UnLockWramBlock0(u32 lockID); // bot[Nq`lEubNO +s32 OS_UnLockWramBlock1(u32 lockID); // bot[Nq`lEubNP +s32 OS_UnLockVramC(u32 lockID); // uq`l|b +s32 OS_UnLockVramD(u32 lockID); // uq`l|c + +s32 OS_UnLockSendFifo(u32 lockID); // botԑMehen +s32 OS_UnLockDma0(u32 lockID); // cl`O +s32 OS_UnLockDma1(u32 lockID); // cl`P +s32 OS_UnLockDma2(u32 lockID); // cl`Q +s32 OS_UnLockDma3(u32 lockID); // cl`R +s32 OS_UnLockTimer0(u32 lockID); // ^C}[O +s32 OS_UnLockTimer1(u32 lockID); // ^C}[P +s32 OS_UnLockTimer2(u32 lockID); // ^C}[Q +s32 OS_UnLockTimer3(u32 lockID); // ^C}[R + + +//---------------------------------------------------------------------- +// bN̎si[h^oCgj +// +//EP񂾂XsbNs܂B +//EvZbTԂ̋L\[X͕KbNɎgpĉB +//EvZbTL̃\[X̓^C~OIɒł̂ł +// bNȂĂ\܂B +// L\[X̓fobOɌ肵ăbN邱Ƃł܂B +// +//EF +// lockID bNID +// lockp bNϐ̃|C^ +// CtrlFuncp \[X֐̃|C^ +// +//E߂lF +// bNiOɊi[ĂIDj +// OS_LOCK_SUCCESS bN +// OS_LOCK_ID_ERROR bNIDG[ +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_TryLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_TryLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void)); +s32 OS_TryLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void)); + + +s32 OS_TryLockCard(u32 lockID); // J[h +s32 OS_TryLockCartridge(u32 lockID); // J[gbW +s32 OS_TryLockWramBlock0(u32 lockID); // bot[Nq`lEubNO +s32 OS_TryLockWramBlock1(u32 lockID); // bot[Nq`lEubNP +s32 OS_TryLockVramC(u32 lockID); // uq`l|b +s32 OS_TryLockVramD(u32 lockID); // uq`l|c + +s32 OS_TryLockSendFifo(u32 lockID); // botԑMehen +s32 OS_TryLockDma0(u32 lockID); // cl`O +s32 OS_TryLockDma1(u32 lockID); // cl`P +s32 OS_TryLockDma2(u32 lockID); // cl`Q +s32 OS_TryLockDma3(u32 lockID); // cl`R +s32 OS_TryLockTimer0(u32 lockID); // ^C}[O +s32 OS_TryLockTimer1(u32 lockID); // ^C}[P +s32 OS_TryLockTimer2(u32 lockID); // ^C}[Q +s32 OS_TryLockTimer3(u32 lockID); // ^C}[R + + +//---------------------------------------------------------------------- +// bNtO̓ǂݍ݁i[h^oCgj +// +//EbNtOǂݍ݂܂B +//EbNϐĂ邩ǂmF邱Ƃł܂B +// +//EF +// lockp bNϐ̃|C^ +// +//E߂lF +// 0 bNiOɊi[ĂIDj +// OS_LOCK_FREE bN +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_ReadLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_ReadLockWord(volatile LockWord *lockp); +s32 OS_ReadLockByte(volatile LockByte *lockp); + + +// J[h +#ifdef IRIS_TS +#define OS_ReadLockCard() OS_ReadLockWord((LockWord *)(CARD_LOCK_BUF)) +#else +#define OS_ReadLockCard() OS_ReadLockCartridge() // J[gbWőp +#endif + +// J[gbW +#define OS_ReadLockCartridge() OS_ReadLockWord((LockWord *)(CARTRIDGE_LOCK_BUF)) + +// bot[Nq`lEubNO +#define OS_ReadLockWramBlock0() OS_ReadLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF)) + +// bot[Nq`lEubNP +#define OS_ReadLockWramBlock1() OS_ReadLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF)) + +// uq`l|b +#define OS_ReadLockVramC() OS_ReadLockWord((LockWord *)(VRAM_C_LOCK_BUF)) + +// uq`l|c +#define OS_ReadLockVramD() OS_ReadLockWord((LockWord *)(VRAM_D_LOCK_BUF)) + + +// botԑMehen +#define OS_ReadLockSendFifo() OS_ReadLockByte((LockByte *)(SEND_FIFO_LOCK_BUF)) + +// cl`O +#define OS_ReadLockDma0() OS_ReadLockByte((LockByte *)(DMA0_LOCK_BUF)) + +// cl`P +#define OS_ReadLockDma1() OS_ReadLockByte((LockByte *)(DMA1_LOCK_BUF)) + +// cl`Q +#define OS_ReadLockDma2() OS_ReadLockByte((LockByte *)(DMA2_LOCK_BUF)) + +// cl`R +#define OS_ReadLockDma3() OS_ReadLockByte((LockByte *)(DMA3_LOCK_BUF)) + +// ^C}[O +#define OS_ReadLockTimer0() OS_ReadLockByte((LockByte *)(TIMER0_LOCK_BUF)) + +// ^C}[P +#define OS_ReadLockTimer1() OS_ReadLockByte((LockByte *)(TIMER1_LOCK_BUF)) + +// ^C}[Q +#define OS_ReadLockTimer2() OS_ReadLockByte((LockByte *)(TIMER2_LOCK_BUF)) + +// ^C}[R +#define OS_ReadLockTimer3() OS_ReadLockByte((LockByte *)(TIMER3_LOCK_BUF)) + + +//---------------------------------------------------------------------- +// bNϐ̏LW[ID̓ǂݍ݁i[h^oCgj +// +//EbNϐ̏LW[ID ǂݍ݂܂B +//EW[ID 0 ̏ꍇ͂̎_łǂ̃vZbT +// LĂ̂mFł܂B +//EL\[X̏ꍇ́uTuvZbTLĂԁv +// ݂̂荞݂֎~邱ƂɂĈێ邱Ƃł܂B +// ̑̏Ԃ̓CvZbTωĂ܂”\܂B +//ELW[ID 0 łĂbNϐĂƂ͌܂B +// +//EF +// lockp bNϐ̃|C^ +// +//E߂lF LW[ID +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I OS_ReadOwnerOfLockWord() gpĉB +//---------------------------------------------------------------------- + +s32 OS_ReadOwnerOfLockWord(volatile LockWord *lockp); +s32 OS_ReadOwnerOfLockByte(volatile LockByte *lockp); + + +// J[h +#ifdef IRIS_TS +#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockWord((LockWord *)(CARD_LOCK_BUF)) +#else +#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockCartridge() // J[gbWőp +#endif + +// J[gbW +#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord((LockWord *)(CARTRIDGE_LOCK_BUF)) + +// bot[Nq`lEubNO +#define OS_ReadOwnerOfLockWramBlock0() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF)) + +// bot[Nq`lEubNP +#define OS_ReadOwnerOfLockWramBlock1() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF)) + +// uq`l|b +#define OS_ReadOwnerOfLockVramC() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_C_LOCK_BUF)) + +// uq`l|c +#define OS_ReadOwnerOfLockVramD() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_D_LOCK_BUF)) + + +// botԑMehen +#define OS_ReadOwnerOfLockSendFifo() OS_ReadOwnerOfLockByte((LockByte *)(SEND_FIFO_LOCK_BUF)) + +// cl`O +#define OS_ReadOwnerOfLockDma0() OS_ReadOwnerOfLockByte((LockByte *)(DMA0_LOCK_BUF)) + +// cl`P +#define OS_ReadOwnerOfLockDma1() OS_ReadOwnerOfLockByte((LockByte *)(DMA1_LOCK_BUF)) + +// cl`Q +#define OS_ReadOwnerOfLockDma2() OS_ReadOwnerOfLockByte((LockByte *)(DMA2_LOCK_BUF)) + +// cl`R +#define OS_ReadOwnerOfLockDma3() OS_ReadOwnerOfLockByte((LockByte *)(DMA3_LOCK_BUF)) + +// ^C}[O +#define OS_ReadOwnerOfLockTimer0() OS_ReadOwnerOfLockByte((LockByte *)(TIMER0_LOCK_BUF)) + +// ^C}[P +#define OS_ReadOwnerOfLockTimer1() OS_ReadOwnerOfLockByte((LockByte *)(TIMER1_LOCK_BUF)) + +// ^C}[Q +#define OS_ReadOwnerOfLockTimer2() OS_ReadOwnerOfLockByte((LockByte *)(TIMER2_LOCK_BUF)) + +// ^C}[R +#define OS_ReadOwnerOfLockTimer3() OS_ReadOwnerOfLockByte((LockByte *)(TIMER3_LOCK_BUF)) + + + +//====================================================================== +// vOXe[^XWX^ +//====================================================================== + +//---------------------------------------------------------------------- +// JgEvOXe[^XWX^ Zbg +// +//EJgEvOXe[^XWX^ɒlZbg܂B +// +//EF ZbgJgEvOXe[^XWX^̒l +// +//E߂lFȂ +//---------------------------------------------------------------------- + +void OS_SetCpsr(u32 param); + +//---------------------------------------------------------------------- +// JgEvOXe[^XWX^l l +// +//EJgEvOXe[^XWX^̒ll܂B +// +//EF Ȃ +// +//E߂lFJgEvOXe[^XWX^̒l +//---------------------------------------------------------------------- + +u32 OS_GetCpsr(void); + +//---------------------------------------------------------------------- +// hqp Cl[u^fBZ[u +// +//EJgEvOXe[^XWX^̂hqp +// Cl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFύXÕJgEvOXe[^XWX^̒l +//---------------------------------------------------------------------- + +u32 OS_EnableCpsrIRQ(void); +u32 OS_DisableCpsrIRQ(void); + +//---------------------------------------------------------------------- +// ehphqp Cl[u^fBZ[u +// +//EJgEvOXe[^XWX^̂ehphqp +// Cl[u^fBZ[uɂ܂B +// +//EF Ȃ +// +//E߂lFύXÕJgEvOXe[^XWX^̒l +//---------------------------------------------------------------------- + +u32 OS_EnableCpsrFIQ_IRQ(void); +u32 OS_DisableCpsrFIQ_IRQ(void); + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_SUBP_OS_H + diff --git a/trunk/IrisSubp/include/IrisSubpOS_Arm.s b/trunk/IrisSubp/include/IrisSubpOS_Arm.s new file mode 100644 index 0000000..48ce570 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpOS_Arm.s @@ -0,0 +1,165 @@ +;===================================================================== +; IrisSubpOS_Arm.s +; OSCuiARMASMpj +; +; Copyright (C) 2003-2004 NINTENDO Co.,Ltd. +;===================================================================== + IF :DEF: _IRIS_SUBP_OS_H + ELSE +_IRIS_SUBP_OS_H * 1 + + + INCLUDE IrisSubpTargetArm.s + INCLUDE IrisSubpDefineArm.s + + + +;======================================================================= +; bNϐ +;======================================================================= + +; bNhc + +OS_UNLOCK_ID * 0 ; bNϐbNĂȂꍇ̂hc +OS_MAINP_LOCKED_FLAG * 0x40 ; CvZbTɂ郍bNmFtO +OS_MAINP_LOCK_ID_START * 0x40 ; CvZbTpbNhc̊蓖ĊJnԍ +OS_MAINP_LOCK_ID_END * 0x6f ; 蓖ďIԍ +OS_MAINP_DBG_LOCK_ID * 0x70 ; fobK\ԍ +OS_MAINP_SYSTEM_LOCK_ID * 0x7f ; VXe\ԍ +OS_SUBP_LOCKED_FLAG * 0x80 ; TuvZbTɂ郍bNmFtO +OS_SUBP_LOCK_ID_START * 0x80 ; TuvZbTpbNhc̊蓖ĊJnԍ +OS_SUBP_LOCK_ID_END * 0xaf ; 蓖ďIԍ +OS_SUBP_DBG_LOCK_ID * 0xb0 ; fobK\ԍ +OS_SUBP_SYSTEM_LOCK_ID * 0xbf ; VXe\ԍ + +OS_LOCK_SUCCESS * 0 ; bN +OS_LOCK_ERROR * -1 ; bNG[ + +OS_UNLOCK_SUCCESS * 0 ; bN +OS_UNLOCK_ERROR * -2 ; bNG[ + +OS_LOCK_FREE * 0 ; bN + +OS_LOCK_ID_ERROR * -3 ; bNhcG[ + + + +;----------------------------------------------------------------------- +; bN֐̏ +;----------------------------------------------------------------------- + + EXTERN OS_InitLock + +;----------------------------------------------------------------------- +; bNID̊l +;----------------------------------------------------------------------- + + EXTERN OS_GetLockID + + +;----------------------------------------------------------------------- +; XsbNi[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_LockWord + EXTERN OS_LockByte + + EXTERN OS_LockCard + EXTERN OS_LockCartridge + EXTERN OS_LockWramBlock0 + EXTERN OS_LockWramBlock1 + EXTERN OS_LockVramC + EXTERN OS_LockVramD + + EXTERN OS_LockSendFifo + + +;----------------------------------------------------------------------- +; bN̉i[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_UnLockWord + EXTERN OS_UnLockByte + + EXTERN OS_UnLockCard + EXTERN OS_UnLockCartridge + EXTERN OS_UnLockWramBlock0 + EXTERN OS_UnLockWramBlock1 + EXTERN OS_UnLockVramC + EXTERN OS_UnLockVramD + + EXTERN OS_UnLockSendFifo + + +;----------------------------------------------------------------------- +; bN̎si[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_TryLockWord + EXTERN OS_TryLockByte + + EXTERN OS_TryLockCard + EXTERN OS_TryLockCartridge + EXTERN OS_TryLockWramBlock0 + EXTERN OS_TryLockWramBlock1 + EXTERN OS_TryLockVramC + EXTERN OS_TryLockVramD + + EXTERN OS_TryLockSendFifo + + +;----------------------------------------------------------------------- +; bNtO̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_ReadLockWord + EXTERN OS_ReadLockByte + + +;----------------------------------------------------------------------- +; bNϐ̏LW[ID̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + EXTERN OS_ReadOwnerOfLockWord + EXTERN OS_ReadOwnerOfLockByte + + + +;======================================================================= +; vOXe[^XWX^ +;======================================================================= + +;----------------------------------------------------------------------- +; vOXe[^XWX^ Zbgir0=p[^j +;----------------------------------------------------------------------- + + EXTERN OS_SetCpsr + +;----------------------------------------------------------------------- +; JgEvOXe[^XWX^l l +;----------------------------------------------------------------------- + + EXTERN OS_GetCpsr + +;----------------------------------------------------------------------- +; hqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableCpsrIRQ + EXTERN OS_DisableCpsrIRQ + +;----------------------------------------------------------------------- +; ehphqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + EXTERN OS_EnableCpsrFIQ_IRQ + EXTERN OS_DisableCpsrFIQ_IRQ + + + + ENDIF ; _IRIS_SUBP_OS_H + + + + END + diff --git a/trunk/IrisSubp/include/IrisSubpOS_Mw.s b/trunk/IrisSubp/include/IrisSubpOS_Mw.s new file mode 100644 index 0000000..d8da6db --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpOS_Mw.s @@ -0,0 +1,159 @@ +;===================================================================== +; IrisSubpOS_Mw.s +; OSCuiMWASMARMpj +; +; Copyright (C) 2003-2004 NINTENDO Co.,Ltd. +;===================================================================== +#ifndef _IRIS_SUBP_OS_H +#define _IRIS_SUBP_OS_H + + + .INCLUDE IrisSubpTarget.h + .INCLUDE IrisSubpDefine.h + + + +;======================================================================= +; bNϐ +;======================================================================= + +// bNhc + +#define OS_UNLOCK_ID 0 // bNϐbNĂȂꍇ̂hc +#define OS_MAINP_LOCKED_FLAG 0x40 // CvZbTɂ郍bNmFtO +#define OS_MAINP_LOCK_ID_START 0x40 // CvZbTpbNhc̊蓖ĊJnԍ +#define OS_MAINP_LOCK_ID_END 0x6f // 蓖ďIԍ +#define OS_MAINP_DBG_LOCK_ID 0x70 // fobK\ԍ +#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // VXe\ԍ +#define OS_SUBP_LOCKED_FLAG 0x80 // TuvZbTɂ郍bNmFtO +#define OS_SUBP_LOCK_ID_START 0x80 // TuvZbTpbNhc̊蓖ĊJnԍ +#define OS_SUBP_LOCK_ID_END 0xaf // 蓖ďIԍ +#define OS_SUBP_DBG_LOCK_ID 0xb0 // fobK\ԍ +#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // VXe\ԍ + +#define OS_LOCK_SUCCESS 0 // bN +#define OS_LOCK_ERROR -1 // bNG[ + +#define OS_UNLOCK_SUCCESS 0 // bN +#define OS_UNLOCK_ERROR -2 // bNG[ + +#define OS_LOCK_FREE 0 // bN + +#define OS_LOCK_ID_ERROR -3 // bNhcG[ + + + +;----------------------------------------------------------------------- +; bN֐̏ +;----------------------------------------------------------------------- + + .EXTERN OS_InitLock + +;----------------------------------------------------------------------- +; bNID̊l +;----------------------------------------------------------------------- + + .EXTERN OS_GetLockID + + +;----------------------------------------------------------------------- +; XsbNi[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_LockWord + .EXTERN OS_LockByte + + .EXTERN OS_LockCard + .EXTERN OS_LockCartridge + .EXTERN OS_LockWramBlock0 + .EXTERN OS_LockWramBlock1 + .EXTERN OS_LockVramC + .EXTERN OS_LockVramD + + .EXTERN OS_LockSendFifo + + +;----------------------------------------------------------------------- +; bN̉i[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_UnLockWord + .EXTERN OS_UnLockByte + + .EXTERN OS_UnLockCard + .EXTERN OS_UnLockCartridge + .EXTERN OS_UnLockWramBlock0 + .EXTERN OS_UnLockWramBlock1 + .EXTERN OS_UnLockVramC + .EXTERN OS_UnLockVramD + + .EXTERN OS_UnLockSendFifo + + +;----------------------------------------------------------------------- +; bN̎si[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_TryLockWord + .EXTERN OS_TryLockByte + + .EXTERN OS_TryLockCard + .EXTERN OS_TryLockCartridge + .EXTERN OS_TryLockWramBlock0 + .EXTERN OS_TryLockWramBlock1 + .EXTERN OS_TryLockVramC + .EXTERN OS_TryLockVramD + + .EXTERN OS_TryLockSendFifo + + +;----------------------------------------------------------------------- +; bNtO̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_ReadLockWord + .EXTERN OS_ReadLockByte + + +;----------------------------------------------------------------------- +; bNϐ̏LW[ID̓ǂݍ݁i[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN OS_ReadOwnerOfLockWord + .EXTERN OS_ReadOwnerOfLockByte + + + +;======================================================================= +; vOXe[^XWX^ +;======================================================================= + +;----------------------------------------------------------------------- +; vOXe[^XWX^ Zbgir0=p[^j +;----------------------------------------------------------------------- + + .EXTERN OS_SetCpsr + +;----------------------------------------------------------------------- +; JgEvOXe[^XWX^l l +;----------------------------------------------------------------------- + + .EXTERN OS_GetCpsr + +;----------------------------------------------------------------------- +; hqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableCpsrIRQ + .EXTERN OS_DisableCpsrIRQ + +;----------------------------------------------------------------------- +; ehphqp Cl[u^fBZ[u +;----------------------------------------------------------------------- + + .EXTERN OS_EnableCpsrFIQ_IRQ + .EXTERN OS_DisableCpsrFIQ_IRQ + + + +#endif // _IRIS_SUBP_OS_H diff --git a/trunk/IrisSubp/include/IrisSubpSystemCall.h b/trunk/IrisSubp/include/IrisSubpSystemCall.h new file mode 100644 index 0000000..c4fd932 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpSystemCall.h @@ -0,0 +1,449 @@ +//====================================================================== +// IrisSubpSystemCall.h +// IRISTuvZbT VXeR[ +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_SYSTEM_CALL_H +#define _IRIS_SUBP_SYSTEM_CALL_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include +#include + + +#ifdef __MWERKS__ +#ifndef CODE32 +#define SystemCall(No) asm { SWI No } +#else +#define SystemCall(No) asm { SWI No << 16 } +#endif +#elif defined( __GNUC__ ) +#ifndef CODE32 +#define SystemCall(No) asm ("SWI "#No) +#else +#define SystemCall(No) asm ("SWI "#No" << 16") +#endif +#elif defined( __CC_ARM ) +#ifndef CODE32 +#define SystemCall(No) __asm { SWI No } +#else +#define SystemCall(No) __asm { SWI No << 16 } +#endif +#endif + + +//---------------------------------------------------------------------- +// J[hǂݍ +//---------------------------------------------------------------------- + +#if defined(IRIS_TS) +#define SVC_ReadCard(dmaNo, srcp, destp, size) _SVC_ReadCard(dmaNo, (void *)(srcp), (void *)(destp), size) + +void _SVC_ReadCard(s32 dmaNo, void *srcp, void *destp, s32 size); + +#elif defined(IRIS_TEG) +#define SVC_ReadCard(dmaNo, srcp, destp, size) _SVC_TEG_ReadCard(dmaNo, (void *)(srcp), (void *)(destp), size) + +void _SVC_TEG_ReadCard(s32 dmaNo, void *srcp, void *destp, s32 size); + +#else +#define SVC_ReadCard(dmaNo, srcp, destp, size) ((void) 0) +#endif + +//EJ[hf[^ǂݍ݂܂B +//EJ[h̃AhX512ByteEA{̑̃AhX4ByteE +// 킹Kv܂B +// +//EF +// s32 dmaNo DMAԍi0`3 ȊO̒lnꂽCPUœǂݍ݂܂j +// iTEG{[hł͖ACPUɂē]܂j +// void *srcp J[h̃\[XAhX +// void *destp {̑̃fXeBl[VAhX +// s32 size ]TCY + +//---------------------------------------------------------------------- +// [vEFCg +//---------------------------------------------------------------------- + +void SVC_WaitByLoop(s32 count); + +//EVXeROMŎw񐔃[vs܂B +//E1̃[v4TCN܂B +//ETuvZbTCւ̗D挠ĂꍇɁA +// CŃvO𓮍삳邱Ƃ +// CvZbTXg[錻ۂy邱Ƃł܂B +// +//EF +// s32 count [v + +//---------------------------------------------------------------------- +// 荞݃EFCg +//---------------------------------------------------------------------- + +void SVC_WaitIntr(u32 clearEnable, u32 intrFlags); + +//EIntrFlagsŎw肵荞݂܂HaltԂő҂܂B +//E荞ݏɂINTR_CHECK_BUF(0x3007ff8)֊YtOZbgĉB +//E̊荞݂𕹗pASVC_Halt()JԂĂяoꍇƔׂ +// VXeR[ĂяõI[o[wbhy邱Ƃł܂B +// +//EF +// u8 clearEnable ɊYtOZbgĂꍇɃNA邩ǂ̎w +// u16 intrFlags EFCg銄荞݂̎wiIrisSubpSystemCallDefine.hQƁj + +//---------------------------------------------------------------------- +// uuN荞݃EFCg +//---------------------------------------------------------------------- + +void SVC_WaitVBlankIntr(void); + +//EuuN荞݂܂HaltԂő҂܂B +//E荞ݏɂINTR_CHECK_BUF(0x3007ff8)֊YtOZbgĉB +//E̊荞݂𕹗pASVC_Halt()JԂĂяoꍇƔׂ +// VXeR[ĂяõI[o[wbhy邱Ƃł܂B +//ESVC_WaitIntr(1, V_BLANK_INTR_FLAG)ƓłB + +//---------------------------------------------------------------------- +// botZbg +//---------------------------------------------------------------------- + +void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData); + +//EDmaSet}N݊̃p[^RAMNA܂̓Rs[܂B +//E32bit]ł͋I4ByteEɂăANZX܂A +// 16bit]ł͈2ByteE֍킹ēnKv܂B +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// u32 dmaCntData DMA_SRC_FIX^DMA_32BIT_BUS^DMA_COUNT_MASK̂ݗL +// DMA_SRC_FIX( 0, 1) = (\[XAhXECNg, \[XAhXŒ) +// DMA_32BIT_BUS(0, 1) = (16bit], 32bit]) +// DMA_COUNT_MASK & dmaCntData = ] +// +//Eʃ}NF +// SVC_CpuClear, SVC_CpuClearArray, SVC_CpuCopy, SVC_CpuCopyArray + +//---------------------------------------------------------------------- +// botZbg +//---------------------------------------------------------------------- + +void SVC_CpuSetFast(const void *srcp, void *destp, u32 dmaCntData); + +//EDmaSet}N݊̃p[^ōRAMNA܂̓Rs[܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕[h^XgA߂gp܂B +//E4ByteEȊOň^ĂI4ByteEɂăANZX܂B +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// u32 dmaCntData DMA_SRC_FIX^DMA_COUNT_MASK̂ݗL +// DMA_SRC_FIX(0, 1) = (\[XAhXECNg, \[XAhXŒ) +// DMA_COUNT_MASK & dmaCntData = ] +// +//Eʃ}NF +// SVC_CpuClearFast, SVC_CpuClearArrayFast, SVC_CpuCopyFast, SVC_CpuCopyArrayFast + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define SVC_CpuClear(data, destp, size, bit) \ +{ \ + vu##bit tmp = (vu##bit )(data); \ + SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8) & 0x1fffff))); \ +} + +#define SVC_CpuClearArray(data, destp, bit) \ + SVC_CpuClear( data, destp, sizeof(destp), bit) + +//ECPURAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//ESVC_CpuClearArray̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define SVC_CpuCopy(srcp, destp, size, bit) \ + \ + SVC_CpuSet((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | \ + DMA_##bit##BIT_BUS | ((size)/(bit/8) & 0x1fffff))) + +#define SVC_CpuCopyArray(srcp, destp, bit) \ + SVC_CpuCopy( srcp, destp, sizeof(srcp), bit) + +//ECPUŃRs[VXeR[Ăяo܂B +//ESVC_CpuCopyArray̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg +// bit ]rbgi16|32j + +//---------------------------------------------------------------------- +// bot NA +//---------------------------------------------------------------------- + +#define SVC_CpuClearFast(data, destp, size) \ +{ \ + vu32 tmp = (vu32 )(data); \ + SVC_CpuSetFast((u8 *)&(tmp), (u8 *)(destp), ( \ + DMA_SRC_FIX | ((size)/(32/8) & 0x1fffff))); \ +} + +#define SVC_CpuClearArrayFast(data, destp) \ + SVC_CpuClearFast( data, destp, sizeof(destp)) + +//ECPUōRAMNAVXeR[Ăяo܂B +//ENAf[^̓X^bNɒuAfXeBl[VփRs[܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕XgA߂gp܂B +//ESVC_CpuClearArrayFast̓fXeBl[VzŜNA܂B +// +//EF +// data NAf[^ +// destp fXeBl[VAhX +// size NAoCg + +//---------------------------------------------------------------------- +// bot Rs[ +//---------------------------------------------------------------------- + +#define SVC_CpuCopyFast(srcp, destp, size) \ + \ + SVC_CpuSetFast((u8 *)(srcp), (u8 *)(destp), ( \ + DMA_SRC_INC | ((size)/(32/8) & 0x1fffff))) + +#define SVC_CpuCopyArrayFast(srcp, destp) \ + SVC_CpuCopyFast( srcp, destp, sizeof(srcp)) + +//ECPUōɃRs[VXeR[Ăяo܂B +//EI[o[t[Ȃ͈͂ł32BytePʂ̕[h^XgA߂gp܂B +//ESVC_CpuCopyArrayFast̓\[XzŜRs[܂B +// +//EF +// srcp \[XAhX +// destp fXeBl[VAhX +// size ]oCg + + +//---------------------------------------------------------------------- +// akf[^WJ +//---------------------------------------------------------------------- + +void SVC_UnPackBits(const void *srcp, void *destp, UnPackBitsParam *paramp); + +//E0Œ̃rbgl߂f[^WJ܂B +//ETEGo[Wł̓fXeBl[VAhX̂ +// Cw肷邱Ƃł܂B +//EfXeBl[VAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// UnPackBitsParam *paramp UnPackBitsParam\̃f[^̃AhX +// +//EUnPackBitsParam\ +// u16 srcNum \[Xf[^EoCg +// u8 srcBitNum P\[Xf[^Erbg +// u8 destBitNum PfXeBl[Vf[^Erbg +// u32 destOffset:31 \[Xf[^ɉZItZbg +// destOffset0_On:1 Õf[^ɃItZbgZ邩ۂ̃tO +// +//E߂lFȂ + +//---------------------------------------------------------------------- +// kyVVkf[^WWJ +//---------------------------------------------------------------------- + +void SVC_UnCompLZ77Byte(const void *srcp, void *destp); + +//ELZ77kf[^WJA8bitPʂŏ݂܂B +//EC֒ړWJ邱Ƃ͂ł܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 1j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 flags k^ktO +// i0, 1j = ikf[^, kf[^j +//ER[hf[^tH[}bgiBig Endianj +// u16 length:4 WJf[^ - 3iv3Byteȏ㎞݈̂kj +// offset:12 vf[^ItZbg - 1 +// +//E߂lFȂ + +//---------------------------------------------------------------------- +// kyVVkf[^PUWJ +//---------------------------------------------------------------------- + +void SVC_UnCompLZ77Short(const void *srcp, void *destp); + +//ELZ77kf[^WJA16bitPʂŏ݂܂B +//ECɂ[NRAMɂWJł܂A +// SVC_UnCompLZ77Byte()ᑬłB +//ETEGo[Wł̓fXeBl[VAhX̂ +// Cw肷邱Ƃł܂B +//Ekf[^͈v2ByteȑO茟̂ɂĉB +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 1j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 flags k^ktO +// i0, 1j = ikf[^, kf[^j +//ER[hf[^tH[}bgiBig Endianj +// u16 length:4 WJf[^ - 3iv3Byteȏ㎞݈̂kj +// offset:12 vf[^ItZbgi >= 2j - 1 +// +//E߂lFȂ + +//---------------------------------------------------------------------- +// nt}kf[^WJ +//---------------------------------------------------------------------- + +void SVC_UnCompHuffman(const void *srcp, void *destp); + +//Ent}kf[^WJA32bitPʂŏ݂܂B +//ETEGo[Wł̓fXeBl[VAhX̂ +// Cw肷邱Ƃł܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 bitSize:4 Pf[^ErbgTCYiʏ 4|8j +// compType:4 k^Cvi = 2j +// destSize:24 WJ̃f[^TCY +// +//Ec[e[u +// u8 treeSize c[e[uTCY/2 - 1 +// TreeNodeData nodeRoot [gm[h +// +// TreeNodeData nodeLeft [gm[h +// TreeNodeData nodeRight [gEm[h +// +// TreeNodeData nodeLeftLeft m[h +// TreeNodeData nodeLeftRight Em[h +// +// TreeNodeData nodeRightLeft Em[h +// TreeNodeData nodeRightRight EEm[h +// +// E +// E +// +// ̌Ɉkf[^{ +// +//ETreeNodeData\ +// u8 nodeNextOffset:6 m[hf[^ւ̃ItZbg - 1i2BytePʁj +// rightEndFlag:1 Em[hItO +// leftEndzflag:1 m[hItO +// ItOZbgĂꍇ +// m[hɃf[^ +// +//E߂lFȂ + +//---------------------------------------------------------------------- +// OXkf[^WWJ +//---------------------------------------------------------------------- + +void SVC_UnCompRLByte(const void *srcp, void *destp); + +//EOXkf[^WJA8bitPʂŏ݂܂B +//EC֒ړWJ邱Ƃ͂ł܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 3j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 length:7 WJf[^ - 1ikj +// WJf[^ - 3iA3Byteȏ㎞݈̂kj +// flag:1 i0, 1j = ikf[^, kf[^j +// +//E߂lFȂ + +//---------------------------------------------------------------------- +// OXkf[^PUWJ +//---------------------------------------------------------------------- + +void SVC_UnCompRLShort(const void *srcp, void *destp); + +//EOXkf[^WJA16bitPʂŏ݂܂B +//ECɂ[NRAMɂWJł܂A +// SVC_UnCompRLByte()ᑬłB +//ETEGo[Wł̓fXeBl[VAhX̂ +// Cw肷邱Ƃł܂B +//Ekf[^̃TCY4̔{ɂȂȂꍇ +// o邾0ŋl߂ĒĉB +//E\[XAhX4ByteEɍ킹ĉB +// +//EF +// void *srcp \[XAhX +// void *destp fXeBl[VAhX +// +//Ef[^wb_ +// u32 :4 \ +// compType:4 k^Cvi = 3j +// destSize:24 WJ̃f[^TCY +// +//EtOf[^tH[}bg +// u8 length:7 WJf[^ - 1ikj +// WJf[^ - 3iA3Byteȏ㎞݈̂kj +// flag:1 i0, 1j = ikf[^, kf[^j +// +//E߂lFȂ + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_SYSTEM_CALL_H diff --git a/trunk/IrisSubp/include/IrisSubpSystemCallArm.s b/trunk/IrisSubp/include/IrisSubpSystemCallArm.s new file mode 100644 index 0000000..1ced73e --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpSystemCallArm.s @@ -0,0 +1,203 @@ +;======================================================================= +; IrisSubpSystemCallArm.s +; IRISTuvZbT VXeR[iARMASMpj +; +; eVXeR[̎dl IrisSubpSystemCall.h +; QƂĉB +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_SYSTEM_CALL_H + ELSE +_IRIS_SUBP_SYSTEM_CALL_H * 1 + + + INCLUDE IrisSubpTargetArm.s + INCLUDE IrisSubpSystemCallDefineArm.s + + +;----------------------------------------------------------------------- +; \tg Zbg +;----------------------------------------------------------------------- + + EXTERN SVC_SoftReset + + +;----------------------------------------------------------------------- +; WX^q`l Zbg +;----------------------------------------------------------------------- + + EXTERN SVC_ResetRegisterRam + + +;----------------------------------------------------------------------- +; g`ks +;----------------------------------------------------------------------- + +; EXTERN SVC_Halt + + +;----------------------------------------------------------------------- +; rsno +;----------------------------------------------------------------------- + + EXTERN SVC_SetSoundBias + EXTERN SVC_ResetSoundBias + +; EXTERN SVC_Stop + + +;----------------------------------------------------------------------- +; [vEFCg +;----------------------------------------------------------------------- + + EXTERN SVC_WaitByLoop + + +;----------------------------------------------------------------------- +; 荞݃EFCg +;----------------------------------------------------------------------- + + EXTERN SVC_WaitIntr + + +;----------------------------------------------------------------------- +; uuN荞݃EFCg +;----------------------------------------------------------------------- + + EXTERN SVC_WaitVBlankIntr + + +;----------------------------------------------------------------------- +; tZij +;----------------------------------------------------------------------- + + EXTERN SVC_Div + EXTERN SVC_DivArm + + +;----------------------------------------------------------------------- +; tZi]j +;----------------------------------------------------------------------- + + EXTERN SVC_DivRem + EXTERN SVC_DivRemArm + + +;----------------------------------------------------------------------- +; +;----------------------------------------------------------------------- + + EXTERN SVC_Sqrt + + +;----------------------------------------------------------------------- +; t +;----------------------------------------------------------------------- + + EXTERN SVC_ArcTan + + +;----------------------------------------------------------------------- +; tڂQ +;----------------------------------------------------------------------- + + EXTERN SVC_ArcTan2 + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + EXTERN SVC_CpuSet + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + EXTERN SVC_CpuSetFast + + +;----------------------------------------------------------------------- +; Bitkf[^WJ +;----------------------------------------------------------------------- + + EXTERN SVC_UnPackBits + + +;----------------------------------------------------------------------- +; kyVVkf[^WJi[Nq`lj +;----------------------------------------------------------------------- + + EXTERN SVC_UnCompLZ2Wram + + +;----------------------------------------------------------------------- +; kyVVkf[^WJiuq`lj +;----------------------------------------------------------------------- + + EXTERN SVC_UnCompLZ2Vram + + +;----------------------------------------------------------------------- +; nt}kf[^WJ +;----------------------------------------------------------------------- + + EXTERN SVC_UnCompHuffman + + +;----------------------------------------------------------------------- +; OXkf[^WJi[Nq`lj +;----------------------------------------------------------------------- + + EXTERN SVC_UnCompRL2Wram + + +;----------------------------------------------------------------------- +; OXkf[^WJiuq`lj +;----------------------------------------------------------------------- + + EXTERN SVC_UnCompRL2Vram + + +;----------------------------------------------------------------------- +; tB^WJi8Bit[Nq`lj +;----------------------------------------------------------------------- + + EXTERN SVC_UnFilterDiffByte2Wram + + +;----------------------------------------------------------------------- +; tB^WJi8Bituq`lj +;----------------------------------------------------------------------- + + EXTERN SVC_UnFilterDiffByte2Vram + + +;----------------------------------------------------------------------- +; tB^WJi16Bitj +;----------------------------------------------------------------------- + + EXTERN SVC_UnFilterDiffHalfWord + + +;----------------------------------------------------------------------- +; TEhah`r Zbg +;----------------------------------------------------------------------- + + EXTERN SVC_SetSoundBias + + +;----------------------------------------------------------------------- +; TEhah`r Zbg +;----------------------------------------------------------------------- + + EXTERN SVC_ResetSoundBias + + + + ENDIF ; _IRIS_SUBP_SYSTEM_CALL_H + + END + diff --git a/trunk/IrisSubp/include/IrisSubpSystemCallDefine.h b/trunk/IrisSubp/include/IrisSubpSystemCallDefine.h new file mode 100644 index 0000000..71eed82 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpSystemCallDefine.h @@ -0,0 +1,34 @@ +//====================================================================== +// IrisSystemCallDefine.h +// IRIS VXeR[p萔 +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_SYSTEM_CALL_DEFINE_H +#define _IRIS_SUBP_SYSTEM_CALL_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// VXeR[m +//---------------------------------------------------------------------- + +#define SWI_NO_WAIT_INTR 4 // SVC_WaitIntr() +#define SWI_NO_WAIT_VBLANK_INTR 5 // SVC_WaitVBlankIntr() + +#define SWI_NO_CPU_SET 11 // SVC_CpuSet() +#define SWI_NO_CPU_SET_FAST 12 // SVC_CpuSetFast() + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_SYSTEM_CALL_DEFINE_H diff --git a/trunk/IrisSubp/include/IrisSubpSystemCallDefineArm.s b/trunk/IrisSubp/include/IrisSubpSystemCallDefineArm.s new file mode 100644 index 0000000..1ecef67 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpSystemCallDefineArm.s @@ -0,0 +1,30 @@ +;======================================================================= +; IrisSubpSystemCallDefineArm.s +; IRISTuvZbT VXeR[iARMASMpj +; +; Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_SYSTEM_CALL_DEFINE_H + ELSE +_IRIS_SUBP_SYSTEM_CALL_DEFINE_H * 1 + + + INCLUDE IrisSubpTargetArm.s + + +;----------------------------------------------------------------------- +; VXeR[m +;----------------------------------------------------------------------- + +SWI_NO_WAIT_INTR * 4 ; SVC_WaitIntr() +SWI_NO_WAIT_VBLANK_INTR * 5 ; SVC_WaitVBlankIntr() + +SWI_NO_CPU_SET * 11 ; SVC_CpuSet() +SWI_NO_CPU_SET_FAST * 12 ; SVC_CpuSetFast() + + + + ENDIF ; _IRIS_SUBP_SYSTEM_CALL_DEFINE_H + + END + diff --git a/trunk/IrisSubp/include/IrisSubpSystemCallMw.s b/trunk/IrisSubp/include/IrisSubpSystemCallMw.s new file mode 100644 index 0000000..d72a75c --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpSystemCallMw.s @@ -0,0 +1,54 @@ +;======================================================================= +; IrisSubpSystemCallMw.s +; IRISTuvZbT VXeR[iMWASMARMpj +; +; eVXeR[̎dl IrisSubpSystemCall.h +; QƂĉB +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= +#ifndef _IRIS_SUBP_SYSTEM_CALL_H +#define _IRIS_SUBP_SYSTEM_CALL_H + + + .INCLUDE IrisSubpTarget.h + .INCLUDE IrisSubpSystemCallDefine.h + + +;----------------------------------------------------------------------- +; [vEFCg +;----------------------------------------------------------------------- + + .EXTERN SVC_WaitByLoop + + +;----------------------------------------------------------------------- +; 荞݃EFCg +;----------------------------------------------------------------------- + + .EXTERN SVC_WaitIntr + + +;----------------------------------------------------------------------- +; uuN荞݃EFCg +;----------------------------------------------------------------------- + + .EXTERN SVC_WaitVBlankIntr + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + .EXTERN SVC_CpuSet + + +;----------------------------------------------------------------------- +; botZbg +;----------------------------------------------------------------------- + + .EXTERN SVC_CpuSetFast + + + +#endif // _IRIS_SYSTEM_CALL_H diff --git a/trunk/IrisSubp/include/IrisSubpTarget.h b/trunk/IrisSubp/include/IrisSubpTarget.h new file mode 100644 index 0000000..7d4ff9b --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpTarget.h @@ -0,0 +1,33 @@ +//====================================================================== +// IrisSubpTarget.h +// IRIS^[QbgI +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_TARGET_H +#define _IRIS_SUBP_TARGET_H + +#ifdef __cplusplus +extern "C" { +#endif + + +//#define IRIS_BB // ubh{[hp`ւ̐؂芷 +//#define IRIS_TEG // TEG{[hp`ւ̐؂芷 +#define IRIS_TS // TSp`ւ̐؂芷 + +#define MMEM_4M // C4M{̗p`ւ̐؂芷 + +#ifdef NDEBUG +#else +//#define ENABLE_DBGLIB // fobOCugp܂ +#endif + +//#define NSYNC_MAINP // CvZbTƓȂꍇ + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_TARGET_H diff --git a/trunk/IrisSubp/include/IrisSubpTargetArm.s b/trunk/IrisSubp/include/IrisSubpTargetArm.s new file mode 100644 index 0000000..e0f9ed4 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpTargetArm.s @@ -0,0 +1,31 @@ +;======================================================================= +; IrisSubpTargetArm.s +; IRIS^[QbgIiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_SUBP_TARGET_H + ELSE +_IRIS_SUBP_TARGET_H * 1 + + +; IRIS_BB * 1 ; ubh{[hp`ւ̐؂芷 +; IRIS_TEG * 1 ; TEG{[hp`ւ̐؂芷 +IRIS_TS * 1 ; TSp`ւ̐؂芷 + +MMEM_4M * 1 ; C4M{̗p`ւ̐؂芷 + + IF :DEF: NDEBUG + ELSE + +; ENABLE_DBGLIB ; fobOCugp܂ + + ENDIF + +; SYNC_MAINP * 1 ; CvZbTƓȂꍇ + + + ENDIF ; _IRIS_SUBP_TARGET_H + + END + diff --git a/trunk/IrisSubp/include/IrisSubpTypes.h b/trunk/IrisSubp/include/IrisSubpTypes.h new file mode 100644 index 0000000..943db85 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpTypes.h @@ -0,0 +1,361 @@ +//====================================================================== +// IrisSubpTypes.h +// IRISTuvZbT W^錾 +// +// Copyright (C) 2002-2003 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SUBP_TYPES_H +#define _IRIS_SUBP_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +//---------------------------------------------------------------------- +// f[^^CvĒ` +//---------------------------------------------------------------------- + +typedef unsigned char u8; +typedef unsigned short int u16; +typedef unsigned int u32; +typedef unsigned long long int u64; + +typedef signed char s8; +typedef signed short int s16; +typedef signed int s32; +typedef signed long long int s64; + +typedef float f32; +typedef double f64; + + +#define vl volatile + +typedef vl u8 vu8; +typedef vl u16 vu16; +typedef vl u32 vu32; +typedef vl u64 vu64; + +typedef vl s8 vs8; +typedef vl s16 vs16; +typedef vl s32 vs32; +typedef vl s64 vs64; + +typedef vl f32 vf32; +typedef vl f64 vf64; + + +//---------------------------------------------------------------------- +// \ +//---------------------------------------------------------------------- + +// vOXe[^XWX^\ +typedef struct { + u32 cpuMode:5; // bot[h + u32 thumbState:1; // sgtlaXe[g + u32 fiq_disable:1; // ehps + u32 irq_disable:1; // hqps + u32 :20; + u32 v:1; // I[o[t[ + u32 c:1; // L[^{[^g + u32 z:1; // [ + u32 n:1; // ^ +} PsrData; +typedef vl PsrData vPsrData; + + +// 荞ݗv^ƒtO\ +typedef struct { + u16 blankV:1; // uuN + u16 blankH:1; // guN + u16 countV:1; // uJE^v + u16 timer0:1; // ^C}[O + u16 timer1:1; // ^C}[P + u16 timer2:1; // ^C}[Q + u16 timer3:1; // ^C}[R + u16 sio:1; // VAʐM + u16 dma0:1; // cl`O + u16 dma1:1; // cl`P + u16 dma2:1; // cl`Q + u16 dma3:1; // cl`R + u16 key:1; // L[ + u16 cartridge:1; // J[gbW + u16 :2; + + u16 mainp:1; // CvZbT + u16 mainpSendFifoEmpty:1; // CvZbTԑMehenGveB + u16 mainpRecvFifoNotEmpty:1;// CvZbTԎMehenmbgGveB + u16 cardData:1; // J[hf[^ + u16 cardIreq:1; // J[hhqdp + u16 :1; + u16 pmic_rtc:1; // p[}l[Wghb qsb + u16 spi:1; // roh + u16 wireless:1; // ʐM +} IntrFlags; +typedef vl IntrFlags vIntrFlags; + + +// CvZbTC^tF[X\ +typedef struct { + u16 recvStatus:4; // MXe[^X + u16 :4; + u16 sendStatus:4; // MXe[^X + u16 :1; + u16 sendIf:1; // 荞ݗvM + u16 recvIf_enable:1; // 荞ݗvM + u16 :1; +} MainpIntf; +typedef vl MainpIntf vMainpIntf; + + +// CvZbTʐMehenRg[\ +typedef struct { + u16 sendEmpty:1; // Mehen GveB + u16 sendFull:1; // t + u16 sendIf_enable:1; // 荞ݗv + u16 sendClear:1; // NA + u16 :4; + u16 recvEmpty:1; // Mehen GveB + u16 recvFull:1; // t + u16 recvIf_enable:1; // 荞ݗv + u16 :4; + u16 enable:1; // ehenCl[u +} MainpFifoCnt; +typedef vl MainpFifoCnt vMainpFifoCnt; + + + +// uq`lXe[^X\ +typedef struct +{ + u8 mode:3; + u8 offset:2; + u8 :2; + u8 enable:1; +} VramStat; +typedef vl VramStat vVramStat; + + +// [Nq`lXe[^X\ +typedef struct +{ + u8 bank; +} WramStat; +typedef vl WramStat vWramStat; + + + +// \Xe[^X\ +typedef struct { + u16 blankingV:1; // uuNԒ + u16 blankingH:1; // guNԒ + u16 countV:1; // uJE^v + u16 blankV_if_enable:1; // uuN荞ݗv + u16 blankH_if_enable:1; // guN荞ݗv + u16 countV_if_enable:1; // uJE^v荞ݗv + u16 :1; + u16 setV_d8:1; // uJE^rlݒicWj + u16 setV:8; // icV|Oj + + u16 readV:9; // uJE^ݒl + u16 :0; +} DispStat; +typedef vl DispStat vDispStat; + + + +// TEh}X^Rg[\ +typedef struct { + u16 volume:8; // }X^o̓x + u16 outL:2; // kŏIio + u16 outR:2; // qŏIio + u16 ch1Mixing_off:1; // `lP nee + u16 ch3Mixing_off:1; // `lR nee + u16 :1; + u16 enable:1; // Cl[u +} SoundMasterCnt; +typedef vl SoundMasterCnt vSoundMasterCnt; + + +// TEh`lRg[\ +typedef struct { + u16 volume:8; // `lo̓x + u16 shift:2; // f[^Vtg + u16 :5; + u16 outputHold:1; // fBZ[ȕo͕ێ + + u16 panpot:8; // p|bg + u16 duty:3; // f[eB + u16 repeatType:2; // s[g@ + u16 format:2; // tH[}bg + u16 enable:1; // Cl[u + + u32 srcp; // \[XAhX + + u16 timerCount; // ^C}[JEg + u16 repeatPoint; // s[gʒu + u32 repeatLength; // s[g +} SoundChannelCnt; +typedef vl SoundChannelCnt vSoundChannelCnt; + + +// TEhLv`Rg[\ +typedef struct { + u8 premixing_on:1; // ~LT[O nm + u8 src:1; // Lv`I + u8 repeat_off:1; // s[g nee + u8 format:1; // Lv`tH[}bgioblW^PUj + u8 :3; + u8 enable:1; // Cl[u +} SoundCapCnt; +typedef vl SoundCapCnt vSoundCapCnt; + + +// TEhLv`p[^Rg[\ +typedef struct { + u32 destp; // fXeBl[VAhX + u16 length; // Lv` +} SoundCapParamCnt; +typedef vl SoundCapParamCnt vSoundCapParamCnt; + + + +// rohRg[\ +typedef struct { + u16 sck:2; // VtgNbNI + u16 :5; + u16 busy:1; // rW[ + u16 :4; + u16 continuous:1; // ReBjAX[h + u16 target:1; // ʐM^[Qbgw + u16 if_enable:1; // 荞ݗv + u16 enable:1; // roh + + u16 data:8; // f[^ + u16 pad:8; +} SpiCnt; +typedef vl SpiCnt vSpiCnt; + + +// ėpo̓Rg[\ +typedef struct { + u16 sc:1; // f[^ + u16 sd:1; + u16 si:1; + u16 so:1; + u16 sc_i_o:1; // h/nI + u16 sd_i_o:1; + u16 si_i_o:1; + u16 so_i_o:1; + u16 if_enable:1; // 荞ݗv + u16 :5; + u16 sioModeMaster:2; // rhn[hE}X^ +} RCnt; +typedef vl RCnt vRCnt; + + +// cl`Rg[\ +typedef struct { + u16 count; // ] + u16 :5; + u16 destpCnt:2; // ]AhX Rg[ + u16 srcpCnt:2; // ]AhX Rg[ + u16 continuous:1; // ReBjAX[h + u16 busSize:1; // oXTCY PU^RQI + u16 dataRequest:1; // f[^v[h + u16 timming:2; // ^C~OI + u16 if_enable:1; // 荞ݗv + u16 enable:1; // cl` +} DmaCnt; +typedef vl DmaCnt vDmaCnt; + + +// ^C}[Rg[\ +typedef struct { + u16 count; // JEg + u16 prescaler:2; // vXP[I + u16 connect:1; // ʃ^C}[ڑ + u16 :3; + u16 if_enable:1; // 荞ݗv + u16 enable:1; // ^C}[ + u16 pad:8; +} TimerCnt; +typedef vl TimerCnt vTimerCnt; + + +// L[f[^\ +typedef struct { + u16 a:1; // ` + u16 b:1; // a + u16 select:1; // ZNg + u16 start:1; // X^[g + u16 plusR:1; // E + u16 plusL:1; // + u16 plusU:1; // + u16 plusD:1; // + u16 r:1; // q + u16 l:1; // k + u16 :6; +} KeyData; +typedef vl KeyData vKeyData; + +// L[Rg[\ +typedef struct { + u16 sel_a:1; // `{^ I + u16 sel_b:1; // a{^ I + u16 sel_select:1; // ZNg{^ I + u16 sel_start:1; // X^[g{^ I + u16 sel_plusR:1; // EL[ I + u16 sel_plusL:1; // L[ I + u16 sel_plusU:1; // L[ I + u16 sel_plusD:1; // L[ I + u16 sel_r:1; // q{^ I + u16 sel_l:1; // k{^ I + u16 :4; + u16 if_enable:1; // 荞ݗv + u16 intrType:1; // 荞݃^Cv I +} KeyCnt; +typedef vl KeyCnt vKeyCnt; + + +// ORg[\ +typedef struct { + u16 ctrdgDt8_cycles:2; // J[gbW Wf[^oX ANZXTCN + u16 ctrdgtAd16_1stCycles:2; // `cPUoX PANZXTCN + u16 ctrdgAd16_2ndCycles:1; // QANZXTCN + u16 ctrdgPhiClock:2; // Ӓ[qo̓NbN I + u16 ctrdgAccess:1; // ANZX + u16 :3; + u16 cardAccess:1; // J[hANZX +#ifdef IRIS_TS + u16 mainmemByteAccess:1; // CoCgANZXo + u16 mainmemCE2:1; // bdQMmF +#else + u16 :2; +#endif + u16 mainmemInterface:1; // CC^tF[X + u16 mainmemPriority:1; // D挠 +} ExMemCnt; +typedef vl ExMemCnt vExMemCnt; + + +// Bitkf[^WJpp[^ +typedef struct { + u16 srcNum; // \[Xf[^EoCg + u16 srcBitNum:8; // P\[Xf[^Erbg + u16 destBitNum:8; // PfXeBl[Vf[^Erbg + u32 destOffset:31; // \[Xf[^ɉZ鐔 + u32 destOffset0_on:1; // Õf[^ɃItZbgZ邩ۂ̃tO +} UnPackBitsParam; +typedef vl UnPackBitsParam vUnPackBitsParam; + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SUBP_TYPES_H diff --git a/trunk/IrisSubp/include/IrisSubpUTL.h b/trunk/IrisSubp/include/IrisSubpUTL.h new file mode 100644 index 0000000..47e27a6 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpUTL.h @@ -0,0 +1,49 @@ +//==================================================================== +// IrisSubpUTL.h +// [eBeBCu +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_SUBP_UTL_H +#define _IRIS_SUBP_UTL_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +#include +#include + + + +//---------------------------------------------------------------------- +// f[^̃Xbvi[h^oCgj +// +//EsetDatadestpw̃f[^Xbv܂B +//EvZbTԂ⃂W[ԂŋL\[Xr䂷邽߂ +// XsbN邱Ƃł܂B +// +//EF +// setData Zbgf[^ +// destp Xbṽ|C^ +// +//E߂lFXbv֒OɊi[Ăl +// +//AACɑ΂Ă̓LbVoRłȂ +// oCgANZX͂łȂƂɒӂĉB +// ł̂ŁACł͊{I UTL_SwapWord() gpĉB +//---------------------------------------------------------------------- + +s32 UTL_SwapWord(u32 setData, volatile u32 *destp); +u8 UTL_SwapByte(u32 setData, volatile u8 *destp); + + + +#ifdef __cplusplus +} +#endif + +#endif // _IRIS_SUBP_OS_H + diff --git a/trunk/IrisSubp/include/IrisSubpUTL_Arm.s b/trunk/IrisSubp/include/IrisSubpUTL_Arm.s new file mode 100644 index 0000000..c633d33 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpUTL_Arm.s @@ -0,0 +1,29 @@ +;===================================================================== +; IrisSubpUTL_Arm.s +; [eBeBCuiARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;===================================================================== + IF :DEF: _IRIS_SUBP_UTL_H + ELSE +_IRIS_SUBP_UTL_H * 1 + + + INCLUDE IrisTargetArm.s + + +;----------------------------------------------------------------------- +; f[^̃Xbvi[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN UTL_SwapWord + .EXTERN UTL_SwapByte + + + + ENDIF ; _IRIS_SUBP_UTL_H + + + + END + diff --git a/trunk/IrisSubp/include/IrisSubpUTL_Mw.s b/trunk/IrisSubp/include/IrisSubpUTL_Mw.s new file mode 100644 index 0000000..2b6cae5 --- /dev/null +++ b/trunk/IrisSubp/include/IrisSubpUTL_Mw.s @@ -0,0 +1,23 @@ +;===================================================================== +; IrisSubpUTL_Mw.s +; [eBeBCuiMWASMARMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;===================================================================== +#ifndef _IRIS_SUBP_UTL_H +#define _IRIS_SUBP_UTL_H + + + .INCLUDE IrisSubpTarget.h + + +;----------------------------------------------------------------------- +; f[^̃Xbvi[h^oCgj +;----------------------------------------------------------------------- + + .EXTERN UTL_SwapWord + .EXTERN UTL_SwapByte + + + +#endif // _IRIS_SUBP_UTL_H diff --git a/trunk/IrisSubp/include/private/IrisCardDefine.h b/trunk/IrisSubp/include/private/IrisCardDefine.h new file mode 100644 index 0000000..ac71e78 --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisCardDefine.h @@ -0,0 +1,424 @@ +//==================================================================== +// IrisCardDefine.h +// IRIS J[h萔 +// +// Copyright (C) 2003,2004 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_CARD_DEFINE_H +#define _IRIS_CARD_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + + +// J[hANZXERg[WX^\ +typedef struct { + u16 latency1:13; // CeVP̃TCN + u16 dataScramble_on:1; // f[^XNu nm + u16 scrambleUnit_on:1; // XNuH nm + u16 initScramblePN:1; // XNuomf[^ + + u16 latency2:6; // CeVQ̃TCN + u16 cmdScramble_on:1; // R}hXNu nm + u16 dataReady:1; // f[^ fB + + u16 pages:3; // y[W + u16 clockType:1; // NbN^CviPTO^QSOj + u16 clockInLatency:1; // CeVԂɃNbN + u16 reset:1; // ZbgM + u16 accessMode:1; // ANZX[h + u16 start:1; // X^[g +} CardCnt; + + +// J[hRg[Ep[^\ +typedef struct { + u32 dmaNo; // DMAԍ + u32 cardCnt; // J[hRg[ + u32 op[2]; // R}h +} CardCtrlParam; + + +// J[h񓯊ǂݍ݊֐^錾 +typedef void (* ReadCardAsyncFuncp)(void *romp, void *ramp, s32 size, CardCtrlParam *paramp); + +// J[h荞݊֐^錾 +typedef void (* CardIntrFuncp)(void); + +// J[h荞݃[N\ +typedef struct { + u8 *romp; // ROMAhX + u8 *ramp; // RAMAhX + s32 restSize; // cTCY + s32 blockSize; // ubNTCY + CardCtrlParam param; // J[hANZXEp[^\ + ReadCardAsyncFuncp AsyncFuncp; // J[hǂݍ݊֐ +// u32 pad; // \ +} CardIntrWork; + + + +//---------------------------------------------------------------------- +// J[hcl` +//---------------------------------------------------------------------- + +#define DmaReadCard(dmaNo, destp) \ + \ + DmaSet(dmaNo, REG_CARD_DATA, destp, ( \ + DMA_ENABLE | DMA_TIMMING_CARD | \ + DMA_SRC_FIX | DMA_DEST_INC | \ + DMA_CONTINUOUS_ON | \ + DMA_32BIT_BUS | (1))) + +#define DmaWriteCard(dmaNo, srcp) \ + \ + DmaSet(dmaNo, srcp, REG_CARD_DATA, ( \ + DMA_ENABLE | DMA_TIMMING_CARD | \ + DMA_SRC_INC | DMA_DEST_FIX | \ + DMA_CONTINUOUS_ON | \ + DMA_32BIT_BUS | (1))) + +//EJ[h|ԂDMA]s܂B +// +//EF +// dmaNo DMAԍ +// srcp \[XAhX +// destp fXeBl[VAhX + + +//---------------------------------------------------------------------- +// J[h̃f[^]̓fBH +//---------------------------------------------------------------------- + +#define IsCardDataReady() \ + \ + (*(vu32 *)REG_CARDCNT & CARD_DATA_READY) + +//EJ[h̃f[^]̓fBǂԂ܂B + +//---------------------------------------------------------------------- +// J[hf[^҂ +//---------------------------------------------------------------------- + +#define WaitCardData() \ +{ \ + while (!IsCardDataReady()) ; \ +} + +//EJ[hf[^]̏I҂܂B + + +//---------------------------------------------------------------------- +// J[h̓rW[H +//---------------------------------------------------------------------- + +#define IsCardBusy() \ + \ + (*(vu32 *)REG_CARDCNT & CARD_START) + +//EJ[hrW[ǂԂ܂B + +//---------------------------------------------------------------------- +// J[h҂ +//---------------------------------------------------------------------- + +#define WaitCard() \ +{ \ + while (IsCardBusy()) ; \ +} + +//EJ[h̏I҂܂B + + +//---------------------------------------------------------------------- +// Rg[p[^liNORMAL[hj +//---------------------------------------------------------------------- + +#define GetCardCnt4Normal() \ + \ + (GetCardCnt4Game() & CARD_SCRAMBLE_CLEAR_MASK) + +//ENORMAL[h̃Rg[p[^l܂B +//EXNu̐ݒ̓NA܂B + +//---------------------------------------------------------------------- +// Rg[p[^liSECURE[hj +//---------------------------------------------------------------------- + +#define GetCardCnt4Secure() \ + \ + (*(vu32 *)MROMCNT_SECURE_BUF & (CARD_CLOCK_TYPE | CARD_LATENCY_MASK)) + +//ESECURE[h̃Rg[p[^l܂B + +//---------------------------------------------------------------------- +// Rg[p[^liGAME[hj +//---------------------------------------------------------------------- + +#define GetCardCnt4Game() \ + \ + (*(vu32 *)MROMCNT_GAME_BUF) + +//EGAME[h̃Rg[p[^l܂B + + +//---------------------------------------------------------------------- +// Rg[p[^ ZbgiNORMAL[hj +//---------------------------------------------------------------------- + +#define SetCardCnt4Normal(param) \ + \ + (*(vu32 *)MROMCNT_GAME_BUF = param) + +//EGAME[h̃Rg[p[^Zbg܂B + + +//---------------------------------------------------------------------- +// Rg[p[^ ZbgiSECURE[hj +//---------------------------------------------------------------------- + +#define SetCardCnt4Secure(param) \ + \ + (*(vu32 *)MROMCNT_SECURE_BUF = param) + +//ESECURE[h̃Rg[p[^Zbg܂B + +//---------------------------------------------------------------------- +// Rg[p[^ ZbgiGAME[hj +//---------------------------------------------------------------------- + +#define SetCardCnt4Game(param) \ + \ + (*(vu32 *)MROMCNT_GAME_BUF = param) + +//EGAME[h̃Rg[p[^Zbg܂B + + +//---------------------------------------------------------------------- +// CeVQCeVP։Z +//---------------------------------------------------------------------- + +#define AddLatency2ToLatency1(param) \ + \ + ( (((param) & CARD_LATENCY2_CYCLES_MASK) \ + >> CARD_LATENCY2_CYCLES_SHIFT) \ + + ((param) & ~CARD_LATENCY2_CYCLES_MASK) \ + ) + +//EJ[h̏I҂܂B + + +//---------------------------------------------------------------------- +// qnlGAE}bv +//---------------------------------------------------------------------- + +#define MROM_SECURE_AREA 0x4000 // SECUREGA +#define MROM_GAME_AREA 0x8000 // GAMEGA + +//---------------------------------------------------------------------- +// qnlGAETCY +//---------------------------------------------------------------------- + +#define MROM_SEGMENT_SIZE 0x1000 // ZOgTCY +#define MROM_SECURE_SIZE 0x4000 // SECUREGATCY + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define MROMCNT_GAME_BUF (ROM_HEADER_BUF + 0x60) // GAME[hERg[f[^ +#define MROMCNT_SECURE_BUF (ROM_HEADER_BUF + 0x64) // SECURE[hERg[f[^ + + +//---------------------------------------------------------------------- +// WX^EAhX +//---------------------------------------------------------------------- + +#define REG_CARDMST_SPI_CNT (REG_BASE + 0x1a0) // J[h}X^[rohRg[ + +#define REG_CARD_MASTER_CNT (REG_BASE + 0x1a1) // J[h}X^[Rg[ + +#define REG_CARD_SPI_CNT (REG_BASE + 0x1a0) // J[hrohRg[ +#define REG_CARD_SPI_DATA (REG_BASE + 0x1a2) // f[^ + +#define REG_CARDCNT (REG_BASE + 0x1a4) // J[hRg[ +#define REG_CARD_CMD (REG_BASE + 0x1a8) // R}hݒ +#define REG_CARD_DATA (REG_BASE + 0x100010) // f[^ + +#define REG_CARD_PN_INIT (REG_BASE + 0x1b0) // J[homf[^l +#define REG_CARD_PNA_INIT_L (REG_BASE + 0x1b0) +#define REG_CARD_PNB_INIT_L (REG_BASE + 0x1b4) +#define REG_CARD_PNA_INIT_H (REG_BASE + 0x1b8) +#define REG_CARD_PNB_INIT_H (REG_BASE + 0x1ba) + + +//---------------------------------------------------------------------- +// J[h }X^[Rg[ +//---------------------------------------------------------------------- + +#define CARDMST_SEL_DEVICE 0x20 // foCXI +#define CARDMST_SEL_ROM 0x00 // }XNqnl^RcI +#define CARDMST_SEL_SPI 0x20 // rohI + +#define CARDMST_IF_ENABLE 0x40 // 荞ݗv +#define CARDMST_ENABLE 0x80 // J[hCl[u + + +//---------------------------------------------------------------------- +// J[hroh Rg[ +//---------------------------------------------------------------------- + +#define CARDSPI_SCK_MASK 0x03 // VtgNbN + +#define CARDSPI_SCK_SHIFT 0 + +#define CARDSPI_SCK_4M 0x00 // VtgNbN SlgI +#define CARDSPI_SCK_2M 0x01 // QlgI +#define CARDSPI_SCK_1M 0x02 // PlgI +#define CARDSPI_SCK_524K 0x03 // TQSjgI + +#define CARDSPI_INV_CS 0x40 // ʐMIɁ^br_Eێ +#define CARDSPI_BUSY 0x80 // rW[ + + +//---------------------------------------------------------------------- +// J[hANZX Rg[ +//---------------------------------------------------------------------- + +#define CARD_LATENCY1_CYCLES_MASK 0x00001fff // CeVP̃TCN +#define CARD_LATENCY2_CYCLES_MASK 0x003f0000 // CeVQ̃TCN +#define CARD_LATENCY_MASK 0x003f1fff // L킹}XN +#define CARD_PAGE_COUNT_MASK 0x07000000 // y[W + +#define CARD_LATENCY1_CYCLES_SHIFT 0 +#define CARD_LATENCY2_CYCLES_SHIFT 16 +#define CARD_PAGE_COUNT_SHIFT 24 + + // XNutOQ̃Zbg +#define CARD_SCRAMBLE_SET_MASK ( CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON \ + | CARD_CMD_SCRAMBLE_ON) + // XNutOQ̃NA +#define CARD_SCRAMBLE_CLEAR_MASK ( ~(CARD_INIT_SCRAMBLE_PN \ + | CARD_SCRAMBLE_SET_MASK \ + | CARD_CLOCK_IN_LATENCY \ + | CARD_WRITE_MODE)) + +#define CARD_DATA_SCRAMBLE_ON 0x00002000 // f[^XNu nm +#define CARD_SCRAMBLE_UNIT_ON 0x00004000 // XNuH nm +#define CARD_INIT_SCRAMBLE_PN 0x00008000 // XNuomf[^ +#define CARD_CMD_SCRAMBLE_ON 0x00400000 // R}hXNu nm + +#define CARD_DATA_READY 0x00800000 // f[^ fB + +#define CARD_0_PAGE 0x00000000 // Oy[W +#define CARD_1_PAGE 0x01000000 // Py[W +#define CARD_2_PAGES 0x02000000 // Qy[W +#define CARD_4_PAGES 0x03000000 // Sy[W +#define CARD_8_PAGES 0x04000000 // Wy[W +#define CARD_16_PAGES 0x05000000 // PUy[W +#define CARD_32_PAGES 0x06000000 // RQy[W +#define CARD_STATUS 0x07000000 // Xe[^X[h + +#define CARD_CLOCK_TYPE 0x08000000 // NbN ^Cv +#define CARD_CLOCK_150NS 0x00000000 // NbNTCN PTO +#define CARD_CLOCK_240NS 0x08000000 // QSO +#define CARD_CLOCK_IN_LATENCY 0x10000000 // CeVԂɃNbN +#define CARD_RESET_LO 0x00000000 // ZbgMx k +#define CARD_RESET_HI 0x20000000 // g +#define CARD_ACCESS_MODE 0x40000000 // ANZX [h +#define CARD_READ_MODE 0x00000000 // [h[h +#define CARD_WRITE_MODE 0x40000000 // Cg[h +#define CARD_START 0x80000000 // X^[g + +// \̃op萔 + +#define ST_CARD_0_PAGE 0 // Oy[W +#define ST_CARD_1_PAGE 1 // Py[W +#define ST_CARD_2_PAGES 2 // Qy[W +#define ST_CARD_4_PAGES 3 // Sy[W +#define ST_CARD_8_PAGES 4 // Wy[W +#define ST_CARD_16_PAGES 5 // PUy[W +#define ST_CARD_32_PAGES 6 // RQy[W +#define ST_CARD_STATUS 7 // Xe[^X[h + +#define ST_CARD_CLOCK_150NS 0 // NbNTCN PTO +#define ST_CARD_CLOCK_240NS 1 // QSO + +#define ST_CARD_READ_MODE 0 // [h[h +#define ST_CARD_WRITE_MODE 1 // Cg[h + + +//---------------------------------------------------------------------- +// }XNqnlR}h +//---------------------------------------------------------------------- + +// NORMAL[h + +#define MROMOP_N_OP_MASK 0xff000000 // R}h}XN + +#define MROMOP_N_READ_ID 0x90000000 // hcǂݍ +#define MROMOP_N_READ_PAGES 0x00000000 // y[WQǂݍ +#define MROMOP_N_LOAD_TABLE 0x9f000000 // tbVEe[uݒ +#define MROMOP_N_CHANGE_MODE 0x3c000000 // SECURE[h֑J + +#define MROMOP_N_READ_ID_PAD_L 0xffffffff +#define MROMOP_N_READ_ID_PAD_H 0x00ffffff +#define MROMOP_N_READ_PAGES_PAD_L 0xffffffff +#define MROMOP_N_READ_PAGES_PAD_H 0x00ffffff +#define MROMOP_N_READ_PAGES_ADDR_MASK 0x000ffffe +#define MROMOP_N_CHANGE_SECURE_PAD_L 0xf00000ff +#define MROMOP_N_CHANGE_SECURE_PAD_H 0x00000000 + +#define MROMOP_N_VAE_MASK_H 0x00ffffff + +#define MROMOP_N_VBI_SHIFT_L 8 + +// SECURE[h + +#define MROM_S_LATENCY1_CYCLES_MIN 0x00008f8 // CeVP̍ŏTCN +#define MROM_S_LATENCY2_CYCLES_MIN 0x0000018 // CeVQ̍ŏTCN + +#define MROMOP_S_OP_MASK 0xf0000000 // R}h}XN + +#define MROMOP_S_READ_ID 0x10000000 // hcǂݍ +#define MROMOP_S_READ_SEGMENT 0x20000000 // ÍZOgǂݍ +#define MROMOP_S_PNG_ON 0x40000000 // omWFl[^ nm +#define MROMOP_S_PNG_OFF 0x60000000 // omWFl[^ nee +#define MROMOP_S_CHANGE_MODE 0xa0000000 // GAME[h֑J + +#define MROMOP_S_VA_MASK_L 0xfff00000 +#define MROMOP_S_VA_MASK_H 0x00000fff +#define MROMOP_S_VB_MASK_L 0x000fffff +#define MROMOP_S_VC_MASK_H 0x0ffff000 +#define MROMOP_S_VD_MASK_L 0xfff00000 +#define MROMOP_S_VD_MASK_H 0x00000fff + +#define MROMOP_S_VA_SHIFT_L 20 +#define MROMOP_S_VA_SHIFT_H 12 +#define MROMOP_S_VC_SHIFT_H 12 +#define MROMOP_S_VD_SHIFT_L 20 +#define MROMOP_S_VD_SHIFT_H 12 + +// GAME[h + +#define MROMOP_G_OP_MASK 0xff000000 // R}h}XN + +#define MROMOP_G_READ_ID 0xb8000000 // hcǂݍ +#define MROMOP_G_READ_PAGE 0xb7000000 // y[Wǂݍ + +#define MROMOP_G_READ_PAGE_PAD_L 0x00ffffff +#define MROMOP_G_READ_PAGE_PAD_H 0x00f00000 +#define MROMOP_G_READ_PAGE_MASK_L 0x00ffffff +#define MROMOP_G_READ_PAGE_MASK_H 0xfffffffe +#define MROMOP_G_READ_PAGE_ADDR_MASK 0x000ffffe + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_CARD_DEFINE_H diff --git a/trunk/IrisSubp/include/private/IrisCardDefineArm.s b/trunk/IrisSubp/include/private/IrisCardDefineArm.s new file mode 100644 index 0000000..8a16967 --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisCardDefineArm.s @@ -0,0 +1,190 @@ +;======================================================================= +; IrisCardDefineArm.s +; IRIS J[h萔iARMASMpj +; +; Copyright (C) 2003,2004 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_CARD_DEFINE_H + ELSE +_IRIS_CARD_DEFINE_H * 1 + + +;----------------------------------------------------------------------- +; E}bv +;----------------------------------------------------------------------- + +REG_CARDMST_SPI_CNT * (REG_BASE + 0x1a0) ; J[h}X^[rohRg[ + +REG_CARD_MASTER_CNT * (REG_BASE + 0x1a1) ; J[h}X^[Rg[ + +REG_CARD_SPI_CNT * (REG_BASE + 0x1a0) ; J[hrohRg[ +REG_CARD_SPI_DATA * (REG_BASE + 0x1a2) ; f[^ + +REG_CARDCNT * (REG_BASE + 0x1a4) ; J[hRg[ +REG_CARD_CMD * (REG_BASE + 0x1a8) ; R}hݒ +REG_CARD_DATA * (REG_BASE + 0x100010) ; f[^ + +REG_CARD_PN_INIT * (REG_BASE + 0x1b0) ; J[homf[^l +REG_CARD_PNA_INIT_L * (REG_BASE + 0x1b0) +REG_CARD_PNB_INIT_L * (REG_BASE + 0x1b4) +REG_CARD_PNA_INIT_H * (REG_BASE + 0x1b8) +REG_CARD_PNB_INIT_H * (REG_BASE + 0x1ba) + + +;----------------------------------------------------------------------- +; J[h }X^[Rg[ +;----------------------------------------------------------------------- + +CARDM_SEL_DEVICE * 0x20 ; foCXI +CARDM_SEL_ROM * 0x00 ; }XNqnl^RcI +CARDM_SEL_SPI * 0x20 ; rohI + +CARDM_IF_ENABLE * 0x40 ; 荞ݗv +CARDM_ENABLE * 0x80 ; J[hCl[u + + +;----------------------------------------------------------------------- +; J[hroh Rg[ +;----------------------------------------------------------------------- + +CARD_SPI_SCK_MASK * 0x03 ; VtgNbN + +CARD_SPI_SCK_SHIFT * 0 + +CARD_SPI_SCK_4M * 0x00 ; VtgNbN SlgI +CARD_SPI_SCK_2M * 0x01 ; QlgI +CARD_SPI_SCK_1M * 0x02 ; PlgI +CARD_SPI_SCK_524K * 0x03 ; TQSjgI + +CARD_SPI_INV_CS * 0x40 ; ʐMIɁ^br_Eێ +CARD_SPI_BUSY * 0x80 ; rW[ + + +;----------------------------------------------------------------------- +; J[h Rg[ +;----------------------------------------------------------------------- + +CARD_LATENCY1_CYCLES_MASK * 0x00001fff ; CeVP̃TCN +CARD_LATENCY2_CYCLES_MASK * 0x003f0000 ; CeVQ̃TCN +CARD_PAGE_COUNT_MASK * 0x07000000 ; y[W + +CARD_LATENCY1_CYCLES_SHIFT 0 +CARD_LATENCY2_CYCLES_SHIFT 16 +CARD_PAGE_COUNT_SHIFT 24 + +CARD_DATA_SCRAMBLE_ON * 0x00002000 ; f[^XNu nm +CARD_SCRAMBLE_UNIT_ON * 0x00004000 ; XNuH nm +CARD_INIT_SCRAMBLE_PN * 0x00008000 ; XNuomf[^ + +CARD_CMD_SCRAMBLE_ON * 0x00400000 ; R}hXNu nm +CARD_DATA_READY * 0x00800000 ; f[^ fB + +CARD_0_PAGE * 0x00000000 ; Oy[W +CARD_1_PAGE * 0x01000000 ; Py[W +CARD_2_PAGES * 0x02000000 ; Qy[W +CARD_4_PAGES * 0x03000000 ; Sy[W +CARD_8_PAGES * 0x04000000 ; Wy[W +CARD_16_PAGES * 0x05000000 ; PUy[W +CARD_32_PAGES * 0x06000000 ; RQy[W +CARD_STATUS * 0x07000000 ; Xe[^X[h + +CARD_CLOCK_TYPE * 0x08000000 ; NbN ^Cv +CARD_CLOCK_150NS * 0x00000000 ; NbNTCN PTO +CARD_CLOCK_240NS * 0x08000000 ; QSO +CARD_CLOCK_IN_LATENCY * 0x10000000 ; CeVԂɃNbN +CARD_RESET_LO * 0x00000000 ; ZbgMx k +CARD_RESET_HI * 0x20000000 ; g +CARD_ACCESS_MODE * 0x40000000 ; ANZX [h +CARD_READ_MODE * 0x00000000 ; [h[h +CARD_WRITE_MODE * 0x40000000 ; Cg[h +CARD_START * 0x80000000 ; X^[g + +; \̃op萔 + +ST_CARD_0_PAGE * 0 ; Oy[W +ST_CARD_1_PAGE * 1 ; Py[W +ST_CARD_2_PAGES * 2 ; Qy[W +ST_CARD_4_PAGES * 3 ; Sy[W +ST_CARD_8_PAGES * 4 ; Wy[W +ST_CARD_16_PAGES * 5 ; PUy[W +ST_CARD_32_PAGES * 6 ; RQy[W +ST_CARD_STATUS * 7 ; Xe[^X[h + +ST_CARD_CLOCK_150NS * 0 ; NbNTCN PTO +ST_CARD_CLOCK_240NS * 1 ; QSO + +ST_CARD_READ_MODE * 0 ; [h[h +ST_CARD_WRITE_MODE * 1 ; Cg[h + + +;----------------------------------------------------------------------- +; }XNqnlR}h +;----------------------------------------------------------------------- + +; NORMAL[h + +MROMOP_N_READ_ID * 0x90000000 ; hcǂݍ +MROMOP_N_READ_HEADER * 0x00000000 ; wb_ZOgǂݍ +MROMOP_N_CHANGE_SECURE * 0x3c000000 ; SECURE[h֑J + +MROMOP_N_READ_ID_PAD_L * 0xffffffff +MROMOP_N_READ_ID_PAD_H * 0x00ffffff +MROMOP_N_READ_HEADER_PAD_L * 0xffffffff +MROMOP_N_READ_HEADER_PAD_H * 0x00ffffff +MROMOP_N_CHANGE_SECURE_PAD_L * 0xf00000ff +MROMOP_N_CHANGE_SECURE_PAD_H * 0x00000000 + +; SECURE[h + +MROMOP_S_READ_ID * 0x10000000 ; hcǂݍ +MROMOP_S_READ_SEGMENT * 0x20000000 ; ÍZOgǂݍ +MROMOP_S_PNG_ON * 0x40000000 ; omWFl[^ nm +MROMOP_S_CHANGE_GAME * 0xa0000000 ; GAME[h֑J + +MROMOP_S_READ_ID_PAD_L * 0x00000000 +MROMOP_S_READ_ID_PAD_H * 0x0ffff000 +MROMOP_S_PNG_ON_PAD_L * 0x00000000 +MROMOP_S_PNG_ON_PAD_H * 0x0ffff000 +MROMOP_S_CHANGE_GAME_PAD_L * 0xffffffff +MROMOP_S_CHANGE_GAME_PAD_H * 0x0fffffff + +; GAME[h + +MROMOP_G_READ_PAGE * 0xb7000000 ; y[Wǂݍ + +MROMOP_G_READ_PAGE_PAD_L * 0x00ffffff +MROMOP_G_READ_PAGE_PAD_H * 0x00f00000 +MROMOP_G_READ_PAGE_MASK_L * 0x00ffffff +MROMOP_G_READ_PAGE_MASK_H * 0xfffffffe +MROMOP_G_READ_PAGE_ADDR_MASK * 0x000ffffe + + +;----------------------------------------------------------------------- +; }XNqnlR}h +;----------------------------------------------------------------------- + +; NORMAL[h + +MEM3DOP_N_READ_ID * 0x90000000 ; hcǂݍ +MEM3DOP_N_READ_PAGE * 0x00000000 ; y[Wǂݍ +MEM3DOP_N_WRITE_PAGE * 0x10000000 ; y[W +MEM3DOP_N_INPUT_SERIAL * 0x80000000 ; VAf[^ +MEM3DOP_N_READ_STAT * 0x70000000 ; Xe[^Xǂݍ + +MEM3DOP_N_READ_ID_PAD_L * 0xffffffff +MEM3DOP_N_READ_ID_PAD_H * 0x00ffffff +MEM3DOP_N_READ_PAGE_PAD_L * 0x00000000 +MEM3DOP_N_READ_PAGE_PAD_H * 0x00ffffff +MEM3DOP_N_WRITE_PAGE_PAD_L * 0xffffffff +MEM3DOP_N_WRITE_PAGE_PAD_H * 0x00ffffff +MEM3DOP_N_INPUT_SERIAL_PAD_L * 0x00000000 +MEM3DOP_N_INPUT_SERIAL_PAD_H * 0x00ffffff +MEM3DOP_N_READ_STAT_PAD_L * 0xffffffff +MEM3DOP_N_READ_STAT_PAD_H * 0x00ffffff + + + + ENDIF ; _IRIS_CARD_DEFINE_H + + END + diff --git a/trunk/IrisSubp/include/private/IrisMainMemeoryDefine.h b/trunk/IrisSubp/include/private/IrisMainMemeoryDefine.h new file mode 100644 index 0000000..f802ac1 --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisMainMemeoryDefine.h @@ -0,0 +1,57 @@ +//==================================================================== +// IrisMainMemeoryDefine.h +// IRIS C萔 +// +// Copyright (C) 2003 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_MMEM_DEFINE_H +#define _IRIS_MMEM_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + + +//---------------------------------------------------------------------- +// C R}h +//---------------------------------------------------------------------- + +// STCNڂ̃f[^ + +#define MMEMD4_PARTIAL_REFRESH_NONE 0x0003 // p[VtbV +#define MMEMD4_BURST_CONTINUOUS 0x001c // Ao[XgiQQSoCgj +#define MMEMD4_BURST_MODE 0x0000 // o[Xg[h +#define MMEMD4_PAGE_MODE 0x0020 // y[W[h +#define MMEMD4_SB1 0xffc0 // PŒ + +// TTCNڂ̃f[^ + +#define MMEMD5_1ST_R5_W4 0x0003 // Pq^v T^S +#define MMEMD5_1ST_R4_W3 0x0002 // Pq^v S^R +#define MMEMD5_BURST_LINER 0x0008 // o[XgjAEV[PX +#define MMEMD5_BURST_WRITE 0x0000 // o[XgCg +#define MMEMD5_CLOCK_TRIGGER_UP 0x0020 // NbN +#define MMEMD5_SB1 0xffc0 // PŒ + +// UTCNڂ̃AhX + +#define MMEMP_SB1 0x004003fe // PŒ +#define MMEMP_CLOCK_TRIGGER_UP 0x00000400 // NbN +#define MMEMP_BURST_WRITE 0x00000000 // o[XgCg +#define MMEMP_BURST_LINER 0x00001000 // o[XgjAEV[PX +#define MMEMP_1ST_R5_W4 0x00006000 // Pq^v T^S +#define MMEMP_1ST_R4_W3 0x00004000 // Pq^v S^R +#define MMEMP_BURST_MODE 0x00000000 // o[Xg[h +#define MMEMP_PAGE_MODE 0x00010000 // y[W[h +#define MMEMP_BURST_CONTINUOUS 0x000e0000 // Ao[XgiQQSoCgj +#define MMEMP_PARTIAL_REFRESH_NONE 0x00300000 // p[VtbV + + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_MMEM_DEFINE_H diff --git a/trunk/IrisSubp/include/private/IrisMainMemoryDefineArm.s b/trunk/IrisSubp/include/private/IrisMainMemoryDefineArm.s new file mode 100644 index 0000000..e4e3811 --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisMainMemoryDefineArm.s @@ -0,0 +1,51 @@ +;======================================================================= +; IrisMainMemoryDefineArm.s +; IRIS C萔iARMASMpj +; +; Copyright (C) 2003 NINTENDO Co.,Ltd. +;======================================================================= + IF :DEF: _IRIS_MMEM_DEFINE_H + ELSE +_IRIS_MMEM_DEFINE_H * 1 + + +;----------------------------------------------------------------------- +; C R}h +;----------------------------------------------------------------------- + +; STCNڂ̃f[^ + +MMEMD4_PARTIAL_REFRESH_NONE * 0x0003 ; p[VtbV +MMEMD4_BURST_CONTINUOUS * 0x001c ; Ao[XgiQQSoCgj +MMEMD4_BURST_MODE * 0x0000 ; o[Xg[h +MMEMD4_PAGE_MODE * 0x0020 ; y[W[h +MMEMD4_SB1 * 0xffc0 ; PŒ + +; TTCNڂ̃f[^ + +MMEMD5_1ST_R5_W4 * 0x0003 ; Pq^v T^S +MMEMD5_1ST_R4_W3 * 0x0002 ; Pq^v S^R +MMEMD5_BURST_LINER * 0x0008 ; o[XgjAEV[PX +MMEMD5_BURST_WRITE * 0x0000 ; o[XgCg +MMEMD5_CLOCK_TRIGGER_UP * 0x0020 ; NbN +MMEMD5_SB1 * 0xffc0 ; PŒ + +; UTCNڂ̃AhX + +MMEMP_SB1 * 0x004003fe ; PŒ +MMEMP_CLOCK_TRIGGER_UP * 0x00000400 ; NbN +MMEMP_BURST_WRITE * 0x00000000 ; o[XgCg +MMEMP_BURST_LINER * 0x00001000 ; o[XgjAEV[PX +MMEMP_1ST_R5_W4 * 0x00006000 ; Pq^v T^S +MMEMP_1ST_R4_W3 * 0x00004000 ; Pq^v S^R +MMEMP_BURST_MODE * 0x00000000 ; o[Xg[h +MMEMP_PAGE_MODE * 0x00010000 ; y[W[h +MMEMP_BURST_CONTINUOUS * 0x000e0000 ; Ao[XgiQQSoCgj +MMEMP_PARTIAL_REFRESH_NONE * 0x00300000 ; p[VtbV + + + + ENDIF ; _IRIS_MMEM_DEFINE_H + + END + diff --git a/trunk/IrisSubp/include/private/IrisRtcDefine.h b/trunk/IrisSubp/include/private/IrisRtcDefine.h new file mode 100644 index 0000000..b6a76ff --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisRtcDefine.h @@ -0,0 +1,104 @@ +//==================================================================== +// IrisRtcDefine.h +// IRIS RTC萔 +// +// Copyright (C) 2004 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_RTC_DEFINE_H +#define _IRIS_RTC_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + + + +//---------------------------------------------------------------------- +// E}bv +//---------------------------------------------------------------------- + +#define REG_R1_CNT (REG_BASE + 0x138) // qsbRg[ + + +//---------------------------------------------------------------------- +// qsbRg[ +//---------------------------------------------------------------------- + +#define R1_RTC_DATA_BIT 0x01 // f[^rbg +#define R1_RTC_SCK 0x02 // VtgNbN +#define R1_RTC_CS 0x04 // `bvZNg + +#define R1_RTC_DATA_BIT_IN 0x00 // f[^rbg +#define R1_RTC_DATA_BIT_OUT 0x10 +#define R1_RTC_SCK_IN 0x00 // VtgNbN +#define R1_RTC_SCK_OUT 0x20 +#define R1_RTC_CS_IN 0x00 // `bvZNg +#define R1_RTC_CS_OUT 0x40 + +#define R1_RTC_DATA_DIR_IN ( R1_RTC_DATA_BIT_IN \ + | R1_RTC_SCK_OUT \ + | R1_RTC_CS_OUT) // f[^ + +#define R1_RTC_DATA_DIR_OUT ( R1_RTC_DATA_BIT_OUT \ + | R1_RTC_SCK_OUT \ + | R1_RTC_CS_OUT) // f[^o + + +//---------------------------------------------------------------------- +// qsbR}h +//---------------------------------------------------------------------- + +#define RTCOP_FIX_BITS 0x60 // ʃrbgŒl + +#define RTCOP_MASK 0x0e // R}h}XN + +#define RTCOP_STAT1 0x00 // Xe[^XP +#define RTCOP_STAT2 0x02 // Xe[^XQ +#define RTCOP_YEAR 0x04 // N +#define RTCOP_TIME 0x06 // +#define RTCOP_INT1 0x08 // 荞ݐݒP +#define RTCOP_INT2 0x0a // ݒQ +#define RTCOP_ADJUST_CLOCK 0x0c // NbN +#define RTCOP_FREE_REGISTER 0x0e // t[WX^ + +#define RTCOP_WRITE 0x00 // +#define RTCOP_READ 0x01 // ǂݍ + + +//---------------------------------------------------------------------- +// qsbXe[^XP +//---------------------------------------------------------------------- + +#define RTCSTAT1_RESET 0x01 // Zbg +#define RTCSTAT1_SEL_12H 0x00 // PQԕ\ I +#define RTCSTAT1_SEL_24H 0x02 // QS +#define RTCSTAT1_USR_BIT3 0x04 // [UrbgR +#define RTCSTAT1_INTR1 0x10 // 荞݂P +#define RTCSTAT1_INTR2 0x20 // 荞݂Q +#define RTCSTAT1_BATTERY_DOWN 0x40 // obe[ _E +#define RTCSTAT1_RESET_REQUEST 0x80 // d̃Zbgv + +//---------------------------------------------------------------------- +// qsbXe[^XQ +//---------------------------------------------------------------------- + +#define RTCSTAT2_NONE_INTR 0x00 // 荞ݖ +#define RTCSTAT2_SEL_FREQ_INTR 0x02 // Ig튄荞 +#define RTCSTAT2_MIN_EDGE_INTR 0x04 // PʃGbW荞 +#define RTCSTAT2_MIN_CK1_INTR 0x06 // Pʒ튄荞݂P +#define RTCSTAT2_ALERM_INTR 0x08 // A[荞 +#define RTCSTAT2_MIN_CK2_INTR 0x0e // Pʒ튄荞݂Q +#define RTCSTAT2_USR_BIT4 0x10 // [UrbgS +#define RTCSTAT2_USR_BIT5 0x20 // T +#define RTCSTAT2_INTR2 0x40 // 荞݂Q +#define RTCSTAT2_TEST 0x80 // eXg + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_RTC_DEFINE_H diff --git a/trunk/IrisSubp/include/private/IrisSioDefine.h b/trunk/IrisSubp/include/private/IrisSioDefine.h new file mode 100644 index 0000000..b1da6b2 --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisSioDefine.h @@ -0,0 +1,132 @@ +//====================================================================== +// IrisSioDefine.h +// IRIS SIO萔 +// +// Copyright (C) 2004 NINTENDO Co.,Ltd. +//====================================================================== +#ifndef _IRIS_SIO_DEFINE_H +#define _IRIS_SIO_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +// m[}rhnRg[\ +typedef struct { + u16 sck_i_o:1; // NbNh/nI + u16 sck:1; // NbNI + u16 ackRecv:1; // ]ƒtOM + u16 ackSend:1; // ]ƒtOM + u16 dummy_6_4:3; + u16 enable:1; // rhn + u16 dummy_11_8:4; + u16 mode:2; // ʐM[hI + u16 if_enable:1; // 荞ݗv + u16 sck_up:1; // VtgNbN{ + u8 data; // f[^ + u8 dummy_31_24; +} SioNormalCnt; +typedef vl SioNormalCnt vSioNormalCnt; + + +//---------------------------------------------------------------------- +// VAʐM̓rW[H +//---------------------------------------------------------------------- + +#define IsSioBusy() \ + \ + (*(vu16 *)REG_SIOCNT & SIO_ENABLE) + +//EVAʐMrW[ǂԂ܂B + +//---------------------------------------------------------------------- +// VAʐM͑MԂH +//---------------------------------------------------------------------- + +#define IsSioSendEnable() \ + \ + (!(*(vu16 *)REG_SIOCNT & SIO_ACK_RECV)) + +//EVAʐMMԂǂԂ܂B + +//---------------------------------------------------------------------- +// VAʐMX^[g +//---------------------------------------------------------------------- + +#define StartSio() \ + \ + (*(vu16 *)REG_SIOCNT |= SIO_START) + +//EVAʐMJn܂B + + +//---------------------------------------------------------------------- +// VAʐMI҂ +//---------------------------------------------------------------------- + +#define WaitSio() \ +{ \ + while (IsSioBusy()) ; \ +} + +//EVAʐM̏I҂܂B + + +//---------------------------------------------------------------------- +// WX^EAhX +//---------------------------------------------------------------------- + +#define REG_RCNT (REG_BASE + 0x134) // ėpo̓Rg[ + +#define REG_SIOCNT (REG_BASE + 0x128) // VAʐMRg[ +#define REG_SIODATA8 (REG_BASE + 0x12a) // 8bitVAʐMf[^ +#define REG_SIODATA32 (REG_BASE + 0x120) // 32bitVAʐMf[^ + + +//---------------------------------------------------------------------- +// rhnRg[ +//---------------------------------------------------------------------- + +#define SIO_MODE_MASK 0x3000 // ʐM[h +#define SIO_BAUD_RATE_MASK 0x0003 // {[[g +#define SIO_ID_NO_MASK 0x0030 // ʐMhc + +#define SIO_MODE_SHIFT 12 +#define SIO_BAUD_RATE_SHIFT 0 +#define SIO_ID_NO_SHIFT 4 + +#define SIO_8BIT_MODE 0x0000 // m[}WrbgʐM[h +#define SIO_32BIT_MODE 0x1000 // m[}RQrbgʐM[h + +#define SIO_SCK_OUT 0x0000 // ONbNI +#define SIO_SCK_IN 0x0001 // NbNI +#define SIO_IN_SCK_256K 0x0000 // NbN QTUjgI +#define SIO_IN_SCK_2M 0x0002 // QlgI +#define SIO_ACK_RECV 0x0004 // ]v +#define SIO_ACK_SEND 0x0008 // ] +#define SIO_START 0x0080 // ]X^[g +#define SIO_ENABLE 0x0080 // rhn +#define SIO_IF_ENABLE 0x4000 // 荞ݗv +#define SIO_SCK_UP 0x8000 // VtgNbN{ + +// \̃op萔 + +#define ST_SIO_8BIT_MODE 0 // m[}WrbgʐM[h +#define ST_SIO_32BIT_MODE 1 // m[}RQrbgʐM[h + +#define ST_SIO_SCK_OUT 0 // ONbNI +#define ST_SIO_SCK_IN 1 // NbNI +#define ST_SIO_IN_SCK_256K 0 // NbN QTUjgI +#define ST_SIO_IN_SCK_2M 1 // QlgI + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SIO_DEFINE_H diff --git a/trunk/IrisSubp/include/private/IrisSpiDefine.h b/trunk/IrisSubp/include/private/IrisSpiDefine.h new file mode 100644 index 0000000..bff5a3c --- /dev/null +++ b/trunk/IrisSubp/include/private/IrisSpiDefine.h @@ -0,0 +1,77 @@ +//==================================================================== +// IrisSpiDefine.h +// IRIS SPI萔 +// +// Copyright (C) 2004 NINTENDO Co.,Ltd. +//==================================================================== +#ifndef _IRIS_SPI_DEFINE_H +#define _IRIS_SPI_DEFINE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + + + +//---------------------------------------------------------------------- +// SPI̓rW[H +//---------------------------------------------------------------------- + +#define IsSpiBusy() \ + \ + (*(vu32 *)REG_SPICNT & SPI_BUSY) + +//ESPIrW[ǂԂ܂B + +//---------------------------------------------------------------------- +// SPII҂ +//---------------------------------------------------------------------- + +#define WaitSpi() \ +{ \ + while (IsSpiBusy()) ; \ +} + +//ESPȈI҂܂B + + +//---------------------------------------------------------------------- +// tbVETCY +//---------------------------------------------------------------------- + +#define FLH_SIZE 0x20000 // tbV + +#define FLH_PAGE_SIZE 256 // tbVEy[W + +//---------------------------------------------------------------------- +// tbVER}h +//---------------------------------------------------------------------- + +#define FLHOP_STAT 0x05 // Xe[^X +#define FLHOP_READ 0x03 // ʏǂݍ +#define FLHOP_FAST_READ 0x0b // ǂݍ +#define FLHOP_WRITE_ENABLE 0x06 // ݃Cl[u +#define FLHOP_WRITE_DISABLE 0x04 // ݃fBZ[u +#define FLHOP_WRITE_PAGE 0x0A // y[W +#define FLHOP_PROGRAM_PAGE 0x02 // y[WEvO +#define FLHOP_ERASE_PAGE 0xdb // y[W +#define FLHOP_ERASE_SECTOR 0xd8 // ZN^[ +#define FLHOP_POWER_DOWN 0xb9 // p[_E +#define FLHOP_RELEASE_POWER_DOWN 0xab // p[_EA + +//---------------------------------------------------------------------- +// tbVEXe[^X +//---------------------------------------------------------------------- + +#define FLHSTAT_WRITING 0x01 // Cg +#define FLHSTAT_WRITE_ENABLE_LATCH 0x02 // CgECl[ub` + + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _IRIS_SPI_DEFINE_H diff --git a/trunk/NitroAgbMonTS1_040304.bin b/trunk/NitroAgbMonTS1_040304.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a2f61d9b51b3e75ae6d6e00c4bb16f1335f1c6f GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/trunk/NitroMainpMonTS1_040304.bin b/trunk/NitroMainpMonTS1_040304.bin new file mode 100644 index 0000000000000000000000000000000000000000..e89abeddf1d20e2b60344295f06d92b2f3c3f044 GIT binary patch literal 8192 zcmeHJ|8o=95#M)rl1{RaP7sRiC~!9BTN)3tAp{bV9CBh|14WoXXvlz^(2g_HnJDQ@ z$DL-%8Jt9k`63e_k|E;*LJ6czubp_p5S*L|Qw$Bn-$)x{hC7|FwxLy(Nn5^#>z*wV ze#{>r&3xwV+xK?g?q}bLt5Cj2;U5FWo67z!6ynN_ZYvZzC z9yrrdyXNf!Gj7p|UroL5R4vVXu=>;ajUXKId~4R+reE9@`1LdS>AtznnJMG~f06my7zYIaYsxk#>1CrE9A` zE;Cyz>1j1c*VYt-OGiLmu5n-Z(w0n=&vot#k|xSoom2K20MF_R&DlN(w+~x-Pv%9< zl9|l96u>&2Q6*aVi=@M60|tSGIw)SEC|hWEW;Ri}TW$X^O_xxK>mcbOC+Y8!Mq{6^ z(YSz)jr?G%A>JqHGIw%Rw;OeAd8@&WM-(GYv>Gz>YBGE_1`bEwk_WVb zMXg4}KW6)D0#~f_*x*T{0N_d=X*B}oY|VqRbV||(G`}I9Tbepf4QK#i{kCZq^4UC5 zcKLBHeb-)4Bz>}FuSnXIY|M@5^QU+Y*8hs>y=TO->CLWncC{LyO1i~UPgW=2rCXoX zB~a&EUXU)Slr#n*ENx5?*q-9h7w}7}B4MWN)`e)ui#73i3(~w@(f}d2#T2O9Q%r_4 zym#ubrgY@b$~w(d+^Mj~A$GX(N-4cO8VQO-+Ek(=~9SH2OR1FwFr(A3{Og(a&Ya z*<<(X>8Y`P3Q z#Oo?Mt2?V8^U7tmJ=#{o*1+m~C*cKA~iE#*{|{ z?tan>#Z=j!f|q-vX#LT$qf4O(_>Y#bj|Sn$GliR{H|-8W7bznFX6An{0H42^@boO` z0Y2Jpw!JR9l8z&Jbua^_JI*9Rlw-Vig`>*Ll#yn>sHxC4p56sB;Vo(h>8Il>R7b*< zWCD)(8+EaeGs#8;paQlyDPc!f$oDI&$Xr{ZG5E~|N5Z+61jt)suB7t? zM%RceJ|6^CYeXY4z?MlL#h3u08ElBV4A-=52a@ZT*<0Bm_>J4XJG6X=tQ2J8O_z> z$87yD4NCIr%KV8C8BaBnW|&F(sd%kQKlH5XO4j?|sB`#ZA$y$V>G*Qho&Y=7_r3l- zfh3sJn1>iTW{3W`z?RABwNf@(0(%KE4+i@ zdlw6PE15kcdAg7^k5^aRdz!6%qKd78mkOP+uwYKzEEEVG!ePN(u}Yw_r;KGee4Zp> zmh+-LA%HzjC&+v{{{E=0^}F2b@kA?kDx3Re+3U9_?b+NHjOLD+kLFI|kE!&$1*$z6 z#oX;^xyWAS0egPmVm}q9l8_JzA@06w{XK!HVEHF8u7x7?5R_0D0~Jr7pQO@dkf55a z{oi|IiybQQ-^nCvf%T%Azc~*Hn0aEro~>9k8#PHduwsDUw)OprULg3L5D+&~JMleG z&BrMfzj@9}(pLYN=yjxjglIwBd6V;@)%c%jUbzQHpVyh@yuP#>Wy{8Tm+N@|7l<(W zPN0u?)|SlwcEEb)205 z4H)N}Zro1<>=OZ8F`#4!+V1<^(co_5%fU$g|ZGF@R7fkE*xO>MHtn@Iw zZ0F(N#D2Ep=Fs7wub=H?J8leZU{`u#qgknLZxl6vsQ(7_wJaq^d(eN6!Ad{J zUMlH~yu)~ZJN985n`B9Q9|7`KgXVjTQ7)rTrzQd%Gi6C%`wVg%?-~RFYYb26S55PX zO?Ik}oV4n+h9=f^lixA&lr5@X-=Pg@^dyQwRi|rxhpBB>fc~N}z%W5WHA4m_; zsIlRWaZyWibHEtNjMkrP3w+3RmbfTfbK%;C$+nAheM|n>>}vLwe77q`1zaLk_O7)n z){;LqyR$1l#D&<<;nmN)uLo%=s-}gZx!7remd*$3TvO90NH9at!1c$T9E(82CS5__ja* literal 0 HcmV?d00001 diff --git a/trunk/NitroMainpMonTS1_040304.map b/trunk/NitroMainpMonTS1_040304.map new file mode 100644 index 0000000..3fbc892 --- /dev/null +++ b/trunk/NitroMainpMonTS1_040304.map @@ -0,0 +1,356 @@ + +================================================================================ + +Image Symbol Table + + Mapping Symbols + + Sym Value Execution Region + + $a 0xffff0000 ER_RO + $d 0xffff0020 ER_RO + $a 0xffff00c0 ER_RO + $t 0xffff0268 ER_RO + $a 0xffff0274 ER_RO + $t 0xffff02e4 ER_RO + $d 0xffff02ea ER_RO + $f 0xffff02fc ER_RO + $f 0xffff0308 ER_RO + $f 0xffff030c ER_RO + $f 0xffff0310 ER_RO + $f 0xffff0314 ER_RO + $f 0xffff0320 ER_RO + $f 0xffff0328 ER_RO + $f 0xffff032c ER_RO + $f 0xffff0330 ER_RO + $f 0xffff0334 ER_RO + $f 0xffff0338 ER_RO + $f 0xffff033c ER_RO + $f 0xffff0340 ER_RO + $f 0xffff0344 ER_RO + $f 0xffff0348 ER_RO + $f 0xffff034c ER_RO + $f 0xffff0350 ER_RO + $f 0xffff0354 ER_RO + $f 0xffff035c ER_RO + $f 0xffff0378 ER_RO + $f 0xffff0390 ER_RO + $t 0xffff03a0 ER_RO + $b 0xffff03be ER_RO + $b 0xffff03c8 ER_RO + $b 0xffff03cc ER_RO + $b 0xffff03d0 ER_RO + $b 0xffff03fa ER_RO + $d 0xffff0406 ER_RO + $t 0xffff0410 ER_RO + $b 0xffff0438 ER_RO + $b 0xffff0446 ER_RO + $p 0xffff04ca ER_RO + $p 0xffff04f6 ER_RO + $p 0xffff0510 ER_RO + $p 0xffff0536 ER_RO + $p 0xffff059a ER_RO + $p 0xffff05b8 ER_RO + $p 0xffff05d4 ER_RO + $p 0xffff05ec ER_RO + $p 0xffff060e ER_RO + $p 0xffff0624 ER_RO + $p 0xffff0696 ER_RO + $p 0xffff06b4 ER_RO + $p 0xffff06d0 ER_RO + $p 0xffff06f0 ER_RO + $p 0xffff071e ER_RO + $p 0xffff074c ER_RO + $d 0xffff0758 ER_RO + $a 0xffff0778 ER_RO + $d 0xffff07b4 ER_RO + $a 0xffff07c0 ER_RO + $t 0xffff07cc ER_RO + $d 0xffff07d2 ER_RO + $a 0xffff07d4 ER_RO + $t 0xffff08f0 ER_RO + $d 0xffff093e ER_RO + $a 0xffff0940 ER_RO + $t 0xffff0af8 ER_RO + $d 0xffff0b8c ER_RO + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + C:\NitroMon\IrisMainp_040304\IrisMon\crt0Arm.s 0x00000000 Number 0 crt0Arm.o ABSOLUTE + 0x00000000 Data 124 crt0Arm.o(.debug_info) + 0x00000000 Data 16 crt0Arm.o(.debug_abbrev) + 0x00000000 Data 588 crt0Arm.o(.debug_line) + Init 0xffff0000 ARM Code 928 crt0Arm.o(Init) + start_v 0xffff0000 ARM Code 4 crt0Arm.o(Init) + undef_v 0xffff0004 ARM Code 4 crt0Arm.o(Init) + swi_v 0xffff0008 ARM Code 4 crt0Arm.o(Init) + code_abort_v 0xffff000c ARM Code 4 crt0Arm.o(Init) + data_abort_v 0xffff0010 ARM Code 4 crt0Arm.o(Init) + reserve_v 0xffff0014 ARM Code 4 crt0Arm.o(Init) + irq_v 0xffff0018 ARM Code 4 crt0Arm.o(Init) + fiq_v 0xffff001c ARM Code 4 crt0Arm.o(Init) + fiq_handler 0xffff00c0 ARM Code 0 crt0Arm.o(Init) + fiq_m 0xffff00d4 ARM Code 4 crt0Arm.o(Init) + fiq_return 0xffff00fc ARM Code 0 crt0Arm.o(Init) + start_handler 0xffff0110 ARM Code 0 crt0Arm.o(Init) + restart_v 0xffff014c ARM Code 4 crt0Arm.o(Init) + mainmem_change_burst 0xffff015c ARM Code 0 crt0Arm.o(Init) + main_return 0xffff01bc ARM Code 0 crt0Arm.o(Init) + soft_reset 0xffff01e8 ARM Code 0 crt0Arm.o(Init) + terminate_mon 0xffff01fc ARM Code 0 crt0Arm.o(Init) + bankreg_init_stack_clear 0xffff021c ARM Code 0 crt0Arm.o(Init) + stack_clear 0xffff0250 ARM Code 0 crt0Arm.o(Init) + stack_clear_10 0xffff0268 Thumb Code 4 crt0Arm.o(Init) + irq_handler 0xffff0274 ARM Code 0 crt0Arm.o(Init) + irq_return 0xffff0290 ARM Code 4 crt0Arm.o(Init) + swi_handler 0xffff0298 ARM Code 0 crt0Arm.o(Init) + usr_sp 0xffff02ec Data 4 crt0Arm.o(Init) + irq_sp 0xffff02f0 Data 4 crt0Arm.o(Init) + svc_sp 0xffff02f4 Data 4 crt0Arm.o(Init) + fiq_sp 0xffff02f8 Data 4 crt0Arm.o(Init) + sys_table 0xffff02fc Data 0 crt0Arm.o(Init) + C:\NitroMon\IrisMainp_040304\IrisMon\Cp15InitArm.s 0x00000000 Number 0 Cp15InitArm.o ABSOLUTE + 0x00000010 Data 16 Cp15InitArm.o(.debug_abbrev) + 0x0000007c Data 128 Cp15InitArm.o(.debug_info) + Init 0xffff0778 ARM Code 72 Cp15InitArm.o(Init) + 0x0000024c Data 428 Cp15InitArm.o(.debug_line) + C:\NitroMon\IrisMainp_040304\IrisMon\IrisTegOnlySub.c 0x00000000 Number 0 IrisTegOnlySub.o ABSOLUTE + C$debug_macinfo23 0x00000000 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_pubnames22 0x00000000 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_abbrev0 0x00000020 Data 0 IrisTegOnlySub.o(.debug_abbrev) + C$debug_macinfo461 0x00000024 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_info21 0x000000fc Data 0 IrisTegOnlySub.o(.debug_info) + C$debug_line20 0x000003f8 Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_line458 0x0000045c Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_pubnames460 0x00000930 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_info459 0x00002688 Data 0 IrisTegOnlySub.o(.debug_info) + C:\NitroMon\IrisMainp_040304\IrisMon\crt0subArmCommon.s 0x00000000 Number 0 crt0subArmCommon.o ABSOLUTE + IrisCrt0Sub 0xffff07c0 ARM Code 972 crt0subArmCommon.o(IrisCrt0Sub) + 0x00002898 Data 132 crt0subArmCommon.o(.debug_info) + 0x00000504 Data 712 crt0subArmCommon.o(.debug_line) + 0x0000040c Data 16 crt0subArmCommon.o(.debug_abbrev) + MON_ONLY 0xffff07c0 ARM Code 0 crt0subArmCommon.o(IrisCrt0Sub) + NDEBUG2 0xffff07c0 ARM Code 0 crt0subArmCommon.o(IrisCrt0Sub) + WaitIntr_sub 0xffff0800 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + divide_just_l 0xffff0848 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + divide_div_l 0xffff0854 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + C:\NitroMon\IrisMainp_040304\IrisMon\IrisMon.c 0x00000000 Number 0 IrisMon.o ABSOLUTE + .text 0xffff03a0 Thumb Code 0 IrisMon.o(.text) + C$debug_frame493 0x00000000 Data 0 IrisMon.o(.debug_frame) + C$debug_loc492 0x00000000 Data 0 IrisMon.o(.debug_loc) + C$debug_macinfo23 0x00000000 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_pubnames22 0x00000000 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_abbrev0 0x00000020 Data 0 IrisTegOnlySub.o(.debug_abbrev) + C$debug_macinfo461 0x00000024 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_info21 0x000000fc Data 0 IrisTegOnlySub.o(.debug_info) + C$debug_line20 0x000003f8 Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_line458 0x0000045c Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_line488 0x000007cc Data 0 IrisMon.o(.debug_line) + C$debug_pubnames460 0x00000930 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_pubnames484 0x000009c4 Data 0 IrisMon.o(.debug_pubnames) + C$debug_pubnames496 0x000009ec Data 0 IrisMon.o(.debug_pubnames) + C$debug_pubnames502 0x00000a10 Data 0 IrisMon.o(.debug_pubnames) + C$debug_pubnames490 0x00000a34 Data 0 IrisMon.o(.debug_pubnames) + C$debug_info459 0x00002688 Data 0 IrisTegOnlySub.o(.debug_info) + C$debug_info483 0x0000291c Data 0 IrisMon.o(.debug_info) + C$debug_info495 0x000029a4 Data 0 IrisMon.o(.debug_info) + C$debug_info501 0x00002a30 Data 0 IrisMon.o(.debug_info) + C$debug_info489 0x00002acc Data 0 IrisMon.o(.debug_info) + C:\NitroMon\IrisMainp_040304\IrisMon\IrisMonCard.c 0x00000000 Number 0 IrisMonCard.o ABSOLUTE + C$debug_macinfo23 0x00000000 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_pubnames22 0x00000000 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_abbrev0 0x00000020 Data 0 IrisTegOnlySub.o(.debug_abbrev) + C$debug_macinfo461 0x00000024 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_info21 0x000000fc Data 0 IrisTegOnlySub.o(.debug_info) + C$debug_line20 0x000003f8 Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_line458 0x0000045c Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_pubnames460 0x00000930 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_info459 0x00002688 Data 0 IrisTegOnlySub.o(.debug_info) + C:\NitroMon\IrisMainp_040304\IrisMon\IrisMonSub.c 0x00000000 Number 0 IrisMonSub.o ABSOLUTE + .text 0xffff0410 Thumb Code 0 IrisMonSub.o(.text) + .constdata 0xffff0b8c Data 0 IrisMonSub.o(.constdata) + C$debug_macinfo23 0x00000000 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_pubnames22 0x00000000 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_abbrev0 0x00000020 Data 0 IrisTegOnlySub.o(.debug_abbrev) + C$debug_macinfo461 0x00000024 Data 0 IrisTegOnlySub.o(.debug_macinfo) + C$debug_macinfo5 0x00000044 Data 0 IrisMonSub.o(.debug_macinfo) + C$debug_frame493 0x0000006c Data 0 IrisMonSub.o(.debug_frame) + C$debug_loc492 0x00000070 Data 0 IrisMonSub.o(.debug_loc) + C$debug_info21 0x000000fc Data 0 IrisTegOnlySub.o(.debug_info) + C$debug_line20 0x000003f8 Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_line458 0x0000045c Data 0 IrisTegOnlySub.o(.debug_line) + C$debug_line2 0x00000878 Data 0 IrisMonSub.o(.debug_line) + C$debug_line488 0x00000904 Data 0 IrisMonSub.o(.debug_line) + C$debug_pubnames460 0x00000930 Data 0 IrisTegOnlySub.o(.debug_pubnames) + C$debug_pubnames484 0x00000a7c Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_pubnames496 0x00000a9c Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_pubnames502 0x00000abc Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_pubnames508 0x00000adc Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_pubnames514 0x00000afc Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_pubnames4 0x00000b20 Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_pubnames490 0x00000b5c Data 0 IrisMonSub.o(.debug_pubnames) + C$debug_info459 0x00002688 Data 0 IrisTegOnlySub.o(.debug_info) + C$debug_info483 0x00002c24 Data 0 IrisMonSub.o(.debug_info) + C$debug_info495 0x00002c9c Data 0 IrisMonSub.o(.debug_info) + C$debug_info501 0x00002d38 Data 0 IrisMonSub.o(.debug_info) + C$debug_info507 0x00002e40 Data 0 IrisMonSub.o(.debug_info) + C$debug_info513 0x00002efc Data 0 IrisMonSub.o(.debug_info) + C$debug_info3 0x00003110 Data 0 IrisMonSub.o(.debug_info) + C$debug_info489 0x000031d4 Data 0 IrisMonSub.o(.debug_info) + .constdata$1 0xffff0b8c Data 0 IrisMonSub.o(.constdata) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THUMB_ISAv2$M$E$P$PE$A:L22$X:L11$S22$IW$~STKCKD$~SHL$OSPACE$PRES8 0x00000000 Number 0 anon$$obj.o ABSOLUTE + Nin_Char_Diff_Huff 0xffff0020 Data 0 crt0Arm.o(Init) + swi_return 0xffff02c8 ARM Code 4 crt0Arm.o(Init) + SetPauseReg 0xffff02e4 Thumb Code 0 crt0Arm.o(Init) + NotifySubpIntf 0xffff03a0 Thumb Code 8 IrisMon.o(.text) + WaitSubpIntf 0xffff03a8 Thumb Code 14 IrisMon.o(.text) + IrisMonMain 0xffff03b6 Thumb Code 80 IrisMon.o(.text) + InitReg 0xffff0410 Thumb Code 26 IrisMonSub.o(.text) + InitRam 0xffff042a Thumb Code 34 IrisMonSub.o(.text) + GetCRC16 0xffff044c Thumb Code 62 IrisMonSub.o(.text) + IsMmem8MB 0xffff048a Thumb Code 48 IrisMonSub.o(.text) + UnCompHuffman32 0xffff04ba Thumb Code 236 IrisMonSub.o(.text) + UnCompLZ77Short 0xffff05a6 Thumb Code 252 IrisMonSub.o(.text) + UnCompRLShort 0xffff06a2 Thumb Code 182 IrisMonSub.o(.text) + reset_cp15 0xffff0778 ARM Code 0 Cp15InitArm.o(Init) + init_cp15 0xffff0790 ARM Code 0 Cp15InitArm.o(Init) + Halt 0xffff07c0 ARM Code 0 crt0subArmCommon.o(IrisCrt0Sub) + WaitByLoop 0xffff07cc Thumb Code 0 crt0subArmCommon.o(IrisCrt0Sub) + WaitVBlankIntr 0xffff07d4 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + WaitIntr 0xffff07dc ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + DivS32 0xffff0834 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + SqrtU32 0xffff0884 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + CpuSet16_32 0xffff08f0 Thumb Code 4 crt0subArmCommon.o(IrisCrt0Sub) + CpuSetFast32_T 0xffff093a Thumb Code 4 crt0subArmCommon.o(IrisCrt0Sub) + CpuSetFast32 0xffff0940 ARM Code 4 crt0subArmCommon.o(IrisCrt0Sub) + UnPackBits32 0xffff09c0 ARM Code 0 crt0subArmCommon.o(IrisCrt0Sub) + UnCompLZ77Byte 0xffff0a64 ARM Code 0 crt0subArmCommon.o(IrisCrt0Sub) + UnCompRLByte 0xffff0af8 Thumb Code 0 crt0subArmCommon.o(IrisCrt0Sub) + UnDiffByte2Byte 0xffff0b3a Thumb Code 0 crt0subArmCommon.o(IrisCrt0Sub) + UnDiffShort2Short 0xffff0b60 Thumb Code 0 crt0subArmCommon.o(IrisCrt0Sub) + __call_via_r3 0xffff0b86 Thumb Code 4 crt0subArmCommon.o(IrisCrt0Sub) + __call_via_r2 0xffff0b88 Thumb Code 4 crt0subArmCommon.o(IrisCrt0Sub) + __call_via_r1 0xffff0b8a Thumb Code 4 crt0subArmCommon.o(IrisCrt0Sub) + mmemSizeCheckTable 0xffff0b8c Data 8 IrisMonSub.o(.constdata) + crc16_table 0xffff0b94 Data 32 IrisMonSub.o(.constdata) + + +================================================================================ + +Memory Map of the image + + Image Entry point : 0xffff0000 + + Load Region LR_1 (Base: 0xffff0000, Size: 0x00000bb4, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER_RO (Base: 0xffff0000, Size: 0x00000bb4, Max: 0xffffffff, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0xffff0000 0x000003a0 Code RO 1 * Init crt0Arm.o + 0xffff03a0 0x00000070 Code RO 111 .text IrisMon.o + 0xffff0410 0x00000368 Code RO 132 .text IrisMonSub.o + 0xffff0778 0x00000048 Code RO 5 Init Cp15InitArm.o + 0xffff07c0 0x000003cc Code RO 107 IrisCrt0Sub crt0subArmCommon.o + 0xffff0b8c 0x00000028 Data RO 133 .constdata IrisMonSub.o + + + Execution Region ER_RW (Base: 0x00800000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + **** No section assigned to this execution region **** + + + Execution Region ER_ZI (Base: 0x00800000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + **** No section assigned to this execution region **** + + + + Load Region LR$$Debug (Base: 0x00000000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER$$Debug (Base: 0x00000000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00000010 Dbug RW 4 .debug_abbrev crt0Arm.o + 0x00000010 0x00000010 Dbug RW 8 .debug_abbrev Cp15InitArm.o + 0x00000020 0x000003ec Dbug RW 12 .debug_abbrev IrisTegOnlySub.o + 0x0000040c 0x00000010 Dbug RW 110 .debug_abbrev crt0subArmCommon.o + 0x00000000 0x0000006c Dbug RW 128 .debug_frame IrisMon.o + 0x0000006c 0x00000130 Dbug RW 157 .debug_frame IrisMonSub.o + 0x00000000 0x0000007c Dbug RW 2 .debug_info crt0Arm.o + 0x0000007c 0x00000080 Dbug RW 6 .debug_info Cp15InitArm.o + 0x000000fc 0x0000258c Dbug RW 17 .debug_info IrisTegOnlySub.o + 0x00002688 0x00000210 Dbug RW 101 .debug_info IrisTegOnlySub.o + 0x00002898 0x00000084 Dbug RW 108 .debug_info crt0subArmCommon.o + 0x0000291c 0x00000088 Dbug RW 113 .debug_info IrisMon.o + 0x000029a4 0x0000008c Dbug RW 116 .debug_info IrisMon.o + 0x00002a30 0x0000009c Dbug RW 119 .debug_info IrisMon.o + 0x00002acc 0x00000158 Dbug RW 125 .debug_info IrisMon.o + 0x00002c24 0x00000078 Dbug RW 135 .debug_info IrisMonSub.o + 0x00002c9c 0x0000009c Dbug RW 138 .debug_info IrisMonSub.o + 0x00002d38 0x00000108 Dbug RW 141 .debug_info IrisMonSub.o + 0x00002e40 0x000000bc Dbug RW 144 .debug_info IrisMonSub.o + 0x00002efc 0x00000214 Dbug RW 147 .debug_info IrisMonSub.o + 0x00003110 0x000000c4 Dbug RW 150 .debug_info IrisMonSub.o + 0x000031d4 0x00000924 Dbug RW 154 .debug_info IrisMonSub.o + 0x00000000 0x0000024c Dbug RW 3 .debug_line crt0Arm.o + 0x0000024c 0x000001ac Dbug RW 7 .debug_line Cp15InitArm.o + 0x000003f8 0x00000064 Dbug RW 16 .debug_line IrisTegOnlySub.o + 0x0000045c 0x000000a8 Dbug RW 100 .debug_line IrisTegOnlySub.o + 0x00000504 0x000002c8 Dbug RW 109 .debug_line crt0subArmCommon.o + 0x000007cc 0x000000ac Dbug RW 124 .debug_line IrisMon.o + 0x00000878 0x0000008c Dbug RW 149 .debug_line IrisMonSub.o + 0x00000904 0x000002c0 Dbug RW 153 .debug_line IrisMonSub.o + 0x00000000 0x00000070 Dbug RW 127 .debug_loc IrisMon.o + 0x00000070 0x00000ab4 Dbug RW 156 .debug_loc IrisMonSub.o + 0x00000000 0x00000024 Dbug RW 19 .debug_macinfo IrisTegOnlySub.o + 0x00000024 0x00000020 Dbug RW 103 .debug_macinfo IrisTegOnlySub.o + 0x00000044 0x000001dc Dbug RW 152 .debug_macinfo IrisMonSub.o + 0x00000000 0x00000930 Dbug RW 18 .debug_pubnames IrisTegOnlySub.o + 0x00000930 0x00000094 Dbug RW 102 .debug_pubnames IrisTegOnlySub.o + 0x000009c4 0x00000028 Dbug RW 114 .debug_pubnames IrisMon.o + 0x000009ec 0x00000024 Dbug RW 117 .debug_pubnames IrisMon.o + 0x00000a10 0x00000024 Dbug RW 120 .debug_pubnames IrisMon.o + 0x00000a34 0x00000048 Dbug RW 126 .debug_pubnames IrisMon.o + 0x00000a7c 0x00000020 Dbug RW 136 .debug_pubnames IrisMonSub.o + 0x00000a9c 0x00000020 Dbug RW 139 .debug_pubnames IrisMonSub.o + 0x00000abc 0x00000020 Dbug RW 142 .debug_pubnames IrisMonSub.o + 0x00000adc 0x00000020 Dbug RW 145 .debug_pubnames IrisMonSub.o + 0x00000afc 0x00000024 Dbug RW 148 .debug_pubnames IrisMonSub.o + 0x00000b20 0x0000003c Dbug RW 151 .debug_pubnames IrisMonSub.o + 0x00000b5c 0x00000080 Dbug RW 155 .debug_pubnames IrisMonSub.o + + +================================================================================ + +Image component sizes + + + Code RO Data RW Data ZI Data Debug + + 2956 40 0 0 26004 Object Totals + 0 0 0 0 0 Library Totals + +================================================================================ + + + Code RO Data RW Data ZI Data Debug + + 2956 40 0 0 26004 Grand Totals + +================================================================================ + + Total RO Size(Code + RO Data) 2996 ( 2.93kB) + Total RW Size(RW Data + ZI Data) 0 ( 0.00kB) + Total ROM Size(Code + RO Data + RW Data) 2996 ( 2.93kB) + +================================================================================ + diff --git a/trunk/NitroMonCheckSumTS1_040304.txt b/trunk/NitroMonCheckSumTS1_040304.txt new file mode 100644 index 0000000..da8203c --- /dev/null +++ b/trunk/NitroMonCheckSumTS1_040304.txt @@ -0,0 +1,33 @@ +NitroMainpMonTS1_040304.bin: + + Little endian + 8bit Check: 0x0004b603 + 16bit Check: 0x02dde5f7 + 32bit Check: 0xbb212bf7 + Big endian + 8bit Check: 0x0004b603 + 16bit Check: 0x01dcd30c + 32bit Check: 0x1879bba7 + +NitroSubpMonTS1_040304.bin: + + Little endian + 8bit Check: 0x0018eb4a + 16bit Check: 0x0d9abee7 + 32bit Check: 0xbc180972 + Big endian + 8bit Check: 0x0018eb4a + 16bit Check: 0x0b697663 + 32bit Check: 0x152f66f8 + +NitroAgbMonTS1_040304.bin: + + Little endian + 8bit Check: 0x0018f23b + 16bit Check: 0x0da3ccc8 + 32bit Check: 0xbaae1880 + Big endian + 8bit Check: 0x0018f23b + 16bit Check: 0x0b676073 + 32bit Check: 0xe6447ff5 + diff --git a/trunk/NitroSubpMonTS1_040304.bin b/trunk/NitroSubpMonTS1_040304.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ab2399ad8aaede9b9f98f2c48f400150733dbba GIT binary patch literal 16384 zcmeIYcT|&0_b@t7Iz50&fC!;Vm4HYSH6#cLy(pq6grbC^1S=LG6qRD3SSXf&id~}; zk6o~1r5+2Yp-HhtJqXfr=LwwiJMVk%y6fIQzO}wTzFBLs=b4#3d(Yl`_UxGn0f2s* z66jwGvmVUTVWz?y2eS^$7BJ(>%Xci}_WCZpsI{lGg%+{cec;+^?PG5a$1mOc`uz7# zZtFW-iZko&W_`77dA2yR%#l#3yUBUYz@qcNZb#_GjdUOS-uJ@lO+~mJ{^NMl_{-)f zoJ#({=RYjDn{H_AvsGC=|E*265d2g#baa3y`-eoRF@s46{ex+9?=iQ8g?@E22 zsPS1F7T~XE@FTV6d%r*b@{IH1A1)zm^>cZQ_675Y%P|X|R27eW^Bqq*`g+Gf()AX0 z{4VRU)l-Mo-MSr=Pch6pJhIM_sOymErG1?lb!}52c}why{o@#;-mj%QH_ltOJ;rxc z%J$>_D?0QpeORhkpGKM@Nx)A&hs)QZV)wP$MmT=);m4L1h$*&-b4yFR zm~Wd*n3}@#ulR`<7rlJ+%A%t0c9G|;Unkp{HAnPa^c%r@GWUJ|^K6>a$HV*9na;1~1yJf) z^lBgPPTrkv-z)p_6@}|e>^8ov7_@qwthw||e_dd&%GYmw#cA3n^jJBDU5;4Z7Ma*Z=i zF@$IDZF~LJtH*Q>_kXfqc=z0V`%lGIsiqExLVhl7|8=<}+Uu}gR##azH??4flpQkzX<`6J zJ7lMP(D4t9&Gm&Pr|xUw>UQ0J+_U^Zz|7)54VNg-xM^403P+Awu zNhO;;ZFsOfxo4;FU|-lJonOe;orlA-e(1D*?C#HAvY~P7uU*GE4(z+rf^K9TU3ZPB zJVzF3)*ji{^=G>_kys;Q}GvVue{*AJC`j!&uxpfwWp8!-4fVT-HCQK*#2gA`ZS&)eqmpM z=}ux|;4#}puM~(U=gkaWSv&M&%l#jrFTd}2P}wtM4}C|dFeb`~axG`;@QeE;=g(<9 z^9uXf$8HH}Qu*J z#2yX&nnf_&qI`zKWL#}QQeT7*E(&&jQ0nn|$C2xUG1Z-A!xgIvcx3vMyoD!@aPMgk zB&ci-EcsZ%3atKfcAx*f4{BTfv{`n`Woo4MckidC+g8QYH9gb|`R3#kki32UGZhuT zKC@qh<$T@KO$%P0bUwSUYG!qpVe`6^juGt5xM#CDR8MV}V877p zsDxs1UWS36N?Y~(%7>$MmW;PfxW4eE+Y^)xO}6pWcWo`2zHgE5ncX+uR(<><@QU41 zyxTjxgfx{qn%NUzqlv4M|g4ZK~wZsx*!jw-7zkb0-)MRY7Ncz*J|GGXb) zgoswkig}L%-ls^eW?o+Ix5kd>Uu$o4eg7Y^e#gx8?4v$e$MgGanD_a9OKlJS4)ZiS z{WdwtN&j-n{h|cw;a{`M{_s`3^NeEdhGoxQzNp^vq4|Yn+;wrg!^^ie-`e6HlRCd> zdE6C!;N6@x`(;{;pVs+ZEi=o^H2h{-a!AY0KlIpk-YrruDYG%qahkr;uO-LIo-Dnf z(mX4l7X3Y2uY$uPl6+{_-1wu}fJjvS6rxZxzZ zdZ>tdQYAJ?)p0-tIdXSn^Z4iQYw6CC)Pcy7E-SM|xR6DyHVL1*LkU-61o0L+eqm~_ z?<>v>(tZ;)Kxg0Hxy9e9yz<_Kx~509QEuC>MH(zlD)q0u{$h)Gj&FEgzWd?`%?SRg zFmul~r;g9KMJqHcdbL>XyWd${?$|r1uzK0YPkBSDaybjx12*UG^zZe4GU~h|Ga?W9 zvHr)$(a|4o zrhG^1vPNv;&U;G--LfrK)$i4qVO9O*pzmkT%mXd4*K`lnEFz|L@9sF+Gf$&S)x~1L zBKykU)=PEI1Z~YCM=WamzLaJ8@Wip)sr!1Xy$=no?>xdy3H$S-iu*?c!Yxn3;A7z2 zE|%st=fTsXP8YU(8SS!M7*OIfx=k?n!Bt?`zW42W%==@QlsD68s2wMR(Hoh94b+5ur5StBW7KeD~n>?G1B(MWppu zX~{uJwUrfc;q7x9;)=VB#(Zu`DQMJ1a~xBV7Hzwj#a?A}uz2XI)z5^m9ac*-FRc_aWa_3(1TXCrSqE zZ>v6bbofkuvi0DZY(2cz1`O3d=yXKwLt)6Z*SKtV-xEt-zvq5*QpNAVw$E9Wft!^? zS9%eLH<&eIdLuXW%K05>fkesK!TpK}zwa-b-sSFjHGH@;C3_Lmn;kxw>N$J+bW0W< z`#JBb9>H~kGFyjr;*Y#9dYTVeU&-HEKaaR(UE1gV?e)SyKWlaO=_3wH^fueq-g~kb zME1uXpH{x8eo=e+8;3^5hVyO63(@ARmZ!9m&k40_itK-8E_RH{vvW``V4Xj|tUP76 z<_gRhFS&MHWGghz6y3YHDelBTB6*vgdBJ-2{mWi2Uc2v^Vl&2A{OvSp{Tq*lKUdo=(!WO;&($2}{-=}Iun$hHxmAu7A5WTQ0M0ED0;EAomxAC91FBqp)jR()ayUS}9ufect<+&~W z@2{{#6(;+@(fR8=rl`Arezosrk<|axwBV=%Tnja~@5#ouzwS*ZJ?9o*-WEm#^Ixl( zWtBC=9cg$w^Iic`c`d=uV&$Q?=d1cHns_$K$_E>FdVT3Qym-YSg&jw$@7pb}Yqqnz zC`s0f@%>nk+^NU-lKL}S^~>Xw4d-i;XRNt_@5jW9{A4GHnZ@(J9MKGJ92~d!Jl)fz z)wOW@!`)K#F{5=3gU1FAZ%zviaBuc}()7t`)yFr{&Y;c{_upah$=k49=1~%UlH2{4mo7f*OsgWE z+|iSsUECVvo%lKJU9&Np9CrlAUH6eq`PpT4&3|UV<`2ya<1F(}{CpwP|2fYTan{U`5Juz*^&aL4wb9p7Yndn)$S<}RD9`_|gUYTBi{ z-$Oc5Y7?RlJP6rSXP0hu`a;#ov$R6PocCSa{NLV86P?cVgI3zPE@}8?hi7r2cWdqP zZ3?!1+Uy)~ykbVtgOwthe`wmGESBYhj)PsVH43bzWra-JguQ&uI+CKJsqfg)esJv; zLCctR;EvHPr(fw?ZQgz1uU$8u?^EBpM(Jx($F&RZ9kbr=+!ck7{bT>bT_IOgUPWF1 z)5GD`?#CbdEfUF7WC>xznXVoe=`4@Hywvidd0Csn7A?P&82+LlYIkr+oyw|i>&4F> zWGuek-g|Y=nr?s1w*EuOQ^}Xqb6OOd)5BJzTg`FuQRfBh8aXUla%Zm~*Xw}}MI$%3 z!HaC(yOa9)O25Y=t$dTIwkInSSQig-IO>=1@g#Cub4w1kUVKEdvMi2sH;-hhAS4qhtA-B0H}$5UeDg6?kH-_hfrz%oRf|mf)G<>+^H2GhV$Z^2+^yBY!QY zSjKOR%j5m^`&y;J)YTvL=3t}fV^-XJ=jYUM> zfy|-!Kkdo=pX!#mwsVF&KE1#7>r~PA(^W!>$fZe5|7ViSb^*)1DWGgHM`3^Miw)0y zSXo^^m$`8dCA+4Pc+jCB%TMXJKWiTDOp5=XBMOLd!P_KPmq?ZLIImBZbWC-tB>U9o zSF`Uprfv&;amuet@aSX{J(m5+{DRH8`05k$)#evn`1$1Q1@AX|YgkV*RBYH4q8TlX z-@NhLj=uLTrn^dScW6i&+x=Gg#`v#J+_YkK!0K3k z504eAqt|TmkBVRD=g#pD0ze3a?Ra=sA%GA&2@wd&MsJ<4$I20{2G>ZV7VDW3WW6#PJ{3ngi|0yXu@_JIiuqy{3gS194(`R z1i#P1Z{>fr3*k2jejkL803itoJNLpe%3A@1C~rF<{F^tb%mx89!cG8r05q7%Fhd;3 zZzswx)=P)2!_oC-G1!bi2H%ro2LNI~@lxmWJsGe+2975{@gS^$knvF1i5NZWhGVp& z866`~AApD%0JOmD2q!-Rzi&bK8-9z;04TNrpokX+r(Mhx?^x_mM-Fu6k4&ipbawxKe=-Mfs5sYht!n|x0I+cPr& zZK!8l+{S+6iz#ShBk?=p5t^!!1GWa6tqWR!F{UJY1tP8ejgk5e$p#x`z-(FrFAtb$ zHuS<@as#kZeTUElSX-S8rb1&njX`+IaiZifv5k*72#sM&5+G8wVH5+>mHs*8COMgh zm}xg4(!0Nb+0^>mYz7_V05e>@A=Q~mrvmBbQP?(gb+R6*2hyKoKstNGSOTPWBVx9g zL*k0rY%Y-Q{QWmh8N@j`1f=g_&!fLFCFeOHUXfS8#5G__81Wol4ijI0%!^@1jz7gA zvB*(E4&)3{#mlK4XCu$WHD8W(eed-tY07 zq?;5^k$5MkhDNh3@XhyO^MQ2VFp!=bmKjFanNy44ShIiUdeJgaYDF9pgB%5<7l&zF zksOyVPW1)GRsw`38>GojDw{$1{56C~e-B|`jg}0`jL3^x#}UBs*?dGg1ZOoq&i8Yp zF>r!;bgltSfa7ylu~Rt~N+j-T_Esp3t@7VQR3-*%ApL=%73lmjd2sZN>^Rs%Hh5fy zNHw7b6=drKe+ibc1@vq#F0!5F7Kx<+jF|unslOiQ%Xu6UM{yRh6;eXIa8$B=9TC@p z&}vvi@-|@99*!}^%^;W%%|TPP1amZOSr|Ct4ghY(%tgyGa)2Ngn5}6b$D7$HK0yo{ zu^Kwijtm8qTuPZvx=|Q`<@=O!hN;{b=$j8A=FKW*n0BKMu)w|p(y|eRwnAbm2$guV z1qlGVumwnaM}PH@6P)a3`4XOZ`1$GrBQcZExZoe`<=R2I=_acP)_%U)Xv>`cXaSb^ z`iZd3nFduEjnyI~3HhRGcWz{<~C~mphhC!G@mRp8fE~;m=#K`4)^2InR;K>HNWcTH( zgw4O}3utDu5mQ^8T%e$x%gY2o+DfXLd?n>zzLH`wzk!d?F=pRdC#;Vzo<^NcRi;v? zvcWepbKWI3)*PiP@>;^Gcgdw(@KWUZa4&e}adUZbJh!L`EVNXqjitJoSmQ(E5e%-y zJZ>)&G#YSm_P}hQ^-~W*<>UYw2hUL>nj;N38s8Ivb3$kg4C0&v{Wclp8`?RIOM{dT z%7_MBo&q6g~@D<$Y+b(M5jnOsr=LMKJ@J%_}( zzBq{gO_s@4eMYCN){vf&T@9%uJ5mkVNqst*4y5{{sr~}T+dM$K$~EIb&-fOlct_?G z$1otVoFbj#IM^HrQ`jkyDP9E$8#r|=5~CpcHaC%tbE?Tbl?%)<^))tQrUm#2W$W~j4jp(aIQVA#mQQ4P6Ey&~AgF2V8T zn4tJ_Rj#iEql|(#3M1;UqPV~uTaPv1VAWZXTmbpQwIZl2pcJ@r*)+;fe)D7^xg`Em zZa{WIE;ka(eL`ZG(H1uvz=OC6xv7ag*uW4esL=uifQBhJLIVVB0Wbix1P|FDBEyML z4@<7b5e{;3ifvr-&0inY#4c=^9LI{2Y!~BI|e17+?w&3>1jiLfPQC$#JJoYHdPeKoQj#g>x5bvMyc$qo6n;C4I35JJG|~3B*r_ z{u`0=sYVk(KGAvi$Y=jn{@XpSFP8yPKJL?aT|7E+T|AUIMnPp_v>3R?UEx|Efcr*gAKw1%0PX-chg+?OVL30jqj9=iej>3lwTg4XOMyprfwtX>H^?O*62w4(phS)2 zR&qG;Rlep7ZB~W1Hk>QgzyQv-0@g$Az}3m1NVp|z99=f3GF~sAg`<4-&f^mnIwao9 zDPXHm$xhiGBr1=tObxeRIa`&=b=dBKND8Pl0ckZb>IerZIHSSvdWL`~P`k?f@fKjs z1b~+8L4rQKH$2iqfk&c5dXQ~pgC}IP91NX7WI(f+SZ%3nU?8ApaMQfY5;8D(tg>jg zNKBkM3yDMwGT_Q1i>c6~O`(^;z4-bVlw_Q2FnCNh*eRRPkVwq)j`h)vC%dlpwPaL4 zSy{58Be6zCk=XkQ-XvF}C?lwqHW~IA$+d%L9KXyPk!Flc%ugg<;vFi-{ZG8`fADJl z!SjQ7D<<)V#C|>@{#6NxiG$iN?Jrns9n+PcwTx9_wAsGKnk;Yb?6U&$9PB+mAJQBu z)Yc&xwEppl`HI9G?>Rp6ymV8X*ko6A>N49_qHZ%VdLB-&)@nqKhAl^<0t{)I@oX2w zP*H$J1=bBD3C2iCz~bR~XPBl9#Ry!(RHE>O%>lxjb(e;b2V|3lVgNKtd@Su_c z_i;;IAm6{yJ>3Ep&0#i%8HV%#NC1s5=6kR90fuigbf`2cnJ%+K>@?%zd}BEb)5|Q) zNX@wYm{}0UdIv}5Cb0+#Y6`?s=Ja~yHq=*_GRgH=LaAH=u46ndU%r+QqjK0nsK?5C z`~{^`H2NJzBYQ?=gPUZZdjk9jMqG#Q;UuFU;aF-eC5qS03#3@Uy-zmiHY(&XbcI~o zT!80j+h%xifC|#!#Rd{DHi`S9hr=d|ncg7fEw6^C-dw^H=#+3NJOPEm4drD}mT*g; z#z^ldJZikNH+dE!r4LV7x9h(&GSFkk7Kj0~|0Wob)!=~i_PAhzbEq@eLPMlR!>D(k zsC5z>`YoDSJbAoj5%Q|WYV7~lW?JwZn#R`ONwkqt_rl|PV8;cyet z69m3Nn24SqkOqXt%bZwmP+);3a#c*d$;j0!-a z*c#*_42pn9zbT;bJqN`|8J9qDz5@0g?ciap>$+}FJ*kjJSt*Ow))v>p6JHl zB_d^f2APW~LAVoVmr*euY8o1$5inI-ri(%7b65pT&}WtbGQM)M^lO~HxrSJyCS;hg@C0jB#GYjJsdX+NaRenhm|aa#ll?j-ec6zh z?GL45Y({vfwvI+;ImyRs8sG3w`T6)NfR6H|^>6Qor_S+NOQXqq-X7mLS-LikO6k>P zWJD52!gx+L*bDbV9*kEiW#9}Y1(8QMfcC9N1S8G`6s&}ng4oLjZ_3Uxe>a(OqG%-f zsKt|BFyFgC@UMBsk639Z|Vm;!=84VWp^Q#R9Clr>z~=RBl| zIVl@_F7H9%qj<+49+2ZLhcm@hk`(BW8a`%{I2c2UEzbjyMhsyL&8d)v zbm>sKTw~C7C(kda?R$eIlsXKF1-&em!~(dR9H6Yo(;$pClLTx5i3eaQCk2f+aa4qA z08f~*!EPCpu@$BP3w31z)=GN_V2|D=f=DW# zfk?d9hYNQh#fBnZ#E@j5JR9{1Gl$Hnd)PoaEQ`!#Q@I%!DoHz#$Wa4ZA~Pm93%mqS!>N+t{RevXm{_AU4UGK6J=l|Oz#;Iw zk|~8uVpEKFtnW`9cw%nCz@B|QvtTX0F`APP&!rsZ5(+~nk`pQKi*MxqtJZ*^pbGDW zVAM~ezJNBTOr1&vhQI)|M+9n_2Jc+X$WX4#CheAH2xx(vzMdhmzptkseXbSNjylDT zZf{O?vUP{D;>jxVa7H>*e`30tF!wqmm%vdAV0Gl?GlG~);d!YJznH@Gwu#b#H#$IC zGYrfK?=aMPZ1n5I5IqA(%(kH;(DI((7pv(|uQLKzQF&_kbhR7u5$bSAvpolqOpIjX zoisU8`7nkG?`+=DbJ3A9J3}s`{gZnY05#}(fNSA?K{{6Q zEgeXmca4|Jfp)sLNW`;&+-6dV0&Sdn88IN>)^c$-;)Gw9~AIBy1cqL zKze-qZ_hvyfAB)>bD7}u(xq7| z^Y=4BJz|T{aq#2}XrWmM4Qmb>VY~t{?r_LrQq*l2DUovp(7%y0$hlLffH2aG&=~L} z<2XvoWe`W3$#Usk@vipL&B#axJ()Giqzn=q*QS{SZyU%gQbq+E-W%d_l~E5XmK|Z2 zaX?ND^hN0I4a{`wQBQnIMu)#uGFWCg!xB2as=VbOY(Z--z#4pg9tY4!Q8`hFVP)oo z4GoD2)G1UocoShu&GX8ER{wp>iAUo)@qko1#+`%~R0FDzi{4s(9ox!T=TEmKS*NoJ z4H-!_NmpYw#UyduZSfL{Ew;`nYEx7qoC(_Z{us#`d4tfLwxRfF&C9U~s(i5u6-S*0 zYo3fvtjx+WJ7}Hg8htRvmrHb9yp+9?gQ0G1L!A#G#lQMR*kVI<80gdiP}wL!CnSDOSKX)pfEX*t+mOk&cC>8~VvjG$X8vd;mM9!V=!iXGFR>t00x$pvcT)t^z}OCr^B4db zg=<(Mn=ik+L*qSkMIVFl92x@(A*_U%4nNsw9gOu*pHKqJviGtcngOm*u~Z?B2&H#? zlvs+hB^DY;3{zrAwQ8EwB0`aBB?Yky0t+em3~hpX3#JTlc*QVG0p-rrGKL}xDb=Fx zW)cqK8c3zMxq@0!A&j`J3GfCISBf~}3g5H<>t}6>r5qkG$JL`$){H`#v|>w?CU-tm zlB!fFODY;KDe-Kfl%qxw4NM`tB{4(ZVhUDBu#Q}bVrdGMNJV8AI7%oW(Xa(U5<&?e zs5k#li~HzF22zS+AGNUYpHlvntilNL} z#K25anwWKO3$!b9g?EG!1|Sq*OAse)!AW^t`9HEqf%E)4g31E(FIi-X)To3~!lW$F zouq99(SVYW%K|BIlVBZOC4^Ewl^~bJ(-AiUM->pXo7q%M0gSmz7&@RpTjPkikaak;-NOoi%ysc2+c0I;kRzNx7L z#;smeX;M1~xYdi3hQs=B^i2(mzK?->ZSWn=wG-5+AvHBSvC2{##I@lFzE37o`~YA( zq{HwKc9NL)(Ko?Q$B-l4IDqRGLI@xYGJI20h4sQm!p>*y)Na8GpN^ZDwsrslI>%)) z9b?D~$_FefLSE2!$$$EyZ++;SoNA4*U4N1m0^4P3Q~J=pO_OzJ>rq<5PIL~9lXZLl zRTnW?w-wf*ydq$NFFqIHRJNh0j79AL zo<&74x54aV4fQpd6yUoe1!gkLXW^S-HOz6aEP@$LtDsZsLLD2-L{k7fVdmQcK!b0b zmheKO9bRNygJnlcdH4VL8G&_LRsh(-oD0WA(^UxX&jjEPP51$YkLo&m{>}~pDDK6O z5ec9PI|YjB9nit*;Aoj044~ctWiKxyu#5v)-N(pBx-sMo2>^xNsGbq0u{P8;5h!m2 zeVavP0`*J;Kvy7vb)En7){238{0()E+8(N7ls@V1&TbNo+KmC~kiH?AL{pxMjzz-k z>_+=w3^g!&JygAQa#Xy58MZ!Zfx=tF4g=#X{5!-&N1#YWT*g{H_3%A|D0uG@cyCC0 zOsXwp4z&(?pmzc|JiwvvI0Ae14nU4%GHPZ)-noVdP1G&~LG76|Vd1Du=7IqM?O6Iz z2?j7|2(W9fqzTm_uR8F(8QQ0?eP<2SBg8|;K=~pAI8SJ!=$sLVD+I!f46-m|L?+8q zhW!zSupND~MrgwSPjs+QrWIsSI}QZ4e}(+u;22~uAt$=H855%jq((z}@C4JOs@$Za z9juCLB0WCEocfkjJJNHCsV<-Qa8C>=SQX!d%{k5_z4Z>p%pUGJ&cwcDg`wr&J#={t zgB(5PL4i6$*C1SbisSd6LH{6-NC@Ok34tpAAHWvaL+WYWmw8;+e)_(s{ijU!30|iu zp6<$!Sey{H=T&4#Dy>B5I(GrIf^H05*p7j7#st93g_#et0OkT=yCR&^D7NA%l=F2} zSjK^gGPIHYi8j$yv>nQBvR!l)?SpJvEsEe17A4A9whTGUp z60Yn(eF08X)O}_T{2u~@`66Na8JK}+S2vc{*e%xue{siD0IthK!p^XzP)7yzU4Q{? z4J_;&l*vxxMGBHRaIOG^VxiqD0@0yvrJ9`*YUl2D3_VLi1HqlphOgr!8C@tnbj+zC z!gc~9Tk-||mjVag2cOl%`E`-MHP=WFR0rlNjuCQ}~-F6AurWQcxz~6_w!?JR~_I9LZ zTL+fLlqd%T_8b0*l4}O zr6BYuLXfJFBB>FvyQ70mQGzdmh;5MG@3yZ!SXhIHJyiH;%}85!kMt&T6L^w5$(|HX znx`4GqZH2?5B{L6AB8!SFbUE`zlX;s;D*WiHIs1VButrvD<)y;Bn#AcO$aF17j2Wa;^~o zkD!6sLil$&6|yvLU)Ayb(AzyjUV|y{PSX|c|6Pa>B!U#A8U!E*ksRO-z#OmvTmoNU zV+?WxJ`rhQf-t)=PcV3_8#Wbt4Lg9f#jVDj#(l&Y;v?|o_}BO;gh0YB!V?0K$RY}e zw}`_;N76ddMbbBtl|r1t356~N1H}l%gNknzDM}$q#YzoIYRbOK`O0<5M3n_9*(!Hc zfa-kJRMnfR!>Z0|DQZ{L2Gs1yYsr_$-^q0KB=z&^U)8NO5;e|heA2MgOwc^7*{^9a zC4S1ODScDSr^Zb^J+*(T#kBZoXQq9cW~G&=bx!Mx)=WwgMMRNOY_->DU)CPbcF@_V zb5&F?rmK_b)#lcA5e+Y+0*l;Kbx+q7pPaP*P^GTzf}LA{s(;nS`4j<)fF$|6?6ON+Rsa!_h_E_{H61c&Hp;ziIK^8#+c?7>2}6#z>UGoW418$S@A3}3%Gl` z?{jZ=w_31q!QBNa9!orqc}P9xc<%6Q^3-F;v#+o*96wGO=Obs9SGw0zFN$}J_eJk< zZ!ez%K3zVxzG=QseJOq`{Vw|fe?R|n|2}_*fb4+A09xScz?*@JL7_oaL4O6Yf(wHs z!7~@8E_}97XHndutBZ&sAtA>@{t9tlT)enrv0Z3pXhW#MlH?_|OUO&POGQhOu)wg2 zu#Ej`t_xa!a=mQ*q77#^U^XtG~%1&2gJ+HdD4FZF#gsf9uAr zFSpJ}O;3H5YLk|eCP{NjFHG-GX9~*UKW%(7sxo95OENEIDrK$6x}8PIUX%Sa+hkk% zwl~{mZQs4UcRO>(p&f%ef^yF05Obq)Z{>}=t z-hF4c?w*Z%n)lEPb{6y%cobF^$_keiT`QVaytcTZc;?=nd;9i!?mM;*v!A>F_I~Pt z%?Dl|a46YV^0OqUR8*=~wz}+jnN@jyd4D9}Uq`l>&xoKBRT7(EewvgV}Wsq9ld zr#Pq2o>o1Re5Uz~EHCTuQ$5=OvfR zM=oQldDYLW?ZgMfqvEJ5kFHq#QS`^)AIq=ayJ~)I&$WSTVb^P~o88!bW8g;E&AT_v zZx!4cycK@?!ELKMd+&_giLQB4V^>>Ni@6(rxACsay~=w^_t)NUyYK$s+=FQk(;xOe z419Fsk@4eQj|U%f>z>rvKRNt_^mNVBwx^!YEWVU>53H$TWpZ2dRUa7v`^1APJ$eVj_Y~LP!tK7P| zwYN2-?S7lxJK;OE_o?qczYqIR_rXbWLNcv=d;36pOhm^cSr9~Z(QHoKJWgU{WCuu`K10i>+`_pm0#X`@&0=2tIfB{Z&Rc@q{Grx z-zDFJe?0u*{PWyT+FyJBA`WaB_%;yz>(wux!J0w)p;JS8zl(kohqn%YA6_}qHWE1c zXw-G=(wN!!;qfW5JQ+a#*Cx#WpM?E?OSu2Xg#YhE_|HWAS0epSQurq+P9~+vq&%5a zN?c?j`9}pN66ufXz$l}l?OT(6jM{pyfqGMLX^5WtX zR;^A-UbA-nhK-vxZ%Iu{hjbxfBa|>o7ZU!z(M1VEy7nktM<-`zmpOAF-FfpFkT44p z_V7drL%I`$|Dn4KC5+Nt84Kwqu1ex3uU)r(W6Gv2Thr413wM&~|HO@qLUDO<5O*~{ zdCj`@8&KR-6c?SahkU}`e^2OlREed*NE5R*1K&;*qEJ?yJ_p@Wn0X*c5cm0ot}0uO(8up Wy(;~6`T(T=f71Vv!2doH_`d+hbL_JK literal 0 HcmV?d00001 diff --git a/trunk/NitroSubpMonTS1_040304.map b/trunk/NitroSubpMonTS1_040304.map new file mode 100644 index 0000000..1e63424 --- /dev/null +++ b/trunk/NitroSubpMonTS1_040304.map @@ -0,0 +1,1218 @@ + +================================================================================ + +Image Symbol Table + + Mapping Symbols + + Sym Value Execution Region + + $a 0x00000000 ER_RO + $d 0x00000024 ER_RO + $a 0x000010a8 ER_RO + $t 0x00001188 ER_RO + $d 0x00001198 ER_RO + $t 0x0000119c ER_RO + $a 0x000011a4 ER_RO + $d 0x000011cc ER_RO + $f 0x000011cc ER_RO + $f 0x000011d0 ER_RO + $f 0x000011d4 ER_RO + $f 0x000011d8 ER_RO + $f 0x000011dc ER_RO + $f 0x000011e0 ER_RO + $f 0x000011e4 ER_RO + $f 0x000011e8 ER_RO + $f 0x000011ec ER_RO + $f 0x000011f0 ER_RO + $f 0x000011f4 ER_RO + $f 0x000011f8 ER_RO + $f 0x000011fc ER_RO + $t 0x00001204 ER_RO + $b 0x0000126a ER_RO + $b 0x0000126e ER_RO + $b 0x00001272 ER_RO + $b 0x000012a8 ER_RO + $b 0x000012b2 ER_RO + $b 0x000012be ER_RO + $b 0x000012d6 ER_RO + $b 0x000012da ER_RO + $b 0x000012e8 ER_RO + $b 0x000012ec ER_RO + $b 0x000012f2 ER_RO + $b 0x00001300 ER_RO + $b 0x0000130a ER_RO + $b 0x0000130e ER_RO + $b 0x00001312 ER_RO + $b 0x00001316 ER_RO + $b 0x0000134c ER_RO + $b 0x00001352 ER_RO + $b 0x00001366 ER_RO + $b 0x00001370 ER_RO + $b 0x00001388 ER_RO + $b 0x0000138c ER_RO + $b 0x00001398 ER_RO + $b 0x000013aa ER_RO + $b 0x000013c0 ER_RO + $b 0x000013c8 ER_RO + $b 0x000013cc ER_RO + $b 0x000013d2 ER_RO + $b 0x000013e4 ER_RO + $b 0x000013e8 ER_RO + $b 0x00001418 ER_RO + $b 0x0000142c ER_RO + $b 0x00001430 ER_RO + $b 0x00001434 ER_RO + $b 0x00001450 ER_RO + $d 0x0000148e ER_RO + $t 0x00001498 ER_RO + $b 0x000014d2 ER_RO + $b 0x000014e6 ER_RO + $b 0x0000152e ER_RO + $b 0x00001542 ER_RO + $b 0x0000154e ER_RO + $b 0x00001586 ER_RO + $b 0x0000159a ER_RO + $b 0x000015a0 ER_RO + $d 0x000015ae ER_RO + $f 0x000015cc ER_RO + $f 0x000015d4 ER_RO + $f 0x000015e4 ER_RO + $f 0x00001604 ER_RO + $t 0x0000161c ER_RO + $b 0x0000169e ER_RO + $b 0x000016e2 ER_RO + $b 0x0000175c ER_RO + $b 0x0000179c ER_RO + $b 0x000017b8 ER_RO + $b 0x000017ce ER_RO + $b 0x00001878 ER_RO + $b 0x0000187e ER_RO + $b 0x00001894 ER_RO + $b 0x000018d2 ER_RO + $b 0x00001900 ER_RO + $b 0x00001906 ER_RO + $b 0x0000192a ER_RO + $b 0x00001976 ER_RO + $b 0x0000197c ER_RO + $b 0x00001982 ER_RO + $d 0x000019a8 ER_RO + $t 0x000019e0 ER_RO + $b 0x00001a16 ER_RO + $b 0x00001a1c ER_RO + $b 0x00001a22 ER_RO + $b 0x00001a54 ER_RO + $b 0x00001a5c ER_RO + $b 0x00001a76 ER_RO + $b 0x00001a7e ER_RO + $b 0x00001a98 ER_RO + $b 0x00001aa0 ER_RO + $b 0x00001ac2 ER_RO + $b 0x00001b12 ER_RO + $b 0x00001b1a ER_RO + $b 0x00001b20 ER_RO + $b 0x00001b7a ER_RO + $b 0x00001bb8 ER_RO + $b 0x00001bc0 ER_RO + $b 0x00001bc4 ER_RO + $b 0x00001bf2 ER_RO + $b 0x00001c00 ER_RO + $b 0x00001c2a ER_RO + $b 0x00001c38 ER_RO + $b 0x00001c70 ER_RO + $b 0x00001c74 ER_RO + $d 0x00001ca4 ER_RO + $t 0x00001caa ER_RO + $b 0x00001cc8 ER_RO + $b 0x00001ce8 ER_RO + $b 0x00001d0a ER_RO + $b 0x00001d14 ER_RO + $d 0x00001d6c ER_RO + $f 0x00001d98 ER_RO + $f 0x00001d9c ER_RO + $f 0x00001da4 ER_RO + $t 0x00001dc4 ER_RO + $b 0x00001e0c ER_RO + $b 0x00001e28 ER_RO + $b 0x00001e2e ER_RO + $b 0x00001e32 ER_RO + $b 0x00001e52 ER_RO + $b 0x00001ea2 ER_RO + $b 0x00001ec0 ER_RO + $b 0x00001ec8 ER_RO + $b 0x00001eda ER_RO + $b 0x00001ede ER_RO + $b 0x00001ef4 ER_RO + $b 0x00001f30 ER_RO + $b 0x00001f46 ER_RO + $b 0x00001f56 ER_RO + $b 0x00001f5a ER_RO + $d 0x00001f7a ER_RO + $f 0x00001f94 ER_RO + $f 0x00001f98 ER_RO + $f 0x00001fa8 ER_RO + $t 0x00001fb4 ER_RO + $b 0x00002012 ER_RO + $b 0x00002072 ER_RO + $b 0x00002096 ER_RO + $b 0x000020d4 ER_RO + $b 0x0000210e ER_RO + $b 0x00002118 ER_RO + $b 0x00002140 ER_RO + $b 0x0000215e ER_RO + $b 0x0000216a ER_RO + $b 0x00002188 ER_RO + $b 0x00002192 ER_RO + $b 0x00002198 ER_RO + $b 0x000021a8 ER_RO + $b 0x000021b0 ER_RO + $b 0x000021ce ER_RO + $b 0x000021de ER_RO + $b 0x000021ee ER_RO + $b 0x000021f8 ER_RO + $b 0x00002202 ER_RO + $b 0x0000221c ER_RO + $b 0x00002224 ER_RO + $b 0x00002230 ER_RO + $b 0x0000223a ER_RO + $b 0x0000223e ER_RO + $b 0x0000225a ER_RO + $b 0x00002264 ER_RO + $d 0x0000226e ER_RO + $t 0x0000227c ER_RO + $b 0x000022ae ER_RO + $b 0x000022ba ER_RO + $b 0x000022ca ER_RO + $b 0x00002310 ER_RO + $b 0x00002344 ER_RO + $b 0x0000234c ER_RO + $b 0x00002398 ER_RO + $b 0x000023a8 ER_RO + $b 0x000023ba ER_RO + $b 0x00002440 ER_RO + $b 0x0000244a ER_RO + $b 0x00002450 ER_RO + $b 0x00002478 ER_RO + $b 0x000024a6 ER_RO + $b 0x000024b4 ER_RO + $b 0x000024f0 ER_RO + $b 0x000024fe ER_RO + $b 0x00002550 ER_RO + $b 0x0000256e ER_RO + $b 0x00002574 ER_RO + $d 0x0000257e ER_RO + $t 0x000025b4 ER_RO + $b 0x000025ce ER_RO + $b 0x000025e6 ER_RO + $b 0x000025fc ER_RO + $b 0x00002696 ER_RO + $b 0x000026d2 ER_RO + $b 0x0000270a ER_RO + $b 0x00002718 ER_RO + $b 0x00002722 ER_RO + $b 0x00002728 ER_RO + $b 0x00002732 ER_RO + $b 0x0000273c ER_RO + $b 0x00002744 ER_RO + $b 0x0000276e ER_RO + $b 0x00002778 ER_RO + $b 0x00002780 ER_RO + $b 0x0000278c ER_RO + $b 0x000027b8 ER_RO + $b 0x000027ca ER_RO + $b 0x000027dc ER_RO + $b 0x000027e4 ER_RO + $b 0x000027ee ER_RO + $b 0x00002830 ER_RO + $b 0x00002838 ER_RO + $b 0x0000283c ER_RO + $b 0x0000284e ER_RO + $b 0x00002874 ER_RO + $b 0x00002896 ER_RO + $b 0x000028aa ER_RO + $b 0x000028c2 ER_RO + $b 0x000028ca ER_RO + $b 0x000028d6 ER_RO + $b 0x000028f0 ER_RO + $b 0x0000291e ER_RO + $b 0x0000293a ER_RO + $d 0x00002958 ER_RO + $t 0x000029a8 ER_RO + $b 0x000029b2 ER_RO + $b 0x00002a18 ER_RO + $b 0x00002a3c ER_RO + $b 0x00002a5a ER_RO + $b 0x00002a74 ER_RO + $b 0x00002a98 ER_RO + $b 0x00002ab0 ER_RO + $b 0x00002b24 ER_RO + $b 0x00002b48 ER_RO + $b 0x00002b66 ER_RO + $b 0x00002b88 ER_RO + $b 0x00002bb8 ER_RO + $b 0x00002be8 ER_RO + $b 0x00002c04 ER_RO + $b 0x00002c20 ER_RO + $b 0x00002c38 ER_RO + $d 0x00002c72 ER_RO + $a 0x00002c8c ER_RO + $t 0x00002db8 ER_RO + $a 0x00002dc4 ER_RO + $d 0x00002e2c ER_RO + $f 0x00002e38 ER_RO + $f 0x00002e44 ER_RO + $f 0x00002e48 ER_RO + $f 0x00002e4c ER_RO + $f 0x00002e50 ER_RO + $f 0x00002e54 ER_RO + $f 0x00002e58 ER_RO + $f 0x00002e5c ER_RO + $f 0x00002e64 ER_RO + $f 0x00002e68 ER_RO + $f 0x00002e6c ER_RO + $f 0x00002e70 ER_RO + $f 0x00002e74 ER_RO + $f 0x00002e78 ER_RO + $f 0x00002e7c ER_RO + $f 0x00002e80 ER_RO + $f 0x00002e84 ER_RO + $f 0x00002e88 ER_RO + $f 0x00002e8c ER_RO + $f 0x00002ea0 ER_RO + $f 0x00002ea4 ER_RO + $f 0x00002ea8 ER_RO + $f 0x00002eac ER_RO + $f 0x00002eb4 ER_RO + $f 0x00002eb8 ER_RO + $f 0x00002ebc ER_RO + $a 0x00002ec4 ER_RO + $t 0x00002f08 ER_RO + $d 0x00002f0e ER_RO + $a 0x00002f10 ER_RO + $t 0x00002f68 ER_RO + $d 0x00002fa4 ER_RO + $f 0x00002fac ER_RO + $a 0x00002fb0 ER_RO + $t 0x0000306c ER_RO + $b 0x00003072 ER_RO + $d 0x000030c2 ER_RO + $a 0x000030c4 ER_RO + $t 0x000030e0 ER_RO + $a 0x000030e4 ER_RO + $t 0x000032b8 ER_RO + $b 0x000032c0 ER_RO + $d 0x0000330a ER_RO + $t 0x0000330c ER_RO + $a 0x00003310 ER_RO + $t 0x00003314 ER_RO + $a 0x00003318 ER_RO + $t 0x0000331c ER_RO + $a 0x00003320 ER_RO + $t 0x00003324 ER_RO + $a 0x00003328 ER_RO + $t 0x0000332c ER_RO + $a 0x00003330 ER_RO + $t 0x00003334 ER_RO + $a 0x00003338 ER_RO + $t 0x0000333c ER_RO + $a 0x00003340 ER_RO + $t 0x00003344 ER_RO + $a 0x00003348 ER_RO + $t 0x0000334c ER_RO + $a 0x00003350 ER_RO + $t 0x00003354 ER_RO + $a 0x00003358 ER_RO + $t 0x0000335c ER_RO + $a 0x00003360 ER_RO + $t 0x00003364 ER_RO + $a 0x00003368 ER_RO + $t 0x0000336c ER_RO + $a 0x00003370 ER_RO + $t 0x00003374 ER_RO + $a 0x00003378 ER_RO + $t 0x0000337c ER_RO + $a 0x00003380 ER_RO + $t 0x00003384 ER_RO + $a 0x00003388 ER_RO + $t 0x0000338c ER_RO + $a 0x00003390 ER_RO + $t 0x00003394 ER_RO + $a 0x00003398 ER_RO + $t 0x0000339c ER_RO + $a 0x000033a0 ER_RO + $t 0x000033a4 ER_RO + $b 0x000033b0 ER_RO + $b 0x000033b6 ER_RO + $b 0x000033cc ER_RO + $b 0x000033d6 ER_RO + $d 0x000033e0 ER_RO + $f 0x000033e0 ER_RO + $f 0x000033e4 ER_RO + $f 0x000033e8 ER_RO + $d 0x000033f4 ER_RO + $d 0x0380fc30 ER_ZI + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + D:\IrisSubp\IrisSubpMon\crt0Arm.s 0x00000000 Number 0 crt0Arm.o ABSOLUTE + 0x00000000 Data 16 crt0Arm.o(.debug_abbrev) + Init 0x00000000 ARM Code 4612 crt0Arm.o(Init) + 0x00000000 Data 108 crt0Arm.o(.debug_info) + 0x00000000 Data 732 crt0Arm.o(.debug_line) + start_v 0x00000000 ARM Code 4 crt0Arm.o(Init) + undef_v 0x00000004 ARM Code 4 crt0Arm.o(Init) + swi_v 0x00000008 ARM Code 4 crt0Arm.o(Init) + code_abort_v 0x0000000c ARM Code 4 crt0Arm.o(Init) + data_abort_v 0x00000010 ARM Code 4 crt0Arm.o(Init) + reserve_v 0x00000014 ARM Code 4 crt0Arm.o(Init) + irq_v 0x00000018 ARM Code 4 crt0Arm.o(Init) + fiq_v 0x0000001c ARM Code 4 crt0Arm.o(Init) + start_m 0x00000020 ARM Code 4 crt0Arm.o(Init) + CheckLR2Return 0x000010c8 ARM Code 0 crt0Arm.o(Init) + CheckLR2CallR12 0x00001164 ARM Code 0 crt0Arm.o(Init) + eor_code 0x00001198 Data 0 crt0Arm.o(Init) + D:\IrisSubp\IrisSubpMon\crt0subArmCommon.s 0x00000000 Number 0 crt0subArmCommon.o ABSOLUTE + IrisSubpCrt0Sub 0x00002ec4 ARM Code 1096 crt0subArmCommon.o(IrisSubpCrt0Sub) + 0x00000010 Data 16 crt0subArmCommon.o(.debug_abbrev) + 0x0000006c Data 120 crt0subArmCommon.o(.debug_info) + 0x000002dc Data 696 crt0subArmCommon.o(.debug_line) + MON_ONLY 0x00002ec4 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + NDEBUG2 0x00002ec4 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + jump_intr 0x00002ef4 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + WaitIntr_sub 0x00002f44 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + divide_just_l 0x00002fc4 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + divide_div_l 0x00002fd0 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + CheckSrcp_End 0x000030dc ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + D:\IrisSubp\IrisSubpMon\IrisSubpMon.c 0x00000000 Number 0 IrisSubpMon.o ABSOLUTE + .text 0x00001204 Thumb Code 0 IrisSubpMon.o(.text) + .bss 0x0380fc30 Data 0 IrisSubpMon.o(.bss) + C$debug_frame313 0x00000000 Data 0 IrisSubpMon.o(.debug_frame) + C$debug_loc312 0x00000000 Data 0 IrisSubpMon.o(.debug_loc) + C$debug_macinfo5 0x00000000 Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames304 0x00000000 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_abbrev0 0x00000020 Data 0 IrisSubpMon.o(.debug_abbrev) + C$debug_pubnames316 0x00000024 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames4 0x0000004c Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames310 0x000000a4 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_info21 0x000000e4 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames22 0x00000140 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_macinfo23 0x000001bc Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo155 0x000001e8 Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames154 0x0000042c Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames268 0x00000498 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames286 0x000004d4 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames250 0x00000544 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_line2 0x00000594 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line308 0x0000060c Data 0 IrisSubpMon.o(.debug_line) + C$debug_line20 0x00000890 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line152 0x000008ec Data 0 IrisSubpMon.o(.debug_line) + C$debug_line266 0x0000093c Data 0 IrisSubpMon.o(.debug_line) + C$debug_line284 0x00000998 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line248 0x00000a30 Data 0 IrisSubpMon.o(.debug_line) + C$debug_info303 0x00000fb4 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info315 0x00001038 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info153 0x000010b8 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info267 0x00001388 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info285 0x00001454 Data 0 IrisSubpMon.o(.debug_info) + C$debug_macinfo269 0x0000151c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo287 0x0000153c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo251 0x0000166c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_info3 0x00001e08 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info309 0x00001ee8 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info249 0x00002618 Data 0 IrisSubpMon.o(.debug_info) + .bss$2 0x0380fc30 Data 0 IrisSubpMon.o(.bss) + D:\IrisSubp\IrisSubpMon\IrisSubpMonCard.c 0x00000000 Number 0 IrisSubpMonCard.o ABSOLUTE + .text 0x0000161c Thumb Code 0 IrisSubpMonCard.o(.text) + C$debug_abbrev0 0x00000020 Data 0 IrisSubpMon.o(.debug_abbrev) + C$debug_info21 0x000000e4 Data 0 IrisSubpMon.o(.debug_info) + C$debug_frame313 0x00000120 Data 0 IrisSubpMonCard.o(.debug_frame) + C$debug_pubnames22 0x00000140 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_macinfo23 0x000001bc Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo155 0x000001e8 Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames154 0x0000042c Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames268 0x00000498 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_loc312 0x000004c8 Data 0 IrisSubpMonCard.o(.debug_loc) + C$debug_pubnames286 0x000004d4 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames250 0x00000544 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames304 0x00000624 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames316 0x00000650 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames322 0x00000680 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames328 0x000006b0 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames334 0x000006cc Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames340 0x000006f0 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames346 0x00000714 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames352 0x00000740 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames358 0x00000768 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames364 0x00000790 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames370 0x000007b0 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames376 0x000007d0 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames382 0x000007fc Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames388 0x00000818 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames394 0x00000834 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames400 0x0000085c Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames406 0x00000884 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_line20 0x00000890 Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames412 0x000008b0 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames418 0x000008dc Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_line152 0x000008ec Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames424 0x00000900 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames430 0x0000092c Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_line266 0x0000093c Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames436 0x00000954 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames442 0x00000980 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_line284 0x00000998 Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames448 0x000009a0 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames454 0x000009c8 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames460 0x000009ec Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_pubnames466 0x00000a18 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_line248 0x00000a30 Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames310 0x00000a40 Data 0 IrisSubpMonCard.o(.debug_pubnames) + C$debug_line308 0x00000af0 Data 0 IrisSubpMonCard.o(.debug_line) + C$debug_info153 0x000010b8 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info267 0x00001388 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info285 0x00001454 Data 0 IrisSubpMon.o(.debug_info) + C$debug_macinfo269 0x0000151c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo287 0x0000153c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo251 0x0000166c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_info249 0x00002618 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info303 0x000028ac Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info315 0x0000295c Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info321 0x00002a00 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info327 0x00002acc Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info333 0x00002b60 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info339 0x00002bf8 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info345 0x00002c90 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info351 0x00002d4c Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info357 0x00002de4 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info363 0x00002eb4 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info369 0x00002f48 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info375 0x00002fdc Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info381 0x0000307c Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info387 0x00003110 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info393 0x000031a4 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info399 0x00003250 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info405 0x000032ec Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info411 0x000033a0 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info417 0x00003458 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info423 0x00003538 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info429 0x000035f4 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info435 0x000036bc Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info441 0x000037a8 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info447 0x00003850 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info453 0x000038e4 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info459 0x0000395c Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info465 0x000039f8 Data 0 IrisSubpMonCard.o(.debug_info) + C$debug_info309 0x00003a94 Data 0 IrisSubpMonCard.o(.debug_info) + D:\IrisSubp\IrisSubpMon\Blowfish.c 0x00000000 Number 0 Blowfish.o ABSOLUTE + .text 0x00001fb4 Thumb Code 0 Blowfish.o(.text) + C$debug_abbrev0 0x00000020 Data 0 IrisSubpMon.o(.debug_abbrev) + C$debug_pubnames10 0x00000498 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_frame31 0x000006bc Data 0 Blowfish.o(.debug_frame) + C$debug_line8 0x0000093c Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames34 0x00000d9c Data 0 Blowfish.o(.debug_pubnames) + C$debug_pubnames40 0x00000dc0 Data 0 Blowfish.o(.debug_pubnames) + C$debug_pubnames28 0x00000de8 Data 0 Blowfish.o(.debug_pubnames) + C$debug_line2 0x000010c4 Data 0 Blowfish.o(.debug_line) + C$debug_line26 0x00001134 Data 0 Blowfish.o(.debug_line) + C$debug_info9 0x00001388 Data 0 IrisSubpMon.o(.debug_info) + C$debug_macinfo11 0x0000151c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo5 0x0000169c Data 0 Blowfish.o(.debug_macinfo) + C$debug_loc30 0x00001734 Data 0 Blowfish.o(.debug_loc) + F 0x00001fb4 Thumb Code 70 Blowfish.o(.text) + C$debug_info33 0x00004a20 Data 0 Blowfish.o(.debug_info) + C$debug_info39 0x00004b34 Data 0 Blowfish.o(.debug_info) + C$debug_info3 0x00004c1c Data 0 Blowfish.o(.debug_info) + C$debug_info27 0x00004c90 Data 0 Blowfish.o(.debug_info) + D:\IrisSubp\IrisSubpMon\IrisSubpMonRtc.c 0x00000000 Number 0 IrisSubpMonRtc.o ABSOLUTE + .text 0x000020f8 Thumb Code 0 IrisSubpMonRtc.o(.text) + C$debug_abbrev0 0x00000020 Data 0 IrisSubpMon.o(.debug_abbrev) + C$debug_info21 0x000000e4 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames22 0x00000140 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_macinfo23 0x000001bc Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo155 0x000001e8 Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames154 0x0000042c Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames268 0x00000498 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames286 0x000004d4 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames250 0x00000544 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_frame313 0x00000798 Data 0 IrisSubpMonRtc.o(.debug_frame) + C$debug_line20 0x00000890 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line152 0x000008ec Data 0 IrisSubpMon.o(.debug_line) + C$debug_line266 0x0000093c Data 0 IrisSubpMon.o(.debug_line) + C$debug_line284 0x00000998 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line248 0x00000a30 Data 0 IrisSubpMon.o(.debug_line) + C$debug_pubnames316 0x00000e40 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_pubnames322 0x00000e60 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_pubnames328 0x00000e88 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_pubnames334 0x00000eb0 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_pubnames340 0x00000ed8 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_pubnames310 0x00000ef8 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_pubnames304 0x00000f84 Data 0 IrisSubpMonRtc.o(.debug_pubnames) + C$debug_info153 0x000010b8 Data 0 IrisSubpMon.o(.debug_info) + C$debug_line308 0x000012d8 Data 0 IrisSubpMonRtc.o(.debug_line) + C$debug_info267 0x00001388 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info285 0x00001454 Data 0 IrisSubpMon.o(.debug_info) + C$debug_macinfo269 0x0000151c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo287 0x0000153c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo251 0x0000166c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_loc312 0x00001c28 Data 0 IrisSubpMonRtc.o(.debug_loc) + C$debug_info249 0x00002618 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info315 0x00004fbc Data 0 IrisSubpMonRtc.o(.debug_info) + C$debug_info321 0x00005048 Data 0 IrisSubpMonRtc.o(.debug_info) + C$debug_info327 0x000050f4 Data 0 IrisSubpMonRtc.o(.debug_info) + C$debug_info333 0x000051ac Data 0 IrisSubpMonRtc.o(.debug_info) + C$debug_info339 0x00005258 Data 0 IrisSubpMonRtc.o(.debug_info) + C$debug_info303 0x00005370 Data 0 IrisSubpMonRtc.o(.debug_info) + C$debug_info309 0x000053e4 Data 0 IrisSubpMonRtc.o(.debug_info) + D:\IrisSubp\IrisSubpMon\crt0subExceptions.s 0x00000000 Number 0 crt0subExceptions.o ABSOLUTE + 0x0000144c Data 492 crt0subExceptions.o(.debug_line) + 0x0000040c Data 16 crt0subExceptions.o(.debug_abbrev) + Init 0x00002c8c ARM Code 568 crt0subExceptions.o(Init) + 0x00005764 Data 120 crt0subExceptions.o(.debug_info) + fiq_m 0x00002ca0 ARM Code 4 crt0subExceptions.o(Init) + fiq_return 0x00002cc0 ARM Code 0 crt0subExceptions.o(Init) + restart_v 0x00002cf8 ARM Code 4 crt0subExceptions.o(Init) + main_return 0x00002d20 ARM Code 0 crt0subExceptions.o(Init) + soft_reset 0x00002d4c ARM Code 0 crt0subExceptions.o(Init) + terminate_mon 0x00002d60 ARM Code 0 crt0subExceptions.o(Init) + stack_clear 0x00002dac ARM Code 0 crt0subExceptions.o(Init) + stack_clear_10 0x00002db8 Thumb Code 4 crt0subExceptions.o(Init) + irq_return 0x00002dd4 ARM Code 4 crt0subExceptions.o(Init) + usr_sp 0x00002e2c Data 4 crt0subExceptions.o(Init) + irq_sp 0x00002e30 Data 4 crt0subExceptions.o(Init) + fiq_sp 0x00002e34 Data 4 crt0subExceptions.o(Init) + svc_sp 0x00002e34 Data 0 crt0subExceptions.o(Init) + sys_table 0x00002e38 Data 0 crt0subExceptions.o(Init) + D:\IrisSubp\IrisSubpMon\IrisSubpMonSpi.c 0x00000000 Number 0 IrisSubpMonSpi.o ABSOLUTE + .constdata 0x000033e0 Data 0 IrisSubpMonSpi.o(.constdata) + .text 0x0000227c Thumb Code 0 IrisSubpMonSpi.o(.text) + i.RecvFlashDataBuf 0x000033a4 Thumb Code 0 IrisSubpMonSpi.o(i.RecvFlashDataBuf) + i.SendFlashData 0x000033c0 Thumb Code 0 IrisSubpMonSpi.o(i.SendFlashData) + C$debug_abbrev0 0x00000020 Data 0 IrisSubpMon.o(.debug_abbrev) + C$debug_info21 0x000000e4 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames22 0x00000140 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_macinfo23 0x000001bc Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo155 0x000001e8 Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames154 0x0000042c Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames268 0x00000498 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames286 0x000004d4 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames250 0x00000544 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_line20 0x00000890 Data 0 IrisSubpMon.o(.debug_line) + C$debug_frame313 0x000008dc Data 0 IrisSubpMonSpi.o(.debug_frame) + C$debug_line152 0x000008ec Data 0 IrisSubpMon.o(.debug_line) + C$debug_line266 0x0000093c Data 0 IrisSubpMon.o(.debug_line) + C$debug_line284 0x00000998 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line248 0x00000a30 Data 0 IrisSubpMon.o(.debug_line) + C$debug_frame367 0x00000acc Data 0 IrisSubpMonSpi.o(.debug_frame) + C$debug_frame373 0x00000b1c Data 0 IrisSubpMonSpi.o(.debug_frame) + C$debug_pubnames316 0x00000fa8 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames322 0x00000fcc Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames334 0x00000ff8 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames346 0x0000101c Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames352 0x00001044 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames358 0x0000106c Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames310 0x00001094 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_info153 0x000010b8 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames304 0x00001188 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames328 0x000011b0 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames340 0x000011d8 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames364 0x000011fc Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_pubnames370 0x00001224 Data 0 IrisSubpMonSpi.o(.debug_pubnames) + C$debug_info267 0x00001388 Data 0 IrisSubpMon.o(.debug_info) + C$debug_info285 0x00001454 Data 0 IrisSubpMon.o(.debug_info) + C$debug_macinfo269 0x0000151c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo287 0x0000153c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_line308 0x00001638 Data 0 IrisSubpMonSpi.o(.debug_line) + C$debug_macinfo251 0x0000166c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_line362 0x0000187c Data 0 IrisSubpMonSpi.o(.debug_line) + C$debug_line368 0x000018e4 Data 0 IrisSubpMonSpi.o(.debug_line) + C$debug_loc312 0x00001f34 Data 0 IrisSubpMonSpi.o(.debug_loc) + C$debug_info249 0x00002618 Data 0 IrisSubpMon.o(.debug_info) + C$debug_loc366 0x0000283c Data 0 IrisSubpMonSpi.o(.debug_loc) + C$debug_loc372 0x000028d0 Data 0 IrisSubpMonSpi.o(.debug_loc) + .constdata$1 0x000033e0 Data 0 IrisSubpMonSpi.o(.constdata) + ucif@LoadFlashDemo_0 0x000033e0 Data 20 IrisSubpMonSpi.o(.constdata) + C$debug_info315 0x000057dc Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info321 0x000058b0 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info333 0x0000597c Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info345 0x00005a38 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info351 0x00005ac0 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info357 0x00005bc0 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info303 0x00005c74 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info309 0x00005cf0 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info327 0x0000657c Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info339 0x00006624 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info363 0x000066c4 Data 0 IrisSubpMonSpi.o(.debug_info) + C$debug_info369 0x0000677c Data 0 IrisSubpMonSpi.o(.debug_info) + D:\IrisSubp\IrisSubpMon\NintendoLogoData.s 0x00000000 Number 0 NintendoLogoData.o ABSOLUTE + D:\IrisSubp\IrisSubpMon\SndDataArm.s 0x00000000 Number 0 SndDataArm.o ABSOLUTE + SoundData 0x0000341c Data 2388 SndDataArm.o(SoundData) + D:\IrisSubp\IrisSubpMon\IrisSubpMonSub.c 0x00000000 Number 0 IrisSubpMonSub.o ABSOLUTE + .bss 0x0380fc40 Data 0 IrisSubpMonSub.o(.bss) + .constdata 0x000033f4 Data 0 IrisSubpMonSub.o(.constdata) + .bss 0x0380fc38 Data 0 IrisSubpMonSub.o(.bss) + .bss 0x0380fc3c Data 0 IrisSubpMonSub.o(.bss) + .text 0x000025b4 Thumb Code 0 IrisSubpMonSub.o(.text) + C$debug_abbrev0 0x00000020 Data 0 IrisSubpMon.o(.debug_abbrev) + C$debug_info21 0x000000e4 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames22 0x00000140 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_macinfo23 0x000001bc Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo155 0x000001e8 Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames154 0x0000042c Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames268 0x00000498 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_pubnames286 0x000004d4 Data 0 IrisSubpMon.o(.debug_pubnames) + C$debug_line20 0x00000890 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line152 0x000008ec Data 0 IrisSubpMon.o(.debug_line) + C$debug_line266 0x0000093c Data 0 IrisSubpMon.o(.debug_line) + C$debug_line284 0x00000998 Data 0 IrisSubpMon.o(.debug_line) + C$debug_line248 0x00000a30 Data 0 IrisSubpMon.o(.debug_line) + C$debug_frame313 0x00000b6c Data 0 IrisSubpMonSub.o(.debug_frame) + C$debug_info153 0x000010b8 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames304 0x00001248 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames316 0x00001268 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames322 0x0000128c Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames328 0x000012b0 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames334 0x000012dc Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames340 0x000012fc Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames346 0x00001320 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames352 0x00001348 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames358 0x00001378 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_info267 0x00001388 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames364 0x000013a0 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames370 0x000013c4 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames376 0x000013ec Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames382 0x00001414 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames388 0x00001440 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_info285 0x00001454 Data 0 IrisSubpMon.o(.debug_info) + C$debug_pubnames394 0x0000146c Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_pubnames4 0x00001490 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_macinfo269 0x0000151c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_macinfo287 0x0000153c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames310 0x00001598 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_macinfo251 0x0000166c Data 0 IrisSubpMon.o(.debug_macinfo) + C$debug_pubnames250 0x00001740 Data 0 IrisSubpMonSub.o(.debug_pubnames) + C$debug_macinfo5 0x00001844 Data 0 IrisSubpMonSub.o(.debug_macinfo) + C$debug_line2 0x00001950 Data 0 IrisSubpMonSub.o(.debug_line) + C$debug_line308 0x000019cc Data 0 IrisSubpMonSub.o(.debug_line) + C$debug_loc312 0x00002944 Data 0 IrisSubpMonSub.o(.debug_loc) + CheckSoundTablep 0x00002c5c Thumb Code 22 IrisSubpMonSub.o(.text) + .constdata$1 0x000033f4 Data 0 IrisSubpMonSub.o(.constdata) + C$debug_info303 0x00006838 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info315 0x000068a8 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info321 0x00006930 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info327 0x000069b8 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info333 0x00006a48 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info339 0x00006b48 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info345 0x00006bf4 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info351 0x00006d8c Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info357 0x00006e40 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info249 0x00006f4c Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info363 0x000071f8 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info369 0x00007400 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info375 0x000074a8 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info381 0x00007590 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info387 0x00007678 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info393 0x00007760 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info3 0x000077f8 Data 0 IrisSubpMonSub.o(.debug_info) + C$debug_info309 0x00007a28 Data 0 IrisSubpMonSub.o(.debug_info) + .bss$7 0x0380fc38 Data 0 IrisSubpMonSub.o(.bss) + .bss$12 0x0380fc3c Data 0 IrisSubpMonSub.o(.bss) + .bss$17 0x0380fc40 Data 0 IrisSubpMonSub.o(.bss) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THUMB_ISAv1$M$PE$A:L22$X:L11$S22$IW$~STKCKD$~SHL$OSPACE 0x00000000 Number 0 anon$$obj.o ABSOLUTE + default_pnB_l 0x00000024 Data 0 crt0Arm.o(Init) + default_pnB_h 0x00000028 Data 0 crt0Arm.o(Init) + default_pnA_l_1 0x00000029 Data 0 crt0Arm.o(Init) + default_pnA_l_0_table 0x0000002a Data 0 crt0Arm.o(Init) + blowfishInitTable 0x00000030 Data 0 crt0Arm.o(Init) + segmentIndexTable4Secure 0x00001078 Data 0 crt0Arm.o(Init) + normal_mode_key 0x00001088 Data 0 crt0Arm.o(Init) + png_off_key 0x00001090 Data 0 crt0Arm.o(Init) + encrypt_object_key 0x00001098 Data 0 crt0Arm.o(Init) + sio_send_code 0x000010a0 Data 0 crt0Arm.o(Init) + sio_recv_code 0x000010a2 Data 0 crt0Arm.o(Init) + sio_add_code 0x000010a4 Data 0 crt0Arm.o(Init) + ChangeEncryptKey1 0x000010a8 ARM Code 0 crt0Arm.o(Init) + ChangeEncryptKey2 0x000010b0 ARM Code 0 crt0Arm.o(Init) + ChangeEncryptKey3 0x000010b8 ARM Code 0 crt0Arm.o(Init) + ChangeEncryptKey4 0x000010c0 ARM Code 0 crt0Arm.o(Init) + InitSecureParamFook 0x000010d8 ARM Code 0 crt0Arm.o(Init) + MakeBlowfishCardTable 0x000010e0 ARM Code 0 crt0Arm.o(Init) + MakeBlowfishFlashTable 0x000010ec ARM Code 0 crt0Arm.o(Init) + InitBlowfishKeyAnaTableFook 0x000010f8 ARM Code 0 crt0Arm.o(Init) + InitBlowfishFook 0x00001100 ARM Code 0 crt0Arm.o(Init) + EncryptByBlowfishFook0 0x00001108 ARM Code 0 crt0Arm.o(Init) + EncryptByBlowfishFook1 0x00001110 ARM Code 0 crt0Arm.o(Init) + EncryptByBlowfishFook2 0x00001120 ARM Code 0 crt0Arm.o(Init) + DecryptByBlowfishFook 0x00001130 ARM Code 0 crt0Arm.o(Init) + DecryptObjectFileFook 0x00001140 ARM Code 0 crt0Arm.o(Init) + ChangeObjectTableFook 0x00001148 ARM Code 0 crt0Arm.o(Init) + CopyBiosAreaFook 0x00001154 ARM Code 0 crt0Arm.o(Init) + CpuSetFast32Fook 0x0000115c ARM Code 0 crt0Arm.o(Init) + GetFuncp4IPL2 0x00001188 Thumb Code 0 crt0Arm.o(Init) + SetPauseCheckFlag 0x0000119c Thumb Code 0 crt0Arm.o(Init) + SetPause2Agb 0x000011a4 ARM Code 4 crt0Arm.o(Init) + Halt 0x000011ac ARM Code 4 crt0Arm.o(Init) + Stop 0x000011b4 ARM Code 4 crt0Arm.o(Init) + SetPauseHi 0x000011b8 ARM Code 4 crt0Arm.o(Init) + SecureAreaEndp 0x00001204 Thumb Code 0 crt0Arm.o(Init) + WaitMainpIntf 0x00001204 Thumb Code 14 IrisSubpMon.o(.text) + NotifyMainpIntf 0x00001212 Thumb Code 8 IrisSubpMon.o(.text) + CheckCardHeader 0x0000121a Thumb Code 48 IrisSubpMon.o(.text) + LoadSecure4Card 0x0000124a Thumb Code 304 IrisSubpMon.o(.text) + LoadCardHeader 0x0000137a Thumb Code 60 IrisSubpMon.o(.text) + IrisSubpMonMain 0x000013b6 Thumb Code 164 IrisSubpMon.o(.text) + CalledFormIPL2 0x0000145a Thumb Code 450 IrisSubpMon.o(.text) + InitCardParam4Secure 0x0000161c Thumb Code 68 IrisSubpMonCard.o(.text) + TerminateCardParam4Secure 0x00001660 Thumb Code 10 IrisSubpMonCard.o(.text) + WaitCardDma 0x0000166a Thumb Code 46 IrisSubpMonCard.o(.text) + SetCardOp 0x00001698 Thumb Code 64 IrisSubpMonCard.o(.text) + ReadCardAsync 0x000016d8 Thumb Code 88 IrisSubpMonCard.o(.text) + GetBlockSizeFromCardCnt 0x00001730 Thumb Code 32 IrisSubpMonCard.o(.text) + SendOnlyCardOp 0x00001750 Thumb Code 46 IrisSubpMonCard.o(.text) + SetVB 0x0000177e Thumb Code 24 IrisSubpMonCard.o(.text) + Encrypt2SetTimer4Secure 0x00001796 Thumb Code 138 IrisSubpMonCard.o(.text) + SetDummyVC 0x00001820 Thumb Code 20 IrisSubpMonCard.o(.text) + SendOnlyCardOp4Secure 0x00001834 Thumb Code 84 IrisSubpMonCard.o(.text) + ReadCardID 0x00001888 Thumb Code 46 IrisSubpMonCard.o(.text) + LoadCardTable 0x000018b6 Thumb Code 38 IrisSubpMonCard.o(.text) + ReadCardAsync4Normal 0x000018dc Thumb Code 14 IrisSubpMonCard.o(.text) + ReadCardHeader 0x000018ea Thumb Code 38 IrisSubpMonCard.o(.text) + ReadCardID4Normal 0x00001910 Thumb Code 36 IrisSubpMonCard.o(.text) + SetVBI 0x00001934 Thumb Code 20 IrisSubpMonCard.o(.text) + SetVAE 0x00001948 Thumb Code 18 IrisSubpMonCard.o(.text) + ChangeCardMode4Normal 0x0000195a Thumb Code 50 IrisSubpMonCard.o(.text) + SetVA 0x0000198c Thumb Code 84 IrisSubpMonCard.o(.text) + ReadCardID4Secure 0x000019e0 Thumb Code 76 IrisSubpMonCard.o(.text) + SetVD 0x00001a2c Thumb Code 26 IrisSubpMonCard.o(.text) + SendCardPNG_ON 0x00001a46 Thumb Code 32 IrisSubpMonCard.o(.text) + SendCardPNG_OFF 0x00001a66 Thumb Code 34 IrisSubpMonCard.o(.text) + ChangeCardMode4Secure 0x00001a88 Thumb Code 34 IrisSubpMonCard.o(.text) + ReadCardAsync4Game 0x00001aaa Thumb Code 34 IrisSubpMonCard.o(.text) + ReadCardAsync4Secure 0x00001acc Thumb Code 94 IrisSubpMonCard.o(.text) + ReadCardSegmentAsync4Secure 0x00001b2a Thumb Code 100 IrisSubpMonCard.o(.text) + EnableCardIntr 0x00001b8e Thumb Code 32 IrisSubpMonCard.o(.text) + SetCardIntr 0x00001bae Thumb Code 32 IrisSubpMonCard.o(.text) + SetCardIntr4Normal 0x00001bce Thumb Code 60 IrisSubpMonCard.o(.text) + SetCardIntr4Game 0x00001c0a Thumb Code 56 IrisSubpMonCard.o(.text) + SetCardIntr4Secure 0x00001c42 Thumb Code 60 IrisSubpMonCard.o(.text) + CardIntr4Secure 0x00001c7e Thumb Code 170 IrisSubpMonCard.o(.text) + InitCardPN_Intf 0x00001d28 Thumb Code 156 IrisSubpMonCard.o(.text) + CardTimerIntr4Secure 0x00001dc4 Thumb Code 176 IrisSubpMonCard.o(.text) + CardIntr 0x00001e74 Thumb Code 70 IrisSubpMonCard.o(.text) + TerminateCardIntr 0x00001eba Thumb Code 24 IrisSubpMonCard.o(.text) + WaitCardIntr 0x00001ed2 Thumb Code 22 IrisSubpMonCard.o(.text) + InitVA_VB_VD 0x00001ee8 Thumb Code 82 IrisSubpMonCard.o(.text) + InitCardOpBlowfish 0x00001f3a Thumb Code 22 IrisSubpMonCard.o(.text) + InitSecureParam 0x00001f50 Thumb Code 42 IrisSubpMonCard.o(.text) + EncryptByBlowfish 0x00001ffa Thumb Code 60 Blowfish.o(.text) + InitBlowfish 0x00002036 Thumb Code 134 Blowfish.o(.text) + DecryptByBlowfish 0x000020bc Thumb Code 60 Blowfish.o(.text) + RecvRtcDataBuf 0x000020f8 Thumb Code 82 IrisSubpMonRtc.o(.text) + SendRtcData 0x0000214a Thumb Code 50 IrisSubpMonRtc.o(.text) + SendRtcOp 0x0000217c Thumb Code 38 IrisSubpMonRtc.o(.text) + ReadRtcStatusBase 0x000021a2 Thumb Code 28 IrisSubpMonRtc.o(.text) + ReadRtcStatus1 0x000021be Thumb Code 4 IrisSubpMonRtc.o(.text) + SendRtcDataBuf 0x000021c2 Thumb Code 38 IrisSubpMonRtc.o(.text) + InitRtc 0x000021e8 Thumb Code 134 IrisSubpMonRtc.o(.text) + RecvSpiData 0x0000227c Thumb Code 40 IrisSubpMonSpi.o(.text) + RecvFlashData 0x000022a4 Thumb Code 34 IrisSubpMonSpi.o(.text) + TerminateReadFlash 0x000022c6 Thumb Code 16 IrisSubpMonSpi.o(.text) + RecvSpiDataBuf 0x000022d6 Thumb Code 90 IrisSubpMonSpi.o(.text) + ReadByte4SucureFlash 0x00002330 Thumb Code 56 IrisSubpMonSpi.o(.text) + SendSpiData 0x00002368 Thumb Code 32 IrisSubpMonSpi.o(.text) + InitReadFlash 0x00002388 Thumb Code 174 IrisSubpMonSpi.o(.text) + ReadFlash 0x00002436 Thumb Code 36 IrisSubpMonSpi.o(.text) + LoadFlashHeader 0x0000245a Thumb Code 8 IrisSubpMonSpi.o(.text) + LoadFlashDemo 0x00002462 Thumb Code 184 IrisSubpMonSpi.o(.text) + SendSpiDataBuf 0x0000251a Thumb Code 78 IrisSubpMonSpi.o(.text) + ReadFlashStatus 0x00002568 Thumb Code 22 IrisSubpMonSpi.o(.text) + InitReg 0x000025b4 Thumb Code 14 IrisSubpMonSub.o(.text) + PreInitRam 0x000025c2 Thumb Code 22 IrisSubpMonSub.o(.text) + PostInitRam 0x000025d8 Thumb Code 24 IrisSubpMonSub.o(.text) + ClearMmemSecureArea 0x000025f0 Thumb Code 22 IrisSubpMonSub.o(.text) + GetCRC16 0x00002606 Thumb Code 64 IrisSubpMonSub.o(.text) + IsMmem8MB 0x00002646 Thumb Code 50 IrisSubpMonSub.o(.text) + SendSioData 0x00002678 Thumb Code 46 IrisSubpMonSub.o(.text) + CheckSioData 0x000026a6 Thumb Code 36 IrisSubpMonSub.o(.text) + CheckDebugger 0x000026ca Thumb Code 148 IrisSubpMonSub.o(.text) + MakeBlowfishTable 0x0000275e Thumb Code 118 IrisSubpMonSub.o(.text) + InitBlowfishKeyAnaTable 0x000027d4 Thumb Code 36 IrisSubpMonSub.o(.text) + DecryptObjectFile 0x000027f8 Thumb Code 188 IrisSubpMonSub.o(.text) + ChangeObjectTable 0x000028b4 Thumb Code 44 IrisSubpMonSub.o(.text) + UnCompHuffman32 0x000028e0 Thumb Code 330 IrisSubpMonSub.o(.text) + UnCompLZ77Short 0x00002a2a Thumb Code 268 IrisSubpMonSub.o(.text) + UnCompRLShort 0x00002b36 Thumb Code 196 IrisSubpMonSub.o(.text) + GetSoundSinTable 0x00002bfa Thumb Code 28 IrisSubpMonSub.o(.text) + GetSoundPitchTable 0x00002c16 Thumb Code 26 IrisSubpMonSub.o(.text) + GetSoundVolumeTable 0x00002c30 Thumb Code 24 IrisSubpMonSub.o(.text) + TerminateIntr 0x00002c48 Thumb Code 20 IrisSubpMonSub.o(.text) + fiq_handler 0x00002c8c ARM Code 0 crt0subExceptions.o(Init) + start_handler 0x00002cd0 ARM Code 0 crt0subExceptions.o(Init) + bankreg_init_stack_clear 0x00002d78 ARM Code 0 crt0subExceptions.o(Init) + irq_handler 0x00002dc4 ARM Code 0 crt0subExceptions.o(Init) + swi_handler 0x00002ddc ARM Code 0 crt0subExceptions.o(Init) + swi_return 0x00002e10 ARM Code 4 crt0subExceptions.o(Init) + intr_main 0x00002ec4 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + WaitByLoop 0x00002f08 Thumb Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + WaitVBlankIntr 0x00002f10 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + WaitIntr 0x00002f18 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + ChangeSoundBias16 0x00002f68 Thumb Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + CopyBiosArea 0x00002f92 Thumb Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + DivS32 0x00002fb0 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + SqrtU32 0x00003000 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + CpuSet16_32 0x0000306c Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + CheckSrcp16_32 0x000030bc Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + CheckSrcp 0x000030c4 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + CpuSetFast32_T 0x000030e0 Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + CpuSetFast32 0x000030e4 ARM Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + UnPackBits32 0x00003170 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + UnCompLZ77Byte 0x00003220 ARM Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + UnCompRLByte 0x000032b8 Thumb Code 0 crt0subArmCommon.o(IrisSubpCrt0Sub) + __call_via_r0 0x000032fe Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + __call_via_r1 0x00003300 Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + __call_via_r2 0x00003302 Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + __call_via_r3 0x00003304 Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + __call_via_r4 0x00003306 Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + __call_via_r5 0x00003308 Thumb Code 4 crt0subArmCommon.o(IrisSubpCrt0Sub) + $Ven$TA$S$$InitSecureParamFook 0x0000330c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$DecryptObjectFileFook 0x00003314 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$CpuSetFast32 0x0000331c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$WaitIntr 0x00003324 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$EncryptByBlowfishFook1 0x0000332c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$EncryptByBlowfishFook0 0x00003334 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$MakeBlowfishCardTable 0x0000333c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$DecryptByBlowfishFook 0x00003344 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$MakeBlowfishFlashTable 0x0000334c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$CopyBiosAreaFook 0x00003354 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$ChangeEncryptKey1 0x0000335c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$ChangeEncryptKey2 0x00003364 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$InitBlowfishKeyAnaTableFook 0x0000336c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$EncryptByBlowfishFook2 0x00003374 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$InitBlowfishFook 0x0000337c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$CpuSetFast32Fook 0x00003384 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$ChangeObjectTableFook 0x0000338c Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$ChangeEncryptKey3 0x00003394 Thumb Code 0 anon$$obj.o(Veneer$$Code) + $Ven$TA$S$$ChangeEncryptKey4 0x0000339c Thumb Code 0 anon$$obj.o(Veneer$$Code) + RecvFlashDataBuf 0x000033a4 Thumb Code 28 IrisSubpMonSpi.o(i.RecvFlashDataBuf) + SendFlashData 0x000033c0 Thumb Code 32 IrisSubpMonSpi.o(i.SendFlashData) + mmemSizeCheckTable 0x000033f4 Data 8 IrisSubpMonSub.o(.constdata) + crc16_table 0x000033fc Data 32 IrisSubpMonSub.o(.constdata) + snd_data_start 0x0000341c Data 0 SndDataArm.o(SoundData) + snd_ptable 0x0000341c Data 0 SndDataArm.o(SoundData) + snd_vtable 0x00003a1c Data 0 SndDataArm.o(SoundData) + snd_sin_table 0x00003cf0 Data 0 SndDataArm.o(SoundData) + snd_data_end 0x00003d70 Data 0 SndDataArm.o(SoundData) + cardIntrWorkp 0x0380fc30 Data 4 IrisSubpMon.o(.bss) + romHeaderp 0x0380fc34 Data 4 IrisSubpMon.o(.bss) + sharedWorkp 0x0380fc38 Data 4 IrisSubpMonSub.o(.bss) + secureWorkp 0x0380fc3c Data 4 IrisSubpMonSub.o(.bss) + intrTable 0x0380fc40 Data 16 IrisSubpMonSub.o(.bss) + + +================================================================================ + +Memory Map of the image + + Image Entry point : 0x00000000 + + Load Region LR_1 (Base: 0x00000000, Size: 0x00003d70, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER_RO (Base: 0x00000000, Size: 0x00003d70, Max: 0xffffffff, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00001204 Code RO 1 * Init crt0Arm.o + 0x00001204 0x00000418 Code RO 9 .text IrisSubpMon.o + 0x0000161c 0x00000998 Code RO 107 .text IrisSubpMonCard.o + 0x00001fb4 0x00000144 Code RO 198 .text Blowfish.o + 0x000020f8 0x00000184 Code RO 213 .text IrisSubpMonRtc.o + 0x0000227c 0x00000338 Code RO 244 .text IrisSubpMonSpi.o + 0x000025b4 0x000006d8 Code RO 302 .text IrisSubpMonSub.o + 0x00002c8c 0x00000238 Code RO 240 Init crt0subExceptions.o + 0x00002ec4 0x00000448 Code RO 5 IrisSubpCrt0Sub crt0subArmCommon.o + 0x0000330c 0x00000008 Code RO 365 Veneer$$Code anon$$obj.o + 0x00003314 0x00000008 Code RO 366 Veneer$$Code anon$$obj.o + 0x0000331c 0x00000008 Code RO 367 Veneer$$Code anon$$obj.o + 0x00003324 0x00000008 Code RO 368 Veneer$$Code anon$$obj.o + 0x0000332c 0x00000008 Code RO 369 Veneer$$Code anon$$obj.o + 0x00003334 0x00000008 Code RO 370 Veneer$$Code anon$$obj.o + 0x0000333c 0x00000008 Code RO 371 Veneer$$Code anon$$obj.o + 0x00003344 0x00000008 Code RO 372 Veneer$$Code anon$$obj.o + 0x0000334c 0x00000008 Code RO 373 Veneer$$Code anon$$obj.o + 0x00003354 0x00000008 Code RO 374 Veneer$$Code anon$$obj.o + 0x0000335c 0x00000008 Code RO 375 Veneer$$Code anon$$obj.o + 0x00003364 0x00000008 Code RO 376 Veneer$$Code anon$$obj.o + 0x0000336c 0x00000008 Code RO 377 Veneer$$Code anon$$obj.o + 0x00003374 0x00000008 Code RO 378 Veneer$$Code anon$$obj.o + 0x0000337c 0x00000008 Code RO 379 Veneer$$Code anon$$obj.o + 0x00003384 0x00000008 Code RO 380 Veneer$$Code anon$$obj.o + 0x0000338c 0x00000008 Code RO 381 Veneer$$Code anon$$obj.o + 0x00003394 0x00000008 Code RO 382 Veneer$$Code anon$$obj.o + 0x0000339c 0x00000008 Code RO 383 Veneer$$Code anon$$obj.o + 0x000033a4 0x0000001c Code RO 245 i.RecvFlashDataBuf IrisSubpMonSpi.o + 0x000033c0 0x00000020 Code RO 246 i.SendFlashData IrisSubpMonSpi.o + 0x000033e0 0x00000014 Data RO 247 .constdata IrisSubpMonSpi.o + 0x000033f4 0x00000028 Data RO 303 .constdata IrisSubpMonSub.o + 0x0000341c 0x00000954 Data RO 298 SoundData SndDataArm.o + + + Execution Region ER_RW (Base: 0x0380fc30, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + **** No section assigned to this execution region **** + + + Execution Region ER_ZI (Base: 0x0380fc30, Size: 0x00000020, Max: 0xffffffff, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x0380fc30 0x00000008 Zero RW 10 .bss IrisSubpMon.o + 0x0380fc38 0x00000004 Zero RW 304 .bss IrisSubpMonSub.o + 0x0380fc3c 0x00000004 Zero RW 305 .bss IrisSubpMonSub.o + 0x0380fc40 0x00000010 Zero RW 306 .bss IrisSubpMonSub.o + + + + Load Region LR$$Debug (Base: 0x00000000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER$$Debug (Base: 0x00000000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00000010 Dbug RW 4 .debug_abbrev crt0Arm.o + 0x00000010 0x00000010 Dbug RW 8 .debug_abbrev crt0subArmCommon.o + 0x00000020 0x000003ec Dbug RW 26 .debug_abbrev IrisSubpMon.o + 0x0000040c 0x00000010 Dbug RW 243 .debug_abbrev crt0subExceptions.o + 0x00000000 0x00000120 Dbug RW 25 .debug_frame IrisSubpMon.o + 0x00000120 0x0000059c Dbug RW 197 .debug_frame IrisSubpMonCard.o + 0x000006bc 0x000000dc Dbug RW 212 .debug_frame Blowfish.o + 0x00000798 0x00000144 Dbug RW 236 .debug_frame IrisSubpMonRtc.o + 0x000008dc 0x000001f0 Dbug RW 270 .debug_frame IrisSubpMonSpi.o + 0x00000acc 0x00000050 Dbug RW 288 .debug_frame IrisSubpMonSpi.o + 0x00000b1c 0x00000050 Dbug RW 293 .debug_frame IrisSubpMonSpi.o + 0x00000b6c 0x00000340 Dbug RW 362 .debug_frame IrisSubpMonSub.o + 0x00000000 0x0000006c Dbug RW 2 .debug_info crt0Arm.o + 0x0000006c 0x00000078 Dbug RW 6 .debug_info crt0subArmCommon.o + 0x000000e4 0x00000ed0 Dbug RW 31 .debug_info IrisSubpMon.o + 0x00000fb4 0x00000084 Dbug RW 12 .debug_info IrisSubpMon.o + 0x00001038 0x00000080 Dbug RW 15 .debug_info IrisSubpMon.o + 0x000010b8 0x000002d0 Dbug RW 64 .debug_info IrisSubpMon.o + 0x00001388 0x000000cc Dbug RW 93 .debug_info IrisSubpMon.o + 0x00001454 0x000009b4 Dbug RW 97 .debug_info IrisSubpMon.o + 0x00001e08 0x000000e0 Dbug RW 18 .debug_info IrisSubpMon.o + 0x00001ee8 0x00000730 Dbug RW 22 .debug_info IrisSubpMon.o + 0x00002618 0x00000294 Dbug RW 101 .debug_info IrisSubpMon.o + 0x000028ac 0x000000b0 Dbug RW 109 .debug_info IrisSubpMonCard.o + 0x0000295c 0x000000a4 Dbug RW 112 .debug_info IrisSubpMonCard.o + 0x00002a00 0x000000cc Dbug RW 115 .debug_info IrisSubpMonCard.o + 0x00002acc 0x00000094 Dbug RW 118 .debug_info IrisSubpMonCard.o + 0x00002b60 0x00000098 Dbug RW 121 .debug_info IrisSubpMonCard.o + 0x00002bf8 0x00000098 Dbug RW 124 .debug_info IrisSubpMonCard.o + 0x00002c90 0x000000bc Dbug RW 127 .debug_info IrisSubpMonCard.o + 0x00002d4c 0x00000098 Dbug RW 130 .debug_info IrisSubpMonCard.o + 0x00002de4 0x000000d0 Dbug RW 133 .debug_info IrisSubpMonCard.o + 0x00002eb4 0x00000094 Dbug RW 136 .debug_info IrisSubpMonCard.o + 0x00002f48 0x00000094 Dbug RW 139 .debug_info IrisSubpMonCard.o + 0x00002fdc 0x000000a0 Dbug RW 142 .debug_info IrisSubpMonCard.o + 0x0000307c 0x00000094 Dbug RW 145 .debug_info IrisSubpMonCard.o + 0x00003110 0x00000094 Dbug RW 148 .debug_info IrisSubpMonCard.o + 0x000031a4 0x000000ac Dbug RW 151 .debug_info IrisSubpMonCard.o + 0x00003250 0x0000009c Dbug RW 154 .debug_info IrisSubpMonCard.o + 0x000032ec 0x000000b4 Dbug RW 157 .debug_info IrisSubpMonCard.o + 0x000033a0 0x000000b8 Dbug RW 160 .debug_info IrisSubpMonCard.o + 0x00003458 0x000000e0 Dbug RW 163 .debug_info IrisSubpMonCard.o + 0x00003538 0x000000bc Dbug RW 166 .debug_info IrisSubpMonCard.o + 0x000035f4 0x000000c8 Dbug RW 169 .debug_info IrisSubpMonCard.o + 0x000036bc 0x000000ec Dbug RW 172 .debug_info IrisSubpMonCard.o + 0x000037a8 0x000000a8 Dbug RW 175 .debug_info IrisSubpMonCard.o + 0x00003850 0x00000094 Dbug RW 178 .debug_info IrisSubpMonCard.o + 0x000038e4 0x00000078 Dbug RW 181 .debug_info IrisSubpMonCard.o + 0x0000395c 0x0000009c Dbug RW 184 .debug_info IrisSubpMonCard.o + 0x000039f8 0x0000009c Dbug RW 187 .debug_info IrisSubpMonCard.o + 0x00003a94 0x00000f8c Dbug RW 194 .debug_info IrisSubpMonCard.o + 0x00004a20 0x00000114 Dbug RW 200 .debug_info Blowfish.o + 0x00004b34 0x000000e8 Dbug RW 203 .debug_info Blowfish.o + 0x00004c1c 0x00000074 Dbug RW 206 .debug_info Blowfish.o + 0x00004c90 0x0000032c Dbug RW 209 .debug_info Blowfish.o + 0x00004fbc 0x0000008c Dbug RW 215 .debug_info IrisSubpMonRtc.o + 0x00005048 0x000000ac Dbug RW 218 .debug_info IrisSubpMonRtc.o + 0x000050f4 0x000000b8 Dbug RW 221 .debug_info IrisSubpMonRtc.o + 0x000051ac 0x000000ac Dbug RW 224 .debug_info IrisSubpMonRtc.o + 0x00005258 0x00000118 Dbug RW 227 .debug_info IrisSubpMonRtc.o + 0x00005370 0x00000074 Dbug RW 238 .debug_info IrisSubpMonRtc.o + 0x000053e4 0x00000380 Dbug RW 233 .debug_info IrisSubpMonRtc.o + 0x00005764 0x00000078 Dbug RW 241 .debug_info crt0subExceptions.o + 0x000057dc 0x000000d4 Dbug RW 249 .debug_info IrisSubpMonSpi.o + 0x000058b0 0x000000cc Dbug RW 252 .debug_info IrisSubpMonSpi.o + 0x0000597c 0x000000bc Dbug RW 255 .debug_info IrisSubpMonSpi.o + 0x00005a38 0x00000088 Dbug RW 258 .debug_info IrisSubpMonSpi.o + 0x00005ac0 0x00000100 Dbug RW 261 .debug_info IrisSubpMonSpi.o + 0x00005bc0 0x000000b4 Dbug RW 264 .debug_info IrisSubpMonSpi.o + 0x00005c74 0x0000007c Dbug RW 276 .debug_info IrisSubpMonSpi.o + 0x00005cf0 0x0000088c Dbug RW 267 .debug_info IrisSubpMonSpi.o + 0x0000657c 0x000000a8 Dbug RW 279 .debug_info IrisSubpMonSpi.o + 0x00006624 0x000000a0 Dbug RW 282 .debug_info IrisSubpMonSpi.o + 0x000066c4 0x000000b8 Dbug RW 285 .debug_info IrisSubpMonSpi.o + 0x0000677c 0x000000bc Dbug RW 290 .debug_info IrisSubpMonSpi.o + 0x00006838 0x00000070 Dbug RW 310 .debug_info IrisSubpMonSub.o + 0x000068a8 0x00000088 Dbug RW 313 .debug_info IrisSubpMonSub.o + 0x00006930 0x00000088 Dbug RW 316 .debug_info IrisSubpMonSub.o + 0x000069b8 0x00000090 Dbug RW 319 .debug_info IrisSubpMonSub.o + 0x00006a48 0x00000100 Dbug RW 322 .debug_info IrisSubpMonSub.o + 0x00006b48 0x000000ac Dbug RW 325 .debug_info IrisSubpMonSub.o + 0x00006bf4 0x00000198 Dbug RW 328 .debug_info IrisSubpMonSub.o + 0x00006d8c 0x000000b4 Dbug RW 331 .debug_info IrisSubpMonSub.o + 0x00006e40 0x0000010c Dbug RW 334 .debug_info IrisSubpMonSub.o + 0x00006f4c 0x000002ac Dbug RW 363 .debug_info IrisSubpMonSub.o + 0x000071f8 0x00000208 Dbug RW 337 .debug_info IrisSubpMonSub.o + 0x00007400 0x000000a8 Dbug RW 340 .debug_info IrisSubpMonSub.o + 0x000074a8 0x000000e8 Dbug RW 343 .debug_info IrisSubpMonSub.o + 0x00007590 0x000000e8 Dbug RW 346 .debug_info IrisSubpMonSub.o + 0x00007678 0x000000e8 Dbug RW 349 .debug_info IrisSubpMonSub.o + 0x00007760 0x00000098 Dbug RW 352 .debug_info IrisSubpMonSub.o + 0x000077f8 0x00000230 Dbug RW 355 .debug_info IrisSubpMonSub.o + 0x00007a28 0x00000f74 Dbug RW 359 .debug_info IrisSubpMonSub.o + 0x00000000 0x000002dc Dbug RW 3 .debug_line crt0Arm.o + 0x000002dc 0x000002b8 Dbug RW 7 .debug_line crt0subArmCommon.o + 0x00000594 0x00000078 Dbug RW 17 .debug_line IrisSubpMon.o + 0x0000060c 0x00000284 Dbug RW 21 .debug_line IrisSubpMon.o + 0x00000890 0x0000005c Dbug RW 30 .debug_line IrisSubpMon.o + 0x000008ec 0x00000050 Dbug RW 63 .debug_line IrisSubpMon.o + 0x0000093c 0x0000005c Dbug RW 92 .debug_line IrisSubpMon.o + 0x00000998 0x00000098 Dbug RW 96 .debug_line IrisSubpMon.o + 0x00000a30 0x000000c0 Dbug RW 100 .debug_line IrisSubpMon.o + 0x00000af0 0x000005d4 Dbug RW 193 .debug_line IrisSubpMonCard.o + 0x000010c4 0x00000070 Dbug RW 205 .debug_line Blowfish.o + 0x00001134 0x000001a4 Dbug RW 208 .debug_line Blowfish.o + 0x000012d8 0x00000174 Dbug RW 232 .debug_line IrisSubpMonRtc.o + 0x0000144c 0x000001ec Dbug RW 242 .debug_line crt0subExceptions.o + 0x00001638 0x00000244 Dbug RW 266 .debug_line IrisSubpMonSpi.o + 0x0000187c 0x00000068 Dbug RW 284 .debug_line IrisSubpMonSpi.o + 0x000018e4 0x0000006c Dbug RW 289 .debug_line IrisSubpMonSpi.o + 0x00001950 0x0000007c Dbug RW 354 .debug_line IrisSubpMonSub.o + 0x000019cc 0x00000444 Dbug RW 358 .debug_line IrisSubpMonSub.o + 0x00000000 0x000004c8 Dbug RW 24 .debug_loc IrisSubpMon.o + 0x000004c8 0x0000126c Dbug RW 196 .debug_loc IrisSubpMonCard.o + 0x00001734 0x000004f4 Dbug RW 211 .debug_loc Blowfish.o + 0x00001c28 0x0000030c Dbug RW 235 .debug_loc IrisSubpMonRtc.o + 0x00001f34 0x00000908 Dbug RW 269 .debug_loc IrisSubpMonSpi.o + 0x0000283c 0x00000094 Dbug RW 287 .debug_loc IrisSubpMonSpi.o + 0x000028d0 0x00000074 Dbug RW 292 .debug_loc IrisSubpMonSpi.o + 0x00002944 0x00001350 Dbug RW 361 .debug_loc IrisSubpMonSub.o + 0x00000000 0x000001bc Dbug RW 20 .debug_macinfo IrisSubpMon.o + 0x000001bc 0x0000002c Dbug RW 33 .debug_macinfo IrisSubpMon.o + 0x000001e8 0x00001334 Dbug RW 66 .debug_macinfo IrisSubpMon.o + 0x0000151c 0x00000020 Dbug RW 95 .debug_macinfo IrisSubpMon.o + 0x0000153c 0x00000130 Dbug RW 99 .debug_macinfo IrisSubpMon.o + 0x0000166c 0x00000030 Dbug RW 103 .debug_macinfo IrisSubpMon.o + 0x0000169c 0x000001a8 Dbug RW 207 .debug_macinfo Blowfish.o + 0x00001844 0x00000234 Dbug RW 357 .debug_macinfo IrisSubpMonSub.o + 0x00000000 0x00000024 Dbug RW 13 .debug_pubnames IrisSubpMon.o + 0x00000024 0x00000028 Dbug RW 16 .debug_pubnames IrisSubpMon.o + 0x0000004c 0x00000058 Dbug RW 19 .debug_pubnames IrisSubpMon.o + 0x000000a4 0x0000009c Dbug RW 23 .debug_pubnames IrisSubpMon.o + 0x00000140 0x000002ec Dbug RW 32 .debug_pubnames IrisSubpMon.o + 0x0000042c 0x0000006c Dbug RW 65 .debug_pubnames IrisSubpMon.o + 0x00000498 0x0000003c Dbug RW 94 .debug_pubnames IrisSubpMon.o + 0x000004d4 0x00000070 Dbug RW 98 .debug_pubnames IrisSubpMon.o + 0x00000544 0x000000e0 Dbug RW 102 .debug_pubnames IrisSubpMon.o + 0x00000624 0x0000002c Dbug RW 110 .debug_pubnames IrisSubpMonCard.o + 0x00000650 0x00000030 Dbug RW 113 .debug_pubnames IrisSubpMonCard.o + 0x00000680 0x00000030 Dbug RW 116 .debug_pubnames IrisSubpMonCard.o + 0x000006b0 0x0000001c Dbug RW 119 .debug_pubnames IrisSubpMonCard.o + 0x000006cc 0x00000024 Dbug RW 122 .debug_pubnames IrisSubpMonCard.o + 0x000006f0 0x00000024 Dbug RW 125 .debug_pubnames IrisSubpMonCard.o + 0x00000714 0x0000002c Dbug RW 128 .debug_pubnames IrisSubpMonCard.o + 0x00000740 0x00000028 Dbug RW 131 .debug_pubnames IrisSubpMonCard.o + 0x00000768 0x00000028 Dbug RW 134 .debug_pubnames IrisSubpMonCard.o + 0x00000790 0x00000020 Dbug RW 137 .debug_pubnames IrisSubpMonCard.o + 0x000007b0 0x00000020 Dbug RW 140 .debug_pubnames IrisSubpMonCard.o + 0x000007d0 0x0000002c Dbug RW 143 .debug_pubnames IrisSubpMonCard.o + 0x000007fc 0x0000001c Dbug RW 146 .debug_pubnames IrisSubpMonCard.o + 0x00000818 0x0000001c Dbug RW 149 .debug_pubnames IrisSubpMonCard.o + 0x00000834 0x00000028 Dbug RW 152 .debug_pubnames IrisSubpMonCard.o + 0x0000085c 0x00000028 Dbug RW 155 .debug_pubnames IrisSubpMonCard.o + 0x00000884 0x0000002c Dbug RW 158 .debug_pubnames IrisSubpMonCard.o + 0x000008b0 0x0000002c Dbug RW 161 .debug_pubnames IrisSubpMonCard.o + 0x000008dc 0x00000024 Dbug RW 164 .debug_pubnames IrisSubpMonCard.o + 0x00000900 0x0000002c Dbug RW 167 .debug_pubnames IrisSubpMonCard.o + 0x0000092c 0x00000028 Dbug RW 170 .debug_pubnames IrisSubpMonCard.o + 0x00000954 0x0000002c Dbug RW 173 .debug_pubnames IrisSubpMonCard.o + 0x00000980 0x00000020 Dbug RW 176 .debug_pubnames IrisSubpMonCard.o + 0x000009a0 0x00000028 Dbug RW 179 .debug_pubnames IrisSubpMonCard.o + 0x000009c8 0x00000024 Dbug RW 182 .debug_pubnames IrisSubpMonCard.o + 0x000009ec 0x0000002c Dbug RW 185 .debug_pubnames IrisSubpMonCard.o + 0x00000a18 0x00000028 Dbug RW 188 .debug_pubnames IrisSubpMonCard.o + 0x00000a40 0x0000035c Dbug RW 195 .debug_pubnames IrisSubpMonCard.o + 0x00000d9c 0x00000024 Dbug RW 201 .debug_pubnames Blowfish.o + 0x00000dc0 0x00000028 Dbug RW 204 .debug_pubnames Blowfish.o + 0x00000de8 0x00000058 Dbug RW 210 .debug_pubnames Blowfish.o + 0x00000e40 0x00000020 Dbug RW 216 .debug_pubnames IrisSubpMonRtc.o + 0x00000e60 0x00000028 Dbug RW 219 .debug_pubnames IrisSubpMonRtc.o + 0x00000e88 0x00000028 Dbug RW 222 .debug_pubnames IrisSubpMonRtc.o + 0x00000eb0 0x00000028 Dbug RW 225 .debug_pubnames IrisSubpMonRtc.o + 0x00000ed8 0x00000020 Dbug RW 228 .debug_pubnames IrisSubpMonRtc.o + 0x00000ef8 0x0000008c Dbug RW 234 .debug_pubnames IrisSubpMonRtc.o + 0x00000f84 0x00000024 Dbug RW 239 .debug_pubnames IrisSubpMonRtc.o + 0x00000fa8 0x00000024 Dbug RW 250 .debug_pubnames IrisSubpMonSpi.o + 0x00000fcc 0x0000002c Dbug RW 253 .debug_pubnames IrisSubpMonSpi.o + 0x00000ff8 0x00000024 Dbug RW 256 .debug_pubnames IrisSubpMonSpi.o + 0x0000101c 0x00000028 Dbug RW 259 .debug_pubnames IrisSubpMonSpi.o + 0x00001044 0x00000028 Dbug RW 262 .debug_pubnames IrisSubpMonSpi.o + 0x0000106c 0x00000028 Dbug RW 265 .debug_pubnames IrisSubpMonSpi.o + 0x00001094 0x000000f4 Dbug RW 268 .debug_pubnames IrisSubpMonSpi.o + 0x00001188 0x00000028 Dbug RW 277 .debug_pubnames IrisSubpMonSpi.o + 0x000011b0 0x00000028 Dbug RW 280 .debug_pubnames IrisSubpMonSpi.o + 0x000011d8 0x00000024 Dbug RW 283 .debug_pubnames IrisSubpMonSpi.o + 0x000011fc 0x00000028 Dbug RW 286 .debug_pubnames IrisSubpMonSpi.o + 0x00001224 0x00000024 Dbug RW 291 .debug_pubnames IrisSubpMonSpi.o + 0x00001248 0x00000020 Dbug RW 311 .debug_pubnames IrisSubpMonSub.o + 0x00001268 0x00000024 Dbug RW 314 .debug_pubnames IrisSubpMonSub.o + 0x0000128c 0x00000024 Dbug RW 317 .debug_pubnames IrisSubpMonSub.o + 0x000012b0 0x0000002c Dbug RW 320 .debug_pubnames IrisSubpMonSub.o + 0x000012dc 0x00000020 Dbug RW 323 .debug_pubnames IrisSubpMonSub.o + 0x000012fc 0x00000024 Dbug RW 326 .debug_pubnames IrisSubpMonSub.o + 0x00001320 0x00000028 Dbug RW 329 .debug_pubnames IrisSubpMonSub.o + 0x00001348 0x00000030 Dbug RW 332 .debug_pubnames IrisSubpMonSub.o + 0x00001378 0x00000028 Dbug RW 335 .debug_pubnames IrisSubpMonSub.o + 0x000013a0 0x00000024 Dbug RW 338 .debug_pubnames IrisSubpMonSub.o + 0x000013c4 0x00000028 Dbug RW 341 .debug_pubnames IrisSubpMonSub.o + 0x000013ec 0x00000028 Dbug RW 344 .debug_pubnames IrisSubpMonSub.o + 0x00001414 0x0000002c Dbug RW 347 .debug_pubnames IrisSubpMonSub.o + 0x00001440 0x0000002c Dbug RW 350 .debug_pubnames IrisSubpMonSub.o + 0x0000146c 0x00000024 Dbug RW 353 .debug_pubnames IrisSubpMonSub.o + 0x00001490 0x00000108 Dbug RW 356 .debug_pubnames IrisSubpMonSub.o + 0x00001598 0x000001a8 Dbug RW 360 .debug_pubnames IrisSubpMonSub.o + 0x00001740 0x000000e0 Dbug RW 364 .debug_pubnames IrisSubpMonSub.o + + +================================================================================ + +Image component sizes + + + Code RO Data RW Data ZI Data Debug + + 13280 2448 0 32 76192 Object Totals + 0 0 0 0 0 Library Totals + +================================================================================ + + + Code RO Data RW Data ZI Data Debug + + 13280 2448 0 32 76192 Grand Totals + +================================================================================ + + Total RO Size(Code + RO Data) 15728 ( 15.36kB) + Total RW Size(RW Data + ZI Data) 32 ( 0.03kB) + Total ROM Size(Code + RO Data + RW Data) 15728 ( 15.36kB) + +================================================================================ +