The first one I put in is for the VM itself. I was previously writing text to the console based on what instructions were being processed by the VM. As time went on, I realized that this was going to have to turn into an on the fly disassembly.
So, the first event is a debug output event. This allows me to have multiple subscribers to an individual machines debug output.
The second event is a register listener. Whenever a register's value is set(not necessarily changed, just set), it's subscribers can know about it.
Together, these allow me to set up some sort of debug console, but doesn't lock me into a particular way of debugging, which is neat.
Finally, I added events to the memory addresses. And here is where I am starting to run into a minor issue that I am yet to resolve. Listening to an address being set is effectively allowing outside object to take the role that memory mapped hardware used to in actual MC6809E machines, where setting a value to a particular address would cause a signal to some other hardware.