BillO wrote:
I just had a board made up that does not work as intended...RDY, NMI, IRQ and SO are held high with 10k resistors.
I'm not saying that this is a factor in why the board is DOA, but 10k is too high for those inputs. You may be getting enough noise there to trigger spurious conditions. 3.3k is the usual recommended value for those pullups. Ditto for reset's pullup.
Quote:
The same W65C02S chips will run just fine and dandy in my old OSI superboard (which has bus traces measuring over 40cm, bypass capacitors once in a while and no ground planes) or in my Apple IIE.
Is there some obvious thing I have overlooked? Is there a known incompatibility with EhBASIC an the WDC chip? I'm confused.
I'm not aware of any incompatibility between the 65C02 and EhBASIC.
This is just a WAG on my part, but your DOA condition may be due to clocking matters. You should note that WDC does not recommend the use of the PHI1O and PHI2O outputs to clock other devices in the system. Excerpted from page 10 of the data sheet:
3.8 Phase 2 In (PHI2), Phase 2 Out (PHI2O) and Phase 1 Out (PHI1O)
Phase 2 In (PHI2) is the system clock input to the microprocessor internal clock...The Phase 2 Out (PHI2O) signal is generated from PHI2. Phase 1 Out (PHI1O) is the inverted PHI2 signal. An external oscillator is recommended for driving PHI2 and used for the main system clock. All production test timing is based on PHI2. PHI2O and PHI1O were used in older systems for system timing and internal oscillators when an external crystal was used.
Furthermore, on page 26 in the data sheet (below the timing diagram), WDC states that the lag from PHI2 to PHI2O/PHI1O is not tested on production parts and
is not specified. The bottom line is using PHI2O/PHI1O to clock other hardware in your system will introduce some unknown amount of phase shift relative to the 65C02's internal clock, which is driven from PHI2.
Not knowing what the logic is in the GAL, the following may also be a WAG. I don't see a clock input to the GAL, but I do see RWB driving one of its inputs and a /WE assigned to one of its outputs, that apparently ending up at an SRAM (?). The /WE should be gated by Ø2 so it is only asserted when Ø2 is high. This is because during part of Ø2 low the data bus will be in an indeterminate state and depending on the characteristics of the SRAM, it may not properly behave while the data bus is settling.
Regarding the use of the '245 bus transceivers, data and address connections on devices such as the 65C61, SRAM and ROM should be attached directly to the 65C02's data and address buses. The 65C02 has more than enough drive to handle the load, given reasonably good construction methods (a four-layer PCB should work fine—my POC units are four-layer and will run at 12.5 MHz without any stability issues). Also, 65xx I/O silicon must have chip selects and RWB valid before the rise of Ø2, else the device will not function.
In a first step to troubleshoot this unit, I would suggest inserting a NOP generator in place of the ROM, power up and then observe for system activity with your logic probe or scope. A good point to watch is SYNC, which toggles as each opcode is fetched. If the 'C02 will execute NOPs then you will need to examine your general design for logic and timing accuracy.
Can you please post the logic code for the GAL? There could be something in there that is being a problem as well.
Lastly, in an all-CMOS design there is no reason to employ 74ACT/74HCT logic. For most devices, the 74*CT version will be somewhat slower and more vulnerable to noise than the 74*C equivalent. That said, 74AC should be used with care in wirewrapped systems or systems built on perf board, due to the very fast output transition times.