• Please review our updated Terms and Rules here

Trying to get a Cromemco 2-ZD / 4FDC talking

nullvalue

Veteran Member
Joined
Oct 8, 2019
Messages
815
Location
Indiana
I am trying to bring a Cromemco 2-ZD system back to life. I have already safely brought up the power supply and everything checks out fine there. Reset circuit, clock signal all check out fine. Right now I just have installed the Cromemco ZPU, dynamic RAM, and 4FDC. The 4FDC houses the 2708 EPROM which has RDOS 1.1 on it. According to the manual, I should be able talk to it using a Terminal @ (up to) 9600 baud. The manual says I hit enter several times to calibrate the baud rate, and I should get an RDOS message back. I have tried all that, but I get nothing.

First of all, does anyone have a schematic for the 4FDC? I can't find one anywhere. This board uses the TMS5501 I/O controller which I am unfamiliar with.

On the 4FDC, I've hooked up my scope and traced the incoming serial signal from my terminal on PIN 2 of the DB25 connector. This goes to a 74LS241 - pin 17 / 2A4:
20211006_213628.jpg
The only signal I see come out the other side looks like this - on pin 2 / 1A1:
20211006_213641.jpg

FYI - this is a brand new 74LS241 chip. I'm a bit confused on what happens from here. I don't see the serial signal end up anywhere at the 5501.

Anyone have some recommendations on how to get this thing talking?

20211006_213619.jpg
 
First things first.

Can you let me know what switch/link configuration you have on all of the cards please?

The 'default' should be:

4FDC SWITCH BIT:
1 - OFF
2 - OFF
3 - OFF
4 - ON

ZPU Switch should be set to power up at C000h.

Note, however, that the base address of the 2708 EPROM on the 4FDC 'could' have been changed by track cutting and links around IC44. Unlikely, but a remote possibility.

Dave
 
Last edited:
First things first.Can you let me know what switch/link configuration you have on all of the cards please?

Good call, I double checked - my ZPU jump address is set correctly to C000H (Example 1 in the ZPU manual).

On the 4FDC, all 4 switches were off. I swear I had checked all that but may have been bumped during cleaning. Either way, I turned it on and I still get no serial output from the monitor. Looks like switch 4 is related to initializing disks, which I'm not there yet so I guess it wouldn't matter anyways.
 
Yes, switch 4 prevents INITialising disks - so should be ON for the time being...

I'll have a think later...

Dave
 
Went through all the voltages at the chips, they all seem good (the TMS5501 gets +5, -5 and 12V). Checked all my serial settings, tried different baud rates... Still no response.
 
Can I suggest monitoring the Z80 pin 6 (clock) and pins 16 through to 28 to look for signs of activity and (if so) what.

Let's see what the processor is up to shall we? Without a processor running - we are not going to get much.

Do you have an oscilloscope?

Dave
 
Can I suggest monitoring the Z80 pin 6 (clock) and pins 16 through to 28 to look for signs of activity and (if so) what.

Let's see what the processor is up to shall we? Without a processor running - we are not going to get much.

Do you have an oscilloscope?

Dave

Sounds good - yes I do have a scope... So, pin 6 (clock) is giving me a good 2MHz signal.
20211011_170830.jpg - Click image for larger version  Name:	20211011_170830.jpg Views:	0 Size:	118.0 KB ID:	1228059

However, none of the other pins (16-28) seem to do anything at all. Pin 26 goes low when reset is held. I tested most of the other pins after reset as well..nothing.

Should I test while trying to send serial data? Or does this mean the Z80 is bad, or perhaps it's just not seeing instructions from the ROM?
 
