Software'owo? Licząc cykle pracy procesora i synchronizując z cyklami pracy ULA
Przebiegi rastra (czyli sposób wyświetlania ekranu przez ULA) są do znalezienia choćby u nas na forum i pokazują ile cykli procesora zajmuje każdy z elementów ekranu a z tego wprost można sobie wyciągnąć informację w którym punkcie na ekranie które dane są pobierane. Pewnie da się na to zrobić jakieś funkcje przeliczające tak, żeby odpowiednio generować wirtualny zegar dla procesora i wszystko ze sobą synchronizować.
Jeśli faktycznie chcesz zrobić porządny emulator Spectrum, to sugeruję na początek poczytać o tym, co dokładnie tam siedzi w środku. Świetnym materiałem jest to:
http://www.amazon.co.uk/ZX-Spectrum-Ula-Microcomputer/dp/0956507107 W książce są rozrysowane wszystkie bloki funkcjonalne ULA z dokładnym wyjaśnieniem, wykresami przebiegów pracy itp. Poza wszystkim innym jest to świetna lektura, a do pisania emulatora moim zdaniem nieodzowna. Choć można poszukać materiałów w innych miejscach - timingi są objaśniane w wielu miejscach mniej lub bardziej zrozumiale. Można też podejrzeć w źródłach u "konkurencji", ale to trochę niesportowo
Szczerze powiedziawszy ja bym się nie rzucił na pisanie emulatora właśnie głównie dlatego, że wiem jak to wszystko działa i wiem na ile skomplikowanym projektem jest zgranie tego wszystkiego do kupy tak, żeby działało jak należy
A średnich emulatorów jest do ściągnięcia od metra i troszeczkę