Just built up prototype of single board CPM using z80 and FT245. FT245 is going to imitate the 6850 ACIA. Prototype is using my FT245 board for RC2014 as a breakout board for surface mount USB and FT245 in SSOP but plan is to use a waveshare breakout board for this. The waveshare board just arrived the day after I finished wiring the prototype.
I'm aiming to fit the minimum number of components into a standard RC2014 outline that will run a variant of RomWBW. As with Bill Shen's ZZ80RC it has only 512K RAM with battery backup, so initially I'll build a 256K ROM variant with 128K ROM disk and 128K RAM disk and change this later to a pre-installed 256K RAM disk when I get a bit more confidence making changes in RomWBW.
Imitation of the 6850 ACIA is limited to data addressing and status register, no control register or interupt mode. Also including driving /WAIT if attempting to read from the FT245 when there is no data available, but not on attempt to write data to reduce the interface logic which is currently using a 74LS156 although I'm still considering change to 74LS141/5 or discrete logic. I reduced the address range from 0x80 to 0xBF of the RC2014 ACIA to 0x80 to 0x87 and mirrored at 0xA0 to 0xA7 (which hopefully supports RomWBW detection). This includes the RAM page write address at 0x82 and disable bootstrap mode with read/write (or IntAck) at 0x83.
In bootstrap mode every read made by the Z80 is taken from the FT245, but writes will still be directed to output ports and memory. Bootstrap instructions are sent to the Z80 to write a bootloader into high memory, then jump to the bootloader and exit bootstrap mode. The bootloader then loads the following binary into memory. The simple example attached was used to run BASIC, using Grant Searle's Basic for his FPGA z80 converted from intel hex to binary using HXD. This simple bootloader requires reset after the transfer with bootstrap mode disabled.
Using the FT245 for bootstrap does not require any delays in teraterm, so bootload is very fast, blink and you'll miss it. Obviously it will slow down as the image size increases but should still be no more than a few seconds.
I'm going to include connections for /RXF and /TXE to user pins, so interupts could be added later via a CTC. Also option to connect /PAGE_RESET to a user pin, so it could be reset by /NMI fetch from 0x0066 or /INTACK.
I'm waiting for MAX818 to control the battery backed RAM, so using an ADM694 for testing. This controls reset, but does not protect the RAM CE. The /MREQ at PFI input is just buffered to the RAM /CE at the PFI output.
I've only tested with Basic, so still haven't tested the RAM page control yet which simply uses a 74LS173 to select one of the sixteen pages from the 512K when A15 is low. When A15 is high the last 32K in the RAM is selected by the pull up resistors. This should be a good fit with the paging mechanism of hbios in RomWBW.
It seems my Z80 is only a 10MHz device labelled as 20MHz. Source was ebay so I guess that's to be expected. It runs at 11.0592MHz but not at 12MHz. Also possible its my wiring, 74HCT04 oscillator or bad circuit design.
Also planning to make a PIO board talk to this z80 board via the same connections as the FT245 breakout board, so included connections for /HALT and /WAIT to the no connection pins of the 20 pin header to allow these to be monitored by the PIO.
I've almost completed the pcb layout, standard RC2014 outline is really tight but looks like it should be possible. There might be no room for decent silkscreen labelling. I'm still considering if a barrel jack connector for power will be included by removing the pin1 cutout and I need to squeeze in an option link for reset connection to the 20 pin header. Also possibly need pull ups on /TXE and /RXF as these are tristated when the FT245 is reset or suspended.
Mark