Im 8085-Mikroprozessor stehen 64 kb Speicher zur Verfügung, von denen einige dem ROM zugewiesen sind, während andere dem RAM zugewiesen sind. Meine Frage ist, warum wird das ROM im 8085-Mikroprozessor immer einem unteren Bereich der Speicherzuordnung zugeordnet?
Der 8085 benötigt ROM als niedrigste Speicheradresse, da er nach einem Reset versucht, einen Befehl von Speicherplatz 0 abzurufen. Wenn an dieser Adresse RAM vorhanden wäre, würde der Prozessor zufällige Daten abrufen und das Programm nicht starten.
Wenn der 8085 hochfährt, beginnt er mit dem Abrufen von Anweisungen von der Adresse Null. Es ist also erforderlich, dass der dort befindliche Speicher definierte Inhalte enthält. Das bedeutet jedoch nicht, dass Adresse Null permanent auf ROM abgebildet werden muss. Man könnte ein System mit z. B. 2 K ROM, 64 K RAM und einem Diskettenlaufwerk bauen und ein E/A-Bit verwenden, um zu steuern, ob Speicherlesevorgänge vom ROM oder vom RAM kommen. Lassen Sie beim Start alle Lesevorgänge aus dem ROM kommen (Schreibvorgänge gehen unabhängig vom Steuerbit in den RAM) und lassen Sie das ROM-Programm sich selbst in den RAM kopieren. Aktivieren Sie dann das Lesen aus dem RAM und laden Sie die Software von der Diskette. Da der untere Teil des Adressraums RAM wäre, wäre Software, die von Diskette geladen wird, in der Lage, Interrupt-Vektoren für ihre eigenen Zwecke einzurichten – etwas, das nicht möglich wäre, wenn ROM immer noch dort abgebildet wäre.
Ich weiß, das ist alt, aber hier, aus der Erinnerung. Soweit ich mich erinnere, hatten die 8080 und 8085 normalerweise eine von Designern verwendete Hardwareschaltung, die aus einem einzigen Gatter bestand, das den Speicher nach drei Taktsignalen neu zuordnete - gerade genug, um einen JMP-Befehl auszuführen. Die ersten Speicherstellen bei 0:0 kamen also von einem EPROM, und das Gate tauschte das EPROM mit dem RAM im 4. Taktzyklus um 0:0. Das ist aus meiner Erinnerung vor 30 Jahren. Ich würde nach Starthardwareschaltungen für 8085-Selbstbaucomputer suchen - ich vermute, sie sind dort.
Das ROM wird im 8085-Mikroprozessor immer im unteren Bereich der Speicherkarte abgebildet, da nach dem Zurücksetzen versucht wird, eine Anweisung von Position o abzurufen. Wenn zu diesem Zeitpunkt die Adresse RAM vorhanden war, holt der Prozessor zufällige Daten und würde das Programm nicht starten. Also ROM nicht in andere Region verschoben.
David Tweed
LDIR
ist eine Z80-Anweisung und existiert nicht auf dem 8085.Superkatze
MOV A,M / MOV M,A / INC L / JNZ / DEC H / JP
oder besser, eine Schleife vonPOP / PUSH / POP
Anweisungen zu verwenden (ich weiß nichts über 8085-Timings, aber auf dem Z80 wäre die frühere Sequenz 10 Bytes und etwa 28 Zyklen/Byte kopiert, oder 13 Bytes und 23/Byte, wenn es 2x entrollt wird; letzteres würde 11 Bytes und etwa 22 Zyklen/Byte kopieren, wenn es nicht entrollt wird, oder 14 Bytes und 18,5 Zyklen/Byte, wenn es 2x entrollt wird)Superkatze
David Tweed
David Tweed
Superkatze
MOV B,B
oderMOV C,C
würde die Basis des oberen oder unteren verschiebbaren Bereichs auf das letzte abgerufene Wort setzen, das um zwei verschoben ist.MOV A,A
würde die verschiebbare Basis auf ihre Standardeinstellung setzen. Wenn man also auf Byte 4 eines Objekts zugreifen wollte...Superkatze
mov A,A / lda 80A0h / mov B,B / lda 8004h
. Somit wird der Zugriff auf Objekte in einem 256-K-Adressraum schneller als der Zugriff selbst in einem 64-K-Adressraum normalerweise erfolgen würde. Ich habe etwas ähnliche (wenn auch einfachere) Tricks auf einer Atari 2600-Spielekassette gemacht (die 13 Adresskabel, 8 Datenkabel, Strom, Masse und NICHTS ANDERES von der CPU erhält), sodass ich ein HIRES-Pixel an der Koordinate X zeichnen konnte ,Y einer passend angeordneten Bitmap überLDA $7F00,X / ORA $7E00,Y / STA $7E00,Y
.