Well, POC V2 is bolted together and when power is applied it doesn't blow. However, it also doesn't go. Resets are working, I have clocks and I do see bus activity. However, there is no visible sign of life beyond that...Some possibilities come to mind:
- Incorrect voltages at the console serial port. Tested and eliminated.
- Defective ROM. Not likely, as the EPROM burner can read and verify the ROM against the object file used as the code source. Just to be sure, I tried a different ROM.
- Defective CPLD. Programming another CPLD produces the same results, so it's unlikely there's a hardware issue with it.
- Defective QUART. Unfortunately I only ordered one, so I can't swap it for another right now.
- MPU not seeing valid code at power-on. Firmware is supposed to be mapped in at $00E000-$00FFFF at boot. It may be that it is not showing up where it should be, because:
- The firmware is burned to the wrong place in the ROM.
- The CPLD is mapping the ROM in at the wrong place.
- The CPLD is not mapping in ROM at all and the '816 is randomly executing garbage bytes in RAM as code.
- Defective MPU. Tested and eliminated. The '816 works in POC V1.1.
- Bad RAM. Nothing in the test firmware touches RAM—each fetch or store instruction is an immediate load from ROM or a write to a a QUART register.
...
Haven't updated in a while as other issues (mostly medical) have been getting in the way. However, I did make some progress.
I shipped POC V2 back to Garth so he could change out the Ø2 clock flip-flop from a 74ABT74 to a 74AC74. The 'ABT74 could not drive Ø2 all the way to Vcc and use of a pull-up resistor to force the signal up to Vcc causes the clock waveform to become somewhat trapezoidal. With the 'AC74, Ø2 now cycles between zero and 5 volts, as it should, and a nice square wave is present. So Ø2 maladies are out of the picture.
Also, I had an issue with my Ø2 single-stepper occasionally double-clocking, which I believe was being caused by a trivial switching glitch generated by the DS1813 I'm using to debounce the pushbutton. That glitch wouldn't be of any matter with a reset circuit but was definitely not to the clock flop's liking. So I ended up redesigning the gadget to use a Schmitt trigger inverter, using the following schematic:

- Clock Stepper Circuit
- clock_pulser.gif (5.37 KiB) Viewed 1230 times
After initial use of the device, I increased R2 to 22K to slow down the device to compensate for my spastic hands.
With Ø2 contretemps out of the way, I was able to make some progress in actually debugging my contraption. POC V2 is not yet at the functioning state, so it's not quite time to put on the loud music, break out the beer and start the party. However, I'm working this in stages and so far, two hurdles have been cleared.
- The first hurdle was to determine if it was possible to select the QUART and access a register. The setup was to remove the MAX248 transceiver from the socket and burn a ROM that did nothing but repeatedly perform a read on the QUART's channel A receiver FIFO. I started with this ROM by single-stepped the clock and observed that when the LDA IO_ACIA+NX_RHRA instruction was executed (RHR means "receiver holding register," which is NXP-speak for the FIFO), the QUART's /CEN (chip enable) input went low, showing that selection was occurring during Ø2 low after VDA went high, which is correct logic. At that time, RWB and /RD (read data) were also high, which is also correct—/RD is generated by the CPLD and is the expression !(RWB & Ø2).
On the next step of the clock, Ø2 was high, /CEN was still low and /RD was pulled, the latter correct for a read cycle. I noted at that time that the data bus had a random pattern on it (D0-D7 had $00 when Ø2 was low, i.e., the bank address), which would be logical, given that the FIFO would contain undefined content immediately following power-up. On the next clock step, Ø2 was again low, /RD was high and /CEN was high, which was correct. I had proved that I could complete a read cycle on the QUART. Following the single-step testing, I installed a 2 MHz oscillator (Ø2 = 1 MHz). and powered up. Observation of the relevant signals indicated that the QUART was being repeatedly selected and a read operation was being repeatedly performed.
- The second hurdle was to see what would happen with multiple writes to the channel A transmitter FIFO. I burned another ROM that wrote enough setup into the QUART to enable the transmitter and then repeatedly write $A5 into it. I also connected a second logic probe to the QUART's TxDA (channel A transmitter) output, which is a TTL-level signal output to the MAX248. TxDA is supposed to be high (mark condition) when the transmitter is enabled and quiescent, which it was right after reset. Again, I manually cycled the clock while watching /CEN and /WD (write data) as the MPU progressed.
When the STA IO_ACIA+NX_THRA instruction was executed and while Ø2 was low, VDA was high, RWB was low, /WD was high—/WD is generated by the CPLD and is the expression !(!RWB & Ø2)—and /CEN went low. All of that was correct. On the next clock step, Ø2 went high and /WD went low. At that time, I saw a brief burst of activity on the logic probe connected to TxDA, which meant the QUART had transmitted something. The pattern on D0-D7 was %10100101, which is $A5, the test value. Following the activity, TxDA returned to the mark condition, as it should.
I then replaced the single-stepper with the oscillator and powered up. There was continuous activity at TxDA for a few seconds, which would have corresponded to the write some data and halt code I had burned into the EPROM. Following that test, I put the MAX248 back into the socket and connected POC V2 to my console terminal, with my RS-232 tester in the circuit so I could watch the signals. At power-up, all RS-232 signals, other than RI (ring in, which is not used), showed voltage present. After releasing the reset line, I saw a burst of activity on the tester's RD indicator (receive data—the tester was "backwards" in the circuit, so RD is from the terminal's perspective), indicating something was being transmitted to the terminal. The terminal's display, which had previously blanked from a "no activity" timeout, woke up. However, there was no other evidence of data being received, even though $A5 should have caused the terminal to display % (italicized percent).
Based upon the above testing, it appears my CPLD logic has some degree of correctness to it, the QUART is not comatose and I can send something to the console terminal. I'm inclined to think that right now I must have a baud rate error, formatting error, or both, in the serial data stream. It could be I've got the wrong setup in the QUART, as it is difficult for me to read the data sheet. That said, I was using values that work on the 28L92 in POC V1.1, since all of these NXP UARTs are supposed to be programatically similar. In fact, the 28C94 data sheet all but says it's two 26C92s in one package, and I have successfully run the 26C92 in POC V1.1.
The other possibility is the bit patterns for baud rate and format are being written into the wrong registers, either due to a register decoding logic error or due to a typo somewhere in one of the assembler INCLUDE files that contains the 28C94 data.
Since software is easier to fix than hardware and I have no reason to further suspect hardware at this point, it's time to fire up the assembler.