]> git.zerfleddert.de Git - linexec-j720/blame - memory.cpp
Initial import of xdadeveloper linexec sources
[linexec-j720] / memory.cpp
CommitLineData
77a37381 1#include "stdafx.h"\r
2#include "tester1.h"\r
3#include <commctrl.h>\r
4//#include <aygshell.h>\r
5#include <sipapi.h>\r
6#include "setup.h"\r
7\r
8UINT32 ReadPhysical(UINT32 adr)\r
9{\r
10 UINT32 base= adr&0xffff0000;\r
11 UINT32 offset=adr&0x0000ffff;\r
12 UINT32 *p=(UINT32*)VirtualAlloc(0,0x10000,MEM_RESERVE,PAGE_READWRITE);\r
13 if(!p) return 0xFFFFFFFF;\r
14 if(!VirtualCopy((void*)p,(void*)(base/256),0x10000,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL)) return 0xFFFFFFFF;\r
15 UINT32 val=p[offset/4];\r
16 VirtualFree(p,0,MEM_RELEASE);\r
17 return val;\r
18}\r
19\r
20void WritePhysical(UINT32 adr,UINT32 val)\r
21{\r
22 UINT32 base= adr&0xffff0000;\r
23 UINT32 offset=adr&0x0000ffff;\r
24 UINT32 *p=(UINT32*)VirtualAlloc(0,0x10000,MEM_RESERVE,PAGE_READWRITE);\r
25 VirtualCopy((void*)p,(void*)(base/256),0x10000,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL);\r
26 p[offset/4]=val;\r
27 VirtualFree(p,0,MEM_RELEASE);\r
28}\r
29\r
30UINT32 VirtualToPhysical(UINT32 Virtual)\r
31{\r
32 FILE *log=fopen("\\logger1.txt","w");\r
33\r
34 fprintf(log,"virtual: 0x%lx\n",Virtual);\r
35 UINT32 mmu=(UINT32)read_mmu();\r
36// mmu=0xa0000000;\r
37 fprintf(log,"mmu: 0x%lx \n",mmu);\r
38\r
39 UINT32 AdrFirstLevDesc=(mmu&0xffffc000)+((Virtual>>18)&0xfffffffc);\r
40 fprintf(log,"AdrFirstLevDesc: 0x%lx \n",AdrFirstLevDesc);\r
41\r
42 UINT32 FirstLevDesc=ReadPhysical(AdrFirstLevDesc);\r
43 fprintf(log,"FirstLevDesc: 0x%lx \n",FirstLevDesc);\r
44\r
45 \r
46 if(0)\r
47 {\r
48 fprintf(log,"Page\n");\r
49 UINT32 PhysAddr=(FirstLevDesc&0xfff00000)+(Virtual&0xfffff);\r
50 fprintf(log,"Physical address: 0x%lx \n",PhysAddr);\r
51 fclose(log);\r
52 return PhysAddr;\r
53 }\r
54\r
55 if(FirstLevDesc&0x3==3) // tiny page\r
56 {\r
57 fprintf(log,"Tiny page\n");\r
58 UINT32 AdrSecondLevDesc=(FirstLevDesc&0xfffff000)+((Virtual>>8)&0xffc);\r
59 fprintf(log,"AdrSecondLevDesc: 0x%lx \n",AdrSecondLevDesc);\r
60\r
61 UINT32 SecondLevDesc=ReadPhysical(AdrSecondLevDesc);\r
62 fprintf(log,"SecondLevDesc: 0x%lx \n",SecondLevDesc);\r
63 \r
64 UINT32 PhysAddr=(SecondLevDesc&0xffffc000)+(Virtual&0x3ff);\r
65 fprintf(log,"Physical address: 0x%lx \n",PhysAddr);\r
66 fclose(log);\r
67 return PhysAddr;\r
68 }\r
69// if(FirstLevDesc&0x3==3) // small page\r
70 {\r
71 fprintf(log,"Else page\n");\r
72 UINT32 AdrSecondLevDesc=(FirstLevDesc&0xfffffc00)+((Virtual>>10)&0x03fc);\r
73 fprintf(log,"AdrSecondLevDesc: 0x%lx \n",AdrSecondLevDesc);\r
74\r
75 UINT32 SecondLevDesc=ReadPhysical(AdrSecondLevDesc);\r
76 fprintf(log,"SecondLevDesc: 0x%lx \n",SecondLevDesc);\r
77\r
78 UINT32 PhysAddr=(SecondLevDesc&0xffff0000)+(Virtual&0xffff);\r
79 fprintf(log,"Physical address: 0x%lx \n",PhysAddr);\r
80 fclose(log);\r
81 return PhysAddr;\r
82\r
83 }\r
84}\r
85\r
86\r
87\r
88\r
89\r
90\r
91void DumpMMU()\r
92{\r
93 void *mmu=(void*)(MEM_START);\r
94\r
95 UINT32 *_mmu=(UINT32*)VirtualAlloc((void*)0x0,sizeof(void*)*0xffff, MEM_RESERVE,PAGE_READWRITE);\r
96 int ret=VirtualCopy(_mmu,(void *) ((UINT32)mmu/256),sizeof(void*)*0xffff , PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL);\r
97\r
98 FILE *log=fopen("\\logger2.txt","w");\r
99 fprintf(log,"mmu_table=0x%lx : \n",_mmu);\r
100 fprintf(log,"mmu=0x%lx : \n",mmu);\r
101 fprintf(log,"ret=0x%x : \n",ret);\r
102 for(UINT32 z=0;z<=0x0100;z++)\r
103 fprintf(log,"mmu_table[0x%x]=0x%lx: \n",z,_mmu[z]);\r
104 fclose(log);\r
105 return;\r
106}\r
Impressum, Datenschutz