]>
Commit | Line | Data |
---|---|---|
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 | |
8 | UINT32 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 | |
20 | void 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 | |
30 | UINT32 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 | |
91 | void 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 |