Autor ::Vldo Poslaná :: 09.07.2009 22:02:11 Predmet ::Rychlost emulace
Ahojky, docela by me zajimalo, jak mate ve svem emulatoru vyresenu rychlost emulace. Jde o to, ze snahou dobreho emulatoru je i emulace rychlosti skutecneho PMD, tedy 2.048MHz... ale kazde PC, na kterem emulator pobezi, je jinak rychle...
dotaz tedy zni: Jak zajistujete tu spravnou rychlost emulace?
Správa
Autor ::Roman Bórik Poslaná :: 10.07.2009 08:59:48 Predmet ::Re: Rychlost emulace
Už som to tu myslím vo fóre kedysi dávno spomínal.
"Na pozadí" beží presný multimédia timer, v ktorom sa vykonáva všetko, čo je potrebné, aby bolo správne načasované. Timer sa spúšťa každých niekoľko milisekúnd. Pôvodne to bolo každých 20ms, ale keď sme začali laborovať s ovládaním reálneho HW cez LPT (napr. BT 100), tak sa ukázalo, že ten interval je príliš dlhý. V súčasnosti je ten interval dlhý iba 1 ms.
Samotná emulácia i8080 funguje tak, že sa v obsluhe Timera vykoná toľko T-cyklov, koľko by sa ich reálne vykonalo za 1ms, čo je pri 2,048MHz 2048 T. Samozrejme, nie je to tak presne, pretože inštrukcie trvajú rôzne dlho a pochopiteľne sa to nedá presne "napasovať", tak sa robia rôzne "korekcie". Podstatné ale je, že PC vykoná tých 2048 T za zlomok tej 1 ms a to, koľko to z tej 1 ms zabralo, informuje veľmi-veľmi približne ten percentuálny údaj na dolnej lište. Približne preto, že to zahŕňa aj ďalšie "drobnosti okolo".
Takže z uvedeného vyplýva, že (takmer) nezáleží na rýchlosti samotného PC a rýchlosť emulovaného i8080 bude v podstate stále rovnaká. Samozrejme, ak by bolo PC veľmi pomalé, interval 1ms by mohol byť vážny problém, pretože PC by za tú 1ms nemusel stihnúť vykonať zodpovedajúci počet T-cyklov a tým by sa emulácia "zadrhávala" a PC by bolo zrejme vyťažené na 100%.