|
Verfasser |
Nachricht |
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
Slim Memory
Huhu
Ich habe 2 Frage und will mich kurz fassen
Ist 0x0A000000 die statische Addresse zu den extra 32 Mbs der Slim?
Ist der Speicherbereich User oder Kernel Space?
Ich bin im Web auf wiedersprüchliche Aussagen gestoßen,
deshalb hoffe ich das mir hier jemand diese beiden Fragen mit "an Sicherheit grenzender Warscheinlichkeit" beantworten kann ;-)
|
|
12.11.2010 13:46 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Slim Memory
Huhu
Ich habe 2 Frage und will mich kurz fassen
Ist 0x0A000000 die statische Addresse zu den extra 32 Mbs der Slim?
Ist der Speicherbereich User oder Kernel Space?
Ich bin im Web auf wiedersprüchliche Aussagen gestoßen,
deshalb hoffe ich das mir hier jemand diese beiden Fragen mit "an Sicherheit grenzender Warscheinlichkeit" beantworten kann ;-)
1. Ja, 0x0A000000 ist die Start-Adresse der extra 32Mbs.
2. IIRC sind sind diese Adressen nur im KernelMode erreichbar.
|
|
12.11.2010 14:22 |
|
Folgende User bedanken sich: |
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Slim Memory
Das mit dem nur im Kernel Mode erreichbar sollte sich widerlegen lassen:
/**
* Sets the partition 2 and 8 memory for next loadexec.
*
* @param p2 - The size in MB for the user partition. Must be > 0
* @param p8 - The size in MB for partition 8. Can be 0.
*
* @returns 0 on success, < 0 on error.
* This function is only available in the slim. The function will fail
* if p2+p8 > 52 or p2 == 0
*/
int sctrlHENSetMemory(u32 p2, u32 p8);
Weiß aber nicht ob die Funktion funktioniert ;-)
|
|
12.11.2010 17:48 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Slim Memory
Das mit dem nur im Kernel Mode erreichbar sollte sich widerlegen lassen:
/**
* Sets the partition 2 and 8 memory for next loadexec.
*
* @param p2 - The size in MB for the user partition. Must be > 0
* @param p8 - The size in MB for partition 8. Can be 0.
*
* @returns 0 on success, < 0 on error.
* This function is only available in the slim. The function will fail
* if p2+p8 > 52 or p2 == 0
*/
int sctrlHENSetMemory(u32 p2, u32 p8);
Weiß aber nicht ob die Funktion funktioniert ;-)
Diese Funktion wird von der Systemctrl (ein CFW Modul) per Syscall Modus exportiert, und ist damit für User Module benutzbar. Ich hab mit meiner Aussage gemeint dass man die extra-32-Mbs nicht per Zeiger erreichen kann, und auf OFWs ist es für User Module unmöglich auf den extra RAM zuzugreifen.
Die Funktion oben erlaubt, den RAM der RAM-Partitionen P2 (User 1) und P8 (??? Ich denk mal Slim Memory) aufzuteilen. Wenn du z.B.
sctrlHENSetMemory(52, 0);
schreibst, ist P2 52Mbs groß, wärend P8 nicht mehr wirklich existiert.
Die Änderungen werden beim nächsten Kernel Reboot übernommen.
|
|
12.11.2010 17:55 |
|
Folgende User bedanken sich: |
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Slim Memory
Natürlich kann man mit dem Zeiger auf den Speicherbereich zugreifen.
Davor muss man nur den Speicher mit sceKernelSetDdrMemoryProtection() "allocen".
Aber mit der OFW hast du Recht. Aber warum baut Sony extra Ram ein und benutzt davon ca. 1 MB?!
( Zumindest bei MHF )
Aber Danke für dein Code Beispiel
Dieser Beitrag wurde zuletzt bearbeitet: 12.11.2010 18:14 von Chaosduckman.
|
|
12.11.2010 18:09 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Slim Memory
Natürlich kann man mit dem Zeiger auf den Speicherbereich zugreifen.
Davor muss man nur den Speicher mit sceKernelSetDdrMemoryProtection() "allocen".
Aber mit der OFW hast du Recht. Aber warum baut Sony extra Ram ein und benutzt davon ca. 1 MB?!
( Zumindest bei MHF )
Aber Danke für dein Code Beispiel
Tja, Sony hat halt ne Schraube locker^^
Ich glaube die wollten die PSP nur teuerer machen, und haben deshalb mehr RAM eingebaut^^
|
|
12.11.2010 18:17 |
|
Folgende User bedanken sich: |
|
743acid743
Halbprofi
Beiträge: 171
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 76
|
RE: Slim Memory
Also wenn ich das richtig verstehe kann ich mit der adresse 0x0A000000,
ein databuffer dorthin laden und davon laden... Aber nur bei der slim und CFW.
oder habe ich da etz etwas missverstanden?
und wenn ja, kann ich das hochgeladene auch nach einen neustart (von vsh zu game) benutzen aus dem x-tra ram?
MfG 743acid743
|
|
12.11.2010 18:18 |
|
|
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Slim Memory
Also wenn ich das richtig verstehe kann ich mit der adresse 0x0A000000,
ein databuffer dorthin laden und davon laden... Aber nur bei der slim und CFW.
Also ich glaube schon.
und wenn ja, kann ich das hochgeladene auch nach einen neustart (von vsh zu game) benutzen aus dem x-tra ram?
Ich glaube nicht, aber schaue mal noch Volatile Memory oder hier.
Dieser Beitrag wurde zuletzt bearbeitet: 12.11.2010 18:29 von Chaosduckman.
|
|
12.11.2010 18:23 |
|
|
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Slim Memory
@HacKmaN: Recht hast du
|
|
12.11.2010 18:29 |
|
|
|
743acid743
Halbprofi
Beiträge: 171
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 76
|
RE: Slim Memory
Natürlich kann man mit dem Zeiger auf den Speicherbereich zugreifen.
Davor muss man nur den Speicher mit sceKernelSetDdrMemoryProtection() "allocen".
Könntest du das erläutern und vielleicht ein code-beispiel bringen?
|
|
12.11.2010 19:13 |
|
|
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Slim Memory
Klar
C++:
sceKernelSetDdrMemoryProtection( reinterpret_cast<void*> (0x0A000000), Size in Bytes in Hex, 0xF );
C:
sceKernelSetDdrMemoryProtection( (void*) 0x0A000000, Size in Bytes in Hex, 0xF );
Danach solltest du das ganz normal mit Memcpy und so benutzen können.
Ich habe das selbst aber noch nie versucht, also kann auch sein das es nicht Funktioniert^^
Dieser Beitrag wurde zuletzt bearbeitet: 12.11.2010 21:46 von Chaosduckman.
|
|
12.11.2010 21:43 |
|
|
|