Source code of Ensata (A Nintendo DS emulator made by Nintendo).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ObjectPath.txt 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. ●オブジェクトパス
  2. CAgb
  3. ┣(A)CAgbDriver m_AgbDriver
  4. ┃ ├CArmCore *m_pArm7Core
  5. ┃ ├CLCDController *m_pLCDController
  6. ┃ ├CSound *m_pSound
  7. ┃ ├CAgbTimer *m_pTimer
  8. ┃ ├CAgbDma *m_pDma
  9. ┃ └CCartridge *m_pCartridge
  10. ┣(A)CArm7Implementation m_Arm7Core ←───CArmCore
  11. ┃ ┣ArmCoreData m_Data
  12. ┃ ├CArmCoreBus *m_pBus
  13. ┃ └CArmCoreCPI *m_pCPI
  14. ┣(A)CAgbMemory m_Memory
  15. ┣(A)CAgbArm7BIU m_Arm7BIU ←───CArmCoreBus
  16. ┃ ┣u_32 m_preFetchCount
  17. ┃ ┣u_32 m_NextHWordCycle
  18. ┃ ┣u_32 m_OneHWordCycle
  19. ┃ ┣s_32 m_DataCount
  20. ┃ ┣s_32 m_MemoryAccessCycle
  21. ┃ └CAgbIOManager *m_pIOMan
  22. ┣(A)CInterrupt m_Interrupt
  23. ┃ └CArmCore *m_pArm
  24. ┣(A)CAgbIOManager m_IOMan
  25. ┃ ├CLCDController *m_pLCDController
  26. ┃ ├CAgbMemory *m_pMemory
  27. ┃ ├CAgbDma *m_pDma
  28. ┃ ├CCartridge *m_pCartridge
  29. ┃ ├CSound *m_pSound
  30. ┃ ├CKeyDev *m_pKeyDev
  31. ┃ ├CInterrupt *m_pInterrupt
  32. ┃ └CAgbTimer *m_pTimer
  33. ┣(A)CLCDController m_LCDController
  34. ┃ ├CAgb *m_pAgb
  35. ┃ ├CAgbIOManager *m_pIOMan
  36. ┃ ├CAgbMemory *m_pMemory
  37. ┃ ├CAgbDma *m_pDma
  38. ┃ └CInterrupt *m_pInterrupt
  39. ┣(A)CKeyDev m_KeyDev
  40. ┃ └CInterrupt *m_pInterrupt
  41. ┣(A)CSound m_Sound
  42. ┃ ├CAgbMemory *m_pMemory
  43. ┃ └CAgbDma *m_pDma
  44. ┣(A)CCartridge m_Cartridge
  45. ┃ ┣CCarGpio m_CarGpio
  46. ┃ ┣CCarGpio m_CarGpio
  47. ┃ ┣CCarSubEep m_CarSubEep
  48. ┃ ┣CCarSubFlash m_CarSubFlash
  49. ┃ ┗CCarSubSensor m_CarSubSensor
  50. ┣(A)CAgbDma m_Dma
  51. ┃ ├CLCDController *m_pLCDController
  52. ┃ ├CAgbMemory *m_pMemory
  53. ┃ ├CSound *m_pSound
  54. ┃ ├CAgbIOManager *m_pIOMan
  55. ┃ ├CInterrupt *m_pInterrupt
  56. ┃ └CArmCore *m_pArm
  57. ┣(A)CAgbTimer m_Timer
  58. ┃ ├CSound *m_pSound
  59. ┃ └CInterrupt *m_pInterrupt
  60. ------------------------------------------------------------
  61. CIris
  62. ┣CIrisDriver m_IrisDriver
  63. ┃├CArmCore *m_pArm9Core;
  64. ┃├CLCDController *m_pLCDController;
  65. ┃├CSound *m_pSound;
  66. ┃├CTimer *m_pTimer;
  67. ┃├CDma *m_pDma;
  68. ┃└CCartridge *m_pCartridge;
  69. ┣CArm9Implementation m_Arm9Core ←───CArmCore
  70. ┣CMemory m_Memory
  71. ┃┣u_08 m_ram_vram_a[0x20000]
  72. ┃┣u_08 m_ram_vram_b[0x20000]
  73. ┃┣u_08 m_ram_vram_c[0x20000]
  74. ┃┣u_08 m_ram_vram_d[0x20000]
  75. ┃┣u_08 m_ram_vram_e[0x10000]
  76. ┃┣u_08 m_ram_vram_f[0x4000]
  77. ┃┣u_08 m_ram_vram_g[0x4000]
  78. ┃┣u_08 m_ram_in[0x8000]
  79. ┃┣u_08 m_ram_main[0x400000]
  80. ┃┣u_08 m_ram_pal[0x400]
  81. ┃┣u_08 m_ram_vram[0x40000]
  82. ┃┣u_08 m_ram_oam[0x800]
  83. ┃┣u_08 m_ram_io[0x400]
  84. ┃└pcu_08 m_boot_rom
  85. ┣CArm9BIU m_Arm9BIU ←───CArmCoreBus, CArmCoreCPI
  86. ┃┣CCp15 m_cp15
  87. ┃┣CProtectionUnit m_protection
  88. ┃┣CCacheCtrl m_ICache
  89. ┃┣CCacheCtrl m_DCache
  90. ┃┣u_08 m_DTcm[DTCM_PHYSICAL_SIZE]
  91. ┃┣u_08 m_ITcm[ITCM_PHYSICAL_SIZE]
  92. ┃└CArm9IOManager *m_pIOMan
  93. ┣CArm9IOManager m_Arm9IOMan
  94. ┃├CLCDController *m_pLCDController;
  95. ┃├CMemory *m_pMemory;
  96. ┃├CDma *m_pDma;
  97. ┃├CCartridge *m_pCartridge;
  98. ┃├CSound *m_pSound;
  99. ┃├CKey *m_pKey;
  100. ┃├CInterrupt *m_pInterrupt;
  101. ┃├CTimer *m_pTimer;
  102. ┃└CAccelerator *m_pAccelerator;
  103. ┣CInterrupt m_Interrupt
  104. ┃┣u_32 m_IE
  105. ┃┣u_32 m_IF
  106. ┃┣u_32 m_IME
  107. ┃┣u_32 m_Pause
  108. ┃└CArmCore *m_pArm
  109. ┣CLCDController m_LCDController
  110. ┃├CIris *m_pIris
  111. ┃├CArm9IOManager *m_pArm9IOMan
  112. ┃├CMemory *m_pMemory
  113. ┃├CDma *m_pDma
  114. ┃└CInterrupt *m_pInterrupt
  115. ┣CKey m_Key
  116. ┃└CInterrupt *m_pInterrupt
  117. ┣CSound m_Sound
  118. ┃├CMemory *m_pMemory
  119. ┃└CDma *m_pDma
  120. ┣CCartridge m_Cartridge
  121. ┃└pu_08 m_rom_ex
  122. ┣CDma m_Dma
  123. ┃├CSound *m_pSound
  124. ┃├CMemory *m_pMemory
  125. ┃├CArm9IOManager *m_pArm9IOMan
  126. ┃├CLCDController *m_pLCDController
  127. ┃├CInterrupt *m_pInterrupt
  128. ┃└CArmCore *m_pArm
  129. ┣CTimer m_Timer
  130. ┃├CSound *m_pSound
  131. ┃└CInterrupt *m_pInterrupt
  132. ┣CAccelerator m_Accelerator
  133. ┃├u_32 m_Divcnt
  134. ┃├u_32 m_Div_Numer[2]
  135. ┃├u_32 m_Div_Denom[2]
  136. ┃├u_32 m_Div_Result[2]
  137. ┃├u_32 m_Divrem_Result[2]
  138. ┃├u_32 *m_pDiv_Table[8]
  139. ┃├u_32 m_Sqrtcnt
  140. ┃├u_32 m_Sqrt_Result
  141. ┃├u_32 m_Sqrt_Param[2]
  142. ┃└u_32 *m_pSqrt_Table[3]
  143. ------------------------------------------------------------
  144. ●メモリアクセスのパス ARM9
  145. オペコードフェッチ
  146. CArmCore::Operate(...)
  147. ┗CArmCore::GetInstructionFromPipelineA(...)
  148. ┗CArm9BIU::ReadBusOp32(...)
  149. ┣CArm9BIU::CheckRegion(...)
  150. ┗CArm9IOManager::ReadBus32(...)
  151. ┗これが、各デバイスへのポインタを保持して、アクセスしている
  152. データリード IOレジスタ
  153. CArm9BIU::ReadBus32(...)
  154. ┣CArm9BIU::CheckRegion(...)
  155. ┗CArm9IOManager::ReadBus32(...)
  156. ┗CArm9IOManager::IORead(...)
  157. ┗各デバイスのアクセス関数を呼び出す
  158. データライト IOレジスタ
  159. CArm9BIU::WriteBus32(...)
  160. ┣CArm9BIU::CheckRegion(...)
  161. ┗CArm9IOManager::WriteBus32(...)
  162. ┗CArm9IOManager::IOUpdate(...)
  163. ┗各デバイスのアクセス関数を呼び出す
  164. ●パイプライン実行時間算出のプロセス
  165. CArmCore::Operate(...)
  166. ┣CArm9BIU::ResetCounters()
  167. ┃┗m_InstructionFetchCycle = m_DataAccessCycle = 0
  168. ┣CArmCore::GetInstructionFromPipelineA(...)
  169. ┃┣CArm9BIU::ReadBusOp32(...)
  170. ┃┃┣m_PreviousAccessResult = CArm9BIU::CheckRegion(...)
  171. ┃┃┃┗CArm9BIU::PermissionCheck(...)
  172. ┃┃┣CCacheCtrl::ReadHitCheck(...)
  173. ┃┃┣CArm9IOManager::ReadBus32(...)
  174. ┃┃┗m_InstructionFetchCycle += CArm9IOManager::GetAccessCycles(...) // TCM or Cache 以外のアクセスがあれば...
  175. ┃┗m_IABORT = CArm9BIU::GetAccessResult() = m_PreviousAccessResult
  176. ┣CArmCore::ReadBus32(...)
  177. ┃┣CArm9BIU::ReadBus32(...)
  178. ┃┃┣m_PreviousAccessResult = CArm9BIU::CheckRegion(...)
  179. ┃┃┃┗CArm9BIU::PermissionCheck(...)
  180. ┃┃┣CCacheCtrl::ReadHitCheck(...)
  181. ┃┃┣CArm9IOManager::ReadBus32(...)
  182. ┃┃┗m_DataAccessCycle += CArm9IOManager::GetAccessCycles(...) // TCM or Cache 以外のアクセスがあれば...
  183. ┃┗m_DABORT = CArm9BIU::GetAccessResult() = m_PreviousAccessResult
  184. ┣CArm9Implementation::GetInstructionCycle(...)
  185. ┗CArm9BIU::GetInstructionCycleTime(...)
  186. ┣ReadBusOp32(...) // 分岐があれば呼ばれる
  187. ┗ReadBusOp32(...) // 分岐があれば呼ばれる