Make sure that cycle_start state is set before simulating steps.
Simplify setting of STATE_CYCLE and ISR interval.

Set sys.state to STATE_CYCLE directly instead of calling back to
st_wakeup().

Convert get_step_time() to a constant and rename it to ISR_INTERVAL.
Merge pull request #337 from michmerr/edge

Make sure that cycle_start state is set before simulating steps.
Major g-code parser overhaul. 100%* compliant. Other related updates.

- Completely overhauled the g-code parser. It’s now 100%* compliant. (*
may have some bugs). Being compliant, here are some of the major
differences.

- SMALLER and JUST AS FAST! A number of optimizations were found that
sped things up and allowed for the more thorough error-checking to be
installed without a speed hit. Trimmed a lot of ‘fat’ in the parser and
still was able to make it significantly smaller than it was.

- No default feed rate setting! Removed completely! This doesn’t exist
in the g-code standard. So, it now errors out whenever it’s undefined
for motions that require it (G1/2/3/38.2).

- Any g-code parser error expunges the ENTIRE block. This means all
information is lost and not passed on to the running state. Before some
of the states would remain, which could have led to some problems.

- If the g-code block passes all of the error-checks, the g-code state
is updated and all motions are executed according to the order of
execution.

- Changes in spindle speed, when already running, will update the
output pin accordingly. This fixes a bug, where it wouldn’t update the
speed.

- Update g-code parser error reporting. Errors now return detailed
information of what exact went wrong. The most common errors return a
short text description. For less common errors, the parser reports
‘Invalid gcode ID:20’, where 20 is a error ID. A list of error code IDs
and their descriptions will be documented for user reference elsewhere
to save flash space.

- Other notable changes:

- Added a print integer routine for uint8 variables. This saved
significant flash space by switching from a heavier universal print
integer routine.

- Saved some flash space with our own short hypotenuse calculation

- Some arc computation flash and memory optimizations.
Fixed spindle/coolant/dwell state check.
Various minor g-code parser fixes.

- Updated the mantissa calculation that checks for non-integer values
and GXX.X commands that aren’t supported. There was a potential uint8
overflow issue.

- Fixed g-code parser bug related to not using the correct modal
struct. G10 P0 not selecting the current coordinate system when a
G55-59 is issued in the same line.

- Fixed g-code parser bug related to not using the correct modal
struct. Target position locations were not computed correctly when
G90/91 distance modes were changed in the same line. It was using the
previous state, rather than the current block.
Arc error-checking update.

- Updated offset-mode arc error-checking to EMC2’s version: The old
NIST definition required the radii to the current location and target
location to differ no more than 0.002mm. This proved to be problematic
and probably why LinuxCNC(EMC2) updated it to be 0.005mm AND 0.1%
radius OR 0.5mm.
Fixed atomic access to flags in sys.execute.

This seems to fix the bug that caused Grbl to hang during some operations,
especially jogging.
Minor bug fixes and updates. Line number tracking.

- Line number tracking was getting truncated at 255, since it was using
wrong variable type. Fixed it with a trunc().

- Increased the max number line allowed by Grbl to 9999999 from the
g-code standard 99999. The latter seems to be an arbitrary number, so
we are allowing larger ones for at least one known use case scenario.

- Created a new test directory to contain some testing g-code to proof
the firmware. Only got started with one test case so far. More will be
inserted as needed.

- Some other commenting updates to clarify certain aspects of the code.
G-code parser G0/G1 bug fix.

- Although stated as invalid in the NIST g-code standard, most g-code
parsers, including linuxcnc, allow G0 and G1 to be commanded without
axis words present. For example, something like ‘G1 F100.0’ to preset
the motion mode and feed rate without a motion commanded. Older CNC
controllers actually required this for feed rate settings. This update
should now allow this type of behavior.
Total rework of simulator for dev branch.  Create separate thread for interrupt processes.  Tick-accurate simulation of timers.  Non-blocking character input for running in realtime mode. Decouple hardware sim from grbl code as much as possible. Expanded command line options. Provisions for cross-platform solution.
reduce diffs with dev branch
Realtime rate reporting. Updated decimal places.

- Added a new optional compile-time feature for ‘realtime’ (within
50ms) feed rate reporting. When querying for a status report, a new
data value will state the current operating rate. It’s only beta at the
moment and has some kinks to work out.

- Updated the code for printing floating point values to N decimal
places. Generalized the main floating point print code to accept a new
decimal places value and created a set of handler functions to print
certain floating point value types used in Grbl, like position, rates,
coordinate offsets, etc. All of these have different decimal
requirements and change when printed in mm or inches mode.

- Number of decimal places for the different value types can be
re-defined in config.h, but there shouldn’t be a need for this, as
these are physically limited.

- Removed the decimal places settings, as this was now obsoleted by the
new decimal places code.

- The new decimal places code also saves almost 300kB in flash space,
as it’s more efficient.
minor tweaks for mingw.
Don't need kbhit.h
Update readme.md
formatting
New G43.1/G49 gcodes. Not working yet!!

- Pushed this uncompleted code to merge a conflicting pull request.

- New G43.1 and G49 g-codes to be installed. The beginnings of it are
in place. These g-codes are intended to be used in conjunction with
probing and allow GUIs to set tool length offsets without Grbl needing
to store a tool table.

- G43.1 is defined as a dynamic tool length offset that is not stored
in memory. Rather, when commanded, these are applied to the work
coordinates until a reset or disabled by G49. This works much like G92.
Merge grbl-sim updates for v0.9.

- Removed some conflicting code in the main Grbl firmware source.

- Temporary patch for coolant and spindle control with streaming
applied.
Merge branch 'ashelly-sim-update' into dev