Before going deep into Vinace, here are some general principles as an introduction.
Existing emulators have an old, not very convenient, graphical interface (no use of mouse, command line to change disks).
Existing emulators are written in a performance purpose and not a comprehension or modular purpose.
Existing emulators are monolithics, not close enough to the original design and so not easy to make evolve.
I wanted to develop a not to difficult project to get back into C++.