Ruud's Commodore Site: Template Home Email


What is it

Beside the 6502 I also fancy the Z80. And therefore I own several Z80 computers like the Sinclair ZX 81, ZX Spectrum, Micro Professor and Bondwell 14. I also like the concept of the PC: a motherboard and a wide choice of cards. I collected quite some cards in the time and they are just laying around. Already in 1989 I made a interface for the C64 that enabled me to connect 8 bit ISA cards. I even have a VIC-20 equipped with a 65C816 with its own ISA bus interface. But there was one problem with these nice projects: the result was not supported by any Operating System.

But mid 2004 I realized that CP/M is ideal for this project: CP/M is hardware independent as the BIOS takes care of hardware matters! But how to realize it? Three ideas so far.

Idea 1: Using an existing CP/M system

First problem: I only have four:
- Commodore 128
- Epson PX-8
- Philips 2000C
- Bondwell 14

For several reasons I can forget the C128. The first problem is that I have many doubts about hacking the circuit. I also have doubts about connecting an ISA bus in a neat way; the only thing I can think about is on top of the original motherboard.
The Epson is hardly hackable due to the custom ICs inside.
The problem with the P2000C so far is that I am not familiar with it yet.

The Bondwel looks promising: small, schematics available, hackable but.... it is such a nice machine, I simply cannot get it over my heart to scrap it for this project.
Studying the schematics I ran into something that could change things dramatically: the I/O area of the Bondwell only occupies 256 bytes. The one of the PC occupies 1024 bytes. I could make a hardware hack that enables me to use the full range including the original one. But most probably the Bondwell only uses the 8 bit command 'IN A,(n)' and 'OUT (n),A' which I have to turn into the 16 bits commands 'IN A,(C)' and 'OUT (C),A'. And that is a lot of work IMHO.
But then I got the following idea: why not using memory mapped I/O? The hardware must be able to address the 1 MB range used by the PC anyway. IMHO there is nothing against using the very last 32 KB, normally used for the BIOS of a PC, for the I/O instead. CP/M 3.0 only supports up to 16 banks of RAM, which means 512 KB, so no clash here either.

Idea 2: Using none CP/M computers

Here you can think of the wellknown Sinclairs, MSX and the Amstrad CPC machines. IMHO you can forget about the Sinclairs as they have the indecent habit to use the address lines to read out the keyboard. On itself effective and cost reducing but an enormous waist of address space IMHO :(
I have only one MSX, a Sony Hitbit 75. And not by coincidence, it is completely build out of standard available TTL ICs. No schematics so far but IMHO I can use the ones of other MSX machines as base.
I also have a CPC64 and CPC128 but no schematic as well so far, but we have time :)

The above are complete computers including I/O, video and other features. And a OS/Kernal I cannot use. And if I start thinking things over, also hardware that I likely don't want to use as well. In fact, the ISA cards can provide most functions I need. The only exceptions I can think of are DMA and the keyboard.
Then I remembered having some old printer buffers laying around and I knew at least one of them was controlled by a Z80. And yes, four of them had a Z80. But two were equipped with PAL's and hardly hackable. Number three looked promising having four 30 pins SIMM slots onboard but it turned out it used a weird way to address them which made it unusable so far (or I made a mistake during reengineering the circuit). The 4th one looks as the simplest one but that's all I can tell of it right now.

Anyway, still some work to do here.

Idea 3: Using an original XT board

The idea sounds simple:
1 - get rid of the 8088 and the 8288
2 - cut some pins of the buffer used to de-multiplex the original data and address lines of the 8088
3 - create the signals INTA, MEMR, MEMW, IORD and IOWR out of the ones generated by the Z80
4 - create four extra address lines in one or another way
5 - enable the board to access $F000:0000

To start with item 4, creating four extra address lines, the idea is to add another 8255 on top of the original one. Five outputs are used to emulate address line A15 to A19. Yes, A15 as well. CP/M 3.0 is able to work with banks. And only the lower half of the memory can be used for banking, the upper half must always be the same one (common memory). A15 is intercepted and tells the system what action to take:
  • A15 = (H): use the common memory. Address lines A15..19 towards the system become (L).
  • A15 = (L): use the banking mechanism. Address lines A15..19 are controled by the output of the extra 8255.
The next step is the Boot ROM. A 8088 starts at address $F000:$FFF0, a Z80 starts at $0000 after a reset. Most XT motherboards only provide access to to the upper 16 KB of the $F000 segment. But that shouldn't be a big problem; most boards I own, have a 74ls138 onboard that takes care of selecting the (EP)ROMs. In this case it is just a matter of cutting a line and resoldering it to output Y0 at pin 15.

In CP/M 2.x machines I know, the Boot ROM was the BIOS at the same time, but for CP/M 3 machines it seems to be a different matter. If I interprete things correctly, the Bondwell 14 only uses the ROM to check the hardware first and then loads the actual BIOS from floppy. I must admit, I like this idea because it simply means much much less EPROM burning during the development phase :)

(to be continued.....)

Having questions or comment? You want more information?
You can email me here.