It took me longer to get USBGET.Z80 working right so that I could use it than I anticipated but all is well. Additional things I did included:
a. Eliminating dead code - pieces were left over that were not needed for a host to CP/M system only flow.
b. Added some notes regarding the XMODEM protocol so users could better understand the flow.
c. Added a NAK sent to the host at the start of the XMODEM transfer. As originally written by John the code just allowed the initial attempt to fail before the start NAK was sent.
Now that it is working reliably I can comment on performance.
a. Is the USB connection faster than a straight RS232 connection at 38,400. Answer: Yes, but not as dramatic a difference as I anticipated. On my 6 MHz Z80 the RS232 throughput at 38,400 is around 2200-2400 characters/second. The USB port starts around 3300-3500 (sometime initial peak is > 4000) characters per second but fades a bit as file save process encounters delays, e.g., opening a new extent. All this when the VCP on the PC is running at 921,600 bps. Throughput is limited by the host end to a degree but most importantly by the CP/M performance bottlenecks coming from our usual hard disk designs and slow clock speeds.
b. Is the USB connection reliable. Yes, errors were almost non-existent when running with HW handshaking.
c. Is it worth the cost and effort? That is up to the user. I will use it especially as I replace my old hard disk with a faster CF or SD based system.
If anybody wants my revised version of USBGET I will post the Z80 source code on PBWorks.
On Saturday, November 15, 2014 4:13:56 PM UTC-7, Rich Leary wrote:
An update on my progress so far with the USB port. My previous report was in error. USBGET.ASM was not working. I looked at what went on and as a result I am modifying USBGET as follows:
a. Add 82C55 initialization - the original USBGET assumed that the port was already initialized.
b. Delete use of speech - the original used the SERIAL IO Port B ability to drive the V-Stamp for text to speech generation. I am using Port B for other purposes so I have converted the speech messages to simple console messages.
c. I converted to Z80 opcodes etc.
d. I changed source to work with SLRSystems Z80ASM.COM
, my favorite "native" Z80 assembler. This required some subtle changes.
e. I changed the One second delay loop used for time out purposes. I am not sure what CPU speed the code was based on but as I calculated the timing of the original loop when using my 6 MHz, no wait state, CPU the one second timeout was actually 0.24 sec My code includes some comments that shows the number of T-cycles in the loop with enough explanation that others should be able to calculate.
I have not started testing but as soon as I have progress I will report results and post my modified USBGET.Z80.