ppe wrote:Hey,
it's been a long time but there's been very little time for hobbies lately
Anyway, I got some spare time this weekend so I decided to implement the xmodem receiver in assembly. It's now faster, more reliable and first copies the received binary to memory to prevent errors during receiving due to spinning microdrive. You should be able to download the Qterm binary using this new version in just a couple of minutes.
Step by step instructions, apologies if I'm being too verbose with the explanations:
1) Download TeraTerm 4.86 for your PC
from here and install it
2) Download the SuperBasic loader and frontend for XModem receiver
from here
3) Download QTerm distribution
from Dilwyn's site Unzip using your PC, the file you need from the zip is qterm_cde. This is the binary that is a proper communication and file transfer program that knows XModem-1k (a better version of Xmodem) and is able to transfer files both ways
4) Download a
RAM disk driver from Dilwyn's site Unzip it on your PC, the binary you are going to need is called ramdisc_cde. Read the manual inside the zip. This will give you a RAM1_ device that you can use to temporarily store files received using QTerm. Again, using a RAM disk is a good idea to prevent transfer errors and retries due to spinning microdrives if you download direct to a cartridge. Rather, you are better off downloading to RAM disk and then copying to a microdrive
5) Hook up your QL and PC using the serial cable. Without knowing the specifics about how your cable is wired I can't say if it works in ser1 or ser2 port on your QL. You may need to try both
6) Fire up TeraTerm on your PC. When it starts, choose "Serial" as the connection type. The default is "TCP/IP". Choose the correct COM port on your PC.
7) Change Serial port settings. To try and prevent any errors during the initial transfer, go to Setup/Serial Port and choose correct port, 1200 Baud Rate, Data 8-bit, Parity None, Stop 1 bit, Flow control None (you may be able to use "hardware" depending on how your cable is wired
8) On the QL, set the baud rate: "BAUD 1200"
9) Now, let's transfer the SuperBasic loader "xmrecv_bas" to the QL. On the QL, load the basic program through serial port: "LOAD ser1z" N.B. you may need to try port 2 as stated previously. The "z" parameter is rather important, it will let you stop the transfer in an orderly fashion from the PC. The QL will now seem to lock up. It is waiting for data through the serial port.
10) On the PC TeraTerm, choose File/Send file... and pick xmrecv_bas from wherever you saved it to
11) You should see a transfer progress window. Once that closes, press Ctrl-Z (hold Ctrl key and press 'z' key) in the TeraTerm window.
12) Once the file is loaded , you should again see a flashing cursor on the QL. This should only take a minute
12 a) You can now bump up transfer speed a bit: try "BAUD 2400" on the QL and change serial port speed in TeraTerm to match the speed set the QL ("Setup/Serial Port").
13) Now you have a file receiver on the QL. To load the machine code, enter: "load_code".
14) After machine code has loaded, we'll load the QTerm binary - enter: "recv" on the QL. Give the received file a name when prompted, e.g "mdv1_qterm_cde". When prompted for the serial port device name, enter "ser1r", NOTE! this time you need "r", not "z" because we are receiving a binary file
15) When you see the "Press enter to start receiving" prompt, go to TeraTerm and choose "File/Transfer/XMODEM/Send...". Make sure "Checksum" is selected as "Option" at the bottom of the file chooser dialogue box. Choose the qterm_cde binary file from where you unzipped it. Once you have selected the file you should see an "XMODEM Send" window pop up. Now press Enter at the QL prompt. If all goes well, you should see progress messages on the QL and the progress bar should advance in TeraTerm, speed should be around 220 bytes per second or so. The transfer will take around three minutes, I believe. Once the transfer is over, the receiver will save the received binary.
16) Now repeat the process (steps 14-15, no need to reload the code with "load_code") for the ramdisc binary, save it as "mdv1_ramdisc_cde"
17) You now have a RAM disk program and a QTerm binary on microdrive, create a boot file for them so that they load automatically once you start the ql with the microdrive in drive 1. Enter "NEW" and then type in a boot program, something like
this file. Save the boot program as "mdv1_boot"
18) Reset the QL and boot with the new boot file. It should print messages that it loads the qterm binary and ramdisc binary.
19) format a ram disk to receive a file to, e.g.: "FORMAT RAM1_200" (for a 100k RAM disk)
20) type TERMINAL and you'll fire up Qterm, configure settings using F3, set baud rate using F3/B, set port using F3/S Configure port 1 or 2, No parity and 8 bits data. Configure RAM disk as the target through F3/U and enter ram1_ as default device. Now you can send and receive files using XMODEM-1k. Transfers in QTerm are initiated using F2 and then choosing 3 for XMODEM-1k. Then select Send or Receive as appropriate. On TeraTerm side, you should now pick "1k" as transfer type Option (and binary checkmarked) in the XMODEM Send or Receive dialogue window.
21) Experiment with different speed of transfers. I can use the 4800 baud rate on my non-Hermes chipset (regular) QL. This typically results in a few transfer errors but not too many.
Theoretically, you should always first start the "Send" side first and then initiale "Receive" on the other machine but XMODEM does also recover if you do it the other way around if you are fast enough in initiating the "Send" process after "Receive".
Be sure to transfer files first to RAM disk and then copy them over to microdrive.
Whew, that was easy, wasn't it....
Unzip will *just* fit on a microdrive, but I think it will need ToolKit II (again, from Dilwyn's site) to run properly. Remember, if you transfer any EXECable programs to the QL, they need to be unzipped using a QL Unzip program so that their file headers are set properly on the QL. There are quite a few threads on this subject on the forums.
Hope this helps. I tested all the steps with a bare bones 640k QL and a PC and did not have any problems. I guess having a correctly wired serial cable and selecting the right port on the QL are the cornerstones.
Cheers,
Petri