It was thus said that the Great Eric Christopherson via cctalk once stated: > On Tue, Feb 20, 2018 at 5:30 PM, dwight via cctalk <[email protected]> > wrote: > > > In order to connect to the outside world, you need a way to queue event > > based on cycle counts, execution of particular address or particular > > instructions. This allows you to connect to the outside world. Other than > > that it is just looking up instructions in an instruction table. > > > > Dwight > > > > What I've always wondered about was how the heck cycle-accurate emulation > is done. In the past I've always felt overwhelmed looking in the sources of > emulators like that to see how they do it, but maybe it's time I tried > again.
It depends upon how cycle accurate you want. My own MC6809 emulator [1] keeps track of cycles on a per-instruction basis, so it's easy to figure out how many cycles have passed. Hardware emulation can be done between instructions by updating per the number of cycles passed (if required). I don't have the code for the MC6840 (a timer chip) in my MC6809 emulator repository (it's still somewhat under construction) but I do update the timer based upon the elapsed cycle count of the previous instruction [2]. -spc (Code available upon request if you want to look at it) [1] https://github.com/spc476/mc6809 [2] It's not emulating any existing machine. Rather, I'm emulating a system with a few serial ports (MC6850) and a few timer chips (MC6840). I have plans on adding a few floppy controllers (MC6843) and a DMA chip (6844).
