If you want to achieve an 80's tech SBC you can.
I have an 80-s tech computer. It has a parallel printer port, some serial ports, floppy disk drive bus ports & a SCSI port.
Great software & hardware is what makes a great computer.
Buffer
Think of a serial or parallel printer. For some compute tasks the Z80 can generate characters much faster then the printer can print. But for some programs or places in a program the Z80 is slower then printer.
So before talking electronics lets look at this problem. A buffer in printer can help here. A buffer in Computer can help. But this is not a free change. One software error and you have printer printing a low of garbage. A good setup looks at all the problems created when a buffer is added and has ways to the best it can to reduce or fix the problem. When Printing garbage you want to stop the print & clear the buffers. The point I am trying to make is adding something like a buffer is not free and needs more control options. Most improvements are the same, gain something & loose something.
Hardware handshake
Look at serial ports. One big difference between a nano and your Z80 SIO is that your SIO can use RTS & CTS to stop receiving more characters, This is simple. For software, the common method is XON & XOFF. This requires transmitting these characters before characters in the buffer when needed, more complicated. A lot of nano programs only work because the PC only sends a small amount of characters before waiting for a response from nano.
So best choice is to have hardware that will handle speed difference between the two ends. This does not prevent using the other two ways above. You could have all three working.
Speed difference
Now You caught that a nano will be slow to respond. You might not have caught that even a PC will be slow to respond. The way to handle this is to shift to a request & response method.
So at low level you want hardware that can send & receive with out loss and a higher level doing requests with delayed response
9-bit data
Now you have already seen the hints of what is needed, you are missing details. For Z80, you need to keep it simple or you loose a lot of computing time. When you look at the connection of SIO to Z80, what are you seeing?
Each SIO port is using two addresses. One for command/status & second for data. You have 9-bits to/from the SIO so that you have 8-bit transparent data & 8-bit transparent command/status.
To have a remote SIO, you need to send/receive this 9-bit data. For a picture think of this.
Your Z80 is going to use a SIO attached to a second Z80.
Your Z80 using the serial port of the nano.
You have already been using something like this. On PC's, they have stopped using direct connected serial ports and are using USB connected serial ports. The PC is remote controlling the USB device that acts like a serial port. An as you can see if done right, you can have many. To have many, you need more bits so you can select which device should work with the 9-bit data.
So far we have buffers, 9-bit data & handshake signals for flow control.
You need a send path and a receive path.
Here it might be good to say that a 8-bit asynchronous serial interface is not a good choice to send this 9-bit data. You only have one choice of adding software on both ends of connection to get the needed 9-bit transparent data. A big software overhead for Z80.
Now lets go back an look at SCSI. First versions were very simple.
Back in the day a SCSI hard drive controller could normally attach to 4-hard drives.
A SCSI bus could connect 8 devices with one being my old computer. So my old computer could connect to 28 hard drives. But notice a SCSI bus connects to devices. You could have a device that was a hard drive & floppy drive controller.
All kinds of things could be connected to the SCSI bus, drives, scanners, printers, terminal servers and more. in addition you could have a 8 device network.
Now you might like to know that first SCSI hard drive controllers used a Z80 on controller board.
My Z80 uses 2 x 74xx273, 2 x 74xx240, 1 x 74xx132, 1 x 74xx74 & 2 x 74xx06 for SCSI interface. The boot rom is 512x8
So what makes SCSI so powerful of an interface?
It is an open collector bus(74xx06). This lets many devices use same signal line at same time. All devices would wait for the slowest device when needed.
The C/D signal could be thought of as the 9-bit from above.
Has handshake signals for speed difference between devices.
Has I/O signal for bus direction.
Has additional signals to handle problems and errors.
A total of 9 signals in addition to 8 for data.
Now one trick my Z80 uses is that it actually sends 9-bits with each z80 out instruction. A0 becomes the 9th bit(C/D). This makes software simpler and also data faster on the bus. Using a PIO would be a little slower.
When sending a SCSI command it is specifying WHO, WHAT WHERE, This is a request.
This is just a stream of bytes with C/D set for control.
You could think of Packets.
For ethernet, you have a known packet starting point, so you can assume that first bytes are control. The control bytes can then specify if more control bytes follow and where and how much data is in packet.
For HDLC, SDLC you have a unique frame start bit sequence which again gives you a packet.
For CAN bus you also have a unique packet start bit sequence.
Do I need to state that USB is packets also.
A packet is just a stream of bytes and is not normally hard to add more bytes to control part of packet.
So by coping SCSI bus and ideas you have something to follow to make a powerful interface to your Z80 <-> nano while handling problems.
Both nano & Z80 can use interface status to decide when other end is ready so no Z80 wait states are needed. Both can continue to run instructions while waiting.
You can expand adding more Z80's, NANO's or other to SCSI bus.
Now the software side.
Back in the old days to read/write storage you needed to specify what drive, what track, what side, what sector. Each of these was a register in the controller, each had an IO address. For SCSI this becomes a byte stream. Instead of writing to an Output port you write each byte of data in a specific memory location that will be part of the command stream. When this array of data is ready you just copy the bytes to SCSI port.
Today with smarter drives it's what drive & what logical block address.
SCSI used logical blocks for storage from the start.
As with many things, there are many ways of doing things. If you understand the concepts, then you have more options.
I showed one way to have 16k blocks of memory. There is a thread that uses fast ram that can be better if you understand concept. A few address lines becomes many.
Keep looking for basic concepts to build with.
Will stop here, Ask questions.