> void WriteToRAM(int addr,int byte)
Wenn du auf Geschwindigkeit aus bist, solltest du erst mal damit
anfangen die richtigen Datentypen zu benutzen.
Der Datentyp mit dem man Bytes beschreibt ist unsigned char und nicht
int. Du arbeitest auf einem PC, da wird ein int bei dir wahrscheinlich 4
Bytes gross sein und nicht 1 Byte.
D.h. bei der Zuweisung
memory[addr] = byte;
werden in Wirklichkeit 4 Bytes bewegt (wenn memory ebenfalls als array
of int definiert wurde). Damit macht dein Programm schon viel zu viel.
Adressen können per Definition nicht negativ sein. Wie gross ist
eigentlich der Speicher den du simulieren willst? Ist das ein 16 Bit
Adressraum oder ein 32 Bit Adressraum.
Je nachdem und je nach deinem Compiler ist der richtige Datentyp um eine
Adresse darzustellen entweder unsigned short oder unsigned int oder
unsigned long. Auf jeden Fall aber unsigned.
-> Fazit
Wenn du gerade erst angefangen hast zu programmieren, dann ist die
Emulation eines anderen Computers so ziemlich das ungünstigste Projekt,
welches du dir aussuchen konntest. Um so etwas zuverlässig und schnell
hinzukriegen muss man schon eine Menge in C können, ansonsten erleidet
man unweigerlich Schiffbruch. Gerade bei solchen Projekten muss man
nämlich die üblichen Richtlinien guten Programmierens des Öfteren mal
über Bord werfen um auf Speed zu kommen. Dafür sollte man einen kleinen
Sack schmutziger Tricks kennen, die zwar so ziemlich gegen alle guten
Programmierstile verstossen aber in diesem Gewerbe einfach unabdingbar
sind. Zb wird man die Schreibfunktion als MAKRO definieren, damit der
Funktionsoverhead wegfällt. Wenn man Block-Kopieren implementiert,
benutzt man zb 'Duffs Device' und schmutzige Casts um die HauptCPU dazu
zu bringen in einem Rutsch möglichst viele Daten zu bewegen, sofern
memcpy das nicht sowieso von sich aus erledigt.
Stell erst mal deine Datentypen richtig, so dass die CPU nicht unnötige
Zyklen einlegt und dann lebe mit der Geschwindigkeit. Und in etwa einem
Jahr holst du das Projekt wieder raus und arbeitest das ein, was du in
der Zwischenzeit gelernt hast.