000
11.06.2018, 14:35 Uhr
Early8Bitz
|
Hallo,
mal eine spezielle Frage zum Bustiming der Z80-/U880-CPU bei HALT.
So richtig habe ich zu meiner Frage nichts gefunden, aber schlagt mich bitte nicht so toll, wenn ich's bei der Suche übersehen habe.
Wenn die CPU einen HALT-Befehl ausführt (Opcode 76h), dann passiert ja lt. Manual der CPU Folgendes:
************ Whenever a software halt instruction is executed the CPU begins executing NOP's until an interrupt is received (either a nonmaskable or a maskable interrupt while the interrupt flip flop is enabled). The two interrupt lines aresampled with the rising clock edge during each T4 stateas shown in figure 4.0-7. If a non maskable interrupt has been received or a maskableinterrupt has been received and the interrupt enable flip-flop is set, then the halt state will be exited on the next rising clockedge. The following cycle will then be an interrupt acknowledge cycle corresponding to the type of interrupt that was received. If both are received at this time, then the nonmaskable one will beacknowledged since it has highest priority.
The purpose of executing NOP instructions while in the halt state is to keep the memory refresh signals active.
Each cycle in the halt state is a normal M1 (fetch) cycle except that the data received from the memory is ignored and a NOP instruction is forced internally to the CPU.
The halt acknowledge signal is active during this time to indicate that the processor is in the halt state. ************
Das ist erst mal ziemlich eindeutig beschrieben. Was mich jetzt interessiert, ist, welche Adresse liegt während der M1-Zyklen, die zum Aufrecht erhalten des Memory Refreshs während des HALTs ausgeführt werden, während T1 und T2 auf A0..A15. Im Text steht nur, dass das, was da vom Speicher gelesen wird, ignoriert und durch interne NOPs ersetzt wird.
Drei Möglichkeiten fallen mir da ein: 1.) Konstant die Adresse, auf der der HALT Befehl steht 2.) Konstant die Adresse unmittelbar nach dem Halt Befehl 3.) eine bei jedem M1 respektive internen NOP weitergezählte Adresse.
Möglichkeit 2.) wäre damit zu erklären, dass ja nach Ausführung jedes Befehls der PC auf die Adresse des nächsten zu lesenden Befehls zeigt. Nach Ausführg des HALT Befehls steht der PC also auf PC(halt)+1. Die Adresse unmittelbar nach dem HALT Befehl ist ja auch die Adresse, die im Falle eines (den Halt beendenden Interrupts) beim Int-Ack. auf den Stack gelegt und beim RETN oder RETI in den PC zurück geholt wird und das Programm dort normal fortgesetzt wird.
Möglichkeit 3.) wäre eigentlich ähnlich zu erklären, aber mit der Betrachtung, dass auch nach jedem intern ausgeführten NOP ja ein Befehl ausgeführt wurde und somit gelten müsste PC=PC+1. Somit würde auf dem Adressbus die Adresse fortlaufend hoch bzw. im Kreis gezählt werden.
Hat das von Euch schon mal einer genauer gelesen oder mit einem Logikanalyzer oder Oszi näher untersucht? -- Gruß Ralf
Ist ein alter Schaltkreis ein Schaltgreis? Dieser Beitrag wurde am 11.06.2018 um 14:36 Uhr von Early8Bitz editiert. |