Software versions and updates for the motorized telescope control program, scope.exe, from January 1, 2000 to January 1, 2002 Mel Bartels

Version compiled Dec 26, 2001:
1. Added power on control lines to pulse/direction motor control option. Parallel port pins 6, 7 are altitude/declination, and, azimuth/right ascension power on control lines respectively.
2. Fixed lockup bug with open ended LX200 commanded slews.

Version compiled Dec 5, 2001:
1. Added capability to power down declination/altitude motor in step/dir motor control as has been the case in PWM motor control.

Version compiled Dec 4, 2001:
1. Negative backlash properly accounted for in the telescope position.
2. Changing directories while selecting scroll file works.
3. Last directory visited while selecting data file, scroll file, or comet file, will be remembered upon revisiting any file selection menu option.
4. Fixed drift bug where declination drift not calculated properly.
5. Comet: added read of comet file; extension is *.cdf; form is: ra dec drift_ra drift_dec note, example
07 14 31 +23 +12 +11 +00 00 +2 -00 -00 -1 31P Schwassmann-Wach. Drift is per hour.

Version compiled Oct 17, 2001:
1. Fixed focus motor control when tracking on that prevented stepping at slow rates.
2. Fixed focus count direction when focus motor reversed.
3. Fixed problem with azimuth drag.

Version compiled July 22, 2001:
1. Fixed bug with the halfstep slewing overvoltage parallel pin 17.
2. Fixed bug in mouse sub menu selection.
3. Added new LX200 commands: AA = align altaz, AL = align land (turns off tracking), AP = align polar.
4. Added new scroll command: handpad_mode. Format is handpad_mode <mode number> <comment>, ie, handpad_mode 5 <note>
5. Fixed the focus speed menu options to limit the focus speed as stated.
6. Added hotkeys: '?' selects 'input equat'; '<' emulates the handpad left mode switch; '>' emulates the handpad right mode switch.
7. Made the return or enter key to be same as answering 'y' to questions posed by scope.exe..
8. Added scroll commands: save1 and restore1.
9. Added negative backlash. This unusual option means that the motor will move in the opposite direction than expected in order to take up backlash.
10. Added scroll commands: dirft_altaz and drift_equat:
dirft_altaz   <DriftAltitudeInDecimalDegrees>   <DriftAzimuthInDecimalDegrees>   <TimeForDriftInSeconds> <comment>
drift_equat <RaHr> <RaMin> <RaSec> <DecDeg> <DecMin> <DecSec> <TimeForDriftInSeconds> <comment>
11. Fixed a problem in the scroll routine when tracking off and scroll file has a non-motor command: the time dependent displays would increment too fast.
12. Don Ware contributed new Messier and NGC data files with fixed coordinates edited with Roger Sinnot's NGC2000, permission to use by Sky Publishing Corp

Version compiled June 11, 2001:
1. Fixed bug in the resetting encoder type 'Ek' function that caused the wrong steps per revolution to be sent to the encoder box.

Version compiled June 9, 2001:
1. Removed drift accumulation during slewing.
2. Added hotkey 'n' for slew to input altaz coordinates.
3. When guiding to build PEC file, guiding corrections are now averaged for each PEC index; before, only the first guiding correction for that PEC index was used.
4. Fixed bug that locked the program when focus command sent by LX200 control.

Version compiled May 30, 2001:
1. New config.dat variable added ABacklashSignalPPortPin17: if non-zero, then parallel port pin 17 used to signal the direction of the 'A' motor backlash: logical high if backlash direction is CCW, logical low if backlash direction is CW (can be used to control motorized counterweights); starting value is logical low.
2. Test serial now initializes the selected com port to the settings in config.dat relating to the encoder serial port.

Version compiled May 16, 2001:
1. Fixed pulse/dir motor control method so that the config.dat variables: ReverseAMotor and ReverseZMotor work.
2. Added beeps to indicate end of slews (tracking must be on).
3. Added user control of step rate in track encoders (where encoders are used to record the amount of motor movement per each microstep).
4. Removed obsolete teststrings from the end of config.dat.
5. Changed sub menu order, so that they descend in columns to match the up/down cursor keys that select them.
6. Fixed LX200 guiding commands to recognize rotation of guide commands based on guide rotation angle.
7. Fixed problem when translating guiding efforts to PEC where a guide file might have PEC numbers recorded that oscillate back and forth instead of smoothly increasing or decreasing.
8. Added new LX200 commands that are customized for scope.exe and interfacing programs: I1 I2 I3 for initialize position 1 2 or 3. SetRa and SetDec should be commanded to scope.exe before calling each of these new initialization commands.
9. Limited field rotation motor maximum slewing speed to FRStepSpeedMilliSec. Already limited in speed while slewing by handpad, there was no limit while slewing to catch up to the correct field rotation angle after the scope finishes a slew and starts tracking.
10. Fixed problem with Dave Ek and SkyCommander encoders where counts per greater than 32,767 were read errantly.

 Version compiled March 6, 2001:
1. Added compensation for current variation to each stepper motor winding.  It has been discovered that the 8 output lines from the circuit may vary in output current thanks to variations in the parts themselves.  In addition, there may be variations in motors.  Some of the quarter step correction (QSC) issues may be due to variations in motor winding current.  By allowing for individual current adjustment of each output line, one can tune very output line to give the same current.  For instance, if one finds that the 2nd output line ('B' winding of the altitude/declination motor) reads a low current compared to the other output lines, the other lines can have their output current lowered by the software to compensate.  Default is no compensation and config.dat does not need to be changed.  If you wish to use output line/motor winding current compensation, add the following variables to config.dat.  A value of 1 means output 100% of available current, a value of 0.5 means output 50% of available current, and so forth.
The values appear in config.dat as follows (this example shows a compensation for a disparate 'B' winding of the altitude/declination motor):
PWM_A_a_Comp 0.8
PWM_A_b_Comp 1
PWM_A_c_Comp 0.8
PWM_A_d_Comp 0.8
PWM_Z_a_Comp 0.8
PWM_Z_b_Comp 0.8
PWM_Z_c_Comp 0.8
PWM_Z_d_Comp 0.8
2. Halfstep overvoltage control line has been added (parallel port 17). Add the following variable to config.dat and enter the delay value when you wish the overvoltage control line brought to logical high state.  
HsOverVoltageControl 300
For instance, if your MaxDelay is 1000 and your MinDelay is 100, you may wish the overvoltage to turn on at a value of 300.  If using the delay timing loop method of halfstepping, the overvoltage will be turned on at the start of halfstepping.  Entering a zero value for this parameter means to ignore the overvoltage control line.
3. A big in the pulse/dir routine has been discovered.  If the scope is commanded to move in microsteps by the handpad or by F1-4 keys before tracking is turned on, weird things may happen to the motor output and to subsequent tracking attempts. 
4. Bug in the scroll file command: off_altaz.  Slews were not moving to offset altazimuth coordinates, but instead to absolute coordinates.
5. Added new scroll commands: new_equat and new_altaz.  These set the current coordinates to the values immediately following the commands, ie,
new_equat   <RaHr> <RaMin> <RaSec> <DecDeg> <DecMin> <DecSec> <comment>
new_altaz  <NewAltitudeInDecimalDegrees>   <NewAzimuthInDecimalDegrees>  <comment>
6. Added automatic GEM flip, turned on by two new variables in the configuration file, config.dat:
AutoGEMFlip 1
AutoGEMFlipFuzzDeg 7.500000
If AutoGEMFlip is 1, then GEM flip will occur automatically.  The fuzz factor is how much past the meridian before the GEM flip will occur.  Having some fuzz factor is important otherwise the scope could oscillate between flipped and not flipped states as small pointing corrections are made.
7. Removed the messages from the menu option: move | gem flip.  The three GEM flip movements will now occur in sequence without any status messages or opportunities to abort the process (movements are 1. move to pole, 2. move across meridian 180 deg, 3. move from pole back to object)  If you wish to stop the GEM flip move, then you will have to cancel each slew in turn.
8. Added a new menu option to change the site coordinates, under the file section.
9. Added a new menu option to change the AutoGEMFlip, under the motors section.
10. Added new menu options under the handpad section to simulate the mode switch flip to the left and to the right.  Now you can activate whatever function you wish, such as an analysis point, or turn on/off guiding, based on the handpad mode that you are in, without recourse to the handpad.
11. Added new encoder type: LM629Serial for the new motor control option to operate servo motors via LM629 chip.  Encoders are read from the microcontroller that is interfacing with the LM629.
12. Added new motor control type of 4 for LM629 servo motor interface.  These commands are sent serially to an intermediate controller that handles the interfacing to the LM6290 chip.
13. Added new menu item that steps through each microstep of every winding, recording encoder values at each microstep.  Readings are saved to a file called TRENC.TXT.  By attaching a precision encoder to the stepper motor output shaft, a series of values can be obtained displaying smoothness of motor rotation.  Look for track encoders under the menu section move.