Last edited:
So, the Z80 is sitting down and refusing to do anything. However, before we jump to conclusions and assume the Z80 is dead (which it probably isn't) we need to find out if the Z80 was doing something after reset - but then stopped/halted as a result of reading rubbish OR deliberately by the ROM executing a HALT instruction.

Can you tell me whether the Z80 pin 18 is HIGH or LOW please. This is the /HALT pin. HIGH means the Z80 should be doing something. LOW means that the Z80 is halted.

Next, we can use the power of your oscilloscope to see if the Z80 was trying to execute instructions just after a RESET, but then went into the weeds...

How many channels do you have on your oscilloscope by the way? I will assume 2 channels.

Connect the Z80 pin 26 (/RESET) up to channel 1 and use this channel as a trigger. Set channel 1 to trigger on a LOW to HIGH (rising edge) transition. This will start the oscilloscope tracing just after the reset has completed and the Z80 is ready to run.

Connect the Z80 pin 18 (/HALT) up to channel 2. See how long it takes from the end of the /RESET to /HALT going low. I am assuming that the Z80 starts to execute instructions after the reset and then halts at some point. You may have to play around with the timebase and try a few resets to see what is going on.

Connect the Z80 pin 27 (/M1) up to channel 2 (or another channel if you have one available). This pin should pulse low for every instruction that the Z80 executes.

It will be good news if the Z80 starts to execute instructions (you see /M1 pulses) after a reset - and we can work from there moving forwards.

I will take this fairly slowly so we can progress one step at a time. Forget the serial communications for now... What we want to see in the next step is whether the Z80 is trying to access the BOOT ROM following a reset.

Dave
 
Ok, so pin 18 is HIGH (well, I measured it at 4.0V) - double checked +5 (pin 11) and it is getting a clean 5V supply.

Since pin 18 isn't LOW, I'm not sure if your 2-channel /HALT tests makes much sense, but I did it anyways and yeah - I see the RESET signal go from LOW to HIGH, but pin 18 does nothing.. stays at 4V the whole time. Played with the timing, too - from 50ms to 5ns, nothing.
20211012_201855.jpg - Click image for larger version  Name:	20211012_201855.jpg Views:	0 Size:	117.1 KB ID:	1228223

Connecting to pin 27 looks like there is a lot of ongoing activity/pulses so that sounds like a good sign..
20211012_202248.jpg - Click image for larger version  Name:	20211012_202248.jpg Views:	0 Size:	120.3 KB ID:	1228224
 
Interesting...

The response on pin 27 (/M1) appears different to what you reported back in post #7. So, does this mean that sometimes when you start the machine that it HALT and other times not I wonder?

If pin 27 (/M1) is pulsing like it is - then the Z80 is actually executing instructions this time.

Can I suggest repeating the pin check from post #7 a few times (each following a power-up) to see if the problem is the power-on reset or not - or whether sometimes the Z80 starts and other times not.

Anyhow, when the Z80 starts (pulsing observed on pin 27 /M1) then you need to check the EPROM on the 4FDC card. I am assuming this is a 2708 EPROM? Please check and report back. If it is a 2708 EPROM, pin 20 (/CS) should be observed to be pulsing LOW as the Z80 accesses it.

Dave
 
Last edited:
I reran the reset test on pin 27 - I get pulses after initial power-on but noticed after a reset, I get nothing - it stays LOW. This must be why I missed it the first time.

Here are what the pins are doing:

16 LOW
17 HIGH
18 HIGH
19 PULSING
20 HIGH
21 PULSING
22 HIGH
23 HIGH
24 PULSING
25 HIGH
26 HIGH
27 PULSING
28 PULSING

It seems like after a reset, all the pins that were pulsing go/stay LOW.

Yes the 4FDC does have a 2708 EPROM on it. It is stamped RDOS 1.1:

20211013_204143.jpg

I checked pin 20 at it is indeed pulsing. Here's what the scope looks like - CH1 is the 2708 pin 20, CH2 is the Z80 pin 27.

However there seems to be some real flakiness with the 2708 pin 20. Sometimes after power on I don't get anything. Others the pulses don't line up to the same rhythm as I saw previously.

Here was one time I measured it.
20211013_203928.jpg

After powering off and coming back I was seeing this:
20211013_210119.jpg
Same reading, slower timing:
20211013_210140.jpg

And now I have the Z80 pin 27 pulsing but am getting nothing on the 2708 pin 20.. it just goes/stays HIGH.
 
The table that you posted first looks sensible (with one exception) that is pin 16 /INT being LOW.

/MREQ (pin 19) and /RD (pin 21) pulsing indicates the Z80 CPU reading from memory.

/WAIT (pin 24) pulsing probably indicates that the (EP)ROM is a bit slow and (as a result) the 4FDC circuity is putting the Z80 into a wait state (or two, three or more cycles). This is expected behaviour.

/M1 (pin 27) pulsing indicates that the Z80 is fetching and executing instructions.

/REFSH ( pin 28 ) pulsing indicates that the Z80 is performing a DRAM refresh cycle.

/INT (pin 16) being LOW indicates a permanent 'stuck' interrupt. This may be because the Z80 is not reading back (and therefore executing) the 'correct' instruction from the (EP)ROM.

Let me think a bit...

Dave
 
Hi Nullvalue,

>> .... wondering if you know of any other resource for ROM images for this machine?

Take a look at http://www.hanscom.us, and dig down into the "CBIOS Boneyard". There are quite a few goodies there, BUT any ROM that I've ever seen from Cromemco gear *IS'NT* 2708. I ought to add that I've never worked with a 4FDC. I use (thankfully) 16FDCs and 32FDCs.

Hope you can find something useful on my site.

Roger
 
Thanks, I'll take a look. See the pic I posted in #11 - is that not a 2708 ROM? Are the 4FDC's really as bad as I've seen them made out to be?
 
That is the masked programmed version of the 2708 EPROM (or a program once erase never device). It doesn't have a window to let UV light through to erase.

If it is an EPROM that can't be erased it has an in-built failure mode. All EPROM devices 'leak' electrons/holes over time so they can 'bit rot'.

If it is a masked programmed ROM - it should be much more resilient.

Dave
 
Pin 18 on the TMS5501 Multifunction I/O device is the chip select pin. If you monitor that pin on (on the 4FDC TMS5501) do you observe any activity just after the Z80 /RESET signal transitions from LOW to HIGH?

This would indicate that the RDOS ROM is initialising the UART and trying to address it.

However, this would only be valid if the Z80 starts up correctly...

I notice the 4FDC has fairly minimal configuration options; but the ZPU itself can mess you up a bit!

Check the PCB tracking marked "JUMP ENABLE" to make sure it is intact. If not, the power-on jump facility will not work.

The other possibility is to reduce the clock frequency from 4 MHz to 2 MHz (as a test) and to increase the wait states.

What RAM do you have installed? The RDOS monitor requires RAM for a stack and a bit of local storage (0x007F downwards).

I am assuming here that the sources for RDOS Version 1 and Version 1-1 (marked on your ROM) are similar.

Dave
 
Last edited:
I checked out pin 18 - it goes high when the system is powered on and remains high throughout the reset process.

I did verify the JUMP ENABLE trace is intact on the ZPU board.

All of my testing so far has been in 2MHz mode, since that's how I received the boards.

As for RAM, I just have this 64k dynamic ram card installed. However, I don't have the manual or know the mfg..
20211020_075653.jpg

Think I should try burning RDOS 1 to a UV-erasable 2708? I got my programmer working.
 
Pin 18 of the TMS5501 is incorrect. This is an active high signal. It should normally be low unless the TMS5501 is being accessed. If it is permanently high, then it is being permanently accessed...

Is the memory card a Cromemco card? The ZPU has the DRAM refresh option disabled by default (if I remember correctly) as the Cromemco DRAM cards perform their own DRAM refresh. If this is not a Cromemco card, and doesn't perform its own DRAM refresh, then the ZPU will have to be set-up to enable DRAM refresh signals. If not, any stack or local data access will not last that long as the electrons/holes leak away!

If the card has DRAM refresh, or the Cromemco ZPU has had DRAM refresh enabled, then you should be OK.

I have been unable to locate the 4FDC schematic also. I have 16FDCs - so that doesn't help I am afraid.

I suspect we still need a full link/switch review to see exactly how your cards are configured (ZPU/RAM/4FDC)...

Dave
 
So, I was thinking this morning...

For the RDOS monitor to work, we have to have a working ZPU (CPU), RAM card and 4FDC (or at least part of it). Any of these parts that are faulty will cause no (or random) response from the system.

If you can now program 2708 EPROMS, why not replace the EPROM with a bit of 'noddy' code to do the most basic of things to start with - and then build the test code up...

For example, if you fill the EPROM with 0x76 (a Z80 HALT instruction) then the Z80 should reliably HALT every time it is powered up (Z80 CPU pin 18 should go LOW). You only need the Z80 CPU and 4FDC card for this test (remove the RAM card).

After that, you can replace the contents of the EPROM with 0x00 (NOP) with the last 3 bytes of the EPROM being 0xC3, 0x00, 0xC0 (JP 0xC000 ; The start of the 4FDC boot ROM). This bit of code should cause the Z80 to reliably start executing NOP instructions (the /M1 signal should pulse away merrily) fetching and executing instructions from within the ROM. You should observe /MREQ and /RD signals, no /IORQ or /WR signals, and the ROM chip select should remain active.

If the above two tests work OK we could get more adventurous and write a small program to initialise the TMS5501 with a known baudrate and serial parameters and output a "Hello nullvalue!" message to the UART. We can do this without requiring any RAM.

Basically, what I am proposing, is a series of very simple tests becoming more and more complex (thus testing more and more sub-systems out) until we can get some form of basic debug monitor working.

Dave
 
Back
Top