Op 21 maart 2018 20:06:23 schreef benleentje:
Daar is inderdaad de wait input voor speciaal voor trage gasten op de data bus .
Maar dan nog zal een Arduino toch 16 x keer zo snel zijn. Als ik even aanneem dat een Z80 op 1Mhz draait. Hoewel ik niet weet hoe snel zijn interne verwerking is qua machine cycles.
De kristalfrequentie van de Microprofessor is 3.58 MHz, de Z80 loopt op de halve frequentie daarvan meen ik. De cyclustijd is niet bijzonder hoog aangezien de instructies niet in 1 cycle uitgevoerd worden maar een Atmel 328 zal dat niet in realtime (vanuit C al helemaal niet) bij kunnen benen. (ooit een ROM emulator gemaakt met een NXP ARM chip op 48 100 MHz (LPC1769) voor een 8048 CPU, Videopac spelcomputer, en die kon het net redden met de interrupt routine in assembler. Cyclus tijd was 1,75 microsec.)
De WAIT ingang zou je kunnen gebruiken om de toegangstijd flink te verlengen. Ik weet zo niet of die bereikbaar is op de microprofessor.
Een cpu zoals Z80 gooit in een machine cycle het adres op de adres bus en zal pas in een klok puls later de data inlezen. Een gewone ramchip moet ook eerst het adres decoderen en daarna de juiste byte locatie aansturen en dan het op de databus zetten.
Een gewone SRAM chip kan zoiets in 50 tot 250 ns afhankelijk van de snelheidsaanduiding, daar hoeft de Z80 niet voor in de wacht.
Cache ram chips zijn nog sneller maar verbruiken meer energie.
Om dat met een processor te emuleren moet je dus wachten tot de leesopdracht op de bus verschijnt, dan de adresbus uitlezen (hoeveel adres bits kun je inlezen?), het adres decoderen om te zien of het een adres in de ge-emuleerde romspace is, de bijbehorende byte ophalen je ge-emuleerde databus op het juiste moment in schrijfmodus zetten en de byte uitgeven, dan de bus weer vrijgeven etc. Dit zijn een hele lading instructies in C en zelfs nog in assembler.
De Z80 gooit daar tussendoor ook nog refresh en IO adressen op dezelfde adres bus.