Why
In the early 90’s I needed a way to transfer Atari 8 bit software from an DOS PC to an Atari 8 bit. To solve it I built a null modem cable and connected it between the Atari 850 Interface serial port and the serial port on the PC. It worked at 9600 baud. Today we have much more sophisticated options at our disposal.
In conjunction to the cable I wrote a ProComm+ ASP script that acted as a server and accepted commands. On the Atari I used A-Modem and BobTerm for the communication program. The ASP script parsed input received from the Atari and responded appropriately. It worked great and did what I need it to do.
I used it for transferring files to/from the PC for archive storage, not daily use. Looks like I initially wrote it in 1993, with updates in 97+. If anyone wants to use, yeah right, feel free. This was my poor mans SIO2PC with a lot less features.
I also have a variant for the Atari ST, though I don’t recall using it. But I wrote it so I must have at some point. The main differences I can see is the linefeeds are different and the baud was increased to 19200. However, this post is about the 8 bit version.
Server commands were simple and few:
- UP: Uploads a file from the Atari to the working directory on the PC (Atari -> PC). Supports Kermit, Xmodem (1K), Ymodem, and Zmodem protocols. It prompts for filename and protocol.
- DOWN: Downloads a file from the working directory on the PC to the Atari (Atari <- PC). Supports Kermit, Xmodem (1K), Ymodem, and Zmodem protocols. It prompts for filename and protocol.
- SIZE: Displays the size of a file in bytes, # of Atari single density (SD) sectors, and # of Atari double density (DD) sectors. It prompts for filename.
- WORK: Changes the working directory on the PC. The default working directory is “C:\TEMP”. It prompts for the directory to change to. I have no recollection of why I didn’t use “CD” instead of “WORK”.
- DIR: Generates a directory listing of the current working directory on the PC.
- DEL: Deletes a file from the working directory on the PC. It prompts for the filename to delete.
- TIME: Displays the PC’s current date and time.
- BYE: Disconnects and exits the ASP script on the PC.
- ?: Displays simple help.
The server has a 4 minute wait timeout, then waits again. If I recall correctly this was done to overcome a limitation with ASP.
When using the upload and download functions, after initiating the command on the server side you drop back to the Atari terminals menu and initiate the corresponding function.
ProComm+ ASP Script
The name of the script is ATARI.ASP.
; Script......: ATARI.ASP ; Programmer..: Wade Ripkowski ; Version.....: 1.82 ; Date........: 01/21/93 ; Description.: Places Procomm Plus in a "SERVER" state for link up remotely. ; Revised.....: 03/06/96-Added Zmodem, Kermit, handshaking. ; : 03/07/96-Added Working Directory. ; : 11/29/97-Changed to PC, and corrected several options. ; : 12/23/97-Added DD sectors to SIZE, descreased DIR time. ; : 01/06/98-Added file size to DIR ; : 01/07/98-Added DEL command define ATARI_NUMBER "10" define WAIT_TIME 240 proc main clear locate 0 0 string cmmd string flname string outstr string sppick string stemp string swork string ssendfl string ssizefl long size integer sect integer anoth integer ngetfile set BAUD 9600 set BAUDRATE 9600 set DATABITS 8 set PARITY NONE set STOPBITS 1 set DUPLEX HALF set PORT COM1 set RELAXED ON set CR CR_LF set SOFTFLOW ON set HARDFLOW OFF set ZMODEM AUTODLOAD OFF set KERMIT FILETYPE BINARY set TXPACE 5 set BREAK 350 set ALARM OFF set SOUND OFF set EXPLODE OFF set HOST CONNECTION DIRECT set CDINXFER NO EMULATE TTY message "Waiting 3 seconds...^M" pause 3 transmit "Atari<->PC Host, Version 1.82^M" pause 1 transmit "Copyright (C) 1993,1996,1997,1998^M" pause 1 transmit "S. Wade Ripkowski All Rights Reserved.^M" pause 1 transmit "^MPC signed on!^M" pause 1 swork="C:\TEMP\" transmit "Working PC directory:^M" transmit swork transmit "^M" MAINLOOP: transmit "^MCommand? " rget cmmd 5 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif switch cmmd case "UP" transmit "Upload Protocol?^M" transmit "Kermit Xmodem Ymodem Zmodem Quit: " rget sppick 1 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif ngetfile=1 switch sppick case "X" transmit "^MFilename? " rget flname 80 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif strcpy ssendfl swork strcat ssendfl flname endcase case "Q" transmit "^M" ngetfile=0 endcase endswitch if EQ ngetfile 1 transmit "PC ready to receive: " endif switch sppick case "K" transmit "Kermit...^M" getfile kermit endcase case "X" transmit "1K-XModem...^M" getfile 1kxmodem ssendfl endcase case "Y" transmit "YModem...^M" getfile ymodem endcase case "Z" transmit "ZModem...^M" getfile zmodem endcase case "Q" goto MAINLOOP endcase endswitch endcase case "DOWN" transmit "Download Protocol?^M" transmit "Kermit Xmodem Ymodem Zmodem Quit: " rget sppick 1 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif ngetfile=1 switch sppick case "Q" transmit "^M" ngetfile=0 endcase endswitch if EQ ngetfile 1 transmit "^MFilename? " rget flname 80 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif strcpy ssendfl swork strcat ssendfl flname transmit "PC ready to send: " endif switch sppick case "K" transmit "Kermit...^M" sendfile kermit ssendfl endcase case "X" transmit "1K-XModem...^M" sendfile 1kxmodem ssendfl endcase case "Y" transmit "YModem...^M" sendfile ymodem ssendfl endcase case "Z" transmit "ZModem...^M" sendfile zmodem ssendfl endcase case "Q" goto MAINLOOP endcase endswitch endcase case "SIZE" transmit "Filename? " rget flname 80 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif strcpy ssendfl swork strcat ssendfl flname getfsize ssendfl size strfmt outstr "%ld byte(s)^M" size transmit outstr div size 128 sect strfmt outstr "%d SD sector(s)^M" sect transmit outstr div size 256 sect strfmt outstr "%d DD sector(s)^M" sect transmit outstr endcase case "DIR" transmit "Filespec? " rget flname 80 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif strcpy ssendfl swork strcat ssendfl flname anoth=0 findfirst ssendfl if found strcpy ssizefl swork strcat ssizefl $FNAME strcat ssizefl "." strcat ssizefl $FEXT getfsize ssizefl size anoth=1 transmit $FNAME transmit "." transmit $FEXT transmit " - " strfmt outstr "%ld^M" size transmit outstr endif while anoth ; pause 1 findnext if found strcpy ssizefl swork strcat ssizefl $FNAME strcat ssizefl "." strcat ssizefl $FEXT getfsize ssizefl size transmit $FNAME transmit "." transmit $FEXT transmit " - " strfmt outstr "%ld^M" size transmit outstr else anoth=0 endif endwhile endcase case "TIME" strcpy outstr $DATE strcat outstr ", " strcat outstr $TIME0 strcat outstr "^M" transmit outstr endcase case "WORK" transmit "Directory? " rget stemp 80 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP else strcpy swork stemp transmit "Working PC directory:^M" transmit swork transmit "^M" endif endcase case "DEL" transmit "Filename? " rget flname 80 WAIT_TIME if failure message "Timed OUT!^M" goto MAINLOOP endif strcpy ssendfl swork strcat ssendfl flname isfile ssendfl if success delete ssendfl isfile ssendfl if success transmit "NOT Deleted!^M" else transmit "Deleted!^M" endif else transmit "No Such File!^M" endif endcase case "?" transmit "Commands: ^M" transmit "UP/DOWN/SIZE/DIR/DEL/TIME/WORK/?/BYE^M" endcase case "BYE" goto DONE endcase endswitch goto MAINLOOP DONE: transmit "^MPC signed off!^M" endproc
Well, thats it. Enjoy!