Write to Syd Wyncoop, c/o TIME DESIGNS, 29722 Hult Rd., Colton, OR 97017. Syd specializes in Timex/Sinclair (1000/1500 and 2068) BASIC, Machine Code, CP/M; and is also experienced in disk operating systems, other computer languages…and MS-DOS(IBM). Even if you are a beginner or an advanced programmer, why not write to Syd? That way, we will all learn something.
- The Editor
I have just purchased a complete LARKEN disk drive system for my 2068 and I am wondering if I made a $497 mistake. I have read in various Timex Sinclair publications where problems are encountered in converting programs from tape to disk. I have very little programming experience and no one in my area to assist me.
Dennis Silvestri
[address omitted]
New Haven, CT
Dear Dennis,
You have raised two very important points. The first, is the importance of a user group, and the support that group can provide. I urge any readers in the New Haven area to contact Dennis. Without belaboring the point, I cannot stress strongly enough the importance of a support group, even if only a few members are in the group.
The second point is usually explained in the documentation provided with the disk system. Having said that, I must confess that I find most documentation to be woefully lacking.
The LARKEN disk system uses the command:
RANDOMIZE USR 100
This command initializes the disk drive system and is followed by the disk commands. For example, suppose you want to LOAD a BASIC program from disk. The complete command would be:
RANDOMIZE USR 100: LOAD “program.b1”
An explanation of the “.b1” can be found in the LARKEN manual. Unfortunately, I do not have a LARKEN system, or a copy of the manual, but I believe this command structure to be correct. I can say that other than supply delays, I have never heard of any problems with LARKEN or their products.
The simplest method to learn disk commands is to make a list. Divide a sheet of paper in half and label one half “tape” and the other half “disk”. Now, write a tape command under the heading “tape” and start searching your disk manual for the corresponding disk command. After you have found and tested the proper disk command, write it on the other half, under the heading “disk” and immediately across from the tape command. Continue in this manner until you have determined all the needed commands. Keep this sheet with your disk manual for future reference and add all new commands or their variations to the list, as they are encountered.
The next item you will need is a tape header reader. There have been several published in Timex magazines. This utility will be needed for saving machine code or other binary memory images to disk. It will give you the start address and length of the machine code.
Lastly, there will be a few programs which use fast loaders and headerless files. These will be very difficult to move from tape to disk, as they will require extensive assembly language experience.
- Syd
I have a 2068, AERCO FD-68 disk drive system, AERCO CPI, AERCO RS-232, CP/M(RPM) and a 2050 modem. Do you know how I can learn to program in Machine Code? I have a copy of HOT-Z.AROS. Do you know if anybody has modified TECH DRAW JR for the AERCO disk system?
Bill McKelvey
Wall, New Jersey
Dear Bill,
You have asked a lot in very few words. Your first question, on Machine Code, is an area that has been taught in TIME DESIGNS, as well as several others. However, the best method to learn Machine Code is to have a task you absolutely must do, a good instruction book and a friend you can ask questions. Then, start the task and do not quit until it is done. I guarantee you will learn Machine Code by the time you complete this process. While this may seem to be a rather stiff answer, I firmly believe it is the best answer.
Machine Code is not so difficult that you cannot learn it, but there is a definite learning hurdle to be overcome. HOT Z.AROS is an excellent tool, but it is difficult to learn to use. I suggest the ZEUS ASSEMBLER for beginners. Zeus will permit you to concentrate on the task of learning machine code, without the additional overhead of learning a complicated program.
I assume your question concerning machine code is prompted by your desire to convert TECH DRAW JR to disk. If this is true, you are tackling a difficult first task. TECH DRAW JR can be easily moved to disk, the code address is 30036 and the length is 35400. You have only to change the BASIC tape commands to disk commands. The changes necessary to the BASIC loader, in order to move the program to AERCO disk are:
Line 50, change the LOAD command to
CAT "TDRAW.BIN",
Line 9910, change the SAVE command to
MOVE "TDRAW.BAS",10
Line 9920, change the SAVE command to
MOVE "TDRAW.BIN",30036,35400
TECH DRAW JR is written to work only with tape. However, in order to change that, which I assume to be your real goal, you must disassemble the machine code and find the area that deals with the tape commands. You must then change this area to branch to your disk command routine. I have written to the publisher of TECH DRAW JR, Zebra Systems, in search of this information and will publish any response I receive.
- Syd
I wrote a checkbook program that worked perfectly until the last time I used it, and then something went wrong. I store my entries in DIMensioned arrays. To get a print out, I enter the first number to start the list at, and then use a FOR/NEXT loop to do the printing. I have an input line that gets this number from me. Following that line, is one that prints out a sentence followed by the input variable. The last time I tried this, the program broke out with a “variable not found” error message. I do not know what caused this to suddenly happen but whatever it is, it’s saved with the program.
James Brezina
Elmhurst, Illinois
Dear Jim,
Your letter is a little too brief for me to make an exact determination, so I will have to guess. It would appear that the variables area of your program has been partially “trashed”. This would account for the fact that the problem is SAVEd with the program, as the entire variables area is saved along with the BASIC program. The simplest fix is to go back to the last copy of the program that worked properly and re-enter all data after that copy.
I am assuming that there are no bugs in your program that have caused the difficulty, as you stated that you had used it for a while and it worked well. Therefore, the solution to your problem most probably is tied to some recent change you made in either the program or a hardware addition. You will need to conduct a thorough search for conflicts that may have caused these changes.
As an example, one of the most common causes of conflict is printer driver software. Check to be sure it is not lOADing over-top of the tail end of the variables area. You could be inadvertently destroying some of your variables upon loading the printer driver software, especially if your dimensions are large and approaching RAMTOP. Have you properly reset RAMTOP? Also, is it a good copy of your driver software? A poor copy may work and appear fine, but could be overwriting the variables area.
The bottom line is that this is one of those elusive problems that can come and go, and be most difficult to track down. A systematic approach beginning from the last known trouble-free point will eventually find it though.
Syd