von SimonLothar » Di 30. Nov 2010, 07:55
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.