Seite 1 von 4

Main-Memory auslesen

BeitragVerfasst: Mo 29. Nov 2010, 19:16
von Paul94
Hi!

Ich bräuchte mal die nötigen Syscalls um eine ASCIIZZ-Liste des Main-Memory zu erstellen.

Paul

Re: Main-Memory auslesen

BeitragVerfasst: Di 30. Nov 2010, 07:55
von SimonLothar
Für die Enumeration(FindFirst/FindNext) des main memories sind mir keine syscalls bekannt.
Man muss hier von der bisher in allen OSes(1.02 bis 2.00) unveränderten main memory Startadresse 0x88030100 ausgehen. Ebenso unverändert war bisher die maximale Anzahl an Einträgen (0x93).

Zunächst einmal die Liste der Hauptdirectoryeinträge, die ein Array des Typs TMCSDirEntry ist:

TMCSDirEntry MMDir[0x93];

typedef struct {
unsigned char name[8];
TMCSItem*addr;
short itemcount;
short wossname;
} TMCSDirEntry;

// zeiger auf den start des main memory directories
start = (TMCSDirEntry*)0x88030100;

// maximale anzahl der main memory directory einträge
count = 0x93;

TMCSDirEntry.addr zeigt auf die Elemente eines main memory directory eintrags
(z. B. die Programme im main memory directory "@system")

TMCSDirEntry.itemcount gibt die Anzahl der Elemente eines main memory directory eintrags wieder

Ein Element ist folgendermaßen aufgebaut:

typedef struct {
unsigned char name[8];
int offset;
int length;
char flags[4];
} TMCSItem;

offset verweist dabei auf den eigentlichen Dateiinhalt.
length ist die Länge der Datei.

Warnung: schreibe niemals in das Main Memory unter Verwendung der Addressen, die die oben angegebene Enumeration zurückgibt! Wenn Du die Adressen zum Lesen verwendest, musst Du wissen, dass bei einem Aufruf einer anderen App über MAIN MENU die Inhalte des Main Memories verschoben werden könnten. Wenn Du dann wieder in Deine "Main Memory"-App zurückspringst, dann stimmen ggf. die zuvor ermittelten Adressen nicht mehr.

Für die eigentliche Bearbeitung des main memories gibt es syscalls, die auch im SDK verwendet werden.
Ich mach jetzt aber erst mal Schluss. Melde Dich, wenn Du mehr Info brauchst.

Re: Main-Memory auslesen

BeitragVerfasst: Di 30. Nov 2010, 08:21
von Paul94
Auf dem Main-Memory werden doch für jedes App neue Ordner erstellt. Ich brauche nur die Dateien, die in meinem Ordner liegen, wie kann ich das eingrenzen?

Re: Main-Memory auslesen

BeitragVerfasst: Di 30. Nov 2010, 08:47
von SimonLothar
Dazu musst Du das main memory directory durchlaufen bis Du in TMCSDirEntry.name den Directorynamen Deiner Applikation findest. Das ist "@" + Addin-Name. Der letzte Buchstabe von Addin-Name wird dabei ggf. abgeschnitten.

TMCSDirEntry.addr zeigt Dir dann den Weg zu den Dateien Deiner Anwendung. TMCSDirEntry.itemcount gibt die Anzahl dieser Dateien zurück.

Re: Main-Memory auslesen

BeitragVerfasst: Di 30. Nov 2010, 16:31
von cfxm

Re: Main-Memory auslesen

BeitragVerfasst: Di 30. Nov 2010, 16:46
von Paul94
Hi!

Ich habe mit Bfile_CreateMainMemory nun eine Datei erzeugt, aber mit Bfile_OpenMemory kann ich sie nicht öffnen. Das zurückgegebene Handle ist immer negativ? Der Dateiname ist der richtige, woran kann das liegen?

Re: Main-Memory auslesen

BeitragVerfasst: Mi 1. Dez 2010, 07:38
von SimonLothar

Re: Main-Memory auslesen

BeitragVerfasst: Mi 1. Dez 2010, 07:43
von SimonLothar

Re: Main-Memory auslesen

BeitragVerfasst: Mi 1. Dez 2010, 17:22
von Paul94

Re: Main-Memory auslesen

BeitragVerfasst: Mi 1. Dez 2010, 17:47
von cfxm