Hi,
congratulations with this project, it seems really interesting to see how far Harbour can stretch its capabilities.
I went to have a look at the code and saw some things that - my idea - make the program slower.
First of all, the use of classes. Classes are great, I use them as much as I can, but how they are implemented in harbour, due to the dynamic nature of the language, are not quick. Not at all compared to c++ and other static languages.
If you have only one instance of a class, you may try to change the source code in a module with STATIC variables and functions instead of DATA and METHODS... Harbour should invoke them quicker.
Then I went to cpu.prg and saw your tests for handling cpu instructions. The go implementations uses a table of function pointers. It seemes like you tried to do the same thing but then opted for a standard anda probably slower DO CASE... Was the array method not working properly?
Your code is clean, easy to read and follow, well organized, and classes help a lot. Unfortunately they make the code slower.
Francesco
PS: I understand you were trying to mimick StepInfo with {address, ::PC, mode} but I think that creating a codeblock makes the code slower. You should trying to pass the parameters as
::nop( address, ::PC, mode )