The SBC-85 Bus Monitor includes LEDs for the traditional binary display of the system's 16-bit address bus and 8-bit data bus. Because I sometimes think faster in hexadecimal rather than binary (and sometimes vice-versa), I wanted to have not only binary display but a decoded hexadecimal display of the address and data byte. The bus signals are also brought out to LEDs (towards the left side of the board) visible past a standard 100mm x 100mm card like the SBC-85 CPU. All bus signals are buffered to minimize loading of the backplane.
To make the bus monitor more useful as a diagnostic tool, I also included a single step mode and 'step' button. In addition, sometimes it is annoying to have to single step while watching code so there is an onboard pulse generator (555 timer) to generate a 'step' pulse train. A finger potentiometer allows easy adjustment of the step rate from 60Hz down to about 0.5Hz. Finally, an onboard port allows the user to programmatically control the step by disabling the step function during boring portions of the code and re-enabling during the portions of interest.
An added feature of the step is the ability for the user to select what type of machine state is used to trigger a stopping point for the step. For example, the step can be configured to step from port output to port output, memory read to memory read, opcode fetch to opcode fetch, etc. This is a tremendous tool, for example, to focus on the portions of the code that are writing to IO ports, or reading from memory, etc. The choice of what type of machine state is used can be set by an onboard rotary switch and the choice is shown by illuminating a LED representing that specific machine cycle type.
The board actually consumes four I/O ports with the base port being a configuration port with items such as the step over-ride and a speaker toggle. Additionally, a set of jumpers determines if the onboard rotary switch sets the machine type filter or if these are set via software control. The upper three ports allow the user to set breakpoints for the low and high address bytes as well as the data byte.
Breakpoint matching is a great diagnostic tool usually reserved for in-circuit emulators and CPU monitors like the Intel uScope 820. On this bus monitor the user can write match values to the three registers and then individually enable or disable the breakpoints via software. For example, it may be handy to break anytime a given data byte is placed onto the data bus, or anytime the most significant byte of the address matches a value (or, optionally is greater than a value). Or possibly limit the breakpoint to when a specific address is placed on the bus. All possible with this bus monitor.