;-------------------------------------------------------------------------------
; #alert "alert text goes here - if uncommented, it will be displayed in a pop-up dialog whenver a project using this INI is opened"
; INI date: May 12, 2013 11:52AM PDT

#  set AUTO_TRIG
#  unset MS2_SEQ
[MegaTune]
   MTversion      = 2.25 ; MegaTune itself; needs to match exec version.

#if CAN_COMMANDS
   versionInfo    = "r\x00\x0e\x00\x00\x00\x20"  ; Title bar
   queryCommand   = "r\x00\x0f\x00\x00\x00\x14"  ; Verify against signature.
#else
   versionInfo    = "S"  ; Put this in the title bar.
   queryCommand   = "Q"  ; Verify against signature.
#endif
   signature      = "MSII Rev 3.83000   " ; MS-II sends a null at 20th byte.
                   ; 123456789.123456789.
tsWriteBlocks = on
messageEnvelopeFormat = msEnvelope_1.0
sendTablesWithoutEnvelope = true ; 

;-------------------------------------------------------------------------------
;
; PREAMBLE
;
; There are several main sections (with brackets around the [section] heading) in this INI file:
;
; - Constants - this is divided into two pages (for recent MS-II code versions, 
;               at least). Page 1 is based on the source code inpram. structure
;               Page 2 is based on the source code in2ram. structure. All of the 
;               values are inputs sent from MegaTune to the MegaSquirt-II
; - Menu (& User Defined) - these define most of the mennus in MegaTune (except 
;                           those that are 'built-in' like the accel wizrd, etc.)
; - Curve Editor and Table Editor
; - Gauge Configuration
; - Front Page & RuntTime & Tuning Config
; - Burst Mode Config
; - Output Channels - this mirrors the outpc. structure from the source code. All 
;                     of the values are sent from MegaSquirt-II to MegaTune on the PC.
; - Datalog - select output channels to log on the PC hard drive
;
; Note: 
;       - To add an input variable to MegaTune, you need to add it to the inpram (or in2ram) 
;         structure in the MegaSquirt source code noting the correct offset (and recompile, 
;         of course), to the Constants section, and to one of the menus.
;       - To add an output variable to MegaTune (for monitoring, logging, or switching purposes),
;         you need to add it to the outpc structure in the source code, to the OuptChannels, and 
;         to the datalog section (and/or the gauge configurations, if you wish to see it directly 
;         in MegaTune). 
;
; In general, the respective notation for variables from the source code to the INI are:
;
;                         signed          unsigned      bytes    bits
;                         ------          --------      -----    ----
;             - char =      S08              U08          1       8
;             - int  =      S16              U16          2       16
;             - long =      S32              U32          4       32
;
; Where the maximum range is:
;
;                         signed           unsigned
;                         ------           --------
;             - char =   -128 to 127       0 to 255
;             - int  =   -32768 to 32767   0 to 65535
;             - long =   -2147483648       0 to 4294967295        
;                         to 2147483647
;
;----------------------------------------------------------------------------
; Temperature Limits and Settings Reference
;----------------------------------------------------------------------------
;
; Below is a listing of all of the temperature ranges used throughout the INI for the MegaSquirt II.
;
; CELSIUS (Expanded/Normal):
;     Low limit: -40C/-40C
;     High limit: 300C/150C
;     Low danger: 65C/10C
;     Low warning: 93C/65C
;     High warning: 162C/93C
;     High danger: 176C/104C
;
; FAHRENHEIT (Expanded/Normal):
;     Low Limit: -40F/-40F
;     High limit: 600F/300F
;     Low danger: 150F/50F
;     Low warning: 200F/150F
;     High warning: 325F/200F
;     High danger: 350F/220F
;----------------------------------------------------------------------------


[ReferenceTables]

    tableWriteCommand 	= "t" ; 
    
    referenceTable = mafTableBurner, "Calibrate MAF Table..."
    	;topicHelp = "http://www.megamanual.com/mt29.htm#om"
        tableIdentifier = 003, "MAF Table"
        adcCount 	= 1024 	; length of the table
        bytesPerAdc 	= 2 	; using words
        scale		= 1 ; scale before sending to controller
        ;tableGenerator	= Generator Type, 		Label, xUnits, yUnits,  xLow, xHi,  yLow, yHi ; lows and Hi's are just default values, they will be user editable
    	;tableGenerator	= linearGenerator, "Custom Linear WB", "Volts","AFR",    1,   4,   9.7,  18.7
    	solutionsLabel	= "MAF Sensor"
    	solution	= "Ford Lightning MAF", 	{ table(adcValue, "maffactor_1L3F_Lightning.inc") }
		solution	= "Infiniti Q45 MAF", 		{ table(adcValue, "maffactor_Q45.inc") }
		solution	= "GM LT1/LS1/LS2 MAF", 	{ table(adcValue, "maffactor_lsx.inc") }

    referenceTable = canOutmsgBurner, "Configure CAN Outmsg"
    	;topicHelp = "http://www.megamanual.com/mt29.htm#outmsg"
        tableIdentifier = 010, "outmsg Table"       ; id in octal, 010 = table 8
        adcCount 	= 1024 	; length of the table
        bytesPerAdc 	= 1 	; using bytes
        scale		= 1 ; scale before sending to controller
        ;tableGenerator	= Generator Type, 		Label, xUnits, yUnits,  xLow, xHi,  yLow, yHi ; lows and Hi's are just default values, they will be user editable
    	;tableGenerator	= linearGenerator, "Custom Linear WB", "Volts","AFR",    1,   4,   9.7,  18.7
    	solutionsLabel	= "CAN Outmsg"
    	solution	= "CAN Outmsg", 	{ table(adcValue, "canOutmsg.inc") }


[Constants]

   ;----------------------------------------------------------------------------
   ; Constants Definition
   ; --------------------
   ;
   ; Scalar Values
   ; -------------
   ; The scaling and translation values are used as follows:
   ;    msValue   = userValue / scale - translate
   ;    userValue = (msValue + translate) * scale
   ;
   ; I've got no good way to handle a few of these things yet.
   ;
   ; Temperatures are fine, check out the Fielding IAC example (fastIdleTemp).
   ;
   ; The TPS stuff is a problem, because we have to modify the INI file for
   ; each TPS installation and again whenever we move the TPS...
   ;
   ; Array Values
   ; ------------
   ; Arrays are specified just like scalars, except that they have a "shape"
   ; entry in the fourth parameter.  The shape allows you to define lists or
   ; tables, for example [8] defines a list with eight values and [2x4] defines
   ; a table with eight values (two rows and four columns).  Tables may be
   ; stored in either "X-" or "Y-order."  X-order means that memory is laid
   ; out as follows:
   ;
   ;     [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
   ;
   ; Y-order would be
   ;
   ;     [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
   ;
   ; To use the TableEditor, you must define two lists and a table, and
   ; the lengths of the lists must correspond to the shape of the table.
   ;
   ; Bit Fields
   ; ----------
   ; Bits are numbered 0-7, the rightmost being bit zero.  The basic
   ; data word that stores bit fields must be unsigned.
   ;
   ; You need NOT supply the correct number of labels matching the
   ; number of bits you've specified (one bit requires 2 values, two
   ; bits requires 4 values and so on).  If you neglect to supply enough
   ; labels, they will be synthesized using the sequence "1", "2" and so
   ; on based upon their position in the sequence (the cltType and matType
   ; will end up with identical lists).
   ;
   ;----------------------------------------------------------------------------

   pageActivationDelay =  50 ; Milliseconds delay after burn command.
   blockReadTimeout    = 200 ; Milliseconds total timeout for reading page.

   endianness          = big
   nPages              = 2
   pageSize            = 996,            954
   pageIdentifier      = "\x00\x04",     "\x00\x05"
   burnCommand         = "b%2i",         "b%2i"
   pageReadCommand     = "r%2i%2o%2c",   "r%2i%2o%2c"
   pageValueWrite      = "w%2i%2o%2c%v", "w%2i%2o%2c%v"
   pageChunkWrite      = "w%2i%2o%2c%v", "w%2i%2o%2c%v"
   crc32CheckCommand   = "k%2i%2o%2c",   "k%2i%2o%2c"

   page = 1
   ;  name            = class,  type, offset,      shape,  units,       scale, translate,    lo,      hi, digits
      nCylinders      = bits  ,  U08,      0,      [0:3], "INVALID"                                              ; *
      no_skip_pulses  = scalar,  U08,      1,             "",         1.00000,   0.00000,  1.00,  255.00,      0 ; * (  1 byte )
      ICIgnCapture    = bits  ,  U08,      2,      [0:0], "Falling Edge", "Rising Edge"                          ; *
#if MS2_SEQ
      ICCrankTrigger  = bits  ,  U08,      2,      [1:2], "Calculated", "INVALID", "INVALID",    "INVALID" ; *
#else
      ICCrankTrigger  = bits  ,  U08,      2,      [1:2], "Calculated", "Trigger Return", "Trigger Rise",    "INVALID" ; *
#endif

#if MS2_SEQ
      ICIgnOption     = bits  ,  U08,      2,      [4:5], "Standard Coil Charge", "INVALID", "INVALID", "INVALID" ; *
#else
      ICIgnOption     = bits  ,  U08,      2,      [4:5], "Standard Coil Charge", "EDIS", "EDIS Multispark", "INVALID" ; *
#endif      
      spkout_hi_lo    = bits  ,  U08,      3,      [0:0], "Going Low (Normal)", "Going High (Inverted)"          ; *
      max_coil_dur    = scalar,  U08,      4,             "msec",     0.10000,   0.00000,  1.00,    8.00,      1 ; * (  1 byte )
      max_spk_dur     = scalar,  U08,      5,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
      dwellAcc        = scalar,  U08,      6,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
      dwellVolts      = array ,  S08,      7,    [    5], "V",        0.10000,   0.00000,-12.80,   12.70,      1 ; * (  5 bytes)
      dwellDuration   = array ,  S08,     12,    [    5], "msec",     0.10000,   0.00000,-12.80,   12.70,      1 ; * (  5 bytes)
      RevLimOption    = bits  ,  U08,     17,      [0:1], "None", "Spark Retard", "Fuel Cut", "Soft Fuel Cut"    ; * (  1 byte )
      RevLimDual      = bits  ,  U08,     17,      [4:4], "None", "Dual(Switched)Rpms"                           ; * (  1 byte )
      RevLimMaxRtd    = scalar,  U08,     18,             "deg",      0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte ) 
      PredOpt         = bits  ,  U08,     19,      [0:1], "Last Interval", "Alpha-Beta-Gamma Filter", "INVALID", "INVALID" ; *
      crankingRPM     = scalar,  S16,     20,             "RPM",      1.00000,   0.00000,  0.00,  3000.0,      0 ; * (  2 bytes)
      cold_adv_table  = array ,  S16,     22,    [   10], "deg",      0.10000,   0.00000,-10.00,   10.00,      1 ; * ( 20 bytes)
      triggerOffset   = scalar,  S16,     42,             "deg",      0.10000,   0.00000,-359.0,  359.00,      2 ; * (  2 bytes)
      RevLimRpm1      = scalar,  S16,     44,             "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
      RevLimRpm2      = scalar,  S16,     46,             "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
#if LAMBDA
      afrTable1       = array ,  U08,     48,    [12x12], "Lambda",  0.006803,   0.00000,  0.00,    2.00,      3 ; * (144 bytes)
      afrTable2       = array ,  U08,    192,    [12x12], "Lambda",  0.006803,   0.00000,  0.00,    2.00,      3 ; * (144 bytes)
#else
      afrTable1       = array ,  U08,     48,    [12x12], "AFR",      0.10000,   0.00000,  9.00,   20.00,      1
      afrTable2       = array ,  U08,    192,    [12x12], "AFR",      0.10000,   0.00000,  9.00,   20.00,      1
#endif
      wueBins         = array ,  U08,    336,    [   10], "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * ( 10 bytes)
      taeBins         = array ,  U08,    346,    [    4], "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  4 bytes)
      maeBins         = array ,  U08,    350,    [    4], "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  4 bytes)
      iacstepTable    = array ,  S16,    354,    [   10], "steps",    1.00000,   0.00000,  0.00, 4000.00,      0 ; * ( 20 bytes)
      ipwmTable       = array ,  S16,    354,    [   10], "%",        1.00000,   0.00000,  0.00,  100.00,      0
      frpm_table      = array ,  U16,    374,    [   12], "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * ( 24 bytes)
      srpm_table      = array ,  U16,    398,    [   12], "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * ( 24 bytes)
      fmap_table      = array ,  S16,    422,    [   12], "kPa",      0.10000,   0.00000,  0.00,  400.00,      1 ; * ( 24 bytes)
      smap_table      = array ,  S16,    446,    [   12], "kPa",      0.10000,   0.00000,  0.00,  400.00,      1 ; * ( 24 bytes)
#if CELSIUS
  #if EXPANDED_CLT_TEMP
      tempTable       = array ,  S16,    470,    [   10], "°C",       0.05555,  -320.000,-40.00,  300.00,      1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
  #else  
      tempTable       = array ,  S16,    470,    [   10], "°C",       0.05555,  -320.000,-40.00,  100.00,      1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
  #endif  
#else
  #if EXPANDED_CLT_TEMP
      tempTable       = array ,  S16,    470,    [   10], "°F",       0.10000,   0.00000,-40.00,  600.00,      1
  #else
      tempTable       = array ,  S16,    470,    [   10], "°F",       0.10000,   0.00000,-40.00,  200.00,      1
  #endif
#endif
      taeRates        = array ,  S16,    490,    [    4], "%/sec",    1.00000,   0.00000,  0.00, 32767.0,      0 ; * (  8 bytes) tpsDot bins used for AE: x for TAE interpolation
      maeRates        = array ,  S16,    498,    [    4], "kPa/sec",  1.00000,   0.00000,  0.00, 32767.0,      0 ; * (  8 bytes) mapDot bins used for AE: x for MAE
      map0            = scalar,  S16,    506,             "kPa",      0.10000,   0.00000, -100.0, 3276.7,      1 ; * (  2 bytes)
      mapmax          = scalar,  S16,    508,             "kPa",      0.10000,   0.00000, -100.0, 3276.7,      1 ; * (  2 bytes)
#if CELSIUS
      clt0            = scalar,  S16,    510,             "°C",       0.05555,  -320.000, -100.0,  500.0,      1 ; * (  2 bytes)
      cltmult         = scalar,  S16,    512,             "%",        1.00000,   0.00000, -200.0,  200.0,      0 ; * (  2 bytes)
      mat0            = scalar,  S16,    514,             "°C",       0.05555,  -320.000, -100.0,  500.0,      1 ; * (  2 bytes)
#else
      clt0            = scalar,  S16,    510,             "°F",       0.10000,   0.00000, -100.0,  500.0,      1
      cltmult         = scalar,  S16,    512,             "%",        1.00000,   0.00000, -200.0,  200.0,      0
      mat0            = scalar,  S16,    514,             "°F",       0.10000,   0.00000, -100.0,  500.0,      1
#endif
      matmult         = scalar,  S16,    516,             "%",        1.00000,   0.00000, -200.0,  200.0,      0 ; * (  2 bytes)
      tpsMin          = scalar,  S16,    518,             "ADC",      1.00000,   0.00000,    0.0, 1023.0,      0 ; * (  2 bytes)
      tpsMax          = scalar,  S16,    520,             "ADC",      1.00000,   0.00000,    0.0, 1023.0,      0 ; * (  2 bytes)
      batt0           = scalar,  S16,    522,             "V",        0.10000,   0.00000,    0.0, 3276.7,      1 ;   (  2 bytes)
      battmax         = scalar,  S16,    524,             "V",        0.10000,   0.00000,-3276.8, 3276.7,      1 ;   (  2 bytes)
      ego0            = scalar,  S16,    526,             "afr",      0.10000,   0.00000,-3276.8, 3276.7,      1 ;   (  2 bytes)
      egomult         = scalar,  S16,    528,             "%",        1.00000,   0.00000, -200.0,  200.0,      0 ;   (  2 bytes)
      baro0           = scalar,  S16,    530,             "kPa",      0.10000,   0.00000,-3276.8, 3276.7,      1 ; * (  2 bytes)
      baromax         = scalar,  S16,    532,             "kPa",      0.10000,   0.00000,-3276.8, 3276.7,      1 ; * (  2 bytes)
      bcor0           = scalar,  S16,    534,             "%",        1.00000,   0.00000,-3276.8, 3276.7,      1 ; * (  2 bytes)
      bcormult        = scalar,  S16,    536,             "%",        1.00000,   0.00000, -200.0,  200.0,      0 ; * (  2 bytes)
      knock0          = scalar,  S16,    538,             "V",        0.01000,   0.00000,    0.0,    5.0,      1 ; * (  2 bytes)
      knockmax        = scalar,  S16,    540,             "V",        0.01000,   0.00000,    0.0,    5.0,      1 ; * (  2 bytes)
#if MS2_SEQ
      CPWOption       = bits,    U08,    542,      [0:1], "no cranking pulses", "sequential crank pulses", "simultaneous crank pulses", "INVALID"  ;  * (  1 byte)
#else
      CPWOption       = bits,    U08,    542,      [0:1], "no cranking pulses", "simultaneous crank pulses", "INVALID", "INVALID"  ;   * (  1 byte)
#endif
      Cam_Tooth       = scalar,  U08,    543,             "teeth",    1.00000,   0.00000,  0.00,  127.00,      0 ; * (  1 bytes)
      crankTolerance  = scalar,  U08,    544,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      asTolerance     = scalar,  U08,    545,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      pulseTolerance  = scalar,  U08,    546,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      IdleCtl         = bits  ,  U08,    547,      [0:2], "None", "Solenoid", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "INVALID", "INVALID" ; *
      IACtstep        = scalar,  U08,    548,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
      IACaccstep      = scalar,  U08,    549,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
      IACminstep      = scalar,  U08,    550,          "steps",       1.00000,   0.00000,  1.00,  255.00,      0 ; * (  1 byte )
      IACpwm_step     = scalar,  U08,    551,             "Hz",      80.00000,   0.00000, 80.00,  800.00,      0 ; * (  1 byte )
      IACStart        = scalar,  S16,    552,          "steps",       1.00000,   0.00000,  0.00, 4000.00,      0 ; * (  1 byte )
#if CELSIUS
      IdleHyst        = scalar,  S16,    554,             "°C",       0.05555,   0.00000,   0.0,   30.0,       1 ; * (  2 bytes)
#else
      IdleHyst        = scalar,  S16,    554,             "°F",       0.10000,   0.00000,   0.0,   50.0,       1
#endif
      IACcrankpos     = scalar,  S16,    556,             "steps",    1.00000,   0.00000,  0.00, 4000.00,      0 ; * (  2 bytes)
      IACcrankxt      = scalar,  S16,    558,             "sec",      1.00000,   0.00000,  0.00,32767.00,      0 ; * (  2 bytes)
#if CELSIUS
  #if EXPANDED_CLT_TEMP
      IACcoldtmp      = scalar,  S16,    560,             "°C",       0.05555,  -320.000, -40.0,  300.0,       1 ; * (  2 bytes)
  #else
      IACcoldtmp      = scalar,  S16,    560,             "°C",       0.05555,  -320.000, -40.0,  150.0,       1 ; * (  2 bytes)
  #endif
#else
  #if EXPANDED_CLT_TEMP
      IACcoldtmp      = scalar,  S16,    560,             "°F",       0.10000,   0.00000,-40.00,  500.00,      1
  #else
      IACcoldtmp      = scalar,  S16,    560,             "°F",       0.10000,   0.00000,-40.00,  300.00,      1
  #endif
