KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Slim Memory
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Huhu Tongue
Ich habe 2 Frage und will mich kurz fassen Big Grin
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 ;-)

Chaosduckman :
Huhu Tongue
Ich habe 2 Frage und will mich kurz fassen Big Grin
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.

Das mit dem nur im Kernel Mode erreichbar sollte sich widerlegen lassen:

Code:
/**
* 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 ;-)

Chaosduckman :
Das mit dem nur im Kernel Mode erreichbar sollte sich widerlegen lassen:

Code:
/**
* 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.

Code:
sctrlHENSetMemory(52, 0);


schreibst, ist P2 52Mbs groß, wärend P8 nicht mehr wirklich existiert.
Die Änderungen werden beim nächsten Kernel Reboot übernommen.

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 Tongue )

Aber Danke für dein Code Beispiel Big Grin

Chaosduckman :
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 Tongue )

Aber Danke für dein Code Beispiel Big Grin


Tja, Sony hat halt ne Schraube locker^^
Ich glaube die wollten die PSP nur teuerer machen, und haben deshalb mehr RAM eingebaut^^

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

Zitat:
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.

Zitat:
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.

@HacKmaN: Recht hast du Tongue

Chaosduckman :
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?

Klar Big Grin
C++:

Code:
sceKernelSetDdrMemoryProtection( reinterpret_cast<void*> (0x0A000000), Size in Bytes in Hex, 0xF );


C:

Code:
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^^

Referenz-URLs