Updated
1-16-2003 Added comments about using 3.5 inch disk drives. Looks promising.
1-19-2003 Added FMT&CPY source code. Added screen capture while using SYMDOS2
1-21-2003 Added Commodore DOS code for use at $9000
Background
This area describes my evolution thru three Floppy Disk Operating Systems for the SYM. The first system is based on using a Commodore 1541 Disk Drive connected to the SYM. The other two systems are very similar and are based on software written by Kin Ping Kwok of Hong Kong China and hardware that I personally designed.. These systems were the result of several years of evolution of both hardware and software. I will describe all three systems below.
I have developed and worked on many 6502 projects over the past 24 years using the SYM as a development system. I have used several commercial development systems purchased from Motorola and based on several derivatives of the M6800 and in my opinion the SYM based development system is every bit as good as these much more expensive systems. The SYM has 72 lines of I/O built in without the need to add extra hardware. This is quite a bit and adequate for most product development. The SYM also has a very friendly and powerful monitor with a good and expandable debug capabilities. The RAE-1 Resident Assembler Editor is more than adequate for code development. Couple these features with several pieces of software that were written in the SYM Users Group such as DISARAE which is a symbolic disassembler that generates RAE formatted source code and you have the makings of a good development platform. The main drawbacks with the system was not having a good disk storage system, needing more RAM and a standard serial UART. The hardware and software I describe below fill in the gaps of the SYM by adding these features.
I have also found it very useful as an EPROM programmer for other projects that were based on other platforms such as the Z80, M6800 and so on. I would generate the object code somewhere else and transfer it to the SYM over the serial cable. After getting the code to the SYM, I would save the file to disk, and burn the EPROM using one of the various EPROM boards and software that I have made for the SYM.
In the computer world it is unusual to find a system over 20 years old that still has a useful purpose. After the 65c02 came out, I replaced the 6502 chip in the SYM with one of the newer 65c02 chips and ran it with no modifications for several months. I took it out and replaced the standard 6502 after evaluating the new 65c02 instruction set. The assembler was not set up to handle the new instructions and I had had enough of hand assembly so there was no advantage to the 65c02. Later on there were articles describing changes to the RAE assembler and DISARAE disassembler that would handle the new 65c02 instruction sets, but I never got around to making these changes. I simply continued to use the original 6502 in my projects. I started using chips like the 68hc11 for new designs and put the SYM on the back burner for just maintenance of earlier projects based on the 6502.
Commodore 1541 System
The DOS for this setup was purchased from Ronald A. Jordan who sold this DOS thru his company, Jordan & Associates. This 1541 DOS system was sold as object code on a cassette tape. For an additional fee he would burn an EPROM as well as provide the object code on cassette tape and for still another an additional fee, he would provide the source code on cassette tape. The 1541 physical interface was also provided by Jordan and consisted of a very simple box with one 7416 hex inverter chip with the mating connectors for the SYM and C1541 Disk Drive. I used this system briefly during the time I was making the other version of DOS work. The 1541 DOS was much better than cassette tape, but used expensive Commodore disk drives and was a little cumbersome to use.
I ordered only the 1541 Object Code on cassette tape. I had a good dissassembler to RAE program called DISARAE that would allow me to take the object code and generate the source code if I needed it, so I thought I would save the additional money. Here is a source code listing generated by DISARAE of the object code from $7000. This file can be loaded into RAE and edited to rename the temporary labels and comments to make it more readable if needed. The user manual that came with the object code has the printout of the assembly listing of the fully commented source code, so it would just take a little time to clean up the DISARAE'd version.
Here is the object code assembled to run at $7000 in SYM paper tape format. Note this code is assembled to run at $7000 but will load into $1000 from the paper tape load. This is where I have RAM in the memory map and where I buffer data that will be used by the EPROM programmer to burn an EPROM. This code could be easily entered into the SYM, burn one EPROM and have a SYM with C1541 disk drive system up and running in one evening. Here is the object code assembled at $9000 in SYM paper tape format. Same rules apply for loading etc.
The package came with a User Manual , cassette tape with source code and the interface. Two versions of the object code were provided on the tape. One object code file was assembled to reside at $7000 and an alternate version was assembled to run at $9000. I burned a 2532 EPROM using one of my EPROM programmers to use the code at $9000.
After plugging the EPROM into the SYM board and connecting the drive, I was up and running this DOS. As I said this DOS worked fine, but having only one disk drive made disk copying and file transferring cumbersome. At that time the 1541 disk drive was fairly expensive but they were readily available. This was a quick method to have a long wanted disk system. After I got one of the SYMDOS2 systems running (described below), I never used the 1541 DOS again. The newer SYMDOS2 was so much more robust and easy to use and it did not require tying up one of the edge connectors that I used so much in my other projects.
Conclusion
If you want to have a disk drive on your SYM this is an easy way to make it happen. All you need is a 1541 disk drive and a SYM. You could have them working together in one evening with no problem. This system should also be adaptable to the AIM65 or other similar 6502 systems as well.
SYMDOS2 System
During 1985 I was reading thru old copies of SYM-PHYSIS news letter issue number 9 page12 about a three programs written by a group member named Kin Ping Kwok that were enhancements to the RAE-1 editor/assembler. Issue number 9 had been published 4 years earlier in 1981. During this four years, the SYM Users group had closed up and the SYM was pretty well dead, everybody had moved on to bigger and better things. I, however, was still using my SYM and having fun learning. I was still using a cassette tape as my mass storage device. Remember things were very expensive then and I was, well, pretty tight with money. Anyway, after re-reading the SYM-PHYSIS article, I was having trouble figuring out one part of the article. I telephoned the guy who used to publish the users group magazine, H. R. Luxenberg. I had been a member of the group all throughout its life and had talk to him on a couple of occasions for various reasons. Lux did not know the answer to my question, but he did give me the address of Mr. Kwok who had written the article. I took a shot in the dark and wrote Mr. Kwok a letter to ask my question about the program he had written. I also asked him in the letter if he happened to have copies of the RAE user notes that were no longer available and what else he had in the way of SYM material.. Mr. Kwok wrote me back with the information I had asked for and during his letter he mentioned that most of his SYM material was work he had done centered around the perSYMone FDC-1 disk controller. He had written an completely new SYMDOS2 to replace the DOS that was being used on the perSYMone disk controller.
Mr. Kwok and I exchanged several letters over the next 3 or 4 years. During this time I was still using my SYM and building various hardware and software projects for it. One of the things I got from Mr. Kwok was a copy of the original perSYMone FDC-1 schematic sheet1 sheet2 this design was based on a WD 1791 disk controller chip.
After studying this schematic, I decided I would modify a spare disk controller board I had that was removed from a Radio Shack TRS 80 computer. The TRS80 Controller had most of the basic electronics that I needed and I decided I could make several dozen trace cuts and make it work on my SYM this design was based on the WD 1793 controller chip. I modified one of these controllers and made it work as a disk system on one of my SYM's. The modified drawings are shown in sheet 1 and sheet 2 . Photos of this board and system are shown in the Early Sym section. Notice in this system, the extra space where I started with full size disk drives. These shown in the photos were later 1/2 height replacements.
Please note that I would not recommend this approach using a TRS80 controller. This information is presented for reference only. It would be much cheaper and easier to build the next version to be discussed.
After making this setup work and loving the SYMDOS2 disk system, I decide to build another system from scratch. I designed this system to combine all of the features of my Early Sym into a more streamline system using newer memory and disk controller chips that were becoming available. By this time the price of chips had come way down and disk drives were much cheaper and available in 1/2 height size for a reasonable price. This last system combined all of the features I wanted in a nice compact case that was easy to move around. I started with a new SYM that I had bought and made several Board Modifications that had been discussed in various application notes etc. The overall system interconnect is shown in the system configuration. Note that the dates on some of these drawings is much later than when the hardware was built. I made some of the interconnect drawings one time when I had forgotten exactly what I had done 5 or 6 years earlier.
I designed and built a single plug in board on which I included 32k RAM , the SYMDOS2 controller electronics, a R6551 serial port , and a real time clock based on the Intersil 7170 clock chip. All of the electronics parts were installed on one single project board that used to be sold by Radio Shack. This board is shown in this photo. All of the IC's were installed in sockets and point to point wiring was used on the back side of the board. This single card plugged into the SYM provided all of the additional system features that I had found necessary in my 8 or so years of using the SYM. The 32k memory section was designed using what was then newly available 8k static memory chips. The disk controller was redesigned using a later model Western Digital WD2793 controller chip.
A year or so after the board was in use, I installed a Dallas Semiconductor DS1216B SmartWatch/RAM under the highest addressed RAM chip. In addition to providing another real time clock, this socket extender made the RAM plugged into it nonvolatile. This is a convenient place to load object code that is used frequently like the R6551 I/O routines and printer drivers etc. Having the code there is better than having an EEPROM today, they were always there, easy to modify and required no special programming. You just store the code as you would in any RAM location. Any program can use the address space. I typically loaded the code I wanted to be there high in memory and worked my way down in memory as I needed it. The real time clock is a shadow setup where it does not really occupy any address space, there is a special way to access the memory to extract the clock data. This SmartWatch/RAM has an integral battery that is good for more than 10 years. Mine is still working 15 years later. This socket can be seen if you look closely at the RAM chip nearest you in the photo.
The software was written by Mr. Kwok was intended to run on the perSYMone FDC-1 Floppy Disk Controller that was manufactured and sold by the SYM Users Group in July 1982. This controller was originally shipped with perSYMone DOS and Mr. Kwok simply wrote a whole new DOS to run on the perSYMone FDC-1 hardware. Mr. Kwok lived in China when I first began my communications with him and was later a graduated student in Computer Engineering at U.C. Davis.
The following pages describe the SYMDOS2
SYMDOS2 Users Manual page 7-12
SYMDOS2 Users Manual page 13-19
File I/O handler Source Listing part of SYMDOS2. This part should not require modification to use with different controller hardware.
FIO3(( Part 1 This is a split source code file that is linked during assembly.
FIO3)) Part 2
Disk Drive Interface source listing part of SYMDOS2. This part is hardware dependent based on the particular controller chip. Application information on the Disk Drive Interface.
DDI2_DOC Notes about modifications
DDI2A_C Source code with comments
Note: It has been almost 20 years since I have actually modified and assembled this code. Because it is so terribly easy to make a mistake or forget something from day to day let alone some 20 years later, I have included the actual memory dump from my working SYM. The following object code is currently running on my SYM from EPROM at address $9000. I moved the object code to $1000 so I could issue, SP, the make paper tape command. The reason to move the code first is, a load from paper tape, LP, command will load the code back were it was punched from. So, unless you install RAM at $9000 you could not load the code. Moving it to $1000 first allows the paper tape to be loaded back to $1000 where you will most likely have RAM. Here are the exact commands I used to save the EPROM contents of my working SYMDOS2 system:
F FF,1000,1FFF This will fill memory with $FF from address $1000 thru $1FFF
This is to be sure the following block move worked properly.
B 1000,9000,9FFF This will block move the code from $9000-$9FFF to $1000-$1FFF
SP 1000,1FFF This will output the code in paper tape format
SYMDOS2 EPROM running from $9000 on my SYM in paper tape format.
So if you would like to get a DOS running on your SYM you can make an EPROM from this object code just described and it should work. The additional hardware you would need has been described above, but I will re-list it here for clarity. First look over the Board Modifications that I have made and notice the decode signal I take off of the SYM.. The overall system interconnect is shown in the system configuration. You need at a minimum the SYMDOS2 controller electronics and obviously at least one disk drive and power supply. You could operate the system with 4k (1k with modifications) of RAM, but as cheap as memory is I would install 32k as shown in 32k RAM or better yet use a later 32k x 8 static RAM chip for a one chip total memory configuration. I would not use the Intersil clock chip I would use one of the later 32k Dallas Smart/Watch sockets under the 32k RAM. There may be later models of disk controller chips, but I have not kept up with what is being manufactured. The one I describe is pretty simple and only has a few chips, and it is a proven design. You also need some way to burn an EPROM. I used a Motorola 2532 EPROM and programmed it using the EPROM programmers.
The disk drives I used are IBM PC type 360k 5-1/4 inch double sided drives. I have never tried it, but I see no reason the later 720k or even 1.4M 3-1/2 inch drives would not work. I think the later drives just had more tracks. I used a salvaged power supply from an old computer that had +5, +12, and -12 in a nice little package, but anything that has these voltages would work fine. Burning the EPROM required another power supply
UPDATE 1-16-2003
I removed one of the 360k drives and plugged in an IBM PC 1.44Mb drive in place of one of the 360k drives. I successfully formatted and disk copied files from the other 360k disk to the 3-1/2 inch disk with a 720k disk in the drive. I tried the same thing with 1.44Mb media in the drive and it looked like it worked, I could list the directory ok, but was getting crc errors when trying to read files. I did not experiment further, but this shows the later model dives can be used ok. The software allows you to choose between several track densities and several sectors per track and bytes per track. It may be possible to use the 1.44 media by adjusting some of these parameters. I have always used the default of 35 tracks, double density and 256 bytes per sector for my 5-1/2 drives.
The main point here is you could use later model 3-1/2 drives and either find 720k media or tape over the high density hole in the readily available 1.44Mb disks.
DOS2 Utilities
Note all file names ending RAE denote a RAE source code file. Names ending in DOC are a text file giving instructions about a program. Names ending in OBJ are SYM paper tape format object code files. I have included source code files for most items, that way you can assemble them at any address you like. A few of the files like the FORTH language files are object code only. I typed this code in by hand in HEX, so I do not have the source code.
CAT_C_RAE Disk Catalog Listing with comments.
CAT_DOC Instructions for catalog program
FILECOPY_C_RAE Filecopy program with comments
FILECOPY_DOC Instructions for filecopy program
FORMAT_RAE Disk formatting utility
FMT&CPY object Disk Format and Copy utility Object code
FMT&CPY_RAE Source code for above program
IDSECT_RAE Example of how to modify disk to start any program
IDSECT_MY_RAE The IDsector I use on my RAE startup disk saves lots of time by
linking to the disk I/O, starting RAE and SETing new memory boundries
without having to type anything. Any other program or language could use
technique to auto-start from disk.
Other SYM Programs
A9600_RAE 9600 Baud Terminal Patch
TAPEDIR_RAE Cassette tape directory program.
XREFA_RAE Part 1 of excellent cross reference listing table for use with RAE
XREFB_RAE Part 2
RAE_TO_ASC Will convert RAE format file to ASCII
TINYFORTH_OBJ Object code for Tiny Forth language. Load & G 200
FLEXFORTH_OBJ FLEX-FORTH v1.0 by GEOTEC object code. Load code & G 2000
Note: I have the GEOTEC manual that goes with the FORTH, but it is several hundred pages long. Here is the introduction page.
Flex Forth to SYMDOS2 I/O Notes I wrote
FLEXDISK_OBJ FLEX-FORTH object code with SYMDOS2 links. Load & G 2000 I used these routines to read and write to the SYMDOS2 disk several times with no problems, but they are otherwise untested.
Flex Forth Commodore 1541 I/O notes. I started working on these, and only partially finished.
Conclusion
So ends the SYM DOS story. I have other misc SYM programs and special software that I have written for various A/D, D/A, LED displays, etc. that I may post as time permits.