LITTLE RED READER Version 2.00 [March 8, 1994] MS-DOS file reader/writer for the C128 and 1571/81/FD drives. by Craig Bruce (csbruce@neumann.uwaterloo.ca) This program has been improved over version 1.00 to read and write High Density MS-DOS disks on the CMD FD-2000 and FD-4000 disk drives. Just select drive type "1581" for using these drives. Since the new version has greater memory requirements, after starting up "ramdos" (if you use it) you will have to execute the "graphic clr" BASIC command. 1. INTRODUCTION This article presents a program that reads and writes MS-DOS files and the root directory of MS-DOS disks. The program copies only from drive to drive without buffering file data internally. This is simpler and imposes no limits on the size of the files transferred, although it requires the use of two disk drives (or a logical drive). The user-interface code is written in BASIC and presents a full-screen file selection menu. The grunt-work code is written in assembly language and operates at maximum velosity. The program also allows MS-DOS files to be deleted and to allows the copying of Commodore-DOS files between CBM-DOS disks (this makes it more convenient to use the program with a temporary logical drive like RAMDOS). Also, since I have a CMD FD-4000 floppy disk drive, I know that this program works with MS-DOS disks with this drive (for both the 720K and 1.44M MS-DOS formats). The FD disk drives are logically referred to below as being the 1581. The Burst Command Instruction Set of the 1571/81 is used to read the MS-DOS disk blocks and the standard kernel routines are used for outputting the data. (I am an operating systems specialist, so I call it a kernEl!) Thus, the MS-DOS files must be read from a 1571 or 1581 disk drive, but the output device may be any disk drive type, the screen or a printer, or a virtual drive type such as RAMLink, RAMDrive, or RAMDOS (for the REU). It is interesting to note that the data can be read in from an MS-DOS disk faster than it can be written out to a 1571, 1581, or even a RAMDOS file. A RAMLink can swallow the data only slightly faster than it can be read. Little Red Reader (LRR) supports double density 3.5" disks formatted with 80 tracks, 9 sectors per track, and 2 sides with a 1581 and 5.25" double density disks formatted with 40 tracks, 9 sectors per track, and 2 sides with a 1571, and now, high density 3.5" disks formatted with 80 tracks, 18 sectors per track, 2 sides, and a "12-bit FAT". A limit of 224 directory entries and 9 File Allocation Table (FAT) sectors is imposed. There must be 2 copies of the FAT and the cluster size may be 1 or 2 sectors. The sector size must be 512 bytes. The program runs on either the 40 or 80-column screens, but you will get much better performance from the BASIC portion of the program by being in 80-column mode and FAST mode. A modification that someone might want to make would be to spread-out the display for the 80-column screen and add color to the rather bland display. Oh, about the name. It is a play on the name of another MS-DOS file copier available for the C-128. "Little" means that it is smaller in scope than the other program, and "Red" is a different primary color to avoid any legal complications. It is also the non-white color of the flag of the country of origin of this program (no, I am not Japanese). Also, this program is Public Domain Software, as is all software I develop for 8-bit Commodore Computers. Feel free to E-mail me if you have questions or comments about this article. 2. USER GUIDE LOAD and RUN the "lrr.128" BASIC program file. When the program is first run, it will display an "initializing" message and will load in the binary machine language package from the "current" Commodore DOS drive (the current drive is obtained from PEEK(186) - the last device accessed). The binary package is loaded only on the first run and is not reloaded on subsequent runs if the package ID field is in place. The system is designed to have two file selection menus: one for the MS-DOS disk drive, and one for the Commodore-DOS disk drive (which may be a logical disk drive). The idea for copying is that you select the files in one of these menus, and then program knows to copy them to the disk for the other menu. 2.1. MS-DOS MENU The main screen of the program is then displayed. The main screen of the program will look something like this: MS-DEV=9 MS-TYPE=1581 CBM-DEV=8 NUM S TRN TYP FILENAME EXT LENGTH --- - --- --- -------- --- ------ 1 * ASC SEQ HACK4 TXT 120732 2 BIN PRG RAMDOS SFX 34923 D=DIRECTORY M=MS-DEV F=CBM-DEV Q=QUIT T=TOGGLE-COLUMN, C=COPY-FILES, +/- PAGE except that immediately after starting up, "<directory not loaded>" will be displayed rather than filenames. The "MS-DEV" and "MS-TYPE" fields give the device number and type of the drive containing the MS-DOS disk to copy from, and the "CBM-DEV" gives the device number of the drive/virtual drive/character device to copy file data to. The number of bytes free on the drive are also displayed (which is useful to know when writing files) and there are some more commands. Information about all MS-DOS files in the root directory of the MS-DOS disk is displayed in columns below the drive information. "NUM" gives the number of the MS-DOS file in the directory listing, and "S" indicates whether the file is "selected" or not. If the file is selected, an asterisk (*) is displayed; otherwise, a blank is displayed. When you later enter Copy Mode, only the files that have been "selected" are copied. The "TRN" field indicates the character translation scheme to be used when the file is copied. A value of "BIN" (binary) means no translation and a value of "ASC" (ascii) means the file characters are to be translated from MS-DOS ASCII (or "ASCII-CrLf") to PETSCII. The "TYP" field indicates the type of Commodore-DOS file to create for writing the MS-DOS file contents into. The possible values are "SEQ" (sequential) and "PRG" (program). The values of the TRN and TYP fileds are set independently, so you can copy binary data to SEQ files and ascii data to PRG files if you wish. The "FILENAME" and "EXT" fields give the filename and extension type of the MS-DOS files and "LENGTH" gives the exact length of the files in bytes. Note that if you perform "ASC" translation on a file, its PETSCII version will have a shorter length. 2.2. USER COMMANDS The bottom of the screen gives the command summary. After starting the program, you will want to setup the MS-DOS and CBM-DOS drives with the "M" and "F" commands. Simply press the (letter) key corresponding to the command name to activate the command. Pressing M will prompt you for the MS-DOS Drive Number and the MS-DOS Drive Type. In both cases, type the number and press RETURN. (Sorry for insulting all non-novices out there, but I want to be complete). The MS-DOS drive number cannot be the same as the CBM-DOS drive number (since the program copies from drive-to-drive without internal buffering). For the drive type, enter an "8", "81", or "1581" for a 1581 drive or anything else for a 1571 drive. Pressing F will prompt you for the CBM-DOS device number. You may enter a number from 0 to 30, except that it must not be the MS-DOS drive number. Enter a "1" for Cassette Drive (God forbid!), a "3" for the screen, a "4" for the printer (with an automatic secondary address of 7 (lowercase)), any number above 7 for a Commodore disk drive or special virtual drive, or a value of "0" for the special "null" drive. A CBM-DEV value of 0 will case the program to read MS-DOS files and do nothing with the output. You can use this feature to check out the raw reading speed of the program. After setting up the drives, press D to read in the root directory off the MS-DOS disk. The data will come blazing in from the disk but BASIC will take its good ole time sifting through it. Filenames are displayed on the screen as they are scanned in. The program will (eventually) return to the main screen and display the formatted file information. One note: the process of logging in a 1581 MS-DOS disk takes about 12 seconds (on my 1581, anyway), so be patient. An MS-DOS disk will have to be "logged in" every time you change MS-DOS disks. (Disks are logged in automatically). A couple of notes about accessing MS-DOS disks: don't try to access a device that is not present because the machine language routines cannot handle this error for some reason and will lock up, requiring a STOP+RESTORE. Also, make sure that an actual MS-DOS disk is loaded into the drive. If you accidentally place Commodore-DOS disk into the MS-DOS drive, the 1581 will report an invalid boot parameters error (#60), but a 1571 will lock up (since I don't check the sector size and my burst routines are expecting 512 bytes to come out of a sector whereas Commodore disks have only 256 bytes per sector). Now you are ready to pick what files you want copied and how you want them copied. You will notice that a "cursor" appears in the "S" column of the first file. You may move the cursor around with the cursor keys: UP, DOWN, LEFT, RIGHT, HOME, and CLR. CLR (SHIFT-HOME) will move the cursor back to the first file on the first screen. You can move the cursor among the select, translation, and file-type columns of all the files. Pressing a SPACE or a RETURN will toggle the value of the field that the cursor is on. To toggle all of the values of the "cursor" column (including files on all other screens), press T. You will notice that moving the cursor around and toggling fields is a bit sluggish, especially if you are in Slow mode on the 40-column screen. Did I mention that this program will run on either...
Amiga7878