RighTime v1.1, TestTime v1.1 Copyright 1991, GTBecker April 28, 1991 All Rights Reserved Shareware Notice This file (RIGHTIME.TXT) and evaluation program files RIGHTIME.COM and TESTTIME.COM should be contained in the distribution file. Neither evaluation program will run if the program file has been modified in any way, including filename, length and content. A fresh distribution file of the latest version is always available on the SBE/DFW BBS, 214/647-0670. These files are the copyrighted property of G.T. Becker and Air System Technologies, Inc., of Dallas, Texas, USA, 75234. Commercial shareware distributors must make arrangements with Air System Technologies prior to distribution of these programs. You may use these evaluation programs for up to one month, and you may - and are encouraged to - pass the distribution file along to others for their evaluation, but no one may modify, rename or sell the files or programs to anyone under any circumstances. The programs will notify you when the evaluation period has elapsed. This document is a complete description of the programs, including the license that will be granted upon registration. There are no surprises. If you have questions or suggestions, or if you need assistance, you may call the telephone number at the end of this document any time during evaluation. We encourage you to register your use of RighTime. Registered RighTime users receive a diskette containing the current version of the registered programs, a printed user manual and license agreement, notification of new releases, and enthusiastic support from the author when needed. The registered version of RighTime is functionally identical to the shareware distributed evaluation version, but it lacks registration reminders, it is smaller in size, and it is serial numbered. Beyond the immediate tangible benefits, registration also provides support for the shareware software distribution concept. Shareware is not free software, nor is it in the public domain. Shareware means quality software that you try before you buy, generally at a far lower cost than a similar retail product, if one exists. More happy shareware users mean more happy shareware authors that produce more shareware distributed program offerings. We all benefit, but only if the users do their ultimate part of registering. If RighTime is a useful addition to your system, please register your use. To register, fill in the form at the end of this document and send it with US $25 for a single machine to Air System Technologies, Inc., 14232 Marsh Lane, Suite 339, Dallas, Texas, 75234, USA. Site licensing is available. Version 1.1 A number of new features have been added to RighTime since the previous version (1.0a) was released, and problems that a few users encountered and reported have been fixed. If you tried RighTime v1.0 or v1.0a and found that you could not use the program, try again with v1.1. Please report any difficulties you have. Sometimes your trouble can be remedied by a single telephone call, but if not, your information can be valuable in improving future releases of the programs. RighTime v1.1 includes these new features: * DRDOS 5.0 support; * CMOS RAM requirement decreased to 12 bytes; * Time trim provided in hundredths of a second; * Permanent disable, temporary disable and reenable; * Quiet mode silences beeps in error messages; * Four termination codes testable by batch ERRORLEVEL; * Automatic timeset request by two criteria; * CMOS backup battery failure detection; * Improved TestTime accuracy; * New command line switches /H, /O, /T, /E, /K, /S, /Q. What is RighTime? RIGHTIME.COM is a TSR for MSDOS v3.0 and later and DRDOS which will correct the PC/AT "CMOS"-type clock error up to about 5.5 minutes per day. If RighTime is automatically and dependably installed via AUTOEXEC.BAT as suggested below, the system clock will behave as properly and accurately as one should hope the system clock of a computer would. Written in 80286 assembly language, the resident portion occupies about 3K of system memory. First, here is what RighTime cannot do: - RighTime cannot correct clock boards or computer motherboard clocks that do not emulate the PC/AT hardware clock and its BIOS support precisely. By far, the majority of current 80286, 80386 and 80486 machines are compatible, but systems like the AT&T PC 6300, some Tandy-manufactured machines, AST Six Pack equipped PCs and XTs, ROM-socket and floppy-connector clocks and the like are not supported. - RighTime cannot properly correct an unstable clock; most clocks are slow or fast and they are essentially unvarying. If your clock wanders aimlessly, repair the hardware first. RighTime exploits the better qualities of each of the two clocks in your system and improves upon them by doing three fundamental things: * RighTime slaves the DOS system clock (which has higher resolution) to the hardware clock (which has higher stability), * RighTime improves and maintains accuracy by regularly calculating and applying corrections to both clocks, and * RighTime monitors time set commands (and the equivalent system calls from any program) to learn the hardware clock error rate. RighTime intrinsically sets the hardware clock and solves the midnight rollover date bug that exists in some DOS versions; this eliminates the need for other utility programs or drivers that perform these functions. Unlike DOS alone, the hardware clock seconds transition will be properly set by RighTime and the time will be set to hundredths of a second resolution, and these qualities will survive through rebooting. Each time you set the time, RighTime will improve the accuracy of the clock error corrections and will subsequently improve the accuracy of the clocks. It should be easy to achieve a worst-case error of less than 0.5 second per day and under good conditions, less than 0.5 second per week; typical results are much better. Command line options are provided that allow fine tuning the correction process to your system. A trimming option provides for offset adjustments in hundredths of a second. An option is provided that assists in automatic timesetting by allowing RighTime to notify the AUTOEXEC batch file when a specified number of days has elapsed since the last timeset, or if the system has been inactive for too long and requires a timeset. Large time changes (larger than approximately 5.5 minutes) will not affect the corrections, permitting standard time to daylight time and the converse adjustments. Some rogue programs apparently change the 8254 timer load constant, resulting in a suddenly fast clock which usually requires a reboot to correct. Reexecuting RighTime will load the right value (which will restore the proper rate) and indicate the correct time without resetting the time if it is done reasonably promptly. If You Are In a Big Hurry, or If You Don't Read Manuals You can't know how to take best advantage of a new product unless you take the time to read the instructions, but if you insist on trying RighTime before you understand what you're trying, here's a helping hand: 1) Make a new directory, for example: MD \RT 2) Copy RIGHTIME.COM, TESTTIME.COM and RIGHTIME.TXT into the new directory. 3) Set the date, if necessary. 4) Run from a DOS prompt: \RT\RighTime /F /W /C 5) Set the system time very accurately with DOS's TIME command or, far better, with a telephone timesetting program. 6) Add this command to your AUTOEXEC.BAT: \RT\RighTime /F 7) Reboot. 8) For a few days, set the time accurately immediately before you shutdown your system for the night, and immediately after booting in the morning. If you never shutdown your system, set the time accurately a few times each day. 9) There are other considerations, and there might be additional features that are useful to you, so read the rest of this document, perhaps twice. Getting Started To use RighTime, first decide where to store the corrections. There are three options: disk file, unused CMOS RAM, or neither. In general, try the disk file option first, if you can. If you have a hard disk, you can use the disk file or probably the CMOS RAM option. If you have only floppies the disk file option is impractical, so try the CMOS RAM option. A diskless machine cannot use the disk option, unless it is equipped with a non-volatile RAM disk which appears to the system as any other disk would. The CMOS RAM option involves some initial bravado: although only the first 52 bytes of CMOS RAM are defined by the IBM PC standard (presumably leaving the last 12 bytes available), some modern BIOSs use these 12 bytes for other functions. If you have adopted a user-specified hard disk format, for example, your specification is probably stored there. Before attempting to use the CMOS RAM option, be forewarned that CMOS RAM contains system setup data that RighTime might inadvertently disturb; be prepared to reset the setup data if the CMOS RAM option is unsuccessful on your system. See the Hardware Compatibility List, below. If this dissuades you or if you are otherwise reluctant, use the disk file option if you can. If you choose the disk file option, RighTime will attempt to write to its own program file from time to time, so write access must be allowed. If the "disk" is actually a non-volatile RAM disk card, the card must remain in the machine if this option is to work properly. If you use the disk file option on a battery powered hard disk laptop, you might want to decrease the update frequency to allow your hard disk to spin down after periods of inactivity to increase the battery life (see the /U option, Command Line Syntax, below). The disk file option causes RighTime to maintain an open handle to its program file which might present a problem when running a file defragmenting utility, but RighTime can be disabled during defragmentation and restarted afterwards (see the /K option, Killing, Disabling and Reenabling Resident RighTime, below). RighTime can also be configured with no correction storage, with consequential loss of some of its utility (see No Correction Storage Option, below). If you know how fast or slow your clock appears to run per day, you can optionally speed the learning process of RighTime by suggesting a correction to the program as a signed number in hundredths of a second - positive for a slow clock, negative for a fast clock. For example, if your clock runs about two minutes fast per day, the suggested correction should be -12000 (120 seconds times 100). There are actually two corrections that RighTime normally applies, one while the system is running and warm, and another when the system is turned off and cool. If you know the cool correction, you can suggest it also. If you don't know one or either correction, RighTime will determine them anyway; it'll just take a little longer for the corrections to mature to good accuracy. If you need to restart RighTime and it is currently resident and running, you must first kill the resident program (see Disabling and Reenabling Resident RighTime, below). If appropriate, the corrections that RighTime has already learned can be suggested to the new program copy. If you have been using another resident driver or TSR to correct the weaknesses of your clock, remove all references to it from your CONFIG.SYS and AUTOEXEC.BAT files and, once you are confident that RighTime is all it purports to be, remove the other driver or TSR from your system. To get started, place RIGHTIME.COM in some directory (dev:\path, which does not need to be included in a PATH statement), and run it from the DOS prompt: if you choose the CMOS RAM option, dev:\path\RighTime /R /Wwarm /Ccool or dev:\path\RighTime /R /W /C if you choose the disk file option, dev:\path\RighTime /F /Wwarm /Ccool or dev:\path\RighTime /F /W /C As discussed above, the /W and /C switches are required, but the warm and cool parameters are optional in this first execution. Also, in your AUTOEXEC.BAT file, add: if you choose the CMOS RAM option, dev:\path\RighTime /R if you choose the disk file option, dev:\path\RighTime /F Do not use the /W or /C switches in the AUTOEXEC.BAT invocation; if you do, you will defeat the learning process. Use the /W and/or /C switches only when starting - or restarting - the error correction learning process of RighTime; normally this needs to be done only once, the very first time you run RighTime from the DOS prompt. If you use other options to modify the behavior of RighTime, these options must be included in the AUTOEXEC.BAT invocation, and should be included in the initial DOS prompt invocation. RighTime cannot be INSTALLed in the CONFIG.SYS file. In the examples above and in those that follow, substitute your appropriate device specification and the program file path. For example, I put RIGHTIME.COM in C:\DOS\TIME, my clock runs about 1.5 seconds fast per day when warm, and I use the CMOS RAM option. I started by running: C:\DOS\TIME\RighTime /R /W-150 /C and I added this line to my AUTOEXEC.BAT file: C:\DOS\TIME\RighTime /R Had I chosen the disk file option, I would have run: C:\DOS\TIME\RighTime /F /W-150 /C and I would have added this line to my AUTOEXEC.BAT: C:\DOS\TIME\RighTime /F If RighTime encounters difficulty during its installation, it will report one of several messages and terminate (see Installation Error Messages, below). A successful installation will display the corrections, a copyright notice, and an "Installed" message. Setting the Time Now that RighTime is installed and running, set the date and time as accurately as possible. If you have access to a time standard, use it. For best accuracy, use a NIST telephone service time setting program such as Professional TimeSet v6.0 by Peter Petrakis (register with him, too). Alternatively, you can listen to WWV or CHU or a radio network news broadcast and be prepared to set your clock when you hear the beep on the minute or hour. Don't use a radio station that is airing a call-in talk show; the audio is usually delayed six to ten seconds on such programs to allow for profanity dumping, and so the beep will be equally late. An all-news format station is probably not delayed. To be certain, call the radio station and ask for engineering; they will know. Local telephone time services are usually poor; don't trust that they are correct. What is important is accuracy; RighTime needs a reference to initially learn from, and unless you care to (and know how to) automate it, you are it. From this moment on, RighTime will monitor each time set occurrence, learning from your adjustments. Whenever you notice or suspect that the indicated DOS system time is insufficiently correct to satisfy you, reset it accurately. You will find that the clocks will become more and more accurate and the need for adjustment will decrease, becoming infrequent; however, you must set the time accurately at least once per month (an option is provided to assist in automating this - see Errorlevels, below). Allow sufficient time to elapse between time sets so that enough error exists for RighTime to use in its correction calculations; the more time that you allow, the better the correction factors that are determined. Time sets that are separated by less than 30 minutes will be disregarded. Careless timesets will result in poor correction or even wild clock behavior; remember that you are "training" the program, so do it well. If you are eager, four hours will probably be an adequate initial wait; of course, you can use your system as you normally would during this time. When you turn your computer on, allow it to boot and then, if it is necessary, set the time accurately within ten minutes of boot. Time adjustments that are performed within ten minutes of boot will affect the cool correction; adjustments performed after that ten-minute period will affect the warm correction. Each time you reboot, RighTime will display the current corrections. After a few days of your diligent time setting, the corrections should settle to fairly constant numbers which will be true indications of the uncorrected performance of your hardware clock. Once it is installed, you can also display the current corrections by simply running RighTime again at a DOS prompt (no parameters are required). The correction that is currently being applied to the DOS clock will be displayed and a functional self test will also be performed, verifying that RighTime is currently running properly on your system (see Error Messages, below). As long as RighTime is in use and you've been diligent in your adjustments, and the corrections have matured, the hardware clock error will not be more than 0.5 second, and the DOS clock will be much more accurate than that. In fact, the DOS clock error can be less than 0.01 second; but since DOS can't express the time any better than the 55 millisecond tick rate permits, this accuracy might not be easily seen. Nevertheless, it is there. A tool is provided with RighTime that allows verification and visualization of RighTime's actions (see TestTime, below). RighTime has limits of one week of inactivity, and one month between time sets, that can be corrected to a maximum of 5 minutes, 27.67 seconds per occasion; beyond that, all bets are off. In that case, unpredictable, and probably incorrect, clock changes can occur, but RighTime will advise you of its difficulty if it can. For example, if your clock runs two minutes slow per day and you don't use the system for three full days, when you boot up you will receive a message warning that the clock needs to be adjusted manually (or automatically; see Errorlevels, below). The subsequent adjustment will not affect the corrections. Keep in mind that the date is the most significant part of the time. If you change only the date, you are in fact making a very large change in the time. The change will not affect the corrections due to its large size, but it will very likely change the seconds synchronization, and that, in turn, will create additional error at the next time set. A solution to this problem is to set the time twice after you change the date; first, deliberately set the time an hour off, and then set the time accurately. Neither of these two timesets will affect the corrections due to their size. No Correction Storage Option If you have difficulty with both the CMOS RAM and disk file options or you need or wish to use neither option, RighTime can still correct the clocks for as long as the system runs continuously. What RighTime has learned will be lost when you reboot or power down, and there can be no cool correction. Otherwise, all of the comments above apply. If you suggest a good warm correction and you set the clock after you boot, RighTime will serve well. To run RighTime in this mode, add the following line in the AUTOEXEC.BAT file: dev:\path\RighTime /N /Wwarm or dev:\path\RighTime /N /W You might want to follow this with a TIME command (perhaps preceded by a DATE command) to remind you to set the clock at each boot. Killing, Disabling and Reenabling Resident RighTime Earlier versions of RighTime (which were running with the disk file option) reportedly could cause occasional loss of data or system lockups during high-speed communication sessions. If you encounter similar difficulties with RighTime v1.1, you can temporarily suspend the function of RighTime and reenable it later. The disabling and reenabling command lines can be placed in a batch file surrounding the invocation of the offended program. RighTime should not be disabled for an extended period. In the Software Carousel environment, RighTime seemed to interfere with the automatic partition starting process of the task switcher. This problem was cured by installing and then immediately disabling RighTime in AUTOEXEC.BAT, then reenabling RighTime when the last partition was started. Once RighTime is resident, it can be disabled by running at a DOS prompt: dev:\path\RighTime /T Resident RighTime can then be reenabled by running: dev:\path\RighTime /E Programs that defragment or reorganize the hard disk should always be run with no open files. When using RighTime's disk file option, an open handle is maintained to the program file, so before running a disk reorganizing utility, RighTime should be killed. After the utility completes, RighTime can be restarted with the same command line used in the AUTOEXEC.BAT file. This precaution is not required when using the CMOS RAM option. RighTime can be irreversibly disabled (or "killed") by running: dev:\path\RighTime /K The /K switch will cause the function of RighTime to terminate, but the memory that was allocated to RighTime will remain allocated and unavailable. If you wish, another copy of RighTime can be started with different options. In that case, a memory map will indicate multiple RighTime allocations, but only one will be active. If it is your intent to permanently remove RighTime from your system, you can do so by killing the resident program and removing the RighTime invocation in your AUTOEXEC.BAT. Rebooting is not immediately necessary. Errorlevels RighTime provides four unique termination codes. The termination code can be tested in a batch file to guide subsequent operations. Code value Indication 0 Installed normally, cool correction within range, last timeset within specified elapsed period. 1 Installed, cool correction within range, but more than the specified period has elapsed since a timeset. 2 Installed, but cool correction was out of range (the system has been inactive too long), so a timeset is externally required. 255 Not installed due to syntax error, insufficient memory, incompatible hardware, etc. These codes can be tested in the AUTOEXEC batch file with the ERRORLEVEL batch command. For example, if the termination code is 1, then more than 28 days have elapsed since the last timeset (this duration can be changed with the /S option). It would be wise to have a NIST telephone service time setting program such as Professional TimeSet v6.0 automatically set the time in this situation to prevent RighTime from exceeding its one month limit, or you could cause execution of the system DATE and TIME commands to urge the user to set them manually. Error Messages RighTime might report one of the following messages: "DOS version 3.0 or later is required" The PC/AT "CMOS" hardware clock is not supported by earlier DOS versions. "System is not 80286 code compatible" RighTime expects that the system processor is at least an 80286. The 80C286, 80386(DX), 80386SX, and the 80486 are also code compatible with the 80286. Systems that use the 8086, 8088, 80186, 80188, and the NEC V-series processors will not run RighTime. "No AT hardware clock is present or clock is not running" Either a hardware clock or BIOS failure prevents use of the clock, or the clock chip is not installed in the system. "System skipped a hardware clock alarm" RighTime has not passed a self test, but this condition can occasionally occur normally. Try again in a minute or so. If this message persists, please notify the author. "Alarm is not supported by BIOS" The BIOS has reported an unsuccessful attempt to set the clock alarm feature. The BIOS is not compatible with RighTime. "Already installed" RighTime is currently resident and running in the system. "Correction storage switch is required" Either the disk file (/F), CMOS RAM (/R) or no storage (/N) option must be specified in the command line. "Invalid switch" An unrecognized option switch is present in the command line. "Invalid parameter" A value associated with an option is inappropriate. "Program has been altered" RIGHTIME.COM or TESTTIME.COM has been modified in some way. This message might indicate the presence of a software virus in your system. Immediately delete the program from your system and replace it with the distributed program. If the original distributed copy displays this message, notify the author. This message will also result from an attempt to INSTALL RighTime in the CONFIG.SYS file. "Enable resident RighTime first" RighTime has been disabled with the /T switch. Reenable the program with the /E switch. "Hardware clock indicates low or no battery" The hardware clock and CMOS RAM are powered by a battery during periods when the system is turned off. Replace the battery or batteries or replace the clock module if the battery is self-contained. "Calculated correction is too large" RighTime has determined that a single adjustment of more than about 5.5 minutes is required. The time must be set manually or via a subsequent program that can be invoked within AUTOEXEC.BAT by testing the termination code with ERRORLEVEL. PC/AT and MSDOS Clock Esoteria 18.2 DOS historians say that the designers of the PC tried to do the DOS system programmers a favor by dividing an hour into 65536 parts, or about 18.20444444 ticks per second, making the most significant 16 bits of the 32 bit tick count directly indicate the hour and theoretically simplifying the system code. Somehow the hardware didn't turn out that way, resulting in about 176 extra ticks per day. The 8254 timer/counter clock input of 1193180 Hz and its counter 0 load constant of 0 (effectively 65536), yielded a hardware tick rate of approximately 18.20648193 ticks per second, and that remains so today. That looks like a small difference, but it amounted to an almost ten-second gain per day. DOS designers corrected for the hardware error by redefining the number of ticks per day to include the extra ticks, and a standard was set: the exact ticker rate was defined by the quotient of the number of ticks per day and the number of seconds per day (1573040/86400), which is approximately 18.20648148 ticks per second. When they did that, they made it possible to convert from ticks to time and from time to ticks in two ways, each way exact, but one according to the PC hardware implementation and one according to the day-length standard definition. Using only 16 bit integer arithmetic, the conversion that matches the PC hardware requires multiplying the current time in hundredthseconds by 59659 (which is 1193180/20), dividing that product by 65536 (discard the least significant 16 bits), then dividing that quotient by 5 to yield the tick count. The resulting rate is approximately 0.1820648193 ticks per hundredthsecond, which is the same as the hardware rate. The conversion for the day-length standard can be accomplished by multiplying the current time in hundredthseconds by 19663 (since 1573040/86400 = 19663/1080), dividing that product by 10800, then dividing that quotient by 10 to yield the tick count. The resulting rate is approximately 0.1820648148 ticks per hundredthsecond, the correct day-length standard rate. Ironically, MSDOS authors ignored their own day-length standard and chose to match the hardware to determine the time. The resulting error (compared to the day-length standard) is very small, only 0.039 tick per day, but for some requirements that can be significant. For example, if the resulting time is rounded or truncated to whole seconds, the two methods will yield different results for some values. For most applications, though, the choice won't matter. Often, the number 18.2 or the period 55 milliseconds is used to describe the system clock (interrupts 8 and 1Ch) tick rate. That is never the correct number, but an approximation. Almost all PC "compatible" machines use this 18.2 standard tick rate, but there are exceptions; the AT&T 6300, for example, uses 18.75. Stability, Accuracy and Resolution Frequently confused, these three qualities are different and are only obliquely related, although each is required to exist in any good clock. They can be prioritized with little difficulty. Stability is foremost. Even if lacking in other qualities, a stable clock is useful if you know what to expect of it; an unstable clock generates worthless noise. Accuracy can only be meaningful if the clock is stable. Resolution is required only to meet the requirements of the clock's task; to catch a train on time, for example, you don't need hundredths of a second resolution, just an accurate, stable clock that will tell the time to minutes, or maybe only hours. Translation Gain, Resolution and Truncation Losses Suppose that some accurate clock resolves only to minutes, and you read the clock often at random, or asynchronous, times. Your time reading will be correct if it is made at the instant the minutes have incremented from one number to the next, but your reading will appear to be just under one minute low if made at the instant before the next minute increment. If you do this enough, the average or mean error of your readings will prove to be one-half minute low. This is the mean resolution loss. An artifact of any finite resolution, resolution loss is present when asynchronously reading any accurate digital clock. Some applications require resolution loss compensation, which can be as simple as increasing the time by one-half of the unit of resolution of the clock. Postcompensation can be applied when the time is read, or precompensation can be applied when it is set. In the example, the range of the compensated error would extend from 30 seconds low to 30 seconds high; the mean resolution loss would be zero. More sophisticated compensation schemes can synthetically increase the effective resolution of the clock, but resolution loss, though smaller, remains unavoidable. A similar effect, translation gain, occurs when asynchronously setting a digital clock. The instant of time set can occur anytime between one regular increment and the next. If set at the instant after an increment, no error results; if set immediately prior to an increment, however, the clock will be effectively set one unit too high. On the average, asynchronous clock sets will produce a clock time that is one-half unit of resolution high. Negative precompensation of one-half unit of resolution will compensate for translation gain. Truncation loss is an effect that results from the disregard of digits of low significance. When converting from one time base to another, the result is often not an integral number in the new time base. If the fractional part is ignored, loss results. Arithmetic rounding to the nearest unit of resolution is effective compensation and is easy to implement by adding one-half unit of resolution; the fractional part of the sum is then discarded by the time set function. In the PC/AT, all of these compensations are useful and, when combined, they are easy to implement. Translation and truncation errors are intrinsic to the function of RighTime and are compensated. Since few application programs - nor MSDOS itself - consider resolution loss, it is precompensated by default; DRDOS 5.0, however, includes resolution loss compensation. RighTime's /H0 option should be used on DRDOS systems. TestTime Included with RighTime is a program tool that can provide some interesting insight into the relationship of the clocks in your system and the function of RighTime. TestTime takes no command line parameters. It will determine and express whether or not RighTime is running in the system, and it provides a continuous single line display of the clock system status. The status line is terse: H[date:hh:mm:ss(:aa)] D[date:hh:mm:ss] corr diff distrib where: H is the hardware clock data. (:aa) is the alarm seconds data. While RighTime is running, the alarm seconds will increment in four second steps; D is the DOS system clock data; corr is the current correction being applied to the DOS clock in hundredthseconds, if RighTime is resident; diff is the signed time difference between the hardware and DOS clocks in seconds. A positive difference indicates that the DOS clock leads the hardware clock (it displays a higher, or later, time). Since DOS can only express time to 55 millisecond resolution in hundredthseconds, the difference is determined by a 100-sample moving average method whose accuracy improves with time. The last character of diff will initially be an approxima (a wavy equal sign) to indicate that full accuracy has not been achieved; it will change to an equal sign or a one-half sign when the difference is accurate. A one-half sign indicates that the difference value is between hundredths (an average of 5 milliseconds of resolution); distrib contains three numbers corresponding to the percentage of difference samples that are negative, zero, and positive. When the average difference is zero, the distribution of differences should ideally be balanced around zero. As the DOS clock drifts away from the hardware clock, the balance will shift until all samples are positive or negative. An arrow to the left of each seconds data indicates which data last changed. You can use TestTime to learn much about the behavior of the two clocks in your system. Try running it without RighTime installed and notice that the DOS clock is never the same as the hardware clock. Set the time and run TestTime again. If your DOS sets the hardware clock, check to see if the seconds are synchronized, which is indicated by a diff value of zero. They probably are not. Run TestTime some time later and see if the relationship between the clocks has changed; there's a good chance that it will have. Which, if either, is correct? Try these things with RighTime installed and see the difference for yourself. If RighTime is doing its job, you should see that corr and diff are essentially the same value - the former is the cause, and the latter is the effect. If the corr and diff values differ by some small, fixed amount, you can trim RighTime with the /O option to achieve better accuracy. One way to determine the proper trimming offset is by starting RighTime with a /W0 switch, then running TestTime. Making certain that the corr value is zero (it should be, since you started RighTime with /W0), let TestTime run 100 seconds or more; the approxima will be replaced by an equal sign or one-half sign. If the diff value is then not zero, use its complement value as the trimming offset with the RighTime /O switch. For example, if the difference is -00.02 second, the proper offset trim should be +2 hundredthseconds, so the proper RighTime option expression would be /O+2. Since TestTime measures the difference between the two clocks with a moving average, the diff value will lag the corr value. For warm correction values of 864 hundredthseconds per day or smaller this presents no problem, but for larger daily correction values the current corr value will change within the 100 second window of TestTime. TestTime will never "catch up" with the correction, so the indicated diff value will be somewhat low under these conditions. Briefly, How RighTime Works Every four seconds, RighTime reads the hardware clock time and calculates and sets the proper system time tick count. As usual, DOS continues to increment that count at each 55 millisecond timer tick interrupt and uses the count to determine the time whenever it is requested. When the user or an application program resets the time, RighTime determines the sign and magnitude of the adjustment and uses this data to modify correction factors that it maintains. RighTime normally stores these corrections in CMOS RAM or in its own program file on disk. Every two minutes, RighTime stores the current time so the period of inactivity can be determined when the system is next booted. The proper (cool) adjustment can then be calculated and the hardware clock can be adjusted if it is required. If the cool adjustment spans midnight, the date will be appropriately adjusted. RighTime provides a plus or minus 500 millisecond correction range. When the calculated system clock time and the hardware clock time differ by 500 milliseconds, RighTime advances or retards the hardware clock as needed to keep the correction within range. This adjustment is automatic and will not affect the DOS clock, which remains correct at all times. RighTime takes interrupt 4Ah and hooks interrupts 8h, 1Ah, 21h, 28h and 2Fh, and it is TesSeRact compatible. Use of the features of the hardware clock is central to the function of RighTime, so the hardware clock is strongly guarded. While RighTime is installed, any attempt (via interrupt 1Ah) to set the hardware clock time, date or alarm time, or to disable the alarm, will be ignored and will produce an error indication to the offending program. If interrupt 4Ah is taken by another program, it will be recovered by RighTime. The program is resistant to modifications. Command Line Syntax If you use other options to modify the behavior of RighTime, the options (except options /W and /C) must be included in the AUTOEXEC.BAT invocation, and should be included in the initial DOS prompt invocation. Options /W and /C must be specified in the initial DOS prompt invocation and must not be specified in the AUTOEXEC.BAT invocation. The options are not case-sensitive (either /f or /F will work) and space between options is not required. There must be no space between an option switch and its related parameter. RighTime [ [{/F | /R[addr] | /N}] [/W[[{+|-}]warm]] [/C[[{+|-}]cool]] [/Dmin] [/Umin] [/H[{0|1}]] [/O[{+|-}]trim] [/Sn] [/Q] | [{/K | /T | /E}] ] where: /F causes RighTime to store corrections in and retrieve corrections from its own program file; /R causes RighTime to store corrections in CMOS RAM; /Raddr causes RighTime to store corrections in CMOS RAM at a specific location other than the default address of 63. This location is that of the last of 12 bytes. This option is potentially harmful, since a careless value might allow RighTime to overwrite setup data. Inadvertently changing a hard disk type, for example, can lead to sadness. Be careful; /N disables correction storage; /W sets initial warm correction rate in hundredthseconds per day (default 0, maximum +32767 or -32768); /C sets initial cool correction rate, as above; /D changes the cool adjust period allowance (after boot) from the 10 minute default. The valid range is 1 to 60. Consider this option if your system exhibits a large difference in warm and cool corrections and cabinet temperature is suspect. You should also consider that the clock rate might be affected by lower supply voltage when the system is off; /U changes the CMOS RAM or disk file update period from the two minute default. The valid range is 2 to 60, and the value should be even. If you think the default is unnecessarily frequent, try this option. Remember that this is part of the cool correction process, and less frequency might affect correction accuracy in severe situations; /H sets positive half-tick compensation on (1) or off (0). The default is on (1) for MSDOS systems. Off (0) should be used on a DRDOS-equipped system, which includes its own compensation; /O allows DOS clock offset trim in hundredthseconds. Default is 0; the valid range is -99 to +99. This can be used to compensate for fixed system overhead in the operating system, or to anticipate relay and contactor actuation delays and motor start times in process control system applications; /T temporarily disables RighTime function; /E reenables RighTime function; /K irreversibly disables (kills) RighTime function. The memory that is occupied by RighTime remains allocated and unavailable; /S causes RighTime to set the program termination code, which can be tested with ERRORLEVEL in the AUTOEXEC batch file if the duration since the last timeset exceeds n days. The default is 28 days; /Q will mute any error message beeps. Hardware Compatibility RighTime requires a hardware real time clock that is compatible with the stock PC/AT part, an MC146818. The Dallas Semiconductor DS1287 is one such part. Some modern PC/AT implementations provide an embedded hardware clock, not a separate part, that is fully compatible. The hardware clock and CMOS RAM usability depends upon the hardware and the BIOS: * The Tandy 1000TL hardware is not compatible. * The Tandy 3000 and an unlabeled AT clone with an Award 286 BIOS do not support the alarm feature of the hardware clock and are not compatible with RighTime. * Toshiba laptops will not allow the use of CMOS RAM but no ill effects result from trying aside from a checksum error at the next boot which requires only a key press to correct. Use the disk file (/F) option. * To date, all other AMI, DTK, Oak and Phoenix BIOS ROMs have worked well. If You Have Trouble Please note the symptoms and circumstances as thoroughly as is reasonably possible and contact Tom Becker Air System Technologies, Inc. 14232 Marsh Lane, Suite 339 Dallas, Texas 75234 USA Telephone: 214/402-9660 SBEDFW BBS: 214/647-0670 Fidonet: 1:124/1213.0 CompuServe: 76436,3210 Software License Agreement When you register, this will be the agreement between you (the user) and Air System Technologies to which both parties are bound upon the payment and acceptance of the license fee, which is part of the registration fee. Grant of License In consideration of the payment of each license fee by the user to Air System Technologies, Air System Technologies will license to the user a nonexclusive right to use one copy of each of the software programs (RighTime and TestTime) on one computer at a time. The license is expressly for program use only, per the terms of the license. No other rights are implied. Ownership of Software Air System Technologies is the owner of the software programs and holds full title to them. The user may own the physical media on which the software programs are recorded, including the original disk which is provided by Air System Technologies to the user, but the user does not own the software programs nor any copy of the software programs. Copies The software programs and the documentation are copyrighted and therefore may not be copied without permission. Permission is granted to the licensed user to make copies of the software programs and the documentation as required in the conventional course of computer system data backup. Permission is granted to copy the shareware distribution file in its complete, unmodified form. No other permission to copy is granted. Use and Transfer The Grant of License applies only to one copy of each of the software programs. Simultaneously functional resident copies of the software programs each require licensing. You may not transfer any copy (except the shareware distribution file) of the software programs to a computer which is not under your control, nor may you rent, lease, sell or otherwise assign control of the software programs to anyone. Termination The license is in effect until it is terminated. When the license is terminated, the user's rights that are granted by the license are revoked. The license is automatically terminated upon violation of any of its terms, without notice. Disclaimer of Warranty No warranty of performance or suitability is expressed or implied. Every effort has been made to make the software programs deliver as the documentation describes, but the correctness for your application or environment cannot be assured. Air System Technologies cannot assume responsibility for the failure of the software programs, nor for any consequence of their use. RighTime Usage Registration Form Evaluation version 1.1 Fill out this form, enclose the required funds and mail to: Air System Technologies, Inc. 14232 Marsh Lane, Suite 339 Dallas, Texas 75234 USA I would like to register the use of RighTime. Name:________________________________________________________________ Business name:_______________________________________________________ Address:_____________________________________________________________ _____________________________________________________________ City:______________________________ State:_________ Zip:_____________ Telephone:_________________________ Where did you get RighTime?__________________________________________ Registered RighTime programs are serial numbered. Registration is required for each copy of RighTime that is simultaneously machine resident. If you have, for example, three machines on which you want to run RighTime, please register for three machines. Single machine registration fee is $25. Each additional machine registration fee is $20. How many copies of the RighTime package do you want?_________________ On what media? 5.25"/360K______ 3.25"/720K______ Total enclosed: US$____________ Make your check or money order payable to Air System Technologies. Does your business require an invoice?____________ Thank You!