#endif
      IACcoldpos      = scalar,  S16,    562,             "steps",    1.00000,   0.00000,  0.00, 4000.00,      0 ; * (  2 bytes)
      IACcoldxt       = scalar,  S16,    564,             "sec",      1.00000,   0.00000,  0.00,32767.00,      0 ; * (  2 bytes)
      primePulseCold  = scalar,  S16,    566,             "msec",     0.10000,   0.00000,  0.00,  200.00,      1 ; * (  2 bytes)
      primePulseHot   = scalar,  S16,    568,             "msec",     0.10000,   0.00000,  0.00,  200.00,      1 ; * (  2 bytes)
      crankCold       = scalar,  S16,    570,             "msec",     0.10000,   0.00000,  0.00,   65.00,      1 ; * (  1 byte )
      crankHot        = scalar,  S16,    572,             "msec",     0.10000,   0.00000,  0.00,   65.00,      1 ; * (  1 byte )
      asePctCold      = scalar,  S16,    574,             "%",        1.00000,   0.00000,  0.00,  400.00,      0 ; * (  2 bytes)
      asePctHot       = scalar,  S16,    576,             "%",        1.00000,   0.00000,  0.00,  400.00,      0 ; * (  2 bytes)
      aseCountCold    = scalar,  S16,    578,             "cycles",   1.00000,   0.00000,  0.00,32767.00,      0 ; * (  2 bytes)
      aseCountHot     = scalar,  S16,    580,             "cycles",   1.00000,   0.00000,  0.00,32767.00,      0 ; * (  2 bytes)
      taeColdA        = scalar,  U08,    582,             "msec",     0.10000,   0.00000,  0.00,  25.500,      1 ; * (  1 byte )
      taeColdM        = scalar,  U08,    583,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      tpsThresh       = scalar,  U08,    584,             "%/sec",    1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      mapThresh       = scalar,  U08,    585,             "kPa/sec",  1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte ) threshold for MAE
      taeTime         = scalar,  U08,    586,             "sec",      0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
      tdePct          = scalar,  U08,    587,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      floodClear      = scalar,  S16,    588,             "%",        0.10000,   0.00000,  0.00,  100.00,      1 ; * (  2 bytes)
      TPSOXLimit      = scalar,  S16,    590,             "%",        0.10000,   0.00000,  0.00,  100.00,      1 ; * (  2 bytes)
      tpsProportion   = scalar,  U08,    592,             "%",        1.00000,   0.00000,  0.00,  100.00,      0 ; * (  1 byte )
      baroCorr        = bits  ,  U08,    593,      [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID"        ; *
      egoType         = bits  ,  U08,    594,      [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Wide Band", "Dual Wide Band", "Dual NB on AD7", "Dual WB on AD7", "INVALID" ; *
      egoCount        = scalar,  U08,    595,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      egoDelta        = scalar,  U08,    596,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      egoLimit        = scalar,  U08,    597,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      nestINTS        = bits  ,  U08,    598,      [0:0], "Low Speed Comms", "High Speed Comms"  ; *

      tempUnits       = bits  ,  U08,    599,      [0:0], "Coolant/IAT Tables in °F", "Coolant/IAT Tables in °C"  ; * (  1 byte )
      MAFOption       = bits  ,  U08,    600,      [0:1], "No MAF",  "MAF Only", "MAF/MAP blend", "MAF, MAP mfld/cyl model",      ; * 
      MAFpin          = bits  ,  U08,    600,      [4:5], "MAF on MAP pin", "MAF on Baro Pin", "MAF on Knock Pin", "INVALID" ; *
      MAFtype         = bits  ,  U08,    600,      [7:7], "Voltage MAF", "Frequency MAF"  ; *
#if MS2_SEQ 
      DualSpkOptn     = bits  ,  U08,    601,      [0:3], "INVALID", "INVALID", "Falling Cam Sync with Crank Wheel", "Rising Cam Sync with Crank Wheel", "Single Crank Wheel Input", "Single Cam Wheel Input", "INVALID", "M-0 Wheel w/ Falling Crank Sync", "M-0 Wheel w/ Rising Crank Sync", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; * (1 byte)
#else
      DualSpkOptn     = bits  ,  U08,    601,      [0:3], "No Dual/Multi Spark", "Dual Tach Inputs", "Falling Cam Sync with Tach or Wheel", "Rising Cam Sync with Tach or Wheel", "Single Crank Wheel Input", "Single Cam Wheel Input", "Dual Inputs, Timing from 1 cam tooth", "M-0 Wheel w/ Falling Crank Sync", "M-0 Wheel w/ Rising Crank Sync", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; * (1 byte)
#endif
#if CELSIUS
  #if EXPANDED_CLT_TEMP
      fastIdleT       = scalar,  S16,    602,             "°C",       0.05555,  -320.000,-40.00,  300.00,      1 ; * (  2 bytes)
      egoTemp         = scalar,  S16,    604,             "°C",       0.05555,  -320.000,-40.00,  300.00,      1 ; * (  2 bytes)
  #else
      fastIdleT       = scalar,  S16,    602,             "°C",       0.05555,  -320.000,-40.00,  150.00,      1 ; * (  2 bytes)
      egoTemp         = scalar,  S16,    604,             "°C",       0.05555,  -320.000,-40.00,  150.00,      1 ; * (  2 bytes)
  #endif
#else
  #if EXPANDED_CLT_TEMP
      fastIdleT       = scalar,  S16,    602,             "°F",       0.10000,   0.00000,-40.00,  600.00,      1
      egoTemp         = scalar,  S16,    604,             "°F",       0.10000,   0.00000,-40.00,  600.00,      1
  #else
      fastIdleT       = scalar,  S16,    602,             "°F",       0.10000,   0.00000,-40.00,  300.00,      1
      egoTemp         = scalar,  S16,    604,             "°F",       0.10000,   0.00000,-40.00,  300.00,      1
  #endif
#endif
      egoRPM          = scalar,  S16,    606,             "RPM",      1.00000,   0.00000,  0.00, 15000.0,      0 ; * (  2 bytes)
      reqFuel         = scalar,  U16,    608,             "msec",     0.00100,   0.00000,  0.00,  65.536,      2 ; * (  2 bytes)
      divider         = scalar,  U08,    610,             "",         1.00000,   0.00000,  0.00,     255,      0 ; * (  1 byte )
#if MS2_SEQ
      alternate       = bits,    U08,    611,      [0:0], "Simultaneous", "INVALID"                              ; * (  1 byte )
#else
      alternate       = bits,    U08,    611,      [0:0], "Simultaneous", "Alternating"                          ; * (  1 byte )
#endif
      injOpen         = scalar,  U08,    612,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
#if MS2_SEQ
      injPwmT         = scalar,  U08,    613,             "msec",     0.10000,   0.00000,  25.5,   25.50,      1 ; * (  1 byte )
      injPwmPd        = scalar,  U08,    614,             "µsec",     1.00000,   0.00000, 40.00,  100.00,      0 ; * (  1 byte )
      injPwmP         = scalar,  U08,    615,             "%",        1.00000,   0.00000, 100.0,  100.00,      0 ; * (  1 byte )
#else
      injPwmT         = scalar,  U08,    613,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
      injPwmPd        = scalar,  U08,    614,             "µsec",     1.00000,   0.00000, 40.00,  100.00,      0 ; * (  1 byte )
      injPwmP         = scalar,  U08,    615,             "%",        1.00000,   0.00000,  0.00,  100.00,      0 ; * (  1 byte)
#endif
      battFac         = scalar,  U08,    616,             "ms/v",     0.0166667, 0.00000,  0.00,    1.00,      2 ; * (  1 byte )
#if MS2_SEQ
      twoStroke       = bits,    U08,    617,      [0:0], "Four-stroke",    "INVALID"                            ; *
      injType         = bits,    U08,    618,      [0:0], "Port Injection", "INVALID"                            ; *
#else
      twoStroke       = bits,    U08,    617,      [0:0], "Four-stroke",    "Two-stroke"                         ; *
      injType         = bits,    U08,    618,      [0:0], "Port Injection", "Throttle Body"                      ; *
#endif
      nInjectors      = bits,    U08,    619,      [0:4], "INVALID"                                              ; *
      OddAng          = scalar,  S16,    620,      "degrees",         0.10000,   0.00000,-700.0,  700.00,      1
      rpmLF           = scalar,  U08,    622,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      mapLF           = scalar,  U08,    623,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      tpsLF           = scalar,  U08,    624,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      egoLF           = scalar,  U08,    625,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      adcLF           = scalar,  U08,    626,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      knkLF           = scalar,  U08,    627,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      AMCOption       = bits,    U08,    628,      [0:1], "Disabled", "RAM Update", "FLASH Update", "INVALID"    ; * (  1 byte ) 
      dualTable       = bits,    U08,    629,      [0:1], "Use First VE, Afrtgt Table", "Dual Tables (for each Inj Bank)","Use Second VE, Afrtgt Table","INVALID"  ; *
      algorithm       = bits,    U08,    630,      [0:1], "Speed Density", "Blend SD/AlphaN, PW=--f(tps)xVE(tps,rpm)", "Blend SD/AlphaN, PW=--VE(tps,rpm)", "INVALID" ; *
      alphDir         = bits,    U08,    630,      [4:4],   "Use Above", "Invert Above"                          ; *
      alpha_baro_spkadv = scalar, U08,   631,             "deg/kPa",  0.01000,   0.00000,  0.00,  255.00,      2 ; * (  1 byte )
      AfrAlpha        = scalar,  U08,    632,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; U (  1 byte ) UNUSED
      NBVStoich       = scalar,  U08,    633,             "Volts",    0.01000,   0.00000,  0.00,    7.00,      3 ; * (  1 byte )
      alpha_lorpm     = scalar,  S16,    634,             "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
      alpha_hirpm     = scalar,  S16,    636,             "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
      alphaMAPtable   = array ,  S16,    638,    [ 6x 6], "kPa",      0.10000,   0.00000,  0.00,  200.00,      1 ; * ( 72 bytes)
      amap_tps        = array ,  S16,    710,    [    6], "%",        0.10000,   0.00000,   0.0,  100.00,      1 ; * ( 12 bytes)
      amap_rpm        = array ,  U16,    722,    [    6], "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * ( 12 bytes)
      baud            = scalar,  U32,    734,             "",         1.00000,   0.00000,9600.0,115200.0,      0 ; x (  4 bytes)
      MAPOXLimit      = scalar,  S16,    738,             "kPa",      0.10000,   0.00000,  0.00,  300.00,      2 ; * (  2 bytes)
      board_type      = scalar,  U08,    740,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      mycan_id        = scalar,  U08,    741,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )               
      fet_delay       = scalar,  U08,    742,             "µsec",     1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      vr_delay        = scalar,  U08,    743, "µsec/1000rpm",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )   
#if MS2_SEQ
      ECUType         = scalar,  U08,    744, "1=MS-II, 2=MicroSquirt, 3=Sequencer",   1.00000,   0.00000,  3.00,    3.00,  0 ; * (  1 byte )
#else
      ECUType         = scalar,  U08,    744, "1=MS-II, 2=MicroSquirt, 3=Sequencer",   1.00000,   0.00000,  0.00,    9.00,  0 ; * (  1 byte )
#endif
      MapThreshXTD2   = scalar,  U08,    745,    "-kpa/sec",          1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )

#if n2o
      n2oEnrich       = scalar,  U08,    746,             "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
#else
      pwImpulse       = scalar,  U08,    746,             "msec",     0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte )
