home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / atari / s2pc319.txt < prev    next >
Text File  |  1995-07-03  |  100KB  |  2,193 lines

  1. SIO2PC: An Atari to PC Interface System 
  2.         
  3.               by Nick Kennedy
  4.            
  5.             300 South Vancouver St
  6.             Russellville, AR 72801
  7.                 501-967-3843
  8.  
  9.         D I S C L A I M E R
  10.  
  11. I have tried to ensure that my software is free of harmful 
  12. defects (bugs) and of viruses.  However, either could slip 
  13. through my defenses.  Use the software at your own risk.  
  14. Similarly, I believe my hardware design to be in 
  15. accordance with good practice, and I have a number of 
  16. satisfied users.  However, wiring errors, errors in my 
  17. design, and configuration differences are possible and I 
  18. cannot guarantee that these problems will not lead to 
  19. damage to your equipment or software or other unforeseen 
  20. damages. Use at your own risk.  Furthermore, if you choose 
  21. to construct my interface yourself, you must be 
  22. experienced with electronic building techniques.  Even if 
  23. you are experienced, you could burn or cut yourself or 
  24. experience other damage or injury, for which you must 
  25. assume responsibility.
  26.  
  27. I consider the SIO2PC system to be a service to the Atari 
  28. user's community. Although I accept shareware 
  29. contributions, and do make a charge for assembling 
  30. interfaces or kits, I still consider my efforts to be a 
  31. hobby and a service.  IF YOU HAVE SENT ME ANY PAYMENT FOR 
  32. ANY SOFTWARE, KIT, OR ASSEMBLED INTERFACE AND DO NOT WISH 
  33. TO ASSUME FULL RESPONSIBILITY FOR USE OF OR CONSTRUCTION 
  34. OF THESE ITEMS, YOU MAY RETURN THEM TO ME AND I WILL 
  35. REFUND YOUR MONEY.  IF YOU ARE CONSTRUCTING THE INTERFACE 
  36. AND CANNOT VERIFY THE ADEQUACY OF THE DESIGN ON YOUR OWN, 
  37. SEEK THE ADVICE OF ONE COMPETENT IN ELECTRONICS.  
  38. OTHERWISE, DO NOT ATTEMPT TO BUILD AND USE THE INTERFACE.  
  39. DON'T USE THE SIO2PC ON COMPUTER SYSTEMS USED FOR 
  40. COMMERCIAL PURPOSES OR FOR CRITICAL APPLICATIONS.
  41.  
  42. INTRODUCTION    1
  43. FEATURES:       2
  44. HARDWARE REQUIREMENTS:  2
  45. HISTORY:        3
  46. SHAREWARE INFO: 3
  47. READ ALL ABOUT IT:      3
  48. TECHNICAL INFORMATION ON SIO2PC 4
  49. REMOTE CONTROL PROGRAM: 5
  50. FILE2PC PROGRAM:        5
  51. STRUCTURE OF AN SIO2PC ATARI DISK IMAGE:        6
  52. USING RAMDISKS: 7
  53. TIMING INFORMATION:     7
  54. DOUBLE DENSITY: 9
  55. FORMATS vs DISK SIZES:  9
  56. FILE ACCESS: How it works & tips on efficiency  11
  57. MORE DISK CONFIGURABILITY:      12
  58. SIMULATED DISKS:        14
  59. PRINT-THRU:     15
  60. UNINSTALL DISK: 17
  61. STATUS LINE INFO:       18
  62. PC MEMORY USAGE:        19
  63. DOS SHELL FEATURE:      19
  64. VIRUS DETECTION:        19
  65. REMOTE CONTROL PROGRAM USAGE    20
  66. MAKADISK.EXE    21
  67. FILE2PC USAGE INFORMATION       22
  68. FUTURE PLANS, CURRENT PRICING   23
  69. REVISION LOG:   25
  70. PROBLEM DIAGNOSIS QUESTIONS     33
  71. POSSIBLE PROBLEMS AND SOLUTIONS 33
  72. USER'S QUESTIONS        36
  73. WHO'S NICK KENNEDY?     39
  74. OTHER PROGRAMS  39
  75.  
  76.  
  77. INTRODUCTION
  78.  
  79. Greetings Atari and PC users! SIO2PC is now a "Shareware" 
  80. product.  If you know little or nothing about the system, 
  81. let me give you a rundown. A separate text file, 
  82. SIOINSTR.TXT, gives more detailed information on running 
  83. the system and describes its features.
  84.  
  85. SIO2PC is a hardware interface and software utility 
  86. package to allow storage of your Atari files on your PC's 
  87. hard and floppy disks, file conversions in both 
  88. directions, and Atari printer output redirection to your 
  89. PC's printer, screen, or file. 
  90.  
  91. FEATURES:
  92.  
  93. Create 1 to 4 virtual Atari disks on your PC.
  94.  
  95. Virtual disks can be ramdisks or physical file access 
  96. disks; disk images can be up to 65525 sectors in 
  97. size.
  98.  
  99. Save Ramdisks to PC hard or floppy disks.
  100.  
  101. Boot from the PC. Real drive not needed to start-up.
  102.  
  103. Create Single or Double density ram-drives.
  104.  
  105. No special Atari software patches. Use your favorite 
  106. DOS.
  107.  
  108. Almost twice as fast as an Atari 810 drive. 
  109.  
  110. Co-exists in the Atari daisy chain with "real" 
  111. drives.
  112.  
  113. Software written in assembler: Compact and Fast.
  114.  
  115. Compatible all the way down to the hardware level - 
  116. CIO, SIO, even direct hardware calls to drives will 
  117. work.
  118.  
  119. Print-Thru mode sends your Atari's printer bound 
  120. output to your PC's  Printer, Screen, or file.
  121.  
  122. File Conversion: Convert and transmit PC files to 
  123. Atari, or Atari files to PC files.
  124.  
  125. Won't endanger your PC's hard disk. Your Atari disk 
  126. images are stored as ordinary PC files. No direct 
  127. sector writes used.
  128.  
  129. Status line shows you exactly what your Atari is 
  130. telling your disk drives: drive number, command, and 
  131. sector number.
  132.  
  133. HARDWARE REQUIREMENTS:
  134.  
  135. SIO2PC connects any PC compatible computer to any of the 
  136. Atari 8 bit computers (400, 600, 800, 800XL 130XE).
  137.  
  138. The interface between your PC's serial port and your 
  139. Atari's SIO port requires a simple interface. It uses two 
  140. IC's and a few capacitors and can be built on a 2" X 3" 
  141. prototype board. If you are handy with a soldering iron, 
  142. read the BUILD_IT.DOC file on your disk. It gives complete 
  143. instructions, including addresses of parts suppliers. If 
  144. you wish, I'll build one for you, or provide you a kit of 
  145. all parts with drawings and detailed instructions. See 
  146. BUILD_IT.DOC.
  147.  
  148. HISTORY:
  149.  
  150. SIO2PC has been over 5 years in the making. Before I got 
  151. my PC, I considered my alternatives for my trusty Atari 
  152. 800. Should I invest in an adapter and hard disk for the 
  153. Atari? I realized that the huge PC market made an entire 
  154. PC with hard drive almost as cheap as adding a drive to my 
  155. Atari. So why not do both? The PC could store my Atari 
  156. programs (get rid of that huge pile of floppies), and I'd 
  157. have a new computer to boot! The project has worked out 
  158. better than I could have imagined. The PC is a great 
  159. computer - in some areas. In areas where it is weak, the 
  160. Atari still shines. Curing the Atari's mass storage 
  161. weakness makes it even better.
  162.  
  163. SHAREWARE INFO:
  164.  
  165. As you no doubt know, Shareware is a system which allows 
  166. you to receive freely distributed software, and pay for it 
  167. if you find it useful. If you build the interface and find 
  168. that the system is useful, I request the modest sum of $10 
  169. for the design and software. If you choose to buy the kit 
  170. or assembled interface from me, no additional payment for 
  171. the software is expected. Either way, registered users may 
  172. upgrade to the latest revision by sending a disk sized 
  173. SASE and $5.00. Your suggestions will be considered for 
  174. future revisions. So far, I have always been able to 
  175. personally respond to questions and problem reports.
  176.  
  177. READ ALL ABOUT IT:
  178.  
  179. Don't you hate to write off for a shareware program that 
  180. looks good in the ad, only to find an endless README file 
  181. describing the limitless complexities of the package? Now 
  182. that I'm on the creating end of that particular method of 
  183. information overload, I can see how documentation files 
  184. just grow... But - SIO2PC is a simple menu driven program 
  185. which can, I believe, be mastered without instructions. 
  186. So, skim through the rest of this file and the other .DOC 
  187. files for tidbits, and return only if you have problems or 
  188. specific questions after you get your system going. Of 
  189. course, if you decide to build it yourself, you will want 
  190. to read BUILD_IT.DOC carefully. Also, go ahead and run 
  191. SIO2PC.COM and play with the menu options a bit, even 
  192. without the interface. It won't hurt anything. Note: This 
  193. DOC file gives some problem resolution information, 
  194. technical information, and more information on file 
  195. transfer features. For a more concise user's guide to the 
  196. program, see the SIOINSTR.DOC file.
  197.  
  198.         A NOTE ON A RELATED HARDWARE DEVELOPMENT
  199.  
  200. Recently, an SIO2PC user told me he was developing a 
  201. hardware project which would allow him to type on the PC 
  202. and have the keystrokes transmitted to the Atari via a PC 
  203. parallel port and custom Atari interface.  The system also 
  204. comminicated joystick positions, START, SELECT, OPTION, 
  205. and SYSTEM RESET button status to the Atari - AND allowed 
  206. turning the Atari on and off remotely, and turning the 
  207. Atari's cartridge on and off.  His idea was to tuck the 
  208. Atari away, into a desk drawer or something, and do 
  209. everything from the PC's keyboard.  He asked me to write 
  210. to software for this project and integrate it into SIO2PC, 
  211. which I have done.  The hardware is more complicated than 
  212. an SIO2PC, having 8 or 10 chips and requiring internal 
  213. installation in the Atari.  If this sounds interesting to 
  214. you, I'd be glad to send you the schematic and a version 
  215. of SIO2PC which includes the control functions for this 
  216. modification.  If you'd like to contact the designer of 
  217. the interface, he is Carl Mangaroni, 15764 Midwood Drive 
  218. Suite 5, Granada Hills CA 91344  phone 818-363-1037.
  219.  
  220. And another:  
  221.  
  222. A programmer named Darek Mihocka recently (7/94) released 
  223. a freeware version of an Atari 800 emulator which runs on 
  224. the PC.  The faithfulness with which it emulates the Atari 
  225. is unbelievable.  It emulates a 6502 processer and the 
  226. Antic video microprocessor perfectly and includes the 
  227. actual Atari OS and BASIC code.  It doesn't yet have 
  228. sound, but he will add that and other features in a future 
  229. version for a modest price.  I mention this partly because 
  230. every serious Atari 8 bit fan with a PC must have it and 
  231. partly because it will read SIO2PC format disk images.  So 
  232. by having SIO2PC, you have the capability to transfer your 
  233. files to the PC for access by Darek's XF2 emulator.
  234.  
  235.  
  236. TECHNICAL INFORMATION ON SIO2PC
  237.  
  238. SIO2PC is 100% written in PC assembly language. REMOTE.OBJ 
  239. and FILE2PC.OBJ are written in 6502 assembly language. 
  240. MAKADISK.EXE is written in 'C'.
  241.  
  242. SIO2PC recognizes the basic SIO bus commands: READ SECTOR, 
  243. WRITE SECTOR, PUT SECTOR, STATUS, FORMAT, FORMAT 1050 1.5 
  244. DENSITY. 
  245.  
  246. Because it works at this elementary level, it should work 
  247. with any DOS and with non-DOS disk loader programs. You 
  248. can also make boot disks (without DOS) and boot them from 
  249. the PC.
  250.  
  251. SIO2PC uses only MS-DOS calls to do file I/O on the PC. 
  252. Because there are no direct sector writes, etc., SIO2PC 
  253. won't trash your PC disks. Just use the right 
  254. path/filename when doing writes.
  255.  
  256. SIO2PC uses file handles, so I assume it will require 
  257. MSDOS or PCDOS 2.0 or later.
  258.  
  259. SIO2PC redirects the timer 0 interrupt for it's timing 
  260. purposes. This is the timer which supplies the BIOS its 
  261. "timer tick", 18 times per second, 55 milliseconds per 
  262. tick. SIO2PC also directly reads the timer as it is 
  263. counting down in a routine for more fine timing (the 
  264. microsecond level). If your PC doesn't use the standard 
  265. timer chip (or compatible) with standard port addresses, 
  266. there could be problems. Note: Most PC Clones are HIGHLY 
  267. hardware compatible.
  268.  
  269. SIO2PC gets the port address for the specified COM port 
  270. from bios data area words at 040:0000, 040:0002, 040:0004, 
  271. 040:0006 for COM  1,2,3, and 4. I've found out that the 
  272. POST routine typically doesn't set up the addresses for 
  273. ports 3 & 4. Therefore, version 1.01 will use default port 
  274. addresses 03F8, 02F8, 03E8, 02E8 for COM 1 - 4 if it finds 
  275. a zero in the BIOS data area word. If you know your port 
  276. addresses to be other than this, a third option is now 
  277. available. Use your computer's documentation to find the 
  278. base address, and use SIO2PC's  "E" command to enter the 
  279. addresses directly.
  280.  
  281. REMOTE CONTROL PROGRAM:
  282.  
  283. The Atari serial bus reserves device ID's 31 - 38 hex for 
  284. disk drives 1 thru 8. I have used ID #39h for the remote 
  285. control function. When the SIO2PC program finds this ID # 
  286. in a command frame, along with a Write Sector command, it 
  287. expects to receive one sector (128 bytes) containing a 
  288. command string. It then acts on the string as 
  289. if it were a command tail from the DOS command line. Any 
  290. error, or the Atari EOL character, will terminate command 
  291. processing and flush the line of any further commands. It 
  292. is best to end the string with a space as a delimiter, 
  293. especially if your command ends in a pathname, else your 
  294. PC may pause waiting for input or an ENTER keystroke. A 
  295. REV 2.1 change added this function to the REMOTE process: 
  296. When DEVID = 039h and DCOMND = 'R', the SIO2PC sends a 128 
  297. byte data frame to the Atari containing the DISK status 
  298. information string shown on the screen. The string sent 
  299. depends on the contents of DAUX1 which must contain 1 - 8 
  300. for disks 1 - 8. This function allows REMOTE.OBJ on the 
  301. Atari to update the user as to the status of the ramdisks, 
  302. before and after the execution of the remote function. In 
  303. this way, the user can see if his remote command went to 
  304. error free completion. In some cases, the PC may be busy 
  305. carrying out the command when the data request is 
  306. received. For example a command to write a ramdisk out to 
  307. a floppy disk may take 10 seconds or so. Therefore, 
  308. REMOTE.OBJ tries 3 times, pausing 4.25 seconds between 
  309. retries, before giving up on getting the information. 
  310.  
  311. FILE2PC PROGRAM:
  312.  
  313. The FILE2PC program also uses its own bus ID as a trigger 
  314. for the FILE2PC program. ID# 03Ah puts the  program into 
  315. File Transfer mode. The Atari (running FILE2PC) always 
  316. asks for Status of device 03Ah before putting a sector. 
  317. (Only Status and Write are recognized by device 03Ah.) If 
  318. the first status byte (of 4) is normal (010h), then the PC 
  319. is ok for the transfer mode. If it is 0FFh, then the Atari 
  320. will abort because the PC has encountered an error. The 
  321. process works like this: The Atari gets Status, then, if 
  322. OK, it sends a sector to the PC. The PC assumes that this 
  323. sector contains the pathname of the destination file, 
  324. terminated in an ATASCII EOL. The Atari pauses 4 seconds 
  325. while the PC attempts to create the file. (Note, any 
  326. existing file of the specified pathname will be 
  327. overwritten.) After the Atari gets another good status, it 
  328. starts sending sectors of file information. 
  329.  
  330. The AUX bytes, which usually carry  sector # information, 
  331. communicate the following to the PC: 
  332.  
  333. AUX1 = 0:       Full sector, 128 bytes AUX1 = 1:        Last 
  334. sector, AUX2 contains the byte count
  335. AUX1 = 2:       Atari encountered an error, abort process.
  336.  
  337. As I said, the Atari asks the PC for Status after every 
  338. write.
  339.  
  340.  
  341. STRUCTURE OF AN SIO2PC ATARI DISK IMAGE:
  342.  
  343. It's extremely simple. There is first a 16 byte header 
  344. with the following information:
  345.  
  346. WORD = special code* indicating this is an Atari disk file
  347. WORD = size of this disk image, in paragraphs (size/16)
  348. WORD = sector size. (128 or 256) bytes/sector
  349. WORD = high part of size, in paragraphs (added by REV 
  350. 3.00)
  351. SPARES 8 (ten) unused (spare) header bytes (contain 
  352. zeroes)
  353.  
  354. After the header comes the disk image. This is just a 
  355. continuous string of bytes, with the first 128 bytes being 
  356. the contents of disk sector 1, the second being sector 2, 
  357. etc.
  358.  
  359. * The "code" is the 16 bit sum of the individual ASCII 
  360. values of the string of bytes: "NICKATARI". If you try to 
  361. load a file without this first WORD, you get a "THIS FILE 
  362. IS NOT AN ATARI DISK FILE" error message. Try it.
  363.  
  364. USING RAMDISKS:
  365.  
  366. SIO2PC uses, or can use, the PC's hard or floppy disks to 
  367. store Atari disk information. However, to give maximum 
  368. speed, the disk information can be buffered via a ramdisk 
  369. set up in the PC's ram space. When the Atari reads/writes 
  370. its SIO2PC "disks", it is actually communicating with the 
  371. ramdisks in the PC's memory. The user can choose to load a 
  372. ramdisk image or save one back to physical disk at any 
  373. time via menu selection.  For files too large to be 
  374. installed as ramdisks, file access to the disk image is 
  375. used.
  376.  
  377. TIMING INFORMATION: 
  378.  
  379. The Atari SIO2PC bus protocol specifies minimum and 
  380. maximum times between Atari commands and disk drive's 
  381. responses. The minimums give the Atari time to get ready 
  382. to take the data from the bus if it has to do some other 
  383. work in the interim. The maximums let the Atari decide 
  384. that the peripheral isn't ever going to answer and it will 
  385. give a "time out" error. I have found that the system is 
  386. very flexible and forgiving. I have used wide variations 
  387. and still had a workable system. But for one guy (you know 
  388. who you are, Joe!) or maybe two, I've made this menu to 
  389. allow you to experiment with different values. The system 
  390. goes through this little dance of command - acknowledge - 
  391. data - acknowledge - complete, etc with timings in 
  392. between. In addition to these times inside the bus frame, 
  393. I've made a couple more (normally zero) time delays 
  394. available.
  395.  
  396. First: On a serial bus, data is normally sent 
  397. continuously, with no time (except start and stop bits) 
  398. between bytes. Now you can experiment by adding some time 
  399. here. (My system slowed down but still ran normally.) 
  400.  
  401. Second: Some publications say that some UART (serial) 
  402. chips can't stand to be addressed as fast as some PC's are 
  403. capable of addressing them. I already had a bit of time 
  404. delay in there, but now you can add some more. The time 
  405. delays work like this: Each unit is 850 nano-seconds which 
  406. is almost 1 micro-second. (Multiply units by .85 to get 
  407. micro-sec.) (Exception: the value for the printer delay is 
  408. in 1/18ths of a second.) Also, you must enter the units as 
  409. a 4 digit hex number. Don't panic, it's easy. Here are 
  410. some conversions:
  411.  
  412.         DECIMAL         HEX
  413.  
  414.         0005                    0005
  415.         0010                    000A
  416.         0050                    0032
  417.         0100                    0064
  418.         0250                    00FA
  419.         0500                    01F4
  420.         0750                    02EE
  421.         1000                    03E8
  422.         2000                    07D0
  423.  
  424. The timing menu gives default values you can use as a 
  425. starting point. If you want to see the menu updated with 
  426. your choices, an item is available from the menu (choose 
  427. #8).
  428. One problem with the TIMINGS menu is that it can't be 
  429. addressed from the command line tail, so if your system 
  430. does need non- standard timings, you have to set them up 
  431. manually, each time you run the program. Not any more, 
  432. Joe! Here's a procedure to permanantly alter your program:
  433.  
  434. This procedure uses DOS's little utility "DEBUG," because 
  435. everyone has it. But you could use NORTON or similar if 
  436. you want. I moved the timing values to the front of the 
  437. program and put an ASCII string in front of it to make it 
  438. easy to spot. Try this:
  439.  
  440. Get into the directory containing SIO2PC.COM. On the DOS 
  441. command line, type DEBUG SIO2PC.COM <ENTER>. Now you see a 
  442. hyphen, which is the DEBUG prompt. Now, type D <ENTER>. A 
  443. table of hex numbers appears. On the left is the 
  444. corresponding SEGMENT:OFFSET address for the first entry 
  445. of each line. On the right is the corresponding ASCII 
  446. (text) representation of the hex bytes. You notice that my 
  447. little flag, "TIME DELAY VALUES: T1-T8, 2 BYTES PER 
  448. ENTRY:" takes you up to the line starting with offset 
  449. :0130. That line contains the timing values and looks like 
  450. this:
  451.  
  452. ????:0130 ?? ?? ?? 64 00 B0 04 2C-01 etc.
  453. Here's the slightly tricky part: Each of those 2 digit hex 
  454. numbers is a byte. But each timing value is a WORD (2 
  455. bytes). And the PC stores words as lower part first. So 
  456. the values are: T1 = 0064, T2 = 04B0, T3 = 012C, etc. 
  457.  
  458. The good part is, you don't need to worry about all this 
  459. junk, we're gonna fix it in a very easy way. If you have 
  460. been following me and are now in DEBUG, get out of it by 
  461. typing Q <ENTER>. Now, I recommend that you copy 
  462. SIO2PC.COM onto a floppy because it's a little scary using 
  463. DEBUG to write to one's hard disk. Ok, you've done that 
  464. and you have the floppy in drive A:. Get into A: by typing 
  465. A: <ENTER>. Now, type DEBUG SIO2PC.COM <ENTER>. Give the 
  466. "GO" (run) command by typing G <ENTER>. SIO2PC runs from 
  467. the floppy. First give it a port number, then go to the 
  468. "A" menu and change the timings values to those you have 
  469. found to work on your system. Now, leave the timings menu 
  470. and QUIT SIO2PC. You will see by the hyphen that you are 
  471. back in DEBUG. Type W <ENTER> and the program will be 
  472. written back to the disk file. Quit DEBUG with Q <ENTER>. 
  473. Now run SIO2PC without DEBUG, and call up the timings menu 
  474. again. You will see that the DEFAULT column stayed the 
  475. same but the CURRENT values are now permanently altered. 
  476. Hey, I didn't know that DEBUG could be so useful, did you?  
  477. NOTE: You should get a message saying program changed, 
  478. possible virus.  Just choose to write a new CRC and the 
  479. program will be fixed.
  480.  
  481. DOUBLE DENSITY: 
  482. The Atari expects the first 3 sectors on a disk to be 
  483. single density. This is necessary if you are to be able to 
  484. boot from the disk. SIO2PC uses this format for its double 
  485. density mode.
  486.  
  487. FORMATS vs DISK SIZES:
  488.  
  489. I generally haven't restricted these things, but recommend 
  490. the following: Use 143K size only for "enhanced" or "1.5" 
  491. or "DOS 2.5" density. The 183K size was created for double 
  492. density. A lot depends on your DOS. Some DOS's can figure 
  493. out the actual size of a disk, others may assume a 
  494. default. MYDOS is pretty smart. SPARTADOS probably is 
  495. also. As of REV 3.00, SIO2PC responds to "get" and "set" 
  496. configuration commands, and also allows you to select any 
  497. size disk you want by specifying the number of sectors.
  498.  
  499. As a result of changes made in REV 3.00 and beyond which 
  500. allow HUGE disk images, I now have additional information 
  501. to present on disk sizes:
  502.  
  503. File Access and BIG disks
  504.  
  505. The biggest change is the addition of file access to disk 
  506. images.  Since this type of access doesn't require setting 
  507. up ramdisks, the disk image size isn't limited by 
  508. available ram.  You may choose the size of your disk 
  509. images using new size choice #5.  You specify the size in 
  510. sectors.  If you're interested in what this means in 
  511. kilobytes, you can figure it from the fact that a sector 
  512. is 128 bytes for single density disks and 256 bytes for 
  513. double density.  Remember the status line field that shows 
  514. 'W' if you've written to a ramdisk but not saved it?  (And 
  515. 'N' if the file has been saved.)  For direct file access 
  516. type disks, this field will contain an 'F'.
  517.  
  518. Note that you can force the system to use file access, 
  519. even when there is enough ram for a ramdisk.  You do this 
  520. by following the filename by "/P" for physical file 
  521. access. Don't put a space between the filename and the 
  522. "/P".  The "P" will appear on your status line. (The "/" 
  523. won't.)
  524.  
  525. Concerns about Speed
  526.  
  527. I was concerned that the overhead of using DOS and having 
  528. physical disk accesses might slow the system down.  On my 
  529. two PCs, this hasn't been a problem when using hard 
  530. drives.  I use disk caches on both systems and can't tell 
  531. any difference between "ramdisk" and "file access" speed.  
  532. With a floppy disk, my fears were justified.  Access was 
  533. slow enough that the Atari would time out and generate 
  534. errors.  But, when I installed a disk cache, floppy disk 
  535. access worked fine too.  Some disk caches don't support 
  536. floppies.  Smartdrive (supplied with DOS 5 and WINDOWS) 
  537. doesn't.  I used one called LIGHTING.  It worked fine 
  538. using conventional memory while Smartdrive continued to 
  539. run using extended memory.
  540.  
  541. Get/Set Configuration
  542.  
  543. Even after I first made some BIG disks, MYDOS 4.5 still 
  544. couldn't figure out that they were bigger than a standard 
  545. 810 or 1050 disk.  The standard Atari SIO protocol doesn't 
  546. include a means for the drive to tell the Atari what it is 
  547. capable of (except in a very limited way).  I found that I 
  548. had to implement the extended SIO commands for Get and Set 
  549. Configuration so MYDOS would realize the actual size of 
  550. the disk.  MYDOS does some of this automatically (reads 
  551. configuration on bootup).  But I found that I had to 
  552. explicitly do this in sequence so MYDOS would realize the 
  553. disk size:
  554.  
  555. Create the new (blank) disk image.
  556.  
  557. Use the Set Configuration command, answering 
  558. questions as follows:  Configurable? Yes.  High 
  559. Capacity? Yes.  Number of Sector? xxxx.  Do this 
  560. before formatting.
  561.  
  562. Format the new disk image.
  563.  
  564. Actually, SIO2PC doesn't do anything with the Set 
  565. Configuration command other than acknowledge it.  But it 
  566. lets MYDOS know that the disk is capable of more sectors 
  567. than a standard disk.  The program WAS going to also warn 
  568. you if you tried to set the wrong density.  But it turns 
  569. out that MYDOS always tries to set high density when you 
  570. answer "Yes" to "High Capacity Drive?".  This doesn't 
  571. cause a problem though: single density still works OK.  
  572. I'm describing MYDOS because it's what I use.  YOUR Atari 
  573. DOS may have its own quirks with regard to large drives. 
  574. MYDOS can become confused when you use the SIO2PC Swap 
  575. Disk I.D.s command.  MYDOS associates a certain disk 
  576. number with a certain configuration.  You may have to 
  577. uninstall and reconfigure the drive with MYDOS when you 
  578. swap disks of different types.
  579.  
  580. Formatting
  581.  
  582. With regard to formatting, it can take a long time with a 
  583. BIG disk image, especially on a floppy.  SIO2PC sets a 
  584. flag when you first create the disk, to tell itself that 
  585. the disk image is already blank.  So, when you format it, 
  586. the program doesn't bother clearing the disk.  This saves 
  587. a lot of time.  After you write to the disk, the flag is 
  588. cleared.  Then, formatting includes clearing the entire 
  589. disk image file.  This could cause the Atari to time out 
  590. and not realize the format was successful.  So you may 
  591. want to avoid formatting "used" disk images.  I can't 
  592. think of a reason you'd want to.  (CREATING a new disk 
  593. image can take a while too, but the Atari isn't involved 
  594. in this process, so it won't get impatient.)  I may 
  595. improve the program to speed up this process if it's a 
  596. problem.  But creating new BIG disks will probably be an 
  597. infrequent operation for most of us.
  598.  
  599. *** NOTE: In a "rev 3.00 and 1/2" modification, I have 
  600. taken a big step toward curing the slow formatting 
  601. problem.  Instead of writing blank sectors one at a time, 
  602. I now write zeroes in blocks of 4K at a time, dividing the 
  603. number of DOS calls by 32.  This only works if there is at 
  604. least 4K of free ram. Otherwise, formatting will still 
  605. work slowly, as described above. 
  606.  
  607. Note that you need to be a bit more careful when 
  608. formatting file access disks.  With ramdisks, you could 
  609. always choose to not save the formatted disk image, so 
  610. your original was safe.  With file access, formatting 
  611. actually clears your disk image file.
  612.  
  613. Another addition with this revision is that you can now 
  614. number your disks as 1 - 8 instead of 1 - 4.
  615.  
  616. Incidentally, you may wonder why your old 92K and 143K 
  617. disks are now 90K and 140K.  This has to do with the 
  618. difference between a kilobyte as 1000 bytes and a kilobyte 
  619. as 1024 (2^10) bytes.  Revision 3.00 divides the disk size 
  620. in bytes by 1024 to establish the disk size. 
  621.  
  622. FILE ACCESS: How it works & tips on efficiency
  623.  
  624. It's pretty simple.  MS-DOS maintains a pointer into open 
  625. files which can be set by the program. SIO2PC maintains a 
  626. corresponding pointer to the next Atari sector. When 
  627. SIO2PC receives a read or write sector request from the 
  628. Atari, it calculates the file offset from the sector 
  629. number.  It compares this to its record of where the 
  630. pointer is now. If they differ, it asks DOS to point to 
  631. the new location.  Then it asks DOS to read or write 128 
  632. (or 256) bytes and increments its internal sector pointer 
  633. by one, since DOS's pointer will now be at the next 128 or 
  634. 256 block of the file.  As you can see, if the Atari asks 
  635. for sectors sequentially the pointer automatically moves 
  636. along in step and no separate requests to reposition the 
  637. pointer are needed.  This is a good reason to try to keep 
  638. your disk images unfragmented.  Actually, it's possible to 
  639. have things DOUBLY fragmented: fragmented Atari disk 
  640. images and fragmented PC disks.  To avoid Atari 
  641. fragmenting, you should first put files on the disk which 
  642. you won't be deleting or changing: DOS, games, application 
  643. programs.  Last, put on any stuff that will change: data 
  644. files, text files, etc.  If you suspect your disk is 
  645. fragmented it's easy to undo.  Just do a file copy (*.*) 
  646. from the fragmented disk image to a newly created and 
  647. formatted blank disk image.
  648.  
  649. MORE DISK CONFIGURABILITY:
  650.  
  651. I've heard lots of reports about the inability to format 
  652. certain disk image sizes.  My adding the "get 
  653. configuration" and "send configuration" functions in Rev 
  654. 3.00 in some cases seemed to make matters worse.
  655.  
  656. I'm now getting into an area where the specific DOS one 
  657. uses makes a difference.  So my treasured concept of "DOS 
  658. independence" of SIO2PC is going out the window.  The 
  659. problem is this:  How can the system tell the Atari 
  660. exactly what size and type of disk it is emulating?  The 
  661. 12 byte configuration table exchanged via the GET/SEND 
  662. CONFIGURATION commands would seem to be the answer.  
  663. Unfortunately, both MYDOS and SPARTADOS admit to ignoring 
  664. most of the information exchanged.  The variables are:
  665.  
  666. SINGLE/DOUBLE DENSITY: 128 or 256 bytes/sector
  667. SINGLE/DOUBLE SIDED DISK
  668. NUMBER OF TRACKS/SIDE: TYP: 35, 40, 77, 80 expected
  669. NUMBER OF SECTORS/TRACK: TYP: 18 or 26 expected
  670.  
  671.  
  672. The MYDOS doc indicates that it likes to consider the disk 
  673. to be one huge track containing all the sectors.  This 
  674. seems to work pretty well for SIO2PC.
  675.  
  676. SPARTADOS evidently expects to receive information which 
  677. matches its expectations about certain combinations.  The 
  678. sizes under the choice 6/Other are intended to give 
  679. SPARTADOS what it expects.  (As standards, they are 
  680. probably good for other DOSes too.)
  681.  
  682. One thing I've recently learned (I think it's true, 
  683. anyway) is that SPARTADOS considers 26 sectors/track to be 
  684. "1050 enhanced density" in all cases except for 77 track 
  685. drives which always have 26 sectors/track.
  686.  
  687. The bottom line is this:  Even though you can choose a 
  688. disk image of any size with the new SIO2PC option #5, you 
  689. may have to adhere to certain standard sizes when using 
  690. SPARTADOS.  I've added a lookup table to the program.  If 
  691. the disk size matches a  certain standard, it reports a 
  692. combination of standard values to the Atari.  Otherwise, 
  693. it uses the MYDOS technique of 1 track holding all 
  694. sectors.  Note that this routine puts a tilde ( ~ ) in the 
  695. ERR field of the status line if it finds a standard size.  
  696.  
  697. Note that when you choose double density, the basic 1, 2, 
  698. 3, & 4 choices won't be seen as a standard size, but the 
  699. equivalent chosen from sub option 6/More WILL, for 
  700. technical reasons too boring to go into here.  As I've 
  701. said, this usually doesn't matter, because most DOSses 
  702. don't use the GET/SEND configuration capabilities anyway.
  703.  
  704. You could compute some standard sizes like this:
  705.  
  706. Number of Sectors = (#TRACKS * #SIDES * # SECTORS/TRACK)
  707.  
  708. Size in Bytes = (Number of Sectors) * (#Bytes/Sector)
  709.  
  710. (For the Size in Bytes, subtract 384 for double density, 
  711. because the first 3 sectors are always 128 bytes.)
  712.  
  713.  
  714. All YOU have to pay attention to is the density and the 
  715. number of sectors. SIO2PC will report the other numbers to 
  716. the Atari. For MYDOS, just randomly picking a number of 
  717. sectors, without regard to standard sizes, seems to work 
  718. fine.
  719.  
  720. As I said before, the addition of the GET and SEND 
  721. CONFIGURATION info commands in some cases did more harm 
  722. than good.  For this reason, I've added yet another 
  723. feature.  Now you can turn on or off the configuration 
  724. transfer function.  Since the main menu was getting full, 
  725. I added this to the TIMINGS menu.  Just hit 'A' to see the 
  726. timings menu.  Then hit 'C'.  The status of the installed 
  727. disks will be shown.  'Y' means they DO respond to 
  728. configuration commands.  Enter the disk's number to toggle 
  729. its status with regard to this function.  I believe this 
  730. should only be necessary when getting ready to format, if 
  731. at all.
  732.  
  733. I realize this discussion of REV 3.01 isn't exactly 
  734. simple.  I hope you can glean the necessary info from it.  
  735. It should be worth the effort to get ULTRA SPEED going and 
  736. to cure formatting problems.  Call or write if you have 
  737. problems, bugs, or suggestions.  I'd especially like any 
  738. SPARTADOS experts to tell me how it tells me to go back to 
  739. high speed.
  740.  
  741. What is the '@' command SPARTA sends to device $4F?  Also 
  742. any info on how to get SPARTADOS to accept ANY size disk 
  743. image would be useful.
  744.  
  745. Rev. 3.05:
  746.  
  747. I added many more choices to the standard disk sizes for 
  748. the "create disk" option (option #6).  The new choices are 
  749. those which correspond the selections in the SPARTADOS 
  750. format menu.  This is to make your choices easier when 
  751. using SPARTADOS. Internally, things still work the same.  
  752. Again, with MYDOS, you shouldn't need to worry about 
  753. certain prescribed sizes.  Rev. 3.17 refined and corrected 
  754. much of this.
  755.  
  756. SIMULATED DISKS:
  757.  
  758. The main event for 3.05 is the addition of what I call 
  759. "simulated" disks.  This allows you to install any PC file 
  760. as an Atari disk, without the necessity of converting it 
  761. to an Atari disk image..  This is more or less intended to 
  762. replace the much despised MAKADISK.EXE.  The features, 
  763. theory of operation, and limitations are described below:
  764.  
  765. The simulated disk is always single density (no size 
  766. limit) and DOS 2.0/2.5/MYDOS compatible.  It can't be 
  767. written to, and can only be read sequentially (no random 
  768. access).  You CAN copy your executable files to the PC 
  769. with FILE2PC and load (run) them directly using this new 
  770. function.  If you ask for a directory, you will see the PC 
  771. file's filename on your Atari. (The length in sectors has 
  772. no meaning.) Normally, after the end of file has been 
  773. reached, the system automatically unloads the disk.  If 
  774. you don't want this, use the /N (no space) option after 
  775. the filename and the file pointer will be reset to the 
  776. start of the file after the end is reached - making the 
  777. file available to read again.  A new command has been 
  778. added to install the simulated disk - the "I" command.  It 
  779. replaces the old "Z" command (create double) which is now 
  780. a separate choice under the Create Disk option.
  781.  
  782. The new function works like this:  A simulated directory 
  783. sector is given on demand (#361). (When read, it causes 
  784. the file pointer to be reset to the start of the file.)  
  785. There is also a simulated sector #1 and sector #360 
  786. because some DOSes read these sectors to get information 
  787. about the disk. The simulated directory supplies a dummy 
  788. sector pointer to sector 401 to start the file. Each 
  789. simulated data sector increments the sector number for the 
  790. "next sector" link.  Thats why the status line will show 
  791. you reading sector 401 thru 700. Then, it rolls down to 
  792. number 401 again.  So if it rolls over, you have read 300. 
  793. (As of 3.10, trying to write doesn't return an error to 
  794. the Atari, it "pretends" to write the  sector.) Trying to 
  795. read a sector out of sequence doesn't return an error 
  796. either.  The program would still just supply the next 125 
  797. file bytes if this happened.  Note: if you need full 
  798. functionality (READ, WRITE, RANDOM ACCESS) for your Atari-
  799. file-on-a-PC, just copy it to an Atari (SIO2PC) disk 
  800. image.
  801.  
  802. There are a lot of uses for this new feature.  You can 
  803. download Atari files to your PC and immediately load/run 
  804. them on the Atari.  You could program in 6502 on the PC 
  805. using a cross assembler and load the files to the Atari 
  806. with no translation required. You may choose to keep some 
  807. favorite programs available under a "one Atari file per PC 
  808. file" basis as an alternative to having files under Atari 
  809. disk images.
  810.  
  811. With rev. 3.11, boot files may also be simulated.  To use 
  812. this feature, just put /B after the file name.  You can 
  813. combine /B and /N if you want.  The program will send the 
  814. next sequential 128 bytes to the Atari each time it 
  815. requests a sector, until the end of file is reached.
  816.  
  817.  
  818. PRINT-THRU:
  819.  
  820. The serial bus ID for the Atari printer is 040h. With 
  821. PRINT-THRU in effect, the program answers bus commands 
  822. directed to the printer and routes the data to the PC's 
  823. printer or screen, as selected. Note that the Atari uses 
  824. an EOL character (09B hex) to mark the end of line, while 
  825. the PC uses carriage return and line feed (CR/LF) 
  826. characters. So SIO2PC gives you the option of making the 
  827. translation. If you are printing text, you should 
  828. translate. For graphics, probably don't translate. You can 
  829. also strip the high bit if you want. The reason?  ASCII is 
  830. a 7 bit text code. Computers use 8 bit data. So, text with 
  831. the high bit set is not defined under ASCII, and different 
  832. computers use it differently. On the Atari, text with the 
  833. high bit set is printed to the screen as inverse video. On 
  834. the PC you may get graphics characters. So, when printing 
  835. text, you usually want to clear the high bit. If you are 
  836. printing 8 bit graphics data, you usually don't want to 
  837. change it.
  838.  
  839. For revision 2.6, I've made some changes to the PRINT_THRU 
  840. function. The reasons, and other comments, are summarized 
  841. below:
  842.  
  843. PRINTER NOTES, REV. 2.6
  844.  
  845. Due to reports of problems with the PRINT-THRU mode in 
  846. certain cases, I've reworked the print-thru routine.
  847.  
  848. My basis for this feature is to try to provide 100% 
  849. compatibility with the Atari 850 Printer/Serial interface, 
  850. since it should be the standard for the Atari. I went back 
  851. and reread the functional description in my 850 manual. 
  852. Here is a summary:
  853.  
  854. The Atari printer handler (in the computer's CIO, not in 
  855. the 850) sends fixed length records (40 characters) to the 
  856. printer. If an EOL (RETURN key) is encountered, it fills 
  857. the rest of the buffer with spaces and sends it. Note that 
  858. software on the Atari doesn't necessarily have to use CIO. 
  859. It can send data directly to the serial port using SIO. 
  860. Fixed length, 40 byte, records are still necessary because 
  861. the interface expects them. Now, when the 850 receives a 
  862. 40 byte record from the computer, it goes by these rules:
  863.  
  864. 1) Send all bytes to the printer, as 8 bit data (no 
  865. clearing the high bit) except,
  866.  
  867. 2) If an EOL (9B hex) is encountered, convert it to a CR 
  868. character, and ignore the rest of the buffer (assumed to 
  869. be extraneous spaces supplied by CIO) except,
  870.  
  871. 3) If several consecutive EOLs are found, translate them 
  872. all to alternating CRs and spaces and send to the printer. 
  873. NOTE: rev 2.8 took out the spaces. My version was adding a 
  874. space even if there was only one EOL, causing alignment 
  875. problems in the printout.
  876.  
  877. My interface was designed to provide several modes of 
  878. operation, one of which would emulate the 850 exactly. 
  879. However, it wasn't doing some of the things above. It 
  880. didn't ignore characters after the EOL. It didn't 
  881. translate multiple EOLs to multiple CRs, only the first. 
  882. It also translated EOLs only to CR plus LF, not CR only. 
  883. Now you have the option of doing either.
  884.  
  885. What do the 850 rules above mean to the Atari printer 
  886. programmer? Well, as I see it, you can NEVER send a hex 9B 
  887. to the printer, because the conversion is irrevocably hard 
  888. coded into the 850's ROM. Since graphics data by nature 
  889. can represent any dot pattern, it must include all 
  890. possible combination of bits, including $9B. This really 
  891. isn't a huge problem. The software would just have to 
  892. detect EOLs and change one bit. One dot's worth of error 
  893. out of every 256 * 8, on average, won't hurt anything. 
  894. Another "cure" would be to have a printer which requires 
  895. 7, not 8, bit data. Since $9B has its high bit set, it 
  896. would never be required to send graphics data. (Just as it 
  897. is not required to send standard ASCII text, a 7 bit 
  898. system.) 
  899.  
  900. All this info is presented for your amusement only. 
  901. Hopefully, if my emulation of the 850 is correct, your 
  902. software will play just like it did on your Atari printer. 
  903. Of course, the Atari software will have to be configured 
  904. for the characteristics of your PCs printer, not your 
  905. Atari's printer, assuming they are different. 
  906. Rev 2.10 information: I added a value to the TIMINGS menu 
  907. for the printer. This is experimental at this time. One 
  908. guy has a problem with the system (PC) locking up after 
  909. 3/4 page or so. I think maybe his printer isn't 
  910. handshaking properly, so I've added this timing value, to 
  911. keep from "overrunning" his printer. The normal value is 
  912. 0. If you have problems, add a little time. This value is 
  913. in units of 1/18th of a second, so keep your number small 
  914. or you'll be in for a long wait. It is the value used 
  915. between sending of 40 byte records to the printer. Figure 
  916. out about how long it takes your printer to print a line 
  917. and use about half this value in seconds. So if your 
  918. printer printed a line in 1 second, the value used would 
  919. be 0009 for 9/18 of a second. 
  920.  
  921. In 3.07, I added another translation to the PRINT-THRU 
  922. function.  Now, you can also change the ATASCII tab 
  923. character to a standard ASCII TAB in the PRINT-THRU 
  924. process.  A 'T' on the PRINT-THRU status line shows that 
  925. you have chosen this option.
  926.  
  927. UNINSTALL DISK:
  928.  
  929. Why is it important to be able to do this?  Well, if you 
  930. have already used up all your memory in defined ramdisks, 
  931. you can't overlay them with new ones unless you remove the 
  932. existing ones. This often would mean you had to quit 
  933. SIO2PC and restart it to get the configuration you wanted. 
  934. Now, you can delete ramdisks, and thanks to "garbage 
  935. collection" performed by the program, all data moves down 
  936. to fill in the hole. So, you now have free memory equal to 
  937. the size of the deleted disk.  Uninstalling "file access" 
  938. disks doesn't free any ram, but it does free up one of 
  939. your four allowed virtual disks.
  940.  
  941. STATUS LINE INFO:
  942.  
  943. I've  created  a special status line, which is displayed  
  944. at  the bottom of the screen, to help identify problems 
  945. and to show  that the SIO2PC program is actively doing 
  946. something. It shows:
  947.  
  948. LOC: An identifier for the subroutine being executed.
  949.  
  950. CMND: SIO command from the Atari (Read, Write, etc.)
  951.  
  952. LAST: Command received previous to the one above.
  953.  
  954. DEV: Hex number for device being addressed by Atari. 
  955. Note
  956. 31 - 38 = D1 - D8; 40 = Printer, 39 = Remote Control 
  957. program
  958. 3A = FILE2PC program.   
  959.  
  960. COM: High/Low status of the Atari command line.
  961.  
  962. ERR: An error code returned by one of SIO2PC's 
  963. routines.
  964. A character here doesn't necessarily mean a problem.  
  965. To aid 
  966. me in debugging.
  967.  
  968. SEC#: The sector # currently being written to or read 
  969. from    by the Atari.
  970.  
  971. RAM: The amount of RAM you have free for use.  It 
  972. changes as 
  973. you install and uninstall ramdisks.
  974.  
  975. SPEED: N means normal speed 19.2K Baud, H means high 
  976. speed,
  977. as in Sparta Dos' high speed I/O.
  978.  
  979. Note that the status line is updated even when the device 
  980. being accessed isn't an SIO2PC device.  This allows you to 
  981. use SIO2PC to eavesdrop on the SIO bus.
  982.  
  983. PC MEMORY USAGE:
  984.  
  985. The technically inclined may want to know how the program 
  986. decides it has the right to RAM for its ramdisks.  Well, I 
  987. initially wrestled with this one. I was trying to use a 
  988. DOS function for "Allocate Memory," but I got an error 
  989. code meaning "no memory available."  This was crazy, 
  990. because SIO2PC is a very compact program. It turns out 
  991. that when DOS runs a COM file, it allocates ALL available 
  992. memory to the program. This is because DOS is intended to 
  993. be a single tasking system.  I took advantage of that 
  994. fact. My program doesn't ask for memory, it just takes it, 
  995. as though it's the only player (which it should be). 
  996. (Note: TSRs loaded BEFORE SIO2PC are safe. SIO2PC only 
  997. uses memory higher than that allocated to itself.)  I use 
  998. an internal DOS variable to decide if there is enough 
  999. memory to load/create the ramdisk you request.  
  1000.  
  1001. DOS SHELL FEATURE:
  1002.  
  1003. The main improvement added in rev. 3.08 is the ability to 
  1004. "shell out" to DOS. What this means is, you return to the 
  1005. DOS command line prompt "C:>" while SIO2PC is still 
  1006. resident.  Then you can run DOS commands or programs, type 
  1007. EXIT, and be back in SIO2PC. You will of course be subject 
  1008. to limitations on the amount of memory available with 
  1009. SIO2PC and any ramdisks you have resident in memory. It's 
  1010. a good idea to avoid messing with (deleting, renaming) any 
  1011. files that SIO2PC has open, such as file access disks.  
  1012. (SIO2PC doesn't leave files open when ramdisks are 
  1013. loaded.)  In order to make this function fit on the menu, 
  1014. I had to dump a function.  So, I took "R" off the screen. 
  1015. This is the function which restores the screen (ESCAPE 
  1016. also works).  Note that "R" still works, you just don't 
  1017. see it on the menu.  Due to the way memory is managed, you 
  1018. shouldn't install any TSRs while in the DOS shell.
  1019.  
  1020. VIRUS DETECTION:
  1021.  
  1022. I got a rude introduction to the world of viruses a while 
  1023. back when I found that my system had been attacked by a 
  1024. virus.  Since then, I've added the byte count on the sign 
  1025. off message as a small first step. Rev. 3.03 adds some 
  1026. more complex checks.  As soon as SIO2PC gets control, it 
  1027. loads a second copy of itself into memory. Why?  Because 
  1028. the virus may have already "done its thing" to the running 
  1029. copy, then fixed it to look unchanged.  Anyway, SIO2PC 
  1030. loads a second copy, and checks to make sure it isn't any 
  1031. bigger than its supposed to be. You get a message if the 
  1032. size is wrong.  It then does a CRC calculation on the 
  1033. copy. If the CRC result isn't as expected, you get another 
  1034. warning.  The program will still run, however.
  1035.  
  1036. I translated the CRC calculation algorithm from C code in 
  1037. a book on serial communications.  My version may not be 
  1038. exactly right, but it does work.  I've tried toggling a 
  1039. single bit and got the warning.  Please note that no 
  1040. system is foolproof.  Virus and counter-virus development 
  1041. is like the arms race.
  1042.  
  1043. These additions don't seem to slow down program loading to 
  1044. any appreciable extent, but for those of you who can't 
  1045. tolerate ANY slowdown, I've included an override.  Just 
  1046. put /v or /V on your command line somewhere after the 
  1047. program name and the virus checking will be skipped.  (You 
  1048. should put the /v after the port # since the program comes 
  1049. up expecting a port #.)
  1050.  
  1051. If you make changes to the program by interrupting it 
  1052. while it's running (as I showed you how to do elsewhere), 
  1053. it may make the CRC wrong.  To fix this, I've had the 
  1054. program print out the  calculated CRC with its sign off 
  1055. message. The idea was that you could patch in the correct 
  1056. CRC value with DEBUG.  However, with rev 3.08, that's been 
  1057. automated:
  1058.  
  1059. In 3.08, I changed the virus detection function (CRC 
  1060. check) so that the program will offer to fix SIO2PC's 
  1061. internal CRC value to that just calculated.  This is 
  1062. mainly for me, so newly assembled versions can have their 
  1063. CRC set automatically.  If you get the warning and haven't 
  1064. changed the program, better get out your virus checker and 
  1065. go over your files.  Delete SIO2PC and install a healthy 
  1066. copy. 
  1067.  
  1068. REMOTE CONTROL PROGRAM USAGE
  1069.  
  1070. This section is to tell you how to use the Atari program 
  1071. called REMOTE.OBJ. This program is found on your disk 
  1072. image file, ATARI.ATR.
  1073.  
  1074. The program allows you to send commands to SIO2PC from the 
  1075. Atari, just as if you were typing them on the PC's 
  1076. keyboard. So, if your Atari and PC are in different rooms 
  1077. (or something), you can swap ramdisks, save and load, etc. 
  1078. without leaving the Atari. The file is fairly small, and 
  1079. if you plan to make use of it, you should copy it to as 
  1080. many ramdisk images as necessary to assure that it's 
  1081. accessible when you need it. 
  1082.  
  1083. When the program comes up, it shows a list of most of the 
  1084. SIO2PC commands. If you want to study this list, hold down 
  1085. the START key, or else it will scroll off after 3 seconds. 
  1086. The program next gets the status's of the 4 disks from the 
  1087. PC and puts them on the screen. Now you are ready to enter 
  1088. your command. Say you want to load a disk image from 
  1089. A:\ATARI.ATR into ramdisk #4. Just type L4A:\ATARI.ATR and 
  1090. RETURN. Note that some commands give you prompts which you 
  1091. must answer in your command string, so anticipate them. 
  1092. For instance, if you tell the PC to write back a file, you 
  1093. need to anticipate "USE EXISTING FILESPEC?" and "FILE 
  1094. EXISTS, OK TO OVERWRITE?". Note that if writing was 
  1095. successful, the "W" in the status line will have changed 
  1096. to "N" after completion. One person was using REMOTE.OBJ 
  1097. on the Atari as an AUTORUN.SYS, and feeding it with a 
  1098. batch script from SPARTADOS to automate setup of his MIO 
  1099. ramdisks. Because he couldn't simulate a character from 
  1100. the keyboard with SPARTADOS, my "Run another command 
  1101. (Y/N)" left him stranded. For this reason, you can now 
  1102. skip the command by starting your string with a space. 
  1103. When REMOTE.OBJ sees the space, it will send the command 
  1104. to the PC, then return to DOS automatically. 
  1105.  
  1106. Note: After transmitting a command, REMOTE.OBJ is allowing 
  1107. the PC a certain number of seconds to complete it before 
  1108. giving up on getting the ramdisk status. If you find that 
  1109. not enough time has been allowed, let me know so I can add 
  1110. some more. (If you choose to skip the rerun prompt, you 
  1111. won't be getting the ramdisk status after command 
  1112. completion.) 
  1113.  
  1114. MAKADISK.EXE
  1115.  
  1116. As I stated earlier, the need for MAKADISK.EXE has been 
  1117. pretty much eliminated by the introduction of SIMULATED 
  1118. DISKS, which allow the Atari to load in a file which is in 
  1119. native PC DOS file format.  However, you may still find a 
  1120. reason to use MAKADISK.
  1121.  
  1122. The purpose of this program is to allow you to take a PC 
  1123. file and convert it into an Atari ramdisk image so your 
  1124. Atari can read it. For instance, you may have a modem on 
  1125. your PC only, and want to download Atari files. Or, you 
  1126. may want to write program source code on your PC, because 
  1127. it has an 80 column screen, and send it to the Atari for 
  1128. compiling.
  1129.  
  1130. At present, this program is basic - it allows you to put 
  1131. only one file to a standard single density ramdisk image. 
  1132. You should then boot the Atari up with SIO2PC and copy the 
  1133. file to a real disk or a "full featured" disk image (one 
  1134. created by SIO2PC and your Atari DOS). Then you may as 
  1135. well delete the MAKADISK created ramdisk image, it has 
  1136. served its purpose. You can't write more files to it, the 
  1137. VTOC isn't correct. 
  1138.  
  1139. Note that another utility may be useful. I want to make 
  1140. one, but they are available in public domain (PC 
  1141. Magazine's utilities disk has one). The utility needed is 
  1142. to translate PC "end of line" codes (CR and LF) to the 
  1143. Atari EOL code, which is hex 9B. If you are translating 
  1144. text files, you will probably need this. Binary files 
  1145. (such as executable programs) shouldn't generally be 
  1146. translated. 
  1147. Note that MAKADISK asks for three things:
  1148.  
  1149. 1. The name (or pathname) of the PC file to be converted 
  1150. to Atari.
  1151.  
  1152. 2. The name of the PC's ramdisk image file. This is the 
  1153. name you will give SIO2PC when you load the ramdisk image. 
  1154. I use an .ATR extension for all my ramdisk images stored 
  1155. on the PC, but you can use what you want. Note, MAKADISK 
  1156. doesn't tell you if there's already a file by that name, 
  1157. so be careful, existing files will be overwritten.
  1158.  
  1159. 3. The name of the Atari version of the file. This is the 
  1160. name you will see in the first position on your Atari 
  1161. screen when you ask DOS for a directory.
  1162.  
  1163.  
  1164. FILE2PC USAGE INFORMATION
  1165.  
  1166.  
  1167. FILE2PC.OBJ is an Atari program found on your ATARI.ATR 
  1168. disk image file located on the distribution diskette. If 
  1169. you run this program on your Atari, it will cause SIO2PC 
  1170. to go into the file transfer mode. Just follow the prompts 
  1171. on the Atari. You can read the technical details in the 
  1172. TECHNICAL INFORMATION section if you're interested. This 
  1173. file transfer function has been much requested. A lot of 
  1174. people seem to have text files on their Atari's and want 
  1175. to transfer them to their PC's so they can pick them up on 
  1176. the PC's word processor. I should tell you that the usual 
  1177. warnings apply to this: Different word processors use 
  1178. different formatting control codes. This is true even if 
  1179. you aren't going to a different computer. Plus, the Atari 
  1180. has its own method of ending a line. It uses an EOL (9B 
  1181. hex or 155 decimal) to tell its editor to drop the cursor 
  1182. down one and move to the left margin. The PC, on the other 
  1183. hand, uses two codes, CR & LF or carriage return and line 
  1184. feed. They are hex codes 0D and 0A (decimal 13 and 10). 
  1185. There are utilities available which translate codes like 
  1186. these. There was one called CHANGE on PC Magazine's 
  1187. utilities disk. Unfortunately, it only works with files up 
  1188. to 40K in size. I want to write one without this limit. A 
  1189. common denominator is the so called ASCII file, which is 
  1190. free of specific non-standard formatting commands. (Like 
  1191. this file.) If your Atari word processor will output a 
  1192. plain ASCII file, you may want to use the option before 
  1193. sending it to the PC. Some Atari programs will allow you 
  1194. to use an OS feature which lets you PRINT to a disk file. 
  1195. This should yield a plain ASCII file. Also, if you wanted 
  1196. to send it to your PC's printer, it should definitely be 
  1197. ready to go in this format. Anyway, you will probably want 
  1198. to use a filter program to change your 9Bh's to CR/LF's as 
  1199. a minimum. Note that 9Bh looks like a "cents" symbol on my 
  1200. PC. To see it, hold down ALT on the PC and type 155 on 
  1201. your numeric keypad.
  1202.  
  1203. Rev 2.3 note:  Now that the PRINT_THRU function allows you 
  1204. to "print" to a PC file, you have another method of 
  1205. transferring your Atari text files to PC files. And since 
  1206. the PRINT_THRU option has EOL to CR/LF and TAB conversion 
  1207. capabilities, it may be easier to use in some cases than 
  1208. FILE2PC. Remember, Atari DOS allows you to COPY a file to 
  1209. P:.
  1210.  
  1211. FUTURE PLANS, CURRENT PRICING
  1212.  
  1213. I now feel that SIO2PC is becoming a pretty mature 
  1214. program. However, there seems to be no limit to the number 
  1215. of enhancements one can dream up. I would like to take a 
  1216. stab at making the system capable of copying copy 
  1217. protected disks, with the ability to run them from SIO2PC 
  1218. storage without the original disks. I don't really see 
  1219. SIO2PC as some sort of copy protection cracker, but it is 
  1220. a pain for users to have this system and still have to 
  1221. rely on an Atari drive to run some of their software. I'm 
  1222. not sure how effective this system will be, because I'm 
  1223. not up on all copy protection techniques, but ... we'll 
  1224. see. 
  1225.  
  1226. I also hope to soon try to implement the Lightspeed I/O 
  1227. feature you Spartados/U.S. doubler users know and love.  
  1228. DONE
  1229.  
  1230. It also occurs to me that some sort of Auto-compaction 
  1231. should be possible.  I could have the program keep track 
  1232. of the highest sector # written, and store only data to 
  1233. that point.  The empty portions of partially written 
  1234. disks, in general, wouldn't take up any disk space.  
  1235. (DOSes generally use sectors sequentially, from low to 
  1236. high numbers.)
  1237.  
  1238.  
  1239. On the hardware side, I am still trying to simplify the 
  1240. assembly of the interface. It takes far too much time for 
  1241. the price charged to wire one up. So, I may soon make the 
  1242. DB-9 connector mount on the board and protrude thru the 
  1243. case, just like the ones on your PC do. This will save a 
  1244. lot of time stripping cables and wiring/assembling 
  1245. connectors. It will also mean that the interface will need 
  1246. a DB9S to DB9P or DB25S to DB9P cable to interconnect it 
  1247. to the PC.  I'll probably soon change the hardware so that 
  1248. the interface won't interfere with the SIO bus, even when 
  1249. the PC is turn off or not connected.
  1250.  
  1251. Please see BUILD_IT.DOC for the current prices. I had 
  1252. hoped (and still do) to hold the price as low as possible. 
  1253. Shortly after  receiving mention in Antic, I discovered a 
  1254. hardware problem which made it necessary to double the 
  1255. complexity and cost of the interface. SIO2PC is still just 
  1256. a hobby to me. I don't hope to recover my programming time 
  1257. (about 3 years). But I seriously underestimated the time 
  1258. needed to assemble the interface, and do hope to get some 
  1259. reward for that time. (Since soldering isn't fun*, like 
  1260. programming.) Since I've sold only a few interfaces so far 
  1261. (about 50 as of Jan, 1992), I haven't had a custom circuit 
  1262. board built. Therefore, I have to hand wire the circuit on 
  1263. prototype boards, with quite a few jumpers required.  
  1264. What's the bottom line of all this whining? I expect to 
  1265. have to either streamline assembly, raise my price, or 
  1266. both. I've also considered making the software "shareware" 
  1267. and publishing the schematic so users could pay me for the 
  1268. software and build their own interface from scratch or 
  1269. optionally order from me. Any advice?    ***  DONE!!!
  1270.  
  1271.  
  1272. *Building one is fun. Building 10 or 20 is drudgery.
  1273.  
  1274.  
  1275. REVISION LOG:
  1276.  
  1277. 1.00:  First release
  1278.  
  1279. 1.01:  Now uses default addresses for COM 3 & 4 if BIOS 
  1280. data doesn't give addresses. Added option menu item "O", 
  1281. sub option "I" to allow ignoring CTS, "I" is now the 
  1282. default. If your status line will show "H" in the Atari 
  1283. field with the Atari "on", you can toggle this function. I 
  1284. believe the program functions fine while ignoring CTS, 
  1285. however, and may eventually delete the input entirely.
  1286.  
  1287. 1.02:  Changed the stack pointer to be 256 bytes at the 
  1288. program end. This means the program now only uses about 8K 
  1289. instead of a full 64K segment. Now, on my system with only 
  1290. DOS and a 10K Mouse driver installed, I can get 3 - 143K 
  1291. ramdisks (as usual) plus an extra 92K ramdisk. Killed a 
  1292. bug which caused the program to not recognize SIO bus 
  1293. command 022h, which is "format in DOS 2.5  1.5 density". 
  1294. Added clear of all disk info lines every update when I 
  1295. noticed that garbage sometimes remained from old 
  1296. filenames. This change is cosmetic only. Reduced the 
  1297. timeout value which the disk returns to SIO. This should 
  1298. reduce the time the atari waits when it is given an 
  1299. invalid format command. Changed the method used to put 
  1300. command codes to the status line. Now even invalid command 
  1301. codes will get listed, adding to ease of de-bugging. Got 
  1302. rid of a bug which could cause an invalid error report 
  1303. when writing a ramdisk back to an existing filename. 
  1304. Changed the method used to control the RTS line. Now the 
  1305. other lines of the MCR aren't affected. Note: These errors 
  1306. are primarily the result of switching from one assembler 
  1307. to another. (now on QUICK ASSEMBLER).
  1308.  
  1309. 1.03  4/3/90 Rewrote the routine for generating time 
  1310. delays. I had been reading the refresh timer. Now, I'm 
  1311. reading the system timer and using a different method 
  1312. which should be more reliable and compatible. 
  1313.  
  1314. 1.0  4/10/90 Added option "E" under Options. Now, the user 
  1315. can manually input port addresses.  The program also now 
  1316. puts to the screen the actual address used, whether manual 
  1317. or automatic.  Put the address in Hex format.  The 
  1318. standard addresses for COM 1, 2, 3, & 4 are: 03F8, 02F8, 
  1319. 03E8, & 02E8.
  1320.  
  1321. 1.05  Added some diagnostics. Now, on initialization of a 
  1322. PORT, the software reads back register LCR and gives a 
  1323. warning message if doesn't read as programmed. Then, the 
  1324. port is tested by sending a byte in the  loopback mode. A 
  1325. warning is given if it fails. If these warnings occur, 
  1326. your program will probably fail. Either you have an 
  1327. incompatible COM PORT, or the program is using the wrong 
  1328. PORT addresses. Check your documentation and use "E", 
  1329. described above to set the PORT addresses. Also, the 
  1330. program now always sets up the UART chip (serial port 
  1331. chip) directly, instead of using BIOS. Also in this rev, 
  1332. the timer chip, timer #0, is now programmed in mode 2, 
  1333. count = 0 for a period of 55 milliseconds. This is the way 
  1334. it should already be, but now I'll take no chances. I 
  1335. replaced my "long time" timer routine, the one I use for 
  1336. keeping warning messages on the screen for 2 to 3 seconds. 
  1337. The old routine would occasionally lock up, or take far 
  1338. too long. Now, I have redirected the timer 0 interrupt for 
  1339. this purpose. Rev. 1.05 fixes a small bug which could 
  1340. result in extra characters on the filename line. It also 
  1341. fixes a bigger bug - the program used to write to a random 
  1342. address (Segment Register wasn't initialized) when it 
  1343. thought it was putting the default port address into the 
  1344. BIOS data area, after it had been found to contain 0. Now 
  1345. it just leaves the 0 alone. 
  1346.  
  1347. 1.06  Quite a few changes. Added the FILE2PC subroutine, 
  1348. which works with the FILE2PC.OBJ Atari program. This gives 
  1349. you the capability      of sending Atari files to the PC to 
  1350. become PC files, rather than Atari disk images. This means 
  1351. you can read the files with your PC's word processor. Rev. 
  1352. 1.06 also changed the logic on switching the PC's data out 
  1353. line to tri-state (off line) level when it is not in use. 
  1354. Some people were having trouble with erratic and slow 
  1355. operation, and the switching of this line was believed to 
  1356. be causing spurious pulses. Now it only turns off when a 
  1357. non-SIO2PC device is addressed, less that 1% as often as 
  1358. before. Another addition to rev 1.06 is the addition of 
  1359. double density.         Now you can choose 183K ramdisks and 
  1360. double density sectors. Note that sectors 1,2, & 3 are 
  1361. single density, so the ramdisk can be a bootable disk. 
  1362. Currently, you can only specify a double density ramdisk 
  1363. by choosing "Z" instead of "C" for the "Create Ramdisk" 
  1364. function. Then use a DOS that recognizes double density, 
  1365. such as MYDOS. I also made some changes to the LOOPBACK 
  1366. test performed on the UART (serial chip) upon 
  1367. initialization. I found I was getting occasional "failed 
  1368. loopback test" messages when everything was really OK. I 
  1369. did some fine tuning and  haven't gotten a bogus message 
  1370. recently.  I also added a function ("R"), which allows you 
  1371. to restore a trashed screen. Despite my best efforts, DOS 
  1372. will sometimes manage to sneak in one of its messages, 
  1373. causing a scroll and messing up the screen. Use this 
  1374. feature to fix it. (As of rev 2.8, ESCAPE does the same 
  1375. thing.)
  1376.  
  1377. 1.07  I added a directory display function, under Options. 
  1378. You can just give it a filename, including wildcards to 
  1379. search the current directory, or a complete pathname to 
  1380. search other directories. Now, when you're in SIO2PC and 
  1381. can't remember the filenames of your disk images, you 
  1382. don't have to quit the program to find them. I name all my 
  1383. Atari disk images with the      extension ".ATR" and so I 
  1384. search for "*.ATR". Also in this release, when you choose 
  1385. "Quit", the program warns you if you have written to any 
  1386. ramdisks but not yet saved them back to disk.
  1387.  
  1388.         Rev. 1.07 was to include the "PRINT THRU" option, but 
  1389. it's not
  1390.         quite done. Rev. 1.08 will have it soon.
  1391.  
  1392. 1.08  PRINT-THRU mode incorporated. Now, you PC can serve 
  1393. as an Atari to printer interface. You can have your 
  1394. Atari's printer output go to either the PC's printer or 
  1395. screen. You can also choose  whether to convert EOL's to 
  1396. CR/LF. Also in this rev, I added an Author credits screen. 
  1397. This screen goes away as soon as you give the port #. I 
  1398. moved the "Restore Screen" function from the Options menu 
  1399. to the Main menu. After having Atari output printed to 
  1400. your screen just press 'R' to restore the menu.
  1401.  
  1402. 1.09  Added feature to allow choice of stripping high bit 
  1403. on PRINT-THRU data. This way, Atari inverse video text 
  1404. will come out as normal text. (Without, it would print as 
  1405. garbage.)
  1406.  
  1407. 2.0  Added function to allow deletion of a ramdisk. This 
  1408. function fills  in the hole created in memory by the 
  1409. deletion  and allows the freed memory to be used in 
  1410. creating other ramdisks.
  1411.  
  1412. 2.1  Changed the Atari program REMOTE.OBJ and changed 
  1413. SIO2PC to correspond. REMOTE.OBJ now asks for ramdisk info 
  1414. from SIO2PC at program start and after each command. 
  1415. SIO2PC sends that info to the Atari. Now, the remote user 
  1416. can get a fair idea of whether his command was successful 
  1417. or not. Also, now a leading space in the command string 
  1418. will cause REMOTE.OBJ to go back to DOS after completion 
  1419. of the command without asking if the user wants to send 
  1420. another command string.
  1421.  
  1422. 2.2  Changed the point at which the program looks at the 
  1423. device number in the command frame and disables the data 
  1424. out line if a non-SIO2PC device is being addressed. This 
  1425. is in hopes of  curing an interference problem some 
  1426. users have experienced when using real drives and SIO2PC 
  1427. together. 08/05/90
  1428.  
  1429. 2.3     AARGH!!  Rev. 2.2 still didn't take care of the 
  1430. elusive "problem". So, this version adds a switch which 
  1431. allows the user to lock SIO2PC's data out line into the 
  1432. "enabled" state. This was  verified earlier to work. Also, 
  1433. I finally did away with the old CTS or "Atari" line, which 
  1434. didn't seem to have any advantage. The idea was to carry 
  1435. the 12 volt line from the Atari to the PC to tell the PC 
  1436. it was on. It turned out that some PC's didn't recognize 
  1437. it, or some Atari's didn't have the 12 volts out. But, 
  1438. anyway the program worked fine without it. Another big 
  1439. change is the redesign of the user interface screen. It 
  1440. has become obvious to me that the separate "Options" 
  1441. screen was cumbersome and unnecessary. So I've combined 
  1442. all choices onto one screen. This means there are some 
  1443. functional changes, for those of you using batch and 
  1444. remote script files. First, option "O" is no more. Also, 
  1445. the "D" display status line choice is now "T", toggle 
  1446. status line. Another enhancement added with this revision: 
  1447. Now, you have a  third option with PRINT_THRU: You can 
  1448. specify that the Atari's printer bound output be sent to a 
  1449. PC file.
  1450.  
  1451. Still another change is to the Status Line. Replacing the 
  1452. "Atari" line status is the DEVID identifier. This is the 
  1453. SIO bus ID of the device being addressed. Elsewhere in 
  1454. this README file are the ID's of various bus devices. 
  1455. Also, as of this revision, the program updates the Command 
  1456. and DEVID fields even when a non-SIO2PC device is being 
  1457. addressed. Now you can see what your Atari is telling 
  1458. other devices, if it's trying to address non existent 
  1459. devices, etc.
  1460.  
  1461. 2.4  Changed the directory print-out from 2 to 4 entries 
  1462. per line.  Now your directory can have more than 90 
  1463. entries without scrolling off the screen. Wrote handlers 
  1464. for the Critical Error Vector and the Control - C vector. 
  1465. The Critical handler is the one which gives you the Abort, 
  1466. Retry, Fail message if your drive door is open, the 
  1467. printer is out of paper, etc. It turned out that this 
  1468. would let you bail out of the program without going 
  1469. through my normal "Quit" routine. This restores the timer 
  1470. interrupt, for one thing. Anyway, now you get plain 
  1471. English messages and can still bail out if you want, but 
  1472. won't lock up your computer anymore if you do! Also added 
  1473. some obscure functions to Print-Thru that used to work 
  1474. with the original Atari 40  column printer, the one that 
  1475. plugged right into the SIO port. I don't know if any 
  1476. software out there sends these commands or not. Also added 
  1477. the SHAREWARE message at the end of the program.
  1478.  
  1479. 2.5   Adding user command "A" to adjust timing values. 
  1480. Allows user to set critical time delays used in the bus 
  1481. data transfers, to try to iron out differences between 
  1482. different systems. This addition is menu choice "A" and 
  1483. adds the TIMING menu. This shouldn't be necessary in 99% 
  1484. of cases, but here it is in case. See the "timing" section 
  1485. or the TECHNICAL INFO part of this DOC for more info.
  1486.  
  1487. 2.6  Worked over the PRINT_THRU routine to make it more 
  1488. flexible and more compatible with the 850 interface. Also 
  1489. moved the default "timings" value to the front of the 
  1490. program to make it easier to find and change with DEBUG or 
  1491. NORTON's utilities.
  1492.  
  1493. 2.7  Changed the PRINT_THRU routine so it will detect a 
  1494. "disk full" error when printing to a file, alert the user, 
  1495. terminate the PRINT_THRU process. This need was pointed 
  1496. out in Bob Wooley's AIM review.
  1497.  
  1498. 2.8  Fixed a bad printer bug caused by rev 2.6 in which 
  1499. lock up of the PC would occur if you were converting EOL's 
  1500. to CR/LF's and an EOL occurred at byte 40 of the printer 
  1501. buffer. I also got rid of the space added after CR/LF 
  1502. because it was causing problems. Also fixed so the ESCAPE 
  1503. key works the same as 'R' to restore the screen. Most 
  1504. people jab the ESC key when they get confused.
  1505.  
  1506.  
  1507. 2.9  Did a little more work on the "disk full" problem so 
  1508. it gets addressed anytime you are writing to a disk: 
  1509. PRINT_THRU, FILE2PC, or WRITE DISK FILE.
  1510.  
  1511. 2.10  More work on Print-thru. Added more LOCATION and 
  1512. ERROR  codes to help in trapping errors.  Also added a 
  1513. time value to the TIMINGS menu to be used when printing to 
  1514. a real printer. It causes a wait between records sent to 
  1515. the printer.
  1516.  
  1517. 2.11  Added a byte count to the sign off message so the 
  1518. user can check if a virus has changed the program size.
  1519.  
  1520. 2.12  Added directory function to extract the Atari disk 
  1521. directory from a disk image file.  Now working for Atari 
  1522. DOS 2 & 2.5 compatible DOSes only.
  1523.  
  1524.  
  1525. 3.00  Added "file access" disks.  Now the user can have 
  1526. disks up to 16 megabytes in size.  Increased allowable 
  1527. disk numbers from "1 thru 4" to "1 thru 8".  Added the 
  1528. color interface screen and color coded key fields and 
  1529. statuses.  Added fields to show the status of the 
  1530. PRINT_THRU function.  Added support for "get 
  1531. configuration" and "set configuration" commands.  Added 
  1532. the "sector #" and "free ram" fields to the status line.  
  1533. Fixed the status line so it's updated even when not being 
  1534. displayed.  Fixed a bug which caused return of incorrect 
  1535. status for double density disk images.  Warns before 
  1536. uninstalling a ramdisk which hasn't been saved.  
  1537. Formatting now clears the disk image to zeroes so it can 
  1538. be compacted better.  Killed a small bug on the REMOTE 
  1539. CONTROL program which may have appended one spurious 
  1540. character onto the command string.  Split source file into 
  1541. 3 parts.
  1542.  
  1543. 3.01  Corrected some bugs from 3.00;  Added ULTRA SPEED 
  1544. I/O (SPARTADOS compatible).  I don't have all the 
  1545. difficulties worked out yet, but it is working.  The bit 
  1546. rates available on the Atari don't exactly match those 
  1547. available on the PC, so I had to pick a rate where they 
  1548. were practically the same: 38 KB.  This isn't as fast as 
  1549. the US Doubler can go, but it IS twice as fast as SIO2PC 
  1550. usually goes.  A few cautions are in order.  I couldn't 
  1551. fully understand all the stuff SPARTA DOS is doing.  It 
  1552. goes to high speed, then back to regular, and again to 
  1553. high. I get lost somewhere in the middle as to what is the 
  1554. signal to go back to high speed.  As a patch, I put in the 
  1555. "J" command, for Jump to Ultra-speed. It actully toggles 
  1556. between the two speeds. (There's also a new field on the 
  1557. status line for speed: "N" for normal, "H" for High.) 
  1558. We'll find other complications as we go along.  For 
  1559. instance, trying to mix high speed stuff with functions 
  1560. which work in regular speed (PRINT_THRU, REMOTE, FILE2PC) 
  1561. will probably cause problems. We should probably limit the 
  1562. high speed stuff to loading, saving, and copying files.  
  1563. But that's most of what we do anyway, right? Also did a 
  1564. lot more work on disk configurations.  I'd especially like 
  1565. any SPARTADOS experts to tell me how it tells me to go 
  1566. back to high speed. What is the '@' command SPARTA sends 
  1567. to device $4F?  Also any info on how to get SPARTADOS to 
  1568. accept ANY size disk image would be useful.
  1569.  
  1570. 3.02  Fixed a bug which was keeping the DATA out line on 
  1571. too long.
  1572.  
  1573. 3.03  Added virus check routines for file length and CRC.  
  1574. Fixed a bug in FILE2PC.OBJ.
  1575.  
  1576. 3.04   I did some work on the directory functions. First, 
  1577. a minor fix.  The separator between a filename and its 
  1578. extension was supposed be a period (.) for a normal file 
  1579. and a star (*) for a subdirectory. This logic was reversed 
  1580. until now. Second, I've added SPARTADOS awareness to the 
  1581. function which extracts directories from Atari disk 
  1582. images.  For the program to know that the file is a SPARTA 
  1583. image, its name must end in an 'S'.  I use an 'ATS' 
  1584. extension for SPARTA images and 'ATR' for others.  A nice 
  1585. feature I added for this function is the ability to 
  1586. automatically expand subdirectories in addition to the 
  1587. Main directory.  I don't even have this working for MYDOS 
  1588. yet.  You can view all your Atari files with a request to 
  1589. see '*.AT?' if you use a naming convention like mine. OK, 
  1590. SPARTADOS users, are you happy now? I'm also doing some 
  1591. hardware changes.  I'm now going to a hardware version 
  1592. which is simpler, but should work better.  It doesn't use 
  1593. Tri-state logic.  Instead, it uses an open collector type 
  1594. logic to keep from interfering with other bus devices.  
  1595. This design should be better capable of not interferring 
  1596. when the PC is off.  Since there is no Tri-state 
  1597. switching, the RTS line is not used, and the "Lock Data 
  1598. Line" function has no meaning.  Also, the status of the 
  1599. command line to the PC is inverted.  This necessitated a 
  1600. change in software. For the new hardware, the revision 
  1601. number at the top of the screen ends in a lower case 'i'.  
  1602. I'm putting this information out in case I get the wrong 
  1603. version to anyone.  It will ususlly work, but sputter 
  1604. along.  Whichever version you have, just let me know if 
  1605. you want the other one and I'll send it.  I would send out 
  1606. both versions now, but there's not enough room on a 360K 
  1607. distribution disk. (Also, ACOMINIT.COM is not needed with 
  1608. the new hardware.) 
  1609.  
  1610. 3.5  I added many more choices to the standard disk sizes 
  1611. for the "create disk" option.  The new choices are those 
  1612. which correspond the selections in the SPARTADOS format 
  1613. menu.  This is to make your choices easier when using 
  1614. SPARTADOS.  Internally, things still work the same.  
  1615. Again, with MYDOS, you shouldn't need to worry about 
  1616. certain prescribed sizes. I did a lot of tweaking on the 
  1617. "main loop" (the one which monitors the bus for commands 
  1618. and dispatches the various SIO command functions).  I 
  1619. think I found one error.  One user (at least) was having 
  1620. major problems with revision 3.03.
  1621.  
  1622. The main event for 3.05 is the addition of what I call 
  1623. "simulated" disks, described earlier.  I also added a 
  1624. feature to get rid of the character in the ERR field of 
  1625. the status line when you use the "R" command or just press 
  1626. ESCAPE. This gets you back to a clean slate.  To be 
  1627. honest, even I don't know why some of these errors occur, 
  1628. but most are harmless.  For instance, your Atari DOS may 
  1629. be polling non-existent devices to see what's there. 
  1630. There's another thing the "R"/ESC command does for you:  
  1631. It bugs some people that the cursor ends up at the right 
  1632. end of the screen after some functions are completed.  
  1633. They think this means the system is "hung up."  The 
  1634. "restore screen" command will put the cursor  back on the 
  1635. left, where it belongs.
  1636.  
  1637. 3.07: I added another translation to the PRINT-THRU 
  1638. function.  Now, you can also change the ATASCII tab 
  1639. character to a standard ASCII TAB in the PRINT-THRU 
  1640. process.  A 'T' on the PRINT-THRU status line shows that 
  1641. you have chosen this option.
  1642.  
  1643. 3.08:  The main improvement added in rev. 3.08 is the 
  1644. ability to "shell out" to DOS. This is described in the 
  1645. Technical Notes section. Added automatic (user's choice) 
  1646. correction of the internal CRC if legitimate changes 
  1647. caused a false virus warning (The user must verify this.)
  1648.  
  1649. 3.09:  Fixed a small bug which caused numbers in the 
  1650. filenames of simulated disks show up as graphics symbols 
  1651. in the Atari directory of the disk.  It was in the 
  1652. "convert to uppercase" routine: numbers don't need 
  1653. converting!
  1654.  
  1655. 3.10:  Made some changes to the "simulated" disk function: 
  1656. First, it no longer returns an error (just an 'S' in the 
  1657. ERR field) if the Atari tries to write to the disk.  
  1658. Second, it now gives the simulated disk a "normal" status 
  1659. - not "locked" and not "in use."  Why did I do such a 
  1660. crazy thing?  Well, some programs (such as my assembler, 
  1661. AMAC) want to open the file for write access, even though 
  1662. they don't intend to write to it.  Don't ask me why.  
  1663. Opening the file in this way includes writing to the 
  1664. directory sector.  It could be that others have 
  1665. encountered this problem.  Anyway, now I can write my 
  1666. source code on the PC, filter it through a utility to 
  1667. convert it from ASCII to ATASCII, and assemble my program 
  1668. without ever copying it to an Atari disk or disk image.  
  1669. Another change is to the sector number reported by the 
  1670. simulated disk.  It's pretty boring and not very 
  1671. informative watching all those sector # 100s go by on the 
  1672. status line.  So now, the program now starts with sector 
  1673. 401 and counts up to 700, then again cycles to 401.  
  1674. (Note: it's still sending sequential data, it just reuses 
  1675. the sector number.  DOS isn't smart enough to realize it's 
  1676. seen the sector number before, and some DOSs might get 
  1677. confused by sector nunbers > 720.)  
  1678.  
  1679. 3.11 - More changes to simulated disks: now you can 
  1680. install a simulated BOOT disk, by using /B after the file 
  1681. name on the 'I' menu choice.  I also did a little human 
  1682. engineering on the virus/CRC warning message.  I want 
  1683. people to realize that  something's potentially not right.  
  1684. So now the warning is in flashing green.  Also, to fix the 
  1685. CRC (after assuring oneself that there isn't really a 
  1686. virus at fault), the user must type 'OK' instead of just 
  1687. 'Y'.
  1688.  
  1689. 3.12  Found a bug in the extract Atari directory function 
  1690. which caused improper action on SPARTADOS files.  Also 
  1691. added an Escape Key bailout from that function.
  1692.  
  1693. 3.13  A user complained that he gets printer timeout 
  1694. errors  when  using PRINT-THRU, so I experimentally 
  1695. increased some timing values.
  1696.  
  1697. 3.14 - I found that the speed of "simulated" disk accesses  
  1698. had  slowed  for unknown reasons.  Turns out I had 
  1699. duplicated a variable name with a local code label, so a 
  1700. timing value was greatly increased.  Fixed it by assigning 
  1701. a new label in my source code.
  1702.  
  1703. 3.15 - Added screen blanking.  Press "B" to blank the 
  1704. screen and ESC to restore.  Note: didn't add this feature 
  1705. to the Menu.  I want to make it automatic in the future.
  1706.  
  1707. 3.16 - Worked on the GET_DIR and GET_DRIVE subroutines, to 
  1708. cure a problem resulting in an INT 024h hardware error on 
  1709. startup.  It seems that DOS function 019h (get default 
  1710. drive #) returns the number based on 0 = A, 1 = B, etc.  
  1711. But function 047h askes for a drive number code based on 0 
  1712. = default, 1 = A, etc.  This difference caused drive 2 (C 
  1713. from function 19) to translate to drive 2, B, for function 
  1714. 047h; and a hardware error resulted if no disk in drive B.
  1715.  
  1716. 3.17 - Fixed many inconsistencies and bugs and added 
  1717. enhancements in response to a letter from Dr. Terry 
  1718. Chamberlain of Cheshire, England.  He sent me a one page 
  1719. letter of praise for SIO2PC plus a 16 page text file 
  1720. listing bugs and desired improvements.  The changes are 
  1721. briefly:
  1722.  
  1723. Lengthened bus timing values.
  1724.  
  1725. Major changes to standard disk formats:  What a hassle!  I 
  1726. can't believe that all these years I thought a 1050 
  1727. enhanced disk had 1120 sectors (28 sectors/track) and no 
  1728. one else straightened me out!  My main excuse is that I 
  1729. never had a 1050 drive until I was around the version 3.0 
  1730. stage of SIO2PC.  Anyway, I have completely redone my 
  1731. option 6(More) selections to include all of what he gave 
  1732. me.  I also made choice 3 of the initial list be 133K 
  1733. instead of 143K to correctly give the 1050 drive standard 
  1734. size.  Through all of this I found one or two other minor 
  1735. bugs and fixed them.  I hope this makes formatting easier 
  1736. for SpartaDos users and users of other DOSes as well.
  1737.  
  1738. Fixed a minor irritant:  When you press ESC to abort your 
  1739. input under Create Disk option 5 (input # of sectors) you 
  1740. instead get a linefeed and a "/".  This caused me to 
  1741. rewrite my "line input" handler, so now backspace works as 
  1742. expected in this function and other functions requiring 
  1743. input as well.  And ESC will now get you out of sub-option 
  1744. C-5.
  1745.  
  1746. When using /P to force a file access disk, subsequent 
  1747. requests were also treated as if /P had been chosen.  
  1748. Fixed that.  Hope I also fixed some other glitches in file 
  1749. access disk operation so it will be more robust.
  1750.  
  1751. Now when you shell out to DOS, it doesn't default to 
  1752. C:\COMMAND.COM for its comspec.  It gets the comspec from 
  1753. the environment string, which should make the DOS SHELL 
  1754. feature usable for more users.  For instance, if you boot 
  1755. from A: or if you use another command processor, like 
  1756. 4DOS.  
  1757.  
  1758. The Extract SpartaDos directory function was messed up!  
  1759. It didn't get all files and didn't expand subdirectories.  
  1760. This was a real shock after all the work I put in on this 
  1761. feature.  Anyway, now it's fixed.  
  1762.  
  1763. These fixes and enhancements should make SIO2PC work more 
  1764. smoothly for everyone.  Thanks to Terry for his careful 
  1765. research.
  1766.  
  1767.  
  1768.  
  1769. PROBLEM DIAGNOSIS QUESTIONS
  1770.  
  1771. If you have trouble, I would like some information about 
  1772. your system. (Actually, I'm interested even if you don't 
  1773. have problems. Please send your comments.)
  1774.  
  1775. What kind of Atari? 800? 400? XE? XL? 1200? 600?
  1776.  
  1777. What Atari DOS? What type of formatting?
  1778.  
  1779. What kind and class of PC? XT? AT? '386? Original PC? 
  1780. Clock Speed?
  1781.  
  1782. Has your port been verified functional with other 
  1783. equipment?
  1784.  
  1785. What version of PC/MS DOS?
  1786.  
  1787. What does the status line at the bottom of the program 
  1788. show?
  1789.  
  1790. How long does TESTIME1.EXE take to run? (Should be close 
  1791. to10 seconds.)
  1792.  
  1793. Any detailed information from your PC's tech manual about 
  1794. your serial ports and port addresses in general will be 
  1795. useful.
  1796.  
  1797. If you only have problems part of the time, what specific 
  1798. steps lead to the problem?
  1799.  
  1800. Please read the REV_LOG and TECHINFO sections of this for 
  1801. some more information which may help with problems. Read 
  1802. also any other .DOC files you find on the disk - there are 
  1803. tidbits of information scattered through various files 
  1804. which may be of use to you.
  1805.  
  1806.  
  1807. POSSIBLE PROBLEMS AND SOLUTIONS
  1808.  
  1809. Can't address certain drives
  1810.  
  1811. If you are unable to address certain drives,  such as  3, 
  1812. 4, 5, 6, 7, 8 (error 160 results), it may be that your DOS 
  1813. isn't  set up to include these drives. On Atari DOS 2 and 
  1814. 2.5, you can  find out  by booting in BASIC and giving a 
  1815. PRINT PEEK (1802)  command. The resulting number is the 
  1816. sum of the following: 1 for drive  1; 2  for drive 2; 4 
  1817. for drive 3, and 8 for drive 4. So if  you  get "3," your 
  1818. DOS is set up for drives 1 and 2 only. To fix your DOS, 
  1819. you  simply  execute a POKE 1802,15 command. Then go to  
  1820. DOS  and execute  the "H" WRITE DOS FILES command. 
  1821. Finally, turn  off  the computer and reboot.
  1822.  
  1823. Another  error that has plagued me from time to time is  
  1824. this:  I "create" a ramdisk, then try to write to it 
  1825. without formatting it first.  Remember, if you create a 
  1826. ramdisk from scratch, you  have to format it. If you load 
  1827. up a stored ramdisk, you don't have  to format (or create) 
  1828. the ramdisk.  Another  problem which isn't the fault of 
  1829. SIO2PC, comes when  you try  to format a 92K ramdisk with 
  1830. DOS 2.5's normal  command.  You must  use  the "format 
  1831. single" command here.  The  normal  format command  of  
  1832. DOS 2.5 only works with the 143K ramdisks.  On  some 
  1833. format  related  errors, the Atari will  retry  "forever"  
  1834. before giving  up and reporting the error. So you may 
  1835. think  the  system has locked up.
  1836.  
  1837. Note that on the 64K ramdisk, the program doesn't report 
  1838. back  to the  Atari  that  the full set of 720  sectors  
  1839. isn't  available. You'll  get an error 138 on the Atari if 
  1840. you try to put too  much data to this ramdisk. A utility 
  1841. is needed to mark the unavailable sectors  as "used" on 
  1842. your DOS's VTOC. If this all sounds  pretty intimidating, 
  1843. you may want to steer clear of the 64K ramdisk. (As of rev 
  1844. 3.00, the program DOES report the number of sectors 
  1845. available - if the DOS is smart enough to ask.  But with 
  1846. some disk image configurations, it may now be MANDATORY to 
  1847. configure your Atari DOS to recognize the disk.)
  1848.  
  1849. Here's a problem I had recently (1993):  I was using 
  1850. SIO2PC, which had been working fine before, and it started 
  1851. sputtering along and returning errors (on the Atari) when 
  1852. disk transfers were attempted.  After much brainstorming 
  1853. and fearing a hardware problem, I found out that the 
  1854. problem stemmed from "shelling out" to DOS from WINDOWS.  
  1855. Evidently, WINDOWS keeps "checking up" on DOS programs to 
  1856. the extent that it can interfere with high speed data 
  1857. transfers.
  1858.  
  1859. Noise, especially from Printer:
  1860.  
  1861. One user told me that his SIO2PC was susceptible to noise 
  1862. pickup from power cords, etc. (I have been able to run 75' 
  1863. of unshielded cable near power cords, over air 
  1864. conditioning units, etc, without problems, so you never 
  1865. know.) Anyway, he said he wrapped the box in foil and 
  1866. fixed it. I don't know if I'd go that far, but if you have 
  1867. intermittent problems, you might look at the cable 
  1868. routing. Yet another potential pitfall: You will usually 
  1869. remember when you have a real disk installed, you must not 
  1870. have an SIO2PC ramdisk of the same number, since a 
  1871. collision will occur. But sometimes you (I) will boot up a 
  1872. DOS which automatically installs a ramdisk handler on the 
  1873. Atari, forgetting that there is an SIO2PC ramdisk of the 
  1874. same number. When I try to access this disk #, I get 
  1875. strange results not immediately identifiable as to the 
  1876. cause. So, if you use Atari ramdisks, watch out for this.
  1877.  
  1878. Along this same line: I just got a letter from a user who 
  1879. was having trouble with the PRINT_THRU function. It would 
  1880. stop printing at unpredictable places. Then he noticed 
  1881. that the Atari was plugged into a surge suppressor, but 
  1882. the PC and printer weren't. When he plugged those items 
  1883. into a surge suppressor, the problem was fixed. So this is 
  1884. a major Ah-Ha! for anyone having random problems in this 
  1885. area. Printers generate a lot of electrical noise. I never 
  1886. have this problem on my system, but no wonder: My Atari 
  1887. and PC aren't on the same desk, they are powered from 
  1888. separate wall receptacles, and each has its own 
  1889. surge/noise suppressor. Let me suggest a couple of other 
  1890. things: Make sure your SIO2PC cable and your printer cable 
  1891. are kept separate. If your printer and serial cables have 
  1892. thumbscrews, tighten them up. I noticed this made a big 
  1893. improvement on the amount of noise my computer outputs to 
  1894. my ham radio. 
  1895.  
  1896. If you can't get rid of the noise, here's another 
  1897. solution, but not quite as clean: Set up SIO2PC to capture 
  1898. the Atari's printout to a file. Then leave SIO2PC and use 
  1899. the PC DOS COPY command to copy the file to the printer 
  1900. (PRN). Use the MS DOS "binary switch" option, or your 
  1901. printer control codes won't make it thru the copy process.  
  1902. Here's another reason to use the "binary switch" option, 
  1903. discovered recently.  A guy was using this method and it 
  1904. worked fine except that the process would stop short 
  1905. before the data was completely transferred to the printer.  
  1906. When MSDOS is copying files and isn't in the binary mode 
  1907. (/B switch), it looks for the 1A hex character as an end 
  1908. of file marker.  If a 1A byte is in your printer data, the 
  1909. transfer will stop at that point unless you use the binary 
  1910. switch.
  1911.  
  1912.  
  1913.  
  1914. Lock Data Line
  1915.  
  1916. Rev. 2.3 added a switch (function "K") to allow locking 
  1917. the data out line into the enabled state. This is for a 
  1918. user or two who had a specific problem which occurred when 
  1919. the data line went to the inactive state automatically. 
  1920. You should leave this switch in the Auto state. Otherwise, 
  1921. when you try to address non-SIO2PC devices, interference 
  1922. will result. However, if you note that when you address an 
  1923. SIO2PC drive and experience hesitation, sputtering, etc., 
  1924. try locking the data line on and see if it helps. (I now 
  1925. believe the TIMINGS MENU modification is the real cure for 
  1926. this type problem.)
  1927.  
  1928. Copy protection problems
  1929.  
  1930. Some people have told me that some copy protected programs 
  1931. which have been "broken" will run from a real drive but 
  1932. not from SIO2PC. Recently, one guy told me of a solution: 
  1933. He uses the TIMINGS menu of SIO2PC to slow down SIO2PC's 
  1934. I/O rate so it looks like a real drive. Appapently, some 
  1935. protected programs time the "sector get" and "sector put" 
  1936. processes to make sure they aren't running out of a ram 
  1937. drive (indicating that the protection has been broken). 
  1938. Since SIO2PC is a small program, one could have customized 
  1939. versions which are slowed down just for use on these 
  1940. problem programs. (Elsewhere in this DOC is info on how to 
  1941. permanently alter SIO2PC's timings.)
  1942.  
  1943. Interference from real drive
  1944.  
  1945. In my operating instructions, I tell you to turn off your 
  1946. real drive #1 and then boot from the SIO2PC disk #1. I 
  1947. haven't heard any complaints about this, but I recently 
  1948. borrowed a 1050 drive, which, when I turned it off, 
  1949. interfered with the serial bus and I couldn't read the 
  1950. SIO2PC drive. The solution was to turn the front lever on 
  1951. the 1050 to the EJECT position but leave the 1050 on. 
  1952. Apparently this told the 1050 not to answer the call, 
  1953. which then went through to SIO2PC OK.
  1954.  
  1955. Extract Directory Note
  1956.  
  1957. Note that the Extract Atari Directory function can't work 
  1958. on disk images currently in use as "file access" disks on 
  1959. the system.  This is because SIO2PC already has these 
  1960. files open for read/write and can't open them again to 
  1961. extract the directory.
  1962.  
  1963. Status Line Note
  1964.  
  1965. You may notice that under certain conditions your status 
  1966. line is not being updated.  This occurs when you have 
  1967. PRINT_THRU enabled with the screen selected as the output 
  1968. device.  To keep the status field characters from messing 
  1969. up your screen print, the status line update is inhibited 
  1970. until you turn off PRINT_THRU.
  1971.  
  1972. USER'S QUESTIONS
  1973.  
  1974. 1) Does the program reformat my PC's hard disk?
  1975.  
  1976. No! Your Atari disk images are stored on your PC as 
  1977. ordinary PC files.
  1978.  
  1979. 2) Could I use the hardware part of the SIO2PC system as a 
  1980. general purpose RS-232 interface? Like, to connect my 
  1981. Atari to a modem?
  1982.  
  1983. Hmmm... This is a good question, and the answer is sort 
  1984. of, "yes and no."  Electrically, yes you have a true RS-
  1985. 232 connection coming out of the interface. However, note 
  1986. the following:
  1987.  
  1988. RS-232 includes several handshaking lines in both 
  1989. directions. But, most communications setups only use a 
  1990. few, and optionally can be told by software to disregard 
  1991. those they do have. I've seen computer to computer PC data 
  1992. links that had just Data in, Data out, and ground (via 
  1993. RS232 serial port). My system has one handshaking line 
  1994. from the Atari to the PC, the COMMAND line which goes to 
  1995. RI on the PC. You can often "dummy up" inputs to fool one 
  1996. end of a link into thinking the other end is saying, 
  1997. "ready." A null modem cable is usually made up this way.
  1998.  
  1999. Bit rate (BAUD) and software on the Atari end: On the 
  2000. Atari, the SIO subsystem of the OS always works at a fixed 
  2001. rate: 19.2 Kilo- baud, except for the cassette: 300 baud. 
  2002. Also, it uses a strict protocol to send data: command 
  2003. frame, acknowledge, data frame, acknowledge, complete. But 
  2004. if you want to write your own software (or you have some 
  2005. already written), you can directly program the Atari's 
  2006. POKEY chip (UART) to any baud you want, and you can 
  2007. directly put data into its transmitter for sending, and 
  2008. can directly read incoming data from the receiver. (My 
  2009. notes under ATARICOM.DOC talk about how I did this once.) 
  2010. When you do this, you are completely bypassing SIO and 
  2011. running the whole show yourself. You can also control the 
  2012. handshaking lines yourself. To get into something this 
  2013. serious, you need the Atari Technical User's Notes. It's 
  2014. fun to learn, but takes some time.
  2015.  
  2016. Actually, since writing the above response, I HAVE written 
  2017. a specialized terminal program for my Atari using SIO (no 
  2018. 850 interface) configured for 9600 baud and connected to a 
  2019. Packet Radio terminal controller which uses the RS-232 
  2020. standard.
  2021.  
  2022. 3) How come SIO2PC is a dead end - no extra port for 
  2023. adding another device?
  2024.  
  2025. I'm finding out this bothers some people. I figured, you 
  2026. could alway make this the last device in your chain. But I 
  2027. guess other manufacturers figured the same. It would be 
  2028. vastly more complicated for  me to build a box with a 
  2029. receptacle or two for SIO in it. They generally come as PC 
  2030. board mounted connectors, not as "in line" types like the 
  2031. plug I do use. So my board would be much bigger, I would 
  2032. be hand cutting rectangular cutouts in the box, etc.  
  2033. However, someone had a suggestion, if you are building 
  2034. your own: He said the "newer" cassette recorder (the 
  2035. 1010?) had two SIO2PC jacks in it. You could get a surplus 
  2036. 1010 junker for a few bucks, gut it except for the 
  2037. connectors, and build your SIO2PC in this box. 
  2038. Alternately, you could just buy a couple of the jacks from 
  2039. your friendly Atari parts supplier and design them onto 
  2040. your board.  
  2041.  
  2042. Here's another idea:  build the interface into your Atari. 
  2043. Mount a DB-9 in the Atari's case. (I've done this.)  Then, 
  2044. your SIO port would still be free, and you just use a 
  2045. standard serial cable to connect your Atari to any PC.  
  2046.  
  2047.  
  2048. 4)  Will SIO2PC run on an Atari ST running PC ditto?
  2049.  
  2050. From what I've heard so far, no. SIO2PC does a lot of 
  2051. direct to the chip I/O, bypassing both MS-DOS and the PC's 
  2052. built in BIOS routines. I suspect that PC ditto doesn't 
  2053. emulate the PC down to this level. However, if there are 
  2054. any ST experts out there who want to work with me on it, I 
  2055. think we could modify the program to make it work. I 
  2056. configure the serial chip (UART) directly because the PC 
  2057. BIOS doesn't have 19.2 kilobaud as an option, although the 
  2058. chip will do it. I input and output data from/to the UART 
  2059. directly for speed. I have also reprogramed the PC's timer 
  2060. chip and have a timer driven interrupt running. I think 
  2061. all this could be worked out if we had the right info. How 
  2062. about it, ST users?
  2063.  
  2064. 5) Will you give out your source code for SIO2PC?
  2065.  
  2066. I don't routinely give it out. But if you would like to 
  2067. have the source code just to see how it's done, or to make 
  2068. some modifications, or even to "borrow" the basic I/O 
  2069. routines for use in your own non-commercial programs - 
  2070. write and let me know. SIO2PC is written entirely in 
  2071. assembly language for the MICROSOFT QUICK ASSEMBLER.  I 
  2072. also have a version which will assemble under A86, the 
  2073. excellent shareware assembler.  
  2074.  
  2075. 6) How about a default path?
  2076.  
  2077. One person asked to be able to have a default path so he 
  2078. wouldn't have to tell SIO2PC where to find his disk 
  2079. images.  I usually run SIO2PC out of the directory where 
  2080. my files are stored, so I don't need to specify a path.  
  2081. However, I just recently realized that DOS has a command 
  2082. built (SUBST) in which allows you to specify a virtual 
  2083. "drive" letter for any path.  For instance, from the DOS 
  2084. prompt, type SUBST E: C:\ATARI\DISKS.  After this, you can 
  2085. substitute drive E: for the full pathname, even from 
  2086. within SIO2PC.  A pretty convenient feature.
  2087.  
  2088. 7) Direct access to hard disks / HUGE Atari disk images.
  2089.  
  2090. I am getting a lot of requests from people wanting to have 
  2091. HUGE Atari disk images and direct access to the PC's 
  2092. disks.  I'm opposed to using direct sector writes on PC 
  2093. disks. The possibility of inadvertent destruction of PC 
  2094. files is too great and I'm afraid of the risk.  However, 
  2095. I'm thinking of having random sized disk images stored as 
  2096. PC files which would not be moved into PC ram.  I would 
  2097. have to use MS DOS's file pointing features to read in the 
  2098. correct "sector" directly from the file.  The DOS overhead 
  2099. would slow things down a bit, but I have an idea that it 
  2100. wouldn't be too bad. **** DONE *** 
  2101.  
  2102. WHO'S NICK KENNEDY?
  2103.  
  2104. I'm an electrical engineer, but I don't work with 
  2105. computers professionally. That part is a hobby. I got the 
  2106. Atari 800 in 1982, mostly so I could play Asteriods. 
  2107.  
  2108. Data communications interests me. I have written a Morse 
  2109. code program to interface the Atari with my Ham Radio 
  2110. station. Later, as a sort of evolutionary forerunner to 
  2111. SIO2PC, I wrote programs linking my two Atari 800's 
  2112. together, first via their serial (SIO) ports, and later 
  2113. via their joystick ports. The Atari equipped with a disk 
  2114. drive would send files to the one without. 
  2115.  
  2116. I thoroughly enjoy programming in assembly language, and 
  2117. may attempt "C", if threatened at gunpoint.
  2118.  
  2119. To me, the hardest part of programming is finding a worthy 
  2120. cause. There are so many programs out there, commercial, 
  2121. free, and shareware - all good, that it's hard to find a 
  2122. niche that hasn't been filled. I think SIO2PC fits the 
  2123. bill.
  2124.  
  2125. As I've said before, I'm very interested in your comments, 
  2126. suggestions, questions, praise and condemnations. So, if 
  2127. you built it yourself and have a comment, let me hear from 
  2128. you, even if you weren't moved enough to pay a shareware 
  2129. fee. I won't harangue you about it.
  2130.  
  2131. Nick Kennedy
  2132.  
  2133.  
  2134. OTHER PROGRAMS
  2135.  
  2136. I thought I'd tell about other programs I've written, on 
  2137. the off chance someone may find one of them useful.  
  2138. Everything I've done involves interfacing a computer to 
  2139. another computer or to other external devices.  All of my 
  2140. programs address some oddball specific need I had at one 
  2141. time or other.  These programs fulfill a function, but 
  2142. some of them lack polish:
  2143.  
  2144. PINEWOOD.EXE - Written to time external events (in my 
  2145. case, pinewood derby cars) to millisecond accuracy.  You 
  2146. hook a START switch to one serial input line and STOP 
  2147. switches to two others. (Only one serial port is 
  2148. required.)  I used phototransistors for the stop switches.  
  2149. The program starts timing when the START switch changes 
  2150. state, gives the time that each car (event) activates its 
  2151. STOP switch, and proclaims the winner!
  2152.  
  2153. TIMER.COM - A variation on the above.  This timer just 
  2154. monitors one line.  It starts timing when the line changes 
  2155. state and stops when it returns to its resting state.  I 
  2156. used it to time a "one shot" device (a 555) to make sure 
  2157. it was giving exactly the 50 milliseconds I needed.  This 
  2158. program would probably be called an interval timer.
  2159.  
  2160. PACKET.OBJ - A packet radio controller for the Atari 800.  
  2161. This version is specifically set up to send control 
  2162. strings to an MFJ-1278 controller.  Note: this is a ham 
  2163. radio thing.  Essentially, this is a terminal program 
  2164. similar to what one uses with a modem.  It doesn't have 
  2165. advanced features such as file capture, etc.
  2166.  
  2167. EPROM.COM - Interested in burning your own EPROMs?  Make 
  2168. your own Atari cartridges?  I built Steve Ciarcia's Serial 
  2169. EPROM Programmer from the Circuit Cellar, volume VI book.  
  2170. The companion BASIC controller program left much to be 
  2171. desired, so I wrote a faster and more flexible one in 
  2172. assembler.
  2173.  
  2174. FREQ.COM & SYNTH.OBJ - Another ham/experimenter thing.  
  2175. This program - which I have written for the PC, the Atari 
  2176. 800, and for a 6502 single board computer - is a 
  2177. controller for a Direct Digital Frequency Synthesizer.  
  2178. The synthesizer works from 0 to about 7 MHz, and has 1 
  2179. hertz resolution.  The controller gives the many fancy 
  2180. features of modern ham transceivers:  split 
  2181. transmit/receive frequencies, memories, memory scan, band 
  2182. scan, etc.
  2183.  
  2184. In the "EXTRAS" directory of the distribution disk, I've 
  2185. already told you about my programs linking two Atari's, 
  2186. and about my ham program KEYER.OBJ - the morse code keyer 
  2187. program which took almost as much programming time as 
  2188. SIO2PC.
  2189.  
  2190. If any of these things meets a need, let me know.
  2191.   NOTE: SAVE THIS FILE AS PLAIN TEXT /W LINE BREAKS ... *.TXT, WITH MARGIN 
  2192. AT 4 7/8.
  2193.