]>
cvs.zerfleddert.de Git - linexec-j720/blob - memory.cpp
4 //#include <aygshell.h>
8 UINT32
ReadPhysical(UINT32 adr
)
10 UINT32 base
= adr
&0xffff0000;
11 UINT32 offset
=adr
&0x0000ffff;
12 UINT32
*p
=(UINT32
*)VirtualAlloc(0,0x10000,MEM_RESERVE
,PAGE_READWRITE
);
13 if(!p
) return 0xFFFFFFFF;
14 if(!VirtualCopy((void*)p
,(void*)(base
/256),0x10000,PAGE_READWRITE
|PAGE_NOCACHE
|PAGE_PHYSICAL
)) return 0xFFFFFFFF;
15 UINT32 val
=p
[offset
/4];
16 VirtualFree(p
,0,MEM_RELEASE
);
20 void WritePhysical(UINT32 adr
,UINT32 val
)
22 UINT32 base
= adr
&0xffff0000;
23 UINT32 offset
=adr
&0x0000ffff;
24 UINT32
*p
=(UINT32
*)VirtualAlloc(0,0x10000,MEM_RESERVE
,PAGE_READWRITE
);
25 VirtualCopy((void*)p
,(void*)(base
/256),0x10000,PAGE_READWRITE
|PAGE_NOCACHE
|PAGE_PHYSICAL
);
27 VirtualFree(p
,0,MEM_RELEASE
);
30 UINT32
VirtualToPhysical(UINT32 Virtual
)
32 FILE *log
=fopen("\\logger1.txt","w");
34 fprintf(log
,"virtual: 0x%lx\n",Virtual
);
35 UINT32 mmu
=(UINT32
)read_mmu();
37 fprintf(log
,"mmu: 0x%lx \n",mmu
);
39 UINT32 AdrFirstLevDesc
=(mmu
&0xffffc000)+((Virtual
>>18)&0xfffffffc);
40 fprintf(log
,"AdrFirstLevDesc: 0x%lx \n",AdrFirstLevDesc
);
42 UINT32 FirstLevDesc
=ReadPhysical(AdrFirstLevDesc
);
43 fprintf(log
,"FirstLevDesc: 0x%lx \n",FirstLevDesc
);
48 fprintf(log
,"Page\n");
49 UINT32 PhysAddr
=(FirstLevDesc
&0xfff00000)+(Virtual
&0xfffff);
50 fprintf(log
,"Physical address: 0x%lx \n",PhysAddr
);
55 if(FirstLevDesc
&0x3==3) // tiny page
57 fprintf(log
,"Tiny page\n");
58 UINT32 AdrSecondLevDesc
=(FirstLevDesc
&0xfffff000)+((Virtual
>>8)&0xffc);
59 fprintf(log
,"AdrSecondLevDesc: 0x%lx \n",AdrSecondLevDesc
);
61 UINT32 SecondLevDesc
=ReadPhysical(AdrSecondLevDesc
);
62 fprintf(log
,"SecondLevDesc: 0x%lx \n",SecondLevDesc
);
64 UINT32 PhysAddr
=(SecondLevDesc
&0xffffc000)+(Virtual
&0x3ff);
65 fprintf(log
,"Physical address: 0x%lx \n",PhysAddr
);
69 // if(FirstLevDesc&0x3==3) // small page
71 fprintf(log
,"Else page\n");
72 UINT32 AdrSecondLevDesc
=(FirstLevDesc
&0xfffffc00)+((Virtual
>>10)&0x03fc);
73 fprintf(log
,"AdrSecondLevDesc: 0x%lx \n",AdrSecondLevDesc
);
75 UINT32 SecondLevDesc
=ReadPhysical(AdrSecondLevDesc
);
76 fprintf(log
,"SecondLevDesc: 0x%lx \n",SecondLevDesc
);
78 UINT32 PhysAddr
=(SecondLevDesc
&0xffff0000)+(Virtual
&0xffff);
79 fprintf(log
,"Physical address: 0x%lx \n",PhysAddr
);
93 void *mmu
=(void*)(MEM_START
);
95 UINT32
*_mmu
=(UINT32
*)VirtualAlloc((void*)0x0,sizeof(void*)*0xffff, MEM_RESERVE
,PAGE_READWRITE
);
96 int ret
=VirtualCopy(_mmu
,(void *) ((UINT32
)mmu
/256),sizeof(void*)*0xffff , PAGE_READWRITE
|PAGE_NOCACHE
|PAGE_PHYSICAL
);
98 FILE *log
=fopen("\\logger2.txt","w");
99 fprintf(log
,"mmu_table=0x%lx : \n",_mmu
);
100 fprintf(log
,"mmu=0x%lx : \n",mmu
);
101 fprintf(log
,"ret=0x%x : \n",ret
);
102 for(UINT32 z
=0;z
<=0x0100;z
++)
103 fprintf(log
,"mmu_table[0x%x]=0x%lx: \n",z
,_mmu
[z
]);