#endif

      impulseSec      = scalar,  U08,    747,             "sec",      1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      nImpulse        = scalar,  U08,    748,             "",         1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      airdotSample    = scalar,  U08,    749,             "msec",     1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      tpsdotSample    = scalar,  U08,    750,             "msec",     1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte ) 
      ASEHot          =   bits,  U08,    751,      [0:0], "Disable ASE on Hot Start", "Enable ASE on Hot Start"
      ;pad            = scalar,  U08,    752,             "%",        1.00000,   0.00000,  0.00,  99.00,       0 ; * (  1 byte ) 
      MapThreshXTD    = scalar,  U08,    753,             "-kpa/sec", 1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      MapThreshXTA    = scalar,  U08,    754,             "kpa/sec",  1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      trendmapLimit   = scalar,  U08,    755,             "kpa",      1.00000,   0.00000,  0.00,  255.00,      0 ; * (  1 byte )
      ; Port Settings constants
      psEnabled       = array ,  U08,    756,    [    7], "on/off",   1.00000,   0.00000,   0.00,    1.00,     0 ; * (  2 bytes)
      psCondition     = array ,  U08,    763,    [  7x2], "",         1.00000,   0.00000,-128.00,  127.00,     0 ; * (  2 bytes)
      psConnector     = array ,  U08,    777,    [    7], "",         1.00000,   0.00000,-128.00,  127.00,     0 ; * (  2 bytes)
      psInitValue     = array ,  U08,    784,    [    7], "",         1.00000,   0.00000,-128.00,  127.00,     0 ; * (  2 bytes)
      psPortValue     = array ,  U08,    791,    [    7], "",         1.00000,   0.00000,-128.00,  127.00,     0 ; * (  2 bytes)
      psOutSize       = array ,  U08,    798,    [  7x2], "",         1.00000,   0.00000,-128.00,  127.00,     0 ; * (  2 bytes)
      psOutOffset     = array ,  U16,    812,    [  7x2], "",         1.00000,   0.00000,-128.00,  127.00,     0 ; * (  2 bytes)
      psThreshold     = array ,  U16,    840,    [  7x2], "",         1.00000,   0.00000,-32768.0,32767.0,     0 ; * (  4 bytes)
      psHysteresis    = array ,  U16,    868,    [  7x2], "",         1.00000,   0.00000,-32768.0,32767.0,     0 ; * (  4 bytes)
      aeTaperTime     = scalar,  U08,    896,             "sec",      0.10000,   0.00000,  0.00,   25.50,      1 ; * (  1 byte)
      AFRMult         = bits,    U08,    897,      [0:1], "Use Combined VE/AFR table", "Separate VE & AFR table w/ NB EGO", "Separate VE & AFR table w/ WB EGO", "INVALID"  ; * (  1 byte)
      aeEndPW         = scalar,  S16,    898,             "msec",       0.10000,   0.00000,  0.00, 1000.00,      1 ; *
      egoAlgorithm    = bits  ,  U08,    900,      [0:1], "Simple", "Transport Delay", "PID/Smith Predictor", "INVALID" ; * (  1 byte )
      egoKP           = scalar,  U08,    901,             "%",        1.00000,   0.00000,  0.00,  100.00,      0 ; * (  1 byte )
      egoKI           = scalar,  U08,    902,             "%",        1.00000,   0.00000,  0.00,  100.00,      0 ; * (  1 byte )
      egoKD           = scalar,  U08,    903,             "%",        1.00000,   0.00000,  0.00,  100.00,      0 ; * (  1 byte )
      egoKdelay1      = scalar,  U16,    904,             "msec",     1.00000,   0.00000,  0.00,   65535,      0 ; * (  2 bytes)
      egoKdelay2      = scalar,  U16,    906,             "revs",     1.00000,   0.00000,  0.00,   65535,      0 ; * (  2 bytes)
      flexFuel        = bits  ,  U08,    908,      [0:1], "Disabled", "FlexFuel Sensor", "FlexFuel Switch", "INVALID"  ; * (  1 byte )
      prime_delay     = scalar,  U08,    909,             "sec",      1.00000,   0.00000,  0.00,     255,      0 ; * (  1 byte )
      fuelFreq        = array ,  U08,    910,    [    2], "Hz",       1.00000,   0.00000,  0.00,     255,      0 ; * (  2 bytes)
         fuelFreq0    = scalar,  U08,    910,             "Hz",       1.00000,   0.00000,  0.00,     255,      0
         fuelFreq1    = scalar,  U08,    911,             "Hz",       1.00000,   0.00000,  0.00,     255,      0
      fuelCorr        = array ,  U08,    912,    [    2], "%",        1.00000,   0.00000,  0.00,     255,      0 ; * (  2 bytes)
         fuelCorr0    = scalar,  U08,    912,             "%",        1.00000,   0.00000,  0.00,     255,      0
         fuelCorr1    = scalar,  U08,    913,             "%",        1.00000,   0.00000,  0.00,     255,      0
      AMCstep         = scalar,  U08,    914,             "%",        1.00000,   0.00000,  0.00,     255,      0 ; * (  2 bytes)
      AMCdve          = scalar,  U08,    915,             "%",        1.00000,   0.00000,  0.00,     255,      0 ; * (  2 bytes)
      AMCve_rpm       = scalar,  U16,    916,             "RPM",      1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
      AMCve_map       = scalar,  U16,    918,             "kPa",      0.10000,   0.00000,  0.00,  300.00,      2 ; * (  2 bytes)
      AMCramve_dt     = scalar,  U16,    920,             "sec",      1.0,       0.0,      0.0,   300.0,       0 ; * (  2 bytes)
      AMCT_thresh     = scalar,  U16,    922,             "sec",      1.0,       0.0,      0.0,  1800.0,       0 ; * (  2 bytes)
      AMCupdate_thresh= scalar,  U16,    924,             "events",   1.0,       0.0,      0.0, 30000.0,       0 ; * (  2 bytes)
      CWOption        = bits  ,  U08,    926,      [0:0], "Two-Point", "Table"                                   ; * (  1 byte )
      knkOption       = bits  ,  U08,    927,      [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID"  ; * (  1 byte )
      knkDirection    = bits  ,  U08,    927,      [4:4], "Below threshold", "Above threshold"                   ; *
      knk_maxrtd      = scalar,  U08,    928,             "deg",      0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      knk_step1       = scalar,  U08,    929,             "deg",      0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      knk_step2       = scalar,  U08,    930,             "deg",      0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      knk_trtd        = scalar,  U08,    931,             "sec",      0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      knk_tadv        = scalar,  U08,    932,             "sec",      0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      knk_dtble_adv   = scalar,  U08,    933,             "deg",      0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      knk_ndet        = scalar,  U08,    934,             "knocks",   1.0,       0.0,      0.0,     255,       0 ; * (  1 byte )
     ;pad             = scalar,  U08,    935,
      knk_maxmap      = scalar,  U16,    936,             "kPa",      0.1,       0.0,      0.0,   300.0,       1 ; * (  2 bytes)
      knk_lorpm       = scalar,  U16,    938,             "rpm",      1.0,       0.0,      0.0,   10000,       0 ; * (  2 bytes)
      knk_hirpm       = scalar,  U16,    940,             "rpm",      1.0,       0.0,      0.0,   10000,       0 ; * (  2 bytes)
      knk_rpm         = array ,  U16,    942,    [    6], "rpm",      1.0,       0.0,      0.0,    6000,       0 ; * (  2 bytes)
      knk_thresh      = array ,  U16,    954,    [    6], "v",        0.01,      0.0,      0.0,    5.00,       2 ; * (  2 bytes)
      triggerTeeth    = scalar,  U16,    966,             "teeth",    1.0,       0.0,      0.0,     512,       0 ; * (  2 bytes)
      No_Miss_Teeth   = scalar,  U08,    968,             "teeth",    1.0,       0.0,      0.0,     255,       0 ; * (  1 byte )
#if AUTO_TRIG
#else
      No_Skip_Teeth   = scalar,  U08,    969,             "teeth",    1.0,       0.0,      0.0,     255,       0 ; * (  1 byte )
      Delay_Teeth     = scalar,  U08,    970,             "teeth",    1.0,       0.0,      0.0,     255,       0 ; * (  1 byte )
#endif
      ICISR_tmask     = scalar,  U08,    971,             "msec",     0.1,       0.0,      0.0,    25.5,       1 ; * (  1 byte )
      ICISR_pmask     = scalar,  U08,    972,             "%",        1.0,       0.0,      0.0,     200,       0 ; * (  1 byte )
      injTestMode     = bits  ,  U08,    973,      [0:1], "Normal Mode", "Test Mode", "Repeat Test", "INVALID"   ;   (  1 byte )
      ae_lorpm        = scalar,  U16,    974,             "rpm",      1.0,       0.0,      0.0,   10000,       0 ; * (  2 bytes)
      ae_hirpm        = scalar,  U16,    976,             "rpm",      1.0,       0.0,      0.0,   10000,       0 ; * (  2 bytes)
      fuelSpkDel      = array ,  S16,    978,    [    2], "deg",      0.10000,   0.00000,-45.00,   45.00,      1 ; * (  4 bytes)
         fuelSpkDel0  = scalar,  S16,    978,             "deg",      0.10000,   0.00000,-45.00,   45.00,      1 ;   (  2 bytes)
         fuelSpkDel1  = scalar,  S16,    980,             "deg",      0.10000,   0.00000,-45.00,   45.00,      1 ;   (  2 bytes)
      injTestSqrts    = scalar,  U16,    982,             "squirts",  1,         0,           0,   65000,      0 ;   (  2 bytes)
      injTestPW       = scalar,  U16,    984,             "msec",     0.001,     0,           0,      65,      3 ;   (  2 bytes)
      injTestOffTime  = scalar,  U16,    986,             "msec",     0.1,       0,           0,    6500,      1 ;   (  2 bytes)
      CID             = scalar,  U16,    988,             "cu.in.",   1,         0,           0,     700,      1 ;   (  2 bytes)         
      alpha           = scalar,  U08,    990,             "%",        1.0,       0.0,        50,     150,      0 ; * (  1 byte ) 
      beta            = scalar,  U08,    991,             "%",        1.0,       0.0,       0.0,     100,      0 ; * (  1 byte )
      gamma           = scalar,  U08,    992,             "%",        1.0,       0.0,       0.0,      50,      0 ; * (  1 byte )
      acc_synchk      = bits,    U08,    993,      [0:1], "Check Only at Steady Speed", "Check Accel and Steady Speed", "Check Decel and Steady Speed", "Check Always" ;  (1 byte)      
      tie1_2cyl       = bits,    U08,    994,      [0:0], "Separate Ign1,2", "Tie Ign1,2 together"               ;   (  1 byte )        
      autoTrig        = bits,    U08,    995,      [0:0], "Disable Auto Trigger", "Enable Auto Trigger"          ;   (  1 byte )        
  
;     pageSize =  996

   page = 2
      veTable1        = array ,  U08,      0,    [12x12], "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (144 bytes)
      veTable2        = array ,  U08,    144,    [12x12], "%",        1.00000,   0.00000,  0.00,  255.00,      0 ; * (144 bytes)
      advanceTable    = array ,  S16,    288,    [12x12], "deg",      0.10000,   0.00000,-10.00,   90.00,      1 ; * (288 bytes)
      AMCNBurns       = scalar,  U16,    576,             "burns",    1,         0,           0,   65000,      0 ; x (  2 bytes)
      primePWTable    = array ,  S16,    578,    [   10], "msec",     0.10000,   0.00000,  0.00,  200.00,      1 ; * ( 20 bytes)
      crankPWTable    = array ,  S16,    598,    [   10], "msec",     0.10000,   0.00000,  0.00,   65.00,      1 ; * ( 20 bytes)
      asePctTable     = array ,  S16,    618,    [   10], "%",        1.00000,   0.00000,  0.00,  400.00,      0 ; * (  2 bytes)
      aseCntTable     = array ,  S16,    638,    [   10], "cycles",   1.00000,   0.00000,  0.00, 2500.00,      0 ; * (  2 bytes)
#if CELSIUS
  #if EXPANDED_CLT_TEMP
      matTemps        = array ,  S16,    658,    [    6], "°C",       0.05555,  -320.000,-40.00,  300.00,      1 ; * ( 12 bytes)
  #else
      matTemps        = array ,  S16,    658,    [    6], "°C",       0.05555,  -320.000,-40.00,  150.00,      1 ; * ( 12 bytes)
  #endif
#else
  #if EXPANDED_CLT_TEMP
      matTemps        = array ,  S16,    658,    [    6], "°F",       0.10000,   0.00000,-40.00,  600.00,      1 ;   (  2 bytes)
  #else
      matTemps        = array ,  S16,    658,    [    6], "°F",       0.10000,   0.00000,-40.00,  300.00,      1 ;   (  2 bytes)
  #endif
#endif
      matRetard       = array ,  U08,    670,    [    6], "deg",      0.10000,   0.00000,  0.00,    25.5,      1 ; * (  6 bytes)
      xTauOption      = bits  ,  U08,    676,      [0:1], "Off", "Accel/Decel Only", "AE with WE", "INVALID"        ; * (  1 byte )
      spkN2O          = scalar,  U08,    677,             "deg",      0.10000,   0.00000,  0.00,    25.5,      1 ; * (  1 bytes)
      XAccTable       = array,   U16,    678,     [   5], "%",        0.10000,   0.00000,  0.00,      90,      1 ; * ( 10 bytes)
      TauAccTable     = array,   U16,    688,     [   5], "msec",     1.00000,   0.00000,  2.00,   20000,      0 ; * ( 10 bytes)
      XDecTable       = array,   U16,    698,     [   5], "%",        0.10000,   0.00000,  0.00,      90,      1 ; * ( 10 bytes)
      TauDecTable     = array,   U16,    708,     [   5], "msec",     1.00000,   0.00000,  2.00,   20000,      0 ; * ( 10 bytes)
      XTrpms          = array,   U16,    718,     [   5], "rpm",      1.00000,   0.00000,  0.00,   10000,      0 ; * ( 10 bytes)
      XClt            = array,   U16,    728,     [  10], "%",        1.00000,   0.00000,  0.00,     600,      0 ; * ( 20 bytes)
      TauClt          = array,   U16,    748,     [  10], "%",        1.00000,   0.00000,  0.00,     600,      0 ; * ( 20 bytes)
      ftrim           = array,   S16,    768,     [   8],   "%",      0.10000,   0.00000, -200.0,    200.0,    1 ; * ( 16 bytes)
      strim           = array,   S16,    784,     [   8], "deg",      0.10000,   0.00000, -180.0,    180.0,    1 ; * ( 16 bytes) 
#if AUTO_TRIG
#else
     spark_fuel_offset = scalar,U08,    800,             "cyl",      1.00000,   0.00000,  0.00,       7,      0 ; * (  1 bytes) 
#endif
      seq_ack         = scalar,  U08,    801,                "",      1.00000,   0.00000,  0.00,     255,      0 ; * (  1 bytes) 	  
      nskpCPW         = scalar,  U08,    802,                "",      1.00000,   0.00000,  0.00,     255,      0 ; * (  1 bytes)
      mafLF           = scalar,  U08,    803,              "",        1.00000,   0.00000,  0.00,    6000,      0 ; * (  1 bytes) 
      fRate           = scalar,  U16,    804,             "g/s",      0.00100,   0.00000,  0.00,   60000,      3 ; * ( 2 bytes)
      Vmfld           = scalar,  U16,    806,             "cu.cm.",   1.00000,   0.00000,  0.00,   10000,      1 ; * ( 2 bytes)         
      maf_tlag        = scalar,  U16,    808,             "ms",       0.10000,   0.00000,  0.00,    1000,      1 ; * ( 2 bytes)         
      VOF             = scalar,  U08,    810,             "deg/m",    0.01000,   0.00000,  0.00,    4.00 ,     2 ; * (  1 bytes) 
      CR              = scalar,  U08,    811,             "cr",       0.10000,   0.00000,  1.00,      50,      1 ; * (  1 bytes) 
      VERGMOptn       = bits,    U08,    812,      [0:1], "No VE Res Gas Model", "Calc VE Res Gas Model", "Use VE RGM", "VE RGM x VE Tbl" ; * (  1 byte)
; cpad
      c1rgm           = scalar,  U16,    814,             "",         0.00100,   0.00000,  0.00,   6.000,      3 ; * (  2 bytes)
      c2rgm           = scalar,  U16,    816,             "",         0.00100,   0.00000,  0.00,  12.000,      3 ; * (  2 bytes)
      tachoPW         = scalar,  U08,    818,             "ms",       0.12800,   0.00000,  0.00,    25.5,      1 ; * (  1 bytes)
      tachoDuty       = scalar,  U08,    819,             "%",        1.00000,   0.00000,  0.00,     255,      0 ; * (  1 bytes)
#if AUTO_TRIG
      InjStart        = scalar,  U16,    820,           "deg",        0.10000,   0.00000,  0.00,  719.90,      1 ; * (  2 bytes)       
#else
      InjStart        = scalar,  U16,    820,             "%",        1.00000,   0.00000,  0.00,   99.00,      0 ; * (  2 bytes)       
#endif
      mapSample       = scalar,  U16,    822,           "deg",        0.10000,   0.00000,  0.00,  719.90,      1 ; * (  2 bytes)       
      mafSample       = scalar,  U16,    824,           "deg",        0.10000,   0.00000,  0.00,  719.90,      1 ; * (  2 bytes)       
      AFRStoich       = scalar,  U08,    826,           "afr",        0.10000,   0.00000,  0.00,     255,      1 ; * (  1 byte)
      AFRStoichFF     = scalar,  U08,    827,           "afr",        0.10000,   0.00000,  0.00,     255,      1 ; * (  1 byte)
      RevLimRpm21     = scalar,  S16,    828,            "RPM",       1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
      RevLimRpm22     = scalar,  S16,    830,            "RPM",       1.00000,   0.00000,  0.00,15000.00,      0 ; * (  2 bytes)
      ipada           = array,   U16,    832,    [15],    "",         1.00000,   0.00000,  0.00,     255,      0 ; * ( 34 bytes)
      activate_xrate_0  = bits,  U08,    862,    [0:0],  "N/A",  "msg 0"                                                ; * ( 2 bytes)
      activate_xrate_1  = bits,  U08,    862,    [1:1],  "N/A",  "msg 1"                                                ; * ( 2 bytes)
      activate_xrate_2  = bits,  U08,    862,    [2:2],  "N/A",  "msg 2"                                                ; * ( 2 bytes)
      activate_xrate_3  = bits,  U08,    862,    [3:3],  "N/A",  "msg 3"                                                ; * ( 2 bytes)
      activate_xrate_4  = bits,  U08,    862,    [4:4],  "N/A",  "msg 4"                                                ; * ( 2 bytes)
      activate_xrate_5  = bits,  U08,    862,    [5:5],  "N/A",  "msg 5"                                                ; * ( 2 bytes)
      activate_xrate_6  = bits,  U08,    862,    [6:6],  "N/A",  "msg 6"                                                ; * ( 2 bytes)
      activate_xrate_7  = bits,  U08,    862,    [7:7],  "N/A",  "msg 7"                                                ; * ( 2 bytes)
	  
      ; Supplemental corrections for barometer and IAT.
      baroCorrVals    = array ,  S16,    864,    [    6], "kPa",      0.10000,   0.00000,  80.0,  120.00,      1 ; * ( 24 bytes)
#if CELSIUS
  #if EXPANDED_CLT_TEMP
      matCorrTemps    = array ,  S16,    876,    [    6], "°C",       0.05555,  -320.000,-40.00,  300.00,      1 ; * ( 12 bytes)
  #else
      matCorrTemps    = array ,  S16,    876,    [    6], "°C",       0.05555,  -320.000,-40.00,  150.00,      1 ; * ( 12 bytes)
  #endif
#else
  #if EXPANDED_CLT_TEMP
      matCorrTemps    = array ,  S16,    876,    [    6], "°F",       0.10000,   0.00000,-40.00,  600.00,      1 ;   (  2 bytes)
  #else
      matCorrTemps    = array ,  S16,    876,    [    6], "°F",       0.10000,   0.00000,-40.00,  300.00,      1 ;   (  2 bytes)
  #endif
#endif
      baroCorrDelta   = array ,  S08,    888,    [    6], "%",        1.00000,   0.00000,-100.0,   120.0,      1 ; * (  6 bytes)
      matCorrDelta    = array ,  S08,    894,    [    6], "%",        1.00000,   0.00000,-100.0,   120.0,      1 ; * (  6 bytes)
      MAFFlow         = array ,  U16,    900,    [   12], "gram/sec", 0.01000,   0.00000,  0.00,   650.0,      1 ; * ( 24 bytes)      
      MAFCor          = array ,  U08,    924,    [   12], "%",        1.00000,   0.00000,  0.00,   255.0,      0 ; * ( 12 bytes)   
      MAFRPM1         = scalar,  U16,    936,             "rpm",      1.00000,   0.00000,  0.00,   10000,      0 ; * (  2 bytes)
      MAFRPM2         = scalar,  U16,    938,             "rpm",      1.00000,   0.00000,  0.00,   10000,      0 ; * (  2 bytes)
      MAFDir          = bits  ,  U08,    940,      [0:0], "Use Above", "Invert Above"                            ; * (  1 byte )
      VEIXOptn        = bits  ,  U08,    941,      [0:1], "Use MAP only", "Adjust MAP for Baro", "Use SAE Pid 43 Abs Load", "INVALID"  ; * (  1 byte )
      MatRtdRPMHi     = scalar,  U16,    942,             "rpm",      1.00000,   0.00000,  0.00,   10000,      0 ; * (  2 bytes)  
      MatRtdRPMLo     = scalar,  U16,    944,             "rpm",      1.00000,   0.00000,  0.00,   10000,      0 ; * (  2 bytes)
      FuelAdj         = scalar,  S16,    946,             "%",        0.10000,   0.00000,  0.00,    1000,      1 ; * (  2 bytes)
      SpkAdj          = scalar,  S16,    948,             "deg",      0.10000,   0.00000,  0.00,    1000,      1 ; * (  2 bytes)
      IdleAdj         = scalar,  S16,    950,             "step",     1.00000,   0.00000,  0.00,    1000,      0 ; * (  2 bytes)
      SprAdj          = scalar,  S16,    952,             "",         1.00000,   0.00000,  0.00,    1000,      1 ; * (  2 bytes)

;     pageSize =  954

[Menu]

   ;----------------------------------------------------------------------------
   ;  There are five pre-defined values that may be used to define your menus.
   ;  The first four allow access to the "standard" dialog boxes, the last one
   ;  merely draws a separator (horizontal line) in the menu.
   ;
   ;     std_constants
   ;     std_enrichments
   ;     std_realtime
   ;     std_warmup
   ;     std_accel
   ;
   ;     std_separator
   ;
   ;  Additionally, to support MegaSquirt-II firmware, there are two standard
   ;  dialogs to generate its three embedded tables.  The first of these acts
   ;  like Roger Enns' EasyTherm, but only works for MS-II.  The second one
   ;  generates the internal AFR table required for proper closed loop operation
   ;  in MS-II.  Use these without page numbers, as they will just be ignored
   ;  in any case.
   ;
   ;     std_ms2gentherm
   ;     std_ms2geno2
   ;
   ;  If you use any of the std_constants, std_enrichments or std_warmup
   ;  editors, they may be optionally suffixed with a page number (only
   ;  useful for multi-page code variants), which causes them to edit the
   ;  specified page.  If you leave off the page specifier, they edit logical
   ;  page one as specified in the Constants section.
   ;
   ;  There are four special menu names, which when used append to the standard
   ;  menus of the same name instead of creating a new one.  The menu names
   ;  are "File", "Communications", "Tools" and "Help".
   ;
   ;----------------------------------------------------------------------------

   menuDialog = main
      menu = "Fuel &Set-Up"
         subMenu = generalSettings, "&General"
         subMenu = idleControl,     "I&dle Control",                   0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_port_edit,   "Spare &Port Settings",            0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = can_activate,    "Activate CAN Out Messages",       0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_separator,   ;----------------------------------------------
         subMenu = injChars,        "I&njector Characteristics",       0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_injection,   "Injection &Control",              0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = revLimiter,      "&Rev Limiter",                    0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = aseSettings,     "Start/&After&Start Enrichment" ,  0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = accSettings,     "Acce&l Enrichment Config",        0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = baroCorrection,  "2-Point &Barometric Correction",  0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = flexFuelSettings,"&Flex Fuel",                      0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = egoControl,      "&EGO Control",                    0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}

	menuDialog = main
     menu = "Other Fue&l Set-Up"	
         subMenu = amcSettings,        "Automatic &Mixture Control",   0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}	 
	 subMenu = alphaNOptions,      "&Alpha-N Blending",            0,  { algorithm  > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
	 subMenu = MAFSettings,        "MAP vrs. MAF &Usage",          0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
	 subMenu = samplerate,         "&Sampling and Smoothing",      0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = otherFuel,          "&Other Fuel Settings",         0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
		 
   menuDialog = main
       menu = "&Ignition Set-Up"
         subMenu = ignitionOptions, "&Base Ignition Settings",         0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = dwellSettings,   "D&well Settings",                 0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = tachSettings,   "Tach Signal Settings",             0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = dualmultisparkoptions, "Dual/Multi Spark Options",  0,  { ECUType == 1 || ECUType == 2 || ECUType == 3} 
         subMenu = AdvncdignitionOptions, "&Advanced Ignition Options",0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = knockSettings,  "&Knock Setup",                     0,  { ECUType == 1 || ECUType == 2}		 
         subMenu = knockThresholdCurve, "K&nock Threshold",            0,  { ECUType == 1 || ECUType == 2} 

   menuDialog = main
      menu = "B&asic Tables"

#if MAPbaro
	 subMenu = std_separator    ;----------------------------------------------
         subMenu = veTable1Tbl,     "&VE Table 1 (MAP/Baro)",         0,  { (MAFOption == 0 || MAFOption == 2) && (dualTable < 2) && (flexFuel != 2) && VEIXOptn == 1 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = afrTable1Tbl,    "&AFR Table 1 (MAP/Baro)",        0,  { VEIXOptn == 1 && (dualTable < 2) && (flexFuel != 2) }
         subMenu = veTable2Tbl,     "V&E Table 2 (MAP/baro)",         0,  { (MAFOption == 0 || MAFOption == 2) && (dualTable > 0) && (flexFuel != 2) && VEIXOptn == 1 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = afrTable2Tbl,    "AFR &Table 2 (MAP/Baro)",        0,  { VEIXOptn == 1 && (dualTable > 0) && (flexFuel != 2) }
         subMenu = ignitionTbl,     "&Spark Advance Table (MAP/Baro)",0,  { VEIXOptn == 1  && (ECUType == 1 || ECUType == 2 || ECUType == 3)}

#else
         subMenu = veTable1Tbl,     "VE Table &1 (MAP or PID43)",              0,  { (MAFOption == 0 || MAFOption == 2) && (dualTable < 2) && (flexFuel != 2) && VEIXOptn != 1 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = afrTable1Tbl,    "A&FR Table 1 (MAP or PID43)",             0,  { VEIXOptn != 1 && (dualTable < 2) && (flexFuel != 2) }
         subMenu = veTable2Tbl,     "VE Table &2 (MAP or PID43)",              0,  { (MAFOption == 0 || MAFOption == 2) && (dualTable > 0) && (flexFuel != 2) && VEIXOptn != 1 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = afrTable2Tbl,    "AF&R Table 2 (MAP or PID43)",             0,  { VEIXOptn != 1 && (dualTable > 0) && (flexFuel != 2) }
         subMenu = ignitionTbl,     "S&park Advance Table (MAP or PID43)",     0,  { VEIXOptn != 1  && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
#endif
  
     menuDialog = main
      menu = "Othe&r Tables" 
         subMenu = tempTableBins,   "&Temperature Table Values",      0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = alphaMAPTbl,     "&Alpha-N MAP Table",             0,  { algorithm > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = barometerCorr,   "Barometric &Correction",         0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_separator    ;----------------------------------------------   
         subMenu = primingPW,       "Pri&ming Pulse",                 0,  { CWOption > 0  && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = crankingPW,      "Cra&nking Pulse",                0,  { CWOption > 0  && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = asePct,          "A&SE Percentage",                0,  { CWOption > 0  && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = aseTaper,        "AS&E Taper",                     0,  { CWOption > 0  && (ECUType == 1 || ECUType == 2 || ECUType == 3)}

   menuDialog = veTable1Tbl
      menu = "&Edit Bins"
	 subMenu = fmapTableBins,   "Edit Fuel &MAP Bins"
	 subMenu = frpmTableBins,   "Edit Fuel &RPM Bins"

   menuDialog = veTable2Tbl
      menu = "&Edit Bins"
	 subMenu = fmapTableBins,   "Edit Fuel &MAP Bins"
	 subMenu = frpmTableBins,   "Edit Fuel &RPM Bins"


   menuDialog = ignitionTbl
      menu = "&Edit Bins"
	 subMenu = smapTableBins,   "Edit Spark &MAP Bins"
	 subMenu = srpmTableBins,   "Edit Spark &RPM Bins"		 

   menuDialog = main
      menu = "&Tuning"
         subMenu = std_realtime,    "&Realtime Display",              0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}

#if MAPbaro
         subMenu = std_separator    ;----------------------------------------------
         subMenu = veTable1Map,     "VE &Table 1 (MAP/Baro)",         0, { (MAFOption == 0 || MAFOption == 2) && (dualTable < 2) && (flexFuel != 2) && VEIXOptn == 1} 
         subMenu = veTable2Map,     "VE T&able 2 (MAP/Baro)",         0, { (MAFOption == 0 || MAFOption == 2) && (dualTable > 0) && (flexFuel != 2) && VEIXOptn == 1}
         subMenu = afrTable1Map,    "A&FR Ta&ble 1 (MAP/Baro)",       0, { VEIXOptn == 1 && (dualTable < 2) && (flexFuel != 2)}
         subMenu = afrTable2Map,    "A&FR Tabl&e 2 (MAP/Baro)",       0, { VEIXOptn == 1 && (dualTable > 0) && (flexFuel != 2)}
         subMenu = ignitionMap,     "I&gnition Advance Table (MAP/Baro)",    0, { VEIXOptn == 1}

#else
         subMenu = std_separator    ;----------------------------------------------
         subMenu = veTable1Map,     "VE Table &1 (MAP or PID43)",              0, { (MAFOption == 0 || MAFOption == 2) && (dualTable < 2) && (flexFuel != 2) && VEIXOptn != 1} 
         subMenu = veTable2Map,     "VE Table &2 (MAP or PID43)",              0, { (MAFOption == 0 || MAFOption == 2) && (dualTable > 0) && (flexFuel != 2) && VEIXOptn != 1}
         subMenu = afrTable1Map,    "A&FR Table 1 (MAP or PID43)",             0, { VEIXOptn != 1 && (dualTable < 2) && (flexFuel != 2)}
         subMenu = afrTable2Map,    "AF&R Table 2 (MAP or PID43)",             0, { VEIXOptn != 1 && (dualTable > 0) && (flexFuel != 2)}
         subMenu = ignitionMap,     "&Spark Advance Table (MAP or PID43)",     0, { VEIXOptn != 1}
#endif

         subMenu = std_separator    ;----------------------------------------------
         subMenu = std_warmup,      "&Warmup Wizard",                 0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_accel,       "Acce&leration Wizard",           0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}   

 
   menuDialog = main
       menu = "C&ylinder Trims"   
         subMenu = fueltrim,        "Fuel Trim Percentages",          0, { DualSpkOptn && ((nCylinders <= 2) || (ECUType == 3)) }
         subMenu = sparktrim,       "Spark Trim Degrees",             0, { DualSpkOptn && ((nCylinders <= 2) || (ECUType == 3)) }

   menuDialog = main
       menu = "X-Ta&u Tuning"
         subMenu = XAccTable,       "Puddling Factors (&accel)",      0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = XDecTable,       "Puddling Factors (&decel)",      0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = TauAccTable,     "Time Factors (a&ccel)",          0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = TauDecTable,     "Time Factors (d&ecel)",          0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = XCltTable,       "&X (Puddling) Temp. Corrections",0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}    
         subMenu = TCltTable,       "&Tau (Time) Temp. Corrections",  0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = std_separator    ;---------------------------------------------- 
         subMenu = xTauSettings,    "&MAPdot Settings",               0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}    
         subMenu = XTrpmsdial,      "&RPM Values",                    0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}

   menuDialog = main
       menu = "Oth&er Tuning"
         subMenu = coldAdvance,     "&Cold Advance",                  0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_separator    ;----------------------------------------------
         subMenu = manifoldTempCorr,"I&AT-Based Fuel Correction",     0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = matBasedRetard,  "IAT-&Based Timing Retard",       0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_separator    ;----------------------------------------------	
         subMenu = iacSteps,        "I&dle Steps",                    0, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
         subMenu = ipwBins,         "Idle &PWM Dutycycle",            0, { IdleCtl == 4 }	
         subMenu = std_separator    ;----------------------------------------------
         subMenu = alphaMAPMap,     "Alpha-&N MAP Table",             0, { algorithm > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)} 
         subMenu = std_separator    ;----------------------------------------------
         subMenu = MAFtable1,       "&MAF Correction Table",          0, { MAFOption > 0 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}

   menuDialog = main
      menu = "Tools"
         subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables...",0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_ms2geno2,    "Calibrate &AFR Table...",        0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = mafTableBurner,  "Calibrate &MAF Table...",        0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}         
         subMenu = sensorCal,       "&Sensor Calibration...",         0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
         subMenu = std_trigwiz,     "Tri&gger Wizard...",             0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}
	 subMenu = injector_test,   "&Injector Test Mode",            0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}     
         subMenu = canOutmsgBurner,  "Configure &CAN outmsg...",      0,  { ECUType == 1 || ECUType == 2 || ECUType == 3}         

   menu = "Help"
#if MS2_SEQ
         subMenu = RFhelp,          "Req_Fuel Settings"
         subMenu = seqGeneral,      "Sequencer Info"
#else
         subMenu = helpGeneral,     "&MS-II Info"
#endif
         subMenu = sensorHelp,      "&Sensor Calibration"
         subMenu = burnHelp,        "&Burning Values to ECU"

;-------------------------------------------------------------------------------

[UserDefined]

   dialog = generalSettings, "General Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#sg"
      field = "ECU Type",                 ECUType
      field = "!MUST set ECU Type before editing other values."
      field = "#MS-II = 1"
      field = "#MicroSquirt = 2"
      field = "#Sequencer = 3"
;      field = "Sequencer Acknowledge",    seq_ack,             { ECUType == 3}
      field = "#"	  
      field = "Engine displacement",      CID,                 { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "Manifold displacement",    Vmfld,               { (ECUType == 1 || ECUType == 2 || ECUType == 3) && (MAFOption == 3)}
      field = "Compression Ratio",           CR,               { (ECUType == 1 || ECUType == 2 || ECUType == 3) && (VERGMOptn != 0 && MAFOption != 1)}
      field = "Injector Flow Rate",       fRate,               { (ECUType == 1 || ECUType == 2 || ECUType == 3) && (MAFOption != 0 && MAFOption != 2)}
#if AUTO_TRIG      
       field = "Injection Timing Angle",   InjStart,            { ECUType == 2 || ECUType == 3}
;      field = "Spark/Fuel Offset",        spark_fuel_offset,   { !autoTrig && {ECUType == 2 || ECUType == 3}}
#else
       field = "Injection Timing Delay",   InjStart,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
       field = "!Spark/Fuel Offset",       spark_fuel_offset,   { ECUType == 2 || ECUType == 3}
#endif
;     field = "#System"
;     field = "Temperature Units",        tempUnits,           { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "Dual Table Use",           dualTable,           {flexFuel != 2 && (ECUType == 1 || ECUType == 2 || ECUType == 3)}
      field = "Barometric Correction",    baroCorr,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      #  set X_TAU_VISIBLE
      #if X_TAU_VISIBLE
      field = "X-Tau Usage",              xTauOption,          { ECUType == 1 || ECUType == 2 || ECUType == 3}
      #endif
      field = "Prime, CrankPW, & ASE Tables", CWOption,        { ECUType == 1 || ECUType == 2 || ECUType == 3}

   dialog = samplerate, "Sampling and Smoothing" 
      topicHelp = "http://www.megamanual.com/mt38.htm#ls"	  
      field = "#Input Smoothing Factors (%)"
      field = "MAP Averaging Lag Factor",    mapLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "MAF Averaging Lag Factor",    mafLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "RPM Averaging Lag Factor",    rpmLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "TPS Averaging Lag Factor",    tpsLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "Lambda Averaging Lag Factor", egoLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "CLT/IAT/Battery Lag Factor",  adcLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "Knock Averaging Lag Factor",  knkLF,            { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "#Sampling Rates"
      field = "TPSDOT Sample Rate",          tpsdotSample,     { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "MAP/MAFDOT Min Sample Rate",  airdotSample,     { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "#Sampling Points"
      field = "MAP Sample Point Rel TDCC1",   mapSample,       { ECUType == 1 || ECUType == 2 || ECUType == 3}
      field = "MAF Sample Point Rel TDCC1",   mafSample,       { ECUType == 1 || ECUType == 2 || ECUType == 3}

   dialog = revLimiter, "Rev Limiter"
      topicHelp = "http://www.megamanual.com/mt38.htm#sr"
      field = "Algorithm",                   RevLimOption
      field = "Maximum Retard",              RevLimMaxRtd,     { RevLimOption == 1 }
      field = "Lower Rev Limit",             RevLimRpm1
      field = "Upper Rev Limit",             RevLimRpm2
      field = "Switched Dual Rpm Limits",    RevLimDual
      field = "Lower Switched Rev Limit",    RevLimRpm21       { RevLimDual > 0 }
      field = "Upper Switched Rev Limit",    RevLimRpm22       { RevLimDual > 0 }

   dialog = flexFuelSettings, "Flex Fuel Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#sf"
      field = "Flex Fuel Sensor",           flexFuel
      field = "Frequency (low)",            fuelFreq0,         { flexFuel == 1 }
      field = "Fuel Correction (low)",      fuelCorr0,         { flexFuel == 1 }
      field = "Timing Correction (low)",    fuelSpkDel0,       { flexFuel == 1 }
      field = "Frequency (high)",           fuelFreq1,         { flexFuel == 1 }
      field = "Fuel Correction (high)",     fuelCorr1,         { flexFuel == 1 }
      field = "Timing Correction (high)",   fuelSpkDel1,       { flexFuel == 1 }

   dialog = can_activate, "Activate CAN Out Messages"
      field = "Enable Msg 0",             activate_xrate_0
      field = "Enable Msg 1",             activate_xrate_1
      field = "Enable Msg 2",             activate_xrate_2
      field = "Enable Msg 3",             activate_xrate_3
      field = "Enable Msg 4",             activate_xrate_4
      field = "Enable Msg 5",             activate_xrate_5
      field = "Enable Msg 6",             activate_xrate_6
      field = "Enable Msg 7",             activate_xrate_7
 
   dialog = otherFuel, "Other Fuel Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#lo"	  
      field = "#Engine Start Up"
      field = "Max. Cranking Speed",        crankingRPM,       { 1 }
      field = "TPS for Flood Clear Mode",   floodClear
      field = "#VE Table Adjustments"
      field = "(May have to save MSQ and reload to get to stick)"
      field = "VE/SPK/AFR table index",    VEIXOptn,         { 1 }
      field = "    - For MAP/Baro also set/unset MAPbaro in Properties -"
      field = "    - Must use PID43 for MAF only -"
      field = "Res Gas Model VE Calc",        VERGMOptn,         { MAFOption != 1}
      field = "Valve Overlap Factor",         VOF,               { VERGMOptn > 0 }
      field = "RGM Coeff 1 (Backflow)",      c1rgm,              { VERGMOptn > 0 }
      field = "RGM Coeff 1 (Trapped egr)",   c2rgm,              { VERGMOptn > 0 }
      field = "AFR Table Fuel Calc Usage",  AFRMult,           { 1 }
      field = "AFR Stoich. Ratio",          AFRStoich,         { 1 }
      field = "#Two-Point Prime"
      field = "Prime Pulse Cold PW",        primePulseCold,    { CWOption == 0 }
      field = "Prime Pulse Hot PW",         primePulseHot,     { CWOption == 0 }
      field = "Prime Delay", prime_delay

      field = "#Additional Fuel (switched by E0 low or cyclic)"
#if n2o
      field = "Nitrous Oxide Enrichment",   n2oEnrich
	  field = "Spark Retard When N2O Active", spkN2O
#else 
      field = "Fuel Added to Base PW",      pwImpulse
      field = "#Additional Fuel (cyclic only)"
      field = "Time Between Added Fuel",    impulseSec
      field = "Number of Cycles",           nImpulse
#endif
   
  dialog = aseSettings, "Start/ AfterStart Enrichment Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#ss"

      field = "#Cranking Pulsewidth"
#if MS2_SEQ
      field = "!Crank Pulses",            CPWOption,
#else
      field = "Crank Pulses",            CPWOption,
#endif
      field = "Cold Crank PW",            crankCold,          { CPWOption && CWOption == 0 }
      field = "Hot Crank PW",             crankHot,           { CPWOption && CWOption == 0 }
      field = "Tach Cycles per Squirt",   nskpCPW,            { ECUType == 3 && CPWOption == 2 }
#if MS2_SEQ
      field = "!Red settings require an MS-II reboot!"
#endif
    
      field = "#Hot AfterStart Enrichment"
      field = "ASE Hot Start Enable",    ASEHot

      field = "#Two-Point AfterStart Enrich"
      field = "ASE Cold Percent",        asePctCold,          { CWOption == 0 }
      field = "ASE Hot Percent",         asePctHot,           { CWOption == 0 }
      field = "ASE Cold Count",          aseCountCold,        { CWOption == 0 }
      field = "ASE Hot Count",           aseCountHot,         { CWOption == 0 }
  
  dialog = accSettings, "Accel Enrichment Configuration"
      topicHelp = "http://www.megamanual.com/mt38.htm#sl"
      field = "#AE RPM Scaling (for non-XTau accel)"
      field = "Low RPM Threshold",       ae_lorpm,
      field = "High RPM Threshold",      ae_hirpm,
  
   dialog = baroCorrection, "2-Point Barometric Correction"
      topicHelp = "http://www.megamanual.com/mt38.htm#sb"
      field = "#Barometric Correction"
      field =    "At total vacuum ",     bcor0
      field =    "Rate",                 bcormult

   dialog = xTauSettings, "X-Tau MAPdot Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#um"
      field = "#MAPdot Thresholds for transition to X, Tau Decel Tables"
      field = "Start Transition",  MapThreshXTD
      field = "Finish Transition",  MapThreshXTD2      
      field = "#"
      field = "#MAPdot trending threshhold is the start of"
      field = "#Map Trending for faster AE/ XTau enrichment"
      field = "MAPdot Trending Threshhold",        MapThreshXTA
      field = "Max. MAP added per sample",         trendmapLimit
	  
   dialog = injChars, "Injector Characteristics"
      topicHelp = "http://www.megamanual.com/mt38.htm#sn"
      field = "Injector Open Time",         injOpen
      field = "Battery Voltage Correction", battFac
      field = "PWM Current Limit",          injPwmP,     { ECUType == 1 }
      field = "PWM Time Threshold",         injPwmT,     { ECUType == 1 }
      field = "!Injector PWM Period",       injPwmPd,    { ECUType == 1 }
      field = "!Red settings require an MS-II reboot!"

   dialog = egoControl, "EGO Control"
      topicHelp = "http://www.megamanual.com/mt38.htm#se"
      field = "EGO Sensor Type",           egoType
      field = "NB Stoich Voltage",         NBVStoich,    { egoType == 1 || egoType == 2 || egoType == 5 }
      field = "AFR Stoich Ratio",          AFRStoich,    { egoType > 0 }
      field = "AFR Stoich for 2nd FlexFuel",  AFRStoichFF,    { egoType > 0 && flexFuel > 0}

      field = "Ignition Events per Step",  egoCount,     { (egoType == 1 || egoType == 2 || egoType == 5) || (egoType >  2  && egoAlgorithm == 0)}

      field = "Controller Step Size",      egoDelta,     { egoType == 1 || egoType == 2 || egoType == 5}
      field = "Controller Authority ±",    egoLimit,     { egoType >  0 }
      field = "Active Above Coolant Temp", egoTemp,      { egoType >  0 }
      field = "Active Above RPM",          egoRPM,       { egoType >  0 }
      field = "Active Below TPS",          TPSOXLimit,   { egoType >  0 }
      field = "Active Below MAP",          MAPOXLimit,   { egoType >  0 }

   field = "#WB Controller Settings"
      field = "Algorithm",                 egoAlgorithm, { egoType >  2 && egoType != 5}
      field = "PID Proportional Gain",     egoKP,        { egoType >  2 && egoType != 5 }
      field = "Transport Delay 1",         egoKdelay1,   { egoType >  2 && egoType != 5 && egoAlgorithm > 0 }
      field = "Transport Delay 2",         egoKdelay2,   { egoType >  2 && egoType != 5 && egoAlgorithm > 0 }
      field = "PID Integral",              egoKI,        { egoType >  2 && egoType != 5 && egoAlgorithm > 1 }
      field = "PID Derivative",            egoKD,        { egoType >  2 && egoType != 5 && egoAlgorithm > 1 }
      field = "#" 
      field = "#To stop Closed Loop but not sensor "
      field = "#readings, set 'Active Below MAP' to 0"

   dialog = amcSettings, "Automatic Mixture Control"
      topicHelp = "http://www.megamanual.com/mt38.htm#lm"
      field = "!Must have EGO correction enabled for AMC to operate!"
      field = "Automatic Mixture Control", AMCOption,    { egoType   > 0 }
      field = "Step size",                 AMCstep,      { AMCOption > 0 }
      field = "Minimum VE Change",         AMCdve,       { AMCOption > 0 }
      field = "Vertex Tolerance",          AMCve_rpm,    { AMCOption > 0 }
      field = "Vertex Tolerance",          AMCve_map,    { AMCOption > 0 }
      field = "Table Change Interval",     AMCramve_dt,  { AMCOption > 0 }
      field = "Flash Update Interval",     AMCT_thresh,  { AMCOption > 1 }
      field = "Update After",              AMCupdate_thresh, { AMCOption > 1 }
   
   dialog = alphaNOptions, "Alpha-N Blending"
      topicHelp = "http://www.megamanual.com/mt38.htm#la"
      field = "Low RPM Blend Threshold - AlphaN below",  alpha_lorpm
      field = "High RPM Blend Threshold - SD above",     alpha_hirpm
      field = "Invert above AlphaN/SD blend logic",      alphDir
      field = "Baro Spark Advance (deg/kPa below 100)",  alpha_baro_spkadv

   dialog = ignitionOptions, "Base Ignition Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#ib"
      field = "#General Ignition"
      field = "Trigger Offset",            triggerOffset
      field = "Skip Pulses",               no_skip_pulses
      field = "#Prediction Settings",      
      field = "Predictor Algorithm",       PredOpt
      field = "Alpha",                     alpha,           { PredOpt == 1 }
      field = "Beta",                      beta,            { PredOpt == 1 }
      field = "Gamma",                     gamma,           { PredOpt == 1 }
      field = "#Tach Signal Masking" 
      field = "Time Mask",                 ICISR_tmask
      field = "Percentage Mask",           ICISR_pmask
      field = "#Next-Pulse Tolerance"
      field = "   Cranking",               crankTolerance
      field = "   After-start",            asTolerance
      field = "   Normal Running",         pulseTolerance
      field = "Check Tach Sync Options",   acc_synchk,      { triggerTeeth == 0 }
      field = "!Ignition Input Capture",   ICIgnCapture,    { ICIgnOption != 2 && ICIgnOption != 3 } ; !
      field = "!Cranking Trigger",         ICCrankTrigger,  { ICIgnOption != 2 && ICIgnOption != 3 } ; !
      field = "!Coil Charging Scheme",     ICIgnOption  ; !
      field = "!Spark Output",             spkout_hi_lo,    { ECUType != 3 } ; !

   dialog = dualmultisparkoptions, "#Dual/Multi Spark Ignition Options"
      topicHelp = "http://www.megamanual.com/mt38.htm#ia"
      field = "!Dual/Multi Spark Options",      DualSpkOptn
      field = "!Auto Trigger Calculation",      autoTrig
      field = "!Offset (advance) for Output #2", OddAng
      field = "!Connect Outputs #1, 2",          tie1_2cyl,     { nCylinders == 1 && DualSpkOptn > 1 && DualSpkOptn != 6 || nCylinders == 2 && DualSpkOptn == 4 || DualSpkOptn >= 7 }
      field = "!Red settings require an MS-II reboot!"

   dialog = AdvncdignitionOptions, "Advanced Ignition Options"
      topicHelp = "http://www.megamanual.com/mt38.htm#ia"
      field = "#Trigger Wheel Only (0 is no trigger wheel)"
      field = "#Set only with ENGINE OFF"
      field = "!Trigger Wheel Teeth",          triggerTeeth
      field = "!Missing Teeth",                No_Miss_Teeth,  { triggerTeeth > 0 }
#if AUTO_TRIG
#else
      field = "!Skip Teeth",                   No_Skip_Teeth,  { triggerTeeth > 0 && !autoTrig}
      field = "Delay Teeth",                   Delay_Teeth,    { triggerTeeth > 0 && !autoTrig}
#endif
      field = "Cam Tooth",                     Cam_Tooth
      field = "#IAT-based Spark Retard Limiting Options"       
      field = "Start IAT Retard ",              MatRtdRPMLo
      field = "Full IAT Retard ",               MatRtdRPMHi
      field = "#Signal Delay Parameters"
      field = "FET Ouput Delay",                fet_delay
      field = "VR Input Delay",                 vr_delay     
      field = "!Red settings require an MS-II reboot!"

   dialog = dwellSettings, "Dwell Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#iw"
      field = "Maximum Dwell Duration",        max_coil_dur
      field = "Maximum Spark Duration",        max_spk_dur
      field = "Acceleration Compensation",     dwellAcc
      field = "#Battery Voltage Compensation"
      ; Make this an array2D when available.
      array1D   = "", "Voltage  %INDEX% ", dwellVolts
      array1D   = "", "Duration at Voltage %INDEX% ", dwellDuration

   dialog = tachSettings, "Tach Signal Settings"
;      topicHelp = "http://www.megamanual.com/mt38.htm#??"
      field = "#Generally select one, zero other"
      field = "TachOut Fixed PW",        tachoPW
      field = "Tachout Duty Cycle",      tachoDuty

   dialog = idleControl, "Idle Control"
      topicHelp = "http://www.megamanual.com/mt38.htm#sd"
      field = "!Algorithm",                    IdleCtl
      field = "Fast Idle Temperature",         fastIdleT,    { IdleCtl == 1 }
      field = "Time Step Size",                IACtstep,     { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
      field = "Acceleration Step Size",        IACaccstep,   { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
      field = "Minimum # steps to move",       IACminstep,   { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
      field = "!PWM Frequency",                IACpwm_step,  { IdleCtl == 4 }
      field = "!Start Value (retract)",        IACStart,     { IdleCtl > 1 } ; !
      field = "Cranking Position (extend)",    IACcrankpos,  { IdleCtl > 1 }
      field = "Crank-to-Run Taper Time",       IACcrankxt,   { IdleCtl > 1 }
      field = "Hysteresis",                    IdleHyst,     { IdleCtl >= 1 }
      field = "#Time-Based After Start (extended warm-up)"
      field = "   Cold Temperature",           IACcoldtmp,   { IdleCtl > 1 }
      field = "   Cold Position",              IACcoldpos,   { IdleCtl > 1 }
      field = "   Cold Taper Time",            IACcoldxt,    { IdleCtl > 1 }

   dialog = sensorCal, "Sensor Calibration"
      topicHelp = sensorHelp
      field = "#MAP Sensor (F1 for common values)"
      field =    "Value at 0.0 volts",   map0
      field =    "Value at 5.0 volts",   mapmax
      field = "#Barometer Sensor (usually identical to MAP)"
      field =    "Value at 0.0 volts",   baro0
      field =    "Value at 5.0 volts",   baromax

   dialog = knockSettings, "Knock Sensor Settings"
      topicHelp = "http://www.megamanual.com/mt38.htm#ik"
      field = "Knock Control",        knkOption
      field = "#Detection"
      field = "Threshold Direction",  knkDirection,     { knkOption > 0 }
      field = "knock value at 0V",    knock0
      field = "knock value at 5V",    knockmax
      field = "Knock Count",          knk_ndet,         { knkOption > 0 }
      field = "No Knock Above MAP",   knk_maxmap,       { knkOption > 0 }
      field = "No Knock Below RPM",   knk_lorpm,        { knkOption > 0 }
      field = "No Knock Above RPM",   knk_hirpm,        { knkOption > 0 }
      field = "#Retarding"
      field = "Maximum Retard",       knk_maxrtd,       { knkOption > 0 }
      field = "Retard Check Time",    knk_trtd,         { knkOption > 0 }
      field = "Retard Step Size",     knk_step1,        { knkOption > 0 }
      field = "#Recovery"
      field = "Advance Check Time",   knk_tadv,         { knkOption > 0 }
      field = "Advance Step Size",    knk_step2,        { knkOption > 0 }
      field = "Recovery Advance",     knk_dtble_adv,    { knkOption > 1 }

   dialog = injector_test, "Injector Test Mode"
      topicHelp = "http://www.megamanual.com/mt38.htm#oi"
      field = "!Injector test mode",  injTestMode ; !
      field = "Injector test squirts",  injTestSqrts,    { injTestMode > 0 }
      field = "Injector test PW",  injTestPW,            { injTestMode > 0 }
      field = "Injector test offtime",  injTestOffTime,  { injTestMode > 0 }
      field = "!Reboot to test, set to 'Normal Mode' to reset"

   dialog = frpmTableBins, "RPM Table Bins for Fuel Tables"
      topicHelp="http://www.megamanual.com/mt38.htm#"
      array1D   = "", "Fuel RPM  %INDEX% ", frpm_table
      field = "#Close and re-open Table(s) to see changes"

   dialog = fmapTableBins, "MAP Table Bins for Fuel Table(s)"
      topicHelp="http://www.megamanual.com/mt38.htm#"
      array1D   = "", "Fuel MAP  %INDEX% ", fmap_table
      field = "#Close and re-open Table(s) to see changes"

   dialog = srpmTableBins, "RPM Table Bins for Spark Table"
      topicHelp="http://www.megamanual.com/mt38.htm#"
      array1D   = "", "Spark RPM  %INDEX% ", srpm_table
      field = "#Close and re-open Table(s) to see changes"

   dialog = smapTableBins, "MAP Table Bins for Spark Table"
      topicHelp="http://www.megamanual.com/mt38.htm#"
      array1D   = "", "Spark MAP  %INDEX% ", smap_table
      field = "#Close and re-open Table(s) to see changes"

   dialog = tempTableBins, "Temperature Table Values"
      topicHelp="http://www.megamanual.com/mt38.htm#at"
      array1D   = "", "Temperature  %INDEX% ", tempTable
      
    dialog = XtempTableBins, "X Temperature Correction Values"
      topicHelp="http://www.megamanual.com/mt38.htm#at"
      field = "#Temperature Correction for X Enrichments"
      array1D   = "", "Correction  %INDEX% ", XClt
  
      dialog = TtempTableBins, "Tau Temperature Correction Values"
      topicHelp="http://www.megamanual.com/mt38.htm#at"
      array1D   = "", "Correction  %INDEX% ", TauClt
 
   dialog = XTrpmsdial, "X-Tau RPM Values"
      topicHelp="http://www.megamanual.com/mt38.htm#ur"
      field = "#RPM Bins for X-Tau Enrichments"                                                    
      array1D   = "", "X-Tau RPM  %INDEX% ", XTrpms

   dialog = fueltrim, "Individual Cylinder Fuel Trim (%)"
      topicHelp="http://www.megamanual.com/mt31.htm#yf"                                               
      array1D   = "", "Cylinder  %INDEX% ", ftrim

   dialog = sparktrim, "Individual Cylinder Spark Trim (degrees)"
      topicHelp="http://www.megamanual.com/mt31.htm#ys"                                               
      array1D   = "", "Cylinder  %INDEX% ", strim

   dialog = MAFSettings, "MAF vrs. MAP Usage"
      topicHelp = "http://www.megamanual.com/mt38.htm#lu"
      field = "#See Tables for MAF flow setting"
      field = "Enable MAF Use",             MAFOption
      field = "MAF Pin Configuration", MAFpin,   { MAFOption > 0 }
      field = "MAF Type Configuration", MAFtype, { MAFOption > 0 }
      field = "Note: MAF must NOT be on MAP pin for MAF + MAP."
      field = "Note: MAF MUST be on Knock pin for Freq MAF."
      field = "!Note: MUST reboot to enable changes to above!"
      field = "#MAP MAF Blend Settings"
      field = "MAP Only Below RPM",         MAFRPM1,  { MAFOption == 2 }
      field = "MAF Only Above RPM",         MAFRPM2,  { MAFOption == 2 }
      field = "Invert above MAP/MAF settings",       MAFDir,  { MAFOption == 2 }
      field = "MAF FF Time Lag",           maf_tlag,  { MAFOption > 2 }

      field = "#Viewing MAF in Real Time"
      field = "You can set one of the gauges on the front page to mafGauge"
      field = "to see the MAF in real time. Right click on any gauge and"
      field = "select mafGuage "
	  
   help = burnHelp, "Burning Values to ECU"
      webHelp = "http://www.megamanual.com/mt38.htm"
      text = "Occassionally, you may have trouble getting values to 'stick'"
      text = "in MegaTune. There are a few things you can try if this happens:<br><br>"
      text = "\tHit TAB after entering the value. This forces MegaTune to" 
      text = "recognize the changed value.<br>" 
      text = "\tThen 'Burn to ECU'<br><br>"	
      text = "If that doesn't work:<br><br>"	
      text = "\tChange the value (as above) and immediately save the MSQ file ('File/Save').<br>"
      text = "\tThen reload the file you just saved, and burn it when prompted.<br><br>"
      text = "This forces all the values to be burned to both flash and RAM memory, and"
      text = "should solve the problem."	
 	  
   help = sensorHelp, "Sensor Calibration"
      webHelp = "http://www.megamanual.com/mt38.htm#os"
      text = "MAP Sensor Calibration<br>"
      text = "<br>"
      text = "For the\tMPX4115   use\t10.6 and \t121.7<br>"
      text = "\tMPX4250\t\t10.0\t260.0<br>"
      text = "\tMPXH6300\t1.1\t315.5<br>"
      text = "\tGM 3-BAR\t1.1\t315.5<br>"
      text = "\tMPXH6400\t3.5\t416.5<br>"
      text = "<br>"
      text = "(GM 3-bar data from Dave Hartnell, http://www.not2fast.com/electronics/component_docs/MAP_12223861.pdf)<br>"
      text = "<br>"
      text = "\tSensor type\tvLo\tpLo\tvHi\tpHi\tvRef<br>"
      text = "\tMPX4115 \t0.204 v\t15 kPa\t4.794 v\t115 kPa\t5.100 v<br>"
      text = "\tMPX4250 \t0.204 v\t20 kPa\t4.896 v\t250 kPa\t5.100 v<br>"
      text = "\tMPXH6300\t0.306 v\t20 kPa\t4.913 v\t304 kPa\t5.100 v<br>"
      text = "\tGM 3-BAR\t0.631 v\t40 kPa\t4.914 v\t304 kPa\t5.100 v<br>"
      text = "\tMPXH6400\t0.200 v\t20 kPa\t4.800 v\t400 kPa\t5.000 v<br>"
      text = "<br>"
      text = "In general, use values derived from these equations:<br>"
      text = "<br>"
      text = "\tm = (pHi-pLo)/(vHi-vLo)<br>"
      text = "\tpv1 = pLo - m * vLo<br>"
      text = "\tpv2 = pv1 + m * vRef<br>"
      text = "<br>"
      text = "References:<br>"
      text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf<br>"
      text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPX4250A.pdf<br>"
      text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPXH6300A.pdf<br>"
      text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPXH6400A.pdf<br>"
      text = "<br>"
      text = "Barometer Sensor Calibration<br>"
      text = "<br>"
      text = "If your system has an external barometer sensor, separate from the MAP"
      text = "sensor, then use these values to calibrate it properly.  If you have"
      text = "a standard MS installation, then copy your MAP sensor values here.<br>"
      text = "<br>"
      text = "Barometric Correction Calibration<br>"
      text = "<br>"
      text = "Correction for barometric effects is performed using the linear function below.<br>"
      text = "<br>"
      text = "\tcorrection = correction_0 + (rate * barometer) / 100<br>"
      text = "<br>"
      text = "'At total vacuum' contains the total correction at a barometer reading"
      text = "of 0 kPa (you are on the moon).  The 'Rate' contains the percentage per 100"
      text = "kPa to scale the barometer value.  Using the default values of 147 and -47,"
      text = "we see that for a barometer of 100 kPa, we have 100% correction.<br>"
      text = "<br>"
      text = "\tcorrection = 147 + (-47*100) / 100 = 100%"

   help = RFhelp, "Req_Fuel Help"
      webHelp = "http://www.megamanual.com/seq/"
      text = "To make the ReqFuel and duty cycle values correct"
      text = "it is necessary to set the following parameters:<br>"
      text = "\tinjections per engine cycle = number of cylinders<br>"
      text = "\tinjector staging = Simultaneous<br>"
      text = "\tengine stroke = 4-stroke (2-stroke not yet tested)<br>"
      text = "\tinjection port type = Port Injection<br>"
      text = "\tNumber of injectors = 1 regardless of actual number<br>"
      text = "<br>"
      text = "In addition, the #set MS_SEQ  line must be in the"
      text = "settings.ini file."

   help = helpGeneral, "MS-II General Info"
      webHelp = "http://www.megamanual.com/mt38.htm"
      text = "Al Grippo and Bruce Bowling have created MegaSquirt-II, which"
      text = "is a plug-in daughter card that replaces the 8-bit MC68HC908GP32"
      text = "with a 16-bit MC9S12C64 processor."
      text = "<br>"
      text = "It is basically a plug-in processor card that has the MC9S12C64"
      text = "processor plus support hardware as well as a stepper motor chip,"
      text = "and an ignition module controller.  The embedded code is written"
      text = "in C, rather than assembly language, so it should be more accessible"
      text = "to more programmers (Stephane Carrez has ported GCC to the HC12"
      text = "processor so, although it doesn't use the full 9S12 instruction"
      text = "set, we are able to use his version to write code for the MS-II).<br>"
      text = "<br>"
      text = "For current documentation, click the Web Help button below, or for"
      text = "support questions visit http://www.msefi.com/."

   help = seqGeneral, "MS-II Sequencer Info"
      webHelp = "http://www.megamanual.com/seq/"
      text = "Al Grippo and Bruce Bowling have created the MS-II Sequencer"
      text = "EFI controller, which is purchased fully assembled.<br>"
      text = "The MS-II Sequencer has two 16-bit MC9S12C64 processors.<br>"
      text = "The MS-II Sequencer can provide sequential fuel and"
      text = "ignition control for up to 8 injectors/COP with crank"
      text = "wheel and cam signals<br>"  
      text = "For current documentation, click the Web Help button below, or for"
      text = "support questions visit http://www.microsquirt.com/."  

;-------------------------------------------------------------------------------

[CurveEditor]
   curve = coldAdvance, "Cold Ignition Advance Offset"
      topicHelp   = "http://www.megamanual.com/mt38.htm#ec"
      columnLabel = "Coolant", "Offset"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif 
      yAxis       = -10,  10, 5
      xBins       = tempTable, coolant
      yBins       = cold_adv_table
      gauge       = cltGauge

   curve = iacSteps, "IAC Steps"
      topicHelp   = "http://www.megamanual.com/mt38.htm#ed"
      columnLabel = "Coolant", "IAC Steps"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =   0, 300, 7
      xBins       = tempTable, coolant
      yBins       = iacstepTable
      gauge       = cltGauge

   curve = ipwBins, "PWM Idle Duty Cycle"
      topicHelp   = "http://www.megamanual.com/mt38.htm#ep"
      columnLabel = "Coolant", "Idle PWM"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =   0, 100, 6
      xBins       = tempTable, coolant
      yBins       = ipwmTable
      gauge       = cltGauge

   curve = primingPW, "Priming Pulsewidth"
     topicHelp   = "http://www.megamanual.com/mt38.htm#rm"
      columnLabel = "Coolant", "Prime PW"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =   0,  20, 5
      xBins       = tempTable, coolant
      yBins       = primePWTable
      gauge       = cltGauge

   curve = crankingPW, "Cranking Pulsewidth"
     topicHelp   = "http://www.megamanual.com/mt38.htm#rn"
      columnLabel = "Coolant", "Cranking PW"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =   0,  20, 5
      xBins       = tempTable, coolant
      yBins       = crankPWTable
      gauge       = cltGauge

   curve = asePct, "Afterstart Enrichment Percentage"
     topicHelp   = "http://www.megamanual.com/mt38.htm#rs"
      columnLabel = "Coolant", "Afterstart"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =   0, 100, 6
      xBins       = tempTable, coolant
      yBins       = asePctTable
      gauge       = cltGauge

   curve = aseTaper, "Afterstart Enrichment Taper"
     topicHelp   = "http://www.megamanual.com/mt38.htm#re"
      columnLabel = "Coolant", "Taper"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =   0, 500, 6
      xBins       = tempTable, coolant
      yBins       = aseCntTable
      gauge       = cltGauge

   curve = matBasedRetard, "IAT-Based Spark Timing Retard"
     topicHelp   = "http://www.megamanual.com/mt38.htm#eb"
      columnLabel = "IAT", "Retard"
      xAxis       = 100, 300, 9
      yAxis       =   0,  15, 7
      xBins       = matTemps, mat
      yBins       = matRetard
      gauge       = matGauge

   curve = knockThresholdCurve, "Knock Threshold"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ik"
      columnLabel = "RPM", "Threshold"
      xAxis       =   0, 6000, 7
      yAxis       =   0,  5.0, 6
      xBins       = knk_rpm, rpm
      yBins       = knk_thresh
      gauge       = tachometer

   curve = barometerCorr, "Non-Linear Barometric Correction"
     topicHelp   = "http://www.megamanual.com/mt38.htm#rc"
      columnLabel = "Barometer", "Correction"
      xAxis       =  60, 120, 7
      yAxis       = -30,  30, 7
      xBins       = baroCorrVals, barometer
      yBins       = baroCorrDelta
      gauge       = barometerGauge

   curve = manifoldTempCorr, "Non-Linear IAT (intake air temperature) Fuel Correction"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ea"
      columnLabel = "IAT", "Correction"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =  -30,  30, 7
      xBins       = matCorrTemps, mat
      yBins       = matCorrDelta
      gauge       = matGauge
   
   curve = XAccTable, "X Accel Fuel Correction"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ua"
      columnLabel = "RPM", "Correction"
      xAxis       =    0,  8000, 4
      yAxis       =    0,   120, 4
      xBins       = XTrpms, rpm
      yBins       = XAccTable
      gauge       = xTauGauge1
        
   curve = XDecTable, "X Decel Fuel Correction"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ud"
      columnLabel = "RPM", "Correction"
      xAxis       =    0,  8000, 9
      yAxis       =    0,   120, 9
      xBins       = XTrpms, rpm
      yBins       = XDecTable
      gauge       = xTauGauge1
       
   curve = TauAccTable, "Tau Accel Fuel Correction"
     topicHelp   = "http://www.megamanual.com/mt38.htm#uc"
      columnLabel = "RPM", "time"
      xAxis       =    0,  8000, 9
      yAxis       =    0,  1000, 9
      xBins       = XTrpms, rpm
      yBins       = TauAccTable
      gauge       = xTauGauge1
 
   curve = TauDecTable, "Tau Decel Correction"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ue"
      columnLabel = "RPM", "time"
      xAxis       =    0,  8000, 9
      yAxis       =    0,  1000, 9
      xBins       = XTrpms, rpm
      yBins       = TauDecTable
      gauge       = xTauGauge1 
      
   curve = XCltTable, "X (Puddling) Temp. Correction Factors"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ux"
      columnLabel = "Temperature", "Correction"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =    0,   600, 9
      xBins       = tempTable
      yBins       = XClt
      gauge       = cltGauge 
      
   curve = TCltTable, "Tau (Time) Temp. Correction Factors"
     topicHelp   = "http://www.megamanual.com/mt38.htm#ut"
      columnLabel = "Temperature", "time"
    #if EXPANDED_CLT_TEMP 
      xAxis       = -40, 600, 9
    #else 
      xAxis       = -40, 250, 9
    #endif
      yAxis       =    0,   600, 9
      xBins       = tempTable
      yBins       = TauClt
      gauge       = cltGauge                 

	  
   curve = MAFtable1, "MAF Correction Table (to alter default MAF curve)"
     topicHelp   = "http://www.megamanual.com/mt38.htm#em"
      columnLabel = "MAF Flow", "Correction"
      xAxis       =  0, 300, 11
      yAxis       =  0, 255, 11
      xBins       = MAFFlow, maf
      yBins       = MAFCor
      gauge       = mafGauge
	  
	  
[TableEditor]

#if MAPbaro

   table = veTable1Tbl, veTable1Map, "VE Table 1 (MAP/baro)", 2
     topicHelp   = "http://www.megamanual.com/mt38.htm#a1"
      ;             constant,   variable
      xBins       = frpm_table, rpm,   readonly
      yBins       = fmap_table, kpaix, readonly
      zBins       = veTable1

      upDownLabel = "RICHER", "LEANER"
      gridHeight  = 2.0
      gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.

   table = veTable2Tbl, veTable2Map, "VE Table 2", 2
     topicHelp   = "http://www.megamanual.com/mt38.htm#a1"
      xBins       = frpm_table, rpm,   readonly
      yBins       = fmap_table, kpaix, readonly
      zBins       = veTable2

      upDownLabel = "RICHER", "LEANER"
      gridHeight  = 2.0
      gridOrient  = 250,   0, 340


#else

   ;       table_id,    map3d_id,    "title",      page
   table = veTable1Tbl, veTable1Map, "VE Table 1 (MAP)", 2
     topicHelp   = "http://www.megamanual.com/mt38.htm#a1"
      ;             constant,   variable
      xBins       = frpm_table, rpm,     readonly
      yBins       = fmap_table, kpaix, readonly
      zBins       = veTable1

      upDownLabel = "RICHER", "LEANER"
      gridHeight  = 2.0
      gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.


   table = veTable2Tbl, veTable2Map, "VE Table 2", 2
     topicHelp   = "http://www.megamanual.com/mt38.htm#a1"
      xBins       = frpm_table, rpm,     readonly
      yBins       = fmap_table, kpaix, readonly
      zBins       = veTable2

      upDownLabel = "RICHER", "LEANER"
      gridHeight  = 2.0
      gridOrient  = 250,   0, 340

#endif

#if LAMBDA
   table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
      gridHeight  = 3.0
#else
   table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
      gridHeight  = 1.0
#endif
     topicHelp   = "http://www.megamanual.com/mt38.htm#af"
      xBins       = frpm_table, rpm,     readonly
      yBins       = fmap_table, kpaix, readonly
      zBins       = afrTable1
      upDownLabel = "LEANER", "RICHER"
      gridOrient  = 250,   0, 340

#if LAMBDA
   table = afrTable1Tblix, afrTable1MapIX, "Lambda Table 1", 1
      gridHeight  = 3.0
#else
   table = afrTable1Tblix, afrTable1MapIX, "AFR Table 1", 1
      gridHeight  = 1.0
#endif
     topicHelp   = "http://www.megamanual.com/mt38.htm#af"
      xBins       = frpm_table, rpm,     readonly
      yBins       = fmap_table, kpaix,   readonly
      zBins       = afrTable1
      upDownLabel = "LEANER", "RICHER"
      gridOrient  = 250,   0, 340

#if LAMBDA
   table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
      gridHeight  = 3.0
#else
   table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
      gridHeight  = 1.0
#endif
     topicHelp   = "http://www.megamanual.com/mt38.htm#af"
      xBins       = frpm_table, rpm,     readonly
      yBins       = fmap_table, kpaix, readonly
      zBins       = afrTable2
      upDownLabel = "LEANER", "RICHER"
      gridOrient  = 250,   0, 340

#if LAMBDA
   table = afrTable2Tblix, afrTable2MapIX, "Lambda Table 2", 1
      gridHeight  = 3.0
#else
   table = afrTable2Tblix, afrTable2MapIX, "AFR Table 2", 1
      gridHeight  = 1.0
#endif
     topicHelp   = "http://www.megamanual.com/mt38.htm#af"
      xBins       = frpm_table, rpm,     readonly
      yBins       = fmap_table, kpaix,   readonly
      zBins       = afrTable2
      upDownLabel = "LEANER", "RICHER"
      gridOrient  = 250,   0, 340

   table = ignitionTbl, ignitionMap, "Spark Advance Table", 2
     topicHelp   = "http://www.megamanual.com/mt38.htm#ap"
      xBins       = srpm_table, rpm, readonly
      yBins       = smap_table, kpaix, readonly
      zBins       = advanceTable
      upDownLabel = "ADVANCING", "RETARDING"
      gridHeight  = 3.0
      gridOrient  = 250,   0, 340

   table = alphaMAPTbl, alphaMAPMap, "Alpha-N MAP Table", 1
     topicHelp   = "http://www.megamanual.com/mt38.htm#en"
      xBins       = amap_rpm, rpm
      yBins       = amap_tps, tps
      zBins       = alphaMAPtable
      upDownLabel = "UP", "DOWN"
      gridHeight  = 2.0
      gridOrient  = 250,   0, 340


;-------------------------------------------------------------------------------

[GaugeConfigurations]

   ;-------------------------------------------------------------------------------
   ;  Notes on some of the gauges.
   ;
   ;  The accelEnrichGauge is now a composite of both acceleration enrichment
   ;  and deceleration enleanment numbers.  See the definition of the variable
   ;  accDecEnrich in the OutputChannels section.
   ;
   ;  David Hooke contributed the lambda gauge and associated transfer
   ;  function files.
   ;
   ;  The lambda gauge is the best way (my opinion) to report data from a
   ;  wide band EGO gauge, it standardizes the output irrespective of fuel
   ;  or mix of fuels, so you needn't do any brainwork to know if your 75%
   ;  gasoline and 25% methanol is rich at 10:1 or not.
   ;
   ;  Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
   ;  Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
   ;-------------------------------------------------------------------------------
   ; Define a gauge's characteristics here, then go to a specific layout
   ; block (Tuning or FrontPage) and use the name you've defined here to
   ; display that gauge in a particular position.
   ;
   ; Name  = Case-sensitive, user-defined name for this gauge configuration.
   ; Var   = Case-sensitive name of variable to be displayed, see the
   ;         OutputChannels block in this file for possible values.
   ; Title = Title displayed at the top of the gauge.
   ; Units = Units displayed below value on gauge.
   ; Lo    = Lower scale limit of gauge.
   ; Hi    = Upper scale limit of gauge.
   ; LoD   = Lower limit at which danger color is used for gauge background.
   ; LoW   = Lower limit at which warning color is used.
   ; HiW   = Upper limit at which warning color is used.
   ; HiD   = Upper limit at which danger color is used.
   ; vd    = Decimal places in displayed value
   ; ld    = Label decimal places for display of Lo and Hi, above.

   ;Name               Var            Title                 Units     Lo     Hi     LoD    LoW   HiW   HiD vd ld

   advBucketGauge    = veTuneValue,   "Advance Bucket",     "degrees", 0,    55,    -1,     -1,  999,  999, 1, 1
   advdegGauge       = advance,       "Ignition Advance",   "degrees", 5,    50,    -1,     -1,  999,  999, 1, 1

   IACgauge          = iacstep,       "IAC position",       "steps",   0,   255,    -1,     -1,  999,  999, 0, 0
   dwellGauge        = dwell,         "Dwell",              "mSec",    0,    10,   0.5,    1.0,  6.0,  8.0, 1, 1
;  IAC step == idle pwm, when using pwm idle control.
   PWMIdlegauge      = idleDC,        "Idle PWM%",          "%",       0,   100,    -1,     -1,  999,   90, 0, 0

   accelEnrichGauge  = accDecEnrich,  "Accel Enrich",       "%",       0,   300,   -999,  -999,  999,  999, 0, 0
   accelEnrichPcnt   = accEnrichPcnt, "Accel Enrich",       "%",      50,   150,     -1,    -1,  999,  999, 0, 0
   accelEnrichMS     = accEnrichMS,   "Accel Enrich",    "msec",       0,  25.5,     -1,    -1,  999,  999, 1, 1
   decelEnrichPcnt   = decEnrichPcnt, "Decel Enrich",       "%",      50,   150,     -1,    -1,  999,  999, 0, 0
   decelEnrichMS     = decEnrichMS,   "Decel Enrich",    "msec",   -25.5,   0.0,    -25,   -25,    1,    1, 1, 1

   afr1Gauge         = afr1,          "Air:Fuel Ratio",     "",       10,  19.4,     12,    13,   15,   16, 2, 2
   afr2Gauge         = afr2,          "Air:Fuel Ratio 2",   "",       10,  19.4,     12,    13,   15,   16, 2, 2
   #if NARROW_BAND_EGO
     afrtgt1Gauge    = afrtgt1,       "Target EGO (V)",     "",       0,    1.0,     .2,    .3,   .6,   .8, 2, 2
     afrtgt2Gauge    = afrtgt2,       "Target EGO2 (V)",    "",       0,    1.0,     .2,    .3,   .6,   .8, 2, 2
   #elif LAMBDA
     afrtgt1Gauge    = afrtgt1,       "Target EGO (Lmbda)",     "",       0,    2.0,     .5,    .7,  1.3,  1.5, 2, 2
     afrtgt2Gauge    = afrtgt2,       "Target EGO2 (Lmbda)",    "",       0,    2.0,     .5,    .7,  1.3,  1.5, 2, 2
   #else
     afrtgt1Gauge    = afrtgt1,       "Target AFR",         "",       10,  19.4,     12,    13,   15,   16, 1, 1
     afrtgt2Gauge    = afrtgt2,       "Target AFR2",       "",       10,  19.4,     12,    13,   15,   16, 1, 1
   #endif
   clockGauge        = seconds,       "Clock",              "Seconds", 0,   255,     10,    10,  245,  245, 0, 0
   deadGauge         = deadValue,     "---",                "",        0,     1,     -1,    -1,    2,    2, 0, 0
   dutyCycle1Gauge   = dutyCycle1,    "Duty Cycle 1",       "%",       0,   100,     -1,    -1,   85,   90, 1, 1
   dutyCycle2Gauge   = dutyCycle2,    "Duty Cycle 2",       "%",       0,   100,     -1,    -1,   85,   90, 1, 1
   egoCorrGauge      = egoCorrection, "EGO Correction",     "%",      50,   150,     90,    99,  101,  110, 0, 0
   egoCorrGauge1     = egoCorrection1,"EGO Correction 1",   "%",      50,   150,     90,    99,  101,  110, 0, 0
   egoCorrGauge2     = egoCorrection2,"EGO Correction 2",   "%",      50,   150,     90,    99,  101,  110, 0, 0
   egoGauge          = egoVoltage,    "Exhaust Gas Oxygen", "volts",   0,   1.0,    0.2,   0.3,  0.7,  0.8, 2, 2
   ego2Gauge         = egoVoltage2,   "Exhaust Gas Oxygen2","volts",   0,   1.0,    0.2,   0.3,  0.7,  0.8, 2, 2
   engine            = engine,        "Engine Codes",       "",        0,   127,      0,     0,  127, 127,  0, 0  
   kpaixGauge        = kpaix,         "Table Load Index",    "kPa",     0,   255,      0,    20,  200,  245, 1, 0
   knockGauge        = knockRetard,   "Knock Retard",       "deg",     0,  25.0,     -1,    -1,  5.0, 10.0, 1, 1
   knockVGauge       = knock,         "Knock Volts",        "volts",   0,   5.0,     -1,    -1,  4.0, 5.0,  1, 1
   lambda1Gauge      = lambda1,       "Lambda",             "",      0.5,   1.5,    0.5,   0.7,    2,  1.1, 2, 2
   lambda2Gauge      = lambda2,       "Lambda",             "",      0.5,   1.5,    0.5,   0.7,    2,  1.1, 2, 2

   gammaEnrichGauge  = gammaEnrich,   "Gamma Enrichment",   "%",      50,   150,     -1,    -1,  151,  151, 0, 0
   mapGauge          = map,           "Engine MAP",         "kPa",     0,   255,      0,    20,  200,  245, 1, 0
   
   mafRaw            = mafraw,        "Raw MAF Sensor",      "g/sec",   0,   650,      0,   200,  480,  550, 2, 0
   mafSensor         = mafsensor,     "Corr. MAF Sensor",    "g/sec",   0,   650,      0,   200,  480,  550, 2, 0
   mafGauge          = maf,           "MAF Cyl Air flow",    "g/sec",   0,   650,      0,   200,  480,  550, 2, 0
   mafDOTGauge       = mafDOT,        "MAFDOT",             "g/sec^^2",  -600, 600,   -480, -200,  200, 550, 0, 0   
   mapmafGauge       = mapmaf,        "MAF from MAP",        "g/sec",   0,   650,      0,   200,  480,  550, 1, 0
   mafmapGauge       = mafmap,        "MAP from MAF",        "kPa",     0,   255,      0,    20,  200,  245, 1, 0
   mapDOTGauge       = mapDOT,        "MAPDOT",             "kPa/sec",  -600, 600,    -480, -200,  200, 550, 0, 0   
   barometerGauge    = barometer,     "Barometer",          "kPa",    60,   120,      0,    20,  200,  245, 1, 0
   calcMapGauge      = kpa,           "calcMAP",            "kPa",     0,   255,      0,    20,  200,  245, 1, 0
   pulseWidth1Gauge  = pulseWidth1,   "Pulse Width 1",      "mSec",    0,  25.5,    1.0,   1.2,   20,   25, 3, 1
   pulseWidth2Gauge  = pulseWidth2,   "Pulse Width 2",      "mSec",    0,  25.5,    1.0,   1.2,   20,   25, 3, 1
   tachometer        = rpm,           "Engine Speed",       "RPM",     0,  8000,    300,   500, 5000, 6000, 0, 0
   throttleGauge     = throttle,      "Throttle Position",  "%",       0,   100,     -1,     1,   90,  100, 0, 0
;   timmingErrGauge   = timingErr,     "Timing Error",       "degrees",-10,   10,    -10,    -5,    5,   10, 1, 1 
   deltaTGauge       = deltaT,        "Timing Delta",       "uS",      0, 25000,      0,     0,25000, 25000, 0, 0 
   veBucketGauge     = veTuneValue,   "VE Value",           "%",       0,   120,     -1,    -1,  999,  999, 0, 0
   veGauge           = veCurr1,       "VE Current",         "%",       0,   120,     -1,    -1,  999,  999, 0, 0
   veRGM             = vergm,         "VE Res Gas Model",   "%",       0,   120,     -1,    -1,  999,  999, 0, 0
   veMafMap          = vemafmap,      "VE from maf + map",  "%",       0,   120,     -1,    -1,  999,  999, 0, 0
   voltMeter         = batteryVoltage, "Battery Voltage",    "volts",   7,    21,     9,    10,   16,   17, 2, 2
   warmupEnrichGauge = warmupEnrich,  "Warmup Enrichment",  "%",     100,   150,     -1,    -1,  101,  105, 0, 0
   spare1Gauge       = spare1,        "spare1[0] spk_deg_err",     "",      -30,  30,    -10,  -5, 5,   10, 1, 1
   spare2Gauge       = spare2,        "spare2[1] reset count",     "",       0,  100,       0,    0,  32535,   17, 2, 2
   spare4Gauge       = spare4,        "spare4[3] count",        "",       0,  32535,     0,    0,  32535,   17, 2, 2
   spare5Gauge       = spare5,        "spare5[4] count",        "",       0,  32535,     0,    0,  32535,   17, 2, 2
   spare6Gauge       = spare6,        "spare6[5] count",        "",       0,  32535,     0,    0,  32535,   17, 2, 2
   spare7Gauge       = spare7,        "spare7[6] count",        "",       0,  32535,     0,    0,  32535,   17, 2, 2
   spare8Gauge       = spare8,        "spare8[7] count",        "",       0,  32535,     0,    0,  32535,   17, 2, 2
   spare9Gauge       = spare9,        "spare9[8] count",        "",       0,  32535,     0,    0,  32535,   17, 2, 2
 
 ;  Name               Var            Title                 Units     Lo     Hi     LoD    LoW   HiW   HiD vd ld
   xTauGauge1        = xTauFuelCorr1, "X-Tau Correction1",   "%",       0,   200,     40,    70,  130,  160, 0, 0
   xTauGauge2        = xTauFuelCorr2, "X-Tau Correction2",   "%",       0,   200,     40,    70,  130,  160, 0, 0

#if CELSIUS
  #if EXPANDED_CLT_TEMP
   cltGauge          = coolant,       "Coolant Temp",       "C",     -40,   600,     65,    93,  162,  176, 0, 0
   matGauge          = mat,           "Intake Air Temp",    "C",     -40,   110,    -15,     0,   95,  100, 0, 0
  #else
   cltGauge          = coolant,       "Coolant Temp",       "C",     -40,   120,    -15,     0,   95,  105, 0, 0
   matGauge          = mat,           "Intake Air Temp",    "C",     -40,   110,    -15,     0,   95,  100, 0, 0
  #endif
#else
  #if EXPANDED_CLT_TEMP
   cltGauge          = coolant,       "Coolant Temp",       "°F",    -40,   600,    150,   200,  325,  350, 0, 0
   matGauge          = mat,           "Intake Air Temp",    "°F",    -40,   215,      0,    30,  200,  210, 0, 0
  #else
   cltGauge          = coolant,       "Coolant Temp",       "°F",    -40,   250,      0,    30,  200,  220, 0, 0
   matGauge          = mat,           "Intake Air Temp",    "°F",    -40,   215,      0,    30,  200,  210, 0, 0
  #endif
#endif

   e85Gauge          = fuelCorrection,"E85 Fuel Correction", "%",    100,   200,     99,    99,  164,  170, 0, 0 
   ethanolGas        = fuelComposition, "Ethanol Percentage","%",      0,   100,     -1,    -1,   85,  101, 0, 0
   triggers±         = trig_fix,      "Triggers add/sub",     "",   -200,   200,   -100,   -10,   10,  100, 0, 0
   Synch Stat        = synch,          "Synch Status",        "",      0,     5,      0,     0,    5,    5, 0, 0
   tachCount         = tachCount,     "Number Tach Pulses",   "",      0,  1000,     -1,    -1, 1000, 1000, 0, 0   

;-------------------------------------------------------------------------------

[FrontPage]
#if   NARROW_BAND_EGO
   egoLEDs         =  0.0, 1.0,  0.5 ; Voltage settings.
#elif LAMBDA
   egoLEDs         =  1.5, 0.5,  1.0 ; Lambda settings.
#else
   egoLEDs         = 19.7, 9.7, 14.7 ; Afr settings.
#endif

   ; Gauges are numbered left to right, top to bottom.
   ;
   ;    1  2  3  4
   ;    5  6  7  8

   gauge1 = tachometer
   gauge2 = throttleGauge
   gauge3 = pulseWidth1Gauge
#if   NARROW_BAND_EGO
   gauge4 = egoGauge
#elif LAMBDA
   gauge4 = lambda1Gauge
#else
   gauge4 = afr1Gauge
#endif
   gauge5 = mapGauge
#if IAC_GAUGE
   gauge6 = IACgauge
#elif PWM_GAUGE
   gauge6 = PWMIdlegauge
#else
   gauge6 = matGauge
#endif
   gauge7 = advdegGauge
   gauge8 = dwellGauge


   ;----------------------------------------------------------------------------
   ; Indicators
   ;               expr         off-label          on-label, off-bg, off-fg, on-bg, on-fg
   ;   indicator = { tpsaen }, "Not Accelerating", "AE",     cyan,   white,  red,   black
   ;
   ; Look in the new colorScheme.ini for the basic ones, add more or tell me what to add.

   indicator = { ECUType == 1 || ECUType == 2 || ECUType == 3 }, "SET ECU!!",    "ECU Set",  red, black, white, green
   indicator = { crank              }, "Not Cranking", "Cranking",    white, black, black, white
   indicator = { startw             }, "ASE off",      "ASE ON",         white, black, cyan,   black
   indicator = { warmup             }, "WUE off",      "WUE ON",         white, black, blue, white
   indicator = { tpsaen             }, "Accel Enrich",   "Accel Enrich",   white, black, green, black
   indicator = { tpsden             }, "Decel Cut",      "Decel Cut", white, black, green, black
   indicator = { tps > floodClear && crank }, "Flood clear off", "FLOOD CLEAR ON", white, black, red, black
   indicator = { batteryVoltage < 10.5 }, "Battery OK",  "Battery LOW", green, black, red,   black
   indicator = { port0              },  "Port 0 Off",  "Port 0 On",   white, black, red,   black
   indicator = { ignmode            },  "Wasted Spark", "Sequential", white, black, green,   black

;-------------------------------------------------------------------------------

[RunTime]
   barHysteresis = 2.5 ; Seconds
#if CELSIUS
  #if EXPANDED_CLT_TEMP
   coolantBar    = -40,  300
   matBar        = -40,  100
  #else
   coolantBar    = -40,  100
   matBar        = -40,  100
  #endif
#else
  #if EXPANDED_CLT_TEMP
   coolantBar    = -40,  600
   matBar        = -40,  215
  #else
   coolantBar    = -40,  215
   matBar        = -40,  215
  #endif
#endif

   batteryBar    =   6,   15
   dutyCycleBar  =   0,  100
#if   NARROW_BAND_EGO
   egoBar        = 0.0 ,  1.0
#elif LAMBDA
   egoBar        = 0.5,   1.5
#else
   egoBar        = 9.7,  19.7
#endif
   gammaEBar     =   0,  200
   mapBar        =   0,  255
   pulseWidthBar =   0, 25.5
   rpmBar        =   0, 8000
   throttleBar   =   0,  100

   egoCorrBar    =   0,  200
   baroCorrBar   =   0,  200
   warmupCorrBar =   0,  200
   airdenCorrBar =   0,  200
   veCorrBar     =   0,  200
   accCorrBar    =   0,  100

;-------------------------------------------------------------------------------

[Tuning]
#if   NARROW_BAND_EGO
   egoLEDs         =  0.0, 1.0,  0.5 ; Voltage settings.
#elif LAMBDA
   egoLEDs         =  1.5, 0.5,  1.0 ; Lambda settings.
#else
   egoLEDs         = 19.7, 9.7, 14.7 ; Afr settings.
#endif

;  font            = "Lucida Console", 12
;  font            = "Courier", 14
   spotDepth       =   2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
   cursorDepth     =   2 ; Same as spot depth.

   ; The four radio buttons on the tuning screen select a "page" of six
   ; gauges.  The gauge numbering is the same as the front page, across
   ; then down.
   ;             1  2
   ;             3  4
   ;             5  6
   ;
   ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
   ; gauges 2, 4 and 6).

   gaugeColumns = 2 ; Only 1 or 2 are valid.

   ;              Page 1            Page 2             Page 3            Page 4
   pageButtons  = "&EGO",           "&WUE",            "PW&1",           "PW&2"
   gauge1       = tachometer,       tachometer,        tachometer,       tachometer
   gauge2       = mapGauge,         mapGauge,          mapGauge,         mapGauge
#if   NARROW_BAND_EGO
   gauge3       = egoGauge,         egoGauge,          egoGauge,         egoGauge
#elif LAMBDA
   gauge3       = lambda1Gauge,     lambda1Gauge,      lambda1Gauge,     lambda1Gauge
#else
   gauge3       = afr1Gauge,        afr1Gauge,         afr1Gauge,        afr1Gauge
#endif
   gauge4       = egoCorrGauge,     warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
   gauge5       = veBucketGauge,    veBucketGauge,     veBucketGauge,    veBucketGauge
   gauge6       = accelEnrichGauge, accelEnrichGauge,  dutyCycle1Gauge,  dutyCycle2Gauge

;-------------------------------------------------------------------------------

[AccelerationWizard]
   tpsDotBar = 0, 100
   mapDotBar = 0, 200

;-------------------------------------------------------------------------------

[BurstMode]
   getCommand       = "a\x00\x06"

[OutputChannels]
   deadValue        = { 0 } ; Convenient unchanging value.

   ochBlockSize     = 130
   ochGetCommand    = "a\x00\x06" ; Lower case so we don't get confused.

   seconds          = scalar, U16,    0, "s",     1.000, 0.0
   secl = { seconds % 256 }, "s" ; For runtime screen.
   pulseWidth1      = scalar, U16,    2, "ms",    0.001, 0.0
   pulseWidth2      = scalar, U16,    4, "ms",    0.001, 0.0
   pulseWidth       = { pulseWidth1 }, "ms" ; For runtime screen.

   rpm              = scalar, U16,    6, "RPM",   1.000, 0.0
   advance          = scalar, S16,    8, "deg",   0.100, 0.0

   ; unsigned char squirt,engine,afrtgt1,afrtgt2;    // afrtgt in afr x 10
   squirt           = scalar, U08,   10, "bit", 1.000, 0.0
   ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
   ; inj1:    equ    3       ; 0 = no squirt         1 = squirt
   ; inj2:    equ    5       ; 0 = no squirt         1 = squirt
   ; sched1:  equ    2       ; 0 = nothing scheduled 1 = scheduled to squirt
   ; firing1: equ    0       ; 0 = not squirting     1 = squirting
   ; sched2:  equ    4
   ; firing2: equ    1
   firing1          = bits,   U08,   10, [0:0]
   firing2          = bits,   U08,   10, [1:1]
   sched1           = bits,   U08,   10, [2:2]
   inj1             = bits,   U08,   10, [3:3]
   sched2           = bits,   U08,   10, [4:4]
   inj2             = bits,   U08,   10, [5:5]

   engine           = scalar, U08,   11, "bit",   1.000, 0.0
   ; Engine Operating/Status variables - bit fields for "engine" variable above
   ; ready:   equ    0       ; 0 = engine not ready 1 = ready to run
   ; crank:   equ    1       ; 0 = engine not cranking 1 = engine cranking
   ; startw:  equ    2       ; 0 = not in startup warmup 1 = in warmup enrichment
   ; warmup:  equ    3       ; 0 = not in warmup 1 = in warmup
   ; tpsaen:  equ    4       ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
   ; tpsden:  equ    5       ; 0 = not in deacceleration mode 1 = in deacceleration mode
   ; ignmode: equ    6       ; 0 = wasted spark mode 1= sequential mode (sequencer only)
   ready            = bits,   U08,   11, [0:0]
   crank            = bits,   U08,   11, [1:1]
   startw           = bits,   U08,   11, [2:2]
   warmup           = bits,   U08,   11, [3:3]
   tpsaen           = bits,   U08,   11, [4:4]
   tpsden           = bits,   U08,   11, [5:5]
   ignmode          = bits,   U08,   11, [6:6]
   #if   NARROW_BAND_EGO
     afrtgt1        = scalar, U08,   12, "V",     0.010, 0.0
     afrtgt2        = scalar, U08,   13, "V",     0.010, 0.0
   #elif LAMBDA
     afrtgt1        = scalar, U08,   12, "Lambda",   0.010, 0.0
     afrtgt2        = scalar, U08,   13, "Lambda",   0.010, 0.0
   #else
     afrtgt1        = scalar, U08,   12, "AFR",   0.100, 0.0
     afrtgt2        = scalar, U08,   13, "AFR",   0.100, 0.0
   #endif

   ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
   wbo2_en1         = scalar, U08,   14, "",      1.000, 0.0
   wbo2_en2         = scalar, U08,   15, "",      1.000, 0.0

   ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro   - kpa x 100
   ;                                                // map    - kpa x 10
   ;                                                // mat, clt deg(C/F)x 10
   ;                                                // tps    - % x 10
   ;                                                // batt   - vlts x 10
   ;                                                // ego1,2 - afr x 10
   ;                                                // knock  - volts x 100
   barometer        = scalar, S16,   16, "kPa",   0.100, 0.0
   map              = scalar, S16,   18, "kPa",   0.100, 0.0
#if CELSIUS
   mat              = scalar, S16,   20, "°C",   0.05555, -320.0
   coolant          = scalar, S16,   22, "°C",   0.05555, -320.0
#else
   mat              = scalar, S16,   20, "°F",    0.100, 0.0
   coolant          = scalar, S16,   22, "°F",    0.100, 0.0
#endif
   tps              = scalar, S16,   24, "%",     0.100, 0.0
   tpsADC           = { tps*10.23 }, "ADC" ; Fake for calibrator and file indexing.
   throttle         = { tps }, "%"
   batteryVoltage   = scalar, S16,   26, "v",     0.100, 0.0
   afr1             = scalar, S16,   28, "AFR",   0.100, 0.0
   afr2             = scalar, S16,   30, "AFR",   0.100, 0.0
   lambda1          = { afr1 / 14.7 }, "Lambda"
   lambda2          = { afr2 / 14.7 }, "Lambda"
   knock            = scalar, S16,   32, "v",     0.010, 0.0

   ; egocor1,egocor2,aircor,warmcor,     // all in %
   egoCorrection1   = scalar, S16,   34, "%",     1.000, 0.0
   egoCorrection    = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
   egoCorrection2   = scalar, S16,   36, "%",     1.000, 0.0
   airCorrection    = scalar, S16,   38, "%",     1.000, 0.0
   warmupEnrich     = scalar, S16,   40, "%",     1.000, 0.0

   fuelComposition  = { (fuelCorrection - 100)*1.587 }, % ; works with default sensor values

   ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
   ;                                     // tpsfuelcut - %
   ;                                     // barcor,gammae - %
   accelEnrich      = scalar, S16,   42, "msec",    0.100, 0.0
   tpsfuelcut       = scalar, S16,   44, "%",     1.000, 0.0
   baroCorrection   = scalar, S16,   46, "%",     1.000, 0.0
   gammaEnrich      = scalar, S16,   48, "%",     1.000, 0.0

   ;  vecurr1,vecurr2,iacstep,cold_adv_deg;           // vecurr - %
   ;                                                  // iacstep - steps
   ;                                                  // cold_adv_deg - deg x 10
   veCurr1          = scalar, S16,   50, "%",     1.000, 0.0
   veCurr2          = scalar, S16,   52, "%",     1.000, 0.0
   veCurr           = { veCurr1 }, "%" ; For runtime display.
   iacstep          = scalar, S16,   54, "",      1.000, 0.0
   idleDC           = { iacstep } ; Close enough.
   coldAdvDeg       = scalar, S16,   56, "deg",   0.100, 0.0
   tpsDOT           = scalar, S16,   58, "%/sec",   1.000, 0.0
   mapDOT           = scalar, S16,   60, "kPa/sec", 1.000, 0.0
   dwell            = scalar, S16,   62, "msec",    0.100, 0.0
   maf              = scalar, U16,   64, "g/sec",   0.010, 0.0
   kpa              = scalar, S16,   66, "kPa",   0.100, 0.0 ; Blend of MAP, MAFMAP and TPS, depends on algorithm
   mafDOT           = scalar, S16,   68, "g/sec2",  0.100, 0.0
   fuelCorrection   = scalar, S16,   70, "%",     1.000, 0.0 ; Percent alcohol in fuel.

   portStatus       = scalar, U08,   72, "bit",   1.000, 0.0 ; Spare port status bits
   port0            = bits,   U08,   72, [0:0]
   port1            = bits,   U08,   72, [1:1]
   port2            = bits,   U08,   72, [2:2]
   port3            = bits,   U08,   72, [3:3]
   port4            = bits,   U08,   72, [4:4]
   port5            = bits,   U08,   72, [5:5]
   port6            = bits,   U08,   72, [6:6]

   knockRetard      = scalar, U08,   73, "deg",   0.100, 0.0
   xTauFuelCorr1    = scalar, S16,   74, "%",     1.000, 0.0
   egoV1            = scalar, S16,   76, "Volts", 0.010, 0.0
   egoV2            = scalar, S16,   78, "Volts", 0.010, 0.0
   amcUpdates       = scalar, S16,   80,  "",     1.000, 0.0
   kpaix            = scalar, S16,   82, "kPa",   0.100, 0.0
   xTauFuelCorr2    = scalar, S16,   84, "%",     1.000, 0.0
   vemafmap         = scalar, S16,   86, "%",     0.100, 0.0
   vergm            = scalar, S16,   88, "%",     1.000, 0.0
   mafraw           = scalar, U16,   90, "g/sec", 0.010, 0.0
   mafsensor        = scalar, U16,   92, "g/sec", 0.010, 0.0
   mapmaf           = scalar, U16,   94, "g/sec", 0.010, 0.0
   mafmap           = scalar, S16,   96, "kPa",   0.100, 0.0
   synch            = scalar, U08,   98,  "",     1.000, 0.0 
   spare1           = scalar, S16,  100,  "deg",  0.100, 0.0
   spare2           = scalar, S16,  102,  "",     1.000, 0.0
   trig_fix         = scalar, S16,  104,  "",     1.000, 0.0  
   spare4           = scalar, S16,  106,  "",     1.000, 0.0
   spare5           = scalar, S16,  108,  "",     1.000, 0.0
   spare6           = scalar, S16,  110,  "",     1.000, 0.0
   spare7           = scalar, S16,  112,  "",     1.000, 0.0
   spare8           = scalar, S16,  114,  "",     1.000, 0.0
   spare9           = scalar, S16,  116,  "",     1.000, 0.0
   uspare1          = scalar, U16,  118,  "",     1.000, 0.0
   uspare2          = scalar, U16,  120,  "",     1.000, 0.0
   tachCount        = scalar, U16,  122,  "",     1.000, 0.0
   ospare           = scalar, U08,  124,  "",     1.000, 0.0
   cksum            = scalar, U08,  125,  "",     1.000, 0.0
   deltaT           = scalar, U32,  126,  "uS",   1.000, 0.0 ; Normalized time between trigger pulses,
                                                             ; "fills in" missing teeth.


   accDecEnrich     = { ((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100 }, "%"
   accDecEnrichPcnt = { accelEnrich/pulseWidth1 + (tpsden ? tpsfuelcut : accelEnrich/pulseWidth1*100)      }, "%"
   accEnrichPcnt    = { 100 + (accelEnrich/pulseWidth1*100)  }, "%"
   accEnrichMS      = { accelEnrich                  }, "msec"
   decEnrichPcnt    = { (tpsden ? tpsfuelcut : 100)  }, "%"
   decEnrichMS      = { (tpsfuelcut/100*pulseWidth1)-pulseWidth1   }, "msec"
    
   time             = { timeNow                                        }, "s"
   rpm100           = { rpm / 100.0                                    }

   altDiv1          = { alternate ? 2 : 1                              }
   altDiv2          = { alternate ? 2 : 1                              }

   cycleTime1       = { (60000.0 / (rpm+1)) * (2.0-twoStroke)                }, "ms"
   cycleTime2       = { (60000.0 / (rpm+1)) * (2.0-twoStroke)                }, "ms"

#if MS2_SEQ
   dutyCycle1       = { (100.0 * pulseWidth1) / (cycleTime1 / (2.0-ignmode)) }, "%"
   dutyCycle2       = { (100.0 * pulseWidth2) / (cycleTime2 / (2.0-ignmode)) }, "%"
#else 
   nSquirts1        = { nCylinders/divider                             }
   nSquirts2        = { nCylinders/divider                             }
   dutyCycle1       = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
   dutyCycle2       = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
#endif

#if   NARROW_BAND_EGO
   egoVoltage = { egoV1            }, "V"      ; For LED bars...
   egoVoltage2 = { egoV2            }, "V"      ; For LED bars...
#elif LAMBDA
   egoVoltage = { lambda1          }, "Lambda" ; For LED bars...
#else
   egoVoltage = { afr1             }, "AFR"    ; For LED bars...
   egoVoltage2 = { afr2             }, "AFR"    ; For LED bars...
#endif
;     pageSize =  130

;-------------------------------------------------------------------------------
;--  The entries are saved in the datalog file in the order in which they     --
;--  appear in the list below.                                                --
;--                                                                           --
;--   Channel - Case sensitive name of output channel to be logged.           --
;--   Label   - String written to header line of log.  Be careful             --
;--             about changing these, as programs like MSLVV and              --
;--             MSTweak key off specific column names.                        --
;--   Type    - Data type of output, converted before writing.                --
;--   Format  - C-style output format of data.                                --

[Datalog]
   ;       Channel          Label          Type    Format
   ;       --------------   ----------     -----   ------
   entry = time,            "Time",        float,  "%.3f"
   entry = seconds,         "SecL",        int,    "%d"
   entry = rpm,             "RPM",         int,    "%d"
   entry = map,             "MAP",         float,  "%.1f"
   entry = kpaix,           "Tbl Indx",    float,  "%.1f"
   entry = maf,             "MAF",         float,  "%.2f"
   entry = throttle,        "TP",          float,  "%.1f"
   entry = batteryVoltage,  "vBatt",       float,  "%.2f"

#if   NARROW_BAND_EGO
   entry = egoVoltage,      "O2",          float,  "%.3f"
#elif LAMBDA
   entry = lambda1,         "Lambda",      float,  "%.3f"
#else
   entry = afr1,            "AFR",         float,  "%.2f"
#endif
   entry = mat,             "IAT",         float,  "%.1f"
   entry = coolant,         "CLT",         float,  "%.1f"
   entry = engine,          "Engine",      int,    "%d"

   entry = egoCorrection,   "Gego",        int,    "%d"
   entry = airCorrection,   "Gair",        int,    "%d"
   entry = warmupEnrich,    "Gwarm",       int,    "%d"
   entry = baroCorrection,  "Gbaro",       int,    "%d"
   entry = gammaEnrich,     "Gammae",      int,    "%d"
   entry = accDecEnrich,    "AccelEnrich", int,    "%d"

   entry = veCurr1,         "Gve",         int,    "%d"
   entry = pulseWidth1,     "PW",          float,  "%.3f"
   entry = dutyCycle1,      "DutyCycle1",  float,  "%.1f"

   entry = veCurr2,         "Gve2",        int,    "%d"
   entry = pulseWidth2,     "PW2",         float,  "%.3f"
   entry = dutyCycle2,      "DutyCycle2",  float,  "%.1f"

   entry = advance,         "SparkAdv",    float,  "%.1f"
   entry = knockRetard,     "knockRet",    float,  "%.1f"
   entry = coldAdvDeg,      "ColdAdv",     float,  "%.1f"
   entry = dwell,           "Dwell",       float,  "%.2f"
   entry = tpsDOT,          "tpsDOT",      int,    "%d"
   entry = mapDOT,          "mapDOT",      int,    "%d"
   entry = iacstep,         "IAC",         int,    "%d"
   entry = deltaT,          "deltaT",      float,  "%.0f"
   entry = trig_fix,        "Trigger±",    int,    "%d"
   entry = synch,           "Sync Stat",   int,    "%d"
   entry = tachCount,       "tachCount",   int,    "%d"
   entry = xTauFuelCorr1,   "XTau1",       int,    "%d"
   entry = xTauFuelCorr2,   "XTau2",       int,    "%d"
   entry = mafmap,          "map_frm_maf", float,  "%.1f"
   entry = mapmaf,          "maf_frm_map", float,  "%.1f"
   entry = vemafmap,        "VEmfmp",      float,  "%.1f"
   entry = vergm,           "VErgm",       int,    "%d"
   entry = afrtgt1,         "AFRtrgt1",    float,  "%.2f"
   entry = knock,           "knck-V",      float,  "%.2f"

   
;-------------------------------------------------------------------------------
#if MS2_SEQ
[PortEditor]
    ; map the arrays and supply the labels.
    ; all arrays are expected to be the same length in the first dimension
    ; thus a [ 7] array will be 7 ports in length and expect 7 labels
    ; The second dimension will drive the number of conditions per array.
    ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
    ; a [7x3] will have up to 3 conditions.
    portEditor = std_port_edit, "Output Port Settings"
    ;   topicHelp = "http://www.megamanual.com/mt38.htm#sp"
        ; 1st the array constant, then the labels in the index order.
        enabledPorts = psEnabled, "Green Pin 7(IDL)", "Red Pin 31", "Green Pin 16", "Green Pin 17", "Jumpr IAC1 to IAC2A/B", "Jumpr IAC2 to IAC1A/B", "Red Pin 20"
        outputOffset = psOutOffset
        outputSize   = psOutSize
        operators    = psCondition, "<", "=", ">" ; the actual ASCII value of the operator will be sent to the controller
        hysteresis = psHysteresis
        threshold = psThreshold
        powerOnValue = psInitValue
        triggerValue = psPortValue
        conditionRelationship = psConnector, " ", "|", "&"
#endif

  
;-------------------------------------------------------------------------------

[SettingContextHelp]

; constantName  = "Help Text"

	nCylinders    	= "The number of cylinders in your engine." 
	no_skip_pulses	= "Skip at least this number of tach pulses at startup."
	ICIgnCapture	= "For tach/crank singal, use Falling Edge or Rising Edge"
	ICCrankTrigger	= "While cranking, for spark advance use Calculated or Trigger Return or Trigger Rise"
	ICIgnOption		= "For coil, use Standard Coil Charge or EDIS or EDIS Multispark"
	spkout_hi_lo	= "Spark when Going Low (Normal) or Going High (Inverted) - be sure to read documentation carefully on this!!!"
	max_coil_dur	= "Maximun dwell time for the coil while runnning with nominal voltage (12V)."
	max_spk_dur		= "Time to allow between dwell periods, if enough time is available."
	dwellAcc		= "Dwell increase while accelerating."
	dwellVolts		= "Dwell battery voltage compensation table voltage bins."
	dwellDuration	= "Dwell battery voltage compensation additional dwell time table."
	RevLimOption 	= "For rev limiting, use None or Spark Retard or Fuel Cut"
	RevLimMaxRtd 	= "If using spark retard for rev limiing, the maximum amount of reatrad applied."
	PredOpt	 		= "Last Interval or Alpha-Beta-Gamma Filter"
	crankingRPM		= "RPM below which the cranking algorithm is used, above this rpm, the engine is considered to be running."
	cold_adv_table	= "Timing advance adjustment for cold coolant tempratures."
	triggerOffset	= "The number of degrees between the tach trigger signal and TDC."
	RevLimRpm1		= "Retard: RPM to satrt retarding spark. Fuel Cut: RPM to restore fuel. Soft Fuel Cut: rpm to start fuel cut."
	RevLimRpm2		= "Retard: RPM for full spark retard. Fuel Cut: RPM to cut fuel. Soft Fuel Cut: rpm for complete fuel cut."
	afrTable1		= "Air/Fuel ratio table 1 for EGO feedback (and fuel calc if enabled)."
	afrTable2		= "Air/Fuel ratio table 2 for EGO feedback (and fuel calc if enabled)."
	wueBins			= "Percentage enrichment versus coolant temperature."
	taeBins			= "Accel enrichment added to pulse width versus change in TPS."
	maeBins			= "Accel enrichment added to pulse width versus change in MAP."
	iacstepTable	= "Idle speed controller steps (if stepper) or percent (if PWM) vs temperature."
	ipwmTable		= "Idle speed controller steps (if stepper) or percent (if PWM) vs temperature."
	frpm_table		= "Fuel (VE) table RPM bins."
	srpm_table		= "Spark advance table RPM bins."
	fmap_table		= "Fuel (VE) table MAP bins."
	smap_table		= "Spark advance table MAP bins."
	tempTable		= "Temperature bins for cranking, cold AE and WUE"
	taeRates		= "TPSdot bins used for Accel Enrichment"
	maeRates		= "MAPdot bins used for Accel Enrichment"
	map0			= "MAP value (kPa) at 0 ADC count."
	mapmax			= "MAP value (kPa) at 1023 ADC counts."
	clt0			= "CLT value (kPa) at 0 ADC counts."
	cltmult			= "CLT multiplier value (for cltfactor table)."
	mat0			= "MAT value (kPa) at 0 ADC counts."
	matmult			= "MAT multiplier value (for matfactor table)."
	tpsMin			= "TPS value (kPa) at 0 ADC count."
	tpsMax			= "TPS value (kPa) at 1023 ADC counts"
	batt0			= "vBatt value (kPa) at 0 ADC count."
	battmax			= "vBatt value (kPa) at 1023 ADC counts."
	ego0			= "EGO value (kPa) at 0 ADC counts."
	egomult			= "EGO multiplier value (for egofactor table)."
	baro0			= "Barometric value (kPa) at 0 ADC counts."
	baromax			= "Barometric value (kPa) at 1023 ADC counts."
	bcor0			= "Barometric correction at 0 kPa."
	bcormult		= "Barometric correction slope."
	knock0			= "Knock value (kPa) at 0 ADC counts."
	knockmax		= "Knock value (kPa) at 1023 ADC counts."
	crankTolerance	= "Percentage tolerance for next input pulse while cranking."
	asTolerance		= "Percentage tolerance for next input pulse during after start period."
	pulseTolerance	= "Percentage tolerance for next input pulse while running."
	IdleCtl			= "Idle speed controller type: None or Solenoid or IAC Stepper Moving Only or IAC Stepper Always On or PWM Warmup or 15-Minute IAC"
	IACtstep		= "IAC stepper motor nominal time between steps."
	IACaccstep		= "IAC stepper motor accel/decel step time."
	IACminstep		= "IAC stepper motor minimum step size to move. Must be at least 1."
	IACpwm_step		= "Sets frequency for PWM FIdle solenoid."
	IACStart		= "Number of steps to send at startup to put stepper motor at reference (wide open) position."
	IdleHyst		= "Amount the coolant temperature must move before idle position is changed."
	IACcrankpos		= "IAC position must be open at least this much (steps) while cranking."
	IACcrankxt		= "Number of seconds from end of cranking for IAC pos to blend into coolant dependent position."
	IACcoldtmp		= "When below this temperature, set IAC to IAC cold position."
	IACcoldpos		= "The psoition to set the IAC to when below the Cold temperature."
	IACcoldxt		= "The time over which to interpolate between the Cold Position and the table based values."
	primePulseCold	= "Priming pulse width at minimum temperature in temperature table; 2pt prime."
	primePulseHot	= "Priming pulse width at maximum temperature in temperature table; 2pt prime."
	crankCold		= "Cranking pulse width at minimum temperature in temperautre table."
	crankHot		= "Cranking pulse width at maximum temperature in temperautre table."
	asePctCold		= "After start warmup percent enrichment add-on value at minimum temperature in temperature table."
	asePctHot		= "After start warmup percent enrichment add-on value at maximum temperature in temperature table."
	aseCountCold	= "After start enrichment number of cycles at minimum temperature in temperature table."
	aseCountHot		= "After start enrichment number of cycles at maximum temperature in temperature table."
	taeColdA		= "Cold (-40F) accel added time."
	taeColdM		= "Cold (-40F) accel multiply factor (%)."
	tpsThresh		= "TPSdot threshhold for acc/decel enrichment."
	mapThresh		= "MAPdot threshhold for acc/decel enrichment."
	taeTime			= "Duration for accel enrichment(s)."
	tdePct			= "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel."
	floodClear		= "TPS value for flood clear. No fuel injected if TPS is above this value while cranking."
	TPSOXLimit		= "Maximum TPS value for O2 closed loop active."
	tpsProportion	= "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
	baroCorr		= "Baro Correction options: None or Initial MAP Reading or Two Independent Sensors"
	egoType			= "EGO options: Disabled or Narrow Band or Dual Narrow Band or Single Wide Band or Dual Wide Band"
	egoCount		= "Number of tach pulse counts between EGO corrections to fuel."
	egoDelta		= "Percent step change in fuel for EGO corrections."
	egoLimit		= "Maximum percentage EGO correction can add or subtract from fuel."
	tempUnits		= "Celcius or Fahrenheit for temperasture units."
	MAFOption		= "Mass Air Flow sensor options: no-MAF, MAF-only, MAF/MAP blending, MAF for fuel + MAP for table load."
	MAFpin			= "MAF signal connection options: MAF on MAP pin or MAF on Baro Pin or MAF on Knock Pin"
	DualSpkOptn		= "Dual spark options (Microsquirt): No Dual Spark or Dual Tach Inputs or Falling Cam Sync with Tach or Wheel or Rising Cam Sync with Tach or Wheel or Single Crank Wheel Input or Single Cam Wheel Input or Dual Inputs, Timing from 1 cam tooth or M-0 Wheel w/ Falling Crank Sync or M-0 Wheel w/ Rising Crank Sync"
	fastIdleT		= "Fast idle OFF temperature (idle control = ON/OFF only)."
	egoTemp			= "Minimum coolant temperature before EGO feedback is active."
	egoRPM			= "Minimum RPM before O2 closed loop is active."
	reqFuel			= "Fuel pulsewidth at 100 kPa before any other adjustments."
	divider			= "Divide factor for input tach pulses. Converts number of tach opulse to crank revolutions."
	alternate		= "Option to alternate injector banks: Simultaneous or Alternating"
	injOpen			= "Injector open-close time. I.e. the time when the injector is supposed to be on but is not injecting fuel."
	injPwmT			= "Time after Injector pulse starts to start PWM. Used to limit current flow in low impedance injectors."
	injPwmPd		= "Injector PWM period - keep between 10-25 KHz. Used to limit current flow in low impedance injectors."
	injPwmP			= "Injector PWM duty cycle (in %). Used to limit current flow in low impedance injectors."
	battFac			= "Battery voltage correction factor for fuel pulse width."
	twoStroke		= "Enigne type: Four-stroke or Two-stroke"
	injType			= "Port Injection (one injector for each cylinder) or Throttle Body (injectors shared by cylinders)"
	nInjectors		= "Total number of injectors."
	OddAng			= "Spark advance offset between cylinders/banks for dual spark outputs."
	rpmLF			= "Lag filter coefficient for RPM."
	mapLF			= "Lag filter coefficient for MAP."
	tpsLF			= "Lag filter coefficient for TPS."
	egoLF			= "Lag filter coefficient for EGO."
	adcLF			= "Lag filter coefficient for CLT/MAT/Battery voltage."
	knkLF			= "Lag filter coefficient for knock input."
	AMCOption		= "Automatic Mixture Control Options: Disabled or RAM Update or FLASH Update."
	dualTable		= "Option 1 is to use ve1/afrtgt1 table only. Option 2 is the dual table option - separate VE and AFR tables for each injector bank. Option 3 is to use ve2/afrtgt2 table only."
	algorithm		= "Alpha-N Fuel Calc Algorithm: None, Use MAP/TPS bend, MAP/TPS blend but don't use MAP as a multiplier."
	alphDir			= "Choose whether alphaN used below low rpm or above high rpm."
	alpha_baro_spkadv = "Alpha-N spark retard versus baro factor above 100 kPa."
	AfrAlpha		= "Option to use map,tps(alphaN) blend algorithm for WBO2 AFR."
	AFRStoich		= "Stoichiometric air/fuel ratio for fuel used."
;	AFRStoichNB		= "Stoichiometric voltage for fuel used."
;   AFRStoichWB		= "Stoichiometric air/fuel ratio for fuel used."
	alpha_lorpm		= "Low RPM for alpha-N blending."
	alpha_hirpm		= "High RPM for alpha-N blending."
	alphaMAPtable	= "Table of fabricated MAP values (from [tps,rpm] pairs) to use with VE table to detemrine fuel pulse width."
	amap_tps		= "TPS values for alpha-N to MAP table."
	amap_rpm		= "RPM values for alpha-N to MAP table."
	baud			= "Serial port communications rate (115200 for MS-II/Sequencer)."
	MAPOXLimit		= "Maximum MAP value (kPa) for O2 closed loop."
	board_type		= "This board's type: 1 = MS-II, 4 = MShift/GPIO."
	mycan_id		= "CAN ID for this board. Normally 0 for engine controller."
	fet_delay		= "Delay from time ignition FET line goes active to spark."
	vr_delay		= "Delay of VR sensor from tooth present to 0 crossing."
	ECUType			= "1 for MS-II, 2 for MicroSquirt"
	MapThreshXTD2	= "MAPdot threshhold for the start of the switch from X-Tau Accel to Decel parameters."
	pwImpulse		= "Additional time to be added to normal pulse width at Time between Added Fuel intervals."
	impulseSec		= "Time between squirts to be added to the normal fuel pulsewidth."
	nImpulse		= "Number of injections to be made at Time between Added Fuel intervals."
;   mapdotSample	= "Minimum time between MAP samples to compute MAPdot."
	tpsdotSample	= "Minimum time between TPS samples to compute TPSdot."
	ASEHot			= "ASE on hot restart options: Disable ASE on Hot Start or Enable ASE on Hot Start"
	InjStart		= "Specifies when after tach pulse to start fuel injection. Value in percent of crank angle between tach pulses."
	MapThreshXTD	= "MAPdot threshhold for the start of the switch from X-Tau Accel to Decel parameters."
	MapThreshXTA	= "MAPdot threshhold for the start of MAP Trending for faster AE/XTau enrichment."
	trendmapLimit	= "Maximum amount of change in MAP at any given sample."
	psEnabled		= "Enable/disable spare port use."
	psCondition		= "Spare port condition."
	psConnector		= "Spare port logic WRT other condition."
	psInitValue		= "Spare port initial value (at controller startup)."
	psPortValue		= "Spare port value when conditions are met."
	psOutSize		= "Sapre port hysteresis value (minimum change before spare port status will change)."
	psOutOffset		= "."
	psThreshold		= "."
	psHysteresis	= "."
	aeTaperTime		= "Acceleration enrichment tail-off duration."
	AFRMult			= "Choose whether to use Combined VE/AFR table or Separate VE & AFR table. Combined inclues (AFR Stoich./AFR table) in fuel equation."
	aeEndPW			= "End pulse width of accel enrichment after taper time."
	egoAlgorithm	= "Simple or Transport Delay or PID/Smith Predictor"
	egoKP			= "EGO PID proprotional gain."
	egoKI			= "EGO PID intergral factor."
	egoKD			= "EGO PID derivative factor."
	egoKdelay1		= "Coefficient 1 used to calculate EGO transport: delay = Delay1 + Delay2*120000/(MAP*RPM)."
	egoKdelay2		= "Coefficient 2 used to calculate EGO transport: delay = Delay1 + Delay2*120000/(MAP*RPM)."
	flexFuel		= "Flex fuel option: Option 1 is to disable flex fuel use. Option 2 modifies the fuel pulse width and spark advance based on % alcohol from a sensor. Option 3 is used to switch VE1/2, AFR1/2 tables when flex fuel pin is high or grounded."
	prime_delay		= "After controller start up, wait this long for fuel pump before commanding prime pulse."
	fuelFreq		= "Table of fuel sensor freq(Hz) vs %fuel corr."
	fuelFreq0		= "Table of fuel sensor freq(Hz) vs %fuel corr."
	fuelFreq1		= "Table of fuel sensor freq(Hz) vs %fuel corr."
	fuelCorr		= "Table of fuel sensor freq(Hz) vs %fuel corr."
	fuelCorr0		= "Table of fuel sensor freq(Hz) vs %fuel corr."
	fuelCorr1		= "Table of fuel sensor freq(Hz) vs %fuel corr."
	AMCstep			= "Percentage of AMC correction to be applied when RAM VE table updated."
	AMCdve			= "Minimum AMC correction before it will be applied in burn."
	AMCve_rpm		= "Current RPM must be within this tolerance of a VE table bin before AMC correction is applied."
	AMCve_map		= "Current MAP must be within this tolerance of a VE table bin before AMC correction is applied."
	AMCramve_dt		= "Time the engine must operate with AMC vertex tolerances before AMC correction is applied to that vertex."
	AMCT_thresh		= "Minimum time between flash burns of AMC updated RAM VE table ."
	AMCupdate_thresh= "Minimum number of AMC RAM VE table vertex updates before VE table is burned to flash (made permanent)."
	CWOption		= "Cold warm-up option: Two-Point or Table" 
	knkOption		= "Knock option: Disabled or Safe Mode or Aggressive Mode"
	knkDirection	= "Below threshold or Above threshold"
	knk_maxrtd		= "Maximum total retard when knock occurs."
	knk_step1		= "Ignition retard/advance steps when knock first happens."
	knk_step2		= "Ignition retard/advance steps when knock has stopped."
	knk_trtd		= "Time between knock retard corrections."
	knk_tadv		= "Time between knock advance corrections."
	knk_dtble_adv	= "Change in table advance required to restart advance until knocking or reach table value."
	knk_ndet		= "Number knock signals required for valid detection."
	knk_maxmap		= "No knock retard above this MAP."
	knk_lorpm		= "No knock retard below this RPM."
	knk_hirpm		= "No knock retard above this RPM."
	knk_rpm			= "Table of RPM vs knock threshhold."
	knk_thresh		= "Table of RPM vs knock threshhold."
	triggerTeeth	= "Nominal (include missing) teeth for wheel decoding. (Set to 0 for no wheel decoding)."
	No_Miss_Teeth	= "Number of consecutive missing teeth."
#if AUTO_TRIG
#else
	No_Skip_Teeth	= "Number of teeth (between tach pulses) to be skipped."
	Delay_Teeth		= "Number of teeth to delay after 1st tooth after the missing tooth(s) before 1st tach synch declared."
#endif
	ICISR_tmask		= "Time after tach input capture during which further interrupts are inhibited to mask coil ring or VR noise."
	ICISR_pmask		= "Percentage of time between signals after tach input capture during which further interrupts are inhibited to mask coil ring or VR noise."
	injTestMode		= "Can put controller in injector test mode: chosse from Normal Mode or Test Mode or Repeat Test"
	ae_lorpm		= "RPM at which normal accel enrichment just starts to scale down."
	ae_hirpm		= "RPM at which normal accel enrichment is reduced to 0."
	fuelSpkDel		= "Table of flex fuel sensor frequency vs spark advance correction."
	fuelSpkDel0		= "Table of flex fuel sensor frequency vs spark advance correction."
	fuelSpkDel1		= "Table of flex fuel sensor frequency vs spark advance correction."
	injTestSqrts	= "Number of squirts in test/clean mode."
	injTestPW		= "Pulse width for testing/ cleaning injectors."
	injTestOffTime	= "Time between injector test squirts."
	CID				= "Engine displacement in cubic inches. (61 cubic inches is aprox. 1L = 1000cc)."
	alpha			= "Coefficient for ignition time prediction."
	beta			= "Coefficient for ignition time prediction."
	gamma			= "Coefficient for ignition time prediction."
	acc_synchk		= "Check for tach timing synch options: Check Only at Steady Speed or Check Accel and Steady Speed or Check Decel and Steady Speed or Check Always"	
	veTable1		= "Volumetric efficiency table."
	veTable2		= "Volumetric efficiency table."
	advanceTable	= "Ignition spark advance table."
	AMCNBurns		= "Cumulative number of AMC flash burns. Grabbed from controller when MSQ settings downloaded,."
	primePWTable	= "Prime pulse width table (if not using 2pt.)."
	crankPWTable	= "Cranking pulse width table (if not using 2pt.)."
	asePctTable		= "After Start Enrichment percent table (if not using 2pt.)."
	aseCntTable		= "After Start Enrichment pulse width table (if not using 2pt.)."
	matTemps		= "MAT temperatures for spark retard."
	matRetard		= "Spark retard versus manifold air temperature."
	xTauOption		= "X-Tau accel enrichment options: Off or Accel/Decel Only or Warm-up + Accel/Decel"
	spkN2O			= "Spark retard subtracted from normal advance while N2O is active."
	XAccTable		= "X factor for percent of injected fuel that clings to port wall as function of rpm (during accel)."
	TauAccTable		= "Time constant for fuel puddle dissipation versus RPM (accel)."
	XDecTable		= "X factor for percent of injected fuel that clings to port wall as function of rpm (during decel)."
	TauDecTable		= "Time constant for fuel puddle dissipation versus RPM (decel)."
	XTrpms			= "RPM bin values for X-Tau."
	XClt			= "Coolant temperature bin values for X."
	TauClt			= "Coolant temperature bin values for Tau."
	fRate			= "Steady state fuel flow rate of one injector in grams/second."
	baroCorrVals	= "Barometric pressures for baro correction table."
	matCorrTemps	= "Air temperatures for air density correction table."
	baroCorrDelta	= "Barometric corrections added to base value to correct for varying exhaust size."
	matCorrDelta	= "Air density orrections added to base value to correct for varying MAT sensor location."
	MAFFlow			= "MAF flow bins values for MAF table corrections."
	MAFCor			= "Corrections to MAF factor table for real time tuning/intake mods. 100% = no correction."
	MAFRPM1			= "For blended MAF: Use MAP only below this RPM, unless 'inverted' below."
	MAFRPM2			= "For blended MAF: Use MAF only above this RPM, unless 'inverted' below."
	MAFDir			= "Choose when to use MAF/MAP/blend: Use Above or Invert Above"
	VEIXOptn		= "Choose whether to use (kpa*1000)/baro instead of kpa as the index to VE, AFR, spark advance tables."
	MatRtdRPMHi		= "Full MAT spark retard is applied above this RPM."
	MatRtdRPMLo		= "No MAT spark retard is applied below the this RPM."
	ftrim			= "Fuel individual cylinder trims. For adjustment of rich or lean cylinders."
	strim			= "Spark advance trim by cylinder. To reduce timing on detonation prone cylinders."
#if AUTO_TRIG
#else
	spark_fuel_offset= "Number of cylinders by which to offset fuel timing relative to ignition timing. Between this and pInjStart, can start injection anywhere in the 720 or 360 degree engine cycle."
#endif
	nskpCPW			= "In cranking, if CPWOption >= 2, generate cranking pulses every nskpCPW tach cycles."
	mafLF			= "Lag filter for smoothing the corrected MAF."
	Vmfld			= "Interior volume of intake manifold plus ports."
	maf_tlag		= "MAF sensor lag time constant for cylinder filling."
	VOF				= "Valve Overlap Factor(deg/m) in Fox, Heywood; used to calc VE. Typically 0.5 to 1.5."
	CR				= "Engine's mechanical compression ratio."
	VERGMOptn		= "VE Residual Gas Model options: 0= use VE table; 1= use RGM model to calculate VE (only applies to MAP-only or MAP/MAF blend); 2= same as 1, plus use VErgm for VE; 3= same as 2, but also multiply by tble VE to fine tune."
	c1rgm			= "Coefficient for residual gas model, for backflow, trapped gas terms." 
	c2rgm			= "Coefficient for residual gas model, for backflow, trapped gas terms."
	tachoPW			= "Pulse width for tach output. Set either this or the tach duty cycle to 0. I.e. do not have both active."
	tachoDuty		= "Duty cycle(%) for tach output. Set either this or the tach pulse width to 0. I.e. do not have both active."
	InjStart		= "Fuel pulse start angle, in degress from 0 to 719.9 deg, Setting is relative to TDC for Cylinder #1. Can also be % tach cycle for start of FI if not in autoTrig mode."
	mapSample		= "MAP sample angle, degx10, 0 to 719.9 deg, relative to TDC Cylinder #1. Typically at Intake BDC. Does not presently account for OddAng."
	mafSample		= "MAF sample angle, degx10, 0 to 719.9 deg, relative to TDC Cylinder #1. Can be adjusted to where it best represents ave val over tach interval. Does not presently account for OddAng."
	AFRStoich		= "Stoich air/fuel ratio for fuel used. If AFRMult=1, this input used to normalize afrtgt or afr_table multiplier in fuel pw eq. For FlexFuel it is for gas at min FlexFuel sensor value."
	AFRStoichFF		= "Stoich air/fuel ratio for ethanol at max FlexFuel sensor value."
	tie1_2cyl		= "Option to tie Ign1&Ign2 outputs together either direct at FETs or thru a logic chip, or leave them separate and ignore one. Only applies in dual spark/toothed wheel mode to 1 cylinder engines and 2 cylinder engines with wasted spark."
	autoTrig		= "Use this option to automatically calculate adv_offset, Delay_Teeth, and No_Skip_Teeth from the trigOffset and other inputs. Also automatically calculate pInjStart and spk_fuel_offset from input fuel injection angle relative to T1TDC for Cylinder 1. Use only with DualSpkOptn = 2,3,4,5,7,8."
	airdotSample	= "Minimum time between MAP/MAF samples to compute MAPdot and/or MAFdot. If time between tach pulses is shorter than this specified value, wait for next tach pulse."
	NBVStoich		= "Narrow Band O2 sensor voltage at stoichoimetric exhaust gas mixture (no excess O2)."
	alpha_baro_spkadv = "AlphaN spark advance versus baro factor (deg/baro kPa below 100 kPa)."
	CPWOption		= "Option 1 is no crank pulses. Option 2 send outs cranking pulses as follows: if NOT Sequencer, send simultaneous CPW every tach cycle, then skip divider tach cycles after past crank_rpm and thereafter. If IS Sequencer, send sequnetial CPW every tach cycle, ie, just use CPW as reg PW, but during cranking only. Option 3 is for the for Sequencer only: force simultaneous crank PWs to all cylinders every nskpCPW tach cycles."
	Cam_Tooth		= "With MicroSquirt or Sequncer, DualSpkOptn = 2,3, cam synch can arrive anywhere after Cam_Tooth and before tooth 1 (1st tooth after missing). Set 0 if ECUType < 2 or DualSpkOptn does not equal 2,3. Otherwise set to No_Teeth - Miss_Teeth."


	
