VOGONS


Early 8 BIT ISA Bus

Topic actions

First post, by RealityTech

User metadata
Rank Newbie
Rank
Newbie

Afternoon guys

I'm doing an expansion card for an older (8086) based Amstrad machine, PPC512/640.
I'm mashing as many useful IO interfaces onto the board as possible but I've run into a query with rolling in a couple of cards. I think the answer is "They don't matter" but I wanted to check.
I'm missing two signals from the Amstrad that are normally present on the ISA bus but not always.

The first is !refresh/!DACK0 and the second is IOCHRDY

My understanding is that !refresh does nothing I can use or need to use. I won't be doing DMA or using DRAM for main memory so I'm sure it's redundant for me.
IOCHRDY seems less clear cut, although, again, everything I'm using is fast enough not to need to use this. I'm, once again, sure this can be ignored.

Any thoughts?

Reply 1 of 2, by mkarcher

User metadata
Rank l33t
Rank
l33t
RealityTech wrote on 2025-10-25, 15:06:

I'm doing an expansion card for an older (8086) based Amstrad machine, PPC512/640.

I'm missing two signals from the Amstrad that are normally present on the ISA bus but not always.

The first is !refresh/!DACK0 and the second is IOCHRDY

The service manual seems to disagree about missing signals, see https://archive.org/details/amstrad-ppc-512-s … ge/n29/mode/2up page 30 (in that viewer). While the expansion connector does not have ISA layout, you should have /REFRESH (aka /DACK0) on pin A15, and IOCHRDY (aka I/O RDY) on pin B5.

RealityTech wrote on 2025-10-25, 15:06:

My understanding is that !refresh does nothing I can use or need to use. I won't be doing DMA or using DRAM for main memory so I'm sure it's redundant for me.

That's correct. /REFRESH may be useful as a timer with a period of typically around 15.6µs (but if the user enables "slow refresh", it might be around 64µs instead), but is meant to be used as a refresh signal for cards that contain their own DRAM, especially memory expansion cards with DRAM (this might also be an EMS card, not just a main memory expansion card). With /REFRESH, you get an 8-bit refresh counter on A0..A7.

RealityTech wrote on 2025-10-25, 15:06:

IOCHRDY seems less clear cut, although, again, everything I'm using is fast enough not to need to use this. I'm, once again, sure this can be ignored.

That's correct again. On the XT, you have 8088 bus timings (even on the 16-bit Amstrads, the expansion bus is just 8 bits, so you get 8088-compatible cycles from the 8086 CPU). As the PPC512 operates at 8MHz, cycles may be shorter than on the original IBM PC that had the bus at 4.77MHz, unless Amstrad adds wait states. Nevertheless, a complete cycle on the 8086/8088 takes 4 clocks, so you might still be able to handle all cycles without extra wait states. In that case, you don't need to do anything with IOCHRDY. This signal is pulled high by a pull-up-resistor on the mainboard, and only if you need to add wait states to a bus cycle, you need to pull it down to ground.

Reply 2 of 2, by RealityTech

User metadata
Rank Newbie
Rank
Newbie
mkarcher wrote on 2025-10-25, 15:52:
RealityTech wrote on 2025-10-25, 15:06:

I'm doing an expansion card for an older (8086) based Amstrad machine, PPC512/640.

I'm missing two signals from the Amstrad that are normally present on the ISA bus but not always.

The first is !refresh/!DACK0 and the second is IOCHRDY

The service manual seems to disagree about missing signals, see https://archive.org/details/amstrad-ppc-512-s … ge/n29/mode/2up page 30 (in that viewer). While the expansion connector does not have ISA layout, you should have /REFRESH (aka /DACK0) on pin A15, and IOCHRDY (aka I/O RDY) on pin B5.

I need to double check that. I was working from a technical reference that *may* be incorrect. Nope, this is my fault, although I've routed IOCHRDY. I need to check the bridge but I think I've simply not brought refresh over to the PC104 connector for some reason. This is why we have prototypes 😀 There is some inconsistancy with how some signals are named even between 8 bit ISA pinouts. 104 adds more confusion.

mkarcher wrote on 2025-10-25, 15:52:
RealityTech wrote on 2025-10-25, 15:06:

My understanding is that !refresh does nothing I can use or need to use. I won't be doing DMA or using DRAM for main memory so I'm sure it's redundant for me.

That's correct. /REFRESH may be useful as a timer with a period of typically around 15.6µs (but if the user enables "slow refresh", it might be around 64µs instead), but is meant to be used as a refresh signal for cards that contain their own DRAM, especially memory expansion cards with DRAM (this might also be an EMS card, not just a main memory expansion card). With /REFRESH, you get an 8-bit refresh counter on A0..A7.

In this case its emulated memory, no DRAM in play so that works.

mkarcher wrote on 2025-10-25, 15:52:
RealityTech wrote on 2025-10-25, 15:06:

IOCHRDY seems less clear cut, although, again, everything I'm using is fast enough not to need to use this. I'm, once again, sure this can be ignored.

That's correct again. On the XT, you have 8088 bus timings (even on the 16-bit Amstrads, the expansion bus is just 8 bits, so you get 8088-compatible cycles from the 8086 CPU). As the PPC512 operates at 8MHz, cycles may be shorter than on the original IBM PC that had the bus at 4.77MHz, unless Amstrad adds wait states. Nevertheless, a complete cycle on the 8086/8088 takes 4 clocks, so you might still be able to handle all cycles without extra wait states. In that case, you don't need to do anything with IOCHRDY. This signal is pulled high by a pull-up-resistor on the mainboard, and only if you need to add wait states to a bus cycle, you need to pull it down to ground.

OK, so I do have it, I need to go back to the sheet for it and re-implement it but checking the XTMAX code may well be a worthwhile excercise to see if it's in play here.
Thank you for making me re-examine my wiring.
R