Version compiled Jan 23, 2001:
1. Fixed microstep display so that the microstep number displayed always is the same as the PWM[number] to adjust.
2. Changed the QSC (quarter step correction) so that it is tied to this displayed microstep number or PWM[number].
3. Put sound back in as an option when at microstep number zero.
4. In AutoMsParms menu option, hitting two enter keys in a row will cause default values of 30 PWM/tick and 50% current usage to be adopted.  Before this fix, the program could lock up if entering no values.

Version compiled Jan 22, 2001:
1. Fixed bug with field rotation motor when tracking turned on and direction is counterclockwise and reverse FR motor is off, it would suddenly start moving rapidly.
2. Added new menu option in the coordinate section to change the home altazimuth coordinates.

Version compiled Jan 18, 2001:
1. Added new motor control method of 3: MotorControl_CFH_Serial; a serial control method developed by Charlie Habekost (

Version compiled Jan 16, 2001:
1. Changed the equatorial initialization for southern hemisphere (indicated by a negative config.dat) so that the alignment is to the southern pole.
2. Code now checks for inappropriate DomeAzimuth and AirMass values.  Prevents some math domain errors from appearing on the screen.
3. Added messages to init encoders and reset encoders menu options.

Version compiled Jan 4, 2001:
1. Fixed some bad function pointer initializations for the 'serial Dan Gray' motor control method.

Version compiled Dec 28, 2000:
1. Fixed program startup parallel port bi directional port output state so that the control pins 1, 14, 16, and 17 will start at their logical low states.

2. Added focus motor control.  Several methods of controlling focusing are available:
a. Connecting parallel port pins 16 and 17 to a pair of relays to control a small DC motor for focusing.  Pin 16 focuses 'out' and pin 17 focuses 'in'.  This can be operated with the field rotator concurrently.
b. As above in option 3, with the addition of parallel port pins 1 and 14 for slow speed control.  Field rotation is disabled with this option. c. Using the field rotation motor control circuit with a small stepper motor for focusing.  This uses parallel port pins 1 and 14 for pulse and direction.
d. Adding a second MC3479 bipolar stepper control circuit with a small stepper motor for focusing.    This uses parallel port pins 16 and 17 for pulse and direction.  Both the field rotation and focus motors can be operated simultaneously.  Along with the altitude/declination and azimuth/hour angle motors, this means that four motors are controlled at the same time.

If a stepper motor is used, the focus position is kept track of by virtue of counting the stepper pulses.  Particular focus positions can be returned to.

In addition, several menu items were added for focus control.  Also, the status display has been rearranged to make room for the focus displays.  Focus position is now displayed along with: field rotation motor command, auxiliary control, and focus motor commands.

New variables added to config.dat (see the configuration page for further information on these variables):
[*** focus section ***]
FocusMethod 2
ReverseFocusMotor 0
FocusFastStepsSec 500
FocusSlowStepsSec 100
FocusPosition 200

3. Made a minor change to parallel port pin assignments for auxiliary control and number of mouse clicks to trigger an event for consistency's sake.  They now look like:

A motor CW  = handpad up   = mouse up (1 click)    = aux 1  = mouse focus slow plus  = LX200 focus out
A motor CCW = handpad down = mouse down (2 clicks) = aux 14 = mouse focus slow minus = LX200 focus in
Z motor CW  = handpad CW   = mouse right (3 clicks)= aux 16 = mouse focus fast plus  = LX200 focus out
Z motor CCW = handpad CCW  = mouse left (4 clicks) = aux 17 = mouse focus fast minus = LX200 focus in

handpad CW  + MsSpeed = handpad focus slow plus
handpad CCW + MsSpeed = handpad focus slow minus

pport pin 1 = field rotation pulse or focus pulse
pport pin 14 = field rotation direction or focus direction, on = CW = out = plus
pport pin 16 = focus pulse
pport pin 17 = focus direction, on = CW = out = plus

4. Added new display field showing the rate of field rotation in degrees per minute.  The 5 fields underneath "FieldRot" are labeled: 'A' for field rotation angle, 'R' for rate of field rotation change, 'M' for field rotation motor angle, 'M' again for field rotation motor step position and reset count, and 'G' for handpad buttons rotated guide angle.
5. Added new display field showing airmass calculation.  This is calculated from the current equatorial coordinates, latitude and longitude, so it is accurate for equatorial as well as altazimuth mounted telescopes.
6. Added new display field, DomeAzimuth, based on current equatorial coordinates.  If you have a standalone dome control system, this allows one to remotely rotate the dome to the proper position.
7. Changed behavior of encoders so that they are turned off during slews.  The LX200 port remains open to report updated positions during IRQ8 method slews.
8. Removed unused tests from the program: TestVideo, TestAtimes, TestMouse, TestConversion, TestAltOffset, TestZ1Z2,  TestIACA.  The TestEncoders is also removed as the raw enconder counts are already displayed in the main program.
9. Removed from config.dat's TestString option and added as new menu option: TestParallelPort is removed from the config.dat file and added as a menu option.
10. TestHandpad removed as the new menu option test parallel port and the handpad display provide the necessary testing.
11. A change in adjusting the PWM spacings-   Also removed from config.dat's TestString options are Track and Track2Motors.  The menu option Track2Motors has been changed to allow individual entries in microsteps per second and acceleration microsteps per timer tick.  Once the values are entered, the program continues rotating the motors at the appropriate rate until 't' for track-off is hit.  To adjust the PWM spacings and play with other microstepping paramters, you enter '0' for steps per second, then switch over to the menu option to adjust the microstepping parms.  Here you can hit the '-' and '+' keys to retreat or advance a single microstep, along with changing other microstepping parms.  Hitting 'q' quits from this, and hitting 't' stops the motors.

Version compiled Dec 3, 2000:
1. Added parallel port pins 1, 14, 16 and 17 to the parallel port test.
2. Fixed bug in handpad auxiliary control mode: when a button was released, the pin would remain at logical high.
3. Moved read_slew and write_slew menu options from the control section to the file section.
4. Created new menu category called Motors and moved motor control functions to this.
5. Added ability to move the field rotation motor via the handpaddle while scope continues to track.  Before, tracking would cease during a move of the field rotation motor when commanded by the handpad.
6. Changed FR steps display under the field rotation display to show the clockwise minus counterclockwise steps.  Before, both numbers were displayed.

Version compiled Nov 6, 2000:
1. Added Sky Commander encoder interface.  Needs v3.38 or higher.
2. Added control of single pulse and direction stepper motors.  Altitude or declination pulse is parallel port pin 2, direction is pin 3, azimuth or right ascension pulse is pin 4, and direction is pin 5.  Field rotation single pulse and direction remains the same.  Set the fullstep size in config.dat to the step size of the motor.  InvertOutput works.  This allows control via many types of motor controller boards, including bipolar and servo motors.
3. Changed mouse interface of scope motors to clicks (sweeping hand motions away from monitor was not 100% accurate): right clicks control the mode, where a single right click is menu control, 2 quick right clicks is halfsteps, 3 quick right clicks is microsteps, and 4 quick right clicks is auxiliary control.  When halfstep, microstep, or aux control, the left button controls the direction and duration.  Pressing once and continuing to hold down the left button will move the scope 'up', same as the up button on the hand paddle.  Clicking twice rapidly and holding the left button down on the second click will cause 'right'.  Three clicks and holding the button down on the 3rd click will cause a 'down' action.  Four clicks and holding the button down will cause a 'left' action.  The action will continue until the left button is released.
4. Added LX200 commands in order to get ACP (astronomer's control panel LX200 control to work): GG for get timezone, GF and GVF for get field (returns 100), TQ for time quartz (ignored), Sy GPDCO sets the ‘type' string for the FIND operation (ignored), Gq for get minimum quality of the find operation, Sq for setting of minimum quality of the find operation, Sh to set the current higher limit (value ignored), Sb = set brighter magnitude limit for find operation (value ignored), Sf = set fainter magnitude limit for find operation (value ignored), Sl = sets the larger size limit for the FIND operation (value ignored), Ss = sets the smaller size limit for the FIND operation (value ignored), Lo = load object catalog from library (ignored), Ls = load star catalog from library (ignored), Sw = ???, B+ B- B0 B1 B2 B3 = reticle brightness commands (ignored), SF = sets field (value ignored), GM GN GO GP get site info ("SCP" returned), LI =  return object info (ignored), W1 through W4 = set site number (ignored), St = set latitude (ignored), Sg = set longitude (ignored), Gr added to GR for Get Right Ascension, Gd added to GD for Get Declination, SG = set GMT offset (ignored), SM SN SO SP = set site number (ignored).

Version compiled Oct 12, 2000:
1. Fixed just introduced bug with reading negative declinations from files.
2. Changed PEC display when synch point occurs so that the errors are highlighted and stay on the screen until the next synch time.

Version compiled Oct 11, 2000:
1. Path to Project Pluto's Guide planetarium program was fixed at c:\guide Now it is set by the config.dat variable, InterfacePath..
2. Fixed mouse cursor disappearance when returning from DOS programs inside scope.exe.
3. When commanding a move via mouse, the mouse cursor is reset to the middle of the screen upon a mouse button press.  This solves the problem of the mouse cursor wandering to one side of the screen while the user is at the eyepiece, leaving no room left for movement in that direction.

Version compiled Oct 10, 2000:
1. Fixed scroll commands: data_file and move_file: the file name was not being processed.
2.Added new config.dat variable: StartingHandPadMode.  Sets handpad mode at program startup.  Use a number based on the sequence of handpad modes, where 0 is 'off' and 2 is 'init 1 on' and 12 is 'scrolltour'.
3. Changed color of PEC synch index discrepancy from display color to current color in order to make these error values stand out better.
4. Added prompting of individual PEC files to average.  Before, all PECALTxx.TXT and PECAZxx.TXT files were averaged, now, you select which files to average.
5. Added command line option to load scroll file.  Use the -x <filename> syntax, ie, scope.exe -x veil.scr.  Since repeated actions like startup sequences can be put into scroll files for easier use, this allows a startup scroll file to autoload without having to select it from the menu system.
6. Added capability to understand that declinations starting with -0 should be negative while reading files.
7. Changed behavior when attempting to move beyond altitude and azimuth limits when in grand tour or scroll modes.  Before, a message would appear requiring a keystroke to clear, now, two warning beeps are played, while a message is displayed briefly, then program execution continues.  If doing a grand tour or scroll tour at the eyepiece, if you attempt a move beyond the limits, you can now move to the next object in the usual manner after the warning beeps.
8. Added mouse control.  Wireless operation at the eyepiece is now possible.  A wireless mouse can substitute for both the handpaddle and a motorized focuser controller.  
Use the mouse's right button to set the mouse mode: move the mouse in different directions while holding down the right button, then release the button. Moving the mouse upward puts the mouse in menu mode.  Here you can operate the software's menus with the expected point and click operation.
Moving the mouse to the right puts the mouse in microstep mode.
Moving the mouse to the bottom puts the mouse in halfstep mode.
Moving the mouse to the left puts the mouse in auxiliary mode.When the mouse mode is microstep, halfstep, or auxiliary mode, using the left button will turn on the appropriate motor until the left button is released.
To move, hold down the left button and move the mouse in the direction you wish the scope or auxiliary device to operate in, keeping the button pressed until you wish the motor motion to stop.
As with the handpad's auxiliary mode, the up direction controls parallel port pin 1, the down direction pin 14, the right or CW direction pin 17, and the left or CCW direction, pin 16.

Version compiled Sept 16, 2000:
1. Fixed scroll display: the current scroll command and scroll position counter would disappear from the screen.
2. Added coordinates update and display during microstepping, including the jumbo display.
3. Added LX200 commands during microstepping.  Now the external controlling program can watch scope.exe microstep.
4. Fixed test function 'Track': recently introduced bug would cause program to crash if encoders enabled.

Version compiled Sept 14, 2000:
1. Fixed bug in slewing with IRQ8 method that afflicted some SX computers.  Specifically, the interrupt routine locked up when making floating point calls.  These calls have been removed to outside the routine.
2. Changed behavior of LX200 synch command to reset the current scope coordinates to the inputted lx200 coordinates.  Before, the coordinates would be transferred only to the input fields, requiring an extra step at the scope.exe menu to reset to current.
3. Changed slewing IRQ8 routine to allow LX200 commands during slew.  This means that the external controlling computer can now receive position updates as the slew progresses, and can start and stop slews as desired.  Previously, no updates were returned, and any open ended slew commanded would slew a predetermined distance, as indicated by the LX200SlewHs variable in config.dat.
4. Changed LX200 read behavior so that a command will be marked incomplete if no further data received in 1 second.  Before, command would have been marked incomplete if no further data received in 55 milliseconds.
5. Changed LX200 read behavior so that no command is acted upon until LX200 port is quiet for 55 milliseconds.  Before, the function had no time check, and it relied on a higher level controlling function waiting a suitable time period before calling it again.
6. Per Chris Rowland, added LX200 check during scrolling.  This gives the external controlling program the ability to watch the scroll file in action.

Version compiled Sept 11, 2000:
1. Made jumbo RA/Dec display update during slewing, if using IRQ8 method.
2. Separated into two menu items (separate menu item for each axis) the guiding efforts into PEC menu item.

Version compiled Sept 5, 2000:
1. Added Com3 (IRQ4) and Com4 (IRQ3) to the allowable com ports for the encoders and for the LX200 command port.
2. Fixed display bug where winding 'a' through 'd' and microstep number in the winding would display incorrectly for negative values of accumulated microsteps.
3. Fixed bug in quarter step corrections routine for negative values of accumulated microsteps.
4. Rearranged the sequential task controller for faster updates.
5. Added encoder updates when slewing with IRQ8 method of timing the halfsteps.
6. In the PMC calculation function, changed the algorithm so that closer analysis points get even more weight than before.
7. Per Chris Rowland, added new scroll commands:
    initialize position 3: written as 3,
    initialize position 3 using input equatorial fields: written as 3i,
    turn off auto scrolling: written as auto_scroll_off,
    prompts for input equatorial coordinates: written as set_equat,
    prompts for input altazimuth coordinates: written as set_altaz,
    resets to input equatorial coordinates: written as reset_equat,
    resets to input altazimuth coordinates: written as reset_altaz,
    resets to home coordinates: written as reset_home,
    prompts for an object in the specified data file: written as data_file,
    prompts for an object in the specified data file and moves to it: written as move_file,
    displays a prompt on the screen: written as prompt.

Version compiled 8/25/00:
1. Fixed field rotation motor pulsing for more evenly spaced steps (motor could oscillate back and forth in certain situations).
2. Fixed just introduced bug where slewing with encoders caused machine to lock up.

Version compiled 8/23/00:
1. Changed field rotation motor function calls so that the microstep tracking function controls the motor: it calls the calculation functions and at the end of every PWM, checks for FR motor output.
2. Added check for LX200 events while scrolling.
3. Added new variable to config.dat in the microstepping section: AvgPWMRepsTickOnFlag .  if 1, then auto-averaging of the PWMRepsTick will occur, based on the actual number of PWM repetitions per timer tick as averaged over 3.5 seconds; if 0, then the PWMRepsTick value as entered in the config.dat file will be used..
4. Added enhanced color to the data file/object name/ scroll # area on the screen.  These now display in 'current' colors, the same as the current coordinates.

Version compiled 8/15/00:
1. Added new initialization menu items under the init section.  These init1, init2, and init3 menu options duplicate the handpaddle init1, init2, and init3.  The old menu options to manually enter the inits (you manually enter altitude, azimuth, RA, Dec, and sidereal time) continue to exist.
2. Program now updates PWMRepsTick on the fly, based on the average number of PWM repetitions per timer tick over several (3.5) seconds.  The PWM display area shows the actual PWM count in real time, along with the current average PWMRepsTick.  Minimum value that the average PWM reps per tick can take is 9.
3. Added time check to force wait of SerialWriteDelayMs (variable in milliseconds from the config.dat under the encoder section) between encoder query and read while microstepping.  Before, the wait was always one timer tick (55 milliseconds).
4. Changed name of track menu option to 2 motor track, since both motors track at constant rate.  TestString name in config.dat continues to be "track".
5. TestString name in config.dat of 2 motor track where motors have independent tracking rates changed to Track2Motors2Rates.
6. Added code so that the sidereal time increments during the interrupt method of slewing.
7. Changed priorities of tasks such that the encoders get the highest priority (still read once a second), then coordinates displays (twice per second), then remaining tasks and displays.
8. Added encoder count display to the 2 motor track.
9. Added new configuration variable: EncoderBaudRate.  Most encoder interface boxes are 9600 baud, but some are 2400 baud, and newer ones may be faster.  This allows scope.exe to work with those slower boxes.
10. Added new menu option: auto Ms parms, under the control section.  Here, you input the desired PWM repetitions per timer tick, and the percentage of current draw you wish going to the motors, and the program will do its best to settle in on the appropriate MsDelayX and MsPause values.  Values are updated every 3 seconds, so allow a few seconds for the program to reach the best numbers.  Desirable PWM reps per tick range from the lowest suggested of 10, to the best range of 30 to 100, with 200 as highest suggested.  Percent of current draw should be minimized so that only the current required to microstep track is actually pulled from the power source.  For instance, with 6 volt motors and a 12 volt supply, current % should be no more than 50, and can often be 20%.  In combination with the new auto PWM reps tick averaging, this should speed up configuring the microstepping parms.
11. Added ability to display and select directories in the data file menu selection.  Now you can divide your data files into subdirectories for easier organization and select the files from the various subdirectories.  At the end of the data file selection, the starting working directory is restored.

Version compiled 7/28/00:
1. Added check for altitude and azimuth full step sizes - they should be greater than zero.  Otherwise a video error message may appear.
2. Added time check to make sure that encoder reads occur immediately after the encoder query.
3. Added check for zero backlash speed if backlash values are present in config.dat.
4. Added backlash speed to the parameters that can be changed online in the menu option: control / backlash.
5. Added new menu option to reverse the motor directions: control / reverse_motors.
6. Added config.dat variable that controls the style of halfstep ramping: 0 if the old simple style, 1 if the new 'S' shaped style (starts slow, fast in the middle, slow near the end of the ramp).
7. Fixed bug that caused errant menu option to pop up when exiting scroll file with certain keystrokes.

Version compiled 7/18/00:
1. Changed the calculation of encoder counts into coordinates: when bringing values to within range, 360 degrees are added or subtracted.
2. Added focus commands to the LX200 supported command list.  Focus out and focus in will control parallel port bidirectional lines pins 16 and 17 respectively.  At this time only a simple on/off toggle of the control lines is supported.
3. Fixed bug in microstepping routine that affected the altitude/declination motor.  The symptom was a non-moving motor.

 Version compiled 7/7/00:
1. Changed the calculation of encoder counts into coordinates so that the range is between -180 and 180 degrees.  The range was between -90 and 90.  This is how the program acted before adding the GEM flip condition, where the range continues to be from -360 to 360.
2. Added command line option to specify the configuration file.  Use the format:   scope.exe   -c   myconfig.dat, where myconfig.dat can be any file name in any drive or subdirectory, ie,   c:\scope\scope.exe   -c   d:\download\
3. Enhanced the 1 track motor function (this function moves both motors at 1 rate) by adding three commands: + - d.  The + and - moves up or down a single microstep.  So, now you can input a speed of 0, and use the plus and minus keys to navigate through the microsteps, tuning each microstep as you go.  The d key doubles the microsteps, interpolating the new values.  This leads to a faster way to tune the microsteps.  Start with 4 microsteps, and values of 100:0, 100:60, 100:100, 60:100 for the 4 microsteps.  Using the +- keys to stop at each microstep step, use the cursors keys as before to tune the step.  Now hit the d key to double the microsteps, and tune up the four newly created inbetween microsteps.  Hit the d key again, and tune up the inbetween microsteps to arrive at 16 steps.  Go through the process once more to arrive at 32 microsteps per fullstep.

Version compiled 6/27/00:
1. Changed the ramp profile so that the slow down in ramp up speed as fastest speed is approached is not quite so dramatic.
2. Moved the EC and QSC values on the screen a tiny bit so that they display cleaner.
3. Found an error in the new AZAZEC routine, where the corrective value was not being backed out properly when switching between raw scope and true scope pointing values.
4. Added ramping distance to altitude and azimuth software limits.  So, the scope will start to ramp down as a limit is approached, so that the scope finishes the ramp down as the limit is reached.  Previously, the ramp down was started when the limit was reached.

Version compiled 6/22/00:
1. Changed the ramp profile to start slower and creep up to final highest speed slower, with a faster speed in the middle.
2. Moved menu items around: track 1 motor, track on/off, and field rotation track on/off, all from the 'control' section to the 'move' section, since these menu items properly involve motion of the telescope.
3. Renamed main menu section 'PEC' to 'EC', which stands for Error Correction, to encompass more than Periodic Error Correction routines.
4. Moved Error Correcting menu items from 'Init' section to the newly renamed 'EC' section.  This separates the initializations and its axis alignments from the EC routines.
5. Added new menu option to enable/disable the Declination motor microstepping.  This is under the control section.
6. Added new config.dat variable, StartInitState.  This controls the startup state of the initializations.  It operates exactly as the query at program startup: 0 means ask user per traditional menu options, 1 means adopt equatorial alignment, 2 means adopt altazimuth alignment, 3 means adopt no alignment at all, and 4 means to reuse last alignment.  Any other option than 0 means that you will not be queried.  This is a config.dat replacement for the query menu at startup time.  Use it if your answer to the opening query is always the same.  Default is 0, to query  the user.
7. Added new Error Correcting function: AZAZEC, or AZimuth vs AZimuth Error Correction.  This is an azimuth correction based on azimuth.  Best used for azimuth gear eccentricity and similar errors, it should not be used for azimuth errors of tilt that increase with altitude.  Use the Z1Z2Z3 group of tilt corrections instead.  The new variable UseAzAzECFlag is used in the config.dat to turn on the EC at program startup, exactly as ALTALTEC and ALTAZEC.  The file AZAZEC.DAT holds the corrective values.
8. Added new scroll command: auto_scroll_alert_off.  This turns off the pause and beep that occurs when moving to the next scroll entry while in auto scrolling mode.  This will facitate seemless auto scrolling for instance, while tracking satellites.

Version compiled 6/5/00:
1. Enhanced HSC (HalfStepCorrection) to QSC (QuarterStepCorrection).  To have the program auto-generate values of zero, add the following line to the config.dat file, then save config.dat when closing the program:

QSC_a0 0 : 0

 Version compiled 5/30/00:
1. Added halfstep corrections (HSC).  This corrects for physical variations in the stepper motors causing the sequence of 8 halfsteps across the 4 windings to vary in size.  Keep in mind that standard PEC compensates for fullstep variation, so the PEC will need to be redone when first adopting HSC.  Corrective values are entered in decimal fullsteps, ie, 0.2 means that the motor moves 0.2 fullstep too far.  Here's an example of how to make the entries in the config.dat file, showing a corrective action in the altitude/declination motor, and no corrective action in the azimuth/right ascension motor (HSC stands for HalfStepCorrection, the 'a' through 'd' stands for the winding, and the additional '2' stands for the halfstep inbetween):

HSC_a  0.00 : 0.00
HSC_a2 0.00 : 0.00
HSC_b  0.10 : 0.00
HSC_b2 0.20 : 0.00
HSC_c  0.20 : 0.00
HSC_c2 0.10 : 0.00
HSC_d  0.00 : 0.00
HSC_d2 0.00 : 0.00

2. Fixed an issue with the offset coordinates in declination and altitude.
3. Fixed a typo in an altitude error correction routine.
4. Added new menu option to save the config.dat file.
5. Added new menu option to move the motors such that the PEC indices are zero.
6. Fixed display bug with PEC values when PEC is turned on after being turned off, and tracking is off. 
7. Added display of PEC index discrepancy during PEC synchronization.  If the synch point occurs as expected, the displayed number will be zero.  If it occurs late while moving clockwise, the number will be positive.  When a synch point occurs, a "A:xxx" and or a "Z:yyy" will appear, with the xxx and the yyy being the discrepancy.
8. Added display of scroll file entries and current entry number that is being executed.  This display is just after the scroll file name on the screen.
9. Added new scroll file command: msarcsecsec.  This adjusts the microstepping speed..
10. Added new scroll file command: move_zero_pec.  This moves the scope so that the pec indeces are zeroed out.

 Version compiled 5/23/00:
1. Fixed an issue in the scroll file scripting where the stepper motor rotors were not always being centered on a winding before halfstepping or other scroll commands were acted on.
2. Microstepping motor status now displays at program startup.
3. Fixed problem where error corrections at startup would cause current coordinates and PEC indexes to creep as program was started and stopped repeatedly.  There may be some residual creepage at the arcsecond level if corrective values are very large.
4. Moved PEC offset values to config.dat.
5. Moved encoder offset values to config.dat.
6. Moved initializations from align.dat file to config.dat.
7. Moved current altitude and azimuth values from current.dat to config.dat.
8. Changed TurnOnPECAtStartup to PECFlag in config.dat.
9. Changed TurnOnAltAzECAtStartup to UseAltAltECFlag in config.dat.
10. Changed TurnOnAltAltECAtStartup to UseAltAzECFlag in config.dat.
11. Changed TurnOnPMCAtStartup to PointingModelFlag in config.dat.
12. Added AccumMs.A and AccumMs.Z to config.dat.  These are the scope's altazimuth coordinates in accumulated microsteps.   The telescope's starting position is taken from these, not from Current.Alt and Current.Az.  Calculate the current altazimuth coordinates in degrees by multiplying the accumulated microsteps * the microstep size (which is fullstep size divided by number of microsteps).

Version compiled 5/18/00:
1. Added two more commands to the scroll file: 1i and 2i, which are init #1 and init #2 using whatever coordinates are assigned at that moment to the input equatorial fields.  For example, after a long slew, some mechanical systems show slippage such that the object may or may not be centered; here's an example of how to center a messier object by first moving to the object's vicinity, then moving to the closest bright star, then after you center the star and init on it, you move back to the messier object
f1 messier.dat
f1 bstars.dat
f1 messier.dat

2. Added new config.dat variable called MsHsToggleIncrMsPerPWM.  While microstepping, the routine will switch into halfstep mode if necessary.  This is toggled when the number of microsteps per each PWM repetition exceeds MsHsToggleIncrMsPerPWM.  For instance, if the PMW repetitions per timer tick is 50, and if MsHsToggleIncrMsPerPWM is 5, and you ask the program to track at  more than 250 (50*5) microsteps per PWM, then the routine will toggle to halfstep movement.  Max speed is still the # of microsteps per fullstep divided by 2, equivalent to halfstepping.  In this example of 20 microsteps per fullstep, the max speed is 20/2 or 10 microsteps per PWM, or 500 (50*10) microsteps per PWM.  Overall speed in any case is still limited by MaxIncrMsPerPWM.

Version compiled 5/16/00:
1. Fixed it so that the scrolling can be initiated by the handpaddle even if init #2 has not yet been accomplished.

Version compiled 5/15/00:
1. Display of file name and object name restricted to 22 characters.
2. Added new scrollfile command: auto_scroll.  When this command is executed from the loaded scroll file, all scroll commands will be executed automatically in turn, that is, no leftkey or 'l' from the keyboard will be necessary to move onto the next scroll command.  Only a keypress while the scroll file is executing can stop the scroll file.
3. Added new config.dat variable that determines if the handpadle's drift updating at the end of a guiding session is on or off.   Drift is calculated based on accumulated guiding corrections over the session and then automatically adopted. 
4. Added new config.dat variables that set the starting drift in altitude, azimuth, right ascension, and declination.
5. Fixed bug that allowed the scroll display to have different colors .
6. Added an option to the absolute and offset altazimuth moves so that a number of 9999 means no movement in that axis, ie, off_altaz 1 9999 10 means to move up 1 degree in altitude, leave azimuth untouched, and make the move in altitude over 10 seconds using smooth microstepping. 

Version compiled 5/12/00:
1. Removed the requirement that both initializations had to be done before a scroll file can be started.
2. Removed the forcing on of tracking when a scroll file starts.  Now tracking control is up to the user: either start tracking before running the scroll file, or use the new trackon command inside the scroll file.
3. Added new commands to the scroll file: absolute altazimuth move, offset altazimuth move, altitude offset correction, trackon, and trackoff.  For details on how these new commands work, see the operating scroll files page.

Version compiled 5/10/00:
1. Fixed problem with analysis action in scroll file, and added display of scroll actions and scroll notes in real time as scroll file unfolds.

Version compiled 5/9/00:
1. Increased object name size to 23 characters from 20.
2. Turned on the handpaddle directional buttons while in scroll mode.  Both microstep and halfstep moves are enabled. 

Version compiled 5/8/00:
1. Resolved an issue between scope.exe and encoder interfaces when the GEM flip is 'on and declination goes negative.
2. Fixed bug where MaxIncrMsPerPWM could not be incremented in the menu option to adjust microstep parameters.
3. Added time/date stamp to input.dat file writes.  It comes at the end of the line after the object name/ comment entry.

 Version compiled 5/2/00:
1. Changed the microstepping routine so that the first microstep is executed immediately.  In combination with a PWM setting that is the same or below the actual PWMs, this ensures that all microsteps scheduled for each timer tick will be executed in that timer tick period.
2. Added error checking to the input_comment menu option.  Now you are forced to limit your comment to 19 characters, and the 'escape' key will abort the data entry.
3. Added MaxIncrMsPerPWM back into config.dat.  This sets the maximum microstepping speed.  This is the microstep increment per Pulse Width Modulation.  For instance, if you set it to 1, then your max microstepping speed will be the PWMRepsTick * 18 (ticks per second).  The max value that you can set it to will be the number of microsteps in a halfstep, because the fastest the microstepping routine can work at is one halfstep per PWM.  (At the number of microsteps divided by 4, the routine switches from microstepping per each PWM to halfstepping per each PWM).
4. Fixed bug in PWMZ[] code (the loading of the optional PWMZ[] values from config.dat).

Version compiled 4/28/00:
1. Added Gc command to LX200 command pool - returns the clock format, in scope.exe's case, always (24)# .
2. Added code to stop repeated slewing when LX200 slew direction command received.
3. Added variable to config.dat: MsPowerDownSec.  This is the number of seconds an idle motor will remain powered when centered on a winding and microstepping is occuring.  Default is 5 seconds.
4. Change sound in 'track 1 motor' option to only occur during the first microstep.  Before it would sound a scale based on the microstep #.
5. Added save of PEC orientation if PEC is active at program shutdown time.  PEC orientation (actually the PEC offsets to the synchronization point) is stored in PECOFF.DAT.  PEC orientation will be recovered if TurnOnPECAtStartup is on in config.dat.  If PEC is not active at program shutdown, TurnOnPECAtStartup will be turned off if the config.dat file is saved during progrm shutdown.
6. Added the ability during microstepping motion to switch to smooth halfstepping when the microstepping can no longer keep up.  This happens when the microstepping change between PWMs is greater than 1/4 fullstep, ie, 5 microsteps when using 20 microsteps per fullstep.  The other motor will continue to microstep if possible.  This extends the highest speed for tracking and other smooth motions from 2x to 4x over the previous highest microstepping speed, enabling many systems to track within 0.3 degree of the zenith.  Maximum speed is one halfstep per PWM, so if the actual PWM count per timer tick is 50, then max speed (knowing that there are 18.2 timer ticks per second) is 910 halfsteps per second.
7. Thanks to Chris Rowland for supplying the source code to add optional PWMs for the 'Z' motor. Enter these like the PWM[] values into the config.dat file, but use the identifier ' PWMZ[] '.  To tune PWMZ[] values, swap the 'Z' motor cable into the 'A' motor slot, put the PWMZ[] values into the PWM[] fields, and tune per usual. Then move the PWM values to PWMZ[] and swap back the cabling to the correct position.  Now tune the PWM[] values for the 'A' motor.
8. Added display of microstepping, updated every timer tick (18 times per second).  The display consists of: 
a. steps moved in altitude and azimuth, 
b. the winding (from 'a' to 'd') and microstep for both motors, 
c. then 3 digits together: the first two digits indicate if the altitude or azimuth axis respectively has gone to using halfsteps in the microstepping routine, and the last digit indicates the power down situation - 0 for none, 1 for altitude motor powered down, 2 for azimuth motor powered down, and 3 for both motors powered down.
9. Fixed recently introduced bug that caused slews to fail when tracking was on.  This first showed up with external LX200 commanded slews.
10. LX200 guiding commands used to only function after program via handpaddle was put into a guiding mode.  Now, upon first LX200 guide command, program is automatically put into guiding mode if necessary.  Selecting any other LX200 speed setting (center, find, or slew) will turn off guide mode.
11. Moved init encoders from the 'init' menu to the 'reset' menu section.  Originally 'init' menu section encompassed anything to do with initalizing anything.  It gradually came to mean  anything to do with only the 2-3 star initialization and analysis.
12. Added new menu option in the 'init' menu section to add an analysis data point via the return key.  The program functions nicely as an encoder interface and data file program, including the ability to analyze pointing errors via the encoders.  However, without the handpaddle, it was impossible to add an analysis point until now.
13. Added ability to add commentary to the input.dat file via a new menu item under 'file' called 'input_comment'.  The input coordinates displayed will be written along with the commentary.  The comment will be saved to the log file at program exit if desired. 
14. Added empty code so that when a motor is powered down, the other motor will maintain as much as possible the same PWM conditions as when both motors are powered.  Before, when a motor was powered down, the PWMs could speed up a tiny bit

Version compiled 4/17/00:
1. Added acceleration parameter to track one motor option (a good value to try is 0.1).
2. Added new test routine to halfstep using the microstepping PWM delay values (this also includes acceleration variable, try values like 0.001). 
3. Enhanced the pwm.txt file.
4. Removed the option to stop the pulse width modulations on the timer tick.  There is no more EndPWMAtTimerTick.
5. Also removed MotorPowerDownOnWinding.  The motor will power down after 1 second if centered on a winding.
6. Changed the PWM[] values such that they may now consist of two values, shown as follows in the config.dat file: 
PWM[0] 100 : 0
The first value indicates the winding 'a' current, and the second value gives the winding 'b' current.  This gives the user the ability to tune all microsteps independently of each other.  In the past, the last  microstep was the inversion of the first microstep.  This meant that tuning the first microstep also set the spacing for the last microstep.  Now they are tunable individually.
No change need be made to currently in use config.dat files.  The old values will continue to work as they always have, and as soon as the config.dat file is saved at program exit, the expanded values will be written.  It will be necessary to accomplish this step before being able to adjust both winding values for each microstep in the menu option control / MS parms, and in the menu option control / 1 motor track.

Version compiled 4/11/00:
1. Added status update options: the usual realtime status updates as always, jumbo display of Ra, Dec only, and no updating at all.  Find the new status update menu option under control / screen.
2. Added option of auto PEC synchronization on a simultaneous triggering of 3 parallel port pins: 10, 12, and 13.  This option should be entered in the config.dat file as 101213.   Be careful to not simulate the 10+12+13 by any of the following hand paddle key presses: UpKey + DownKey + CCWKey, or CCWKey + CWKey, or UpKey + RightKey, or DownKey + LeftKey 
3. Added menu option to make the next grand tour object closest to the current equatorial coordinates.  This allows a grand tour to resume from where it was aborted, or allows a grand tour over a large area of sky to start from the closest object.  Find the menu option under file / closest GT.

Version compiled 4/3/00:
1. Fixed startup display of Current altazimuth coordinates when PMC at startup is on.
2. Added GEM flip movement via motors.  This is experimental.  The move is broken into 4 parts: the move to the pole, the move across the meridian, the move away from the pole, and the reset of the coordinates.  The movement will work for both hemispheres regardless if the scope has been previously flipped.

Version compiled 3/29/00:
1. At startup, Input fields are set to Current position fields.  This is to facilitate the situation where the scope was shutdown with GEM flip turned on.
2. TurnOnPECAtStartup added to config.dat.
3. TurnOnALTAZECAtStartup added to config.dat.
4. TurnOnALTALTECAtStartup added to config.dat.
5. TurnOnPMCAtStartup added to config.dat.
6. Added AutoAzPECPin so that the auto synchronization of both azimuth and altitude can be set to parallel port pins 15, 16 or 17.

Version compiled 3/27/00:
1. Added option to put altitude auto-synchronization of PEC on pin 16 instead of pin 17 (new variable AutoAltPECPin in config.dat must be either 16 or 17: default is 17).
2. Changed display of auto synchronization of PEC on screen to ensure that both axis auto-synch could display simultaneously.
3. Fixed bug where the ALTAZEC and ALTALTEC error correction values would cause the scope to move a tiny distance every time a reset to equatorial or equivalent occurred.

Version compiled 3/22b/00:
1. Fixed a bug when text background is black.

Version compiled 3/21/00:
1. Added halfstep moves to scrolling function.
2. Fixed bug when text background is something other than black.
3. Changed query of Dave Ek's encoders from 'q' to 'y' per Dave's change.
4.Fixed problem with LX200 emulation receiving declination coordinates from programs that send a character with a value of 223 for the degree delimiter instead of '*' or ':'.
5. Added new menu option to automatically compute the optimum values of Z1, Z2, and Z3, to minimize overall RMS error from the analysis file. 

Version compiled 3/17/2000:
1. Changed FullstepsPerPECArray to type long from type int so that the number can be up to 2,147,483,648.  Before it could range up to 32,768.  The number of data points to define the PEC array shape remains at 200.
2. Data files can now have object names of unlimited length, the first 14 characters will be displayed on the screen.
3. Changed the field rotation hand paddle mode so that the motor can be moved even if the field rotation step size is 0.  This opens up the possibility to use the field rotation portion of the circuitry to operate a third stepper other than the field derotator such as a focus motor or a ??? motor.
4. Added optional save of observing log at program exit.  This is a copy of the input.dat file, and takes the form of YYMMDDa.log through YYMMDDz.log, where YY and MM and DD are the date fields, ie, 000313a.log.
5. Extensively rearranged the analysis and PMC routines, adding new graphical analysis routines for altitude vs azimuth (rocker base levelness) and altitude vs altitude (tube droop, altitude rim unevenness) error corrections.  Unlike previously, a new analysis file is to be used for each type of advanced error correction: Z1 - axis alignment and Z2 - azimuth offset and Z3 - altitude offset; ALTAZEC - altitude vs azimuth error correction; ALTALTEC - altitude vs altitude error correction; and PMC - pointing model correction.  A new menu option to empty the analysis file after correcting for a particular type of error has been added.  A new file, analysis.err is created, composed of errors calculated from the analysis.dat file.  If Z1 or Z2 is changed, then the ALTAZEC and ALTALTEC and PMC should be redone.  The ALTAZEC.DAT  file is composed of two columns: the first column being the azimuth number in 5 degree increments, and the second column being the altitude correction in arcseconds.  The ALTALTEC.DAT is similarly composed, except that the first column of altitude numbers in 5 degree increments ranges from -180 to +180.  The PMC.DAT file is now composed solely of altitude, azimuth, and their corrective values.  All equatorial coordinate references have been removed.  Displays of ALTAZEC and ALTALTEC have been added to the same line as the PEC and PMC displays.  All ALTAZEC, ALTALTEC, and PMC display values are in arcminutes.  PEC continues to be in tenths of an arcsecond.
6. Added new menu option to select a handpad mode.  Hotkey 'H' (capital H) selects this menu option.  The hotkey 'h' (lower case) continues to roll through the handpad modes.
7. Added hotkey 'B' to begin scroll file, and once running a scroll file, 'L' for leftkey on handpaddle, to continue to the next scroll action (Hotkey 'S' continues to load a scroll file).
8. Changing operation of scrolls.  When microstepping no longer possible, scope will now slew to position (before, scope would make a series of short slews to position).  Added initialization #1 and initialization #2 to the possible scroll actions, along with f1, f2, and f3, all which retrieve object coordinates from a data file.  In addition added analyze command.  For much more, see the operate scroll file document.

Version compiled 2/29/00:
1. Fixed bug in encoder startup when first initializing Dave Ek's encoders.

Version compiled 2/28/00:
1. Fixed bug in initializing Ek encoders.
2. Fixed bug where every other analysis data line was being skipped..
3. Added menu option to turn off automatic drift fields updating when in handpaddle guiding modes.  This is displayed as either DUon or DUoff in the handpaddle display area.

Version compiled 2/26/00:
1. Added config.dat option to reverse the field derotator motor.  Set ReverseFRMotor to 1 if you wish this.
2. Fixed problem with sounds during 1 motor tracking.
3. Slightly rearranged screen display.

Version compiled 2/24/00:
1. Fixed new bug in menu option control/hsparms.
2. Fixed situation in move/hs where entering no value by hitting the return key would cause an undertermined number of steps to be executed.

Version compiled 2/22/00:
1. Added ability to reverse motor direction: set ReverseAMotor and/or ReverseZMotor to 1 in config.dat.  This is equivalent to swapping windings 1 and 3.
2. Added support for David Ek's encoder interface box.

Version compiled 2/19/00:
1. Added ability while slewing to immediately ramp back without coming to a complete stop
2. Fixed two recent bugs in the one motor track option: sound not recycling on microstep #1, and microsteps appearing negative in certain situations.
3. Added new handpad mode: HandpadAux.  Here the 4 directional pushbuttons control 4 output lines, for instance, 2 external devices, each in 2 directions.  These might include a focuser, or a dome control, or a dome or camera shutter.  Parallel port pins 1 (up button) , 14 (down button) , 16 (CCW button), 17 (CW button) are used.  If using a field derotator (which uses pins 1 and 14), operating the other two parallel port pins 16, and 17 will not affect derotator operation.

Version compiled 2/15/00:
1. Increased number of permissible microsteps per fullstep to 40.  This allows mounts with 359:1 gear reducers to directly couple stepper motors to the drive worm and achieve microstep sizes of 1/2 arcsecond.
2. Improved the interface handling the adjusting of on-the-fly microstepping parameter changes to a pure cursor driven design.
3. Fixed some minor issues with the on-the-fly updating of the fullstep sizes.
4. Fixed a long standing rounding issue with inputted coordinates where negative declinations would lose an arcsecond.
5. Added a new file called, Input.dat, that records all positions that show in the inputted fields.  This file starts over every session.
6. Added menu option to locate closest object to current position from any of the data files.
7. Added an additional menu option to locate closest object to current position that is not the same as the previously inputted from any of the data files.
8. Added an additional menu option to locate closest object to current position that is not the same as any previously inputted coordinate (matches against input.dat file).

Version compiled 2/9/00:
1. Created new pmc.dat file to hold the pointing model corrections.
2. Added ability to load analysis positions into the pointing model corrections file.
3. Fixed bug that could cause repeated slews, culminating in consecutive slews error message.
4. Increased distance by 9x that triggers halfstep over microstep move.

Version compiled 2/4/00:
1. Enhanced the menu option to change the stepper motor full step sizes.
2. Added backlash values change on the fly as a menu option. 
3. Added new menu option and hotkey to save last inputed data file object (hotkey is 'o').
4. Changed behavior of the input routine so that a simple return does NOT change the value anymore (it used to set the number to zero).

Version compiled 2/2/00:
1. Fixed just introduced bug that occasionally prevented microstepping from occurring if MotorPowerDownOnWinding set to zero.
2. Fixed Pointing Model Corrections bug where the corrections were being applied in the wrong direction. 
3. Fixed display bug with the PEC where negative values caused the right most digit to remain displayed.
4. After PMC applied, scope will now slew to corrected coordinates instead of staying stationary.  
5. Fixed bug in returning RA values to a LX200 command port inquiry.
6. Added new LX200 commands: write date, write local time (24 hr format).

Version compiled 1/30b/00:
1. Added the writing out of TestModule options at the end of the config.dat file if user chooses to save the configuration upon program exit.
2. Fixed new bug where the '1' hotkey would no longer work correctly.
3. Changed the LX200 menu options to a single option in the control section that allows the link to be turned on and off, and the display of commands and buffer to be toggled off and on. 

Version compiled 1/30/00:
1. Fixed just introduced bug that occasionally caused computer lockup on first or second slew attempt.
2. Added menu option to jump into serial terminal mode to test LX200 protocol input and encoder interface input.
3. Fixed bug with latest version of Bisque's TheSky where a slew request caused my program to lockup.  TheSky, unlike all other LX200 command capable programs, can send coordinates with single digit '4' instead of '04'.
4. Fixed display bug in Track() option.
5. Added option to save the config.dat file upon program exiting.  No copy of config.dat is made, so this must be done ahead of time if desiring this option.
6. Added pointing model correction accessible through mount analysis graph option..
7. Changed algorithm when motor powered down on winding is set to true in config.dat. Now it powers down after 5 sec of inactivity.  This gives time for the motor to settle on the winding.

Version compiled 1/24/00:
1. Added new variable to the config.dat file called EndPWMAtTimerTick.  This controls if the timer tick which occurs 18.2 times per second should immediately end the current pulse width modulation, or if the PWM should be allowed to finish.
2. Made the new microstepping variables, MaxIncrMsPerPWM and EndPWMAtTimerTick, visible in the Track option and in the adjust microstepping control menu option.

Version compiled 1/19/00:
1. Added new control menu option to reverse the hand paddle's up and down keys. This will be useful for those with GEM mounts after a meridian flip.

Version compiled 1/18/00:
1. Fixed bug in field rotation code where the step size was not initialized until the menu option to change the step size was selected.
2. Added new variable in config.dat to control the maximum microstepping speed: MaxIncrMsPerPWM . This controls the number of microsteps per pulse width modulation. Naively a single microstep per PWM would be considered fastest speed, and this variable would be set to 1. But it is possible to skip over microsteps in order to go faster, hence this variable would be 2 or greater, up to the maximum of microsteps/2, which is the equivalent of halfstepping. This variable can also be set to less than 1.
3. Added new variable in config.dat: MotorPowerDownOnWinding . When set to 1, it powers off steppers when they are centered on a winding. For instance, this allows the declination motor to power off when tracking when aligned equatorially.
4. Changed how the end of each bios clock tick cycle terminates the pulse width modulation. This cycle occurs 18.2 times per second. Now the PWMs are immediately terminated and the motors set to power off condition.
5. Changed display in menu option move halfsteps from 3 decimal places to 5. This should give more accurate calculations of fullstep size in arcseconds.
6. Tweaked the altitude offset routine for faster speed, and fixed bug where an initial calculated offset of 0 caused the program to abort.
7. Fixed typo in menu item descriptions - Z1 and Z3 were confused.
8. Addressed GEM meridian flip bugs. New algorithm adopted where the coordinates are flipped in the lowest level get altitude and get equatorial coordinates functions, hidden from the user. Now, Current.Alt reflects the true altitude from the motor's perspective, that is, an altitude reading of 100 degrees translates to a declination of 80 when the flip is on. A new status display shows if the GEM flip is on. The handpad up/down buttons are not reversed while the GEM flip is on. This is for autoguiders and cameras that are not repositioned after the flip.

Version compiled 1/10/00:
1. Changed altitude offset algorithm back to iterative solution since altitude formula can crash if azimuths of the two initialization points are too close.
2. Altitude offset calculation now only done when menu item selected. Calculation based on 2 star init only now.
3. Changed Z1 and Z2 derivation to use 3 star init only, and not to go through init history file, calculating for each init. The latter proved not useful because of the scatter of values.
4. Reorganized init menu subsection.
5. Wrote new pointing model optimization instructions and explanations.
6. Pointing error graphing now done on a single graph instead of 5 separate ones.
7. Added ability to change field rotation motor stepsize during program operation.
8. Added displays of latitude error (derived latitude - latitude in the config.dat file), longitude error, and hour angle offset in degrees.
9. Fixed abort caused by empty analysis file.
10. Added display of current Z1, Z2, Z3 values in change Z1Z2Z3 menu option.
11. Added display of RMS error to mount pointing error graphing menu option.
12. Analysis file no longer emptied at program startup. It is up to the user to do this if a new analysis is wished.