Last update 01/2008 This is an archive of PDP-11/RT-11 utilities. I created most of this in 1994, its not real user friendly, but more or less does the tasks required. All utilities run as 16 bit DOS programs (Microsoft C Ver 6.0). It was originally released on Compuserve in the mid 1990s as TU58*.com, a self expanding archive for IBM PCs and clones. I periodically revisit the code and attempt bug fixes and updates, see the version history at the end. A description of each program is given below. Periodically I make minnor updates as summarized at the end of this file. I last freshened this archive January of 2008. As indicated below I added rsp.exe which should have been in this archive anyway, and updated rtdsk.exe and rtxtra.exe. I have not changed tu58.exe V1.03, instead there is a completely new release of V1.07 in the archive rtxten.exe and described in rtxten.txt. The programs fall into two categories TU58 emulation and manipulation of RT-11 format image files. In general I now recommend John Wilson's PUTR program for image file manipulation, but I didn't know about it when I wrote my programs. Mine also provide a couple features that John's doesn't seem to that facilitate using image files with PDP-11 systems and the TU58 emulator. Conversely I have discovered my RL0? initialization does not clear the bad block table which can cause problems with some RT11 utilities, ie SYSGEN will fail on an RL0? image initialized with my utilities, but works when John's putr 'format /RL0?' command is used. RT11ARC.exe is an LHarc self extracting archive. It contains the following utilities which may be used and distributed freely so long as we understand I am not responcible for what happens if you use them! There must still be bugs I haven't found. BECAUSE THESE PROGRAMS ARE DISTRIBUTED FREE OF CHARGE, THERE IS NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. Listing of archive : 'RT11ARC.LZH' Name Original Packed Ratio Date Time Attr Type CRC -------------- -------- -------- ------ -------- -------- ---- ----- ---- mkrsp - new rsp.exe - new to release devcpy.sav - or whatever its name is, add this... DIAGDIR.EXE 45081 24848 55.1% 02-09-26 09:36:06 a--w -lh5- 261A RTDSK.EXE 29677 15460 52.1% 00-04-28 05:24:54 a--w -lh5- CF63 RTFSZ.EXE 12853 7814 60.8% 96-09-29 20:36:32 a--w -lh5- 6F97 RTXTRA.EXE 30311 16108 53.1% 00-04-28 05:24:54 a--w -lh5- E113 TU58.EXE 33925 19439 57.3% 00-04-28 05:24:52 a--w -lh5- B527 RT11ARC.TXT 16403 7177 43.8% 02-09-28 10:10:26 a--w -lh5- EAB7 ---------------- -------- -------- ------ -------- -------- 6 files 168249 90848 54.0% 02-09-28 10:07:18 * don't worry about CRC on RT11ARC.txt, I can't include it in the listing above and have it come out right! The current version of TU58 is 1.03, its had some bug fixes in the break detection area (ie I think boot works now!) and a few more information messages were added. The current release includes files from the original CIS release above. It also includes several newer programs which have even more limited utility than the orignials! I expect this to be of interest to a VERY small group. I'm interested in feedback if anyone other than myself has a use for this! C source for most of this is available if anyone wants it (MSC 6.0). Only the MSDOS based serial port routines are proprietary. See also ltu58.htm for information on a Linux tu58 emulator. TU58 simulates a TU58 tape system via the PC serial port. I use it with the RT11 DD: device driver to transfer files between RT11 and DOS. This is a simple way to archive disk images to a PC hard drive. Connect appropriate cables to the RT11 serial (SLU) port from your PC and run the program to emulate the TU58. From RT11 "copy DD#:" commands work. RT11 V4.0 is apparently dumb enough to support the following, independant of the XX device specification: "copy/dev XX#: DD#:" V5.03 seems to know DD isn't big enough and doesn't allow this unless XX == DD. However V5.03 sometimes allows file by file copy forever without checking the size of output device. IE, I have had success with "copy dl0:*.* dd0:" because TU58.exe just keeps appending to the output file. The documentation talks about a maximum of 512 blocks which is what is on the TU58 (DECtape II) media. However the block number to write is a two byte WORD, and I have frequently copied all of an RX02 to a "tape" image, then used it as a disk with the E11 emulator. It all may have to do with how one initializes the tape image used by TU58.exe, my experience with this is currently a little erratic. If you are trying a large copy I recommend initializing the tape image with RTDSK.exe and a large number of directory segments. If you use RT11's initialize command to configure the image file, you may run out of file space. Also see the description of MKRSP.exe which can be used to make an RT-11 RL02 image file bootable via TU58. WARNING I periodically have trouble running TU58 and RSP in a DOS box under Win9x when interrupts are enabled. It normally works in polled mode in a DOS box, and the interrupt routines always work fine when the system is restarted in full DOS mode. I am not sure if this is related to the system speed (in one case it was a DX66!), the version of Windows, or the properties of the DOS box (they can be fiddled). On my current WinME system TU58 is perfectly happy with interrupts enabled in a DOS box so long as it has the input focus. The bottom line is you MSDOS if you want to be sure it will work. On a Pentium 150 or 233 this runs just fine in the DOS box. I was even able to run TU58 in one DOS box on COM2 and PDPDB (console emulation/debug) in another DOS box on COM1 on the same machine. However when doing a read or write to TU58 you have to switch the focus to that DOS box. Could probably write a 32 bit application that runs without having the focus, but I'd rather port it all to linux instead. As of 2002 I did do a linux port of the BSD Unix code from Rockefeller University, see ltu58.htm. Will's Works RT11 DD Radial Serial Protocol Server Version 1.03 usage: tu58 [-r|-c] [[-r|-c]] [-ddebug_flag] [-iinit_file] [-p#] [-t#] is a file name for tape simulation use invalid name for no file in unit# tu58.ini controls COM default port selection -r ahead of file name opens as read only -c ahead of file name creates and initializes a TU58 file system -i for alternate init file, -d to set debug level -p# for delay of # ticks between reads for slow device emulation -t# display timeout message if idle for more than # seconds TU58 assumes tu58.ini exists in the current directory although you can redirect it to a different file via -i. I run in an interrupt driven mode although I know it will work on 286+ class machines without an IRQ. The init file supports the options indicated below: port 1 baud 9600,N,8,1 irq 3 The commands above sets up COM2 at 9600 baud and an interrupt driven buffer on irq 3. If irq is not included it polls the port. Per above, polling works fine on current machines. This should also work on an XT with interrupts enabled, but stick to irq {3,4} don't use 2 as I have it mapped to 9 for AT class machines and the XT won't like this. Also note the maximum baud rate supported is 19200 for AT class machines. If you have a 16550 Uart it will also support 38400, 57600, and 115200. My M8189 11/23+ boots fine with the above with TU58.exe versions 1.02 and the new 1.03. The following octal bootstrap only works with version 1.03. See pdpdb.exe documentation for more info on an upload program for this code. If these octal words are loaded via ODT sequentially starting at 1000, and last one should be at location 1070 (a jmp to DD: driver from TU58 at PC=0). Note with this sequence TU58.exe always boots unit 0: 12701 176500 12702 176504 010100 005212 105712 100376 6300 1005 5012 12700 4 05761 2 42700 20 10062 2 1362 5003 105711 100376 116123 2 22703 1000 101371 5007 Its a bit beyond the scope of this to go into the full RSP protocol. Appendix A of the "VT103 LSI-11 Video Terminal Users Guide" EK-VT103-UG-001 is one good source of information on RSP. See also: "TU58 DECtape II Users Guide", EK-OTU58-UG "TU58 DECtape II Technical Manual", EK-OTU58-TM A few hints so you know what you are seeing are in order. TU58.exe starts up waiting for a BREAK. The host sends a BREAK and two INIT commands whenever it resyncs. To completely emulate a physical TU58 my emulator starts up in a 'power up' routine where it continuously sends out INIT, byte 0x04, while waiting for a BREAK. I have yet to see an machine that cares about this, and I normally press escape to skip the power up sequence. However it normally doesn't matter because most TU58 access sequences, including boot, routines start by sending the BREAK that terminates this loop. At boot my M8189 CPU sends the sequence above and then explicitly requests the boot block. The octal bootstrap routine above sends a BREAK,INIT,BOOT,0 sequence which is an alternative to immediately request the boot block from the TU58 tape unit 0. In normal operation one sees a display similar to the following at boot: rsp_get_packet() = 2 command 2 count 200 block 0 rsp_get_packet() = 4 rsp_get_packet() = 4 CONTINUE after 2 INIT flags rsp_get_packet() = 2 command 2 count 800 block 2 rsp_get_packet() = 4 rsp_get_packet() = 4 CONTINUE after 2 INIT flags ..... I have no idea why the M8189 boot driver keeps sending resync with two INITs per above, but mine does. Once RT11 starts it stops doing this. The rsp_get_packet = 2 is a control message with a byte count, an opcode per below and a starting block number for the operation. Typically these will be read or write operations. The code shown above reads the boot block 0, then using the driver from the boot block continues to boot RT11 from remaining blocks on disk. If one had set the debug level to 2 via -d2 on the command line the display would be a little more verbose saysing READ after each command and displaying dots, '.' for each packet. The following are the byte definitions from RSP.h packet flag byte definitions #define DATA 1 #define CONTROL 2 (see opcodes below) #define INIT 4 (resync) #define BOOT 8 (send boot block) #define CONTINUE 16 command packet opcode definitions #define NOP_CMD 0 /* request end packet */ #define INIT_CMD 1 /* reset & send end packet */ #define READ_CMD 2 /* seek and read # of blocks requested */ #define WRITE_CMD 3 /* seek and write # of blocks requested */ #define POSITION_CMD 5 /* seek to block requested */ #define DIAGNOSE_CMD 7 /* run internal diagnostice and send end packet */ #define GSTAT_CMD 8 /* sends end packet */ RTXTRA is a general purpose RT11 disk image manipulator. You can create blank tape images for use with TU58 or xtract files copied to an image from an RT11 system. (Note John Wilson's PUTR program sounds good, but I haven't tried it) Will's Works RT11 Disk Image Manipulator: Version 1.03 usage: rtdsk disk_image_file [-i[]] [-s] [-f#] [-v{bdm}] [-{abdrx}filename] -i initialize a new image (as optional {DD:,DX:,DY:,DL:,DZ:}) -s squeeze disk_image_file -f# adjust remaining free blocks where # is total device blocks -vb view image boot information -vd view device driver file information -vm view monitor file information -a, -b, -d, -r, and -x require filename -a add filename to image -b copy boot to image with monitor = filename -d delete filename from image -r rename filename in image -x xtract filename from image default dos_path and rt_mask are *.* options a,d,f,and x are mutually exclusive The path and rt_mask above support wild cards. Note that during directory operations the RT11 file name is displayed. If an operation occurs (add, delete, extract) its status is displayed. A return < 0 is an error, >= 0 is success and represents the directory segment updated. errors for rt11_add_file(): -1 file already exists in dir (no dups allowed) -2 can't open input file -3 error during copy (read/write) -4 couldn't allocate free space (RT dir may be full) Warning I'm pretty sloppy about allocating space, I only split an UNSED directory block if its the last one in directory. I'll reuse an UNUSED block in the middle of a directory if a new file matches the space exactly, but I won't split it like RT11 does. If you run out of space do a squeeze with RTDSK.exe or just start over! errors for rt11_xtract_file(): -1 file not found in dir -2 if failed to open output file -3 if there is an io error during extract (read/write) RTDSK was earlier version of above distributed on Compuserve 1/1994, it's included as it has a couple unique features. Richard Cloutier foolishly downloaded it and found a number of bugs in the directory routines. Thanks to Richard, I think these have been corrected and the interface was also improved (?) in RTXTRA. RTDSK has some routines to create a bootable image and display boot sector information, it will also expand the available free space in a disk image file. If you happen to have a Rainbow, I also have versions which will run on it (serial ports stuff is different). The nice thing about the Rainbow is that it has an RX50 so one can access an RT11 RX50 directly. I have used the Rainbow versions to create RX50 systems. Will's Works RT11 Disk Image Manipulator: Version 1.03 usage: rtdsk disk_image_file [-i[]] [-s] [-f#] [-v{bdm}] [-{abdx}filename] -i initialize a new image (as optional if {DD:,DX:,DY:,DL:,DZ:}) -s squeeze disk_image_file -h write volumn and owner to home block -f# adjust remaining free blocks where # is total device blocks -h write volumn and owner to home block -vb view image boot information -vd view device driver file information -vm view monitor file information -a, -b, -d, and -x require filename -a add filename to image -b copy boot to image with monitor = filename -d delete filename from image -x xtract filename from image A word of caution on the -v option: I think in Hex, not Octal, so most output is decimal or Hex. File names do NOT support wild cards. Note that the E11 emulator by John Wilson is a great product. It does some interesting things with RX01 and RX02 image files. Basically you need to insure the full disk image exists to use these utilities to create images for E11. RTFSZ.exe below and the -i option support this. If you use -idl: it creates an RL01 image but doesn't force the image to match the disk size as E11 doesn't care when reading the images. For images < 1000 blocks in length the full size image is forced. RTFSZ attempts to expand files to a specific size as specified by the # of blocks, or the physical media (as I could never remember when I wanted to). I created this as the E11 V1.1 I was using didn't like it when DY: was the wrong size. I'm not sure this is required with the current E11 version, esp if one uses HD: but I include it anyway. Version 1.03 of rtdsk can be used to create images of known size. CAUTION rtdsk does not force the size of images more than 1000 blocks in length. The works fine when reading an RL01 or RL02, but not for writing data to them in E11. If you are having troubles writing to a large disk image with E11, try rtfsz.exe. rtfsz -b# or -d -b# for a fixed number of blocks -d for {TU58,RX01, RX02, RX50, RL01, RL02} DIAGDIR is an attempt to understand the directory structure on an XXDP image. I backed up a couple via TU58, and then wanted to verify them. They are a completely different directory structure (which is another story). I think the only use for this is to get a directory listing on your PC and possibly a copy of the HELP.TXT file from the distribution. However I spent a lot of time figuring out the weird date structure so I include this also. Will's Works PDP-11 XXDP Image Viewer Version: 1.01 usage: diagdir [-{x,a,d,or f}] [-i] -x surpresses dir listing and extracts files matching pattern -a surpresses dir listing and appends files matching pattern -d surpresses dir listing and deletes files matching pattern -f lists directory for pattern match -i initialize a new image filename using files from source image default with no options is list the full directory pattern match supports '?' and '*', ie use ?DL???.* Version History: TU58 ver 1.02 - original release on CIS (1994) seems to have had break detect problems, esp during boot probably not aware of 16550 uart fifo's ver 1.03 - current (2000), increased max baud rate supported in *.ini file. Max was 19200, I added 38400,57600, and 115200. Fixed break detect so boots with code in testlib.zip. The -t command line option to display idle timeouts was added. RTDSK & RTXTRA ver 1.02 - original release on CIS (1994) ver 1.03 - released 2000 corrected some bugs. In particular did not always calculate free space correctly and would clobber disk image if adding a file whose size matched an existing unused block in a directory segment. In RTDSK added more of RTFSZ.exe logic in -i option and a -r option to rename individual files. ver 1.05 - released 2003. Fixed an error in handling directory segments. It would sometimes skip portions of the directory. ver 1.06 - release 2008. Minnor change in rt11_initialize() so region between HOME block and 1st directory segment is cleared. add -t option in rtxtra to adjust file timestamps. enhance -vm option in rtdsk so can view *.sys set options. Diagdir.exe ver Beta - first try, done by inspection, worked with TU58 images ver 1.01 - current (2001) version handles both versions of file storage XXDPV1 and XXDPV2 as described in xxdpstru.txt. IE it works with both TU58 and RL02 images. It includes options to initialize a new image, and add or delete files from an existing image. XXDPdir.exe ver 1.02 - 'enhances' diagdir.exe by adding a copy boot option as well as allowing various modes for extracting system files. Hope you find something useful here. Will www.willsworks.net